目前大多數(shù)CPU都支持浮點運算單元FPU,F(xiàn)PU作為一個單獨的協(xié)處理器放置在處理器核外,但是對于嵌入式處理器,浮點運算本來就少用,有些嵌入式處理器就會去掉浮點協(xié)處理器。
X86處理器一般都是有FPU的。而ARM PPC MIPS處理器就會出現(xiàn)沒有FPU的現(xiàn)象。
linux kernel如何處理浮點運算,我們就分為帶FPU的處理器和不帶FPU的處理器來討論。
(以下為個人知識總結(jié),研究不深,錯誤之處希望大家指正,共同學(xué)習(xí))
一 對于帶FPU的處理器
1 對于linux kernel來說,kernel本身編譯默認(rèn)使用了-msoft-float選項,默認(rèn)編譯為軟浮點程序,軟浮點含義是有g(shù)cc編譯器模擬浮點運算(glibc庫提供),將浮點運算代碼替換為定點運算。
對于帶FPU的處理器,我們可以將編譯選項-msoft-float去掉,一般是在arch/xxx/Makefile中。將kernel編譯為硬浮點,也就是讓處理器的浮點指令計算浮點,
硬浮點運算肯定要比模擬的定點運算效率高。(kernel代碼中一般不會有浮點運算,所以效率影響不大)
2 對于運行在kernel上的app來說,特別是對于圖形程序,如QT,浮點運算較多,我們直接編譯即可,因為處理器支持浮點運算,支持浮點運算指令。
二 對于不帶FPU處理器
1 對于linux kernel來說,編譯默認(rèn)使用了-msoft-float選項,默認(rèn)編譯為軟浮點程序,linux kernel編譯不依賴鏈接任何庫,kernel中來實現(xiàn)對應(yīng)的模擬浮點ABI。
2 對于運行在kernel之上的app來說,如何處理浮點運算,這里就有2種方法了:
(1)由kernel來模擬軟浮點.
應(yīng)用程序使用硬浮點直接編譯(編譯器默認(rèn)就是編譯成硬浮點程序)。
而對于kernel,我所了解的PPC MIPS處理器都有專門的浮點運算異常處理,程序運行碰到浮點指令,無法運行浮點指令時,硬件會產(chǎn)生相應(yīng)的中斷異常,kernel浮點異常處理程序根據(jù)指令內(nèi)容進行軟浮點模擬操作,將運算結(jié)果返回之后再恢復(fù)到用戶空間執(zhí)行。
對于ARM我在其異常介紹中沒有找到對于浮點計算的異常入口,但是kernel中也有對于其軟浮點的支持,
在配置ARM Linux內(nèi)核時,應(yīng)該都會看到這樣的配置:
menu "Floating point emulation" comment "At least one emulation must be selected" config FPE_NWFPE ...
新聞名稱:淺談linuxkernel對于浮點運算的支持-創(chuàng)新互聯(lián)
分享地址:http://chinadenli.net/article34/djgdpe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、Google、網(wǎng)站營銷、域名注冊、App設(shè)計、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容