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