Pentium FDIV vika - Pentium FDIV bug

66 MHz Intel Pentium (sSpec = SX837) ja FDIV -virhe

Pentium FDIV vika on laitteiston virheiden vaikuttaa liukulukuyksikköön (FPU) on varhaisen Intel Pentium . Virheen vuoksi prosessori palauttaa virheelliset binääriset liukulukutulokset jakaessaan tiettyjä erittäin tarkkoja numeroita. Vian löysi vuonna 1994 Thomas R. Nicely, matematiikan professori Lynchburg Collegessa . FPU: n liukulukujakoalgoritmin käyttämän hakutaulukon puuttuvat arvot johtivat pieniin virheisiin. Vaikka nämä virheet tapahtuisivat useimmissa tapauksissa vain harvoin ja johtavat pieniin poikkeamiin oikeista tulostusarvoista, tietyissä olosuhteissa virheitä voi esiintyä usein ja ne voivat johtaa merkittävämpiin poikkeamiin.

FDIV -virheen vakavuudesta keskustellaan. Vaikka useimmat käyttäjät kohtaavat sen harvoin ( Byte -lehti arvioi, että yksi yhdeksästä miljardista liukulukujaosta satunnaisparametreilla tuottaisi epätarkkoja tuloksia), tekniikkayhteisö kritisoi voimakkaasti sekä virhettä että Intelin alkuperäistä käsittelyä.

Joulukuussa 1994 Intel muistutti viallisista suorittimista ensimmäisessä tietokonepiirin täydellisessä muistissa. Tammikuussa 1995 Intel ilmoitti "475 miljoonan dollarin ennen veroja maksetusta tulosta, joka on ilmeisesti virheellisten prosessorien vaihtamisesta aiheutuvat kokonaiskustannukset".

Kuvaus

Kaavio, joka näyttää yhden FDIV -virheen ilmentymän. Jokaisen datapisteen tulisi olla ~ 3,1789 x 10-8 y-akselilla korkeampi kuin edeltäjänsä vasemmalla, mutta alueella 4195834.4 <x <4195835,9 tulos eroaa odotetusta arvosta ~ 8,14 x 10-5 .

Parantaakseen liukulukujakolaskennan nopeutta Pentium-sirulla 486DX: n yli , Intel päätti korvata siirto- ja vähennysjakoalgoritmin Sweeney-, Robertson- ja Tocher (SRT) -algoritmilla. SRT -algoritmi voi tuottaa kaksi bittiä jakotuloksesta kellojaksoa kohden , kun taas 486: n algoritmi voi tuottaa vain yhden. Se toteutetaan käyttämällä ohjelmoitavaa logiikkajärjestelmää, jossa on 2 048 solua, joista 1066 solua olisi pitänyt täyttää jollakin viidestä arvosta: −2, -1, 0, +1, +2 . Kun Pentiumin alkuperäinen matriisi koottiin, viisi arvoa ei ladattu oikein laitteisiin, jotka syövyttävät matriisit siruiksi - siten viisi matriisisolua sisälsi nollaa, kun niiden olisi pitänyt sisältää +2.

Tämän seurauksena laskelmat, jotka perustuvat näihin viiteen soluun, saavat virheitä; nämä virheet voivat kertyä toistuvasti SRT -algoritmin rekursiivisen luonteen vuoksi. Patologisissa tapauksissa virhe voi saavuttaa tuloksen neljännen merkittävän numeron, vaikka tämä on harvinaista. Virhe rajoittuu yleensä yhdeksänteen tai kymmenenneen merkittävään numeroon.

Vain tietyt numerointi- ja nimittäjäyhdistelmät laukaisevat vian. Yksi yleisesti raportoitu esimerkki on 4 195 835 jakaminen 3 145 727: llä. Tämän laskennan suorittaminen millä tahansa ohjelmistolla, joka käytti liukulukukoprosessoria, kuten Windows-laskin , antaisi käyttäjille mahdollisuuden tietää, vaikuttaako tämä heidän Pentium-siruunsa.

Laskennan oikea arvo on:

Kun muunnetaan prosessorin käyttämään heksadesimaaliarvoon, 4,195,835 = 0x4005FB ja 3145727 = 0x2FFFFF. 0x4005FB: n "5" laukaisee pääsyn "tyhjiin" matriisisoluihin. Tämän seurauksena virheellisen Pentium -suorittimen palauttama arvo on virheellinen vähintään neljä numeroa:

Löytö ja vastaus

Thomas Nicely, matematiikan professori Lynchburg Collegessa, oli kirjoittanut koodin alku- , kaksoiskappaleiden , alkukolmikkojen ja neljänneksien luetteloimiseksi . Hän huomasi hienosti joitakin epäjohdonmukaisuuksia laskelmissa 13. kesäkuuta 1994, pian sen jälkeen, kun Pentium -järjestelmä oli lisätty tietokoneisiin, mutta ei pystynyt poistamaan muita tekijöitä (kuten ohjelmointivirheitä, emolevyn piirisarjoja jne.) Vasta 19. lokakuuta 1994. 24. lokakuuta 1994 hän ilmoitti ongelmasta Intelille. Intel oli kuulemma tietoinen ongelmasta itsenäisesti kesäkuuhun 1994 mennessä ja oli alkanut korjata sitä tässä vaiheessa, mutta päätti olla paljastamatta julkisesti mitään yksityiskohtia tai palauttaa mieleen vaikuttavia suorittimia.

30. lokakuuta 1994 Nicely lähetti virheen kuvaavan sähköpostin useille akateemisille yhteyshenkilöille ja pyysi raportteja 486-DX4- , Pentiums- ja Pentium-kloonien virheiden testaamisesta . Muut vahvistivat vian nopeasti, ja uutiset levisivät nopeasti Internetissä . Bug osti nimi "Pentium FDIV bug" alkaen x86 konekielellä muistisääntö varten f loating pisteen div Isioniin, yleisimmin käytetty opetusta vaikuttaa.

Tarina ilmestyi ensimmäisen kerran lehdistössä 7. marraskuuta 1994, Electronic Engineering Timesin artikkelissa "Intel korjaa Pentium FPU -häiriön", Alexander Wolfe, ja CNN otti sen myöhemmin kanavalle, joka esitettiin 22. marraskuuta. kertoivat myös New York Times ja Boston Globe , jolloin jälkimmäinen oli etusivulla.

Tässä vaiheessa Intel myönsi liukulukuvirheen, mutta väitti, ettei se ollut vakava eikä vaikuta useimpiin käyttäjiin. Intel tarjoutui korvaamaan prosessorit käyttäjille, jotka voisivat todistaa, että ne vaikuttivat siihen. Vaikka useimmat riippumattomat arviot osoittivat, että virheellä olisi hyvin vähäinen vaikutus useimpiin käyttäjiin, se aiheutti yritykselle merkittävää negatiivista lehdistöä. IBM keskeytti Intelin suorittimia sisältävien tietokoneiden myynnin, ja Intelin osakekurssi laski merkittävästi. Jotkut alan toimijat kyseenalaistivat IBM: n päätöksen motiivin; IBM tuotti PowerPC -suorittimia tuolloin ja saattoi hyötyä mahdollisista Pentiumin tai Intelin mainevahingoista yrityksenä. Päätös johti kuitenkin siihen, että yritykset, jotka ostivat tietokonelaitteita, vaativat nykyisten Pentium -suorittimien vaihtoa, ja pian sen jälkeen muut PC -valmistajat alkoivat tarjota puuttuvia kysymyksiä korvaamaan vialliset Pentium -sirut.

Kasvava tyytymättömyys Intelin vastaukseen johti siihen, että yritys tarjoutui korvaamaan kaikki puutteelliset Pentium-suorittimet pyynnöstä 20. joulukuuta. 17. tammikuuta 1995 Intel ilmoitti "475 miljoonan dollarin ennen veroja maksetusta tulosta, joka on näennäisesti vaihtoon liittyvät kokonaiskustannukset" viallisista prosessoreista. " Tämä vastaa 743 miljoonaa dollaria vuonna 2019. Inteliä kritisoitiin jälleenmyyjien ja OEM-valmistajien estämisestä osallistumasta takaisinveto-ohjelmaan, mikä edellytti loppukäyttäjien vaihtavan pelimerkit itse. Intelin perustelu tälle, joka on julkaistu tukisivullaan, oli, että "loppukäyttäjän oma päätös on päättää, vaikuttaako vika niiden sovellusten tarkkuuteen".

Vuonna 1995 julkaistu Science -artikkeli kuvaa lukuteorian ongelmien arvoa tietokonivirheiden löytämisessä ja antaa Brunin vakion matemaattisen taustan ja historian .

Intelin vastaus FDIV -virheeseen on mainittu ongelman suhdetoiminnan vaikutukseksi, joka hämärtää mainitun ongelman käytännön vaikutuksen asiakkaisiin. Vaikka useimmat käyttäjät eivät todennäköisesti törmänneet virheeseen päivittäisessä tietojenkäsittelyssään, yrityksen alkuperäinen reaktio olla korvaamatta siruja, elleivät asiakkaat pysty takaamaan, että ne vaikuttivat, aiheutti alan asiantuntijoiden äänekkään vähemmistön. Myöhempi julkisuus herätti kuluttajien luottamuksen suorittimiin ja johti toimenpiteisiin jopa ihmisiltä, ​​joihin ongelma ei todennäköisesti vaikuta. Andrew Grove, Intelin silloinen toimitusjohtaja, lainasi Wall Street Journal -lehdessä sanomalla: "Luulen, että jääneen jutun ydin [...] oli se, että oletimme kertovan jollekin, mistä heidän pitäisi tai ei pitäisi huolehtia, tai pitäisi tai ei pitäisi tehdä ".

Virheen ja sitä seuranneen muistutuksen jälkeen laitteistojen liukulukuoperaatioiden muodollisen tarkistuksen käyttö lisääntyi huomattavasti puolijohdeteollisuudessa. Virheen löytämisen johdosta SRT-algoritmiin sovellettu tekniikka, nimeltään "sanatason mallintarkistus", kehitettiin vuonna 1996. Intel jatkoi virallisen vahvistuksen käyttöä laajasti myöhempien suorittimien arkkitehtuurien kehittämisessä. Vuonna kehittämistä Pentium 4 , symbolinen lentoradan arviointi ja lausetta osoittautumassa käytettiin löytää useita virheitä, jotka olisivat voineet johtaa samanlaiseen muistaa tapaus oli ne mennyt havaitsematta. Ensimmäinen Intelin mikroarkkitehtuuri, joka käytti muodollista vahvistusta ensisijaisena validointimenetelmänä, oli vuonna 2008 kehitetty Nehalem .

Vaikuttavat mallit

FDIV vika vaikuttaa 60 ja 66 MHz: n Pentium P5 800 tehostamalla tasot ennen D1, ja 75, 90, ja 100 MHz: n Pentium P54C 600 steppings ennen B5. Tämä ei vaikuta 120 MHz: n P54C- ja P54CQS -suorittimiin.

Ohjelmistokorjaukset

Valmistajat tuottivat erilaisia ohjelmistokorjauksia vian kiertämiseksi. Eräs erityinen algoritmi, joka on kuvattu IEEE Computational Science & Engineeringin artikkelissa , on tarkistaa, onko olemassa laskureita ja nimittäjiä, jotka käynnistävät pääsyn ohjelmoitaviin logiikkasoluihin, jotka sisältävät virheellisesti nollaa, ja jos löydetään, kerrotaan molemmat luvut 15/16. Tämä poistaa heidät "buginen" valikoimasta. Tämän tekemiseen liittyy kuitenkin merkittävä nopeusrangaistus - joissakin tapauksissa laskutoimitukseen kuluva aika kaksinkertaistuu.

Ohjelmistoyritysten suurin haaste oli korjauksen toteuttaminen jo olemassa oleviin ohjelmistoihin, joista suuri osa perustui kirjastoihin, jotka eivät olleet heidän hallinnassaan. Jotkut yritykset, kuten Wolfram Research , päätti suoraan paikata konekoodin nykyisten suoritettavia korvata FDIV opcode kanssa laittoman käskyn. Tämä laukaisi sitten poikkeuksen, jonka poikkeuskäsittelijä (myös korjattuna) saisi kiinni. Täältä mielivaltainen koodi voidaan suorittaa vian kiertämiseksi.

Microsoft tarjosi käyttöjärjestelmän tason kiertotapauksia Windows -versioissa aina Windows XP: hen asti. Käyttöjärjestelmään sisältyi apuohjelmia, jotka tarkistivat virheen ja poistivat FPU: n käytöstä, jos se löydettiin.

Katso myös

Viitteet

Ulkoiset linkit