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/O

  • mtl: 匹配传输层,用于某些类型网络上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参数的详细信息,请参阅本节