英特尔编译器内联大小
Intel compiler inline size
我用 g++
编译我的代码有一段时间了,然后转向英特尔的 icpc
编译器。使用 icpc
我不断收到以下警告:
remark #11074: Inlining inhibited by limit max-size
remark #11074: Inlining inhibited by limit max-total-size
我在使用 g++
时从未遇到过这个问题。经过一些研究,我了解到我可以使用 -no-inline-max-total-size
和 -no-inline-total-size
进行编译以避免内联大小的限制。我的问题是,尽可能多地删除内联和内联的大小是否始终是一个好习惯?我的代码计算量大,性能是关键,因此我的常识告诉我应该允许编译器尽可能多地内联。真的吗?是否存在施加内联限制有用的情况?
My question is whether it is always a good practice to remove sizes on inlining and inline as much as possible?
不,取消内联的大小限制或尽可能多地内联并不总是一个好习惯。
理想情况下,只有在提高性能时才应进行内联。
Are there situations at all where imposing an inlining limit is useful?
如果一个函数非常大,并且它被许多上下文调用,那么将这样的函数内联到所有这些上下文将使可执行文件膨胀。如果可执行文件本身由于内联而比方说几千兆字节,那么从磁盘加载程序可能成为瓶颈。
在不太病态的情况下,权衡更微妙。找出最佳限制的方法是测量。配置文件引导优化可以为优化器提供比简单的硬限制更有用的启发式方法。
我用 g++
编译我的代码有一段时间了,然后转向英特尔的 icpc
编译器。使用 icpc
我不断收到以下警告:
remark #11074: Inlining inhibited by limit max-size
remark #11074: Inlining inhibited by limit max-total-size
我在使用 g++
时从未遇到过这个问题。经过一些研究,我了解到我可以使用 -no-inline-max-total-size
和 -no-inline-total-size
进行编译以避免内联大小的限制。我的问题是,尽可能多地删除内联和内联的大小是否始终是一个好习惯?我的代码计算量大,性能是关键,因此我的常识告诉我应该允许编译器尽可能多地内联。真的吗?是否存在施加内联限制有用的情况?
My question is whether it is always a good practice to remove sizes on inlining and inline as much as possible?
不,取消内联的大小限制或尽可能多地内联并不总是一个好习惯。
理想情况下,只有在提高性能时才应进行内联。
Are there situations at all where imposing an inlining limit is useful?
如果一个函数非常大,并且它被许多上下文调用,那么将这样的函数内联到所有这些上下文将使可执行文件膨胀。如果可执行文件本身由于内联而比方说几千兆字节,那么从磁盘加载程序可能成为瓶颈。
在不太病态的情况下,权衡更微妙。找出最佳限制的方法是测量。配置文件引导优化可以为优化器提供比简单的硬限制更有用的启发式方法。