2013-04-08 96 views
0

我讀過OpenMP中的變量是默認共享的。這是否意味着在下面的代碼中,它應該將所有數字從0到N-1相加,這裏有一個競爭條件?OpenMP競爭狀態?

int sum = 0,i; 
#pragma omp parallel for 
for (i = 0; i < N; i++) 
    sum+=i; 

回答

2

是的,存在競爭條件。您應該將reduction(+:sum)添加到編譯指示中。這將有效地在每個線程中創建不可見的私人副本,然後在循環之後對它們進行求和。

+0

並且還使'我'私人? – jitihsk 2013-04-10 22:56:06

+1

這裏沒有必要,因爲openmp'for'中的循環迭代變量是自動私有的。 – 2013-04-11 05:53:49