C OpenMP并行程序中的奇怪错误

时间:2015-07-07 16:57:47

标签: c parallel-processing openmp

我正在研究并行编程的模式。我正在阅读本书中的示例,但是一个例子未能编译。这是代码:

#include <stdio.h>
#include <math.h>
#include <omp.h>

int main() {

int i;
int num_steps = 1000000;
double x, pi, step, num = 0.0;

step = 1.0/(double) num_steps;

#pragma omp parallel for private(x) reduction(+:sum)
    for(i=0; i < num_steps; i++) {
        x = (i+0.5) * step;
        sum+= 4.0/(1.0+x*x);
    }

pi = step *sum;
printf("pi %lf\n", pi);
return 0;
}

enter image description here

我是PP的新手所以我不知道我做错了什么。

1 个答案:

答案 0 :(得分:1)

代码中声明的sum没有变量,因此当编译器到达该行时:

#pragma omp parallel for private(x) reduction(+:sum)

它不知道sum是什么,并为您提供了遇到的编译错误。

要解决此问题,您需要先声明sum变量:

double sum = 0.0;
#pragma omp parallel for private(x) reduction(+:sum)

正如评论中所指出的那样,这个问题是一个错字的结果:

double x, pi, step, num = 0.0; //num should be sum here

通过编译gcc的所有警告-Wall编译器选项,您将收到有关未使用的变量num的警告,这将很快指出问题的根源。