王澤中, 王春華, 王正茂, 張多利
(1.合肥工業(yè)大學(xué) 電子科學(xué)與應(yīng)用物理學(xué)院,安徽 合肥 230601; 2.教育部IC設(shè)計網(wǎng)上合作研究中心,安徽 合肥 230601)
為了適應(yīng)計算復(fù)雜度更高、更多元化的應(yīng)用,片上系統(tǒng)(system-on-a-chip,SoC)中集成了多個處理器核,顯著提升了系統(tǒng)的數(shù)據(jù)處理能力,同時也對外部存儲器的帶寬提出了更高的要求。為滿足多核SoC系統(tǒng)對外部存儲器高帶寬、大容量等需求,人們設(shè)計了DDR、GDDR、HBM等多種外部存儲器,用于提高系統(tǒng)性能[1-2]。當(dāng)前外部存儲器帶寬能夠達(dá)到數(shù)百GB/s,如HBM2存儲標(biāo)準(zhǔn)JESD235C的單堆棧理論最大帶寬為410 GB/s,4堆棧HBM2理論帶寬為1.64 TB/s。
多核處理器一般采用多級存儲結(jié)構(gòu)[3-4],利用程序的空間局域性和時間局域性提高訪存效率,但是對于局域性較差的任務(wù),多級存儲結(jié)構(gòu)的優(yōu)勢并不明顯。為了提高多核SoC系統(tǒng)對高帶寬外部存儲器的帶寬利用率,需要設(shè)計并行訪存接口,充分利用外部存儲器的帶寬,使用單個外部存儲器實現(xiàn)多核并行訪存[5-6]。
本文針對多核SoC系統(tǒng)工作過程中存在多運(yùn)算單元并行訪存,且訪存模式多樣的特點(diǎn),設(shè)計了一種支持多運(yùn)算單元并行訪問外部存儲器的訪存控制器。該并行訪存控制器針對目標(biāo)系統(tǒng)任務(wù)類型的多樣性,設(shè)計了一種兩級仲裁與并行訪存相結(jié)合的機(jī)制,對不同類型任務(wù)進(jìn)行分組,組內(nèi)根據(jù)任務(wù)的訪存特點(diǎn)設(shè)計并行訪存機(jī)制,實現(xiàn)多運(yùn)算單元并行訪存;組間通過兩級仲裁機(jī)制選擇訪問外部存儲器的組,實現(xiàn)高優(yōu)先級任務(wù)快速響應(yīng)以及讀寫任務(wù)輪流工作。
本文設(shè)計的并行訪存控制器能夠適應(yīng)多種訪存模式,并根據(jù)系統(tǒng)需求合理對帶寬進(jìn)行分配,高效利用外部存儲器的帶寬,有效提高系統(tǒng)的訪存效率,從而提高系統(tǒng)性能。
多核系統(tǒng)中集成了多個不同的運(yùn)算單元、存儲模塊、輸入輸出接口、主控制器等結(jié)構(gòu),其數(shù)據(jù)傳輸模型示意圖如圖1所示,各運(yùn)算單元間通過片上網(wǎng)絡(luò)(Network-on-Chip,NoC)互相連接,數(shù)據(jù)通過數(shù)據(jù)網(wǎng)絡(luò)傳輸,運(yùn)算單元通過對應(yīng)節(jié)點(diǎn)的NoC接口與網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)交互。
圖1 多核系統(tǒng)數(shù)據(jù)傳輸模型
目標(biāo)系統(tǒng)為面向矩陣運(yùn)算的異構(gòu)多核系統(tǒng),系統(tǒng)中連續(xù)的數(shù)據(jù)存儲在片外存儲器中,將任務(wù)對應(yīng)的大批量數(shù)據(jù)分為多組,通過多運(yùn)算單元并行計算來提高處理效率。根據(jù)任務(wù)類型可使用并行工作模式與獨(dú)立工作模式。
若任務(wù)數(shù)據(jù)被分為i(i≥1)個數(shù)據(jù)組,并行工作模式下,使用多個運(yùn)算單元協(xié)同對數(shù)據(jù)組進(jìn)行處理,運(yùn)算單元訪存同步進(jìn)行,按照順序依次處理數(shù)據(jù)組1,數(shù)據(jù)組2,…,數(shù)據(jù)組i。
獨(dú)立工作模式下,使用數(shù)量不定的運(yùn)算單元,將所有數(shù)據(jù)組均分給運(yùn)算單元,運(yùn)算單元依次處理所分配的數(shù)據(jù)組,每個運(yùn)算單元獨(dú)立處理一個數(shù)據(jù)組。若使用x(i≥x≥1)個運(yùn)算單元,每個運(yùn)算單元需要處理的數(shù)據(jù)組數(shù)量為:
z=i/x,
其中,第y個運(yùn)算單元依次取第y個,第y+x個,第y+2x個,…,第y+(z-1)x個數(shù)據(jù)組作運(yùn)算。
目標(biāo)系統(tǒng)中的訪存任務(wù)類型主要有指令讀取任務(wù)、并行任務(wù)、獨(dú)立任務(wù)3種。指令讀取任務(wù)從存儲器中讀取指令,并行任務(wù)與獨(dú)立任務(wù)分別用于并行工作模式與獨(dú)立工作模式下的運(yùn)算單元訪存。工作過程中,多個運(yùn)算單元會通過不同的網(wǎng)絡(luò)節(jié)點(diǎn)發(fā)出不同類型的訪存請求,訪存控制器根據(jù)請求對外部存儲器進(jìn)行訪存操作,通過請求對應(yīng)節(jié)點(diǎn)的接口與數(shù)據(jù)網(wǎng)絡(luò)進(jìn)行交互,多類型任務(wù)訪問模型如圖2所示。
圖2 多類型任務(wù)訪問模型
根據(jù)排隊論模型,請求訪存的運(yùn)算單元、訪存控制器、外部存儲器可以看作模型中的顧客、隊列以及服務(wù)臺。在描述目標(biāo)系統(tǒng)的任務(wù)訪存狀態(tài)時,主要考慮隊列中顧客的數(shù)量、顧客需求的服務(wù)模式、隊列容量限制3個參數(shù),對應(yīng)需要訪問外部存儲器的運(yùn)算單元數(shù)量、運(yùn)算單元請求的服務(wù)模式、外部存儲器支持同時訪問的最大運(yùn)算單元數(shù)目。建立參數(shù)模型[N,M,Q](M≤N≤Q)描述同類型任務(wù)的訪存請求狀態(tài)及任務(wù)間的相關(guān)性,表示某類型任務(wù)有N個運(yùn)算單元需要訪問外部存儲器,有M個運(yùn)算單元的請求要求同時服務(wù),理論上最大支持Q個運(yùn)算單元同時訪問,指令讀取任務(wù)、并行任務(wù)、獨(dú)立任務(wù)的任務(wù)模型分別為[1,1,Q]、[N,N,Q]、[N,1,Q]。
目標(biāo)系統(tǒng)中單個運(yùn)算單元帶寬為Bu,外部存儲器帶寬為Be,理論上支持的最大運(yùn)算單元同時訪問數(shù)量Q為:
Q=Be/Bu。
若運(yùn)算單元直接對外部存儲器進(jìn)行訪問,則造成的帶寬浪費(fèi)ΔB為:
ΔB=Be-Bu。
為充分利用外部存儲器的帶寬,針對目標(biāo)系統(tǒng)多運(yùn)算單元并行訪存,且訪存模式多樣的特點(diǎn),本文使用一種兩級仲裁與并行訪存設(shè)計相結(jié)合的機(jī)制實現(xiàn)多運(yùn)算單元并行訪問外部存儲器。
并行訪存控制器利用外部存儲器與運(yùn)算單元間的帶寬差異,根據(jù)訪存特點(diǎn)將運(yùn)算單元帶寬合并或是控制運(yùn)算單元分時獨(dú)享外部存儲器帶寬以實現(xiàn)并行訪存,其結(jié)構(gòu)如圖3所示。并行訪存控制器對訪存請求進(jìn)行識別,根據(jù)任務(wù)類型以及讀寫需求發(fā)送給對應(yīng)通道或任務(wù)組,針對任務(wù)訪存特點(diǎn),任務(wù)組采用不同的并行訪存設(shè)計,在不同的任務(wù)組間使用兩級仲裁進(jìn)行選擇,輸出最終仲裁結(jié)果,最后通過外部存儲器讀寫控制模塊,實現(xiàn)數(shù)據(jù)及地址與外部存儲器間的交互。
圖3 并行訪存控制器結(jié)構(gòu)
2.1.1 高優(yōu)先級通道設(shè)計
為指令讀取任務(wù)設(shè)計的高優(yōu)先級通道,其任務(wù)模型為[1,1,Q]。通道所需帶寬僅為Bu,由于任務(wù)數(shù)據(jù)量少,使用FIFO進(jìn)行緩沖。
FIFO具有數(shù)據(jù)緩沖和位寬轉(zhuǎn)換功能。FIFO在外部存儲器側(cè)以帶寬Be接受數(shù)據(jù),并以帶寬Bu發(fā)送至系統(tǒng)數(shù)據(jù)端口,外部存儲器工作時間僅為任務(wù)總時間的1/Q。期間外部存儲器能夠始終以最大帶寬連續(xù)工作,并提前將數(shù)據(jù)放入FIFO中,其后外部存儲器為其他任務(wù)服務(wù),高優(yōu)先級通道則使用FIFO中數(shù)據(jù)繼續(xù)工作。
2.1.2 并行任務(wù)組設(shè)計
并行任務(wù)組執(zhí)行并行任務(wù),其任務(wù)模型為[N,N,Q]。此類任務(wù)中N個運(yùn)算單元的訪存操作同步,使用帶寬合并的方法實現(xiàn)并行訪存。
并行任務(wù)組工作所需總帶寬Bp為:
Bp=NBu。
系統(tǒng)中每一個運(yùn)算單元單周期傳輸?shù)臄?shù)據(jù)位寬W及工作頻率f相同。帶寬合并將每周期傳輸?shù)腘個位寬為W的數(shù)據(jù)視為一個完整的數(shù)據(jù)與外部存儲器進(jìn)行交互,也即將每個運(yùn)算單元的帶寬合并以提高任務(wù)組訪存時的帶寬,即
(1)
并行任務(wù)組內(nèi)部使用FIFO組結(jié)構(gòu),并行任務(wù)所使用的運(yùn)算單元數(shù)量N固定,因此FIFO組中共有N個FIFO,每個FIFO對應(yīng)一個運(yùn)算單元。FIFO組執(zhí)行數(shù)據(jù)緩沖功能,使并行任務(wù)組在未獲得外部存儲器訪問權(quán)時仍能依靠FIFO繼續(xù)工作。
執(zhí)行寫任務(wù)與讀任務(wù)的并行任務(wù)組各自工作流程如圖4所示。并行任務(wù)執(zhí)行時使用N個運(yùn)算單元,因此并行任務(wù)組工作時,FIFO組中所有FIFO均需要工作,每個FIFO都將與一個運(yùn)算單元進(jìn)行數(shù)據(jù)傳輸,同時并行任務(wù)的訪存具有同步性要求,所有運(yùn)算單元的訪存操作需要保持同步。因此可以通過檢測FIFO組中各FIFO狀態(tài),控制訪存的同步性。
圖4 并行任務(wù)工作流程
2.1.3 獨(dú)立任務(wù)組設(shè)計
獨(dú)立任務(wù)組處理獨(dú)立任務(wù), 其任務(wù)模型為[N,1,Q]。N個運(yùn)算單元的訪存操作獨(dú)立,使用獨(dú)立任務(wù)通道進(jìn)行,獨(dú)立任務(wù)使用分時輪詢的方法實現(xiàn)并行訪存。
輪詢機(jī)制能夠保證不同任務(wù)通道獲得完全公平的訪問外部存儲器的機(jī)會。在輪詢過程中,獨(dú)立任務(wù)通道使用類似于高優(yōu)先級通道的FIFO結(jié)構(gòu)以平衡帶寬差異。若FIFO容量為C,運(yùn)算單元與外部存儲器帶寬差異為ΔB,由于獨(dú)立任務(wù)數(shù)據(jù)量一般大于FIFO容量,外部存儲器以帶寬Be工作的最長時間Tmax為:
Tmax=C/ΔB。
因此需要限制獨(dú)立任務(wù)通道每次訪問外部存儲器的時長,參考時分復(fù)用的原理,對外部存儲器進(jìn)行分時輪詢訪存[7-8]。
分時輪詢訪存設(shè)置通道訪問時間t(t≤Tmax),以避免通道長時間占用外部存儲器。基于帶寬差異,獨(dú)立數(shù)據(jù)通道訪問外部存儲器時間t,可以支持其FIFO與運(yùn)算單元進(jìn)行時間為Qt的數(shù)據(jù)傳輸,除去數(shù)據(jù)通道自身訪存時間t,外部存儲器有(Q-1)t的時間為其他的獨(dú)立數(shù)據(jù)通道服務(wù),即
Qt=Bet/Bu
(2)
實際工作過程中,獨(dú)立通道無法以理論狀態(tài)進(jìn)行工作,為保證通道能夠獲得理想的訪問時間,使用基于閾值判斷的方法,靈活分配通道的訪問時間。該方法根據(jù)獨(dú)立任務(wù)通道總數(shù)據(jù)容量,為通道分配多級閾值。獨(dú)立通道在獲得外部存儲器訪問權(quán)時,將查詢通道內(nèi)部FIFO實際緩沖的數(shù)據(jù)量,與各級閾值對比,分配合理的訪問時間,其偽碼如下:
If data-amount>threshold-1 then
//進(jìn)行閾值判斷
t=t1
//分配對應(yīng)工作時間
else if data-amount>threshold-2 then
t=t2
?
else
t=0
其中的data-amount在寫任務(wù)中為FIFO內(nèi)數(shù)據(jù)量,在讀任務(wù)中為FIFO內(nèi)剩余空間。同時,對于沒有訪存請求的獨(dú)立任務(wù)通道,不為其分配時間。
經(jīng)典的仲裁方法有固定優(yōu)先級仲裁、輪詢仲裁、彩票仲裁等,這些方法有著各種的適用范圍以及局限性。為實現(xiàn)更精確、更有效的仲裁,可以使用多種仲裁方法進(jìn)行多級仲裁[9-11]。
目標(biāo)系統(tǒng)中任務(wù)優(yōu)先級由高到低分別為指令讀取任務(wù)、并行任務(wù)、獨(dú)立任務(wù),同時讀任務(wù)與寫任務(wù)的訪問需求是動態(tài)調(diào)整的。根據(jù)這一特點(diǎn),設(shè)計了一種兩級仲裁機(jī)制,其仲裁方式如下:不同通道與任務(wù)組根據(jù)讀、寫任務(wù)分類,第1級仲裁使用固定優(yōu)先級仲裁,根據(jù)優(yōu)先級對讀任務(wù)與寫任務(wù)分別進(jìn)行仲裁,得到讀任務(wù)和寫任務(wù)的仲裁結(jié)果后,在第2級仲裁中根據(jù)動態(tài)權(quán)重進(jìn)行加權(quán)輪詢仲裁。仲裁流程如圖5所示。
圖5 兩級仲裁流程
在第1級仲裁中,為確保高優(yōu)先級任務(wù)能及時得到響應(yīng),仲裁器在檢測到高優(yōu)先級任務(wù)到來后,低優(yōu)先級任務(wù)將暫停,任務(wù)信息與數(shù)據(jù)由對應(yīng)通道或任務(wù)組保存,直到高優(yōu)先級任務(wù)結(jié)束后繼續(xù)執(zhí)行。參考加權(quán)輪詢算法中根據(jù)權(quán)重獲得輪詢結(jié)果的策略,第2級仲裁使用可配置訪問時間的輪詢仲裁方法,動態(tài)調(diào)整讀、寫任務(wù)訪問外部存儲器的時間。
固定時間T作為一次輪詢的總時間,設(shè)讀、寫任務(wù)獲得的權(quán)重分別為Rw、Rr,則權(quán)重之和為:
R=Rw+Rr。
根據(jù)權(quán)值,讀、寫任務(wù)各自獲得訪問時間Tw、Tr為:
Tw=TRw/R,
Tr=TRr/R。
根據(jù)訪問時間,讀、寫任務(wù)將獲得帶寬Bw、Br為:
Bw=TwBe/T,
Br=TrBe/T。
在每次輪詢開始時,讀、寫任務(wù)會獲得各自的訪問時間,對外部存儲器訪問規(guī)定的時間后,或是任務(wù)已經(jīng)執(zhí)行完畢且沒有新任務(wù)需要執(zhí)行后,將訪問權(quán)切換至另一任務(wù),訪問完成后,更新訪問時間,其工作過程偽碼如下:
//寫任務(wù)執(zhí)行
If wr-task over & no newwr-task then
task switch
//切換至讀任務(wù)
else if wr-time==Twthen
//執(zhí)行訪問時間
task switch
else
wr-time=wr-time+1
//執(zhí)行時間計數(shù)
//讀任務(wù)執(zhí)行
If rd-task over & no new rd-task then
update access time
//更新訪問時間
task switch
//切換至寫任務(wù)
else if rd-time==Trthen
update access time
task switch
else
rd-time=rd-time+1
為驗證并行訪存控制器的功能,并進(jìn)行性能評估,在Xilinx XCVU440 FPGA開發(fā)板上對所設(shè)計的并行訪存控制器進(jìn)行驗證。
并行訪存控制器使用DDR3 SDRAM作為外部存儲器,擁有1條高優(yōu)先級通道,讀、寫各8條獨(dú)立任務(wù)通道,以及讀、寫各1組支持8個運(yùn)算單元執(zhí)行并行任務(wù)的并行任務(wù)組,整體資源消耗見表1所列。
表1 并行訪存控制器資源消耗
實驗使用的DDR3理論帶寬為102.4 Gb/s,相當(dāng)于16個運(yùn)算單元同時訪問所需帶寬,由于DDR3中內(nèi)部預(yù)充電、激活和自刷新等時間消耗,實際帶寬無法達(dá)到理論值。定義帶寬利用率u為并行訪存控制器工作時的實際帶寬Breal與外部存儲器理論帶寬Be的比值,即
u=(Breal/Be)×100%
(3)
計算并行訪存控制器在工作過程中帶寬利用率的平均值,將平均帶寬利用率作為性能評估的參考。其中沒有運(yùn)算單元要求訪存的情況不計算,平均帶寬利用率越高代表端口傳輸速率以及任務(wù)并行度越高。
對并行訪存控制器在獨(dú)立工作模式和并行工作模式下分別進(jìn)行滿載讀、寫,以測試各工作模式的并行訪存設(shè)計所能達(dá)到的最大帶寬利用率。系統(tǒng)單次任務(wù)一般使用8個運(yùn)算單元執(zhí)行,因此滿載測試使用8個運(yùn)算單元執(zhí)行寫任務(wù),8個運(yùn)算單元執(zhí)行讀任務(wù),共使用16個運(yùn)算單元,讀、寫任務(wù)同時進(jìn)行。讀、寫數(shù)據(jù)量相同,獨(dú)立工作模式下將讀、寫任務(wù)數(shù)據(jù)各分為128個數(shù)據(jù)組,并行工作模式下8個運(yùn)算單元共同處理單個數(shù)據(jù)組,讀、寫任務(wù)數(shù)據(jù)各分為16個數(shù)據(jù)組以保證每個運(yùn)算單元獲得數(shù)據(jù)量相同。運(yùn)算單元對數(shù)據(jù)組的讀、寫過程連續(xù),測試不同數(shù)據(jù)量以及工作模式下的并行訪存控制器平均帶寬利用率,結(jié)果見表2所列。
表2 滿載狀態(tài)下平均帶寬利用率
由表2可知,在滿載情況下平均帶寬利用率最高能夠達(dá)到84.738%,并行工作模式下平均帶寬利用率相對較高,這是由于并行工作模式下讀寫過程更加連續(xù),且沒有通道切換損耗。
對實際任務(wù)執(zhí)行情況進(jìn)行測試,分別以運(yùn)算時間小于訪存時間的復(fù)數(shù)加任務(wù)以及運(yùn)算時間大于訪存時間的快速傅里葉變換(fast Fourier transform,FFT)運(yùn)算任務(wù)作為測試對象。
測試過程中同時執(zhí)行1組并行任務(wù)及1組獨(dú)立任務(wù),2組任務(wù)待處理數(shù)據(jù)量相同,獨(dú)立任務(wù)數(shù)據(jù)拆分為128個數(shù)據(jù)組,并行任務(wù)數(shù)據(jù)拆分為16個數(shù)據(jù)組。2組任務(wù)各使用8個運(yùn)算單元處理,運(yùn)算單元每次處理1個數(shù)據(jù)組,執(zhí)行讀取、計算、寫入過程。測試2種任務(wù)在不同數(shù)據(jù)量下的平均帶寬利用率,結(jié)果見表3所列。
由表3可知,實際任務(wù)執(zhí)行過程中,平均帶寬利用率通常會低于滿載情況,且對于FFT運(yùn)算任務(wù),平均帶寬利用率更低。這是由于實際任務(wù)執(zhí)行過程中并行訪存控制器不會始終工作在滿載狀態(tài),系統(tǒng)的實際帶寬需求低于存儲器理論帶寬。運(yùn)算時間較長時,訪存請求分散,任務(wù)并行度降低,系統(tǒng)的實際帶寬需求減少,進(jìn)一步降低了平均帶寬利用率。
表3 執(zhí)行實際任務(wù)時平均帶寬利用率
選擇表3中并行工作模式數(shù)據(jù)組容量為8 192,獨(dú)立工作模式數(shù)據(jù)組容量為1 024的任務(wù),對實際任務(wù)執(zhí)行過程中各階段的平均帶寬利用率變化進(jìn)行分析。將任務(wù)執(zhí)行過程分為10個階段,按照任務(wù)執(zhí)行總時間平均劃分,任務(wù)每執(zhí)行其總時間的1/10,計為一個階段,計算其在不同階段內(nèi)的平均帶寬利用率,如圖6所示。
圖6 不同階段的平均帶寬利用率
任務(wù)執(zhí)行過程中,任務(wù)的平均帶寬利用率變化曲線不斷變化,FFT運(yùn)算任務(wù)由于訪存請求分散,平均帶寬利用率始終低于運(yùn)算時間較小的復(fù)數(shù)加任務(wù)。各階段平均帶寬利用率的變化主要是由于任務(wù)執(zhí)行狀態(tài)的不同。并行任務(wù)組與獨(dú)立任務(wù)組同時進(jìn)行訪存,例如,并行任務(wù)組執(zhí)行讀任務(wù)時,獨(dú)立任務(wù)組同時執(zhí)行寫任務(wù)的情況下,任務(wù)并行度較高,此類情況較多的階段,平均帶寬利用率較高,反之,平均帶寬利用率較低。此外,若有任務(wù)組在執(zhí)行讀任務(wù)時,存在之前緩存在任務(wù)組中的數(shù)據(jù)需要寫入外部存儲器,此時數(shù)據(jù)的寫入過程不會計入任務(wù)并行度,但是將導(dǎo)致讀任務(wù)的任務(wù)并行度降低,這種情況較多的階段,平均帶寬利用率也會有所降低。
本文設(shè)計了一種用于多核SoC中多運(yùn)算單元并行訪問外部存儲器的接口結(jié)構(gòu)。針對目標(biāo)SoC系統(tǒng)的工作特點(diǎn)設(shè)計了多種并行訪問機(jī)制以實現(xiàn)利用帶寬差異進(jìn)行并行訪存,使用兩級仲裁彌補(bǔ)單一仲裁方法的局限性,對不同任務(wù)進(jìn)行仲裁。經(jīng)測試,該并行訪存控制器能夠有效利用外部存儲器帶寬,在滿載情況下平均帶寬利用率最高能夠達(dá)到84.738%,實際任務(wù)執(zhí)行過程中平均帶寬利用率最高能夠達(dá)到54.653%。