MPICH2安装及MPI简介_第1页
MPICH2安装及MPI简介_第2页
MPICH2安装及MPI简介_第3页
MPICH2安装及MPI简介_第4页
MPICH2安装及MPI简介_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MPICH2安装及MPI简介  2009-02-16 19:02:38|  分类: HPC |  标签:mpich2的安装  mpi   |字号大中小 订阅  ZHI 2008-12-14MPICH2的安装l   下载MPICH2包mpich2.tar.gzl   解压缩 # tar xfz mpich2.tar.gzl   #mkdir /tmp/root/mpich2-1.0.8l   #cd

2、 /tmp/root/mpich2-1.0.8l   #/root/Desktop/mpich2-1.0.8/configure -prefix=/usr/local 2>&1 | tee configure.log       /其中root/Desktop/mpich2-1.0.8/为解压后MPICH2路径l   #make 2>&1 | tee make.logl   #make install PACKAGE=mpich-1.0.8 2>&am

3、p;1 | tee install.logl   #make installcheck PACKAGE=mpich-1.0.8 2>&1 | tee installcheck.log 测试安装是否成功#which mpiexec#which mpd        /默认程序管理命令default process manager#which mpicc#which mpirun 注:如果不是安装在/usr/local目录下,则还需设置环境变量。通过编辑.bashrc文件修改

4、环境变量#vi .bashrc修改后的.bashrc文件如下:# .bashrc# User specific aliases and functions   PATH="$PATH:/usr/MPICH-install/bin"   /新增加的#Source .bashrc mpd配置文件中设置密码#cd $HOME#touch .mpd.conf#chmod 600 .mpd.conf       /权限设置为只有自己有读写权限在超级用户下:#cd /etc#vi mpd

5、.conf      写入 secretword=jsi 并保存#chmod 600 /etc/mpd.conf 单机测试#mpd &#mpdtrace      /显示本机名为成功#mpiexec n 1 /bin/hostname#mpdallexit SSH配置l   修改所有机器上的/etc/hosts文件为如下内容127.0.0.1 localhost.localdomain localhost10.10.1.190 node0110.1

6、0.2.190 node02l   创建SSH密钥(root目录)#ssh-keygen t rsa   /其中-t rsa指密钥类型。这样就生成了/.ssh#cd .ssh#cp id_rsp.pub authorized_keys   /生成authorized_keys文件#cd.#ssh node01       /建立本身的信任连接l   设置其他机器#ssh-keygen t rsa     &

7、#160;   /生成.ssh文件夹#scp 10.10.1.190:/root/.ssh/* /root/.ssh#scp 10.10.1.190:/etc/hostsl   对每个节点执行#ssh node01#ssh node02      /提示输入密码-登陆,为成功 NFS配置1 服务器端l   #/etc/rc.d/init.d/nfs start        /启动nfs服务l &

8、#160; #vi /etc/export         /编写exports文件,写入需共享目录eg.  /public/mpi node01(rw) node02(rw) 2 客户端l   #showmount e nfshost          /查看NFS服务器上共享资源 l   #mount nfshost:目录 本机挂载目录eg. #mkdir /public/

9、mpi      #mount node01:/public/mpi /public/mpil   #unmount /public/mpi /卸载(如果需要的话) 创建主机名称集合文件/root/mpd.hosts#vi mpd.hosts文件内容如下:node01node02 通过mpd.hosts运行集群系统#mpdboot -n num -f mpd.hosts   /num为要起动的机器个数#mpdtrace #mpdallexit MPI并行程序的编译与执行#mp

10、dboot -n num -f mpd.hosts#mpicc cpi.c o cpi#mpiexec n num cpi#mpdallexit MPI简介数据类型MPI预定义数据类型相应的C数据类型MPI_CHARMPI_SHORTMPI_INTMPI_LONGMPI_UNSIGNED_CHARMPI_UNSIGNED_SHORTMPI_UNSIGNEDMPI_UNSIGNED_LONGMPI_FLOATMPI_DOUBLEMPI_LONG_DOUBLEMPI_BYTEMPI_PACKEDsigned charsigned short intsigned intsigned lon

11、g intunsigned charunsigned short intunsigned intunsigned long intfloatdoublelong double无对应类型无对应类型 常用接口1. MPI_INIT()                  MPI初始化         2. MPI_FINALIZE() 

12、;         MPI结束       3. MPI_COMM_RANK(comm,rank)           当前进程标识    4. MPI_COMM_SIZE(comm,size)         通信域包含的进程  5. M

13、PI_SEND(buf,count,datatype,dest,tag,comm)            IN buf 发送缓存的起始地址(选择型)IN count 发送缓存的元素的个数(非负整数) IN datatype 每个发送缓存元素的数据类型(句柄) IN dest 目的地进程号(整型) IN tag 消息标志(整型) IN comm 通信域(句柄)       消息发送 6. MPI_RECV(buf,count,datatype,so

14、urce,tag,comm,status) OUT buf 接收缓存的起始地址(选择型) IN count 接收缓存中元素的个数(整型)IN datatype 每个接收缓存元素的数据类型(句柄)IN source 发送操作的进程号(整型) IN tag 消息的标识(整型)IN comm 通信组(句柄)OUT status 状态对象(状态)消息接收  7.MPI_SENDRECV(sendbuf,sendcount,sendtype,dest,sendtag,recvbuf,recvcount,recvtype,source,recvtag,comm,status)捆绑发送8. MPI

15、_BCAST(buffer,count,datatype,root,comm)广播9.MPI_REDUCE(sendbuf,recvbuf,count,datatype,op,root,comm)归约 进程P1 op p2 opàroot MPI四种通信模式通信模式发送接收说明标准通信模式MPI_SENDMPI_RECV 缓存通信模式MPI_BSENDMPI缓存正出发的消息, 以便允许发送调用完成。如果没有充足的缓存空间,一个错误将发生同步通信模式MPI_SSEND需要程序员主动为该操作提供发送缓冲区就绪通信模式MPI_RSEND接收方先就绪,然后开始发送,否则出

16、错 MPI非阻塞通信非阻塞通信主要实现计算域通信重叠。由于通信经常需要较长的时间,在阻塞通信还没有结束的时候,处理机只能等待,这要就浪费了处理机的计算资源。非阻塞通信就是设法实现就算与通信的重叠。通信模式发送接收说明标准通信模式MPI_ISENDMPI_IRECV 缓存通信模式MPI_IBSEND接口返回意味着相应的接收操作已经启动同步通信模式MPI_ISSEND同样需要程序员主动为该操作提供发送缓冲区就绪通信模式MPI_IRSEND接收方先就绪,然后开始发送,否则出错例:MPI_ISEND(buf, count, datatype, dest, tag, comm, re

17、quest) IN buf 发送缓存的起始地址(选择类型) IN count 发送缓存中元素的个数(整型) IN datatype 每个发送缓存元素的数据类型(句柄) IN dest 目的进程号(整型) IN tag 消息标志(整型) IN comm 通信子(句柄) OUT request 通信请求(句柄) request非阻塞通信对象:它是MPI内部的对象,通过句柄存取。使用它可以识别非阻塞通信操作的各种特性,如发送模式、与它联结的通信缓冲区、通信上下文、用于发送的标识和目的参数或用于接收的标识和源参数。 MPI组通信组通信需要一个特定组内的所有进程同时参加通信,它在各个不同进程的

18、调用完全相同,而不像点到地点通信那样在形式上就有发送和接收的区别。l  广播 相同的数据MPI_BCAST(buffer,count,datatype,root,comm) IN/OUTbuffer  通信消息缓冲区的起始地址(可变)IN count  通信消息缓冲区中的数据个数(整型) IN datatype 通信消息缓冲区中的数据类型(句柄) IN root  发送广播的根的序列号(整型) IN comm   通信子(句柄) l  收集MPI_GATHER(sendbuf, sendcount, sendtype, re

19、cvbuf, recvcount, recvtype, root , comm)INsendbuf   发送消息缓冲区的起始地址(可变)INsendcount 发送消息缓冲区中的数据个数(整型)INsendtype  发送消息缓冲区中的数据类型(句柄) OUT recvbuf 接收消息缓冲区的起始地址(可变,仅对于根进程) INrecvcount 待接收的元素个数(整型,仅对于根进程)INrecvtype 接收元素的数据类型(句柄,仅对于根进程)INroot   接收进程的序列号(整型)INcomm 通信子(句柄)l  散发 不同的数

20、据,收集的逆操作MPI_SCATTER(sendbuf,sendcount,sendtype,recvbuf,recvcount,recvtype, root,comm)l  组收集MPI_GATHER是将数据收集到ROOT进程,而MPI_ALLGATHER相当于对每个进程都作为ROOT执行了一次MPI_GATHER调用。 MPI_ALLGATHER(sendbuf, sendcount, sendtype, recvbuf, recvcount,    recvtype,comm)l  全互换每个进程一次将它的发送缓冲区的第i块数据

21、发送给第i个进程;同时每个进程都依次从第j个进程接收数据放到各自接收缓冲区的第j块数据区的位置。MPI_ALLGATHER(sendbuf, sendcount, sendtype, recvbuf, recvcount,              recvtype,comm)  示例程序Hello word程序:#include “mpi.h”#include <stdio.h>#include <math.h>void

22、 main(argc,argv)int argc;char *argv;                     int myid,numprocs;              int namelen;      

23、60;       char processor_nameMPI_MAX_PROCESSOR_NAME; MPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD,&numprocs);           MPI_Comm_rank(MPI_COMM_WORLD,&myid);        

24、;   MPI_Get_processor_name(processor_name,&namelen);               printf(stderr,”Hello World! Process %d of %d on %s n”,myid,numprocs,processor_name);           

25、;    MPI_Finalize();                 PI值计算:/* -*- Mode: C; c-basic-offset:4 ; -*- */* *  (C) 2001 by Argonne National Laboratory. *      See COPYRIGHT in top-level d

26、irectory. */ /* This is an interactive version of cpi */#include "mpi.h"#include <stdio.h>#include <math.h> double f(double); double f(double a)    return (4.0 / (1.0 + a*a); int main(int argc,char *argv)    int done = 0, n

27、, myid, numprocs, i;    double PI25DT = 3.141592653589793238462643;    double mypi, pi, h, sum, x;    double startwtime = 0.0, endwtime;    int  namelen;    char processor_nameMPI_MAX_PROCESSOR_NAME;   

28、60; 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(stdout,"Proces

29、s %d of %d is on %sn",           myid, numprocs, processor_name);    fflush(stdout);    */     while (!done)         if (myid = 0)      

30、0;      fprintf(stdout, "Enter the number of intervals: (0 quits) ");           fflush(stdout);            if (scanf("%d",&n) != 1)    &

31、#160;          fprintf( stdout, "No number entered; quittingn" );              n = 0;                  &#

32、160;   startwtime = MPI_Wtime();                MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);               /广播 MPI_BCAST(buffer,count,datatype,ro

33、ot,com)        if (n = 0)            done = 1;        else             h   = 1.0 / (double) n;  

34、0;         sum = 0.0;            for (i = myid + 1; i <= n; i += numprocs)                 x = h * (double)i - 0.5);  

35、;              sum += f(x);                        mypi = h * sum;            MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);                       /归约,将每个进程输入缓冲区中的数据按给定的操作OP进行运算,并将

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论