MPI编程环境配置与示例.docx
- 文档编号:24816633
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:11
- 大小:343.46KB
MPI编程环境配置与示例.docx
《MPI编程环境配置与示例.docx》由会员分享,可在线阅读,更多相关《MPI编程环境配置与示例.docx(11页珍藏版)》请在冰豆网上搜索。
MPI编程环境配置与示例
一.系统安装
1.下载地址
FTP匿名登陆,在pub/mpi/nt文件夹中
2.安装步骤
1)在安装有MPI得计算机上要建立一个有管理员权限得账户,不可以没有密码;
2)双击exe文件,按默认设置安装MPI;
3)注册MPI账户,调用MPIRegister、exe,用户名与密码即为第一步中得账户。
3.VisualStdio设置
为避免每新建一个项目都要设置一次,可以对它进行通用设置。
打开视图-其她窗口-属性管理器,点击Debug|Win32目录下得Microsoft、Cpp、Win32、user,在VC++目录下得包含目录中添加MPICH得Include路径,库目录中添加MPICH得Lib路径;在链接器-输入目录下得附加依赖项中添加mpich、lib、mpe、lib、mped、lib、mpichd、lib。
二.实验程序
1.简单得MPI编程示例
1)源代码
#include
#include
intmain(intargc,char*argv[])
{
intnum,rk;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&num);
MPI_Comm_rank(MPI_COMM_WORLD,&rk);
printf("HelloworldfromProcess%dof%d\n",rk,num);
MPI_Finalize();
return0;
}
2)运行截图
2.消息传递MPI编程示例1
1)源代码
#include
#include
intmain(intargc,char**argv)
{
intmyid,numprocs,source;
MPI_Statusstatus;
charmessages[100];
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
if(myid!
=0)
{
strcpy(messages,"HelloWorld!
");
MPI_Send(messages,strlen(messages)+1,MPI_CHAR,0,99,MPI_COMM_WORLD);
}
else
{
for(source=1;source { MPI_Recv(messages,100,MPI_CHAR,source,99,MPI_COMM_WORLD,&status); printf("Iamprocess%dIrecvstring'%s'fromprocess%d\n",myid,messages,source); } } MPI_Finalize(); return0; } 2)运行截图 3.消息传递MPI编程示例2 1)源代码 #include #include #include #defineN1002 intmain(intargc,char**argv) { intmyid,numprocs,C=0; doubledata[N],SqrtSum=0、0;_ doubled; for(inti=0;i data[i]=i; MPI_Statusstatus; MPI_Init(&argc,&argv);_ MPI_Comm_rank(MPI_COMM_WORLD,&myid); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); --numprocs; if(myid==0) { for(inti=0;i MPI_Send(&data[i],1,MPI_DOUBLE,i%numprocs+1,1,MPI_COMM_WORLD); for(intsource=1;source<=numprocs;++source){ MPI_Recv(&d,1,MPI_DOUBLE,source,99,MPI_COMM_WORLD,&status); SqrtSum+=d; } } else { for(inti=myid;i { MPI_Recv(&d,1,MPI_DOUBLE,0,1,MPI_COMM_WORLD,&status); SqrtSum+=sqrt(d); ++C; } MPI_Send(&SqrtSum,1,MPI_DOUBLE,0,99,MPI_COMM_WORLD); } printf("Iamprocess%d、Irecvtotal%dfromprocess0,andSqrtSum=%f、\n",myid,C,SqrtSum);_ MPI_Finalize();_ return0; } 2)运行截图 4.MonteCarlo方法计算圆周率 1)源代码 #include"mpi、h" #include #include intmain(intargc,char**argv) { intmyid,numprocs; intsource; longcount=1000000; MPI_Statusstatus; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD,&myid); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); srand(myid); doubley,x,pi=0、0,n=count; longm=0,m1=0,i=0,p=0; for(i=0;i { x=(double)rand()/(double)RAND_MAX; y=(double)rand()/(double)RAND_MAX; if((x-0、5)*(x-0、5)+(y-0、5)*(y-0、5)<0、25) ++m; } pi=4、0*m/n; printf("Process%dof%pi=%f\n",myid,numprocs,pi); if(myid! =0) { MPI_Send(&m,1,MPI_DOUBLE,0,1,MPI_COMM_WORLD); } else { p=m; for(source=1;source { MPI_Recv(&m1,1,MPI_DOUBLE,source,1,MPI_COMM_WORLD,&status); p=p+m1; } printf("pi=%f\n",4、0*p/(n*numprocs)); } MPI_Finalize(); return0; } 2)运行截图 5.计算积分 1)源代码 #defineN100000000 #definea0 #defineb10 #include #include #include #include"mpi、h" intmain(intargc,char**argv) { intmyid,numprocs; inti;_ doublelocal=0、0,dx=((double)b-(double)a)/(double)N; doubleinte,x; MPI_Init(&argc,&argv);_ MPI_Comm_rank(MPI_COMM_WORLD,&myid);_ MPI_Comm_size(MPI_COMM_WORLD,&numprocs); for(i=myid;i { x=a+i*dx+dx/2; local+=x*x*dx; } MPI_Reduce(&local,&inte,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD);_ if(myid==0) { printf("Theintegalofx*xinregion[%d,%d]=%16、15f\n",a,b,inte); } MPI_Finalize(); return0; } 2)运行截图 三.心得体会 1.学习了MPICH得安装、注册。 用户名与密码为装有MPI、得计算机得账号名与密码(注册时密码不能为空), 2.学会执行MPI程序——基于图形界面得guiMPIRun 3.通过PPT上得程序,真正了解了什么就是并行实验程序,并自己实现与观察了并行程序执行得过程,对并行程序设计有了进一步得了解。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MPI 编程 环境 配置 示例