王正茂, 宋宇鯤, 侯 寧, 王澤中, 張多利
(1.合肥工業(yè)大學(xué) 微電子學(xué)院,安徽 合肥 230601; 2.河南城建學(xué)院 電氣與控制工程學(xué)院,河南 平頂山 467036)
隨著工藝進(jìn)步,單個(gè)芯片內(nèi)已能集成數(shù)以百計(jì)的內(nèi)核,此時(shí),傳統(tǒng)總線或分段總線結(jié)構(gòu)的擴(kuò)展性差、并行通信能力弱的缺陷使得其無法滿足現(xiàn)代多核芯片對(duì)內(nèi)部通訊性能的要求[1]。誕生于20世紀(jì)末的片上網(wǎng)絡(luò)(network-on-chip,NoC)技術(shù)被業(yè)界認(rèn)為是一種從體系結(jié)構(gòu)上解決上述問題的有效技術(shù)途徑[2]。目前多核芯片通常集成有多種功能定制化網(wǎng)絡(luò),即網(wǎng)絡(luò)功能正交化,將不同功能分置于專用定制網(wǎng)絡(luò)上,例如,Tilera公司的Tile系列多核處理器集成有靜態(tài)網(wǎng)絡(luò)(STN)、單元?jiǎng)討B(tài)網(wǎng)絡(luò)(TDN)、用戶動(dòng)態(tài)網(wǎng)絡(luò)(UDN)、存儲(chǔ)動(dòng)態(tài)網(wǎng)絡(luò)(MDN)、IO動(dòng)態(tài)網(wǎng)絡(luò)(IDN)等5種獨(dú)立功能網(wǎng)絡(luò)[3];TI公司的多核DSP TMS320C6678內(nèi)部任務(wù)控制網(wǎng)絡(luò)和數(shù)據(jù)網(wǎng)絡(luò)也是相互對(duì)立的[4];TRIPS處理器內(nèi)部設(shè)置了指令、數(shù)據(jù)和控制通道分離的設(shè)計(jì)結(jié)構(gòu)[5]。NoC作為片上通訊載體,其性能是決定整個(gè)多核系統(tǒng)運(yùn)算性能的重要因素,因此有關(guān)NoC拓?fù)浣Y(jié)構(gòu)、路由算法和交換機(jī)制等相關(guān)技術(shù)始終是研究的主要熱點(diǎn)。
依據(jù)鏈路建立過程,NoC可分為集中控制和分布式控制兩大類[6]。
集中控制由一個(gè)中央節(jié)點(diǎn)負(fù)責(zé)定期收集網(wǎng)絡(luò)狀態(tài),再計(jì)算產(chǎn)生各條鏈路的全路徑路由配置信息,管理各個(gè)路由節(jié)點(diǎn)的路由方向;分布式控制是網(wǎng)絡(luò)中的各個(gè)節(jié)點(diǎn)根據(jù)目的節(jié)點(diǎn)的相對(duì)位置和自身周邊節(jié)點(diǎn)狀態(tài),在本地獨(dú)立地計(jì)算后繼有限范圍內(nèi)的節(jié)點(diǎn)位置。綜合考慮實(shí)現(xiàn)復(fù)雜性和網(wǎng)絡(luò)性能后,目前多數(shù)NoC采用分布式結(jié)構(gòu)[6]。
分布式控制網(wǎng)絡(luò)的鏈路分為有效鏈路和無效鏈路2種情況,前者指完成了數(shù)據(jù)傳輸?shù)逆溌?后者指鏈路建立失敗或鏈路成功而目的端無效的情況,稱此鏈路為無效鏈路。為保證數(shù)據(jù)傳輸時(shí)效性,發(fā)起端在檢測(cè)到無效鏈路后,應(yīng)等待若干時(shí)間后再次嘗試建立鏈路,直至數(shù)據(jù)傳輸成功[7]。
對(duì)鏈路擁堵造成NoC性能下降的問題,文獻(xiàn)[8]提出一種可以根據(jù)當(dāng)前路由負(fù)載狀態(tài)進(jìn)行算法切換的動(dòng)態(tài)混合路由設(shè)計(jì),該路由可根據(jù)負(fù)載狀態(tài),在確定路由和多負(fù)載均衡路由間自行切換,在一定程度上降低關(guān)鍵路由的繁忙率,緩解路由擁塞;文獻(xiàn)[9]針對(duì)NoC中存在多種與時(shí)間相關(guān)的流量負(fù)載情況,設(shè)計(jì)了一種針對(duì)特定拓?fù)浣Y(jié)構(gòu)的全局鏈路管理機(jī)制,通過監(jiān)視網(wǎng)絡(luò)狀態(tài),動(dòng)態(tài)調(diào)整每個(gè)鏈路的具體路由算法,來獲得高負(fù)載平衡和高吞吐量;文獻(xiàn)[10]提出了一種基于曼哈頓距離的多播自適應(yīng)路由方案,該方案通過引入的特定約束,避免了死鎖和活鎖的影響,實(shí)現(xiàn)更好的平均流量分配,提高了網(wǎng)絡(luò)性能;文獻(xiàn)[11]提出一種新型路由內(nèi)部?jī)?yōu)先級(jí)仲裁方法,該方法有效提高了NoC飽和流量值;Spider-Donut網(wǎng)絡(luò)半徑小于2D網(wǎng)絡(luò),文獻(xiàn)[12]研究了一種用于Spider-Donut網(wǎng)絡(luò)的無死鎖路由算法,實(shí)現(xiàn)均衡的片上流量,進(jìn)而提高整個(gè)網(wǎng)絡(luò)性能;文獻(xiàn)[13]在NoC路由器中使用基于遺傳算法的鏈路負(fù)載平衡技術(shù),實(shí)現(xiàn)快速流量均衡分配,避免負(fù)載不均衡帶來的鏈路擁堵狀況。
上述研究工作的重心集中于通過優(yōu)化路由算法平衡網(wǎng)絡(luò)負(fù)載,緩解NoC中擁堵問題,處理對(duì)象是有效鏈路,沒有考慮無效鏈路因素,隨著NoC規(guī)模不斷擴(kuò)展,節(jié)點(diǎn)布局密度趨近1,高注入率下,無效鏈路對(duì)整個(gè)網(wǎng)絡(luò)性能的影響已無法被忽視。為此,本文在已有NoC相關(guān)研究的基礎(chǔ)上,從減少無效鏈路數(shù)量的角度出發(fā),提出了一種受約束分布式片上網(wǎng)絡(luò)機(jī)制(constrained distributed NoC mechanism,CDNM),設(shè)計(jì)出一種目的端狀態(tài)追蹤機(jī)制和鏈路維持協(xié)議,進(jìn)一步降低NoC片上擁堵率,提升大通訊量NoC系統(tǒng)的整體性能。本文提出的受約束分布式NoC可以用于不同路由方式,具有良好的適用性。
本文從面向計(jì)算密集型和數(shù)據(jù)密集型任務(wù)的多核系統(tǒng)內(nèi)部數(shù)據(jù)交互需求出發(fā),結(jié)合多核系統(tǒng)編程模型規(guī)范,通過將目的端狀態(tài)引入分布式網(wǎng)絡(luò),構(gòu)建了一種基于兩端狀態(tài)條件約束的分布式NoC,包括一種目的端狀態(tài)快速傳輸方案和基于這一方案的鏈路建立規(guī)則,以及一種鏈路維持協(xié)議。
本文設(shè)計(jì)的NoC采用三重網(wǎng)絡(luò)結(jié)構(gòu)組成,包括數(shù)據(jù)網(wǎng)絡(luò)、狀態(tài)網(wǎng)絡(luò)和配置網(wǎng)絡(luò)。狀態(tài)網(wǎng)絡(luò)將網(wǎng)絡(luò)中各功能節(jié)點(diǎn)狀態(tài)信息上傳至主控制器,各功能節(jié)點(diǎn)的配置和管理信息通過配置網(wǎng)下行到各功能節(jié)點(diǎn),形成一個(gè)閉環(huán)的管理機(jī)制。數(shù)據(jù)網(wǎng)絡(luò)采用“包-電路交換”(packet-connected circuit,PCC)機(jī)制、Mesh拓?fù)浣Y(jié)構(gòu)和回退轉(zhuǎn)向路由算法。
改進(jìn)的分布式網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
圖1 改進(jìn)的分布式網(wǎng)絡(luò)結(jié)構(gòu)
PCC通過包交換方式建立鏈路,再通過電路交換方式傳輸數(shù)據(jù),是一種適合大批量數(shù)據(jù)傳輸任務(wù)的NoC機(jī)制。
本文設(shè)計(jì)的數(shù)據(jù)網(wǎng)絡(luò)中數(shù)據(jù)傳輸是由源端主導(dǎo),即源端負(fù)責(zé)鏈路的建立,配置目的端坐標(biāo),而目的端無需知道源端坐標(biāo)。當(dāng)源端單元數(shù)據(jù)就緒,通過發(fā)送控制單元獲得當(dāng)前數(shù)據(jù)的目的端坐標(biāo)和數(shù)量信息,并將數(shù)據(jù)打包后經(jīng)數(shù)據(jù)網(wǎng)絡(luò)傳遞至目的單元的接收控制器進(jìn)行解包操作,最終解包后的數(shù)據(jù)寫入目的單元。
本文設(shè)計(jì)的數(shù)據(jù)網(wǎng)絡(luò)工作流程如圖2所示,這里使用數(shù)據(jù)網(wǎng)Feedback操作在鏈路建立成功后獲取目的端狀態(tài),用狀態(tài)廣播的方法在未建立鏈路時(shí)獲取目的端從無效變?yōu)橛行У氖录?從而實(shí)現(xiàn)對(duì)目的端的狀態(tài)追蹤。
圖2 數(shù)據(jù)傳輸流程
源端在有效后建立鏈路,一旦鏈路建立成功,使用Feedback操作判斷目的端的狀態(tài)。若目的端也有效,則開始一次數(shù)據(jù)傳輸;否則撤銷鏈路,并且監(jiān)聽配置網(wǎng)的廣播信息,直到收到目的端變?yōu)橛行У男盘?hào),才重新建立鏈路。
源端在一次傳輸完成后,再次使用Feedback操作,獲取目的端是否有效的狀態(tài)。若此時(shí)雙端都依然有效,則直接開始下一次的數(shù)據(jù)傳輸;否則撤銷鏈路,直到雙端都有效后才重新建立鏈路。
2.2.1 鏈路反饋機(jī)制
本文在傳統(tǒng)網(wǎng)絡(luò)的單向鏈路的基礎(chǔ)上增加了鏈路反饋能力,允許從目的端到源端的信息反饋。該機(jī)制可以使源端利用建立好的鏈路快速獲取目的端狀態(tài)。
2.2.2 狀態(tài)追蹤機(jī)制
本文使用源端控制為主的數(shù)據(jù)傳輸機(jī)制,該機(jī)制的工作效果受對(duì)目的端狀態(tài)監(jiān)測(cè)效率的影響,因此需要建立一套實(shí)時(shí)追蹤目的端狀態(tài)變化信號(hào)的策略。前述提到的狀態(tài)廣播機(jī)制和鏈路反饋機(jī)制用于解決這一問題,實(shí)現(xiàn)源端對(duì)目的端的狀態(tài)追蹤。
源端、目的端的狀態(tài)表在以下情況更新:
(1) 收到某個(gè)節(jié)點(diǎn)準(zhǔn)備好的廣播,且廣播信息中的坐標(biāo)與當(dāng)前目的節(jié)點(diǎn)坐標(biāo)相同,更新目的端狀態(tài)dst-ready=true。
(2) 在鏈路建立成功后或者發(fā)送完一個(gè)數(shù)據(jù)包后,收到目的端利用鏈路反饋機(jī)制通過數(shù)據(jù)網(wǎng)鏈路反饋的信號(hào),根據(jù)此反饋信號(hào)更新目的端狀態(tài)dst-ready=true或者dst-ready=false。
(3) 在源端切換目的之后,由于之前未在狀態(tài)網(wǎng)監(jiān)聽該坐標(biāo),此時(shí)無法知道目的端狀態(tài),默認(rèn)dst-ready=true;對(duì)應(yīng)圖2中開始后,如果源端有效直接建立鏈路,那么通過一次嘗試連接來確定目的節(jié)點(diǎn)狀態(tài)。
2.2.3 Keep-alive機(jī)制
包-電路交換策略雖然結(jié)合了包交換和電路交換的優(yōu)點(diǎn),但過多的鏈路建立和撤銷影響通訊效率。為解決此問題,本文提出一種Keep-alive機(jī)制,即在一次包傳輸完成后,若條件滿足,則直接傳輸下一個(gè)包,省去了鏈路重建過程。在傳統(tǒng)架構(gòu)中,傳輸多個(gè)數(shù)據(jù)包過程如圖3所示。
圖3 NoC傳輸多個(gè)數(shù)據(jù)包示意圖
該過程包括源端發(fā)送頭包(H)請(qǐng)求建立鏈路,目的端應(yīng)答(A)、數(shù)據(jù)傳輸(D)、發(fā)送結(jié)束信號(hào)(E)、鏈路取消(C)。傳統(tǒng)結(jié)構(gòu)需要執(zhí)行2次完整的鏈路建立/數(shù)據(jù)傳輸/撤銷的過程才能完成2次獨(dú)立的數(shù)據(jù)傳輸。這勢(shì)必會(huì)造成一定的網(wǎng)絡(luò)性能損失。
本文設(shè)計(jì)的數(shù)據(jù)網(wǎng)為了提高效率,引入Keep-alive機(jī)制,允許一次建立鏈路發(fā)送多個(gè)數(shù)據(jù)包,其原理是在當(dāng)前數(shù)據(jù)傳輸完成后,直接利用鏈路反饋機(jī)制獲取目的端是否準(zhǔn)備的信號(hào),再由源端結(jié)合本地輸出數(shù)據(jù)狀態(tài)和當(dāng)前地址隊(duì)列輸出判斷是否滿足繼續(xù)傳輸?shù)臈l件;若滿足,則繼續(xù)傳輸,省去了撤銷鏈路再重新建立鏈路的過程。
具體的改進(jìn)是將原本“包-電路連接”協(xié)議中的Cancel信號(hào)改為反饋(Feedback)信號(hào),用于目的端向源端反饋是目的端當(dāng)前狀態(tài)信息,如果目的端處于有效狀態(tài),那么源端直接發(fā)送,在此過程中既有鏈路不會(huì)被撤銷。Keep-alive協(xié)議的執(zhí)行過程包括以下步驟:
(1) 目的端收到當(dāng)前數(shù)據(jù)包的最后一個(gè)數(shù)據(jù)時(shí),通過數(shù)據(jù)網(wǎng)反饋通道通知源端、目的端當(dāng)前是否處于有效狀態(tài)。
(2) 源端收到數(shù)據(jù)網(wǎng)反饋回來的目的端狀態(tài)后,同時(shí)檢測(cè)源端數(shù)據(jù)有效、目的端有效、目的端地址等于目標(biāo)隊(duì)列輸出地址等3個(gè)條件;若3個(gè)條件成立,則開始新的一輪數(shù)據(jù)發(fā)送操作。
為實(shí)現(xiàn)分布式鏈路控制機(jī)制和鏈路生命延長(zhǎng)協(xié)議,本文在經(jīng)典PCC網(wǎng)絡(luò)基礎(chǔ)上進(jìn)行硬件改進(jìn)設(shè)計(jì),使用發(fā)送控制器和接收控制器完成功能節(jié)點(diǎn)到數(shù)據(jù)網(wǎng)之間的數(shù)據(jù)格式轉(zhuǎn)換工作,因此數(shù)據(jù)網(wǎng)絡(luò)協(xié)議適用于發(fā)送控制器與路由節(jié)點(diǎn)之間、路由節(jié)點(diǎn)之間、路由節(jié)點(diǎn)與接收控制器之間。發(fā)送控制器和接收控制器,既可單獨(dú)使用,也可成對(duì)使用。所設(shè)計(jì)的片上數(shù)據(jù)網(wǎng)絡(luò)協(xié)議由Cmd信號(hào)、Data信號(hào)和Feedback信號(hào)共同實(shí)現(xiàn),其在數(shù)據(jù)網(wǎng)絡(luò)中的組織連接關(guān)系如圖4所示。
圖4 數(shù)據(jù)網(wǎng)組織連接關(guān)系
(1) Cmd信號(hào)。3位位寬,用于源端向目的端的指令發(fā)送,包括源端向路由節(jié)點(diǎn)發(fā)起的鏈路建立請(qǐng)求、數(shù)據(jù)有效信號(hào)和數(shù)據(jù)包發(fā)送完成信號(hào)等。
(2) Data信號(hào)。64位位寬,根據(jù)Cmd[2]=1時(shí)Data信號(hào)有效,Data數(shù)據(jù)有2個(gè)功能,在鏈路建立階段低16位承載目的節(jié)點(diǎn)坐標(biāo),此時(shí)Cmd[1:0]=1;在數(shù)據(jù)傳輸階段用于承載數(shù)據(jù),此時(shí)Cmd[1:0]=2或3。
(3) Feedback信號(hào)。3位位寬,用于目的端向源端的反饋,包括目的端節(jié)點(diǎn)向源端節(jié)點(diǎn)的狀態(tài)反饋、下游路由節(jié)點(diǎn)向上游路由節(jié)點(diǎn)的反饋、路由節(jié)點(diǎn)向源端發(fā)送控制器的反饋等。
由3.1節(jié)的介紹可知,本文設(shè)計(jì)的片上數(shù)據(jù)網(wǎng)硬件部分由發(fā)送控制器、接收控制器和路由器3個(gè)部分組成。
3.2.1 發(fā)送控制器
發(fā)送控制器根據(jù)數(shù)據(jù)網(wǎng)絡(luò)協(xié)議對(duì)功能節(jié)點(diǎn)輸出數(shù)據(jù)進(jìn)行封包和發(fā)送操作,同時(shí)完成與路由器之間的握手操作,以及接收主控制器通過配置網(wǎng)下發(fā)的目標(biāo)隊(duì)列和其他控制。作為數(shù)據(jù)傳輸?shù)陌l(fā)起方和傳輸控制方,發(fā)送控制器必須能夠應(yīng)對(duì)復(fù)雜的傳輸協(xié)議,本文設(shè)計(jì)的發(fā)送控制器的核心是一個(gè)狀態(tài)機(jī),其狀態(tài)轉(zhuǎn)移圖如圖5所示,共設(shè)置了10個(gè)狀態(tài)。
圖5 發(fā)送控制器狀態(tài)轉(zhuǎn)移圖
發(fā)送控制器復(fù)位后處于IDLE狀態(tài),當(dāng)目標(biāo)隊(duì)列非空且源節(jié)點(diǎn)有數(shù)據(jù)需要發(fā)送,即valid信號(hào)為高時(shí),進(jìn)入TRY-TO-CONNECT狀態(tài),此過程中從目標(biāo)隊(duì)列FIFO中取出一個(gè)目標(biāo)的信息,包括目標(biāo)坐標(biāo)、包大小和包數(shù)量。在TRY-TO-CONNECT狀態(tài)等待接收反饋信號(hào),收到的反饋有3種可能:
(1) 鏈路建立失敗,進(jìn)入CONNECT-FAILED狀態(tài)。
(2) 目標(biāo)節(jié)點(diǎn)無效,進(jìn)入WAIT-CONNECT狀態(tài)。
(3) 目標(biāo)節(jié)點(diǎn)有效,進(jìn)入SEND-BEGIN狀態(tài)。
SEDN-BEGIN狀態(tài)用于計(jì)數(shù)包個(gè)數(shù),該狀態(tài)直接進(jìn)入SENDING狀態(tài)。SENDING狀態(tài)用于發(fā)送數(shù)據(jù),直到當(dāng)前數(shù)據(jù)包發(fā)送完成進(jìn)入SEND-END狀態(tài)。在SEND-END狀態(tài),若當(dāng)前節(jié)點(diǎn)的包數(shù)量達(dá)到,則進(jìn)入NEXT-DST狀態(tài);若源端無效,則進(jìn)入WAIT-VALID狀態(tài);否則進(jìn)入WAIT-SEND狀態(tài);在WAIT-SEND狀態(tài)等待接收來自目標(biāo)節(jié)點(diǎn)的反饋,若目標(biāo)節(jié)點(diǎn)未準(zhǔn)備好接收下一個(gè)數(shù)據(jù)包,則進(jìn)入WAIT-CONNECT狀態(tài);否則進(jìn)入TRY-TO-CONNECT狀態(tài)。在WAIT-VALID狀態(tài)等待源端有數(shù)據(jù)發(fā)送,進(jìn)入TRY-TO-CONNECT狀態(tài)。在WAIT-CONNECT狀態(tài)等待收到目的節(jié)點(diǎn)準(zhǔn)備好的廣播,進(jìn)入TRY-TO-CONNECT狀態(tài)。在NEXT-DST狀態(tài)直接進(jìn)入IDLE狀態(tài)。在CONNECT-FAILED狀態(tài)等待一定周期數(shù),進(jìn)入TRY-TO-CONNECT狀態(tài)。
3.2.2 路由節(jié)點(diǎn)
本文設(shè)計(jì)的數(shù)據(jù)網(wǎng)沿用了“包-電路連接”協(xié)議,每個(gè)路由節(jié)點(diǎn)有5個(gè)輸入端和5個(gè)輸出端,每個(gè)方向的輸入/輸出端口連接二維網(wǎng)格中一個(gè)方向的相鄰路由器的輸出/輸入端口,每個(gè)輸入端有1個(gè)輸入控制器用于控制路由方向,其結(jié)構(gòu)如圖6所示。
圖6 路由節(jié)點(diǎn)結(jié)構(gòu)
每個(gè)方向的Input-controller在需要請(qǐng)求輸出端口時(shí)向Arbiter發(fā)送請(qǐng)求信號(hào),經(jīng)過Arbiter裁決后將相應(yīng)的輸出端口分配給該輸入控制器。若一個(gè)輸入控制器請(qǐng)求的端口被別的輸入控制器搶先占用,則無法申請(qǐng)到該輸出端口,裁決器會(huì)反饋相應(yīng)的失敗信號(hào)。
Input-controller負(fù)責(zé)地址的解碼和路由方向選擇,以實(shí)現(xiàn)回退轉(zhuǎn)向路由的功能,其狀態(tài)轉(zhuǎn)移圖如圖7所示,該模塊的狀態(tài)機(jī)共有8種狀態(tài)。
圖7 路由節(jié)點(diǎn)狀態(tài)轉(zhuǎn)移圖
路由器復(fù)位后進(jìn)入IDLE狀態(tài),在任何一個(gè)狀態(tài)如果收到源端的鏈路撤銷請(qǐng)求,即發(fā)現(xiàn)源端口斷開,都進(jìn)入IDLE狀態(tài)。在IDLE狀態(tài)收到鏈路建立請(qǐng)求進(jìn)入START-CONNECTING狀態(tài)。在START-CONNECTING狀態(tài),若目標(biāo)地址為本地地址,則進(jìn)入CONNECT-LOCAL狀態(tài);若目標(biāo)地址與本地地址在同一行,則進(jìn)入CONNECT-2nd狀態(tài);否則進(jìn)入CONNECT-1st狀態(tài)。在CONNECT-1st狀態(tài)請(qǐng)求左或右端口,若一定周期后未請(qǐng)求到端口,或者收到鏈路失敗的反饋,則進(jìn)入SWITCH狀態(tài);若收到來自目的端的取消鏈路反饋,則進(jìn)入CONNECT-CANCELED狀態(tài)。在SWITCH狀態(tài)判斷若目標(biāo)地址與本地地址在同一列,則進(jìn)入FAILED狀態(tài);否則進(jìn)入CONNECT-2nd狀態(tài)。在CONNECT-2nd狀態(tài)請(qǐng)求上或下端口,若一定周期后未請(qǐng)求到端口,或者收到鏈路失敗的反饋,則進(jìn)入FAILED狀態(tài);若收到來自目的端的取消鏈路反饋,則進(jìn)入CONNECT-CANCELED狀態(tài)。在FAILED狀態(tài)向上級(jí)路由節(jié)點(diǎn)反饋鏈路失敗信息,進(jìn)入IDLE狀態(tài)。在CONNECT-CANCELED狀態(tài)向上級(jí)路由節(jié)點(diǎn)反饋鏈路取消的信息,進(jìn)入IDLE狀態(tài)。在CONNECT-LOCAL狀態(tài)請(qǐng)求本地端口,若未請(qǐng)求到端口,即裁決器沒有響應(yīng),則進(jìn)入FAILED狀態(tài);若收到來自目的端的未準(zhǔn)備反饋,則進(jìn)入CONNECT-CANCELED狀態(tài)。
3.2.3 接收控制器
本文設(shè)計(jì)的數(shù)據(jù)網(wǎng)的接收控制器負(fù)責(zé)將網(wǎng)絡(luò)上的數(shù)據(jù)解包成功能節(jié)點(diǎn)可識(shí)別的格式并傳輸至功能節(jié)點(diǎn),同時(shí)將功能節(jié)點(diǎn)的當(dāng)前狀態(tài)送入數(shù)據(jù)網(wǎng)絡(luò)的反饋通道。接收控制器內(nèi)狀態(tài)轉(zhuǎn)移如圖8所示,共有6個(gè)狀態(tài)。
圖8 接收控制器狀態(tài)轉(zhuǎn)移圖
接收控制復(fù)位后進(jìn)入IDLE狀態(tài),在任何一個(gè)狀態(tài)收到源端的鏈路撤銷請(qǐng)求都進(jìn)入IDLEING狀態(tài);在IDLE狀態(tài)收到鏈路建立請(qǐng)求進(jìn)入CONNECTING狀態(tài)。在CONNECTING狀態(tài)判斷功能節(jié)點(diǎn)是否準(zhǔn)備好接收數(shù)據(jù),若準(zhǔn)備好,則進(jìn)入SUCCESS狀態(tài);否則進(jìn)入CANCELED狀態(tài)。在CANCELED狀態(tài)向路由節(jié)點(diǎn)發(fā)送鏈路取消的信息,直接進(jìn)入IDLE狀態(tài)。在SUCCESS狀態(tài)向路由節(jié)點(diǎn)發(fā)送鏈路成功的信息,直接進(jìn)入RECEVING狀態(tài)。在RECEVING狀態(tài)接收數(shù)據(jù)并發(fā)送給功能節(jié)點(diǎn),直到收到包結(jié)束的信號(hào),進(jìn)入REPORT狀態(tài)。在REPORT狀態(tài)判斷功能節(jié)點(diǎn)是否準(zhǔn)備好接收數(shù)據(jù)。若準(zhǔn)備好,則直接進(jìn)入SUCCESS狀態(tài);若沒有準(zhǔn)備好,則進(jìn)入CANCELED狀態(tài)。
本文在Xilinx xcuv440-flga2892 FPGA上搭建8×8的網(wǎng)絡(luò)用于測(cè)試,資源消耗見表1所列。
表1 資源消耗
為了測(cè)試該網(wǎng)絡(luò)的性能,本文使用傳輸效率、平均延遲和鏈路效率作為性能指標(biāo)。其中傳輸效率指數(shù)據(jù)傳輸時(shí)間與鏈路占用時(shí)間的比值,鏈路占用時(shí)間包括鏈路建立時(shí)間、數(shù)據(jù)傳輸時(shí)間和鏈路撤銷時(shí)間。傳輸效率的計(jì)算公式為:
傳輸效率=
(1)
在理想狀態(tài)下傳輸效率趨向于1,在負(fù)載增大時(shí)由于網(wǎng)絡(luò)節(jié)點(diǎn)出現(xiàn)擁堵,回退轉(zhuǎn)向路由建立鏈路時(shí)間增加會(huì)造成傳輸效率下降,傳輸效率越高說明網(wǎng)絡(luò)能夠承受越大的負(fù)載,網(wǎng)絡(luò)吞吐量越大。
平均延遲指從數(shù)據(jù)準(zhǔn)備好發(fā)送到開始傳輸?shù)钠骄鶗r(shí)間,平均延遲的計(jì)算公式為:
(2)
總延遲為源端和目的端同時(shí)準(zhǔn)備好到鏈路建立成功之間的時(shí)間,平均延遲越低網(wǎng)絡(luò)的實(shí)時(shí)性越高。
鏈路效率指有效鏈路數(shù)量與總鏈路數(shù)量的比值,為方便統(tǒng)計(jì),本文定義鏈路效率為:
(3)
一般情況下數(shù)據(jù)包數(shù)量即為有效鏈路數(shù)量,理想狀態(tài)下網(wǎng)絡(luò)不發(fā)生擁堵,鏈路建立次數(shù)等于總鏈路數(shù)量,在網(wǎng)絡(luò)負(fù)載很高的情況下由于發(fā)生擁堵導(dǎo)致鏈路失敗重連,鏈路成功率下降。鏈路成功率下降的趨勢(shì)反映了網(wǎng)絡(luò)負(fù)載能力,下降得越慢代表網(wǎng)絡(luò)負(fù)載能力越高。
針對(duì)目標(biāo)系統(tǒng)的傳輸需求,本實(shí)驗(yàn)將原先網(wǎng)絡(luò)與優(yōu)化后的網(wǎng)絡(luò)進(jìn)行對(duì)比測(cè)試,分別測(cè)試在不同通訊負(fù)載下的各個(gè)性能指標(biāo)。
實(shí)驗(yàn)在8×8的NoC上進(jìn)行,分別測(cè)試負(fù)載為1~64條鏈路下的性能。原先網(wǎng)絡(luò)和優(yōu)化后的網(wǎng)絡(luò)采用相同的隨機(jī)負(fù)載,模擬資源節(jié)點(diǎn)接收緩沖區(qū)大小為1 024,數(shù)據(jù)包長(zhǎng)度為512,資源節(jié)點(diǎn)運(yùn)算性能為接口帶寬的1/2,鏈路失敗后重連的等待周期數(shù)為256,每批量運(yùn)算數(shù)據(jù)量為4 096。由于負(fù)載的位置對(duì)網(wǎng)絡(luò)性能有影響,使用隨機(jī)負(fù)載的統(tǒng)計(jì)結(jié)果存在一定的波動(dòng),不影響整體性能的分析。
原先網(wǎng)絡(luò)和優(yōu)化后網(wǎng)絡(luò)在不同負(fù)載下的傳輸效率如圖9所示。
圖9 不同負(fù)載下的傳輸效率比較
當(dāng)負(fù)載較小時(shí),網(wǎng)絡(luò)不發(fā)生擁堵,傳輸效率較為平穩(wěn),優(yōu)化后的網(wǎng)絡(luò)傳輸效率略高。當(dāng)負(fù)載較小時(shí),狀態(tài)廣播機(jī)制可以有效避免目的端未準(zhǔn)備時(shí)無效的鏈路建立,傳輸效率提升明顯,而Keep-alive通過減小鏈路建立次數(shù)也有一定的提升。當(dāng)負(fù)載增加到13/64后,網(wǎng)絡(luò)發(fā)生擁堵,傳輸效率開始降低,在高負(fù)載下,由于鏈路建立成功率降低,Keep-alive協(xié)議能夠盡可能高效地使用鏈路,傳輸效率明顯提高,隨著負(fù)載增大優(yōu)化后的網(wǎng)絡(luò)優(yōu)勢(shì)越來越明顯,當(dāng)負(fù)載達(dá)到100%時(shí),優(yōu)化后的網(wǎng)絡(luò)傳輸效率依然有67%,而優(yōu)化前的網(wǎng)絡(luò)在滿負(fù)載時(shí)傳輸效率只剩下58%。優(yōu)化后相比優(yōu)化前傳輸效率最高提升15%。
在不同負(fù)載下平均延遲的比較如圖10所示。
圖10 不同負(fù)載下的平均延遲比較
當(dāng)負(fù)載較低時(shí),網(wǎng)絡(luò)未發(fā)生擁堵,延遲較為穩(wěn)定。在低負(fù)載時(shí),狀態(tài)廣播機(jī)制可以在目的端準(zhǔn)備好后,通過廣播的方式通知源端,從而避免了輪詢機(jī)制的高延遲。而沒有狀態(tài)廣播機(jī)制的網(wǎng)絡(luò)需要通過輪詢的方式,延遲有較大不確定性,平均延遲較高。當(dāng)網(wǎng)絡(luò)發(fā)生擁堵,平均延遲都顯著提高,而Keep-alive能夠在條件允許時(shí)重復(fù)使用之前建立的鏈路,從而在再次傳輸時(shí)有著極低的延遲,顯著降低了平均延遲。優(yōu)化后的網(wǎng)絡(luò)滿負(fù)載下延遲僅為原先的54%。
不同負(fù)載下的鏈路效率結(jié)果如圖11所示。
圖11 不同負(fù)載下的鏈路效率比較
Keep-alive機(jī)制通過復(fù)用鏈路,在網(wǎng)絡(luò)負(fù)載較低時(shí)鏈路效率有著極高的提升,甚至可以超過100%的鏈路效率。狀態(tài)廣播機(jī)制在網(wǎng)絡(luò)發(fā)生擁堵時(shí)減少目的端未準(zhǔn)備時(shí)無效的鏈路嘗試,避免加劇網(wǎng)絡(luò)擁堵,從而提升一部分鏈路效率。綜合2種方法優(yōu)化后的網(wǎng)絡(luò)在各種負(fù)載下都有較為明顯的鏈路效率的提升。
在滿負(fù)載下測(cè)試不同數(shù)據(jù)包長(zhǎng)度下的網(wǎng)絡(luò)效率,結(jié)果如圖12所示。在數(shù)據(jù)包長(zhǎng)度極小時(shí)傳輸效率都趨向于0,在數(shù)據(jù)包長(zhǎng)度較小時(shí)傳輸效率主要受鏈路建立時(shí)間影響,Keep-alive協(xié)議通過減少鏈路建立次數(shù)而獲得一定的優(yōu)勢(shì);在數(shù)據(jù)包長(zhǎng)度極大的時(shí)候傳輸效率主要受鏈路成功率的影響,狀態(tài)廣播機(jī)制通過減小無效嘗試次數(shù)減輕網(wǎng)絡(luò)擁堵,鏈路成功率較高。優(yōu)化后的網(wǎng)絡(luò)在不同數(shù)據(jù)包長(zhǎng)度下的傳輸效率都有不同程度的提升。
本文在傳統(tǒng)包-電路交換技術(shù)框架的網(wǎng)絡(luò)下,增加了Keep-alive協(xié)議和狀態(tài)廣播機(jī)制,利用網(wǎng)絡(luò)中現(xiàn)有的配置網(wǎng)和狀態(tài)網(wǎng)提高了網(wǎng)絡(luò)傳輸性能。Keep-alive協(xié)議通過省去向同一個(gè)目的節(jié)點(diǎn)發(fā)包的鏈路建立過程,減小了后續(xù)數(shù)據(jù)包的傳輸延遲,也避免了建立鏈路過程中對(duì)網(wǎng)絡(luò)的占用,減緩網(wǎng)絡(luò)擁堵情況。狀態(tài)廣播機(jī)制解決傳統(tǒng)網(wǎng)絡(luò)中失敗后輪詢的弊端,減小網(wǎng)絡(luò)中非有效數(shù)據(jù)傳輸行為的占用率,從而極大地提高了網(wǎng)絡(luò)性能。
實(shí)驗(yàn)表明,新的機(jī)制有完整的功能,應(yīng)對(duì)復(fù)雜的網(wǎng)絡(luò)狀況有足夠的魯棒性,不會(huì)產(chǎn)生死鎖,其性能相比傳統(tǒng)方案有最多13%的提升。