天天看點

為什麼現在更多需要用的是 GPU 而不是 CPU,比如挖礦甚至破解密碼?

作者:冰糖葫蘆娃

連結:https://www.zhihu.com/question/21231074/answer/17598768

來源:知乎

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

為什麼二者會有如此的不同呢?首先要從CPU和GPU的差別說起。

CPU和GPU之是以大不相同,是由于其設計目标的不同,它們分别針對了兩種不同的應用場景。CPU需要很強的通用性來處理各種不同的資料類型,同時又要邏輯判斷又會引入大量的分支跳轉和中斷的處理。這些都使得CPU的内部結構異常複雜。而GPU面對的則是類型高度統一的、互相無依賴的大規模資料和不需要被打斷的純淨的計算環境。

于是CPU和GPU就呈現出非常不同的架構(示意圖):

為什麼現在更多需要用的是 GPU 而不是 CPU,比如挖礦甚至破解密碼?

圖檔來自nVidia CUDA文檔。其中綠色的是計算單元,橙紅色的是存儲單元,橙黃色的是控制單元。

GPU采用了數量衆多的計算單元和超長的流水線,但隻有非常簡單的控制邏輯并省去了Cache。而CPU不僅被Cache占據了大量空間,而且還有有複雜的控制邏輯和諸多優化電路,相比之下計算能力隻是CPU很小的一部分。

是以與CPU擅長邏輯控制和通用類型資料運算不同,GPU擅長的是大規模并發計算,這也正是密碼破解等所需要的。是以GPU除了圖像處理,也越來越多的參與到計算當中來。

作者:rabbit

連結:https://www.zhihu.com/question/21231074/answer/20729629

來源:知乎

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

在計算機上運作的程式從性能的角度來說大緻可分為三類:(1) I/O intensive; (2) Memory intensive 以及 (3) Compute-intensive。

(1)I/O intensive的程式其性能瓶頸是I/O,也就是說程式運作的大部分時間花在了硬碟讀寫/網絡通信上,而I/O處在計算機體系結構金字塔的最底層,速度非常慢。最近炒的很火的big data 讨論的就是這一類應用程式。幾百TB 甚至到PB級别的資料往哪擱,隻能放在硬碟上。一台機器容量太小CPU太少怎麼辦,搞幾百台甚至上千台機器用網線連起來分布處理。是以這塊全是I/O, 現在大的網際網路公司不多搞幾個上千節點的叢集肯定撐不住。

(2)Memory intensive的程式其性能瓶頸在記憶體通路,程式中有大量的随機通路記憶體的操作,但是基本沒有I/O, 這類程式已經比第一類程式快一個數量級了,但是和寄存器的速度還是沒法比。目前大部分應用程式都屬于這類。個人電腦裡裝的的各種軟體基本就是這類,如果有點I/O, 立刻就會非常得卡。

以上提到的這兩類程式的應用最廣泛,涵蓋了大部分有用的計算機軟體,但遺憾的是GPU在這兩塊毫無用處, GPU隻有在計算密集型的程式有些作用。I/O是瓶頸的程式,花在計算的時間可以忽略不計,再怎麼用GPU加速也沒用。 含有大量記憶體随機通路的程式也不适合在GPU上執行,大量的随機通路甚至可以使GPU的行為由并行變為串行。

什麼類型的程式适合在GPU上運作?

(1)計算密集型的程式。所謂計算密集型(Compute-intensive)的程式,就是其大部分運作時間花在了寄存器運算上,寄存器的速度和處理器的速度相當,從寄存器讀寫資料幾乎沒有延時。可以做一下對比,讀記憶體的延遲大概是幾百個時鐘周期;讀硬碟的速度就不說了,即便是SSD, 也實在是太慢了。

(2)易于并行的程式。GPU其實是一種SIMD(Single Instruction Multiple Data)架構, 他有成百上千個核,每一個核在同一時間最好能做同樣的事情。

總體來說,GPU擅長的是且僅是成規模的并行計算,而不能并行執行的任務或者與控制相關的任務都與GPU離得很遠。GPU隻是個電腦,計算密集型的并行計算任務可以配置設定給它,但CPU是整個計算機進行計算與控制的核心

為什麼現在更多需要用的是 GPU 而不是 CPU,比如挖礦甚至破解密碼?

繼續閱讀