區(qū)別來源于設(shè)計目標讨越,針對于應(yīng)用場景不同辙芍。
1. CPU : 需要有很強的通用性來處理各種不同的數(shù)據(jù)類型娇唯,同時又要邏輯判斷又會引入大量的分支跳轉(zhuǎn)和中斷的? ? ? 處理躏鱼。這些使得CPU的內(nèi)部結(jié)構(gòu)異常復(fù)雜。相比之下計算能力只是CPU的很小的一部分。
GPU : 面對的則是類型高度統(tǒng)一的督勺,相互依賴的大規(guī)模數(shù)據(jù)和不需要被打斷的純凈的計算環(huán)境渠羞。
Cache, local memory :? CPU > GPU
Threads : GPU > CPU
Registers : GPU > CPU 多寄存器可以支持非常多的的Threads, thread需要用到register智哀,thread數(shù)目大次询,? ? ? ? ? ? register也必須跟著大才行。
SIMD Unit (單指令多數(shù)據(jù)流瓷叫,以同步方式屯吊,在同一時間內(nèi)執(zhí)行同一條指令) : GPU > CPU
2.? 作者:知乎用戶
鏈接:https://www.zhihu.com/question/19903344/answer/96081382
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)摹菠,非商業(yè)轉(zhuǎn)載請注明出處盒卸。
GPU的工作大部分就是這樣,計算量大次氨,但沒什么技術(shù)含量蔽介,而且要重復(fù)很多很多次。就像你有個工作需要算幾億次一百以內(nèi)加減乘除一樣煮寡,最好的辦法就是雇上幾十個小學生一起算虹蓄,一人算一部分,反正這些計算也沒什么技術(shù)含量幸撕,純粹體力活而已薇组。而CPU就像老教授,積分微分都會算坐儿,就是工資高律胀,一個老教授資頂二十個小學生,你要是富士康你雇哪個貌矿?GPU就是這樣炭菌,用很多簡單的計算單元去完成大量的計算任務(wù),純粹的人海戰(zhàn)術(shù)逛漫。這種策略基于一個前提娃兽,就是小學生A和小學生B的工作沒有什么依賴性,是互相獨立的尽楔。很多涉及到大量計算的問題基本都有這種特性,比如你說的破解密碼第练,挖礦和很多圖形學的計算阔馋。這些計算可以分解為多個相同的簡單小任務(wù),每個任務(wù)就可以分給一個小學生去做娇掏。但還有一些任務(wù)涉及到“流”的問題呕寝。比如你去相親,雙方看著順眼才能繼續(xù)發(fā)展婴梧∠律遥總不能你這邊還沒見面呢客蹋,那邊找人把證都給領(lǐng)了。這種比較復(fù)雜的問題都是CPU來做的孽江⊙扰鳎 總而言之,CPU和GPU因為最初用來處理的任務(wù)就不同岗屏,所以設(shè)計上有不小的區(qū)別辆琅。而某些任務(wù)和GPU最初用來解決的問題比較相似,所以用GPU來算了这刷。GPU的運算速度取決于雇了多少小學生婉烟,CPU的運算速度取決于請了多么厲害的教授。教授處理復(fù)雜任務(wù)的能力是碾壓小學生的暇屋,但是對于沒那么復(fù)雜的任務(wù)似袁,還是頂不住人多。當然現(xiàn)在的GPU也能做一些稍微復(fù)雜的工作了咐刨,相當于升級成初中生高中生的水平昙衅。但還需要CPU來把數(shù)據(jù)喂到嘴邊才能開始干活,究竟還是靠CPU來管的所宰。
3. 什么類型的程序適合在GPU上運行绒尊?
? (1)計算密集型的程序。所謂計算密集型(Compute-intensive)的程序仔粥,就是其大部分運行時間花在了寄存器運算上婴谱,寄存器的速度和處理器的速度相當,從寄存器讀寫數(shù)據(jù)幾乎沒有延時躯泰√犯幔可以做一下對比,讀內(nèi)存的延遲大概是幾百個時鐘周期麦向;讀硬盤的速度就不說了瘟裸,即便是SSD, 也實在是太慢了。
? (2)易于并行的程序诵竭。GPU其實是一種SIMD(Single Instruction Multiple Data)架構(gòu)话告, 他有成百上千個核,每一個核在同一時間最好能做同樣的事情卵慰。