13.8. 内部框架
模块化组件架构(MCA)是Open MPI的核心支柱——大部分服务和功能都是通过MCA组件实现的。
13.8.1. MPI层框架
以下是Open MPI MPI层中所有组件框架的列表:
bml: BTL管理层coll: MPI 集合通信算法fbtl: 点对点文件字节传输层:为MPI I/O提供独立读取、集体读写操作的抽象层fcoll: 用于MPI I/O的集体文件系统函数fs: 用于MPI I/O的文件系统函数hook: Open MPI的通用钩子接口io: MPI I/Omtl: 匹配传输层,用于某些类型网络上MPI点对点消息传输op: 用于MPI_Op内部操作符的后端计算osc: MPI单边通信pml: MPI点对点管理层sharedfp: 用于MPI I/O的共享文件指针操作topo: MPI拓扑例程vprotocol: "v" PML协议的协议
13.8.2. OpenSHMEM组件框架
atomic: OpenSHMEM原子操作memheap: 支持PGAS内存模型的OpenSHMEM内存分配器scoll: OpenSHMEM集合操作spml: OpenSHMEM "类pml"层:支持单边点对点操作sshmem: OpenSHMEM共享内存支持设施
13.8.3. 其他框架
allocator: 内存分配器backtrace: 调试调用栈回溯支持btl: 点对点字节传输层dl: 动态加载库接口hwloc: 硬件局部性(hwloc)版本支持if: 操作系统IP接口支持installdirs: 安装目录重定位服务memchecker: 运行时内存检查memcpy: 内存拷贝支持memory: 内存管理钩子mpool: 内存池patcher: 符号修补钩子pmix: 进程管理接口(面向超大规模计算)rcache: 内存注册缓存reachable: 网络可达性判定shmem: 共享内存支持(与OpenSHMEM无关)smsc: 共享内存单拷贝支持threads: 操作系统和用户空间线程支持timer: 高精度计时器
13.8.4. 框架说明
每个框架通常包含一个或多个在运行时使用的组件。例如,MPI层使用btl框架通过不同类型的底层网络传输字节。以tcpbtl为例,它通过基于TCP的网络发送消息;而ucxpml则通过基于InfiniBand的网络发送消息。
13.8.5. MCA参数说明
每个组件通常都有一些可在运行时调整的参数。使用ompi_info(1)命令检查组件以查看其可调参数。例如:
shell$ ompi_info --param btl tcp
展示了tcp btl组件的一些参数(及默认值)(使用--all或--level 9可显示所有参数)。
请注意,默认情况下ompi_info(不带--all或指定级别参数时)仅显示组件的一小部分MCA参数。每个MCA参数都有一个1至9的"级别"值,对应MPI-3 MPI_T工具接口级别。有关级别定义及其与Open MPI代码对应关系的说明,请参阅ompi_info(1)手册页中的LEVELS章节。
使用Open MPI级别时,请牢记以下经验法则:
级别 1-3:
这些层级应仅包含少量MCA参数。
通常,仅在这些层级中放置对仅需运行 Open MPI应用程序(且不了解/不关心MPI)的用户重要的MCA参数。示例(以下并非详尽列表):
选择要使用的网络接口。
选择要使用的MCA组件。
选择性禁用警告消息(例如,除非设置了特定的MCA参数来禁用该警告消息,否则显示警告消息XYZ)。
启用额外的标准错误日志详细输出。这允许用户运行程序时开启此日志记录,并利用该输出获取技术支持。
第4-6级:
这些层级应包含任何其他对最终用户有用的MCA参数。
预期"高级用户"会使用这些MCA参数——例如那些试图优化系统并提升性能的用户。
以下是一些适用于这些级别的MCA参数示例(这些并非全面):
当你可以硬编码资源的固定大小时(例如资源池大小或缓冲区长度),将其设为MCA参数。
当某个特定操作有多个不同算法可用时,将所有算法编码实现,并提供一个MCA参数让用户在其中进行选择。
第7-9级:
在此处放置任何其他MCA参数。
这些MCA参数可以深奥难懂,仅与Open MPI的内部深层机制相关。
预计用户很少会使用这些MCA参数。
有关如何在运行时设置MCA参数的详细信息,请参阅本节。