LLVM编译器中PGO的用法

作用

PGO是LLVM编译器的一种优化技术,它通过运行程序以收集性能数据(主要是基本块的执行频率),利用这些数据来指导编译器进行更有效的优化。

方法

简单来说就是三步:

第一步,在编译时加上-fprofile-generate编译选项进行第一次编译。

第二步,运行第一次编译的程序得到性能数据。

第三步,使用性能数据指导编译器进行第二次编译获得优化后的程序。

本次采用的编译器是LLVM 17.0.0。

第一次编译
clang  -fprofile-generate   test.c  -o  test
运行第一次编译的程序
#生成binary并执行,会生成*.profraw文件
./test

这一步将会生成*.profraw的文件,其中包含了test程序的性能数据,根据不同的输入可以生成多个性能数据文件

使用性能数据进行第二次编译

在编译之前首先要把得到的性能数据文件做合并(单个文件也要做转化)

#将*.profraw文件转为*.profdata文件
llvm-profdata merge -sparse *.profraw -o code.profdata

进行第二次编译

clang  -fprofile-use=code.profdata   test.c  -o  test_pro

此时生成的binary相比于不加此优化的binary应该有更好的性能

在spec cpu2006的基准测试429.mcf上的测试结果

binary 第一次(runtime) 第二次(runtime) 第三次(runtime)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值