MPI综合实验报告Word格式文档下载.docx
- 文档编号:21397177
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:12
- 大小:396.06KB
MPI综合实验报告Word格式文档下载.docx
《MPI综合实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《MPI综合实验报告Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
程序:
#include"
stdafx.h"
#include<
mpi.h>
voidmain(void)
{
MPI_Statusstatus;
char
string[]="
xxxxx"
;
intmyid;
MPI_Init(NULL,NULL);
MPI_Comm_rank(MPI_COMM_WORLD,&
myid);
if(myid==2)
MPI_Send("
HELLO"
5,MPI_CHAR,7,1234,MPI_COMM_WORLD);
if(myid==7){
MPI_Recv(string,5,MPI_CHAR,2,MPI_ANY_TAG,MPI_COMM_WORLD,&
status);
printf("
Got
%sfromP%d,tag
%d\n"
string,status,status.MPI_SOURCE,status.MPI_TAG);
}
MPI_Finalize();
}
运行环境配置过程:
(这个是在根据网上的环境配置教程做的)
1、安装软件MPICH2,本次操作安装在C:
\ProgramFiles\MPICH2文件夹中。
2、打开安装好的MPICH2目录,打开bin文件夹中的wmpiregister.exe文件,进行注册。
填入本机的用户名和密码。
3、建立一个控制台应用程序空文档,MYMPI,
输入程序
4、添加库和包含文件
打开Tool->
Options对话框
选择项目和解决方案下的VC++目录一栏,如下图所示:
分别添加包含文件C:
\ProgramFiles\MPICH2\include
和库文件C:
\ProgramFiles\MPICH2\lib
5、取消预编译头
打开Project->
Property,设置框如下图所示
展开C/C++项,选择与编译头,在创建/使用预编译头中选择:
不使用预编译头
6、打开Project->
将配置属性中的常规项中的字符集设置成未设置
展开连接器中输入项,在附件依赖项中添加mpi.lib
7、自定义多线程运行
打开MPICH2安装目录显得mpiexec.exe
装入运行产生的.exe文件并选择线程数,运行结果如下图所示
第二次实验
MPI实验第二部分
1.了解计算粒度、问题规模(计算负载)、并行程度概念;
2.测试基于MPI的Pi并行计算程序;
3.完成实验报告(MPI程序代码、运行结果截屏、实验分析总结)
在这次的实验过程中,我们的程序是通过数值方法计算
的值来观察运行时间。
#include"
#include<
stdio.h>
mpi.h"
staticlongnum_steps=100000;
voidmain(intargc,char*argv[])
inti_start,i_end,i,myid,numprocs;
doublepi,mypi,x,step,sum=0.0;
doublestart,end;
MPI_Init(&
argc,&
argv);
MPI_Comm_size(MPI_COMM_WORLD,&
numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&
if(myid==0)
{
start=MPI_Wtime();
MPI_Bcast(&
num_steps,1,MPI_INT,0,MPI_COMM_WORLD);
i_start=myid*(num_steps/numprocs);
i_end=i_start+(num_steps/numprocs);
step=1.0/(double)num_steps;
for(i=i_start;
i<
i_end;
i++)
x=(i+0.5)*step;
sum=sum+4.0/(1.0+x*x);
mypi=step*sum;
MPI_Reduce(&
mypi,&
pi,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD);
if(myid==0)
{
printf("
Pi=%f\n"
pi);
end=MPI_Wtime();
Runtimeis:
%.10f\n"
end-start);
fflush(stdout);
}
MPI_Finalize();
实验原理:
利用公式PI的近似值计算圆周率[7],定积分的计算可以转化为求一个曲边梯形的面积问题。
将积分区间等分成n个小的子区间,可将每个小的子区间上的曲边梯形近似地看成矩形,这些矩形面积的和就近似地等于原来曲边梯形的面积。
这样最终将求圆周率的问题转化成了一个面积迭加的计算。
当进程数为2时,运算时间很小,要比进程数为1时时间要短,说明该情况下,多进程的运行效率要比单进程高。
然后,我使用了几台计算机在同一局域网之下构成了集群计算机系统,采用非共享内存方式利用多进程完成任务。
在两台机器构成的集群计算机系统之下,我分别测了多组进程之下并行计算的时间比较,运算结果如下所示:
做表格比较之:
进程数
1
4
8
12
16
运行时间
0.0004441905
0.0012051811
0.0011141081
0.0013336891
0.0012272509
结果分析:
因为计算规模较小,集群计算机系统并行多进程计算并不能很明显的表现出计算优势。
反而,经过验证,在较大规模计算量之下,集群计算机系统的计算速度优越性得到明显展现。
第三次实验
1.理解同步(synchronous)计算和同步路障(barrier)
2.测试基于MPI_Barrier()的并行程序
intmain(intargc,char**argv)
inttaskid,ntasks;
intierr;
taskid);
ntasks);
if(taskid==0){printf("
\n\n\n\n\n\n"
);
ierr=MPI_Barrier(MPI_COMM_WORLD);
Hel"
fflush(stdout);
if(taskid==1){printf("
lo"
if(taskid==2){printf("
Wor"
if(taskid==3){printf("
ld!
"
(Unordered)\n"
(Ordered)\n\n\n\n\n"
return0;
同步计算和同步路障
Barriers:
Blocksuntilallprocessesinthecommunicatorhavereachedthisroutine.
Apointatwhichallprocessesmustwaituntilallotherprocesseshavereachedthatpoint.
Synchronous&
Barrier:
Inafullysynchronousapplication,alltheprocessessynchronizedataregularpoints.
实验结果截屏:
结果分析:
如果大于等于4个进程的话,输出的语句就是顺序的,正常的,但是如果进程数目小于4,由于同步路障的存在,只有当所有进程到来之时才会被同步,这样由于进程数小于要求进程数,所以同步会出现问题,所以输出的语句会出现乱码。
MPI实验总结
通过这次实验,我们对MPI有了一个初步了解。
MPI是一种基于消息传递的并行编程技术,而不是一种具体的编程语言。
MPI程序与OpenMP程序的最大不同就是MPI程序不仅可以适用多线程的方式并行运算还可以让程序以多进程的方式执行,以这种方式执行的程序并不共享内存,各个进程是通过消息传递来进行通信的。
这样做的好处是完成某一计算任务的不同进程可以运行在不同处理器上(不只是处理器的不同核上),甚至是不同的结点计算机上,方便分布式计算系统的构建。
在实验的过程中,请教了老师很多问题,不管多么简单抑或繁琐,老师都一一耐心加以解答,再次表示衷心感谢。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MPI 综合 实验 报告