- 博客(111)
- 资源 (7)
- 收藏
- 关注
原创 向量的范数
数值大小:范数给向量一个单一的数值,表示它的"规模"比较工具:可以比较不同向量的"强度"多种衡量方式:就像可以用不同单位衡量长度一样。
2025-11-25 16:46:41
230
原创 编译原理中的支配关系
支配边界是支配关系的补充概念,用于描述控制流中支配关系发生变化的位置n 支配 y 的至少一个前驱n 不严格支配 y (即 n ≠ y 且 n 不支配 y,或者 n = y)简单说:DF(n) 包含那些刚好脱离 n 支配的节点。
2025-10-30 00:50:41
1116
原创 ssa 功能介绍
SSA 析构是指将 SSA 中的 phi 函数消除本质上,消除 phi 函数的思路是将 phi 函数上移到前驱基本块中,并直接使用赋值语句消除 phi 函数该方法也称为 朴素(naive) 算法。例如,将图 2-7a 中基本块 4 的 phi 函数 y4 = phi(y2, y3) 分别复制到基本块2 和 基本块 3 的最后,同时分别使用赋值语句更新y4的值在基本块2 中使用 y2 更新 y4, 在基本块 3 中使用 y3 更新 y4然后,通过复制传播优化消除冗余赋值。
2025-10-23 11:59:14
754
原创 RUST 静态生命周期和动态生命周期
静态生命周期 Rust 中最长的生命周期,表示引用在整个程序运行期间都有效。这些数据通常存储在程序的只读内存区域,在程序启动时创建,在程序结束时销毁动态生命周期是指哪些在编译时无法确定具体持续时间,需要在运行时通过检查器验证的生命周期这些生命周期通常与作用域相关,由编译器推断或通过生命周期参数明确指定特性静态生命周期 ('static)动态生命周期持续时间整个程序运行期间由作用域决定内存位置静态内存区域栈或堆安全性绝对安全需要编译器验证灵活性低高使用场景。
2025-10-02 22:45:49
353
原创 C++ 泛型和特化
泛型: 通过模板实现,允许编写与类型无关的通用代码,提高代码复用性特化: 为特定类型提供定制实现,处理通用模板无法满足的特殊情况。
2025-10-02 22:44:41
214
原创 LR算法中反向最右推导(Reverse RightMost Derivation)
指的是在推导中,总是选择扩展最右边的非终结符。这种推导方式产生的是: 这指的是在归约过程中,做的事恰好是最右推导的逆过程简单来说:LR分析器通过模拟最右推导的逆过程来进行语法分析。
2025-10-02 22:38:40
446
原创 LLVM 中 Value 功能解析
在LLVM 中输入程序流IR 的形式呈现。如同Linux 中一种说话一切皆为文件,即Linux 把一切设备IO都虚拟化为文件来看待LLVM也有类似的概念: 一些皆为Value。Value是LLVM中非常重要的基类,输入程序流中变量/常量/表达式/符号都可以被视为一个Value。
2025-06-22 00:27:10
1037
原创 CGSCC基本概念
CGSCC代表Call-Graph Strongly Connected Component,即调用图的强连通分量这是一个在编译器优化(特别是过程间优化)中非常重要的概念。
2025-06-05 10:42:14
868
原创 推荐系统总体架构
在深度学习中 Embedding 技术在召回层的应用。作为深度学习中非常核心的 Embedding 技术,将它应用在推荐系统的召回层中,做相关物品的快速召回,已经是业界非常主流的解决方案不同结构的深度学习模型在排序层的应用。排序层(精排层)是影响推荐效果的重中之重,也是深度学习模型擅长领域,深度学习模型的灵活性高,表达能力强的特点,这让她非常适合于大数据量下的精确排序。深度学习排序模型毫无疑问是业界和学界都在不断加大投入,快速迭代的部分增强学习在模型更新,工程模型一体化方向上的应用。
2025-06-05 10:41:44
443
原创 LLVM InstCombine
本文通过一个简单案例解析了LLVM中InstCombine优化流程。以"a+0"简化为例,展示了如何通过GDB调试InstCombinePass的运行过程,详细介绍了Pass在LLVM中的概念和作用。重点剖析了InstCombine的工作机制,包括其常量折叠、代数简化等功能实现,以及prepareICWorklistFromFunction函数如何初始化工作列表、处理指令和基本块。文章还提供了InstCombine在实际应用中的三种调用方式,并分享了相关参考资料,为理解LLVM优化器的工
2025-06-05 10:39:41
533
原创 C++双重释放内存问题
在C++中,双重释放内存会导致未定义行为,通常引发程序崩溃这是因为同一块内存被多次释放会破坏内存管理器的内部数据结构双重释放是什么意思呢?
2025-05-09 11:29:32
724
原创 LLVM 中 的 pass 及其管理机制
在编译器开发时,可以混合使用两种方式,将各种pass组合为流水线,对IR做不同的处理和优化LLVM Pass 类及其子类的继承关系如下图所示。
2025-05-04 20:51:00
849
原创 LLVM Pass
/ 定义一个继承自FunctionPass的Pass类// 重写runOnFunction方法,实现具体的Pass逻辑// 在这里可以进行各种分析和优化操作// 注册Pass到LLVM Pass管理器中// 示例函数,使用MyPass进行优化分析// 创建Pass管理器// 添加MyPass到Pass管理器中// 运行Pass管理器PM.run(F);// 创建一个简单的函数// 在函数中添加一些指令// 运行优化分析return 0;
2025-05-04 20:48:29
667
原创 GBDT 基本概述
GBDT 是 Gradient Boosting Decision Tree 的缩写,属于集成学习方法中的 Boosting 族。它的核心思想是通过逐步构成多个决策树,每棵树都试图纠正前一棵树的残差,最终所有树的结果相加得到最终预测结果这里的关键点在于如何通过梯度下降来最小化损失函数,从而确定每棵树的参数。
2025-05-02 09:41:12
1109
原创 仿射变换理论概述
并行性和局部性优化需要我们考虑一个循环的不同实例以及实例之间的关系。这个情况和数据流分析有着很大的不同。在数据流分析中,我们把所有实例的相关信息组合在一起考虑对于带有数组访问的循环的优化问题,我们使用三种类型的空间。每个空间可以看成是一维或多维栅格中的点集并并行化问题写成多维空间和这些空间之间的仿射映射使得我们可以使用标准的数学技术来解决并行化和局部优化问题比如,可以通过使用Fourier-Motzkin 消除算法消除相应的变量,找出被访问数据的区域。已经证明数据依赖性和整数线性规划问题等价。
2025-05-01 09:35:33
940
原创 梯度下降基本概述
梯度是一个向量,表示函数 J(θ) 在某点 θ 处增长最快的方向。数学表达式为负梯度方向 −∇J(θ) 是函数值下降最快的方向批量梯度下降(BGD): 使用全部数据计算梯度,计算慢但问题随机梯度下降(SGD): 每次随机选一个样本计算梯度,速度快但波动大小批量梯度下降(Mini-batch GD): 折中方案,常量批量大小 32 ~256学习率需合理设置(可通过网格搜索或自适应算法调整)特征标准化可加速收敛(如将输入数据缩放到均值为0,方差为1)监控损失函数曲线,判断是否收敛或过拟合。
2025-05-01 08:59:12
1184
原创 Word2vec Skip-Gram 模型
在Skip-Gram 模型中,存在两个权重矩阵。输入层到隐藏层的矩阵W和隐藏层到输出层的矩阵W’. 这个两个矩阵分别对应词向量的输入和输出表示。
2025-02-11 22:16:05
790
原创 定义类与类之间的交互关系
泛化(Generalization)概念可以简单理解为继承关系代码实现public class A { ... }public class B extends A { ... }实现(Realization)概念一般是指接口和实现类之间的关系代码实现public interface A {...}public class B implements A { ... }聚合(Aggregation)概念聚合是一种包含关系,A类对象包含B类对象,B类对象的生
2024-10-23 10:46:32
648
原创 改善代码质量的20条编程规范
代码嵌套层次过深往往是因为 if-else、switch-case、for 循环过度嵌套导致的个人建议,嵌套最好不超过两层,超过两层之后就要思考一下是否可以减少嵌套过深的嵌套本身理解起来就比较费劲嵌套过深很容易因为代码多次缩进,导致嵌套内部的语句超过一行的长度而折成两行,影响代码的整洁。
2024-10-23 10:44:03
970
原创 染色算法的简单概述
这句话描述的是一种用于确定寄存器分配的染色算法在这个上下文中,我们有一个图,图的节点代表变量,边代表变量之间的干扰(即两个变量不能共享同一个寄存器)算法的目标的是为了判断给定的k个寄存器是否足够给所有的变量分配如果一个图可以用k种颜色来染色(即每个节点可以用一个颜色表示,且相邻的节点颜色不同),那么添加一个边数少于k的节点,仍然可以用k种颜色来颜色。因为新节点的边数少于k,所以至少有一种颜色是没有被它的任何邻居使用的。
2024-09-22 11:03:23
686
原创 LLVM 中的Value、User、Use设计
首先,定义一个简单的LLVM IR 代码片段,这里创建一个简单的加法操作在这个例子中,%1是一个Value,它代表了加法操作的结果.i32 是它类型,表示这是一个32位的整数10 和 20 是操作数,它们也是Value。
2024-09-21 22:47:57
1635
原创 LLVM 寄存器分配
基本寄存器分配器是四种寄存器分配器中最简单的寄存器分配pass实现(<llvm_root/livm/lib/CodeGen/RegAllocBasic.cpp>)但麻雀虽小,五脏俱全,基本寄存器分配器中实现了根据溢出权重确实虚拟寄存器优先级、按优先级分配物理寄存器,以及物理寄存器不足时将虚拟寄存器溢出到内存等功能。因此,基本寄存器分配器非常适合作为自定义寄存器分配器实现参考LLVM3.0 之前的默认寄存器分配器是线性扫描分配器。
2024-08-11 10:48:23
1112
原创 静态分析: 代码优化
Backward Analysis”或“反向分析”是一种分析技术,它从程序或代码的输出结果开始,逆向推导出程序的状态或者输入值这里的表达式“IN[s]=fs(OUT[s])”可以被解读为:给定一个状态s的输出OUT[s],通过某个函数fs来推导出该状态的输入IN[s]Reaching Definitions Analysis 是一种数据流分析技术,用于确定程序中某个变量定义对程序中其他点的可见性。
2024-07-27 10:40:11
1029
原创 CPU 流水线相关情况
流水线中经常有一些被称为"相关"的情况发生,它使得指令序列中下一条无法按照设计的时钟周期执行,这些“相关”会降低流水线的性能流水线中的相关分为以下三种类型:结构相关、数据相关、控制相关。
2024-07-21 23:13:53
824
原创 长模式下的分页
长模式下的 4KB 分页下,由一个顶层目录、二级中间层目录和一层页表组成了 64 位地址翻译过程顶级页目录项指向页目录指针页,页目录指针项指向页目录页,页目录项指向页表页,页表项指向一个 4KB 大小的物理页各级页目录项中和页表项中依然存在各种属性位,这在图中已经说明其中的 XD 位,可以控制代码页面是否能够运行上图中没有了页表项,取而代之的是,页目录项中直接存放了 2MB 物理页基地址由于物理页始终 2MB 对齐,所以其地址的低 21 位为 0,用于存放页面属性位。
2024-07-21 15:25:47
450
原创 保护模式下的分页
页目录项、页表项都是 4 字节 32 位,1024 个项正好是 4KB(一个页),因此它们的地址始终是 4KB 对齐的低 12 位才可以另作它用,形成了页面的相关属性,如是否存在、是否可读可写、是用户页还是内核页、是否已写入、是否已访问等4MB 大小的页面下,页表项还是 4 字节 32 位,但只需要用高 10 位来保存物理页面的基地址就可以因为每个物理页面都是 4MB,所以低 22 位始终为 0。
2024-07-21 15:24:13
386
原创 简单页表和多级页表
同样一个虚拟内存地址,偏移量的部分和上面简单页表一样不变,但是原先的页号部分,把它拆成四段,从高到低,分成4级到1级。以一个页的大小是4K字节(4KB)为例,我们需要20位的高位,12位的低位。因为虚拟内存地址分布的连续性,树的第一层节点的指针,很多就是空的,也就是不需要对应对应的子树。做地址转换的页表,只需要保留虚拟内存地址的页号和物理内存地址的页号之间的映射关系即可。找到最终最终的物理页号,就好像通过一个特定的访问路径,走到树最底层的叶子节点。所谓不需要子树,其实就是不需要对应的2级,3级的页表。
2024-07-21 15:19:11
1136
原创 CPU工作模式-长模式
保护模式下为了实现对中断进行权限检查,实现了中断门描述符,在中断门描述符中存放了对应的段选择子和其段内偏移,还有 DPL 权限如果权限检查通过,则用对应的段选择子和其段内偏移装载 CS:EIP 寄存器从实模式直接切换到长模式,也可以从保护模式切换长模式切换到长模式和切换保护模式的流程差不多,只是需要准备的段描述符有所区别,还有就是要注意同时开启保护模式和分页模式。
2024-07-21 15:17:17
581
原创 CPU工作模式- 保护模式
因为实模式下CPU不需要做权限检查,所以它可以直接中断向量表中的值装载CS:IP寄存器x86 CPU在第一次加电和每次reset后,都会自动进入实模式,想要进入保护模式,就需要程序员写代码实现从实模式切换到保护模式接下来,CPU 发现了 CRO 寄存器第 0 位的值是 1就会按 GDTR 的指示找到全局描述符表,然后根据索引值 8,把新的段描述符信息加载到 CS 影子寄存器,当然这里的前提是进行一系列合法的检查CPU 真正进入了保护模式,CPU 也有了 32 位的处理能力。
2024-07-21 15:16:20
1205
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅