Intel MPI 配置与基本使用

安装

Documenthtml

系统配置/含NFSnode

编译环境

设置

  1. 加载 mpivars.[c]sh 脚本。
  2. 建立文本文件 mpd.hosts ,其中保存有集群的节点列表,每行一个名字 (只针对开发者) 确保环境变量 PATH 中包含有相应的编译器,好比 icc。 (只针对开发者) 使用适当的编译驱动编译测试程序,好比 mpiicc。 $ mpiicc -o test test.c
  3. 使用 mpirun 运行测试程序 $ mpirun -r ssh -f mpd.hosts -n <# of processes> ./test

编译连接

  1. 保证在PATH环境变量中编译器设置正确。使用Intel编译器,确保LD_LIBRARY_PATH环境变量中含有编译库的路径。
  2. 经过相应的 mpi 命令编译 MPI 程序。好比调用 mpicc 使用 GNU C 编译器: $ mpicc <path-to-test>/test.c (因此支持的编译器都有对应的以 mpi 开头的命令,好比 Intel Fortran (ifort ) 对应的为 mpiifort).

运行MPI程序

设置 MPD 守护进程

Intel MPI 库使用 Multi-Purpose Daemon (MPD) 任务调度机制。为运行使用 mpiicc 编译的程序,首先须要设置好 MPD 守护进程。 与系统管理员为系统中全部用户启动一次 MPD 守护进程不一样,用户须要启动和维护本身的一组 MPD 守护进程。这种设置加强了系统安全性,并为控制可执行程序的环境提供了更强的灵活性。linux

设置MPD的步骤以下:安全

  1. 设置相应的环境变量和目录。好比,在 .zshrc.bashrc 文件中:bash

    • 保证 PATH 变量中包含有 <installdir>/bin 或者 Intel 64 位架构对应的 <installdir>/bin64 目录,其中 <installdir> 指的是 MPI 的安装路径。可 使用 Intel MPI 库中带有的 mpivars.[c]sh 来设置此变量。
    • 确保 PATH 中包含有的 Python 至少为 2.2 或以上版本。
    • 若是使用 Intel 编译器,确保 LD_LIBRARY_PATH 变量包含有编译器的库目录。可以使用编译器中带有的 {icc,ifort}*vars.[c]sh 脚原本设置。
    • 设置应用程序所须要的其它环境变量。
  2. 建立 $HOME/.mpd.conf 文件,设置 MPD 密码,须要在文件中写入一行: secretword=<mpd secret word> 不要使用 Linux 登录密码。 <mpd secret word> 可为任意字符串,它仅仅在不一样的集群用户对 MPD 守护进程进行控制时有用。网络

  3. 使用 chmod 设置 $HOME/.mpd.conf 文件的权限 $ chmod 600 $HOME/.mpd.conf架构

  4. 保证你在集群的全部节点上 rsh 命令看到一样的 PATH.mpd.conf 内容。 好比在集群的全部节点上执行下面的命令: $ rsh <node> env $ rsh <node> cat $HOME/.mpd.conf 保证每一个节点都可以与其它任意节点链接。可以使用安装中提供的 sshconnectivity 脚本。该脚本使用提供全部节点列表的文件做为参数,每一个节点一行: $ sshconnectivity.exp machines.LINUX 集群使用的是 ssh 而不是 rsh:ssh

    • 须要确保任一节点与其它节点连 接时都不须要密码。这须要参照系统管理手册。
    • 在启动 mpdboot 时须要加上调 用参数 -r ssh--rsh=ssh
  5. 建立文本文件 mpd.hosts , 其中列出了集群中全部的节点,每行一个主机名。好比:socket

$ cat > mpd.hosts

node1

node2

...
  1. 使用 mpdallexit 命令关闭上一次的 MPD 守护进程。 $ mpdallexit
  2. 使用 mpdboot 命令启动 MPD 守护进程。 $ mpdboot -n <#nodes> 若是文件 $PWD/mpd.hosts 存在,则会被用做默认参数。若是没有主机名文件,启用 mpdboot 只会在本地机器上运行 MPD 守护进程。
  3. 使用 mpdtrace 命令检查 MPD 守护进程的状态: $ mpdtrace 其输出结果应该为当前进行 MPD 守护进程的节点列表。该列表应该与 mpd.hosts 文件中节点列表符合。

网络结构选择

Intel MPI 库会动态选择大部分适用的网络结构以便 MPI 进程之间进行通信。设置环境变量 I_MPI_DEVICE为下表中的某个值:ide

I_MPI_DEVICE 值 支持的结构
sock TCP/Ethernet/sockets
shm Shared memory only (no sockets)
ssm TCP + shared memory
rdma[:<provider>] InfiniBand, Myrinet (via specified DAPL provider)
rdssm[:<provider>] TCP + shared memory + DAPL

要保证所选择的网络结构可用。好比,使用 shm 只有当全部进程能够经过共享内存进 行通信时才行;使用 rdma 只有当全部进程能够经过单一的 DAPL 相互通信时才行。

运行MPI程序

运行使用 Intel MPI 库链接的程序,使用 mpiexec 命令: $ mpiexec -n <# of processes> ./myprog 使用 -n 参数设置进程数,这是 mpiexec 惟一须要明显指定的选项。 若是使用的网络结构与默认的不一样,须要使用 -genv 选项来提供一个能够赋给 I_MPI_DEVICE 变量的值。 好比使用 shm 结构来运行 MPI 程序,可执行以下命令: $ mpiexec -genv I_MPI_DEVICE shm -n <# of processes> ./myprog 好比使用 rdma 结构来运行 MPI 程序,可执行以下命令: $ mpiexec -genv I_MPI_DEVICE rdma -n <# of processes> ./myprog 能够经过命令选择任何支持的设备。 若是应用程序运行成功,可将其移动到使用不一样结构的集群中,不须要从新连接程序。