Skip to main content
QUICK REVIEW

[论文解读] IPMACC: Open Source OpenACC to CUDA/OpenCL Translator

Ahmad Lashgar, Alireza Majidi|arXiv (Cornell University)|Dec 2, 2014
Parallel Computing and Optimization Techniques参考文献 9被引用 10
一句话总结

IPMACC 是一个开源框架,可将扩展了 OpenACC 的 C/C++ 代码翻译为等效的 CUDA 或 OpenCL 代码,利用系统编译器(例如 nvcc)生成优化的设备二进制文件。它实现了性能可移植性,支持 API 扩展和代码检查,并揭示了 OpenACC 抽象模型在性能上与手写优化的 CUDA 相比存在局限,主要由于更高的内核启动开销和更不灵活的共享内存使用方式。

ABSTRACT

In this paper we introduce IPMACC, a framework for translating OpenACC applications to CUDA or OpenCL. IPMACC is composed of set of translators translating OpenACC for C applications to CUDA or OpenCL. The framework uses the system compiler (e.g. nvcc) for generating final accelerator's binary. The framework can be used for extending the OpenACC API, executing OpenACC applications, or obtaining CUDA or OpenCL code which is equivalent to OpenACC code. We verify correctness of our framework under several benchmarks included from Rodinia Benchmark Suit and CUDA SDK. We also compare the performance of CUDA version of the benchmarks to OpenACC version which is compiled by our framework. By comparing CUDA and OpenACC versions, we discuss the limitations of OpenACC in achieving a performance near to highly-optimized CUDA version.

研究动机与目标

  • 弥合 OpenACC 与低级加速器目标(如 CUDA 和 OpenCL)之间的可移植性差距。
  • 提供一个可重用的开源翻译管道,在保持语义等价性的同时支持性能分析。
  • 评估 OpenACC 与手写优化 CUDA 之间的性能权衡,特别是内核启动开销和内存访问模式方面。
  • 揭示 OpenACC 抽象模型中的局限性,这些局限性使其无法在 GPU 架构上实现接近最优的性能。

提出的方法

  • 该框架采用四阶段编译管道:预处理以规范化语法和作用域,提取 OpenACC 指令,将 OpenACC 构造翻译为 CUDA 或 OpenCL 代码,以及通过 nvcc 或 OpenCL 编译器进行最终编译。
  • 它利用 uncrustify 进行语法规范化,并使用自定义的基于 AST 的解析器识别 OpenACC 区域及其子句。
  • 翻译引擎将 OpenACC 的数据和并行性指令映射为等效的 CUDA 或 OpenCL 构造,包括线程块和网格配置、内存分配以及数据传输。
  • 通过检测数据重用模式并插入共享内存复制操作,自动应用共享内存优化,以减少全局内存访问。
  • 通过静态分析循环独立性和数据依赖性,实现循环合并,从而减少内核启动次数。
  • 该框架与现有工具链(如 nvcc)集成,以生成最终二进制文件,确保与生产环境 GPU 执行的兼容性。

实验结果

研究问题

  • RQ1在保持正确性和性能的前提下,OpenACC 代码能多有效地翻译为等效的 CUDA 或 OpenCL 代码?
  • RQ2与手写优化的 CUDA 相比,OpenACC 在内核启动频率和内存访问模式方面引入了多大的性能开销?
  • RQ3OpenACC 的抽象在多大程度上限制了细粒度优化(如共享内存和合并内存访问)的使用?
  • RQ4该翻译框架能否用于扩展 OpenACC API 或分析加速器代码中的性能瓶颈?

主要发现

  • 在 Pathfinder 内核中,由于缺乏基于共享内存的邻居通信,OpenACC 版本的内核启动开销显著高于 CUDA,导致启动频率更高,性能下降。
  • 在 Speckle Reducing Anisotropic Diffusion(SRAD)基准测试中,OpenACC 在归约阶段优于 CUDA,这是由于采用了两级归约策略(GPU 块级 + CPU 块级),但该优势被更高的内存传输成本所抵消。
  • 在矩阵-矩阵乘法基准测试中,CUDA 版本的运行速度比 OpenACC 版本快 1.5 倍,原因在于更少的内核启动次数以及共享内存带来的更高效的内存访问模式。
  • OpenACC 无法表达细粒度的共享内存访问模式,导致冗余的全局内存访问和更高的同步开销,尤其在具有高数据重用性的数据并行内核中更为明显。
  • 该框架成功将 Rodinia 和 CUDA SDK 中的所有基准测试以语义等价的方式翻译,验证了在多样化工作负载下的正确性。
  • OpenACC 与 CUDA 之间的性能差距在需要激进内存优化的内核中最为显著,凸显了 OpenACC 抽象模型在性能关键场景下的局限性。

更好的研究,从现在开始

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

无需绑定信用卡

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