私はこのようなコードを持っています
void h(particles *p) {
#pragma omp parallel for
for (int i = 0; i < maxThreads; ++i) {
int id = omp_get_thread_num();
for (int j = 0; j < dtnum; ++j) {
f( p, id);
if ( j % 50 == 0 ) {
if (id == 0) {
g(p);
}
#pragma omp barrier
}
}
}
}
void f(particles *p, int id) {
for (int i = id * prt_thread; i < (id + 1)*prt_thread; ++i) {
x(p[i]);
}
}
基本的に私はしたい: 1) 与えられた量のスレッドを生成します。各スレッドは、スレッドの ID に従って p のチャックを処理します。2) p の各要素は、dtnum 回処理する必要があります。処理にはランダムなイベントが含まれます。3) 50 回の反復ごとに、1 つのスレッドが別の操作を実行する必要があり、他のスレッドは待機します。
問題: gcc は警告を表示します: バリア領域は、ワークシェアリング、クリティカル、順序付き、マスター、または明示的なタスク領域内に密接にネストされていない可能性があります
私に何ができる?