编译工具链
文章平均质量分 89
编译器、链接器、加载器、调试器
loongknown
凡是过往,皆为序章。
展开
-
指令调度(Instruction Scheduling)
指令调度是为了提高,对于超长指令字(VLIW, Very Long Instruction Word)和多发射系统,ILP是可以有效提高硬件利用率。原创 2023-07-29 09:24:54 · 1425 阅读 · 0 评论 -
寄存器分配:图着色算法
本文介绍了比较经典的图着色的寄存器分配算法,此外目前使用比较广的还有线性扫描算法、整数线性规划算法等。在编译器的中间表示中,一般会设定虚拟寄存器有无限多个(方便优化),而真实的物理寄存器是有限的,因而编译器后端在将中间表示翻译成目标指令集的时候会进行寄存器分配,也就是将无限的虚拟寄存器映射到有限的物理寄存器上。图着色算法首先要进行活跃分析,得到冲突图,然后通过对冲突图进行着色来解决寄存器分配问题。寄存器分配的问题就可以转换为冲突图图着色问题。图着色是给图的每个顶点进行着色,并且相连的顶点需要着不同的颜色。原创 2023-07-29 09:05:39 · 2170 阅读 · 0 评论 -
XLA IR:HLO、LHLO、MHLO和LMHLO
(M)HLO的op是tensor类型,是不可变的 (immutable)、并且不具有 side effect,tensor的数据流分析(例如ssa def-use chain )和转换会比较容易。而L(M)HLO是经过buffer assign的,buffer 是可变的 (mutable)和有别名的 (alias),buffer上分析和转换需要比较复杂的依赖分析 (dependency analysis) 和别名分析 (alias analysis)。原创 2023-04-22 19:43:09 · 2139 阅读 · 0 评论 -
AI编译器前端:动态图转静态图的问题
python因其易用性和灵活性,被广泛应用于深度学习框架和AI编译器前端。像现在火爆的pytorch框架推崇python first哲学,pytorch这种命令式的执行方式(eager模式)非常方便研发和调试。但是eager模式不方便生产部署,也不能发挥硬件的极致性能。pytorch 2.0正式引入图编译器作为后端,可能也是想做到动静结合,收敛之前的多条编译器路线(torch.jit.script、torch.jit.trace、LazyTensor)到TorchDynamo方案。python作为动态语言原创 2023-03-05 08:37:32 · 1636 阅读 · 0 评论 -
死代码删除(DCE,Dead Code Elimination)和激进的死代码删除(ADCE,Aggressive DCE)
DCE和ADCE算法原创 2023-03-04 11:40:50 · 2197 阅读 · 0 评论 -
记一个奇怪的gcc编译优化:-ftree-vrp
记一个奇怪的gcc编译优化:-ftree-vrp原创 2023-01-14 09:53:43 · 3196 阅读 · 2 评论 -
中间代码生成(Intermediate Code Generation)
关键词:上下文无关文法、语法分析、中间表示、三地址代码、语法制导翻译、控制流图。原创 2022-12-03 11:40:23 · 4794 阅读 · 0 评论 -
语法制导翻译(Syntax-Directed Translation)
关键词:语法制导翻译、语法制导定义、语法制导方案、SDD、SDT、语法分析、上下文无关文法原创 2022-11-26 12:38:15 · 6648 阅读 · 1 评论 -
自底向上语法分析(bottom-up parsing)
自底向上语法分析是从分析树的底部(叶子节点)向顶部根节点方向构造分析树,也即是将输入串归约为文法开始符号的过程。自顶向下的语法分析是采用最左推导方式,而自底向上的语法分析是采用最左归约方式,其实就是反向构造最右推导。自顶向上语法分析的通用框架是:移入-规约分析(Shift-Reduce Parsing)。下面通过一个例子来介绍移入-规约分析的算法思想。对输入串的一次从左到右扫描过程中,将零个或多个输入符号移入到栈的顶端,直到它可以对栈顶的一个文法符号串 β 进行归约为止。原创 2022-11-05 08:33:30 · 3514 阅读 · 1 评论 -
自顶向下语法分析(top-down parsing)
介绍自顶向下语法分析,包括有回溯的算法、无回溯算法、FIRST 集合、FOLLOW 集合、消除左递归、提取左公因子、LL(1)文法、下推自动机原创 2022-10-29 11:13:51 · 5602 阅读 · 0 评论 -
上下文无关文法(CFG)
关键词:上下文无关文法、CFG、BNF、语法分析树、语法分析。原创 2022-10-22 12:40:33 · 16952 阅读 · 4 评论 -
正则表达式(RE)、有限自动机(FA)和词法分析(LA)
关键词:正则表达式、RE、有限自动机、DFA、NFA、词法分析器、Thompson算法、子集构造算法、Hopcroft算法原创 2022-10-22 10:34:29 · 5478 阅读 · 0 评论 -
共享库的加载时重定位和位置无关代码(Load-time Relocation and Position Independent Code of Shared Libraries)
介绍加载时重定位和位置无关代码。关键词为 PIC、PLT、GOT 和 延迟绑定。原创 2022-09-17 09:33:41 · 4494 阅读 · 1 评论 -
栈帧 stack frame
函数调用栈帧复习和验证原创 2022-02-15 13:05:26 · 2699 阅读 · 2 评论 -
GDB 源码分析系列文章五:动态库延迟断点实现机制
如果可执行程序使用动态链接生成,gdb刚启动时,若断点打在动态库的符号上,因为动态库还未加载,gdb会提示该符号找不到,并请求是否设置pending断点,这种断点即为延迟断点。若该符号在动态库中存在,调试过程中会命中该断点。本文结合gdb源码,分析gdb动态库延迟断点的实现机制。另外,对于gdb的事件循环机制和符号表相关实现机制可以参考往期系列博客,本文提到相关内容时不再赘述。............原创 2022-07-30 10:41:15 · 4506 阅读 · 2 评论 -
GDB 源码分析系列文章四:gdb 事件处理异步模式分析 ---- 以 ctrl-c 信号为例
gdb 处理的事件主要包括用户事件和目标程序事件。事件的处理可以分为同步模式和异步模式。本文介绍 gdb 事件处理的异步模式,并以 gdb 调试过程中 ctrl-c 信号为例展开介绍,其他信号事件的处理也是类似的。gdb 调试目标程序时,如果目标程序正在运行,此时你输入 ctrl-c 信号,gdb 将暂停目标程序。本文将结合 gdb 源码分析一下 gdb 如何处理 ctrl-c 信号。在前面的文章中,我们比较详细地介绍了 gdb 的事件循环机制,这里我们做下简单的前情回顾。gdb 在完成初始化后,即进入事件原创 2022-07-09 22:18:31 · 3908 阅读 · 5 评论 -
GDB 源码分析系列文章三:调试信息的处理、符号表的创建和使用
GDB 源码分析系列文章三:调试信息的处理、符号表的创建和使用调试信息和符号表原创 2022-05-28 09:55:04 · 7919 阅读 · 5 评论 -
GDB 源码分析系列文章二:gdb 主流程 Event Loop 事件处理逻辑详解
GDB 源码分析系列文章二:gdb 主流程 Event Loop 事件处理详解。原创 2022-05-08 00:08:29 · 5095 阅读 · 3 评论 -
GDB 源码分析系列文章一:ptrace 系统调用和事件循环(Event Loop)
关于 gdb 内部实现介绍的文章非常少,本人计划通过阅读 gdb 源码,推出系列文章介绍 gdb 内部实现的机制,以窥视 gdb 内部是如何控制和调试程序的。原创 2022-05-04 07:45:52 · 6985 阅读 · 6 评论 -
GNU 工具链调试信息分离和挂载:支持 GDB 调试 RELEASE 版本程序
GNU调试信息分离&GDB加载调试信息一般地,release版本的程序都不带调试信息,无法使用gdb调试。GNU 编译工具链和二进制工具链做法如下:gcc/g++ 使用 -g 编译得到目标程序:gcc hello.c -gobjcopy 复制目标程序中的调试信息:objcopy --only-keep-debug a.out a.debugstrip 去除目标程序中的调试信息: strip --strip-unneeded --strip-debug a.outgdb 调试目标程序时加原创 2022-04-23 08:05:34 · 5312 阅读 · 0 评论 -
cuda-gdb 支持内置变量的实现机制
cuda-gdb 处理内置变量的方案。原创 2022-09-03 09:54:57 · 3172 阅读 · 0 评论 -
C++ 返回值优化 RVO
C++ 返回值优化 RVO引子返回值优化 RVORVO 限制参考在调试 C++ 拷贝和移动系列构造函数时候,发现构造函数调用和预期不太一样,经过查阅相关资料,发现是返回值优化(RVO)从中做梗。了解了事实真相后,今天就和大家聊聊这个 RVO。引子直接看一个例子:#include <iostream>class A {public: A (){ std::cout << "A(): addr= " << this << st原创 2022-04-04 05:46:31 · 5509 阅读 · 4 评论 -
调试信息(debugging information)——解析DWARF文件
gdb调试信息和dwarf文件简单解析原创 2022-01-21 14:55:38 · 9297 阅读 · 1 评论 -
AI编译器技术浅析
分析当前AI编译器技术现状。原创 2022-01-17 15:26:55 · 8201 阅读 · 3 评论 -
ANSOR:一种Auto-Scheduler方法
Ansor(TVM auto shedule)学习调研原创 2022-01-14 12:03:44 · 5963 阅读 · 0 评论 -
MFP and MOP
MFP and MOP原创 2021-12-16 18:42:59 · 1840 阅读 · 0 评论 -
指针分析 Pointer Analysis
本文为Andersen-style pointer analysis学习笔记。原创 2021-12-16 16:03:30 · 3156 阅读 · 0 评论 -
指令级并行 ILP
介绍指令级并行ILP的基本知识原创 2021-12-01 17:18:16 · 4157 阅读 · 0 评论 -
支配边界及其构建算法 Dominance Frontier and its construction algorithm
支配节点边界 Dominance Frontier*Dominance Frontier**Alogorithm of Dominance Frontier*参考Dominance Frontier是SSA插入ϕ\phiϕ函数、构建CDG(控制依赖图)算法的重要工具。本文介绍Dominance Frontier的概念和算法。Dominance Frontier《现代编译原理C语言描述(修订版)》中对Dominance Frontier的定义如下:节点x的Dominance Frontier是所有符原创 2021-11-25 10:29:21 · 5453 阅读 · 4 评论 -
基本块和流图 Baic Block and Flow Graph
基本块和流图 Baic Block and FlowGraph基本块 Baic Block流图 Flow Graph参考介绍一种表示中间代码的方式—流图(Flow Graph)。先把中间代码划分成基本块(Baisc Block),载由基本块形成流图的节点,流图的边指明了哪些基本块可能跟随一个基本块之后执行。基本块 Baic Block(鲸书)非正式地说,基本块是一段只能从它的第一条指令进入,并从它的最后一条指令离开的最长指令序列。(龙书)以三地址指令作为中间代码的表示。基本块为满足下列条件的最原创 2021-11-19 17:35:30 · 3701 阅读 · 0 评论 -
支配节点树及其构建算法 Dominator-tree and its Construction Algorithms
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-11-23 17:54:45 · 7114 阅读 · 0 评论 -
图,树,遍历顺序 Graphs,Trees and Traversal Order
系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例原创 2021-11-19 15:54:46 · 2474 阅读 · 0 评论 -
数据依赖和控制依赖 Data Dependence and Contol Dependence
数据依赖的概念,DAG的概念和算法,控制依赖的概念、算法和依赖。原创 2021-11-23 17:47:31 · 15419 阅读 · 4 评论