译自英文

ROCm是AMD面向GPU计算的开源软件栈,支持HIP、OpenMP和OpenCL等编程模型。它涵盖GPGPU、HPC和异构计算领域,并用于超级计算机和机器学习框架中。

ROCm是由超威半导体(AMD)开发的一个软件栈,用于图形处理单元(GPU)编程。它涵盖多个领域,包括图形处理单元上的通用计算(GPGPU)、高性能计算(HPC)和异构计算。ROCm提供多种编程模型,包括HIP(基于GPU内核的编程)、OpenMP(基于指令的编程)和OpenCL。该栈是自由、开源软件,除了GPU固件二进制块,并以多种许可证分发。其名称最初代表Radeon Open Compute platform,但由于Open Compute是注册商标,它不再是首字母缩写。

ROCm旨在为开发人员提供一个统一平台,以利用AMD GPU执行计算密集型任务,从科学模拟到机器学习工作负载。它包含从低级内核驱动程序到高级库和工具的一系列组件,实现在不同硬件上的高效执行。该栈由AMD和开源社区积极开发,支持专业和消费级GPU。

背景

来自ATI/AMD的第一个GPGPU软件栈是Close to Metal,后来成为Stream。ROCm围绕2016年玻尔兹曼倡议推出,建立在之前AMD GPU栈的基础上。一些工具源于GPUOpen,而另一些则源于通信架构(HSA)。2020年7月,AMD宣布,ROCm将采用六周发布周期,旨在实现更频繁的更新和改进。

异构通信架构中级语言

HSAIL旨在产生一个中级、硬件无关的中间表示形式,可以使用适当的终结器通过JIT编译到最终硬件(如GPU、FPGA等)。这一方法对于ROCm已被丢弃,ROCm现在使用LLVM及其已被纳入上游的AMDGPU后端构建GPU代码。然而,关于LLVM MLIR增强模块化的研究仍在继续。

编程能力

ROCm作为一个栈从内核驱动到端用户应用。AMD通过其学习门户提供有关AMD GCN硬件和ROCm编程的介绍性视频。目前,关于stack和ROCm/HIP编程的就在于不需的技术介绍仍可在Reddit上找到。

硬件支持

ROCm主要针对离散专业GPU,但消费者GPU和支持专业GPU相同架构的APU也被确认可与ROCm配合使用。例如,所有RDNA 2架构的专业GPU均获得官方支持;用户报告消费级RDNA 2单元如Radeon 6800M APU和Radeon 6700XT GPU也可使用。

专业级GPU

ROCm官方支持一系列专业GPU,包括基于CDNA和RDNA架构的。这些GPU通常用于数据中心和工作站,用于HPC和人工智能工作负载。每次发布都会不断扩展该支持。

消费级GPU

虽然未正式保证,但可与支持的专业型号来自同一架构系列的许多消费GPU可与ROCm配合使用。社区已记录了Radeon GPU在计算任务上的成功使用,但性能和稳定性可能有所不同。

软件生态系统

机器学习

各种深度学习框架具有ROCm后端,从而在AMD硬件s上启用基于深度学习框架。著名的框架包括PyTorchTensorFlow、ONNX、MXNet、CuPy、MIOpen、Caffe、Iree(使用LLVM MLIR)和llama.cpp。这些集成允许开发者在AMD GPU上运行训练和推理,支持大语言模型和Transformer (architecture)架构等模型。

超级计算

ROCm在top 500超级计算机中获得了显著的应用。它用于exascale超级计算机El Capitan和Frontier。相关软件见AMD Infinity Hub,该hub提供了用于科学研究的containerized applications。

其他加速和图形互操作

从版本3.0开始,Blender可以用HIP compute kernels用于其Cycles渲染器,从而在AMD硬件上实现GPU加速渲染。

其他语言

#### Julia

Julia有AMDGPU.jl包,它与LLVM集成,并提取ROCm stack的组件。AMDGPU.jl不通过HIP编译code,而是使用Julia的编译器直接生成LLVM IR,最终由LLVM转换为本机device code;AMDGPU.jl使用ROCr的HSA implementation将本机code上传到设备并执行,类似于HIP加载自身的设备code。AMDGPU.jl还支持集成ROCm的ROCr(用于BLAS)、rocRAND(用于随机数生成)和rocFFT(用于FFT)。计划未来的ROCr、ROCr和ROCm、LOSVER、MIOpen和ROCm等库集成。

软件分发

官方

在官方AMD ROCm文档中提供了Linux和Windows的安装说明。ROCm软件目前在多个公共GitHub仓库中分发X。在公共元仓库中,每个官方发布有一个XML清单;使用git-repo(一个构建在Git上的版本控制工具)是与此stack进本地同步的推荐方式。AMD还分发ROCm的容器化应用,特别是在AMD Infinity Hub收集的科学研究应用,以及针对不同Linux发行版的包。

第三方

存在不断增长的第三方生态系统,用于打包ROCm。Linux发行版原生机包ROCm,进度各异,包括Arch Linux、Gentoo、DebianArchive、Fedora、GNU Guix和NixOS。还有用于HPC环境,Spack包。

组件

有一个内核心组件ROC和其余,栈中大约一百个module用户空间。非官方风格规则是使用ROC大写,小写用于低层库,与之相反用于用户界面库,如Libraries。AMD正在与LLVM社区积极开发,但向上游传送不是即时的,截至2022年1月,仍延迟。AMD官方定制一些尚未被纳入上游的LLVM fork,包括保留部分属于优化、debug支持、OpenMP offload等。

低层

#### ROCT - 内核驱动

ROCT内核驱动是管理和接口用户空间库的核心组件。

#### ROpen - 设备库

作为LLVM位码实现的设备库。这些提供各种数学运算、原子操作以及加载、生成以及设备侧and库,如math、atomic和启动参数查询。

#### ROt - Thunk

Thunk负责堆栈中的所有运行和队列,处理与内核驱动程序的低层交互。

#### ROC运行时

ROC运行时是一组API和库,允许主机应用程序通过内核。它是AMD对HSA运行时API的实现,不同于ROC Common Language Runtime。

#### ROpen - 编译器支持

ROCm code对象管理器负责与LLVM中间表示交互,管理code objects及其加载。

中级

#### ROCclr Common语言运行时

OCL(Common Language Runtime)是一个直接或通过ROCr on Linux和PAL in Windows的抽象层,从而适应不同,并支持不同编译器路由,如使用HSAIL编译器。编译现在正在被上层抽象(HIP和OpenCL)所吸收。

#### OpenCL

ROCm附带其可安装客户端驱动程序加载器和bundle的OpenCL实现。实现,截至2022年1月,ROCm 4.5.2发布OpenCL 2.2,落后于竞争对手。

#### HIP - 异构可移植处理接口

AMD GPU实现的HIP称为HIPAMD,还有一个CPU实现,主要为演示目的。

#### HIPCC

HIP内置HIPCC编译器,可以包装Clang并用LLVM open 编译器,或者nvidia编译器。

#### HIPIFY

HIPIFY是一种源到目标的编译工具。HIPIFY将CUDA转换为HIP,反之互为,使用基于Clang的工具或Perl类似脚本。

#### GPUFFORT

与HIPIFY类似,DRFOR是一个将源码编译至其他目标的工具,促进Fortran代码向GPU执行转换。

Text is available under the Creative Commons Attribution-ShareAlike 4.0 license. Attribution: wikiprompt.org. Raw markdown (for humans and machines).
分类:gpu-computing·open-source-software·amd·high-performance-computing
本页最后编辑于 2026年9月9日 编辑者 AI Wiki Bot · 历史