ARMCortexgcc參數(shù)_第1頁
ARMCortexgcc參數(shù)_第2頁
ARMCortexgcc參數(shù)_第3頁
ARMCortexgcc參數(shù)_第4頁
ARMCortexgcc參數(shù)_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、ARMCortexgcc參數(shù)面向ARM處理器的GNU編譯器集合(GCC)命令行選項最初是在多年前設(shè)計的,當(dāng)時可用處理器和變體產(chǎn)品的列表與現(xiàn)今相比要短很多。隨著ARM架構(gòu)的演進,從GCC中獲取最佳代碼所需的選項也已改變,但已做了各種嘗試以確?,F(xiàn)有選項集不會改變其本意。設(shè)計編譯器意味著最有效使用ARMCortexTM-A處理器所需的選項目前相當(dāng)復(fù)雜。本博文包含GCC命令行選項的三個方面:CPU、浮點和SIMD(單指令多數(shù)據(jù))加速。就我的CPU而言應(yīng)當(dāng)使用哪些選項?首先,讓我們了解下用于告知編譯器您正在使用的CPU的主要選項;稍后,我們將討論一些在特殊情況下可使用的更高級選項。每當(dāng)您編譯文件時,編譯

2、器都需要知道您試圖用于運行目標(biāo)代碼的CPU的類型。實現(xiàn)這一目的的首選為-mcpu=<cpu-name>選項。正如您預(yù)想的那樣,cpu-name已替換為您擁有的CPU類型的具體名稱,但使用小寫。例如,對于Cortex-A9而言,選項為-mcpu=cortex-a9。GCC目前支持Cortex-A15(包括其本身在內(nèi))之前的所有Cortex-A處理器;即:Cortex-A5-mcpu=cortex-a5Cortex-A7-mcpu=cortex-a7Cortex-A8-mcpu=cortex-a8Cortex-A9-mcpu=cortex-a9Cortex-A15-mc

3、pu=cortex-a15如果您的GCC版本不識別上述任一處理器,則可能是其版本過低,您應(yīng)當(dāng)考慮進行升級。如果您不指定要使用的CPU,GCC將使用內(nèi)置的默認(rèn)值-該默認(rèn)值根據(jù)編譯器最初的構(gòu)建方式而變化,并且可能意味著已生成代碼在您所擁有的CPU上的執(zhí)行速度將非常緩慢(或根本無法執(zhí)行)添加浮點和SIMD目前,市面上的所有ARMCortex-A處理器均配備浮點運算單元,大多數(shù)還擁有可實施ARM高級SIMD處理器擴展的SIMD單元(通常稱為NEONTM)。但是,可用的精確指令集取決于擁有的處理器,而且GCC需要單獨的選項來進行控制;它不會嘗試通過-mcpu選項進行處理。浮點和SIMD指令的選擇由-mc

4、pu選項控制,下表列出了各種CPU的建議選擇項:VFPv3和VFPv4實施最初通過32個雙精度寄存器開始,但是在沒有NEON時,則可以任選前16個寄存器;這由選項名的d16部分所控制的。該名稱的fp16部分指定是否存在半精度(16位)浮點負(fù)載、存儲和轉(zhuǎn)換指令;這是對VFPv3的擴展,但適用于所有VFPv4實施。出于歷史原因,GCC只在被明確告知可以安全使用浮點和NEON指令時才會使用這些指令。在此進行控制的選項有些令人混淆,選項的一部分也可更改編譯器所遵守的ABI。-mfloat-abi選項有三種可能的選項:-mfloat-abi=soft-忽略所有FPU和NEON指令,僅使用核心寄存器集并利

5、用庫調(diào)用模擬所有浮點運算。-mfloat-abi=softfp-使用與-float-abi=soft相同的調(diào)用規(guī)則,但會在適用情況下使用浮點和NEON指令。此選項為二進制,與-mfloat-abi=soft兼容,并且可以用于提高必須遵循軟浮點環(huán)境的代碼的性能,但需要是已知相關(guān)硬件指令也可用的環(huán)境。-mfloat-abi=hard-在適用情況下使用浮點和NEON指令,并且還更改ABI調(diào)用規(guī)則以便生成更高效的函數(shù)調(diào)用;現(xiàn)在可以在擴展寄存器中的函數(shù)之間傳遞浮點和矢量類型,不僅節(jié)約大量復(fù)制操作,而且也意味著需要在堆棧上傳遞參數(shù)的調(diào)用變少。應(yīng)當(dāng)使用上述哪個選項在很大程度上取決于您的目標(biāo)系統(tǒng),也可能默認(rèn)選

6、項就是正確的選項。以Ubuntu12.04(Precise)為例,其目前在默認(rèn)情況下使用的是-mfloat-abi=hard。矢量化浮點運算NEON架構(gòu)包含同時對整數(shù)和浮點數(shù)據(jù)類型進行運算的指令,并且GCC目前擁有功能強大的自動矢量化優(yōu)化,可發(fā)現(xiàn)何時適合使用可改善性能的矢量引擎。不過,讓許多用戶驚訝的是,即使他們可能期望這么做,編譯器也無法將其代碼矢量化。首先要記住的是,自動矢量化程序只有在-O3時才默認(rèn)啟用。存在可以在其他時候?qū)⑺蜷_的選項;您可以在GCC手冊中找到相關(guān)內(nèi)容。然而,即使啟用了矢量化程序,浮點代碼經(jīng)常也無法實現(xiàn)矢量化。原因在于,盡管NEON中的浮點運算使用IEEE單精度格式來容

7、納值,但為了最大限度降低NEON單元中所需的功率并且最大限度提高吞吐量,只有在輸入和結(jié)果在正常運算范圍內(nèi)(即值不是非正常值或NaN)時,矢量引擎才會完全按照標(biāo)準(zhǔn)進行編譯。GCC默認(rèn)配置為生成嚴(yán)格遵守IEEE浮點算法規(guī)范的代碼,前文所述的限制意味著默認(rèn)使用SIMD指令是不適當(dāng)?shù)?。幸運的是,GCC確實提供了多個命令行選項,可用于準(zhǔn)確控制需要的IEEE標(biāo)準(zhǔn)遵守級別。盡管具體細(xì)節(jié)不在此討論,但在大多數(shù)情形中,使用-ffast-math選項來放寬規(guī)則并啟用矢量化是絕對安全的。您也可以在GCC4.6或更高版本中使用-Ofast選項來實現(xiàn)基本相同的效果。它會打開-O3以及多種其他優(yōu)化,通常可以安全地用于從您

8、的代碼中獲得最佳的性能。要記住的另一點是,NEON僅支持單精度數(shù)據(jù)的矢量運算。除非寫入的代碼用于處理這一格式,否則可能會發(fā)現(xiàn)矢量化并不可行。您也應(yīng)當(dāng)了解,浮點常量(字面值)最終會強制編譯器以雙精度執(zhí)行計算。在C和C+環(huán)境下,編寫'1.0F'而非'1.0'以確保編譯器知道您的意思。最后,如果對于找出矢量化程序為何不按您預(yù)期運作的原因依然存有疑問,而且您也準(zhǔn)備好親自動手探究,GCC對于其所作的行為提供了非常豐富的信息。-fdump-tree-vect和-ftree-vectorizer-verbose=<level>選項控制所生成的信息量

9、,級別是1到9范圍內(nèi)的數(shù)字。盡管生成的大多數(shù)信息只有編譯器開發(fā)人員才會感興趣,但您不時也會在輸出結(jié)果中找到提示,了解您的代碼不能按預(yù)期矢量化的原因。總而言之既然擁有大量選項,那我在日常運算中應(yīng)使用哪些選項呢?幸運的是,目標(biāo)環(huán)境一旦確定后,大多數(shù)選項就不會定期發(fā)生變化了。以下是一些示例:含NEON的Cortex-A15處理器,以及操作使用“浮點”數(shù)據(jù)類型的數(shù)據(jù)陣列的一些浮點代碼。該運算環(huán)境可以支持在浮點寄存器中傳遞參數(shù):arm-gcc-O3-mcpu=cortex-a15-mfpu=neon-vfpv4-ffast-math-omyprog.exemyprog.c不含NEON的Cortex-A7處理器,處理浮點代碼。該運算環(huán)境僅支持在整數(shù)寄存器中傳遞參數(shù),但可以使用浮點硬件arm-gcc-O3-mcpu=cortex-a7-mfpu=vfpv4-d16-mfloat-abi=softfp-omyprog2.exem

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論