标签: pgo

GCC配置文件引导优化(PGO)收集哪些信息以及哪些优化使用它?

我启用时GCC会收集哪些信息-fprofile-generate,哪些优化确实使用了收集的信息(设置-fprofile-use标志时)?

我需要引用这里.我已经搜索了一段时间,但没有找到任何记录.

有关链接时间优化(LTO)的信息将是一个加号!= d

c++ gcc lto pgo

39
推荐指数
2
解决办法
2万
查看次数

轮廓引导优化(C)

谁知道这个编译器功能?GCC似乎支持这一点.它是如何工作的?潜在收益是多少?在哪种情况下它很好?内环?

(这个问题是具体的,不是关于一般的优化,谢谢)

c c++ optimization gcc pgo

12
推荐指数
2
解决办法
4606
查看次数

出于性能考虑,编译Chrome / Chromium

我目前正在权衡运行Chromium本地版本的潜在利弊。

我以前从未从源代码构建过Chromium,但我知道这是一个庞大的项目,并且编译要求非常繁琐且耗时。

我之前涉猎过这个想法,但是出于性能方面的考虑。具体来说:

  • 铬可以从Profile Guided Optimization中受益吗?
  • 与使用通用二进制版本相比,使用GCC本机CPU优化来构建Chromium是否可以提供超出边际性能的好处?(特别是Haswell和Broadwell拱门)
  • 在本地构建Chromium时,还可以采取其他措施来提高整体性能或内存效率吗?

经过当时的一些研究,我最终得出结论,这是不值得的。

我确实记得几年前运行过Firefox的PGO构建,并且Firefox似乎仍然为运行PGO构建提供了不错的支持。但是,对于铬来说,它似乎要复杂得多。

Chromium似乎确实对PGO构建提供了一些本机支持。不幸的是,该支持似乎完全是Windows特有的。不支持用于其他操作系统的PGO构建,并且由于Chromium的所有独特构建复杂性,如果没有这种帮助,尝试进行PGO构建似乎不值得。

如果其他人知道在Linux上成功尝试过此操作的人,我将非常有兴趣看到结果。

关于GCC CPU优化,我的理解是,这里提供的好处几乎总是微不足道的,但是由于Chromium多么复杂,因此可以从大多数应用程序中受益更多。

仅进行GCC优化可能仍然不值得付出努力,但我考虑再次进行此操作的原因是,我还可以利用补丁来启用VA-API:https : //aur.archlinux.org/packages / chromium-vaapi /

最终,获得对硬件加速视频解码的支持可能是值得的。现在我很好奇的是执行此操作时要考虑的性能。

tl; dr

  • 在使用通过本机CPU优化在本地编译的Chromium构建时,我可以期望性能方面的任何明显差异吗?
  • 带有Chromium的PGO在Linux上是否可行?如果是,进行实际性能分析的最佳方法是什么?

linux gcc compiler-optimization chromium pgo

5
推荐指数
1
解决办法
707
查看次数

如何在 CMake 3.7 中表达 PGO 依赖项?

我有一个 C++ 程序,我正在使用 Clang 3.9 的配置文件引导优化功能构建它。这是应该发生的事情:

  1. 我在启用检测的情况下构建程序。
  2. 我运行那个程序,用 profile-data: 创建一个文件prof.raw
  3. llvm-profdata用来转换prof.raw为一个新文件,prof.data.
  4. 我创建了同一程序的新版本,并进行了一些更改:
    • 将每个 .cpp 文件编译为 .o 文件时,我使用编译器标志-fprofile-use=prof.data
    • 链接可执行文件时,我还指定了-fprofile-use.

为此,我有一个 Gnu Makefile,效果很好。我的问题出现了,因为我试图将该 Makefile 移植到 CMake(3.7,但我可以升级)。我需要使用(至少)Unix Makefiles 生成器的解决方案,但理想情况下它适用于所有生成器。

在 CMake 中,我定义了两个可执行目标:foo-genfoo-use

  • foo-gen被执行时,它创建的prof.raw文件。
  • add_custom_command用来创建一个规则来创建prof.dataprof.raw.

我的问题是我不知道如何告诉 CMake 依赖的每个目标文件foo-use都依赖于文件prof.data.

  • 我最有希望的想法是 (1) 找到一种方法来枚举所有.o依赖的文件foo-use,然后 (2) 遍历每个.o文件,调用add_dependency每个文件。

    这种方法的问题是我在我的 CMakeLists.txt …

c++ cmake clang pgo

5
推荐指数
1
解决办法
729
查看次数

如何将 PGO + LTO 优化与 GCC 结合使用

我最近一直在研究 PGO 和 LTO 如何显着优化程序速度(有人说大约 20%)。我目前只是用 C 语言编程,并在 Windows 中使用 GTK+ 构建 GUI(通过 GCC 编译所有内容),并且仅使用 -O2 进行优化。

我一直在阅读并使用标志进行编译

gcc -Wall -g -mwindows -O3 -fprofile-generate -flto example.c -o example.exe `pkg-config --cflags --libs gtk+-3.0`
Run Code Online (Sandbox Code Playgroud)

创建了 .gcno 和 .gcda 文件,然后运行编译后的 .exe 多次,然后再次重新编译相同的 .c 文件,但将“-fprofile-generate”替换为“-fprofile-use”?(同时确保所有这些文件位于同一文件夹/目录中,并为第二次编译的 .exe 使用不同的名称)

gcc -Wall -g -mwindows -O3 -fprofile-use -flto example.c -o program.exe `pkg-config --cflags --libs gtk+-3.0`
Run Code Online (Sandbox Code Playgroud)

或者您是否以某种方式使用 .gcno/.gcda 文件?另请阅读有关使用“基准”的内容。

问题:

在GCC中使用它的步骤是什么?(分步指南会有所帮助:)

c optimization gcc lto pgo

5
推荐指数
0
解决办法
2664
查看次数

Clang++ PGO:空.profraw


我正在寻求有关 Clang 配置文件引导优化问题的帮助。我使用的是 clang++-3.7,但 clang++-3.6 仍然存在问题。
如果我尝试使用虚拟代码执行 PGO,一切都很好:

  • 我使用 -fprofile-instr-generate 进行编译:
    clang++ -o test -fprofile-instr-generate dummy.cpp
  • 可执行文件“test”启动后会生成 default.profraw 文件
  • 我可以使用 llvm-profdata merge 合并配置文件
  • 最后,我可以使用配置文件集成进行编译,在 .profdata 上使用 -fprofile-instr-use
  • 但随着项目规模的扩大,就会出现一些问题。我使用 makefile 和脚本来自动化该过程,但这是操作流程:

  • 我编译包含创建对象文件的类的源:
    clang++ -c --std=c++0x -O3 -flto -fprofile-instr-generate src/foo1.cpp -o obj/foo1.o
    clang++ -c -- std=c++0x -O3 -flto -fprofile-instr-生成 src/foo2.cpp -o obj/foo2.o
    clang++ -c --std=c++0x -O3 -flto -fprofile-instr-生成 src /foo3.cpp -o obj/foo3.o
  • 然后我链接对象:
    clang++ -O3 -flto -fprofile-instr-generate obj/foo1.o obj/foo2.o obj/foo3.o -o foobar.out
  • 此时存在问题:当我尝试使用训练实例执行 foobar.out 时,生成的 .profraw 始终为空(并且执行速度正常,没有像创建 pgo 期间那样慢),并且当我尝试使用配置文件集成进行编译(合并 .profraw 文件后),编译器总是为项目中的每个 foo*.cpp …
  • c++ optimization clang pgo

    1
    推荐指数
    1
    解决办法
    2026
    查看次数

    标签 统计

    pgo ×6

    c++ ×4

    gcc ×4

    optimization ×3

    c ×2

    clang ×2

    lto ×2

    chromium ×1

    cmake ×1

    compiler-optimization ×1

    linux ×1