私のコードでは、単純な int 変数 (counter という名前) を使用して 4 つのスレッドを同期させています。
ここに私のコードのスニペットがあります:
int counter = 0;
#pragma omp parallel shared(counter) num_threads(4)
{
while(counter != thread_id){
// What should I put here?
}
// Actions needed to be performed 'in order'
counter++;
// The rest of the code
}
私が直面している問題は、-O3 最適化フラグを使用すると、コンパイルされたコードで while ループが「消える」ことです...たとえば、ループ内に printf 行を配置すると、while が発生し、すべて正常に動作します。 ..
-O3 が動作に影響を与えないようにするには、while ループの中に何を入れるべきですか?
- - 編集 - -
コンテキストが不足していて申し訳ありません... NUMAシステムで作業しているため、特定のプロセッサで動作するスレッドのチームを作成する必要があるため、プロセッサアフィニティを使用できるように「チーム作成」部分を順番に作成する必要があります.. . 関連するこの質問を参照してください: GCC と OMP を使用した C の特定のスレッド順序