我有以下代碼,這是導致錯誤的輸出。OpenMP:減少和共享
#pragma omp parallel private(i,piold) shared(pi,sign)
{
#pragma omp for reduction(+:pi) schedule (static)
for (i = 0; i < 100000; i++){
piold = pi;
pi += sign/(2*i+1);
sign=-sign;
}
}
pi = 4*pi;
由於我是OpenMP的新手,我有點迷惘。令我困惑的是如何在線程之間傳遞sign
,pi
和piold
?由於替代迭代需要不同的值,因此它們不能共享。所以有一種方法是將迭代分爲奇數和偶數,但這似乎效率很低。
在這種情況下的任何建議?
假設'sign'和'i'均爲整數變量和' sign'最初是'1'或'-1','sign /(2 * i + 1)'除了第一次迭代外''會給所有人提供'0'。另外,雖然我不瞭解OMP,但將「sign」聲明爲私密和共享似乎與我相矛盾。 – celtschk
簽名私人和分享是一個錯誤。我在這裏更正了我的代碼。 – algoProg
您得到「pi = 4」的結果是錯誤的嗎? – celtschk