Quando l’ingegner Ken Shirriff pubblica un nuovo post c’è sempre da levarsi il cappello. “Intel ha lanciato il processore Pentium nel 1993. Sfortunatamente, l’operazione di divisione a volte ha dato risultati sbagliati: la causa è il famoso bug FDIV“, scrive Shirriff su Mastodon. La sostituzione dei chip difettosi è costata a Intel, all’epoca, ben 475 milioni di dollari. A distanza di 30 anni, grazie al lavoro di Shirriff, emergono maggiori dettagli sui transistor responsabili del bug FDIV. E ciò grazie a un meticoloso lavoro di reverse engineering del circuito.
Cos’è il bug FDIV dei processori Intel Pentium
Il bug FDIV è uno degli problemi più noti nella storia dei microprocessori. Come accennato nell’introduzione, il bug ha avuto implicazioni significative per Intel, portando al richiamo di milioni di processori e a una perdita economica significativa.
Il termine FDIV deriva dall’operazione matematica di divisione in virgola mobile (Floating Point Division), che il Pentium eseguiva in modo errato a causa di un difetto nel suo circuito.
Per comprendere meglio il bug, è necessario conoscere come funziona la divisione in virgola mobile. Nei calcoli numerici su computer, la virgola mobile è una rappresentazione dei numeri reali che consente di gestire numeri molto grandi o molto piccoli in modo efficiente. La divisione in virgola mobile (FDIV) è una delle operazioni fondamentali che i processori devono eseguire ed è particolarmente importante nelle applicazioni scientifiche, ingegneristiche e matematiche.
L’unità di calcolo per la divisione in virgola mobile è tipicamente un modulo separato nel processore, noto come FPU (Floating Point Unit). La FPU del Pentium fu progettata per essere rapida, grazie all’adozione dell’algoritmo SRT (Sweeney, Robertson and Tocher) che permette di eseguire la divisione a due bit per ciclo di clock. I processori precedenti, invece, eseguivano una divisione a un solo bit per ciclo di clock.
Il circuito del Pentium originale al microscopio e l’area in cui risiede il bug FDIV (fonte: Ken Shirriff).
Le cause del bug
Il bug FDIV fu causato da un errore nella progettazione della tabella di divisione del Pentium, una tabella di valori usata dall’algoritmo SRT per calcolare la divisione.
La tabella in questione era costituita da 2048 celle, ognuna delle quali conteneva un valore utilizzato per eseguire la divisione in virgola mobile. In particolare, la tabella conteneva valori per -2, -1, 0, 1 e 2, distribuiti su 112 righe.
Il bug si verificava a causa di un errore nel Programmable Logic Array (PLA), una struttura del chip che gestisce queste operazioni matematiche. Nella progettazione del Pentium, cinque celle cruciali della tabella di divisione non contenevano i valori corretti, ma invece erano impostate a “0” anziché al valore “2”.
La presenza di valori scorretti causava errori nei calcoli di divisione, ma solo in determinate circostanze, ad esempio quando si effettuavano divisioni che producevano risultati molto precisi o in presenza di certi numeri.
L’indagine di Ken Shirriff
Shirriff ha intrapreso un’indagine approfondita per scoprire la causa esatta del bug FDIV negli storici processori Pentium. Utilizzando tecniche avanzate di microscopia, il ricercatore è riuscito a ottenere un’immagine dettagliata del die del Pentium, composto da 3,1 milioni di transistor, e a studiare la disposizione di questi componenti sul chip.
Grazie alla risoluzione della foto al microscopio, Shirriff ha potuto identificare le singole celle del PLA che contenevano gli errori, scoprendo le cinque non correttamente impostate nella tabella di divisione.
L’ingegnere ha anche individuato altre 11 celle che non erano corrette, portando a un totale di 16 voci errate nella tabella, un numero maggiore di quanto inizialmente ritenuto.
Shirriff ha inoltre dimostrato che l’errore non era così raro come affermato da Intel, che aveva dichiarato come il bug FDIV si sarebbe manifestato qualcosa come una volta ogni 27.000 anni.
In realtà, il bug poteva manifestarsi con una frequenza molto maggiore, addirittura ogni 24 giorni, come dimostrato dal professore Thomas Nicely, che nel 1994 ha pubblicato uno studio in cui mostrava come l’errore potesse presentarsi periodicamente nei calcoli più complessi.
Credit immagine in apertura: Intel