分布式计算课程报告

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

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

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

2、、C、C+等)的扩展。OpenMP 规范中定义的编译制导(Compiler Directive)、运 行库(Runtime Library)和环境变量(Environment Variables),能够使用户在保证程序的可移植性的前提下,按照标准 将已有的串行程序逐步并行化。制导指令是对程序设计语言的扩展,进一步提供了对并行区域、工作共享、同步构造的支持,并且支持数据的共享和私有化。这样,用户对串行程序添加制导指令的过程,就类似于进行显式并行程序设计。运行库和环境变量,使得用户可以调整并行程序的执行环境。OpenMP 的提出,是希望遵循该并行编程模型的并行程序,可以在2不同的产商提供的共享存储

3、体系结构间比较容易地移植。实际上,已经有许多硬件和软件供应商提供支持 OepnMP 的编译器,如DEC、Intel、IBM、HP、Sun、SGI、及 U.S.DOE ASCI program等,并且包括了 Linux,UNIX 和 Windows 等多种操作系统平台。目前,Fortran77、 Fortran90、C、C+语言的实现规范已经完成。OpenMp 并行编程模型:并行编程模型:首先,OpenMP 是基于线程的并行编程模型(Programming Model),一个共享存储的进程由多个线程组成,OpenMP 就是基于已有线程的共享编程范例;其次,OpenMP 是一个外部的编程模型,而不

4、是自动编程模型,它能够使程序员完全控制并行化,OpenMP 使用 Fork-Join 并行执行模型。所有的OpenMP 程序开始于一个单独的主线程(Master Thread) 。主线程会一直串行的执行,直到遇见第一个并行域(Parallel Region)才开始并行执行。接下来的过程如下:Fork:主线程创建一队并行的线程,然后,并行域中的代码在不同的线程队中并行执行;Join:当主线程在并行域中执行完之后,它们或被同步或被中断,最后只有主线程在执行。实际上,所有 OpenMP 的并行化,都是通过使用嵌入到 C/C+或3Fortran 源代码中的编译制导语句来达到的。并且,一个 OpenMP

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

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

7、1.75471753.1409323.0370578915241.7003823.1409323.0076949155531.6546113.1409323.0811979697051.3744683.1409323.0373449056041.4983443. 源代码源代码见附录 16实验二、拟蒙特卡洛实验二、拟蒙特卡洛法求圆周率法求圆周率1. 基本思想基本思想利用单位圆与边长为 1 的正方形面积之比来计算 的近似值。具体思想如下:如图 1 所示,单位圆的 1/4 为一个扇形 G,它是边长为 1 的正方形的一部分。考虑扇形面积在正方形面积中所占的比例 k,得出其结果 /4,然后再乘以 4 就

8、可以得到的值。 和蒙特卡洛方法类似。如图 1,把 x 轴,y 轴,01 等分成1000 份。1001*1001 个点,统计落入 1/4 圆中的点数,然后再除以 1001*1001,再乘以 4 就是 的值。2.运行结果运行结果串行 值并行 值串行时间并行时间加速比3.1392383.13923832261.2307693.1392383.13923830201.5000003.1392383.1392383381.83333373.1392383.13923831201.5500003.1392383.13923834181.8888893.源代码源代码 见附录 28实验三、积分法实验三、积分法

9、求圆周率求圆周率1基本思想基本思想利用,求出 y=,x=0,x=1,y=0 围成封闭区域 = 1041 + 241 + 2的面积就是 的值。2. 运行结果运行结果串行 值并行 值串行时间并行时间加速比3.1416233.141623851.6000003.1416233.141623942.2500003.1416233.141623741.7500003.1416233.141623951.8000003.1416233.141623842.0000003.源代码源代码见附录 39实验结果分析实验结果分析当然我们这里只比较串行运行的结果。实验一的 值平均值为:3.140932实验二的 值平均

10、值为:3.139238实验三的 值平均值为:3.1416 通过对以上三种方法的比较,可以发现,积分法求得的 值更为准确,速度也更快。10附录附录 1int _tmain(int argc, _TCHAR* argv)DWORD startTime,endTime,startTime1,endTime1;long arcNum = 0,arcNum1=0;long double PAI,time,PAI1,time1;long double radio;startTime = timeGetTime();for(int i=0;i10000000;i+)double x = (long doub

11、le)rand()/(long double)RAND_MAX;double y = (long double)rand()/(long double)RAND_MAX;if(x*x + y*y) = 1)arcNum+;PAI =(long double)arcNum/10000000)*4;endTime = timeGetTime();time = endTime - startTime;11printf(“PAI = %f,time = %fn“,PAI,time);startTime1 = timeGetTime();#pragma omp parallel for for(int

12、i=0;i10000000;i+)double x = (long double)rand()/(long double)RAND_MAX;double y = (long double)rand()/(long double)RAND_MAX;if(x*x + y*y) = 1)arcNum1+;PAI1 =(long double)arcNum1/10000000)*4;endTime1 = timeGetTime();time1 = endTime1 - startTime1;printf(“PAI = %f,time = %fn“,PAI1,time1);radio = time/ti

13、me1;printf(“radio = %f“,radio);getchar();return 0;12附录附录 2int _tmain(int argc, _TCHAR* argv)DWORD startTime,endTime,startTime1,endTime1;long cout = 0;char ch64;long cout1=0;char ch164;long cout2=0;long double PAI,time,PAI1,time1;long double radio;startTime = timeGetTime();for(int i=0;i=1000;i+)for(i

14、nt j=0;j=1000;j+)double x = (long double)i)/1000;double y = (long double)j)/1000;if(x*x+y*y)1)cout+;13PAI =(long double)cout/(1001*1001)*4;endTime = timeGetTime();time = endTime - startTime;printf(“cout=%ld,PAI = %f,time = %fn“,cout,PAI,time)startTime1 = timeGetTime();#pragma omp parallel sections#p

15、ragma omp sectionfor(int i=0;i500;i+)for(int j=0;j=1000;j+)double x = (long double)i)/1000;double y = (long double)j)/1000;if(x*x+y*y)1)cout1+;#pragma omp section14for(int i=500;i=1000;i+)for(int j=0;j=1000;j+)double x = (long double)i)/1000;double y = (long double)j)/1000;if(x*x+y*y)1)cout2+;PAI1 =(long double)(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 = %f“,radio);getchar();return 0;15附录附录 3int _tmain(int argc, _TCHAR*

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

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