3 poin oleh GN⁺ 2024-12-30 | 1 komentar | Bagikan ke WhatsApp

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

 
GN⁺ 2024-12-30
Komentar Hacker News
  • Penulis menyatakan siap menjawab pertanyaan tentang bug Pentium

    • Respons Intel dianggap menarik, dan karena tidak mengganti prosesor semua pengguna, muncul banyak pemberitaan negatif
    • Disebutkan kasus Amazon Colorsoft yang menyelesaikan masalah dengan mengganti unit cacat secara diam-diam
    • Disebutkan juga kasus masalah retak pada Apple AirPods Pro yang diselesaikan dengan penggantian diam-diam
  • 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

    • Intel tampaknya mempertimbangkan satu pengguna, sedangkan IBM tampaknya mempertimbangkan permintaan dukungan
    • Saat menangani permintaan dalam jumlah besar, masalah dengan probabilitas kecil pun bisa sering terjadi
  • Hanya ada satu orang yang benar-benar menemukan bug tersebut saat penggunaan nyata

    • Disebutkan penelitian yang memberikan kalkulator yang salah kepada mahasiswa untuk menjelaskan bahwa menyadari kesalahan dan terdampak olehnya adalah dua hal yang berbeda
    • Kebanyakan orang tidak memeriksa apakah keluaran komputer itu akurat
  • 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

    • Disebutkan bahwa cara yang lebih aman adalah hanya memperbaiki 5 entri
    • Tabel yang telah diperbaiki justru lebih sederhana, sehingga dipertanyakan mengapa tidak dibuat seperti itu sejak awal