openmp蒙特卡罗方法求圆周率
时间: 2024-05-31 22:02:59 浏览: 89
用蒙特卡洛方法计算圆周率
5星 · 资源好评率100%
蒙特卡罗方法是一种基于随机采样的数值计算方法,可以用于求解圆周率。OpenMP是一种并行计算框架,可以将程序中的循环迭代等任务并行化,提高程序的运行效率。下面是使用OpenMP实现蒙特卡罗方法求解圆周率的示例代码:
```c++
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <omp.h>
int main(int argc, char* argv[])
{
int i, count = 0, n = 10000000;
double x, y, pi, start, end;
srand((unsigned)time(NULL));
start = omp_get_wtime();
#pragma omp parallel for private(x, y) reduction(+:count)
for (i = 0; i < n; i++)
{
x = (double)rand() / RAND_MAX;
y = (double)rand() / RAND_MAX;
if ((x * x + y * y) <= 1.0)
count++;
}
pi = 4.0 * count / n;
end = omp_get_wtime();
printf("pi = %f\n", pi);
printf("Time: %f seconds\n", end - start);
return 0;
}
```
在上面的代码中,我们使用了OpenMP的并行for循环,将循环体内的随机生成x和y坐标以及判断是否在圆内的操作并行化。使用reduction(+:count)语句对计数器count进行归约操作,最终得到所有线程的计数器之和。最后根据公式pi = 4 * count / n计算圆周率,输出结果和程序运行时间。
阅读全文