Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002."—  Präsentation transkript:

1 Der Pentium Bug Vortrag: Boris Ljepoja 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 und 14 größer als 10 -5

9 Ausmaß Extrembeispiel: : = 1, (korrekt) = 1, (fehlerhafter Pentium) relativer Fehler 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 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 Shift um eine Dezimalstelle –, : 4 = Schuldivision = …

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

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

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

19 Radix 4-SRT-Division Bedingungen für Korrektheit: p k+1 := 4(p k - q k d)|p k+1 | 8 / 3 d Gültige (nicht eindeutige) Darstellung von p / d : p / d = q 0.q 1 q 2 q 3 q 4 q 5...(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 p k (variabel) Festlegung: D = x.yyyyP = xxxx.yyy D d < D + = D + 1 / 16 P k p k < P k + 1 / 4

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

23 FDIV D := floor 1/16 [d]; for k = 0,1,...,N { P k := floor 1/4 [p k ]; q k := table-lookup(P k,D); Berechne (-q k d) über Nullierung oder Shift und/oder 1-Komplement; p k+1 := 4(p k + (-q k d)); // 2x Shift Korrigiere 1-Komplement falls q k < 0 durch Einfügen von 1 am LSB von c k+1 } p / q = q 0 + q q q N 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 / 3 D + = 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: P Bad = 8 / 3 D / 8

27 Erreichbarkeit P Bad nur vom Eintrag unmittelbar unterhalb (Foothold) erreichbar Foothold nur auf vier Wegen erreichbar BeschreibungSymbolWert oberes Ende q = - 2 Bereich P -2 max - 1 / / 3 D + oberes Ende q = - 1 Bereich P -1 max - 1 / / 3 D + Eintrag unterhalb Foothold P Bad - 1 / / / 3 D + Foothold P Bad - 1 / / / 3 D +

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

29 Bitmuster Erreichen des Footholds führt nicht zwingend zu P Bad Fehlerentstehung funktioniert nur mit bestimmten Bitmustern Notwendiges Bitmuster: d = d 1 d 2 d 3 d 4... d 1 bis d 4 ergeben kritischen Divisor d 5 bis d 10 müssen 1 sein

30 Bitmuster Analyse der Bitmuster zeigt: frühestens im 7. Schritt kann zum ersten Mal q k < 0 auftreten Fehler kann daher frühestens im 9. Schritt entstehen (q 0 bis q 7 stets korrekt) Ursache für obere absolute Fehlerschranke bei ca , 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: p k = s k + c k

34 Bestimmung des neuen Näherungswertes P k+1 durch: P k+1 := 4(P k - q k D + ) + R k Korrekturterm R k R k max : q = 2:R k max = 5 / 4 q = 1:R k max = 1 q = 0:R k max = 7 / 8 q = 1:R k max = 3 / 4 q = 2:R k max = 3 / 4 Divisionsrest - -


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

Ähnliche Präsentationen


Google-Anzeigen