簡體   English   中英

C 定點硬件上的浮點型表示

[英]C float type representation on fixed point hardware

如果 CPU 沒有浮點運算單元(如許多定點 DSP),C 編譯器如何處理float類型及其操作?

我了解如何從浮點數轉換為定點數,但問題是關於定點硬件中浮點數的表示。

編輯

澄清問題:

如果變量是fixed point類型,編譯器生成的代碼會理想地使用定點硬件指令,這是非常有效的,但如果變量是float類型,編譯器需要有軟件實現,使用定點硬件指令來模擬浮動-指向並執行它?

C 編譯器如何處理浮點類型及其操作?

它使用浮點類型和操作的軟件模擬來實現浮點 - 往往很且代碼密集。 @ 0__________ @史蒂夫·薩米特

示例: GCC 低級運行庫@Eric Postpischil 中的軟件浮點

如果有足夠的時間和空間,即使是圖靈機也可以處理浮點類型及其操作。

如果變量是定點類型,編譯器生成的代碼將理想地使用定點硬件指令,這是非常有效的,但如果變量是浮點類型,編譯器需要有軟件實現,使用定點硬件指令來模擬浮點和執行嗎?

不完全的。 C 中沒有定點類型,因此編譯器無法生成使用它們的指令。 在具有定點類型的 CPU 中,在其 C 實現中,除了標准的charshortlong ... 之外,這些通常是單獨的內置類型,程序員需要將變量顯式聲明為定點。 例如

對於浮點類型,如果沒有可用的 FPU,將使用軟件仿真。 如果軟件 FPU 可以利用定點指令,那么它們當然會在幕后使用。 有些 CPU 同時具有定點和浮點,只要您使用正確的類型,硬件加速就會用於所有這些


事實上,DSP 都有特殊的memory 和寄存器配置,以最大化數據吞吐量。 他們經常有特殊的寄存器,如更長的累加器飽和類型 在其 C 實現中,這些通常也將是單獨的內置類型。 例如,查看上面鏈接的文檔,您可以看到飽和類型的_Accum和累加器的_Sat之類的東西。 在 TI DSP 中,您通常可以看到用於累加器__int40_t

您可以在使用 C 編程 DSP 中找到有關非標准類型(包括定點)的編譯器實現的更多信息:效率和可移植性權衡

暫無
暫無

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

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