Privacy Policy Cookie Policy Terms and Conditions Pentium-FDIV-Bug - Wikipedia

Pentium-FDIV-Bug

aus Wikipedia, der freien Enzyklopädie

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

[Bearbeiten] Entdeckung des Fehlers

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.

[Bearbeiten] Häufigkeit und Auswirkungen des Fehlers

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 anspruchvollen 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.

[Bearbeiten] Reaktionen auf den Fehler

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.

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. [4]

Aber Intel zog auch seine Lehren aus dem Vorfall. 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.

[Bearbeiten] Betroffene Pentium-Versionen

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 [5] 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 mit 75, 90 und 100 MHz war hingegen teuer und vergleichsweise selten. Unter anderem deswegen machen die 1994 gefertigten P5-Modelle auch den größten Teil der vom FDIV-Bug betroffenen CPUs aus.

Folgende Pentium-Versionen sind betroffen:

Pentium 60/66 (P5)
Family Model Stepping Core-Stepping
5 1 3 B1
5 1 5 C1
Pentium 75/90/100 (P54C)
Family Model Stepping Core-Stepping
5 2 1 B1
5 2 2 B3

Die Identifizierung einer fehlerhaften CPU ist einfach, wenn sie in einem lauffähigen System steckt. Wenn die im Folgenden aufgeführten Rechenoperationen beispielsweise im Windows-Taschenrechner das falsche Ergebnis liefern, ist die CPU betroffen:

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

Findet sich bei einem Linux-System in /proc/cpuinfo ein Eintrag der Art "fdiv_bug: yes", ist die CPU ebenfalls betroffen.

Hat man eine ausgebaute CPU, so richtet man sich am einfachsten nach der sogenannten S-SPEC, ein für gewöhnlich fünfstelliges Kürzel aus Buchstaben und Ziffern, das auf das CPU-Gehäuse aufgedruckt ist. Betroffen sind CPUs mit den folgenden S-SPECs:

Pentium 60/66 (P5)
Q0352 Q0353 Q0394 Q0395 Q0399
Q0400 Q0412 Q0413 Q0466 Q0467
SX753 SX754 SX835 SX837
SZ949 SZ950
Pentium 75/90/100 (P54C)
Q0540 Q0541 Q0542 Q0543 Q0563 Q0587 Q0601
Q0606 Q0611 Q0612 Q0613 Q0614 Q0628 Q0677
SX874 SX879 SX885 SX886 SX909 SX910 SX921
SX922 SX923 SX942 SX943 SX944 SX951 SX960
SZ951

[Bearbeiten] Siehe auch

[Bearbeiten] Weblinks

THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu