跳转至

Openmpi MPIOPT

# 华为ARM
MPIOPT="-mca pml ucx --mca btl ^vader,tcp,openib,uct -x UCX_NET_DEVICES=mlx5_0:1"
mpirun -np 4 $MPIOPT ./prob1

mpirun参数

root用户需要加–allow-run-as-root 参数1 参数2

-x \

  1. 在执行程序之前将指定的环境变量导出到远程节点。
  2. 每个 -x 选项只能指定一个环境变量。 可以指定现有环境变量或使用相应值指定新变量名称。 例如:
    % mpirun -x DISPLAY -x OFILE=/tmp/out ...
    
  3. 建议用户在环境中设置变量,然后使用 -x 导出(非定义)它们。

MCA 组件

设置 MCA(Modular Component Architecture ) 参数

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

-mca 开关接受两个参数:\ 和 \。 \ 参数通常指定哪个 MCA 模块将接收该值。例如,\ "btl" 用于选择用于传输 MPI 消息的 BTL。 \ 参数是传递的值。

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

可以多次使用以指定不同的 \ 和/或 \ 参数。如果多次指定相同的 \,则 \ 将用逗号 (",") 连接起来,将它们分隔开。

未知的\值不会报warning

MCA通过环境变量实现

OMPI_MCA_\=\

MCA通过指定包含相关选项的文件实现

-tune, --tune \

MCA设置的优先级

-mca选项会覆盖环境变量,也会覆盖默认文件

$OPAL_PREFIX/etc/openmpi/openmpi-mca-params.conf

或者$OPAL_PREFIX/etc/openmpi-mca-params.conf

或者$HOME/.openmpi/mca-params.conf

MCA 默认default值

https://stackoverflow.com/questions/36635061/how-to-check-which-mca-parameters-are-used-in-openmpi

set mpi_show_mca_params to all

MCA可用的组件-通过ompi_info

ompi_info指令

ompi_info - 显示有关 Open MPI 安装的信息 三种常见场景: 1. 检查本地配置并查看 Open MPI 是如何安装的。 2. 向 Open MPI 社区提交错误报告/帮助请求 3. 查看已安装的 Open MPI 插件列表并查询它们支持哪些 MCA 参数。 4. ompi_info --all 显示所有MCA选项,包括在某些环境变量值下才可用的隐藏选项

ompi_info查看使用情况

比如不清楚 --mca btl vader,可以运行 ompi_info --param btl vader --level 9

BTL

MPI point-to-point byte transfer layer, used for MPI

BTL 组件框架负责处理所有点对点消息传送,该层只是简单地移动字节序列,不考虑上层点对点通信协议,包含了一组用于发送/接收或RDMA 的通信组件单元。BTL 不受 MPI 语义的影响,它仅仅是通过最基本的传递功能来在进程间进行数据交换(包括连续的和非连续的数据)。这样的组件框架为网络设备的开发商提供了便利,同时也可以支持更广泛的结点间通信设备。

^号与...符号

btl 参数的值是一个由逗号分隔的组件列表,带有可选的前缀 ^(插入符号)来表示排除之后的组件。

% mpirun --mca framework comp1, comp2 ^comp3 # ^comp3前注意没有,号
在此示例中,组件 comp1 和 comp2 包含在 --mca 框架指定的框架中。组件 comp3 被排除在外,因为它前面有 ^(插入符号)符号。
% mpirun --mca framework ^comp3,comp1
因为,号的原因是一个整体,所以是排除comp3,comp1两项

例如,以下命令从 BTL 框架中排除 tcp 和 openib 组件,并隐式包含所有其他组件

% mpirun --mca btl ^tcp,openib ... # ...是rest的意思
在命令中使用插入符号后跟省略号表示“对其余组件执行相反的操作”。 当 mpirun --mca 命令指定要排除的组件时,省略号后面的插入符号隐式包含该框架中的其余组件。 当 mpirun --mca 命令专门包含组件时,后面跟有省略号的表示“并排除未指定的组件”。

例如,以下命令仅包含 btl 的 self、sm 和 gm 组件,并隐式排除其余部分:

% mpirun --mca btl self,sm,gm ...

PML

MPI point-to-point management layer

PML 组件框架负责管理所有消息的传递,实现了 MPI 点点通信原语,包括标准、缓冲、准备和同步四种通信模式。PML 根据具体的调度策略对 MPI 消息进行调度,该策略是根据 BTL 的具体属性决定的。短消息传递协议和长消息传递协议也是在 PML 中实现的。所有控制信息(ACK/NACK/MATCH)也都由 PML 进行管理。这种结构的优点是将传输协议从底层互连中分离出来,显著的降低了代码的复杂度和冗余度,增强了可维护性。

需要进一步的研究学习

不使用btl??

遇到的问题

暂无

参考文献

https://docs.oracle.com/cd/E19923-01/820-6793-10/mca-params.html

https://www.open-mpi.org/faq/?category=openfabrics

http://blog.sysu.tech/MPI/OpenMPI/OpenMPI%E5%B8%B8%E7%94%A8%E6%8A%80%E5%B7%A7/

http://blog.sysu.tech/MPI/OpenMPI/OpenMPI%E5%B8%B8%E7%94%A8%E6%8A%80%E5%B7%A7/

https://blog.csdn.net/qq_15457239/article/details/49152209