2012-07-15 78 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