Bug Pentium FDIV - Pentium FDIV bug

Intel Pentium de 66 MHz (sSpec = SX837) cu bug-ul FDIV

Pentium FDIV bug - ul este un bug hardware care afectează unitatea în virgulă mobilă (FPU) de procesoare Intel Pentium timpurii . Din cauza bug-ului, procesorul ar întoarce rezultate incorecte în virgulă mobilă atunci când împarte anumite perechi de numere de mare precizie . Bugul a fost descoperit în 1994 de Thomas R. Nicely, profesor de matematică la Lynchburg College . Valorile lipsă într-un tabel de căutare utilizat de algoritmul de divizare în virgulă mobilă a FPU au condus la calcule care au dobândit mici erori. În timp ce aceste erori, în majoritatea cazurilor de utilizare, apar rar și ar duce la mici abateri de la valorile de ieșire corecte, în anumite circumstanțe erorile pot apărea frecvent și pot duce la abateri mai semnificative.

Severitatea bug-ului FDIV este dezbătută. Deși rareori întâlnite de majoritatea utilizatorilor ( revista Byte a estimat că 1 din 9 miliarde de puncte flotante împarte cu parametri aleatori ar produce rezultate inexacte), atât defectul, cât și modul inițial de gestionare a problemei de către Intel au fost puternic criticate de comunitatea tehnologică.

În decembrie 1994, Intel a reamintit procesoarele defecte în ceea ce a fost prima retragere completă a unui cip de computer. În ianuarie 1995, Intel a anunțat „o taxă înainte de impozitare de 475 milioane dolari pentru câștiguri, aparent costul total asociat cu înlocuirea procesorilor defecte”.

Descriere

Grafic care prezintă o manifestare a bug-ului FDIV. Fiecare punct de date ar trebui să fie cu ~ 3,1789 x 10 −8 mai mare pe axa y decât predecesorul său din stânga, dar în regiunea 4195834,4 <x <4195835,9, rezultatul diferă de valoarea așteptată cu ~ 8,14 x 10 −5 .

Pentru a îmbunătăți viteza calculelor diviziunii în virgulă mobilă pe cipul Pentium peste 486DX , Intel a optat pentru înlocuirea algoritmului diviziunii schimbării și scăderii cu algoritmul Sweeney, Robertson și Tocher (SRT). Algoritmul SRT poate genera doi biți ai rezultatului divizării pe ciclu de ceas , în timp ce algoritmul 486 ar putea genera doar unul. Este implementat folosind o matrice logică programabilă cu 2.048 celule, dintre care 1.066 celule ar fi trebuit să fie populate cu una din cele cinci valori: −2, −1, 0, +1, +2 . Când a fost compilată matricea originală pentru Pentium, cinci valori nu au fost descărcate corect în echipamentul care gravează matricele în jetoane - deci cinci dintre celulele matricei conțineau zero atunci când ar fi trebuit să conțină +2.

Ca rezultat, calculele care se bazează pe aceste cinci celule capătă erori; aceste erori se pot acumula în mod repetat datorită naturii recursive a algoritmului SRT. În cazurile patologice, eroarea poate atinge a patra cifră semnificativă a rezultatului, deși acest lucru este rar. Eroarea se limitează de obicei la a noua sau a zecea cifră semnificativă.

Numai anumite combinații de numărător și numitor declanșează eroarea. Un exemplu frecvent raportat este împărțirea a 4.195.835 la 3.145.727. Efectuarea acestui calcul în orice software care a folosit coprocesorul în virgulă mobilă, cum ar fi calculatorul Windows , ar permite utilizatorilor să descopere dacă cipul lor Pentium a fost afectat.

Valoarea corectă a calculului este:

Când este convertit la valoarea hexazecimală utilizată de procesor, 4.195.835 = 0x4005FB și 3.145.727 = 0x2FFFFF. „5” din 0x4005FB declanșează accesul la celulele matrice „goale”. Ca rezultat, valoarea returnată de un procesor Pentium defect este incorectă cu cel puțin patru cifre:

Descoperire și răspuns

Thomas Nicely, profesor de matematică la Colegiul Lynchburg, scrisese cod pentru a enumera primii , primii gemeni , tripletele prime și cvadruplele prime . A observat frumos unele neconcordanțe în calcule la 13 iunie 1994, la scurt timp după adăugarea unui sistem Pentium la grupul său de computere, dar nu a reușit să elimine alți factori (cum ar fi erorile de programare, chipset - urile plăcii de bază etc.) până la 19 octombrie 1994. La 24 octombrie 1994, el a raportat problema către Intel. Se pare că Intel devenise conștient de această problemă în mod independent până în iunie 1994 și începuse să o remedieze în acest moment, dar a ales să nu dezvăluie în mod public niciun detaliu sau să reamintească procesoarele afectate.

La 30 octombrie 1994, Nicely a trimis un e-mail descriind eroarea către diverse contacte academice, solicitând rapoarte de testare a defectului pe clonele 486-DX4 , Pentiums și Pentium . Bug-ul a fost verificat rapid de alții, iar știrile despre acesta s-au răspândit rapid pe Internet . Bug - ul a dobândit numele de „Pentium FDIV bug“ de la x86 limbaj de asamblare mnemonic pentru f loating punct div ision, instrucțiunea cel mai frecvent folosit afectate.

Povestea a apărut pentru prima dată în presă pe 7 noiembrie 1994, într-un articol din Electronic Engineering Times , „Intel remediază o problemă Pentium FPU” de Alexander Wolfe și a fost ulterior preluată de CNN într-un segment difuzat pe 22 noiembrie. raportat și de New York Times și de Boston Globe , făcând prima pagină în acesta din urmă.

În acest moment, Intel a recunoscut defectul în virgulă mobilă, dar a susținut că nu este grav și că nu va afecta majoritatea utilizatorilor. Intel s-a oferit să înlocuiască procesoarele utilizatorilor care ar putea dovedi că au fost afectați. Cu toate acestea, deși majoritatea estimărilor independente au constatat că eroarea ar avea un impact foarte limitat asupra majorității utilizatorilor, aceasta a cauzat o presă negativă semnificativă pentru companie. IBM a întrerupt vânzarea de PC-uri care conțin procesoare Intel, iar prețul acțiunilor Intel a scăzut semnificativ. Motivul din spatele deciziei IBM a fost pus la îndoială de unii din industrie; IBM a produs CPU-urile PowerPC la acea vreme și a beneficiat de orice deteriorare a reputației Pentium sau Intel ca companie. Cu toate acestea, decizia a determinat cumpărătorii corporativi de echipamente pentru PC să solicite înlocuirea CPU-urilor Pentium existente și, la scurt timp, alți producători de PC-uri au început să ofere înlocuiri „fără întrebări” ale cipurilor Pentium defecte.

Nemulțumirea din ce în ce mai mare față de răspunsul Intel a determinat compania să ofere înlocuirea tuturor procesorilor deficienți Pentium la cerere la 20 decembrie. a procesorilor defecte. " Acest lucru este echivalent cu 743 de milioane de dolari în 2019. Intel a fost criticat pentru faptul că interzice revânzătorilor și OEM-urilor să participe la programul de rechemare, cerând utilizatorilor finali să înlocuiască singuri cipurile. Justificarea Intel pentru acest lucru, postată pe pagina sa web de asistență, a fost că „este decizia individuală a utilizatorului final de a determina dacă defectul le afectează precizia aplicației”.

Un articol din 1995 din Science descrie valoarea problemelor de teorie a numerelor în descoperirea erorilor de calculator și oferă fundalul matematic și istoria constantei lui Brun , problema la care lucra frumos când a descoperit eroarea.

Răspunsul Intel la bug-ul FDIV a fost citat ca un caz de impact al relațiilor publice al unei probleme care eclipsează impactul practic al problemei respective asupra clienților. Deși este puțin probabil ca majoritatea utilizatorilor să întâmpine deficiența în calculul lor de zi cu zi, reacția inițială a companiei de a nu înlocui cipurile, cu excepția cazului în care clienții ar putea garanta că au fost afectați, a cauzat împingerea unei minorități vocale de experți din industrie. Publicitatea ulterioară generată a zguduit încrederea consumatorilor în procesoare și a condus la o cerere de acțiune chiar și de la persoane puțin probabil să fie afectate de această problemă. Andrew Grove, CEO-ul Intel la acea vreme, a fost citat în Wall Street Journal spunând: „Cred că nucleul problemei pe care am ratat-o ​​[...] a fost că am presupus să spunem cuiva despre ce ar trebui sau nu ar trebui să-și facă griji sau ar trebui sau nu ar trebui să facă ".

În urma bugului și a rechemării ulterioare, a existat o creștere semnificativă a utilizării verificării formale a operațiunilor hardware în virgulă mobilă în industria semiconductoarelor. Promisă de descoperirea erorii, o tehnică aplicabilă algoritmului SRT numit „verificarea modelului la nivel de cuvânt” a fost dezvoltată în 1996. Intel a continuat să folosească extensiv verificarea formală în dezvoltarea arhitecturilor CPU ulterioare. În dezvoltarea Pentium 4 , evaluarea traiectoriei simbolice și demonstrarea teoremei au fost folosite pentru a găsi o serie de bug-uri care ar fi putut duce la un incident similar de rechemare dacă ar fi fost nedetectate. Prima microarhitectură Intel care a folosit verificarea formală ca metodă principală de validare a fost Nehalem , dezvoltată în 2008.

Modele afectate

Bug-ul FDIV afectează Pentium P5 800 de 60 și 66 MHz în trepte înainte de D1 și Pentium P54C 600 de 75, 90 și 100 MHz în trepte înainte de B5. CPU-urile P54C și P54CQS de 120 MHz nu sunt afectate.

Patch-uri software

Diverse patch-uri software au fost produse de producători pentru a rezolva problema. Un algoritm specific, subliniat într-o lucrare în IEEE Computational Science & Engineering , este de a verifica numeratorii și numitorii care vor declanșa accesul la celulele matricei logice programabile care conțin eronat zero și, dacă sunt găsite, înmulțesc ambele numere cu 15/16. Acest lucru îi scoate din gama „buggy”. Cu toate acestea, acest lucru are o penalizare semnificativă a vitezei - în unele cazuri dublând timpul necesar pentru efectuarea calculului.

Principala provocare cu care s-au confruntat companiile de software a fost implementarea soluției în software-ul preexistent, dintre care multe s-au bazat pe biblioteci aflate în afara controlului lor. Unele companii, precum Wolfram Research , au optat pentru corecția directă a codului mașinii executabilelor existente pentru a înlocui codul opțional FDIV cu o instrucțiune ilegală. Acest lucru va declanșa apoi o excepție pe care o va prelua un handler de excepție (de asemenea, cu patch-uri). De aici, codul arbitrar ar putea fi executat pentru a rezolva eroarea.

Microsoft a oferit soluții la nivel de sistem de operare în versiunile de Windows până la Windows XP. Utilitățile au fost incluse în sistemul de operare pentru a verifica prezența bug-ului și pentru a dezactiva FPU dacă a fost găsit.

Vezi si

Referințe

linkuri externe