分支预测数值积分

时间:2015-09-13 07:17:57

标签: c++ optimization numeric

目前我正在编写一个依赖于Adams-Bashforth方程进行数值积分的程序:

void foo::simStep(double dt)
{
    // Prepare integration
    static unsigned long long int curCycle = 0;
    if(curCycle >= 2)
    {
        // Adams-Bashforth 3rd order
        stateArray += dt * (23.0 / 12.0 * statepArray.block<13, 1>(0, 0) -
                             4.0 /  3.0 * statepArray.block<13, 1>(0, 1) +
                             5.0 / 12.0 * statepArray.block<13, 1>(0, 2));
    }
    else if (curCycle == 1)
    {
        // Adams-Bashforth 2nd order
        stateArray += dt * (3.0 / 2.0 * statepArray.block<13, 1>(0, 0) -
                            1.0 / 2.0 * statepArray.block<13, 1>(0, 1));
    } 
    else
    {
        // Adams-Bashforth 1st order (Euler)
        stateArray += dt * statepArray.block<13, 1>(0, 0);
    }
    ++curCycle;
    // Calculate and set the outputs
}

这部分代码将以160Hz调用,因此分支错误预测的影响将非常高。

正如你所看到的那样,只有一次调用一阶和二阶方程(只要curCycle没有溢出),之后它总是第三个(第一个if)。

有没有更好的方法来处理这些问题?或者分支预测总是很好地预测这样的&#34; easy&#34;东西?

0 个答案:

没有答案