CC BY 4.0 (除特别声明或转载文章外)
如果这篇博客帮助到你,可以请我喝一杯咖啡~
给出以下 openmp 程序(点击参考代码获取),修改代码为不使用 reduction 的版本。
原网页上下下来的代码很坑,乘号和减号都不是 ascii 字符……
这个求 PI 的代码也很迷,步长必须设成1e-3
才能得到比较精确的值…
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <omp.h>
double calculate_pi(double step)
{
int i;
double x, sum = 0.0;
#pragma omp parallel for private(x)
for (i = 0; i < 1000000; ++i)
{
x = (i - 0.5) * step;
#pragma omp critical
sum += 2.0 / (1.0 + x * x);
}
return step * sum;
}
int main()
{
printf("%.9f", calculate_pi(1e-3));
}