最近在閱讀linux核心的龍芯改進版時,發現核心中有模擬浮點運算的模組 ,略作記錄。
在arch/mips/math-emu/目錄,核心用整數運算對浮點運算進行了模擬實現。這是為什麼?
原來,很多嵌入式晶元是沒有浮點運算的。這又是為什麼?浮點運算的功耗和成本是很大的,對於嵌入式晶元,這有時值得通過犧牲效率節約成本。
但是,這些運算在核心中實現,普通應用程式如何使用?使用者程序用到浮點運算時,首先編譯成浮點運算指令,但是晶元沒有這些指令,於是產生異常,異常的處理函式入口即為上述模組的入口(這是在核心初始化時設定的)。
於是,使用者態轉移到核心態進行模擬運算,將結果返回。但是,到這裡,都注意到了乙個問題:這個效率高嗎?
的確,這個效率比較低,原因有二:
每進行一次浮點運算,需要產生乙個異常,在使用者態與核心態切換;
核心模擬浮點運算是通過整形實現的,而且,對不同指令逐個進行case比較,這個效率也是相對一般的指令很低的。
由於以上問題,據稱,有的採用軟模擬,即以庫的形式進行鏈結。使用交叉編譯,給定正確引數,正如數學庫-lm這樣編譯,這樣免去了上述的異常切換。本人未曾涉獵,不作過多猜測。
ARM 浮點運算,軟浮點,硬浮點
很多時候我們要處理的資料,不僅僅是整數和字串,還有浮點數即小數。在多 資料處理方面表現的更多。是不是所有的cpu都支援,浮點運算呢?答案 不是。我們常常聽到贏浮點和軟浮點,這些到底說的是什麼呢?下面我們就來一 竟吧。在這裡我們說的是arm核浮點運算。1 硬浮點 hard float 編譯器將 直接編...
ARM 浮點運算
很多時候我們要處理的資料,不僅僅是整數和字串,還有浮點數即小數。在多 資料處理方面表現的更多。是不是所有的cpu都支援,浮點運算呢?答案 不是。我們常常聽到贏浮點和軟浮點,這些到底說的是什麼呢?下面我們就來一 竟吧。在這裡我們說的是arm核浮點運算。1 硬浮點 hard float 編譯器將 直接編...
ARM 浮點運算
很多時候我們要處理的資料,不僅僅是整數和字串,還有浮點數即小數。在多 資料處理方面表現的更多。是不是所有的cpu都支援,浮點運算呢?答案 不是。我們常常聽到贏浮點和軟浮點,這些到底說的是什麼呢?下面我們就來一 竟吧。在這裡我們說的是arm核浮點運算。1 硬浮點 hard float 編譯器將 直接編...