并行环境的搭建与使用MPI简介MPI是一个库,而不是一门语言MPI是一种标准,而不特指某一具体实现MPI是一种消息传递编程模型,并成为这种编程模型的代表和事实上的标准目前主要的MPI实现及获得MPICH是一种重要的MPI实现搭建一个包括多台主机的机群1.确保多台主机在同一局域网上,并可以相互访问2.以管理员的身份登陆,在每台主机上安装MPICH程序运行前的最后准备在各主机上创建一个新帐户,要求各主机上的帐户名称及密码相同,且密码不能为空待运行的MPI程序,必须放在各主机上相同的路径下启用MPIRun来执行程序捕获异常信息禁用彩色输出输出不被清空输出到指定路径求∏值程序#includempi.h#includestdio.h#includemath.hdoublef(doublea){return(4.0/(1.0+a*a));}voidmain(intargc,char*argv[]){intdone=0,n,myid,numprocs,i;doublePI25DT=3.141592653589793238462643;doublemypi,pi,h,sum,x;doublestartwtime,endwtime;intnamelen;charprocessor_name[MPI_MAX_PROCESSOR_NAME];MPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD,&numprocs);MPI_Comm_rank(MPI_COMM_WORLD,&myid);MPI_Get_processor_name(processor_name,&namelen);fprintf(stderr,Process%don%s\n,myid,processor_name);fflush(stderr);n=0;主要编码段MPI_Finalize();}while(!done){if(myid==0){printf(Enterthenumberofintervals:(0quits));fflush(stdout);scanf(%d,&n);startwtime=MPI_Wtime();}MPI_Bcast(&n,1,MPI_INT,0,MPI_COMM_WORLD);if(n==0)done=1;else{h=1.0/(double)n;sum=0.0;for(i=myid+1;i=n;i+=numprocs){x=h*((double)i-0.5);sum+=f(x);}mypi=h*sum;MPI_Reduce(&mypi,&pi,1,MPI_DOUBLE,MPI_SUM,0,PI_COMM_WORLD);if(myid==0){printf(piisapproximately%.16f,Erroris%.16f\n,pi,fabs(pi-I25DT));endwtime=MPI_Wtime();printf(wallclocktime=%f\n,endwtime-startwtime);}}}运行结果运行自己的MPI程序安装VC环境配置VC环境1234同步MPI_Barrier阻塞所有的调用者直到所有的组成员都调用了它voidmain(intargc,char*argv[]){……MPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD,&numprocs);MPI_Comm_rank(MPI_COMM_WORLD,&myid);MPI_Get_processor_name(processor_name,&namelen);fprintf(stderr,Process%don%s\n,myid,rocessor_name);fflush(stderr);MPI_Barrier(MPI_COMM_WORLD);n=0;主要编码段MPI_Finalize();}ws2_32.libmpichd.libws2_32.libmpich.lib运行并行程序的要求可执行文件放在各节点机相同的路径下若将待执行程序放在D盘下,则必须放在每个节点机的D盘下随机安装的用户指导手册