[论文解读] Architecture and performance of Devito, a system for automated stencil computation
Devito 是一个领域特定的编译器框架,能够从 Python 中的高级符号偏微分方程(PDE)表达式自动生成高度优化的 C++ 代码,针对科学计算中的stencil计算。它通过先进的优化技术(如公共子表达式消除、分块和并行化)实现了与手写优化代码相当的性能,已在包括 Intel Xeon 和 KNL 处理器在内的现代架构上得到验证。
Stencil computations are a key part of many high-performance computing applications, such as image processing, convolutional neural networks, and finite-difference solvers for partial differential equations. Devito is a framework capable of generating highly-optimized code given symbolic equations expressed in Python, specialized in, but not limited to, affine (stencil) codes. The lowering process---from mathematical equations down to C++ code---is performed by the Devito compiler through a series of intermediate representations. Several performance optimizations are introduced, including advanced common sub-expressions elimination, tiling and parallelization. Some of these are obtained through well-established stencil optimizers, integrated in the back-end of the Devito compiler. The architecture of the Devito compiler, as well as the performance optimizations that are applied when generating code, are presented. The effectiveness of such performance optimizations is demonstrated using operators drawn from seismic imaging applications.
研究动机与目标
- 通过支持有限差分方法的高级规范,解决科学计算中手写优化 stencil 代码的复杂性和维护负担。
- 通过具有多个中间表示的编译器栈,自动化实现性能关键的优化(如分块、循环级并行化和公共子表达式消除)。
- 通过模块化代码生成和后端集成,实现在 CPU、GPU 和多核系统等多样化 HPC 平台上的性能可移植性。
- 支持复杂的不规则循环嵌套和高级 PDE 模型(例如各向异性波方程),超越标准 stencil 模式。
- 提供高效、基于 Python 的接口,与科学计算生态系统集成,同时生成可投入生产的高性能代码。
提出的方法
- Devito 编译器使用多层中间表示(IR)栈,将符号数学表达式降级为优化后的 C++ 代码。
- 通过高级公共子表达式消除技术进行符号化操作,以减少浮点运算并消除冗余计算。
- 该系统支持多种后端,包括 YASK stencil 编译器和原生 C++ 代码生成,实现跨 CPU 和加速器的可移植性。
- 采用即时(JIT)编译和动态代码生成,支持运行时对生成内核的即时优化和执行。
- 该框架支持复杂的循环结构,包括嵌套和不规则循环,能够建模多种基于 PDE 的仿真。
- 它与成熟的科学软件栈集成,包括用于符号处理的 SymPy 和用于数组操作的 NumPy。
实验结果
研究问题
- RQ1在 Python 中的高级领域特定语言能否生成与手写优化实现性能相当或更优的 C++ 代码用于 stencil 计算?
- RQ2分块、循环并行化和公共子表达式消除等自动化优化在不同 HPC 架构上的性能提升效果如何?
- RQ3Devito 在无需手动调优的情况下,能在多大程度上实现跨 CPU、GPU 和多核系统的性能可移植性?
- RQ4在实际科学工作负载中,动态代码生成和自动调优的运行时与编译开销如何?
- RQ5Devito 在涉及高阶 stencil 和各向异性介质的复杂真实地震成像算子上,扩展性和性能表现如何?
主要发现
- 在包括 Intel Xeon 和 KNL 处理器在内的最新架构上,Devito 生成的代码性能与手写优化实现相当,这在地震成像算子上已得到验证。
- 在 skl8180 平台上,复杂高阶 TTI 算子的代码生成和编译耗时不足 7 秒,共享对象加载和参数验证带来的开销可忽略不计。
- 在 skl8180 上,性能配置的自动调优耗时 3 分钟,在 knl7250 上为 15 分钟,但这些成本在生产运行中可分摊,实际应用中并不构成障碍。
- 在 yask 后端上的编译时间与核心后端相当,性能特征也相似,尽管某些功能(如数组临时变量)仍不支持。
- 该框架成功为复杂且不规则的循环嵌套及异构表达式生成了优化代码,包括来自全波形反演工作流的表达式。
- 该系统展示了出色的性能可移植性,在不同后端和目标平台上均保持了优化效果的一致性。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。