Le bug des Pentium Pro et Pentium II
Dans la série » la vie des processeurs » , il semblerait qu’un bug ait été découvert non seulement dans le Pentium Pro, mais aussi dans le tout nouveau Pentium Pro II.
On se souvient du sort réservé au premier Pentium buggé qui avait été transformé en boucles d’oreilles, donc on peut s’attendre à voir débarquer prochainement la nouvelle collection de bracelets en Silice de chez Intel.
Le problème découvert sur ces processeurs ne se reproduit pas sur les Pentium classiques, MMX ,ni sur les K6. Les découvreurs du bug n’ont pas essayé sur les Cyrix.
Quand on sait que ce bug concerne l’unité de calcul en virgule flottante, on comprend peut-être pourquoi.
Ce bug a été affectueusement renommé DAN-0411, du nom du découvreur, ainsi que de la date de découverte.
C’est quoi donc que ca merdoie ?
Vous savez tous qu’un nombre entier est stocké de deux manières dans un processeur ? Non ? Bon, bah ca y est vous le savez. Vous avez à ma droite l’entier court, codé sur 16 bits, et à ma droite, l’entier long, codé sur 32 bits. Bon, ensuite vous avez dans votre unité de calcul en virgule flottante (euh je vais l’appeler FPU pour gagner du temps), donc vous avez vos nombres codés sur 80 bits.
Alors, des fois, vous êtes la , tranquille , peinard , et puis vous vous dites , tiens , si je convertissais mon nombre à virgule en nombre entier. Et puis , paf , là, pas de bol , bah le nombre est trop grand pour rentrer dans les 16 bits d’un entier court.
Or, votre processeur, qui obéit aux règles de l’IEEC sur les FPU, il met un flag (drapeau quoi) à 1 pour dire au programme , » euh z’y va fais gaffe, ca rentre pas ton chiffre « .
C’est ce que fait un Pentium, c’est ce que fait un MMX, c’est ce que fait un K6. Tout le temps.
Mais le fameux Dan a trouvé deux mauvais élèves : Le Pentium Pro, et le tout nouveau PENTIUM II, normal, il partage la même architecture de type P6.
Ils ont décidé de jouer les rebelles, et dans certains cas, bah ils mettent pas le fameux flag ! ! Alors, c’est vrai qu’on pourrait penser que c’est encore un bug qui intervient tous les 10454 ans, mais en fait, les découvreurs estiment à 140,739,635,839,000 nombres qui provoquent ce bug ! ! Ils signalent aussi que c’est à cause d’un bug du même type (mais dans ce cas software), qui a provoqué le petit problème de Ariane 5, software qui ne gérait pas ce type de dépassement, résultat : PATATRA.
Mais pourquoi donc qu’on savait rien ?
On se demande bien comment ce bug a pu rester caché si longtemps.
L’hypothèse émise serait que les programmes qui étaient censés tester les FPU, étaient écrits en FORTRAN, langage peu portable, qui peut varier en fonction du compilateur.
Donc, on a cru que c’était un bug software. Et c’est là que Dan intervient, en convertissant le programme Fortran en C. Et là, ça se recompile très bien, en étant moins dépendant de la machine. Bien vu Dan ! ! Et Dan, comme il voulait pas s’enflammer, il a demandé à son pote Robert de ré-écrire la routine en Assembleur X86, comme ca plus proche de la bécane on peut pas faire. Et patatra, Robert confirme qu’il y a une couille dans le paté.
Dés qu’on essaye de passer un grand nombre négatif en virgule flottante, en entier, et bah paf, le bit IE qui devrait être là, bah il reste à 0 ! !
Pour l’instant aucune réaction d’Intel, Robert a même été jusqu’à vérifier dans le bouquin de Intel répertoriant les bugs, et il y a rien sur celui ci .
On vous en a parlé, attendez vous à en ré-entendre parler prochainement.
Vous pouvez avoir des infos la dessus sur la page de Robert :
http://www.x86.org/secrets/Dan0411.html