4

-O2 最適化フラグによってコードが再配置され、マルチスレッド アプリケーションが意図しない動作をする可能性はありますか?

un-intended behaviorコードが再配置される場合の例として、スレッドに対して (プログラマーによって) 作成されると宣言された変数が、すべてのスレッドによって共有される1つの#pragma omp parallalコピーのみが作成されるように、外部に移動されます。

4

1 に答える 1

3

いいえ、これは起こり得ません。コンパイラがループをアンロールしていた場合、またはコンパイラがループを並べ替えたときにプログラムがクラッシュした場合、OpenMP はあまり役に立ちません。OpenMP ディレクティブは、変数と並列スコープの依存関係と副作用を指定する必要があり、コンパイラは最適化パスを適用するときにそれらを考慮します。

于 2013-04-22T21:45:00.597 に答える