比较 OpenCL、CUDA 和 HIP 的性能

主要观点:Futhark 编译器支持 OpenCL、HIP 和 CUDA 三种 GPU 后端,在功能和性能原则上等效,通过调查三种后端在不同方面的表现来验证这一观点。
关键信息

  • 2007 年 NVIDIA 发布 CUDA,2009 年 Khronos 发布 OpenCL,2016 年 AMD 开发 HIP 作为对 CUDA 的回应。
  • Futhark 编译器的三种 GPU 后端使用相同编译流程,除最终代码生成阶段,OpenCL 最早实现,CUDA 和 HIP 较晚。
  • 三种后端生成的 GPU 代码差异主要在于运行时调用的 GPU API,代码生成器针对的抽象层代码量相近。
  • Futhark 可在启动时编译嵌入 CPU 程序的 GPU 程序,实现即时编译,各后端优化相同。
  • 评估三种后端性能时测量 48 个基准程序,在不同 GPU 上测试,发现各后端在不同方面存在性能差异。
  • 性能差异的原因包括数值操作默认设置、扫描实现方式、线程块大小限制、缓存信息不准确、线程信息不准确、API 开销、边界检查以及一些神秘原因等。
  • 讨论了 OpenCL 的优缺点,如便携性但不保证性能可移植性,还提及未完成的 WebGPU 后端及初步性能表现。
    重要细节
  • CUDA 因单源编程模型流行,OpenCL 虽为开放标准但未达到 CUDA 的普及度,HIP 与 CUDA 相似可在 AMD 和 NVIDIA 硬件上运行。
  • Futhark 不使用语言级抽象特征,生成代码较简单,利用各目标的等价形式,暂未充分利用某些 API 特性。
  • 运行时编译可动态设置重要常数,各后端优化相同,扫描实现是差异点,OpenCL 后端使用两-pass 扫描效率较低。
  • 性能评估实验中各基准程序包含多种工作量,测量平均运行时间及标准差,可视化结果显示不同后端在不同 GPU 上的性能差异。
  • 分析性能差异原因时,分别从数值操作、扫描实现、线程块大小、缓存信息、线程信息、API 开销、边界检查等方面进行探讨,并举例说明。
  • 提及未来计划,包括获取高端 Intel GPU 进行测试、改进 autotune 以及对 NVIDIA 对 OpenCL 的态度的看法等。
阅读 38
0 条评论