鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

循环合并

【说明】 通过将针对相同索引和范围的循环语句合并从而减少循环控制的开销。

【注意事项】 在循环体的内容较大时进行循环合并,可能带来I-Cache命中率恶化的风险;

【案例】

优化前
int Calc(int *left, int *right, int bound)
{
    ...
    int sumX = 0;
    for (int i = 0; i < bound; ++i) {
        sumX += left[i] > right[i] ? left[i] : right[i];
    }

    int sumY = 0;
    for (int i = 0; i < bound; ++i) {
        sumY += left[i] < right[i] ? left[i] : right[i];
    }
    return sumX / sumY;
}
优化后
int Calc(int *left, int *right, int bound)
{
    ...
    int sumX = 0;
    int sumY = 0;
    for (int i = 0; i < bound; ++i) {
        sumX += left[i] > right[i] ? left[i] : right[i];
        sumY += left[i] < right[i] ? left[i] : right[i];
    }
    return sumX / sumY;
}