如何使用gcc編譯代碼,gcc執行循環平鋪(Blocking)?默認情況下-O3優化不會執行循環平鋪。我需要在此標誌中啓用循環平鋪,並找出平鋪係數。 (例如立方平鋪或矩形平鋪),即內部平鋪啓發式。如何在gcc中啓用循環平鋪?
感謝
如何使用gcc編譯代碼,gcc執行循環平鋪(Blocking)?默認情況下-O3優化不會執行循環平鋪。我需要在此標誌中啓用循環平鋪,並找出平鋪係數。 (例如立方平鋪或矩形平鋪),即內部平鋪啓發式。如何在gcc中啓用循環平鋪?
感謝
您沒有提供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
。
我的gcc版本是4.4.5。我讀到flag -floop-block會執行代碼的阻塞。我的問題是,我們如何知道阻塞因素?有沒有可以在編譯時報告阻塞因素的標誌? – psteelk