FPGA原理
FPGA(Field-Programmable Gate Array),即現(xiàn)場(chǎng)可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點(diǎn)。
FPGA采用了邏輯單元陣列LCA(Logic Cell Array)這樣一個(gè)概念,內(nèi)部包括可配置邏輯模塊CLB(Configurable Logic Block)、輸入輸出模塊IOB(Input Output Block)和內(nèi)部連線(Interconnect)三個(gè)部分。 現(xiàn)場(chǎng)可編程門陣列(FPGA)是可編程器件,與傳統(tǒng)邏輯電路和門陣列(如PAL,GAL及CPLD器件)相比,F(xiàn)PGA具有不同的結(jié)構(gòu)。FPGA利用小型查找表(16×1RAM)來實(shí)現(xiàn)組合邏輯,每個(gè)查找表連接到一個(gè)D觸發(fā)器的輸入端,觸發(fā)器再來驅(qū)動(dòng)其他邏輯電路或驅(qū)動(dòng)I/O,由此構(gòu)成了既可實(shí)現(xiàn)組合邏輯功能又可實(shí)現(xiàn)時(shí)序邏輯功能的基本邏輯單元模塊,這些模塊間利用金屬連線互相連接或連接到I/O模塊。FPGA的邏輯是通過向內(nèi)部靜態(tài)存儲(chǔ)單元加載編程數(shù)據(jù)來實(shí)現(xiàn)的,存儲(chǔ)在存儲(chǔ)器單元中的值決定了邏輯單元的邏輯功能以及各模塊之間或模塊與I/O間的聯(lián)接方式,并最終決定了FPGA所能實(shí)現(xiàn)的功能,F(xiàn)PGA允許無限次的編程。
FPGA比CPU和GPU快的原理是什么
CPU和GPU都屬于馮·諾依曼結(jié)構(gòu),指令譯碼執(zhí)行,共享內(nèi)存。FPGA之所以比CPU、GPU更快,本質(zhì)上是因?yàn)槠錈o指令,無共享內(nèi)存的體系結(jié)構(gòu)所決定的。
馮氏結(jié)構(gòu)中,由于執(zhí)行單元可能執(zhí)行任意指令,就需要有指令存儲(chǔ)器、譯碼器、各種指令的運(yùn)算器、分支跳轉(zhuǎn)處理邏輯。而FPGA的每個(gè)邏輯單元的功能在重編程時(shí)就已經(jīng)確定,不需要指令。馮氏結(jié)構(gòu)中使用內(nèi)存有兩種作用:①保存狀態(tài)。②執(zhí)行單元間的通信。
1)保存狀態(tài):FPGA中的寄存器和片上內(nèi)存(BRAM)是屬于各自的控制邏輯的,無需不必要的仲裁和緩存。
2)通信需求:FPGA每個(gè)邏輯單元與周圍邏輯單元的連接在重編程時(shí)就已經(jīng)確定了,并不需要通過共享內(nèi)存來通信。
計(jì)算密集型任務(wù)中:
在數(shù)據(jù)中心,F(xiàn)PGA相比GPU的核心優(yōu)勢(shì)在于延遲。FPGA為什么比GPU的延遲低很多?本質(zhì)上是體系結(jié)構(gòu)的區(qū)別。FPGA同時(shí)擁有流水線并行和數(shù)據(jù)并行,而GPU幾乎只有數(shù)據(jù)并行(流水線深度受限)。
處理一個(gè)數(shù)據(jù)包有10個(gè)步驟,F(xiàn)PGA可以搭建一個(gè)10級(jí)流水線,流水線的不同級(jí)在處理不同的數(shù)據(jù)包,每個(gè)數(shù)據(jù)包流經(jīng)10級(jí)之后處理完成。每個(gè)處理完成的數(shù)據(jù)包可以馬上輸出。而GPU的數(shù)據(jù)并行方法是做10個(gè)計(jì)算單元,每個(gè)計(jì)算單元也在處理不同的數(shù)據(jù)包,但是所有的計(jì)算單元必須按照統(tǒng)一的步調(diào),做相同的事情(SIMD)。這就要求10個(gè)數(shù)據(jù)包必須同進(jìn)同出。當(dāng)任務(wù)是逐個(gè)而非成批到達(dá)的時(shí)候,流水線并行比數(shù)據(jù)并行可實(shí)現(xiàn)更低的延遲。因此對(duì)流水式計(jì)算的任務(wù),F(xiàn)PGA比GPU天生有延遲方面的優(yōu)勢(shì)。
ASIC在吞吐量、延遲、功耗單個(gè)方面都是最優(yōu)秀的。但是其研發(fā)成本高,周期長。FPGA的靈活性可以保護(hù)資產(chǎn)。數(shù)據(jù)中心是租給不同租戶使用的。有的機(jī)器上有神經(jīng)網(wǎng)絡(luò)加速卡,有的有bing搜索加速卡,有的有網(wǎng)絡(luò)虛擬加速卡,任務(wù)的調(diào)度和運(yùn)維會(huì)很麻煩。使用FPGA可以保持?jǐn)?shù)據(jù)中心的同構(gòu)性。
通信密集型任務(wù)中,F(xiàn)PGA相比GPU、CPU的優(yōu)勢(shì)更大。
①吞吐量:FPGA可以直接接上40Gbps或者100Gbps的網(wǎng)線,以線速處理任意大小的數(shù)據(jù)包;而CPU則需要網(wǎng)卡把數(shù)據(jù)包接收過來;GPU也可以高性能處理數(shù)據(jù)包,但GPU沒有網(wǎng)口,同樣需要網(wǎng)卡,這樣吞吐量受到網(wǎng)卡和(或)者CPU的限制。
②延遲:網(wǎng)卡把數(shù)據(jù)傳給CPU,CPU處理后傳給網(wǎng)卡,再加上系統(tǒng)中的時(shí)鐘中斷和任務(wù)調(diào)度增加了延遲的不穩(wěn)定性。
綜上所述,在數(shù)據(jù)中心里FPGA的主要優(yōu)勢(shì)是穩(wěn)定又極低的延遲,適用于流式的計(jì)算密集型任務(wù)和通信密集型任務(wù)。
FPGA和GPU最大的區(qū)別在于體系結(jié)構(gòu),F(xiàn)PGA更適合做需要低延遲的流式處理,GPU更適合做大批量同構(gòu)數(shù)據(jù)的處理。
成也蕭何,敗也蕭何。缺少指令同時(shí)是FPGA的優(yōu)勢(shì)和軟肋。每做一點(diǎn)不同的事情,就要占用一定的FPGA邏輯資源。如果要做的事情復(fù)雜、重復(fù)性不強(qiáng),就會(huì)占用大量的邏輯資源,其中的大部分處于閑置狀態(tài)。這時(shí)就不如用馮·諾依曼結(jié)構(gòu)的處理器。
FPGA和CPU協(xié)同工作,局部性和重復(fù)性強(qiáng)的歸FPGA,復(fù)雜的歸CPU。
CPU與GPU的區(qū)別揭秘
PU和GPU之所以大不相同,是由于其設(shè)計(jì)目標(biāo)的不同,它們分別針對(duì)了兩種不同的應(yīng)用場(chǎ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)(示意圖):
圖片來自nVidiaCUDA文檔。其中綠色的是計(jì)算單元,橙紅色的是存儲(chǔ)單元,橙黃色的是控制單元。
GPU采用了數(shù)量眾多的計(jì)算單元和超長的流水線,但只有非常簡單的控制邏輯并省去了Cache。而CPU不僅被Cache占據(jù)了大量空間,而且還有有復(fù)雜的控制邏輯和諸多優(yōu)化電路,相比之下計(jì)算能力只是CPU很小的一部分。
所以與CPU擅長邏輯控制和通用類型數(shù)據(jù)運(yùn)算不同,GPU擅長的是大規(guī)模并發(fā)計(jì)算,這也正是密碼破解等所需要的。所以GPU除了圖像處理,也越來越多的參與到計(jì)算當(dāng)中來。
2、很久以前,大概2000年那時(shí)候,顯卡還被叫做圖形加速卡。一般叫做加速卡的都不是什么核心組件,和現(xiàn)在蘋果使用的M7協(xié)處理器地位差不多。這種東西就是有了更好,沒有也不是不行,只要有個(gè)基本的圖形輸出就可以接顯示器了。在那之前,只有一些高端工作站和家用游戲機(jī)上才能見到這種單獨(dú)的圖形處理器。后來隨著PC的普及,游戲的發(fā)展和Windows這樣的市場(chǎng)霸主出現(xiàn),簡化了圖形硬件廠商的工作量,圖形處理器,或者說顯卡才逐漸普及起來。
想要理解GPU與CPU的區(qū)別,需要先明白GPU被設(shè)計(jì)用來做什么。現(xiàn)代的GPU功能涵蓋了圖形顯示的方方面面,我們只取一個(gè)最簡單的方向作為例子。
大家可能都見過上面這張圖,這是老版本DirectX帶的一項(xiàng)測(cè)試,就是一個(gè)旋轉(zhuǎn)的立方體。顯示出一個(gè)這樣的立方體要經(jīng)過好多步驟,我們先考慮簡單的,想象一下他是個(gè)線框,沒有側(cè)面的“X”圖像。再簡化一點(diǎn),連線都沒有,就是八個(gè)點(diǎn)(立方體有八個(gè)頂點(diǎn)的)。那么問題就簡化成如何讓這八個(gè)點(diǎn)轉(zhuǎn)起來。首先,你在創(chuàng)造這個(gè)立方體的時(shí)候,肯定有八個(gè)頂點(diǎn)的坐標(biāo),坐標(biāo)都是用向量表示的,因而至少也是個(gè)三維向量。然后“旋轉(zhuǎn)”這個(gè)變換,在線性代數(shù)里面是用一個(gè)矩陣來表示的。向量旋轉(zhuǎn),是用向量乘以這個(gè)矩陣。把這八個(gè)點(diǎn)轉(zhuǎn)一下,就是進(jìn)行八次向量與矩陣的乘法而已。這種計(jì)算并不復(fù)雜,拆開來看無非就是幾次乘積加一起,就是計(jì)算量比較大。八個(gè)點(diǎn)就要算八次,2000個(gè)點(diǎn)就要算2000次。這就是GPU工作的一部分,頂點(diǎn)變換,這也是最簡單的一部分。剩下還有一大堆比這更麻煩的就不說了。
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來管的。
-
FPGA
+關(guān)注
關(guān)注
1630文章
21796瀏覽量
605989 -
cpu
+關(guān)注
關(guān)注
68文章
10902瀏覽量
213000 -
gpu
+關(guān)注
關(guān)注
28文章
4774瀏覽量
129351
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論