CPUはどのくらいの頻度で計算エラーを起こしますか?


22

ダイクストラの構造化プログラミングに関するノートでは、コンピュータープログラムの抽象的なエンティティとしての証明可能性について多くのことを語っています。当然の結果として、彼はテストでは不十分であると述べています。たとえば、xとyの全範囲にわたってxとyの大きな値に対して乗算関数f(x、y)= x * yをテストすることは不可能であるという事実を指摘しています。私の質問は彼のその他に関するものです。「お粗末なハードウェア」に関するコメント。エッセイはコンピューターハードウェアの信頼性が低い1970年代に書かれたものであることを知っていますが、コンピューターはまだ完璧ではないため、計算ミスをすることがあります。誰がこれが起こる頻度を知っていますか、またはこれに関する統計がありますか?



これは、Pentium FDIVバグに関するウィキペディアのページです。現在存在する2つの回答で言及されています。
カスカベル

CPUの基本的な動作については、バックアップやエラーチェックは一切行わないため、ランダムな一時的な計算エラーの頻度の上限を簡単に推定できます。ほとんどのCPU命令は(メモリ操作と計算のアドレスの計算に)数学を必要とし、現代のCPUは1秒間に数十億の操作を行っており、1日に1e14を超えています。10分の1の数学エラーがプログラムに明らかな影響を及ぼし(おそらく低い推定値)、そのようなエラーが毎日見られない場合、ALUの基本エラー率は<1e-13でなければなりません。 <1e-15と推測されます。
ラッセルボロゴーブ

@NickC:この質問について実用的なものは何もないことを暗示していますか?ハードウェアが機能するかどうかは問題ではないと思いますか?プログラムが適切に機能するかどうかが実際に重要な場合はどうでしょうか(ハードリアルタイムプログラミングは理論上のものだけですか、それともこのサイトのユーザーにとって高度すぎますか?)。サイドチャネルを介した情報漏えいにより、あるユーザーが他のユーザーからキーを盗むことができるハードウェアはどうでしょうか?くそーコメント用の投票ボタンがあればいいのに。
ロングポーク

1
@Longpoke私も。
ニコール

回答:


14

CPUの設計における実際/実際のエラーはさておき、このSO質問:宇宙線を探していると思います彼らはプログラムに影響を与える可能性がどのようなものです。SOは職場で再びブロックされているため、引用符を取得できません(ため息)。

上記を無視すると、初期のPentiumにはFPU計算のバグがいくつかあったことを思い出すようです。

手元に確固たる証拠はありませんが、私の計算では、キャッシュ/ RAM /ディスクのビットが破損しているのではなく、計算が間違っているのではないかと心配になるはずです。


40
SOは職場でブロックされていますか?あなたの会社の誰かがソフトウェア開発を妨害しようとしていますか?
ニコール

3
あなたはいるかのように、それが唯一であると言う1 ...人と、彼らはまだ成功していない;)
ダン・マクグラス

9
企業レベルでSFWサイトをブロックする理由を理解できませんでした。検索エンジンは非常に貴重なツールであるため、検索エンジンから得られる情報を表示できるはずです。
ティムポスト

@Dan、ブロックを解除します。ホームへのhttps-tunnellingができるはずです。

4
システムをバイパスして捕まるのは、終了の原因にすぎません。私はアメリカに移り、新しい仕事を得ました。
ダン・マクグラス

6

最近この質問に答える際の大きな問題は、CPUメーカーがチップの正誤表をNDA(秘密保持契約)にまとめていることです。Intelがこれを行う、IIRC。

多くの秘密主義の製造業者はデータシートの修正を発行しますが、何が変わったのか教えてくれないので、300ページすべてを比較したいのでない限り、伝えるのに苦労します。

CPUには多くの悪い指示がありました。Linuxカーネルのレポートを見ると、ブート時に見つけたものがやや興味深いものです。

非常に関連するのは、メモリエラーに関するGoogleの論文です。これらは、あなたが思っているよりも一般的です。「野生のDRAMエラー:大規模フィールドスタディ」Schoeder、Pinheiro、Weberは2009年にACM SIGMETRICSで最初に発行されました。Communicationsof the ACM 2011年2月に再発行

これらのすべてのメモリエラーがあなたの質問にとって意味することは、ECCメモリがないと、とにかく間違った計算が行われるということです。


5

ハードウェアベンダーで働いていたとき、これまでにビルドされたCPUにはバグがないと主張されていました。そして、それは単なる論理的なバグです。通常、製造業者はそれらのほとんどを見つけて、チップを再スピンするか、それらを回避するBIOS設定を見つけます。しかし、宇宙線のようなものがメモリ内のビットを時々反転させるという事実に加えて(メモリには通常、ベーコンを保存するためにパリティビットまたはSECDED回路があります)、ビットが誤って読み取られる可能性は常に有限です。ビットは実際の論理的なゼロや1ではありませんが、電圧や電流などのノイズの多いものであり、システムに有限のノイズがあると、常に間違ったビットが読み取られる可能性があります。昔(アプリプログラマーとして)、いくつかのHWバグを発見しました-両方の悪いロジックの種類と、CPU YのユニットXの両方が時々悪い結果のタイプを私に与えています、HWのスタッフにチップの種類を交換してもらう時間です。実際の回路は時間と使用によってドリフトします。故障する準備ができている場合、特にオーバークロックしている場合、または推奨動作範囲を超えている場合、ビットエラーの検出を開始できます。

これは、1e18以上の浮動小数点演算を含む計算が想定されているスーパーコンピューティングの本当の問題です。


3

次の内容は、GPUの計算エラーに関するものです。

十分な時間があれば、Intel i7-3610QMとNvidia GeForce GTX 660は、同じ指示が与えられた場合、互いに意見が一致しなくなります。(cuda 5.5、compute_20、sm_20)

そのため、2つのうちの1つがエラーになると結論付ける必要があります。

粒子シミュレーションの実行可能性調査のベンチマーク中に、1000倍程度の倍精度変換(sin、cos、乗算、除算、加算、減算を含む変換)のエラーが忍び込んできたことがわかりました。

比較する数値の抜粋を少し紹介します(最初の数値は常にCPU、2番目のGPUです)

-1.4906010142701069
-1.4906010142701074

-161011564.55005690
-161011564.55005693

-0.13829959396003652
-0.13829959396003658

-16925804.720949132
-16925804.720949136

-36.506235247679221
-36.506235247679228

-3.3870884719850887
-3.3870884719850896

(すべての変換シーケンスがエラーになるわけではないことに注意してください)

最大誤差はほとんど無視でき(0.0000000000000401%)ますが、依然として存在し、累積誤差の原因になります。

現在、このエラーは、組み込みライブラリの1つの実装の違いが原因である可能性があります。実際、GPUはCPUが切り上げられる場所を切り捨てまたは切り捨てることを好むようです。興味深いことに、これは負の数でのみ発生するようです。

しかし、ポイントは、デジタルマシン上であっても、同一の命令が必ずしも同一の結果を返すことが保証されているわけではないということです。

これが貢献することを願っています。

サイドノートとしての編集:GPU算術エラーの場合、これ(ctrl + f "ECCメモリをサポートする最初のGPU")も興味深い場合がありますが、上記のエラーには必ずしも関連しません。


浮動小数点の計算は、格納場所によって異なる場合があります。一部のCPUの内部FPUレジスタはRAMとは異なる長さを持っているため、オペラントのロード元に応じて、結果が異なる場合があります。詳細については、floating-point-gui.deをお勧めします。ただし、これは計算エラーではありません。これは、浮動小数点演算がどのように機能するかの設計によるものです。
フィリップ14

2
Philippの発言を明確にするために、FP数学がどのように機能するかを知らない人にとっては、これらの違いは非常に正確です(違いはソフトウェアのバグやハードウェアのバグによるものではないため)。違いは、ソフトウェアの実装またはハードウェアの実装が原因である可能性があります。:これらはバグがある場合は、1つは決定するために、固定マシンイプシロンの概念を使用する必要がありますen.wikipedia.org/wiki/Machine_epsilon(基本的にこの定数は、単一のFP操作がなければなりませんどのように正確な説明)
トーマスEding

1

実際の "CPU"(実行単位、パイプライン..ect)と考えるものに関しては、ほとんど起こりません。しばらく前にPentiumのフレーバーの1つに既知の問題がありましたが、これは私が聞いた唯一の問題です。さて、プロセッサに組み込まれているチップセットや、少なくともUSBコントローラ、TSEC、DMAコントローラ、メモリコントローラなどの同じパッケージを検討すると、そこには多くの正誤表があります。ただし、それについての統計データはありません。


0

このコンテキストで考慮すべきもう1つの「お粗末なハードウェア」問題は、浮動小数点ハードウェアが本質的に「損失の多い」ことです。精度が制限されてxおり、x + 1、またはx + 1000000。「無限の」精度の浮動小数点ライブラリを取得できますが、速度は遅く、最終的には使用可能なメモリによって制限されます。

要するに、ダイクストラは理論の領域で働いていたのであり、実際のハードウェア/ソフトウェアは理論的な理想にうまく適合していません。(元の「チューリングマシン」が無限の紙テープを指定したことを思い出してください。)


2
ただし、これは必ずしも問題のコンテキストである証明可能性には影響しません。これらの種類の損失の上限は、理論的に正確に説明できます。言い換えれば、プログラムは、特定の所定の誤差範囲内で証明可能であるといえます。特定の分野では、これらの問題を考慮に入れていない人は、自分の仕事を適切に行っていないと考えています。
エリアスヴァシレンコ

(1 - .7) * 100 なければならない JavaScriptが返されるものの30も30.000000000000004これエラーが発生しました。それがハードウェアであろうとソフトウェアであろうと、個人的にはわかりません。
ジョン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.