我有一个这样的代码
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次迭代,一个线程必须执行另一个操作,而其他线程等待
问题:gcc 说警告:屏障区域可能没有紧密嵌套在工作共享、关键、有序、主或显式任务区域内
我能做些什么?