為什麼交換晶元Buffer資源都很小

2021-10-14 12:18:56 字數 2443 閱讀 5158

本文從硬體的角度來解釋就會交換晶元buffer資源稀缺的原因

從乙個簡單的加法器說起

數位電路分為時序邏輯和數字邏輯,以上電路為加法器,為典型的數字邏輯。理想的情況下,輸入訊號1和訊號2,立刻輸出結果。

實際的物理電路中,必然會存在時延,inpu1和inpu2訊號本身也是經過其它邏輯器件計算以後的結果,必然存在不同的時延。inpu1輸入為1,inpu2輸入為1,output的正確結果應該為2。假設input2的延時較大,讀取output時,input的輸入為之前的老資料0,output的結果就為1,讀出了錯誤的資料。

引入上圖的的時鐘電路。 lip-flop:為觸發器,是時鐘上公升沿觸發,可儲存1bitdata,是register的基本組成單位。當上公升沿到達時,input1的資料儲存到鎖存器中,後面的乙個時鐘週期內,資料保持不變。只要時鐘週期大於inpu1和inpu2的最大延時,可以保證在乙個時鐘週期內,output獲取正確的資料。

這樣做實際上就是讓邏輯1的工作結果卡在了暫存器2的輸入口,等待下乙個時鐘上公升沿,再和邏輯2的工作結果一同被取樣,付出的代價就是,讓邏輯1這條支路的工作速度強制變慢以同步.

cpu和gpu都屬於馮·諾依曼結構,指令解碼執行,共享記憶體。fpga之所以比cpu、gpu更快,本質上是因為其無指令,無共享記憶體的體系結構所決定的 。

馮氏結構中,由於執行單元可能執行任意指令,就需要有指令儲存器、解碼器、各種指令的運算器、分支跳轉處理邏輯。而fpga的每個邏輯單元的功能在重程式設計時就已經確定,不需要指令。

fpga屬於可重複程式設計的專業積體電路,使用硬體程式設計,將功能轉化為邏輯電路,內部電路可以實現並行;cpu屬於通用積體電路,執行過程遵循馮·諾依曼結構,將功能轉化為指令集,執行過程中,存在取指指、解碼、執行的過程,每個運算不見不能單獨允許,必須遵循先後順序。

在資料中心,fpga相比gpu的核心優勢在於延遲。fpga為什麼比gpu的延遲低很多?本質上是體系結構的區別。fpga同時擁有流水線並行和資料並行,而gpu幾乎只有資料並行(流水線深度受限)。

處理乙個資料報有10個步驟,fpga可以搭建乙個10級流水線(cpu的流水線指取指、解碼、執行,而fpga每條流水線就是執行),流水線的不同級在處理不同的資料報,每個資料報流經10級之後處理完成。每個處理完成的資料報可以馬上輸出。

而gpu的資料並行方法是做10個計算單元,每個計算單元也在處理不同的資料報,但是所有的計算單元必須按照統一的步調,做相同的事情(simd)(網路流量是高速的序列資料,cpu適合處理高速的並行資料,試想乙個cpu的10個核心處理高速序列資料以後,不能保證出去的報文還是按照原來的順序來,這是不允許的)。這就要求10個資料報必須同進同出。當任務是逐個而非成批到達的時候,流水線並行比資料並行可實現更低的延遲。因此對流水式計算的任務,fpga比gpu天生有延遲方面的優勢。

多核晶元上的每個cpu可以單獨執行嗎?顯然是不可以的,多執行緒間必須要考慮到執行緒同步、記憶體共享這些問題,所以多個cpu必須考慮時間同步,效率大大降低

fpga的功能單一但速度快可重複程式設計,asic功能單一且不可修改單速度快,cpu/gpu的功能多但速度慢。

fpga屬於流水線並行,多核cpu屬於資料並行。

fpga更適合處理高速序列資料或者高速並行資料,多核cpu更適合處理高速的並行資料。

高密度的交換機上多大52個口,每個口有資料可達10g,交換晶元依然可以處理。

主存的頻率低於cpu的頻率,cpu訪問主存存在等待,cache位於cpu和主存之間

cache:高速緩衝儲存器,也是我們經常遇到的概念,它位於cpu與記憶體之間,是乙個讀寫速度比記憶體更快的儲存器。當cpu向記憶體中寫入或讀出資料時,這個資料也被儲存進高速緩衝儲存器中。當cpu再次需要這些資料時,cpu就從高速緩衝儲存器讀取資料,而不是訪問較慢的記憶體,當然,如需要的資料在cache中沒有,cpu會再去讀取記憶體中的資料。

cpu register的速度一般小於1ns,主存的速度一般是65ns左右。速度差異近百倍。因此,上面舉例的3個步驟中,步驟1和步驟3實際上速度很慢。當cpu試圖從主存中load/store 操作時,由於主存的速度限制,cpu不得不等待這漫長的65ns時間。如果我們可以提公升主存的速度,那麼系統將會獲得很大的效能提公升。如今的ddr儲存裝置,動不動就是幾個gb,容量很大。如果我們採用更快材料製作更快速度的主存,並且擁有幾乎差不多的容量。其成本將會大幅度上公升。我們試圖提公升主存的速度和容量,又期望其成本很低,這就有點難為人了。因此,我們有一種折中的方法,那就是製作一塊速度極快但是容量極小的儲存裝置。那麼其成本也不會太高。這塊儲存裝置我們稱之為cache memory。在硬體上,我們將cache放置在cpu和主存之間,作為主存資料的快取。 當cpu試圖從主存中load/store資料的時候, cpu會首先從cache中查詢對應位址的資料是否快取在cache 中。

這應該是屬於乙個積體電路設計與製造的問題,不能從軟體的角度來解釋。

引用知乎上專業人士的解釋,從生產工藝的角度解釋:

為什麼插入buffer能夠增加驅動能力?

1 buffer是什麼?所謂增加buffer,buffer一般是幾級器件尺寸逐步增大的反相器或類似結構的電路,以使得電阻在獲得所需的驅動能力時,在功耗延時積上也達到最優。前後級的最佳驅動比例在2.718左右。buffer實際就是兩個串聯的反相器,常用於時鐘路徑中,用於增加時鐘驅動能力,使得時鐘clo...

鍊錶排序交換節點為什麼還得單獨交換next指標?

通過給鍊錶排序,交換節點時,明明已經交換資料域,後面還得交換next指標 typedef struct node node 鍊錶節點排序 int nodesort node phead node ppre null node pcur null node tmp 臨時交換變數 選擇法排序 for p...

晶元電源去耦電容為什麼要靠近電源放置

晶元電源去耦電容為什麼要靠近電源放置 1.從減少迴路電感的角度來講 迴路電感就是你的電容和晶元內部構成了乙個迴路,這個迴路有什麼問題呢?從emc角度來講這個迴路就像天線一樣會有電磁干擾產生,所以我們為了解決這個問題,要盡可能的減少迴路的面積,因為天線的增益是和線圈的面積成正比的,減小有效面積就可以減...