為什麼cpu的浮點計算能力差,什麼是浮點計算,gpu為什麼擅長浮點計算?

時間 2021-05-05 22:52:02

1樓:望山

GPU單個計算單元並不擅長浮點運算,它只是浮點運算器非常多而已。但是也只有遇到合適的演算法才能充分發揮GPU的浮點效能,並不是任何問題都能靠堆砌運算器來解決。

2樓:不胖的羊

CPU比GPU要兼顧的功能多,不同型別的指令需要的pineline長度不一樣,而浮點計算在CPU裡面的使用率不是太高,占用的pineline又特別長,所以大部分時候CPU都把能外包的浮點計算外包了,特別是3D計算所用的大量同質的浮點計算,都外包給了顯示卡這個血汗工廠。

實際上,單個浮點計算的話,CPU比GPU快不少,也準不少,只是CPU的核心有限,不能和GPU比量

3樓:王介

直觀來說,浮點運算就是帶小數的運算。

cpu為什麼沒有顯示卡擅長這個呢?因為cpu的功能並不止是算數,只會算數的那叫計算器,而乙個處理器,至少要有能力做邏輯判斷,事實上它的計算單元只佔了自己很小的一部分而已。而顯示卡,則是專門設計來算數的,其它方面能少則少。

簡單形容,cpu就是一位博士,什麼都能幹,而且又快又好,而顯示卡就是一百個小學生,啥都不會幹,就會加減乘除。你博士算數再牛b,也頂不住一百個小學生加起來的速度。

4樓:三銓三

浮點是什麼?其他答主說了是小數點的數字,這個沒錯但是關鍵區別在於它的格式。普通整數的表達方式很簡單,就是二進位制的同乙個數字而已,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就有優勢了。

5樓:章程

浮點就是小數。你說的準確講是單精度浮點計算能力,也就是FP32計算。在這一點上,CPU的確不如GPU。

Nvidia在新顯示卡中加入的tensor core單元,重點提高了顯示卡的半精度浮點運算能力,也就是FP16,一舉提公升了數倍(8倍?)。CPU擅長更高精度的運算,比如雙精度浮點運算能力(FP64)。

同價位下CPU都不怵GPU,主要還是近些年(遊戲)顯示卡的雙精度砍的太狠,現在應該已經把雙精度砍到單精度的1/128了,對於老顯示卡、專業顯示卡、CPU來說,雙精度都是單精度運算速度的1/2。

也就是說,GPU工作更專一,AI訓練需要半精度,就給你提高半精度。遊戲要整數和單精度,就給你數千核心並行運算。遊戲不需要雙精度,就給你砍掉,建模專業要雙精度,專業卡就給你保留。

CPU就不同,所有的髒活累活,慢活細活,他都要能幹。

6樓:那把殺豬刀

主要原因是CPU是作為通用計算核心來涉及的,那麼需要考慮的是什麼樣的場景應用最多,很明顯整型運算的優化會比浮點運算優化來的划算,另外暫存器的位寬也限制了浮點數的運算會消耗較多的訪問週期,浮點數一般是佔8個位元組或更多,64位CPU之前暫存器都是32位或者更少的,做一次浮點運算,取資料就得多等幾個週期,效率立馬就下來了。

GPU是用來渲染圖形影象的,圖形計算一般都是三角函式居多,整型計算很少,所以GPU一般都會選擇對於浮點運算進行加速(專用的硬體模組),另外GPU的暫存器的位寬一般也比CPU要長,對於浮點數來說,開銷更小。

7樓:勝勳

為什麼CPU的浮點計算能力差?

因為CPU核心數太少,現在主流只有4核心,也有16核心之類的,但還是無法跟GPU相比

什麼是浮點計算?

就是C語言裡的資料型別「float」啊

32位資料,其中8位表示「冪」,23位表示「有效數」

「浮點」的意思就是「小數點位置可變」

GPU為什麼擅長浮點運算?

因為GPU擁有很多的核心,下面對比圖中「綠色方塊」表示乙個計算單元比如,GTX1080顯示卡的GPU,擁有2560個核心(CPU只有4個哦)

為什麼 CPU 的浮點運算能力比 GPU 差,為什麼不提高 CPU 的浮點運算能力?

以前CPU弱,要是搞個浮點數運算的協處理器,運算速度跑的飛起。當然了,如果真為了計算,CPU一樣可以把ALU搞的很強大,不過沒必要。畢竟術業有專攻嘛,CPU主要是流程控制,而不是計算,然而GPU在處理光線之類的渲染的時候,會做大量的計算工作。 chapman zhang CPU是大學生,乙個大學生一...

現代CPU的浮點計算速度為什麼這麼快?

Bluebear Inst 327 X86 IMUL r16,r16L 1.17ns 2.3c T 0.39ns 0.78c Inst 328 X86 IMUL r32,r32L 1.09ns 2.2c T 0.39ns 0.78c Inst 329 AMD64 IMUL r64,r64L 1.17...

為什麼有人共情能力差?

裡小小最可愛 你這目的性太明顯了,你有沒有經歷過這樣的事情,一件東西找不到了,你使勁找使勁翻,最後無奈之下放棄了,你找不到很失落很難受。但是當你把這件事情拋在腦後之後,某一天你忽然在乙個角落找到了這個東西,那時候的愉快也是無可比擬的。你為了找到知己而找知己,但是因為種種原因,找不到,你就會難過,甚至...