欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談linux kernel對于浮點運算的支持

 更新時間:2019年06月28日 11:05:48   作者:kerneler_  
今天小編就為大家分享一篇淺談linux kernel對于浮點運算的支持,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

目前大多數(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本身編譯默認使用了-msoft-float選項,默認編譯為軟浮點程序,軟浮點含義是有g(shù)cc編譯器模擬浮點運算(glibc庫提供),將浮點運算代碼替換為定點運算。

對于帶FPU的處理器,我們可以將編譯選項-msoft-float去掉,一般是在arch/xxx/Makefile中。將kernel編譯為硬浮點,也就是讓處理器的浮點指令計算浮點,

硬浮點運算肯定要比模擬的定點運算效率高。(kernel代碼中一般不會有浮點運算,所以效率影響不大)

2 對于運行在kernel上的app來說,特別是對于圖形程序,如QT,浮點運算較多,我們直接編譯即可,因為處理器支持浮點運算,支持浮點運算指令。

二 對于不帶FPU處理器

1 對于linux kernel來說,編譯默認使用了-msoft-float選項,默認編譯為軟浮點程序,linux kernel編譯不依賴鏈接任何庫,kernel中來實現(xiàn)對應(yīng)的模擬浮點ABI。

2 對于運行在kernel之上的app來說,如何處理浮點運算,這里就有2種方法了:

(1)由kernel來模擬軟浮點.

應(yīng)用程序使用硬浮點直接編譯(編譯器默認就是編譯成硬浮點程序)。

而對于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
  ...

這個是用來配置在內(nèi)核里面模擬浮點處理器。

具體ARM如何實現(xiàn)支持異常模擬軟浮點,具體實現(xiàn)有時間還需要仔細看代碼,在arch/arm/nwfpe中。

這樣的方式好處在于應(yīng)用程序不需要重新編譯,需要在kernel中把浮點模擬打開即可,使用起來非常方便。

但是缺點也很明顯,每次浮點操作都要觸發(fā)中斷異常,用戶空間和內(nèi)核空間切換,執(zhí)行效率太低。

(2)使用軟浮點重新編譯app

這樣可以避免上述問題,app編譯時需要連接glibc庫的,使用--msoft-float,使用glibc的模擬浮點,替換為定點運算,這樣的好處是運行性能上會好一些。

但缺點是因為使用了不同的編譯選項,使用的ABI可能就發(fā)生了變化,如果某個庫或者應(yīng)用沒有使用同樣的編譯選項(ABI不同),

系統(tǒng)運行時會出現(xiàn)意想不到的情況,甚至造成崩潰。

根據(jù)最近對PPC一款處理器的調(diào)試記錄,kernel正常啟動進入console后死在某一地址,用戶空間浮點運算多,詢問IC后得知FPU去掉,而處理器浮點異常沒有使能。

這樣遇到浮點指令,處理器不會觸發(fā)異常,也不知道該如何運行該指令。

所以進行kernel移植時對于處理器有無FPU也要搞清楚,如果處理器去掉了FPU,而核沒有做相應(yīng)的處理(使能浮點異常),那么APP的浮點指令運行結(jié)果就是無法預(yù)測的,這時可以采用軟浮點工具鏈來編譯APP。

這里有一點思考:

對于一款處理器,處理器設(shè)計中有浮點異常(MIPS PPC都是),其外也可以接FPU。

在接FPU后,處理器核內(nèi)就要屏蔽掉浮點異常,不然浮點運算還是產(chǎn)生浮點異常,F(xiàn)PU就沒有實用意義了。

無FPU,則處理器核內(nèi)要使能浮點異常,不然就跟我上面遇到的問題一樣,處理器不知道該如何運行該浮點指令,結(jié)果就無法預(yù)測了。

以上這篇淺談linux kernel對于浮點運算的支持就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Ubuntu18.04 linux系統(tǒng)安裝JDK與Mysql的方法

    Ubuntu18.04 linux系統(tǒng)安裝JDK與Mysql的方法

    這篇文章主要介紹了Ubuntu18.04 linux系統(tǒng)安裝JDK與Mysql的方法,需要的朋友可以參考下
    2020-02-02
  • Linux內(nèi)核設(shè)備驅(qū)動之字符設(shè)備驅(qū)動筆記整理

    Linux內(nèi)核設(shè)備驅(qū)動之字符設(shè)備驅(qū)動筆記整理

    今天小編就為大家分享一篇關(guān)于Linux內(nèi)核設(shè)備驅(qū)動之字符設(shè)備驅(qū)動筆記整理,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Apache上傳文件500錯誤的解決方法

    Apache上傳文件500錯誤的解決方法

    Apache 2.3.6開始,MaxRequestLen這個參數(shù)的默認值從之前的1GB(汗一個)調(diào)整到了131072字節(jié)(128KB)。于是上傳128KB以下的文件不會出問題,但是超過這個值就會報500錯誤了
    2014-04-04
  • 淺析Linux中crontab任務(wù)調(diào)度

    淺析Linux中crontab任務(wù)調(diào)度

    這篇文章主要介紹了Linux中crontab任務(wù)調(diào)度的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • 最新評論