详见:经排查发现,该优化pass(PTA)在gcc10得到显著优化改进(Compile-time and memory-hog hog[1])。解决方案:建议业务团队把编译器升级到gcc10以上版本。 我们将这段代码移植到对应的GCC10分支后同样解决了这个问题。 二进制文件大小的优化编译得到的mmfinderrecommend_1117_O2_PUSE二进制文件大小为2.6G,尽管相对于最初的GCC10 O2+LTO的3.6G减小了1G,还是显得有点大,分析二进制文件的具体内容可以发现 总结视频号推荐模块的PGO优化方案包含了编译器升级(GCC7 -> GCC10)和选项优化(PGO)两部分内容,在实施过程中面临了比较多的问题。
gcc升级 现在如果要想使用c++20(c++2a)的话起码要gcc10以上的版本呢才支持,但是一般服务器yum install自带的都是4.多版本,如果要升级gcc和g++需要手动编译 首先下载你想要的版本
我们看下方汇编代码,80个单字节的0,去掉volatile,在GCC10下直接做了5次的16字节0写入,而且没有循环。这就是C++编译器的优化魔法。
set (RLIMIT_AS 10000000000) # set CPU time limit to 600 seconds set (RLIMIT_CPU 600) # gcc10 /gcc10/clang -fsanitize=memory is too heavy if (SANITIZE STREQUAL "memory" OR COMPILER_GCC)