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
:-)