Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Der Pentium Bug Vortrag: Boris Ljepoja 30. Oktober 2002

Ähnliche Präsentationen


Präsentation zum Thema: "Der Pentium Bug Vortrag: Boris Ljepoja 30. Oktober 2002"—  Präsentation transkript:

1 Der Pentium Bug Vortrag: Boris Ljepoja 30. Oktober 2002
Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002

2 Was ist der Bug? Fließkommadivision kann falsche bzw. ungenaue Ergebnisse liefern Abhängigkeit von den Eingabewerten Fehler frühestens ab der vierten (Dezimal-)Stelle

3 Überblick Zeitlicher Hergang SRT-Divisionsalgorithmus Look-up-Tabelle
Entstehung eines Fehlers Bitmuster

4 Vorgeschichte Ende 1993: Markteinführung des Intel Pentium™ als 486-Nachfolger Bis dahin umfangreichste Marketing-Kampagne um neuen Markennamen „Pentium“ bekannt zu machen U.a. schnellerer Dividierer in der FPU, 5x schneller als 486 gleichen Takts

5 Zeitlicher Hergang Entdeckung:
1994 Prof. Thomas Nicely untersucht numerisch Primzahleigenschaften Pentium-System liefert abweichende Ergebnisse Juni 94: Ursachenlokalisation in FPU des Pentium (Befehl FDIV) nach Elimination aller übrigen Fehlerquellen Nicelys Bsp.: 1/ (ab der 8. Stelle falsch)

6 Zeitlicher Hergang 24. Oktober: Nicely kontaktiert Intel
Intel ohne Lösung, neuere Chips durch Revision aber fehlerfrei 30. Oktober: Nicely fragt in verschiedenen Foren nach Lösungsvorschlägen Nicely unterzeichnet NonDisclosure Agreement mit Intel

7 Coes Funktionsmodell Timothy Coe, FPU Designer, entwickelt ein
Modell des FP-Dividierers Genaue Aussagen über die auftretenden Fehler: Entstehung eines Fehlers Bestimmung kritischer Operanden Wahrscheinlichkeiten für Fehlerauftreten Fehler ermöglicht Einblick in die Funktionsweise des Pentium-FDIV

8 Fehlerhäufigkeit Vaughan Pratt führt basierend auf Coes Modell empirische Untersuchungen durch 1 Million Divisionen ganzzahlige Eingabegrößen { } 627 fehlerhafte Ergebnisse, davon 427 mit einem relativen Fehler größer als 10-7 und 14 größer als 10-5

9 Ausmaß Extrembeispiel: 4195835 : 3145727 relativer Fehler ≈ 6∙10-5
= 1, (korrekt) = 1, (fehlerhafter Pentium) relativer Fehler ≈ 6∙10-5 vermutlich größtmöglicher Fehler f(x,y) = x - (x/y)∙y f( , ) = = 0 = 256

10 3D-Fehlerdarstellung

11 Wahrscheinlichkeiten
Firmenanalysen: INTEL: P(FDIV-Error) = 1 : 9 Mio. zufällig verteilte Daten 15 min intensiver FPU Nutzung täglich => ein Fehler alle Jahre IBM: eine FDIV-Instruktion pro 1000 Maschinentakte => ein Fehler alle 28 Tage Pratt: Verwendung problematischer Operanden häufige Divisionen => mehr als ein Fehler pro Millisekunde

12 Verhalten bei Intel 27. November 1994: Intel räumt unter Vorbehalt „gefährdeten“ Kunden nach Prüfung der Berechtigung ein Umtauschrecht ein „Nicht alle User seien von der Ungenauigkeit betroffen, und wenn, dann sei es vertretbar“

13 Folgen Pentiumbesitzer verstehen die Haftungsausschluss-Politik bzw. selektiven Umtauschaktionen nicht Medien berichten ausführlich, so dass Empörung weit über die „Computer-Welt“ hinaus herrscht Mitte Dezember: Intel versucht Rufschädigung zu begrenzen und bietet bedingungslosen Austausch aller defekten Pentium CPUs an

14 Non-Restoring-Division
Probesubtraktion des Divisors: Positives Ergebnis = Weiterrechnen Negatives Ergebnis = Ursprünglichen Wert wiederherstellen (restore) & neue Subtraktion Non-Restoring-Division Akzeptierung von negativen Resten und spätere Korrektur

15 Schuldivision ,2 - 8 2 4 - 16 1 5 - 20 17 : 4 = ← „Shift“ um eine Dezimalstelle = 4∙ ∙ ∙ ∙ …

16 Bezeichnungen p Dividend d Divisor q Quotient
pk Divisionsrest im (k+1)-ten Schritt qk Quotientenbit im (k+1)-ten Schritt o.B.d.A.: 1 ≤ p, d < 2 (Radix 4)

17 Divisionsalgorithmus
Basis r = 10: Basis r: (2a +1 ≥ r) p0 := p for k = 0,1,... { Wähle Quotientenziffer qk є als Funktion von pk und d, so dass gilt: pk+1 := (pk - qk∙d) pk+1 є [0,10d[ } p/q = q0 + q1∙ q2∙ {0,...,9} {-a,...,0,...,a} 10 r |pk+1| ≤ adr/(r-1) p/q = q0 + q1∙r-1 + q2∙r

18 Radix 4-SRT-Division Basis r = 4 p0 := p for k = 0,1,... {
Wähle Quotientenziffer qk є {-2,-1,0,1,2} als Funktion von pk und d, so dass gilt: pk+1 := 4(pk - qk∙d) |pk+1| ≤ 8/3d } p/q = q0 + q1∙4-1 + q2∙

19 Radix 4-SRT-Division Bedingungen für Korrektheit:
pk+1 := 4(pk - qk∙d) |pk+1| ≤ 8/3d Gültige (nicht eindeutige) Darstellung von p/d: p/d = q0.q1q2q3q4q (Basis 4)

20 Radix 4-SRT-Division Vorteile:
Multiplikation mit {-2,-1,0,1,2} einfach auf Rechnern realisierbar Redundanz ermöglicht Berechnung zweier (binärer) Quotientenbits in einem Takt Kompatibilität mit rechnerüblicher Carry-Save-Addition

21 Ziffernauswahl Bestimmung der aktuellen Quotientenziffer aus 2-dim PD-Table Indizierung durch Näherungswerte für d (fest) und pk (variabel) Festlegung: D = x.yyyy P = xxxx.yyy D ≤ d < D+ = D + 1/16 Pk ≤ pk < Pk + 1/4

22 Auswahlfunktion Look-up-Table: grün blau violett rot braun ~ 2 1 - 1
- 1 - 2

23 FDIV D := floor1/16[d]; for k = 0,1,...,N { Pk := floor1/4[pk];
qk := table-lookup(Pk,D); Berechne (-qkd) über Nullierung oder Shift und/oder 1-Komplement; pk+1 := 4(pk + (-qkd)); // 2x Shift Korrigiere 1-Komplement falls qk < 0 durch Einfügen von „1“ am LSB von ck+1 } p/q = q0 + q1∙4-1 + q2∙ qN∙4-N

24 Physische Ursache 5 Einträge am oberen Ende des erreichbaren Bereichs des PLA sind fehlerhaft Zellen wurden bei der Produktion mit „0“ anstelle der korrekten „2“ belegt Auslesen der falschen Werte produziert fortschreitend falsche Quotientenbits

25 Physische Ursache Steuerungsskript übertrug nur 1061 von 1066 Einträgen des Entwurfs Grund war laut Intel zu kurze FOR-Schleife Fehlerhafte Einträge entsprechen unterer Schranke für Obergrenze Korrespondenz mit 5 unerreichbaren Einträgen am anderen Ende

26 Fehlercharakteristika
Kritische Divisorwerte: 2/3D+ = n∙1/8 mit n є {1,2,...} D = 17/16 = D = 20/16 = D = 23/16 = D = 26/16 = D = 29/16 = Fehlerhafte Einträge: PBad = 8/3D+ - 1/8

27 Erreichbarkeit Beschreibung Symbol Wert P-2max - 1/4 - 4/3D+ P-1max
PBad nur vom Eintrag unmittelbar unterhalb (Foothold) erreichbar Foothold nur auf vier Wegen erreichbar Beschreibung Symbol Wert oberes Ende q = - 2 Bereich P-2max - 1/4 - 4/3D+ oberes Ende q = - 1 Bereich P-1max - 1/4 - 1/3D+ Eintrag unterhalb Foothold PBad - 1/4 - 3/8 + 8/3D+ Foothold PBad - 1/8 - 1/4 + 8/3D+

28 Fehlerentstehung nur erstere beiden Wege können über Foothold unmittelbar im folgenden Schritt zu PBad führen Fehlerentstehungsmuster P: P-2max/P-1max PBad - 1/8 PBad q: - 2/- 1 2

29 Bitmuster Erreichen des Footholds führt nicht zwingend zu PBad
Fehlerentstehung funktioniert nur mit bestimmten Bitmustern Notwendiges Bitmuster: d = d1d2d3d4... d1 bis d4 ergeben kritischen Divisor d5 bis d10 müssen „1“ sein

30 Bitmuster Analyse der Bitmuster zeigt: frühestens im 7. Schritt kann zum ersten Mal qk < 0 auftreten Fehler kann daher frühestens im 9. Schritt entstehen (q0 bis q7 stets korrekt) Ursache für obere absolute Fehlerschranke bei ca. 5∙10-5, meist deutlich darunter

31 Erfahrungen Immenser Imageschaden für Intel
Kosten für Austauschaktion lagen bei $464 Mio. Pentium späterer Baureihen nach Revision korrigiert „The bug in the Pentium was an easy mistake to make, and a difficult one to catch.“

32

33 Carry-Save-Addition Speicherung der Übertragbits in zusätzlichem „carry-word“ Vermeidung der „carry-propagation“ Darstellung des Rests im Carry-Save-Format: pk = sk + ck

34 Divisionsrest Bestimmung des neuen Näherungswertes Pk+1 durch:
- - Bestimmung des neuen Näherungswertes Pk+1 durch: Pk+1 := 4(Pk - qkD+) + Rk Korrekturterm Rk ≤ Rkmax: q = 2: Rkmax = 5/4 q = 1: Rkmax = 1 q = 0: Rkmax = 7/8 q = 1: Rkmax = 3/4 q = 2: Rkmax = 3/4


Herunterladen ppt "Der Pentium Bug Vortrag: Boris Ljepoja 30. Oktober 2002"

Ähnliche Präsentationen


Google-Anzeigen