浮點運算器
編輯浮點單元(FPU,通俗地稱為數學協處理器)是專門設計用于對浮點數執行運算的計算機系統的一部分。 典型的運算有加法、減法、乘法、除法和平方根。 一些 FPU 還可以執行各種超越函數,例如指數或三角函數計算,但精度可能非常低,因此一些系統更喜歡在軟件中計算這些函數。
在通用計算機體系結構中,一個或多個 FPU 可以集成為中央處理器內的執行單元; 然而,許多嵌入式處理器沒有對浮點運算的硬件支持(雖然它們越來越多地將它們作為標準,至少是 32 位的)。
當 CPU 正在執行一個需要浮點運算的程序時,可以通過三種方式來執行:
- 一個浮點單元模擬器(一個浮點庫)
- 附加 FPU
- 集成 FPU
歷史
編輯1954 年,IBM 704 將浮點運算作為一項標準功能,這是其相對于其前身 IBM 701 的重大改進之一。這被繼承到其后繼產品 709、7090 和 7094。
1963 年,Digital 發布了 PDP-6,它以浮點作為標準功能。
1963 年,GE-235 配備了一個用于浮點和雙精度計算的輔助算術單元。
從歷史上看,一些系統使用協處理器而不是作為一個集成單元實現浮點(但現在除了 CPU 之外,例如 GPU——協處理器并不總是內置在 CPU 中——通常有 FPU,而xxx代 GPU 沒有 ')。 這可以是單個集成電路、整個電路板或機柜。 在沒有提供浮點計算硬件的情況下,浮點計算在軟件中完成,這需要更多的處理器時間,但避免了額外硬件的成本。 對于特定的計算機體系結構,浮點單元指令可以通過軟件功能庫來模擬; 這可能允許相同的目標代碼在有或沒有浮點硬件的系統上運行。 仿真可以在多個級別中的任何一個級別上實現:在 CPU 中作為微代碼(不常見),作為操作系統功能,或在用戶空間代碼中。 當只有整數功能可用時,最常用的是 CORDIC 浮點仿真方法。
在大多數現代計算機體系結構中,浮點運算與整數運算有一些劃分。 這種劃分因架構而異; 有些有專用的浮點寄存器,而有些,如 Intel x86,將其視為獨立的時鐘方案。
CORDIC 例程已在 Intel x87 協處理器(8087、80287、80387)直至 80486 微處理器系列中實現,以及在 Motorola 68881 和 68882 中用于某些類型的浮點指令,主要作為減少門數的一種方式 FPU 子系統的(和復雜性)。
浮點運算通常是流水線式的。 在沒有一般亂序執行的早期超標量架構中,浮點運算有時會與整數運算分開進行流水線處理。
Bulldozer 微架構的模塊化架構使用了一種名為 FlexFPU 的特殊 FPU,它使用同步多線程。 每個物理整數內核(每個模塊兩個)都是單線程的,這與英特爾的超線程形成對比,其中兩個虛擬同時線程共享單個物理內核的資源。
浮點庫
編輯Wikibooks 有一本書的主題是:Floating Point/Soft ImplementationsWikibooks 有一本書的主題是:Embedded Systems/Floating Point Unit
一些浮點硬件只支持最簡單的運算:加法、減法和乘法。 但即使是最復雜的浮點硬件也只能支持有限數量的運算——例如,沒有 FPU 直接支持任意精度算術。
當 CPU 正在執行調用硬件不直接支持的浮點運算的程序時,CPU 使用一系列更簡單的浮點運算。 在沒有任何浮點硬件的系統中,CPU 使用一系列在整數算術邏輯單元上運行的更簡單的定點算術運算來模擬它。
列出模擬浮點運算所需的一系列操作的軟件通常打包在浮點庫中。
集成 FPU
編輯在某些情況下,FPU 可能是專用的,分為更簡單的浮點運算(主要是加法和乘法)和更復雜的運算,如除法。 在某些情況下,只有簡單的操作可以用硬件或微碼來實現,而更復雜的操作則可以用軟件來實現。
內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/195874/