2023年MPI综合实验报告.pdf
MPI综合实验报告目前三次MPI实验已经结束,结合之前所写的实验报告,对总体的实验内容做一个总结。参考资料:MPI简介多线程是一种便捷的模型,其中每个线程都可以访问其它线程的存储空间。因此,这种模型只能在共享存储系统之间移植。一般来讲,并行机不一定在各解决器之间共享存储,当面向非共享存储系统开发并行程序时,程序的各部分之间通过来回传递消息的方式通信。要使得消息传递方式可移植,就需要采用标准的消息传递库。这就促成的消息传递接口(Mess a ge Passing I n terface,MP 1 )的面世,MPI是一种被广泛采用的消息传递标准与 Op enM P 并行程序不同,M P I是一种基于消息传递的并行编程技术。消息传递接口是一种编程接口标准,而不是一种具体的编程语言。简而言之,M P I标准定义了一组具有可移植性的编程接口。各个厂商或组织遵循这些标准实现自己的M P I软件包,典型的实现涉及开放源代码的MPICH、LAM MP I 以及不开放源代码的Inte 1 M PI。由于M P I提供了统一的编程接口,程序员只需要设计好并行算法,使用相应的MPI库就可以实现基于消息传递的并行计算。MP I 支持多种操作系统,涉及大多数的类UN I X 和 Windows系统。三次实验总结第一次实验:实验规定:配置好MP I 运营的基本环境,测 试 MP I 的基本通信程序。程序:#incl u d e std a fx.hH#i n c lude void main(v oid)A MP I _Sta t us s t a tu s;cha rst r i n g =Hxxxxx”/i nt m y i d;M PI_Init(NULL,NULL);MPI _ C o mm_ r ank(M P I_COMM_WORLD,&m y i d);if(myid=2)M P l_S end(uHELLO ,5,MPI_C HAR-7,1 2 3 4,MPI _ COMM_WOR LD);i f(m y id=7)MPI_Recv(st r i ng,5,MPI_C H AR,2 MPI_A NY_TAG,MPI_COMM _ WO RLD,&statu s);p r i ntf(Got%s f r om P%d,tag A%dn ,s t r i ng,status stat u s-MPI_SOURCE,s t a tus MPI_TAG);A MPI_ F inaliz e();A 运营环境配置过程:(这个是在根据网上的环境配置教程做的)1、安装软件MPICH2,本次操作安装在C:P rog r am F i lesM P lC H 2文献夹中。2、打开安装好的M PIC H 2目录,打开bin文献夹中的wmpiregis t er.e x e文献,进行注册。填入本机的用户名和密码。3、建立一个控制台应用程序空文档,MY MPI,输入程序4、添加库和包含文献打开T o ol-O p t i o ns对话框选择项目和解决方案下的VC+目录一栏,如下图所示:分别添加包含文献 C:Program File s MPICH2i n clu d e和库文献 C:Pro g r am FilesMPICH 2 l i b5、取消预编译头打 开Pro j ectProp e r t y,设立框如下图所示展开C/C+项,选择与编译头,在创建/使用预编译头中选择:不使用预编译头PARALLEL属性页配置:活动Okbug)v平台国):怪动靠in32)v|配置管理器).一|理出译文信行规化处码言编出览级令规试C+常忧预代语预输浏高命常洲C/C:匚,日.创建/使用预编译头通过文件创建/使用KH预编译头文件不使用英翁译头具档息件生器工文信事义接单L览成定链清XM浏生自由囹由由田(器成生算步成创建,使用预编译头在生成过程中允许创建或使用预编译头.(/Yc,/Yu)|确定|取消|6、打开P rojec t Pro p e r t y,设立框如下图所示将配置属性中的常规项中的字符集设立成未设立展开连接器中输入项,在附件依赖项中添加mpi.l i b7、自定义多线程运营打 开MPICH2安装目录显得mp i exec.exe装入运营产生的.exe文献并选择线程数,运营结果如下图所示第二次实验实验规定:M PI实验第二部分1 .了解计算粒度、问题规模(计算负载)、并行限度概念;2.测试基于M P I的P i并行计算程序;3.完毕实验报告(M P I程序代码、运营结果截屏、实验分析总结)在这次的实验过程中,我们的程序是通过数值方法计算团的值来观测运营时间。程序:#inc 1 u de ns t d a fx.h#i ncl u de#i n c 1 u d e mpi.hsta t i c Ion g num_ s teps=1 0 000 0;vo id main(in t a r gc,ch ar*a r gv)(in t i_s t a r t,i _ e n d,i,my i d,numprocs;。doubl e p i,m y pi,x,ste p,s um=0.0;。d o u b le st a rt,end;。MPIni t(&a r gc,&argv);MP I _ C o mm_si z e(MPI_COMM_WORLD,&n u mp rocs);。M P I_Comm_r a nk(MP I _COMM_WORLD,&my i d);i f(my i d=0)。s tart=MPI_ Wtime();)。MPI_B c a st(&num_steps,1,MP INT,0,MPI_COMM_ W ORLD);i s t ar t=myid*(num_ s t ep s/n um p rocs);i_end=i_ sta r t+(num_ s teps/numpro c s);。s tep=1.0/(d o ub 1 e)n u m_st e p s;fbr(i=i_ sta r t;i i e nd;i+)x=(i+0.5)*ste p;。s um=sum+4.0/(1.0+x*x);)my p is tep*sum;M P I_ R e d uce(&mypi,&pi,1 ,MPI_DOUBL E,MPI_S UM,0,MPI_COMM_WORLD);。if(m y i d=0)6(o o pr i nt f(P i=%fn,p i);。e n d=MPI_W t im e();。pin t f(Run t ime is:%.10fnn,end-s t a r t);。fflush(stdout);6)。MPI_ Fi n a 1 ize();实验原理:运用公式P I的近似值计算圆周率团,定积分的计算可以转化为求一个曲边梯形的面积问题。将积分区间等提成n 个小的子区间,可将每个小的子区间上的曲边梯形近似地当作矩形,这些矩形面积的和就近似地等于本来曲边梯形的面积。这样最终将求圆周率的问题转化成了一个面积迭加的计算。当进程数为2 时,运算时间很小,要比进程数为1 时时间要短,说明该情况下,多进程的运营效率要比单进程高。然后,我使用了几台计算机在同一局域网之下构成了集群计算机系统,采用非共享内存方式运用多进程完毕任务。在两台机器构成的集群计算机系统之下,我分别测了多组进程之下并行计算的时间比较,运算结果如下所示:做表格比较之:进程数1481216运营时间0.0.0.0.0.结果分析:由于计算规模较小,集群计算机系统并行多进程计算并不能很明显的表现出计算优势。反而,通过验证,在较大规模计算量之下,集群计算机系统的计算速度优越性得到明显展现。第三次实验实验规定:1 .理解同步(s ynchronous)计算和同步路阐b a r r ier)2.测试基于MPl_Barr i er()的并行程序3.完毕实验报告(MPI程序代码、运营结果截屏、实验分析总结)程序:#i n c lu d e M s td a f x.h”#inclu d e#i nc 1 u d e”m p i.hi nt ma in (int a r gc,c h a r argv)(i n t t askid,n t asks;i n t i err;MPIn i t(&argc,&argv);o MPI_Comm_ran k(MPI_COMM_WORL D,&t a sk id);MPI_ Comm_ s i ze(MPI_ COMM_ WORLD,&nta s ks);。i f(t a skid=0)printf(n n n n n n);o i e rr=MPI_Ba r r ie r (MP I _COMM_WORLD);i f(taskid=0)。p r i ntf(MHel”);f f 1 u s h(s t dout);。if(t askid=1)p r in tf(nlo);f f lu s h(st d ou t);if(taskid=2)p r i nt f(*W o r);ff 1 us h(stdout);)。if(t a s kid=3)printf(ld!);fflush(s t dout);o ie rr=MPI_B a rr i er(MP I _CO MM_WORLD);i f(t a s kid=0)p r in t f(Unorde r ed)n H);f f 1 us h(stdout);)i f(t askid=0)p r i n t f(MH e 1);f f 1 u s h(s t do u t);ierr=M PI_B arri e r(M PI_COMM_WORLD);。i f(taskid=1)p tin t f(lo);f f 1 u s h(std o ut);)i err=MPI_Ba r rier(M P I _COMM_WORLD);。i f(t a s k id =2)p rintf(HWorM);f f lush(std o ut);。ierr=MPI_Bar r ier(M P I_COMM_WO RLD);i f(t a s k i d=3)printf(*Id!);f flu s h(stdout);)ierr=MPI_Ba r rie r(MPI_COMM_W ORL D);i f(ta s kid=0)pr i n t f(H(O rd e re d)n n n n nn);MP I _ Fin a 1 iz e();return 0;)实验原理:同步计算和同步路障B a rr i e r s:Block s u n til al 1 p rocesse s in the communicator h av e r e a c h ed this routi ne.A p oi n t at w h i c h al 1 p roces s es must w a it u ntil a 1 I other pro cesses hav e r each e d th a t poin t.S y n chron o us&Ba r r ier:I n a f u lly syn c h r o n o u s a p pl i catio n,all the p r oces s e s sy n chr o ni z eda t a regu 1 a r p o i nt s.实验结果截屏:QIPIEXEC wrapper结果分析:假如大于等于4 个进程的话,输出的语句就是顺序的,正常的,但是假如进程数目小于4,由于同步路障的存在,只有当所有进程到来之时才会被同步,这样由于进程数小于规定进程数,所以同步会出现问题,所以输出的语句会出现乱码。MPI实验总结通过这次实验,我们对M P I有了一个初步了解.M PI是一种基于消息传递的并行编程技术,而不是一种具体的编程语言。MPI程 序 与 OpenMP程序的最大不同就是MP I 程序不仅可以合用多线程的方式并行运算还可以让程序以多进程的方式执行,以这种方式执行的程序并不共享内存,各个进程是通过消息传递来进行通信的。这样做的好处是完毕某一计算任务的不同进程可以运营在不同解决器上(不只是解决器的不同核上),甚至是不同的结点计算机上,方便分布式计算系统的构建。在实验的过程中,请教了老师很多问题,不管多么简朴抑或繁琐,老师都一一耐心加以解答,再次表达衷心感谢。