首页 > 解决方案 > 了解 GCC 内联

问题描述

我一直在尝试重构一些中等大小的低级代码,我不能说我对编译器优化器内联代码的方式太满意了。

我不太了解 gcc 如何内联代码,但对于我的一个特殊情况,通过使用以下选项,我获得的运行时速度与 gcc 8.2.1 中的手写代码相当:

-std=c++17 -Winline 
-Ofast -march=native -DNDEBUG 
-finline-limit=100000 --param large-function-insns=10000 --param large-stack-frame-growth=1000 
--param inline-unit-growth=1000 --param early-inlining-insns=150 --param max-early-inliner-iterations=1000
-fopenmp -fPIC

如果没有内联选项,我的程序会慢 3 倍。我本来希望有一个更简单的选项来告诉编译器“相信我,当我说内联时,你必须内联它”。有这样的编译器选项吗?

笔记:

现在我注意到一些奇怪的行为:

如何强制 gcc 内联我的所有inline函数?即使在概念上,我也不明白为什么编译器在手动操作看起来如此简单的情况下内联如此困难。内联是否存在可伸缩性优化问题?

标签: c++g++openmpinline

解决方案


推荐阅读