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的驱动与虚拟化技术分享园地 1664

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的驱动与虚拟化技术分享园地 3257

ROCm rocr-runtime 库详细解析目录

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

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

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的驱动与虚拟化技术分享园地 2087

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的驱动与虚拟化技术分享园地 2260

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

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

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

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

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

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

2.1 libhsakmt 中的 HSA Topology 模型概览

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

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

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

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

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

第02章:HSA-Runtime架构概览

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

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

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

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

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

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

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

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

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

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

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

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

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

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

别再硬拔了!用这3个终端命令轻松搞定Mac上移动硬盘‘被程序占用’的问题

本文介绍了3个终端命令解决Mac上移动硬盘‘被程序占用’的问题,包括使用`diskutil list`定位硬盘、`lsof`查找占用进程以及`diskutil unmount`安全卸载。这些方法能有效避免数据风险,提升操作效率,特别适合开发者和技术爱好者。

weixin_33507732的博客 292

linux应用程序段错误调试

一、堆、栈 在分析段错误之前,先了解一下什么是堆?什么是栈? 堆:一般由开发者分配释放,如果没有释放,程序结束时,在有的OS中可能会被自动释放,分配方式类似于链表。堆的操作方式为,队列优先,先进先出的原则。 栈:由操作系统自动分配,存放函数的参数值,局部变量。栈的操作方式为,先进后出的原则。 堆栈中定义了一些操作。 两个最重要的是PUSH和POP。  PUSH:操作在堆栈的顶部加入一个元素...

农村种地人 1107

RDM协议控制端实战:从数据包构造到高效设备发现算法

本文深入探讨了RDM协议控制端的核心开发流程,涵盖从数据包构造、发送到响应解析的全过程。重点解析了如何利用二分搜寻算法高效实现网络设备发现,并分享了组包、解包中的关键代码实现与常见调试技巧,为舞台灯光与智能硬件领域的嵌入式开发提供实战指导。

week9的博客 456

安卓逆向 | 某社交类APP gsid

*本文章仅供学习交流,切勿用于非法通途,如有侵犯贵司请及时联系删除

爬虫进击之路 3077

道路场景分割:车道线、可行驶区域与路沿检测

道路场景分割:车道线、可行驶区域与路沿检测​ ,人工智能,计算机视觉,大模型,AI,文章围绕道路场景分割展开,涵盖车道线、可行驶区域与路沿检测。介绍了基本概念、重要性,各部分检测的类型、方法、难点及解决思路,还涉及技术融合、数据集、评价指标、发展趋势、应用案例、代码示例、不同天气处理、实际问题与方案、实现流程、相关技术工具、教育研究应用、产业前景、伦理安全问题及学习资源等,全面阐述了道路场景分割的多方面内容,为相关学习和研究提供了丰富信息。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 22万+

SAP-ABAP:接口多继承与复合接口设计:复杂业务场景下的能力组合实现方案

本文介绍了ABAP中通过接口多继承与复合接口设计实现能力组合的方案。文章首先辨析了类实现多个接口与接口继承接口的核心概念,指出ABAP虽不支持类多继承,但可通过这两种机制灵活组合能力。随后详细讲解了类实现多个接口的语法规则与三种调用方式,并给出了五个基础能力接口的设计示例(日志记录、权限校验、数据导出、消息通知、格式转换)。作者通过对比单继承与接口多重实现的差异,强调后者在解耦和扩展性上的优势,为复杂业务场景下的能力组合提供了实用解决方案。

baidu_35680696的博客 243

国科大学习资料--遥感原理集图像处理(尤红建)--2019年期末考试

国科大学习资料–遥感原理集图像处理(尤红建)–2019年期末考试 国科大学习资料–遥感原理集图像处理(尤红建)–2019年期末考试 国科大学习资料–遥感原理集图像处理(尤红建)–2019年期末考试 ================================================================== ================================================================== ==============

无名何许人的博客 1469

Devexpress16.2.6破解工具

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

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值