fbpx
维基百科

迴圈判斷外提

迴圈判斷外提(英語: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]

參考資料 编辑

  1. ^ Keith Cooper; Linda Torczon. Engineering a Compiler. 2004: 520–521 [2021-07-31]. ISBN 9781558606982. (原始内容于2021-07-31). 
  2. ^ GCC 3.4 系列 — 更動、新功能與臭蟲修復. [2012-06-03]. (原始内容于2010-07-10). 

迴圈判斷外提, 英語, loop, unswitching, 是一種編譯器最佳化, 的方法, 將迴圈中的條件式移到迴圈之外, 否則, 式裡各放置一個原來迴圈的內容, 這可以增進迴圈平行處理的可能性, 以下是一個簡單的例子, 若程式碼想要將陣列, 相加, 並根據變數, 做別的事, 就有這種, 的程式碼, 1000, 1000, 1000, 因為有迴圈裡的條件式, 要安全的平行處理這個迴圈變得很困難, 若進行判斷外提, 這個迴圈會變成, 1000, 1000, 1000, else, 1000, 雖然迴圈外提會讓程式碼. 迴圈判斷外提 英語 loop unswitching 是一種編譯器最佳化 的方法 迴圈判斷外提將迴圈中的條件式移到迴圈之外 在 若 與 否則 式裡各放置一個原來迴圈的內容 這可以增進迴圈平行處理的可能性 1 以下是一個簡單的例子 若程式碼想要將陣列 x y 相加 並根據變數 w 做別的事 就有這種 C 的程式碼 int i w x 1000 y 1000 for i 0 i lt 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 lt 1000 i x i x i y i y i 0 else for i 0 i lt 1000 i x i x i y i 雖然迴圈外提會讓程式碼的量加倍 現在各個迴圈可以分別進行最佳化 迴圈外提在版本 3 4 引入 GCC 2 參考資料 编辑 Keith Cooper Linda Torczon Engineering a Compiler 2004 520 521 2021 07 31 ISBN 9781558606982 原始内容存档于2021 07 31 GCC 3 4 系列 更動 新功能與臭蟲修復 2012 06 03 原始内容存档于2010 07 10 取自 https zh wikipedia org w index php title 迴圈判斷外提 amp oldid 72892394, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。