AMDGPU对CUDA支持方式的分析
实现方式是针对HIP API(Heterogeneous-Computing Interface for Portability)做CUDA的接口套壳,即将cuda的API接口作为标准接口,用AMD ROCm实现cuda的API(目的就是保证对外的API与CUDA完全相同),但实际调用 HIP+ROCm 的相关接口实现(即实际在AMD GPU卡上运行),编译生成动态库libcuda*.so,并替换cuda相关动态库,从而完成适配,达到兼容CUDA生态的接口的目的。ROCm提供了HIPIFY工具,用于将CUDA源代码转换为HIP源代码,实现CUDA代码到HIP的移植。
1. ROCm API库文件 — ROCm文档
ROCm API库文件清单,见表1-13。
表1-13 ROCm API库文件清单
ROCm API库文件 |
|
人工智能 |
C++原型 |
可组合内核 |
hipCUB |
MIGraphX |
hipTensor |
MIOpen |
rocPRIM |
MIVisionX |
rocThrust |
通信 |
HIP |
RCCL |
HIP运行时 |
|
HIPIFY |
数学 |
随机数 |
hipBLAS/rocBLAS |
hipRAND |
hipBLASLt |
rocRAND |
hipFFT/rocFFT |
|
hipSOLVER/rocSOLVER |
|
hipSPARSE/rocSPARSE |
|
hipSPARSELt |
|
rocALUTION |
|
rocWMMA |
|
2. Hipify工具介绍
HIP是 CUDA API 的山寨克隆版。除了一些不常用的功能(如管理内存)外,几乎全盘拷贝 CUDA API,是 CUDA 的一个子集。HIP为开发人员使用HIPIFY,将CUDA应用程序移植到ROCm,HIPIFY会自动转换CUDA应用程序,成为HIP内核语言和运行时API,使用NVIDIA的CUDA编译器,或将AMDCLANG编译为GPU的运行代码。HIP将AMDCLANG编译为GPU的运行代码,如图1-22所示。

图1-22 HIP将AMDCLANG编译为GPU的运行代码