Intel Pentium Pro

**Intel Pentium Pro** (kodenavn: *P6* og *A80521*) var den første sjette generasjons x86 mikroprosessoren. Det var en 32-biter superskalær mikroprosessor, og ble lansert av Intel den 1. november 1995.

Navnet «Pentium Pro(fessional)» er misvisende, fordi Pentium Pro ikke var en «profesjonell» Intel Pentium, men en ny arkitektur. Navnet «Hexium» (6) er mer presist, men ble ikke brukt ettersom navnet «Pentium» (5) var blitt innarbeidet i markedet.

## Egenskaper

* 350 nanometers BiCMOS transistorer
* Nivå-1 hurtigminne: 8 Kb for data + 8 Kb for instruksjoner
* Nivå-2 hurtigminne: 256 Kb, 512 Kb eller 1 Mb
* Optimalisert for å kjøre 32-bit kode
* Treveis superskalær arkitektur, to heltall- og en desimaltallinstruksjon samtidig
* 14-trinns instruksjonspipeline, mot 5 trinn i Intel Pentium
* RISC kjerne som emulerer x86 CISC-instruksjoner
* Registeromdøping og 48 generelle registre
* Ikke-blokkerende nivå-2 hurtigminne
* Eksekvering utenfor rekkefølge
* Spekulativ utførelse og en hopp-predikator med 512 inngangsporter
* Integrert kontroller for symmetrisk flerprosessering med 2 eller 4 mikroprosessorer
* 36-bit adressebuss (maksimum 64 Gigabyte RAM)
* 387 pinner (benyttet socket 8)
* Elektrisk spenning: 3,1 Volt internt og 3,3 Volt eksternt

### 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<sup>®</sup> 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<sup>®</sup> 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.

### 14-trinns instruksjonspipe
Pentium Pro hadde en 14-trinns instruksjonspipeline, bestående av tre hovedfaser:

* 8-trinns *in order* front end (henting og dekoding)
* 3-trinns *out of order execution*, utført av 5 enheter
* 3 trinns *in order* avslutning

### Modeller

1 Eksperimentell versjon. Ikke lansert for salg.

### Intel Pentium<sup>®</sup> II OverDrive<sup>®</sup> for Pentium Pro™
Produksjonen av Pentium Pro opphørte i fjerde kvartal 1998, og ble erstattet av Intel Pentium II. I denne forbindelse lanserte Intel en oppgraderings-prosessor, en variant av Pentium II som kunne brukes på socket 8.

Intel Pentium® II Overdrive® for Pentium Pro™ (kodenavn P6T) ble lansert den 10. august 1998, og hadde følgende nye egenskaper:

* Nivå-1 hurtigminne: 16 Kb for data + 16 Kb for instruksjoner
* 300&nbsp;MHz klokkefrekvens (for Pentium Pro 150 og 180)
* 333&nbsp;MHz klokkefrekvens (for Pentium Pro 166 og 200)
* 512 Kb nivå-2 hurtigminne, som kjørte med prosessorens hastighet
* Multimedia-instruksjonene MMX

## Litteratur
*K. Keeton, D. Patterson, Y. He, R. Raphael, og W. Baker: *Performance characterization of a quad Pentium Pro SMP using OLTP workloads*, Proceedings of the Twenty-Fifth International Symposium on Computer Architecture, s. 15-26, 1998.
*Tom Stanley (MindShare Inc.): *Pentium Pro Processor System Architecture*, PC System Architecture Series, Addison-Wesley Professional, 23. desember, 1996, ISBN 0201479532
*Robert P. Colwell: *The Pentium Chronicles: The People, Passion, and Politics Behind Intel's Landmark Chips*, IEEE Computer Society, John Wiley & Sons, Inc., Hoboken, New Jersey, 2006, ISBN 0-471-73617-1