Intels Fehler über 475 Millionen Dollar: Das Siliziumproblem hinter dem Pentium-FDIV-Bug
(righto.com)Intels Pentium-FDIV-Bug
-
Hintergrund: 1993 brachte Intel den leistungsstarken Pentium-Prozessor auf den Markt. Der Pentium bot viele Verbesserungen, darunter einen schnelleren Gleitkomma-Divisionsalgorithmus als der frühere Intel-486-Prozessor. Ein Jahr später entdeckte der Mathematikprofessor Nicely jedoch bei der Untersuchung der Kehrwerte von Primzahlzwillingen, dass der Pentium bei Gleitkommadivisionen fehlerhafte Ergebnisse erzeugte.
-
Entdeckung und Auswirkungen des Bugs: Intel betrachtete das Problem zunächst als „sehr geringfügiges technisches Problem“, doch der Bug entwickelte sich zu einem großen Medienthema. Schließlich entschied Intel, alle fehlerhaften Pentium-Chips auszutauschen, was das Unternehmen 475 Millionen Dollar kostete.
-
Ursache des Bugs: Der Divisionsalgorithmus des Pentium verwendet eine Lookup-Tabelle. Intel erklärte 1994, die Ursache des Bugs sei ein Skriptfehler gewesen, durch den fünf Einträge aus der Tabelle fehlten. Tatsächlich fehlten jedoch wegen eines mathematischen Fehlers 16 Einträge. Fünf dieser fehlenden Einträge lösten den FDIV-Bug aus.
-
Überblick über Gleitkommazahlen: Gleitkommazahlen können sehr große und sehr kleine Zahlen darstellen. Intels 8087-Gleitkomma-Koprozessor trug zur Entwicklung des IEEE-754-Standards bei, und die meisten Computer, darunter auch der Pentium, implementierten diesen Standard.
-
SRT-Division: Der Pentium führt Divisionen mit dem SRT-Algorithmus aus, der doppelt so schnell ist wie die standardmäßige Binärdivision. Der SRT-Algorithmus nutzt einen unkonventionellen Ansatz, der die Auswahl der Quotientenziffern erleichtert.
-
Struktur der Lookup-Tabelle: Die Lookup-Tabelle des Pentium enthält 2048 Einträge; fünf fehlende Einträge verursachten den FDIV-Bug. Diese Tabelle ist als Programmable Logic Array (PLA) implementiert.
-
Mathematische Grenze des Bugs: Der zentrale Schritt des Divisionsalgorithmus besteht darin, den partiellen Rest durch den Divisor zu teilen, um eine Quotientenziffer zu erhalten. Wird in diesem Prozess ein falscher
q-Wert gewählt, kann sich der Algorithmus nicht mehr davon erholen. -
Carry-Save- und Carry-Lookahead-Addierer: Die Divisionsschaltung des Pentium verwendet einen Carry-Save-Addierer, um Additionen und Subtraktionen effizient auszuführen. Dieser Addierer spielt eine wichtige Rolle bei der Entstehung des FDIV-Bugs.
-
Behebung des Bugs: Intel behob den Fehler, indem alle ungenutzten Einträge der Tabelle mit 2 gefüllt wurden. Dadurch wurde die Möglichkeit ausgeschlossen, auf falsche Einträge zuzugreifen, und zugleich wurden die PLA-Gleichungen vereinfacht, wodurch das PLA kleiner wurde.
1 Kommentare
Hacker-News-Kommentare
Der Autor ist bereit, Fragen zum Pentium-Bug zu beantworten
In Intels Whitepaper wurde behauptet, dass ein normaler Nutzer nur einmal in 27.000 Jahren auf das Problem stoßen würde, IBM analysierte jedoch, dass Kunden das Problem alle paar Tage erleben könnten
Es gab nur eine einzige Person, die den Bug bei realer Nutzung entdeckte
Es wird eine Erfahrung geteilt, bei der das Problem durch speziellen Code in einer Bibliothek behoben werden musste, weil man die CPU der Kunden nicht kontrollieren konnte
Es wird auf ein Problem in Intels Algorithmus zur Tabellenerzeugung hingewiesen, wobei betont wird, dass es im PR als geringfügiges Problem dargestellt wurde, tatsächlich aber ein größeres Problem war
Es wird hinterfragt, warum Intel alle ungenutzten Einträge der Tabelle mit 2 gefüllt hat