您好我测试OpenACC vs OpenMP vs Nothing,但我得到了奇怪的结果。
代码:
#include <stdio.h>
int main () {
int a,sum=0;
(#pragma omp for/#pragma acc parallel loop/nothing)
for( a = 0 ; a < 2000000000; a = a + 1 ){
sum+=a%2;
}
printf("sum = %d\n",sum);
return 0;
}
怎么办?
答案 0 :(得分:0)
您有多个不同的线程覆盖sum
,因此您的结果会出错。你需要告诉它这是一个&#34;减少&#34;
#pragma omp parallel for reduction(+:sum)
或
#pragma acc parallel loop reduction(+:sum)
答案 1 :(得分:0)
Google&#39;竞争条件&#39; 事实上,较新版本的PGI OpenACC足够智能,可以检测到给定变量的减少。这并不意味着你应该编写潜在的错误代码