[英]Is this a data race? OPENMP
如果變量k
存在數據競爭,我有點困惑。 據我了解,只有一個線程將執行單個構造,但由於no wait
,線程將立即開始執行for
構造。 這里的atomic
是否足以防止任何潛在的數據競爭?
#include <stdio.h>
#include <omp.h>
#define Nthreads 8
void main()
{
int n =9, l,k =n,i,j;
k += n+1;
omp_set_num_threads(Nthreads);
#pragma omp parallel default(none) shared(n, k) private(j)
{
#pragma omp single nowait
{
k = k+5;
}
#pragma omp for nowait
for( i =0; i< n; i++)
{
#pragma omp atomic
k +=n+i+1;
}
}
}
假設代碼的 rest 正確地表達了您的預期算法,它幾乎是。 正如您可能懷疑自己的那樣,您還需要在單個區域中保護 k 的更新。
j 是一個未使用的變量,我不知道您是否只是忘記刪除它,或者您試圖實現其他東西。
我會在 for 循環中為 k 使用歸約子句,而不是使用同步構造。 我不知道它是否會更好或更快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.