Fout in Pentium-chip is niets bijzonders

Begin november kregen deelnemers van een wetenschappelijke discussiegroep op Internet een zeldzaam bericht onder ogen. Thomas R. Nicely, een wiskundige van het Lynchburg College (Virginia) waarschuwde zijn collega's voor een afwijking in de Pentium-microprocessor van Intel. “De floating-point unit geeft verkeerde waarden voor bepaalde delingen”, schreef Nicely aan het Canopus-forum van Compuserve, een commerciële tak van Internet.

Nicely gaf als voorbeeld de deling 1/824633702441. Bij deze berekening was Nicely's Pentium-computer onnauwkeurig vanaf het negende cijfer. Een Amerikaans elektronica-vakblad publiceerde Nicely's opmerkingen op 7 november. Al een week later kwam Tim Coe van Vitesse Semiconductor met de tot nu toe opzienbarendste slordigheid. Hij wees er op dat 3145727,0 op 4195835,0 delen in de Pentium 1,3337391 als resultaat gaf in plaats van het juiste 1,3338204. Een fout dus in het vijfde significante cijfer - voor veel natuurkundige berekeningen onaanvaardbaar groot.

De afwijkingen in de Pentium komen voor met zogenaamde drijvende komma-getallen. Dit zijn cijfer-weergaven die voornamelijk worden gebruikt wanneer een hoge precisie nodig is. Ze zijn gedefinieerd als een getal met een komma achter het eerste cijfer en een tiende macht. Bijvoorbeeld 0,000054667 is in drijvende komma-notatie 5,4667000 x 10-.

Het Pentium-gedeelte dat aanleiding geeft tot de verkeerde berekeningen is de zogenaamde Floating Point Divide (FDIV). De FDIV zet de Floating Point Unit (FPU) in de stand 'delen' (met een zogenaamde hardware instructie). Drijvende komma-getallen die de FPU passeren worden daarna op elkaar gedeeld. Door de aard van de bewerking (delen) komt de fout ook voor in zeven andere berekeningen waarvan delingen een onderdeel uitmaken, zoals het becijferen van resttermen en het gebruik van irrationele getallen. De afwijking is afhankelijk van specifieke getallen en komt voor in specifieke combinaties van delers en noemers.

Drijvende komma-getallen

In de vorige generaties X86-processoren komt de bug niet voor. Dat komt omdat Intel met de komst van de Pentium het processorgedeelte voor berekeningen met drijvende komma-getallen van een geheel nieuw rekenschema voorzag.

In het nieuwe rekenschema worden eerst de belangrijkste bestanddelen van cijfers op elkaar gedeeld. Bij delen van 1,5278533 op 5,0052383 geeft bijvoorbeeld 15 op 50 delen al een aardig idee (3,3) van de uitkomst. De resttermen (278533 en 053883) worden in die eerste rekenstap even buiten beschouwing gelaten. In een volgende rekenstap worden van 278533 en 05883 de belangrijkste brokken gebruikt (27 en 05). In opvolgende stappen wordt zo een steeds grotere precisie verkregen. Deze rekenwijze maakt ook gebruik van statistische voorspellingen die van invloed zijn op latere stappen in het delingsproces. Het algoritme genereert in de Pentium steeds 2 bits in de uitkomst, in plaats van 1 bit in 486DX-processoren. Een Pentium kan daardoor twee maal sneller delen dan een 486DX-processor.

Het blijkt nu dat dit rekenschema het in zeer uitzonderlijke gevallen laat afweten. De ergste fout wordt gemaakt als het twaalfde bit van de uitkomst moet worden berekend. Dat geeft een relatieve fout van 0,25 promille. In financiële termen: een kwartje op duizend gulden.

Toen CNN op 23 november aandacht besteedde aan de Pentium-bug brak de hel pas goed los. De dagen daarna werd het door Intel gesponsorde forum op Compuserve overladen met flame mail van verontruste wetenschappers.

De Internet-berichten leveren een beeld op van gefrustreerde onderzoekers. Bij wetenschappers die afhankelijk zijn van veel rekenwerk knaagt de onzekerheid. Velen vragen zich af of ze hun onderzoeksresultaten nog wel kunnen verkopen.

Schandpaal

Er zijn ook Internet-gebruikers die gretig van de gelegenheid gebruik maken om Intel aan de schandpaal te nagelen. “Men is woedend, en terecht”, bitst een giftige Chris Ashton, die zijn flame mail kopt met 'PentiumGate!' en zijn berichten rijkelijk over de diverse Internet-forums uitstrooit. “Intels verklaringen over dit onderwerp zijn op zijn zachtst gezegd misleidend”, schrijft hij. “Goede en slechte Pentiums zijn niet gemarkeerd en zijn dus niet te onderscheiden. Dat moet opzet zijn.” Een woordvoerder van Intel laat weten geen enkele aanwijzing te hebben dat concurrenten achter dit soort haatberichten schuilgaan.

Intel had zelf veel van deze woede kunnen voorkomen. Toen Intel de fout tijdens testprogramma's ontdekte werden wel maatregelen genomen in het fabricageproces, maar het bestaan van de fout werd stilgezwegen.

Intel heeft intussen een analyse van het probleem bekendgemaakt. Dit rapport, Statistical Analysis of Floating Point Flaw in the Pentium processor, kwam een week na de CNN-uitzending uit. De belangrijkste conclusies: voor wetenschappelijk rekenwerk en voor de verwerking van grote hoeveelheden financiële data is een nieuwe Pentium noodzakelijk. Bij gebruikers die hun Pentium-PC voornamelijk gebruiken voor tekstverwerking, spreadsheets, videospelletjes, grafische toepassingen enzovoorts, komt de fout zelden of nooit voor. En mocht de fout in een afwijking van de einduitkomst resulteren - volgens Intel eens in de 27.000 jaar - dan zullen de meeste gebruikers het in de meeste gevallen niet merken.

Zakrekenmachine

Wat is nu de snelste manier om tegen een fout aan te lopen? Antwoord: recht-toe-recht-aan, alleen maar delingen uitvoeren in de FPU. Stel, we gebruiken daarvoor de langzaamste Pentium (van 60 MHz). Deze chip kan in één seconde 60 miljoen rekenstappen maken. Volgens Intel zijn 30 van deze stappen (klokcyclussen) nodig om twee drijvende komma-getallen op elkaar te delen. Met een zakrekenmachine valt dan eenvoudig te berekenen dat er gemiddeld eens in de 75 minuten een foute berekening wordt gemaakt. Dit is natuurlijk een extreem uitgangspunt. In het meeste wetenschappelijke rekenwerk zijn drijvende komma-delingen een klein onderdeel.

Tussen 75 minuten en 27.000 jaar zit nogal wat rek. De mate waarin gebruikers op foute berekeningen stuiten hangt natuurlijk ook af van de mate waarin de FPU-delingen in het rekenwerk worden gebruikt. Tekstverwerkingsprogramma's maken er bijvoorbeeld helemaal geen gebruik van. Volgens Intel stuiten gebruikers van spreadsheet-programma's zoals Lotus 123 of Excel slechts eens in de 27.000 jaar op significante fouten in de einduitkomst. Het bedrijf gaat er daarbij vanuit dat gebruikers gemiddeld minder dan 1000 FPU-delingen per dag doen. Bij het gebruik van programmatuur voor eenvoudige financiële berekeningen is het probleem ook verwaarloosbaar, de gemiddelde tijd die verstrijkt voordat gebruikers een merkbare fout tegenkomen (14.000 FPU-delingen per dag) is 2000 jaar.

Bij een videogame of grafische toepassing kan er een kleine fout in het beeld sluipen. Dat gebeurt gemiddeld eens per 270 jaar, bijvoorbeeld in de vorm van een kleurafwijking op het beeldscherm.

Microprocessoren worden steeds complexer. Intels hoogste baas, Andy Grove, onderstreepte dat nog eens nadat hij in een persoonlijk bericht op Internet uitgebreid zijn excuses had gemaakt. “We hebben de Pentium sneller uitgebracht dan enige andere processor in onze geschiedenis en constateerden geen problemen in de gebruikersgemeenschap. Niet dat de chip perfect is, dat is een chip nooit. Na 25 jaar ervaring in de microprocessor-business kan ik concluderen dat geen enkele microprocessor ooit perfect is. Maar tijdens de levenscyclus van de processor bereiken we wel een steeds grotere perfectie. In het leven van een typische microprocessor brengen we gewoonlijk een stuk of zes verbeteringen aan.”

Niettemin zegt Grove verbijsterd te zijn geweest toen men in de zomer de FDIV-fout in de Pentium vond. Grove: “De drijvende komma-fout komt zo weinig voor dat andere mankementen in computers veel eerder de kop op steken. De fout is eenvoudigweg verborgen gebleven achter ander faal-mechanismen.”

Een voorbeeld van zo'n faalmechanisme is de verandering van een 1 in een 0 (of omgekeerd) in het werkgeheugen van een computer. In een Dram-geheugen is de gemiddelde tijd die verstrijkt voor er zo'n fout optreedt 7 jaar (in 16 Drams van 4 Mbit). In computers wordt dit met foutcorrectie teruggebracht tot 700 jaar.

Nicely uit Lynchburg schrijft: “De huidige generatie microprocessors - en waarschijnlijk alle processoren sinds de 8080 - zijn zo complex dat het niet langer mogelijk is om ze foutloos te produceren. Het is onmogelijk om elke bug op te sporen. De ontdekking is echt geen verrassing.” Nicely noemt als voorbeelden van eerdere afwijkingen: de 32-bit fout voor vermenigvuldigingen in de eerste 386-processoren, de verkeerde berekening van de arcustangens in de eerste 486-chips en de 'revision F bug' in de 68000-processor van Motorola.

Politieke motieven

Fabrikanten van PC's met andere processoren hadden zich met de negatieve publiciteit rond de Pentium geen beter tijdstip kunnen wensen. IBM kondigde afgelopen dinsdag aan geen Pentium-PC's meer te zullen leveren. Er zijn twee belangrijke redenen om aan te nemen dat dit vooral is ingegeven door politieke motieven: IBM wil zijn eigen PowerPC-processor aan de man brengen. Daarnaast heeft het bedrijf in tegenstelling tot voorgaande x86-processoren de beslissing genomen geen rechten op de Pentium-architectuur te nemen. IBM maakt de Pentium dus niet in licentie.

De meeste chipproducenten lijken zich de eigen kwetsbaarheid goed te realiseren. Berichten in de Amerikaanse elektronicapers hebben een toon van 'dit had ons ook kunnen overkomen'. “Fouten zijn er altijd”, zegt Dave Witt, manager produktontwikkeling van de Pentiumkloon K5 bij Advanced Micro Devices. “Er zijn afwijkingen waarvan je weet hebt, afwijkingen die je verholpen hebt, maar er zijn er altijd die verborgen blijven.”

Nog steeds verwacht het grote publiek een trefzekerheid van 100 procent van zijn microprocessor, terwijl iedereen een fout van een halve kilo in zijn badkamerweegschaal accepteert. Ook zijn we het er allemaal wel over eens dat een boek met daarin één drukfout nog best te lezen is. “Houden jullie je eens rustig”, richtte een geërgerde wetenschapper zich tegen de klagers op een van de Internet forums. “Niemand van jullie had problemen tot jullie van de Pentium-bug hoorden. Get real, stop met huilen en ga terug naar jullie videogames.”