![Page 1: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/1.jpg)
Der Pentium Bug
Vortrag: Boris Ljepoja
Ausarbeitung: Thomas Pfennig & Stefan Rosenegger
30. Oktober 2002
![Page 2: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/2.jpg)
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
![Page 3: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/3.jpg)
Überblick
• Zeitlicher Hergang
• SRT-Divisionsalgorithmus
• Look-up-Tabelle
• Entstehung eines Fehlers
• Bitmuster
![Page 4: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/4.jpg)
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
![Page 5: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/5.jpg)
Zeitlicher HergangEntdeckung:• 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/824633702441 (ab der 8. Stelle falsch)
![Page 6: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/6.jpg)
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
![Page 7: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/7.jpg)
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
![Page 8: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/8.jpg)
Fehlerhäufigkeit
• Vaughan Pratt führt basierend auf Coes Modell empirische Untersuchungen durch
• 1 Million Divisionenganzzahlige Eingabegrößen {1...1000}
• 627 fehlerhafte Ergebnisse,davon 427 mit einem relativen Fehler größer als 10-7 und 14 größer als 10-5
![Page 9: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/9.jpg)
Ausmaß
• Extrembeispiel:4195835 : 3145727
= 1,33382045(korrekt)
= 1,33373907(fehlerhafter Pentium)
• relativer Fehler ≈ 6∙10-5
• vermutlich größtmöglicher Fehler
f(x,y) = x - (x/y)∙y
f(4195835,3145727) =
= 0
= 256
![Page 10: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/10.jpg)
3D-Fehlerdarstellung
![Page 11: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/11.jpg)
WahrscheinlichkeitenFirmenanalysen:
• INTEL: P(FDIV-Error) = 1 : 9 Mio.- zufällig verteilte Daten- 15 min intensiver FPU Nutzung täglich
=> ein Fehler alle 27 000 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
![Page 12: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/12.jpg)
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“
![Page 13: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/13.jpg)
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
![Page 14: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/14.jpg)
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
![Page 15: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/15.jpg)
← „Shift“ um eine Dezimalstelle
← „Shift“ um eine Dezimalstelle
5
0 - 20 –
,2
0 - 8 2
4- 16 1
17 : 4 =
Schuldivision
= 4∙100 + 2∙10-1 + 5∙10-2 + 0∙10-3 + …
![Page 16: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/16.jpg)
Bezeichnungen
p Dividendd Divisorq 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)
![Page 17: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/17.jpg)
Divisionsalgorithmus
p0 := pfor 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∙10-1 + q2∙10-2 + ...
{0,...,9}{-a,...,0,...,a}
10r
|pk+1| ≤ adr/(r-1)
p/q = q0 + q1∙r-1 + q2∙r-2 + ...
Basis r = 10:Basis r: (2a +1 ≥ r)
![Page 18: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/18.jpg)
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∙4-2 + ...
![Page 19: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/19.jpg)
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.q1q2q3q4q5... (Basis 4)
![Page 20: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/20.jpg)
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üblicherCarry-Save-Addition
![Page 21: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/21.jpg)
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
![Page 22: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/22.jpg)
Auswahlfunktion
Look-up-Table:
grün
blau
violett
rot
braun
~
~
~
~
~
2
1
0
- 1
- 2
![Page 23: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/23.jpg)
FDIVD := 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∙4-2 + ... + qN∙4-N
![Page 24: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/24.jpg)
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
![Page 25: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/25.jpg)
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
![Page 26: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/26.jpg)
Fehlercharakteristika
• Kritische Divisorwerte:2/3D+ = n∙1/8 mit n є {1,2,...}
D = 17/16 = 1.0001D = 20/16 = 1.0100D = 23/16 = 1.0111D = 26/16 = 1.1010D = 29/16 = 1.1101
• Fehlerhafte Einträge:PBad = 8/3D+ - 1/8
![Page 27: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/27.jpg)
Erreichbarkeit
• 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+
![Page 28: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/28.jpg)
Fehlerentstehung
• nur erstere beiden Wege können über Foothold unmittelbar im folgenden Schritt zu PBad führen
• Fehlerentstehungsmuster
P: P-2max/P-1
max → PBad - 1/8 → PBad
q: - 2/- 1 → 2 → 0
![Page 29: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/29.jpg)
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
![Page 30: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/30.jpg)
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
![Page 31: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/31.jpg)
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.“
![Page 32: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/32.jpg)
![Page 33: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/33.jpg)
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
![Page 34: Der Pentium Bug Vortrag: Boris Ljepoja Ausarbeitung: Thomas Pfennig & Stefan Rosenegger 30. Oktober 2002](https://reader035.vdocuments.pub/reader035/viewer/2022070310/55204d6149795902118b5e70/html5/thumbnails/34.jpg)
• 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
Divisionsrest
- -