AMDGPU平台ROCR介绍

什么是 ROCR?

ROCm 运行时(ROCR)是 AMD 对 HSA(异构系统架构)运行时 的实现。它是一个轻量级的用户态 API,用于暴露必要的接口,以访问和交互由 AMDGPU 驱动集 和 ROCK 内核驱动 所管理的图形硬件。

这些组件协同工作,使主机应用程序能够直接将计算内核(compute kernels)提交至 AMD 独立显卡硬件,从而充分发挥其计算能力。

 

ROCR API 具备以下功能:

1、错误处理
2、运行时初始化与关闭
3、系统与代理(agent)信息查询
4、信号(signals)与同步机制
5、架构化调度(architected dispatch)
6、内存管理
7、适配典型的软件架构栈

ROCR 提供对图形硬件的直接访问,使开发者能更精细地控制执行流程。例如,它支持一个或多个用户态队列(user-mode queues),提供低延迟的内核调度接口,允许开发者针对特定应用设计定制化的调度算法。

HSA 架构化队列语言(AQL, Architected Queuing Language)是由 HSA 基金会定义的一项开放标准,规定了用于控制 AMD 或 ATI Radeon® 图形设备的命令包(packet)语法。AQL 支持多种包类型,包括可让硬件自动解析包间依赖关系的屏障包(barrier AND 和 barrier OR packet)、内核调度包(kernel dispatch packet)以及代理调度包(agent dispatch packet)。

除了用户态队列和 AQL 外,HSA 运行时还暴露若干虚拟地址范围,这些地址空间可被系统中的一个或多个图形设备(也可能包括主机 CPU)访问。这些虚拟地址区域支持两种访问粒度:

细粒度(fine-grained):对该区域内存的更新对所有可访问设备立即可见;
粗粒度(coarse-grained):同一时间仅允许一个设备访问该内存区域。

对于粗粒度区域,可通过 HSA 运行时的内存 API 显式转移其所有权,但此类所有权切换必须由主机应用程序主动发起。

技术分析与解释

1. ROCR 的定位:HSA 运行时的 AMD 实现

.HSA(Heterogeneous System Architecture)是一套旨在统一 CPU/GPU 编程模型的开放标准,核心目标是实现零拷贝共享内存、统一地址空间和低开销任务调度。
.虽然 HSA 基金会已于 2019 年解散,但 AMD 将其核心思想集成到 ROCm 生态中,并通过 ROCR(即 libhsa-runtime64.so)提供生产级支持。
.ROCR 并非图形 API(如 Vulkan),而是通用计算运行时,专为 GPGPU(通用 GPU 计算)设计。

注意:原文中提到的 “ROCK kernel driver” 是早期 ROCm 文档中的术语,现已统一为 KFD(Kernel Fusion Driver),作为 amdgpu 内核模块的一部分。

2. 用户态队列 + AQL = 超低延迟调度

.传统 GPU 编程(如 CUDA)通常需通过驱动内核模块提交任务,存在上下文切换开销。
.ROCR 允许应用在用户空间创建环形队列(ring buffer),直接写入 AQL 包(如内核启动命令),再通过门铃寄存器(doorbell)通知 GPU。
.整个过程无需陷入内核,显著降低调度延迟(微秒级),适用于高频调度场景(如 AI 推理、实时仿真)。

AQL 包类型示例:

包类型 作用
kernel_dispatch_packet 启动一个 GPU 内核
barrier_and_packet 等待多个前驱任务完成(逻辑 AND)
barrier_or_packet 等待任一前驱任务完成(逻辑 OR)
vendor_specific_packet AMD 特有扩展(如性能计数器控制)


3. 内存模型:细粒度 vs 粗粒度

这是 HSA/ROCR 内存管理的核心概念:

特性 细粒度(Fine-grained) 粗粒度(Coarse-grained)
一致性 硬件保证缓存一致性(类似 CPU cache coherence) 无自动一致性;需显式同步
并发访问 多设备可同时读写 同一时间仅一个设备“拥有”该内存
性能开销 较高(因一致性协议) 较低(适合大块数据)
典型用途 小型共享变量、原子操作 大型张量、图像缓冲区

在现代 AMD GPU(如 CDNA/RDNA 架构)上,细粒度 SVM(Shared Virtual Memory)支持有限或已弃用。
实际开发中多采用粗粒度分配 + 显式同步(如 hsa_signal_wait_scacquire)。


4. “Agent” 是什么?

在 HSA 术语中,Agent 指一个可执行计算任务的硬件单元,包括:
CPU 核心(作为 HSA agent)
GPU 计算单元(Compute Unit, CU)
专用加速器(如 Matrix Core)
每个 Agent 有独立的:
指令集架构(ISA)
内存池(Memory Pools)
队列能力

应用可通过 hsa_iterate_agents() 枚举所有可用 Agent,并根据能力选择目标设备。

5. ROCR 在软件栈中的位置

应用层(HIP / OpenCL / 自定义框架)

ROCR(HSA Runtime API)

KFD + AMDGPU 内核驱动(/dev/kfd, /dev/dri)

AMD GPU 硬件(GCN/RDNA/CDNA)

HIP 实际上是构建在 ROCR 之上的高级抽象层。

直接使用 ROCR 可获得最大控制力,但开发复杂度高;绝大多数用户应优先使用 HIP。

三、总结

ROCR 是 AMD ROCm 生态的底层运行时基石,它通过实现 HSA 标准,提供了:

1、用户态低延迟调度(AQL + 用户队列)
2、统一虚拟地址空间(SVM)
3、灵活的内存一致性模型(细/粗粒度)
4、跨设备资源发现与管理(Agents)

尽管 HSA 基金会已停止运作,但其设计理念深刻影响了现代异构计算架构。ROCR 作为其最成熟的工业实现之一,仍是理解 AMD GPU 编程模型不可或缺的一环。

建议:普通开发者使用 HIP;系统/工具链开发者(如调试器、编译器作者)才需深入 ROCR。

posted on 2025-12-05 17:46  lh03061238  阅读(0)  评论(0)    收藏  举报

导航