我已经使用 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?
如果一个函数非常大,并且从许多上下文中调用它,那么将此类函数内联到所有这些上下文将使可执行文件膨胀。如果可执行文件本身由于内联而有几千兆字节,那么从磁盘加载程序可能会成为瓶颈。
在病理性较小的情况下,权衡更为微妙。找出最佳极限的方法是测量。配置文件引导优化可以为优化器提供比简单硬限制更有用的启发式方法。
关于c++ - 英特尔编译器内联大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65889668/