Skip to main content
QUICK REVIEW

[论文解读] High-Performance GPU-to-CPU Transpilation and Optimization via High-Level Parallel Constructs

William S. Moses, Ivan R. Ivanov|arXiv (Cornell University)|Jul 1, 2022
Parallel Computing and Optimization Techniques被引用 4
一句话总结

本文提出了一种编译器框架,通过在MLIR中使用高级并行构造,自动将CUDA内核转换为高性能CPU代码,从而在无需手动移植的情况下实现在CPU上的高效优化与执行。该框架在Fugaku系统上利用转换后的CUDA内核,相较于手工编写的OpenMP代码在Rodinia基准测试套件上实现了76%的几何平均加速比,相较于PyTorch原生CPU后端实现了2.7倍的加速比。

ABSTRACT

While parallelism remains the main source of performance, architectural implementations and programming models change with each new hardware generation, often leading to costly application re-engineering. Most tools for performance portability require manual and costly application porting to yet another programming model. We propose an alternative approach that automatically translates programs written in one programming model (CUDA), into another (CPU threads) based on Polygeist/MLIR. Our approach includes a representation of parallel constructs that allows conventional compiler transformations to apply transparently and without modification and enables parallelism-specific optimizations. We evaluate our framework by transpiling and optimizing the CUDA Rodinia benchmark suite for a multi-core CPU and achieve a 76% geomean speedup over handwritten OpenMP code. Further, we show how CUDA kernels from PyTorch can efficiently run and scale on the CPU-only Supercomputer Fugaku without user intervention. Our PyTorch compatibility layer making use of transpiled CUDA PyTorch kernels outperforms the PyTorch CPU native backend by 2.7$ imes$.

研究动机与目标

  • 为解决高性能计算和机器学习中的性能可移植性挑战,即在Fugaku等仅支持CPU的系统上,必须重新实现原本为GPU优化的代码。
  • 克服现有工具需要手动重实现的局限,实现从CUDA到CPU线程的完全自动化、高层级转换。
  • 通过利用内存语义建模同步机制,使GPU风格的并行构造能够支持常规编译器优化(如循环不变代码外移和公共子表达式消除),而无需修改。
  • 通过PyTorch兼容的转换层,实现在无GPU硬件的CPU-only超级计算机(如Fugaku)上高效执行PyTorch CUDA内核。

提出的方法

  • 该框架利用MLIR的嵌套模块结构表示多级GPU并行性,包括块级同步和共享内存,同时保留高层级程序结构。
  • 将GPU屏障建模为内存语义操作,使其可与标准编译器优化集成,而非作为不透明屏障处理。
  • 扩展Polygeist的C/C++前端以解析CUDA代码,并生成保留并行构造和数据布局的MLIR代码。
  • 通过分析内存行为,透明地对GPU风格并行区域应用标准编译器优化(如循环不变代码外移)。
  • 将转换后的代码编译为OpenMP并行的CPU代码,从而在通用和百亿亿次级CPU上实现高效多核执行。
  • 通过PyTorch兼容层在运行时转换CUDA内核,使GPU优化模型可在仅支持CPU的系统(如Fugaku)上运行。

实验结果

研究问题

  • RQ1编译器能否在保留并行性并进行优化的同时,自动将CUDA内核转换为高性能CPU代码?
  • RQ2高层级并行构造能否以一种支持标准编译器优化的方式表示,而无需修改?
  • RQ3GPU风格的同步机制(如块内屏障)能否通过内存语义进行建模,以实现与现有优化的集成?
  • RQ4转换后的CUDA代码能否在CPU架构上超越手工编写的OpenMP实现?
  • RQ5能否在无GPU硬件的CPU-only超级计算机(如Fugaku)上高效执行PyTorch CUDA内核?

主要发现

  • 在通用CPU上执行时,转换后的CUDA代码相较于手工编写的OpenMP实现,在Rodinia基准测试套件上实现了76%的几何平均加速比。
  • 该框架成功实现在仅支持CPU的Fugaku超级计算机上高效执行PyTorch CUDA内核,平均性能优于原生PyTorch CPU后端2.7倍。
  • 系统在CPU上保持了原始内核的调度顺序,通过最内层循环的串行化,减少了线程分歧并改善了内存访问模式,从而提升了性能。
  • 采用基于内存语义的屏障建模方法,使得标准编译器优化(如循环不变代码外移和公共子表达式消除)可直接应用于GPU风格的并行区域。
  • 该框架成功转换并优化了来自PyTorch的复杂内核(包括ResNet-50),证明了其与真实世界深度学习工作负载的兼容性。
  • 该方法实现了无需手动重实现的性能可移植性,显著降低了将GPU优化代码迁移到仅支持CPU或异构HPC系统所需的成本。

更好的研究,从现在开始

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

无需绑定信用卡

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