NVIDIA 近日宣布,,NVIDIA? Tesla? AI 超級計算機平臺將為最新一期的全球最節(jié)能高性能計算 (HPC) 系統(tǒng) Green500 榜單中排名前 13 的系統(tǒng)提供動力支持。所有這 13 臺計算機均使用 NVIDIA Tesla P100 數(shù)據(jù)中心 GPU 加速器,,其中便包括基于 NVIDIA DGX-1? AI 超級計算機的四個系統(tǒng),。
NVIDIA還公布一些性能數(shù)據(jù),這些數(shù)據(jù)表明,,相比兩年前發(fā)布的 Kepler 架構(gòu),,NVIDIA Tesla GPU 已將 HPC 應(yīng)用程序的性能提升 3 倍之多。這大大超越摩爾定律對于性能提升的預(yù)測,,甚至在其近些年開始減速之前便已如此,。 很多人有這樣的疑問,現(xiàn)在像挖礦,、破解密碼甚至超級計算等領(lǐng)域,,越來越多地需要用的是 GPU 而不是 CPU,,是不是CPU被GPU取代的一天就要到來了,?
CPU和GPU簡介
中央處理器(英文Central Processing Unit,,CPU)是一臺計算機的運算核心和控制核心,。CPU、內(nèi)部存儲器和輸入/輸出設(shè)備是電子計算機三大核心部件,。其功能主要是解釋計算機指令以及處理計算機軟件中的數(shù)據(jù),。CPU由運算器、控制器和寄存器及實現(xiàn)它們之間聯(lián)系的數(shù)據(jù),、控制及狀態(tài)的總線構(gòu)成,。差不多所有的CPU的運作原理可分為四個階段:提取(Fetch),、解碼(Decode),、執(zhí)行(Execute)和寫回(Writeback)。 CPU從存儲器或高速緩沖存儲器中取出指令,,放入指令寄存器,,并對指令譯碼,并執(zhí)行指令,。所謂的計算機的可編程性主要是指對CPU的編程,。
計算機求解問題是通過執(zhí)行程序來實現(xiàn)的。程序是由指令構(gòu)成的序列,,執(zhí)行程序就是按指令序列逐條執(zhí)行指令,。一旦把程序裝入主存儲器(簡稱主存)中,就可以由CPU自動完成從主存取指令和執(zhí)行指令的任務(wù),。 CPU具有以下4個方面的基本功能:
1,、指令順序控制
這是指控制程序中指令的執(zhí)行順序。程序中的各指令之間是有嚴(yán)格順序的,,必須嚴(yán)格按 程序規(guī)定的順序執(zhí)行,,才能保證計算機工作的正確性。
2,、操作控制
一條指令的功能往往是由計算機中的部件執(zhí)行一序列的操作來實現(xiàn)的,。CPU要根據(jù)指令的功能,產(chǎn)生相應(yīng)的操作控制信號,,發(fā)給相應(yīng)的部件,,從而控制這些部件按指令的要求進行動作。
3,、時間控制
時間控制就是對各種操作實施時間上的定時,。在一條指令的執(zhí)行過程中,在什么時間做什么操作均應(yīng)受到嚴(yán)格的控制,。只有這樣,,計算機才能有條不紊地自動工作。
4,、數(shù)據(jù)加工
即對數(shù)據(jù)進行算術(shù)運算和邏輯運算,,或進行其他的信息處理,。CPU從存儲器或高速緩沖存儲器中取出指令,放入指令寄存器,,并對指令譯碼,。它把指令分解成一系列的微操作,然后發(fā)出各種控制命令,,執(zhí)行微操作系列,,從而完成一條指令的執(zhí)行。指令是計算機規(guī)定執(zhí)行操作的類型和操作數(shù)的基本命令,。指令是由一個字節(jié)或者多個字節(jié)組成,其中包括操作碼字段,、一個或多個有關(guān)操作數(shù)地址的字段以及一些表征機器狀態(tài)的狀態(tài)字以及特征碼,。有的指令中也直接包含操作數(shù)本身。
(Graphic Processing Unit)圖形處理芯片,。是顯示卡的“心臟”,,也就相當(dāng)于CPU在電腦中的作用,它決定了該顯卡的檔次和大部分性能,,同時也是2D顯示卡和3D顯示卡的區(qū)別依據(jù),。2D顯示芯片在處理3D圖像和特效時主要依賴CPU的處理能力,稱為“軟加速”,。3D顯示芯片是將三維圖像和特效處理功能集中在顯示芯片內(nèi),,也即所謂的“硬件加速”功能。顯示芯片通常是顯示卡上最大的芯片(也是引腳最多的)?,F(xiàn)在市場上的顯卡大多采用nVIDIA和ATI兩家公司的圖形處理芯片,。 今天,GPU已經(jīng)不再局限于3D圖形處理了,,GPU通用計算技術(shù)發(fā)展已經(jīng)引起業(yè)界不少的關(guān)注,,事實也證明在浮點運算、并行計算等部分計算方面,,GPU可以提供數(shù)十倍乃至于上百倍于CPU的性能,,如此強悍的“新星”難免會讓CPU廠商老大英特爾為未來而緊張, NVIDIA和英特爾也經(jīng)常為CPU和GPU誰更重要而展開口水戰(zhàn),。
GPU通用計算方面的標(biāo)準(zhǔn)目前有 OPEN CL,、CUDA、ATI STREAM,。其中,,OpenCL(全稱Open Computing Language,開放運算語言)是第一個面向異構(gòu)系統(tǒng)通用目的并行編程的開放式,、免費標(biāo)準(zhǔn),,也是一個統(tǒng)一的編程環(huán)境,,便于軟件開發(fā)人員為高性能計算服務(wù)器、桌面計算系統(tǒng),、手持設(shè)備編寫高效輕便的代碼,,而且廣泛適用于多核心處理器(CPU)、圖形處理器(GPU),、Cell類型架構(gòu)以及數(shù)字信號處理器(DSP)等其他并行處理器,,在游戲、娛樂,、科研,、醫(yī)療等各種領(lǐng)域都有廣闊的發(fā)展前景,AMD-ATI,、NVIDIA現(xiàn)在的產(chǎn)品都支持OPEN CL,。
1985年 8月20日 ATi公司成立,同年10月ATi使用ASIC技術(shù)開發(fā)出了第一款圖形芯片和圖形卡,,1992年 4月 ATi發(fā)布了 Mach32 圖形卡集成了圖形加速功能,,1998年 4月 ATi被IDC評選為圖形芯片工業(yè)的市場領(lǐng)導(dǎo)者,但那時候這種芯片還沒有GPU的稱號,,很長的一段時間ATI都是把圖形處理器稱為VPU,,直到AMD收購ATI之后其圖形芯片才正式采用GPU的名字。NVIDIA公司在1999年發(fā)布GeForce 256圖形處理芯片時首先提出GPU的概念,。從此NV顯卡的芯就用這個新名字GPU來稱呼,。GPU使顯卡減少了對CPU的依賴,并進行部分原本CPU的工作,,尤其是在3D圖形處理時,。GPU所采用的核心技術(shù)有硬體T&L、立方環(huán)境材質(zhì)貼圖和頂點混合,、紋理壓縮和凹凸映射貼圖,、雙重紋理四像素256位渲染引擎等,而硬體T&L技術(shù)可以說是GPU的標(biāo)志,。
CPU與GPU的區(qū)別
CPU和GPU大不相同,,是由于其設(shè)計目標(biāo)的不同,它們分別針對了兩種不同的應(yīng)用場景,。CPU需要很強的通用性來處理各種不同的數(shù)據(jù)類型,,同時又要邏輯判斷又會引入大量的分支跳轉(zhuǎn)和中斷的處理。這些都使得CPU的內(nèi)部結(jié)構(gòu)異常復(fù)雜,。而GPU面對的則是類型高度統(tǒng)一的,、相互無依賴的大規(guī)模數(shù)據(jù)和不需要被打斷的純凈的計算環(huán)境。
于是CPU和GPU就呈現(xiàn)出非常不同的架構(gòu)(示意圖): 圖片來自nVidia CUDA文檔。其中綠色的是計算單元,,橙紅色的是存儲單元,,橙黃色的是控制單元。
GPU采用了數(shù)量眾多的計算單元和超長的流水線,,但只有非常簡單的控制邏輯并省去了Cache,。而CPU不僅被Cache占據(jù)了大量空間,而且還有有復(fù)雜的控制邏輯和諸多優(yōu)化電路,,相比之下計算能力只是CPU很小的一部分 從上圖可以看出:Registers: GPU > CPU 多寄存器可以支持非常多的Thread,thread需要用到register,thread數(shù)目大,,register也必須得跟著很大才行。
SIMD Unit(單指令多數(shù)據(jù)流,以同步方式,,在同一時間內(nèi)執(zhí)行同一條指令): GPU > CPU,。
CPU 基于低延時的設(shè)計: CPU有強大的ALU(算術(shù)運算單元),它可以在很少的時鐘周期內(nèi)完成算術(shù)計算。
當(dāng)今的CPU可以達到64bit 雙精度,。執(zhí)行雙精度浮點源算的加法和乘法只需要1~3個時鐘周期,。
CPU的時鐘周期的頻率是非常高的,達到1.532~3gigahertz(千兆HZ, 10的9次方),。大的緩存也可以降低延時。保存很多的數(shù)據(jù)放在緩存里面,,當(dāng)需要訪問的這些數(shù)據(jù),,只要在之前訪問過的,如今直接在緩存里面取即可,。
復(fù)雜的邏輯控制單元,。當(dāng)程序含有多個分支的時候,它通過提供分支預(yù)測的能力來降低延時,。 數(shù)據(jù)轉(zhuǎn)發(fā),。 當(dāng)一些指令依賴前面的指令結(jié)果時,數(shù)據(jù)轉(zhuǎn)發(fā)的邏輯控制單元決定這些指令在pipeline中的位置并且盡可能快的轉(zhuǎn)發(fā)一個指令的結(jié)果給后續(xù)的指令,。這些動作需要很多的對比電路單元和轉(zhuǎn)發(fā)電路單元,。
GPU是基于大的吞吐量設(shè)計: GPU的特點是有很多的ALU和很少的cache. 緩存的目的不是保存后面需要訪問的數(shù)據(jù)的,這點和CPU不同,,而是為thread提高服務(wù)的,。如果有很多線程需要訪問同一個相同的數(shù)據(jù),緩存會合并這些訪問,,然后再去訪問dram(因為需要訪問的數(shù)據(jù)保存在dram中而不是cache里面),,獲取數(shù)據(jù)后cache會轉(zhuǎn)發(fā)這個數(shù)據(jù)給對應(yīng)的線程,這個時候是數(shù)據(jù)轉(zhuǎn)發(fā)的角色,。但是由于需要訪問dram,,自然會帶來延時的問題。
GPU的控制單元(左邊黃色區(qū)域塊)可以把多個的訪問合并成少的訪問。
GPU的雖然有dram延時,,卻有非常多的ALU和非常多的thread. 為啦平衡內(nèi)存延時的問題,,我們可以中充分利用多的ALU的特性達到一個非常大的吞吐量的效果。盡可能多的分配多的Threads.通常來看GPU ALU會有非常重的pipeline就是因為這樣,。
所以與CPU擅長邏輯控制,,串行的運算。和通用類型數(shù)據(jù)運算不同,,GPU擅長的是大規(guī)模并發(fā)計算,,這也正是密碼破解等所需要的。所以GPU除了圖像處理,,也越來越多的參與到計算當(dāng)中來,。
GPU的工作大部分就是這樣,計算量大,,但沒什么技術(shù)含量,,而且要重復(fù)很多很多次。就像你有個工作需要算幾億次一百以內(nèi)加減乘除一樣,,最好的辦法就是雇上幾十個小學(xué)生一起算,,一人算一部分,反正這些計算也沒什么技術(shù)含量,,純粹體力活而已,。而CPU就像老教授,積分微分都會算,,就是工資高,,一個老教授資頂二十個小學(xué)生,你要是富士康你雇哪個,?GPU就是這樣,,用很多簡單的計算單元去完成大量的計算任務(wù),純粹的人海戰(zhàn)術(shù),。這種策略基于一個前提,,就是小學(xué)生A和小學(xué)生B的工作沒有什么依賴性,是互相獨立的,。很多涉及到大量計算的問題基本都有這種特性,,比如你說的破解密碼,挖礦和很多圖形學(xué)的計算,。這些計算可以分解為多個相同的簡單小任務(wù),,每個任務(wù)就可以分給一個小學(xué)生去做。但還有一些任務(wù)涉及到“流”的問題,。比如你去相親,,雙方看著順眼才能繼續(xù)發(fā)展。總不能你這邊還沒見面呢,,那邊找人把證都給領(lǐng)了,。這種比較復(fù)雜的問題都是CPU來做的。
總而言之,,CPU和GPU因為最初用來處理的任務(wù)就不同,,所以設(shè)計上有不小的區(qū)別。而某些任務(wù)和GPU最初用來解決的問題比較相似,,所以用GPU來算了,。GPU的運算速度取決于雇了多少小學(xué)生,CPU的運算速度取決于請了多么厲害的教授,。教授處理復(fù)雜任務(wù)的能力是碾壓小學(xué)生的,,但是對于沒那么復(fù)雜的任務(wù),還是頂不住人多,。當(dāng)然現(xiàn)在的GPU也能做一些稍微復(fù)雜的工作了,,相當(dāng)于升級成初中生高中生的水平。但還需要CPU來把數(shù)據(jù)喂到嘴邊才能開始干活,,究竟還是靠CPU來管的,。
就目前的計算機架構(gòu),GPU只能稱作是小眾
GPU作為后來者,,出現(xiàn)的太晚了,,計算機架構(gòu)已經(jīng)定型,不太可能撼動 Intel 的霸主地位,,而且Intel 一定會借著先天優(yōu)勢打壓其他競爭對手。
為什么GPU只能算作是小眾,。在計算機上運行的程序從性能的角度來說大致可分為三類:1,、 I/O intensive;2,、 Memory intensive 以及3,、Compute-intensive。
1,、I/O intensive的程序其性能瓶頸是I/O,,也就是說程序運行的大部分時間花在了硬盤讀寫/網(wǎng)絡(luò)通信上,而I/O處在計算機體系結(jié)構(gòu)金字塔的最底層,,速度非常慢,。最近炒的很火的big data 討論的就是這一類應(yīng)用程序。幾百TB 甚至到PB級別的數(shù)據(jù)往哪擱,,只能放在硬盤上,。一臺機器容量太小CPU太少怎么辦,搞幾百臺甚至上千臺機器用網(wǎng)線連起來分布處理。所以這塊全是I/O,, 現(xiàn)在大的互聯(lián)網(wǎng)公司不多搞幾個上千節(jié)點的集群肯定撐不住,。
2、Memory intensive的程序其性能瓶頸在內(nèi)存訪問,,程序中有大量的隨機訪問內(nèi)存的操作,,但是基本沒有I/O, 這類程序已經(jīng)比第一類程序快一個數(shù)量級了,但是和寄存器的速度還是沒法比,。目前大部分應(yīng)用程序都屬于這類,。個人電腦里裝的的各種軟件基本就是這類,如果有點I/O, 立刻就會非常得卡,。
以上提到的這兩類程序的應(yīng)用最廣泛,,涵蓋了大部分有用的計算機軟件,但遺憾的是GPU在這兩塊毫無用處,, GPU只有在計算密集型的程序有些作用,。I/O是瓶頸的程序,花在計算的時間可以忽略不計,,再怎么用GPU加速也沒用,。 含有大量內(nèi)存隨機訪問的程序也不適合在GPU上執(zhí)行,大量的隨機訪問甚至可以使GPU的行為由并行變?yōu)榇小?/span>
什么類型的程序適合在GPU上運行
所謂計算密集型(Compute-intensive)的程序,,就是其大部分運行時間花在了寄存器運算上,寄存器的速度和處理器的速度相當(dāng),,從寄存器讀寫數(shù)據(jù)幾乎沒有延時,。可以做一下對比,,讀內(nèi)存的延遲大概是幾百個時鐘周期,;讀硬盤的速度就不說了,即便是SSD, 也實在是太慢了,。
GPU其實是一種SIMD(Single Instruction Multiple Data)架構(gòu), 他有成百上千個核,,每一個核在同一時間最好能做同樣的事情,。
GPU和 CPU 誰也替代不了誰
如果形象點理解,GPU就像一群螞蟻,,這些螞蟻都做著同樣的事,,而CPU就像一只猴子,這只猴子做著各種不同的事,。
CPU和GPU它們的目的不同,,且有不同側(cè)重點,,也有著不同的性能特性,在某些工作中CPU執(zhí)行得更快,,另一工作中或許GPU能更好,。
當(dāng)你需要對大量數(shù)據(jù)做同樣的事情時,GPU更合適,,當(dāng)你需要對同一數(shù)據(jù)做很多事情時,,CPU正好。
可以預(yù)見在未來,,隨著CPU進一步強化處理數(shù)據(jù)塊的能力,,我們將看到CPU和GPU架構(gòu)之間的融合,而且隨著制造技術(shù)的進步和芯片的縮小,,GPU也可以承擔(dān)更復(fù)雜的指令,。CPU與GPU間的分工雖然還是大有不同,但彼此間的交集無疑會更多,。 |
|