2012-07-15 74 views
2

如果有一个for循环并行区域内,将用于循环再并行或每个线程将执行其自己的循环?for循环的并行区域内

T sum; 

#pragma omp parallel 
{ 
    #pragma omp for reduction(+: sum) 
    for (;;) 
    { 
     T priv_var; 

     sum += priv_var; 
    } 
} 
+1

有一个很好的理由,OpenMP的'for'指令属于所谓的“工作共享”的指令。 – 2012-07-15 18:27:16

回答

3

是的,这个代码将导致OpenMP的跨越了由parallel区域催生了线程parallelise的for循环。但是,我相信您的当前for语句对于OpenMP并行化无效。您需要明确提供一个整数循环变量,开始和结束以及增量表达式。

实际上,你的代码就相当于用#pragma omp parallel for reduction(+: sum)单回路。

More information on MDSN