Skip to main content
QUICK REVIEW

[论文解读] PENCIL: Towards a Platform-Neutral Compute Intermediate Language for DSLs

Mohamed Riyadh Baghdadi, Albert Cohen|arXiv (Cornell University)|Feb 22, 2013
Parallel Computing and Optimization Techniques参考文献 8被引用 10
一句话总结

PENCIL 是一种平台无关的中间语言,旨在通过作为领域特定语言(DSL)的通用编译目标,实现高效、高性能且可移植的加速器编程。它支持高级抽象、显式的优化指令(例如并行性和数据布局),并可与多面体优化框架集成,为 GPU 和多线程 SIMD 单元等异构系统生成高效的低级代码。

ABSTRACT

We motivate the design and implementation of a platform-neutral compute intermediate language (PENCIL) for productive and performance-portable accelerator programming.

研究动机与目标

  • 通过为 DSL 提供统一的中间语言,解决加速器编程中性能可移植性不足的问题。
  • 通过抽象平台特定的代码生成,降低 DSL 编译器的开发与维护成本。
  • 通过结构化语法和指令,使高级 DSL 能够表达复杂的加速器编程惯用模式(如分块、向量化和内存布局)。
  • 通过建模常见计算模式(如狭义计算、稀疏矩阵运算)来支持规则与不规则算法。
  • 通过暴露依赖关系和内存访问元数据,促进跨多个内核的联合优化。

提出的方法

  • 设计 PENCIL 为一种具有 C 语言风格语法的高级、平台无关的中间语言,并支持 C99/GNU 扩展,以提升熟悉度和编译便捷性。
  • 通过指令和指令(如 #pragma pencil reduction、#pragma independent)暴露依赖关系和内存访问信息,这些信息难以自动推断。
  • 利用多面体框架进行静态分析与转换,实现对循环嵌套的自动优化,以提升并行性和数据局部性。
  • 在统一的编译管道中支持 DSL 生成的代码和手写 PENCIL 代码,实现链接与联合优化。
  • 通过元数据和显式注解建模不规则算法(如稀疏矩阵-向量乘法),以在多种架构上保持高性能。
  • 通过指令支持数值精度控制,允许在浮点计算中根据需要在性能与逐位可重现性之间进行权衡。

实验结果

研究问题

  • RQ1平台无关的中间语言在多大程度上可以降低开发和维护加速器 DSL 的复杂性与成本?
  • RQ2哪些语言构造和元数据机制是必要且充分的,以表达常见加速器编程惯用模式(如分块、向量化和内存布局),同时保持性能可移植性?
  • RQ3PENCIL 在多大程度上能使用统一且可扩展的语法,同时表达规则算法(如狭义计算)和不规则算法(如密集线性代数与稀疏矩阵运算)?
  • RQ4如何通过指令暴露依赖关系和内存访问信息,以实现对多个计算内核的高效跨内核优化?
  • RQ5PENCIL 是否可以作为高性能 DSL 和手写优化库代码的可行编译目标,实现在单一编译管道中的端到端优化?

主要发现

  • PENCIL 允许 DSL 表达具有丰富语义的高级抽象,使编译器能够执行自动并行化和循环变换等高级优化。
  • 使用 #pragma pencil reduction 和 #pragma independent 等指令,可对归约和独立性语义实现精确控制,提升并行执行的代码生成质量。
  • PENCIL 成功捕获了现有 DSL 的关键特性,如 OP2(例如无指针访问、访问提示)和 OptiML(例如 sum、向量构造、untilconverged),证明了其表达能力。
  • 该语言同时支持规则算法(如狭义计算)和不规则算法(如稀疏矩阵-向量乘积),并通过显式元数据实现高效代码生成。
  • 跨组件优化是可行的:多个内核的依赖信息可被集体分析与转换,以改善数据局部性和并行性。
  • PENCIL 通过指令支持数值精度权衡,允许开发人员在可接受的前提下选择性能优化的、非逐位精确的浮点执行。

更好的研究,从现在开始

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

无需绑定信用卡

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