0

x86 システム上に構築された C++ プログラムの経験があるかどうかを知りたいのですが、x86 システム用にリリースした後 (ただし、他のプロセッサ ハードウェア、AMD、Intel 用) にはいくつかの結果が異なります。したがって、変更されたのはハードウェアだけです。

私が心に留めている2つのことは次のとおりです。

  1. 浮動小数点標準 IEEE (プロセッサ メーカーがどれだけ厳密に準拠しているかはわかりません) (特に、1 つの結果が前の結果の結果に基づいている FEM ソルバーのような反復ソルバーの場合。そのため、小さな違いが異なる結果につながる可能性があります。 、fe 10000回の反復。)

  2. マルチスレッド

そのようなことを今、何度か耳にしました。そして、そのトピックに関連する証明された事実があるかどうかに興味があります.

4

3 に答える 3

2

初心者向けのPentium FDIV バグは常にありますが、一部のコンパイラではこれを考慮に入れることができます。

一部のコンパイラは、SIMD 命令を利用するコードを生成できるため、浮動小数点を doinf すると、SIMD バージョンと非 SIMD バージョンで異なる結果が得られる可能性があります。

CPU によって動作が異なる命令もあります。たとえば、pushf/popf などです。

したがって、プログラムはハードウェアによって異なる動作をする可能性があります (結局のところ、CPU を識別するプログラムの動作です)。

于 2012-05-02T11:13:39.597 に答える
0

最初の (1) ケースについては説明しませんが、さまざまな方法で動作する多くのコマンド (通常は内部/文書化されていない) が存在することは確かです。

しかし、マルチスレッド (2) に関しては、同じプロセスで同じプロセッサを動作させると、異なる結果が生じる可能性があることがわかります。一般に、マルチスレッディング (特にハイパースレッドおよびマルチコア プロセッサ上) はランダムな問題です。それは製造元だけでなく、プロセスのロード、DMA コントローラの種類にも依存します... さらに、マルチスレッド エンジンの応答を改善するためにランダム ジェネレータを呼び出す特別なスレッド技術 (ランダム スレッド ブースト) があります。

于 2012-05-02T11:15:07.660 に答える
0

これは競合状態と呼ばれます。( http://en.wikipedia.org/wiki/Race_condition )

于 2012-05-02T22:59:20.973 に答える