当前位置:
文档之家› MPICH 的安装使用和MPI原理分析
MPICH 的安装使用和MPI原理分析
每个步骤都有基本函数相对应。
MPI_Init (*argc,*argv);//初始化MPI环境
MPI_Comm_size (comm,*size);//返回同组内进程数
MPI_Comm_rank (comm,*rank);//返回该进程在组内的进程号,从0开始
MPI_Send(buf,count,datatype,dest,tag,comm);
将结果exe程序拷贝到MPICH2\bin目录下,运行mpiexec程序,在Application内添加要我们运行的exe程序。选择进程数目,然后Execute,就会显示多个进程的执行情况。
MPICH
MPI过程就好像一个几步的过程调用,通过初始化,设置进程数,运行进程,进程间发送和接受消息,结束这些步骤来完成。
}
MPI_Bcast(&n,1,MPI_INT,0,MPI_COMM_WORLD);
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;
if (m2-1.3.2p1-win-ia32.msi,填写passphrase,默认为behappy,选择默认路径安装。
运行wmpiregister,注册当前的管理员用户。
使用建立和编译MPI程序:新建一个项目,设置项目属性,将MPICH2\lib目录添加到C++连接的library path内,将MPICH2\include目录添加到C++链接的Include Path内,在程序属性的链接器->命令行中添加mpi.lib,编译和生成程序。
MPI_Get_processor_name(processor_name,&namelen);
fprintf(stdout,"Process %d of %d on % s\n",myid,numprocs,
processor_name);
if (myid==0)
{
n=10000;
startwtime=MPI_Wtime();
MPI_Send(&mypi,1,MPI_DOUBLE,0,myid,MPI_COMM_WORLD);
else
{
pi=0.0;
pi=pi+mypi;
for (j=1;j<numprocs;j++)
{
MPI_Recv(&mypi,1,MPI_DOUBLE,MPI_ANY_SOURCE,
MPI_ANY_TAG,MPI_COMM_WORLD,&status);
//向目标进程发送buf内的count个datatype数据
MPI_Recv(buf,count,datatype,source,comm,status);//接收消息
MPI_Finalize ();//结束
MPI
#include"mpi.h"
#include<stdio.h>
#include<math.h>
double f(double x) {
return(4.0/(1.0+x*x));
}
int main (int argc,char * argv[])
{
int done =0,n,myid,numprocs,i;
double PI25DT=3.141592653589793238462643;
double mypi,pi,h,sum,x;
fflush(stdout);
}
MPI_Finalize();
}
pi=pi+mypi;
}
printf(“pi is approximately %.16f,Error is %.16f\n”,
pi,fabs(pi-PI25DT));
endwtime=MPI_Wtime();
printf(“wall clock time=% f\n”,endwtime-startwtime);
double startwtime=0.0,endwtime;
int namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);