尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

上代码演示下Profile-Guided Optimization (PGO)

上代码演示下Profile-Guided Optimization (PGO)
📅 发布时间:2026/6/19 5:35:53

Shell脚本名叫step

#!/bin/bashif [[ $# -ne 1 ]]; then exit; firun() { C="g++ $1 main.cpp"; echo $C; $C; a.out; }case $1 in
'0') run '' ;;
'1') run '-fprofile-generate=.' ;;
'2') run '-fprofile-use=.' ;;
# -march=native不是默认选项,需显式指定,其作用是根据当前编译机器
# 的CPU自动启用支持的指令集优化。
'3') run '-O3 -march=native' ;;
esac

main.cpp

#include <chrono> // C++11时间库
#include <random>
#include <iostream>
using namespace std;auto now = chrono::high_resolution_clock::now;// 模拟热点分支(PGO优化重点)
int process (int x) {if (x > 100) // 该条件90%概率成立(模拟热点分支)return x * 2;return x + 1;
}int main () {random_device rd;auto seed = rd();mt19937 gen(seed);//生成伯努利分布随机布尔值,90% truebernoulli_distribution dist(0.9);auto start = now();int sum = 0;for (int i = 0; i < 1'000'000; ++i)sum += process(dist(gen) ? 150 : 50);// F U C K !cout << chrono::duration<double>(now() - start).count() << "s\n";exit(sum);
}

运行 (Intel N100)

~/pgo$ step 0
g++ main.cpp
0.0532354s
~/pgo$ step 1
g++ -fprofile-generate=. main.cpp
0.060655s
~/pgo$ step 2
g++ -fprofile-use=. main.cpp
0.0532936s
~/pgo$ step 3
g++ -O3 -march=native main.cpp
0.00564738s

colinsblog说:I experimented with some existing C++ 14 applications I’ve written. One, a flat-file to Parquet format converter, improved by only about five percent over an executable built with blanket -O3 optimization levels. Another, the “DCP” I’ve discussed before, improved by around thirty percent faster compared with the same program built with -O3. These tests were done with GCC 5.4, not exactly the newest. I’ll attempt to do similar tests with GCC 7 and 9.

我用的是gcc version 12.2.0 (Debian 12.2.0-14)

AI说:PGO是一种编译器优化技术,通过分析程序实际运行数据(如函数调用频率、分支路径等)生成配置文件,指导编译器对热点代码进行精准优化。其核心流程包括:插桩编译→数据采集→二次优化编译。PGO能显著提升性能,例如减少分支预测错误、优化代码布局以提高缓存命中率,在Chrome等应用中实现10%-20%的性能提升。该技术适用于计算密集型场景,需配合代表性数据收集以发挥最大效果。

AI好啊,讲PGO的中文网页基本上没有代码,而AI能编演示程序,写Makefile,虽然把-fprofile-generate和use的参数当成了文件名,导致use时说找不到文件。

补丁:step 1前得先rm *.gcda.

改成15'000'000后,0.799088s, 0.906551s, 0.800046s, 0.0843707s

相关新闻

  • day008
  • IRB-120机械臂socket通信接受上位机指令运行程序段
  • tornado异步操作数据库-mysql

最新新闻

  • iTunes could not connect to this iPhone.An unknown error occurred(0xE800000A).
  • 模块化VQA系统搭建:视觉语言对齐与可调试工程实践
  • 阿里ATH事业群与Token计费:重构AI商业化底层逻辑
  • PeakRoutine 新手入门与实战指南
  • Gemma-4B真实参数量揭秘:Hybrid Attention与PLE如何定义端侧有效参数
  • Claude上下文优化三法则:Skills懒加载、Explore子代理与路径规则

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号