本节提供表格,将标准 C MPI 的函数和常量映射到其 Boost.MPI 等效项。对于已经熟悉 C 或 Fortran MPI 接口的用户,或者将现有并行程序移植到 Boost.MPI 的用户来说,这将非常有用。
请注意,这不是一个完美的一对一映射,Boost.MPI 有时会以对最终用户透明的方式使用 C API 中的函数。例如,MPI_Probe 和 friends
可用于实现异步发送/接收。
表 23.1. 点对点通信
C 函数/常量 |
Boost.MPI 等效项 |
---|---|
|
|
|
|
unsupported |
|
unsupported |
|
unsupported |
|
unsupported |
|
unsupported |
|
unsupported |
|
unsupported |
|
unsupported |
|
unsupported |
|
unsupported |
|
unsupported |
|
unsupported |
|
unsupported |
|
unsupported |
|
unsupported |
|
unsupported |
|
unsupported |
|
unsupported |
|
Boost.MPI 自动将 C 和 C++ 数据类型映射到其 MPI 等效项。下表说明了 C++ 类型和 MPI 数据类型常量之间的映射。
表 23.2. 数据类型
C 常量 |
Boost.MPI 等效项 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unused |
|
内部用于 序列化数据类型 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Boost.MPI 不提供对 MPI 派生数据类型功能的直接包装。相反,Boost.MPI 依赖于 Boost.Serialization 库来为用户定义的类构建 MPI 数据类型。关于用户定义数据类型的部分描述了这种机制,该机制用于使用 is_mpi_datatype
标记为“MPI 数据类型”的类型。
以下派生数据类型表描述了哪些 C++ 类型对应于 C MPI 数据类型构造器的功能。当构建某种形式的数据类型时,Boost.MPI 实际上可能不使用列出的 C MPI 函数。由于 Boost.MPI 构建的实际数据类型通常对用户隐藏,因此许多这些操作在 Boost.MPI 内部调用。
表 23.3. 派生数据类型
C 函数/常量 |
Boost.MPI 等效项 |
---|---|
在 Boost.MPI 中自动用于 MPI 版本 1.x |
|
在 Boost.MPI 中自动用于 MPI 版本 2.0 及更高版本 |
|
在 Boost.MPI 中自动使用 |
|
数组 |
|
在 Boost.MPI 中自动使用 |
|
在 Boost.MPI 中自动使用 |
|
用作子对象的任何类型 |
|
unused |
|
用作子对象的任何类型 |
|
unsupported |
|
在 Boost.MPI 中自动使用 |
|
使用 MPI 1.x 的用户定义的类和结构体 |
|
使用 MPI 2.0 及更高版本的用户定义的类和结构体 |
|
unsupported |
|
在 Boost.MPI 中自动使用 |
MPI 的打包工具将值存储到连续缓冲区中,该缓冲区稍后可以通过 MPI 传输,并通过 MPI 的解包工具解包为单独的值。与数据类型一样,Boost.MPI 为 MPI 的打包和解包工具提供了抽象接口。特别是,两个存档类 packed_oarchive
和 packed_iarchive
可用于使用 MPI 的工具打包或解包连续缓冲区。
Boost.MPI 支持大多数 MPI 集合操作的一对一映射。对于 Boost.MPI 提供的每个集合操作,当有可能(且高效)时,将调用底层的 C MPI 集合操作。
表 23.5. 集合操作
C 函数 |
Boost.MPI 等效项 |
---|---|
大多数用法由 |
|
大多数用法由 |
|
unsupported |
|
由 |
Boost.MPI 使用函数对象来指定归约应如何在 MPI_Allreduce
、MPI_Reduce
和 MPI_Scan
的等效项中发生。下表说明了如何将 C MPI 和 Boost.MPI 之间的 预定义 和 用户定义 的归约操作进行映射。
表 23.6. 归约操作
C 常量 |
Boost.MPI 等效项 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsupported |
|
|
|
unsupported |
|
Boost.MPI 内部使用 |
|
Boost.MPI 内部使用 |
|
|
|
|
MPI 定义了几个特殊的通信器,包括 MPI_COMM_WORLD
(包括本地进程可以与之通信的所有进程)、MPI_COMM_SELF
(仅包括本地进程)和 MPI_COMM_EMPTY
(不包括任何进程)。这些特殊的通信器都是 Boost.MPI 中 communicator
类的实例。
表 23.7. 预定义通信器
C 常量 |
Boost.MPI 等效项 |
---|---|
|
默认构造的 |
|
仅包含当前进程的 |
|
评估为 false 的 |
Boost.MPI 通过其 group
类支持进程组。
表 23.8. 组操作和常量
C 函数/常量 |
Boost.MPI 等效项 |
---|---|
|
默认构造的 |
memberref boost::mpi::group::rank |
|
memberref boost::mpi::group::translate_ranks |
|
运算符 |
|
|
运算符 |
|
运算符 |
|
运算符 |
组的运算符 |
|
组的运算符 |
|
组的运算符 |
|
unsupported |
|
unsupported |
|
在 Boost.MPI 中自动使用 |
Boost.MPI 通过 communicator
类提供通信器的操作。
表 23.9. 通信器操作
C 函数 |
Boost.MPI 等效项 |
---|---|
运算符 |
|
使用 |
|
|
|
在 Boost.MPI 中自动使用 |
Boost.MPI 当前通过 intercommunicator
类提供对进程间通信器的支持。
表 23.10. 进程间通信器操作
C 函数 |
Boost.MPI 等效项 |
---|---|
|
|
|
|
Boost.MPI 当前不提供对属性缓存的任何支持。
表 23.11. 属性和缓存
C 函数/常量 |
Boost.MPI 等效项 |
---|---|
|
unsupported |
|
unsupported |
|
unsupported |
unsupported |
|
unsupported |
|
unsupported |
|
unsupported |
|
unsupported |
|
unsupported |
|
unsupported |
Boost.MPI 将提供对创建具有不同拓扑的通信器的完整支持,并在以后查询这些拓扑。通过 Boost Graph Library (BGL) 的接口提供对图拓扑的支持,其中可以创建一个与任何 BGL 图的结构匹配的通信器,并且可以将通信器的图拓扑视为 BGL 图,以便在现有的通用图算法中使用。
表 23.12. 进程拓扑
C 函数/常量 |
Boost.MPI 等效项 |
---|---|
|
|
|
|
|
|
unsupported |
|
unsupported |
Boost.MPI 通过 environment
类支持环境查询。
表 23.13. 环境查询
C 函数/常量 |
Boost.MPI 等效项 |
---|---|
|
不必要;使用 |
|
不必要;使用 |
|
不必要;使用 |
Boost.MPI 将 MPI 错误转换为异常,并通过 exception
类报告。
表 23.14. 错误处理
C 函数/常量 |
Boost.MPI 等效项 |
---|---|
|
未使用;错误被转换为 Boost.MPI 异常 |
|
未使用;错误被转换为 Boost.MPI 异常 |
未使用;错误被转换为 Boost.MPI 异常 |
|
未使用;错误被转换为 Boost.MPI 异常 |
|
未使用;错误被转换为 Boost.MPI 异常 |
|
未使用;错误被转换为 Boost.MPI 异常 |
|
Boost.MPI 内部使用 |
|
MPI 计时功能通过 Boost.MPI timer
类公开,该类提供与 Boost Timer 库 兼容的接口。
表 23.15. 计时功能
C 函数/常量 |
Boost.MPI 等效项 |
---|---|
|
不必要;使用 |
使用 |
|
MPI 启动和关闭由 Boost.MPI environment
类的构造和析构管理。
Boost.MPI 不提供对 MPI 1.1 中性能分析功能的任何支持。