Boost C++ 库

...是世界上备受推崇且设计精湛的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ Coding Standards

性能评估 - Boost C++ 函数库
PrevUpHomeNext

消息传递性能在高吞吐量分布式计算中至关重要。为了评估 Boost.MPI 的性能,我们修改了标准的 NetPIPE 基准测试(3.6.2 版本),使其使用 Boost.MPI,并将其性能与原始 MPI 进行了比较。我们运行了 NetPIPE 基准测试的五个不同变体。

  1. MPI:未修改的 NetPIPE 基准测试。
  2. Boost.MPI:NetPIPE 修改为使用 Boost.MPI 调用进行通信。
  3. MPI(数据类型):NetPIPE 修改为使用派生数据类型(该数据类型本身包含单个 MPI_BYTE)而不是基本数据类型。
  4. Boost.MPI(数据类型):NetPIPE 修改为使用用户定义的 Char 类型代替基本 char 类型。该 Char 类型包含单个 char,一个用于使其可序列化的 serialize() 方法,并特化了 is_mpi_datatype 以强制 Boost.MPI 为其构建派生 MPI 数据类型。
  5. Boost.MPI(序列化):NetPIPE 修改为使用用户定义的 Char 类型代替基本 char 类型。该 Char 类型包含单个 char 并且是可序列化的。与数据类型情况不同,is_mpi_datatype 特化,强制 Boost.MPI 执行大量序列化调用。

实际测试是在印第安纳大学 计算机科学系 的 Odin 集群上进行的,该集群包含 128 个通过 Infiniband 连接的节点。每个节点包含 4GB 内存和两个 AMD Opteron 处理器。NetPIPE 基准测试使用 Intel C++ 编译器 9.0 版、Boost 1.35.0 版(预发布版)和 Open MPI 1.1 版进行编译。NetPIPE 结果如下:

我们可以从这些 NetPIPE 结果中得出一些观察。首先,前两个图显示,对于基本类型,Boost.MPI 的性能与 MPI 相当。接下来的两个图显示,对于派生数据类型,Boost.MPI 的性能也与 MPI 相当,尽管 Boost.MPI 提供了一种比原始 MPI 更抽象、完全透明的构建派生数据类型的方法。派生数据类型的总体性能明显低于基本数据类型,但瓶颈在于底层 MPI 实现本身。最后,当强制 Boost.MPI 单独序列化字符时,性能会急剧下降。这种情况是 Boost.MPI 最糟糕的情况,因为我们正在序列化数百万个单独的字符。总的来说,Boost.MPI 提供的额外抽象并没有损害其性能。


PrevUpHomeNext