Skip to main content
QUICK REVIEW

[论文解读] A Generic Library for Stencil Computations

Mauro Bianco, Ugo Varetto|arXiv (Cornell University)|Jul 6, 2012
Natural Language Processing Techniques参考文献 9被引用 8
一句话总结

本文提出了一种针对狭义计算域的 C++ 通用库,用于光栅计算,实现了在多种架构上对偏微分方程(PDE)求解器的高层级、可移植且高效的实现。通过使用 do_all 和 do_reduce 等构造抽象并行性,该库仅需极少的代码修改,即可在 CPU、多核系统、高性能计算集群和 GPU 上实现高性能。

ABSTRACT

In this era of diverse and heterogeneous computer architectures, the programmability issues, such as productivity and portable efficiency, are crucial to software development and algorithm design. One way to approach the problem is to step away from traditional sequential programming languages and move toward domain specific programming environments to balance between expressivity and efficiency. In order to demonstrate this principle, we developed a domain specific C++ generic library for stencil computations, like PDE solvers. The library features high level constructs to specify computation and allows the development of parallel stencil computations with very limited effort. The high abstraction constructs (like do_all and do_reduce) make the program shorter and cleaner with increased contextual information for better performance exploitation. The results show good performance from Windows multicores, to HPC clusters and machines with accelerators, like GPUs.

研究动机与目标

  • 通过降低基于光栅的 PDE 求解器的低层实现复杂度,解决异构计算中的可编程性挑战。
  • 通过抽象并行性和数据布局,提升高性能计算中的生产力和可移植效率。
  • 在多种架构(多核 CPU、集群和 GPU)上实现高效执行,同时不牺牲性能。
  • 证明高层抽象可实现与手工优化代码相媲美性能。

提出的方法

  • 该库提供了领域特定的抽象,如 do_all 和 do_reduce,以高层级方式表达并行和归约操作。
  • 它使用 C++ 模板和泛型编程,为各种后端实现编译时优化和代码生成。
  • 光栅计算通过简洁直观的接口表达,将算法逻辑与数据布局和执行策略分离。
  • 该库支持多种执行后端,包括用于多核 CPU 的 OpenMP、用于集群的 MPI,以及用于 GPU 的 CUDA。
  • 它利用表达式模板和基于策略的设计,实现无运行时开销的性能驱动优化。
  • 抽象层使开发人员能够编写可移植的代码,同时保持底层性能特征。

实验结果

研究问题

  • RQ1高层级、通用的 C++ 库是否能在多种架构上实现光栅计算的可移植性能?
  • RQ2高层抽象(如 do_all 和 do_reduce)在不牺牲性能的前提下,能在多大程度上提升代码可维护性和生产力?
  • RQ3该库的抽象层在 CPU、集群和 GPU 上的性能与手工优化实现相比如何?
  • RQ4同一段高层级代码是否能被高效地编译并在异构系统(包括加速器)上执行?

主要发现

  • 该库在 Windows 多核系统上实现了良好性能,证明了仅需极少代码修改即可实现高效的并行化。
  • 在基于 MPI 的 HPC 集群上,该库实现了具有竞争力的性能,展示了在分布式系统中的可扩展性。
  • 该库通过 CUDA 有效支持 GPU 加速器,实现了在 GPU 硬件上的高效执行。
  • 使用高层级构造(如 do_all 和 do_reduce)使代码更短、更清晰,并为优化提供了更多上下文信息。
  • 抽象层使代码具有可移植性,同时在多种架构(包括 CPU、集群和 GPU)上保持高效。

更好的研究,从现在开始

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

无需绑定信用卡

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