Als FDIV-Bug wurde im November 1994 ein Fehler im damals bereits seit anderthalb Jahren auf dem Markt befindlichen Pentium-Prozessor der Firma Intel bekannt. Der Fehler 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.
Inhaltsverzeichnis |
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. 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.[2]
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.
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 Anwendungen Gebrauch von den betroffenen Befehlen machten. 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 27000 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 fließkommaintensiven 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 Geplänkel 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,[3] deutlich näher an der Realität liege als die Darstellungen IBMs.
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 27000 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.[4]
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.[5]
Aber Intel zog auch seine Lehren aus dem Vorfall. Im Jahr 1995 begann man mit der schonungslosen Veröffentlichung aller in den eigenen CPUs entdeckten Fehler. Um an diese Informationen zu kommen, musste man zuvor noch eine Verschwiegenheitserklärung unterzeichnen. Von nun an konnte sich jeder in sogenannten Specification Updates über Fehler in Intel-CPUs informieren.
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:
|
|
|
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,3338204 |
5505001 / 294911 | 18,66600093 | 18,666652 |
8391667 / 1572863 | 5,3349560642 | 5,3352816 |