- 博客(5)
- 资源 (10)
- 收藏
- 关注
原创 编译器工具链(五)——代码体积优化
即使只有一个定义,这些函数可能已经内联在它们的调用者中,这样,额外的代码会被保存在二进制文件中。除了由开发人员编写的函数之外,还有编译器生成的函数,例如构造函数、析构函数、操作符重载等,这些函数也可能会因为类型结构或语言规则从而影响代码的大小。通常情况下,一些类型会比其他类型使用得更加频繁,对于这种常用类型,我们可以在.cpp文件中显式地实例化它们。可以在汇编中看到,第二个gcd在编译时已经求值了,但是对gcd的第一个调用包含了完整代码,这是因为对gcd函数的第二次调用是一个constexpr。
2023-01-13 09:49:56
960
原创 编译器工具链(四)——配置文件引导优化(PGO)
配置文件引导优化(PGO)的质量取决于程序在收集配置文件时运行的测试向量。但即使在有限的测试场景下,配置文件引导优化(PGO)仍然在某些情况下是有益的,例如,即使是完全不同的测试用例,程序的启动顺序依旧不会发生很大的变化。如果编译器可以了解不同程序点的执行频率,就可以在编译过程中做出更好的优化决策。许多编译优化都是基于程序静态分析得到的。的采样分析器会在程序执行时使用基于硬件的计数器来记录某些特殊事件。需要注意的是,并不是所有的硬件都支持所有的事件,也不是所有的Linux perf功能都支持RISC-V。
2023-01-12 09:03:32
1449
原创 编译器工具链(三)——编译优化
GCC和LLVM编译器提供了各种各样的优化和检测技术。编译器中的优化可以提高性能或减少代码体积,同时各种插装技术可以帮助了解系统的内部结构。本文将介绍一些常用的编译器优化。
2023-01-11 11:36:54
1710
原创 编译器工具链(二)——交叉编译
然而,在某些情况下,我们希望为除编译器运行的机器以外的机器生成二进制文件。交叉编译器生成的二进制文件会在其他机器(目标机器)上运行,而不是编译器本身所运行的机器(主机)上运行。通常来说,我们为当前运行机器编译程序时,编译器会使用/usr/include中的标准头文件和/usr/lib中的库文件这些路径是在编译器本身中硬编码的,所以我们不需要考虑它。例如,运行在linux-64机器上的编译器编译一个c++程序并生成一个可以在linux-64机器上运行的可执行文件。通常,编译器被用来为编译器本身运行的机器(
2023-01-10 10:32:25
1238
原创 编译器工具链(一)——编译过程
随着芯片行业的不断发展,编译器技术变得比以往任何时候都重要。从大到小的技术公司都需要编译器工程师。随着物联网设备、ML基础设施等越来越多的采用,对编译器工程师的需求在过去几年中急剧增加。大多数大型科技公司都有编译器工程师在开源或闭源编译器上进行开发。有些编译器工程师致力于编译器优化,有些则致力于优化消耗大量设备资源的重要应用程序。几乎所有的硬件供应商都需要编译工程师来帮助启动处理器。由于RISC-V使处理器芯片组的设计产生变得更加容易,RISC-V生态系统对编译器工程师的需求也相应地增加了。
2023-01-09 17:07:13
1122
oneDcavity_Fourier_traveling.m
2021-04-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人