Nu de 64-bits processors volop hun intrede doen besloot men bij Ars Technica de geschiedenis van de Pentium-cpu, waarvan de eerste versie al in 1993 verscheen, uit de doeken te doen. Toen de naam voor het eerst genoemd werd, vroegen velen zich verbaasd af waarom er niet langer getallen in de naamgeving van de processor voorkwamen. Deze vraag is hedentendage niet meer aan de orde, maar wat wel opvallend blijft, is dat de naam Pentium standhield ondanks verschillende grote aanpassingen in de architectuur. Dit kan vooral uitgelegd worden omwille van marketingtechnische redenen: doorheen de jaren werd 'Pentium' bijna een synoniem voor processor en bij de onwetende massa werd een pc gewoon een Pentium.
De allereerste Pentium-processor die in 1993 geïntroduceerd werd, was zelfs toen niet echt een hoogvlieger wanneer het op prestaties aankwam. Intel had namelijk besloten prestaties, energieverbruik en kosten op te offeren ten voordele van compatibiliteit met de x86-code. Hoewel dit verscheidene problemen met zich meebracht raakten die na verloop van tijd min of meer opgelost en was deze x86-compatibiliteit waarschijnlijk een van de hoofdredenen voor het succes dat deze processor later zou kennen.
De Pentium-processor had in zijn beginjaren twee integer-pipelines, aangeduid met U en V, die beiden uit vijf stappen bestonden. Daarnaast was er een floating-point-pipeline met zes stappen. Alhoewel de front-end kon instaan voor 'dynamic branch prediction' (technologie die bepaalt of een bepaald stuk broncode uitgevoerd zal worden of niet, waardoor de processor minder onnodige instructies moet ophalen), spendeert deze het meeste van zijn tijd aan de compatibiliteit met de x86-architectuur. Over de pipelines wordt overigens nog gezegd dat, hoewel de U en V pijp niet helemaal symmetrisch zijn, ze voldoende prestaties konden bieden voor integer-intensieve applicaties zoals kantoorsoftware. De floating-point-prestaties die bij de 486 nog erbarmelijk waren, stegen bij de Pentium-processor echter nog steeds niet boven een gemiddeld niveau uit. Hierdoor sloeg deze cpu niet aan bij wetenschappelijke gebruikers, maar aangezien games in die tijd nog niet zo'n groot publiek kenden waren deze belabberde floating-point-prestaties geen reden om de processor niet bij het thuispubliek te laten aanslaan
Zoals reeds vermeld waren de integer-pipelines opgebouwd uit vijf stappen:
- Prefetch en fetch: instructies worden opgehaald en in een buffer geplaatst;
- Eerste decodering: instructies worden gedecodeerd naar de interne instructieset van de processor. Op dit moment vindt ook de branch-prediction plaats;
- Tweede decodering: Identiek aan de eerste decodering maar hier gebeurt ook de adresberekening;
- Execute: De hardware voert de nodige instructie uit;
- Write-back: Het resultaat van de berekeningen wordt teruggeschreven;
De tweede decoderingsstap was nodig om de complexe adresseringen af te handelen. Het is dus aan de 'onlogische' adressering van de x86-instructieset te danken dat de pipeline uit vijf in plaats van vier stappen bestaat, aldus Ars Technica. Samen met het feit dat dertig procent van de transistoren enkel aanwezig waren om x86-ondersteuning te bieden en dus niet gebruikt konden worden voor prestatieverbetering, zorgt de x86-compatibiliteit technisch gezien voor niks anders dan problemen. Dankzij de vele technologische verbeteringen zoals kleinere transistors is de x86-ondersteuning hedentendage nog slechts goed voor minder dan tien procent van de aanwezige transistors, een drastische verbetering.
In 1995 werd de Pentium Pro voorgesteld, de eerste processor gebaseerd op de P6-architectuur. Dankzij de opmerkelijke prestatieverbetering en de uitstekende schaalbaarheid van de architectuur kende ook deze processor een opmerkelijk succes, dat maar liefst vijf jaar aanhield. Een belangrijke reden voor de verbetering in prestaties is te vinden in het feit dat Intel een techniek nabootste die reeds gebruikt werd door de concurrentie (zoals bij de K5-processor van AMD): het invoeren van een instructie-window waarmee het fetchen en decoderen in de front-end losgekoppeld worden van de execution in de back-end.
Om in de P6-architectuur drie instructies per klokcyclus te kunnen bekijken, in tegenstelling tot de twee instructies bij de Pentium-processor, werd een buffer toegevoegd waar de gedecodeerde instructies opgeslagen worden. Hierdoor konden instructies doorgegeven worden aan de execution units op het moment dat ze klaar waren om uitgevoerd te worden en werd het hele proces veel flexibeler. Dit had echter ook tot gevolg dat een instructie uitgevoerd kon worden terwijl deze invoer van een nog niet uitgevoerde instructie nodig had, of terwijl deze nog aan het wachten was op gegevens uit het geheugen. Daarom werd een reservation station in het leven geroepen waar een instructie wachtte tot aan alle criteria die noodzakelijk zijn voor het zijn uitvoering voldaan was.
Doordat per klokcyclus maximaal drie instructies van de decodering naar het reservation station geplaatst kunnen worden en vijf instructies van dit station naar de uitvoerende hardware, was de P6 in staat beduidend betere prestaties neer te zetten. Voordat de instructies in het reservation station geplaatst werden, werd door de reorder buffer echter alle noodzakelijke informatie over de instructie opgeslagen. Terwijl het reservation station ervoor moest zorgen dat de instructies in de optimale volgorde uitgevoerd werden, zelfs als dit betekende dat ze door elkaar gehaald moesten worden, was het de taak van de reorder buffer om te zorgen dat afgewerkte instructies terug in de correcte volgorde geplaatst werden en de resultaten correct naar het register teruggeschreven werden.
Het instruction window van de P6 kan men het best uitleggen aan de hand van een tetris-spelletje. De reorder buffer kon namelijk gegevens over veertig instructies bijhouden en in het reservations station was plaats voor twintig instructies tegelijkertijd. Wanneer je tetris speelt kun je meestal zien wat het volgende blokje zal zijn zodat je het huidige blokje optimaal kunt plaatsen. De P6 moest echter drie blokjes (instructies) tegelijk plaatsen en had dus meer informatie over de volgende blokjes (instructies) nodig. Het reservation station was dan ook een soort van venster dat over de sequentiële stroom instructies schuift en uit de twintig zichtbare instructies (de volgende blokjes) de optimale volgorde opstelde. Ook bij de P6 zorgde de x86-compatibiliteit echter nog steeds voor problemen.
Omdat een x86 slechts beschikking heeft over acht registers moest er heel wat data heen en weer verplaatst worden van het geheugen naar de registers en vice versa. Om dit optimaal te laten verlopen werd register renaming gecreëerd. Deze techniek, uitgevoerd door de reorder buffer, zorgde ervoor dat er toch gebruik gemaakt kon worden van alle aanwezige registers terwijl het programma er niet meer dan acht zag. Ondanks dat de P6 net zoals de Pentium slechts twee symmetrische integer ALU's en een floating-punt unit had, was de execution core toch beduidend uitgebreider. Zo beschikte de P6 over drie units die zich enkel met het verplaatsen van gegevens bemoeiden: een unit voor het laden van adressen, een voor het opslaan ervan en een voor het opslaan van gegevens.
Daarnaast hadden de asymmetrische integer ALU's van de P6 een doorvoer van één klokcyclus en was de floating-point unit op verschillende vlakken verbeterd. Zo werd de FXCH-instructie bijvoorbeeld opgevangen door een register rename waardoor deze effectief uitgevoerd werd in nul klokcycli. In plaats van de pijplijn met vijf stappen van de Pentium-processor bestond de pipeline van de P6 uit twaalf stappen. De eerste drie stappen en de helft van de vierde hielden zich bezig met het fetchen of ophalen van de volgende instructies. Dankzij deze langere fetch-fase werd de processor niet meer zo beperkt door de latency van de L1-cache. De rest van de vierde stap tot en met de zesde stap werden de x86-instructies gedecodeerd en vertaald naar de intern gebruikte P6-instructies.
Tijdens de volgende stap werden instructies gelogd naar de reorder buffer en registers hernoemd. De achtste, negende en tiende stap waren respectievelijk toegewijd aan het verplaatsen van instructies uit de reorder buffer naar het reservation station, het doorschuiven van dit station naar de uitvoerende hardware en ten slotte het uitvoeren van de instructies. De laatste twee stappen vervolgens werden gebruikt voor het terugschrijven van de resultaten van de uitgevoerde instructies. Dankzij deze langere pipeline kon ten eerste de kloksnelheid van de processor omhooggeschroefd worden aangezien elke stap korter en eenvoudiger gemaakt werd, maar door het gebruik van de langere pipeline ontstond er ook een buffer zodat haperingen in de aanvoer van instructies verborgen bleven, net zoals een UPS kleine stroomonderbrekingen kan opvangen.
Deze lange buffer bracht echter ook een nadeel met zich mee: wanneer de branch prediction faalde en er verkeerde instructies opgehaald werden, moest de volledige pipeline leeggemaakt worden, wat meer verspilling tot gevolg had. Aangezien de P6 er echter in slaagde in negentig procent van de gevallen correct te voorspellen welke code uitgevoerd zou worden had dit echter niet zo'n invloed op de prestaties. In de P6 waren echter naar schatting nog steeds veertig procent van de transistors beschikbaar voor het garanderen van compatibiliteit met x86.
De P6 die tot nog toe beschreven wordt betreft nog steeds de Pentium Pro op 133MHz zoals deze oorspronkelijk op de markt verscheen. Ondanks de vele tekortkomingen waaronder het ontbreken van MMX-ondersteuning, slaagde deze processor er dankzij z'n verbeterde floating-point pipeline en de out-of-order execution in x86 te laten doordringen in de servermarkt. In 1997 kwam echter de Pentium II op de markt. Deze processor had bij zijn lancering kloksnelheden variërend van 233MHz tot 300MHz en verschillende eigenschappen om de prestaties te verbeteren. Als eerste was er de dubbele L1-cache die met zijn 32Kb beter in staat was de pipeline te voorzien van voldoende instructies. Bovendien werd met de Pentium II ook de ondersteuning voor MMX terug ingevoerd.
Ook deze cpu had echter last van de x86-ondersteuning. Door de vele transistors die hiervoor ingezet werden, was er op de chip zelf geen plaats meer voor L2-cachegeheugen. Daarom werd een cartridge ingevoerd die weliswaar met behulp van een snelle bus verbonden was met de processor, maar op een pijnlijk zichtbare manier het nadeel van de x86-ondersteuning zichtbaar maakte. De pipeline werd in deze versie niet aangepast, maar wel werden twee MMX execution units toegevoegd die echter alleen SIMD ondersteunden met integer-getallen. Voor de ondersteuning van SIMD met floating-points zou men nog moeten wachten op introductie van de SSE in de Pentium III.
In de periode van de Pentium III was er niet alleen de GHz-race tussen Intel en AMD, maar ook de algemeen aanvaarde stelling dat 1GHz voldoende was voor thuisgebruik. In zekere zin zou de Pentium dan ook het slachtoffer van zijn eigen succes worden, aangezien consumenten geen enkele reden meer zagen om hun processor te upgraden. Voor de opkomst van AMD was het Intel dat bepaalde hoe snel processors evolueerden. Doordat er echter concurrentie op de markt kwam, moesten beide fabrikanten tegen elkaar opboksen met hun 'snellere, betere, krachtiger' processors, waardoor kloksnelheden en prestaties de voorbije jaren een ware boost kregen in vergelijking met de overige pc-onderdelen.