0

私のコードでは、単純な 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 の特定のスレッド順序

4

1 に答える 1

2

前述のように、これはスレッドを同期するための悪い方法です。私の答えが反対票を投じられたくないので、他の形式の同期を使用する必要があることを説明します。通常、セマフォは物事を数えるために使用されるため、ここではおそらく正しいことですが、すべてのコードがないため、特に適切な方法はありません。

于 2013-01-05T19:43:29.760 に答える