Intel Pentium Pro

Optimalisert for 32-bit programmer

I likhet med Intel 80386, Intel 80486 og Pentium, var Pentium Pro bakoverkompatibel med 16-bit x86 programmer.
Pentium Pro var imidlertid konstruert for å kjøre 32-bit programmer raskere enn 16-bit programvare. 32-bit programmer ble utført 25−35% raskere enn på Intel® Pentium™, mens ytelsesforbedringen på 16-bit programvare bare var 20%.
Selv om dette var et teknologisk fremskritt, ble Pentium Pro ingen suksess i hjemme-PC-er. Markedet var fortsatt dominert av 16-bit operativsystemene MS-DOS og MS Windows 3.1. MS Windows 95 var en hybrid mellom 16-bit og 32-bit kode, og var i tillegg en DOS-utvider til 16-bit MS-DOS.
For å få fullt utbytte av Pentium Pro, behøvde man et 32-bit operativsystem. Microsofts eneste 32-bit operativsystem på denne tiden var Windows NT 3.51. 32-bit operativsystemer som f.eks. OS/2 3.0, Solaris, UnixWare og Linux-distribusjoner var ikke markedsdominerende.

Superskalær arkitektur

I likhet med Intel Pentium, var Intel Pentium Pro en superskalær mikroprosessor, og kan utføre mer enn én instruksjon samtidig.
Begge prosessorene hadde to heltalls-enheter og en desimaltalls-enhet integrert i kjernen. Intel Pentium kunne utføre to heltalls-instruksjoner samtidig, men var ikke istand til å utføre heltalls- og desimaltallsberegninger samtidig.
Intel Pentium Pro var istand til å utføre tre instruksjoner samtidig: To heltalls-instruksjoner og en desimaltalls-instruksjon

RISC-kjerne som emulerer x86 CISC-instruksjoner

Pentium Pro var en RISC-prosessor som emulerte x86 CISC-instruksjoner. 
x86-instruksjoner ble dekodet til «mikro-operasjoner» («micro-ops» eller µ-ops) under kjøring, og sendt videre til de utførende enhetene. Opptil 5 «mikro-operasjoner» kunne utføres og opptil 3 avsluttes, for hver klokkepuls.
«Mikro-operasjonene» forenklet utførelsen, ved å oppdele x86-instruksjoner med varierende størrelse (i bits) i like store instruksjoner.
RISC-instruksjonene var ikke tilgjengelige for programmerere, men ble brukt internt av prosessoren. Før lanseringen av Pentium Pro, ble det samme prinsippet benyttet i NexGen Nx586 som hadde sitt eget proprietære RISC86™ instruksjons-sett.

Registeromdøping og 40 generelle registre

Intel Pentium hadde 8 generelle registre. Intel Pentium Pro hadde i tillegg 40 generelle registre som ble brukt av RISC «mikro-operasjonene».
Dette innebar bruken av registeromdøping, der 1-3 «mikro-operasjoner» skiftet registernavn i løpet av en klokkepuls.

Ikke-blokkerende nivå-2 hurtigminne

Intel® Pentium™ (med kodenavnet P5) benyttet et eksternt nivå-2 hurtigminne, som ble plassert på hovedkortet utenfor prosessoren. Nivå-2 hurtigminne var påkrevet, ettersom ordinær RAM fortsatt var svært treg i forhold til prosessoren.
Forskjellige hovedkort for Intel® Pentium™ benyttet nivå-2 hurtigminne av forskjellig størrelse og forskjellig type, og denne mangelen på standardisering kunne tidvis gi et uoversiktlig helhetsbilde av ulike Pentium-konfigurasjoner.
For det andre var nivå-2 hurtigminne for Intel® Pentium™ blokkerende: Prosessoren kunne ikke kommunisere med nivå-2 hurtigminne og hovedminnet samtidig.
For det tredje kunne ikke dette eksterne hurtigminnet kjøre med samme hastighet som selve prosessoren.
På denne tiden var det for kostbart å integrere nivå-2 hurtigminne i prosessor-kjernen. Intel® Pentium Pro™ ble derfor levert med prosessoren og nivå-2 hurtigminne separat under samme kapsel.
For det første medførte dette en standardisering av hvilken type nivå-2 hurtigminne prosessoren benyttet. For det andre kommuniserte prosessoren med nivå-2 hurtigminnet med samme klokkefrekvens som prosessoren selv, og ikke med en redusert hastighet. For det tredje var denne kommunikasjonen ikke-blokkerende: Pentium Pro kommuniserte med nivå-2 hurtigminnet og det eksterne minnet samtidig gjennom to separate busser.
Totalt sett fjernet dette en tradisjonell flaskehals. Istedenfor kun én enkelt forespørsel til hurtigminnet om gangen, kunne Pentium Pro foreta inntil 4 samtidig, og dermed redusere svekket ytelse ved såkalte cache-miss.
Denne implementasjonen av Memory Level Parallelism (MLP) førte også til at Pentium Pro hadde en ekstrem ytelse i SIMD-maskiner, sammenlignet med alternativer der prosessorer delte et felles nivå-2 hurtigminne.

Eksekvering utenfor rekkefølge

Instruksjoner kan utføres samtidig, når de ikke er innbyrdes avhengige av hverandre.
 Avhengighet           Ingen avhengighet
 A = 1 + 1             A = 1 + 1
 B = 1 + A             B = 1 + 2
I det første eksempel kan ikke begge beregningene utføres samtidig. Man må beregne A, før man kan beregne B. Intel  Pentium kunne i dette tilfellet ikke utføre to avhengige instruksjoner samtidig.
Programvare for Intel 8086/Intel 8088, Intel 80186/Intel 80188, Intel 80286, Intel 80386 og Intel 80486 var ikke skrevet for denne type samtidig utførelse. Da Intel Pentium ble lansert i 1993 var det kun et fåtall programmer som utnyttet dens potensial.
Intel Pentium Pro kunne «se fremover» i programmene, oppdage avhengigheter før de oppstod, og utføre instruksjonene i en annen rekkefølge enn programmet tilsa (eksekvering utenfor rekkefølge):
 Avhengighet           Utførelse i en
                       annen rekkefølge
 A = 1 + 1             A = 1 + 1
 B = 1 + A             C = 1 + 2
 C = 1 + 1             B = 1 + A
A og C (to instruksjoner) kunne utføres samtidig, istedenfor at A og B utføres sekvensielt etter hverandre (én instruksjon av gangen).

Spekulativ utførelse

Betingede hopp kan hemme parallell utførelse. I programmerings-språket C kan dette illustreres slik:
 if (x == 2)                Hvis x = 2
   subrutine1();               så hopp til subrutinen "subrutine1"
 else                       I motsatt fall
   ....                        fortsett med neste instruksjon
I dette tilfelle vet man ikke på forhånd om betingelsen for et hopp til en annen del av programmet er tilstede.
Dersom prosessoren hopper til en annen del av programmet, og påbegynner utførelsen der, samtidig som den sjekker om betingelsen for et hopp er tilstede, vil utførelsen av en rekke instruksjoner påbegynnes, for deretter å forkastes.
Dersom prosessoren påbegynner utførelsen av neste instruksjon (i eksempelet ovenfor), istedenfor å utføre et hopp, vil også utførelsen av en rekke instruksjoner påbegynnes, for deretter å forkastes, dersom betingelsen likevel er tilstede.
I begge tilfeller oppstår forsinkelser.
Intel® Pentium Pro™ reduserte denne flaskehalsen ved hjelp av en hopp-predikator − «forutsigelser» av hvilken «grein» (branch) av programmet som fortsetter under betingede hopp, basert på erfaringer fra programutførelsens historikk.
Prosessoren hadde et Branch Prediction Buffer bestående av 512 «inngangsporter» til forskjellige utfall av betingelser. Instruksjoner fra forskjellige «greiner» hentes, dekodes og utføres, før prosessoren vet hvilken «grein» som er korrekt. Når dette er avgjort, forkastes alle instruksjonene på de feilaktige «greinene», mens den korrekte «greinen» beholdes.