Er is niets nieuws onder de zon.
Is er iets, waarvan men zegt:
Ziehier, dat is nieuw -
het was er al in verre tijden,
die vóór ons waren

the last emperor

Intel doet het weer en vermoedelijk voor de laatste keer. Als marktleider kan het zich de zware dosis techniek veroorloven waarmee na het low-end nu ook de mid-range bestormd wordt, maar moet toezien hoe compatibiliteit ten koste gaat van de snelheid. Haast is er niet bij nu de Pentium net lekker verkoopt.

in den beginne

De NASA had voor haar Apollo raketten kleinere, lichtere, zuinigere en betrouwbare transistoren nodig. Het was toen maar een kleine stap meerdere transistoren onder te brengen op een plakje silicium. Voor digitale Integrated Circuits werden de TTL en CMOS technologiën het populairst; ECL en GaAs zijn veel duurder. In 1974 kwam Intel met de 4004 microprocessor op de markt. Later bleek al eerder iemand een microprocessor te hebben gemaakt, maar Intel bleef tot op de dag van vandaag marktleider, al moet erbij worden vermeld dat firma's als IBM en HP microprocessoren voor eigen gebruik fabriceren. De gevreesde Japanse industrie heeft ondertussen wel de markt voor geheugenchips veroverd. Al snel kreeg de 4004 gezelschap van de 8008, die 8 bits data en 16 bits adressen kon verwerken en de 8080 die nieuwe registers en instrukties bracht.

De microprocessor was eerder bestemd voor digitale multimeters e.d. dan voor computers, maar dat is wat elektronicahobbyisten ervan maakten. Een gesjeesd student genaamd Bill Gates wist er een eenvoudige BASIC voor te maken, wat allicht makkelijker werkte dan hexadecimale cijfers intoetsen. De microcomputerbranche maakte een onstuimige groei door. Toen meerdere fabrikanten het CP/M besturingssysteem gingen leveren, ontstond er ook een markt voor software met namen als Wordstar, dBASE en Visi-Calc. Onder thuisgebruikers waren Sinclair, Commodore, Atari, Acorn e.a. populairder. De geschiedenis herhaalt zich: toen op mainframes multi-user in zwang kwamen, onstond daarnaast een markt voor kleine en goedkopere machines, die door één persoon gebruikt konden worden. Deze minicomputers werden o.a. gemaakt door Hewlett-Packard, Digital, Data General, IBM, Bull, Nixdorf en Philips. Op hun beurt zijn Intel machines wel krachtiger geworden maar niet goedkoper, wat de weg vrijmaakte voor Nintendo en Sega.

De omslag kwam pas toen reus IBM zo stom was zijn naamplaatje te plakken op een produkt dat hun mainframes en schrijfmachines zo ongeveer zou elimineren. IBM had al een mislukte introduktie achter de rug. Ditmaal moest het goedkoper worden en sneller op de markt komen. Aan deze eisen kon worden voldaan door gebruik te maken van bestaande standaardcomponenten. Het nadeel was dat model PC door Jan & alleman kon worden nagemaakt. De openheid van het systeem droeg sterk bij aan zijn succes. De openheid van de hardware werd vergroot door de standaard bus met ruimte voor acht uitbreidingskaarten voor I/O en Expanded Memory. IBMs tweede vergissing, PS/2 genoemd, was te proberen in 1987 de eerste te herstellen en het aan Gates verloren fortuin terug te verdienen met hoge licentierechten. People didn't buy it. Het zou nog lang duren voordat OS/2 een succes werd.

inside Intel

Intels 8086 (in de jaren negentig werden de eerste twee cijfers wegbezuinigd) was bijna geheel source-compatibel met de 8080, alleen waren de registers verbreed naar 16 bits. Om toch 1 MB geheugen te kunnen adresseren werden segmentregisters toegevoegd. De 8086 berekent een geheugenadres door de inhoud van een segmentregister met 16 te vermenigvuldigen en daar het basisadres bij op te tellen. Zo krijg je segmenten die maximaal 64 KB groot zijn en elkaar kunnen overlappen. Architekturen als de PowerPC maken op zinvoller wijze gebruik van gesegmenteerde adresruimten. Van de 1 MB adresruimte gebruikt DOS 640 KB voor programma's en 384 KB voor I/O. In 1981 had de 16-bitter een streepje voor; iets later kwam de 68000 die 32 bits data en 24 bits adressen had. MS-DOS alias PC-DOS was compatibel met CP/M en Microsoft had er haar BASIC aan toegevoegd. Versie 2 kwam met een aantal van Unix afgekeken features, zoals input/output redirection, pipes en subdirectories. Versie 5 had een editor, versie 6 een 'move' commando.

Een kenmerkende eigenschap van de Intel Architektuur is dat registers een min-of-meer vaste functie hebben en de opcode de operanden impliceert. Rekenkundige opdrachten gebruiken de accumulator (A alias AX alias EAX) samen met een operand uit het B, C, D (EBX..EDX) of E, geheugenadressen staan in vaste indexregisters. CISC architekturen (VAX, Motorola 68000) hebben meer registers die door alle operaties kunnen worden geadresseerd. Met zijn RISC processor was de IBM PC/RT niet IBM-compatible, maar werd hij de grootvader van de RS/6000 en Power PC.

De PC/XT met zijn 8088 was een stapje terug naar een 8-bits bus, maar de 20286 van de PC/AT was een volbloed 16-bitter. Afgezien van de real mode van de 8086 kon hij in protected mode 16 MB fysiek geheugen adresseren. De inhouden van de segmentregisters worden dan niet meer als basisadres gebruikt, maar als index in een segmentdescriptortabel, waar een 24-bits basisadres en een 16-bits limiet wordt gevonden. Het fysieke adres is nu de som van het segment basisadres en een 16-bits offset. Een segmentdescriptortabel kan maximaal 8912 entries van maximaal 64 KB bevatten; met 2 descriptortabellen kom je aan een virtuele adresruimte van 1 GB. De 286 ondersteunt OS/2, Xenix en MS Windows. DOS 3.0 kan extended memory (geheugen boven 1 MB) als RAM disk gebruiken.

De PC/AT was de laatste IBM PC. Intels 386 verbreedde de registers naar 32 bits, uitgezonderd de segmentregisters. De instruktieset bevat nu opdrachten voor het bewerken van de laagste byte (cf. de 8080 registers), de tweede byte, de eerste twee bytes samen, of het hele register. Het aantal segmenten bedraagt nog 16 K van maximaal 1 MB, het fysieke geheugen maximaal 4 GB. Er is een speciale mode waarin de segmentlimiet wordt geïnterpreteerd als aantal pages à 4 KB met als nadeel dat 1 page ook de minimum segmentgrootte is. De maximumlengte is dan 4 GB per segment, zodat de meeste besturingssystemen met één segment per proces volstaan, maar de virtuele adresruimte ligt op 64 TB. De P6 kan 64 GB fysiek adresseren. De 386 ondersteunt Windows NT en Unix met een paging MMU. Hij heeft een virtuele 8086 modus waarmee meerdere DOS sessies worden gedraaid zonder het systeem te crashen. De 386 kan externe cache en 387 FPU gebruiken. De 486 heeft een interne L1-cache en FPU; hij ondersteunt een L2-cache, multi-processor systemen en de verwerking van de programma's gestroomlijnd in een pijplijn van vijf stadia. Bij de Pentium is de integer pijplijn verdubbeld en ook de FPU gepijplijnd. Tevens werden enkele nieuwe instrukties geïmplementeerd waarover Intel geen inlichtingen verstrekte. Er kwamen een aantal fabrikanten op de markt met compatibele CPUs.

In de PS/2 lijn gebruikte IBM de MCA bus, evenals in de RS/6000. De klonenbouwers wilden niet volgen en ontwikkelden samen een alternatief, de EISA (Extended Industry Standard Architecture), een uitbreiding naar 32 bits. Deze werd in een aantal duurdere systemen toegepast, maar de massa bleef achter. Om Windows's honger naar bandbreedte te stillen werd toen de VESA Local Bus geschapen, maar VLB kaarten kunnen onderling wel eens conflicten krijgen. Intels PCI bus wordt inmiddels in brede kringen geaccepteerd.

P6 = Project 686?

Afgelopen zomer kondigden Intel en HP aan samen te gaan werken aan een volgende generatie microprocessoren, die in 1998 beschikbaar moet komen en zowel met de PA-RISC als met de x86 architektuur compatibel moet zijn. (dit gaat om de Itanium, die in 2000 op de markt komt) Kenners wezen op het research dat HP heeft verricht met VLIW. De huidige machinetalen zouden dan door de hardware geëmuleerd worden. Dat betekent dan dat de P6 of hoe de officiële naam straks zal luiden (het werd 'Pentium Pro') de laatste generatie van een roemruchte familie is. De immense hoeveelheid software is zijn voornaamste verkoopargument. Helaas is het meeste daarvan rijp voor de prullenbak. Een team van honderd ontwerpers is er sinds 1991 mee bezig geweest; de chip wordt sinds begin dit jaar in kleine aantallen vervaardigd en aan een uitgebreid testprogramma onderworpen. Daarbij is o.a. Prof. Nicely betrokken, die de beroemde FDIV bug heeft ontdekt.

Na de voorstellen van een aantal concurrenten zou je de P6 kunnen betitelen als Pentium-killer-killer. Hij bezit 4,5 miljoen transistoren voor de kern, plus 1 miljoen voor de L1-cache. In dezelfde behuizing bevindt zich bovendien een aparte die met 15 miljoen transistoren voor een L2-cache van 256 KB. Als hij op de markt komt zal dat het dubbele zijn door een 0,35 µ BiCMOS technologie waarmee 200 MHz mogelijk is. Qua integer rekensnelheid (200 SPECint92) is hij vergelijkbaar met de meeste RISC chips uitgezonderd de nieuwe Alpha 21164, in floating point rekenwerk is Intel niet zo sterk. De snelheid in grafisch werk wordt vooral door de video-kaart bepaald. Het demonstratiemodel wist binnen 20 seconden een full-color afbeelding op het scherm weer te geven.

microarchitectuur

De microarchitectuur is verwant aan de RISC processoren. Verschillende technieken werden voor het eerst toegepast in de IBM 360/Model 91, een krachtige minicomputer uit 1967. Speculative execution is in ieder geval al in de Motorola 88100 gebruikt. De belangrijkste manier om meer snelheid uit een processor te halen is het gebruik van de pijplijn techniek, vergelijkbaar met een lopende band, waarin de uitvoering van instructies in verschillende bewerkingsstappen is uitgesplitst. Elke trap voert steeds hetzelfde deel van de bewerking uit en schuift op het kloksignaal het resultaat door naar de volgende trap en ontvangt zelf een nieuwe opdracht. Hoewel een opdracht er zeker niet korter over doet de pijplijn te doorlopen, kan er in theorie elke klokcyclus een nieuwe instruktie worden gestart. Andersom, door de verwerking in hele kleine deeltaken op te splitsen, kan voor één stap benodigde tijd verkort worden.

Zodoende is een P6 op 133 MHz qua technologie equivalent aan een 100 MHz Pentium. Pijplijning bereikt dus parallellisme doordat meerdere instrukties zich tegelijk in verschillende stadia van ontbinding bevinden. Vectorprocessoren als de Crays voeren op rijen operanden één voor één dezelfde bewerking uit m.b.v. één opdracht. Daardoor halen ze hogere snelheden maar zijn minder flexibel. De P6 bereikt met een pijplijn van 12 trappen tot 18 voor load opdrachten een rekord; in de RISC wereld gaat de trend naar kortere pijplijnen.

Voor een berekening als a := b * c + d kan de optelling pas beginnen als de vermenigvuldiging is afgerond en presteert de processor ondertussen onder zijn maximumsnelheid. Zo zijn er veel meer oorzaken die wachttijden veroorzaken; de belangrijkste is dat de processoren steeds sneller zijn geworden, pakweg van 4 tot 200 MHz in de afgelopen vijftien jaar (en veel meer presteren dan een 8080 op die snelheid zou doen), terwijl DRAM evolueerde van 300 tot 60 ns. Gegevens in een register zijn meteen beschikbaar, gegevens uit de cache binnen enkele tellen, gegevens uit DRAM halen kost minstens veertien tikken van de klok en virtueel geheugen duurt een kleine eeuwigheid. Een optimaal resultaat vereist zorgvuldig programmeren of een intelligente compiler.

Wie meer snelheid wil hebben kan natuurlijk meerdere computers tegelijk aan een probleem laten werken, ook al kost dat meer hardware. Sommige sommen zijn uitgerekend door het werk via het Internet te verdelen en resultaten met e-mail te verzamelen. Dit is alleen zinvol als de rekentijd hoog is en de hoeveelheid te communiceren data beperkt. Parallel programmeren is een stuk moeilijker. Het alternatief is de superscalaire processor zoals de Pentium, die meerdere pijplijnen naast elkaar heeft. Dit vereist een complexe besturingslogica. RISC chips zijn niets minder ingewikkeld. VLIW architekturen laten de compiler bepalen welke opdrachten tegelijk plaats moeten vinden, wat ook weer nadelen heeft. Blokkades treden hier nog steeds op, maar leggen vaak slechts één pijp stil.

toekomst voorspellen

Aan de voorkant van de pijplijn kan tijd worden bespaard door prefetching: de P6 haalt telkens 16 bytes uit de cache in een buffer. In de volgende stap wordt de lengte van de instruktie bepaald en de volgende twee trappen vertalen de opdracht in één of meer RISC-achtige mikro-operaties; geen eenvoudige klus, maar in sommige gevallen worden drie instrukties per klokcyclus verwerkt; zgn. 'prefix bytes' vergen wat meer werk.

De aanwezigheid van vertakkingen (loops, if-then-else, case en function calls) in het programma maakt het opzoeken van de volgende stap moeilijker. Reeds bij voorspelbare gevallen als goto's reedt al een periode vertraging op. Bij conditionele vertakkingen (if-, case- en for-konstrukties) kan het wel dertig klokcycli duren voor met zekerheid bekend is, welke de volgende instruktie moet zijn. Vandaar dat Intel extra aandacht besteedt aan het voorspellen van de uitkomst door de adressen van de laatste 512 geziene sprongen te bewaren in de Branch Target Buffer. Met één bit per lokatie kun je onthouden of de sprong de vorige keer is uitgevoerd of overgeslagen, met twee bits of de uitkomst 'vrij waarschijnlijk' of 'vrijwel zeker' is. Intel gebruikt vier history bits waarmee sprongen die de ene keer worden genomen en de volgende keer gepasseerd nog te voorspellen zijn. De P6 moet soms wel vijf vertakkingen vooruitkijken, d.w.z. uit 32 bestemmingen de waarschijnlijkste kiezen en lang niet alle software gedraagt zich zo voorspelbaar als de programma's van de SPEC benchmark, waarop met gemak > 90 % juist wordt voorspeld. Omdat een foute voorspelling met tien tot vijftien tikken vertraging wordt bestraft blijft dit Intels achilleshiel.

orde & regelmaat

Net als diverse concurrenten gaat Intel een stap verder en voert de vermoedelijke volgende instruktie alvast uit, ook al loopt men het risico dat de moeite voor niets is geweest. In dat geval moeten geheel of gedeeltelijk uitgevoerde bewerkingen weer ongedaan worden gemaakt; de P6 bezit een ingebouwde 'undo' knop (helaas is deze faciliteit niet beschikbaar voor de programmeurs van Microsoft et al.).

De mogelijkheid instrukties speculatief uit te voeren brengt kosten met zich mee, maar heeft een aantal voordelen. In het geval dat een opdracht ten onrechte is uitgevoerd, moet de oude toestand worden hersteld, d.w.z. registers en flags moeten hun oorspronkelijke inhoud terugkrijgen. De P6 bezit daartoe een veertigtal fysieke registers, die voor de programmeur niet zichtbaar zijn. Het inherente gebrek aan registers van de x86 architektuur is daarmee een stuk verlicht. De segment registers zijn overigens niet gevirtualiseerd, waardoor 16-bits software (Windows 95?) afgeremd wordt.

Als een register wordt overschreven staat de nieuwe inhoud logisch gezien los van de oude waarde. Na het decoderen van de instruktie volgt een stap waarin de virtuele registers in de instruktie worden hernoemd tot fysieke registers. Zo wordt de oude inhoud van een virtueel register ergens anders bewaard dan de nieuwe. Als instrukties worden aan het eind van de pijplijn afgerond door de officiële registers bij te werken in de volgorde van het programma. Ook worden dan pas resultaten naar het geheugen weggeschreven. Dit betekent dat de processor intern moet bijhouden welke geheugenadressen tijdelijk een inconsistente inhoud hebben. (d.w.z.. wat er in het geheugen staat moet dan vanuit het geheugen bezien wel juist zijn, maar spekulatieve instrukties moeten al de nieuwe waarde gebruiken).

De mogelijkheid instrukties ongedaan te maken heeft als bijkomend voordeel dat als een programma onderbroken moet worden vanwege een interrupt of error de verwerking door gaat tot het punt waar de onderbreking optrad en dan de pijplijn snel gewist wordt. Een complicatie vormt het feit dat een x86 instruktie door een groep mikro-operaties wordt uitgevoerd. Een ander probleempje met superscalaire CPU's is dat niet alle bewerkingen even lang duren, zodat ook hier wachttijden optreden. De compiler beperkt deze door de langste opdracht het eerst te starten.

Waar een compiler slechts kan gissen, kan de P6 zich dynamisch aanpassen aan de omstandigheden en die bewerkingen starten die er klaar voor zijn (d.w.z. als de operanden zijn uit het geheugen gearriveerd zijn, terwijl voorafgaande operaties op hun beurt wachten. Cache misses e.d. leiden dan niet meer tot stilstand zolang er nog ander werk te doen is. Intel spreekt hier van 'dynamic execution architecture', 'non-blocking architecture', 'dataflow engine', 'speculative execution' en 'out-of-order execution'.

Bij de P6 wordt het grootste deel van de pijplijn echter in de normale volgorde uitgevoerd, te beginnen met het speculatief opzoeken van de volgende instruktie in Branch Target Buffer en Instruction Cache, Decoderen, Register Allocation en doorsluizen naar de Reorder Buffer, die plaats biedt voor veertig onvoltooide mikro-operaties. De eerste helft van de pijplijn is breed genoeg om ca. drie instrukties tegelijk te verwerken.

Het out-of-order deel kiest volgens een heuristisch algoritme instrukties uit waarvoor zowel de operanden als de execution units beschikbaar zijn en stuurt ze naar het Reservation Station, een gebufferde crossbar switch met vijf in- en uitgangen, zodat maximaal vijf mikro-operaties tegelijk gestart kunnen worden. Die worden dan in één of meer klokperioden onafhankelijk van elkaar verwerkt door de beide integer ALU's, twee Floating Point ALU's die een poort moeten delen met één van de Integer Units en twee Address Generation Units, de Jump, Load en Store Units. De Jump Unit werkt de Branch Target Buffer bij en beslist of speculatief verwerkte instrukties worden bevestigd of teruggedraaid.

Aan het eind van de pijplijn worden in programmavolgorde voltooide instrukties uit de Reorder Buffer gehaald en als laatste stap de resultaten naar de definitieve registers dan wel het geheugen geschreven. De doorlooptijd kan van 12 tot 70 klokperioden oplopen.

Als een cache de gevraagde data niet in huis heeft, zal ze die opvragen uit het geheugen. Ondertussen kan ze wel verdere verzoeken behandelen totdat ze vier keer nee heeft moeten verkopen, waarbij meerdere woorden uit dezelfde cache regel niet apart worden geteld. Leesopdrachten hoeven uiteraard niet in de juiste volgorde te worden uitgevoerd en schrijfopdrachten wel. Een load kan wel een store opdracht passeren; dan moet de gelezen waarde in het register naderhand worden overgeschreven. Verdere versoepeling van het geheugen consistentiemodel zou strijdig zijn met de eis van compatibiliteit.

De P6 heeft registers om aan te geven of een geheugengebied als read-only, uncacheable, write-through, write-back of 'uncacheable speculatable write combining' moet worden behandeld. Dat laatste is geschikt voor video buffers: de processor kan de data net zo snel wegschrijven als met write-back, voor naar de gebruiker lijkt het op write-through. Dat voorkomt dat bewegende beelden gedeeltelijk in de cache blijven hangen. Het lezen van een cache-regel van 32 bytes kost 2 + 1 + 1 + 1 klokcycli voor de L1-, 3 + 1 + 1 + 1 voor de L2-cache, ongeveer 1 GB/s bij 133 MHz.

de nieuwe PC van binnen

De P6 bezit een interne controller voor de nieuwe proprietary local bus, waarop maximaal vier processoren kunnen worden aangesloten zonder verdere interface bouwstenen. Die ondersteunt het MESI protocol om de caches onderling consistent te houden en vervoert 36 adresbits, 64 databits + ECC en stuursignalen met maximaal 66 Mhz = 528 MB/s. De bus is non-blocking out-of-order split-transaction en wordt door de CPU's onderling bestuurd, waarbij ze om beurten mogen zenden of op basis van prioriteit. Op deze systeembus worden Memory Interface Controllers voor het 4-way interleaved DRAM aangesloten, twee PCI bridges voor 6 vrije slots en Cluster Controllers. Meerdere PC's kunnen via ATM worden verbonden in clusters waarbij de verschillende nodes toegang tot elkaars geheugen hebben. In principe kan de P6 zo in grote systemen worden gebruikt of worden afgeremd voor gebruik in goedkope PC's. Het is ook mogelijk twee P6-en als Master/Checker paar te schakelen.

De processorbehuizing is nog groter en heeft meer pennen dan de Pentium. Na verlaging van de voedingsspanning tot 2,9 V verstookt hij nog 14 Watt; voor 200 MHz is 2,5 V voorzien. Mocht de ventilator uitvallen, dan schakelt de processor zich uit voor hij oververhit raakt. Hij kan ongebruikte units uitschakelen en hartstilstand verdragen om energie te besparen. Intels chipset kan ook EDO DRAMs aansturen.

speculatie

Kritici zeggen dat met de inbouw van de cache de klant gedwongen wordt ook die van Intel te kopen; de keuzemogelijkheden worden hierdoor ook beperkt. Er zijn Intel chipsets, Intel ethernet en fax kaarten, Intel moederborden en een optimaliserende compiler.

Met de P6 dringt Intel door op het performancegebied waar RISC werkstations en servers heersen, maar blijft een eind van de top verwijderd. Voorlopig heeft de P6 een flinke voorsprong op de concurrenten, die al een flink deel van de 486 markt hebben ingepikt. Vanwege de investering van $ 4.000.000.000 in de 0,35 µ fabricagelijn hangt aan de processor een prijskaartje van ca. $ 1400. Om de systeemprijzen concurrerend te houden is Intel aangewezen op de Oosterse klonenmakers, die vooralsnog niet de kunst beheersen een 66 MHz moederbord te bouwen en op z'n vroegst volgend jaar met P6 systemen zullen komen. Een goed systeem vergt immers meer dan een snelle processor en dan blijkt het prijsvoordeel te verdwijnen. De komende 64-bits Nintendo zou wel eens een gat in de onderkant van de markt kunnen slaan. Multimedia moet nog doorbreken. Het tijdperk van de x86 architectuur loopt ten einde samen met dat van MS-DOS, waardoor het argument dat er zoveel software op loopt aan kracht inboet. Zou Windows '95 de OS/2 geest weer in de fles krijgen? Gaat de klant meer op kwaliteit i.p.v. prijs letten en Apple kopen of wordt hun positie in de DTP-markt bedreigd door de prijsverlaging van de Indy? Is er nog toekomst voor Acorn, Amiga en Atari?

Literatuur

  1. A.S. Tanenbaum, "Modern Operating Systems", Prentice-Hall, Englewood Cliffs, NJ 1992
  2. H-P. Messmer, "Alles over PC hardware", Addison-Wesley, Amsterdam 1992
  3. R.P. Colwell; R.L. Steck, "A 0,6 µ BiCMOS Processor with Dynamic Execution, ISSC Proc., Feb. 1995
  4. http://www.intel.com
  5. G. Schnurer, "Discovery 6", c't 4, april 1995, 120-6

Daniel von Asmuth

Blokdiagram P6

Een naaktfoto van de nieuweling