mpirun.openmpi - 云端在线

这是命令 mpirun.openmpi 可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


orterun, mpirun, mpiexec - 在 Open MPI 中执行串行和并行作业。 oshrun, shmemrun
- 在 Open SHMEM 中执行串行和并行作业。

请注意: 米匹伦, 执行奥特伦 都是彼此的同义词以及 奥什伦,
什梅姆伦 如果安装了 Open SHMEM。 使用任何名称都会产生相同的
行为。

概要


单进程多数据 (SPMD) 模型:

米匹伦 [ 选项 ] [ ]

多指令多数据 (MIMD) 模型:

米匹伦 [全局选项]
[local_options1] [ ] :
[local_options2] [ ] :
... :
[本地选项N] [ ]

请注意,在两种模型中,调用 米匹伦 通过绝对路径名相当于
指定 - 字首 选项与 值相当于所在目录 米匹伦
驻留,减去它的最后一个子目录。 例如:

% /usr/本地/bin/mpirun ...

相当于

% mpirun --前缀 在/ usr /本地

概要


如果您只是在寻找如何运行 MPI 应用程序,您可能想要使用
以下形式的命令行:

% mpirun [ -np X ] [ --hostfile ]

这将运行 X 个副本 在您当前的运行时环境中(如果在
受支持的资源管理器,Open MPI 米匹伦 通常会自动使用
相应的资源管理器进程启动器,而不是,例如, RSH or SSH,
需要使用主机文件,或者默认运行所有 X 副本
localhost),按 CPU 插槽以循环方式调度(默认情况下)。 看剩下的
此页面了解更多详情。

请注意,从 v1.8 系列开始,mpirun 会自动绑定进程。
在没有任何进一步指令的情况下使用两种绑定模式:

捆绑 核心: 当进程数 <= 2

捆绑 插座: 当进程数 > 2

如果您的应用程序使用线程,那么您可能希望确保您不是
完全绑定(通过指定 --bind-to none),或使用
每个应用程序的适当绑定级别或特定数量的处理元素
的过程。

配置


米匹伦 将在本地节点上调用它的目录的名称发送到每个
的远程节点,并尝试更改到该目录。 请参阅“当前工作
目录”部分以获取更多详细信息。

程序可执行。 这被标识为第一个未识别的参数
到 mpirun。

将这些运行时参数传递给每个新进程。 这些必须始终是
最后的论据 米匹伦. 如果使用应用上下文文件,
忽略了。

-h, - 帮帮我
显示此命令的帮助

-q, - 安静的
在应用程序执行期间禁止来自 orterun 的信息性消息。

-v, --详细
冗长

-V, - 版
打印版本号。 如果没有给出其他参数,这也会导致
orterun 退出。

-显示地图, --显示地图
在启动之前显示一个表格,显示每个进程的映射位置。

-显示开发地图, --显示开发地图
显示更详细的表格,显示每个进程之前的映射位置
启动(通常是开发人员感兴趣的)。

-显示分配, --显示分配
显示检测到的资源分配。

使用以下选项之一指定要在集群的哪些主机(节点)上运行。
请注意,从 v1.8 版本开始,mpirun 将在每个主机上启动一个守护进程
在分配(由以下选项修改)的最开始
执行,无论应用程序进程最终是否会映射到
在那里执行。 这样做是为了允许从硬件拓扑信息收集
远程节点,从而允许我们根据已知拓扑映射进程。 然而,它是一个
与之前版本中守护进程仅在映射后启动的行为不同
已完成,因此仅发生在应用程序实际会执行的节点上
正在执行。

-H, -主办, - 主持人
在其上调用进程的主机列表。

-主机文件, --主机文件
提供要使用的主机文件。

-机器文件, --机器文件
同义词 -主机文件.

-cpu 集, --cpu-集
将启动的进程限制为每个节点上指定的逻辑 CPU。 注意
装订选项仍将适用于指定的信封 - 例如,您可以
选择将每个进程仅绑定到指定 cpu 集中的一个 cpu。

以下选项指定要启动的进程数。 请注意,没有一个
选项意味着特定的绑定策略 - 例如,为每个套接字请求 N 个进程
并不意味着进程将绑定到套接字。

-c, -n, --n, -例如 <#>
在给定的节点上运行这么多的程序副本。 该选项表示
指定的文件是可执行程序而不是应用程序上下文。 如果不
为要执行的副本数提供值(即,“-np”和
其同义词在命令行中提供),Open MPI 将自动执行
每个进程槽上的程序副本(请参阅下面的“进程
slot”)。但是这个特性只能在SPMD模型中使用,并且会返回
否则会出现错误(没有开始执行应用程序)。

— 地图依据 ppr:N:
在每个节点上启动 N 次指定类型的对象数。

-npersocket, --npersocket <#persocket>
在每个节点上,启动处理器插槽数倍的进程
节点。 这 -npersocket 选项也会打开 -绑定到套接字 选项。
(不赞成使用 --map-by ppr:n:socket)

-npernode, --nper节点 <#pernode>
在每个节点上,启动这么多进程。 (不赞成使用 --map-by
ppr:n:节点)

-每个节点, --每个节点
在每个节点上,启动一个进程——相当于 -npernode 1.(已弃用
赞成 --map-by ppr:1:node)

映射进程:

--映射依据
映射到指定对象,默认为 插座. 支持的选项包括插槽、
hwthread,核心,L1cache,L2cache,L3cache,套接字,numa,板,节点,顺序,
距离和ppr。 任何对象都可以通过添加 : 和任何
PE=n(将 n 个处理元素绑定到每个 proc)、SPAN(负载平衡)的组合
跨分配的进程),OVERSUBSCRIBE(允许一个节点上的更多进程
处理元素)和 NOOVERSUBSCRIBE。 这包括 PPR,其中
模式将由另一个冒号终止,以将其与修饰符分开。

-按核心, --bycore
按核心映射进程(不推荐使用 --map-by 核心)

-bysocket, --bysocket
通过套接字映射进程(不推荐使用 --map-by 套接字)

-nolocal, --nolocal
不要在与 orterun 相同的节点上运行已启动应用程序的任何副本
跑步。 此选项将覆盖列出本地主机 - 主持人 或任何其他
主机指定机制。

- 没有超额订阅, --nooversubscribe
不要超额订阅任何节点; 错误(不启动任何进程)如果
请求的进程数会导致超额订阅。 这个选项隐式
将“max_slots”设置为每个节点的“slots”值。

-旁节点, --bynode
Launch 处理每个节点一个,以循环方式逐个节点循环。 这个
在节点之间均匀分布进程并在一轮中分配 MPI_COMM_WORLD 等级-
robin,“按节点”方式。

要在 MPI_COMM_WORLD 中对进程的排名进行排序:

--排名依据
根据指定对象以循环方式排名,默认为 插槽.
支持的选项包括 slot、hwthread、core、L1cache、L2cache、L3cache、socket、
numa、板和节点。

对于进程绑定:

- 绑定到
将进程绑定到指定对象,默认为 核心. 支持的选项包括
slot、hwthread、core、l1cache、l2cache、l3cache、socket、numa、board 和 none。

-每个进程的CPU数, --每个进程的cpus <#perproc>
将每个进程绑定到指定数量的 CPU。 (已弃用,支持 --map-
经过:PE=n)

-每列 cpu 数, --每级 cpus <#perrank>
别名 -每个进程的CPU数. (不赞成使用 --map-by :PE=n)

-绑定到核心, --绑定到核心
将进程绑定到核心(不推荐使用 --bind-to 核心)

-绑定到套接字, --绑定到套接字
将进程绑定到处理器套接字(不推荐使用 --bind-to 套接字)

-绑定到无, --绑定到无
不绑定进程(不推荐使用 --bind-to none)

-报告绑定, --报告绑定
报告已启动进程的任何绑定。

-插槽列表, --插槽列表
用于绑定 MPI 进程的处理器 ID 列表。 指定的绑定
将应用于所有 MPI 进程。 请参阅下面的语法说明。

对于等级文件:

-射频, --排名文件
提供 rankfile 文件。

管理标准 I/O:

-输出文件名, --输出文件名
将所有进程的 stdout、stderr 和 stddiag 重定向到进程唯一的
指定文件名的版本。 文件名中的任何目录都将
自动创建。 每个输出文件将由 filename.id 组成,其中
id 将是进程在 MPI_COMM_WORLD 中的排名,左填充为零
列表中的正确排序。

-标准输入, --标准输入
要接收标准输入的进程的 MPI_COMM_WORLD 等级。 默认为
将 stdin 转发到 MPI_COMM_WORLD rank 0,但此选项可用于转发
任何进程的标准输入。 也可以指定 没有, 表明没有
进程将接收标准输入。

-标签输出, --标签输出
将每一行输出标记为 stdout、stderr 和 stddiag [工作编号,
MCW_rank] 表示进程jobid和MPI_COMM_WORLD等级
产生输出的进程和产生它的通道。

-时间戳输出, --时间戳输出
为 stdout、stderr 和 stddiag 的每一行输出添加时间戳。

-xml, --xml
以 xml 格式向 stdout、stderr 和 stddiag 提供所有输出。

-xterm, --xterm
显示由其 MPI_COMM_WORLD 等级标识的进程的输出
单独的 xterm 窗口。 排名被指定为逗号分隔的列表
范围,-1 表示所有。 将为每个人创建一个单独的窗口
指定的过程。 请注意: xterm 通常会在终止时终止窗口
在其中运行的进程。 但是,通过添加“!” 到列表的末尾
指定的等级,将提供适当的选项以确保 xterm 保持
窗户打开 after 进程终止,从而让您看到进程'
输出。 随后需要手动关闭每个 xterm 窗口。 请注意: In
在某些环境中,xterm 可能要求可执行文件位于用户路径中,或者
以绝对或相对方式指定。 因此,可能需要指定一个
本地可执行文件为“./foo”,而不仅仅是“foo”。 如果 xterm 无法找到
可执行文件,mpirun 将挂起,但仍然正确响应 ctrl-c。 如果这
发生,请检查是否正确指定了可执行文件并尝试
一次。

管理文件和运行时环境:

-路径, - 小路
将在尝试定位请求的可执行文件时使用。 这个
在使用本地 PATH 设置之前使用。

- 字首
将用于设置的前缀目录 PATHLD_LIBRARY_PATH
在调用 Open MPI 或目标进程之前的远程节点。 请参阅“远程
执行”部分,如下。

--预加载二进制
在启动远程计算机之前将指定的可执行文件复制到远程计算机
过程。 可执行文件将被复制到 Open MPI 会话目录并
工作完成后将被删除。

--预加载文件
将逗号分隔的文件列表预加载到当前工作目录
在启动这些进程之前启动进程的远程机器。

--预加载文件目标目录
用于预加载文件的目标目录,如果不是当前目录
工作目录。 默认情况下,提供的绝对和相对路径
--preload-files 被使用。

--tmpdir
仅为 mpirun 设置会话目录树的根。

-wd
同义词 -wdir.

-wdir
切换到目录在用户程序执行之前。 请参阅“当前
工作目录”部分的相对路径注释。 请注意: 如果 -wdir 选项
出现在命令行和应用程序上下文中,上下文将
优先于命令行。 因此,如果所需 wdir 的路径是
在后端节点上不同,则必须将其指定为绝对路径
对于后端节点是正确的。

-x
在执行之前将指定的环境变量导出到远程节点
程序。 每个只能指定一个环境变量 -x 选项。 现存的
可以指定环境变量或指定新变量名
相应的值。 例如:
% mpirun -x 显示 -x OFILE=/tmp/out ...

的解析器 -x 选项不是很复杂; 它甚至不明白
引用的值。 建议用户在环境中设置变量,然后使用
-x 导出(不定义)它们。

设置 MCA 参数:

-gmca, --gmca
传递适用于所有上下文的全局 MCA 参数。
参数名称; 是参数值。

-MCA, --mca
将参数发送到各种 MCA 模块。 请参阅下面的“MCA”部分。

用于调试:

-调试, -调试
调用由 orte_base_user_debugger 马华
参数。

-调试器, --调试器
要搜索的调试器序列 -调试 使用(即同义词
orte_base_user_debugger MCA 参数)。

-电视, - 电视
在 TotalView 调试器下启动进程。 已弃用的向后兼容性
旗帜。 同义词 -调试.

还有其他选择:

--允许以 root 身份运行
米匹伦 由 root 用户执行时运行 (米匹伦 默认为中止
以 root 用户身份启动时)。

-中止, --中止 <#>
设置要显示的最大中止进程数。

- 应用程序
提供一个 appfile,忽略所有其他命令行选项。

-cf, --cartofile
提供制图文件。

--异类
表示提供了多个混合 32/64 位的 app_contexts
二进制文件。

-离开会话附加, --离开会话附加
不要分离此应用程序使用的 OmpiRTE 守护进程。 这允许错误消息
来自守护进程以及底层环境(例如,当未能
启动一个守护进程)要输出。

-ompi-服务器, --ompi-服务器 <uri or 档案>
指定 Open MPI 服务器的 URI(或用作服务器的 mpirun),
包含该信息的文件的名称(指定为 file:filename),或
要用作的 mpirun 的 PID(指定为 pid:#)
服务器。 Open MPI 服务器用于支持多应用数据
通过 MPI-2 MPI_Publish_name 和 MPI_Lookup_name 函数进行交换。

-报告-pid, --报告 pid
启动时打印出mpirun的PID。 通道必须是一个“-”来表示
cate pid 将被输出到 stdout,一个“+”表示 pid 是
输出到 stderr,或要写入 pid 的文件名。

-报告-uri, --报告-uri
在启动时打印出 mpirun 的 URI。 通道必须是一个“-”来表示
cate 表示 URI 将被输出到 stdout,一个“+”表示 URI 将被输出到 stdout
输出到 stderr,或要写入 URI 的文件名。

-等待服务器, --等待服务器
在启动作业之前暂停 mpirun,直到检测到 ompi-server。 这很有用
在 ompi-server 可以在后台启动的脚本中,立即执行
由一个 米匹伦 希望连接到它的命令。 Mpirun 将暂停,直到
联系了指定的 ompi-server 或超出了 server-wait-time。

-服务器等待时间, --服务器等待时间
mpirun 应该等待 ompi-server 的最长时间(以秒为单位)
开始。 默认值为 10 秒。

以下选项对开发人员很有用; 它们通常对大多数人没有用
ORTE 和/或 MPI 用户:

-d, --调试开发
启用 OmpiRTE(Open MPI 中的运行时层)的调试。 这不是
通常对大多数用户有用。

--调试守护进程
启用对此应用程序使用的任何 OmpiRTE 守护程序的调试。

--debug-daemons-文件
启用调试此应用程序使用的任何 OmpiRTE 守护程序,将输出存储在
文件。

-启动代理, --启动代理
用于在远程节点上启动进程的可执行文件的名称。
默认为“orted”。 此选项可用于测试新的守护进程概念,或
将选项传递回守护进程,而无需 mpirun 本身看到它们。 为了
例如,指定 orted -mca odls_base_verbose 5 的启动代理允许
开发人员要求 orted 在没有 mpirun 本身混乱的情况下调试输出。

--无前缀
禁用自动 --prefix 行为

可能还有其他选项列出 米匹伦 - 帮帮我.

环境 变量
MPIEXEC_TIMEOUT
最大秒数 米匹伦 (执行) 会跑。 经过这么多
米匹伦 将中止启动的作业并退出。

商品描述


一次调用 米匹伦 启动在 Open MPI 下运行的 MPI 应用程序。 如果
应用程序是单进程多数据 (SPMD),应用程序可以在
这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 米匹伦 命令行。

如果应用程序是多指令多数据(MIMD),包括多个
程序,程序集和参数可以通过以下两种方式之一指定: 扩展
命令行参数和应用程序上下文。

应用程序上下文描述了 MIMD 程序集,包括在一个
单独的文件。 该文件基本上包含多个 米匹伦 命令行,少了
命令名称本身。 能够为不同的对象指定不同的选项
程序的实例化是使用应用程序上下文的另一个原因。

扩展的命令行参数允许描述应用程序布局
命令行使用冒号 (:) 来分隔程序和参数的规范。
某些选项在所有指定的程序中全局设置(例如 --hostfile),而
其他特定于单个程序(例如-np)。

指定 主办方 Nodes
主机节点可以在 米匹伦 命令行与 -主办 选项或在
主机文件。

例如,

mpirun -H aa,aa,bb ./a.out
在节点 aa 上启动两个进程,在 bb 上启动一个进程。

或者,考虑主机文件

% 猫我的主机文件
aa插槽=2
bb槽=2
cc 插槽 = 2

在这里,我们列出了主机名(aa、bb 和 cc)以及有多少个“插槽”
每个。 时隙表示一个节点上可以执行多少个进程。 最好的
性能,插槽数可以选择为节点上的核心数或
处理器插槽的数量。 如果主机文件不提供插槽信息,
假定默认值为 1。 在资源管理器(例如 SLURM、Torque、
等),Open MPI 将直接从
资源管理器。

mpirun -hostfile myhostfile ./a.out
将在三个节点中的每个节点上启动两个进程。

mpirun -hostfile myhostfile -host aa ./a.out
将启动两个进程,都在节点 aa 上。

mpirun -hostfile myhostfile -host dd ./a.out
将发现没有主机可以运行并因错误而中止。 即指定主机dd
不在指定的主机文件中。

指定 联系电话 of 流程
正如我们刚刚看到的,可以使用主机文件设置要运行的进程数。 其他
机制存在。

启动的进程数可以指定为节点数的倍数或
处理器插槽可用。 例如,

mpirun -H aa,bb -npersocket 2 ./a.out
在节点 aa 上启动进程 0-3,在节点 bb 上启动进程 4-7,其中 aa 和 bb 都是
双插槽节点。 这 -npersocket 选项也会打开 -绑定到套接字 选项,
这将在后面的部分中讨论。

mpirun -H aa,bb -npernode 2 ./a.out
在节点 aa 上启动进程 0-1,在节点 bb 上启动进程 2-3。

mpirun -H aa,bb -npernode 1 ./a.out
每个主机节点启动一个进程。

mpirun -H aa,bb -pernode ./a.out
是相同的 -npernode 1.

另一种选择是指定进程数 -例如 选项。 考虑
现在主机文件

% 猫我的主机文件
aa插槽=4
bb槽=4
cc 插槽 = 4

现在,

mpirun -hostfile myhostfile -np 6 ./a.out
将在节点 aa 上启动进程 0-3,在节点 bb 上启动进程 4-5。 其余
将不会使用主机文件中的插槽,因为 -例如 选项表明只有 6
应该启动进程。

地图绘制 流程 节点: 运用 政策
上面的例子说明了流程进程到节点的默认映射。 这个
映射也可以用各种控制 米匹伦 描述映射策略的选项。

考虑与上面相同的主机文件,再次使用 -例如 6:

节点 aa 节点 bb 节点 cc

0 1 2 3 4 5

mpirun --map-by 节点 0 3 1 4 2 5

mpirun-nolocal 0 1 2 3 4 5

- --映射依据 节点 选项将在可用节点之间对进程进行负载平衡,
以循环方式为每个进程编号。

- -nolocal 选项阻止任何进程被映射到本地主机(在这个
案例节点 aa)。 尽管 米匹伦 通常消耗很少的系统资源, -nolocal
有助于启动非常大的工作 米匹伦 可能实际上需要使用明显的
内存量和/或处理时间。

正如 -例如 可以指定比插槽数更少的进程,也可以超额订阅
插槽。 例如,使用相同的主机文件:

mpirun -hostfile myhostfile -np 14 ./a.out
将在节点 aa 上启动进程 0-3,在 bb 上启动 4-7,在 cc 上启动 8-11。 然后它会添加
剩下的两个进程到它选择的任何节点。

还可以指定超额认购的限制。 例如,使用相同的主机文件:

mpirun -hostfile myhostfile -np 14 -nooversubscribe ./a.out
会产生错误,因为 - 没有超额订阅 防止超额认购。

也可以在主机文件本身中指定对超额订阅的限制:
% 猫我的主机文件
aa slot=4 max_slots=4
bb max_slots=4
cc 插槽 = 4

- 最大插槽数 字段指定了这样的限制。 当它这样做时, 插槽 值默认为
限制。 现在:

mpirun -hostfile myhostfile -np 14 ./a.out
导致前 12 个进程像以前一样启动,但其余两个进程
进程将被强制到节点 cc。 其他两个节点受保护
防止此作业超额订阅的主机文件。

使用 --nooversubscribe 选项可能会有所帮助,因为 Open MPI 目前无法获得
来自资源管理器的“max_slots”值。

当然可以, -例如 也可以与 -H or -主办 选项。 例如,

mpirun -H aa,bb -np 8 ./a.out
启动8个进程。 由于只指定了两个主机,在前两个之后
进程被映射,一个到 aa,一个到 bb,其余进程超额订阅
指定的主机。

这是一个 MIMD 示例:

mpirun -H aa -np 1 主机名:-H bb,cc -np 2 正常运行时间
将启动进程 0 运行 主机 在节点 aa 和进程 1 和 2 上每个运行
正常运行时间 分别在节点 bb 和 cc 上。

映射, 排行, 绑定: Oh 我的!
Open MPI 采用三阶段程序来分配进程位置和等级:

制图 为每个进程分配一个默认位置

排行 为每个进程分配一个 MPI_COMM_WORLD 等级值

捆绑 限制每个进程在特定处理器上运行

- 制图 step 用于根据映射器为每个进程分配一个默认位置
被雇用。 按槽、节点和顺序映射导致分配
处理到节点级别。 相反,按对象映射,允许映射器分配
到每个节点上的实际对象的过程。

请注意: 分配给进程的位置与它将被绑定的位置无关 -
赋值仅用作绑定算法的输入。

流程流程到节点的映射不仅可以通过通用策略来定义
而且,如有必要,还可以使用无法通过简单描述的任意映射
政策。 可以使用“顺序映射器”,它逐行读取主​​机文件,
按照主机文件指定的任何顺序将进程分配给节点。 使用 -MCA 映射
以次 选项。 例如,使用与以前相同的主机文件:

mpirun -hostfile myhostfile -mca rmaps seq ./a.out

将启动三个进程,分别在节点 aa、bb 和 cc 上运行一个进程。 插槽
计数无关紧要; 在列表中列出的任何节点上每行启动一个进程
线。

指定任意映射的另一种方法是使用 rankfile,它为您提供详细的
也可以控制进程绑定。 下面讨论等级文件。

第二阶段的重点是 排行 作业的 MPI_COMM_WORLD 中的进程。
Open MPI 将其与映射过程分开,以便在
MPI 进程的相对位置。 考虑以下几点可以最好地说明这一点
我们使用 —map-by ppr:2:socket 选项的两种情况:

节点 aa 节点 bb

按核心排名 0 1 ! 2 3 4 5 ! 6 7

插座 0 2 ! 1 3 4 6 ! 5 7

按套接字排序:跨度 0 4 ! 1 5 2 6 ! 3 7

按内核和插槽排名提供相同的结果 - 一个简单的进展
MPI_COMM_WORLD 在每个节点上排名。 按套接字排名在内部进行循环排名
每个节点,直到所有进程都被分配了一个 MCW 等级,然后前进到
下一个节点。 添加 跨度 排名指令的修饰符导致排名算法
将整个分配视为单个实体 - 因此,分配了 MCW 等级
穿过所有插座,然后再回到起点。

- 捆绑 阶段实际上将每个进程绑定到一组给定的处理器。 这个可以
如果操作系统以次优方式放置进程,则可以提高性能。 为了
例如,它可能会超额订阅某些多核处理器插槽,而保留其他插槽
闲置的; 这会导致进程不必要地争夺公共资源。 或者,它
可能会将流程分散得太广; 如果应用程序性能,这可能是次优的
对进程间通信成本敏感。 绑定也可以保持操作
系统过度迁移进程,无论这些进程如何优化
被放置开始。

用于绑定的处理器可以根据拓扑分组进行识别
- 例如,绑定到 l3cache 会将每个进程绑定到范围内的所有处理器
在其指定位置内的单个 L3 缓存。 因此,如果一个进程被分配给
映射到某个套接字,然后 -绑定到 缓存 指令将导致进程
绑定到在该套接字内共享单个 L3 缓存的处理器。

为了帮助平衡负载,绑定指令在绑定到
级别低于映射器中使用的级别。 例如,考虑映射作业的情况
到套接字级别,然后绑定到核心。 每个插槽将有多个内核,所以如果
多个进程映射到一个给定的套接字,绑定算法将分配每个
进程以循环方式定位到一个套接字到一个独特的核心。

或者,由 l2cache 映射然后绑定到套接字的进程将被简单地绑定
到它们所在的插槽中的所有处理器。 通过这种方式,用户可以
对相对 MCW 等级位置和绑定进行详细控制。

最后, --报告绑定 可用于报告绑定。

例如,考虑一个具有两个处理器插槽的节点,每个处理器插槽包含四个内核。 我们
运行 米匹伦 - -例如 4 --报告绑定 以及以下附加选项:

% mpirun ... --map-by core --bind-to core
[...] ... 将子节点 [...,0] 绑定到 CPU 0001
[...] ... 将子节点 [...,1] 绑定到 CPU 0002
[...] ... 将子节点 [...,2] 绑定到 CPU 0004
[...] ... 将子节点 [...,3] 绑定到 CPU 0008

% mpirun ... --map-by 套接字 --bind-to 套接字
[...] ... 将子节点 [...,0] 绑定到 socket 0 cpu 000f
[...] ... 将子节点 [...,1] 绑定到套接字 1 cpus 00f0
[...] ... 将子节点 [...,2] 绑定到 socket 0 cpu 000f
[...] ... 将子节点 [...,3] 绑定到套接字 1 cpus 00f0

% mpirun ... --map-by core:PE=2 --bind-to core
[...] ... 将子节点 [...,0] 绑定到 CPU 0003
[...] ... 将子节点 [...,1] 绑定到 cpus 000c
[...] ... 将子节点 [...,2] 绑定到 CPU 0030
[...] ... 将子节点 [...,3] 绑定到 cpus 00c0

% mpirun ... --绑定到无

在这里, --报告绑定 将每个进程的绑定显示为掩码。 在第一种情况下,
这些进程绑定到由掩码 0001、0002、0004 和
0008. 在第二种情况下,进程绑定到连续套接字上的所有内核,如图所示
通过掩码 000f 和 00f0。 进程在一个回合中循环通过处理器插槽 -
robin fashion 视需要而定。 在第三种情况下,掩码向我们展示了 2
每个进程都绑定了内核。 第四种情况,绑定关闭,没有
报告绑定。

Open MPI 对进程绑定的支持取决于底层操作系统。
因此,某些进程绑定选项可能并非在每个系统上都可用。

也可以使用 MCA 参数设置进程绑定。 它们的使用不如
米匹伦 选项。 另一方面,MCA 参数不仅可以在
米匹伦 命令行,但也可以在系统或用户 mca-params.conf 文件中或作为
环境变量,如下面的 MCA 部分所述。 一些例子包括:

mpirun 选项 MCA 参数键值

--map-by 核心 rmaps_base_mapping_policy 核心
--map-by 套接字 rmaps_base_mapping_policy 套接字
--rank-by 核心 rmaps_base_ranking_policy 核心
--bind-to 核心 hwloc_base_binding_policy 核心
--bind-to 套接字 hwloc_base_binding_policy 套接字
--bind-to none hwloc_base_binding_policy 无

等级文件
Rankfiles 是文本文件,指定有关单个进程如何执行的详细信息
应该映射到节点,以及它们应该绑定到哪个处理器。 每行一个
rankfile 指定一个进程的位置(对于 MPI 作业,进程的“等级”是指
到其在 MPI_COMM_WORLD 中的排名)。 rankfile中每一行的一般形式为:

秩= 插槽=

例如:

$ 猫我的排名文件
等级 0=aa slot=1:0-2
等级 1=bb 槽=0:0,1
等级 2=cc 槽=1-2
$ mpirun -H aa,bb,cc,dd -rf myrankfile ./a.out

意思是

等级 0 在节点 aa 上运行,绑定到逻辑套接字 1,核心 0-2。
等级 1 在节点 bb 上运行,绑定到逻辑套接字 0、核心 0 和 1。
等级 2 在节点 cc 上运行,绑定到逻辑核心 1 和 2。

Rankfiles 也可用于指定 处理器位置。 在这种情况下,
语法有些不同。 套接字不再被识别,并且插槽号
给出的必须是物理 PU 的编号,因为大多数操作系统不分配唯一的物理
节点中每个核心的标识符。 因此,一个合适的物理 rankfile 看起来像
执行以下操作:

$ cat myphysicalrankfile
等级 0=aa slot=1
等级1=bb槽=8
等级 2=cc 槽=6

这意味着

Rank 0 将在节点 aa 上运行,绑定到包含物理 PU 1 的核心
Rank 1 将在节点 bb 上运行,绑定到包含物理 PU 8 的核心
Rank 2 将在节点 cc 上运行,绑定到包含物理 PU 6 的核心

Rankfiles 被视为 合乎逻辑的 默认情况下,和 MCA 参数
rmaps_rank_file_physical 必须设置为 1 以指示 rankfile
当作是 .

上面列出的主机名是“绝对的”,这意味着实际可解析的主机名是
指定的。 但是,主机名也可以指定为“相对”,这意味着它们是
与外部指定的主机名列表相关的指定(例如,由 mpirun 的
--host 参数、主机文件或作业调度程序)。

“相对”规范的形式为“+n ",其中 X 是一个整数,指定
所有可用主机名集中的第 X 个主机名,从 0 开始索引。例如:

$ 猫我的排名文件
rank 0=+n0 slot=1:0-2
等级 1=+n1 槽=0:0,1
等级 2=+n2 槽=1-2
$ mpirun -H aa,bb,cc,dd -rf myrankfile ./a.out

从 Open MPI v1.7 开始,所有插槽/核心插槽位置都指定为 合乎逻辑的
索引(使用的 Open MPI v1.6 系列 索引)。 您可以使用工具,例如
HWLOC 的 "lstopo" 用于查找套接字和内核的逻辑索引。

应用程序 语境 or 可执行文件 程序?
为了区分这两种不同的形式, 米匹伦 在命令行上查找 - 应用程序 选项。
如果已指定,则假定命令行上命名的文件是一个
应用上下文。 如果未指定,则假定该文件是可执行文件
程序。

定位
如果没有为文件指定相对或绝对路径,Open MPI 将首先查找
文件通过搜索指定的目录 - 小路 选项。 如果没有 - 小路
选项设置或如果文件未在 - 小路 位置,然后打开 MPI 将搜索
源节点上定义的用户 PATH 环境变量。

如果指定了相对目录,则它必须相对于初始工作目录
由使用的具体启动器决定。 例如,当使用 rsh 或 ssh 启动器时,
初始目录默认为 $HOME。 其他初学者可以将初始目录设置为
来自调用的当前工作目录 米匹伦.

电流 工进 目录
- -wdir mpirun 选项(及其同义词, -wd) 允许用户更改为任意
调用程序之前的目录。 它也可以在应用程序上下文文件中使用
指定特定节点上和/或特定应用程序的工作目录。

如果 -wdir 选项同时出现在上下文文件和命令行中,上下文
文件目录将覆盖命令行值。

如果 -wdir 选项被指定,Open MPI 将尝试更改为指定的
所有远程节点上的目录。 如果这失败, 米匹伦 将中止。

如果 -wdir 选项是 而不去 指定,Open MPI 将把目录名发送到 米匹伦
被调用到每个远程节点。 远程节点将尝试更改为
目录。 如果它们不能(例如,如果该节点上不存在该目录),则
Open MPI 将使用由启动器确定的默认目录。

所有目录更改都发生在调用用户程序之前; 它不会等到
MPI_INIT 叫做。

标准版 I / O
Open MPI 将 UNIX 标准输入定向到所有进程上的 /dev/null,除了
MPI_COMM_WORLD 等级 0 进程。 MPI_COMM_WORLD rank 0 进程继承标准输入
米匹伦. 请注意: 调用的节点 米匹伦 不必与所在的节点相同
MPI_COMM_WORLD 等级 0 进程驻留。 Open MPI 处理重定向 米匹伦's
等级 0 过程的标准输入。

Open MPI 将 UNIX 标准输出和错误从远程节点定向到调用的节点
米匹伦 并将其打印在标准输出/错误上 米匹伦. 本地进程继承
标准输出/错误 米匹伦 并直接转移到它。

因此,可以通过使用
典型的 shell 重定向过程 米匹伦.

% mpirun -np 2 my_app < my_input > my_output

注意在这个例子中 仅由 MPI_COMM_WORLD rank 0 进程将接收流
我的输入 在标准输入上。 所有其他节点上的标准输入将绑定到 /dev/null。
但是,来自所有节点的 stdout 将被收集到 我的输出 文件中。

信号 传播
当 orterun 收到 SIGTERM 和 SIGINT 时,它会尝试通过
向作业中的所有进程发送一个 SIGTERM,等待几秒钟,然后
向作业中的所有进程发送 SIGKILL。

orterun 接收到的 SIGUSR1 和 SIGUSR2 信号被传播到
工作。

可以通过以下方式开启转发SIGSTOP和SIGCONT到mpirun执行的程序
将 MCA 参数 orte_forward_job_control 设置为 1。发送到 mpirun 的 SIGTSTOP 信号将
然后导致一个 SIGSTOP 信号被发送到所有由 mpirun 启动的程序和
同样,向 mpirun 发送 SIGCONT 信号将导致发送 SIGCONT。

orterun 当前不传播其他信号。

流程 终止 / 信号 处理
在 MPI 应用程序运行期间,如果任何进程异常终止(退出
在调用之前 MPI_FINALIZE,或因信号而死亡), 米匹伦 会打印出来
一条错误消息并终止 MPI 应用程序的其余部分。

用户信号处理程序可能应该避免尝试清理 MPI 状态(Open MPI 是
目前不是异步信号安全的; 看 MPI_初始化线程(3) 有关详细信息
MPI_THREAD_MULTIPLE 和线程安全)。 例如,如果分段错误发生在
MPI_SEND (可能是因为传入了错误的缓冲区)并且用户信号处理程序是
已调用,如果此用户处理程序尝试调用 MPI_FINALIZE, 坏事可能发生
因为在发生错误时 Open MPI 已经在 MPI 中。 自从 米匹伦 会注意到
进程因信号而死亡,这可能不是必要的(也是最安全的)
用户只清理非 MPI 状态。

流程 环境
MPI 应用程序中的进程从 Open RTE 守护进程继承它们的环境
它们正在运行的节点。 环境通常继承自
用户的外壳。 在远程节点上,确切的环境由引导 MCA 模块决定
用过的。 这 RSH 例如,启动模块使用 RSH/SSH 启动开放式 RTE
远程节点上的守护进程,通常执行一个或多个用户的 shell-setup 文件
在启动 Open RTE 守护进程之前。 当运行动态链接的应用程序时
要求 LD_LIBRARY_PATH 要设置的环境变量,必须注意确保
它在启动 Open MPI 时正确设置。

有关更多详细信息,请参阅“远程执行”部分。

远程 执行
Open MPI 要求 PATH 设置环境变量以在远程查找可执行文件
节点(这通常只在 RSH- 要么 SSH——基于环境——
批处理/调度环境通常将当前环境复制到执行
远程工作,所以如果当前环境有 PATHLD_LIBRARY_PATH 正确设置,
远程节点也将正确设置)。 如果 Open MPI 是使用共享编译的
库支持,可能还需要 LD_LIBRARY_PATH 环境变量
也在远程节点上设置(特别是找到运行用户所需的共享库
MPI 应用程序)。

然而,编辑 shell 启动文件来设置并不总是可取或可能的 PATH
LD_LIBRARY_PATH。 该 - 字首 为一些简单的配置提供了选项
这是不可能的。

- - 字首 选项采用单个参数:远程节点上的基本目录,其中
已安装 Open MPI。 打开 MPI 会使用这个目录来设置远程 PATH
LD_LIBRARY_PATH 在执行任何 Open MPI 或用户应用程序之前。 这允许运行
无需预先配置即可打开 MPI 作业 PATHLD_LIBRARY_PATH 在遥控器上
节点。

Open MPI 添加当前节点的“bindir”(Open MPI 所在的目录)的基本名称
可执行文件)到前缀并使用它来设置 PATH 在远程节点上。
类似地,Open MPI 添加了当前节点的“libdir”(所在目录)的基名
Open MPI 的库安装)到前缀并使用它来设置 LD_LIBRARY_PATH
在远程节点上。 例如:

本地绑定目录:/local/node/directory/bin

本地 libdir:/local/node/directory/lib64

如果使用以下命令行:

% mpirun --prefix /远程/节点/目录

打开 MPI 会将“/remote/node/directory/bin”添加到 PATH
在尝试之前将“/remote/node/directory/lib64”添加到远程节点上的 D_LIBRARY_PATH
执行任何事情。

- - 字首 如果远程节点上的安装路径是
不同于本地节点(例如,如果“/ lib目录" 在本地节点上使用,但是 "/lib64“是
在远程节点上使用),或者如果安装路径不是
公共前缀下的子目录。

注意执行 米匹伦 通过绝对路径名相当于指定 - 字首
没有绝对路径名中的最后一个子目录 米匹伦。 例如:

% /usr/本地/bin/mpirun ...

相当于

% mpirun --前缀 在/ usr /本地

已出口 环境 变量
以 OMPI_* 形式命名的所有环境变量将自动导出
到本地和远程节点上的新进程。 环境参数也可以
使用 MCA 参数设置/转发到新进程 mca_base_env_list。 该 -x
选项 米匹伦 已被弃用,但 MCA 参数的语法遵循先前的
例子。 虽然语法 -x option 和 MCA 参数允许定义新的
变量,请注意这些选项的解析器目前不是很复杂 -
它甚至不理解引用的值。 建议用户在
环境并使用选项导出它们; 不要定义它们。

设置 马华 参数
- -MCA 开关允许将参数传递给各种 MCA(模块化组件
架构)模块。 MCA 模块对 MPI 程序有直接影响,因为它们允许
要在运行时设置的可调参数(例如要使用哪个 BTL 通信设备驱动程序)
使用,传递给该 BTL 的参数等)。

- -MCA switch 有两个参数: 。 该 一般论证
指定哪个 MCA 模块将接收该值。 例如, 使用“btl”
选择用于传输 MPI 消息的 BTL。 这 论点是
传递的值。 例如:

mpirun -mca btl tcp,self -np 1 foo
告诉 Open MPI 使用“tcp”和“self”BTL,并运行“foo”的单个副本和
分配的节点。

mpirun -mca btl self -np 1 foo
告诉 Open MPI 使用“self”BTL,并运行已分配的“foo”的单个副本
节点。

- -MCA switch 可以多次使用来指定不同的
论据。 如果相同 被指定不止一次, s 连接在一起
用逗号 (",") 分隔它们。

请注意 -MCA switch 只是设置环境变量的快捷方式。 这
之前设置相应的环境变量也可以达到同样的效果
运行 米匹伦. Open MPI 设置的环境变量的形式为:

OMPI_MCA_ =

因此,该 -MCA switch 覆盖任何先前设置的环境变量。 这 -MCA
设置类似地覆盖 $OPAL_PREFIX/etc/openmpi-mca- 中设置的 MCA 参数
params.conf 或 $HOME/.openmpi/mca-params.conf 文件。

不明 参数仍然设置为环境变量——它们不被检查(通过
米匹伦) 的正确性。 非法或不正确 争论可能是也可能不是
报告 - 这取决于特定的 MCA 模块。

查找 MCA 架构下可用的组件类型,或查找可用的组件类型
特定组件的参数,使用 ompi_信息 命令。 见 ompi_信息(1) 男子
有关该命令的详细信息的页面。

运行 as
Open MPI 团队强烈建议不要执行 米匹伦 作为 root 用户。 初级产业部
应用程序应该作为普通(非 root)用户运行。

反映这个建议,mpirun 将默认拒绝以 root 身份运行。 要覆盖这个
默认情况下,您可以添加 --允许以 root 身份运行 选项 米匹伦 命令行。

Exit 退出 状态
什么没有标准定义 米匹伦 应该作为退出状态返回。 后
经过大量讨论,我们确定了以下分配方法 米匹伦 出口
状态(注意:在下面的描述中,“主要”工作是初始申请
由 mpirun 启动 - 由该作业产生的所有作业都被指定为“次要的”
工作):

· 如果主作业中的所有进程通常以退出状态 0 终止,我们返回 0

· 如果主作业中的一个或多个进程通常以非零退出终止
状态,我们将 MPI_COMM_WORLD 等级最低的进程的退出状态返回到
具有非零状态

· 如果主要作业中的所有进程通常以退出状态 0 终止,并且有一个或
次要作业中的更多进程通常以非零退出状态终止,我们 (a)
返回最低 MPI_COMM_WORLD 排名最低的进程的退出状态
jobid 具有非零状态,并且 (b) 输出总结退出状态的消息
主要和所有次要工作。

· 如果 cmd 行选项 --report-child-jobs-separately 被设置,我们将返回 -only-
主要作业的退出状态。 辅助作业中的任何非零退出状态都将是
仅在摘要打印声明中报告。

默认情况下,OMPI 记录并注释 MPI 进程以非零终止退出
地位。 这通常不被视为“异常终止”——即,OMPI 不会
如果一个或多个进程返回非零状态,则中止 MPI 作业。 相反,默认
行为只是报告以非零状态终止的进程数
完成工作。

但是,在某些情况下,可能需要在任何进程中中止作业
以非零状态终止。 例如,非 MPI 作业可能会检测到来自
计算并想中止,但不想生成核心文件。 或者 MPI 工作
可能会继续调用 MPI_Finalize,但指示所有进程都应该中止
由于一些后 MPI 结果。

预计这种情况不会经常发生。 然而,为了利益
为更广泛的社区服务,OMPI 现在有一种方法可以让用户指导
在任何以非零状态退出的进程时中止作业。 设置 MCA 参数
"orte_abort_on_non_zero_status" 为 1 将导致 OMPI 中止所有进程一次
工艺
以非零状态退出。

以这种方式导致的终止将在控制台上报告为“异常
终止”,第一个退出的进程与其退出状态一起被识别。

示例


请务必查看以上各节中的示例。

mpirun -np 4 -mca btl ib,tcp,self prog1
使用“ib”、“tcp”和“self” BTL 运行 4 个 prog1 副本以传输 MPI
消息。

mpirun -np 4 -mca btl tcp,sm,self
--mca btl_tcp_if_include eth0 prog1
使用“tcp”、“sm”和“self” BTL 运行 4 个 prog1 副本以传输 MPI
消息,与 TCP 仅使用 eth0 接口进行通信。 请注意,其他 BTL
有类似的 if_include MCA 参数。

返回 VALUE


米匹伦 如果所有进程都由 米匹伦 调用 MPI_FINALIZE 后退出。 一种
如果在 mpirun 中发生内部错误,则返回非零值,或者一个或多个
进程在调用 MPI_FINALIZE 之前退出。 如果 mpirun 发生内部错误,
返回相应的错误代码。 如果一个或多个进程退出
在调用 MPI_FINALIZE 之前,进程的 MPI_COMM_WORLD 等级的返回值
米匹伦 在调用 MPI_FINALIZE 之前死亡的第一个通知将被返回。 注意,
一般来说,这将是第一个死亡的进程,但不能保证会如此。

使用 onworks.net 服务在线使用 mpirun.openmpi



最新的 Linux 和 Windows 在线程序