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