奔騰(R) 4 處理器主題循環展開

展開循環的好處如下:

展開循環的可能開銷如下:

彙編/編譯器編碼規則 12。(影響度 H,通用性 M)

通常情況下,將小循環一直展開到分支與歸納變數的開銷小於循環執行時間的約 10%。

彙編/編譯器編碼規則 13。(影響度 H,通用性 M)

避免過度展開循環,否則可能會導致 TC 反覆。

彙編/編譯器編碼規則 14。(影響度 M,通用性 M)將頻繁執行的循環與迭代次數可以預測的循環展開,使迭代次數降到 16 或更少,除非這會增加程式碼篇幅使得工作集不能再放入跟蹤快取。如果循環體包含一個以上的條件分支,則通過展開使迭代次數等於 16/(條件分支數)。

循環展開示例

以下循環展開示例顯示在進行展開的同時如何使其它優化方法成為可能:

展開之前:

do i=1,100

if (i mod 2 == 0) then a(i) = x

else a(i) = y

enddo

展開之後

do i=1,100,2

a(i) = y

a(i+1) = x

enddo

在本例中,執行 100 次的循環將 x 賦給偶數編號的每個元素,將 y 賦給每個奇數編號的元素。通過展開循環,可以在每個迭代中同時執行兩個賦值,從而消除循環體中的一個分支。