C Openmp减少循环错误?
这是代码的测试部分:C Openmp减少循环错误?,c,openmp,reduction,C,Openmp,Reduction,这是代码的测试部分: float a = 0; float b = 0; int c = 0; int d = 0; #pragma omp parallel for schedule (dynamic, 1) reduction(+ : a, b, c, d) for(i=0; i<100; i++) { a +=1; b +=1; c +=1; d +=1; }
float a = 0;
float b = 0;
int c = 0;
int d = 0;
#pragma omp parallel for schedule (dynamic, 1) reduction(+ : a, b, c, d)
for(i=0; i<100; i++) {
a +=1;
b +=1;
c +=1;
d +=1;
}
printf("a: %d, b: %d, c: %d, d: %d\n", a, b, c, d);
为什么a、b、c、d都不等于100?您正在使用
%d
格式打印浮点数。这会导致未定义的行为。使用:
printf("a: %f, b: %f, c: %d, d: %d\n", a, b, c, d);
你会看到你得到了正确的答案。没问题,很乐意帮忙。
printf("a: %f, b: %f, c: %d, d: %d\n", a, b, c, d);