Pentium FDIV バグは、インテルPentiumプロセッサに含まれていた、特定の値の除算の結果が誤ったものになる、というバグである[1]

発端

編集

19941030Thomas NicelyPentium[2]Pentiumx87FDIVPentium FDIV [2]Pentium10061

Pentium120MHzPentium

原因

編集

Pentiumで新たに実装された割り算の回路の設計を誤ったのが原因で計算を誤ることが後に明らかにされた。インテルCPUの除算命令の実行はi486まで、non-restoringなどに見られるような1ステップで1ビットずつ商を求める方式によっていたが、PentiumではSRT法を導入し、1ステップで2ビットずつ商を求めるようにし、除算に要するステップ数を約半分にした。このアルゴリズムでは商を求める際に表を参照するが、その表のエントリの一部が誤っていた。すなわち、表のなかで参照されるエントリは一部であり、それ以外の参照されないエントリについてはゼロを設定したが、実際には参照されるエントリのごく一部についても参照されることがないと誤解し、本来有意な値を設定するべきエントリのうち5個に誤ってゼロが設定された。そのために除算の途中で当該エントリを参照すると以後の演算を誤る。ここから、誤ったエントリを参照する特定の値をFDIV命令のオペランドに与えると必ず演算を誤ることになり、確率的・偶発的に誤りが発生するのではない。

当初の対応

編集

[2][1]FDIVFDIV

Pentium586PowerPCIBM[3]

交換

編集

Pentium[1][3]

結果

編集

[?]Pentium使i486AMD[]

Pentium ProCPUBIOSOS[4]CPU

関連項目

編集

脚注

編集


(一)^ abc(90) Pentium. TECH+ (2007811). 2024222

(二)^ abc  - (129). TECH+ (2020331). 2024222

(三)^ ab - (291). TECH+ (2024221). 2024222

(四)^ Intel. IT. 2024222

参考文献

編集

AL   3 BP2006203-206ISBN 978-4-8222-8266-0 

外部リンク

編集