6.1 lib/amdgpu 总览与路线图
这里关注 amdgpu 的 lib 库实现把lib/amdgpu这一整套 AMD GPU 测试基础库讲清楚它解决什么问题、如何分层、模块之间怎么依赖。读完本篇你应该能在脑子里画出「一条 GPU 命令从测试用例出发一路走到硬件」的完整链路并知道每一段代码住在哪个文件里。一、lib/amdgpu是什么在哪一层IGTigt-gpu-tools是 DRM 内核驱动的用户态测试套件。AMD 相关的测试代码分两处tests/amdgpu/放具体的测试用例subtestslib/amdgpu/放这些用例共享的基础设施。二者的关系以及它们与更底层库、内核的关系是这样一条分层链tests/amdgpu/*.c 测试用例定义 igt_subtest断言行为是否正确 │ 调用 lib/amdgpu/*.c 本篇主角BO 管理、PM4 组装、命令提交、compute dispatch、ASIC 抽象 │ 调用 libdrm (libdrm_amdgpu) amdgpu_device_handle / amdgpu_bo_alloc / amdgpu_cs_submit 等 uAPI 封装 │ ioctl kernel amdgpu / DRM 真正的驱动最终驱动硬件一句话概括每层的职责tests决定「测什么、断言什么」lib决定「怎么把一个 GPU 操作正确地构造并提交出去」libdrm是内核 ioctl 的薄封装内核驱动才真正接触硬件。本篇只聚焦lib/amdgpu——它是理解 AMD IGT 的关键因为几乎所有测试用例的「重活」都在这里完成。二、为什么需要这样一个 lib三个绕不开的难题直接用 libdrm 写一个 GPU 测试会立刻撞上三个问题而lib/amdgpu的模块划分正是对这三个问题的回答。难题 1GPU 命令是二进制 packet不是函数调用。要让 GPU 干活你得往一段内存里按 PM4Programmable Machine 4AMD 的命令流格式或 SDMA 格式逐个 32-bit dword 拼出 packet再把这段内存作为「IBIndirect Buffer」提交。手拼 packet 极易错。→ 对应amd_PM4.hcmd_base。难题 2寄存器布局、dispatch 细节随 ASIC 变化。GFX9、GFX10、GFX11、GFX12 的 SH 寄存器偏移、dispatch initiator、compute pipeline 编程方式各不相同。如果每个测试都写死某代硬件的魔数加一款新 ASIC 就要改一大片。→ 对应amd_ip_blocks.*这套 ASIC 无关抽象。难题 3一次提交有大量固定样板。分配 IB BO、建 BO list、创建 context、submit、等 fence、清理——每次都一样。→ 对应amd_command_submission.*的提交框架。三、主线一次 GPU 命令提交都经过谁把这三块串起来一次典型的「用 compute shader 把一个 DWORD 从 src 拷到 dst」大致要走这些步骤。这条主线贯穿本篇提到的各模块。1.拿 ASIC 操作表get_ip_block(device,AMD_IP_COMPUTE)amd_ip_blocks2.分配内存/BOamdgpu_bo_alloc_and_map(...)amd_memory3.组装 PM4 base-emit(...)/dispatch_init/write2hw amd_PM4/compute_utils4.提交并等待amdgpu_test_exec_cs_helper(...)command_submission5.校验结果 读回 dst断言值正确 tests 层其中第 3 步的「compute pipeline 怎么编程」是compute_utils/的领域shader 本身的二进制从哪来是shaders/的领域。四、模块地图按职责把lib/amdgpu下的文件分成六组外加专项测试与 SVM。核心基础设施文件职责amd_ip_blocks.{c,h}ASIC 无关抽象核心get_ip_block、amdgpu_ip_funcs操作表、amdgpu_ring_contextamd_ip_blocks_ex.c各 familygfx9/10/11/12的funcs具体实现按family_id挂载amd_gfx_v8_0.c/amd_gfx_v9_0.cget_reg_offset()SH 寄存器偏移表amd_PM4.h/amd_sdma.h/amd_registers.h/amd_family.hpacket 宏、寄存器枚举、family 判定宏内存文件职责amd_memory.{c,h}BO 分配/映射/释放、BO list、dmabuf、内存信息查询amd_mem_leak.{c,h}基于 kmemleak 的内核内存泄漏检测命令提交文件职责amd_command_submission.{c,h}amdgpu_test_exec_cs_helper、cmd_context_tAPI、write/copy/fill helperamd_compute.c/amd_gfx.cNOP / IB 提交类场景测试Compute Dispatchcompute_utils/文件职责amd_dispatch_helpers.{c,h}amdgpu_dispatch_init/write_cumask/write2hw、execute_compute_dispatchamd_dispatch.c/amd_gca.c面向 test 的高层 dispatch 用例含 hang 测试Shadershaders/文件职责amd_shaders.c/amd_llvm_asm*.h运行时 LLVM 汇编 ISA、family_id → mcpu映射、预编译 shader专项测试文件职责amd_cp_dma.*CP DMA 拷贝与 P2Pamd_deadlock_helpers.*死锁/队列 resetamd_pci_unplug.*PCI 热插拔amd_shared_process.*/amd_cs_radv.*多进程共享 / RADV 风格提交amd_vcn_shared.*/amd_jpeg_shared.*/amd_mmd_shared.*多媒体引擎VCN/JPEG测试脚手架amd_utils.*/xalloc.h计时日志、分配包装等杂项SVM文件职责amd_svm.{c,h}GEM_SVM ioctl 包装 svm_compute_copy_dispatch五、依赖关系图模块不是平级的存在清晰的自底向上依赖。理解这张图就能判断「一个功能该复用谁、不该重造谁」。tests/amdgpu/*command_submissioncompute_utils专项测试模块amd_svmamd_ip_blocks核心抽象amd_memory / shaderslibdrm (libdrm_amdgpu)kernel amdgpu关键观察amd_ip_blocks和amd_memory是几乎所有上层模块的公共底座command_submission与compute_utils是「提交」和「compute 组包」两条相对独立的支线测试用例按需组合它们。

相关新闻

手机怎么把 Kimi对话导出 |AI 导出鸭一键搞定

手机怎么把 Kimi对话导出 |AI 导出鸭一键搞定

手机怎么把 Kimi对话导出?微信搜「AI 导出鸭」小程序,粘贴对话或接分享,公式表格 Mermaid 全留,秒出 Word/PDF/MD。AI 导出鸭,移动端优雅落文档。在手机端使用 Kimi 这类大模型时,对话内容本质是以 Markdow…

2026/8/13 12:50:58 阅读更多 →
Win11Debloat:一个PowerShell脚本,3步带走Windows 11的臃肿、广告和隐私追踪

Win11Debloat:一个PowerShell脚本,3步带走Windows 11的臃肿、广告和隐私追踪

Win11Debloat:一个PowerShell脚本,3步带走Windows 11的臃肿、广告和隐私追踪 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various o…

2026/8/13 12:50:58 阅读更多 →
RevokeMsgPatcher 2.1 防撤回补丁实操手册:微信、QQ、TIM 已读消息不再被抹去

RevokeMsgPatcher 2.1 防撤回补丁实操手册:微信、QQ、TIM 已读消息不再被抹去

RevokeMsgPatcher 2.1 防撤回补丁实操手册:微信、QQ、TIM 已读消息不再被抹去 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地…

2026/8/13 12:50:58 阅读更多 →

最新新闻

【ORC】在云存储(如 S3、OSS)上使用 ORC 时,需要注意哪些 I/O 优化技巧?

【ORC】在云存储(如 S3、OSS)上使用 ORC 时,需要注意哪些 I/O 优化技巧?

ORC 云存储 I/O 优化实战:S3/OSS 上的高性能读写策略 用户问题原文:“在云存储(如 S3、OSS)上使用 ORC 时,需要注意哪些 I/O 优化技巧?” 2025年某大型电商平台将数据湖从 HDFS 迁移到 AWS S3 后,一个关键的“大促用户行为分析”查询性能下降 8 倍。原本 15 秒完成的作业…

2026/8/13 13:55:41 阅读更多 →
2026年7月银川市二手房价格深度分析报告

2026年7月银川市二手房价格深度分析报告

一、报告背景与数据说明本报告基于2026年7月银川市二手房市场实际成交案例,结合成交价格、户型结构、区域分布等维度,对当前市场行情进行深度剖析。数据来源涵盖主要中介平台公开成交记录及线下门店抽样统计,样本覆盖兴庆区、金凤区、西夏区、…

2026/8/13 13:55:41 阅读更多 →
【ORC】如何监控 ORC 文件的读取效率(如跳过的 Stripes 比例、实际读取的字节数)?

【ORC】如何监控 ORC 文件的读取效率(如跳过的 Stripes 比例、实际读取的字节数)?

ORC 读取效率监控实战:精准度量 Stripe 跳过率与 I/O 开销 用户问题原文:“如何监控 ORC 文件的读取效率(如跳过的 Stripes 比例、实际读取的字节数)?” 2025年某大型金融机构的数据分析平台遭遇性能瓶颈。一个本应秒级完成的“高危交易查询”(WHERE risk_score > 0.9…

2026/8/13 13:55:41 阅读更多 →
OBS源录制插件怎么用?一个过滤器让每个画面单独出片

OBS源录制插件怎么用?一个过滤器让每个画面单独出片

OBS源录制插件怎么用?一个过滤器让每个画面单独出片 【免费下载链接】obs-source-record 项目地址: https://gitcode.com/gh_mirrors/ob/obs-source-record 你是不是也遇到过这样的尴尬:OBS里排好的场景里,摄像头和游戏画面挤在同一个…

2026/8/13 13:55:41 阅读更多 →
3分钟掌握网盘直链解析:开源工具LinkSwift实战指南

3分钟掌握网盘直链解析:开源工具LinkSwift实战指南

3分钟掌握网盘直链解析:开源工具LinkSwift实战指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘…

2026/8/13 13:55:41 阅读更多 →
详解INSERTION-SORT执行过程及与冒泡、选择排序的对比(Python实现)

详解INSERTION-SORT执行过程及与冒泡、选择排序的对比(Python实现)

详解 INSERTION-SORT 执行过程及与冒泡、选择排序的对比(Python 实现) 目录 前言:排序算法与插入排序核心思想 一、INSERTION-SORT(插入排序)深度解析 2.1 算法核心原理 2.2 Python 代码实现(含逐行详细注释) 2.3

2026/8/13 13:54:41 阅读更多 →

日新闻

Visual Studio新建项目解决方案为空:系统性排查与修复指南

Visual Studio新建项目解决方案为空:系统性排查与修复指南

1. 问题现象与本质剖析如果你是一位.NET开发者,或者正准备踏入这个领域,那么Visual Studio(后面简称VS)绝对是你绕不开的伙伴。但有时候,这个伙伴会跟你开一个不大不小的玩笑:你满怀期待地点击“创建新项目…

2026/8/13 0:00:09 阅读更多 →
长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

说实话,每次提起“长春建设厅网站”这几个字,我心里都挺有感触的。不是因为它有多高大上,也不是因为那里藏着什么不可告人的秘密,恰恰相反,是因为它太“接地气”了,或者说,它是咱们普通人想要在这个城市好好生活、安稳买房时,必须得翻过的一座“数据山”。很多新朋友第…

2026/8/13 0:00:09 阅读更多 →
Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案 【免费下载链接】rdpwrap.ini RDPWrap.ini for RDP Wrapper Library by StasM 项目地址: https://gitcode.com/GitHub_Trending/rd/rdpwrap.ini 你是否曾为Windows家庭版无法支持多用户远程桌面…

2026/8/13 0:00:09 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →