如果并行区域内存在for循环,for循环是否会再次并行化,或者每个线程都会执行自己的for循环?
T sum;
#pragma omp parallel
{
#pragma omp for reduction(+: sum)
for (;;)
{
T priv_var;
sum += priv_var;
}
}
答案 0 :(得分:3)
是的,此代码将导致OpenMP在for
区域生成的线程之间并行parallel
循环。但是,我认为您当前的for
声明对于OpenMP并行化无效。您需要显式提供整数循环变量,start和end以及increment表达式。
实际上,您的代码将等同于#pragma omp parallel for reduction(+: sum)
的单个循环。