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/10/12 1:40:11 阅读更多 →
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/10/12 1:40:21 阅读更多 →
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/10/10 5:13:19 阅读更多 →

最新新闻

YASB 测试体系深度解析:从 pytest 运行、Windows SDK 校验到 CI 流水线

YASB 测试体系深度解析:从 pytest 运行、Windows SDK 校验到 CI 流水线

桌面应用 【免费下载链接】yasb A highly configurable Windows status bar written in Python. 项目地址: https://gitcode.com/gh_mirrors/yas/yasb 点击查看 免费下载 本文以 YASB(Yet Another Status Bar,一个高度可配置的 Windows 状态…

2026/10/12 1:39:54 阅读更多 →
EarlGrey 版本兼容性全解析:Release、earlgrey Gem 与 CocoaPods 版本对照指南

EarlGrey 版本兼容性全解析:Release、earlgrey Gem 与 CocoaPods 版本对照指南

测试 【免费下载链接】EarlGrey :tea: iOS UI Automation Test Framework 项目地址: https://gitcode.com/gh_mirrors/ea/EarlGrey 点击查看 免费下载 EarlGrey 的安装与版本选择横跨三套独立版本体系——框架 Release 版本、Ruby 安装工具 earlgrey gem 的版本、以…

2026/10/12 1:39:54 阅读更多 →
力扣刷题:35搜索插入位置/704二分查找/69x的平方根/34查找第一个和最后一个元素/234回文链表/206反转链表/92反转链表||/25k个一组翻转链表/169多数元素/141环形链表

力扣刷题:35搜索插入位置/704二分查找/69x的平方根/34查找第一个和最后一个元素/234回文链表/206反转链表/92反转链表||/25k个一组翻转链表/169多数元素/141环形链表

目录 35.搜索插入位置 704.二分查找 69.x的平方根 34.在排序数组中查找元素的第一个和最后一个位置 234.回文链表 206.反转链表 92.反转链表|| 25.k个一组翻转链表 169.多数元素 141.环形链表​ 35.搜索插入位置 35. 搜索插入位置 - 力扣(LeetCode&#…

2026/10/12 1:39:54 阅读更多 →
动态库热加载原理与框架设计:从dlopen到安全热替换

动态库热加载原理与框架设计:从dlopen到安全热替换

"动态库热加载"这个词,做后台服务和客户端开发的朋友应该都不陌生。简单讲,它就是在程序运行期间,把编译好的动态库(Linux下的.so、Windows下的.dll、macOS下的.dylib)加载进进程,或者用新版本替…

2026/10/12 1:39:54 阅读更多 →
AI辅助开发工程纪律闭环:Superpowers技能框架与TDD契约驱动实战

AI辅助开发工程纪律闭环:Superpowers技能框架与TDD契约驱动实战

1. 从“氛围编程”到工程纪律:为什么我们需要重新审视AI辅助开发的底层逻辑“氛围编程”这个词最近在开发者圈子里流传得越来越广,它描述的是一种让人又爱又恨的状态:你打开AI编程助手,用自然语言描述需求,AI噼里啪啦生…

2026/10/12 1:39:54 阅读更多 →
PPT Master SVG 图标库完全指南:12,027 个内置图标的选取、同步与嵌入实践

PPT Master SVG 图标库完全指南:12,027 个内置图标的选取、同步与嵌入实践

AI 技能人工智能 【免费下载链接】ppt-master AI 把任意文档生成真正可编辑的 PowerPoint —— 原生形状与动画、演讲者备注可合成音频旁白、还能参考你自己的 .pptx 模板,而不是一张张图片 何雨果出品 项目地址: https://gitcode.com/hugohe3/ppt-master 点击查看…

2026/10/12 1:38:53 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →