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