我的 MPICH 笔记
Table of Contents
MPICH2 的初步使用
安装
参考安装文档,并配置好运行环境。在 Rocks 系统上,可使用 mpi-selector 选择系统安装好的 MPICH 环境。
本地测试
启动 mpd 任务管理器
$ mpd &
使用 mpdtrace 查看机器状态,其结果如下所示:
$ mpdtrace node0
编写测试程序,比如
mpihello.c
, 内容可以如下:#include <stdio.h> #include <stdlib.h> #include <mpi.h> int main(int argc, char *argv[]) { int numprocs, rank, 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, &rank); MPI_Get_processor_name(processor_name, &namelen); printf("Process %d on %s out of %d\n", rank, processor_name, numprocs); MPI_Finalize(); return EXIT_SUCCESS; }
然后使用
mpicc
进行编译:$ mpicc -o mpihello mpihello.c
使用命令
mpirun
运行编译后的程序$ mpirun -np 4 ./mpihello Process 1 on node0.hpc.cndc out of 4 Process 2 on node0.hpc.cndc out of 4 Process 0 on node0.hpc.cndc out of 4 Process 3 on node0.hpc.cndc out of 4
其中参数
-np
表示需要使用的 CPU 数目。
集群测试
- 与本地测试同样的步骤,第一步需要启动 mpd 任务守护进程。所不同的是并不是直接调用 mpd 进程,而是通过 mpdboot 来启动。
首先,需要准备一份参与计算的机器列表文件,比如
mpd.hosts
, 其内容大致如下:compute-0-0 compute-0-1 compute-0-4 compute-0-2 compute-0-3 compute-0-5
当然,需要在你的
/etc/hosts
文件中首先定义好所有的主机名。然后执行
mpdboot
命令$ mpdboot -n 6 -f mpd.hosts
然后执行
mpdtrace
查看参与计算的节点是否打开$ mpdtrace node0 compute-0-0 compute-0-2 compute-0-1 compute-0-4 compute-0-3
编译测试程序,比如
mpich2
中自带的示例cpi.c
:$ mpicc -o cpi cpi.c
使用
mpirun
执行编译后的程序$ mpirun -np 6 ./cpi Process 0 on node0.hpc.cndc Process 2 on compute-0-2.local Process 1 on compute-0-0.local Process 3 on compute-0-1.local Process 4 on compute-0-4.local Process 5 on compute-0-3.local pi is approximately 3.1416009869231249, Error is 0.0000083333333318 wall clock time = 0.005853