我启用时GCC会收集哪些信息-fprofile-generate,哪些优化确实使用了收集的信息(设置-fprofile-use标志时)?
我需要引用这里.我已经搜索了一段时间,但没有找到任何记录.
有关链接时间优化(LTO)的信息将是一个加号!= d
谁知道这个编译器功能?GCC似乎支持这一点.它是如何工作的?潜在收益是多少?在哪种情况下它很好?内环?
(这个问题是具体的,不是关于一般的优化,谢谢)
我目前正在权衡运行Chromium本地版本的潜在利弊。
我以前从未从源代码构建过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 /
最终,获得对硬件加速视频解码的支持可能是值得的。现在我很好奇的是执行此操作时要考虑的性能。
我有一个 C++ 程序,我正在使用 Clang 3.9 的配置文件引导优化功能构建它。这是应该发生的事情:
prof.raw。llvm-profdata用来转换prof.raw为一个新文件,prof.data.-fprofile-use=prof.data。-fprofile-use.为此,我有一个 Gnu Makefile,效果很好。我的问题出现了,因为我试图将该 Makefile 移植到 CMake(3.7,但我可以升级)。我需要使用(至少)Unix Makefiles 生成器的解决方案,但理想情况下它适用于所有生成器。
在 CMake 中,我定义了两个可执行目标:foo-gen和foo-use:
foo-gen被执行时,它创建的prof.raw文件。add_custom_command用来创建一个规则来创建prof.data从prof.raw.我的问题是我不知道如何告诉 CMake 依赖的每个目标文件foo-use都依赖于文件prof.data.
我最有希望的想法是 (1) 找到一种方法来枚举所有.o依赖的文件foo-use,然后 (2) 遍历每个.o文件,调用add_dependency每个文件。
这种方法的问题是我在我的 CMakeLists.txt …
我最近一直在研究 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中使用它的步骤是什么?(分步指南会有所帮助:)
我正在寻求有关 Clang 配置文件引导优化问题的帮助。我使用的是 clang++-3.7,但 clang++-3.6 仍然存在问题。
如果我尝试使用虚拟代码执行 PGO,一切都很好:
但随着项目规模的扩大,就会出现一些问题。我使用 makefile 和脚本来自动化该过程,但这是操作流程: