vector<int> v;
#pragma omp parallel for ordered schedule(dynamic, anyChunkSizeGreaterThan1)
for (int i = 0; i < n; ++i){
...
...
...
#pragma omp ordered
v.push_back(i);
}
v
には、n
のサイズ順リストが入っています。omp ordered句はどのように機能しますか?
omp ordered
ブロックに達すると、すべてのスレッドは最小の反復可能スレッドが完了するのを待つ必要がありますが、特定の繰り返しがスレッドに割り当てられていない場合はどうなりますか?または、OpenMPランタイムライブラリは、常に最小の反復があるスレッドによって処理されることを確認していますか?
また、dynamic schedule
と一緒にordered
節を使用することをお勧めしますか? static schedule
はパフォーマンスに影響しますか?
優秀な回答Hristo!すべて今クリアする、ありがとう! –
@ Cookie503、チャンクサイズが小さすぎると、データのローカリティが失われてキャッシュが役に立たなくなることに注意してください。これは暗黙のシリアライゼーションよりもパフォーマンスが大幅に悪くなる可能性があります。最高のスピードアップが達成されるまで、さまざまなチャンクサイズで試してみてください。順序付けされたループを賢明に使用し、可能であればそれらを避けてください。 (あなたの特定の例では)ベクトルの代わりにシンプルな事前割り付け配列(または他のスレッドセーフランダムアクセスコンテナ)を使うべきです: 'arr [i] = i;' –