Bug della CPU Intel negli anni '90
Il mio insegnante che insegna "Logica" all'università ci ha raccontato una storia sui processori Intel, che dice: Negli anni '90 Intel aveva un bug nel calcolo delle funzioni matematiche come sin / cos codificate nel processore. Questo bug ha creato incongruenze in alcuni conti bancari, portando Intel ad assumere logici per dimostrare la correttezza del codice.
Ho provato a cercare questa storia in giro per il web ma non ho trovato nulla. Qualcuno ne sa qualcosa o qualcuno può darmi delle fonti?
Risposte
Sospetto che il tuo insegnante si riferisse al bug del FDIVPentium , che all'epoca portò a una grande protesta nei media e per il quale Intel ha emesso un richiamo.
Questo bug ha causato la divisione in virgola mobile per restituire risultati errati in alcuni casi. Non ha influenzato solo FDIV, alcune istruzioni correlate sono state influenzate: le altre istruzioni di divisione e resto e FPTANe FPATAN. Altre istruzioni trigonometriche sono state trattate con sospetto, ma alla fine sono state cancellate, comprese FSINe FCOS.
Tuttavia, sembra improbabile che ciò possa causare problemi alle banche: le applicazioni finanziarie in genere evitano le rappresentazioni in virgola mobile, quindi è improbabile che gli errori in un'istruzione in virgola mobile le influenzino.
Vedi anche la voce di Wikipedia su questo bug . Un altro famoso bug del Pentium era il bug F00F , che non causava errori di calcolo; potrebbe portare a blocchi ed è stato aggirato da una gestione specifica nei sistemi operativi.
Stephen Kitt ha già fornito una buona risposta riguardo al bug FDIV. Fornirò alcuni dettagli sull'utilizzo di logici da parte di Intel:
A causa di questo bug, Intel ha dovuto sostituire molti processori, il che era molto costoso. Non volendo ripetere questo, hanno assunto un certo numero di scienziati informatici con un background in logica formale per dimostrare la correttezza degli algoritmi da implementare nei successori del Pentium. Se vuoi saperne di più sulla loro ricerca, dai un'occhiata alle pubblicazioni di due di questi scienziati:https://www.cl.cam.ac.uk/~jrh13/papers/index.html, https://scholar.google.com/citations?user=MACCA0cAAAAJ&hl=en
Intel aveva un insieme di hardware piuttosto complesso per calcolare un quoziente in virgola mobile in un modo che produceva due bit per iterazione, il che richiedeva una tabella piuttosto grande che elencasse tutte le combinazioni di schemi di bit in cui parte del quoziente dovrebbe essere 11 [invece di elencando tutti i modelli individualmente, la tabella avrebbe avuto voci in cui ogni bit poteva essere 0, 1 o X, in modo tale che, ad esempio, un modello di bit di 100X01X corrispondesse a 1000010, 1000011, 1001010 o 1001011, quindi la tabella non necessitava di un numero incredibilmente enorme di voci]. Sfortunatamente, parte della tabella è stata danneggiata durante il trasferimento da qualsiasi strumento utilizzato per generarla, nel design del chip.
Trovo questo approccio alla divisione piuttosto curioso, poiché sarebbe stato rapido esaminare il divisore e produrre un valore che, moltiplicato sia per il divisore (arrotondamento per eccesso) che per il dividendo (arrotondamento per difetto), costringerebbe il nuovo divisore ad avere il suo bit superiori uguali a 0,1111 o 0,11111111, il che renderebbe facile estrarre 4 o 8 bit per iterazione. Il quoziente finale sarebbe probabilmente leggermente inferiore al valore corretto [mai maggiore, date le direzioni di arrotondamento precedenti], ma sarebbe abbastanza vicino che solo due o tre coppie di passaggi di approssimazione successivi dovrebbero essere necessari alla fine per pulire le cose su.
In ogni caso, l'ultima ironia con il bug Intel FDIV è che, in precedenza, durante l'era 386/387, c'era un prodotto concorrente di Weitek che poteva eseguire calcoli in virgola mobile a precisione singola molto più velocemente dei chip Intel, ma non lo faceva. Non fare affatto matematica a doppia precisione. Alcuni programmi che normalmente avrebbero utilizzato la matematica a doppia precisione spedivano versioni per il Weitek che utilizzavano la matematica a precisione singola e quindi producevano risultati meno accurati. Il team di marketing di Intel ha deciso di sfruttare questa mancanza di precisione (progettata e considerata accettabile) producendo un annuncio che mostrava una scheda madre con una calcolatrice da dieci centesimi decorata con grafica clown dove avrebbe dovuto essere la CPU, e la didascalia "Richiedi autentica Intel Math CoProcessors, o chissà su quale matematica dovrai contare ".
Penso che questo si riferisca probabilmente al bug Pentium FDIV ( bug di divisione in virgola mobile).
Non ricordo alcun problema specifico con le istruzioni di trigonometria.