[英]C float type representation on fixed point hardware
如果 CPU 沒有浮點運算單元(如許多定點 DSP),C 編譯器如何處理float
類型及其操作?
我了解如何從浮點數轉換為定點數,但問題是關於定點硬件中浮點數的表示。
編輯
澄清問題:
如果變量是fixed point
類型,編譯器生成的代碼會理想地使用定點硬件指令,這是非常有效的,但如果變量是float
類型,編譯器需要有軟件實現,使用定點硬件指令來模擬浮動-指向並執行它?
C 編譯器如何處理浮點類型及其操作?
它使用浮點類型和操作的軟件模擬來實現浮點 - 往往很慢且代碼密集。 @ 0__________ @史蒂夫·薩米特
示例: GCC 低級運行庫@Eric Postpischil 中的軟件浮點
如果有足夠的時間和空間,即使是圖靈機也可以處理浮點類型及其操作。
如果變量是定點類型,編譯器生成的代碼將理想地使用定點硬件指令,這是非常有效的,但如果變量是浮點類型,編譯器需要有軟件實現,使用定點硬件指令來模擬浮點和執行嗎?
不完全的。 C 中沒有定點類型,因此編譯器無法生成使用它們的指令。 在具有定點類型的 CPU 中,在其 C 實現中,除了標准的char
、 short
、 long
... 之外,這些通常是單獨的內置類型,程序員需要將變量顯式聲明為定點。 例如
_fract
__fract
和__sfract
_Fract
_fixed
對於浮點類型,如果沒有可用的 FPU,將使用軟件仿真。 如果軟件 FPU 可以利用定點指令,那么它們當然會在幕后使用。 有些 CPU 同時具有定點和浮點,只要您使用正確的類型,硬件加速就會用於所有這些
事實上,DSP 都有特殊的memory 和寄存器配置,以最大化數據吞吐量。 他們經常有特殊的寄存器,如更長的累加器或 飽和類型。 在其 C 實現中,這些通常也將是單獨的內置類型。 例如,查看上面鏈接的文檔,您可以看到飽和類型的_Accum
和累加器的_Sat
之類的東西。 在 TI DSP 中,您通常可以看到用於累加器的__int40_t
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.