当前位置:文档之家› MPICH2用户指南译文

MPICH2用户指南译文

MPICH2用户指南译文
MPICH2用户指南译文

MPICH2用户指南

(MPICH2 User‘s Guide)

版本(Version )1.0.8

数学与计算机科学部(Mathematics and Computer Science Division)

阿贡国家实验室(Argonne National Laboratory)

William Gropp

Ewing Lusk

David Ashton

Pavan Balaji

Darius Buntinas

Ralph Butler

Anthony Chan

David Goodell

Jayesh Krishna

Guillaume Mercier

Rob Ross

Rajeev Thakur

Brian Toonen

2008年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/examples

mpiexec -n 3 cpi

mpdallexit

这些命令的细节下面提供,但是,如果在这你可以成功地执行它们,那么你就正确地安装了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 MPI

The 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‖)。我们的打算是尽可能使得所有的参数跨越设备与进程管理器形式一致。暂时,我们还是分别写进文档。

5.3 MPD 进程管理环境的扩充(Extensions for the MPD Process Management Environment)

MPICH2提供了一些进程管理系统。默认的叫做MPD。MPD从mpiexec提供一些对标准的扩充。

5.3.1 MPD基本的mpiexec参数(Basic mpiexec arguments for MPD)

MPICH2默认的配置选择了MPD进程管理器和进程管理接口―简单的‖实现。MPD提供了支持5.1节中叙述的标准参数也支持本节叙述的其他参数的一个mpiexec版本。MPD 还提供一些查询MPD进程管理环境及与它启动的任务交互的命令,运行mpiexec之前,运行时环境必须先建立。对于MPD,守护进程必须运行。关于如何运行及管理MPD守护进程,参见6.1。

我们假定MPD环已经启动了,安装的bin目录在你的路径之内,那么你可以:mpdtrace

它会输出一个你可以运行MPI程序的节点列表。现在你可以准备用mpiexec运行一个程序了。让我们假定,你编译且链接了程序cpi(在安装目录/examples下,这个目录在你的路径PATH之内)。否则是你当前工作目录加?.‘(点)要在你的路径PATH中。最简单的是

mpiexec -n 5 cpi

在5个节点上运行cpi。进程管理系统(诸如MPD)会选择运行它们的机器,cpi会告诉你每个在哪运行。

你也可以用mpiexec运行非-MPI诚信。要确保所有的机器都起来了随时可用,有时这是很有用的。可用的例子还有:

mpiexec -n 10 hostname

mpiexec -n 10 printenv

5.3.2 MPD的mpiexec其他命令行参数(Other Command-Line Arguments to mpiexec for MPD)

MPI-2标准规定参数的句法和语义-n,-path,-wdir, -host, -file, -configfile,和-soft。所有这些现在都为MPD的mpiexec实现了。这些的每个我们称之为―本地(local)‖选项,因为其范围是-configfile文件所制定的分号之间,或者单独的行所叙述的进程系列中的进程。我们这样增加了某些本地扩展和某些在可以应用到mpiexec所启动的所有过程的―全局的‖的扩展。

MPI-2标准提供一种方式把不同的参数传递给不同的应用程序进程,但是不提供传递环境变量的方式。MPICH2提供了以种扩展,支持环境变量。本地参数-env为一系列进程实现这点。即

mpiexec -n 1 -env FOO BAR a.out : -n 2 -env BAZZ FAZZ b.out

在第一个进程上使得BAR为赋予环境变量FOO 值,运行可执行的a.out,在第二个两个进程上给环境变量BAZZ的值为FAZZ,运行可执行的b.out。要设置一个环境变量二不赋予其值,用‘ ‘如上面的命令行。

全局参数-genv可以把相同的环境变量传递给所有进程。即,

mpiexec -genv FOO BAR -n 2 a.out : -n 4 b.out

在全部6个进程上使得环境变量FOO的值为BAR。如果出现-genv,它必须出现在第一组。如果-genv 和-env二者都用,那么-env被添加到指定的环境,或者由-genv变量添加。如果只有一套进程(没―:‖),那么-genv和-env是等价的。

局部参数-envall是分析mpiexec运行的整个环境的简写。它的全局版本是-genvall。这个全局版本是隐含存在的。要想不传递环境变量用-envnone 和-genvnone。所以,如,只设置环境变量FOO而不设置其他的,不管当前的环境,你可以用:

mpiexec -genvnone -env FOO BAR -n 50 a.out

对于MPD,我们现在对PATH环境变量提出个例外,它总是通过的。添加这个例外使得在默认情况下显式传递这个变量就不必要了。从环境变量复制其值的环境变量名的列表可以用-envlist(和-genvlist)参数分别列出;例如,

mpiexec -genvnone -envlist HOME,LD_LIBRARY_PATH -n 50 a.out

给mpiexec运行的环境中,在a.out进程的环境中设置HOME 和LD LIBRARY PATH。在这种情况下,你不能在环境变量名种用逗号,当然了尽管它们在值中式允许的。

有些扩充的参数只有全局版本。它们是-l,为stdout和stderr提供层级标签。对于进程,这些有点模糊,但显式地产生还是有用的。

-usize setsthe ―universe size‖ that is retrieved by the MPI attribute

-bnr用于你想要运行用ch p4mpd或MPICH1中的myrinet设备已经编译并链接的可执行文件。这种情况下MPD进程管理器提供向后兼容。

-machinefile可用于指定有关机器集每个的信息。这信息也许包含当执行用户程序时在每台主机上要运行的进程数。例如,假定一个命名为mf机器的文件包含:# comment line

hosta

hostb:2

hostc ifhn=hostc-gige

hostd:4 ifhn=hostd-gige

除了指定主机及要在每台主机上运行的进程数之外,machinefile表明hostc 和hostd上要运行的进程对于MPI通讯应该分别用gige接口。(ifhn表示―接口主机名(interface hostname)‖,应该设置为一个轮流的的主机名,那机器用来指定通讯接口.)这个接口信息使得MPI实现在连接时选择轮流的主机名。当轮流的主机指定一个特定的接口时,MPICH 通讯跨越接口漫游。

你可以像下面这样使用这个machinefile:

mpiexec -machinefile mf -n 7 p0

进程层级(rank)0表示运行在hosta上,1和2表示在hostb上,3表示在hostc上,4-6表示在hostd上。注意,这个文件规定的信息到8个层级,只用了7个。这很好了。但是,如果我们已经用过了―-n 9‖,那么会出现一个错误。这个文件就不用为循环进行的联合池(pool)了,进程不会映射到该文件指定次序的主机了。

更复杂的命令行的例子可以是:

mpiexec -l -machinefile mf -n 3 p1 : -n 2 p2 : -n 2 p3

这里层级0-2全部运行程序p1和可执行的文件,放在层级0主机hosta上,层级1-2在hostb上。类似地,3-4运行p2,可执行文件分别在hostc 和hostd上。层级5-6运行在hostd上,执行p3。

可用于指引mpiexec的stdin到并行任务的特定的进程。例如:

mpiexec -s all -n 5 a.out

指引mpiexec的stdin到全部的5个进程。

mpiexec -s 4 -n 5 a.out

指引stdin只到层级4的进程,而

mpiexec -s 1,3 -n 5 a.out

发送它到进程1和3,而

mpiexec -s 0-3 -n 5 a.out

发送stdin到进程0、1、2和3.

默认地,如果没-s 指定,那么发送mpiexec的stdin到进程0.

通过mpiexec的-stdin重定向到各个MPI进程,主要预期地是用于交互的。因为在各个进程缓存大量的数据的复杂性,可能还没有读取,所以大量数据到mpiexec的stdin的重定向是不鼓励的,也许会引起不可预期的结果。即,

mpiexec -s all -n 5 a.out < bigfile

如果bigfile大于几行长度就不应该用。让进程之一打开这个文件,读取它。MPI-IO 函数对此用途可能是有用的。

―:‖可选地用于全局及通常参数集之间,例如

mpiexec -l -n 1 -host host1 pgm1 : -n 4 -host host2 pgm2

等价于:

mpiexec -l : -n 1 -host host1 pgm1 : -n 4 -host host2 pgm2

这个选项意味着,全局参数可以出现在用来替代长命令行时-configfile指定的文件的单独行中。

5.3.3 对于MPD影响mpiexec的环境变量(Environment Variables Affecting mpiexec for MPD)

少数环境变量影响mpiexec的行为。

MPIEXEC TIMEOUT,这个环境变量的值是任务允许运行的最大秒数。到时间时,任务中止。

MPIEXEC PORT RANGE 如果定义了这个环境变量,那么MPD系统将在这个范围内严格限制连接到各个进程的端口的用法。如果这个变量没有赋值,而

MPICH PORT RANGE 赋值了,那么它将使用由

MPICH PORT RANGE为其指定的端口范围。否则,它会使用系统赋予的任何端口。端口范围用整数由一个冒号分开。

MPIEXEC BNR如果这个环境变量定义了(其值,如果有的话,当前无意义),那么MPD 会采取向后兼容的模式,支持原来的MPICH的BNR接口(如,1.2.0– 1.2.7p1版本),而不是其本地的PMI接口,作为应用程序进程与进程管理系统交互的一种方式。

MPD CON EXT 给mpiexec所用的Unix套接字名添加个字符串,以便能找到本地的mpd。这就允许人们同时运行多个mpd环。

5.4 SMPD进程管理环境的扩充(Extensions for SMPD Process Management Environment)

SMPD是个轮询的进程管理器,可运行在Unix 和Windows上。如果二进制格式匹配(大/小尾及C类型– int, long, void*等等)的话,它可以跨平台地启动任务。

5.4.1 SMPD的mpiexec参数(mpiexec arguments for SMPD)

smpd 的mpiexec接受标准的MPI-2选项。执行mpiexec

或者

mpiexec -help2

可以打印出选项的用法。典型的用法是:

mpiexec -n 10 myapp.exe

mpiexec的全部选项:

-n x

-np x

启动x进程。

-localonly x

-np x -localonly

在本地机器上启动x进程。

-machinefile filename

用一个文件列出要在其上启动的机器名。

-host hostname

启动指定的主机。

-hosts n host1 host2 ... hostn

-hosts n host1 m1 host2 m2 ... hostn mn

启动指定的主机。用第2个版本号

processes = m1 + m2 + ... + mn

-dir drive:\my\working\directory

-wdir /my/working/directory

用特定的工作目录(-dir 和-wdir是等价的)启动主机。

-env var val

启动进程之前设置环境变量.

-exitcodes

每个进程退出时打印出进程退出代码。

-noprompt

阻止mpiexec提示用户证书。打印出错信息,mpiexec退出。

-localroot

如果主机是本地的,从mpiexec直接启动根进程。(这就允许根进程创建窗口并可以调试)。

-port port

-p port

指定smpd监听的端口。

-phrase passphrase

指定smpd与其认证连接的安全通行证。

-smpdfile filename

指定smpd选项包括安全通行证保存的文件(仅unix选项)。

-path search path

可执行文件搜索路径,用分号隔开。

-timeout seconds

任务超时。

Windows 特定选项:

-map drive:\\host\share

映射一个驱动器到所有的节点上,这个映射在进程退出时删除。

-logon

提示用户账号及密码。

-pwdfile filename

从指定的文件读取账号和密码。账号在第一行,密码在第二行。

-nopopup debug

如果进程崩溃,禁止弹出对话框。

-priority class[:level]

设置进程启动代码的优先类和选项级别。

= idle, below, normal, above, high

level = 0,1,2,3,4,5 = idle, lowest, below, normal, above, highest

默认的是-priority 2:3

-register

加密一个用户名和密码到Windows注册表。

-remove

从Windows注册表删除加密的身份证明。

-validate [-host hostname]

为当前或指定主机验证加密的身份证明。

-delegate

用无密码委托启动进程。

-impersonate

用无密码认证启动进程。

-plaintext

不在线上加密。

5.5gforker进程管理环境扩充(Extensions for the gforker Process Management Environment)

gforker是个在单一机器上期的进程的进程管理系统,之所以这么叫,是因为MPI进程是从mpiexec简单地调用(forked)的。这个进程管理器支持使用MPI Comm spawn和动态进程子程序的程序,但是不支持从不是mpiexec启动的程序的动态子程序。gforker进程管理器主要是为了作为调试辅助的,因为它在单一节点或处理器上简化了MPI程序的开发与测试。

5.5.1 gforker的mpiexec参数(mpiexec arguments for gforker)

除了标准的mpiexec命令行参数之外,gforker的mpiexec支持下面的选项:-np 与标准的-n参数意义相同

-env 为由mpiexec开始的进程设置变量的值

-envnone 不传递环境变量(不同于用-env 或-genv参数指定的)给由mpiexec

运行的进程。

默认地,所有的环境变量都提供给每个MPI进程(理论的根据:最少使用户惊讶原则),用其当前值给由mpiexec运行的进程。

-genv -genv选项与其相应的-env版本意义相同,除了它们适用于所有的可执行文件之外,而不是当前的可执行文件(为此用分号隔开多个指定的可执行文件的句法)。

-genvnone 与-envnone一样,除了对所有的可执行文件之外。

-genvlist 与-envlist,一样,除了对所有的可执行文件之外。

-usize 为MPI UNIVERSE SIZE属性值指定返回值。

-l 用进程的层级标记出标准输出和标准错误信息(stdout 和stderr)

-maxtime 设置一个秒的时间限度。

-exitinfo 如果存在一个意外退出,提供每个进程退出有关原因的更多信息。

除了命令行参数之外,gforker的mpiexec还提供了一些环节变量,可以用来控制mpiexec的行为:

MPIEXEC TIMEOUT 以秒表示的mpiexec将结束的最大运行时间。

MPI 程序所占用时间比

MPIEXEC TIMEOUT.指定的值要长。

MPIEXEC UNIVERSE SIZE 设置范围(universe)大小。

MPIEXEC PORT RANGE 设置mpiexec用来与其启动的进程交互通讯的端口范围。这个设置的格式为::.。例如,要指定端口在10000 and10100之间,用10000:10100。

MPICH PORT RANGE 与MPIEXEC PORT RANGE意义相同,如果MPIEXEC PORT RANGE没设置使用。

MPIEXEC PREFIX DEFAULT如果这个环境变量设置了,那么输出到标准输出按进程的MPI COMMWORLD的层级加前缀,到标准错误输出的按层级和文本加前缀;二者都后跟角括号(v)。如果这个变量没设置,那么不加前缀。

MPIEXEC PREFIX STDOUT设置用于发送到标准输出的行的前缀。%d为MPI COMM WORLD中的层级替代,a %w为MPI任务中的涉及多个MPI COMMWORLD的MPI COMM WORLD表示替代。(如,MPI Comm spawn或者MPI Comm connect的)。

MPIEXEC PREFIX STDERR 与MPIEXEC PREFIX STDOUT 一样,但用于标准错误输出。

MPIEXEC STDOUTBUF 设置标准输出的缓冲模式。有效的值是NONE(无缓冲),

LINE(行缓冲)和BLOCK(字符块缓冲;块大小定义实现)。默认值是NONE。

MPIEXEC STDERRBUF 与MPIEXEC STDOUTBUF 一样,只是对标准错误输出。

5.6 remshell进程管理器环境的限制(Restrictions of the remshell Process Management Environment)..

remshell―进程管理器‖提供了利用安全shell命令(ssh)的mpiexec一个很简单的版本,用来在机器的集合上启动进程。由于这主要是为了诠释如何构造mpiexec的与其他进程管理器协同的一个版本,所以它没有实现本文档中描述的其他mpiexec程序的全部特征。尤其是,它忽略了对MPI程序控制环境变量的命令行部分。

它支持mpiexec的gforker版本所提供的标签输出同样的特征。但是这个版本的mpiexec完全可以像MPICH-1 中的chp4的mpirun那么用,在一个机器集合上来运行允许远程shell的程序。按机器名的一个文件应该包含可以在其上运行进程的机器名,每行一台机器。必须列出足够的机器来满足请求的进程数;如果必要的话,你可以列出同一机器名为多项。

对于更复杂的需要或者更快的启动代码,我们推荐使用mpd进程管理器。

5.7 SLURM 及PBS一起使用MPICH2(Using MPICH2 with SLURM and PBS)

MPICH2可以用于SLURM 和PBS两种环境。如果配置了SLURM,用SLURM提供的srun任务启动工具。对于PBS,MPICH2任务可以用两种方式启动:(i)用MPD,或者(ii)用OSC mpiexec。

5.7.1 PBS环境中的MPD(MPD in the PBS environment)

PBS指定分配在文件$PBSNODEFILE中一个特定任务的机器。但是,PBS所用的格式不同于MPD所用的格式。尤其是,PBS列出单一线上的每个节点;如果一个节点(n0)有两个进程,那么它被列出两次。另一方面,MPD使用一个标识符(ncpus)来描述一个节点所拥有多少处理器。因此,如果n0有两个处理器,那么它列出为n0:2。把节点文件转化为MPD格式的方式如下:

sort $PBSNODEFILE | uniq -C | awk ‘{ printf(‖%s:%s‖, $2, $1);}‘ >mpd.nodes

一旦PBS节点文件被转换之后,MPD就可以在PBS任务脚本之内,用mpdboot

和mpdallexit照常启动了。

mpdboot -f mpd.hosts -n [NUM NODES REQUESTED]

mpiexec -n [NUM PROCESSES] ./my test program

5.7.2 OSC mpiexec

俄亥俄超级计算机中心的Pete Wyckoff提供了一个轮询工具,叫做OSC mpiexec,在PBS系统上不用MPD启动MPICH2任务。关于这些更多信息可以在

https://www.doczj.com/doc/074623511.html,/?pw/mpiexec找到。

6 管理进程管理环境(Managing the Process Management Environment)

有些进程管理器提供给用户命令,可以用来与进程管理器交互,来控制人物。本节我们描述一些也许很有用的命令。

6.1 MPD

mpd启动mpd守护进程。

mpdboot在一些机器上启动一系列mpd。

mpdtrace列出所有在运行的MPD守护进程。-l 选项列出完整的主机名和mpd监听的端口。

mpdlistjobs列出mpd正在运行的任务。任务是mpd 由名字区分的,在那提交的名字和一个数字。mpdkilljob杀死由mpdlistjobs按名字返回的一个任务。mpdsigjob递交给命名任务一个信号。信号是用名字和数字指定的。

你可以用按键以通常的方式提供信号,其中mpiexec代表了整个应用程序。即,如果mpiexec后台运行在Unix的shell,那么你可以用^C(control-C)发送一个SIGINT给进程,或者用^Z (control-Z)全部挂起他们。一个可挂起的任务可以按通常的方式继续。

准确的参数格式可以通过传递任何MPD命令--help 或-h参数得到。更多细节参见mpich2顶层目录中的README,或者MPD目录mpich2/src/pm/mpd中的README文件。

7 调试(Debugging)

调试并行程序无疑很难。下面我们描述一些方法,其中某些完全取决于你所使用的MPICH2的版本。

7.1 gdb与mpiexec(gdb via mpiexec)

如果你使用MPD进程管理器,那么你可以对mpiexec用-gdb参数,来执行一个程序,每个进程控制在gdb后续调试器之下。-gdb选项有助于控制gdb的多个实例,通过对所有进程,或者对一个选择的进程发送stdin,标签并合并输出。当前的实现还有某些局限。例如,我们不支持设置你自己的提示。这是因为,我们捕获gdb的输出,在处理之前检查它,例如,合并一致的行。还有,我们在main开始处设置断点,来使得所有进程在开始时同步。因而,如果在main的第一个可执行行就设置,那么用户会有个重复的、不可用的断点。另外,尽可能的程度上,我们试图简单地传递用户输入给gdb ,让过程正常进行。

下面一个-gdb会话的脚本给出了这如何运转的机制。输入键被发送给所有进程,除非用―z‖ 命令特别地重定向。

ksl2% mpiexec -gdb -n 10 cpi

0-9: (gdb) l

0-9: 5 double f(double);

0-9: 6

0-9: 7 double f(double a)

0-9: 8 {

0-9: 9 return (4.0 / (1.0 + a*a));

0-9: 10 }

0-9: 11

0-9: 12 int main(int argc,char *argv[])

0-9: 13 {

0-9: 14 int done = 0, n, myid, numprocs, i;

0-9: (gdb)

0-9: 15 double PI25DT = 3.141592653589793238462643;

0-9: 16 double mypi, pi, h, sum, x;

0-9: 17 double startwtime = 0.0, endwtime;

0-9: 18 int namelen;

0-9: 19 char processor_name[MPI_MAX_PROCESSOR_NAME]; 0-9: 20

0-9: 21 MPI_Init(&argc,&argv);

0-9: 22 MPI_Comm_size(MPI_COMM_WORLD,&numprocs);

0-9: 23 MPI_Comm_rank(MPI_COMM_WORLD,&myid);

0-9: 24 MPI_Get_processor_name(processor_name,&namelen); 0-9: (gdb)

0-9: 25

0-9: 26 fprintf(stdout,"Process %d of %d is on %s\n",

0-9: 27 myid, numprocs, processor_name);

0-9: 28 fflush(stdout);

0-9: 29

0-9: 30 n = 10000; /* default # of rectangles */

0-9: 31 if (myid == 0)

0-9: 32 startwtime = MPI_Wtime();

0-9: 33

0-9: 34 MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);

0-9: (gdb) b 30

0-9: Breakpoint 2 at 0x4000000000002541:

file /home/lusk/mpich2/examples/cpi.c, line 30.

0-9: (gdb) r

0-9: Continuing.

0: Process 0 of 10 is on ksl2

1: Process 1 of 10 is on ksl2

2: Process 2 of 10 is on ksl2

3: Process 3 of 10 is on ksl2

4: Process 4 of 10 is on ksl2

5: Process 5 of 10 is on ksl2

6: Process 6 of 10 is on ksl2

7: Process 7 of 10 is on ksl2

8: Process 8 of 10 is on ksl2

9: Process 9 of 10 is on ksl2

0-9:

0-9: Breakpoint 2, main (argc=1, argv=0x60000fffffffb4b8)

0-9: at /home/lusk/mpich2/examples/cpi.c:30

0-9: 30 n = 10000; * default # of rectangles */

0-9: (gdb) n

0-9: 31 if (myid == 0)

0-9: (gdb) n

0: 32 startwtime = MPI_Wtime();

1-9: 34 MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD); 0-9: (gdb) z 0

0: (gdb) n

0: 34 MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD); 0: (gdb) z

0-9: (gdb) where

0-9: #0 main (argc=1, argv=0x60000fffffffb4b8)

0-9: at /home/lusk/mpich2/examples/cpi.c:34

0-9: (gdb) n

0-9: 36 h = 1.0 / (double) n;

0-9: (gdb)

0-9: 37 sum = 0.0;

0-9: (gdb)

0-9: 39 for (i = myid + 1; i <= n; i += numprocs)

0-9: (gdb)

0-9: 41 x = h * ((double)i - 0.5);

0-9: (gdb)

0-9: 42 sum += f(x);

0-9: (gdb)

0-9: 39 for (i = myid + 1; i <= n; i += numprocs)

0-9: (gdb)

0-9: 41 x = h * ((double)i - 0.5);

0-9: (gdb)

0-9: 42 sum += f(x);

0-9: (gdb)

7 DEBUGGING 22

0-9: 39 for (i = myid + 1; i <= n; i += numprocs)

0-9: (gdb)

0-9: 41 x = h * ((double)i - 0.5);

0-9: (gdb)

0-9: 42 sum += f(x);

0-9: (gdb)

0-9: 39 for (i = myid + 1; i <= n; i += numprocs)

0-9: (gdb)

0-9: 41 x = h * ((double)i - 0.5);

0-9: (gdb)

0-9: 42 sum += f(x);

0-9: (gdb)

0-9: 39 for (i = myid + 1; i <= n; i += numprocs)

0-9: (gdb)

0-9: 41 x = h * ((double)i - 0.5);

0-9: (gdb)

0-9: 42 sum += f(x);

0-9: (gdb)

0-9: 39 for (i = myid + 1; i <= n; i += numprocs)

0-9: (gdb)

0-9: 41 x = h * ((double)i - 0.5);

0-9: (gdb)

0-9: 42 sum += f(x);

0-9: (gdb) p sum

0: $1 = 19.999875951497799

1: $1 = 19.999867551672725

2: $1 = 19.999858751863549

3: $1 = 19.999849552071328

4: $1 = 19.999839952297158

5: $1 = 19.999829952542203

6: $1 = 19.999819552807658

7: $1 = 19.999808753094769

8: $1 = 19.999797553404832

9: $1 = 19.999785953739192

0-9: (gdb) c

0-9: Continuing.

0: pi is approximately 3.1415926544231256, Error is 0.0000000008333325 1-9:

1-9: Program exited normally.

1-9: (gdb) 0: wall clock time = 44.909412

0:

0: Program exited normally.

0: (gdb) q

0-9: MPIGDB ENDING

ksl2%

你可以附加到运行的任务,用

mpiexec -gdba

其中来自mpdlistjobs。

7.2 TotalView

MPICH2支持使用Etnus的TotalView调试器,只通过MPD进程管理器。如果MPICH2配置为允许用TotalView调试(参见安装指南的MPD配置一节),那么就可以用MPD通过给mpiexec加-tv参数调试一个MPI程序了。如,

mpiexec -tv -n 3 cpi

从TotalView你会得到一个弹出窗口,询问你是否要在停止的状态下启动任务。如果是这样,在TotalView窗口出现时,你也许会在源代码窗口中看到装配的代码,点击堆栈窗口(左上角)中的main,查看main函数的源代码。TotalView会显示程序(所有的进程)在对MPIInit调用处停下来了。当用TotalView使用上面启动序列时,MPICH2任务不执行TotalView就不能重新启动。在MPICH21.0.6或以后的,版本中TotalView可以对MPICH2如下地调用:

totalview python -a ?which mpiexec? -tvsu \

MPICH2任务在TotalView之内是完全可以重新启动的。

如果你有MPICH2的1.0.6或以后的版本,TotalView 8.1.0或更高版本,那么你可以使用一个叫直接用MPICH2启动的TotalView特征。调用TotalView如下:

totalview -a

然后选择Process(进程)/Startup Parameters (启动参数)命令。在后面的对话框中选择Parallel(并行)选项卡,选择MPICH2作为并行系统。

用Tasks(任务)字段设置任务数,并在Additional Starter Arguments(其他的启动参数)输入其他需要的mpiexec参数。

如果你想要能够用TotalView附加一个MPICH2任务,那么你必须在启动任务时,对mpiexec用-tvsu选项。

用这个选项会在MPI Init之内添加一个关卡,因而也许会稍微影响到启动性能。一旦所有的任务从MPIInit返回,它不会影响任务的运行。为了调试一个正在运行的MPICH2任务,你必须把TotalView附加到运行mpiexec脚本的Python的实例,而且不要有其他的Python脚本运行。如果你只有一个任务运行在你调用mpiexec的节点上,而没有其他的Python脚步运行,那么这个节点上会有3个Python实例运行。其中之一是那个节点上的MPICH2任务的父进程,一个是Python进程的父进程。其中没有哪个是你要附加到其上的Python实例--它们都是在运行的MPD脚本。第三个Python实例没有子进程,也不是一个Python进程的子进程。那是运行的mpiexec,也就是你想要附加的。

8 MPE

MPICH2有个与MPICH1包含的相同的MPE(多进程环境)工具。这些工具包含记录MPI程序执行的跟踪库和性能可视化的Jumpshot及SLOG工具,和一个MPI集合的数据类型检查库。这些MPE工具是默认地建立与安装的,不用额外的查询步骤应该就可用。使用MPE profiling库的最容易的方式是通过MPICH2编译器包装的mpicc,mpicxx, mpif77和mpif90提供的-mpe= switch。

8.1 MPI日志(MPI Logging)

MPE提供自动的MPI登录。例如,要查看一个程序的MPI通讯类型(pattern),fpilog.f,可以简单地如下链接到源文件:

mpif90 -mpe=mpilog -o fpilog fpilog.f

-mpe=mpilog选项会链接合适的MPE profiling库。然后通过mpiexec运行的程序会把结果记录到工作目录内一个日志文件logfile,未知的clog2。最后的步骤是通过Jumpshot转换及查看logfile。

jumpshot Unknown.clog2

8.2 用户自定义登录(User-defined logging)

除了使用预定义的MPE日志功能记录MPI调用之外,MPE记录日志调用还可以插入到用户的MPI程序,定义并吧状态记录到日志。这些状态叫用户自定义状态。状态可以嵌套,允许你定义一个描述一个包含几个MPI调用的用户子程序,既显示用户自定义状态,又显示包含在其中的MPI操作。

插入用户自定义状态典型的方式如下:

? 从MPE 日志库获得句柄。MPELog获得日志状态eventIDs(),必须用来获得唯一的事件ID(MPE日志句柄)。这是很重要的,如果你正在编写一个MPE系统的使用MPE 日志子程序的库。记录下eventID的痕迹不是个好主意,因为它会引起eventID冲突,因此实践中并不支持。

? 设置已记录日志的状态特征:MPE描述state() 设置状态的名称和颜色。

?把已记录的状态记录到日志:MPE Log 的event()被调用两次,记录用户自定义状态。

1 更老的MPE库提供MPE Log,获得事件number()还是被支持,但是一直有异议。用户强烈争执要使用MPE Log获得eventIDs()。

下面是个使用上面所概述的第三步的简单的例子。

int eventID_begin, eventID_end;

...

MPE_Log_get_state_eventIDs( &eventID_begin, &eventID_end );

...

MPE_Describe_state( eventID_begin, eventID_end,

"Multiplication", "red" );

...

MyAmult( Matrix m, Vector v )

{

/* Log the start event of the red "Multiplication" state */

MPE_Log_event( eventID_begin, 0, NULL );

... Amult code, including MPI calls ...

/* Log the end event of the red "Multiplication" state */

MPE_Log_event( eventID_end, 0, NULL );

}

由这段代码生成的logfile会使得MPI子程序在MyAmult()之内嵌套。

除了用户自定义的状态之外,MPE2还提供对用户自定义事件的支持,这自定义事件可以通过MPELog获得唯一的eventID()和MPE描述的event()而定义。更得细节,例如,参见cpilog.c。

8.3 MPI检查(MPI Checking)

要通过如下地连接源代码文件验证在一个程序中所有的MPI的合作调用:mpif90 -mpe=mpicheck -o wrong_reals wrong_reals.f

运行改程序会有下面的输出:

> mpiexec -n 4 wrong_reals

启动MPI的合作与数据类型检查!

Process 3 of 4 is alive (4个进程的3个是活动的)。

Backtrace of the callstack at rank 3: (callstack的Backtrace运行在层次3:)

At [0]: wrong_reals(CollChk_err_han+0xb9)[0x8055a09]

At [1]: wrong_reals(CollChk_dtype_scatter+0xbf)[0x8057bff]

At [2]: wrong_reals(CollChk_dtype_bcast+0x3d)[0x8057ccd]

At [3]: wrong_reals(MPI_Bcast+0x6c)[0x80554bc]

At [4]: wrong_reals(mpi_bcast_+0x35)[0x80529b5]

At [5]: wrong_reals(MAIN__+0x17b)[0x805264f]

At [6]: wrong_reals(main+0x27)[0x80dd187]

At [7]: /lib/libc.so.6(__libc_start_main+0xdc)[0x9a34e4]

At [8]: wrong_reals[0x8052451]

[cli_3]: aborting job:

Fatal error in MPI_Comm_call_errhandler:

CollectiveChecking: BCAST (Rank 3) --> Inconsistent datatype signatures

detected between rank 3 and rank 0. (在层级3和层级9之间检测到不一致的数据类型签名)

The errormessage here shows that the MPI Bcast has been used with inconsistent

datatype inthe program wrong reals.f. (这里的错误信息表示,MPI Bcast在程序中使用了不一致的数据类型)

8.4 MPE 选项(MPE options)

通过MPICH2编译器包装而可用的其他MPE profiling选项有:

-mpe=mpilog : 自动的MPI 和MPE用户自定义状态日志。

This links against -llmpe -lmpe.

-mpe=mpitrace : 用printf的Trace MPI 程序。

This links against -ltmpe.

-mpe=mpianim : 实时地激活(Animate)MPI程序。

This links against -lampe -lmpe.

-mpe=mpicheck : 用合作&数据类型检查MPI程序。

Checking library(检查库). This links against -lmpe_collchk.

-mpe=graphics : 与X11一起使用MPE图形子程序。

This links against -lmpe .

-mpe=log : MPE user-defined states logging.

This links against -lmpe.

-mpe=nolog : Nullify MPE user-defined states logging.

This links against -lmpe_null.

-mpe=help : Print the help page.

如何使用MPE profiling工具更多信息,参见mpich2/src/mpe2/README。

9 MPICH2提供的其他工具(Other Tools Provided with MPICH2)

MPICH2还包含对于MPI-1 和MPI-2功能的测试套件;这个套件可以在

mpich2/test/mpi源代码目录找到,可以用命令行make testing运行。这个测试套件应该可以与任何MPI实现运行起来,不只MPICH2。

10 Windows下的MPICH2(MPICH2 under Windows)

10.1 目录(Directories)

MPICH2默认的安装在C:\ProgramFiles\MPICH2。安装目录下有3个子目录:include, bin和lib。include 和lib目录包含编译MPI应用程序必要的头文件和库。bin目录包含进程管理器,smpd.exe,和MPI任务启动器mpiexec.exe。实现MPICH2的dll被复制到Windows的system32目录。

10.2 编译(Compiling)

lib目录中的库是用MS Visual C++ .NET 2003和Intel Fortran 8.1编译的。这些编译器和其他的可以与MS.lib文件链接的,都可以用来创建用户应用程序。cygwin的gcc 和

MPI安装与运行报告

MPI 安装于运行报告 本机运行环境: 机器型号:联想G450 处理器:Pentium(R)Dual-Core CPU T4200 @ 2.00GHz 运行内存 (RAM):2GB 操作系统:Windows 7(32 位) 程序开发环境:Visual Studio 2008 MPI 版本: mpich2-1.3.2p1-win-ia32 安装程序 详细安装步骤: 1、运行mpich2-1.3.2p1-win-ia32.msi。 安装过程中,会要求设置一个passphrase我的机器上默认的passphrase是beHappy,很有意思的密码。设置这个东西很重要,一定要记住;下面会说到为什么。 2、安装完之后,不知道下一步怎么进行了。打开刚才安装的MPICH2 的快捷方式目录,发现了一个README文件。打开之后,发现了MPICH2的使用方法介绍,于是按照其中的指示,我进行了第一个MPI 并行程序的编写。 我使用的是VC++2008首先创建一个新的工程,取名为MPITes。 添加MPI 库的支持: 按照README中的指导,应该首先将MPI的头文件目录包含到项目中去。结果在项目属性中找了半天,也没有找到添加头文件目录的位置,只找到了包含库文件的位置,我安装MPICH2的目录为D:\Program Files\MPICH2将MPICH2的库文件添加到如下面图1所示的位置即可。 最后才反应过来,这个工程还是空的,没有任何文件,可能跟这个有关系吧。 于是,马上新建了一个Cpp文件main.cpp,将老师PPT中的例子程序拷贝进去。

图1 果然,新建了这个cpp文件之后,项目属性中多出了C/C++这样一项, 于是,就可以在其中设置包含文件的目录了,相应的配置如下面图2所示 图2 设置好这些文件之后,编译程序,结果在连接的时候报错,类似于 main.obj : error LNK2019:无法解析的外部符号_MPI_Finalize,该符号在函数_main中被引用”这样的错误出现了六个。再看READM文档,发现了这样? 句话:

【优质】航海英语阅读翻译+答案

Passage 3-01 Labour should be ordered by 0900 hrs for 2nd shift (1500 to 2300 hrs) on same day and by 1300 hrs for 1st shift (0700 to 1500 hrs) for next day. By1100 hrs, for 3rd shift (2300 to 0500 hrs) in same day. Under normal circumstances, no work is performed during meal hours 1100 to 1200 hrs and 1830 to 1930 hrs. unless the ship is classified as a key vessel or the agent orders work during the meal hours. 劳工应责令0900小时第二轮班同一天(1500至2300年时)小时和1300第一班的第二天(0700至1500小时)小时。 By1100小时,第三转变同一天(2300至0500小时)。 在正常情况下,没有工作是执行在用膳时间1100至1200年和1830年至1930年小时小时。除非该船舶被列为重点船舶或者其代理人的订单时,才会在用餐时间的工作。 C 001. If you want to order labour in this port for the third shift in same day, the order should be made by ________ .如果你想在这个港同日第三班劳动,顺序应该是在… A. any time任意时间 B. 0900 hours C. 1100 hours D. 1300 hours B 002.________is performed during meal hours under usual circumstances. 正常情况下,…会被安排在用餐时间工作 A. Cargo work货物装卸 B. No cargo work不进行货物装卸 C. Ordering work by Agent代理所下的订单工作 D. loading and discharging 装卸 A 003. Loading and discharging can be performed during meal hours _____ A. if the ship is classified as a key vessel 该船为重要船只 B. if agent orders work beforehand 代理预先有所要求 C. under normal circumstances 在正常情况下 D. either A or B A或者B C 004. What does the word “key” mean ________? A. laden满载的 B. small小的 C. pivotal重要的 D. big大的 Passage 3-02 Before arrival in the United Kingdom, the master will have informed his owners or agents of the approximate time of the vessel's arrival at the pilot station for the port of destination. The vessel should be flying her ensign and also her signal letters and the requisite pilot signal when approaching the pilot station. The international signals, as well as any local port signals, can be found in the Sailing Directions, which is also known as the "Pilot Book" When a pilot is required most ports now require due notice of the vessel's ETA to be sent in by radio. However, this does not relieve the ship's obligation to display the pilot signal ("G" by any of the methods of signaling ) until the pilot is aboard when "H" flag will be flown. If the master or first mate of the vessel has a pilotage certificate for the district then the above is unnecessary, in such case the pilot flag (white and red horizontal halves, as on the pilot vessel) will be flown. 在到达英国之前,船长会在引航站通知他的业主或代理到达目的港的大致时间。船舶应该在靠近引航站时升起船旗和她的信号字以及必要的控制信号。国际信号,以及本地港口的任何信号,都可以在航路指南也叫做水路指南的书中找到。大多数港口现在需要引航员通过无线电适时通知其船只的预计到达时间。但是,只有当引航员在甲板上升起H旗才算是免除船舶显示控制信号的义务(“G“的通过对信号的方法之一)。如果该船只的船长或大副有一个该区的引航证,则不需要进行上述行为。在这种情况下,将需升起引航旗。 B 005. While the pilot is on ship, ________should be displayed on the top of the ship mast. 当引航员在船上,…需要展示在船桅顶端 (1) "G" flag G旗(2) "H" flag H旗 A. only (1) 只有(1) B. only (2) 只有(2) C. both (1) and (2) (1)以及(2) D. (1) plus (2) (1)加上(2) A 006. What's the meaning of the "ETA"________ ETA的意思是…. A. Estimated time of Arrival 预计到达时间

MPICH2在Windows环境下Visual_Studio_2010的环境搭建

MPICH2在Windows系统Visual Studio 2010的环境搭建 本机运行环境: 机器型号:联想G450 处理器:Pentium(R)Dual-Core CPU T4200 @ 2.00GHz 运行内存(RAM):2GB 操作系统:Windows 7(32位) 程序开发环境:Visual Studio 2008 MPI版本: mpich2-1.3.2p1-win-ia32安装程序 MPI的编译和运行 对于简单的程序,可以使用专门的编译命令。对于大的项目,最好使用标准的Makefile。MPICH提供的编译命令有mpicc和mpif77,它们分别是C和Fortran的编译命令: mpicc -o first first.c mpif77 -o first firstf.f 对于编译得到的目标程序,运行的命令为: mpirun –arch xxx –np yyy first 其中xxx为machines.,yyy为申请的进程数目。 MPICH的安装和配置 文中使用的MPICH2安装文件是mpich2-1.4-win-ia32 (https://www.doczj.com/doc/074623511.html,/mpi/mpich),在Windows下安装MPICH2比较简单,但是要有Microsoft .NET Framework的支持。安装基本上只要单击“Next”即可。在安装过程中会提示输入进程管理器的密码,这个密码被用来访问所有的程序,这里使用的密码为admin。如果是多台机器执行mpi,那么这多台机器上必须配置相同的mpi用户,就是新用户的用户名和密码必须相同。

航海英语2580题库中英文对照学习完整翻译版

大连海事大学英语2580题库中英文对照学习完整版 [1]______, as the chemical extinguisher agent, should be used for an electric fire. A. dry chemical or foam B. foam or soda acid C. carbon dioxide or foam D. carbon dioxide or dry chemical KEY: D二氧化碳或干粉灭火器作为化学灭火器,用于扑灭电器火灾。 [2]______: A room on or near the bridge provided with the necessary fittings and furniture for the handling and stowage of charts and where the chronometers are placed. A. Captain’s cabin B. Chief Officer’s locker C. Chartroom D. Pilot’s cabin KEY: C在驾驶台或附近提供必要的装卸设备或用具和海图的存放和天文钟布置的房间叫做海图室。 [3]______:The main center-line structural member, running fore and aft along the bottom of a ship, sometimes referred to as the backbone. A. Frame B. Deckbeam C. Stringer D. Keel KEY: D在船舶底部沿首尾向铺设有时提及当做主骨架的主要首尾结构是龙骨。 [4]______:the vertical distance measured on the vessel’s side amidships from the load water line to the upper side of the freeboard deck or a point corresponding to it. A. Buoyancy B. Freeboard C. Draft D. Displacement KEY: B船中部从载重水线垂直测量到干舷甲板上边缘或相应的点的距离叫干舷。 [5]______20 targets can be tracked at one time. When maximum tracking capacity is reached, no further acquisitions are possible. A. As many as B. So many as C. As much as D. As more as KEY: A一次可以获取多达20个物标,当跟踪能力达到最大时候,就不再录取了。 [6]______amplify charted detail and contain information needed for safe navigation. A. Admiralty Sailing Directions B. Admiralty List of Lights C. Admiralty List of Signals D. Admiralty Notices to Mariners KEY: A英版航路指南详细描述海图的细节和安全航行所包含的信息。 [7]______are published for the correction of Admiralty Charts. A. Admiralty Sailing Directions B. Admiralty List of Lights C. Mariner’s Handbook D. Admiralty Notices to Mariners KEY: D英版航海通告出版是为了英版海图的改正。 [8]______are to be used for dunnage if you load rice. A. wooden planks B. rush mats C. steel bars D. wooden planks and rush mats KEY: D木板和席子被用来做垫舱料,如果你装载大米。 [9]______at 53N3 127E4 moving ely 12kts with cold front from center passing 51N3 126E1 to 51N2 125E4 and warm front from 46N1 128E2 passing 40N2 125E2. A. Low 1002HPA B. Low 1045 HPA C. High 1002 HPA D. High 1045 HPA KEY: A低气压1002百帕,位置53N 127E4向东12节速度移动,伴有冷锋中心经51N3 126E1移至51N2 125E4,伴有暖锋从46N1 128E2 经过40N2 125E2位置。 [10]______causing strong winds and rough sea north west Bay of Biscay. A. Strong low pressure B. Strong high pressure C. Steep pressure gradient D. Steep gradient pressure KEY: C强气压梯度导致了比斯开湾西北的强风和狂狼。 [11]______chart 3994, positions read from this chart should be shifted 0.03 minutes Northward. A. To consider B. To check C. To examine D. To agree with KEY: D为了与3994号海图一致,从这张海图上读出的位置应该向北移动0.03分的距离。[12]______is a full nautical record of a ship’s voyage, written up at the end of each watch by the officer of the watch. A. Sea Protest B. Deck Log C. Accident Report D. Seaman’s Book KEY: B航海日志全面记录了航次的情况,由值班驾驶员在每次值班结束后详细填写记录。 [13]______is not a process of weathering of the oil spilled in the sea water. A. Biodegradation B. Dissolution C. Cleaning up by crew with skimmers D. Oxidation including photooxidation KEY: C船员用浮油刮集船清扫不是一个油溢入海水中的风化过程。 [14]______is not a process of weathering of the oil spilled in the sea water. A. Emulsification B. Sedimentation / Sinking C. Oxidation including photooxidation D. Burning organized by RCC KEY: D由RCC(海上搜救协调中心)组织的燃烧不是一个油溢入海水中的风化过程。 [15]______ is not a process of weathering of the oil spilled in the sea water.

实验3安装MPICH

实验3 安装MPICH 准备知识(自学) 一、Linux命令及脚本文件 目的与要求:使学生掌握Linux基本命令的使用;学会编写简单的脚本文件。 主要内容及提示: 1.Linux基本命令 1.1帮助 所有的Linux命令及C,MPI函数的使用说明都可以通过联机帮助获得。 man 〈命令|C语言函数名|MPI函数名〉 〈命令名〉—help 1.2 文件、目录、磁盘操作命令 ls 查看目录中的内容,常用的参数有–al pwd 显示当前工作目录 cd 改变当前工作目录,(.表示当前目录;..表示父目录;~表示当前用户的主目录) mkdir 建立子目录 cp 复制文件或子目录,可用参数 -R cat 显示文件内容 more 分屏输出(回车:上滚一行;空格:上滚一屏;q:退出) less 分屏输出(q键退出、还可以使用光标上下移动键) chmod 改变文件或目录的读(r)写(w)执行(x)属性(三组rwx中,第一组rwx 为该文件主的权限、第二组rwx为同一用户组中其他用户的权限、第三组rwx为其他用户的权限。例如:chmod 765 <文件名>,则文件的读写执行权限为rwxrw-r-x,即7=111B,6=110B,5=101B,这里B表示二进制) ln 建立文件链接,常用参数-s(相当于Windows中的“快捷方式”) rm 删除文件,删除子目录(需要参数-r) mv 移动文件(目标文件若存在,则会被覆盖) gzip gz文件的压缩/解压缩,常用参数-d(解压缩),-9(最大压缩) tar tar,tgz文件的打包/解包,常用参数-cvf(打包成tar文件),-xvf (解tar文件包),-zcvf(打包并压缩成tgz文件),-zxvf(解tgz文件) df 显示硬盘各分区的使用情况 mount 装载文件系统 umount 卸载文件系统 1.3 m命令集——DOS/Windows格式软盘的使用 mdir或mdir a: 显示软盘当前目录内容 mcopy Linux操作系统中的文件与DOS/Windos格式软盘之间复制文件 mtype 显示软盘中指定文件的内容 mren 更改软盘中指定文件的文件名 mdel 删除软盘中指定文件 mcd 改变软盘的当前目录 mmd 在软盘上建立子目录

航海英语阅读理解

Passage 01 Merchant ships are designed to carry cargo. Some are also designed to carry passengers. They can operate as liners. These are employed on regular routes on a fixed timetable. A list of their arrival and departure dates is published in advance and they sail whether full or not. Liners can be classed as either deep-sea liners or short-sea liners. The former carry mainly containerized cargo across the oceans of the world; the later carry containerized or conventional cargo on shorter routes. Ferries are also classed as liners. These offer a daily or weekly service for passengers and vehicles across channels and narrow seas. A few ships are still employed as passenger liners. They not only carry passengers but also some cargo on routes from Europe to North America and to the Far East. Nowadays the passenger trade is very small and passenger liners usually operate as cruise ships for part of the year. 1.The deep-sea liners ________. A. carry mainly containerized cargo B. carry mainly conventional cargo C. offer a daily or weekly service for passengers and vehicles D. sail across channels and narrow seas. 2.The Liners ________. A. always sail full B. sail regularly even not full C. always sail in ballast D. will not sail if not full 3.A list of the arrival and departure dates of liners ________.

航海英语302 翻译版

航海英语302 烟囱是套管用于排气管的发动机 1.——is a casing used for exhaust pipe from the engines. A.The funnel烟囱 B.The messroom C.The galley D.The satellite antenna 人造卫星天线装置在塑料圆顶,用来预测天气. 2.——is housed in a plastic dome for weather protection. A.The funnel B.The messroom C.The galley D.The satellite antenna人造卫星天线 厨房是制作美味食物的地方. 3.——is where delicious food is cooked. A.The funnel B.The messroom C.The galley厨房 D.The satellite antenna 食堂是全体船员用餐的地方 4.——is where the crew eat their meals. A.The funnel B.The messroom食堂 C.The galley D.The satellite antenna 锚是用来固定停泊的船只在海底, 使其不可移动. 5.——is used to moor the ship to the seabed to keep it stationary. A.The bulbous bow B.The anchor 锚 C.The bow thruster D.The propeller 船鼻首是圆形水下部件, 位于船前部, 目的是制造更少的水摩擦力, 使船只可以更易于移动. 6.——is a round-shaped underwater part in the front of the ship. The purpose is to create less friction with water so that the ship moves more easily. A.The bulbous bow 球鼻艏 B.The anchor C.The bow thruster D.The propeller 船首推进器装置在船的前方, 位于水下,从而缓和泊位或往斜方向操纵时速度减慢。7.——is placed in the front of the ship under the water, which eases berthing or maneuvering sideways at low speed.

Win7 64bit系统mpich2并行平台的搭建

Windows7系统下搭建MPI环境 本人想做一个小的机群,做并行计算,搜罗了一些网上的资料,在单机上建了个并行平台,一些小例子都没问题,但是我的计算程序还是没有成功! 我的电脑是Win7 ,64位系统。按照网上所说64位系统应该装64位的mpich2,但是没有找到资源,就装了32位的。程序设计软件是vc++6! 下面讲一下我的安装过程,希望对大家有用!!! 第一项:准备工作 1 安装MPI的SDK——MPICH2 mpich2-1.4.1p1-win-ia32安装程序的下载地址: https://www.doczj.com/doc/074623511.html,/research/projects/mpich2/downloads/tarballs/ 1.4.1p1/mpich2-1.4.1p1-win-ia32.msi 注意:网上很多人都说要以管理员身份进行安装,究竟怎样以管理员身份安装呢?这一点浪费了我好长时间,其实也不是很难,只是没有意识到! 点击“开始”——输入cmd(就会看见cmd.exe)——右键——以管理员身份运行——(输入要安装的文件)"msiexec /i e:\mpi\mpich2-1.4.1p1-win-ia32.msi"回车即可,然后按照提示下一步直至安装成功。其中e:\mpi\mpich2-1.4.1p1-win-ia32.msi是指源文件所在位置。(注意空格) 安装成功后会有如下几个文件生成 注意在bin文件中一定要有下面两个应用程序,否则未安装成功。

2 新建用户密码 安装成功后要测试一下,测试前要先注册一个用户(这个用户名须为有效的操作系统管理员账户,密码对应为系统登录密码。这个地方也煞费苦心啊,一定要注意!!!) 开始——控制面板——用户账户和家庭安全——添加或删除用户账户——创建一个新账户(在下面可以看到)——输入用户名(选择用户类型为“管理员”)——创建用户 然后再创建密码就ok啦!如下图所示 这个用户名和密码就是我们测试时需要用的。 3 注册 开始——所有程序——mpich2——wmpiregister 如下图,这个就是刚才注册的用户和密码。输入后点击Register——OK。就会出现一行字,成功注册。

MPICH 的安装使用和MPI原理分析

MPICH 的安装使用和MPI原理分析MPICH的安装和使用 运行mpich2-1.3.2p1-win-ia32.msi,填写passphrase,默认为behappy,选择默认路径安装。 运行wmpiregister, 注册当前的管理员用户。 使用建立和编译MPI程序:新建一个项目,设置项目属性,将MPICH2\lib 目录添加到C++连接的library path内,将MPICH2\include 目录添加到C++链接的Include Path内,在程序属性的链接器->命令行中添加mpi.lib,编译和生成程序。 将结果exe程序拷贝到MPICH2\bin 目录下,运行mpiexec程序,在Application内添加要我们运行的exe程序。选择进程数目,然后Execute,就会显示多个进程的执行情况。 MPICH程序原理 MPI过程就好像一个几步的过程调用,通过初始化,设置进程数,运行进程,进程间发送和接受消息,结束这些步骤来完成。 每个步骤都有基本函数相对应。 MPI_Init (*argc,*argv);//初始化MPI环境 MPI_Comm_size (comm,*size) ;//返回同组内进程数 MPI_Comm_rank (comm,*rank) ;//返回该进程在组内的进程号,从0开始 MPI_Send(buf,count,datatype,dest,tag,comm); //向目标进程发送buf内的count个datatype数据 MPI_Recv(buf,count,datatype,source,comm,status);//接收消息 MPI_Finalize ();//结束 MPIπ的计算程序说明 #include "mpi.h" #include #include double f(double x) { return(4.0/(1.0+x*x)); } int main (int argc,char * argv[]) { int done =0,n,myid,numprocs,i; double PI25DT=3.141592653589793238462643; double mypi,pi,h,sum,x;

MPICH在windows下搭建集群系统

一、首先自己的计算机上进行测试 1、命令行方式: 注册:mpiexec -register 输入你当前登陆帐户名和密码,不注册的话每次执行程序都要求输入帐户和密码。 运行:mpiexec -n 2 helloworld.exe 这里用两个进程执行当前目录下的helloworld.exe,如果在linux下就应该写为mpiexec -n 2 ./helloworld.exe 2、GUI方式: 注册:开始菜单=>所有程序=>MPICH2=>wmpiregister.exe 填上当前登陆用户名和密码,点击“register”将信息写入磁盘,再点“ok”关闭程序。若先点击“ok”则是写入内存,重启机器后还要再注册。想更换其他用户运行mpi程序时,点“remove”将原来的信息删除。 运行:开始菜单=>所有程序=>MPICH2=>wmpiexec.exe 在Application处选择可执行程序,在Number of processes处选择用几个进程。点“Execute”执行,“B reak”终止程序。下面有个选项“more options”,选中后有更多的参数可选用,包括用配置文件执行程序,单机测试没必要写配置文件了吧。 二、加上多台计算机上测试 首先、在其他的机器上也安装mpich2,版本不应该相差太远,最好同样版本,如mpich2-1.0.6。 其次、每个机器上的帐户要一样,如administrator,更重要的是密码也要一样!希望新手要注意:用户和密码都要求一致。 再次、一定要把所有机器的防火墙都关掉,windows防火墙最好也关掉,不然可能相互连接不上,或者执行的时候有奇怪的错误。

航海英语阅读与写作翻译

UNIT1 LESSON1 1.马来语是本地用语,而英语是宫方和商业用语。 2.该卷所覆盖的这些地区、通往港口的通道会出现高密度的交通流。 3.在这些影响因素,包括交通流的密度和集中程度的共同作用下,使得在海峡中的航行变得很困难,尤其是对于深吃水船舶。 4.从安达曼海北部进入,经由马六甲海峡北部的中央部分,从霹雳岛或半途岛的任一边通过。 5.新加坡共和国通过一条堤道和一座跨越柔佛海峡的桥梁与马来西亚半岛相连。 6.变化随着季风年复一年的前进、后退、强度改变一直持续着。 7.此海峡与南中国海东部的邻近水域都比较浅,以至于该地区的洋流造成一些潮汐现象 8.在这段时期内的西北和东北风的平均风力约为4级,但是在新加坡的马六甲海峡南部的风会弱一点,且风向不定。 9.由于穿越航路和频繁的交叉,让碰撞危险相当高。,而且还有可能遇到当地的渔船。 10.深吃水船舶和超大型油轮的船长在计划穿过此海峡的航线时应尤其注意航行限制。LESSON 2 1.海图上所显示的信息随其比例尺的变化而变化。 2.如果简化的描述会导致与附近浮标的混淆,那么应该保留详细信息。 3.海图上一个位置点的小误差在大比例尺可能表现为几米,而在小比例尺海图上就可能是几链了。

4.修改(海图上)等深线。比如删除深度给其他信息让路,若非是它们具有一些航海意义,航海通告上不会提及。 5.为了清晰的显示信息,其正确位置应该用圆圈和箭头来指示。 6.5011号海图提供了英版海图的缩写和图式,有A4纸这么大,非常便于携带。 7.水底礁石上的水深未知,但是我们认为它对水面航行有危险。 8.所有的这些告诫性的注释便于航海者确保安全航行的,比如避免:搁浅,接近渔具时损失,潜艇经常演刁区域的任何危险。 9.3482号海图上的位置与本区域拓制海图的位置在数量上是有一定差别。位置应该通过距离和方位转变而不是经纬度。 10.此海图省略了20米等深线内的许多灯标和其他助航标志。 LESSON 3 1.使用者应该了解到数据在传送、显示或打印在使用者的设备上、转换为其他软件格式的时候很有可能出观损坏。 2.暂时性、预报性的通告会单面打印,以便与剪切和存档。 3.周版航海通告增补篇发布的数据更新会通过无线电警告传送。X 4.在某些情况下有选择性的发布重要信息以避兔负荷过重也是有必要的。 5.方便归档,通告编号后附年份,每月也会发布一次生效列表。X 6.插入附带注释,海底电缆,位于。。。。。。

航海英语1-30带翻译

航海英语1-30题 [1]______, as the chemical extinguisher agent, should be used for an electric fire. A. dry chemical or foam B. foam or soda acid C. carbon dioxide or foam D. carbon dioxide or dry chemical KEY: D二氧化碳或干粉灭火器作为化学灭火器,用于扑灭电器火灾。 [2]______: A room on or near the bridge provided with the necessary fittings and furniture for the handling and stowage of charts and where the chronometers are placed. A. Captain’s cabin B. Chief Officer’s locker C. Chartroom D. Pilot’s cabin KEY: C在驾驶台或附近提供必要的装卸设备或用具和海图的存放和天文钟布置的房间叫做海图室。 [3]______:The main center-line structural member, running fore and aft along the bottom of a ship, sometimes referred to as the backbone. A. Frame B. Deckbeam C. Stringer D. Keel

最新航海英语Unit4-操纵(完整翻译带答案)

0422.___A___is not a step for anchoring preparation. ()不是抛锚的准备工作 A.To take off the covers from the hawse pipes and clear the spurling pipes 从锚链筒上移开盖板,并使锚链管保持清爽 B.To make sure that the windlass is out of gear and the brakes are on 确认脱开绞锚机的离合器并刹住刹车 C.To turn the windlass over slowly 慢转绞锚机 D.To inform the engine room to ensure that deck power and water are off 通知机舱确保关闭甲板电源及甲板水 0423.A “Mediterranean moor”should be used when ___B___.[33] 当()时应使用“Mediterranean moor” A.anchoring in the Mediterranean 在地中海锚泊B.docking stern to a berth 尾靠 C.docking bow to a berth 首靠D.anchoring in a strong current 强流中锚泊 0424.A ___A___ is the intersection of the surface of a sphere and a plane passing through the center of the sphere. (大圆)是指通过某球体中心的横切面与球体在球体表面的 交线 A.great circle B.small circle C.large circle D.general circle 0425.A check line is __C____.[57] 制动缆是() A.A safety line attached to a man working over the side 系住舷外作业人员的安全绳 B.Used to measure water depth 用来测量水深 C.Used to slow the headway of a barge 用来减慢驳船前进D.Used to measure the overhead height of a bridge 用来测量驾驶台的净空高度 0426.A Danforth lightweight anchor does NOT hold well in which type of bottom ____B____.

Linux环境下MPICH安装指南

Linux环境下MPICH安装指南 说明:本系统测试环境为Redhat9.0完全安装, 下载mpich2-1.0.1.tar.gz软件包到/root/目录下。 以root用户登录。 假设:安装三台微机,名字分别为:node01,node02,node03. 一、Linux环境下设置SSH信任连接(在root目录下) 1)在/etc/hosts文件下添加 #vi /etc/hosts 打开hosts文件,在其后添加: node01 IP node01 https://www.doczj.com/doc/074623511.html, node02 IP node02 https://www.doczj.com/doc/074623511.html, node03 IP node03 https://www.doczj.com/doc/074623511.html, 在需要用户下建立SSH信任连接: 2) 在各节点机上生成SSH秘钥. #ssh-keygen -t rsa 一路回车即可产生.ssh文件夹, 包括文件id_rsa, id_rsa.pub 在各节点机.ssh目录下生成authorized_keys文件 各节点机拷贝其他节点机上的id_rsa.pub内容(密钥)到本机的authorized_keys 文件中,则节点机间建立了SSH信任连接。 ***注意:其他用户下建立信任连接方法同上面 3)确认节点机器的信任连接已建立 在某节点(如node01)上执行: #ssh node02 #ssh node03 在提示处输入yes回车,最后确定无需输入密码并且没有任何提示信息即可登陆

对方机器则表示配置成功。 二、安装MPICH2(在root目录下) 1)解压缩 下载mpich2-1.0.1.tar到根目录下,然后解压缩 #tar -zxvf mpich2-1.0.1.tar.gz 2)创建MPICH安装目录 #mkdir /usr/MPICH-instsll 进入mpich2-1.0.1目录 设置安装目录 #./configure --prefix=/usr/MPICH-install 3)编译、安装 #make #make install 4)增加MPICH执行路径 可在.bashrc 或etc/bashrc 或etc/profile中添加安装路径 如在etc/profile 中添加路径:usr/MPICH-install/bin 然后可测试路径设置: #which mpd #which mpicc #which mpiexec #which mpirun 5)创建/etc/mpd.conf文件,输入内容为secretword=myword 设置文件读取权限和修改时间: #touch /etc/mpd.conf

Intel MPI 4.1.0及MPICH2 1.2.1 for rhel6.2 X86_64 install

MPICH2 1.2.1 for rhel6.2 X86_64 install 物理机配置:Core i3 CPU(64位、VT技术支持即可),Win7 X86_64位系统(64位系统即可),6G内存(全安装完后,内存利用率为81%),300G硬盘 虚拟机配置(1,2,3机类似):1 CPU,2/1/1G内存,60/20/10G硬盘,双网卡 软件:VirtualBox 4.2.12,rhel6.2 X86_64,MPICH2基本包(包含1个文件),详见下面: 建立三个虚拟机,配置如下图:

安装rhel6.2 X86_64系统,可用虚拟光驱安装。分区情况:/——60/20/10G,swap ——4/2/2G,文件包为缺省安装,最好选择英文模式,添加中文支持即可。不安装防火墙和Selinux,不打任何补丁。安装步骤略。 本文说明如下: 为1机root用户执行 为2机root用户执行,另不说明或#开头即为2机root用户执行 为3机root用户执行 因有些步骤忘记了截图,选用了网络上的相应图片,会根据情况相应说明,在这里对选用了相应图片的作者表示感谢! 一、r ed hat enterprise linux 6 yum服务器的搭建 1、创建源文件存放的目录。 #mkdir /yum/ 2、挂光盘。 #mount /dev/cdrom media 3、将光盘文件复制到服务器上的源目录。 #cp -a /media/* /yum/ 4、新建一个yum源的响应文件,后缀为.repo。 #vi /etc/yum.repos.d/local.repo 其内容如下: 5、修改yum源地址。 #vi /usr/lib/python2.6/site-packages/yum/yumRepo.py 中的782行: Remote = url + ‘/’ + relative 将其改为: Remote = url + ‘/yum’ + relative 6、关于yum的一些命令。 #yum clean all #yum install -y *** #yum grouplist #yum groupinstall ***

相关主题
文本预览
相关文档 最新文档