De adders onder het gras
Het vergroten van de pipeline is niet alleen zaligmakend! Om dit te begrijpen moeten we even wat dieper in de werking van de processor kijken: de processor krijgt instructies altijd van te voren aangeleverd en probeert deze in een zo efficiënt mogelijke volgorde te verwerken. Als de processor het even rustig heeft, probeert hij ook alvast op voor te werken. Dit vooruitwerken is in principe niet erg, maar brengt wel het gevaar met zich mee dat men ‘branch misprediction’ noemt. Soms kunnen instructies die de processor wil gaan verwerken namelijk afhangen van een andere instructie die nog niet verwerkt is!
Een voorbeeldje om het duidelijk te maken. Als je een bestand van je harddisk wilt verwijderen zal Windows je eerst vragen of je dat wel echt wilt. De taak die dan uitgevoerd moet worden is afhankelijk van het feit of de gebruiker op de knop ‘JA’ of ‘NEE’ klikt. Dit soort problemen spelen ook op instructie-niveau binnen de processor. Soms is het resultaat van een nog niet helemaal verwerkte instructie bepalend of er met de ene set instructies doorgegaan wordt of met de andere set instructies. Al deze vertakkingen van instructies noemt men ‘branches’, Engels voor ‘takken’. Indien de processor bij een dergelijke dilemma aankomt, zal zo goed mogelijk voorspeld worden welk pad er genomen gaat worden. Het pad met de grootste kans zal alvast verwerkt worden. Vaak wordt er goed gegokt, maar zodra er verkeerd gegokt wordt, komt er een nadeel van een lange pipeline om de hoek kijken. De instructies van de verkeerde branch moeten gestopt worden en de juiste instructies moeten helemaal vanaf het begin van de pipeline gestart worden. Dat duurt bij de lange pipeline van de Pentium 4 minimaal 20 klokslagen eer er weer een zinnig resultaat tevoorschijn komt, terwijl dit bij de Pentium 3 maar 10 klokslagen zou duren! Fouten bij branch prediction zijn dus absoluut fataal voor processors met een lange pipeline!
Vaak komt een misgegokte branch niet voor, maar als het voorkomt, moet er even flink ingeboet worden op de performance. Het zal daarom niemand verbazen dat de IPC (het gemiddeld aantal instructies dat uitgevoerd wordt per klokslag) bij de Pentium 4 lager (!!) is dan bij de Pentium III! Intel geeft aan dat de IPC van de Pentium 4 zo’n 10% a 20% lager is dan bij de Pentium III. Gelukkig weegt het voordeel van de grotere pipeline (veel hogere frequenties) hier een stuk zwaarder dan het nadeel van de grotere pipeline (de ietwat gedaalde IPC), zodat de Pentium 4 gemiddeld genomen zeker sneller is. Bij de benchmarks zullen we verderop zien dat de Pentium 4 bij applicaties waar veel branches voorkomen (office applicaties zijn hier het beste voorbeeld voor) niet zo’n goede performer is. Sta er in ieder geval niet van te kijken dat een fictieve Pentium III op 1.5 GHz (als die zou bestaan) vaak sneller zou zijn dan een Pentium 4 op 1.5 GHz.
Uiteraard heeft Intel er alles aan gedaan om branche mispredictions zo goed mogelijk te voorkomen. Vandaar dat ook de branch prediction logica in de processor behoorlijk is verbeterd. Intel geeft aan dat bij de Pentium 4 niet minder dan 97% van alle vertakkingen goed ingeschat wordt! Bij de Pentium III is dat ongeveer 95%.
Een twee adder onder het gras geldt zolang de Pentium 4 nog niet op minstens de dubbele snelheid van de snelste Pentium III werkt. Het probleem is dat het bij de Pentium 4 langer duurt voordat het resultaat van de eerste instructie uit een rij nieuwe instructies uit de pipeline rolt. Bij een Pentium 4 duurt deze latency (wachttijg) 20 klokslagen van 0,67 ns. (1 / 1,5 GHz), wat neerkomt op 13,3 ns. Bij de snelste Pentium III moeten we 10 klokslagen van 1 ns. (1 / 1 GHz) wachten, 10 ns. dus. Zodra de Pentium 4 op minimaal 2 GHz werkt is de latency bij de nieuwe processor ook 10 ns. of lager en is dit probleem verholpen! Bij de benchmarks verderop zullen we soms zien dat een Pentium III op 1 GHz sneller is dan een Pentium 4 op 1.5 GHz. Dat is met dit verhaal te verklaren. Bij programmatuur waarin veel 'onverwachte' dingen gebeuren, office applicaties bijvoorbeeld weer, kan deze latency de processor parte spelen.