2024年5月25日发(作者:池青曼)
英特尔
® MPI
库入门
英特尔
® MPI
库入门
免责声明与法律信息
本文中的信息专门针对英特尔产品提供。本文并未授予任何知识产权的许可
证,无论是明确、暗示、禁止反言或任何其它形式。除这些产品的“英特尔
销售条款”之规定外,英特尔概不承担任何其它义务,对于英特尔产品的销
售与/或使用(包括适合特定用途、适销性或不侵犯任何专利权、版权或其
它知识产权),英特尔不作任何明确或暗示的担保,也不承担任何赔偿责
任。英特尔产品无意用于医疗、救生、维持生命、危急控制、安全系统或核
设施等用途。英特尔随时可能更改技术规格与产品说明,如确有更改,恕不
另行通知。
标有“保留”或“未定义”字样的任何功能或指令,其存在性与特性均不确
定,设计人员切勿对此有所依赖。英特尔保留这些供将来定义之用,对于因
将来对它们的更改而导致的任何冲突或不兼容现象,英特尔概不承担任何责
任。
本“英特尔® MPI 库入门”指南中所述的软件可能包含一些软件缺陷,导致
产品与发布的规格不符。目前已确定的软件缺陷可应客户要求提供。
本“英特尔® MPI 库入门”指南及其中所述的软件均以许可证为前提而提
供,只能依据许可证的各项条款进行使用或复制。本手册中的信息仅供参考
之用,可随时更改而不另行通知,亦不得视为英特尔公司所作的任何承诺。
对于本文或提供的与本文有关的任何软件中可能出现的任何错误或不准确之
处,英特尔公司概不承担任何责任或义务。
除此类许可证允许的内容之外,未经英特尔公司书面明确同意,对于本文的
任何部分,均不得以任何形式或通过任何手段进行复制或传输,亦不得将其
存储到检索系统中。
标有“保留”或“未定义”字样的任何功能或指令,其存在性与特性均不确
定,开发人员切勿对此有所依赖。开发人员的软件代码如果不恰当地使用了
保留的或未定义的功能或指令,则在英特尔处理器上运行时,可能会导致发
生无法预知的行为或故障。英特尔保留这些功能或指令供将来定义之用,对
于因按照未授权的方式使用它们而引起的任何冲突或不兼容现象,英特尔概
不承担任何责任。
英特尔、英特尔徽标、Intel Inside、Intel Inside 徽标、奔腾、安腾、英特尔
至强、赛扬、英特尔 SpeedStep、英特尔迅驰、英特尔 NetBurst、英特尔
NetStructure、VTune、MMX、MMX 徽标、Dialogic、i386、i486、
iCOMP、Intel386、Intel486、Intel740、IntelDX2、IntelDX4 以及 IntelSX2 均
为英特尔公司或其子公司在美国及其它国家或地区的商标或注册商标。
* 其它品名与品牌可能是属于其它公司的资产。
© 2004-2006 英特尔公司版权所有。
2
英特尔
® MPI
库入门
MPI 法律声明
“英特尔® MPI 库”部分基于“阿尔贡国家实验室”(Argonne National
Laboratory*,简称 ANL)的 MPICH2* 版 MPI 实现。
“英特尔® MPI 库”还部分基于 InfiniBand Architecture* RDMA 驱动程
序,该驱动程序来源于俄亥俄州立大学“基于网络的计算实验室”的
MVAPICH2*。
3
英特尔
® MPI
库入门
目录
免责声明与法律信息 2
MPI 法律声明......................................................................3
目录 4
概述 5
使用“英特尔® MPI 库” 6
开始之前..............................................................................6
用法模型..............................................................................6
快速入门..............................................................................7
1. 编译与链接......................................................................8
2. 设置 8
3. 选择网络结构...................................................................9
4. 运行 MPI 程序.................................................................9
疑难排解 11
测试安装..............................................................................11
MPD 设置疑难排解..............................................................11
编译与运行测试程序............................................................12
4
英特尔
® MPI
库入门
概述
“英特尔® MPI 库”是一个多结构消息传递库,它实现了“消息传递接口第 2 版”
(Message Passing Interface, v2,简称 MPI-2)规格。借助它可以切换互连结构而不必重新
链接。
本
入门指南
旨在介绍如何使用“英特尔 MPI 库”来编译与运行一个简单的 MPI 程序。本
指南还包含一些基本用法示例与疑难排解提示。
此版本的“英特尔 MPI 库”支持以下主要功能:
• 符合 MPI-1 与 MPI-2 规格,但有一些限制
• 支持以下互连结构的任意组合:
o 共享内存
o 通过 DAPL* 实现 RDMA 功能的网络结构,如 InfiniBand* 与 Myrinet*
o 套接字,例如, TCP/IP over Ethernet*、Gigabit Ethernet* 以及其它互连结构。
• 支持使用以下编译器的 IA-32 与安腾® 体系结构群集:
o “英特尔® C++ 编译器 7.1 Linux* 版”与更高版本
o “英特尔® Fortran 编译器 7.1 Linux* 版”与更高版本
o GNU* C、C++ 以及 Fortran 95 编译器
• 支持使用以下编译器的“英特尔® 扩展内存 64 位技术”(英特尔® EM64T)系统:
o “英特尔 C++ 编译器 8.1 Linux* 版”与更高版本
o “英特尔 Fortran 编译器 8.1 Linux* 版”与更高版本
o GNU* C、C++ 以及 Fortran 95 编译器
• C、C++、Fortran-77 以及 Fortran-90 语言绑定
• 动态或静态链接
• 仅限具有同类处理器体系结构与操作环境的群集。
MPI-2 规格不仅提供对 MPI-1 的完全支持,而且还支持以下新功能:
• 单向通讯(RDMA 读取和写入)
• 扩展的集合操作
• 改善的标准化 I/O 功能
• 通过 MPD daemon(通用型 Daemon)与
mpiexec
命令实现的标准化工作启动机制
如需有关 MPI-2 实现所具有的限制的详细信息,请参阅产品
发行说明
的
已知限制
部分。
5
英特尔
® MPI
库入门
使用“英特尔
® MPI
库”
开始之前
开始使用“英特尔® MPI 库”之前,确保已经安装函数库、脚本以及实用程序。
如需安装操作说明,请参阅产品
发行说明
。
用法模型
使用“英特尔 MPI 库”涉及以下步骤:
编译与链接应用程序
安装 MPD
daemon
选择网络结
构或设备
运行 MPI 程序
图 1:“英特尔 MPI 库”用法模型流程图。
6
英特尔
® MPI
库入门
快速入门
1. 使用
source
外壳命令从“英特尔 MPI 库”所包含的
mpivars.[c]sh
脚本中获
取适当的环境设置。该脚本位于
目录;如果是“英特尔
EM64T 64 位”模式,则位于
目录。
2.
创建一个
$HOME/.
文件。要设置 MPD 密码,请在此文件中输入以下内
容:
secretword=
请勿使用任何 Linux* 登录密码。任选的
字符串仅控制各种
群集用户对 MPD daemon 的访问。
3. 使用
chmod
命令设置对
$HOME/.
文件的保护,使得只有自己才拥有
读写权限:
4.
$ chmod 600 $HOME/.
确认在群集的所有节点上都能够通过
rsh
看到
PATH
设置与
.
的内容。
例如,对群集中的每个
使用以下命令:
$ rsh
$ rsh
创建一个
文本文件,以每行一个主机名称的形式列出群集中的各个节
点。
确保
PATH
中存在编译器。
使用适当的编译器驱动程序编译测试程序。例如:
$ mpicc –o test
使用
mpirun
命令执行测试。
5.
6.
7.
8.
$ mpirun -n <# of processes> ./test
9. 如需有关详细信息,请参阅本文档的其余部分以及
参考手册
。
7
英特尔
® MPI
库入门
1. 编译与链接
要使用“英特尔 MPI 库”编译与链接 MPI 程序:
1. 确保
PATH
中包含底层的编译器与相关软件。
2. 如果在使用英特尔编译器,确保
LD_LIBRARY_PATH
环境变量中包含编译器库目录。
例如,对于“英特尔 C++ 编译器 9.1 版”与“英特尔 Fortran 编译器 9.1 版”,执行适
当的设置脚本:
/opt/intel_cc_91/bin/iccvars.[c]sh
与
/opt/intel_fc_91/bin/ifortvars.[c]sh
3. 使用适当的
mpi
命令编译 MPI 程序。
例如,使用 GNU* C 编译器的
mpicc
命令编译 C 代码,如下所示:
$ mpicc
其中
是安装的软件包的完整路径。
支持的所有编译器都有同等功能的命令,也就是给标准的编译器命令加上
mpi
前缀。
例如,“英特尔 Fortran 编译器”8.0 以上版本 (
ifort
) 的“英特尔 MPI 库”命令是
mpiifort
。
2. 设置 MPD Daemon
“英特尔 MPI 库”使用“通用型 Daemon”(MPD) 作业启动机制。要运行使用
mpicc
(或
相关)命令编译的程序,请设置 MPD daemon。
总是启动并维护自己的一套 MPD daemon,而不是让系统管理员一次性启动 MPD daemon
供系统上的所有用户使用。这种设置方式可以改善系统安全性,并使得用户可以灵活控制
自己的执行环境。
要设置 MPD daemon:
1. 使用适当的值与目录设置环境变量,例如在文件
.cshrc
或
.bashrc
中。
• 确保
PATH
变量包含
目录;对于“英特尔 EM64T 64 位模
式”,则要包含
目录。使用“英特尔 MPI 库”所包含
的
mpivars.[c]sh
脚本来设置此变量。
• 确保
PATH
变量包含 Python* 2.2 版或更高版本的目录。
• 如果在使用英特尔编译器,确保
LD_LIBRARY_PATH
变量包含编译器库的目
录。使用编译器所包含的
*vars.[c]sh
脚本来设置此变量。
• 设置应用程序使用的任何其它环境变量。
2. 创建一个
$HOME/.
文件。要设置 MPD 密码,请在此文件中输入以下内
容:
secretword=
请勿使用任何 Linux* 登录密码。任选的
字符串仅控制各种
群集用户对 MPD daemon 的访问。
3. 使用
chmod
命令设置对
$HOME/.
文件的保护,使得只有自己才拥有
读写权限:
$ chmod 600 $HOME/.
4. 确认在群集的所有节点上都能够通过
rsh
看到
PATH
设置与
.
的内
容。例如,对群集中的每个
使用以下命令:
$ rsh
$ rsh
确保每一个节点(而不只是其中一个节点)都可以连接到任何其它节点。
如果群集使用
ssh
而不是
rsh
,请参阅下面的
备注
部分。
5. 创建一个
文本文件,以每行一个主机名称的形式列出群集中的各个
节点。
8
英特尔
® MPI
库入门
6. 使用
mpdallexit
命令关闭最终的 MPD daemon:
$ mpdallexit
7. 使用
mpdboot
命令启动 MPD daemon:
$ mpdboot -n <#nodes>
如果文件
$PWD/
存在,默认情况下将使用它。如果没有主机文件,
mpdboot
命令将在本地机器上
启动一个 MPD daemon。
8.
使用
mpdtrace
命令确定 MPD daemon 的状态:
$ mpdtrace
输出内容应该是当前正在运行 MPD daemon 的节点
的列表。此列表应该与文件
的
内容相匹配。
备注
•
如果群集使用
ssh
而不是
rsh
,请确保每一个节点都可以通过
ssh
(没有密码)
连接到任何其它节点。如需有关
ssh
设置的详细信息,请参阅系统手册。
•
如果群集使用
ssh
而不是
rsh
,将
–r ssh
选项添加到
mpdboot
调用字符串。
3. 选择网络结构
“英特尔 MPI 库”动态地为 MPI 进程之间的通讯选择不同的结构。
要选择特定的结构组合,请将
I_MPI_DEVICE
环境变量设置为以下某个值:
I_MPI_DEVICE 值 支持的结构
TCP/以太网*/套接字
仅限共享内存(无套接字)
TCP + 共享内存(对于通过“以太网”* 进行连接的
SMP 群集)
InfiniBand*、Myrinet* 等(通过指定的 DAPL* 提供程
序)
TCP + 共享内存 + DAPL* (针对通过具有 RDMA 功
能的结构进行连接的 SMP 群集)
sock
shm
ssm
rdma[:
rdssm[:
确保所选的结构可用。例如,仅当所有进程都可以通过共享内存彼此进行通讯时,才能使
用
shm
。仅当所有的进程都可以通过单个 DAPL 提供程序彼此进行通讯时,才能使用
rdma
。
4. 运行 MPI 程序
要启动与“英特尔 MPI 库”链接的程序,请使用
mpiexec
命令:
$ mpiexec -n <# of processes> ./myprog
使用
-n
选项设置进程数量。这是
mpiexec
命令唯一必需的选项。
如果在使用默认结构之外的网络结构,请使用
-genv
选项指定一个要分配给
I_MPI_DEVICE 变量的值。
例如,要使用
shm
结构运行 MPI 程序,请输入以下命令:
$ mpiexec -genv I_MPI_DEVICE shm -n <# of processes> ./
对于具有
rdma
功能的结构,请使用以下命令:
$ mpiexec -genv I_MPI_DEVICE rdma -n <# of processes> ./
9
英特尔
® MPI
库入门
您可以选择任何支持的设备。如需有关详细信息,请参阅上文的
选择网络结构
部分。
如果使用“英特尔 MPI 库”成功地运行了应用程序,它应该也可以同其它 MPI 库
一起运
行。现在,您可以将应用程序从一个群集移动到另一个群集,并在节点之间使用不同的
结
构,而不用重新链接。如果遇到问题,请参阅
疑难排解
来寻求可能的解决方案。
10
英特尔
® MPI
库入门
疑难排解
安装、设置以及使用“英特尔 MPI 库”运行应用程序时,如果遇到问题,请参考以下内容
来排解疑难。
测试安装
要确保“英特尔 MPI 库”已经安装并且能够正常工作,请完成常规测试、编译并运行一个测试
程序。
要测试安装:
1. 确认
PATH
中包含 Python* 2.2 版或更高版本。
$ rsh
如果此命令返回错误消息或是返回低于 2.2 的值,请安装 Python* 2.2 版或更高版本,
并确保在
PATH
中包含它。
2. 检查是否存在 Python* XML 模块,如 python-xml* 或 libxml2-python*:
$ rpm –qa | grep python-xml
$ rpm –qa | grep libxml2-python
如果输出内容不包含名称 “python-xml” 或 “libxml2-python” 以及一个版本号,请安装遗
失的模块。
3. 检查是否存在 XML 分析器,例如 expat* 或 pyxml*:
$ rpm –qa | grep expat
$ rpm –qa | grep pyxml
如果输出内容不包含名称 “expat” 或 “pyxml” 以及一个版本号,请安装遗失的模块。
4. 确认
PATH
中包含
(对于“英特尔 EM64T 64 位”模式,是
):
$ rsh
您应该可以看到所测试的每个节点的正确路径。
5. 如果使用英特尔编译器,请确认
PATH
与
LD_LIBRARY_PATH
环境变量中包含适当的
目录:
$ mpiexec –n <# of processes> env | grep PATH
您应该在执行
mpiexec
命令之前启动
mpd
环。您应该可以在这些路径变量中看到所测
试的每个节点的正确目录。如果没有看到,请调用适当的
*vars.[c]sh
脚本。例如,
对于“英特尔 C++ 编译器 9.1 版”,请使用以下 source 命令:
$ . /opt/intel_cc_91/bin/
6. 在某些不常见的情况下,可能需要在
LD_LIBRARY_PATH
中包含
目录(对于“英特尔 EM64T 64 位”模式,是
)。要确认
LD_LIBRARY_PATH
设置,请使用以下命令:
$ mpiexec –n <# of processes> env | grep PATH
MPD 设置疑难排解
检查是否可以在本地机器上运行
mpd
命令。执行以下命令:
# mpd &
# mpdtrace
# mpdallexit
mpdtrace
的输出内容应该显示正在运行的机器的主机名称。如果不是这样,或是无法启
动 MPD,请检查安装是否正确,以及环境设置是否正确。
11
英特尔
® MPI
库入门
下文的疑难排解步骤假设 MPD daemon 已设置并正在运行。要开始诊断,请使用以下命令
确认 MPD daemon 正在所有预期的节点上运行:
mpdtrace
输出内容列出所有正在运行的 MPD daemon,或是指出发生错误。如果
mpdtrace
的输出
列表中没有包含某些所需的节点,请执行以下操作:
1. 尝试使用以下命令重新启动 MPD daemon:
a.
关闭所有正在运行的 MPD daemon:
$ mpdallexit
b.
对于每个节点,确保所有的 daemon 均已关闭:
$ rsh
$ rsh
c. 重新启动 MPD daemon。确保使用适当的配置选项和主机文件:
$ mpdboot [
d. 确认所有预期的 MPD daemon 都正在运行:
$ mpdtrace
2. 如果
mpdtrace
命令的输出仍未指出所有预期的 MPD daemon 都正在运行,请执行以
下步骤:
a. 如步骤 1 所述,关闭并重新启动 MPD daemon,将 debug 与 verbose 选项添加到
mpdboot 命令:
$ mpdboot –d –v [
记下步骤 a 的输出中的
rsh
命令。例如:
launch cmd= rsh -n
-h
b. 复制并粘贴输出中从
rsh
命令到该行结束的内容。例如:
$ rsh -n
-h
c. 执行编辑后的 rsh 命令。使用产生的输出来诊断并纠正潜在的问题。例如,最常
见的问题包括:
•
rsh
命令无法与
联系。
•
rsh
命令的其它故障,例如系统设置问题。
•
命令找不到或无法执行。
•
.
文件找不到或无法读取(访问错误)。
编译与运行测试程序
要编译与运行测试程序,请执行以下步骤:
1. 编译产品发行包中包含的测试程序,如下所示:
$ cd
$ mpicc test.c
2. 如果正在使用 InfiniBand*、Myrinet* 或其它具有 RDMA 功能的网络硬件与软件,请
确认一切功能均正常。
3. 使用群集上所有可用的配置运行测试程序。
a) 使用以下命令测试
sock
设备:
$ mpiexec -n 2 -env I_MPI_DEBUG 2 –env I_MPI_DEVICE sock
./
您应该可以看到每个等级有一行输出,以及指出所用
sock
设备的调试输出。
b) 使用以下命令测试
ssm
设备:
12
英特尔
® MPI
库入门
$ mpiexec -n 2 -env I_MPI_DEBUG 2 –env I_MPI_DEVICE ssm ./
您应该可以看到每个等级有一行输出,以及指出所用
ssm
设备的调试输出。
c) 使用以下命令测试任何其它结构设备:
$ mpiexec -n 2 -env I_MPI_DEBUG 2 -env I_MPI_DEVICE
./
其中
可以是
shm
、
rdma
或
rdssm
。
对于使用的每个
mpiexec
命令,应该都可以看到每个等级有一行输出,以及指出使
用了哪种设备的调试输出。设备应该与
I_MPI_DEVICE
设置相匹配。
备注
“英特尔
MPI
库开发套件”中的
目录除包含
test.c
之外,还包含
其它一些测试程序,可供您用于测试。
13
2024年5月25日发(作者:池青曼)
英特尔
® MPI
库入门
英特尔
® MPI
库入门
免责声明与法律信息
本文中的信息专门针对英特尔产品提供。本文并未授予任何知识产权的许可
证,无论是明确、暗示、禁止反言或任何其它形式。除这些产品的“英特尔
销售条款”之规定外,英特尔概不承担任何其它义务,对于英特尔产品的销
售与/或使用(包括适合特定用途、适销性或不侵犯任何专利权、版权或其
它知识产权),英特尔不作任何明确或暗示的担保,也不承担任何赔偿责
任。英特尔产品无意用于医疗、救生、维持生命、危急控制、安全系统或核
设施等用途。英特尔随时可能更改技术规格与产品说明,如确有更改,恕不
另行通知。
标有“保留”或“未定义”字样的任何功能或指令,其存在性与特性均不确
定,设计人员切勿对此有所依赖。英特尔保留这些供将来定义之用,对于因
将来对它们的更改而导致的任何冲突或不兼容现象,英特尔概不承担任何责
任。
本“英特尔® MPI 库入门”指南中所述的软件可能包含一些软件缺陷,导致
产品与发布的规格不符。目前已确定的软件缺陷可应客户要求提供。
本“英特尔® MPI 库入门”指南及其中所述的软件均以许可证为前提而提
供,只能依据许可证的各项条款进行使用或复制。本手册中的信息仅供参考
之用,可随时更改而不另行通知,亦不得视为英特尔公司所作的任何承诺。
对于本文或提供的与本文有关的任何软件中可能出现的任何错误或不准确之
处,英特尔公司概不承担任何责任或义务。
除此类许可证允许的内容之外,未经英特尔公司书面明确同意,对于本文的
任何部分,均不得以任何形式或通过任何手段进行复制或传输,亦不得将其
存储到检索系统中。
标有“保留”或“未定义”字样的任何功能或指令,其存在性与特性均不确
定,开发人员切勿对此有所依赖。开发人员的软件代码如果不恰当地使用了
保留的或未定义的功能或指令,则在英特尔处理器上运行时,可能会导致发
生无法预知的行为或故障。英特尔保留这些功能或指令供将来定义之用,对
于因按照未授权的方式使用它们而引起的任何冲突或不兼容现象,英特尔概
不承担任何责任。
英特尔、英特尔徽标、Intel Inside、Intel Inside 徽标、奔腾、安腾、英特尔
至强、赛扬、英特尔 SpeedStep、英特尔迅驰、英特尔 NetBurst、英特尔
NetStructure、VTune、MMX、MMX 徽标、Dialogic、i386、i486、
iCOMP、Intel386、Intel486、Intel740、IntelDX2、IntelDX4 以及 IntelSX2 均
为英特尔公司或其子公司在美国及其它国家或地区的商标或注册商标。
* 其它品名与品牌可能是属于其它公司的资产。
© 2004-2006 英特尔公司版权所有。
2
英特尔
® MPI
库入门
MPI 法律声明
“英特尔® MPI 库”部分基于“阿尔贡国家实验室”(Argonne National
Laboratory*,简称 ANL)的 MPICH2* 版 MPI 实现。
“英特尔® MPI 库”还部分基于 InfiniBand Architecture* RDMA 驱动程
序,该驱动程序来源于俄亥俄州立大学“基于网络的计算实验室”的
MVAPICH2*。
3
英特尔
® MPI
库入门
目录
免责声明与法律信息 2
MPI 法律声明......................................................................3
目录 4
概述 5
使用“英特尔® MPI 库” 6
开始之前..............................................................................6
用法模型..............................................................................6
快速入门..............................................................................7
1. 编译与链接......................................................................8
2. 设置 8
3. 选择网络结构...................................................................9
4. 运行 MPI 程序.................................................................9
疑难排解 11
测试安装..............................................................................11
MPD 设置疑难排解..............................................................11
编译与运行测试程序............................................................12
4
英特尔
® MPI
库入门
概述
“英特尔® MPI 库”是一个多结构消息传递库,它实现了“消息传递接口第 2 版”
(Message Passing Interface, v2,简称 MPI-2)规格。借助它可以切换互连结构而不必重新
链接。
本
入门指南
旨在介绍如何使用“英特尔 MPI 库”来编译与运行一个简单的 MPI 程序。本
指南还包含一些基本用法示例与疑难排解提示。
此版本的“英特尔 MPI 库”支持以下主要功能:
• 符合 MPI-1 与 MPI-2 规格,但有一些限制
• 支持以下互连结构的任意组合:
o 共享内存
o 通过 DAPL* 实现 RDMA 功能的网络结构,如 InfiniBand* 与 Myrinet*
o 套接字,例如, TCP/IP over Ethernet*、Gigabit Ethernet* 以及其它互连结构。
• 支持使用以下编译器的 IA-32 与安腾® 体系结构群集:
o “英特尔® C++ 编译器 7.1 Linux* 版”与更高版本
o “英特尔® Fortran 编译器 7.1 Linux* 版”与更高版本
o GNU* C、C++ 以及 Fortran 95 编译器
• 支持使用以下编译器的“英特尔® 扩展内存 64 位技术”(英特尔® EM64T)系统:
o “英特尔 C++ 编译器 8.1 Linux* 版”与更高版本
o “英特尔 Fortran 编译器 8.1 Linux* 版”与更高版本
o GNU* C、C++ 以及 Fortran 95 编译器
• C、C++、Fortran-77 以及 Fortran-90 语言绑定
• 动态或静态链接
• 仅限具有同类处理器体系结构与操作环境的群集。
MPI-2 规格不仅提供对 MPI-1 的完全支持,而且还支持以下新功能:
• 单向通讯(RDMA 读取和写入)
• 扩展的集合操作
• 改善的标准化 I/O 功能
• 通过 MPD daemon(通用型 Daemon)与
mpiexec
命令实现的标准化工作启动机制
如需有关 MPI-2 实现所具有的限制的详细信息,请参阅产品
发行说明
的
已知限制
部分。
5
英特尔
® MPI
库入门
使用“英特尔
® MPI
库”
开始之前
开始使用“英特尔® MPI 库”之前,确保已经安装函数库、脚本以及实用程序。
如需安装操作说明,请参阅产品
发行说明
。
用法模型
使用“英特尔 MPI 库”涉及以下步骤:
编译与链接应用程序
安装 MPD
daemon
选择网络结
构或设备
运行 MPI 程序
图 1:“英特尔 MPI 库”用法模型流程图。
6
英特尔
® MPI
库入门
快速入门
1. 使用
source
外壳命令从“英特尔 MPI 库”所包含的
mpivars.[c]sh
脚本中获
取适当的环境设置。该脚本位于
目录;如果是“英特尔
EM64T 64 位”模式,则位于
目录。
2.
创建一个
$HOME/.
文件。要设置 MPD 密码,请在此文件中输入以下内
容:
secretword=
请勿使用任何 Linux* 登录密码。任选的
字符串仅控制各种
群集用户对 MPD daemon 的访问。
3. 使用
chmod
命令设置对
$HOME/.
文件的保护,使得只有自己才拥有
读写权限:
4.
$ chmod 600 $HOME/.
确认在群集的所有节点上都能够通过
rsh
看到
PATH
设置与
.
的内容。
例如,对群集中的每个
使用以下命令:
$ rsh
$ rsh
创建一个
文本文件,以每行一个主机名称的形式列出群集中的各个节
点。
确保
PATH
中存在编译器。
使用适当的编译器驱动程序编译测试程序。例如:
$ mpicc –o test
使用
mpirun
命令执行测试。
5.
6.
7.
8.
$ mpirun -n <# of processes> ./test
9. 如需有关详细信息,请参阅本文档的其余部分以及
参考手册
。
7
英特尔
® MPI
库入门
1. 编译与链接
要使用“英特尔 MPI 库”编译与链接 MPI 程序:
1. 确保
PATH
中包含底层的编译器与相关软件。
2. 如果在使用英特尔编译器,确保
LD_LIBRARY_PATH
环境变量中包含编译器库目录。
例如,对于“英特尔 C++ 编译器 9.1 版”与“英特尔 Fortran 编译器 9.1 版”,执行适
当的设置脚本:
/opt/intel_cc_91/bin/iccvars.[c]sh
与
/opt/intel_fc_91/bin/ifortvars.[c]sh
3. 使用适当的
mpi
命令编译 MPI 程序。
例如,使用 GNU* C 编译器的
mpicc
命令编译 C 代码,如下所示:
$ mpicc
其中
是安装的软件包的完整路径。
支持的所有编译器都有同等功能的命令,也就是给标准的编译器命令加上
mpi
前缀。
例如,“英特尔 Fortran 编译器”8.0 以上版本 (
ifort
) 的“英特尔 MPI 库”命令是
mpiifort
。
2. 设置 MPD Daemon
“英特尔 MPI 库”使用“通用型 Daemon”(MPD) 作业启动机制。要运行使用
mpicc
(或
相关)命令编译的程序,请设置 MPD daemon。
总是启动并维护自己的一套 MPD daemon,而不是让系统管理员一次性启动 MPD daemon
供系统上的所有用户使用。这种设置方式可以改善系统安全性,并使得用户可以灵活控制
自己的执行环境。
要设置 MPD daemon:
1. 使用适当的值与目录设置环境变量,例如在文件
.cshrc
或
.bashrc
中。
• 确保
PATH
变量包含
目录;对于“英特尔 EM64T 64 位模
式”,则要包含
目录。使用“英特尔 MPI 库”所包含
的
mpivars.[c]sh
脚本来设置此变量。
• 确保
PATH
变量包含 Python* 2.2 版或更高版本的目录。
• 如果在使用英特尔编译器,确保
LD_LIBRARY_PATH
变量包含编译器库的目
录。使用编译器所包含的
*vars.[c]sh
脚本来设置此变量。
• 设置应用程序使用的任何其它环境变量。
2. 创建一个
$HOME/.
文件。要设置 MPD 密码,请在此文件中输入以下内
容:
secretword=
请勿使用任何 Linux* 登录密码。任选的
字符串仅控制各种
群集用户对 MPD daemon 的访问。
3. 使用
chmod
命令设置对
$HOME/.
文件的保护,使得只有自己才拥有
读写权限:
$ chmod 600 $HOME/.
4. 确认在群集的所有节点上都能够通过
rsh
看到
PATH
设置与
.
的内
容。例如,对群集中的每个
使用以下命令:
$ rsh
$ rsh
确保每一个节点(而不只是其中一个节点)都可以连接到任何其它节点。
如果群集使用
ssh
而不是
rsh
,请参阅下面的
备注
部分。
5. 创建一个
文本文件,以每行一个主机名称的形式列出群集中的各个
节点。
8
英特尔
® MPI
库入门
6. 使用
mpdallexit
命令关闭最终的 MPD daemon:
$ mpdallexit
7. 使用
mpdboot
命令启动 MPD daemon:
$ mpdboot -n <#nodes>
如果文件
$PWD/
存在,默认情况下将使用它。如果没有主机文件,
mpdboot
命令将在本地机器上
启动一个 MPD daemon。
8.
使用
mpdtrace
命令确定 MPD daemon 的状态:
$ mpdtrace
输出内容应该是当前正在运行 MPD daemon 的节点
的列表。此列表应该与文件
的
内容相匹配。
备注
•
如果群集使用
ssh
而不是
rsh
,请确保每一个节点都可以通过
ssh
(没有密码)
连接到任何其它节点。如需有关
ssh
设置的详细信息,请参阅系统手册。
•
如果群集使用
ssh
而不是
rsh
,将
–r ssh
选项添加到
mpdboot
调用字符串。
3. 选择网络结构
“英特尔 MPI 库”动态地为 MPI 进程之间的通讯选择不同的结构。
要选择特定的结构组合,请将
I_MPI_DEVICE
环境变量设置为以下某个值:
I_MPI_DEVICE 值 支持的结构
TCP/以太网*/套接字
仅限共享内存(无套接字)
TCP + 共享内存(对于通过“以太网”* 进行连接的
SMP 群集)
InfiniBand*、Myrinet* 等(通过指定的 DAPL* 提供程
序)
TCP + 共享内存 + DAPL* (针对通过具有 RDMA 功
能的结构进行连接的 SMP 群集)
sock
shm
ssm
rdma[:
rdssm[:
确保所选的结构可用。例如,仅当所有进程都可以通过共享内存彼此进行通讯时,才能使
用
shm
。仅当所有的进程都可以通过单个 DAPL 提供程序彼此进行通讯时,才能使用
rdma
。
4. 运行 MPI 程序
要启动与“英特尔 MPI 库”链接的程序,请使用
mpiexec
命令:
$ mpiexec -n <# of processes> ./myprog
使用
-n
选项设置进程数量。这是
mpiexec
命令唯一必需的选项。
如果在使用默认结构之外的网络结构,请使用
-genv
选项指定一个要分配给
I_MPI_DEVICE 变量的值。
例如,要使用
shm
结构运行 MPI 程序,请输入以下命令:
$ mpiexec -genv I_MPI_DEVICE shm -n <# of processes> ./
对于具有
rdma
功能的结构,请使用以下命令:
$ mpiexec -genv I_MPI_DEVICE rdma -n <# of processes> ./
9
英特尔
® MPI
库入门
您可以选择任何支持的设备。如需有关详细信息,请参阅上文的
选择网络结构
部分。
如果使用“英特尔 MPI 库”成功地运行了应用程序,它应该也可以同其它 MPI 库
一起运
行。现在,您可以将应用程序从一个群集移动到另一个群集,并在节点之间使用不同的
结
构,而不用重新链接。如果遇到问题,请参阅
疑难排解
来寻求可能的解决方案。
10
英特尔
® MPI
库入门
疑难排解
安装、设置以及使用“英特尔 MPI 库”运行应用程序时,如果遇到问题,请参考以下内容
来排解疑难。
测试安装
要确保“英特尔 MPI 库”已经安装并且能够正常工作,请完成常规测试、编译并运行一个测试
程序。
要测试安装:
1. 确认
PATH
中包含 Python* 2.2 版或更高版本。
$ rsh
如果此命令返回错误消息或是返回低于 2.2 的值,请安装 Python* 2.2 版或更高版本,
并确保在
PATH
中包含它。
2. 检查是否存在 Python* XML 模块,如 python-xml* 或 libxml2-python*:
$ rpm –qa | grep python-xml
$ rpm –qa | grep libxml2-python
如果输出内容不包含名称 “python-xml” 或 “libxml2-python” 以及一个版本号,请安装遗
失的模块。
3. 检查是否存在 XML 分析器,例如 expat* 或 pyxml*:
$ rpm –qa | grep expat
$ rpm –qa | grep pyxml
如果输出内容不包含名称 “expat” 或 “pyxml” 以及一个版本号,请安装遗失的模块。
4. 确认
PATH
中包含
(对于“英特尔 EM64T 64 位”模式,是
):
$ rsh
您应该可以看到所测试的每个节点的正确路径。
5. 如果使用英特尔编译器,请确认
PATH
与
LD_LIBRARY_PATH
环境变量中包含适当的
目录:
$ mpiexec –n <# of processes> env | grep PATH
您应该在执行
mpiexec
命令之前启动
mpd
环。您应该可以在这些路径变量中看到所测
试的每个节点的正确目录。如果没有看到,请调用适当的
*vars.[c]sh
脚本。例如,
对于“英特尔 C++ 编译器 9.1 版”,请使用以下 source 命令:
$ . /opt/intel_cc_91/bin/
6. 在某些不常见的情况下,可能需要在
LD_LIBRARY_PATH
中包含
目录(对于“英特尔 EM64T 64 位”模式,是
)。要确认
LD_LIBRARY_PATH
设置,请使用以下命令:
$ mpiexec –n <# of processes> env | grep PATH
MPD 设置疑难排解
检查是否可以在本地机器上运行
mpd
命令。执行以下命令:
# mpd &
# mpdtrace
# mpdallexit
mpdtrace
的输出内容应该显示正在运行的机器的主机名称。如果不是这样,或是无法启
动 MPD,请检查安装是否正确,以及环境设置是否正确。
11
英特尔
® MPI
库入门
下文的疑难排解步骤假设 MPD daemon 已设置并正在运行。要开始诊断,请使用以下命令
确认 MPD daemon 正在所有预期的节点上运行:
mpdtrace
输出内容列出所有正在运行的 MPD daemon,或是指出发生错误。如果
mpdtrace
的输出
列表中没有包含某些所需的节点,请执行以下操作:
1. 尝试使用以下命令重新启动 MPD daemon:
a.
关闭所有正在运行的 MPD daemon:
$ mpdallexit
b.
对于每个节点,确保所有的 daemon 均已关闭:
$ rsh
$ rsh
c. 重新启动 MPD daemon。确保使用适当的配置选项和主机文件:
$ mpdboot [
d. 确认所有预期的 MPD daemon 都正在运行:
$ mpdtrace
2. 如果
mpdtrace
命令的输出仍未指出所有预期的 MPD daemon 都正在运行,请执行以
下步骤:
a. 如步骤 1 所述,关闭并重新启动 MPD daemon,将 debug 与 verbose 选项添加到
mpdboot 命令:
$ mpdboot –d –v [
记下步骤 a 的输出中的
rsh
命令。例如:
launch cmd= rsh -n
-h
b. 复制并粘贴输出中从
rsh
命令到该行结束的内容。例如:
$ rsh -n
-h
c. 执行编辑后的 rsh 命令。使用产生的输出来诊断并纠正潜在的问题。例如,最常
见的问题包括:
•
rsh
命令无法与
联系。
•
rsh
命令的其它故障,例如系统设置问题。
•
命令找不到或无法执行。
•
.
文件找不到或无法读取(访问错误)。
编译与运行测试程序
要编译与运行测试程序,请执行以下步骤:
1. 编译产品发行包中包含的测试程序,如下所示:
$ cd
$ mpicc test.c
2. 如果正在使用 InfiniBand*、Myrinet* 或其它具有 RDMA 功能的网络硬件与软件,请
确认一切功能均正常。
3. 使用群集上所有可用的配置运行测试程序。
a) 使用以下命令测试
sock
设备:
$ mpiexec -n 2 -env I_MPI_DEBUG 2 –env I_MPI_DEVICE sock
./
您应该可以看到每个等级有一行输出,以及指出所用
sock
设备的调试输出。
b) 使用以下命令测试
ssm
设备:
12
英特尔
® MPI
库入门
$ mpiexec -n 2 -env I_MPI_DEBUG 2 –env I_MPI_DEVICE ssm ./
您应该可以看到每个等级有一行输出,以及指出所用
ssm
设备的调试输出。
c) 使用以下命令测试任何其它结构设备:
$ mpiexec -n 2 -env I_MPI_DEBUG 2 -env I_MPI_DEVICE
./
其中
可以是
shm
、
rdma
或
rdssm
。
对于使用的每个
mpiexec
命令,应该都可以看到每个等级有一行输出,以及指出使
用了哪种设备的调试输出。设备应该与
I_MPI_DEVICE
设置相匹配。
备注
“英特尔
MPI
库开发套件”中的
目录除包含
test.c
之外,还包含
其它一些测试程序,可供您用于测试。
13