内容为准备ASC14时根据官方文档所翻译,目的是为团队省去语言之苦快速了解相关配置。赛后发在优快云上希望能帮助更多的人。如果有修改建议和其他好的帖子请留言,我会不断修改文章,方便大家了解MPICH2。备赛仓促,现在有新任务,所以没有重新维护,如有问题还请包涵。
MPICH2 User’s Guide
Version 0.4(Download:http://pan.baidu.com/s/1kT0Yv3p)
1 介绍
这个文档是一个初级版本,一些部分还没有完成。但是足够可以让你开始使用MPICH2(This is a preliminary version and some sections are notcomplete yet. However, there should be enough here to get you started with MPICH2.)2 从MPICH1到MPICH2
你的MPI程序不需要改变,但是运行会有一些不同。
MPICH2是对MPI标准的全新实现。它从实现MPICH1中吸取了教学,来让MPICH2用起来更加稳定,更加有效,更加方便。
2.1 默认运行环境
Default Runtime EnvironmentMPICH1用the now-old p4 portable programming environment
进程是通过远程shell命令(ssh rsh)和必要的信息启动,通过被收集的sockets相互连接,然后再一以个非可伸缩方式的启动时间中被分配。不仅如此,进程管理功能性的纠缠和通讯机制导致在出错时系统表现混乱。
MPICH2提供了一个进程管理与进程通信相互分离的机制。默认运行环境由一组守护进程(mpd)(进程启动前建立进程通信)组成,这样在通信无法建立时就明确了错误,当并行工作启动时它也提供了一个快速、可扩展的起动机制
2.2 启动并行工作
MOICH1提供mpirun命令来启动。MPI-2论坛重新定义了一个标准的,轻便的命令,mpiexec,来启动并行工作。MPICH2实现了mpiexec及其标准参数和一些扩展。
MPICH2同时也提供mpirun命令来简单的向下兼容。但是MPICH2中的mpirun没有提供所有的mpiexec的参数,也没有所有MPICH1中mpirun的参数。
2.3 FORTRAN 中的命令行参数
MPICH1需要在所有应用程序中键入命令行参数,包括fortran的命令行,并且MPICH1的配置做了一些努力来找到iargc和getarg合适的版本并将它们放在库中。从MPICH2开始就不需要使用程序的命令行参数,这些功能和选项以及配置没有什么特别的。如果你需要在应用中用他们,你需要确保他们是在你的fortran环境中可以使用的。
2.4 配置选项
MPICH1和2的配置选项不同。在安装guide中讨论了配置configure特别的,新的MPICH2的配置不支持 -cc=<compiler name>(or -fc -c++)选项。相反,许多可以在MPICH1中用命令行指定的配置,现在必须要通过定义环境变量来设置。
比如
MPICH1:./configure -cc=pgcc
MPICH2:setenv CC pgcc
3 设定Paths
你需要知道MPICH2的安装路径(default 在/usr/local).
我们建议将bin的子目录放入path中。这样可以方便的使用各种MPICH2的命令来编译,链接,运行程序。在这个目录的其它命令管理着一部分运行时环境和运行工具。
你可能第一个命令是mpich2version,来查询准确的版本,来配置你的工作环境。版本可能会影响你的配置和安装。
4 QUICK START
我们假定你的安装目录是/home/you/mpich2-installed
tcsh
setenv PATH /home/you/mpich2-installed/bin:$PATH
OR
bash
export PATH=/home/you/mpich2-installed/bin:$PATH
接下来运行MPI程序,即使在一台机器上,你可以
mpd &
cd /home/you/mpich2-installed/examples
mpiexec -n 3 cpi
mpdallexit
如果正常那么安装正确,你就可以运行一个MPI程序了。
5 编译和链接
有一个方便的方法来编译、链接程序是通过使用脚本,脚本的编译器与MPICH2建立时的编译器相同。mpicc, mpicxx, mpif77, mpif90分别对应c, cpp, fortran 77,fortran 90
如果某个命令missing,说明MPICH2配置时没有那个语言的支持。
5.1 指定编译器
你不一定必须用mpi的编译器,但是不是所有编译器都兼容。共享库
现在的共享库只在linux上测试过,而且有风险
6 通过mpiexec运行程序
如果你在使用原始的MPICH或其他MPI的实现,你可能通过mpirun来运行你的mpi程序。MPI-2提供了mpiexec作为一个运行MPI程序的推荐方法。MPICH2实现了mpiexec标准,并且提供扩展。6.1 标准mpiexec
最简单的命令
mpiexec -n 32 a.out
用32个进程开始可运行的out文件(在MPI应用中提供一个大小为32的MPI_COMM_WORLD)
其他选项支持指定运行程序的hosts,可执行文件的搜索路径,工作目录,进程数量。
利用符号 ':' 可以实现进程参数的多重设置。
进程分配设置像如下例子
mpiexec -n 1 -host loginnode master : -n 32 -host smp slave
-configfile参数允许指定一个包含进程设置的文件,这样可以不必要使用很长的命令行。(see page 353 of [2])
-soft参数现在不被支持
可以启动一个MPI工作(MPI_COMM_WORLD=1)不使用mpiexe.这个进程作为一个MPI进程,称为MPI_Init,并且可以调用其他MPI函数,包括MPI_ Comm_spawn
6.3 MPD进程管理环境的扩展
6.3.1 mpiexec针对MPD的参数
MPICH2默认调用MPD进程管理。MPD提供了很多指令来查询MPD进程管理环境并且与并行工作相互作用。在运行mpiexec前,运行环境必须被建立。先运行守护进程(see section 7)。
当MPD ring 已经运行,bin也在path中
执行mpdtrace 可以看到可以运行MPI程序的节点。
在examples下运行(或这个目录在path中)
mpiexec -n 5 cpi
开始在五个节点运行cpi,MPD或其他进程进程管理系统会选择机器来运行,cpi会告诉你他在哪个节点运行。
你同样可以运非MPI程序。它有时很有用,可以来确定你的所有机器是否启动就绪。如:
mpiexec -n 10 hostname
mpiexec -n 10 printenv
?
6.3.2 向进程传递环境变量
MPI-2指定了参数-n, -path,-wdir, -host, -file, -configfile的语法和语义,-soft没有被mpiexec实现。我们称这些为“局部选项”,因为它们的作用域是进程,那些用冒号之间的参数或在指定配置文件.configfile中的每行设置描述的进程。我们添加了一些扩展,如上述的局部扩展,和一些全局扩展。全局扩展的含义是它们应用于所有被调用mpiexec启动的进程。[-env]
MPI-2标准提供了传递不同参数给不同应用程序进程的方法,但没有提供传递环境变量的方法。局部参数 -env 完成这个工作。
mpiexec -n 1 -env FOO BAR a.out : -n 2 -env BAZZ FAZZ b.out
命令设定第一个进程环境变量BAR的值为F00,并且运行可执行的a.out文件,设定第二个两个进程环境变量BAZZ的值为FAZZ,并运行可执行文件b.out.想设置一个变量且不给它值,用' ' 空格作为命令中它的值。
[-genv]
全局参数 -genv 可以用于向所有进程传递相同的环境变量。正如,
mpiexec -genv FOO BAR -n 2 a.out : -n 4 b.out
将2+4=6个进程的F00变量的值为BAR。如果只有一组进程,-genv 和-env是相同的。If both -genv and -env are used, the -env’s add to the environment specified or added to by the -genv variables.
?
[-envall][-envnone]
是passing the entire environment的简写,在mpiexec执行的时候使用。全局参数是-genvall。不传递环境变量,用-envnone 和-genvnone
所以只设置环境变量F00而其他不变,无论当前的环境如何,你可以
mpiexec -genvnone -env F00 BAR -n 50 a.out
[-envlist]
-envlist当前的所有在list中出现的变量名的环境变量被拷贝并给予当前进程。如果使用-genvlist会给每个进程分别复制。如:
mpiexec -genvnone -envlist PATH,LD_SEARCH_PATH -n 50 a.out
这个命令sets the PATH and LD LIBRARY PATH in the environment of the a.out processes to their values in the environment where mpiexec is being run.(设定了在a.out进程的环境中的PATH和LD_LIBRARY_PATH的值为在mpiexec开始运行的地方的环境变量的值)
在变量名中不能用,号。
有一些参数只有全局版
[-l]
为stdout\stderr提供等级标签,这对于已经明确生成的进程有些模糊但是仍然有用。
[-uszie]
设定被MPI的MPI_COMM_WORLD属性中MPI_UNIVERSE_SIZE所检索的世界(universe)的大小。
[-bnr]
当想运行在由MPICH1中的ch_p4mpd 或 myrinet设备编译链接的可执行程序时用此参数。
6.3.3 环境变量影响mpiexec
MPIEXEC_TIMEOUT这个参数决定工作可以运行的最长时间。时间到的时候工作会被终止。
MPIEXEC_BNR
如果环境变量的值被定义(值无关紧要),MPD会表现为向下兼容模式,支持原版MPICH的BNR接口(eg v1.2.0-1.2.6)而不是它的PMI接口,来作为应用程序进程和进程系统相互作用的方式。
6.4 SMPD的扩展
SMPD是一个可选的进程管理者,可以在UNIX和WINDOWS上运行。只要二进制格式匹配,它可以在两个平台上运行工作。(big/little endianness and size of C types - int,long,void*,etc).6.4.1 SMPD的mpiexec参数
运行mpiexec或者mpiexec -help2来查看选项
典型应用:
mpiexec -n 10 myapp.exe
可选项
[-n x][-np x]
运行的进程数
[-localonly x][-np x -localonly]
只在本地机器运行进程
[-machinefile filename]
在用文件中的机器名所代表的机器上来启动smpd
[-host hostname]
在指定的host上启动程序
[-hosts n host1 host2 ... hostn][-hosts n host1 m1 host2 m2 ... hostn mn]
在指定的机器上启动指定个数个进程
[-dir drive:\my\working\directory]
[-wdir /my/working/directory]
在固定目录启动进程
[-env var val]
在启动前设置进程的变量
[-exitcodes]
当每个进程退出时打印退出代码
[-noprompt]
prevent mpiexec from prompting for user credentials. Instead errors will be printed and mpiexec will exit.
[-port port]
[-p port]
设定smpd监听的端口
[-phrase passphrase]
指定smpd建立连接时验证的密文passphrash
[-smpdfile filename]
指定smpd密文文件的位置(只限在unix)
[-soft Fortran90 triple]
将可运行的进程数设置到最大?
acceptable number of processes to launch up to maxprocs
[-path search path]
在path中找可执行程序 , ; 分割
[-timeout seconds]
超时时间
[-prompt]
6.5 Extensions for Forker(也是一种进程管理系统)
7 管理进程管理环境
介绍有用的进程管理指令7.1 MPD
mpd 启动守护进程mpdboot 在列表包含的机器上启动守护进程
mpdtrace 列出所有运行守护进程的机器 -l选项可以详细列出机器名,端口,ip信息。
mpdlistjobs 列出mpd正在运行的工作与数量。工作通过被提交的地方mpd名称区别。
mpdkilljob 杀死一个mpdlistjob中的进程
mpdsigjob 给命名的job发送一个信号。信号通过名字或数字被指定。
你可以通过一般对键盘操作提供信号.你可以通过^C 来发送一个终止信号,或者^Z来发送一个暂停信号。
精确的参数格式在MPD --help 或-h中给出
或者在mpich2/src/pm/mpd中的README中阅读
8.调试
调试并行程序是出了名的难(notoriously difficult)。这里描述了一些方法,有一些取决于你的MPICH2的版本。8.1 mpigdb
如果你使用MPD可以用mpigdb而不是mpiexec来运行程序,以此来让程序在gdb连续调试器的控制下运行。详见源文档
------
[2]Marc Snir, Steve W. Otto, Steven Huss-Lederman, David W. Walker,and Jack Dongarra. MPI—The Complete Reference: Volume 1, The MPI Core, 2nd edition. MIT Press, Cambridge, MA, 1998.
================
Terrence Zhou 2014.2
转载请注明文章出处:)