簡體   English   中英

適用於Linux的Xscale編譯器? (也是Xscale編譯標志的問題)

[英]Xscale compilers for Linux? (also Xscale compile flags question)

我目前正在使用基於GCC 3.3.3的交叉編譯器來為Xscale PXA270開發板進行編譯。 但是,我想知道是否還有其他在Linux(或Windows)上運行的Xscale編譯器? 我正在使用的交叉編譯器設置在目標設備上具有驚人的性能,某些程序在Xscale處理器上執行相當數量的數學運算,其性能要比在類似時鍾的奔騰2上差10到20倍。我應該在基於GCC的編譯器中設置哪些特定的編譯器標志,這可能會對性能有所幫助?

謝謝,本

與奔騰2不同,XScale體系結構沒有本機浮點指令。 這意味着必須使用整數指令來模擬浮點數學運算-大約10到20倍的減速速度聽起來是正確的。

為了提高性能,您可以嘗試以下幾種方法:

  • 在可能的情況下,盡量減少使用浮點數-在某些地方,您可以替換純整數或不動點計算;
  • 通過在可能的情況下預先計算值表來權衡內存以提高速度;
  • 在不需要精確度的計算中使用float而不是double (包括使用math.h函數的C99 float版本);
  • 最小化整數和浮點類型之間的轉換。

是的,您沒有FPU,因此需要在整數數學中完成浮點運算。 但是,有兩種機制可以做到這一點,一種機制比另一種機制快11倍。

GCC目標arm-linux-gnu通常在ARM的第一個FPU(“ FPA”)的代碼中包含實際的浮點指令,現在已經很少見了,根本不存在。 這些會導致非法指令陷阱,然后在內核中捕獲並模擬陷阱。 由於上下文切換,這非常慢。

-msoft-float而是插入對庫函數的調用(在libgcc.a中)。 這樣可以避免切換到內核空間,並且比仿真FPA指令快11倍。

您沒有說您正在使用什么浮點模型-可能是您已經在使用-msoft-float構建整個用戶區-但是可能值得檢查您的目標文件是否不包含FPA指令。 您可以通過以下方式進行檢查:

objdump -d file | grep '<space><tab>f' | less
其中file是編譯器輸出的任何目標文件,可執行文件或庫。 所有FPA指令都以f開頭,而其他ARM指令則沒有。 這些是實際的空格和制表符,您可能需要說<control-V><tab>才能使制表符超出您的外殼。

如果使用FPA insns,則需要使用-msoft-float編譯整個用戶范圍。

關於這些問題的最全面的進一步閱讀是http://wiki.debian.org/ArmEabiPort ,它主要涉及第三個替代方案:使用arm-linux-gnueabi編譯器,這是一種較新的替代ABI,可從gcc-4.1獲得。從1開始,它具有不同的特征。 有關更多詳細信息,請參見文檔。

“其他xscale編譯器”

開源:llvm和pcc,其中llvm是對Linux最友好和最實用的功能,並且還具有gcc前端; pcc是可移植的C編譯器的后代,似乎更面向bsd。

商業:Keil編譯器(ARM Ltd擁有)似乎比GCC生成更快的代碼,但是不會顯着影響您缺少FPU的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM