為何CPU浮點計算能力差,什麼是浮點計算,GPU為何擅長浮點計算?

CPU GPU 英特爾 軟件 西部遊星 2018-12-01
為何CPU浮點計算能力差,什麼是浮點計算,GPU為何擅長浮點計算?

GPU比CPU去掉了大量非計算單元(去掉L3, 降低緩存容量,精簡控制器,降低分支能力和預測執行能力),增加了通用寄存器。其實CPU的浮點能力並不差,通常來說CPU的整數能力只是CPU浮點能力的2-5倍而已。

而GPU擅長浮點說的也不是很準確,其實GPU是擅長數值計算,不擅長應對分支和隨機訪存。通常GPU的int32能力並不會低於其float32能力。但是發揮GPU的計算能力需要批量化(向量化),連續訪存,同時計算任務不要有太多分支。

之所以有 CPU 浮點能力差的說法,想有兩個原因

  1. 通常需要大量浮點計算的場景都不是有複雜控制邏輯的場景,這些場景下對控制能力要求不高
  2. 一般的重邏輯的場景,不可避免的需要大量的整數計算。換句話說,需要大量整數計算的場景(相對需要浮點計算的場景)很有可能需要更大量分支和邏輯控制,也很有可能需要更多不連續訪存。

另外需要指出的是,現在CPU主頻通常比GPU高得多,所以CPU的功耗顯得高了一點。如果比較CPU和GPU同頻同功耗的性能,可能沒大家想象的那麼多。

為何CPU浮點計算能力差,什麼是浮點計算,GPU為何擅長浮點計算?

CPU的浮點能力一點也不差,其實比GPU還高,因為它的主頻高,Cache大。浮點運算本質上還是加減乘除運算。GPU浮點性能總體強大,是因為它的計算單元比CPU的大得多。CPU內部的浮點計算單元一般1-8個不等。而GPU內部則是幾百上千個。

浮點是什麼?是小數點的數字,這個沒錯但是關鍵區別在於它的格式。普通整數的表達方式很簡單,就是二進制的同一個數字而已,1是1,2是10,3是11,4是100之類的。但是計算機裡如何表示小數點?所謂浮點最重要的區別就是它是用科學計數法的,一個浮點數字被分為兩半,其中一半記錄一個數字,另一半記錄10的多少次方。比如1.56424可以寫成:

156424乘以10的-5次方

這樣就把一個小數變成了兩個整數,但是其中一個是負數,電腦怎麼表示負數?這個也簡單,比如說總共只有4位數,可以表達0-9999,可以把它分為兩半,定義其中4999表示0,4998表示-1,5000表示+1等等。這樣就可以表達-4999到+4999了。

還是剛才的小數1.56424,就可以把它寫成兩個整數:

156424,4994

這就是電腦裡的浮點數。很明顯當要相加這樣的兩個數字,程序和直接相加兩個整數是完全不同的,因為其中一部分是次方數,次方數不同的兩個數字不能相加,相同的相加出來的結果也可能影響次方數等等問題。當然可以寫一個軟件進行各種換算讓cpu的基本整數運算電路來算浮點,但是這樣很慢。更好的辦法是直接在處理器裡設置算浮點的電路,這就是現代cpu裡的fpu。

再看看剛才舉例的這個浮點數:

156424,4994

由於CPU的電路設計是基於位寬的,就是說這個數據有多少位數字,比如上面這個就是12位,實際上寫浮點數字的時候是有固定長度的。比如這個數字代表的小數是1.56424,在同樣格式的情況下是無法表達1.56424739的,多餘出來的位數只能直接丟掉。這也就是說浮點數據不是完全準確的,而是近似值

如果用基本的浮點指令去計算10除以3再乘以3,它會告訴是9.99999999。這就是因為浮點數據的有損特性。要緩解這個精度問題,只能提高位數,比如12位的浮點格式給改成20位。但是要一次計算20位長度的浮點,就需要更寬,更復雜的電路。實際使用的單精度浮點是32位,雙精度是64位。

英特爾的cpu計算浮點的時候內部精度是80位,輸出輸入還是64位。顯卡很多都是單精度32位的,就算支持64位的話速度一般會尿崩。專業計算卡現在一般都是64位。所以說第一個問題就是複雜程度,cpu的fpu率先支持了更高寬度的數據,電路更復雜。而顯卡一直以來都是在用單精度浮點,很多根本沒法執行雙精度運算。

第二個問題就是CPU的fpu是和邏輯單元同步的,這樣可以保證編程方面的兼容性,因為以前的機器一直是這麼搞的,老傳統了。核心數量和頻率都是同步的,每個fpu必須配對全套的邏輯,解碼單元等等。所以說cpu只能幾個核心。但是既然反正核心就那麼幾個,就可以把它做得異常強大,支持各種最寬的數據格式,可以用更少的步驟做三角函數,除法,開方之類的計算。

而相比之下顯卡基本就是大批大批的小型FPU,其他的東西能少就少。如果只做一道浮點運算,其實是cpu更快,而且可以塊非常多。但問題是通常來說浮點運算都是大批量的作,而且互相之間沒有關聯,一道題的結果和下一題的結果很少有關聯。這種情況下大批大批的小型fpu就有優勢了。

為何CPU浮點計算能力差,什麼是浮點計算,GPU為何擅長浮點計算?

為何CPU浮點計算能力差,什麼是浮點計算,GPU為何擅長浮點計算?

為何CPU浮點計算能力差,什麼是浮點計算,GPU為何擅長浮點計算?

為何CPU浮點計算能力差,什麼是浮點計算,GPU為何擅長浮點計算?

為何CPU浮點計算能力差,什麼是浮點計算,GPU為何擅長浮點計算?

為何CPU浮點計算能力差,什麼是浮點計算,GPU為何擅長浮點計算?

相關推薦

推薦中...