2
如果有一个for循环并行区域内,将用于循环再并行或每个线程将执行其自己的循环?for循环的并行区域内
T sum;
#pragma omp parallel
{
#pragma omp for reduction(+: sum)
for (;;)
{
T priv_var;
sum += priv_var;
}
}
如果有一个for循环并行区域内,将用于循环再并行或每个线程将执行其自己的循环?for循环的并行区域内
T sum;
#pragma omp parallel
{
#pragma omp for reduction(+: sum)
for (;;)
{
T priv_var;
sum += priv_var;
}
}
是的,这个代码将导致OpenMP的跨越了由parallel
区域催生了线程parallelise的for
循环。但是,我相信您的当前for
语句对于OpenMP并行化无效。您需要明确提供一个整数循环变量,开始和结束以及增量表达式。
实际上,你的代码就相当于用#pragma omp parallel for reduction(+: sum)
单回路。
有一个很好的理由,OpenMP的'for'指令属于所谓的“工作共享”的指令。 – 2012-07-15 18:27:16