當前位置: 華文星空 > 知識

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

2014-02-27知識

謹以此文紀念我的第一塊顯卡,nVidia Riva TNT2。

很久以前,大概2000年那時候,顯卡還被叫做圖形加速卡。一般叫做加速卡的都不是什麽核心元件,和現在蘋果使用的M7協處理器地位差不多。這種東西就是有了更好,沒有也不是不行,只要有個基本的圖形輸出就可以接顯視器了。在那之前,只有一些高端工作站和家用遊戲機上才能見到這種單獨的圖形處理器。後來隨著PC的普及,遊戲的發展和Windows這樣的市場霸主出現,簡化了圖形硬件廠商的工作量,圖形處理器,或者說顯卡才逐漸普及起來。

想要理解GPU與CPU的區別,需要先明白GPU被設計用來做什麽。現代的GPU功能涵蓋了圖形顯示的方方面面,我們只取一個最簡單的方向作為例子。

大家可能都見過上面這張圖,這是老版本Direct X帶的一項測試,就是一個旋轉的立方體。顯示出一個這樣的立方體要經過好多步驟,我們先考慮簡單的,想象一下他是個線框,沒有側面的「X」影像。再簡化一點,連線都沒有,就是八個點(立方體有八個頂點的)。那麽問題就簡化成如何讓這八個點轉起來。首先,你在創造這個立方體的時候,肯定有八個頂點的座標,座標都是用向量表示的,因而至少也是個三維向量。然後「旋轉」這個變換,線上性代數裏面是用一個矩陣來表示的。向量旋轉,是用向量乘以這個矩陣。把這八個點轉一下,就是進行八次向量與矩陣的乘法而已。這種計算並不復雜,拆開來看無非就是幾次乘積加一起,就是計算量比較大。八個點就要算八次,2000個點就要算2000次。這就是GPU工作的一部份,頂點變換,這也是最簡單的一部份。剩下還有一大堆比這更麻煩的就不說了。

GPU的工作大部份就是這樣,計算量大,但沒什麽技術含量,而且要重復很多很多次。就像你有個工作需要算幾億次一百以內加減乘除一樣,最好的辦法就是雇上幾十個小學生一起算,一人算一部份,反正這些計算也沒什麽技術含量,純粹體力活而已。而CPU就像老教授,積分微分都會算,就是薪金高,一個老教授資頂二十個小學生,你要是富士康你雇哪個?GPU就是這樣,用很多簡單的計算單元去完成大量的計算任務,純粹的人海戰術。這種策略基於一個前提,就是小學生A和小學生B的工作沒有什麽依賴性,是互相獨立的。很多涉及到大量計算的問題基本都有這種特性,比如你說的破解密碼,挖礦和很多圖形學的計算。這些計算可以分解為多個相同的簡單小任務,每個任務就可以分給一個小學生去做。但還有一些任務涉及到「流」的問題。比如你去相親,雙方看著順眼才能繼續發展。總不能你這邊還沒見面呢,那邊找人把證都給領了。這種比較復雜的問題都是CPU來做的。

總而言之,CPU和GPU因為最初用來處理的任務就不同,所以設計上有不小的區別。而某些任務和GPU最初用來解決的問題比較相似,所以用GPU來算了。GPU的運算速度取決於雇了多少小學生,CPU的運算速度取決於請了多麽厲害的教授。教授處理復雜任務的能力是碾壓小學生的,但是對於沒那麽復雜的任務,還是頂不住人多。當然現在的GPU也能做一些稍微復雜的工作了,相當於升級成初中生高中生的水平。但還需要CPU來把數據餵到嘴邊才能開始幹活,究竟還是靠CPU來管的。

至於如何將挖礦和破解密碼這種事情分成小學生都能做的簡單任務,就是程式設計師的工作了。所以以後誰再跟你說程式設計師的工作就是體力活,你可以直接抽他。

謝邀