Error de divisió del Pentium
El 30 d'octubre de 1994 el professor Thomas Nicely de la Universitat de Lynchburg va descobrir un bug en la unitat de coma flotant del Intel Pentium. Es va adonar que algunes operacions de divisió retornaven sempre un valor erroni per excés. Altres persones van confirmar ràpidament aquests errors en les divisions. Aquest error es va fer notori molt ràpidament i se li va donar el nom d'error FDIV del Pentium (FDIV és la instrucció de divisió en coma flotant dels microprocessadors x86). Uns altres van posar en relleu problemes de divisió el resultat retornat de la qual pel Pentium tenia un error de fins a 61 unitats per milió. Tots els processadors de família Pentium que tinguen una freqüència de rellotge de més de 100 MHz tenen l'error corregit.
Models afectats
[modifica]El problema passa amb només alguns models del processador Pentium. Qualsevol processador amb una velocitat de rellotge d'almenys 120 MHz és suficientment nou per no tindre l'error. En els models afectats, el programa: Intel Processor Frequency ID Utility és capaç de detectar l'error.
Els deu models afectats són llistats seguidament:
Family | Model | Stepping | Core stepping | Clock rate | FSB speed | S-spec |
---|---|---|---|---|---|---|
5 | 1 | 3 | B1 | 60 MHz | 60 MHz | Q0352, Q0412, SX753 |
5 | 1 | 3 | B1 | 66 MHz | 66 MHz | Q0353, Q0413, SX754 |
5 | 1 | 5 | C1 | 60 MHz | 60 MHz | Q0466, SX835, SZ949 |
5 | 1 | 5 | C1 | 66 MHz | 66 MHz | Q0467, SX837, SZ950 |
Family | Model | Stepping | Core stepping | Clock rate | FSB speed | S-spec |
---|---|---|---|---|---|---|
5 | 2 | 1 | B1 | 75 MHz | 50 MHz | Q0601 |
5 | 2 | 1 | B1 | 90 MHz | 60 MHz | Q0542, Q0613, Q0543, SX879, SX885, SX909, SX874 |
5 | 2 | 1 | B1 | 100 MHz | 66 MHz | Q0563, Q0587, Q0614, SX886, SX910 |
5 | 2 | 2 | B3 | 75 MHz | 50 MHz | Q0606, SX951 |
5 | 2 | 2 | B3 | 90 MHz | 60 MHz | Q0628, Q0611, Q0612, SX923, SX922, SX921, SX942, SX943, SX944, SZ951 |
5 | 2 | 2 | B3 | 100 MHz | 66 MHz | Q0677, SX960 |
Repercussions
[modifica]Aquestes comprovacions van crear una gran polèmica. Intel va negar inicialment l'existència del problema. Més tard, Intel va remarcar la insignificança dels defectes dels seus microprocessadors, volent tranquil·litzar als usuaris. Intel es va negar a substituir sistemàticament als microprocessadors defectuosos; no obstant això, si una persona podia demostrar que havia estat afectada per l'error, llavors Intel procediria a canviar el seu processador. Encara que avaluacions efectuades per organismes independents van mostrar la poca importància de les conseqüències d'error i que l'efecte era menyspreable en la majoria de les ocasions, es va provocar una situació en la qual els usuaris de Intel Pentium demandaven el canvi dels processadors defectuosos. Empreses com IBM es van unir a la denúncia. Finalment, Intel es va veure forçada a acceptar substituir tots els processadors defectuosos, el que li va representar un cost enorme. Aquells que disposen d'una unitat d'aquest tipus encara poden posar-se en contacte amb Intel perquè la hi canvie.
Comprovació de l'error
[modifica]El següent codi en BASIC permet saber si el vostre processador té l'error de divisió.
x = 8391667.0 y = 1572863.0
IF x - (x / y) * y <> 0 THEN PRINT "El vostre processador té l'error de divisió del Pentium." ELSE PRINT "El vostre processador no té l'error de divisió del Pentium." END IF
Una altra forma de detectar l'error és mitjançant l'operació següent amb qualsevol programa que nativament utilitzi nombres de coma flotant, com Windows Calculator or Microsoft Excel des de Windows 95/98 fins sistemes operatius més nous.
El valor correcte és:
Quan és convertit pel processador a hexadecimal, 4,195,835 = 0x4005FB i 3,145,727 = 0x2FFFFF. El '5' en 0x4005 dispara l'error en la unitat lògica de control de la FPU. Retornant un valor incorrecte per un model Pentium afectat per fins a 4 xifres:[1]
Referències
[modifica]- ↑ «Pentium FDIV bug - a Picture». Kansas University Institute for Policy and Social Research, 30-11-1994. Arxivat de l'original el 2021-11-03. [Consulta: 10 desembre 2016].