热门问题
时间线
聊天
视角
循环判断外提
来自维基百科,自由的百科全书
Remove ads
循环判断外提(英语:loop unswitching)是一种编译器优化的方法。循环判断外提将循环中的条件式移到循环之外,在“若”与“否则”式里各放置一个原来循环的内容。这可以增进循环平行处理的可能性。[1]
以下是一个简单的例子。若代码想要将数组 x、y 相加,并根据变量 w 做别的事,就有这种 C 的代码:
int i, w, x[1000], y[1000];
for (i = 0; i < 1000; i++) {
x[i] = x[i] + y[i];
if (w)
y[i] = 0;
}
因为有循环里的条件式,要安全的平行处理这个循环变得很困难。若进行判断外提,这个循环会变成:
int i, w, x[1000], y[1000];
if (w) {
for (i = 0; i < 1000; i++) {
x[i] = x[i] + y[i];
y[i] = 0;
}
} else {
for (i = 0; i < 1000; i++) {
x[i] = x[i] + y[i];
}
}
虽然循环外提会让代码的量加倍,现在各个循环可以分别进行优化。
Remove ads
参考资料
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads