尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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 组包」两条相对独立的支线测试用例按需组合它们。
RELATED

相关推荐

第11讲:高速信号链路前/预仿真建模(MWS基础应用)-差分过孔Via Wizard参数化建模完整实操教程

第11讲:高速信号链路前/预仿真建模(MWS基础应用)-差分过孔Via Wizard参数化建模完整实操教程

「信号完整性」#技术话题 #专栏推荐:信号完整性_一只豌豆象的博客-CSDN博客 目录 一、核心模型定义 二、实操建模流程 2.1 新建高频3D仿真工程 2.2 启动Via Wizard过孔宏向导 2.3 General全局参数配置(边界与端口) 2.4 Stackup叠层结构完整配置 2.5 Padstack焊盘堆栈…

📅 2026/10/6 9:27:43
QQScreenShot独立版截图工具完整指南:免登录玩转OCR文字识别与屏幕录屏

QQScreenShot独立版截图工具完整指南:免登录玩转OCR文字识别与屏幕录屏

QQScreenShot独立版截图工具完整指南:免登录玩转OCR文字识别与屏幕录屏 【免费下载链接】QQScreenShot 电脑QQ截图工具提取版,支持文字提取、图片识别、截长图、qq录屏。默认截图文件名为ScreenShot日期 项目地址: https://gitcode.com/gh_mirrors/qq/QQScreenSho…

📅 2026/9/4 8:37:51
AI Agent记忆系统架构解析:从向量检索到分层存储的工程实践

AI Agent记忆系统架构解析:从向量检索到分层存储的工程实践

1. 项目概述:为什么AI Agent需要一个“记忆系统”? 最近在折腾AI Agent框架OpenHands,当深入到它的Memory模块时,我发现这玩意儿远不止是“存点聊天记录”那么简单。很多刚接触AI Agent开发的朋友,容易把Memory理解成一…

📅 2026/9/3 21:27:20
MORE NEWS

更多资讯

📰

PLC物料自动检测与分拣系统设计与调试实战指南

做毕业设计或者接非标自动化项目的时候,物料自动检测与分拣系统基本是绕不开的经典课题。这个标题看着很长,其实拆开就三个关键词:PLC、物料检测、分拣系统。说白了就是用可编程逻辑控制器当大脑,配合各类传感器当眼睛&#xff0c…

📰

Android Studio发布APP全流程:签名、构建与上架指南

写这篇内容之前我先说个场景:在Android Studio里点了Run,APP在自己手机上跑得飞起,是真开发阶段最爽的时刻。可一旦到了"要把这个APP发给别人用、上架到应用商店"这一步,很多人才发现后面还有一整套流程:签名…

📰

激光频率梳深孔3D轮廓测量:从干涉原理到微米级检测实践

1. 项目概述:为什么传爆深孔需要光学3D轮廓测量先说个实际场景。某单位的特种爆破装置在装配前,需要检测传爆深孔的孔深和孔底轮廓。这类孔通常直径在几毫米到十几毫米之间,深度却能达到几十毫米甚至更深,典型的大深径比结构。孔底…

📰

信创环境部署星火 X2.5:麒麟/UOS + 国产算力跑 4B 模型的完整实录与调优参数

信创环境部署星火 X2.5:麒麟/UOS 国产算力跑 4B 模型的完整实录与调优参数 【免费下载链接】Spark-X2.5-4B Spark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体…

📰

Unity3D四季场景实现:光照、粒子与打包避坑全流程

简介:这是一份Unity3D团队协作项目《认识四季》的完整资源包,面向游戏开发专业学生、Unity初学者以及需要完成团队作业的开发者。项目围绕四季变化主题,综合运用场景搭建、光照系统、粒子特效、动画控制器和C#脚本,呈现春季生机、…

📰

电子元器件假货怎么识别:翻新料的5个早期迹象

电子元器件假货翻新料每年给行业造成几十亿美元损失,工控/汽车电子/医疗三大场景尤甚。翻新料不是"用着用着坏",是"装上2-3年后批量出故障"——这种延迟故障是产品召回和品牌信誉的定时炸弹。识别翻新料要靠5个早期迹象,…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬