L’erreur à 475 millions de dollars d’Intel : le problème de silicium derrière le bug FDIV du Pentium
(righto.com)Le bug FDIV du Pentium d’Intel
-
Contexte : En 1993, Intel a lancé le processeur Pentium haute performance. Le Pentium apportait de nombreuses améliorations, notamment un algorithme de division en virgule flottante plus rapide que celui du précédent processeur Intel 486. Un an plus tard, le professeur de mathématiques Nicely, alors qu’il étudiait les réciproques des nombres premiers jumeaux, a découvert que le Pentium produisait des résultats erronés lors des divisions en virgule flottante.
-
Découverte du bug et impact : Intel considérait ce problème comme un « problème technique très mineur », mais le bug est devenu une affaire médiatique majeure. Intel a finalement décidé de remplacer toutes les puces Pentium défectueuses, ce qui a coûté 475 millions de dollars à l’entreprise.
-
Cause du bug : L’algorithme de division du Pentium utilise une table de consultation. En 1994, Intel a annoncé que la cause du bug était une erreur de script ayant supprimé cinq entrées de la table, mais en réalité, 16 entrées manquaient à cause d’une erreur mathématique. Parmi elles, cinq des entrées absentes provoquaient le bug FDIV.
-
Aperçu des nombres en virgule flottante : Les nombres en virgule flottante permettent de représenter des nombres très grands comme très petits. La puce coprocesseur en virgule flottante 8087 d’Intel a contribué au développement de la norme IEEE 754, mise en œuvre par la plupart des ordinateurs, y compris le Pentium.
-
Division SRT : Le Pentium effectue les divisions avec l’algorithme SRT, deux fois plus rapide que la division binaire standard. L’algorithme SRT utilise une approche inhabituelle qui facilite la sélection des chiffres du quotient.
-
Structure de la table de consultation : La table de consultation du Pentium contient 2048 entrées, dont cinq manquantes, ce qui provoque le bug FDIV. Cette table est implémentée sous forme de programmable logic array (PLA).
-
Limites mathématiques du bug : L’étape clé de l’algorithme de division consiste à diviser le reste partiel par le diviseur pour obtenir un chiffre du quotient. Si une valeur de
qincorrecte est sélectionnée à ce stade, l’algorithme ne peut pas se rétablir. -
Additionneurs carry-save et carry-lookahead : Le circuit de division du Pentium utilise un additionneur carry-save pour effectuer efficacement additions et soustractions. Cet additionneur joue un rôle important dans l’apparition du bug FDIV.
-
Correction du bug : Intel a corrigé le problème en remplissant toutes les entrées inutilisées de la table avec la valeur 2. Cela a supprimé toute possibilité d’accéder à une entrée erronée, tout en simplifiant les équations du PLA et en réduisant sa taille.
1 commentaires
Avis Hacker News
L’auteur est prêt à répondre aux questions sur le bug du Pentium
Dans son livre blanc, Intel affirmait qu’un utilisateur ordinaire ne rencontrerait le problème qu’une fois tous les 27 000 ans, mais IBM a estimé que ses clients pouvaient y être confrontés tous les quelques jours
Une seule personne aurait effectivement découvert le bug en usage réel
Partage d’une expérience où, faute de pouvoir contrôler les CPU des clients, il a fallu ajouter un code spécial dans une bibliothèque pour contourner le problème
Le problème dans l’algorithme de génération des tables d’Intel est pointé du doigt, avec l’idée que les relations publiques l’ont présenté comme un détail mineur alors qu’il s’agissait en réalité d’un problème plus important
Interrogation sur la raison pour laquelle Intel a rempli toutes les entrées inutilisées de la table avec la valeur 2