編譯器

關於迴圈展開(loop unrolling)的主要效果,下列何者正確?

  1. A判斷次數與分支的開銷減少,指令也更容易重新排列
  2. B迴圈主體只剩一次份,程式的程式碼變小
  3. C將迴圈抽出成函式,使其能從其他地方呼叫
查看答案與解析

正確答案:A. 判斷次數與分支的開銷減少,指令也更容易重新排列

迴圈展開是一種最佳化,例如將迴圈主體並排寫出4次份,使重複次數成為原來的四分之一。判斷次數與分支的指令減少,而且並排的主體之間的指令可以組合後重新排列,因此較容易填補運算的等待時間。代價是程式碼變大,也可能擠壓指令快取。「主體剩一次份而使程式碼變小」是相反的說明,而將迴圈抽出成函式則是另一種轉換。

  • A. 正確。分支等開銷減少,指令更容易重新排列。
  • B. 因為並排了多份主體,程式碼反而會變大。
  • C. 抽出成函式是另一種轉換。
練習這個領域 前往領域頁面

編譯器的其他題目

  1. 在上方迴圈中,哪個計算會成為迴圈不變運算式搬移(搬到迴圈外)的對象?(假設 x、y 在迴圈內不會被更動)
  2. 對上方迴圈中的索引計算 i * 4 進行強度削減時,下列轉換何者正確?
  3. 上方迴圈難以使用SIMD指令向量化,其主要原因為何?
  4. 在上方函式中,編譯器無法直接進行把 *b 的讀取移到迴圈之外的最佳化,其原因為何?
  5. 在編譯器的暫存器配置中,使用對干涉圖著色(染色)的方法時,圖中的節點與邊所代表的事物,下列組合何者正確?

這個領域的比較