2011-08-29 15 views
1

如何使用gcc編譯代碼,gcc執行循環平鋪(Blocking)?默認情況下-O3優化不會執行循環平鋪。我需要在此標誌中啓用循環平鋪,並找出平鋪係數。 (例如立方平鋪或矩形平鋪),即內部平鋪啓發式。如何在gcc中啓用循環平鋪?

感謝

回答

1

您沒有提供GCC的確切版本,也沒有示例代碼,也沒有結果代碼,也沒有你看夠硬,在互聯網上,但可能這已經回答了你的問題:

條帶開採是一個優化,已被引入海灣合作委員會與graphite branch in version 4.4的合併。也the manual參見:

-floop條礦 上loops執行循環條帶開採轉換。條帶挖掘將一個循環分成兩個嵌套循環。外環具有與條形尺寸相等的步幅,而內環具有條形內原始環形的步幅。帶長度可以使用loop-block-tile-size參數進行更改。例如,給定像一個循環:

  DO I = 1, N 
      A(I) = A(I) + C 
      ENDDO 

循環條帶開採將改變環路,如果用戶寫了:

  DO II = 1, N, 51 
      DO I = II, min (II + 50, N) 
       A(I) = A(I) + C 
      ENDDO 
      ENDDO 

這種優化適用於所有GCC支持的語言並不限於Fortran。要使用此代碼轉換,必須使用--with-ppl和--with-cloog配置GCC以啓用Graphite循環轉換基礎結構。

您可以運行man gcc | grep '\-floop\-strip\-mine'來檢查它是否是受支持的選項。對於確切的gcc版本,輸入gcc --version

+0

我的gcc版本是4.4.5。我讀到flag -floop-block會執行代碼的阻塞。我的問題是,我們如何知道阻塞因素?有沒有可以在編譯時報告阻塞因素的標誌? – psteelk