C++ 带主区域的OpenMP for循环:“;主区域不能紧密嵌套在工作共享或显式任务区域内”;

C++ 带主区域的OpenMP for循环:“;主区域不能紧密嵌套在工作共享或显式任务区域内”;,c++,parallel-processing,openmp,C++,Parallel Processing,Openmp,我有下面的代码,我相信它应该显示一个进度条,近似整个进程的进度(因为循环的每个并行线程应该以大约相同的速率进行) 现在,当我运行代码时,我确实得到了期望的结果。但我不喜欢警告。为什么这给了我一个警告,有没有更好的方法来实现这一点 谢谢 它给了你警告,因为 主区域不能紧密嵌套在工作共享、原子或显式任务区域内 #pragma omp master顾名思义是一个主区域,#pragma omp parallel for是一个任务共享区域 它们紧密嵌套,因为没有函数调用或语句将它们分隔开 为避免出现警告,

我有下面的代码,我相信它应该显示一个进度条,近似整个进程的进度(因为循环的每个并行线程应该以大约相同的速率进行)

现在,当我运行代码时,我确实得到了期望的结果。但我不喜欢警告。为什么这给了我一个警告,有没有更好的方法来实现这一点


谢谢

它给了你警告,因为 主区域不能紧密嵌套在工作共享、原子或显式任务区域内

#pragma omp master
顾名思义是一个主区域,
#pragma omp parallel for
是一个任务共享区域

它们紧密嵌套,因为没有函数调用或语句将它们分隔开

为避免出现警告,请将
#pragma omp master
替换为类似

tid = omp_get_thread_num();
if(tid == 0)
{
   progress_bar(x*omp_get_num_threads());
}
根据例子

有关更多信息和示例,请参阅

有关更多信息,请参阅或

warning: master region may not be closely nested inside of work-sharing or explicit task region [enabled by default]
tid = omp_get_thread_num();
if(tid == 0)
{
   progress_bar(x*omp_get_num_threads());
}