基于動態(tài)路由表的片上網(wǎng)絡(luò)擁塞控制方法
【專利摘要】基于動態(tài)路由表的片上網(wǎng)絡(luò)擁塞控制方法屬于片上網(wǎng)絡(luò)擁塞控制方法領(lǐng)域,包括定義動態(tài)路由表的自更新規(guī)則、片上網(wǎng)絡(luò)的啟動和初始化、求解和自身動態(tài)路由表、確定非故障鄰近節(jié)點并交付數(shù)據(jù)等步驟。本方法首次在片上網(wǎng)絡(luò)中采用動態(tài)路由表,該動態(tài)路由表可根據(jù)其他節(jié)點的當(dāng)前狀況動態(tài)更新和決策自身當(dāng)前的最佳傳送路徑并且能夠更好地體現(xiàn)全局意識,其每一個動態(tài)路由表內(nèi)總是保存有去其他任意目的節(jié)點的全局擁塞度最小的最佳路徑,便于快速讀取和使用,大幅縮減了重復(fù)運算時間。此外,本方法還能減少各路由節(jié)點之間頻繁的讀寫操作,削減數(shù)據(jù)計算量并節(jié)約運算占用的時間,從而緩解和限制了網(wǎng)絡(luò)擁塞的產(chǎn)生,提高了整個片上網(wǎng)絡(luò)的數(shù)據(jù)處理能力和吞吐量。
【專利說明】基于動態(tài)路由表的片上網(wǎng)絡(luò)擁塞控制方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于片上網(wǎng)絡(luò)擁塞控制方法領(lǐng)域,具體涉及一種基于動態(tài)路由表的片上網(wǎng)絡(luò)擁塞控制方法。
【背景技術(shù)】
[0002]片上網(wǎng)絡(luò)(network-on-chip,Noc)是在原有的片上系統(tǒng)(system-on-chip, Soc)通信方式上發(fā)展而來,是一種全新的片上通信機制。原有的片上系統(tǒng)是基于總線傳輸?shù)姆绞剑y以滿足現(xiàn)在的網(wǎng)絡(luò)傳輸需求,因此借鑒于計算機網(wǎng)絡(luò),產(chǎn)生了片上網(wǎng)絡(luò)?;谄暇W(wǎng)絡(luò)(NoC)的系統(tǒng)能更好地適應(yīng)在未來復(fù)雜多核片上系統(tǒng)(SoC)設(shè)計中使用的全局異步局部同步的時鐘機制,在性能上顯著優(yōu)于原總線方式的片上系統(tǒng)。2D mesh拓撲片上網(wǎng)絡(luò)是由m行Xn列的路由節(jié)點共同構(gòu)成的二維路由矩陣,是具有普遍代表性的片上網(wǎng)絡(luò)基本形式之
O
[0003]然而,基于片上網(wǎng)絡(luò)(NoC)的系統(tǒng)同樣會受到網(wǎng)絡(luò)擁塞的困擾,基于基礎(chǔ)X-Y傳輸規(guī)則所造成的網(wǎng)絡(luò)擁塞狀況已經(jīng)是片上網(wǎng)絡(luò)發(fā)展的瓶頸,如果不能很好地控制網(wǎng)絡(luò)擁塞,網(wǎng)絡(luò)吞吐量將隨網(wǎng)絡(luò)擁塞的增加而急劇縮小。
[0004]目前,提高2D mesh拓撲片上網(wǎng)絡(luò)吞吐量和控制網(wǎng)絡(luò)擁塞狀況的主要手段以擁塞避免路由算法為主,這些現(xiàn)有的擁塞避免路由算法通常在每次決策前都要進行實時的相鄰節(jié)點的擁塞狀況查詢,之后計算并篩選出網(wǎng)絡(luò)擁塞度最佳的臨近節(jié)點,再根據(jù)計算結(jié)果選擇下一跳交付地址,從而完成路由選擇過程。
[0005]但前述這些現(xiàn)有的路由算法很少采用路由表的調(diào)度和決策方式,而是通常僅僅根據(jù)自己的緩存占用量來決定傳輸?shù)姆较?,其缺點主要體現(xiàn)為:每次報文交付前都需要查詢鄰近節(jié)點的擁塞度,這樣產(chǎn)生了查詢時延。查詢到鄰近節(jié)點擁塞度后,又要通過路由選擇算法根據(jù)不同路徑的擁塞度值比較運算,這樣再次產(chǎn)生了計算時延,并加大了路由節(jié)點自身處理器的計算壓力,也加大了在處于運算狀態(tài)下的當(dāng)前路由節(jié)點發(fā)生擁塞的可能性。查詢到的擁塞度只是相鄰節(jié)點的區(qū)域局部擁塞度,因此其決策過程無法體現(xiàn)全局意識。根據(jù)區(qū)域擁塞度所產(chǎn)生的路由結(jié)果并不能很好地反饋全局狀況,因此,其根據(jù)區(qū)域擁塞度所求解的局部最優(yōu)路徑結(jié)果未必是全局的最佳路由結(jié)果。
【發(fā)明內(nèi)容】
[0006]為了解決現(xiàn)有的擁塞避免路由算法沒有可以自行更新的動態(tài)路由表,其通常在每一次決策前都要進行實時的相鄰節(jié)點的擁塞狀況查詢和根據(jù)不同路徑的擁塞度值比較篩選運算,若將現(xiàn)有擁塞避免路由算法直接應(yīng)用于片上網(wǎng)絡(luò)將導(dǎo)致各個路由節(jié)點的數(shù)據(jù)處理量累計增大,節(jié)點之間的交互讀寫過于頻繁,同時伴隨著各節(jié)點的運算周期逐漸加長,擁塞風(fēng)險依然會同步累計并最終爆發(fā)。此外,現(xiàn)有的擁塞避免路由算法根據(jù)其區(qū)域擁塞度所求解的局部最優(yōu)路徑結(jié)果并非全局的最佳路由結(jié)果的技術(shù)問題,本發(fā)明提供一種基于動態(tài)路由表的片上網(wǎng)絡(luò)擁塞控制方法。
[0007]本發(fā)明解決技術(shù)問題所采取的技術(shù)方案如下:
[0008]基于動態(tài)路由表的片上網(wǎng)絡(luò)擁塞控制方法,其特征在于:該方法包括如下步驟:
[0009]步驟一:定義的基礎(chǔ)的X-Y傳輸規(guī)則:
[0010]在2D mesh拓撲的片上網(wǎng)絡(luò)上,由mXn個路由節(jié)點組成的矩形陣列欄目上的每一個路由節(jié)點都具有自己的唯一坐標(biāo),設(shè)任意一個路由節(jié)點A的坐標(biāo)值(X,y),另外一個任意路由節(jié)點K的坐標(biāo)值(P, q),則從節(jié)點A(x, y)始發(fā)并去往節(jié)點K(p, q)時,其遵循如下的基礎(chǔ)規(guī)則:
[0011 ] 當(dāng)節(jié)點A (X,y)與K (P, q)的橫坐標(biāo)和縱坐標(biāo)均不相同時,A (x, y)總是忽略縱坐標(biāo)上的差值,并優(yōu)先選擇能使橫坐標(biāo)差值的絕對值縮小的那一個橫軸上的鄰近節(jié)點作為下一跳時的交付地址;
[0012]當(dāng)節(jié)點A (X,y)與K (P, q)的橫坐標(biāo)相同但縱坐標(biāo)不相同時,A (x, y)總是優(yōu)先選擇能使縱坐標(biāo)差值的絕對值縮小的那一個縱軸上的鄰近節(jié)點作為下一跳時的交付地址;
[0013]步驟二:給mXn的2D mesh拓撲片上網(wǎng)絡(luò)定義動態(tài)路由表的自更新規(guī)則,其具體包括如下子步驟:
[0014]步驟2.1:分別定義動態(tài)路由表的自更新變量,包括如下子步驟:
[0015]步驟2.1.1:定義動態(tài)路由表的內(nèi)容:
[0016]動態(tài)路由表中橫向的每一行條目均包括四列欄目,各列欄目所記錄的內(nèi)容分別為平均擁塞度Acd、目標(biāo)地址、下一跳地址和總跳數(shù)T1 ;動態(tài)路由表中的每一行條目均與片上網(wǎng)絡(luò)中的一個路由節(jié)點唯一對應(yīng),并且該行條目內(nèi)的四列欄目內(nèi)容的初始值均為空;
[0017]設(shè)當(dāng)前傳送任務(wù)欲從片上網(wǎng)絡(luò)中的任意一個路由節(jié)點A將數(shù)據(jù)傳至另一任意目標(biāo)路由節(jié)點K,則將路由節(jié)點A稱為數(shù)據(jù)源節(jié)點,并將目標(biāo)路由節(jié)點K稱為目標(biāo)節(jié)點;位于路由節(jié)點A周邊且直接與路由節(jié)點A相連的其它路由節(jié)點分別計作路由節(jié)點A的鄰近節(jié)點X(A1)、鄰近節(jié)點X(A2)……鄰近節(jié)點Χ(Αη) (η彡4,η為自然數(shù));
[0018]定義目標(biāo)地址:目標(biāo)路由節(jié)點K在片上網(wǎng)絡(luò)中的坐標(biāo)地址⑷即為動態(tài)路由表中所要記載的目標(biāo)地址;
[0019]定義下一跳地址:
[0020]在路由節(jié)點A的多個鄰近節(jié)點中,路由節(jié)點A準備將數(shù)據(jù)交付的那一個已被確定的鄰近節(jié)點X0ta)其在片上網(wǎng)絡(luò)中的坐標(biāo)地址(χΑη)即為動態(tài)路由表中所要記載的下一跳地址;
[0021]定義總跳數(shù)T1:將從路由節(jié)點A去往目標(biāo)路由節(jié)點K所需的實際跳步數(shù)計作T1 ;
[0022]定義平均擁塞度:
[0023]定義從路由節(jié)點A去往目標(biāo)路由節(jié)點K的平均擁塞度Acd(A_K)的表達式為:
Λ , — b ㈧+Aci^x^xc^xT;
[0024]Acd(A.K)……⑵
C(A) X l2
[0025]式⑵中,路由節(jié)點A當(dāng)前的滿狀態(tài)緩存數(shù)值計作b(A),其可由路由節(jié)點A自身求得;路由節(jié)點A的總緩存數(shù)值計作c(A),其可由路由節(jié)點A自身求得;
[0026]路由節(jié)點A的增步總跳數(shù)T2 = ?\+1 ;
[0027]路由節(jié)點A的鄰近節(jié)點Χ(Αη)當(dāng)前所記載的平均擁塞度數(shù)值計作Acd(XAn),其可從鄰近節(jié)點x(An)所發(fā)來的路由更新報文中獲得;
[0028]步驟2.1.2:定義路由更新報文:
[0029]為每一個路由節(jié)點定義其自身的路由更新報文,路由更新報文橫向的每一行條目均包括三列欄目,各列欄目所記錄的內(nèi)容分別為該路由節(jié)點當(dāng)前平均擁塞度Acd、目標(biāo)地址(K)和增步總跳數(shù)T2 ;
[0030]每一個路由更新報文均與步驟2.1.1所述的一個路由節(jié)點A唯一對應(yīng),路由節(jié)點A根據(jù)其自身的動態(tài)路由表的內(nèi)容對其路由報文A中的三項數(shù)據(jù)進行更新;
[0031]步驟2.1.3:定義片上網(wǎng)絡(luò)可傳輸?shù)淖钸h距離L:
[0032]設(shè)2D mesh拓撲的片上網(wǎng)絡(luò)的是由mXn個路由節(jié)點組成的矩形陣列,則定
[0033]義L = 2 X (m+n)......(3);
[0034]步驟2.1.4:定義路由更新請求時鐘:
[0035]為片上網(wǎng)絡(luò)中的每一個路由節(jié)點均定義一個獨立的內(nèi)置自更新時鐘計時器Timer ;
[0036]步驟2.1.5:為片上網(wǎng)絡(luò)中的每一個路由節(jié)點均定義四個本節(jié)點向其自身鄰近節(jié)點發(fā)送更新請求的請求次數(shù)計數(shù)器Count,如步驟2.1.1所述的任意一個路由節(jié)點A的四個請求次數(shù)計數(shù)器Count(An) (η < 4,n為自然數(shù))分別與該路由節(jié)點A的四個鄰近節(jié)點X(An)(η <4,η為自然數(shù))一一對應(yīng);
[0037]步驟2.1.6:以靜態(tài)方式對步驟2.1.1所述動態(tài)路由表進行初始化:
[0038]分別將步驟2.1.1所述的任意一個路由節(jié)點A的每一個鄰近節(jié)點Χ(Αη) (η彡4,η為自然數(shù))視作一個所述路由節(jié)點A為起點并以該確定的鄰近節(jié)點Χ(Αη)為終點的獨立傳輸路徑,從而在所述路由節(jié)點A的動態(tài)路由表中創(chuàng)建四行新的鄰近節(jié)點路由條目;所述每一行鄰近節(jié)點路由條目均與一個鄰近節(jié)點Χ(Αη) (η < 4,η為自然數(shù))唯一對應(yīng);
[0039]對所述路由節(jié)點A以靜態(tài)方式對其自身動態(tài)路由表中前述四行鄰近節(jié)點路由條目分別進行初始化,將與所述一行鄰近節(jié)點路由條目唯一對應(yīng)的那個確定的鄰近節(jié)點X0ta)的在網(wǎng)絡(luò)坐標(biāo)地址(ΧΑη) (η < 4,η為自然數(shù))分別填入所述新創(chuàng)建的鄰近節(jié)點路由條目內(nèi)的下一跳地址列欄目以及目的地址列欄目;將所述一行鄰近節(jié)點路由條目內(nèi)的總跳數(shù)設(shè)置為1,并將該行鄰近節(jié)點路由條目內(nèi)的平均擁塞度設(shè)置為O ;
[0040]步驟2.2:定義如步驟2.1.1所述的任意一個路由節(jié)點A的平均擁塞度更新規(guī)則,其具體包括如下子步驟:
[0041]步驟2.2.1:由路由節(jié)點A分別獲取由步驟2.1.1所述的每一個鄰近節(jié)點Χ(Αη)(η < 4,η為自然數(shù))各自所發(fā)來的路由更新報文;
[0042]步驟2.2.2:路由節(jié)點A分別判斷,每一個如步驟2.2.1所述的鄰近節(jié)點Χ(Αη)的路由更新報文中,是否包含有途經(jīng)該鄰近節(jié)點Χ(Αη)并且到達目標(biāo)路由節(jié)點K的如步驟2.1.1所述的一行條目或多行條目;若不包含,則路由節(jié)點A直接將所述鄰近節(jié)點X0ta)路由更新報文中的一行或多行條目新增并加入路由節(jié)點A自身的動態(tài)路由表,并執(zhí)行步驟2.3;若包含所述一行條目或多行條目,則直接執(zhí)行步驟2.2.3;
[0043]步驟2.2.3:路由節(jié)點A從自身的處理器中讀取路由節(jié)點A當(dāng)前的總緩存c(A)和滿狀態(tài)緩存b(A)的值;
[0044]步驟2.2.4:從該鄰近節(jié)點報文中分別獲得以該鄰近節(jié)點作為數(shù)據(jù)源節(jié)點出發(fā)并去往相同的目標(biāo)節(jié)點K時,該鄰近路由節(jié)點X(An)所記錄的當(dāng)前的:平均擁塞度數(shù)值A(chǔ)cd(XAn_K)、目標(biāo)地址(KXAn)和增步總跳數(shù)T2(XAn);
[0045]步驟2.2.5:由路由節(jié)點A將自身的滿狀態(tài)緩存值b(A)、總緩存值c(A)、總跳數(shù)T1、增步總跳數(shù)T2以及如步驟2.2.2所述通過路由更新報文發(fā)來的鄰近節(jié)點X(An)的平均擁塞度數(shù)值A(chǔ)cd(XAn_K)分別代入式(2)中,并計算求得路由節(jié)點A的新平均擁塞度Acd(A_K)#;
[0046]步驟2.2.6:判斷ACd(A_K)新是否大于等于ACd(A_K)g ;若是,執(zhí)行步驟2.2.8 ;若否,執(zhí)行步驟2.2.7 ;
[0047]步驟2.2.7:路由節(jié)點A對自身的動態(tài)路由表進行自更新,具體包括:
[0048]保持目標(biāo)地址⑷不變;
[0049]用路由節(jié)點A的增步總跳數(shù)T2的當(dāng)前值替代總跳數(shù)T1的當(dāng)前值;
[0050]用步驟2.2.5所求得的平均擁塞度Acd(A_K) #替換路由節(jié)點A的動態(tài)路由表中原本所記載的平均擁塞度Acd(A_K) g ;然后執(zhí)行步驟2.3 ;
[0051]步驟2.2.8:路由節(jié)點A不更新自身的動態(tài)路由表,直接執(zhí)行步驟2.3 ;
[0052]步驟2.3:由步驟2.1.1所述的任意一個路由節(jié)點A判斷其自身如步驟2.1.4所述的自更新時鐘計時器Timer的當(dāng)前時鐘周期是否已經(jīng)結(jié)束,若路由節(jié)點A自身的當(dāng)前時鐘周期尚未結(jié)束則進一步執(zhí)行步驟2.4,若當(dāng)前時鐘周期已經(jīng)結(jié)束則執(zhí)行步驟2.5 ;
[0053]步驟2.4:執(zhí)行路由更新請求規(guī)則,其具體包括如下子步驟:
[0054]步驟2.4.1:由步驟2.1.1所述的任意一個路由節(jié)點A判斷,在如步驟2.1.4所述自更新時鐘計時器的一個當(dāng)前的時鐘周期以內(nèi),路由節(jié)點A是否分別收到了鄰近節(jié)點X(A1)、鄰近節(jié)點X(A2)、鄰近節(jié)點X(A3)以及鄰近節(jié)點X(A4)的共計四個鄰近節(jié)點Χ(Αη) (η < 4,n為自然數(shù))各自所發(fā)來的全部共計四個路由更新報文;若未能收到全部四個路由更新報文,則執(zhí)行步驟2.4.2:若已經(jīng)收到全部四個路由更新報文,則執(zhí)行步驟2.4.8 ;
[0055]步驟2.4.2:路由節(jié)點A向未能及時發(fā)來路由更新報文的鄰近節(jié)點X(An)發(fā)送路由更新請求;
[0056]步驟2.4.3:路由節(jié)點A調(diào)取如步驟2.1.5所述的與未能及時發(fā)來路由更新報文的鄰近節(jié)點X(An)相對應(yīng)的請求次數(shù)計數(shù)器Count0ta),并使其當(dāng)前的計數(shù)值增加I ;
[0057]步驟2.4.4:路由節(jié)點A分別對如步驟2.1.5所述的每一個請求次數(shù)計數(shù)器Count(An)進行判斷,若其當(dāng)前的計數(shù)值不大于3則執(zhí)行步驟2.4.5,若其當(dāng)前的計數(shù)值大于3則執(zhí)行步驟2.4.6 ;
[0058]步驟2.4.5:路由節(jié)點A繼續(xù)等待如步驟2.4.2所述的未能及時發(fā)來路由更新報文的鄰近節(jié)點X(An)向路由節(jié)點A發(fā)送路由更新報文,直至路由節(jié)點A接收到該報文后重新執(zhí)行步驟2.4.1 ;
[0059]步驟2.4.6:路由節(jié)點A在自身的動態(tài)路由表中將步驟2.4.2所述未能及時發(fā)來路由更新報文的鄰近節(jié)點X(An)確定為故障節(jié)點,并終止沿該故障節(jié)點的傳送任務(wù);
[0060]步驟2.4.7:路由節(jié)點A從其自身的動態(tài)路由表中查找與步驟2.4.6所述故障節(jié)點相對應(yīng)的每一行條目,并將包含前述故障節(jié)點信息的每一行均從動態(tài)路由表中整行刪除,以使得該行動態(tài)路由表內(nèi)全部數(shù)據(jù)均不再參與任何后續(xù)步驟的運算;
[0061]步驟2.4.8:由路由節(jié)點A提前重置自身的如步驟2.1.4所述的自更新時鐘計時器Timer ;并將剩余的全部非故障鄰近節(jié)點X(An)對應(yīng)的請求次數(shù)計數(shù)器Count0ta)均同步重置為O ;
[0062]步驟2.5:步驟2.1.4所述的自更新時鐘計時器Timer當(dāng)前的時鐘周期自行結(jié)束重置,或者若該計時器Timer在如步驟2.4.8所述的過程中被重置,又或者,當(dāng)前如步驟
2.1.1所述的任意一個路由節(jié)點A收到了如步驟2.4.2所述的其鄰近節(jié)點X(An)發(fā)送來的路由更新請求,當(dāng)上述三種情況中的任意一種發(fā)生時,路由節(jié)點A都按其當(dāng)前的動態(tài)路由表生成一份如步驟2.1.2所述的路由更新報文;
[0063]步驟2.6:由步驟2.1.1所述的任意一個路由節(jié)點A將其按照步驟2.5所述方式生成的路由更新報文同步發(fā)送給如步驟2.4.8所述的路由節(jié)點A的全部非故障鄰近節(jié)點父(An) >
[0064]步驟三:為片上網(wǎng)絡(luò)的每一個路由節(jié)點均設(shè)定一個專門用于存儲動態(tài)路由表的內(nèi)部存儲空間并將步驟2.1所述的動態(tài)路由表的自更新變量分別存入每一個路由節(jié)點的動態(tài)路由表存儲空間中;
[0065]步驟四:將步驟2.2至步驟2.6所述動態(tài)路由表的自更新規(guī)則均分別存入步驟三所述的每一個路由節(jié)點自身的處理器內(nèi)存中;
[0066]步驟五:片上網(wǎng)絡(luò)的啟動和初始化:
[0067]片上網(wǎng)絡(luò)啟動并開始運作時,片上網(wǎng)絡(luò)每個路由節(jié)點均被同步初始化,初始化后的各個路由節(jié)點均已求得和存儲一個統(tǒng)一的片上網(wǎng)絡(luò)可傳輸?shù)淖钸h距離L值,各個路由節(jié)點的內(nèi)置自更新時鐘計時器Timer均未開始計時,并且,如步驟2.4.3所述的請求次數(shù)計數(shù)器Count0ta)均置為0,各個路由節(jié)點的路由更新報文中的各項數(shù)值均為空;
[0068]步驟六:當(dāng)片上網(wǎng)絡(luò)開始首個從任意一個路由節(jié)點A將數(shù)據(jù)傳至另一任意目標(biāo)路由節(jié)點K的傳送任務(wù)時,片上網(wǎng)絡(luò)中的全部節(jié)點被同步激活,各個路由節(jié)點的內(nèi)置自更新時鐘計時器Timer均開始按步驟2.1.4所設(shè)定的時間值開始倒計時;
[0069]步驟七:由當(dāng)前數(shù)據(jù)源節(jié)點,即:路由節(jié)點A,其自身的處理器首先執(zhí)行步驟2.2至步驟2.6所述動態(tài)路由表的自更新規(guī)則,并求得自身當(dāng)前的動態(tài)路由表;
[0070]步驟八:路由節(jié)點A判斷,假若把自身的某一確定的非故障鄰近節(jié)點Χ(Αη) (η彡4,η為自然數(shù))作為下一跳地址,則若從路由節(jié)點A始發(fā)途經(jīng)該非故障鄰近節(jié)點X0ta)并去往目標(biāo)節(jié)點K時,在路由節(jié)點A當(dāng)前的動態(tài)路由表中所記載的總跳數(shù)T1是否大于步驟五所述的可傳輸?shù)淖钸h距離L值,若總跳數(shù)T1大于可傳輸?shù)淖钸h距離L,則執(zhí)行步驟九,否則執(zhí)行步驟^ ;
[0071]步驟九:路由節(jié)點A在自身的動態(tài)路由表中將步驟八所述的當(dāng)前非故障鄰近節(jié)點X(An)確定為路徑不可達節(jié)點,并終止沿該故障節(jié)點的傳送任務(wù);同時,路由節(jié)點A從其自身的動態(tài)路由表中查找與該路徑不可達節(jié)點相對應(yīng)的一行條目,并將該行條目整行刪除以使得該行動態(tài)路由表內(nèi)全部數(shù)據(jù)均不再參與任何后續(xù)步驟的運算;
[0072]步驟十:由路由節(jié)點A終止沿步驟九所述的路徑不可達節(jié)點的當(dāng)前傳送任務(wù)并重新執(zhí)行步驟八;
[0073]步驟^^一:由路由節(jié)點A從自身的動態(tài)路由表中檢索,其自身的動態(tài)路由表中是否已經(jīng)存在去往目標(biāo)節(jié)點K并將步驟八所述確定的非故障鄰近節(jié)點Χ(Αη) (η < 4,η為自然數(shù))作為下一跳地址的一行條目,若存在該行條目,則執(zhí)行步驟十二,否則執(zhí)行步驟十三;
[0074]步驟十二:由路由節(jié)點A直接將步驟十所述的那一行條目所對應(yīng)的非故障鄰近節(jié)點X(A?)確定為本次數(shù)據(jù)將要交付的下一個鄰近節(jié)點X(An),并將當(dāng)前數(shù)據(jù)包傳送給該下一個鄰近節(jié)點,然后執(zhí)行步驟十四;
[0075]步驟十三:由路由節(jié)點A按照步驟一所述基礎(chǔ)的X-Y傳輸規(guī)則將數(shù)據(jù)傳送給X-Y規(guī)則所確定的路徑上的下一個鄰近節(jié)點,然后執(zhí)行步驟十四;
[0076]步驟十四:如步驟十二或步驟十三所述的下一個鄰近節(jié)點,其在接到當(dāng)前的數(shù)據(jù)傳送任務(wù)后,開始將自身視作步驟七所述的數(shù)據(jù)源節(jié)點,其作為全新的路由節(jié)點A’開始按照與初始的路由節(jié)點A完全相同的方式執(zhí)行步驟六至步驟十二的過程。
[0077]本發(fā)明的有益效果是:本片上網(wǎng)絡(luò)擁塞控制方法首次在片上網(wǎng)絡(luò)中采用動態(tài)路由表,可以根據(jù)其他節(jié)點的當(dāng)前狀況動態(tài)更新和決策自身的當(dāng)前的最佳傳送路徑。其采用的動態(tài)路由表能夠更好地體現(xiàn)全局意識,通過各個節(jié)點對自身路由表的動態(tài)的更新和維護,使每一個動態(tài)路由表內(nèi)總是保存有去其他任意目的節(jié)點的當(dāng)前最佳路徑方案,從而避開當(dāng)前相對擁塞路由節(jié)點,緩解其片上網(wǎng)絡(luò)的擁塞程度,最終達到擁塞控制的效果。本方法的動態(tài)路由表的每一行條目均最終形成并對應(yīng)記載有任意當(dāng)前任務(wù)目標(biāo)節(jié)點的當(dāng)前全局擁塞度最小的最佳路徑,便于快速讀取和使用,大幅縮減了重復(fù)運算時間。采用每隔固定30秒的周期來更新路由表而非頻繁地交互讀寫操作,使得任意鄰近節(jié)點之間既保持了動態(tài)路由表的更新及時,又大大減少了數(shù)據(jù)計算量,縮短運算占用的時間,在相當(dāng)程度上緩解和限制了網(wǎng)絡(luò)擁塞的產(chǎn)生,提高了整個片上網(wǎng)絡(luò)的數(shù)據(jù)處理能力和吞吐量。
【專利附圖】
【附圖說明】
[0078]圖1是本發(fā)明基于動態(tài)路由表的片上網(wǎng)絡(luò)擁塞控制方法的總流程圖;
[0079]圖2是本發(fā)明片上網(wǎng)絡(luò)首個傳送任務(wù)的示意圖;
[0080]圖3是本發(fā)明動態(tài)路由表的示意圖;
[0081]圖4是本發(fā)明路由更新報文的示意圖:
[0082]圖5是本發(fā)明對四行鄰近節(jié)點路由條目分別進行初始化后的路由節(jié)點A的自身動態(tài)路由表不意圖。
【具體實施方式】
[0083]下面結(jié)合附圖對本發(fā)明做進一步詳細說明。
[0084]如圖1至圖5所示,本發(fā)明基于動態(tài)路由表的片上網(wǎng)絡(luò)擁塞控制方法,包括如下步驟:
[0085]步驟一:定義的基礎(chǔ)的X-Y傳輸規(guī)則:
[0086]在2D mesh拓撲的片上網(wǎng)絡(luò)上,由mXn個路由節(jié)點組成的矩形陣列欄目上的每一個路由節(jié)點都具有自己的唯一坐標(biāo),設(shè)任意一個路由節(jié)點A的坐標(biāo)值(X,y),另外一個任意路由節(jié)點K的坐標(biāo)值(P, q),則從節(jié)點A(x, y)始發(fā)并去往節(jié)點K(p, q)時,其遵循如下的基礎(chǔ)規(guī)則:
[0087]當(dāng)節(jié)點A (X,y)與K (P, q)的橫坐標(biāo)和縱坐標(biāo)均不相同時,A (x, y)總是忽略縱坐標(biāo)上的差值,并優(yōu)先選擇能使橫坐標(biāo)差值的絕對值縮小的那一個橫軸上的鄰近節(jié)點作為下一跳時的交付地址。
[0088]當(dāng)節(jié)點A (X,y)與K (P, q)的橫坐標(biāo)相同但縱坐標(biāo)不相同時,A (x, y)總是優(yōu)先選擇能使縱坐標(biāo)差值的絕對值縮小的那一個縱軸上的鄰近節(jié)點作為下一跳時的交付地址。
[0089]步驟二:給mXn的2D mesh拓撲片上網(wǎng)絡(luò)定義動態(tài)路由表的自更新規(guī)則,其具體包括如下子步驟:
[0090]步驟2.1:分別定義動態(tài)路由表的自更新變量,包括如下子步驟:
[0091]步驟2.1.1:定乂動態(tài)路由表的內(nèi)容:
[0092]動態(tài)路由表中橫向的每一行條目均包括四列欄目,各列欄目所記錄的內(nèi)容分別為平均擁塞度Acd、目標(biāo)地址、下一跳地址和總跳數(shù)T1 ;動態(tài)路由表中的每一行條目均與片上網(wǎng)絡(luò)中的一個路由節(jié)點唯一對應(yīng),并且該行條目內(nèi)的四列欄目內(nèi)容的初始值均為空。
[0093]設(shè)當(dāng)前傳送任務(wù)欲從片上網(wǎng)絡(luò)中的任意一個路由節(jié)點A將數(shù)據(jù)傳至另一任意目標(biāo)路由節(jié)點K,則將路由節(jié)點A稱為數(shù)據(jù)源節(jié)點,并將目標(biāo)路由節(jié)點K稱為目標(biāo)節(jié)點;位于路由節(jié)點A周邊且直接與路由節(jié)點A相連的其它路由節(jié)點分別計作路由節(jié)點A的鄰近節(jié)點X(A1)、鄰近節(jié)點X(A2)……鄰近節(jié)點Χ(Αη) (η彡4,η為自然數(shù))。
[0094]定義目標(biāo)地址:目標(biāo)路由節(jié)點K在片上網(wǎng)絡(luò)中的坐標(biāo)地址(K)即為動態(tài)路由表中所要記載的目標(biāo)地址。
[0095]定義下一跳地址:
[0096]在路由節(jié)點A的多個鄰近節(jié)點中,路由節(jié)點A準備將數(shù)據(jù)交付的那一個已被確定的鄰近節(jié)點X0ta)其在片上網(wǎng)絡(luò)中的坐標(biāo)地址(χΑη)即為動態(tài)路由表中所要記載的下一跳地址。
[0097]定義總跳數(shù)T1:將從路由節(jié)點A去往目標(biāo)路由節(jié)點K所需的實際跳步數(shù)計作!\。
[0098]定義平均擁塞度:
[0099]定義從路由節(jié)點A去往目標(biāo)路由節(jié)點K的平均擁塞度Acd(A_K)的表達式為:
—b㈧+Acd(XAn)xc㈧ XT1_0] Acd(A.K)……⑵
C(A) 12
[0101]式⑵中,路由節(jié)點A當(dāng)前的滿狀態(tài)緩存數(shù)值計作b(A),其可由路由節(jié)點A自身求得;路由節(jié)點A的總緩存數(shù)值計作c(A),其可由路由節(jié)點A自身求得;
[0102]路由節(jié)點A的增步總跳數(shù)T2 = 1\+1。
[0103]路由節(jié)點A的鄰近節(jié)點X(An)當(dāng)前所記載的平均擁塞度數(shù)值計作Acd(XAn),其可從鄰近節(jié)點x(An)所發(fā)來的路由更新報文中獲得。
[0104]步驟2.1.2:定義路由更新報文:
[0105]為每一個路由節(jié)點定義其自身的路由更新報文,路由更新報文橫向的每一行條目均包括三列欄目,各列欄目所記錄的內(nèi)容分別為該路由節(jié)點當(dāng)前平均擁塞度Acd、目標(biāo)地址(K)和增步總跳數(shù)T2 ;
[0106]每一個路由更新報文均與步驟2.1.1所述的一個路由節(jié)點A唯一對應(yīng),路由節(jié)點A根據(jù)其自身的動態(tài)路由表的內(nèi)容對其路由報文A中的三項數(shù)據(jù)進行更新;
[0107]步驟2.1.3:定義片上網(wǎng)絡(luò)可傳輸?shù)淖钸h距離L:
[0108]設(shè)2D mesh拓撲的片上網(wǎng)絡(luò)的是由mXn個路由節(jié)點組成的矩形陣列,則定
[0109]義L = 2X (m+n)......(3);
[0110]步驟2.1.4:定義路由更新請求時鐘:
[0111]為片上網(wǎng)絡(luò)中的每一個路由節(jié)點均定義一個獨立的內(nèi)置自更新時鐘計時器Timer。
[0112]步驟2.1.5:為片上網(wǎng)絡(luò)中的每一個路由節(jié)點均定義四個本節(jié)點向其自身鄰近節(jié)點發(fā)送更新請求的請求次數(shù)計數(shù)器Count,如步驟2.1.1所述的任意一個路由節(jié)點A的四個請求次數(shù)計數(shù)器Count(An) (η < 4,n為自然數(shù))分別與該路由節(jié)點A的四個鄰近節(jié)點X(An)(η < 4,η為自然數(shù))一一對應(yīng)。
[0113]步驟2.1.6:以靜態(tài)方式對步驟2.1.1所述動態(tài)路由表進行初始化:
[0114]分別將步驟2.1.1所述的任意一個路由節(jié)點A的每一個鄰近節(jié)點Χ(Αη) (η <4,η為自然數(shù))視作一個所述路由節(jié)點A為起點并以該確定的鄰近節(jié)點X(An)為終點的獨立傳輸路徑,從而在所述路由節(jié)點A的動態(tài)路由表中創(chuàng)建四行新的鄰近節(jié)點路由條目;所述每一行鄰近節(jié)點路由條目均與一個鄰近節(jié)點Χ(Αη) (η < 4,η為自然數(shù))唯一對應(yīng)。
[0115]對所述路由節(jié)點A以靜態(tài)方式對其自身動態(tài)路由表中前述四行鄰近節(jié)點路由條目分別進行初始化,將與所述一行鄰近節(jié)點路由條目唯一對應(yīng)的那個確定的鄰近節(jié)點X0ta)的在網(wǎng)絡(luò)坐標(biāo)地址(ΧΑη) (η < 4,η為自然數(shù))分別填入所述新創(chuàng)建的鄰近節(jié)點路由條目內(nèi)的下一跳地址列欄目以及目的地址列欄目;將所述一行鄰近節(jié)點路由條目內(nèi)的總跳數(shù)設(shè)置為1,并將該行鄰近節(jié)點路由條目內(nèi)的平均擁塞度設(shè)置為O。
[0116]步驟2.2:定義如步驟2.1.1所述的任意一個路由節(jié)點A的平均擁塞度更新規(guī)則,其具體包括如下子步驟。
[0117]步驟2.2.1:由路由節(jié)點A分別獲取由步驟2.1.1所述的每一個鄰近節(jié)點Χ(Αη)(η < 4,η為自然數(shù))各自所發(fā)來的路由更新報文。
[0118]步驟2.2.2:路由節(jié)點A分別判斷,每一個如步驟2.2.1所述的鄰近節(jié)點Χ(Αη)的路由更新報文中,是否包含有途經(jīng)該鄰近節(jié)點Χ(Αη)并且到達目標(biāo)路由節(jié)點K的如步驟2.1.1所述的一行條目或多行條目;若不包含,則路由節(jié)點A直接將所述鄰近節(jié)點X0ta)路由更新報文中的一行或多行條目新增并加入路由節(jié)點A自身的動態(tài)路由表,并執(zhí)行步驟2.3;若包含所述一行條目或多行條目,則直接執(zhí)行步驟2.2.3。
[0119]步驟2.2.3:路由節(jié)點A從自身的處理器中讀取路由節(jié)點A當(dāng)前的總緩存c(A)和滿狀態(tài)緩存b(A)的值。
[0120]步驟2.2.4:從該鄰近節(jié)點報文中分別獲得以該鄰近節(jié)點作為數(shù)據(jù)源節(jié)點出發(fā)并去往相同的目標(biāo)節(jié)點K時,該鄰近路由節(jié)點X0ta)所記錄的當(dāng)前的:平均擁塞度數(shù)值A(chǔ)cd(XAn_K)、目標(biāo)地址(KXAn)和增步總跳數(shù)T2(XAn)。
[0121]步驟2.2.5:由路由節(jié)點A將自身的滿狀態(tài)緩存值b(A)、總緩存值c(A)、總跳數(shù)T1、增步總跳數(shù)T2以及如步驟2.2.2所述通過路由更新報文發(fā)來的鄰近節(jié)點X(An)的平均擁塞度數(shù)值A(chǔ)cd(XAn_K)分別代入式⑵中,并計算求得路由節(jié)點A的新平均擁塞度Acd(A_K)#。
[0122]步驟2.2.6:判斷Acd(A_K)#是否大于等于Acd(A_K)g ;若是,執(zhí)行步驟2.2.8 ;若否,執(zhí)行步驟2.2.7 ;
[0123]步驟2.2.7:路由節(jié)點A對自身的動態(tài)路由表進行自更新,具體包括:
[0124]保持目標(biāo)地址⑷不變;
[0125]用路由節(jié)點A的增步總跳數(shù)T2的當(dāng)前值替代總跳數(shù)T1的當(dāng)前值。
[0126]用步驟2.2.5所求得的平均擁塞度Acd(A_K) #替換路由節(jié)點A的動態(tài)路由表中原本所記載的平均擁塞度Acd(A_K) g ;然后執(zhí)行步驟2.3。
[0127]步驟2.2.8:路由節(jié)點A不更新自身的動態(tài)路由表,直接執(zhí)行步驟2.3 ;
[0128]步驟2.3:由步驟2.1.1所述的任意一個路由節(jié)點A判斷其自身如步驟2.1.4所述的自更新時鐘計時器Timer的當(dāng)前時鐘周期是否已經(jīng)結(jié)束,若路由節(jié)點A自身的當(dāng)前時鐘周期尚未結(jié)束則進一步執(zhí)行步驟2.4,若當(dāng)前時鐘周期已經(jīng)結(jié)束則執(zhí)行步驟2.5。
[0129]步驟2.4:執(zhí)行路由更新請求規(guī)則,其具體包括如下子步驟:
[0130]步驟2.4.1:由步驟2.1.1所述的任意一個路由節(jié)點A判斷,在如步驟2.1.4所述自更新時鐘計時器的一個當(dāng)前的時鐘周期以內(nèi),路由節(jié)點A是否分別收到了鄰近節(jié)點X(A1)、鄰近節(jié)點X(A2)、鄰近節(jié)點X(A3)以及鄰近節(jié)點X(A4)的共計四個鄰近節(jié)點Χ(Αη) (η < 4,n為自然數(shù))各自所發(fā)來的全部共計四個路由更新報文;若未能收到全部四個路由更新報文,則執(zhí)行步驟2.4.2:若已經(jīng)收到全部四個路由更新報文,則執(zhí)行步驟2.4.8。
[0131]步驟2.4.2:路由節(jié)點A向未能及時發(fā)來路由更新報文的鄰近節(jié)點X0ta)發(fā)送路由更新請求。
[0132]步驟2.4.3:路由節(jié)點A調(diào)取如步驟2.1.5所述的與未能及時發(fā)來路由更新報文的鄰近節(jié)點X(An)相對應(yīng)的請求次數(shù)計數(shù)器Count0ta),并使其當(dāng)前的計數(shù)值增加I。
[0133]步驟2.4.4:路由節(jié)點A分別對如步驟2.1.5所述的每一個請求次數(shù)計數(shù)器Count(An)進行判斷,若其當(dāng)前的計數(shù)值不大于3則執(zhí)行步驟2.4.5,若其當(dāng)前的計數(shù)值大于3則執(zhí)行步驟2.4.6。
[0134]步驟2.4.5:路由節(jié)點A繼續(xù)等待如步驟2.4.2所述的未能及時發(fā)來路由更新報文的鄰近節(jié)點X(An)向路由節(jié)點A發(fā)送路由更新報文,直至路由節(jié)點A在當(dāng)前的時鐘周期內(nèi)再次接收到該報文后重新執(zhí)行步驟2.4.1。
[0135]步驟2.4.6:路由節(jié)點A在自身的動態(tài)路由表中將步驟2.4.2所述未能及時發(fā)來路由更新報文的鄰近節(jié)點X(An)確定為故障節(jié)點,并終止沿該故障節(jié)點的傳送任務(wù)。
[0136]步驟2.4.7:路由節(jié)點A從其自身的動態(tài)路由表中查找與步驟2.4.6所述故障節(jié)點相對應(yīng)的每一行條目,并將包含前述故障節(jié)點信息的每一行均從動態(tài)路由表中整行刪除,以使得該行動態(tài)路由表內(nèi)全部數(shù)據(jù)均不再參與任何后續(xù)步驟的運算。由于前述故障節(jié)點會因自身的暫時擁塞而無法向其他節(jié)點發(fā)送路由更新報文,因此若當(dāng)前故障節(jié)點在后續(xù)過程中擁塞緩解或故障排除,路由節(jié)點A將會重新接收到該回復(fù)故障節(jié)點發(fā)來的路由更新報文,屆時路由節(jié)點A會重新將該回復(fù)故障節(jié)點的路由報文信息重新新增并填入自身的路由表內(nèi)。
[0137]步驟2.4.8:由路由節(jié)點A提前重置自身的如步驟2.1.4所述的自更新時鐘計時器Timer ;并將剩余的全部非故障鄰近節(jié)點X(An)對應(yīng)的請求次數(shù)計數(shù)器Count0ta)均同步重置為O。
[0138]步驟2.5:步驟2.1.4所述的自更新時鐘計時器Timer當(dāng)前的時鐘周期自行結(jié)束重置,或者若該計時器Timer在如步驟2.4.8所述的過程中被重置,又或者,當(dāng)前如步驟
2.1.1所述的任意一個路由節(jié)點A收到了如步驟2.4.2所述的其鄰近節(jié)點X(An)發(fā)送來的路由更新請求,當(dāng)上述三種情況中的任意一種發(fā)生時,路由節(jié)點A都按其當(dāng)前的動態(tài)路由表生成一份如步驟2.1.2所述的路由更新報文。
[0139]步驟2.6:由步驟2.1.1所述的任意一個路由節(jié)點A將其按照步驟2.5所述方式生成的路由更新報文同步發(fā)送給如步驟2.4.8所述的路由節(jié)點A的全部非故障鄰近節(jié)點
X(An)。
[0140]步驟三:為片上網(wǎng)絡(luò)的每一個路由節(jié)點均設(shè)定一個專門用于存儲動態(tài)路由表的內(nèi)部存儲空間并將步驟2.1所述的動態(tài)路由表的自更新變量分別存入每一個路由節(jié)點的動態(tài)路由表存儲空間中;
[0141]步驟四:將步驟2.2至步驟2.6所述動態(tài)路由表的自更新規(guī)則均分別存入步驟三所述的每一個路由節(jié)點自身的處理器內(nèi)存中。
[0142]步驟五:片上網(wǎng)絡(luò)的啟動和初始化:
[0143]片上網(wǎng)絡(luò)啟動并開始運作時,片上網(wǎng)絡(luò)每個路由節(jié)點均被同步初始化,初始化后的各個路由節(jié)點均已求得和存儲一個統(tǒng)一的片上網(wǎng)絡(luò)可傳輸?shù)淖钸h距離L值,各個路由節(jié)點的內(nèi)置自更新時鐘計時器Timer均未開始計時,并且,如步驟2.4.3所述的請求次數(shù)計數(shù)器Count0ta)均置為0,各個路由節(jié)點的路由更新報文中的各項數(shù)值均為空;各個路由節(jié)點的動態(tài)路由表則處于步驟2.1.6所述初始化后的狀態(tài)。
[0144]步驟六:當(dāng)片上網(wǎng)絡(luò)開始首個從任意一個路由節(jié)點A將數(shù)據(jù)傳至另一任意目標(biāo)路由節(jié)點K的傳送任務(wù)時,片上網(wǎng)絡(luò)中的全部節(jié)點被同步激活,各個路由節(jié)點的內(nèi)置自更新時鐘計時器Timer均開始按步驟2.1.4所設(shè)定的時間值開始倒計時。
[0145]步驟七:由當(dāng)前數(shù)據(jù)源節(jié)點,即:路由節(jié)點A,其自身的處理器首先執(zhí)行步驟2.2至步驟2.6所述動態(tài)路由表的自更新規(guī)則,并求得自身當(dāng)前的動態(tài)路由表。
[0146]步驟八:路由節(jié)點A判斷,假若把自身的某一確定的非故障鄰近節(jié)點X(An) (n ^ 4, η為自然數(shù))作為下一跳地址,則若從路由節(jié)點A始發(fā)途經(jīng)該非故障鄰近節(jié)點Χ(Αη)并去往目標(biāo)節(jié)點K時,在路由節(jié)點A當(dāng)前的動態(tài)路由表中所記載的總跳數(shù)T1是否大于步驟五所述的可傳輸?shù)淖钸h距離L值,若總跳數(shù)T1大于可傳輸?shù)淖钸h距離L,則執(zhí)行步驟九,否則執(zhí)行步驟^ 。
[0147]步驟九:路由節(jié)點A在自身的動態(tài)路由表中將步驟八所述的當(dāng)前非故障鄰近節(jié)點X(An)確定為路徑不可達節(jié)點,并終止沿該故障節(jié)點的傳送任務(wù);同時,路由節(jié)點A從其自身的動態(tài)路由表中查找與該路徑不可達節(jié)點相對應(yīng)的一行條目,并將該行條目整行刪除以使得該行動態(tài)路由表內(nèi)全部數(shù)據(jù)均不再參與任何后續(xù)步驟的運算。
[0148]步驟十:由路由節(jié)點A終止沿步驟九所述的路徑不可達節(jié)點的當(dāng)前傳送任務(wù)并重新執(zhí)行步驟八。
[0149]步驟^^一:由路由節(jié)點A從自身的動態(tài)路由表中檢索,其自身的動態(tài)路由表中是否已經(jīng)存在去往目標(biāo)節(jié)點K并將步驟八所述確定的非故障鄰近節(jié)點Χ(Αη) (η < 4,η為自然數(shù))作為下一跳地址的一行條目,若存在該行條目,則執(zhí)行步驟十二,否則執(zhí)行步驟十三。
[0150]步驟十二:由路由節(jié)點A直接將步驟十所述的那一行條目所對應(yīng)的非故障鄰近節(jié)點X0ta)確定為本次數(shù)據(jù)將要交付的下一個鄰近節(jié)點χ(Αη),并將當(dāng)前數(shù)據(jù)包傳送給該下一個鄰近節(jié)點,然后執(zhí)行步驟十四。
[0151]步驟十三:由路由節(jié)點A按照步驟一所述基礎(chǔ)的X-Y傳輸規(guī)則將數(shù)據(jù)傳送給X-Y規(guī)則所確定的路徑上的下一個鄰近節(jié)點,然后執(zhí)行步驟十四。
[0152]步驟十四:如步驟十二或步驟十三所述的下一個鄰近節(jié)點,其在接到當(dāng)前的數(shù)據(jù)傳送任務(wù)后,開始將自身視作步驟七所述的數(shù)據(jù)源節(jié)點,其作為全新的路由節(jié)點Α’開始按照與初始的路由節(jié)點A完全相同的方式執(zhí)行步驟六至步驟十二的過程。
[0153]具體應(yīng)用本發(fā)明的基于動態(tài)路由表的片上網(wǎng)絡(luò)擁塞控制方法時,將步驟2.1.4所述的自更新時鐘計時器Timer設(shè)置為30秒。在片上網(wǎng)絡(luò)初始化后,網(wǎng)絡(luò)上的全部節(jié)點都處于步驟2.1.6所述初始化后的狀態(tài),它們的動態(tài)路由表中僅保持了每一個自身的鄰近的路由信息,并且,片上網(wǎng)絡(luò)上的各個節(jié)點均在首個傳送任務(wù)開始后才被同步激活,開始按照各自的時鐘周期向鄰近節(jié)點發(fā)送路由更新報文。
[0154]伴隨著更多的全新傳送任務(wù)在片上網(wǎng)絡(luò)中陸續(xù)出現(xiàn),局部區(qū)域內(nèi)的路由節(jié)點開始出現(xiàn)不同程度的擁塞,這將導(dǎo)致不同的節(jié)點按不同的擁塞程度重置自身的自更新時鐘計時器Timer,最終使得各個節(jié)點的自更新周期相互獨立而不再同步。每一個路由節(jié)點在傳送任務(wù)中都同時扮演傳送數(shù)據(jù)的源節(jié)點和其他節(jié)點的鄰近節(jié)點兩個角色。
[0155]本方法將路由表應(yīng)用于片上網(wǎng)絡(luò)的擁塞控制領(lǐng)域,并且所采用的路由表為動態(tài)路由表,可以根據(jù)其他節(jié)點的當(dāng)前狀況動態(tài)更新和決策自身的當(dāng)前的最佳傳送路徑,通過各個節(jié)點對自身路由表的動態(tài)的更新和維護,使每一個動態(tài)路由表內(nèi)總是保存有去其他任意目的節(jié)點的當(dāng)前最佳路徑方案,從而避開當(dāng)前相對擁塞路由節(jié)點,緩解其片上網(wǎng)絡(luò)的擁塞程度,最終達到擁塞控制的效果。
[0156]片上網(wǎng)絡(luò)中的每一個路由節(jié)點自身的動態(tài)路由表中的各行條目總數(shù)會隨著新的目標(biāo)地址出現(xiàn)而增加,最終,伴隨著更多的全新傳送任務(wù)在片上網(wǎng)絡(luò)中陸續(xù)隨機出現(xiàn),每一個路由節(jié)點的動態(tài)路由表內(nèi)最終都將建立起以自身為數(shù)據(jù)源節(jié)點并以其余任意一個節(jié)點作為目標(biāo)節(jié)點的完整路由表,該完整路由表包含有與片上網(wǎng)絡(luò)中的其它所有節(jié)點一一對應(yīng)的多行條目,由于各行條目中的下一跳地址都對應(yīng)于通過當(dāng)前擁塞度最小值篩選后的最佳路徑,因此其每一行條目均對應(yīng)記載有該任務(wù)目標(biāo)節(jié)點的當(dāng)前全局擁塞度最小的最佳路徑。
[0157]由式⑵可知,平均擁塞度數(shù)值計作Acd(XAn)也是經(jīng)由其他去往目標(biāo)節(jié)點的鄰近節(jié)點的平均擁塞度值迭代計算求得,因此,任意一個平均擁塞度數(shù)值計作Acd(XAn)本身就已經(jīng)反映了當(dāng)前去往目的節(jié)點路徑上的平均擁塞度數(shù)最優(yōu)解,通過Acd(XAn)所計算出來的Acd(A_K)也是一個就反應(yīng)全局擁塞的值,其充分體現(xiàn)了本片上網(wǎng)絡(luò)擁塞控制方法的全局意識,可以最高效地決策出當(dāng)前傳送任務(wù)的全局最佳路徑。
[0158]每隔固定30秒的周期來更新路由表而非頻繁地交互讀寫操作,使得任意鄰近節(jié)點之間既保持了動態(tài)路由表的更新及時,又大大減少了數(shù)據(jù)計算量,縮短運算占用的時間,在相當(dāng)程度上緩解和限制了網(wǎng)絡(luò)擁塞的產(chǎn)生,提高了整個片上網(wǎng)絡(luò)的數(shù)據(jù)處理能力和吞吐量。
【權(quán)利要求】
1.基于動態(tài)路由表的片上網(wǎng)絡(luò)擁塞控制方法,其特征在于:該方法包括如下步驟: 步驟一:定義的基礎(chǔ)的X-Y傳輸規(guī)則: 在2D mesh拓撲的片上網(wǎng)絡(luò)上,由mXn個路由節(jié)點組成的矩形陣列欄目上的每一個路由節(jié)點都具有自己的唯一坐標(biāo),設(shè)任意一個路由節(jié)點A的坐標(biāo)值(X,y),另外一個任意路由節(jié)點K的坐標(biāo)值(P, q),則從節(jié)點A(x, y)始發(fā)并去往節(jié)點K(p, q)時,其遵循如下的基礎(chǔ)規(guī)則: 當(dāng)節(jié)點A(x,y)與K(p,q)的橫坐標(biāo)和縱坐標(biāo)均不相同時,A(x, y)總是忽略縱坐標(biāo)上的差值,并優(yōu)先選擇能使橫坐標(biāo)差值的絕對值縮小的那一個橫軸上的鄰近節(jié)點作為下一跳時的交付地址; 當(dāng)節(jié)點A(x,y)與K(p,q)的橫坐標(biāo)相同但縱坐標(biāo)不相同時,A(x, y)總是優(yōu)先選擇能使縱坐標(biāo)差值的絕對值縮小的那一個縱軸上的鄰近節(jié)點作為下一跳時的交付地址; 步驟二:給mXn的2D mesh拓撲片上網(wǎng)絡(luò)定義動態(tài)路由表的自更新規(guī)則,其具體包括如下子步驟: 步驟2.1:分別定義動態(tài)路由表的自更新變量,包括如下子步驟: 步驟2.1.1:定義動態(tài)路由表的內(nèi)容: 動態(tài)路由表中橫向的每一行條目均包括四列欄目,各列欄目所記錄的內(nèi)容分別為平均擁塞度Acd、目標(biāo)地址、下一跳地址和總跳數(shù)T1 ;動態(tài)路由表中的每一行條目均與片上網(wǎng)絡(luò)中的一個路由節(jié)點唯一對應(yīng),并且該行條目內(nèi)的四列欄目內(nèi)容的初始值均為空; 設(shè)當(dāng)前傳送任務(wù)欲從片上網(wǎng)絡(luò)中的任意一個路由節(jié)點A將數(shù)據(jù)傳至另一任意目標(biāo)路由節(jié)點K,則將路由節(jié)點A稱為數(shù)據(jù)源節(jié)點,并將目標(biāo)路由節(jié)點K稱為目標(biāo)節(jié)點;位于路由節(jié)點A周邊且直接與路由節(jié)點A相連的其它路由節(jié)點分別計作路由節(jié)點A的鄰近節(jié)點X(A1)、鄰近節(jié)點X(A2)……鄰近節(jié)點Χ(Αη) (η < 4,η為自然數(shù)); 定義目標(biāo)地址:目標(biāo)路由節(jié)點K在片上網(wǎng)絡(luò)中的坐標(biāo)地址(K)即為動態(tài)路由表中所要記載的目標(biāo)地址; 定義下一跳地址:在路由節(jié)點A的多個鄰近節(jié)點中,路由節(jié)點A準備將數(shù)據(jù)交付的那一個已被確定的鄰近節(jié)點X0ta)其在片上網(wǎng)絡(luò)中的坐標(biāo)地址(Xto)即為動態(tài)路由表中所要記載的下一跳地址;定義總跳數(shù)T1:將從路由節(jié)點A去往目標(biāo)路由節(jié)點K所需的實際跳步數(shù)計作T1 ; 定義平均擁塞度: 定義從路由節(jié)點A去往目標(biāo)路由節(jié)點K的平均擁塞度Acd(A_K)的表達式為:
式⑵中,路由節(jié)點A當(dāng)前的滿狀態(tài)緩存數(shù)值計作b(A),其可由路由節(jié)點A自身求得;路由節(jié)點A的總緩存數(shù)值計作c(A),其可由路由節(jié)點A自身求得; 路由節(jié)點A的增步總跳數(shù)T2 = ?\+1 ; 路由節(jié)點A的鄰近節(jié)點Χ(Αη)當(dāng)前所記載的平均擁塞度數(shù)值計作Acd(XAn),其可從鄰近節(jié)點X(An)所發(fā)來的路由更新報文中獲得; 步驟2.1.2:定義路由更新報文: 為每一個路由節(jié)點定義其自身的路由更新報文,路由更新報文橫向的每一行條目均包括三列欄目,各列欄目所記錄的內(nèi)容分別為該路由節(jié)點當(dāng)前平均擁塞度Acd、目標(biāo)地址(K)和增步總跳數(shù)T2 ; 每一個路由更新報文均與步驟2.1.1所述的一個路由節(jié)點A唯一對應(yīng),路由節(jié)點A根據(jù)其自身的動態(tài)路由表的內(nèi)容對其路由報文A中的三項數(shù)據(jù)進行更新; 步驟2.1.3:定義片上網(wǎng)絡(luò)可傳輸?shù)淖钸h距離L: 設(shè)2D mesh拓撲的片上網(wǎng)絡(luò)的是由mXn個路由節(jié)點組成的矩形陣列,則定 義 L = 2 X (m+n)......(3); 步驟2.1.4:定義路由更新請求時鐘:為片上網(wǎng)絡(luò)中的每一個路由節(jié)點均定義一個獨立的內(nèi)置自更新時鐘計時器Timer ;步驟2.1.5:為片上網(wǎng)絡(luò)中的每一個路由節(jié)點均定義四個本節(jié)點向其自身鄰近節(jié)點發(fā)送更新請求的請求次數(shù)計數(shù)器Count,如步驟2.1.1所述的任意一個路由節(jié)點A的四個請求次數(shù)計數(shù)器Count (Αη) (η彡4,n為自然數(shù))分別與該路由節(jié)點A的四個鄰近節(jié)點Χ(Αη) (η ( 4,η為自然數(shù))一一對應(yīng); 步驟2.1.6:以靜態(tài)方式對步驟2.1.1所述動態(tài)路由表進行初始化: 分別將步驟2.1.1所述的任意一個路由節(jié)點A的每一個鄰近節(jié)點Χ(Αη) (η < 4,η為自然數(shù))視作一個所述路由節(jié)點A為起點并以該確定的鄰近節(jié)點X0ta)為終點的獨立傳輸路徑,從而在所述路由節(jié)點A的動態(tài)路由表中創(chuàng)建四行新的鄰近節(jié)點路由條目;所述每一行鄰近節(jié)點路由條目均與一個鄰近節(jié)點Χ(Αη) (η < 4,η為自然數(shù))唯一對應(yīng); 對所述路由節(jié)點A以靜態(tài)方式對其自身動態(tài)路由表中前述四行鄰近節(jié)點路由條目分別進行初始化,將與所述一行鄰近節(jié)點路由條目唯一對應(yīng)的那個確定的鄰近節(jié)點X0ta)的在網(wǎng)絡(luò)坐標(biāo)地址(Xto) (η<4,η為自然數(shù))分別填入所述新創(chuàng)建的鄰近節(jié)點路由條目內(nèi)的下一跳地址列欄目以及目的地址列欄目;將所述一行鄰近節(jié)點路由條目內(nèi)的總跳數(shù)設(shè)置為.1,并將該行鄰近節(jié)點路由條目內(nèi)的平均擁塞度設(shè)置為O ; 步驟2.2:定義如步驟2.1.1所述的任意一個路由節(jié)點A的平均擁塞度更新規(guī)則,其具體包括如下子步驟: 步驟2.2.1:由路由節(jié)點A分別獲取由步驟2.1.1所述的每一個鄰近節(jié)點Χ(Αη) (η ( 4,η為自然數(shù))各自所發(fā)來的路由更新報文; 步驟2.2.2:路由節(jié)點A分別判斷,每一個如步驟2.2.1所述的鄰近節(jié)點Χ(Αη)的路由更新報文中,是否包含有途經(jīng)該鄰近節(jié)點Χ(Αη)并且到達目標(biāo)路由節(jié)點K的如步驟2.1.1所述的一行條目或多行條目;若不包含,則路由節(jié)點A直接將所述鄰近節(jié)點Χ(Αη)路由更新報文中的一行或多行條目新增并加入路由節(jié)點A自身的動態(tài)路由表,并執(zhí)行步驟2.3 ;若包含所述一行條目或多行條目,則直接執(zhí)行步驟2.2.3; 步驟2.2.3:路由節(jié)點A從自身的處理器中讀取路由節(jié)點A當(dāng)前的總緩存c(A)和滿狀態(tài)緩存b(A)的值; 步驟2.2.4:從該鄰近節(jié)點報文中分別獲得以該鄰近節(jié)點作為數(shù)據(jù)源節(jié)點出發(fā)并去往相同的目標(biāo)節(jié)點K時,該鄰近路由節(jié)點X0ta)所記錄的當(dāng)前的:平均擁塞度數(shù)值A(chǔ)cd(XAn_K)、目標(biāo)地址(KXAn)和增步總跳數(shù)T2(XAn); 步驟2.2.5:由路由節(jié)點A將自身的滿狀態(tài)緩存值b(A)、總緩存值c(A)、總跳數(shù)T1、增步總跳數(shù)T2以及如步驟2.2.2所述通過路由更新報文發(fā)來的鄰近節(jié)點X(An)的平均擁塞度數(shù)值A(chǔ)cd(XAn_K)分別代入式⑵中,并計算求得路由節(jié)點A的新平均擁塞度Acd(A_K) # ; 步驟2.2.6:判斷Acd(A_K)#是否大于等于ACd(A_K)ig ;若是,執(zhí)行步驟2.2.8 ;若否,執(zhí)行步驟 2.2.7 ; 步驟2.2.7:路由節(jié)點A對自身的動態(tài)路由表進行自更新,具體包括: 保持目標(biāo)地址⑷不變; 用路由節(jié)點A的增步總跳數(shù)T2的當(dāng)前值替代總跳數(shù)T1的當(dāng)前值; 用步驟2.2.5所求得的平均擁塞度Acd(A_K) #替換路由節(jié)點A的動態(tài)路由表中原本所記載的平均擁塞度Acd(A_K) g ;然后執(zhí)行步驟2.3 ; 步驟2.2.8:路由節(jié)點A不更新自身的動態(tài)路由表,直接執(zhí)行步驟2.3 ; 步驟2.3:由步驟2.1.1所述的任意一個路由節(jié)點A判斷其自身如步驟2.1.4所述的自更新時鐘計時器Timer的當(dāng)前時鐘周期是否已經(jīng)結(jié)束,若路由節(jié)點A自身的當(dāng)前時鐘周期尚未結(jié)束則進一步執(zhí)行步驟2.4,若當(dāng)前時鐘周期已經(jīng)結(jié)束則執(zhí)行步驟2.5 ; 步驟2.4:執(zhí)行路由更新請求規(guī)則,其具體包括如下子步驟: 步驟2.4.1:由步驟2.1.1所述的任意一個路由節(jié)點A判斷,在如步驟2.1.4所述自更新時鐘計時器的一個當(dāng)前的時鐘周期以內(nèi),路由節(jié)點A是否分別收到了鄰近節(jié)點X(A1)、鄰近節(jié)點X(A2)、鄰近節(jié)點X (A3)以及鄰近節(jié)點X(A4)的共計四個鄰近節(jié)點Χ(Αη) (η < 4,η為自然數(shù))各自所發(fā)來的全部共計四個路由更新報文;若未能收到全部四個路由更新報文,則執(zhí)行步驟2.4.2:若已經(jīng)收到全部四個路由更新報文,則執(zhí)行步驟2.4.8 ; 步驟2.4.2:路由節(jié)點A向未能及時發(fā)來路由更新報文的鄰近節(jié)點Χ(Αη)發(fā)送路由更新請求; 步驟2.4.3:路由節(jié)點A調(diào)取如步驟2.1.5所述的與未能及時發(fā)來路由更新報文的鄰近節(jié)點Χ(Αη)相對應(yīng)的請求次數(shù)計數(shù)器Count0ta),并使其當(dāng)前的計數(shù)值增加I ; 步驟2.4.4:路由節(jié)點A分別對如步驟2.1.5所述的每一個請求次數(shù)計數(shù)器Count0ta)進行判斷,若其當(dāng)前的計數(shù)值不大于3則執(zhí)行步驟2.4.5,若其當(dāng)前的計數(shù)值大于3則執(zhí)行步驟2.4.6 ; 步驟2.4.5:路由節(jié)點A繼續(xù)等待如步驟2.4.2所述的未能及時發(fā)來路由更新報文的鄰近節(jié)點X(An)向路由節(jié)點A發(fā)送路由更新報文,直至路由節(jié)點A接收到該報文后重新執(zhí)行步驟2.4.1 ; 步驟2.4.6:路由節(jié)點A在自身的動態(tài)路由表中將步驟2.4.2所述未能及時發(fā)來路由更新報文的鄰近節(jié)點X(An)確定為故障節(jié)點,并終止沿該故障節(jié)點的傳送任務(wù); 步驟2.4.7:路由節(jié)點A從其自身的動態(tài)路由表中查找與步驟2.4.6所述故障節(jié)點相對應(yīng)的每一行條目,并將包含前述故障節(jié)點信息的每一行均從動態(tài)路由表中整行刪除,以使得該行動態(tài)路由表內(nèi)全部數(shù)據(jù)均不再參與任何后續(xù)步驟的運算; 步驟2.4.8:由路由節(jié)點A提前重置自身的如步驟2.1.4所述的自更新時鐘計時器Timer ;并將剩余的全部非故障鄰近節(jié)點X(An)對應(yīng)的請求次數(shù)計數(shù)器Count0ta)均同步重置為O ; 步驟2.5:步驟2.1.4所述的自更新時鐘計時器Timer當(dāng)前的時鐘周期自行結(jié)束重置,或者若該計時器Timer在如步驟2.4.8所述的過程中被重置,又或者,當(dāng)前如步驟2.1.1所述的任意一個路由節(jié)點A收到了如步驟2.4.2所述的其鄰近節(jié)點X(An)發(fā)送來的路由更新請求,當(dāng)上述三種情況中的任意一種發(fā)生時,路由節(jié)點A都按其當(dāng)前的動態(tài)路由表生成一份如步驟2.1.2所述的路由更新報文;步驟2.6:由步驟2.1.1所述的任意一個路由節(jié)點A將其按照步驟2.5所述方式生成的路由更新報文同步發(fā)送給如步驟2.4.8所述的路由節(jié)點A的全部非故障鄰近節(jié)點X(An);步驟三:為片上網(wǎng)絡(luò)的每一個路由節(jié)點均設(shè)定一個專門用于存儲動態(tài)路由表的內(nèi)部存儲空間并將步驟2.1所述的動態(tài)路由表的自更新變量分別存入每一個路由節(jié)點的動態(tài)路由表存儲空間中; 步驟四:將步驟2.2至步驟2.6所述動態(tài)路由表的自更新規(guī)則均分別存入步驟三所述的每一個路由節(jié)點自身的處理器內(nèi)存中; 步驟五:片上網(wǎng)絡(luò)的啟動和初始化: 片上網(wǎng)絡(luò)啟動并開始運作時,片上網(wǎng)絡(luò)每個路由節(jié)點均被同步初始化,初始化后的各個路由節(jié)點均已求得和存儲一個統(tǒng)一的片上網(wǎng)絡(luò)可傳輸?shù)淖钸h距離L值,各個路由節(jié)點的內(nèi)置自更新時鐘計時器Timer均未開始計時,并且,如步驟2.4.3所述的請求次數(shù)計數(shù)器Count(An)均置為O,各個路由節(jié)點的路由更新報文中的各項數(shù)值均為空; 步驟六:當(dāng)片上網(wǎng)絡(luò)開始首個從任意一個路由節(jié)點A將數(shù)據(jù)傳至另一任意目標(biāo)路由節(jié)點K的傳送任務(wù)時,片上網(wǎng)絡(luò)中的全部節(jié)點被同步激活,各個路由節(jié)點的內(nèi)置自更新時鐘計時器Timer均開始按步驟2.1.4所設(shè)定的時間值開始倒計時; 步驟七:由當(dāng)前數(shù)據(jù)源節(jié)點,即:路由節(jié)點A,其自身的處理器首先執(zhí)行步驟2.2至步驟.2.6所述動態(tài)路由表的自更新規(guī)則,并求得自身當(dāng)前的動態(tài)路由表; 步驟八:路由節(jié)點A判斷,假若把自身的某一確定的非故障鄰近節(jié)點Χ(Αη) (η < 4,η為自然數(shù))作為下一跳地址,則若從路由節(jié)點A始發(fā)途經(jīng)該非故障鄰近節(jié)點X(An)并去往目標(biāo)節(jié)點K時,在路由節(jié)點A當(dāng)前的動態(tài)路由表中所記載的總跳數(shù)T1是否大于步驟五所述的可傳輸?shù)淖钸h距離L值,若總跳數(shù)T1大于可傳輸?shù)淖钸h距離L,則執(zhí)行步驟九,否則執(zhí)行步驟i^一 ; 步驟九:路由節(jié)點A在自身的動態(tài)路由表中將步驟八所述的當(dāng)前非故障鄰近節(jié)點X0ta)確定為路徑不可達節(jié)點,并終止沿該故障節(jié)點的傳送任務(wù);同時,路由節(jié)點A從其自身的動態(tài)路由表中查找與該路徑不可達節(jié)點相對應(yīng)的一行條目,并將該行條目整行刪除以使得該行動態(tài)路由表內(nèi)全部數(shù)據(jù)均不再參與任何后續(xù)步驟的運算; 步驟十:由路由節(jié)點A終止沿步驟九所述的路徑不可達節(jié)點的當(dāng)前傳送任務(wù)并重新執(zhí)行步驟八; 步驟i^一:由路由節(jié)點A從自身的動態(tài)路由表中檢索,其自身的動態(tài)路由表中是否已經(jīng)存在去往目標(biāo)節(jié)點K并將步驟八所述確定的非故障鄰近節(jié)點Χ(Αη) (η < 4,η為自然數(shù))作為下一跳地址的一行條目,若存在該行條目,則執(zhí)行步驟十二,否則執(zhí)行步驟十三; 步驟十二:由路由節(jié)點A直接將步驟十所述的那一行條目所對應(yīng)的非故障鄰近節(jié)點X(An)確定為本次數(shù)據(jù)將要交付的下一個鄰近節(jié)點Χ(Αη),并將當(dāng)前數(shù)據(jù)包傳送給該下一個鄰近節(jié)點,然后執(zhí)行步驟十四; 步驟十三:由路由節(jié)點A按照步驟一所述基礎(chǔ)的X-Y傳輸規(guī)則將數(shù)據(jù)傳送給X-Y規(guī)則所確定的路徑上的下一個鄰近節(jié)點,然后執(zhí)行步驟十四; 步驟十四:如步驟十二或步驟十三所述的下一個鄰近節(jié)點,其在接到當(dāng)前的數(shù)據(jù)傳送任務(wù)后,開始將自身視作步驟七所述的數(shù)據(jù)源節(jié)點,其作為全新的路由節(jié)點A’開始按照與初始的路由節(jié)點A完全相同的方式執(zhí)行步驟六至步驟十二的過程。
【文檔編號】H04L12/801GK104202253SQ201410384166
【公開日】2014年12月10日 申請日期:2014年8月6日 優(yōu)先權(quán)日:2014年8月6日
【發(fā)明者】才華, 楊勇, 王博, 陳玉群, 曲福恒, 韓太林, 竇爽 申請人:長春理工大學(xué)