使用OpenMP C++并行计算程序的积分
Parallelize program to count integral using OpenMP C++
我正在尝试计算积分
#include <iostream>
#include <omp.h>
using namespace std;
double my_exp(double x) {
double res = 1., term = 1.;
for(int n=1; n<=1000; n++) {
term *= x / n;
res += term;
}
return res;
}
double f(double x) {
return x*my_exp(x);
}
int main() {
double a=0., b=1., result = 0.;
int nsteps = 1000000;
double h = (b - a)/nsteps;
for(int i=1; i<nsteps; i++) result += f(a + i*h);
result = (result + .5*(f(a) + f(b)))*h;
cout.precision(15);
cout << "Result: " << result << endl;
return 0;
}
该程序对积分进行计数并返回结果Result: 1.00000000000035
。但执行的时间很长。我应该并行我的程序,我想我应该添加#pragma omp parallel for
,但它不起作用
更改主功能
#pragma omp parallel
{
double localresult = 0.0;
#pragma omp for
for(int i=1; i<nsteps; i++)
localresult += f(a + i*h);
#pragma omp critical
{
result += localresult;
}
}
result = (result + .5*(f(a) + f(b)))*h;
编辑:按照muXXmit2X的思路,更简单的解决方案是
#pragma omp parallel for reduction(+:result)
for(int i=1; i<nsteps; i++) result += f(a + i*h);
result = (result + .5*(f(a) + f(b)))*h;
相关文章:
- 我的C++级数计算程序出了什么问题?被困了好几个星期
- 使用 C++ 和 OOP 创建面积计算程序
- 我正在尝试编写一个简单的计算程序,但答案一直返回为 0
- 在c++上创建税务计算程序,错误为未初始化的局部变量
- 不计算程序中的最低和最高成绩。(C++)(流)
- 精确计算C++程序所使用的内存
- 使用OpenMP C++并行计算程序的积分
- 计算C++程序中留下评论的行数
- 计算程序形状的法线
- 如何计算程序的空间复杂度
- 在cpp中运行计时器,与正在执行的程序并行
- C++利息计算程序
- 计算程序集中每个任务的准确 CPU 使用率
- 通过GPU计算并行程序的一部分的可能选项
- 计算并行程序的运行时间和cpu时间
- c++计算程序没有响应
- 分区是一个类似生活游戏的程序,用于负载平衡的并行计算
- 计算程序中的估计时间
- 如何使大型计算程序更快
- c++终端应用程序并行输入和输出