循环合并
【说明】 通过将针对相同索引和范围的循环语句合并从而减少循环控制的开销。
【注意事项】 在循环体的内容较大时进行循环合并,可能带来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;
}
父主题: 控制语句