Pfft... typ ik zo'n heel verhaal, en dan 'klopt het wel een beetje'
Maar ik wou nog even toevoegen dat, ironisch genoeg, de Pentium Pro (en dus later PII/PIII en P-M) juist ontworpen was om 'slechte' code goed te laten lopen.
Het probleem was namelijk dat de Pentium dus wel die 2 instructies per clk kon doen... maar dat kon alleen als die 2 instructies niet van elkaar afhankelijk waren.. omdat de pipelines strict synchroon werkten.
Omdat er bij de meeste code geen rekening mee was gehouden (voor 386/486 bestond dit 'probleem' nog helemaal niet), en omdat het lastig bleek om compilers te maken die echt efficiente code konden genereren voor de Pentium, had Intel er dus voor gekozen om dan de processor zelf maar de code te laten uitvoeren in een (redelijk) optimale volgorde... de zogenaamde out-of-order execution dus.
ze hebben goede ideeen maar een hoop werk moet opnieuw gedaan worden. dit betekent echter niet dat het daarom minder goed is. imho is de IA-64/Itanium de beste cpu die de laatste paar jaar is ontworpen. probleem is wel weer dat een hoop software overgezet moet worden en dat gaat niet 1-2-3 helaas. amd springt daar slim op in met zn x86-64 etc. maar je kan de x86 architectuur niet blijven doorontwikkelen. dat heeft intel goed voorzien, nu is het imho wachten op het moment dat x86 gedag wordt gezegd.
Er is hulp uit een andere hoek: .NET/Java.
Met statisch compileren heb je dus twee problemen: ten eerste draait de binary alleen op de instructieset waarvoor ie gecompiled is... en ten tweede is de binary alleen geoptimaliseerd voor de processor waarvoor ie gecompiled is.
Met .NET/Java compileer je dus pas op de machine waarop de code moet draaien. De instructieset is dan niet meer van belang, als er maar een compiler (virtual machine dus) geinstalleerd is. En als je toch gaat compilen, kun je meteen optimaliseren voor de juiste processor.
Het had mooi geweest als .NET nu al redelijk geaccepteerd was. Dan zou alle .NET software meteen draaien op x86, x86-64 en Itanium (en alle andere systemen waarvoor .NET beschikbaar is). Nu wordt de Itanium daar dus de dupe van. Omdat die met x86-compatibiliteit niet kan meekomen met de x86-64, en omdat er nauwelijks native software is, zal ie nooit populair worden, hoe goed de CPU ook is.
En de gebruiker wordt er ook min of meer de dupe van, omdat we nu van alle software 32 bit en 64 bit versies gaan krijgen, wat allemaal onnodige verwarring met zich meebrengt.
Java heb ik al afgeschreven, dat heeft het niet waar kunnen maken, mede door wanbeleid van Sun, als je het mij vraagt (dat gezeur over de MS JVM bijvoorbeeld was het stomste wat ze konden doen... geen standaard Java-ondersteuning in Windows is natuurlijk dodelijk voor het Java platform geweest).
Ik heb er wel vertrouwen in dat Microsoft .NET wel aan de man weet te brengen (niet goedschiks, dan wel kwaadschiks). En misschien krijgen we dan eindelijk een toekomst waarin we vrij onze CPU kunnen kiezen, zonder daarbij na te hoeven denken over het software-aanbod.
Het lijkt me ook wel ideaal als die CPUs eenmaal vrij te kiezen zijn... Dan kunnen er verschillende CPUs ontwikkeld worden, die geoptimaliseerd zijn voor bepaalde taken (media-encoding, servers, etc), zonder dat daarbij concessies aan het ontwerp gedaan hoeven worden door die vervelende x86 instructieset.
In feite is de videokaart-industrie wat dat betreft ver vooruit... Sinds de eeste programmeerbare shaders, hebben ze een dynamische compile-strategie aangehouden. Je programmeert de shaders in een universele meta-taal, en de driver is verantwoordelijk voor het compilen naar de daadwerkelijke hardware. De fabrikant is hier dus vrij om z'n eigen instructieset te maken die ideaal is voor de hardware. En de gebruiker merkt er niets van of hij nou een ATi of een NVIDIA kaart gebruikt... Het compilen en optimaliseren van de shaders is compleet transparant... de gebruiker merkt er niets van, en de software werkt prima.