- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多核求PI实验报告
Monte Carlo方法计算Pi
实验要求
以OpenMP实现Monte Carlo计算Pi的并行程序
注意:
制导循环编译
共享变量的处理
编译运行
比较
修改测试点数,提高计算精度。
利用OpenMP实现积分法,比较。
实验原理
通过蒙特卡罗算法计算圆周率的主导思想是:统计学(概率)
1.一个正方形有一个内切圆,向这个正方形内随机的画点,则点落在圆内的概论为P=圆面积/正方形面积。
2. 在一个平面直角坐标系下,在点(1,1)处画一个半径为R=1的圆,以这个圆画一个外接正方形,其边长为R=1(R=1时,圆面积即Pi)。
3. 随机取一点(X,Y)使得0=X=2R并且0=Y=2R,即随机点在正方形内。
4. 判断点是否在圆内,通过公式(X-R)(X-R)+(Y-R)(Y-R)R*R计算。
5. 设所有点的个数为N,落在圆内的点的个数为M,则
P=M/N=4*R*R/Pi*R*R=4/Pi
Pi=4*N/M
当实验次数越多(N越大),所计算出的Pi也越准确。
但计算机上的随机数毕竟是伪随机数,当取值超过一定值,也会出现不随机现象,因为伪随机数是周期函数。如果想提高精度,最好能用真正的随机数生成器(需要更深的知识)。
实验步骤
利用蒙特卡洛方法实现求PI值(利用OpenMP)
思路:根据所给的串行程序,只需根据OpenMp的用法将其转换。
源码:
#include stdafx.h
#includestdio.h
#includestdlib.h
#includetime.h
#include omp.h
#include iostream
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
long max=1000000;
long i,count=0;
double x,y,bulk,starttime,endtime;
time_t t;
cout请输入测试点的个数:endl;
cinmax;
starttime=clock();
// 产生以当前时间开始的随机种子
srand((unsigned) time(t));
#pragma omp parallel for num_threads(8) default(shared) private(x,y) reduction(+:count)
for(i=0;imax;i++)
{
x=rand();
x=x/32767;
y=rand();
y=y/32767;
if((x*x+y*y)=1)
count++;
}
bulk=4*(double(count)/max);
endtime= clock();
printf(所得PI的值如下:%f \n, bulk);
printf(计算PI的过程共用时间: %f 秒\n,(endtime-starttime)/ CLOCKS_PER_SEC);
return 0;
}
利用积分法实现求PI(利用OpenMP)
思路:与上同样道理。
源码:
#include stdafx.h
#includestdio.h
#includestdlib.h
#includetime.h
#include omp.h
#include iostream
using namespace std;
static long num_steps=10;
double step,pi;
int _tmain(int argc, _TCHAR* argv[])
{
int i;
double x,sum=0.0;
clock_t start,finish;
printf(请输入您要用几步来进行计算\n);
cinnum_steps;
step=1.0/(double)num_steps;
start=clock();
#pragma omp parallel for num_threads(8) default(shared) private(x) reduction(+:sum)
for(i=0;inum_steps;i++)
{
x=(i+0.5)*step;
sum=sum+4.0/(1.0+x*x);
}
pi=step*sum;
printf(所得PI的值如下:\nPI=%f\n,pi);
finish=clock();
printf(计算PI的过程共用时间:%f 秒\n,(double)(finish - start) / CLOCKS_PER_SEC);
return 0;
}
实验结果的分析
对于蒙特卡洛方法的分析
修改测试点数,提高
您可能关注的文档
- 地域文化综合练习题.doc
- 地图学复习资料(小条).doc
- 地球科学概论实验指导书.doc
- 地大北京周口店实习报告.doc
- 地理农业知识.doc
- 地理信息系统及遥感名词解释.doc
- 地球物理测井相关知识点.doc
- 地理总复习.docx
- 地理必修3期中考试试题.doc
- 地下室钢筋支架及大体积混凝土施工方案.docx
- 吉安县公开招聘专职文明实践员笔试备考试题及答案解析.docx
- 2025重庆枫叶国际学校招聘教师笔试备考试题及答案解析.docx
- 游机队电玩自制联网教程-tplink.pdf
- 2025重庆新华出版集团招聘1人笔试模拟试题及答案解析.docx
- 2025宜宾高新丽雅城市产业发展有限公司公开招聘笔试模拟试题及答案解析.docx
- 2025云南保山市龙陵县勐糯镇人民政府招聘合同制专职消防员1人笔试模拟试题及答案解析.docx
- 11.1生活中常见的盐 九年级化学人教版下册.pptx
- 6.1法律保护下的婚姻 高二政治《法律与生活》课件(统编版选择性必修2)(新版).pptx
- 文昌市中小学教师校园招聘29人笔试模拟试题及答案解析.docx
- 10.1.5 常见的酸和碱(第5课时)课件-九年级化学人教版下册.pptx
文档评论(0)