我有一个for循环,我使用OMP并行进行并行化。现在在我的main for循环中,我有另一个for循环,它包含一段代码,我希望每次迭代嵌套for循环只需要一个线程执行。这意味着Function1()
应该被调用100次,而Function2
每次迭代外部for循环应被调用400次,前提是线程数为4.
#pragma omp parallel for schedule (auto)
for (i=0; i<nrows; i++) {
int tid = omp_get_thread_num(); // thread ID
startarray[tid] = 0;
for (int partition = 0; partition < 100 ; partition++)
{
#pragma omp single
{
qqyy = Function1();
}
Function2();
//some work
}
}
现在我的代码发出以下警告:
错误:工作共享区域可能没有紧密嵌套在工作共享,关键,有序,主要或显式任务区域内
这样做的正确方法是什么?