MPICH2用户指南译文
- 格式:doc
- 大小:89.00 KB
- 文档页数:21
WinXP下并行计算集群的组建(利用MPICH2)梦想Living制作1.什么是MPI?MPI(Message Passing Interface)是目前最重要的一种基于消息传递的并行编程工具,是消息传递并行程序设计的标准之一,用于开发基于消息传递的并行程序,在程序设计语言上支持C/C++和Fortran;其目的是为用户提供一个高效的、可移植的、灵活的消息接口库。
MPI 目前通用的规范是MPI1.1,于1994年推出。
目前最新的规范为MPI2.0,于1997年推出并在不断完善当中,其部分标准已经在各类并行计算机中普遍实现。
要让你的单个PC机或者计算机集群能运行并行程序,就需要用MPI建立实用的并行计算环境。
MPI有多种不同的免费版本,几乎所有的并行计算机厂商都提供了对它的支持,自推出以来已被广泛接受,可以运行在几乎所有的并行计算环境(共享和分布式存储并行机、MPP、机群系统等)和流行的多进程操作系统(Linux/Unix和Windows),因此它已经成为事实上的并行编程标准。
比较著名的免费通用MPI系统就是MPICH和LAM MPI()。
本文用的是MPICH2。
2.搭建MPI并行计算环境2.1 重要注意事项:1.搭建MPI并行计算环境过程中,你需要有管理员的权限,以管理员的身份进行软件的安装和系统参数的配置。
2.未加说明的情况下,所有的输入字符都是英文小写半角输入法下的输入。
请务必注意该点说明,以正确理解输入的字符(包括标点符号与空格)2.2软硬件准备硬件:两台在同一局域网下的普通PC。
建立多台PC节点构成的一个机群计算环境时,还要有必要的路由器、交换机或是集线器等。
软件:1.节点机的操作系统:Microsoft Windows XP Pro SP2(32bit)2.安装MPICH2所需的windows组件(可以在Microsoft网站上下载):Microsoft .NET Framework 2.0Microsoft Visual C++ 2005 SP1(即vcredist_x86.exe)3.组建MPI环境(根据你的操作系统选择合适的文件):mpich2-1.2.1-win-ia32.msi (该安装包适合32bit XP系统)该程序可以在以下站点下载/research/projects/mpich2/ftp:///pub/mpi2.3环境搭建1.在每台节点机上安装Microsoft Windows XP Pro SP2、 Microsoft .NET Framework2.0与Microsoft Visual C++ 2005 SP1。
MPICH&PBS使用指南一、MPI编程 (1)二、MPICH下编译和运行 (3)三、PBS环境下运行 (4)一、MPI编程1、MPI编程函数介绍MPI实际上是一个提供并行程序消息传递机制的函数库,有40多个函数,常用的有6个基本函数。
下面以C语言为例简单介绍这些函数。
(1)MPI_Init函数定义:int MPI_Init(int *argc, char ***argv)功能:用命令行参数初始化MPI环境输入:argc、argv—表示命令行参数,同C语言的main()函数参数格式,argv中包含欲并行运行的进程数输出:返回值—非零/零表示初始化是否成功说明:该函数必须为程序中第一个调用的MPI函数示例:MPI_Init(&argc, &argv); // argc、argv引用的是mian()函数的参数(2)MPI_Finalize函数定义:int MPI_Finalize (void)功能:结束MPI程序的运行,指结束MPI环境的使用输入:无输出:返回值—非零/零表示结束MPI环境是否成功说明:该函数必须为程序中最后一个调用的MPI函数示例:MPI_ Finalize ();(3)MPI_Comm_size函数定义:int MPI_Comm_size(MPI_Comm comm, int *size)功能:得到总进程数输入:comm 通信域句柄(系统默认的为MPI_COMM_WORLD,也可自己定义)输出:size,即通信域comm内包括的进程数整数(4)MPI_Comm_rank函数定义:int MPI_Comm_rank(MPI_Comm comm, int *rank)功能:得到本进程的进程号输入:comm,该进程所在的通信域句柄输出:rank,调用进程在comm中的标识号(5)MPI_Send函数定义:int MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) 功能:发送消息给特定的进程输入:buf 发送缓冲区的起始地址(可选类型)count 将发送的数据的个数(非负整数)datatype 发送数据的数据类型(句柄)dest 目的进程标识号(整型)tag 消息标志(整型)comm 通信域(句柄)输出:无(6)MPI_Recv函数定义:int MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source, int tag,MPI_Comm comm,MPI_Status *status)功能:接受别的进程发过来的消息输入:count 最多可接收的数据的个数(整型)datatype 接收数据的数据类型(句柄)source 接收数据的来源即发送数据的进程的进程标识号(整型)tag 消息标识与相应的发送操作的表示相匹配相同(整型)comm 本进程和发送进程所在的通信域(句柄)输出:buf 接收缓冲区的起始地址(可选数据类型)status 返回状态(状态类型MPI_Status)2、MPI程序示例MPI程序中必须包含MPI库的头文件,C语言头文件名为mpi.h,FORTRAN语言头文件名为mpif.h。
MPICH2用户指南V1.4数学与计算科学系阿贡国家实验室此处略去牛人无数2011年6月16日翻译日期:2011/8/23Aozhen目录1介绍 (1)2 MPICH2入门 (1)2.1 默认运行环境 (1)2.2开始并行作业 (1)2.3 Fortran中的命令行 (2)3 快速开始 (2)4 编译和链接 (3)4.1 对C++来说的特殊问题 (3)4.2 对Fortran来说的特殊问题 (3)5 用mpiexec运行程序 (4)5.1 标准mpiexec (4)5.2 所有进程管理环境扩展 (5)5.3 Hydra进程管理器的mpiexec扩展 (5)5.4 SMPD进程管理器环境扩展 (5)5.4.1 关于SMPD的mpiexec参数 (5)5.5 gforker进程管理器环境扩展 (8)5.5.1 gforker的mpiexec参数 (8)5.6 remshell进程管理器环境的限制 (10)5.7 使用SLURM和PBS的MPICH2 (11)5.7.1 OSC mpiexec (11)6 调试 (11)6.1 TotalView (12)7 检查点 (12)8 MPE (13)8.1 MPI日志(MPI Logging) (13)8.2 用户定义日志 (13)8.3 MPI检查 (15)8.4 MPE选项 (15)9 MPICH2的其他工具 (16)10 Windows下的MPICH2 (16)10.1目录 (16)10.2 编译 (17)10.3运行 (17)1介绍本手册假定MPICH2已经安装了。
想知道怎么安装请参见MPICH2 Installer's Guide《MPICH2安装指南》,或MPICH2顶级目录下的README。
本手册介绍如何编译,链接和运行MPI应用程序,并使用MPICH2自带的一些工具。
这是初步版,有些部分还没完成。
但,这已经足够让你步入MPICH2的大门了。
lammps简要使用说明李小椿北京航空航天大学物理科学与核能工程学院更新于:2010年2月1日星期一目录lammps简要使用说明 (1)LAMMPS介绍 (4)文件 (4)1.系统初始化 (4)units lj/real/metal/si/cgs (4)atom_style angle/atomic/bond/charge/dipole/dpd/ellipsoid/full/granular/molecular/hybrid (5)atom_modify map/first (5)dimension N ,N=2/3 (5)boundary x y z, default=boundary p p p (5)newton flag/flag1 flag2 (5)communicate single/multi group/cutoff (5)processors Px Py Pz (5)2.创建模拟晶胞 (6)lattice none/sc/bcc/fcc/hcp/diamond/sq/sq2/hex/custom scale keyword values (6)region ID style block/cylinder/prism/sphere/union/intersect args keyword value (6)group ID region/type/id/molecule/subtract/union/intersect (6)create_box N region−ID (7)create_atoms type box/region/single args keyword values (7)delete_atoms group/region/overlap/porosity args (7)read_restart file (7)set atom/group/region ID keyword values (8)displace_atoms group−ID move/ramp/random args keyword value (8)displace_box group−ID parameter args ... keyword value . (8)change_box ortho/triclinic (9)replicate nx ny nz (9)3.设置 (9)mass I value (9)velocity group−ID create/set/scale/ramp/zero args keyword value (9)timestep dt (9)reset_timestep N (10)neighbor skin bin/nsq/multi (10)neigh_modify keyword values (10)4.输出 (10)dump ID group−ID bond/dcd/xtc/xyz/custom N (10)dump_modify dump−ID format/scale/image/flush/unwrap/every/precision/region/thresh values (11)undump dump−ID (11)thermo_style one/multi/custom(args) (11)thermo_modify lost/norm/flush/line/format/temp/press value (12)thermo N (12)print string (12)restart N root (12)write_restart file (13)echo none/screen/log/both (13)log (13)5.FIX (13)fix ID group−ID style args (13)系综相关 (14)力和速度的控制 (15)计算特定量 (16)模拟晶胞的控制 (17)模拟过程的控制 (18)unfix fix-id (18)PUTE (18)compute ID group−ID style args (18)compute ID group−ID ackland/atom (19)compute ID group−ID centro/atom (19)compute ID group−ID coord/atom cutoff (19)compute ID group−ID damage/atom (19)compute ID group−ID displace/atom fix−ID (19)compute ID group−ID group/group group2−ID (19)compute ID group−ID ke (19)compute ID group−ID ke/atom (20)compute ID group−ID pe (keyword=pair/bond/angle/dihedral/improper/kspace) (20)compute ID group−ID pe/atom (keyword=pair/bond/angle/dihedral/improper) (20)compute ID group−ID pressure temp−ID keyword=ke/pair/bond/angle/dihedral/im proper/kspace/fix (20)compute ID group−ID reduce mode=sum/min/max input1 input2 ... .. (20)compute ID group−ID stress/atom (keyword= ke/pair/bond/angle/dihedral/improper/kspace/fix) (20)compute_modify compute−ID keyword value (20)compute ID group−ID temp (20)compute ID group−ID temp/com (20)compute ID group−ID temp/deform (20)comp ute ID group−ID temp/partial xflag yflag zflag (21)compute ID group−ID temp/ramp vdim vlo vhi dim clo chi keyword value (21)comput e ID group−ID temp/region region−ID (21)uncompute compute-ID (21)7.势函数 (21)pair_style (21)pair_style tersoff (22)kspace_style (23)kspace_modify (23)pair_write itype jtype N r/rsq/bitmap inner outer Qi Qj (23)8.运行 (23)run N upto/start/stop/pre/post/every values (23)run_style verlet/respa(args) (23)minimize etol ftol maxiter maxeval (23)min_style cg/sd (23)min_modify dmax 0.2 (default=0.1) (24)temper (24)clear (24)9.其他 (24)variable name delete/index/loop/world/universe/uloop/equal/atom (24)next variables (25)jump (25)label string (25)if value1 operator value2 then command1 else command2 (26)include (26)shell cd/mkdir/mv/rm/rmdir (26)10.模拟方法论 (26)缺陷的生成 (26)晶格常数 (27)迁移 (27)表面 (27)立方晶系弹性常数.......................................................................................................................... 错误!未定义书签。
MPICH2用户指南(MPICH2 User’s Guide)版本(Version )1.0.8数学与计算机科学部(Mathematics and Computer Science Division)阿贡国家实验室(Argonne National Laboratory)William GroppEwing LuskDavid AshtonPavan BalajiDarius BuntinasRalph ButlerAnthony ChanDavid GoodellJayesh KrishnaGuillaume MercierRob RossRajeev ThakurBrian Toonen2008年10月24日这项工作得到美国能源部科学局高级科学计算研究局Sci-DAC合约编号DE-AC02-06CH11357的规划,数据、信息与计算机科学部的分规划的支持。
1 引言(INTRODUCTION)1.引言MPICH2.本手册假定MPICH2已经安装了。
关于如何安装MPICH2,参见MPICH2安装指南,或者MPICH2顶层目录的README。
本手册解释如何编译、链接及运行MPI应用程序,使用于MPICH2一起的某些工具。
这是个初步的版本,某些节还没完成。
但是,这些应该足以帮你MPICH2 起步的了。
2 从MPICH1升级到MPICH2(Migrating to MPICH2 from MPICH1)如果你一直在使用MPICH 1.2.x (1.2.7p1是最新版本),那么你会发现一些有关MPICH2不同的东西(希望能更好)。
当然了,虽然你的MPI程序不用改变,但是有些关于你运行它们的方式则不同。
MPICH2是MPI标准的一个全新实现,其设计实现了加到MPI-2附件的全部(动态进程管理,片面操作,并行I/O及其他扩充),应用从MPICH1 实现所获得的教训,使得MPICH2更加健壮、有效及便于使用。
MPI的搭建及OpenMP的配置实验指导书1.MPI简介消息传递接口(Message Passing Interface,MPI)是目前应用较广泛的一种并行计算软件环境,是在集群系统上实现并行计算的软件接口。
为了统一互不兼容的的用户界面,1992年成立了MPI委员会,负责制定MPI的新标准,支持最佳的可移植平台。
MPI不是一门新的语言,确切地说它是一个C和Fortran的函数库,用户通过调用这些函数接口并采用并行编译器编译源代码就可以生成可并行运行的代码。
MPI的目标是要开发一个广泛用于编写消息传递程序的标准,要求用户界面实用、可移植,并且高效、灵活,能广泛应用于各类并行机,特别是分布式存储的计算机。
每个计算机厂商都在开发标准平台上做了大量的工作,出现了一批可移植的消息传递环境。
MPI吸收了它们的经验,同时从句法和语法方面确定核心库函数,使之能适用于更多的并行机。
MPI在标准化过程中吸收了许多代表参加,包括研制并行计算机的大多数厂商,以及来自大学、实验室与工业界的研究人员。
1992年开始正式标准化MPI,1994年发布了MPI的定义与实验标准MPI 1,相应的MPI 2标准也已经发布。
MPI吸取了众多消息传递系统的优点,具有很好的可以执行、易用性和完备的异步通信功能等。
MPI事实上只是一个消息传递标准,并不是软件实现并行执行的具体实现,目前比较著名的MPI具体实现有MPICH、LAM MPI等,其中MPICH是目前使用最广泛的免费MPI系统,MPICH2是MPI 2标准的一个具体实现,它具有较好的兼容性和可扩展性,目前在高性能计算集群上使用非常广泛。
MPICH2的使用也非常简单,用户只需在并行程序中包含MPICH的头文件,然后调用一些MPICH2函数接口将计算任务分发到其他计算节点即可,MPICH2为并行计算用户提供了100多个C和Fortran函数接口,表1-1列出了一些常用的MPICH2的C语言函数接口,用户可以像调用普通函数一样,只需要做少量的代码改动就可以实现程序的并行运行,MPICH并行代码结构如图1-1所示。
Ubuntu系统下mpich2的安装。
把老师给的“mpich2-1.3.2p1.tar.gz ”解压到我的用户目录下。
一、首先进入解压后mpich2文件的根目录,运行配置操作:./configure--prefix=/home/<USERNAME>/mpich2-install |& tee info.txt ,结果报错如下:"No Fortran 77 compiler found. If you don't need to build anyFortran programs, you can disable Fortran support using--disable-f77 and --disable-fc. If you do want to buildFortran programs, you need to install a Fortran compiler suchas gfortran or ifort before you can proceed."于是按照提示修改命令,改为./configure --prefix=/home/east/mpich2-install --disable-f77 --disable-fc |& tee info.txt,结果又提示没有找到C++编译器:“configure: error: Aborting because C++ compiler does not work. If you do not need a C++ compiler, configure with –disable-cxx”考虑到以后应该会用到g++,于是根据提示用“sudo apt-get install g++”命令进行了安装。
然后再次运行配置命令,终于成功完成。
二、运行make命令”make |& tee info.txt”,经过了漫长的等待,看到提示”Make completed”的时候,终于松了一口气。
64位机+WIN7+VS2012+Intel.Visual.Fortran.XE2013-SP1+MPICH2并行环境设置实现攻略本人属于电脑菜鸟、编程菜鸟、并行菜鸟级初学者,在没有人指导的基础上,通过网上前辈积累的经验,和无数次撞墙,终于在64位win7台式机(8核,32G内存)上实现VS2012+IVF2013并行程序的编译,并且实现MPICH2下的并行计算。
如果有条件,建议在linux下进行并行运算,这是大牛们的建议。
但是本人计算机不能联网,且只有windows系统,所开展的并行计算规模也不是太大,主要是为了节省时间提高效率。
相信部分朋友还是有在windows下并行计算的需求,请并行大牛们不要鄙视,绕道通过。
IVF本身带MKL,可以开展并行计算,但是我不懂怎么弄,只好忽略。
以下是64位机+WIN7+VS2012+IVF2013-SP1+MPICH2实现的过程:1.设置计算机系统管理员用户名和密码。
这是由于在win7下装mpich2必须要使用管理员进行注册。
2.关掉window自带的防火墙,和安装的杀毒软件。
据说可能会导致mpich2成功启用,我没有严格对照过出现的问题是否是杀毒软件引起的,存疑,建议关闭防火墙和杀毒功能。
3.首先安装VS2012旗舰版。
安装位置默认是C:\Program Files (x86)\Microsoft Visual Studio11.0,但是不影响对64位的支持,前提是安装过程中全部安装(当中包括支持64位的选项),这一步具体可以参考别人的文章,海量。
4.其次安装IVF2013-SP1。
我仍然不确定IVF是否有32位和64位的差别,但是我下载的Intel.Visual.Fortran.XE2013-SP1安装过程中出现的部分语句显示是支持64的。
这一步具体参考别人的文章。
步骤3和步骤4的重点不在安装,而在环境设置中,参考步骤12-13。
5.现在安装MPICH2,我选择的64位:mpich2-1.4.1p1-win-x86-64。
linux并行环境及mpich2安装全过程准备工作:1、设置IP(在这里我们设置c1、c2、c3、c4的ip地址分别为192.168.0.1、192.168.0.2、192.168.03、192.168.0.4)#vi /etc/sysconfig/network-script/ifcfg-eth[0、1、2、3]其中数字与所修改的机器网卡实际编号一致#service network restart每个节点都要进行上面的操作2、更改主机名为c1、c2、c3、c4#vi /etc/sysconfig/networkHOSTNAME=c1c2、c3、c4操作和c1相同例如:[root@c2 ~]# cat /etc/sysconfig/networkNETWORKING=yesHOSTNAME=c2一、创建SSH信任连接(在root目录下)1、更改/etc/hosts文件#vi /etc/hosts 打开hosts文件,更改如下:127.0.0.1 localhost.localdomain localhost192.168.0.1 c1192.168.0.2 c2192.168.0.3 c3192.168.0.4 c4例如:[root@c2 ~]# cat /etc/hosts# Do not remove the following line, or various programs# that require network functionality will fail.127.0.0.1 localhost.localdomain localhost192.168.0.1 c1192.168.0.2 c2192.168.0.3 c3192.168.0.4 c42、在c1生成SSH秘钥对.#ssh-keygen -t rsa 回车即可,产生.ssh文件,口令选为空,生成密钥对,公钥写入/root/.ssh/id_rsa.pub,密钥写入/root/.ssh/id_rsa#ls -a 查看是否有.ssh文件夹3、生成authorized_keys文件建立对c2的信任连接#scp /root/.ssh/id_rsa.pub 192.168.0.2:/root/.ssh/#ssh 192.168.0.2 cat /.ssh/id_rsa.pub>>/root/.ssh/authorized_keys查看c2 是否有authorized_keys文件,有则将id_rsa.pub内容复制进c2该文件#scp /root/.ssh/id_rsa.pub 192.168.0.2 /.ssh/authorized_keys无则将id_rsa.pub复制为远程该文件4、退出到root目录#cd ..5、建立本身的信任连接#ssh c2 按提示输入yes(三个字母要打全)设置c1对c3和c4的方法与c1相同6、对c2、c3和c4进行类似上面的操作7、确认3台机器的信任连接已建立对每个节点执行:#ssh c1#ssh c2#ssh c3#ssh c4在提示处输入yes回车,最后确定无需输入密码并且没有任何提示信息即可登陆("Last login:时间日期"提示信息除外)二、安装MPICH2(在节点root目录下)1、解压缩#tar -zxvf mpich2-1.0.1.tar.gz或者 #gunzip -c mpich2-1.0.1.tar.gz|tar xf mpich2-1.0.1.tar2、创建安装目录#mkdir /usr/MPICH-install3、进入mpich2解压目录#cd mpich2-1.0.14、设置安装目录#./configure --prefix=/usr/MPICH-install5、编译#make6、安装#make install7、退出到root目录#cd ..8、通过编辑.bashrc文件修改环境变量#vi .bashrc修改后的.bashrc文件如下:# .bashrc# User specific aliases and functionsPATH=$PATH:/usr/MPICH-install/bin 新增加的#Source .bashrc9、测试环境变量设置#which mpd#which mpicc#which mpiexec#which mpirun10、修改/etc/mpd.conf文件,内容为secretword=myword#vi /etc/mpd.conf设置文件读取权限和修改时间#touch /etc/mpd.conf#chmod 600 /etc/mpd.conf11、创建主机名称集合文件/root/mpd.hosts#vi mpd.hosts文件内容如下:C1C2C3c4三、测试1、本地测试#mpd & 启动#mpdtrace 观看启动机器#mpdallexit 退出2、通过mpd.hosts运行集群系统#mpdboot -n number -f mpd.hosts number为要起动的机器个数#mpdtrace#mpdallexit3、测试运行MPICH的例子程序#mpdboot -n 4 -f mpd.hosts 启动4台机器#mpiexec -n number /usr/MPICH-install/examples/cpi number为使用的进程数#mpdallexit4、如果测试不能通过,请进行第四步四、问题解决1、通过mpdcheck获得一写帮助信息#mpdcheck -pc2、查错#mpdcheck -l3、通过mpd.hosts文件查错#mpdcheck -f mpd.hosts 如果无错误#mpdcheck -f mpd.hosts -ssh4、如果上述无错误,可略过此步对任意两台机器进行查错m1: #mpdcheck -s 输出主机名host和端口portm2: #mpdcheck -c host port注意:以上四步都是在没有运行mpd的情况下进行的5、mpd查错m1: #mpd -e & 返回使用的端口m2: #mpd -h m1 -p echoed_port_m1 &完成安装。
MPICH2用户指南(MPICH2 User‘s Guide)版本(Version )1.0.8数学与计算机科学部(Mathematics and Computer Science Division)阿贡国家实验室(Argonne National Laboratory)William GroppEwing LuskDavid AshtonPavan BalajiDarius BuntinasRalph ButlerAnthony ChanDavid GoodellJayesh KrishnaGuillaume MercierRob RossRajeev ThakurBrian Toonen2008年10月24日这项工作得到美国能源部科学局高级科学计算研究局Sci-DAC合约编号DE-AC02-06CH11357的规划,数据、信息与计算机科学部的分规划的支持。
1 引言(INTRODUCTION)1.引言MPICH2.本手册假定MPICH2已经安装了。
关于如何安装MPICH2,参见MPICH2安装指南,或者MPICH2顶层目录的README。
本手册解释如何编译、链接及运行MPI应用程序,使用于MPICH2一起的某些工具。
这是个初步的版本,某些节还没完成。
但是,这些应该足以帮你MPICH2起步的了。
2 从MPICH1升级到MPICH2(Migrating to MPICH2 from MPICH1)如果你一直在使用MPICH 1.2.x(1.2.7p1是最新版本),那么你会发现一些有关MPICH2不同的东西(希望能更好)。
当然了,虽然你的MPI程序不用改变,但是有些关于你运行它们的方式则不同。
MPICH2是MPI标准的一个全新实现,其设计实现了加到MPI-2附件的全部(动态进程管理,片面操作,并行I/O及其他扩充),应用从MPICH1实现所获得的教训,使得MPICH2更加健壮、有效及便于使用。
MPICH2的安装指南提供有关MPICH1 与MPICH2的改变某些信息,配置与安装MPICH的过程。
在MPICH1 及MPICH2之间编译、链接与运行MPI 程序下面描述。
2.1 默认的运行环境(Default Runtime Environment)在MPICH1中,默认的配置使用现在到老的p4可移植编程环境。
进程通过远程shell 启动(rsh 或ssh),发现进程及通过套接字互相连接的必要信息被收集,在启动时(startup)以非可度量的方式发布。
而且,进程管理功能与通讯机制的牵扯在出错时会导致系统混淆的行为。
MPICH2提供进程管理与通信的分离。
默认的运行时环境由一系列的守护进程(daemons)叫mpd的组成,在应用程序启动前建立所用机器之间的通讯,因而在通信不能建立出错时提供了清晰的画面,在并行任务(job)启动时提供一种快速可度量的启动机制。
6.1节详细地描述MPD进程管理系统。
还有其他可用的进程管理器。
2.2 启动并行任务(Starting Parallel Jobs)MPICH1提供了mpirun命令来启动MPICH1任务。
MPI-2论坛推荐一个标准的、可移植为此用途的命令叫做mpiexec。
MPICH2与某些扩充一起实现了mpiexec及其所有的标准的参数(arguments)。
关于mpiexec的标准参数参见5.1节,扩充,尤其是对进程管理系统的扩充,参见第5节的各个子节。
MPICH2还提供一个mpirun命令简单地向前兼容,但是MPICH2的mpirun命令不提供mpiexec的,或者MPICH1的mpirun的全部选项。
2.3 Fortran中的命令行参数(Arguments).MPICH1(更准确地说是MPICH1的mpirun)需要访问所有应用程序中的命令行参数,包括Fortran的,MPICH1的配置,做出了某些努力来找到包含iargc 和getarg的正确版本的库,及链接到MPI程序的mpif77脚本的那些库。
由于MPICH2不要求访问程序的命令行参数,因此这些函数是可选的,配置对它们也就没什么特别的了。
如果在应用程序中你需要它们,那么你不得不确保它们在你所使用的Fortran环境中可用。
3 快速开始(Quick Start)要使用MPICH2,你不得不知道MPICH2安装的目录。
(或者是你自己安装到那,或者是系统管理员安装的。
这种情况下,或许可以查查/usr/local。
如果MPICH2还没安装,那么参见MPICH2安装指南。
)我们建议你放在你安装目录的bin子目录。
这样你可以方便地访问各种各样的MPICH2命令来编译、连接及运行你的应用程序。
这个目录中的其他命令管理运行时环境及执行工具。
或许你首先要运行的命令之一是mpich2version,用来查看你所使用的MPICH2的准确版本和配置。
本手册的某些材料正是依赖于你所使用的MPICH2版本及安装时如何配置的。
现在你应该能够运行MPI程序了。
让我们假定MPICH2安装的目录是/home/you/mpich2-installed,你已经把你的目录添加到路径中,对于tcsh 和csh用setenv PATH /home/you/mpich2-installed/bin:$PATH,或对于bash或sh,用export PATH=/home/you/mpich2-installed/bin:$PATH。
然后,运行一个MPI程序,即使是只在一台机器上,你可以:mpd &cd /home/you/mpich2-installed/examplesmpiexec -n 3 cpimpdallexit这些命令的细节下面提供,但是,如果在这你可以成功地执行它们,那么你就正确地安装了MPICH2,已经运行了一个MPI程序。
编译及链接你的程序,一种方便的方式是用使用编译MPICH2的相同编译器的脚本。
对于C, C++, Fortran 77和Fortran90程序,这些脚本分别是mpicc,mpicxx, mpif77,和mpif90。
如果你缺少这些命令的任何一个,那么意味着MPICH2配置的不支持那类特定的语言。
4 编译与连接(COMPILING AND LINKING 4)4.1 指定编译器(Specifying Compilers)你不需要使用MPICH2建立时相同的编译器,但是并不是所有的编译器都是兼容的。
你也可以指定建立MPICH2自身的编译器,如mpich2version所报告的,只要按前面的节用来编译与连接命令。
环境变量MPICH CC, MPICH CXX, MPICH F77和MPICH F90分别用来指定选择C, C++, Fortran 77和Fortran 90编译器。
4.2 共享库(Shared Libraries)当前的共享库只在Linux 和Mac OSX上测试过,还有限制。
如何编译建立MPICH2作为共享库,参见安装指南。
如果共享库已经建立了,那么当你的程序需要任何MPICH2编译脚本时你可以自动得到它们。
4.3 C++的特殊问题(Special Issues for C++)某些用户也许会得到如下的错误信息:SEEK_SET is #defined but must not be for the C++ binding of MPIThe problem is that both stdio.h and the MPI C++ interface use SEEK SET,SEEK CUR, and SEEK END.这实际上是MPI-2标准的一个缺陷。
你可以在mpi.h 被包含之前尝试添加:#undef SEEK_SET#undef SEEK_END#undef SEEK_CUR或者添加定义:-DMPICH_IGNORE_CXX_SEEK到命令行(这会使得SEEK SET的MPI版本被忽略)。
4.4 Fortran的特殊问题(Special Issues for Fortran)MPICH2对Fortran程序提供两种支持。
对于Fortran77程序员来说,文件mpif.h提供了诸如MPI COMM WORLD这些MPI常量的定义。
Fortran90程序员应该使用MPI模块;这提供了所有的MPI函数定义以及接口定义。
然而,这个MPI模块不提供完全的Fortran90支持;尤其是,对于子程序的接口,诸如MPI Send,―选择‖的参数就不提供。
5 用MPIEXEC 5运行程序(Running Programs with mpiexec)如果你一直使用原来的MPICH,或者任何数目的其他MPI实现,那么你或许会把mpirun作为启动你的MPI程序的一种方式。
MPI-2标准叙述建议mpiexec为运行MPI程序的推荐方式,还提供了某些扩充。
MPICH2提供mpirun时为了向后兼容一些已有的脚本,但是不支持某些或mpiexec那么多选项,或者全部对MPICH1的mpirun的调用。
5.1 标准的mpiexec(Standard mpiexec)下面我们描述标准的mpiexec参数,根据MPI-2标准[1]。
启动一个MPI任务(job)的命令最简单的形式是mpiexec -n 32 a.out启动可执行的a.out,用32进程(在MPI程序内提供一个大小为32 的MPI COMMWORLD)。
其他支持的选项为,要指定运行的主机,搜索执行的路径,工作目录及指定进程数字更一般的方式。
对进程多项设置,对于其参数,可以运行不同的可执行文件和不同的值。
用―:‖隔开进程,如:mpiexec -n 1 -host loginnode master : -n 32 -host smp slave-configfile参数允许在文件中分别的行里指定一个包含进程系列规格说明的文件。
这就使得mpiexec不必用很长的命令行。
(参见,[2]的353页)。
还可以启动一个MPI任务进程(用一个MPI COMMWORLD,其大小为1),而不用mpiexec。
在它调用MPIInit,时,这个进程就成为一个MPI进程,然后它可以调用其他的MPI函数。
目前,MPICH2还不完全支持从不是用mpiexec启动的进程调用MPI-2的动态进程子程序。
(如,MPI Comm spawn 或MPI Comm accep)。
5.2 对所有进程管理环境的扩充(Extensions for All Process Management Environments)有些mpiexec参数是特定于某些特定的通讯子系统(―devices‖)或者进程管理环境的(―processmanagers‖)。
我们的打算是尽可能使得所有的参数跨越设备与进程管理器形式一致。