2013-05-12 75 views
1

我不清楚openMP中「共享」的含義。我看到spec指出共享「聲明一個或多個列表項目以供任務共享...」但這似乎不清楚。關鍵字「共享」是否阻止競爭條件?

舉例來說,如果我有以下代碼:

#pragma omp parallel for shared(num1) 
    for(i=0; i<m; i++) { 
     for(j=0; j < n; j++) { 
      if(myFunc(i,j) < 0) { 
       num1 += 256*u(i,j); 
      } 
     } 
    } 

請問這種進站與NUM1條件,並在本月底for循環提供準確的結果?如果不是,它究竟做了什麼?

回答

0

請問這種停止競賽的條件?

不,它won't

這是程序員的責任,以確保多個線程正確地訪問共享變量(如通過CRITICAL段)

共享部分只是讓相同變量從多個線程可見。

您可以使用臨界區或同步化原子訪問,但在此情況你最好使用reduction條款:

#pragma omp parallel for reduction(+:num1) 
+0

我仍然沒有得到什麼呢共享。這些變量是否已經被多個線程看到?他們不共享內存嗎? – 2013-05-13 22:03:01