專利名稱:一種提高數(shù)據(jù)處理效率的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)通訊技術(shù)領(lǐng)域,尤其涉及一種提高數(shù)據(jù)處理效率的方法及裝置。
背景技術(shù):
在數(shù)據(jù)通訊領(lǐng)域常常會(huì)遇到從多個(gè)候選者中平等地選取一者的情況,如路由器轉(zhuǎn)發(fā)報(bào)文時(shí)從多個(gè)可選的下一跳中選取一個(gè)下一跳;從主鏈路的多條成員鏈路中選一條鏈路等等。在這種情況下一般要用到模(取余)運(yùn)算,先按某一規(guī)律,如hash(哈希)計(jì)算出一個(gè)大數(shù),然后用此數(shù)對(duì)候選者總數(shù)取模,選取編號(hào)為所得結(jié)果者即可。
目前路由器的數(shù)據(jù)轉(zhuǎn)發(fā)功能一般通過網(wǎng)絡(luò)處理器或ASIC(特定用途集成電路)實(shí)現(xiàn),這些器件在設(shè)計(jì)時(shí)由于考慮設(shè)計(jì)的復(fù)雜性和成本,往往不能提供除法運(yùn)算,而只提供加、減、移位、邏輯或、邏輯與等操作,這樣對(duì)于除3取模這樣的運(yùn)算,計(jì)算起來就會(huì)變得比較困難。
現(xiàn)有技術(shù)采用如下三種方法來解決求3的模的問題1)循環(huán)相減法例如求m模3的值,就用m減去3,然后判斷結(jié)果是否小于3,如果小于3則即為模3的結(jié)果,如果不小于3就一直減下去直到小于3為止,從而得到模3的結(jié)果。
此方法操作簡單,但是循環(huán)的次數(shù)會(huì)隨著m的增大而增大,這在快速轉(zhuǎn)發(fā)的路由器中是很難接受的。
2)模數(shù)表法做一個(gè)表,將要處理的數(shù)按照最大值,分為若干段,或者直接做一個(gè)表,將所有的除3以后的余數(shù)全部羅列,然后直接查表即可以得到結(jié)果。
通過查表的方法實(shí)現(xiàn)求模的方法速度很快,但存在的問題是,其可處理的數(shù)的上限受到內(nèi)存的限制,而對(duì)于數(shù)據(jù)通訊領(lǐng)域,要求模的數(shù)的范圍可以很大,如32bit的數(shù)就是232,需要4G內(nèi)存,為一個(gè)模3運(yùn)算而占用這么大內(nèi)存是不現(xiàn)實(shí)的。
3)利用簡單的數(shù)學(xué)原理其數(shù)學(xué)原理是一個(gè)32bit(比特)的數(shù)n,16進(jìn)制表示時(shí)最大為0xFFFFFFFF,把它的每4bit加起來的值對(duì)3的模和n對(duì)3的模是一樣的,此時(shí)僅需要計(jì)算每4bit加起來的值再對(duì)3取模即可,此方法表示如下void main(){register unsigned long n,j;register unsigned long total,remainder;total=0;/*存放每4bit加起來的和*/for(j=0;j<8;j++){total+=(n>>(j<<2))& 0xF;}/*每4bit加起來的值最大時(shí)為8*0xf=0x78,是一個(gè)8bit的數(shù)*//*把和的每4bit加起來的值對(duì)3的模和n對(duì)3的模是一樣的*/total=(total & 0xF)+((total & 0xF0)>>4);
/*每4bit加起來的值最大時(shí)為7+0xf=0x16,是一個(gè)8bit的數(shù)*//*把和的每4bit加起來的值對(duì)3的模和n對(duì)3的模是一樣的*/total=(total & 0xF)+((total & 0xF0)>>4);/*此時(shí)total最大為0x10,可以采用遞減求余,最多5次可以完成*/remainder=total;while(remainder>=3){remainder-=3;}/*此時(shí)remainder中的值就為原數(shù)對(duì)3取模的值*/}該方法的運(yùn)算次數(shù)比循環(huán)相減有了很大的減少,但是隨著n的二進(jìn)制位數(shù)的增加,記做Bit(n),比如64位,128位,運(yùn)算的次數(shù)仍然呈線性O(shè)(Bit(n))增長。
同樣,對(duì)于求模5,模15也有類似的相應(yīng)缺點(diǎn)。
發(fā)明內(nèi)容
鑒于上述現(xiàn)有技術(shù)所存在的問題,本發(fā)明的目的在于提供一種提高數(shù)據(jù)處理效率的方法及裝置,采用折半相加法對(duì)3、5及15求模,利用求模3結(jié)果求模6,使求模計(jì)算復(fù)雜度與數(shù)據(jù)的二進(jìn)制位數(shù)的對(duì)數(shù)同級(jí),加快了網(wǎng)絡(luò)處理器、ASIC芯片等進(jìn)行模3、模6、模5及模15的運(yùn)算速度。
本發(fā)明的目的是通過以下技術(shù)方案實(shí)現(xiàn)的一種提高數(shù)據(jù)處理效率的方法,包括在基于求模運(yùn)算的數(shù)據(jù)處理過程中,利用折半相加法進(jìn)行求模運(yùn)算,并根據(jù)求模運(yùn)算所得的結(jié)果進(jìn)行基于求模結(jié)果的數(shù)據(jù)處理。
利用所述折半相加法求模15具體包括將位數(shù)為2m比特的數(shù),其中m大于2,以2m-1比特為單位將其分為兩段,將分開后的兩段數(shù)相加求和,得到一個(gè)位數(shù)為2m-1比特的和,對(duì)此和再以2m-2比特為單位分成兩段,將分開后的兩段數(shù)相加求和,再加上前一次求和的進(jìn)位,得到一個(gè)2m-2比特的和,如此操作,當(dāng)?shù)玫?比特的結(jié)果時(shí),即為原數(shù)求模15的結(jié)果。
利用所述折半相加法求模5具體包括將位數(shù)為2m比特的數(shù),其中m大于2,以2m-1比特為單位將其分為兩段,將分開后的兩段數(shù)相加求和,得到一個(gè)位數(shù)為2m-1比特的和,對(duì)此和再以2m-2比特為單位分成兩段,將分開后的兩段數(shù)相加求和,再加上前一次求和的進(jìn)位,得到一個(gè)2m-2比特的和,如此操作,當(dāng)?shù)玫?比特的結(jié)果時(shí),將該4比特的結(jié)果與5比較,若大于5,則將該數(shù)減去5,直到得到小于5的數(shù)即為原數(shù)對(duì)5求模的結(jié)果,若得到的4比特的結(jié)果小于5,則該數(shù)即為原數(shù)求模5的結(jié)果。
利用所述折半相加法求模3具體包括將位數(shù)為2m比特的數(shù),以2m-1比特為單位將其分為兩段,將分開后的兩段數(shù)相加求和,得到一個(gè)位數(shù)為2m-1比特的和,對(duì)此和再以2m-2比特為單位分成兩段,將分開后的兩段數(shù)相加求和,再加上前一次求和的進(jìn)位,得到一個(gè)2m-2比特的和,如此操作,當(dāng)?shù)玫揭粋€(gè)2比特的結(jié)果時(shí),如果此結(jié)果大于等于3則減去3,所得結(jié)果即為原數(shù)對(duì)3求模的結(jié)果,如果得到的2比特的結(jié)果小于3,則該結(jié)果即為此數(shù)對(duì)3求模的結(jié)果。
所述方法還包括對(duì)于位數(shù)不足2m比特的數(shù)在前面加零補(bǔ)充位數(shù)。
所述方法包括利用求模3的結(jié)果實(shí)現(xiàn)求模6的運(yùn)算。
所述利用求模3的結(jié)果實(shí)現(xiàn)求模6的運(yùn)算具體包括
若原數(shù)為偶數(shù),則將原數(shù)右移1比特后,對(duì)右移后的結(jié)果求模3,再將得到的結(jié)果左移1比特,便得到原數(shù)求模6的結(jié)果;或,若原數(shù)為奇數(shù),則將原數(shù)減1后右移1比特后,對(duì)此結(jié)果求模3,再將求得的結(jié)果左移1比特后加1,便得到原數(shù)求模6的結(jié)果。
所述方法應(yīng)用于多條鏈路負(fù)荷分擔(dān),選擇鏈路的過程,鏈路的條數(shù)為3、6、5,或15,原數(shù)求模3、模6、模5、或模15的結(jié)果即為所要選擇的鏈路。
所述裝置用于進(jìn)行求模運(yùn)算,其利用折半相加法對(duì)原數(shù)求模,并根據(jù)求模運(yùn)算所得的結(jié)果進(jìn)行基于求模結(jié)果的數(shù)據(jù)處理。
所述裝置用于利用折半相加法求模3、模5,和/或模15。
所述裝置用于利用求模3的結(jié)果求模6。
由上述本發(fā)明提供的技術(shù)方案可以看出,本發(fā)明使求模3、模6、模5及模15的計(jì)算復(fù)雜度與數(shù)據(jù)的二進(jìn)制位數(shù)的對(duì)數(shù)同級(jí),加快了網(wǎng)絡(luò)處理器、ASIC芯片等進(jìn)行模3、模6、模5及模15的運(yùn)算速度,使計(jì)算復(fù)雜度降低為O(log2Bit(n))。
具體實(shí)施例方式
本發(fā)明的核心思想是提供一種提高數(shù)據(jù)處理效率的方法,采用折半相加法求模3、模5及模15,并利用求模3結(jié)果求模6,使計(jì)算復(fù)雜度與數(shù)據(jù)的二進(jìn)制位數(shù)的對(duì)數(shù)同級(jí),加快了網(wǎng)絡(luò)處理器、ASIC芯片等進(jìn)行模3的運(yùn)算速度。
本發(fā)明提供一種提高數(shù)據(jù)處理效率的方法,由于當(dāng)代的計(jì)算機(jī)或網(wǎng)絡(luò)處理器其運(yùn)算器的位數(shù)都普遍以32、64等2m比特為主,因此本發(fā)明主要涉及用二進(jìn)制表示位數(shù)為2m比特的數(shù)的處理方法,實(shí)際操作時(shí)對(duì)于位數(shù)不足2m比特的數(shù),可以在前面補(bǔ)零。
本發(fā)明所述的方法具體方案為以2m-1bit(比特)為單位,將原數(shù)分為兩段,將這兩段數(shù)據(jù)相加求和,得到一個(gè)位數(shù)為2m-1bit的和,對(duì)此和再以2m-2bit為單位將其分成兩段,將這兩段求和并加上前一次求和的進(jìn)位,得到一個(gè)2m-2bit的和,再分段,再求和,如此繼續(xù),當(dāng)?shù)玫?bit的結(jié)果時(shí),即為原數(shù)求模15的結(jié)果;將該4bit的結(jié)果與5比較,若大于5,則將該數(shù)減去5,因?yàn)?bit的數(shù)范圍為0~15,所以至多做三次減法,將得到原數(shù)對(duì)5求模的結(jié)果;若得到的4bit的結(jié)果小于5,則該數(shù)即為原數(shù)求模5的結(jié)果;在求模15或模5的運(yùn)算時(shí),m值大于2;按照上述折半相加法,當(dāng)?shù)玫揭粋€(gè)2bit的結(jié)果時(shí),如果此結(jié)果大于等于3則減去3,所得結(jié)果即為原數(shù)對(duì)3求模的結(jié)果;如果得到的2bit的結(jié)果小于3,則該結(jié)果即為此數(shù)對(duì)3求模的結(jié)果。在負(fù)荷分擔(dān),選擇鏈路時(shí),所得結(jié)果即為所要選擇的鏈路。
下面以32bit的數(shù)為例,其對(duì)3取模的方法如下步驟1以16bit為單位將原數(shù)分為兩段,將這兩段相加,得到一個(gè)16bit的結(jié)果;步驟2以8bit為單位,將上面得到的16bit的和分為兩段,將這兩段相加,并加上上一次的進(jìn)位,得到一個(gè)8bit的結(jié)果;步驟3以4bit為單位,再將上面得到的8bit的和分為兩段,將這兩段相加,并加上上一次的進(jìn)位,得到一個(gè)4bit的結(jié)果;步驟4以2bit為單位,再將上面得到的4bit的和分為兩段,將這兩段相加,并加上上一次的進(jìn)位,得到一個(gè)2bit的結(jié)果;步驟5將上述所的結(jié)果與3比較,若上述所得結(jié)果大于等于3,則將此結(jié)果減去3,得到原數(shù)對(duì)3求模的結(jié)果;若所的結(jié)果小于3,則此結(jié)果即為原數(shù)對(duì)3求模的結(jié)果。
對(duì)于原始數(shù)據(jù)為64bit、128bit位的數(shù),也可以以此類推,可見此方法將模3的計(jì)算復(fù)雜度降到了對(duì)數(shù)級(jí)O(log2Bit(n))。
利用上述求模3的結(jié)果,可以通過簡單的運(yùn)算完成求模6的操作,具體操作包括若原數(shù)x為偶數(shù),即x=2k=6m+r,即x是個(gè)偶數(shù),且模6的結(jié)果是r,則k=3m+r/2,即k對(duì)3取模的值是r/2,所以,若k模3的值為t,則t=r/2,所以r=2t;因此若x為偶數(shù),則x模6的求法為步驟10求原數(shù)x/2的結(jié)果,即將x右移一bit,設(shè)所得結(jié)果為k;步驟11用本發(fā)明模3的方法求k模3,設(shè)結(jié)果為t;步驟12將t*2,即,將t左移一bit,所得結(jié)果即為x模6的值。
若原數(shù)x為奇數(shù),即x=2k+1=6m+r,即x是個(gè)奇數(shù),且模6的結(jié)果是r,則k=3m+(r-1)/2,即k對(duì)3取模的值是(r-1)/2,所以,若k模3的值為t,則有,t=(r-1)/2,所以r=2t+1;因此,若原數(shù)x為奇數(shù),則x模6的求法為步驟20計(jì)算(x-1)/2的結(jié)果,即x-1后再右移一bit,設(shè)所得結(jié)果為k;步驟21使用本發(fā)明模3的方法求k模3,設(shè)結(jié)果為t;步驟22計(jì)算t*2+1,即,將t左移一bit,再加1,所得結(jié)果即為x求模6的值。
保證上述求模3、模5、模15的方法正確性的數(shù)學(xué)原理為定理1對(duì)于一個(gè)正整數(shù)n,以3k+1為基表示n時(shí),其中k為自然數(shù),此表示形式的各位相加之和模3的值與n模3的值是相等的;比如10進(jìn)制的數(shù)就具有此特點(diǎn),就是因?yàn)?0=3*3+1;同理,一個(gè)數(shù)用16進(jìn)制表示,也有此特點(diǎn),上述方法用的是每4bit一組,即用16進(jìn)制表示此數(shù)。
其證明如下如果一個(gè)數(shù)n,以3k+1為基的表示形式為anan-1…a1a0,k為自然數(shù);則此數(shù)的值可表示為n=an(3k+1)n+an-1(3k+1)n-1+…+a1(3k+1)1+a0=an((3k)n+Cn1(3k)n-1+Cn2(3k)n-2+Cn3(3k)n-3+……+Cn1(3k)1+1)+an-1((3k)n-1+Cn1(3k)n-2+Cn3(3k)n-3+Cn4(3k)n-4+……+Cn1(3k)1+1)+……………+ a1(3k +1)+a0此式中下劃線部分都是3的倍數(shù),因此其和可表示為3w,w為整數(shù),于是n=3w+a0+a1+a2+a3+……+an-1+an;即n對(duì)3取模的值與a0+a1+a2+a3+……+an-1+an對(duì)3取模的值相等。
定理22的偶數(shù)次方可表示為3k+1的形式,k為一整數(shù);比如22=3+1,24=15+1,26=63+1=21*3+1,28=255+1=85*3+1,210=1023+1=341*3+1,216=65535+1=21845*3+1,證明22n=4n=(3+1)n=3n+Cn13n-1+Cn23n-2+……+Cn232+3+1上式中下劃線部分均為3的倍數(shù),其和也為3的倍數(shù),設(shè)其為3t,t為一整數(shù),于是22n=3t+1;由上述定理1和定理2可以得到下述定理定理3對(duì)于一個(gè)整數(shù)n,以2的偶數(shù)次方為基表示時(shí),此表示形式的各位相加之和模3的值與n模3的值是相等的。
由定理3便可以得出,本發(fā)明所給出的求3的模的方法是正確的,把一個(gè)32bit的數(shù)看成是以216為基的數(shù)時(shí),其各個(gè)位相加就是將其高16bit的數(shù)和低16bit的數(shù)相加,依此類推。
根據(jù)定理1的證明可以推廣出定理4對(duì)于一個(gè)正整數(shù)n,以rk+1為基表示n時(shí),k為自然數(shù),r為正整數(shù),此表示形式的各位相加之和模r的值與n模r的值是相等的;其證明與定理1類似,此處略去。
與定理2類似可以得到下面的定理定理52的4n次方可表示為15k+1的形式,同時(shí)也可以表示為5w+1的形式,其中n、k、w為自然數(shù)。
證明24n=16n=(15+1)n=15n+Cn115n-1+Cn215n-2+……+Cn2152+15+1;與定理2類似便可得24n=15k+1;因?yàn)?5=3*5,所以令w=3k,便可得24n=5w+1;因此由定理4與定理5便可得定理6對(duì)于一個(gè)正整數(shù)n,以24k為基表示n時(shí),其中k為一自然數(shù),此表示形式的各位相加之和模15的值與n模15的值是相等的,同時(shí)此表示形式的各位相加之和模5的值與n模5的值也是相等的。
由定理6便可知上述對(duì)5求模和對(duì)15求模的方法是正確的。
本發(fā)明提供一種提高數(shù)據(jù)處理效率的裝置,用于進(jìn)行求模運(yùn)算,其利用折半相加法對(duì)原數(shù)求模,可以實(shí)現(xiàn)求模3、模5及模15的運(yùn)算,并根據(jù)求模3結(jié)果計(jì)算求模6的值,所述裝置加快了網(wǎng)絡(luò)處理器、ASIC芯片等進(jìn)行模3、模6、模5及模15的運(yùn)算速度,使計(jì)算復(fù)雜度降低為O(log2Bit(n))。
以上所述,僅為本發(fā)明較佳的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種提高數(shù)據(jù)處理效率的方法,其特征在于,包括在基于求模運(yùn)算的數(shù)據(jù)處理過程中,利用折半相加法進(jìn)行求模運(yùn)算,并根據(jù)求模運(yùn)算所得的結(jié)果進(jìn)行基于求模結(jié)果的數(shù)據(jù)處理。
2.如權(quán)利要求1所述的一種提高數(shù)據(jù)處理效率的方法,其特征在于,利用所述折半相加法求模15具體包括將位數(shù)為2m比特的數(shù),其中m大于2,以2m-1比特為單位將其分為兩段,將分開后的兩段數(shù)相加求和,得到一個(gè)位數(shù)為2m-1比特的和,對(duì)此和再以2m-2比特為單位分成兩段,將分開后的兩段數(shù)相加求和,再加上前一次求和的進(jìn)位,得到一個(gè)2m-2比特的和,如此操作,當(dāng)?shù)玫?比特的結(jié)果時(shí),即為原數(shù)求模15的結(jié)果。
3.如權(quán)利要求1所述的一種提高數(shù)據(jù)處理效率的方法,其特征在于,利用所述折半相加法求模5具體包括將位數(shù)為2m比特的數(shù),其中m大于2,以2m-1比特為單位將其分為兩段,將分開后的兩段數(shù)相加求和,得到一個(gè)位數(shù)為2m-1比特的和,對(duì)此和再以2m-2比特為單位分成兩段,將分開后的兩段數(shù)相加求和,再加上前一次求和的進(jìn)位,得到一個(gè)2m-2比特的和,如此操作,當(dāng)?shù)玫?比特的結(jié)果時(shí),將該4比特的結(jié)果與5比較,若大于5,則將該數(shù)減去5,直到得到小于5的數(shù)即為原數(shù)對(duì)5求模的結(jié)果,若得到的4比特的結(jié)果小于5,則該數(shù)即為原數(shù)求模5的結(jié)果。
4.如權(quán)利要求1所述的一種提高數(shù)據(jù)處理效率的方法,其特征在于,利用所述折半相加法求模3具體包括將位數(shù)為2m比特的數(shù),以2m-1比特為單位將其分為兩段,將分開后的兩段數(shù)相加求和,得到一個(gè)位數(shù)為2m-1比特的和,對(duì)此和再以2m-2比特為單位分成兩段,將分開后的兩段數(shù)相加求和,再加上前一次求和的進(jìn)位,得到一個(gè)2m-2比特的和,如此操作,當(dāng)?shù)玫揭粋€(gè)2比特的結(jié)果時(shí),如果此結(jié)果大于等于3則減去3,所得結(jié)果即為原數(shù)對(duì)3求模的結(jié)果,如果得到的2比特的結(jié)果小于3,則該結(jié)果即為此數(shù)對(duì)3求模的結(jié)果。
5.如權(quán)利要求2至4中任一項(xiàng)所述的一種提高數(shù)據(jù)處理效率的方法,其特征在于,所述方法還包括對(duì)于位數(shù)不足2m比特的數(shù)在前面加零補(bǔ)充位數(shù)。
6.如權(quán)利要求4所述的一種提高數(shù)據(jù)處理效率的方法,其特征在于,所述方法包括利用求模3的結(jié)果實(shí)現(xiàn)求模6的運(yùn)算。
7.如權(quán)利要求6所述的一種提高數(shù)據(jù)處理效率的方法,其特征在于,所述利用求模3的結(jié)果實(shí)現(xiàn)求模6的運(yùn)算具體包括若原數(shù)為偶數(shù),則將原數(shù)右移1比特后,對(duì)右移后的結(jié)果求模3,再將得到的結(jié)果左移1比特,便得到原數(shù)求模6的結(jié)果;或,若原數(shù)為奇數(shù),則將原數(shù)減1后右移1比特后,對(duì)此結(jié)果求模3,再將求得的結(jié)果左移1比特后加1,便得到原數(shù)求模6的結(jié)果。
8.如權(quán)利要求1所述的一種提高數(shù)據(jù)處理效率的方法,其特征在于,所述方法應(yīng)用于多條鏈路負(fù)荷分擔(dān),選擇鏈路的過程,鏈路的條數(shù)為3、6、5,或15,原數(shù)求模3、模6、模5、或模15的結(jié)果即為所要選擇的鏈路。
9.一種提高數(shù)據(jù)處理效率的裝置,其特征在于,所述裝置用于進(jìn)行求模運(yùn)算,其利用折半相加法對(duì)原數(shù)求模,并根據(jù)求模運(yùn)算所得的結(jié)果進(jìn)行基于求模結(jié)果的數(shù)據(jù)處理。
10.如權(quán)利要求9所述的一種提高數(shù)據(jù)處理效率的裝置,其特征在于,所述裝置用于利用折半相加法求模3、模5,和/或模15。
11.如權(quán)利要求10所述的一種提高數(shù)據(jù)處理效率的裝置,其特征在于,所述裝置用于利用求模3的結(jié)果求模6。
全文摘要
本發(fā)明涉及數(shù)據(jù)通訊技術(shù)領(lǐng)域中一種提高數(shù)據(jù)處理效率的方法,處理器利用折半相加法實(shí)現(xiàn)求模3、模5及模15的運(yùn)算,并利用求模3結(jié)果實(shí)現(xiàn)求模6,根據(jù)處理器計(jì)算所得的求模結(jié)果進(jìn)行基于求模后的相關(guān)處理。本發(fā)明使求模3、模6、模5及模15的計(jì)算復(fù)雜度與數(shù)據(jù)的二進(jìn)制位數(shù)的對(duì)數(shù)同級(jí),加快了網(wǎng)絡(luò)處理器、ASIC芯片等進(jìn)行模3、模6、模5及模15的運(yùn)算速度,使計(jì)算復(fù)雜度降低為O(log
文檔編號(hào)H04L12/56GK1866199SQ20051011553
公開日2006年11月22日 申請(qǐng)日期2005年11月4日 優(yōu)先權(quán)日2005年11月4日
發(fā)明者肖斌 申請(qǐng)人:華為技術(shù)有限公司