Pentium FDIV バグ
Pentium FDIV バグは、インテルのPentiumプロセッサに含まれていた、特定の値の除算の結果が誤ったものになる、というバグである[1]。
発端
編集
1994年10月30日、リンチバーグ大学のThomas Nicely教授はPentiumプロセッサの浮動小数点演算ユニットにバグがあることを報告した。その内容は、とある割り算を行うと非常に小さな量だけ間違った値を返すというものだった。この結果はインターネットを通じて他の人々の手で素早く検証された[2]。そして問題を起こすのがPentiumプロセッサのx87浮動小数点除算命令であることと、そのニモニックFDIVからPentium FDIV バグとして知られるようになった[2]。また、別の人々はPentiumが返す結果が引き起こす割り算問題は、100万回に高々61回までしか起こらないことを見つけた︵これは、オペランドの色々な値に対して、という意味である。このバグは特定の値に対して必ず起きる︶。
この問題はPentiumプロセッサの特定のモデルのみで発生する。120MHz以上のクロックのPentium系プロセッサのモデルには、このバグはない。
原因
編集Pentiumで新たに実装された割り算の回路の設計を誤ったのが原因で計算を誤ることが後に明らかにされた。インテルのCPUの除算命令の実行はi486まで、non-restoringなどに見られるような1ステップで1ビットずつ商を求める方式によっていたが、PentiumではSRT法を導入し、1ステップで2ビットずつ商を求めるようにし、除算に要するステップ数を約半分にした。このアルゴリズムでは商を求める際に表を参照するが、その表のエントリの一部が誤っていた。すなわち、表のなかで参照されるエントリは一部であり、それ以外の参照されないエントリについてはゼロを設定したが、実際には参照されるエントリのごく一部についても参照されることがないと誤解し、本来有意な値を設定するべきエントリのうち5個に誤ってゼロが設定された。そのために除算の途中で当該エントリを参照すると以後の演算を誤る。ここから、誤ったエントリを参照する特定の値をFDIV命令のオペランドに与えると必ず演算を誤ることになり、確率的・偶発的に誤りが発生するのではない。
当初の対応
編集
この報告によって大論争が巻き起こった。インテルは最初この問題の存在を否定していた。やがて、インテルは問題を認めたが、誤りは重大ではなく、たいていのユーザーには影響がないと主張する[2]一方で、影響があると確認できたユーザーにはプロセッサの交換を行うと表明した[1]。並行して、FDIVと同等の除算を行うルーチンを公開し、エラッタ回避の為にこのルーチンを用いるように求めたが、これはFDIV命令より実行に時間がかかりパフォーマンスに悪影響を及ぼした。
多くの独自の検証によって、このバグはほとんど重要ではなく、たいていのユーザーに対する影響は無視してもよいと分かったが、このインテルの対応は非常に大きな抗議を引き起こした。当時インテルのPentiumに競合する﹁586﹂クラスの互換プロセッサやPowerPCの売り込みを図ったIBMのような企業は、一緒になって非難した[3]。例えばインテルが計算を誤る確率はとても小さく隕石に当たるリスクが実質的に無視出来るのと同様であると表現したのに対して、競合他社は隕石の軌道を計算して落ちてくる所に立てば必ず当たると皮肉を込めて非難した。
交換
編集結果
編集
結局インテルは根拠のないリコールをさせられたと言う人もいる[誰によって?]。ただ、科学技術計算などでは演算結果がすべてなので、計算を誤る可能性がごく僅かであるとしても万全の信頼をおけないのであれば研究や仕事において致命的である人たちもいたこともまた事実である。前述のようにこのバグをソフトウェア的に回避できるが、引き換えに演算速度が遅くなり、結局以前のプロセッサで実行する方が早くなってPentiumプロセッサを使う意味が全くなくなってしまう。演算精度を重視する顧客は敢えてi486の高ランク品を選んだり、AMDなど競合他社の製品を選んだりした。[要出典]この問題はそのような科学技術系などの計算目的でプロセッサを購入した人をインテルが切り捨てるのか、切り捨てないのかという問題でもあった。
Pentium Pro以後のCPUではマイクロコードを修正する手段が盛り込まれている。書き換え可能なコントロールストアを持ち、エラッタが生じた場合にはBIOSやOSのアップデータを介してこれを回避するマイクロコードを提供する[4]。これにより、CPUの交換によらずにエラッタを回避する。
関連項目
編集- Pentium F00F バグ
- ブルン定数 - この計算をPentiumで行わせた過程で、本稿で取り上げたFDIVのバグが発覚した。
- ファームウェア
脚注
編集
(一)^ abc“コンピュータアーキテクチャの話(90) Pentiumの割り算器のバグ”. TECH+︵テックプラス︶ (2007年8月11日). 2024年2月22日閲覧。
(二)^ abc“半導体業界用語の基礎知識 ﹁エラッタとバグ﹂ - 吉川明日論の半導体放談(129)”. TECH+︵テックプラス︶ (2020年3月31日). 2024年2月22日閲覧。
(三)^ ab“コンピューターの不具合と現代社会 - 吉川明日論の半導体放談(291)”. TECH+︵テックプラス︶ (2024年2月21日). 2024年2月22日閲覧。
(四)^ “Intelプロセッサ向けマイクロコードアップデートのニュースをファクトチェック!”. @IT. 2024年2月22日閲覧。
参考文献
編集外部リンク
編集- Thomas R. Nicely's Home Page - バグを発見したNicely教授の個人ウェブサイト
- Bugs in the Intel Microprocessors - 原因とともに正確な情報が記されたページ
- Ivars Peterson's MathTrek: Pentium Bug Revisited
- A Tale of Two Numbers, by Cleve Moler of The MathWorks
- FDIV Replacement Program - FDIV Replacement Program Home - インテル公式サイト
- IntelによるSRT法の解説 - インテル公式サイト
- CPU黒歴史 大損失と貴重な教訓を生んだPentiumのバグ - CPU黒歴史の中でバグについて取り上げている。