0
我讀過OpenMP中的變量是默認共享的。這是否意味着在下面的代碼中,它應該將所有數字從0到N-1相加,這裏有一個競爭條件?OpenMP競爭狀態?
int sum = 0,i;
#pragma omp parallel for
for (i = 0; i < N; i++)
sum+=i;
我讀過OpenMP中的變量是默認共享的。這是否意味着在下面的代碼中,它應該將所有數字從0到N-1相加,這裏有一個競爭條件?OpenMP競爭狀態?
int sum = 0,i;
#pragma omp parallel for
for (i = 0; i < N; i++)
sum+=i;
是的,存在競爭條件。您應該將reduction(+:sum)
添加到編譯指示中。這將有效地在每個線程中創建不可見的私人副本,然後在循環之後對它們進行求和。
並且還使'我'私人? – jitihsk 2013-04-10 22:56:06
這裏沒有必要,因爲openmp'for'中的循環迭代變量是自動私有的。 – 2013-04-11 05:53:49