在具有优化级别 3 的英特尔编译器上强制创建方法

Force creation of method on intel compiler with optimization level 3

处理通常使用优化级别 3 编译的 +95% C++ 11 代码(其余为 C),我们对其进行了概要分析,发现了一种非常耗时的方法。

玩具代码:

myClass::mainMethod()
{
    // do stuff here
    / ...
    // do more stuff here
    / ...
}

我们将其内部部分拆分为其他方法,以便精确测量出问题的部分,例如

myClass::mainMethod()
{
    this->auxiliaryMethod1();
    this->auxiliaryMethod2();
}
myClass::auxiliaryMethod1()
{
    // do stuff here
    // ...
}
myClass::auxiliaryMethod2()
{
    // do more stuff here
    // ...
}

但是(英特尔)编译器足够聪明,可以注意到这唯一的用法,并且 assemble 将它重新组合成一个方法。

除了这两个明显的其他可能解决方案,即未经优化编译(不现实)和添加其他虚假用法(浪费过程)之外,是否有一个英特尔编译器标志来指示“请将此方法显式编码到 class"???

谢谢!

正如评论所建议的那样,使用属性 noinline 进行拆分就可以了。

void __attribute__((noinline)) myClass::mainMethod()
{
    this->auxiliaryMethod1();
    this->auxiliaryMethod2();
}
void __attribute__((noinline)) myClass::auxiliaryMethod1()
{
    // do stuff here
    // ...
}
void __attribute__((noinline)) myClass::auxiliaryMethod2()
{
    // do more stuff here
    // ...
}