arm優化編譯參數選項解釋

CFLAGS +=  -Wall  -O2  -mcpu=cortex-a53  -mfloat-abi=softfp  -mfpu=neon-vfpv4  -mno-unaligned-access  -fno-aggressive-loop-optimizations -g -lmpi $(INC_FLAGS) $(LIBS)
-Wall:編譯警告信息顯示

-fno-aggressive-loop-optimizations:消除(或理解爲“不允許”)程序中的無限循環行爲

-mno-unaligned-access:進行對齊的memory訪問

Hi3519A具有浮點運算單元和neon,文件系統中的庫是採用軟浮點和neon編譯而成,因此所有板端代碼編譯時需要在Makefile裏面添加選項-mcpu=cortex-a53、-mfloat-abi=softfp和-mfpu=neon-vfpv4,下面分別講解這幾個參數作用:

-mfloat-abi=softfp

ABI即“application binary interface”,即編譯器將c代碼編譯成彙編代碼時使用的一種規則
使用規範如下:
在編譯帶有浮點參數的函數時,有三種可能的編譯選項:
-mfloat-abi=soft
-mfloat-abi=softfp
-mfloat-abi=hard
其中:
"soft"選項:表明不使用FPU硬件,而是使用GCC的整數算術運算來模擬浮點運算。
"softfp"選項:表明要使用FPU硬件來做浮點運算,只是,函數的參數傳遞到整數寄存器(r0-r3)中,然後再傳遞到FPU中。
"hard"選項:表明要使用FPU硬件來做浮點運算,並且,函數的參數直接傳遞到FPU的寄存器(s0、d0)中。

自動向量化選項
armcc編譯器使用–vectorize選項來使能向量化編譯,一般選擇更高的優化等級如-O2或者-O3就能使能–vectorize選項。
gcc編譯器的向量化選項-ftree-vectorize來使能向量化選項,使用-O3會自動使能-ftree-vectorize選項。

-mcpu=cortex-a53

它用於選擇處理器類型
使用 -A或者–cpu Cortex-a53來指定指令集架構和CPU類型。
選項-mfpu=neon和-mcpu來指定cpu類型。如-mcpu=cortex-a5

-mfpu=neon-vfpv4

它用於選擇NEON和VFP類型
gcc選擇用-mfpu=vfpv3-fp16來指定爲vfp協處理,而-mfpu=neon-vfpv4等就能指定爲NEON+VFP結構。

總結:

選擇浮點處理器和ABI接口類型
-mfloat-abi=soft:使用軟件浮點庫,不是用VFP或者NEON指令;
-mfloat-abi=softfp:使用軟件浮點的調用規則,而可以使用VFP和NEON指令,編譯的目標代碼和軟件浮點庫鏈接使用;
-mfloat-abi=hard:使用VFP和NEON指令,並且改變ABI調用規則來產生更有效率的代碼,如用vfp寄存器來進行浮點數據的參數傳遞,從而減少NEON寄存器和ARM寄存器的拷貝

查看處理器是否支持NEON

#cat /proc/cpuinfo

看是否有如下內容,其中所用的cpu所支持的特性:

其他參數:

參考:https://blog.csdn.net/rony2012/article/details/76614863

其中-Otime參數可能會報錯,改爲-Ofast,表示在-O2/-O3優化時,優先考慮執行速度進行優化

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章