ROCm rocr-libhsakmt分析系列1-2:多GPU跨卡VRAM访问机制分析

1. 场景概述

在8个GPU算力卡的系统中,GPU1需要访问GPU2-8的VRAM显存,驱动是如何实现的呢?本文基于ROCr-Runtime的libhsakmt库源码,深入分析这一跨GPU内存访问的完整实现机制。也是节点HsaIoLinkProperties信息的应用。

先给出实现流程概览:P2P拓扑发现 → 统一虚拟地址空间 → 页表映射 → 硬件转发,实现零拷贝的跨GPU内存访问。

2. 关键数据结构

2.1 GPU内存管理器 (gpu_mem_t)

每个GPU维护的P2P连接信息:

typedef struct {
   
   
    uint32_t gpu_id;                       // 当前GPU标识符
    
ROCm rocr-libhsakmt分析系列7-1:共享机制-export 本文深入解析了ROCm平台中hsaKmtExportDMABufHandle函数的技术实现与应用。该函数基于Linux DMA-BUF机制,通过将GPU内存导出为文件描述符(fd),实现跨进程/跨设备的零拷贝数据共享。文章详细阐述了其底层原理,包括FMM内存管理、KFD驱动交互等关键技术,并分析了典型应用场景如多进程AI推理、跨设备数据流等。通过IOCTL调用与内核协作,该函数在保证安全性的前提下显著提升了异构计算系统的数据传输效率,为构建高性能计算应用提供了重要支持。 阅读详情

相关推荐

ROCm rocr-libhsakmt分析系列4-1: memory alloc & free

本文分析了ROCm HSAKMT库中的核心API hsaKmtAllocMemory 的实现原理。该API为上层应用提供统一的内存分配接口,支持多种内存类型(VRAM、系统内存等)。文章详细解析了其参数校验、标志冲突检查、分配类型选择(系统内存、VRAM或Scratch内存)以及与aperture管理器的交互过程。同时介绍了典型使用场景(如VRAM分配、SVM一致性内存等)和内存管理机制(包括对象追踪、释放流程)。

图形/计算GPU的驱动与虚拟化技术分享园地 1652

ROCm rocr-libhsakmt分析系列7-3:共享机制测试用例KFDGraphicsInterop分析

本文分析了KFDGraphicsInterop.cpp测试用例,验证ROCm计算栈与图形渲染栈的内存互操作性。测试通过图形栈分配VRAM并导出为DMA-BUF,在ROCm栈中注册后验证GPU访问能力。流程包括:1)环境检查;2)图形栈分配内存;3)CPU设置元数据;4)ROCm注册DMA-BUF;5)验证注册信息;6)GPU执行访问测试;7)结果验证;8)指针信息查询;9)资源清理。测试确认了计算栈能正确识别并操作图形栈分配的内存,实现跨栈内存共享。

图形/计算GPU的驱动与虚拟化技术分享园地 3246

ROCm rocr-runtime 库详细解析目录

摘要: 本系列文档系统介绍AMD ROCm HSA Runtime技术栈,涵盖基础概念、核心组件、内存管理、任务调度及高级特性。HSA Runtime作为ROCm核心组件,提供GPU设备管理、内存分配、任务调度等功能。内容分为五部分:HSA基础(异构计算原理、编程模型)、核心组件(Agent/Queue等实现)、内存管理(统一内存/IPC共享)、任务调度(AQL队列机制)及高级特性。包含代码路径runtime/hsa-runtime/和核心模块解析。

图形/计算GPU的驱动与虚拟化技术分享园地 2502

ROCm rocr-libhsakmt分析系列3-3:apertures之mem_handle_aperture

AMD ROCm平台的HSAKMT模块中,mem_handle_aperture是专为无虚拟地址需求的内存分配(如VRAM-only、DMAbuffer导入等)设计的特殊管理单元。它使用47位非规范地址空间,避免与其他内存区域冲突,仅通过句柄追踪资源生命周期,不映射到进程虚拟地址。文章解析其设计动机(统一管理NoAddress分配)、实现原理(独立地址段与初始化流程)、典型应用(VRAM/共享内存/IPC场景)及与其他aperture的区别(如SVM/GPUVM),并附代码示例说明使用方式与注意事项。

图形/计算GPU的驱动与虚拟化技术分享园地 2074

ROCm rocr-libhsakmt分析系列4-2: Implementation Analysis of fmm_allocate_memory_object

摘要: fmm_allocate_memory_object是ROCm(Radeon Open Compute)HSAKMT内存管理子系统的核心功能,负责为GPU分配内存对象,管理虚拟地址空间和设备内存。该函数通过输入验证、IOCTL参数准备、地址调整、分块内存分配(支持大内存请求)和对象注册等步骤实现高效内存管理。它支持多GPU、用户指针分配和句柄管理,确保线程安全和错误处理,是ROCm内存策略的关键组件,兼顾性能与可靠性。

图形/计算GPU的驱动与虚拟化技术分享园地 2247

1.1 HSA(异构系统架构)驱动 libhsakmt 概览

本文介绍了AMD ROCm平台中KFD驱动与libhsakmt库的架构与功能。KFD驱动作为内核模块,负责GPU设备管理、内存分配、任务调度等核心功能,通过/dev/kfd接口与用户空间交互。libhsakmt库作为用户态支撑库,封装KFD的ioctl调用,提供设备实例管理、内存管理、任务调度、事件同步和数据传输等API接口。文章详细阐述了libhsakmt在设备初始化、内存操作、任务队列管理以及多GPU协作等方面的典型调用流程,展现了其在异构计算中简化CPU-GPU交互的重要作用。

图形/计算GPU的驱动与虚拟化技术分享园地 2491

3. ROCm HIP 内存分配接口到 libhsakmt 的调用路径分析

本文分析了HIP内存分配机制的核心链路,从用户态API到内核驱动的完整调用路径。关键点包括: HIP内存分配遵循从HIP Runtime API→ROCclr→ROCr→libhsakmt→KFD的调用层次,涉及指针、内存对象和底层资源的三重转换。 分配前需要完成设备拓扑发现,建立device-context-device的完整关联关系,包括HSA内存池和NUMA信息。

图形/计算GPU的驱动与虚拟化技术分享园地 590

2.1 libhsakmt 中的 HSA Topology 模型概览

本文介绍了KFD驱动通过拓扑模型描述异构计算系统的核心方法。该模型采用三层抽象:Node表示计算节点(CPU/GPU),Memory Region描述内存层次(包括VRAM、LDS等类型),IO Link定义节点间互联关系(如PCIe/XGMI),形成有向加权图结构。相比传统NUMA模型,KFD拓扑支持混合节点类型、多样互联方式和更复杂的内存层次,可准确反映CPU/GPU间的带宽差异(高达30倍)。这种统一建模使系统能基于拓扑信息进行内存放置、数据迁移等优化决策,为异构计算提供基础设施支持。

图形/计算GPU的驱动与虚拟化技术分享园地 2007

ROCm rocr-libhsakmt 库实现剖析内容目录

本文为AMD ROCm生态中rocr-runtime用户态驱动libhsakmt的深度解析专栏总目录,系统梳理其从设备管理、拓扑发现、虚拟地址空间、内存操作到事件同步等核心机制。通过剖析libhsakmt与KFD内核驱动间的ioctl交互协议,揭示HSA架构下GPU资源管理、内存共享、地址转换及低延迟信号传递的实现细节,助力开发者深入理解ROCm底层运行原理。

图形/计算GPU的驱动与虚拟化技术分享园地 150

第02章:HSA-Runtime架构概览

摘要: 本章深入解析HSA Runtime的三层架构设计,包括公共API层(C语言接口)、核心实现层(C++业务逻辑)和驱动抽象层(硬件交互)。重点介绍了Runtime的核心组件(Agent、Queue、Signal、Memory)及其关系,以及初始化流程、配置选项和调试功能。通过学习,读者将掌握HSA Runtime的整体架构,为后续模块学习奠定基础。

图形/计算GPU的驱动与虚拟化技术分享园地 2892

0.4 阅读本专栏的前置知识与环境搭建指南

摘要: 本文介绍了阅读和运行libhsakmt所需的前置知识体系和环境搭建指南。从必备的C语言和Linux系统编程基础到推荐的AMD GPU硬件配置,详细说明了操作系统选择、驱动安装、源码获取和编译依赖的安装步骤。重点包括:1) 知识准备评估表;2) AMD显卡兼容性列表;3) Ubuntu系统下的ROCm驱动安装;4) 源码获取方式;5) 编译依赖项说明。帮助读者快速搭建可编译调试libhsakmt的环境,为后续源码分析奠定基础。

图形/计算GPU的驱动与虚拟化技术分享园地 307

2.3 计算节点的计算能力描述:HsaNodeProperties

本文解析了AMD ROCm平台中HsaNodeProperties结构体的详细设计,该结构体完整描述了计算节点的硬件特征。主要包含以下核心信息: 节点类型标识:通过NumCPUCores/NumFComputeCores区分CPU/GPU节点,支持APU混合场景 资源拓扑:详细记录GPU微架构层级(Shader Engine→SIMD Array→CU→SIMD) 关键参数:包含计算核心数、内存容量、缓存结构、PCIe信息等30+字段。

图形/计算GPU的驱动与虚拟化技术分享园地 499

第15章:统一内存与一致性

摘要:本章深入解析HSA Runtime的统一内存模型与一致性机制,重点介绍其创新性的统一地址空间设计,使CPU与GPU共享虚拟地址。内容涵盖Fine-grained与Coarse-grained内存的区别、内存一致性模型、Fence操作及Driver层支持。通过对比传统异构编程模型,阐述了统一地址空间在简化编程、避免数据竞争及优化性能方面的优势。详细剖析了Driver如何通过标志控制内存属性,并提供了Fine-grained内存的原子操作示例。本章对理解CPU-GPU协同内存语义、选择合适内存类型及解决一

图形/计算GPU的驱动与虚拟化技术分享园地 298

2.5 计算节点的互联(interconnect)能力描述:HsaIoLinkProperties

本文介绍了topology_take_snapshot函数中IOLink检测的实现细节。IOLink表示系统节点间的互联通道,通过HsaIoLinkProperties结构体存储链接类型、节点ID、性能参数等属性。检测流程首先从sysfs读取物理链接信息,包括普通IO链接和P2P链接,并过滤不可访问的节点。对于没有直连的GPU节点,还会创建间接链接。该机制采用分层策略,确保完整构建系统拓扑结构,为数据传输路径选择提供依据。

图形/计算GPU的驱动与虚拟化技术分享园地 2035

【Proteus】NE555纯硬件实现LED呼吸灯效果,附源文件,效果展示

本设计通过NE555与三极管的巧妙配合,仅用基础元件实现了呼吸灯效果。核心在于利用RC积分电路将PWM信号转换为控制电压,并通过负反馈动态调节占空比。Proteus仿真验证了方案的可行性,读者可进一步优化参数或扩展功能,探索更多硬件设计可能性。

2201_75797484的博客 2973

Windows 11安装realtek audio control

Windows 11安装realtek audio control,解决无法链接RPC问题

m0_46144825的博客 8万+

IEEE Transaction期刊模板使用注意事项

本文将总结使用IEEE Transactions系列期刊的投稿模板时的一些注意事项,包括模板本身的使用规范、参考文献的正确格式等其他内容。

weixin_39529207的博客 2万+

【YOLOv11改进 - 特征融合】SDI:多层次特征融合模块,替换contact操作

【YOLOv11改进 - 特征融合】SDI:多层次特征融合模块,替换contact操作

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 1764

YOLOv11改进 | Conv篇 | DWRSeg扩张式残差助力小目标检测 (附创新修改后的C3k2DWRSeg)

本文内容给大家带来的DWRSeg中的DWR模块来改进YOLOv11中的C2f和Bottleneck模块,主要针对的是小目标检测,主要创新点可以总结如下:多尺度特征提取机制的深入研究和创新的DWR模块和SIR模块的提出这种方法使得网络能够更灵活地适应不同尺度的特征,从而更准确地识别和分割图像中的物体。DWRSeg的基本原理和框架,并且能够在你自己的网络结构中进行添加DWRSeg需要增加一定的计算量一个DWR模块大概增加0.4GFLOPsYOLOv11改进系列专栏——本专栏持续复习各种顶会内容——科研必备。

Snu77的博客 4163

如何离线环境下安装Dify插件 (可提供远程指导协助)

离线环境下安装Dify插件

litlit023的专栏 8096

AI一键生成带货短视频:电商直播的未来

随着电子商务行业的快速发展,直播带货已成为一种极为有效的营销手段。然而,传统的人工直播方式存在诸多局限性,如人力成本高、主播培训周期长等问题。为了解决这些挑战,一种基于AI技术的一键生成带货视频解决方案应运而生——这就是“Anchor Crafter”。这项创新技术不仅能够自动创建高质量的带货视频,而且还能实现人物与商品之间的自然交互,极大地提升了用户体验。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 2195

【虚幻引擎UE】UE5 阴影异常与优化

【虚幻引擎UE】UE5 阴影异常与优化解决方案合集

灵境引路人 3万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: 第1章: virglrenderer 项目演进:从 OpenGL 库到多后端虚拟化平台
下一篇: rocm_bandwidth_test-1: 功能与用法
DeeplyMind
DeeplyMind 新星创作者: 嵌入式与硬件开发技术领域 新星创作者: 嵌入式与硬件开发技术领域
博客等级 码龄16年 2192粉丝 862原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值