热门问题
时间线
聊天
视角

回圈判断外提

来自维基百科,自由的百科全书

Remove ads

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

以下是一个简单的例子。若程式码想要将阵列 xy 相加,并根据变数 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];
    }
  }

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

回圈外提在版本 3.4 引入 GCC[2]

Remove ads

参考资料

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads