首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏code人生

    PGO in Go 1.21

    或者,go build命令可以使用-pgo标志来指定要用于PGO的性能分析文件的路径。 我们建议将default.pgo文件提交到您的代码仓库中。 build -pgo=/tmp/pgo121/default.pgo 如果看到输出中包含-pgo=/path/to/default.pgo,那么说明PGO已经成功启用。 我们将关注两种不同的PGO驱动优化。 内联 要观察内联改进,让我们分别分析使用PGO和不使用PGO的Markdown应用程序。 例如,runtime.scanobject在使用PGO时比不使用PGO时减少了0.46秒的CPU时间。 PGO和编译器优化的一部分力量在于,对分配的影响根本不是编译器的PGO实现的一部分。PGO做出的唯一更改是允许内联这些热函数调用。逃逸分析和堆分配的所有影响都是适用于任何构建的标准优化。

    64530编辑于 2023-10-19
  • 来自专栏旅途散记

    亲测体验Go语言PGO

    PGO。 或者, go build 的 -pgo 标志采用用于 PGO 的配置文件的路径 mv cpu.pprof default.pgo go build -o markdown.withpgo 这样就有了两个二进制文件 更多参考: PGO: 为你的Go程序提效5%[4] Profile Guided Optimizations in Go[5] Go1.20 那些事:PGO、编译速度、错误处理等新特性,你知道多少? /prattmic/markdown-pgo [4] PGO: 为你的Go程序提效5%: https://colobu.com/2023/09/13/pgo/ [5] Profile Guided [8] PGO 是啥,咋就让 Go 更快更猛了?

    71310编辑于 2023-12-06
  • 来自专栏DotNet NB && CloudNative

    .NET8 上的 Bing :动态PGO的影响

    尽管在.NET 8的核心库中有明显的性能递增好处,但促使我们升级的最大因素是对动态PGO(Profile Guided Optimization,配置文件指导的优化)的显著改进。 之前的帖子: 迁移Bing工作流引擎到 .NET5 .NET 5 升级到 .NET 7,再次为必应带来性能提升 动态PGO 鉴于我们的规模,有时会有一些功能开箱即用就能在几乎所有应用中表现良好,但我们仍会给予额外的考虑 动态PGO通过根据需要重新编译某些代码来提高运行时代码的质量。理论上,这可以帮助我们改善延迟,但我们需要彻底测试它对启动和第一个用户查询的影响。 关于动态PGO的工作原理,你可以在其他地方阅读到,但简而言之: 动态PGO会在新即时编译的代码中加入一些轻量级指令,以记录性能特征并建立一个重新编译候选队列。 尽管在我们庞大的代码库和严格的延迟要求下,动态 PGO 需要一些微调,但在运行时性能方面,它确实是一个巨大的胜利。 现在,我需要开始为 .NET 9 做准备了……希望在明年能再次向你们报告!

    38410编辑于 2024-04-29
  • 来自专栏黑客下午茶

    云原生 PostgreSQL - CrunchyData PGO 教程:创建、连接、删除 Postgres 集群

    PGO 从 metadata.name 中读取值,为 Postgres 集群提供名称 hippo。 spec.postgresVersion 中的值很重要,因为它将帮助 PGO 跟踪您正在使用的 Postgres 的主要版本。 让我们来看看 PGO 是如何连接到 Postgres 集群的! 多亏了 PGO,您甚至不必担心这一点,因为该信息是在 Secret 中捕获的! 当您的 Postgres 集群初始化时,PGO 将引导您的应用程序可以访问的数据库和 Postgres 用户。 PGO 提供自己的证书颁发机构 (CA) 以允许您将应用程序安全地连接到 Postgres 集群。

    2.6K40编辑于 2022-03-31
  • 来自专栏黑客下午茶

    云原生 PostgreSQL 集群 - PGO:5分钟快速上手

    目录 前提条件 安装 第 1 步:下载示例 第 2 步:安装 PGO,即 Postgres Operator 创建 Postgres 集群 连接到 Postgres 集群 通过终端中的 psql 连接 github.com:${YOUR_GITHUB_UN}/postgres-operator-examples.git" cd postgres-operator-examples 第 2 步:安装 PGO ,即 Postgres Operator 您可以使用以下命令安装 PGO,即来自 Crunchy Data 的 Postgres Operator: kubectl apply -k kustomize /install 这将创建一个名为 postgres-operator 的命名空间,并创建部署 PGO 所需的所有对象。 PGO 为您的 Postgres 集群设置 PKI。您也可以选择自带 PKI / certificate authority;这将在文档后面介绍。

    1.8K10编辑于 2022-03-31
  • 来自专栏设计模式

    PGO与LTO优化:编译器的秘密武器

    本文将深入探讨PGO和LTO,展示它们的工作原理,如何在项目中实现,以及它们在实际应用中的优缺点。 一、理解PGO PGO,即Profile-Guided Optimization(基于分析的优化),是一种编译器优化技术,它通过收集程序运行时的数据,来指导编译器进行更加精确的优化。 三、PGO与LTO的实用例子 为了更好地理解PGO和LTO,让我们看一些实际的例子。 PGO的例子 假设你正在编写一个图像处理程序。你可能会发现,在运行时,某些函数被调用的频率比其他函数高得多。 四、PGO与LTO的优缺点 PGO和LTO都是非常强大的优化技术,但它们也有各自的优缺点。 PGO的优点是它可以实现非常精细的优化,因为它是基于实际的运行情况来进行优化的。 五、总结 无论是PGO还是LTO,它们都为我们提供了强大的工具,帮助我们优化程序,提高性能。

    1.1K10编辑于 2024-12-23
  • 来自专栏InCerry

    .NET8 上的 Bing :动态PGO的影响

    尽管在.NET 8的核心库中有明显的性能递增好处,但促使我们升级的最大因素是对动态PGO(Profile Guided Optimization,配置文件指导的优化)的显著改进。 之前的帖子: 迁移Bing工作流引擎到 .NET5 .NET 5 升级到 .NET 7,再次为必应带来性能提升 动态PGO 鉴于我们的规模,有时会有一些功能开箱即用就能在几乎所有应用中表现良好,但我们仍会给予额外的考虑 动态PGO通过根据需要重新编译某些代码来提高运行时代码的质量。理论上,这可以帮助我们改善延迟,但我们需要彻底测试它对启动和第一个用户查询的影响。 关于动态PGO的工作原理,你可以在其他地方阅读到,但简而言之: 动态PGO会在新即时编译的代码中加入一些轻量级指令,以记录性能特征并建立一个重新编译候选队列。 尽管在我们庞大的代码库和严格的延迟要求下,动态 PGO 需要一些微调,但在运行时性能方面,它确实是一个巨大的胜利。 现在,我需要开始为 .NET 9 做准备了……希望在明年能再次向你们报告!

    34510编辑于 2024-04-18
  • 来自专栏周末程序猿

    技术总结|十分钟了解性能优化PGO

    什么是 PGOPGO 原理 PGO 是基于当前运行的程序生成的 Profile,基于 Profile 再通过编译器调整代码,原理如下: 分析阶段:程序首先在启用分析工具的情况下进行编译和执行,在此阶段,编译器会收集不同代码路径 (3)值得注意 在 PGO 之后,ret 返回语句不再放在函数末尾,而是移到了函数开头。 main.cpp 测试结果 上面是没有 PGO 优化的执行时间,下面是 PGO 优化的执行时间,对比性能提升 10~20% 之间。 PGO 实现类型 PGO 实现类型主要有两种: 基于插桩(Instrumentation-based): 原理:插桩实现即在编译或者运行时收集统计信息,比如执行频率,哪些会执行,哪些不执行,这些文件被保存为

    46910编辑于 2025-11-13
  • 来自专栏【腾讯云开发者】

    Go和C++通用性能优化黑魔法——PGO

    本文会介绍 PGO 的原理,以及 Go/C++ 语言进行 PGO 的实践。 目录 1 Profile-Guided Optimization (PGO)原理 2 Go 的 PGO 实践 3 C++的 PGO 时间 4 总体实践和规划 通常情况下,核心系统的性能优化往往是一个研发毕生所学 别急,PGO 可以帮你。 02 Go 的 PGO 实践 Go 语言从 Go1.20 开始就支持 PGO 优化,不过默认是关闭的 -pgo=off,从 Go1.21 开始 -pgo=auto 默认打开。 自动开启 PGO 优化。

    2.8K51编辑于 2023-10-23
  • 来自专栏黑客下午茶

    云原生 PostgreSQL 集群 - PGO:来自 Crunchy Data 的 Postgres Operator

    PostgreSQL 用户管理 升级管理 高级复制支持 克隆 连接池 K8S 亲和力和容忍度 定期备份 备份到 S3 或 GCS 多命名空间支持 完全可定制性 工作原理 包含的组件 支持的平台 存储 使用 PGO (Postgres Operator) 如何利用具有多种不同部署模型的 Kubernetes 命名空间: 将 PGO 和所有 PostgreSQL 集群部署到同一个命名空间 将 PGO 部署到一个命名空间 ,并将所有 PostgreSQL 集群部署到不同的命名空间 将 PGO 部署到一个命名空间,并跨多个命名空间管理 PostgreSQL 集群 使用 pgo 客户端运行 pgo create namespace 存储 PGO,即 Postgres Operator,使用各种不同类型的 Kubernetes 存储和 Storage Classes 以及 hostPath 和 NFS 进行了测试。 有各种不同类型的 Storage Class 可供 Kubernetes 使用,PGO 尽最大努力测试每一个,但由于这一领域的广度,PGO 无法验证每一类中的 Postgres Operator 功能。

    2.7K10编辑于 2022-03-31
  • 来自专栏idba

    看看MySQL编译器优化PGO

    这种特性在某些特定场景的 POC 测试中可以使用,以便更容易的通过测试, 部分云厂商已经提供针对sysbench的 PGO 版本。 在 PGO 编译器优化前 我们做的比较多的编译器优化是分支预测优化。 可以发现 PGO 优化不仅仅对数据库程序优化有效率,其实他是一种通用的优化手段,可以用于任何程序的优化。常见的 C/C++、Rust语言都已支持 PGO 优化。 /test ### 优化编译 >g++ -o test test.cpp -fprofile-use=/tmp/pgo 使用 PGO 编译 MySQL 由于 MySQL 数据库使用 C++ 进行编写, 显然可以使用 PGO 优化。 PGO 优化的限制 其实,从上面的实现原理来看,PGO是一种基于场景反馈的优化,比如针对 sysbench 的读写操作进行优化。

    90210编辑于 2024-07-02
  • Rust 中的 Profile-Guided Optimization(PGO):从原理到深度实践

    Rust 中的 Profile-Guided Optimization(PGO):从原理到深度实践 引言 在追求极致性能的道路上,Profile-Guided Optimization(PGO)是一项常被忽视但威力巨大的优化技术 关键在于选择合适的训练数据集——它必须代表生产环境中的典型工作负载,否则 PGO 可能适得其反。 一个有趣的发现是,PGO 对于包含大量泛型和 trait 对象的 Rust 代码特别有效。 在我的实践中,对一个解析器密集型应用应用 PGO 后,通过 perf 观察到 L1i 缓存未命中率下降了约 30%。 深层思考:权衡与策略 PGO 并非银弹。 一个专业的策略是采用分层 PGO:对核心热路径使用精确的配置文件优化,对其他部分使用基于采样的轻量级 PGO。 ✨ 期待看到你在 PGO 实践中的发现!有任何问题随时交流~

    14110编辑于 2026-01-23
  • 来自专栏程序员成长指北

    谷歌发布 Chrome 85 稳定版,引入 PGO,页面加载速度提升 10%

    页面加载速度提升 Chrome 85 带来了 Profile Guided Optimization(PGO),这是一种编译器优化技术,可使代码中性能最关键的部分运行得更快。 PGO 使用的实际使用场景与 Chrome 用户的工作流程相匹配,因此最常见的任务会得到优先处理,并且速度更快。它适用于 Mac 和 Windows。 测试显示,引入 PGO 后,Chrome 页面加载速度平均提高了 10%,并且当 CPU 同时运行许多标签页或程序时,速度甚至得到了更大的提高。 ?

    1.2K10发布于 2020-09-08
  • 来自专栏张善友的专栏

    .NET 6 RC1 正式发布

    配置文件引导优化 (PGO):在5月的"关于PGO的对话"中,微软这样介绍PGO:"PGO通过在优化过程中添加新的信息来提高应用程序的性能,而优化过程取决于应用程序的执行方式,而不仅仅是程序的代码。 .NET 团队一直在努力使在.NET 6 中有最佳的 PGO 体验。目前尚未启用其他人使用 PGO 来优化应用。这就是接下来的.NET 7,在此处查看更多有关此信息。 动态PGO是静态PGO系统的镜像,当静态 PGO 与Crossgen 2 集成时,动态 PGO 与 RyuJIT 集成。 如果说静态 PGO 需要单独的训练活动并使用特殊工具,则动态 PGO 是自动的,并且使用运行应用程序收集相关数据。静态 PGO 数据持续存在的地方,每次应用运行后都会丢失动态 PGO 数据。 动态 PGO 类似于跟踪 JIT。在此处查看更多有关此信息。

    66140发布于 2021-09-23
  • 来自专栏猫头虎博客专区

    2023年9月5日 Go生态洞察:Profile-guided Optimization in Go 1.21

    $ mv cpu.pprof default.pgo $ go build -o markdown.withpgo.exe 性能评估 通过对比PGO前后的性能数据,可以直观地看到PGO带来的改进。 这只是PGO潜力的初步体现,未来的Go版本将继续通过PGO实现更多的性能优化。 深入剖析 PGO的实现涉及多个层面,包括内联优化和虚函数去虚拟化等。 通过深入剖析,我们可以更好地理解PGO如何在不同层面上优化性能。 内联优化 内联是PGO的重要组成部分。 通过分析案例中的mdurl.Parse函数,我们看到PGO如何通过内联减少堆分配,从而提高性能。 去虚拟化 PGO还可以驱动条件性的去虚拟化操作,这进一步优化了接口调用的性能。 下一步 PGO在Go中的应用仍有很大的发展空间。随着Go版本的迭代,我们可以期待PGO将在性能优化方面发挥更大的作用。 总结 PGO在Go 1.21中的应用标志着Go语言在性能优化上的一大步。

    26910编辑于 2024-04-08
  • 来自专栏猫头虎博客专区

    2023年8月8日 Go生态洞察:Go 1.21 版本发布探索

    正文内容 ️ 工具改进 Go 1.21带来了一些重要的工具改进: 首先,我们在1.20中预览的Profile Guided Optimization (PGO)功能现已全面可用! 如果在主包目录中存在default.pgo文件,go命令将启用PGO构建。PGO的影响是显著的,对各种Go程序进行了测试,性能提升了2-7%。 go工具现在支持向后和向前的语言兼容性。 性能提升 除了启用PGO时的性能提升外: Go编译器本身在1.21版本中也启用了PGO,结果是,根据宿主架构的不同,构建Go程序的速度提升了2-4%。 关键点 描述 工具改进 PGO功能全面可用,go工具支持语言兼容性 语言变化 新增内置函数min、max和clear,泛型函数类型推断改进 标准库新增 新增log/slog、slices、maps和cmp 包 性能提升 启用PGO后的编译器性能提升,垃圾收集器调优,减少了runtime/trace的CPU开销 WebAssembly System Interface (WASI) 新端口 支持WASI预览版

    37610编辑于 2024-04-09
  • 来自专栏一点人工一点智能

    基于偏差矩阵的3D SLAM位姿图优化算法

    该算法将同时估计机器人位置和旋转方向的问题转化成优先估计旋转的子问题,大幅度地降低了PGO问题的计算复杂度,加快了其运行速度,但只可应对低噪声的PGO数据集。 ORDM算法具有一定的抗噪能力,可作为PGO的初始化算法。在低噪声和无噪声数据集中,也可直接作为PGO的优化算法。 3)利用PGO公开数据集进行实验,实验结果显示ORDM算法相比于Chordal算法在噪声的情况下,更加精确、鲁棒;适用于各类规模的PGO数据集,具有一定的可伸缩性。 3.1 PGO数据集在3D SLAM中,PGO公共数据集[20]主要有Sphere_a、Garage、Torus和Cubicle,均为低噪声数据集。 04  结论PGO是机器人感知领域中重要的轨迹优化方法。本文提出一种基于偏差矩阵的PGO初始化算法——ORDM。

    96820编辑于 2023-08-24
  • 来自专栏猫头虎博客专区

    2023年2月8日 Go生态洞察:Profile-Guided Optimization预览

    Profiling过程 现在我们有了一个运行中的服务,我们可以收集profile,并使用PGO重建,看看性能是否有所提升。 使用Profile进行优化 我们使用-pgo标志来构建PGO。 $ go build -pgo=auto -o markdown.withpgo.exe 性能评估 接下来,我们使用Go的benchmark工具来评估PGO对性能的影响。 运行基准测试 我们分别对没有使用PGO和使用了PGO的服务器进行了基准测试。 $ go test ... 结果比较 最后,我们使用benchstat来比较两种情况下的性能。 总结 通过PGO,我们可以使Go的应用程序性能得到进一步的提升。虽然目前PGO还在预览阶段,但它已经展现 出巨大的潜力。不要忘了,这篇文章已被猫头虎的Go生态洞察专栏收录,详情点击这里。

    21510编辑于 2024-04-08
  • 来自专栏【腾讯云开发者】

    在线教程!C++如何在云应用中快速实现编译优化?

    反馈优化技术 反馈优化可以发生在编译时和编译后,主要有以下几种方法: Profile Guided Optimization (PGO) Sampling PGO Instrumentation PGO 因此,Sampling PGO采集信息的过程带来的额外开销相对Instrumentation PGO更小。 而Sampling PGO需要依赖其他Profile工具的同时,采集的信息也相对Instrumentation PGO更少。 因此,Instrumentation PGO一般作为Sampling PGO的基准,通过比对本次Sampling PGO与Instrumentation PGO的性能差距来判断本次Sampling PGOPGO不同,BOLT优化的对象是链接后的二进制文件。

    2K10编辑于 2022-02-15
  • 来自专栏猫头虎博客专区

    2023年6月21日 Go生态洞察:Go 1.21版发行候选版的深入分析

    正文内容 工具改进 Profile Guided Optimization (PGO)正式可用:我们在Go 1.20中预览过的PGO功能现已正式推出。 如果主包目录中存在名为default.pgo的文件,go命令将启用PGO构建。PGO对一系列Go程序的性能提升在2-7%之间。 go工具的语言兼容性:现支持向后和向前的语言兼容。 性能提升 PGO带来的性能提升:除了PGO带来的性能提升,Go编译器本身也用PGO重新构建,结果显示编译Go程序的速度提高了2-4%,具体取决于宿主架构。 功能 描述 PGO Profile Guided Optimization,提高2-7%性能 语言兼容性 支持向后和向前兼容 新内建函数 min, max, clear 类型推断改进 泛型函数类型推断更加精准

    24810编辑于 2024-04-08
领券