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

C OpenMP并行程序中的奇怪错误,c,parallel-processing,openmp,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 p

我正在研究并行编程的模式。我正在浏览书中的示例,但有一个示例未能编译。代码如下:

#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;
}
#包括
#包括
#包括
int main(){
int i;
int num_步数=1000000;
双x,pi,步长,num=0.0;
步长=1.0/(双)个步长;
#pragma omp并行专用(x)缩减(+:总和)
对于(i=0;i


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

代码中没有声明的
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
的警告,这将相当快地指出问题的根源。

除非我在这里遗漏了什么,否则看起来您从未创建名为
sum
的变量。来自奇怪的是,这本书出现了一个错误。有可能克服它吗?为sum创建一个变量声明,
double sum=0.0存在错误打印(或按键)错误。这行:“双x,π,步长,num=0.0;”应该是:'double x,pi,step,sum=0.0;'您应该注意到从未使用过“num”。(在启用所有警告的情况下编译将显示该问题。)这表明“num=0.0”的声明应该是“sum=0.0”。@user3629249。为什么启用所有警告进行编译是一个好主意的好例子。我如何在ubuntu中启用所有警告?@Lucas,请参阅对我答案的编辑以获取信息。很抱歉,这么迂腐,但是
-Wall
没有启用所有警告。
-Wall-Wextra
也没有。对GCC来说,这是一个用词不当的词。请称之为
all
。也许应该是
-Wmost-Wmore
:-)