Skip to main content
QUICK REVIEW

[论文解读] OMP2MPI: Automatic MPI code generation from OpenMP programs

Albert Saà-Garriga, David Castells‐Rufas|arXiv (Cornell University)|Feb 10, 2015
Parallel Computing and Optimization Techniques参考文献 18被引用 6
一句话总结

OMP2MPI 是一个源到源编译器,可自动将 OpenMP 程序转换为 MPI 代码,从而在超出单节点范围的分布式内存 HPC 集群上执行。它通过将 OpenMP 并行循环转换为使用 MPI 通信的主/从模式来实现这一目标,生成正确且可扩展的代码,在 64 核系统上性能通常优于原始 OpenMP 和串行版本,加速比超过 20×。

ABSTRACT

In this paper, we present OMP2MPI a tool that generates automatically MPI source code from OpenMP. With this transformation the original program can be adapted to be able to exploit a larger number of processors by surpassing the limits of the node level on large HPC clusters. The transformation can also be useful to adapt the source code to execute in distributed memory many-cores with message passing support. In addition, the resulting MPI code can be used as an starting point that still can be further optimized by software engineers. The transformation process is focused on detecting OpenMP parallel loops and distributing them in a master/worker pattern. A set of micro-benchmarks have been used to verify the correctness of the the transformation and to measure the resulting performance. Surprisingly not only the automatically generated code is correct by construction, but also it often performs faster even when executed with MPI.

研究动机与目标

  • 通过自动生成可移植的 MPI 代码,使 OpenMP 程序能够超越单节点共享内存系统实现可扩展性。
  • 为大规模 HPC 集群和分布式内存众核系统提供一种实用的、构造正确(correct-by-construction)的 OpenMP 到 MPI 的转换方法。
  • 为 MPI 优化提供一个性能具有竞争力的起点,同时保持代码的可读性并支持专家手动调优。
  • 通过暴露显式的 MPI 通信模式,克服软件分布式共享内存运行时的局限性。

提出的方法

  • 该工具使用 Mercurium 编译器框架解析 C/C++ OpenMP 源代码并生成抽象语法树(AST)。
  • 它识别 OpenMP 并行循环,并通过静态分析检测共享、私有和归约变量,包括对归约子句的特殊处理。
  • 该转换将每个 OpenMP 并行区域映射为使用 MPI_Send 和 MPI_Recv 进行工作分发和结果收集的主/从模式。
  • 它支持静态和动态工作负载分发策略,当检测到负载不平衡时使用动态分发。
  • 该工具通过仅在必要时(即最后一个从节点执行写操作时)发送完整数组来处理数据分发。
  • 收尾阶段将非并行化代码分配给主节点,并插入 MPI_Finalize 以确保正确清理。

实验结果

研究问题

  • RQ1是否能够通过源到源编译器自动且正确地将 OpenMP 并行循环转换为适用于分布式内存执行的等价 MPI 代码?
  • RQ2与原始 OpenMP 版本相比,自动生成的 MPI 代码在共享内存系统上的性能是否保持或得到提升?
  • RQ3在集群环境中,生成的 MPI 代码能否在大量核心上实现有效扩展?
  • RQ4在 64 核系统上,生成代码的性能与串行版本和原始 OpenMP 实现相比如何?
  • RQ5考虑到其可读性和代码结构,专家在多大程度上可以进一步优化生成的代码?

主要发现

  • OMP2MPI 工具成功将 OpenMP 程序转换为正确、可执行的 MPI 代码,可在包括大型 HPC 集群和实验性众核平台在内的分布式内存系统中跨平台移植。
  • 生成的 MPI 代码可扩展性优于原始 OpenMP 版本,在 64 核系统上与串行基线相比加速比超过 20×。
  • 平均而言,生成的 MPI 代码性能优于原始 OpenMP 版本,表明在某些情况下,MPI 在共享内存系统上甚至比 OpenMP 更高效。
  • 该转换构造正确,无语义损失,且支持关键的 OpenMP 构造(如归约子句),并正确处理初始化和累加。
  • 该工具支持静态和动态工作负载分发,动态分发可提升不规则或负载不平衡计算中的负载均衡能力。
  • 生成的代码具有良好的可读性,适合进一步手动优化,因此可作为性能调优的可行起点。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。