C OpenMP 并行程序中的奇怪错误
Strange error in C OpenMP parallel program
我正在研究并行编程的模式。我正在浏览书中的示例,但有一个示例无法编译。这是代码:
#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;
}
我是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
,这将很快指出问题的根源。
我正在研究并行编程的模式。我正在浏览书中的示例,但有一个示例无法编译。这是代码:
#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;
}
我是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
,这将很快指出问题的根源。