AMD ROCm 平台简介
1. ROCm简介

ROCm是一个开源堆栈,主要由开源软件(OSS)组成,设计用于图形处理单元(GPU)计算。
ROCm由一组驱动程序、开发工具和api组成,支持从低级内核到最终用户应用程序的GPU编程。使用ROCm,您可以自定义GPU软件以满足您的特定需求。您可以在免费、开源、集成和安全的软件生态系统中开发、协作、测试和部署您的应用程序。
ROCm特别适合gpu加速的高性能计算(HPC)、人工智能(AI)、科学计算和计算机辅助设计(CAD)。
ROCm由AMD的可移植性异构计算接口(HIP)、OSS c++ GPU编程环境及其相应的运行时提供支持。HIP允许ROCm开发人员通过在一系列平台(从专用游戏gpu到百亿亿级HPC集群)上部署代码,在不同的平台上创建便携式应用程序。
ROCm支持编程模型,如OpenMP和OpenCL,并包括所有必要的OSS编译器、调试器和库。ROCm完全集成到机器学习(ML)框架中,如PyTorch和TensorFlow。
2. ROCm主要组件
ROCm是AMD的开源GPU计算软件堆栈,旨在提供一个可移植、高性能的GPU计算平台。ROCm支持AMD的GPU和APU,以及x86和ARM架构的处理器,提供了与CUDA相似的编程模型,使得在AMD GPU上编写和运行GPU计算应用程序变得更加容易。
ROCm的主要组成部分包括:
ROCm驱动程序:用于管理AMD GPU和APU的硬件资源,提供GPU计算所需的基本功能。
ROCm编译器:包括AMD的HIP编译器和HCC编译器,用于将HIP和C++ AMP代码编译为底层GPU指令。
ROCm运行时库:包括AMD的HIP运行时库和HCC运行时库,提供GPU计算所需的核心功能,如内存管理、线程调度、并发控制等。
ROCm工具集:包括AMD的GPU调试器、性能分析器、代码优化工具等,用于帮助开发人员调试和优化GPU计算应用程序。
ROCm的目标是成为一个全面的GPU计算平台,支持各种编程语言和应用场景。它已经得到了广泛的应用,尤其是在深度学习、科学计算和大数据分析等领域。
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——Heterogeneous 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 架构
3. ROCm与CUDA的对比
3.1 主要模块的对比
了解 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 |
3.2 编程模型
ROCm是AMD的一个软件平台,用来加速GPU计算
A卡上编程模型使用的是HIP或者OpenCL,而运行环境是ROCm
N卡上,编程模型是CUDA,运行环境也是CUDA

3.3 软件栈对比
ROCm 的目标是建立可替代 CUDA 的生态,并在源码级别上对 CUDA 程序的支持。
为了实现目标,ROCm 复制了 CUDA 的技术栈。对比如图2、图3(本文不考虑 OpenCL 支持)。

4. ROCM组件
4.1 LLVM Compiler
LLVM编译器基础结构:
欢迎来到LLVM项目!此存储库包含LLVM的源代码,LLVM是用于构建高度优化的编译器、优化器和运行时环境的工具包。LLVM项目有多个组件。该项目的核心本身被称为“LLVM”。这包含了处理中间表示并将其转换为目标文件所需的所有工具、库和头文件。工具包括汇编器、反汇编器、位码分析器和位码优化器。类c语言使用Clang前端。该组件将C、c++、Objective-C和objective - c++代码编译成LLVM位码,并使用LLVM从那里编译成目标文件。其他组件包括:libc++ c++标准库、LLD链接器等。
4.2 HIP
4.2.1 HIP概述
HIP是一种c++运行时API和内核语言,允许开发人员从单个源代码为AMD和NVIDIA gpu创建可移植应用程序。
主要特性包括:
- HIP非常薄,在CUDA模式下直接编码对性能影响很小或没有影响。
- HIP允许使用单源c++编程语言进行编码,包括模板、c++ 11 lambdas、类、名称空间等特性。
- HIP允许开发人员在每个目标平台上使用“最佳”开发环境和工具。
- hiify工具自动将源从CUDA转换为HIP。
- 开发人员可以专门为平台(CUDA或AMD)调整性能或处理棘手的情况。
新项目可以直接用可移植的HIP c++语言开发,并且可以在NVIDIA或AMD平台上运行。此外,HIP提供了移植工具,可以很容易地将现有的CUDA代码移植到HIP层,与原始CUDA应用程序相比,没有性能损失。HIP并不打算成为CUDA的临时替代品,开发人员应该期望做一些手动编码和性能调优工作来完成移植。
4.2.2 HIP 与 CUDA 对比
HIP是一种编程模型,对标CUDA编程模型。
HIP 可以说是 CUDA API 的”山寨克隆“版。除了一些不常用的功能(e.g. managed memory)外,几乎全盘拷贝 CUDA API,是 CUDA 的一个子集。
HIP is a C++ runtime API 。我们使用C++语言,可以调用HIP的API来进行编程。
HIP可以运行在ROCm平台,也可以运行在CUDA平台。
所以他可以运行在A卡,但是也可以运行在N卡上(N卡主要还是CUDA) 。
HIP 的API和CUDA非常类似,大多数情况下他们代码稍加修改就可以直接转换。
HIP 可以说是 CUDA API 的”山寨克隆“版。除了一些不常用的功能(e.g. managed memory)外,几乎全盘拷贝 CUDA API,是 CUDA 的一个子集。
HIP 不支持的 CUDA 功能,参见 FAQ。
4.2.3 CUDA转HIP
HIP提供了移植工具 “hipify”,可以帮助你将cuda源代码转换成HIP,与原始的CUDA应用程序相比没有开销。

4.2.4 CUDA与HIP术语对比

4.2.5 CUDA与HIP API

4.2.6 ROC、HC库
- rocFFT
- rocBLAS
- rocRAND
- rocSPARSE
- RCCL
- ...
5. 深度学习框架支持
ROCm 通过支持各大头部框架,试图打入深度学习市场。目前 各个大框架的支持情况如下:
Framework. | Status. | MIOpen Enabled. | Upstreamed | Current Repository |
---|---|---|---|---|
Caffe | Public | Yes | https://github.com/ROCmSoftwarePlatform/hipCaffe | |
Tensorflow | Development | Yes | CLA in Progress | Notes: Working on NCCL and XLA enablement, Running |
Caffe2 | Upstreaming | Yes | CLA in Progress | https://github.com/ROCmSoftwarePlatform/caffe2 |
Torch | Upstreaming | Development In process | https://github.com/ROCmSoftwarePlatform/cutorch_hip | |
torch cunn | Upstreaming | Development | https://github.com/ROCmSoftwarePlatform/cunn_hip | |
PyTorch | Development | Development | ||
MxNet | Development | Development | ||
CNTK | Development | Development |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通