逸翎清晗🌈
后端Pass简介——MachineLateInstrsCleanup
MachineLateInstrsCleanup 该 Pass 用于在机器代码阶段删除完全相同的延迟(late)指令,特别是移除由重计算(rematerialization)或框架索引消除后产生的冗余立即数或地址加载指令,从而精简最终生成的机器指令。 “完全相同的延迟指令”:“延迟指令” 指的是这些指令不是在最初阶段生成的,而是在寄存器分配之后或 FrameIndex 消解阶段才生成的“后期指令(late instructions)” Rematerialization(重构/重建/重计算)是 LLVM 在 寄存器分配时的一种策略,“与其从栈中 reload 某个值,不如干脆重新 计算/加载 这个值”。目的是: 避免使用太多物理寄存器; 减少 spill & reload(存回 + 加载); 利用立即数或简单可重构值的 cheap cost。 举个例子,假设在两个基本块中都有同一地址计算指令: # 基本块 A t0 = LEA addr(base, offset) ... # 基本块 B(与 A 共享出口) t1 = LEA addr(base, offset) . ...
每日Pass简介——MachineInstrBundle
MachineInstrBundle 这是一个工具类 Pass,它主要处理 Machine Instruction Bundles(机器指令捆绑) 的构造、解析与分析。换句话说,它负责在 LLVM 后端的代码生成阶段,对一系列底层机器指令进行组合、打包与拆包,从而支持目标平台(尤其是 VLIW、压缩指令等架构)对“指令包(bundle)”的要求。 该 Pass 涉及一些 VLIW 相关的概念: 概念 说明 Instruction Bundling 某些架构(如 VLIW、Itanium)要求将多个指令打包为一个单元调度或发射,称为指令捆绑 Dead/Kill/Undef Flags 注册使用的生命周期属性分析,用于设置寄存器是否已失效或终止使用等优化标记 Subregisters / Lane Masks 对支持 SIMD/SVE 等子寄存器体系结构,lane mask 用于追踪特定位宽的寄存器使用 支持 VLIW 架构的处理器如 Hexagon/Itanium/AArch64 都会触发这个 Pass: LLVM 后端生成的指令流中,若某些指令被标记为 I ...
SOTA and Challenges of Engineering ML-Enabled Software Systems in the Deep Learning Era
【综述解析·VI】Deep Learning Workload Scheduling in GPU Datacenters: A Survey (推荐) 元信息: 领域:GPU、负载调度、调度、集群、数据中心、高性能计算 作者单位:北京大学、南洋理工大学、Shanghai AI Laboratory & SenseTime Research 日期:CSUR2024.1 TL;DR:这篇综述梳理了 GPU 数据中心中深度学习训练、推理、超参数优化及混合工作负载的调度研究,围绕延迟、精度、成本与吞吐等目标,总结了固定分配、GPU 共享、弹性调度、批处理、缓存、异构资源等关键技术,并指出未来需在弹性与公平性、干扰预测、框架协同和领域专用化调度等方向深入优化。 简评 系统性强:它按照训练、推理、其他类型工作负载(HPO、混合型)三大类来展开,每一类都先按“调度目标”(效率、公平、截止时间保障)和“资源利用方式”(异构资源、GPU 共享、弹性训练等)做二维分类,这样的结构非常清晰,也便于横向比较。 细节密度高:不仅罗列了大量已有调度器(Tiresias、HiveD、Pollux、 ...
SOTA and Challenges of Engineering ML-Enabled Software Systems in the Deep Learning Era
【综述解析·IV】SOTA and Challenges of Engineering ML-Enabled Software Systems in the Deep Learning Era (不推荐) 元信息: 领域:机器学习驱动的软件系统(ML-enabled systems),软件工程 作者单位:挪威克里斯蒂安尼亚应用科技大学(Kristiania University of Applied Sciences) 日期:CSUR2025 TL;DR:本综述聚焦在传统软件工程方法如何适配并改进机器学习系统开发的全过程,强调跨学科挑战与未来研究方向。(不是强调的是应用,所以该综述是更加抽象层次告诉读者如何开发 MLSys 并说明现存问题) 首先不得不说,我被标题骗进去了,我眼睛自动捕捉了 SOTA ML Systems,于是以为讲的是 MLSys 的前沿进展;现在看来好像是讲的软件工程的 ML 系统,此系统非彼系统(所以标记了“不推荐”)🤔不管了,这篇先摆上来,总之还是提供了一个软件工程的视角来看 MLSystems 的应用,我个人在软工涉猎不多,顶多对 APR 稍微了解,但 ...
每日Pass简介——MachineFunctionSplitter
MachineFunctionSplitter MachineFunctionSplitter 是 LLVM 中的一个机器函数拆分(Machine Function Splitting)优化通道,根据配置的阈值和运行时/采样的性能分析数据,将冷(rarely executed)的基本块拆分到独立的冷代码段,以提升指令缓存和 TLB 利用率。 该 Pass 主要涉及函数拆分的理由,即为什么要拆分: ProfileSummaryInfo (PSI) 和 MachineBlockFrequencyInfo (MBFI):分别提供函数/基本块的概要分析数据和具体的执行频率,用于判断哪些基本块是“冷”的。 BasicBlockSections:LLVM 支持将基本块分组到不同的节(section),本 Pass 会将冷块标记为特定的冷节(如 .text.unlikely.*)。 阈值判断:基于百分位数(PercentileCutoff)或最低执行次数(ColdCountThreshold)来决定冷块;不同的 Profile 类型(Instrumentation vs. Sample)有不同的冷 ...
Optimization Techniques for GPU Programming(2)
【综述解析·III】Optimization Techniques for GPU Programming (推荐)(下) 本文是一篇 CSUR 长文,80 页,≈450 文献整理而成。作者来自阿姆斯特丹自由大学,QS209. 本文接续上一部分(正文+附录),这篇为附录部分。值得一提的是,附录也写的非常全面且很精彩。 Appendix A:不光解释了一些概念,还从实践而非理论的角度教读者如何进行操作,还有正文放不下的那些优化,这里都进一步进行了讲解。 Appendix B:告诉读者本综述筛选的视角和办法。(值得学习) Appendix C:讲述了关于近些年 GPU 的发展和他们的论文数量,这个内容不多。 Appendix D:权衡因素,基本也能辅助读者快速入门 GPU 的性能考量了。 附录A:优化手段 本附录汇集了文献中提取的优化技术。为了便于参考与深入了解,这些优化技术按照第6节中的主题进行归类与组织,形成了系统化的参考资料。以下是所涵盖优化方法的概览: A.1 内存访问 A.1.1 片上内存 —— 使用专用内存 对于大多数应用而言,GPU 通常具备比其内存系统更强的计算资源。 ...
LLVM常用接口与API
LLVM常用数据结构与API 前言 LLVM 作为现代编译器基础设施的代表,其模块化设计和强大的中间表示(LLVM IR)使其在编译优化、程序分析、语言实现、JIT 运行时等多个领域广泛应用。然而,想要高效地在 LLVM 上构建工具或开发新功能,必须深入理解其内部的数据结构与接口体系。 本笔记旨在为 LLVM 的使用者,尤其是希望在 C++ 层面编写 Pass、分析器或后端工具的开发者,提供一份实用的接口速查与设计参考。相比于官方文档的厚重和散乱,这里更注重常用 API 的结构化梳理、配套示例的直观呈现,以及开发过程中易踩的坑与实践建议。 Support 层 容器 LLVM 容器 分类 STL 类比 Small 版本 优化 关键特性 / 适用场景 典型复杂度* 头文件 SmallVector<T,N> 顺序 std::vector ✅ 栈上预留 N 元素,溢出再堆分配;最常用 IR 构造容器 push O(1) 均摊 SmallVector.h TinyPtrVector 顺序 std::vector<T*> 部分 0/1 个元素时放指针本身, ...
后端Pass简介——MachineFrameInfo
MachineFrameInfo 这是属于 CodeGen 的一个子文件,暂且把他认定为 Pass。他实现的是“栈帧布局和栈内对象管理相关的核心模块”。是 LLVM 用于管理函数栈帧中所有栈上对象(如局部变量、Spill槽、调用帧等)的位置、对齐和属性的模块,并辅助生成正确的栈布局与栈帧大小。 概念 简要说明 栈帧(Stack Frame) 每个函数调用分配的一块栈内存,用于保存局部变量、返回地址、保存的寄存器等 对齐(Alignment) 指定内存对象在栈上的对齐要求,通常是 4/8/16 字节 Spill Slot 当寄存器不够用时,变量会被“溢出”到栈上,称为 Spill 可变大小对象 如 alloca 分配的大小运行时决定的数组 固定栈对象(Fixed Object) 位于栈帧固定位置的对象,如返回地址、保存寄存器 StackRealignable 当前目标是否允许动态栈对齐 Call Frame Size 为函数调用参数保留的栈空间 Frame Pointer / Stack Pointer 栈帧地址计算常用寄存器,影响对象定位 ...
后端Pass简介——MachineDebugify
MachineDebugify DebugifyMachineModule 是一个用于给每个 MachineFunction 附加合成调试信息的 LLVM 模块级 Pass,用于测试 debug info 在后续 CodeGen 中的保留情况。 其中: DISubprogram / DILocalVariable / DILocation:LLVM 的调试信息元数据,描述函数、局部变量、源代码行号等信息。 DBG_VALUE 指令:MachineInstr 中用于传达变量值与调试变量之间关系的指令。 DIBuilder:LLVM 的调试信息生成工具类。
后端Pass简介——MachineCycleAnalysis
MachineCycleAnalysis MachineCycleAnalysis 是一个只读分析 Pass,用于识别并记录 MachineFunction 中的循环结构,以支持后续的优化分析。 Pass 比较简单,直接举个例子: entry: br label %loop loop: %i = phi [0, %entry], [%inc, %loop] %inc = add %i, 1 cmp %inc, 10 br lt %inc, 10, label %loop, label %exit exit: ret 该 Pass 会识别 %loop 为一个循环头,loop 基本块属于一个循环结构,生成 MachineCycle 对象表示这个循环。 可通过 llc -print-machine-cycles 查看分析结果。 该 Pass 会分析: 循环的存在与边界 是否存在循环(Cycles) 每个循环的入口块(Header) 每个循环中包含哪些 MachineBasicBlock(基本块) 循环嵌套关系 哪些循环是内层(子循环) 哪些是外层(父循环 ...
后端Pass简介——MachineCSE
MachineCSE MachineCSE 是 LLVM 后端用于在 SSA 机器指令级别进行 公共子表达式消除(CSE) 的优化 Pass,旨在通过识别重复的计算并替换为已有结果,从而减少指令数、降低寄存器/内存压力。 这个 Pass 的概念也非常简单,对应到中端,就是普通CSE。 该 Pass 将近 1000 行,可以使用 -aggressive-machine-cse 强制忽略收益判断,直接执行 CSE 操作。 该 Pass 依赖: MachineDominatorTreeAnalysis MachineBlockFrequencyAnalysis 主处理函数为: bool MachineCSEImpl::run(MachineFunction &MF) { TII = MF.getSubtarget().getInstrInfo(); TRI = MF.getSubtarget().getRegisterInfo(); MRI = &MF.getRegInfo(); LookAheadLimit = TII->get ...
后端Pass简介——MachineCopyPropagation
MachineCopyPropagation MachineCopyPropagation 是一个 LLVM 后端优化 Pass,用于删除冗余的寄存器 COPY 指令并尝试用原始源寄存器替换目标寄存器,从而提升机器码质量和执行效率。 COPY 指令:即 %r1 = COPY %r0,表示将一个寄存器的值复制到另一个寄存器,常由寄存器分配后插入。 还有一些概念如下: 冗余 COPY:当一个 COPY 的目的寄存器没被改变,可以直接使用源寄存器替代。 前向传播(forward propagation):用 COPY 的源替换其目的的使用点。 后向传播(backward propagation):将使用者的定义替换为 COPY 中的目的。 下面来举个例子(前向传播): %r1 = COPY %r0 ... %r2 = ADD %r1, %r3 直接优化为: %r2 = ADD %r0, %r3 例子 2(冗余 copy 删除) %r1 = COPY %r0 ... %r0 = COPY %r1 ; 冗余的 COPY 在保证 %r0 ...
avatar
💦非常忙碌!
逸翎清晗🌈
Talk is cheap, show me the code.💎
GitHub
公告栏
--- 主域名 ---
www.yangzi.world | yangzi.world
推荐实用资料工具目录
yangzi.world/pages/opensources.html
--- 旅游分享 ---
🍧yangzi.world/iternery/index.html
--- 安卓APP ---
🍧点此下载🍧

最新文章
公开数据
文章数目 :
233
本站总字数 :
53.3w
本站访客数 :
本站总访问量 :
最后更新时间 :
空降评论复制本文地址
随便逛逛昼夜切换关于博客美化设置切换全屏打印页面