反馈式编译
一、 反馈式编译
简介
PGO,即Profile-Guided Optimizations,反馈式优化。PGO是编译器的又一优化技术,PGO与其它的一些优化技术/选项有一个明显的区别是:PGO优化是分三步完成的,是一个动态的优化过程。
反馈优化过程:
- 步骤 1 编译器插桩编译,编译生成插桩的可执行文件。
- 步骤 2 运行插桩的可执行文件,生成反馈数据文件gcda,这些文件记录了程序中控制流图上边的执行次数。
- 步骤 3 编译器读取反馈数据文件,利用反馈优化,生成高性能的可执行文件。
以下优化受益于反馈数据:
寄存器分配,基本块重排,内联,循环展开,指令调度,冗余指令删除等。
说明:代码变更时,反馈数据需要重新生成。
基础选项
编译获得插桩版本二进制或者so
-
gcc main.c –fprofile-generate –o instrument.out -
复制代码
上板运行获取gcda反馈式编译数据
-
./instrument.out -
复制代码
根据反馈式数据重新编译
-
gcc main.c –fprofile-use –o new.out -
复制代码
二、 FGO
PGO是gcc原生的反馈编译优化方案, 通过插桩运行采样得到的gcda文件来指导第二次编译优化,而FGO针对gcda文件二进制属性,解决业务侧源码交付的痛点,profile文件使用文本的形式导入。两者的区别是FGO的profile文件可以通过适当的手动修改适配,但当前FGO未完全支持C++模块优化。
三、 softFDO
softFDO是通过原生插桩运行得到的采样数据转换成google开源gcov数据格式,通过auto-profile Pass遍将数据导入进行优化。两者的区别是PGO支持value profile, softFDO不支持;softFDO使用的auto-profile Pass边在优化时调用了early-inline操作
相关文章:
反馈式编译
一、 反馈式编译 简介 PGO,即Profile-Guided Optimizations,反馈式优化。PGO是编译器的又一优化技术,PGO与其它的一些优化技术/选项有一个明显的区别是:PGO优化是分三步完成的,是一个动态的优化过程。 反馈优化过…...
sql-libs靶场-----0x00、环境准备
文章目录 一、PhPstudy下载、安装二、Sqli-libs下载、搭建三、启用Sqli-libs phpstudy地址:https://www.xp.cn/ sqli-libs地址:https://github.com/Audi-1/sqli-labs 一、PhPstudy下载、安装 1、下载–解压–安装,安装完成如下图 2、更换php…...
一百四十九、Kettle——Linux上安装的kettle8.2创建共享资源库时遇到的问题(持续更新中)
一、目的 在kettle8.2在Linux上安装好可以启动界面、并且可以连接MySQL、Hive、ClickHouse等数据库后开始创建共享资源库,但是遇到了一些问题 二、Linux系统以及kettle版本 (一)Linux:CentOS 7 英文的图形化界面模式 &#…...
Mysql 建索引规范
索引规范 今天在建线上表的时候,做了一个varchar的索引,运维说varchar的索引会占用很大的内存。 于是 上网搜了一下建索引规范 一、建表规约 【强制】(1) 存储引擎必须使用InnoDB 解读:InnoDB支持事物、行级锁、并发…...
新基建助推数字经济,CosmosAI率先布局AI超算租赁新纪元
伦敦, 8月14日 - 在英国伦敦隆重的Raffles OWO举办的欧盟数字超算新时代战略合作签约仪式,CosmosAI、Infinite Money Fund与Internet Research Lab三方强强联手,达成了历史性的合作协议,共同迈向超算租赁新纪元。 这次跨界的合作昭示了全球…...
微服务06-分布式事务解决方案Seata
1、Seata 概述 Seata事务管理中有三个重要的角色: TC (Transaction Coordinator) - **事务协调者:**维护全局和分支事务的状态,协调全局事务提交或回滚。 TM (Transaction Manager) - **事务管理器:**定义全局事务的范围、开始全局事务、提交或回滚全局事务。 RM (Resourc…...
Wireshark有线网卡抓包报错The capture session could not be initiated on capture device
最近在使用Wireshark进行抓包排错时,选择网卡后提示报错,在此之前从未出现过,报错内容如下: 提示内容是The capture session could not be initiated on capture device,无法在捕获设备上启动捕获会话要求操作是Please…...
FreeSWITCH执行bridge时如何“制造“ringback
dialplan如果这样写: <action application"record_session" data"$${recordings_dir}/${caller_id_number}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/> <action application"bridge" data"user/1001"/> 或者这样…...
Java # 类加载子系统
一、概述 1、 类加载器子系统负责从文件系统或者网络中加载.Class文件 2、classloader只负责类的加载,至于他是否能够运行由执行引擎来决定 3、加载的类的信息会存放在方法区(元空间)中 二、加载过程 1、加载阶段 1、通…...
YOLOv5改进系列(21)——替换主干网络之RepViT(清华 ICCV 2023|最新开源移动端ViT)
【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制 YOLOv5改进系列(2...
安卓中常见的字节码指令介绍
问题背景 安卓开发过程中,经常要通过看一些java代码对应的字节码,来了解java代码编译后的运行机制,本文将通过一个简单的demo介绍一些基本的字节码指令。 问题分析 比如以下代码: public class test {public static void main…...
TCP的三次握手和四次挥手
文章目录 三次握手四次挥手TIME_WAITCLOSE_WAIT 使用wireshark观察 三次握手 握手的最终目的是主机之间建立连接 首先要有两个预备知识点 三次握手建立连接不一定会成功,其中最担心的就是最后一次握手失败,不过会有配套的解决方案建立好连接后是需要被…...
前后端分离------后端创建笔记(08)表单提交
本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论,如有侵权请联系 源码:https://gitee.com/green_vegetables/x-admin-project.git 素材:https://pan.baidu.com/s/…...
途乐证券-KDJ分别代表什么?
KDJ是一种技能剖析东西,常见于股票、期货等商场中,它的全称是随机目标(KDJ)。KDJ目标包括三条线,分别为K线、D线和J线。那么,KDJ分别代表什么呢?本文将从多个视点进行剖析。 1. KDJ的简单介绍 …...
用C语言重写的原始Matlab OpenShoe算法:深入理解和实现步态分析的关键技术
一、引言 在许多领域,如医疗健康、体育科学、虚拟现实和机器人技术中,步态分析都是一个重要的研究领域。步态分析可以帮助我们理解人体运动的机制,评估疾病的影响,优化运动员的表现,甚至设计更自然的机器人运动。Open…...
什么开放式耳机音质好?值得推荐的开放式耳机分享
与封闭式耳机相比,开放式耳机具有更为自然、真实的音质,能够更好地还原音乐现场的声音环境。以下是几款值得推荐的开放式耳机,都来看看有哪些吧。 推荐一:NANK南卡00压开放式耳机 点评:体验最好的开放式耳机没有之一…...
mac harbor的安装
harbor的安装 为什么要整这个呢,因为我在学习k8s,但是需要一个自己的镜像仓库。于是,最开始想到的就是在本地直接部署一个,还比较安全、快速。 直接下载了官方的项目,运行脚本发现出了异常,这种异常我已经…...
SetActive和Enable有什么不同?
介绍 在Unity中,SetActive和Enable都是常用的方法,用于在运行时控制对象的可见性和功能开启状态。尽管它们的目的相似,但在使用时有一些区别。 SetActive SetActive是GameObject类的方法,用于启用或禁用游戏对象及其所有子对象…...
【Vue-Router】重定向
First.vue <template><h1>First Seciton</h1> </template>Second.vue,Third.vue代码同理 UserSettings.vue <template><h1>UserSettings</h1><router-link to"/settings/children1">children1</ro…...
vulnhub靶场之ADROIT: 1.0.1
准备: 攻击机:虚拟机kali、本机win10。 靶机:Adroit: 1.0.1,下载地址:https://download.vulnhub.com/adroit/Adroit-v1.0.1.ova,下载后直接vbox打开即可。 知识点:shell反弹(jar&…...
NEURAL MASK RMBG-2.0技术演进:从RMBG-1.0到ART-ENGINE的架构升级
NEURAL MASK RMBG-2.0技术演进:从RMBG-1.0到ART-ENGINE的架构升级 1. 背景与挑战 传统的图像抠图工具在面对复杂场景时往往力不从心。当遇到细微的发丝、半透明物体或者复杂的光影交错时,这些工具要么产生锯齿状的边缘,要么无法准确区分主体…...
Janus-Pro-7B代码实例:Python调用app.py实现图文双向交互
Janus-Pro-7B代码实例:Python调用app.py实现图文双向交互 1. 项目概述 Janus-Pro-7B是一个强大的统一多模态AI模型,能够同时处理图像理解和文本生成图像任务。这个模型特别适合需要图文双向交互的应用场景,比如智能图片分析、创意内容生成、…...
Nunchaku FLUX.1-dev 开发环境配置:Anaconda虚拟环境创建与管理指南
Nunchaku FLUX.1-dev 开发环境配置:Anaconda虚拟环境创建与管理指南 想玩转Nunchaku FLUX.1-dev这类前沿的AI模型,第一步也是最关键的一步,就是把它的“家”给搭好。这个“家”就是Python虚拟环境。你可能听过不少因为环境依赖冲突ÿ…...
主流AI培训机构评测:关键指标全对比
引言 随着AI技术的飞速发展,AI培训市场也日益繁荣。然而,无论是企业还是创业者在选择AI培训机构时,都面临着诸多挑战。企业端存在缺乏数字化运营团队、不懂AI工具使用、短视频内容生产效率低、打造个人IP能力不足、同城获客成本高且精准度低…...
DeOldify跨框架模型转换:从PyTorch到ONNX及TensorRT加速
DeOldify跨框架模型转换:从PyTorch到ONNX及TensorRT加速 最近在折腾一个挺有意思的项目,想把老照片上色的模型DeOldify部署到生产环境里。原版模型是用PyTorch写的,直接拿来用的话,推理速度总觉得差点意思,尤其是在处…...
【实战技巧】利用rclone高效下载Google Drive共享大数据集
1. 为什么需要rclone下载Google Drive大数据集 做深度学习的朋友们应该都遇到过这样的场景:好不容易找到一个理想的开源数据集,结果发现它存放在Google Drive上,而且体积动辄几十GB甚至上百GB。这时候如果按照传统方法先下载到本地电脑再上传…...
【网络安全干货】黑客内网渗透零基础入门,超详细基础知识手把手教学
0x01 内网概述 内网也指局域网(Local Area Network,LAN)是指在某一区域内由多台计算机互联成的计算机组。一般是方圆几千米以内。局域网可以实现文件管理、应用软件共享、打印机共享、工作组内的历程安排、电子邮件和传真通信服务等功能。 内…...
避坑指南:从聚宽迁移到QMT必须知道的5个细节(含Redis连接异常处理)
从聚宽迁移到QMT的实战避坑指南:Redis连接与xtquant重连机制详解 当量化团队需要从聚宽平台迁移到QMT时,往往会遇到一系列技术细节上的挑战。本文将聚焦五个最容易被忽视但至关重要的技术环节,特别是Redis连接池管理和xtquant重连机制这两个直…...
单相光伏电池并网:扰动观测法实现最大功率输出与直流母线电压恒定策略
单相光伏电池并网 1.光伏采用扰动观测法实现最大功率输出 2.逆变器采用直流母线电压恒定策略 3.实现光伏的最大功率输出,直流母线电压维持在恒定值,总谐波畸变率满足并网条件光伏板在阳台上晒得发烫的时候,我最喜欢蹲在配电箱旁边观察电流表指…...
药片机MCGS6.2 与西门子 S7 - 200 PLC 联机程序探究
药片机MCGS6.2和西门子S7-200plc联机程序4,在自动化生产领域,药片机的精准控制至关重要。MCGS6.2 作为一款优秀的人机界面组态软件,与西门子 S7 - 200 PLC 配合,能实现高效的自动化控制。今天咱就唠唠它们联机程序的一些要点。 通…...
