零基础学AI GPU SoC软件开发——探索软硬协同之道
文章平均质量分 88
零基础学AI GPU SoC软件开发——探索软硬协同之道
专栏定位
本专栏专为希望深入理解AI计算芯片软件生态的开发者设计。无论你是软件工程师想要了解硬件底层,还是硬件工程师希望掌握软件栈原理,这里都将为你打开一扇全新的大门。我们将以当前主流AI加速芯片(如NVIDIA GPU、华为昇腾、寒武纪等
amy_mhd
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
一张图看懂 PCIe 系统结构(Root Complex / Endpoint / Switch)
本文以通俗图解方式梳理PCIe系统结构,核心为根复合体(RC)、端点设备(EP)与交换机(Switch)的逻辑拓扑。强调PCIe是点对点、树状结构,RC作为总管协调通信,EP负责执行任务,Switch实现端口扩展。对比PCI的共享总线,PCIe具备更高带宽与扩展性。通过服务器实例说明实际应用,突出理解结构是掌握协议的基础,为后续讲解速率计算铺垫。原创 2026-09-17 05:30:00 · 34 阅读 · 0 评论 -
21天学pcie--为什么 PCIe 不会丢数据?
PCIe 不是“从不丢包”,而是“丢包一定能被发现,并且一定能被恢复”。它的可靠性,是由三层机制 + 两个维度 共同保证的:层级机制解决什么问题物理层8b/10b / 128b/130b + 扰码信号不乱、不畸变数据链路层链路级不丢、不错事务层事务级有始有终📌PCIe 的可靠性是“设计出来的”,不是“指望链路干净”**PCIe 之所以不会丢数据,是因为:物理层尽量不错,数据链路层错了必救,Flow Control 防止乱冲,事务层保证有始有终。**原创 2026-08-27 09:30:00 · 300 阅读 · 0 评论 -
21天学pcie--PCIe 设备树(Device Tree)简析
*PCIe 控制器节点,是 SoC 侧对 PCIe Host Bridge 的完整描述;它定义了地址窗口、中断路由和硬件资源,但不描述具体的 PCIe 设备。**原创 2026-08-28 05:30:00 · 112 阅读 · 0 评论 -
Memory Read / Write TLP 示例(不看协议也能懂)
本文通过Memory Read/Write TLP示例,对比PCIe设备读写操作的差异。Memory Write只需单向发送TLP,速度快;而Memory Read需要先发请求,等待设备返回Completion TLP,导致延迟高、性能差。MMIO读取是PCIe的性能瓶颈,优化建议包括减少MMIO读取、使用DMA替代、合并写操作等。工程师需理解PCIe的天性:写操作像寄快递,读操作像寄单子等回执,前者高效后者耗时。文章还解释了lspci命令输出与TLP地址的对应关系,帮助读者形成闭环理解。原创 2026-08-27 05:45:00 · 16 阅读 · 0 评论 -
ranges / bus-range 含义(PCIe 地址空间的“施工图纸”)
*bus-range 划定 PCIe 总线的“行政辖区”,ranges 定义 CPU 与 PCIe 之间的“地址翻译规则”;前者决定“能管多远”,后者决定“能装多少设备”。**原创 2026-08-26 08:00:00 · 13 阅读 · 0 评论 -
零基础学pcie--PCIe 是怎么“可靠传输”的?
摘要: PCIe通过数据链路层的Ack/Nak机制确保可靠传输,核心思想类似“快递签收”:TLP(数据包)附带SeqNum序列号,接收端校验LCRC后返回累计确认(Ack)或错误重传请求(Nak)。发送端通过RetryBuffer暂存未确认的TLP,触发Nak时从错误点批量重传。该机制仅在相邻设备间逐跳生效,由硬件自动完成,驱动无感知。调试时,吞吐下降或延迟抖动可能源于物理层信号问题引发的频繁Nak。关键点:PCIe不保证链路绝对可靠,但通过“错误检测+重传”实现“丢了必救”。原创 2026-08-21 12:00:00 · 15 阅读 · 0 评论 -
零基础学pcie--ARM SoC 上的 PCIe(你必须建立的三个认知)
ARM SoC上的PCIe核心认知 在ARM架构中,PCIe本质是SoC的外设控制器,而非x86的系统总线。设备树仅需描述SoC内部的PCIe控制器(含PHY/时钟/复位配置),不处理板级PCIe设备,后者由内核通过标准PCIe枚举机制自动识别。关键点包括: 三层模型:设备树仅管理SoC层(控制器),Root Port以下由内核负责; 与x86差异:ARM无统一BIOS/ACPI,依赖设备树初始化控制器; 调试铁律:设备树确保控制器可用(80%问题在PHY/时钟),内核处理设备枚举; 常见误区:禁止在设备树原创 2026-08-21 10:15:00 · 89 阅读 · 0 评论 -
零基础学pcie--TLP 的三大部分:Header / Data / Digest
摘要: TLP(事务层数据包)由三部分组成:Header(必选,包含地址、类型等元数据)、Data(可选,实际传输内容)和Digest(可选,端到端校验)。Header类似快递单,决定TLP的流向和操作;Data仅在写请求等场景存在,长度以DW(4字节)为单位;Digest(ECRC)用于端到端校验,区别于链路级LCRC。关键点:Header决定TLP行为,Data非必需且大小受限,ECRC非强制但提升可靠性。常见误区包括混淆ECRC/LCRC、误认所有TLP含Data。工程师调试时应优先检查Header正原创 2026-08-20 23:14:02 · 18 阅读 · 0 评论 -
pcie的Status / Command 寄存器实战(设备的总开关和体检表)
PCIe设备调试实战:Command与Status寄存器关键解析 Command寄存器(0x04)是PCIe设备的"总开关",控制核心功能使能,如Memory Space(Bit1)和Bus Master(Bit2)必须开启(0x0006)才能保证设备基本工作。Status寄存器(0x06)则提供"体检报告",通过错误标志位(如Master Abort、Parity Error等)快速定位问题。调试时需遵循黄金法则:先检查Command配置合法性,再分析Status报原创 2026-08-17 00:04:46 · 13 阅读 · 0 评论 -
Vendor ID / Device ID / Class Code(设备的“三件套”)
本文介绍了PCIe设备的三个关键标识字段:VendorID(厂商ID)、DeviceID(设备ID)和ClassCode(分类代码)。VendorID由PCI-SIG统一分配,DeviceID由厂商自定义,两者组合形成设备唯一身份标识,用于操作系统驱动匹配。ClassCode采用三层结构(BaseClass/Sub-Class/ProgIF)定义设备功能类别,使系统在无专用驱动时也能进行基本识别。文章列举了常见厂商ID和典型ClassCode组合,强调VID/DID用于精确驱动匹配,ClassCode用于系原创 2026-08-18 06:15:00 · 18 阅读 · 0 评论 -
21天学pcie--访问 BAR 空间示例(让驱动真正“摸到”硬件)
*访问 BAR 空间,就是“用读写一段 MMIO 地址”;它看起来像内存,但本质是 I/O;写得越“克制”,系统越稳定。**原创 2026-08-08 18:57:35 · 16 阅读 · 0 评论 -
第 14 篇:PCIe 常见问题排查清单(经验篇
*PCIe 设备不识别,本质是“链路没起来”;供电、复位、时钟、PHY 是四大命门,软件只能补救,不能创造奇迹。**原创 2026-08-07 18:50:24 · 20 阅读 · 0 评论 -
14 篇:PCIe 常见问题排查清单(经验篇)
*PCIe 设备不识别,99% 是“链路没起来”;供电、复位、时钟、PHY 是四大命门;软件只能补救,不能创造奇迹。**原创 2026-08-07 18:42:14 · 22 阅读 · 0 评论 -
21天学pcie--、Lane、Link、x1/x4/x8/x16 到底是什么?
本文系统解析了PCIe接口中的核心概念:Lane(单对差分线路构成的基本通道)、Link(设备间物理连接)和Width(总通道数)。通过高速公路类比,阐明x1/x4/x8/x16代表不同车道数,其带宽呈线性增长(如PCIe Gen4 x16可达32GB/s)。重点指出显卡需要x16并非因其"高级",而是GPU对高带宽的需求特性,并提醒注意插槽物理规格与实际运行宽度的区别(可通过Linux命令验证)。最后强调PCIe规格中的数字代表独立通道数而非设备数量,多通道设计通过并行传输提升吞吐量而原创 2026-08-06 08:30:00 · 25 阅读 · 0 评论 -
21天学pcie--配置空间(Configuration Space)初探
*枚举让系统“看到设备”,BDF 给设备“编地址”,配置空间让系统“读懂设备”。**原创 2026-08-02 16:12:40 · 207 阅读 · 0 评论 -
21天学pcie--PCIe 和 PCI / PCI-X 到底有什么区别?
PCI 是“并行共享总线”,PCIe 是“串行交换网络”。它们名字相似,思想完全不同,只是“软件接口”还认亲戚。原创 2026-08-01 12:14:42 · 79 阅读 · 0 评论 -
21天学pcie--为什么 PCIe 不需要“共享总线”?(架构级答案)
*PCIe 之所以快,不是因为它“跑得快”,而是因为它:不用对齐时钟、不怕干扰、不抢总线。**原创 2026-07-29 18:03:01 · 180 阅读 · 0 评论 -
21天学pcie--读懂 PCIe 配置空间(Type 0 / Type 1 Header)
*Type 0 是“我要资源”,Type 1 是“我管资源”;前者是 Endpoint,后者是 Bridge。**原创 2026-07-26 10:05:39 · 217 阅读 · 0 评论 -
21天学pcie--为什么实际带宽总是“打折扣”?(非常重要)
*PCIe 的“理论带宽”是物理极限,不是工程目标;实际带宽 = 理论值 − 编码 − 协议 − 硬件 − 软件。**原创 2026-07-23 22:02:43 · 16 阅读 · 0 评论 -
21天学pcie--PCIe 设备是如何被“发现”的?(枚举机制)
文章摘要: PCIe枚举是系统自动发现和配置PCIe设备的核心机制。Root Complex(RC)从Bus 0出发,通过深度优先搜索(DFS)遍历PCIe树状拓扑,依次扫描Device和Function,读取配置空间(如VendorID判断设备存在性)。关键步骤包括:识别设备类型(Endpoint或Bridge)、递归分配Bus号(Bridge扩展层级)、统一分配BAR地址空间。枚举由硬件/BIOS/UEFI或操作系统(如Linux的pci_scan_bus())执行,结果可通过lspci -tv查看。B原创 2026-07-12 09:51:20 · 25 阅读 · 0 评论 -
21天学pcie--PCIe 的“速度”到底怎么算?(Gen1 ~ Gen5 全解析)
GT/s 是发车频率,编码决定装货效率,Lane 数决定车道数量,三者共同决定 PCIe 带宽。原创 2026-07-10 09:41:41 · 26 阅读 · 0 评论 -
21天学pcie--TLP 长什么样?(不看协议也能懂)
TLP 是 PCIe 的“报文”,Header 是运单,Payload 是货物,Digest 是保险。原创 2026-07-08 18:22:28 · 29 阅读 · 0 评论 -
21天学pcie--PCIe 的三种地址空间(核心篇)
*配置空间是 PCIe 设备的“管理地址域”,它不属于内存,也不属于 BAR,只负责“让系统认识并安排设备”。**原创 2026-07-08 11:53:57 · 24 阅读 · 0 评论 -
21天学pcie--MSI 的本质(PCIe 的原生中断)
摘要: MSI(Message Signaled Interrupt)是PCIe的原生中断机制,本质是通过Memory Write TLP向CPU中断控制器写入特定数据触发中断,无需传统边带信号。其核心在于MessageAddress(目标寄存器地址)和MessageData(中断向量及目标CPU)。MSI优势包括:避免共享中断、精准定位中断源、天然支持多核负载均衡(可指定目标CPU),且硬件实现简单。但存在中断数量有限(最多32个)和共享地址的局限,为后续MSI-X(支持多队列)埋下伏笔。调试时需注意MS原创 2026-07-08 11:30:00 · 44 阅读 · 0 评论 -
21天学pcie--Linux 下必备 PCIe 工具(软件篇)
本文详解Linux下PCIe调试工具lspci的核心用法,重点介绍7个必会参数:-s(精确定位)、-v/-vv(信息深度)、-nn(查看VID/DID)、-t(拓扑结构)、-xxx(配置空间原始值)、-k(驱动绑定关系)和-x(快速查看Header)。通过典型排查流程演示如何诊断"设备不工作"问题,并强调lspci是PCIe调试的"第一现场"工具,能显示设备位置、资源和驱动状态。文章还指出lspci的局限性(如无法查看动态行为),并给出工程师实用建议:优先使用lspc原创 2026-07-09 06:15:00 · 128 阅读 · 0 评论 -
21天学pcie--probe / remove 函数(PCIe 驱动的职业基本功)
本文摘要: 文章详细讲解了PCIe驱动开发中probe和remove函数的核心要点。probe函数在设备匹配时被内核回调,遵循"六步法"标准流程:使能设备、请求BAR资源、ioremap映射、保存私有数据、初始化硬件、注册字符设备。remove函数则需严格逆序执行probe的清理操作,确保资源释放。文章强调probe/remove的对称性设计是驱动稳定性的关键,并列举了常见错误(如顺序错误、资源泄漏等)。最后指出,probe负责安全初始化设备,remove负责彻底清理,二者构成PCIe驱原创 2026-07-08 01:07:04 · 118 阅读 · 0 评论 -
《零基础学GPU KMD》专栏简介
什么是GPU KMD?——角色、定位与核心价值驱动的分层模型:用户态驱动(UMD)vs 内核态驱动(KMD)GPU KMD的典型职责:硬件抽象、资源管理、任务调度、安全隔离GPU硬件架构速览——理解KMD需要知道的硬件基础核心组件:计算单元(SM/CU)、内存子系统(显存/缓存)、命令处理器(CP)硬件接口:寄存器映射、MMIO空间、中断机制、DMA通道主流OS的GPU驱动模型概览Windows:WDM → WDDM → DXGK(显示类/计算类驱动模型差异)原创 2026-05-10 14:43:18 · 96 阅读 · 0 评论 -
自研 NPU 搭建自己的全套软件生态硬件
自研 NPU = 必须做自研软件生态生态 ≠ 只有 UMK/KMD/Runtime✅ 这三个是底层核心(你负责)✅ 编译器、算子库、框架适配是中层 / 上层核心整套生态 = 你的 NPU 版「CUDA」英伟达:CUDA = Driver + Runtime + 编译器 + 算子库你:NPU 生态 = KMD+UMK + Runtime + 编译器 + 算子库。原创 2026-04-16 17:06:59 · 187 阅读 · 0 评论 -
21天学会基于 Linux 的 NPU 固件开发--第 8 章:高性能优化策略8.1 计算图融合:算子合并减少内存访问
在 NPU 架构中,**“内存墙”(Memory Wall)**是制约性能的首要瓶颈。现代 NPU 的算力(MAC units)增长远超片上存储(SRAM/Cache)和外部带宽(HBM/DDR)的增长速度。对于细粒度算子(如逐点激活函数),启动开销甚至可能超过计算本身。虽然现代编译器(如 TVM, MLIR)能自动融合,但在 NPU 固件开发中,理解并手写关键融合 Kernel 对于极致优化至关重要。算子融合解决了“内存访问过多”的问题,但如果数据本身布局不合理,再好的融合也无济于事。原创 2026-04-16 09:51:54 · 49 阅读 · 0 评论 -
21天学会基于 Linux 的 NPU 固件开发--9.2 温控策略:阈值触发与渐进式降频
本文摘要: 《温控策略:阈值触发与渐进式降频》系统阐述了NPU动态热管理(DTM)的核心技术。基于热RC模型和多级传感器数据,提出了多级阈值触发机制(从预警到紧急关断的五级防御体系)和渐进式降频算法(结合PID控制、LUT查表和步进式调整)。进一步探讨了预测性温控和空间热感知调度等进阶策略,通过YOLOv8视频流案例展示了优化效果(温度波动从80-102℃改善为92-94℃稳定,帧率提升55%)。文章还分析了传感器延迟校准、最坏情况测试等工程挑战,并提出了风扇联动、QoS权衡等思考方向,为高性能计算场景下的原创 2026-04-16 09:45:00 · 49 阅读 · 0 评论 -
21天学会基于 Linux 的 NPU 固件开发-8.3 多核并行:任务分片与负载均衡算法
《多核并行计算中的任务分片与负载均衡策略》摘要: 本文深入探讨了NPU多核架构下的并行计算优化策略。针对负载不均和通信开销两大挑战,重点分析了任务分片策略(N-Split、H/W-Split等维度)及其适用场景,揭示了静态分片的局限性。提出动态负载均衡的工作窃取算法(WorkStealing),通过本地队列和全局状态维护实现高效任务调度。文章还探讨了硬件Barrier同步、无锁编程等优化技术,强调NUMA架构下的数据亲和性对性能的关键影响。通过ResNet-50实验对比不同策略的性能表现,证明动态负载均衡结原创 2026-04-16 10:45:00 · 46 阅读 · 0 评论 -
21天学会基于 Linux 的 NPU 固件开发-7.2 硬件断点与单步调试:OpenOCD 高级用法
本文深入探讨了OpenOCD在RISC-V架构NPU固件调试中的高级应用。主要内容包括:1)硬件调试原理,解析硬件断点和观察点的实现机制;2)OpenOCD环境配置,涵盖JTAG连接、多核调试支持等关键技术;3)三大实战场景:变量异常修改定位、中断上下文单步调试、自动化回归测试;4)性能优化方案,如虚拟寄存器缓存和批量内存读取;5)调试方案的局限性及替代方案。文章特别强调硬件级调试在解决静默崩溃、死锁等复杂问题时的独特优势,同时指出了生产环境中的安全风险。最后提出思考题,引导读者探索断点链、性能分析等进阶主原创 2026-04-16 08:45:00 · 41 阅读 · 0 评论 -
21天学会基于 Linux 的 NPU 固件开发--8.2 数据布局转换:NHWC 与 NCHW 自动适配
摘要: 本文探讨深度学习编译器中的数据布局转换优化,重点解决NCHW与NHWC布局的自动适配问题。分析两种布局的内存视图差异及性能影响,提出布局传播算法,通过编译期推导消除冗余转置。针对硬件特性引入BlockedLayout(如NC4HW4),优化向量化加载效率。以ResNet-50为例,布局优化可降低35%延迟,显著减少内存开销。同时讨论动态Shape、算子兼容性等挑战,并提供调试技巧。文末提出Winograd融合、多核布局协商等开放问题,为后续卷积加速算法铺垫。核心价值在于通过自动化布局转换,在不修改模原创 2026-04-15 06:15:00 · 51 阅读 · 0 评论 -
21天学会基于 Linux 的 NPU 固件开发-4.3 固件分区设计:A/B 备份与回滚策略
在嵌入式 AI 设备中,固件升级(OTA, Over-The-Air)是最高风险的操作之一。传统的“原地升级”(In-Place Update)模式一旦在写入过程中断电、校验失败或新固件存在致命 Bug,设备将直接变砖(Brick),导致昂贵的 NPU 硬件报废。,揭秘那些神秘的时序参数(tRCD, tRP, CL)是如何配置的,以及 NPU 如何通过复杂的训练算法(Training)来适应不同厂家、不同批次的内存颗粒,确保高速数据通道的稳定性。,实现“升级失败自动回滚”和“升级过程零停机”。原创 2026-04-14 11:54:23 · 43 阅读 · 0 评论 -
21天学会基于 Linux 的 NPU 固件开发--7.1 固件日志系统:环形缓冲区与远程日志采集
实现寄存器读写、内存快照和断点调试,让固件开发不再靠“猜”。原创 2026-04-13 18:28:48 · 40 阅读 · 0 评论 -
21天学会基于 Linux 的 NPU 固件开发-
本文介绍了自定义固件加载协议的内核驱动实现实验。实验包含五个关键步骤:首先定义包含魔数、版本号和分段表的固件协议头文件;然后通过Python脚本生成符合协议的二进制固件;接着编写内核驱动模块,实现固件请求、校验和DMA内存映射功能;随后进行编译加载与日志验证;最后通过故障注入测试健壮性。实验完整演示了从固件生成到内核加载的全流程,重点验证了协议解析、校验和计算以及DMA内存管理等关键技术点,为后续NPU运行时开发奠定了基础。原创 2026-04-13 08:15:00 · 46 阅读 · 0 评论 -
21天学会基于 Linux 的 NPU 固件开发--第 10 章:跨平台迁移与适配10.1 抽象层设计:硬件无关接口(HAL)规范
《跨平台迁移与适配中的硬件抽象层设计》摘要 本章探讨了AI模型跨硬件平台迁移的核心技术——硬件抽象层(HAL)的设计规范。针对异构计算环境下的适配难题,提出了分层架构设计:上层框架标准化接口,下层驱动屏蔽硬件差异。重点规范了设备管理、内存管理、异步执行和算子注册四大核心接口,并针对内存一致性、算子粒度差异等挑战给出解决方案。通过ResNet50从CUDA迁移到国产NPU的案例,展示了HAL在实践中的应用流程。最后指出行业向OneAPI等开放标准发展的趋势,为开发者提供了降低迁移成本的设计建议。本章为AI模型原创 2026-04-12 21:16:47 · 33 阅读 · 0 评论 -
21天学会基于 Linux 的 NPU 固件开发--6.1 模型加载器:ONNX/TensorFlow 模型解析与内存映射
本文深入探讨了NPU模型加载器的设计实现,重点解析了ONNX/TensorFlow等模型文件的零拷贝解析技术。文章首先介绍了模型加载器的整体架构,包括文件解析、内存规划和DMA加载三个核心模块;随后详细阐述了固件侧的高效解析策略、复杂内存层级的管理方法,以及DMA引擎的优化技术;最后通过实战案例展示了权重提取工具的实现。文中还针对大模型加载、内存碎片等关键挑战提出了并行加载、伙伴系统等解决方案,并提出了动态Shape支持、多租户隔离等开放性思考题。原创 2026-04-11 19:31:25 · 45 阅读 · 0 评论 -
21天学会基于 Linux 的 NPU 固件开发--10.2 自动化测试框架:CI/CD 集成与回归验证
目录10.2 自动化测试框架:CI/CD 集成与回归验证一、AI 异构计算的测试挑战二、测试金字塔设计策略1. L1: 算子单元测试 (Operator Unit Test)2. L2: 图级功能测试 (Graph Functional Test)3. L3: 端到端模型测试 (E2E Model Test)4. L4: 非功能性测试 (Non-Functional Test)三、核心机制:黄金参考值与容差验证1. 黄金参考值生成 (Golden Generation)2. 多维容差判定 (Toleranc原创 2026-04-09 13:37:35 · 115 阅读 · 0 评论 -
21天学会基于 Linux 的 NPU 固件开发-4.3 固件分区设计:A/B 备份与回滚策略
在嵌入式 AI 设备中,固件升级(OTA, Over-The-Air)是最高风险的操作之一。传统的“原地升级”(In-Place Update)模式一旦在写入过程中断电、校验失败或新固件存在致命 Bug,设备将直接变砖(Brick),导致昂贵的 NPU 硬件报废。,揭秘那些神秘的时序参数(tRCD, tRP, CL)是如何配置的,以及 NPU 如何通过复杂的训练算法(Training)来适应不同厂家、不同批次的内存颗粒,确保高速数据通道的稳定性。,实现“升级失败自动回滚”和“升级过程零停机”。原创 2026-04-03 20:12:47 · 46 阅读 · 0 评论
分享