Pentium-FDIV-Bug

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

FDIV-Bug bezeichnet einen Hardwarefehler des Pentium-Prozessors von Intel. Der Fehler wurde im November 1994 anderthalb Jahre nach der Markteinführung bekannt und sorgt bei Gleitkomma-Divisionen mit bestimmten Werten für falsche Ergebnisse.[1] Kein anderer Fehler in einem CPU-Design hatte jemals zuvor für so viel Wirbel und Aufregung bei Anwendern und Fachleuten gesorgt.

Die Bezeichnung FDIV-Bug leitet sich vom Namen eines häufig verwendeten Gleitkommabefehls bei x86-Prozessoren ab. Der Fehler betrifft aber keineswegs ausschließlich den Befehl FDIV, wie man vermuten könnte. Vielmehr sind alle Befehle betroffen, die die fehlerhafte Divisionseinheit benutzen. Im Einzelnen sind das: FDIV, FDIVP, FDIVRP, FIDIV, FIDIVR, FPREM, FPREM1, FPTAN und FPATAN.[2][3]

Entdeckung des Fehlers[Bearbeiten]

Als Entdecker, dem es zu verdanken ist, dass der Fehler der breiten Öffentlichkeit bekannt wurde, gilt anerkanntermaßen Prof. Thomas Ray Nicely vom Lynchburg College. Er entdeckte den Fehler beim Versuch einer genauen Berechnung der brunschen Konstante. Nachdem er dem Fehler mehrere Monate auf den Grund gegangen war, informierte er am 30. Oktober 1994 ausgewählte Fachbuchautoren und Fachjournalisten und brachte damit den Stein ins Rollen. Die näheren Umstände und den zeitlichen Ablauf der Entdeckung hat Prof. Nicely in einem FAQ zusammengefasst.[4]

Nach eigenen Angaben hatte Intel den Fehler bereits vor seinem Bekanntwerden entdeckt. Verschiedene Quellen nennen den Juni, andere gar erst den August 1994 als Zeitpunkt der Entdeckung. Prof. Nicely spricht in seinem FAQ davon, dass Intel den Fehler bereits im Mai bei der Arbeit an der Gleitkommaeinheit des damals noch in Entwicklung befindlichen Pentium-Nachfolgers P6, dem späteren Pentium Pro, entdeckte. Als gesichert kann gelten, dass Intel den Fehler bereits seit längerem kannte. Anders lässt sich der Umstand, dass Intel schon im Oktober eine fehlerbereinigte Version in Musterstückzahlen liefern konnte, nicht erklären.

Häufigkeit und Auswirkungen des Fehlers[Bearbeiten]

Die Auswirkungen des Fehlers für den Normalanwender waren in den Wochen nach der Entdeckung umstritten. Nicht zuletzt hingen die nämlich davon ab, ob und in welchem Maße verwendete Software Gebrauch von den betroffenen Befehlen machte. Dabei darf nicht vergessen werden, dass verbreitete Standardsoftware 1994 eine Gleitkommaeinheit längst nicht voraussetzen konnte. Viele Anwender arbeiteten zu dieser Zeit noch mit CPUs, die eine solche Einheit nicht besaßen, weshalb viele damals gebräuchlichen Anwendungen die betroffenen Befehle gar nicht verwendeten.

Als sicher gilt, dass der Fehler bei zufällig gewählten Operanden im Mittel etwa einmal alle neun Milliarden FDIV-Operationen auftritt. Was das allerdings in der Praxis bedeutet, war nicht so einfach zu benennen.

Intel behauptete zunächst, der Fehler werde bei einem Normalanwender statistisch nur alle 27.000 Jahre einmal auftreten und sei nur bei der Primzahlerzeugung oder anderen anspruchsvollen Berechnungen relevant. Nicht zuletzt die Fachpresse hielt dem andere Schätzungen entgegen. So ermittelte das deutsche Fachmagazin c’t in seiner Januar-Ausgabe 1995 eine durchschnittliche Häufigkeit von einem Fehler alle 60 Stunden bei gleitkommaintensiven Anwendungen, räumte aber gleichzeitig ein, „dass die Zahl der wirklich Betroffenen tatsächlich nicht so groß sein dürfte“.

Auch IBM schaltete sich ein und stoppte pressewirksam die Auslieferung von Rechnern mit Pentium-CPU und rechnete vor, dass der Fehler statistisch sogar alle sechs Stunden einmal auftreten könne. Die Reaktionen und Behauptungen IBMs waren damals aber nicht unumstritten; war IBM doch mit seiner PowerPC-CPU und seinen RS/6000-Workstations einer der schärfsten Konkurrenten von Intel im Highend-Sektor. So wurde der Vorstoß IBMs von vielen eher als marktstrategisches Manöver gewertet.

Auch Prof. Nicely persönlich nahm Intel angesichts derart dramatischer Darstellungen in Schutz. In seinem FAQ vertrat er den Standpunkt, dass ein zwischenzeitlich von Intel in Umlauf gebrachtes White Paper, das eine statistische Analyse des Fehlers enthielt,[5] deutlich näher an der Realität liege als die Darstellungen IBMs.

Ursache des Fehlers[Bearbeiten]

Die CPU verwendet das Verfahren der SRT-Division, bei der Lookup-Tabellen verwendet werden. In den fehlerhaften CPUs lagen hierbei fünf falsche Tabelleneinträge vor. Statt des Wertes 2 ist in den Zellen der Wert 0 eingetragen. Der Fehler tritt, wegen der ungleichen Wahrscheinlichkeitsverteilung, mit der die einzelnen Zellen ausgelesen werden, nur selten, beziehungsweise nur bei bestimmten Zahlenkombinationen, auf.[6]

Reaktionen auf den Fehler[Bearbeiten]

Nachdem Intel den Fehler entdeckt hatte, beseitigte man ihn stillschweigend und begann vermutlich irgendwann im Spätsommer oder Anfang Herbst damit, die Produktion der verschiedenen Pentium-Varianten nach und nach auf die fehlerbereinigten Versionen umzustellen. Trotzdem lieferte man betroffene CPUs noch bis spät ins Jahr 1994 aus, lange Zeit davon ohne Wissen der Anwender.

Kritiker warfen Intel deshalb vor, man hätte den Fehler zunächst vertuschen, dann verharmlosen wollen. So verstieg sich Intel nach Bekanntwerden des Fehlers in die Behauptung, er würde bei den meisten Anwendern nie auftreten. In diesem Zusammenhang soll auch von dem bereits oben erwähnten „statistischen Auftreten alle 27.000 Jahre bei normalen Endusern“ die Rede gewesen sein. Diese Einschätzung löste bei Anwendern und Fachpresse empörte Reaktionen aus.

Intel kündigte zunächst an, nur CPUs von Anwendern tauschen zu wollen, die darlegen konnten, dass sie von dem Fehler betroffen seien. Viele Anwender forderten Intel daraufhin auf, alle betroffenen CPUs zu tauschen. Auch die Fachpresse ließ kein gutes Haar an dieser Ankündigung. Nachdem der Druck immer stärker wurde und dem Konzern ein ernstzunehmender Imageschaden drohte, lenkte Intel am 20. Dezember schließlich ein und kündigte ein umfassendes Austauschprogramm für alle betroffenen CPUs an.[7]

Nicht zuletzt erntete Intel für den Fehler auch viel Schadenfreude. Witze der Art „Wieviele Intel-Mitarbeiter braucht man, um eine Glühbirne zu wechseln? 1,9999983256“ oder „You mean 2.00000000 + 2.000000000 doesn't equal 3.999998456?“ kursierten damals zuhauf.[8]

Aber Intel zog auch seine Lehren aus dem Vorfall. Andy Grove entschuldigte sich in der Presse für den Ärger, den seine Haltung verursacht hat. Es wurde extra für den Umtausch der fehlerhaften CPUs eine Telefonzentrale eingerichtet. Insgesamt stellte Intel für diesen Vorfall 475 Millionen Dollar zur Verfügung, was über der Hälfte des Gewinns im vierten Quartal des Jahres 1994 entsprach. Am Ende wurden ca. eine Million fehlerhafte Prozessoren umgetauscht. 1995 begann man mit der Veröffentlichung aller in den eigenen CPUs entdeckten Fehler. Um an diese Informationen zu kommen, musste man zuvor noch einen Geheimhaltungsvertrag unterzeichnen. Von nun an konnte sich jeder in sogenannten Specification Updates über Fehler in Intel-Produkten informieren.

In den Specification Updates betroffener Pentium-CPUs werden die Auswirkungen des FDIV-Bugs umschrieben als: „Slight Precision Loss for Floating-point Divides on Specific Operand Pairs“, was übersetzt soviel bedeutet wie: „geringfügig reduzierte Genauigkeit bei Gleitkomma-Divisionen mit bestimmten Operanden-Paaren“. In Abhängigkeit vom Typ der Pentium-CPU trägt der FDIV-Bug in diesen Specification Updates die Bezeichnung Erratum 20 (beim P5-Pentium) bzw. Erratum 23 (beim P54C-Pentium).[2][3]

Betroffene Pentium-Versionen[Bearbeiten]

Pentium 66 (SX837) mit FDIV-Bug.

Der Fehler findet sich in allen Pentium-CPUs, die bis Anfang Herbst 1994 produziert wurden. Auch viele später hergestellte Exemplare haben ihn noch. Da bis Anfang 1995 lediglich Pentium-CPUs bis einschließlich 100 MHz hergestellt wurden, sind alle schnelleren Varianten von dem Fehler nicht betroffen.

Das heißt aber nicht, dass alle Pentium-CPUs mit Taktfrequenzen von 100 MHz und weniger den Fehler haben. Da Intel die CPUs im Rahmen des Austauschprogramms ausschließlich gegen solche mit gleicher Taktfrequenz tauschte und fehlerbereinigte Versionen dieser CPUs auch weiterhin verkaufte, sind danach noch sehr viele Pentium-CPUs mit Taktfrequenzen zwischen 60 und 100 MHz in Umlauf gekommen, die den Fehler nicht haben. Allein von der Taktfrequenz lässt sich also nicht auf das Vorhandensein des FDIV-Bugs schließen.

Bis Herbst 1994 bestand der Großteil der Pentium-Produktion jedoch aus Modellen des ersten Pentium-Typs P5, den es ausschließlich mit Taktfrequenzen von 60 und 66 MHz gab. Der fortschrittlichere P54C-Typ, der zunächst ausschließlich mit 90 und 100 MHz verfügbar war, war hingegen teuer und vergleichsweise selten. Unter anderem deswegen machen die 1994 gefertigten P5-Modelle auch den größten Teil aller vom FDIV-Bug betroffenen CPUs aus.

Da Intel den Pentium mit 75 MHz für den Sockel 5 (SPGA-Typ) erst am 10. Oktober 1994 vorstellte, als das fehlerbereinigte B5-Stepping des P54C bereits in Produktion war, sind von der Sockel-5-Version nur die 90- und 100-MHz-Typen betroffen, welche bereits vorher verkauft wurden. In Desktop-PCs und Servern sollten sich daher keine betroffenen 75-MHz-Typen finden. Beim Pentium für den mobilen Einsatz ist hingegen ausschließlich die 75-MHz-Version betroffen. Das schließt selbstverständlich die Möglichkeit nicht aus, dass es Hersteller gegeben haben mag, die Sockel-5-Typen mit 90 und 100 MHz in Notebooks verbaut haben.

Folgende Pentium-Versionen sind betroffen:[2][3]

Pentium 60/66 (P5)
Family Model Stepping Core-Stepping
5 1 3 B1
5 1 5 C1
Q0352 Q0353 Q0394 Q0395 Q0399
Q0400 Q0412 Q0413 Q0466 Q0467
SX753 SX754 SX835 SX837 SZ949
SZ950
Pentium 90/100 (P54C)
Family Model Stepping Core-Stepping
5 2 1 B1
5 2 2 B3
Q0542 Q0543 Q0563 Q0587 Q0611
Q0612 Q0613 Q0614 Q0628 Q0677
SX874 SX879 SX885 SX886
SX909 SX910 SX921 SX922 SX923
SX942 SX943 SX944 SX960
SZ951
mobile Pentium 75 (P54C)
Family Model Stepping Core-Stepping
5 2 1 B1
5 2 2 B3
Q0601 Q0606
SX951

Hat man eine ausgebaute CPU, so richtet man sich am einfachsten nach der so genannten sSpec, ein für gewöhnlich fünfstelliges Kürzel aus Buchstaben und Ziffern, das auf das CPU-Gehäuse aufgedruckt ist. Die betroffenen sSpecs sind in der Tabelle oben angegeben.

Die Identifizierung einer fehlerhaften CPU anhand ihrer Aufschrift ist natürlich nicht möglich, wenn sie in einem lauffähigen System steckt. Es gibt aber trotzdem Möglichkeiten, herauszufinden, ob die CPU von dem Fehler betroffen ist. Findet sich bei einem Linux-System in /proc/cpuinfo ein Eintrag der Art  fdiv_bug: yes , ist die CPU betroffen; ebenso wenn die im Folgenden aufgeführten Rechenoperationen im Windows-Taschenrechner das falsche Ergebnis liefern:

Rechenoperation falsches Ergebnis richtiges Ergebnis
4195835/3145727 1,33373907 1,3338204x
5505001/294911 18,66600093 18,666652x
8391667/1572863 5,3349560642 5,3352816x

Siehe auch[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. http://www5.in.tum.de/lehre/seminare/semsoft/unterlagen_02/pentiumbug/website/
  2. a b c 60- and 66-MHz Pentium Processor Specification Update
  3. a b c Pentium Processor Specification Update
  4. FAQ von Professor Nicely zum FDIV-Bug
  5. White Paper Intels mit Analyse des FDIV-Bugs
  6. Tim Jackson. Inside Intel, 1998 Hoffmann und Campe
  7. Informationen von Intel zum FDIV Replacement Program
  8. Gängige Witze zum FDIV-Bug (Archivversion)

Quellen[Bearbeiten]

Weblinks[Bearbeiten]