PentiumFDIVバグ - Pentium FDIV bug
PentiumFDIVバグは、初期のIntel Pentiumプロセッサのフローティングポイントユニット(FPU)に影響を与えるハードウェアバグです。バグが原因で、プロセッサは数値を除算するときに誤った2進浮動小数点の結果を返す場合があります。このバグは、1994年にリンチバーグ大学のThomas R.Nicely教授によって発見されました。 Intelは、このエラーを浮動小数点除算回路で使用されるルックアップテーブルのエントリの欠落に起因すると考えました。
FDIVバグの重大度が議論されています。ほとんどのユーザーが遭遇することはめったにありませんが(Byte マガジンは、ランダムなパラメーターで90億分の1の浮動小数点除算が不正確な結果を生成すると推定しました)、欠陥とIntelの問題の最初の処理の両方が技術コミュニティによって強く批判されました。
1994年12月、Intelは欠陥のあるプロセッサをリコールしました。 1995年1月、Intelは「収益に対して4億7500万ドルの税引前費用、表面上は欠陥のあるプロセッサの交換に関連する総費用」を発表しました。これは、2019年の7億4300万ドルに相当します。
説明
Sweeney、Robertson、およびTocher(SRT )除算アルゴリズムは、影響を受けるPentiumチップで使用されます。これは、2,048セルのプログラマブルロジックアレイとして実装され、そのうち1,066セルには、–2、–1、0、+ 1、+ 2の5つの値のいずれかが入力されている必要があります。バギーチップでは、値+2を含むはずの5つのセルが欠落し、代わりに0を返しました。
年表
Intelは1993年3月にPentiumプロセッサラインを発表しました。
LynchburgCollegeの数学教授であるThomasNicelyは、プライム、ツインプライム、プライムトリプレット、およびプライム4つ組を列挙するコードを作成しました。 。 1994年6月13日、コンピューターのグループにPentiumシステムを追加した直後に、計算にいくつかの矛盾があることに気づきましたが、他の要因(プログラミングエラー、マザーボードチップセットなど)を排除できませんでした。 1994年10月19日まで。1994年10月24日、彼はこの問題をIntelに報告しました。ニースリーによると、インテルの彼の連絡担当者は、1994年5月にパーデュー大学協同組合のトム・クラリエビッチが欠陥を発見して以来、インテルが問題を認識していたことを認めた。 1994年10月30日、Pentium Pro .
で最初に使用された新しいP6 コアのFPUのテスト中に、オレゴン州ヒルズボロのIntelで働いていた学生がNicelyに彼がPentiumフローティングポイントユニットでさまざまな連絡先に発見したエラー。486-DX4s 、Pentium、およびPentiumクローン.
の欠陥のテストレポートを要求しました。PentiumFPUのこの欠陥はすぐに発生しました。 Internet の周りの他の人々によって検証され、Pentium FDIVバグとして知られるようになりました(FDIVはf 浮動小数点のx86アセンブリ言語ニーモニックです。 div ision)。 Pentiumによって返された分割結果が約61パーツパーミリオンずれた一例が見つかりました。
この記事は、1994年11月7日のElectronic EngineeringTimesの記事で最初に報道されました。 、AlexanderWolfeによる「IntelがPentiumFPUの不具合を修正」。
その後、1994年11月21日に放送されたセグメントでCNN がこの話を取り上げました。広く知られるようになりました。
Intelは公に浮動小数点の欠陥を認めましたが、それは深刻ではなく、ほとんどのユーザーに影響を与えないと主張しました。 Intelは、影響を受けたことを証明できるユーザーにプロセッサを交換することを提案しました。ただし、ほとんどの独立した見積もりでは、バグはほとんど重要ではなく、ほとんどのユーザーにほとんど影響を与えないことがわかりましたが、それは大きな国民の抗議を引き起こしました。 IBM (当時、IBM 5x86C マイクロプロセッサがIntelPentiumラインと競合していた)のような企業が非難に加わった。
1994年12月20日、Intelは、高まる世論の圧力に応えて、要求に基づいてすべての欠陥のあるPentiumプロセッサを交換することを提案しました。 Pentiumの所有者のごく一部だけがチップの交換に苦労していることが判明しましたが、会社への経済的影響は重大でした。 1995年1月17日、Intelは「収益に対して4億7500万ドルの税引前費用、表面上は欠陥のあるプロセッサの交換に関連する総費用」を発表しました。これは2019年の7億4300万ドルに相当します。欠陥のあるチップの一部は後にIntelによってキーリングに変換されました。
1995年のScience の記事では、コンピュータのバグを発見する際の数論の問題と、ブルンの定理の数学的背景と履歴を示します。この問題は、バグを発見したときにうまく取り組んでいました。
影響を受けるモデル
この問題は、元のPentiumプロセッサの一部のモデルでのみ発生します。このバグは、クロック速度が120MHz未満の一部のPentiumファミリプロセッサにのみ存在していました。影響を受けるモデルでは、Intelプロセッサ周波数IDユーティリティがこのバグの存在をチェックします。
影響を受ける10のプロセッサモデルを以下に示します。これらのプロセッサの39のS仕様は、Intelプロセッサ仕様ファインダーのWebページにリストされていません。
ファミリ | モデル | ステッピング | コアステッピング | クロックレート | FSB 速度 | S仕様 |
---|---|---|---|---|---|---|
5 | 1 | 3 | B1 | 60 MHz | 60 MHz | Q0352、Q0412、SX753 |
5 | 1 | 3 | B1 | 66 MHz | 66 MHz | Q0353、Q0413、SX754 |
5 | 1 | 5 | C1 | 60 MHz | 60 MHz | Q0466、SX835、SZ949 |
5 | 1 | 5 | C1 | 66 MHz | 66 MHz | Q0467、SX837、SZ950 |
ファミリ | モデル | ステッピング | コアステッピング | クロックレート | FSB速度 | S仕様 |
---|---|---|---|---|---|---|
5 | 2 | 1 | B1 | 75 MHz | 50 MHz | Q0601 |
5 | 2 | 1 | B1 | 90 MHz | 60 MHz | Q0542、Q0613、Q0543、SX879、SX885、SX909、SX874 |
5 | 2 | 1 | B1 | 100 MHz | 66 MHz | Q0563、Q0587、Q0614、SX886、SX910 |
5 | 2 | 2 | B3 | 75 MHz | 50 MHz | Q0606、SX951 |
5 | 2 | 2 | B3 | 90 MHz | 60 MHz | Q0628、Q0611、Q0612、SX923、SX922、SX921、SX942、 SX943、SX944、SZ951 |
5 | 2 | 2 | B3 | 100 MHz | 66 MHz | Q0677、SX960 |
一部のIntel 80486 OverDrive およびPentium Overdrive モデルFDIVを展示することも知られていますバグ、およびF00Fバグ.
検出方法
汎用
ネイティブフローティングを使用するアプリケーションで次の計算を実行することにより、バグの存在を手動で確認できます。
のWindows Calculator またはMicrosoft Excel を含むポイント番号正しい値は次のとおりです。
プロセッサが使用する16進値に変換すると、4,195,835 = 0x4005FBおよび3,145,727 = 0x2FFFFFになります。 0x4005FBの「5」は、FPU制御ロジックの障害をトリガーします。その結果、特定の状況で欠陥のあるPentiumプロセッサによって返される値は、4桁以上で正しくありません:
Windows95または98
ユーザーは、デバイスマネージャーを使用して、プロセッサに問題があるかどうかを確認できます。デバイスマネージャが表示されたら、ユーザーは[システムデバイス]を展開し、[数値データプロセッサ]を見つけてクリックし、[プロパティ]ボタンをクリックする必要があります。新しい[プロパティ]ウィンドウが表示されたら、[設定]タブをクリックします。
プロセッサにFDIVの問題がない場合は、次のメッセージが表示されます。「お使いのコンピュータの数値データプロセッサはすべての診断テストに合格し、正常に動作しています。 "、そうでない場合、次のメッセージが表示されます。"このコンピュータの数値プロセッサは、大きな数を除算すると不正確な結果を計算することがあります "
次に、[設定]タブの下部に次のオプションが表示されます。 「常に使用する」、「すべての診断に合格した場合にのみ使用する」または「使用しない」。
Windows NT、2000、XP、Server 2003
開発者 | Microsoft |
---|---|
初期リリース | 1995年5月30日; 25年前(1995-05-30) |
オペレーティングシステム | MicrosoftWindows |
タイプ | コマンド |
ライセンス | プロプライエタリ商用ソフトウェア |
ウェブサイト | pentnt |
ユーザーは、Windows NT 3.51 、NT 4.0 、2000 <225に含まれているpentnt
コマンドを実行できます。>、およびServer 2003 。変更を有効にするには、コンピューターを再起動する必要があります。 pentnt
ユーティリティは非推奨であり、現在のバージョンのWindowsには含まれていません。
コマンド構文は次のとおりです。
pentnt [-c] [-f] [-o]
-c
–条件付きエミュレーションを有効にする-f
–強制エミュレーションを有効にする-o
–強制エミュレーションを無効にし、フローティングポイントハードウェアが存在する場合は再度有効にする/?
–ヘルプを表示する
関連項目
- PentiumF00Fバグ
- メルトダウン(セキュリティの脆弱性)およびSpectre(セキュリティの脆弱性)
- MOSTechnology6502のバグと癖
- フローティングポイント操作の精度の問題
- SRT分割
- マイクロコード