
编译优化
文章平均质量分 78
青衫客36
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Distributed Compilation
Distributed compilation is a technique that allows developers to compile code in parallel across multiple machines, accelerating the overall compilation process. This method is particularly valuable for large codebases or projects that take a substantial a原创 2023-08-13 23:21:31 · 212 阅读 · 0 评论 -
distributed build system
A distributed build system allows software projects to be built by distributing the build tasks across multiple machines, typically in a network. The primary goal of such a system is to speed up the build process, especially for large codebases or complex原创 2023-08-13 17:28:37 · 198 阅读 · 0 评论 -
窥孔优化(Peephole Optimization)
窥孔优化涉及观察编译器输出中的连续指令序列,以找到可能的优化机会。这些连续的指令序列被称为“窥孔”。原创 2023-08-13 12:37:50 · 1821 阅读 · 0 评论 -
PGO- 为什么在编译流水线的早期阶段注入profile信息会降低其准确性和匹配度
Profile-Guided Optimization (PGO) 或反馈驱动优化使用运行时收集的性能分析数据来指导编译器优化。问题:为什么在编译流水线的早期阶段注入profile信息会降低其准确性和匹配度。:在编译过程中,源代码首先被转化为编译器的中间表示形式(Intermediate Representation,IR)。编译器在这个表示上应用了一系列的优化。如果在此阶段就注入profile信息,后续对IR的更改和转换可能会使得这些信息不再与原始源代码或最终的机器代码完美匹配。原创 2023-08-12 15:12:33 · 268 阅读 · 0 评论 -
BOLT 的处理流程
总的来说,BOLT 通过深入分析二进制文件和执行数据,对其进行精细的优化,而不需要源代码。:最终生成了一个优化过的二进制文件,同时更新了 ELF 结构,以反映新的大小和其他相关的修改。:BOLT 需要知道二进制文件中每个函数的位置和大小,以便它能够进行进一步的优化。:基于前两个阶段收集的信息和执行的优化,重写并重新组织二进制内容,使其性能更优。:完成这个阶段后,BOLT 能够映射出二进制中的所有函数的名称、地址和大小。:为每个函数生成一个控制流图,以揭示其内部的执行路径和结构。原创 2023-08-12 13:38:29 · 744 阅读 · 0 评论 -
BOLT- 识别和优化热门的基本块
这一阶段的主要任务是以稳定和高效的速度从内存中取得指令,并为后续的执行阶段提供准备好的指令。在BOLT中,识别和优化热门的基本块之所以关键,是因为BOLT的主要目标是优化程序以更好地利用硬件特性,特别是指令缓存(ICache)。如果预测错误,处理器需要撤销错误路径上的指令并加载正确路径的指令,这会导致延迟。:如果所需的指令不在指令缓存(ICache)中,处理器需要从内存或更高级的缓存中取得指令,这会导致延迟。:如果指令队列(一个存储待执行指令的缓冲区)满了,新的指令无法被取出和解码,直到之前的指令完成。原创 2023-08-11 23:53:19 · 956 阅读 · 0 评论 -
BOLT- 重新布局函数和基本块
当BOLT或其他编译器优化工具对程序进行优化时,它们会重点关注基本块,因为基本块提供了一个局部的、可以预测的上下文来进行各种优化,如重新布局、常量折叠、死代码消除等。也就是说,在进入基本块的第一条指令后,后续的指令将会顺序执行,不会有任何跳转,直到到达基本块的末尾。BOLT在重新布局基本块和函数时可能会引起某些跳转的目标移动到更远的位置,这在某些情况下可能会导致跳转指令的长度增加,因此增加了整体二进制的大小。通过上述策略,BOLT能够在提高性能的同时,尽量避免因重新布局导致的二进制大小增加。原创 2023-08-11 23:40:44 · 472 阅读 · 0 评论 -
BOLT- A Practical Binary Optimizer for Data Centers and Beyond
ICache不命中会导致高延迟和高能耗,特别是在使用非均匀内存访问(NUMA)架构的数据中心中。BOLT为数据中心提供了一个有效的工具,通过后链接优化提高了应用程序的性能,从而减少了能耗和延迟。BOLT是一个后链接二进制优化工具,可以重新排序代码,从而减少ICache不命中,提高程序性能。通过使用BOLT,Facebook 为其数据中心内的关键应用程序实现了明显的性能提升。注意: 这只是一个简化和概括的版本,如需深入了解BOLT,建议参考原文论文。原创 2023-08-11 23:02:59 · 728 阅读 · 0 评论 -
基于样本的性能分析
基于样本的性能分析是一种性能优化技术,通过定期采集程序在运行时的信息(样本)来识别程序的热点区域或常用路径。这与基于插桩的分析相对,后者通过插入额外的代码来记录每一次函数或代码块的执行。基于样本的方法的主要优点是它对程序的性能干扰较小,但可能不如基于插桩的分析那么精确。原创 2023-08-11 13:25:22 · 131 阅读 · 0 评论 -
后链接优化器
由于这种优化在链接后进行,因此能够考虑到程序的全局视图,这是传统编译器优化通常难以做到的。:后链接优化器是一种强大的工具,可以进一步优化链接后的二进制程序。它提供了一种查看整个程序全局视图的方法,并能够执行一系列深入的优化,从而提高程序的性能。:尽管链接时优化(LTO)也可以执行此操作,但后链接优化器还可以在二进制级别执行函数内联,即使这些函数原先位于不同的编译单元或库中。:由于后链接优化是在所有对象文件和库都已经被链接到一起之后进行的,优化器可以考虑整个程序的全局信息,从而实施更广泛、更深入的优化。原创 2023-08-11 12:40:38 · 188 阅读 · 0 评论 -
代码布局优化
代码布局优化是编译技术中的一种策略,其目的是调整程序中函数和数据的物理布局,以提高程序的执行速度。更好的代码布局能够有效利用现代处理器的特性,例如指令缓存和分支预测,从而提高性能。代码布局优化可以在编译时、链接时或后链接时进行,取决于优化器的设计和目标。后链接优化器由于工作在已经链接的二进制代码上,可以更好地考虑整个程序的全局视图,进行更为准确的代码布局。下面,我们用一个简化的例子来说明代码布局优化的作用。A()B()和C()。通过对程序的性能进行分析,我们发现A()经常调用B(),但很少调用C()。原创 2023-08-11 12:38:39 · 347 阅读 · 0 评论 -
FDO(Feedback-Driven Optimization) & LTO(Link-Time Optimization)
反馈驱动优化(Feedback-Driven Optimization,FDO)和链接时优化(Link-Time Optimization,LTO)是两种重要的编译器优化技术。FDO 基于实际的运行时数据来指导优化,而 LTO 则允许在链接阶段进行全局的优化。:FDO 可以在不需要更改源代码的情况下提高程序的性能,因为它是基于实际的运行时行为来做出优化决策的。FDO 是一种优化策略,通过使用程序执行的实际运行时数据来指导优化决策。LTO 允许编译器在链接程序的各个对象文件或库时进行全局的优化。原创 2023-08-11 12:09:03 · 991 阅读 · 0 评论