Bug FDIV pada Pentium Intel
-
Latar belakang: Pada 1993, Intel merilis prosesor Pentium berperforma tinggi. Pentium membawa banyak peningkatan, termasuk algoritme pembagian floating-point yang lebih cepat dibanding prosesor Intel 486 sebelumnya. Namun, setahun kemudian, profesor matematika Nicely menemukan bahwa Pentium menghasilkan hasil yang salah saat melakukan pembagian floating-point ketika ia sedang meneliti kebalikan dari bilangan prima kembar.
-
Penemuan bug dan dampaknya: Intel menganggap masalah ini sebagai "masalah teknis yang sangat sepele", tetapi bug ini kemudian menjadi isu besar di media. Pada akhirnya Intel memutuskan untuk mengganti semua chip Pentium yang cacat, yang menimbulkan biaya sebesar 475 juta dolar bagi perusahaan.
-
Penyebab bug: Algoritme pembagian pada Pentium menggunakan lookup table. Intel mengumumkan pada 1994 bahwa penyebab bug ini adalah kesalahan skrip yang menyebabkan lima entri hilang dari tabel, tetapi sebenarnya 16 entri hilang akibat kesalahan matematis. Dari entri yang hilang tersebut, lima di antaranya memicu bug FDIV.
-
Gambaran umum angka floating-point: Angka floating-point dapat merepresentasikan angka yang sangat besar maupun sangat kecil. Chip koprosesor floating-point Intel 8087 ikut berkontribusi dalam pengembangan standar IEEE 754, dan sebagian besar komputer, termasuk Pentium, mengimplementasikan standar ini.
-
Pembagian SRT: Pentium menggunakan algoritme SRT untuk melakukan pembagian, yang dua kali lebih cepat daripada pembagian biner standar. Algoritme SRT memakai pendekatan yang tidak biasa untuk mempermudah pemilihan digit hasil bagi.
-
Struktur lookup table: Lookup table pada Pentium berisi 2048 entri, dan lima entri yang hilang memicu bug FDIV. Tabel ini diimplementasikan sebagai programmable logic array (PLA).
-
Batas matematis bug: Langkah inti dalam algoritme pembagian adalah membagi sisa parsial dengan pembagi untuk memperoleh digit hasil bagi. Jika nilai q yang salah dipilih dalam proses ini, algoritme tidak dapat memulihkannya.
-
Adder carry-save dan carry-lookahead: Rangkaian pembagian Pentium menggunakan adder carry-save untuk melakukan penjumlahan dan pengurangan secara efisien. Adder ini memainkan peran penting dalam memicu bug FDIV.
-
Perbaikan bug: Intel memperbaiki bug dengan mengisi semua entri tabel yang tidak digunakan dengan nilai 2. Ini menghilangkan kemungkinan mengakses entri yang salah, sekaligus menyederhanakan persamaan PLA sehingga ukuran PLA menjadi lebih kecil.
1 komentar
Komentar Hacker News
Penulis menyatakan siap menjawab pertanyaan tentang bug Pentium
Dalam white paper Intel, diklaim bahwa pengguna biasa akan mengalami masalah ini sekali setiap 27.000 tahun, tetapi IBM menganalisis bahwa pelanggan bisa mengalami masalah setiap beberapa hari
Hanya ada satu orang yang benar-benar menemukan bug tersebut saat penggunaan nyata
Dibagikan pengalaman bahwa karena tidak bisa mengendalikan CPU milik pelanggan, mereka harus menambahkan kode khusus ke library untuk mengatasi masalah tersebut
Ditunjukkan masalah pada algoritma pembangkitan tabel Intel, dan ditekankan bahwa meskipun dalam PR hal itu dijelaskan sebagai masalah kecil, kenyataannya itu adalah masalah yang lebih besar
Dipertanyakan alasan Intel mengisi semua entri tabel yang tidak digunakan dengan angka 2