- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
— PAGE \* Arabic 1 —
蒙特卡罗算法实验报告
多核软件设计——实验指导蒙特卡洛算法求 项目 开发者: 开发时间: 版本号: 一、问题描述 蒙特卡洛算法可理解为通过大量实验,模拟实际行为,来收集统计数据。本例中,算法随机产生一系列点,模拟这些点落在如下图所示的正方形区域内的情况。其几何解释如下 1 1 图1 如图1所示,正方形边长为1,左下顶点与原点重合,两边分别与x ,y 轴重合。曲线为1/4圆弧,圆 心位于原点,与正方形左下定点重合,半径为1。正方形面积S 1=1,圆弧内面积S 2=ππ4 1412=r 。 算法模拟大量点随机落在此正方形区域内,落在圆弧内的点的数量(n 2)与点的总数(n 1)的比例与面积 成正比关系。即 π 42121==S S n n (1) 由此可得 1 2 4n n = π (2) 因此,只要计算出落在圆弧内的点的数量在点总数中所占的比例,就能求出π的值。 由图1可知,所有点均落在正方形范围内,因此点的x 坐标满足10≤≤x 。又,当点落在圆弧范围内,则点的二维坐标关系满足122 ≤+y x 。检验每一个点是否满足此关系即可判定改点是否落在 圆弧内。 二、串行算法描述 本项目中使用了标准C 语言库中的产生随机数函数。该函数原型为: int rand( void ); 此函数产生随机数列,每次调用时均返回0到RAND_MAX 之间的一个整数。 void srand( unsigned int seed ); 此函数为rand ()函数所生成的伪随机数序列设置起始点,使之产生不同的伪随机数。 算法: 产生2n 个随机数据,范围[0,1],对每个数据点计算其坐标是否满足122 ≤+y x , 统计满足此关系的点的数量count ,则n count 4=π 示例见附件Serial.c 三、并行算法 3.1 并行算法描述 算法步骤: 1、确定需要产生的点的个数n ,参与运行的处理器数m ; 2、对每一个处理器,生成两个随机数x ,y ,范围[0,1]; 3、判断两个随机数x ,y 是否满足12 2 ≤+y x ; 4、若满足,则变量COUNT i ++; 5、重复步骤2-4,直至每个处理器均生成n/m 个随机点; 6、收集COUNT i 的值,并累加至变量COUNT 中,此即为随机点落在圆弧内的数量; 7、通过(2)式计算π的值。 3.2 并行算法的一个例子 在这个实验中,采用Linux 操作系统pthread 接口来实现程序的并行化。这些接口函数和数据类型都在头文件 中声明。因为pthread 并没有包含在C 的标准库中,编译的时候需要加上-lpthread 选项, 使程序链接到libpthread,才能编译成功。 例子程序参见附件Parallel.c。 3.3 并行算法正确性证明 本并行算法只是简单的把独立的任务进行分派,经多次试验测试,结果正确。 四、实验结果 硬件平台:惠普刀片集群 编译器:gccg++ 操作系统:Linux 测试数据集合:由随机数函数产生的数据集合 4.1 算法运行时间 表1 [注]:N:算法生成随机点的个数 算法运行时间为某一次运行时间,非多次运行之平均时间 4.2 算法计算量时间比、加速比 并行、串行算法运算量时间比、加速比如下图所示 图 2 五、实验结果分析 如表1、图3所示,加速比在(0.6,0.9)区间,与理论上的值2相去甚远。 对同一运算量多次运行并行算法得到如下表2所示结果。(图4) 图4 而对同样的运算量多次运行串行算法得到如下表3所示结果。(图5) 表3 图5 如图4图5所示,对同一计算量,串行算法每次运行时间相差较小,而并行算法则相差明显。因此,通过分
文档评论(0)