我有以下循环:
while (a != b) {
#pragma omp parallel
{
#pragma omp for
// first for
#pragma omp for
// second for
}
}
通过这种方式,团队在每个循环中创建。是否可以重新安排代码以便拥有一个团队? ""在循环内部使用omp原子访问变量," b"是一个常数。
答案 0 :(得分:2)
我唯一想到的是这样的事情:
#pragma omp parallel
{
while (a != b) {
#pragma omp barrier
// This barrier ensures that threads
// wait each other after evaluating the condition
// in the while loop
#pragma omp for
// first for (implicit barrier)
#pragma omp for
// second for (implicit barrier)
// The second implicit barrier ensures that every
// thread will have the same view of a
} // while
} // omp parallel
通过这种方式每个线程将评估条件,但每个评估将与其他评估一致。如果您真的想要一个线程来评估条件,那么您应该考虑将工作共享构造转换为任务构造。