关于MPI学习过程记录

1. 集群基本命令:假如集群IP为:172.0.0.1 

登陆:ssh   账户@ip ; 然后会提示输入密码,输入即可登陆。

上传文件:scp test.c 账户@ip:/home/账户  ;也会提示输入密码,输入即可上传。

查看集群启动节点情况 :mpdtrace 

启动节点: mpdboot -n 4 -f mpd.host ;    其中4 为要启动节点的个数。

2. MPI 编译运行命令

编译:mpicc -o test test.c

运行分俩种情况:

在集群节点上运行:mpirun -np 4 ./test  (如何要读文件的话,在后面加上文件名)    ; 其中4表示在4个节点上运行。

在本地单机上运行:mpiexec.hydra -f /home/user/hosfle -n 4 ./test (file 可选)

另外:对于在本机上MPI , 首先下载  mpich2-1.3.2p1.tar.gz  然后进行解压安装以及配置环境变量,最后在本机上创建 /home/user/hostfile 文件,然后里面加入 127.0.0.1:4  ,就可以在本机上用进程来模拟集群节点来测试程序了。

3. MPI 函数

(1)

int MPI_Gatherv(void* sendbuf, int sendcount, MPI_Datatype sendtype, 
            void* recvbuf, int *recvcounts, int *displs, 
              MPI_Datatype recvtype, int root, MPI_Comm comm)
MPI_Gatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, 
            recvtype, root, comm)
  IN     sendbuf      发送消息缓冲区的起始地址(可变)
  IN     sendcount    发送消息缓冲区中的数据个数(整型)
  IN     sendtype     发送消息缓冲区中的数据类型(句柄)
  OUT    recvbuf      接收消息缓冲区的起始地址(可变,仅对于根进程)
  IN     recvcounts   整型数组(长度为进程组的大小), 其值为从每个进程接收
                      的数据个数(仅对于根进程)
  IN     displs       整数数组,每个入口i表示相对于recvbuf的位移,此位
                      移处存放着从进程i中接收的输入数据(仅对于根进程),即各个进程传输数据的位置偏移。
  IN     recvtype     接收消息缓冲区中数据类型(仅对于根进程)(句柄)
  IN     root         接收进程的序列号(句柄)
  IN     comm         通信子(句柄),即参与发送和接收的全部进程集合,可用 MPI_COMM_WORLD (代表全部)。

功能描述:每个进程(包括根进程)将其发送缓冲区中的内容发送到根进程,根进程根据发送这些数据的进程的序列号将它们依次存放到自已的消息缓冲区中.其结果就象一个组中的n个进程(包括根进程在内)都执行了一个调用MPI_Send(),同时根进程执行了n次调用 MPI_Recv();

更多详见:http://micro.ustc.edu.cn/Linux/MPI/MPICH/mpi45.htm#fig4.2

(2)

int MPI_Reduce(void* sendbuf, void* recvbuf, int count,

               MPI_Datatype datatype, MPI_Op op, int root,

               MPI_Comm comm)

MPI_REDUCE(sendbuf,recvbuf,count,datatype,op,root,comm)
 IN   sendbuf   发送消息缓冲区的起始地址(可变)
 OUT  recvbuf   接收消息缓冲区中的地址(可变,仅对于根进程)
 IN   count     发送消息缓冲区中的数据个数(整型)
 IN   datatype  发送消息缓冲区的元素类型(句柄)
 IN   op        归约操作符(句柄)
 IN   root      根进程序列号(整型),0,1,2等
 IN   comm      通信子(句柄),进程组集合
其中op 操作可以是:
 MPI_MAX           最大值
        MPI_MIN           最小值
        MPI_SUM           求和
        MPI_PROD          求积
        MPI_LAND          逻辑与
        MPI_BAND          按位与
        MPI_LOR           逻辑或
        MPI_BOR           按位或
        MPI_LXOR          逻辑异或
        MPI_BXOR          按位异或
        MPI_MAXLOC        最大值且相应位置
        MPI_MINLOC        最小值且相应位置

关于MPI学习过程记录 - Zhao Yankang - yankangzhao的博客

 

更多详见:http://micro.ustc.edu.cn/Linux/MPI/MPICH/mpi49.htm

(3)

int MPI_Bcast( void *buffer, int count, MPI_Datatype datatype, int root, 
               MPI_Comm comm )

 (4) MPI_Barrier(MPI_COMM_WORLD);  

功能描述为:阻塞通信域内的所有进程,直到它们都达到这个时间,即,所有进程相互同步



你可能感兴趣的:(集群,mpi)