FPGA原理
FPGA(Field-Programmable Gate Array),即現場可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎上進一步發展的產物。它是作為專用集成電路(ASIC)領域中的一種半定制電路而出現的,既解決了定制電路的不足,又克服了原有可編程器件門電路數有限的缺點。
FPGA采用了邏輯單元陣列LCA(Logic Cell Array)這樣一個概念,內部包括可配置邏輯模塊CLB(Configurable Logic Block)、輸入輸出模塊IOB(Input Output Block)和內部連線(Interconnect)三個部分。 現場可編程門陣列(FPGA)是可編程器件,與傳統邏輯電路和門陣列(如PAL,GAL及CPLD器件)相比,FPGA具有不同的結構。FPGA利用小型查找表(16×1RAM)來實現組合邏輯,每個查找表連接到一個D觸發器的輸入端,觸發器再來驅動其他邏輯電路或驅動I/O,由此構成了既可實現組合邏輯功能又可實現時序邏輯功能的基本邏輯單元模塊,這些模塊間利用金屬連線互相連接或連接到I/O模塊。FPGA的邏輯是通過向內部靜態存儲單元加載編程數據來實現的,存儲在存儲器單元中的值決定了邏輯單元的邏輯功能以及各模塊之間或模塊與I/O間的聯接方式,并最終決定了FPGA所能實現的功能,FPGA允許無限次的編程。
FPGA比CPU和GPU快的原理是什么
CPU和GPU都屬于馮·諾依曼結構,指令譯碼執行,共享內存。FPGA之所以比CPU、GPU更快,本質上是因為其無指令,無共享內存的體系結構所決定的。
馮氏結構中,由于執行單元可能執行任意指令,就需要有指令存儲器、譯碼器、各種指令的運算器、分支跳轉處理邏輯。而FPGA的每個邏輯單元的功能在重編程時就已經確定,不需要指令。馮氏結構中使用內存有兩種作用:①保存狀態。②執行單元間的通信。
1)保存狀態:FPGA中的寄存器和片上內存(BRAM)是屬于各自的控制邏輯的,無需不必要的仲裁和緩存。
2)通信需求:FPGA每個邏輯單元與周圍邏輯單元的連接在重編程時就已經確定了,并不需要通過共享內存來通信。
計算密集型任務中:
在數據中心,FPGA相比GPU的核心優勢在于延遲。FPGA為什么比GPU的延遲低很多?本質上是體系結構的區別。FPGA同時擁有流水線并行和數據并行,而GPU幾乎只有數據并行(流水線深度受限)。
處理一個數據包有10個步驟,FPGA可以搭建一個10級流水線,流水線的不同級在處理不同的數據包,每個數據包流經10級之后處理完成。每個處理完成的數據包可以馬上輸出。而GPU的數據并行方法是做10個計算單元,每個計算單元也在處理不同的數據包,但是所有的計算單元必須按照統一的步調,做相同的事情(SIMD)。這就要求10個數據包必須同進同出。當任務是逐個而非成批到達的時候,流水線并行比數據并行可實現更低的延遲。因此對流水式計算的任務,FPGA比GPU天生有延遲方面的優勢。
ASIC在吞吐量、延遲、功耗單個方面都是最優秀的。但是其研發成本高,周期長。FPGA的靈活性可以保護資產。數據中心是租給不同租戶使用的。有的機器上有神經網絡加速卡,有的有bing搜索加速卡,有的有網絡虛擬加速卡,任務的調度和運維會很麻煩。使用FPGA可以保持數據中心的同構性。
通信密集型任務中,FPGA相比GPU、CPU的優勢更大。
①吞吐量:FPGA可以直接接上40Gbps或者100Gbps的網線,以線速處理任意大小的數據包;而CPU則需要網卡把數據包接收過來;GPU也可以高性能處理數據包,但GPU沒有網口,同樣需要網卡,這樣吞吐量受到網卡和(或)者CPU的限制。
②延遲:網卡把數據傳給CPU,CPU處理后傳給網卡,再加上系統中的時鐘中斷和任務調度增加了延遲的不穩定性。
綜上所述,在數據中心里FPGA的主要優勢是穩定又極低的延遲,適用于流式的計算密集型任務和通信密集型任務。
FPGA和GPU最大的區別在于體系結構,FPGA更適合做需要低延遲的流式處理,GPU更適合做大批量同構數據的處理。
成也蕭何,敗也蕭何。缺少指令同時是FPGA的優勢和軟肋。每做一點不同的事情,就要占用一定的FPGA邏輯資源。如果要做的事情復雜、重復性不強,就會占用大量的邏輯資源,其中的大部分處于閑置狀態。這時就不如用馮·諾依曼結構的處理器。
FPGA和CPU協同工作,局部性和重復性強的歸FPGA,復雜的歸CPU。
CPU與GPU的區別揭秘
PU和GPU之所以大不相同,是由于其設計目標的不同,它們分別針對了兩種不同的應用場景。CPU需要很強的通用性來處理各種不同的數據類型,同時又要邏輯判斷又會引入大量的分支跳轉和中斷的處理。這些都使得CPU的內部結構異常復雜。而GPU面對的則是類型高度統一的、相互無依賴的大規模數據和不需要被打斷的純凈的計算環境。
于是CPU和GPU就呈現出非常不同的架構(示意圖):
圖片來自nVidiaCUDA文檔。其中綠色的是計算單元,橙紅色的是存儲單元,橙黃色的是控制單元。
GPU采用了數量眾多的計算單元和超長的流水線,但只有非常簡單的控制邏輯并省去了Cache。而CPU不僅被Cache占據了大量空間,而且還有有復雜的控制邏輯和諸多優化電路,相比之下計算能力只是CPU很小的一部分。
所以與CPU擅長邏輯控制和通用類型數據運算不同,GPU擅長的是大規模并發計算,這也正是密碼破解等所需要的。所以GPU除了圖像處理,也越來越多的參與到計算當中來。
2、很久以前,大概2000年那時候,顯卡還被叫做圖形加速卡。一般叫做加速卡的都不是什么核心組件,和現在蘋果使用的M7協處理器地位差不多。這種東西就是有了更好,沒有也不是不行,只要有個基本的圖形輸出就可以接顯示器了。在那之前,只有一些高端工作站和家用游戲機上才能見到這種單獨的圖形處理器。后來隨著PC的普及,游戲的發展和Windows這樣的市場霸主出現,簡化了圖形硬件廠商的工作量,圖形處理器,或者說顯卡才逐漸普及起來。
想要理解GPU與CPU的區別,需要先明白GPU被設計用來做什么?,F代的GPU功能涵蓋了圖形顯示的方方面面,我們只取一個最簡單的方向作為例子。
大家可能都見過上面這張圖,這是老版本DirectX帶的一項測試,就是一個旋轉的立方體。顯示出一個這樣的立方體要經過好多步驟,我們先考慮簡單的,想象一下他是個線框,沒有側面的“X”圖像。再簡化一點,連線都沒有,就是八個點(立方體有八個頂點的)。那么問題就簡化成如何讓這八個點轉起來。首先,你在創造這個立方體的時候,肯定有八個頂點的坐標,坐標都是用向量表示的,因而至少也是個三維向量。然后“旋轉”這個變換,在線性代數里面是用一個矩陣來表示的。向量旋轉,是用向量乘以這個矩陣。把這八個點轉一下,就是進行八次向量與矩陣的乘法而已。這種計算并不復雜,拆開來看無非就是幾次乘積加一起,就是計算量比較大。八個點就要算八次,2000個點就要算2000次。這就是GPU工作的一部分,頂點變換,這也是最簡單的一部分。剩下還有一大堆比這更麻煩的就不說了。
GPU的工作大部分就是這樣,計算量大,但沒什么技術含量,而且要重復很多很多次。就像你有個工作需要算幾億次一百以內加減乘除一樣,最好的辦法就是雇上幾十個小學生一起算,一人算一部分,反正這些計算也沒什么技術含量,純粹體力活而已。而CPU就像老教授,積分微分都會算,就是工資高,一個老教授資頂二十個小學生,你要是富士康你雇哪個?GPU就是這樣,用很多簡單的計算單元去完成大量的計算任務,純粹的人海戰術。這種策略基于一個前提,就是小學生A和小學生B的工作沒有什么依賴性,是互相獨立的。很多涉及到大量計算的問題基本都有這種特性,比如你說的破解密碼,挖礦和很多圖形學的計算。這些計算可以分解為多個相同的簡單小任務,每個任務就可以分給一個小學生去做。但還有一些任務涉及到“流”的問題。比如你去相親,雙方看著順眼才能繼續發展??偛荒苣氵@邊還沒見面呢,那邊找人把證都給領了。這種比較復雜的問題都是CPU來做的。
總而言之,CPU和GPU因為最初用來處理的任務就不同,所以設計上有不小的區別。而某些任務和GPU最初用來解決的問題比較相似,所以用GPU來算了。GPU的運算速度取決于雇了多少小學生,CPU的運算速度取決于請了多么厲害的教授。教授處理復雜任務的能力是碾壓小學生的,但是對于沒那么復雜的任務,還是頂不住人多。當然現在的GPU也能做一些稍微復雜的工作了,相當于升級成初中生高中生的水平。但還需要CPU來把數據喂到嘴邊才能開始干活,究竟還是靠CPU來管的。
-
FPGA
+關注
關注
1606文章
21344瀏覽量
594186 -
cpu
+關注
關注
68文章
10491瀏覽量
207029 -
gpu
+關注
關注
27文章
4456瀏覽量
126976
發布評論請先 登錄
相關推薦
評論