循环判断外提

✍ dations ◷ 2024-12-22 23:41:30 #编译器最佳化

循环判断外提(英语:loop unswitching)是一种编译器最佳化(英语:compiller optimization)的方法。循环判断外提将循环中的条件式移到循环之外,在“若”与“否则”式里各放置一个原来循环的内容。这可以增进循环平行处理的可能性。

以下是一个简单的例子。若程式码想要将阵列 、 相加,并根据变数 做别的事,就有这种 C 的程式码:

  int i, w, x, y;  for (i = 0; i < 1000; i++) {    x = x + y;    if (w)      y = 0;  }

因为有循环里的条件式,要安全的平行处理这个循环变得很困难。若进行判断外提,这个循环会变成:

  int i, w, x, y;  if (w) {    for (i = 0; i < 1000; i++) {      x = x + y;      y = 0;    }  } else {    for (i = 0; i < 1000; i++) {      x = x + y;    }  }

虽然循环外提会让程式码的量加倍,现在各个循环可以分别进行最佳化。

循环外提在版本 3.4 引入 GCC。

相关