1. Overview
ROCm 的目标是建立可替代 CUDA 的生态,并在源码级别上对 CUDA 程序的支持。
图1为了实现目标,ROCm 复制了 CUDA 的技术栈。对比如图2、图3(本文不考虑 OpenCL 支持)。
图2 CUDA 栈 图3 ROCm 栈 由于 ROCm 是开源平台,出于模块化以及对一些开放标准的支持,ROCm 的封装层次较 CUDA 会多一些。好在,这对一般开发者是不可见。在介绍 ROCm 前,首先对一些概念进行说明。
- ROC —— Radeon Open Computing,即 “Radeon 开放计算”。其中,Radeon 是 AMD GPU 产品的品牌名。
- ROCm——ROC platforM 的简称,是基于一系列开源项目的 AMD GPU 计算生态。ROCm 之于 AMD GPU,基本上相当 于 CUDA 之于 NVIDIA GPU。除 ROCm 外,还有一系列 ROCx 的简称,如 ROCr —— ROC Runtime,ROCk —— ROC kernel driver, ROCt —— ROC Thunk 等。
- HSA——Heterogeous system architecture,可以简单理解为硬件上的一层抽象。 AMD 等为支持 CPU+GPU 混合计算生态而成立了非赢利组织 HSA 基金,提供 runtime 和架构 API 标准。现成员包括 AMD、三星、高通、ARM、TI、Imagination、MTK等。
- GCN——Graphics Core Next,是 AMD 11年推出的全新架构,以区别于之前基于基于 VLIW (超长指令字)的架构。由于现在所有 AMD GPU 都建于 GCN 架构,失去 ”next“ 的对象,因此,GCN 可以简单理解为 AMD GPU 架构。
了解 ROCm 最快的方式可能是和 CUDA 对比。表1给出了主要模块的对比。
CUDA | ROCm | 备注 |
---|---|---|
CUDA API | HIP API | C++ 扩展语法 |
NVCC | HCC | 编译器 |
CUDA 函数库 | ROC 库、HC 库 | |
Thrust | Parallel STL | HCC 原生支持 |
Profiler | ROCm Profiler | |
CUDA-GDB | ROCm-GDB | |
nvidia-smi | rocm-smi | |
DirectGPU RDMA | ROCn RDMA | peer2peer |
TensorRT | Tensile | 张量计算库 |
CUDA-Docker | ROCm-Docker |