浮點處理器

浮點處理器

在計算機科學中,浮點(floating point)是一種對於實數的近似值數值表現法,由一個有效數字(即尾數)加上冪數來表示,通常是乘以某個基數的整數次指數得到。浮點處理器是指專門用於處理浮點運算的處理器,在大多數計算機中,浮點處理器是協處理器。

簡介


浮點處理器是指計算機中用於處理浮點數運算的處理器,在大多數情況下,浮點處理器只是作為輔助處理器,完成中央處理器完成其無法執行或執行效率、效果低下的處理工作。在科學計算中,由於大部分計算都是浮點數運算,這時浮點處理器可以加快運算速度和提高系統執行效率,這時的浮點處理器一般也稱作定製處理器。

浮點數


定義

整數動態範圍
整數動態範圍
浮點型簡單講就是實數的意思。浮點數在計算機中用以近似表示任意某個實數。具體的說,這個實數由一個整數或定點數(即尾數)乘以某個基數(計算機中通常是2)的整數次冪得到,這種表示方法類似於基數為10的科學記數法。利用浮點進行運算,稱為浮點計算,這種運算通常伴隨著因為無法精確表示而進行的近似或舍入。
浮點數動態範圍
浮點數動態範圍
浮點數用於表示非整數數值。它由3個域組成:符號、指數、尾數。這種表示方法能夠極大拓展數值編碼的範圍,因此浮點數是處理實數的選擇。利用處理器中集成的浮點運算單元(FPU),可以加快浮點運算的速度。浮點的一種替代方案是定點,定點的指數域採用固定形式。但是,如果在沒有 FPU 的處理器上使用定點,儘管可以獲得更快的運算速度,但數值範圍和動態範圍較小。因此,在使用定點方法時,開發人員必須仔細檢查定點演演算法中的縮放比/飽和問題。C 語言為浮點運算提供 單精度和 雙精度兩種類型。matlab 或 scilab 等高級建模工具主要使用單精度或雙精度浮點生成 C 代碼。如果不支持浮點,則必須修改生成的代碼,使其適合定點。同時,所有浮點 運算代碼都需要由程序員手動編寫。在代碼中使用原生浮點運算時,可有效縮短項目的開發時間。浮點運算是實現任何數學演演算法有效的方法。

浮點運算單元

由於浮點運算適合兩個數之間的任何運算,因此它需要非常多的資源。例如,我們需要:
對齊兩個數值(使兩個數值的指數相同)執行運算;舍入結果;對結果進行編碼。
在沒有 FPU 的處理器上,這些運算全部由軟體通過 C 編譯器庫完成,並且對程序員不可見;但這樣做性能非常低。在有 FPU 的處理器上,對於大部分指令而言,所有運算都由硬體在單個周期內完成。C 編譯器不使用其自身的浮點庫,但會直接生成 FPU 原生指令。
在有 FPU 的處理器上執行數學演演算法時,程序員不必在性能和開發時間之間做出選擇。利用FPU,可以通過 matlab 或 scilab 等高級工具直接可靠地使用任何生成的代碼,同時確保實現性能。

標準

IEEE.754 單精度和雙精度浮點編碼
IEEE.754 單精度和雙精度浮點編碼
在計算機科學領域,浮點運算已有多年的使用歷史。早在上世紀三十年代末,德國的Konrad Zuse 開發 Z 系列計算機時,就已開始使用浮點運算。但是,由於支持浮點運算的硬體實現起來非常複雜,因此數十年來浮點運算一直沒有得到廣泛應用。上世紀五十年代中期,IBM 公司在其 704 大型機中引入 FPU;到七十年代,儘管已有 多種平台支持浮點運算,但這些平台都採用自己的編碼技術。1985 年,IEEE 發布了統一浮點運算的 754 標準,定義了支持浮點運算的通用方法。C 語言的浮點數類型 Float 和 Double 採納了IEEE754 標準中所定義的單精度 32 位浮點數和雙精度 64 位浮點數的格式。
數值格式
所有值均由三個域組成:
符號:s
偏置指數:
— 指數之和 = e
— 常數值 = 偏置值
小數(或尾數):f
可以使用各種長度對值進行編碼:
16 位:半精度格式
32 位:單精度格式
64 位:雙精度格式
IEEE 定義了五類不同的數:
規格化數:標準浮點數
IEEE.754 數值格式的取值範圍
IEEE.754 數值格式的取值範圍
非規格化數:非規格化數用於表示過小而無法規格化的值(當指數為 0 時)。
零:零值加上符號用於表示飽和運算(正或負)。指數和小數均為空。
無窮大:無窮大值加上符號用於表示 +∞ 或 -∞。溢出或除以 0 時會產生無窮大值。指數設置為其最大
值,尾數為空。
NaN(非數字):NaN 用於表示不明確的運算結果,例如 0/0 或負數的平方根。指數設置為其最大值,尾數不為空。尾數的 MSB 用於判斷該值是 QNaN(可通過後續運算傳播)還是 SNaN(生成錯誤)。
舍入模式
該標準定義了以下四種主要舍入模式:
最近舍入
向 +∞ 舍入
向 -∞ 舍入
向 0 舍入
最近舍入是默認的舍入模式(最常用)。如果與兩個最近值的距離相等,則選擇 LSB 等於 0的值。舍入模式會改變算數運算的結果,因此非常重要。可以通過 FPU 配置寄存器更改舍入模式。
異常和異常處理
該標準支持 5 種異常:
無效運算:運算結果為 NaN
除以零
上溢:根據舍入模式,運算結果為 +/-∞ 或 +/-最大值
下溢:運算結果為非規格化數
結果不準確:由舍入所致
可用兩種方式處理異常:
可以生成陷阱。陷阱處理程序會返回要使用的值來替代異常結果。
可以生成中斷。中斷處理程序不能返回要使用的值來替代異常結果。

協處理器


為了提高計算機運算速度,用來彌補微處理器在數值計算方面不足的浮點運算部件。是微處理器的一種。是一種協助中央處理器完成其無法執行或執行效率、效果低下的處理工作而開發和應用的處理器。這種中央處理器無法執行的工作有很多,比如設備間的信號傳輸、接入設備的管理等;而執行效率、效果低下的有圖形處理、聲頻處理等。為了進行這些處理,各種輔助處理器就誕生了。整數運算器與浮點運算器已經集成在一起,因此浮點處理器已經不算是輔助處理器。而內建於CPU中的協處理器,同樣不算是輔助處理器,除非它是獨立存在。