如何把一段c++循环改为并行计算的openmp程序,
这是我的程序,#pragmaompparallelfor,老师不让加这一句,而是直接编写,#include<iostream>#include<cmath>#includ...
这是我的程序,#pragma omp parallel for,老师不让加这一句,而是直接编写,
#include <iostream>
#include<cmath>
#include<ctime>
using namespace std;
//f(x)是题目的多项式函数 f(x)=-x^4+x^3+1
double f(double x)
{
double s=-pow(x,4)+pow(x,3)+1;
return s;
}
int main()
{
//[a,b,c,d]分别是x,y的取值范围
double a=-1,b=1.5,c=0.0,d=1.2;
double area=0;
double x=0,y=0;
int cnt=0;//cnt是分割后的占到的格数
//step是步长
double step=1.0e-4;
int n=(b-a)/step;
int m=(d-c)/step;
clock_t t1=clock();
#pragma omp parallel for
for(int i=0;i<n;i++)
{ x=a+step*i;
for(int j=0;j<m;j++)
{y=c+step*j;
if(y<f(x))
{
cnt++;
}
}
}
clock_t t2=clock();
cout<<"total time is "<<(t2-t1)/1000.0<<"s"<<endl;
area=cnt*step*step;
cout<<"曲线y=-x^4+x^3+1与x轴围城的面积是s="<<area<<endl;
return 0;
} 展开
#include <iostream>
#include<cmath>
#include<ctime>
using namespace std;
//f(x)是题目的多项式函数 f(x)=-x^4+x^3+1
double f(double x)
{
double s=-pow(x,4)+pow(x,3)+1;
return s;
}
int main()
{
//[a,b,c,d]分别是x,y的取值范围
double a=-1,b=1.5,c=0.0,d=1.2;
double area=0;
double x=0,y=0;
int cnt=0;//cnt是分割后的占到的格数
//step是步长
double step=1.0e-4;
int n=(b-a)/step;
int m=(d-c)/step;
clock_t t1=clock();
#pragma omp parallel for
for(int i=0;i<n;i++)
{ x=a+step*i;
for(int j=0;j<m;j++)
{y=c+step*j;
if(y<f(x))
{
cnt++;
}
}
}
clock_t t2=clock();
cout<<"total time is "<<(t2-t1)/1000.0<<"s"<<endl;
area=cnt*step*step;
cout<<"曲线y=-x^4+x^3+1与x轴围城的面积是s="<<area<<endl;
return 0;
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询