迴圈判斷外提

迴圈判斷外提（）是一種的方法。迴圈判斷外提將迴圈中的條件式移到迴圈之外，在「若」與「否則」式裡各放置一個原來迴圈的內容。這可以增進迴圈平行處理的可能性。

以下是一個簡單的例子。若程式碼想要將陣列 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];
    }
  }

雖然迴圈外提會讓程式碼的量加倍，現在各個迴圈可以分別進行最佳化。

迴圈外提在版本 3.4 引入 GCC。

參考資料 

編譯器最佳化