3 Punkte von GN⁺ 2024-12-30 | 1 Kommentare | Auf WhatsApp teilen

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

 
GN⁺ 2024-12-30
Hacker-News-Kommentare
  • Der Autor ist bereit, Fragen zum Pentium-Bug zu beantworten

    • Intels Reaktion war interessant, und weil nicht die Prozessoren aller Nutzer ersetzt wurden, gab es viel negative Presse
    • Als Beispiel wird der Fall des Amazon Colorsoft erwähnt, bei dem das Problem durch einen stillen Austausch der defekten Geräte gelöst wurde
    • Auch das Knackgeräusch-Problem der Apple AirPods Pro wird als Fall erwähnt, der durch einen stillen Austausch gelöst wurde
  • 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

    • Intel scheint einen einzelnen Nutzer betrachtet zu haben, während IBM offenbar Support-Anfragen berücksichtigte
    • Wenn große Mengen an Anfragen verarbeitet werden, können selbst Probleme mit geringer Wahrscheinlichkeit häufig auftreten
  • Es gab nur eine einzige Person, die den Bug bei realer Nutzung entdeckte

    • Es wird eine Studie erwähnt, in der Studenten fehlerhafte Taschenrechner gegeben wurden, um zu erklären, dass das Erkennen eines Fehlers etwas anderes ist als davon betroffen zu sein
    • Die meisten Menschen überprüfen nicht, ob die Ausgabe ihres Computers korrekt ist
  • 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

    • Erwähnt wird, dass es sicherer gewesen wäre, nur 5 Einträge zu ändern
    • Die geänderte Tabelle sei einfacher, und es wird gefragt, warum sie nicht von Anfang an so gestaltet wurde