3 points par GN⁺ 2024-12-30 | 1 commentaires | Partager sur WhatsApp

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 q incorrecte 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

 
GN⁺ 2024-12-30
Avis Hacker News
  • L’auteur est prêt à répondre aux questions sur le bug du Pentium

    • La réaction d’Intel a été intéressante, et le fait de ne pas remplacer les processeurs de tous les utilisateurs a suscité beaucoup de mauvaise presse
    • Le cas de l’Amazon Colorsoft est mentionné comme un exemple où le problème a été résolu par un remplacement discret des unités défectueuses
    • Le problème de grésillement des Apple AirPods Pro est également cité comme un cas résolu par un remplacement discret
  • 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

    • Intel semble avoir raisonné à l’échelle d’un utilisateur individuel, tandis qu’IBM prenait en compte les demandes d’assistance
    • Lorsqu’on traite un grand volume de requêtes, même un problème à très faible probabilité peut survenir fréquemment
  • Une seule personne aurait effectivement découvert le bug en usage réel

    • Une étude dans laquelle on avait fourni de mauvaises calculatrices à des étudiants est mentionnée pour expliquer qu’être affecté par une erreur et s’en rendre compte sont deux choses différentes
    • La plupart des gens ne vérifient pas si la sortie de leur ordinateur est correcte
  • 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

    • Il est mentionné qu’une approche plus sûre aurait été de ne modifier que 5 entrées
    • La table corrigée étant plus simple, cela amène à se demander pourquoi elle n’avait pas été conçue ainsi dès le départ