引言
隨著人工智能和5G的興起,數據處理對芯片的算力和帶寬要求更高。為了布局未來,助力人工智能和5G,賽靈思也推出了自己的FPGA加速芯片-ACAP。ACAP是一款基于7nm工藝,集成了通用處理器(PS),FPGA(PL),math engine以及network-on-chip的革命性芯片。特別是新增的ME結構,是一個類似于GPU的多核并發計算單元,可以大大提高數據處理能力。同時ME支持軟件語言C,C++,這有利于擴大FPGA的使用用戶,同時方便了設計開發。
ME結構簡介
ME結構由很多ME核組成的二維陣列結構,核之間可以實現數據通信。ME陣列通過NoC可以和PL以及PS端進行通信,NoC是一種互聯總線,其提供了ME陣列到PL側的高帶寬通路。ME核包含了BRAM,DSP以及控制邏輯。ME具有以下特點:
1) 有一個RISC處理器,能夠支持32bit標量數據運算,包括sin/cos,開方,乘法等操作;
2) 向量乘法計算單元。這是一個由DSP組成的陣列,能夠支持32個16bitx8bit,64個16x8bit,128個8x8bit計算。還支持8個單精度乘法計算;
3) 指令控制結構支持load和save,向量乘法等操作,這些操作統一用一個指令字段描述;
4) 含有多路AXI stream,可以實現高速數據通信;
5) 含有一個128bit寬1K深的程序存儲器,支持指令壓縮,可通過AXI-MM進行配置;
6) 含有多個數據存儲器,分成多個bank,共有32KB容量;
7) 含有配置接口,用于ME核的配置和調試;
8) 含有debug/trace/profile功能,用于程序追蹤和調試;
ME核的工作頻率達到1GHz,電壓0.7V,具有較低功耗。ME支持多種形式的數據傳送,包括AXI-MM,AXI-stream,以及ME之間共享的bank進行數據直接交互。
為了保證性能的可預測性,ME之間數據通信不存在緩存一致性。但是ME和PS之間通信是需要緩存一致性功能的,ME和PS端共享DDR中一段內存。當PS處理完數據發送給ME時,是要保證處理的數據都已經存儲到DDR中了。而ME處理完數據寫到DDR中后,也要讓PS知道數據已經寫完。ME可以使用虛擬地址去訪問PS的存儲或者DDR,ME地址會經過PS端的MMU進行解析。
為了保證某些過程的安全性(比如對TrustZone的保護,或者防止ME陣列的重要信息被讀取),ME提供了一些保護措施。主要包括對ME訪問的保護,AXI-MM傳輸的安全性保護,AXI-stream數據訪問的保護等。
ME陣列可以在功能上被分割成多個子陣列使用,這可以用于一些需要ME陣列完成多種功能的任務。其中ME核,AXI-stream,數據存儲訪問等模塊都可以被分割。只有AXI-MM不能被分割。NoC中可以支持對控制信息的修改,從而可以給不同子陣列發送不同的控制信息。每個ME核含有256Kb的數據存儲器和128Kb的程序存儲器,對于一個300個ME核的芯片就含有77Mb數據存儲和38Mb程序存儲,這么大的空間,保證數據準確性是很關鍵的。因此不論是數據存儲器還是程序存儲器都提供了ECC校驗,以防止軟件錯誤產生的數據錯誤問題。程序存儲器每144bit包含128bit有效數據和8bitECC校驗位。8bit校驗位可以在每64bit數據中糾正1bit數據和檢測出2bit數據錯誤。存儲數據出錯會生成錯誤事件,反饋給debug或者profile模塊報告這些錯誤。
ME陣列被分配了4個1GB的地址映射區域,目前芯片只有一個ME陣列,所以只使用了1GB地址映射空間。ME的地址含有整體陣列的offset,陣列的行列編號,以及ME核中存儲地址。這些信息可以確定往哪個ME中的存儲位置讀寫數據。
ME中有4個時鐘:ME核時鐘,高頻,可到1GHz,用于ME中的數據傳輸和運算。NoC時鐘,數據時鐘,用于從PL到ME的數據輸送。PL側時鐘以及NPI時鐘,NPI時鐘用于調試追蹤等。
數據傳輸結構
為了保證不同設備之間的數據交換,我們需要滿足兩個條件:一個是數據實際的流通,這個包含數據傳輸通路和數據存儲;當然也不必包含有存儲,流水線處理的數據只有數據流通;另外一個是發送者和收發者之間的同步。接受者接收數據只有在發送者發出數據之后,同時發送者發送數據必須等接受者準備好接收數據。因此一些同步信號是必須的。
ME陣列中能夠實現數據交互的設備有:
1) 本地存儲bank。每個ME包含8個bank,這些bank可以用于和周圍4個ME進行數據通信。ME通過load和save指令來讀寫本地存儲器。如果ME的寫和另外一個ME的讀同時發生,可以通過ping/pong操作同步。
2) Stream-network可用于所有ME之間數據交互。而且stream本身是具有同步信號的,所以無需增加額外同步信號。
3) AXI-MM接口能夠用于ME和PL端甚至是外部存儲器進行通信。
保證數據同步的裝置有:
1) ME本地原子鎖。這個鎖可以保證生產者和消費者的數據訪問沖突解決。如果鎖被置為1,表示可以被讀,如果為0表示可以寫。
2) Shim-DMA鎖。用于同步不同DMA通道,或者DMA通道和AXI-MM通道;
3) 信號量機制。對于ME和PS端的數據通信,還可以通過軟件層次的信號量機制來進行同步,因為PS端可以通過AXI-MM接口實現和ME之間的數據同步;
4) Stream網絡自身附帶的同步特性,用于不同ME之間交換數據。
PL和ME由于處于不同時鐘區域,ME是高頻時鐘,而PL側時鐘頻率較低。為了實現數據跨時鐘域傳輸,芯片提供了shim接口,shim中含有異步FIFO。FPGA可以以64bit或者32bit將數據寫入FIFO,而ME將FIFO中數據讀出進行運算。ME獲得數據有兩種方式,一種是通過DMA將數據讀出寫入到ping/pong buffer,這樣可以實現ME核中兩個函數的計算任務。如果ME中不需要ping/pong操作,可以不同各國DMA將數據存儲到buffer。可以從stream直接獲得數據進行計算。
接下來我們看看ME內部數據如何通信:
1) ME內部不同操作之間可以使用shared memory來進行數據交互,但是每次只允許一個操作來訪問shared memory,即讀寫無法同時進行;
2) 兩個相鄰ME可以通過shared memory來進行數據交互,通過ping/pong buffer可以實現一個寫一個讀;
3) 對于不相鄰的ME,也可以使用ping/pong buffer。但是這個時候ME無法直接去訪問另外一個ME的存儲,但是每個ME都可以建立自己的ping/pong buffer,這兩組buffer可以通過DMA進行數據交互;
4) 不同的ME之間還可以通過AXI-stream接口進行數據交互;
5) 有時候一個大型計算要在幾個ME之間完成,這就需要不同ME之間進行高速數據通信,相鄰的ME之間還有級聯總線,可以實現兩個ME之間的累加運算,這個總線位寬達到384bit;
6) ME還可以直接從外部存儲器中獲得數據,它將數據請求包發送給ME-shim,這個請求包含有包頭和數據請求信息,包頭中有原和目的地址,數據請求中含有數據長度信息。
-
FPGA
+關注
關注
1629文章
21736瀏覽量
603421 -
gpu
+關注
關注
28文章
4740瀏覽量
128951 -
人工智能
+關注
關注
1791文章
47279瀏覽量
238511 -
數據存儲器
+關注
關注
1文章
69瀏覽量
17781 -
ACAP
+關注
關注
1文章
54瀏覽量
8170
發布評論請先 登錄
相關推薦
評論