Skip to main content
QUICK REVIEW

[论文解读] Early Experiences Migrating CUDA codes to oneAPI

Manuel Costanzo, Enzo Rucci|arXiv (Cornell University)|May 27, 2021
Parallel Computing and Optimization Techniques参考文献 3被引用 6
一句话总结

本文评估了英特尔 dpct 工具在将 CUDA 代码迁移至 oneAPI 的 DPC++ 编程模型方面的有效性,表明尽管 dpct 自动化了 80–90% 的迁移工作,但高级 CUDA 特性仍需手动干预。生成的 DPC++ 代码在包括 NVIDIA 和英特尔设备在内的多种 CPU 和 GPU 架构上实现了功能可移植性,执行正确且性能表现可测量,但因实验性 oneAPI 对 NVIDIA GPU 的支持,导致性能存在可衡量的差异。

ABSTRACT

The heterogeneous computing paradigm represents a real programming challenge due to the proliferation of devices with different hardware characteristics. Recently Intel introduced oneAPI, a new programming environment that allows code developed in DPC++ to be run on different devices such as CPUs, GPUs, FPGAs, among others. This paper presents our first experiences in porting two CUDA applications to DPC++ using the oneAPI dpct tool. From the experimental work, it was possible to verify that dpct does not achieve 100% of the migration task; however, it performs most of the work, reporting the programmer of possible pending adaptations. Additionally, it was possible to verify the functional portability of the DPC++ code obtained, having successfully executed it on different CPU and GPU architectures.

研究动机与目标

  • 评估英特尔 dpct 工具在 oneAPI 生态系统中自动化将 CUDA 代码迁移至 DPC++ 的有效性。
  • 评估生成的 DPC++ 代码在异构架构(包括 CPU 和 GPU)上的功能可移植性。
  • 识别 dpct 翻译能力中的不足之处,特别是针对高级 CUDA 特性(如 Cooperative Groups 和 CUDA 特定内建函数)的支持。
  • 分析迁移后代码在 NVIDIA 和英特尔硬件平台上的性能特征。
  • 为开发者提供关于使用 oneAPI 进行 CUDA 代码现代化的实际可行性和局限性的见解。

提出的方法

  • 本研究使用 oneAPI 的 dpct 工具,将两个 CUDA 应用程序——矩阵乘法和归约——自动从 CUDA C++ 迁移至 DPC++。
  • 迁移过程包括翻译内核启动、内存管理以及设备特定的结构,dpct 在无法完全转换或不可转换的代码段中插入注释以进行标记。
  • 生成的 DPC++ 代码在两种硬件平台上进行了编译和执行:NVIDIA RTX 2070 GPU 和配备 Intel Iris Xe MAX GPU 的 Intel Core i9-10920X。
  • 针对不同问题规模(4096、8192、16384)测量了矩阵乘法的性能,比较了 CUDA 和 DPC++ 的执行时间。
  • 通过在不同架构(包括通过实验性 oneAPI 支持的非英特尔 GPU)上验证正确性和功能等价性,对 DPC++ 代码的正确性进行了验证。
  • 对构建过程进行了手动调整,以在 NVIDIA GPU 上启用 DPC++ 执行,因为默认情况下不支持原生运行。

实验结果

研究问题

  • RQ1在实际应用中,dpct 工具在多大程度上实现了 CUDA 代码到 DPC++ 的自动化迁移?
  • RQ2生成的 DPC++ 代码在不同 CPU 和 GPU 架构上的功能可移植性有多高?
  • RQ3考虑到实验性 oneAPI 支持,运行迁移后的 DPC++ 代码在 NVIDIA GPU 上的性能影响是什么?
  • RQ4dpct 未完全支持的 CUDA 特性有哪些,需要多少手动工作来解决?
  • RQ5在自动翻译后,是否可以进一步简化或优化 DPC++ 代码而不破坏正确性?

主要发现

  • dpct 工具成功自动化了 80–90% 的 CUDA 到 DPC++ 迁移,显著减少了迁移遗留 CUDA 代码的手动工作量。
  • 该工具通过插入注释标记了无法转换的 CUDA 特性(如 Cooperative Groups 和 __shfl_down_sync),需手动适配。
  • DPC++ 代码在功能上正确,并成功在英特尔 CPU 和 GPU 上执行,同时在 NVIDIA RTX 2070 GPU 上也成功运行,证实了跨架构的可移植性。
  • 在 NVIDIA RTX 2070 上,DPC++ 的执行时间比 CUDA 高出 10–15%(小矩阵),且随着问题规模增大,性能差距进一步扩大(例如在 16384×16384 时慢 38%),可能由于代码生成不够理想。
  • NVIDIA GPU 上的性能开销归因于实验性 oneAPI 支持以及缺乏针对性的优化传递,表明未来通过编译器改进可实现显著性能提升。
  • 尽管翻译后代码复杂度有所增加,但 DPC++ 代码仍遵循 SYCL/DPC++ 约定,可通过手动重构进一步简化。

更好的研究,从现在开始

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

无需绑定信用卡

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