分布式计算课程报告

上传人:cn****1 文档编号:443497450 上传时间:2023-12-24 格式:DOCX 页数:16 大小:36.72KB
返回 下载 相关 举报
分布式计算课程报告_第1页
第1页 / 共16页
分布式计算课程报告_第2页
第2页 / 共16页
分布式计算课程报告_第3页
第3页 / 共16页
分布式计算课程报告_第4页
第4页 / 共16页
分布式计算课程报告_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《分布式计算课程报告》由会员分享,可在线阅读,更多相关《分布式计算课程报告(16页珍藏版)》请在金锄头文库上搜索。

1、实验环境:Win7或者Win XP都可以,但是要安装VS2008以上版本。因 为要实现分布式,形成多线程,电脑至少是双核系统。本次试验用的 编程语言是C#,主要用的是OpenMp实现多核开发技术。OpenMp简单介绍:OpenMP起源于ANSIX3H5标准,它具有简单、移植性好和可 扩展等优点,是共享存储系统编程的一个工业标准。OpenMP使用 Fork-Join并行执行模型。支持增量并行化 (IncrementalParallelization)。实际上 OpenMP 并不是一门新的 语言,它是对基本语言(如Fortan77、Fortan90、C、C+等)的 扩展OpenMP规范中定义的编译

2、制导(CompilerDirective)、运 行 库(RuntimeLibrary)和环境变量(EnvironmentVariables),能够使 用户在保证程序的可移植性的前提下,按照标准将已有的串行程序 逐步并行化。制导指令是对程序设计语言的扩展,进一步提供了对并行区域、工作 共享、同步构造的支持,并且支持数据的共享和私有化。这样,用户 对串行程序添加制导指令的过程,就类似于进行显式并行程序设计。 运行库和环境变量,使得用户可以调整并行程序的执行环境。OpenMP的提出,是希望遵循该并行编程模型的并行程序,可以在 不同的产商提供的共享存储体系结构间比较容易地移植。实际上,已 经有许多硬件

3、和软件供应商提供支持OepnMP的编译器,如DEC、 Intel、IBM、HP、Sun、SGI、及 U.S.DOEASCIprogram 等,并 且包括了 Linux,UNIX和Windows等多种操作系统平台。目前, Fortran77、Fortran90、C、C+语言的实现规范已经完成。OpenMp并行编程模型:首先,OpenMP是基于线程的并行编程模型 (ProgrammingModel),个共享存储的进程由多个线程组成, OpenMP就是基于已有线程的共享编程范例;其次,OpenMP是一 个外部的编程模型,而不是自动编程模型,它能够使程序员完全控制 并行化,OpenMP使用Fork-J

4、oin并行执行模型。所有的OpenMP 程序开始于一个单独的主线程(MasterThread )。主线程会一直串 行的执行,直到遇见第一个并行域(ParallelRegion)才开始并行执行。 接下来的过程如下: Fork:主线程创建一队并行的线程,然后,并行域中的代码在不同 的线程队中并行执行; Join:当主线程在并行域中执行完之后,它们或被同步或被中断,最 后只有主线程在执行。实际上,所有OpenMP的并行化,都是通过使用嵌入到C/C+或 Fortran源代码中的编译制导语句来达到的。并且,一个OpenMP 应用编程接口 (API)的并行结构可以嵌入到别的并行结构中去。应用编程接口还可以

5、随着不同并行域的需要动态地改变线程数实验内容介绍:通过三种不同的方法来求取圆周率n,每种方法都运用串行和并行 来求取n值,并经过多次测试,求得串行和并行的时间t1,t2,计算 加速比t1/t2,最后通过求出n值的平均值可以知道那种方法最好, 也明显能从中看出并行效率比串行效率好。当然有可能在计算过程中 由于给出的点数太少或者其它个别原因造成出现数据错误或者误差 较大时,可以把这些数据排除。实验一、蒙特卡洛法求圆周率利用单位圆与边长为1的正方形面积之比来计算冗的近似值。具体j.K.GC.40.21.基本思想思想如下:如图1所示,单位圆的1/4为一个扇形G,,它是边长为1的正方形I) 0.2n.4

6、0.6(L$: I的一部分。考虑扇形面积在正方形面积中所占的比例|,得出其结果n/4,然后再乘以4就可以得到n的值。这里如何计算比例K,运用蒙特卡洛方法的随机投点思想。在正 方形中随机投入很多点,使所投点落入在正方形中每一个位置的机会 均等,然后考察有多少点落入扇形区域内。其中落在扇形内点的个数 m与投点总数n之比就是k的近似值。2运行结果本次试验测试投点总数为10000000具体运行结果如下表所示。串行n值并行n值串行时间并行时间加速比3.1409323.0451269305301.7547173.1409323.0370578915241.7003823.1409323.007694915

7、5531.6546113.1409323.0811979697051.3744683.1409323.0373449056041.498344见附录1实验二、拟蒙特卡洛法求圆周率1.基本思想利用单位圆与边长为1的正方形面积之比来计算冗的近似值。具体 思想如下:如图1所示,单位圆的1/4为一个扇形G,它是边长为1的正方形的一部分。考虑扇形面积在正方形面 积中所占的比例k,得出其结果n/4然后再乘以4就可以得到n的值。和蒙特卡洛方法类似。如图1,把x轴,y轴,01等分成1000 份。1001*1001个点,统计落入1/4圆中的点数,然后再除以 1001*1001,再乘以4就是冗的值。2.运行结果串

8、行n值并行n值串行时间并行时间加速比3.1392383.13923832261.2307693.1392383.13923830201.5000003.1392383.1392383381.8333333.1392383.13923831201.5500003.1392383.13923834181.888889见附录2实验三、积分法求圆周1 .基本思想利用n =,求出y=_ , x=0 , x=1, y=0围成封闭区域0 1+x21+x2的面积就是n的值。2.运行结果串行n值并行n值串行时间并行时间加速比3.1416233.141623851.6000003.1416233.14162394

9、2.2500003.1416233.141623741.7500003.1416233.141623951.8000003.1416233.141623842.0000003.源代码见附录3实验结果分析当然我们这里只比较串行运行的结果。实验一的n值平均值为:3.140932实验二的冗值平均值为:3.139238实验三的n值平均值为:3.1416通过对以上三种方法的比较,可以发现,积分法求得的n值更为 准确,速度也更快。int_tmain(intargc, _TCHAR* argv)DWORDstartTime,endTime,startTime1,endTime1;longarcNum=0,a

10、rcNum1=0;longdoublePAI,time,PAI1,time1;longdoubleradio;startTime=timeGetTime();for(inti=0;i10000000;i+)doublex=( longdouble)rand()/(longdouble)RAND_MAX;doubley=( longdouble)rand()/(longdouble)RAND_MAX;if(x*x+y*y) = 1)arcNum + +;PAI=( longdouble)arcNum/10000000)*4;endTime=timeGetTime();time=endTime-s

11、tartTime;printf( PAI=%f,time=%fn” ,PAI,time);startTime1=timeGetTime();#pragmaompparallel forfor(inti=0;i10000000;i+)doublex=( longdouble)rand()/(longdouble)RAND_MAX;doubley=( longdouble)rand()/(longdouble)RAND_MAX;if(x*x+y*y) = 1)arcNum1+;PAI1=( longdouble)arcNum1/10000000)*4;endTime1=timeGetTime();

12、time1=endTime1-startTime1;printf(PAI=%f,time=%fn ,PAI1,time1);radio=time/time1;printf(radio=%f” ,radio);getchar();return0;int_tmain(intargc, _TCHAR* argv)DWORDstartTime,endTime,startTime1,endTime1;longcout=0;charch64;longcout1=0;charch164;longcout2=0;longdoublePAI,time,PAI1,time1;longdoubleradio;sta

13、rtTime=timeGetTime();for(inti=0;i = 1000;i+)for(intj=0;j = 1000;j+)doublex=( longdouble)i)/1000;doubley=( longdouble)j)/1000;if(x*x+y*y)1)cout+;PAI=( longdouble)cout/(1001*1001)*4;endTime=timeGetTime();time=endTime-startTime;printf(cout=%ld,PAI=%f,time=%fn ,cout,PAI,time)startTime1=timeGetTime();#pr

14、agmaompparallelsections#pragmaompsectionfor(inti=0;i500;i+)for(intj=0;j = 1000;j+)doublex=( longdouble)i)/1000;doubley=( longdouble)j)/1000;if(x*x+y*y)1)cout1+;#pragmaompsectionfor(inti=500;i = 1000;i+)for(intj=0;j = 1000;j+)doublex=( longdouble)i)/1000;doubley=( longdouble)j)/1000;if(x*x+y*y)1)cout2+;PAI1=( longdouble)(cout1+cout2)/(1001*1001)*4;endTime1=timeGetTime();time1=endTime1-startTime1;printf(cout1=%ld,cout2=%ld,PAI1=%f,time1=%fn ,cout1,cout2,PAI1,time1);radio=time/time1;printf(radio=

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号