一種利用浮點數(shù)計算指令實現(xiàn)大整數(shù)乘法計算加速方法
【專利摘要】本發(fā)明公開了一種利用浮點數(shù)計算指令實現(xiàn)大整數(shù)乘法計算加速方法。本方法為:1)將長度為n比特的被乘數(shù)A分為N段,長度為m比特乘數(shù)B分為M段;每段的長度為w比特,M≥N;2)將被乘數(shù)A、乘數(shù)B的每段分別轉(zhuǎn)化為一浮點數(shù);3)采用熔加運算對轉(zhuǎn)化后的被乘數(shù)A、乘數(shù)B進行乘法運算;并將運算結(jié)果轉(zhuǎn)化為一定點數(shù);4)將該定點數(shù)分為多段,每段長度為w比特;然后對每一段定點數(shù)R[u]:R[u]對2w進行求模運算,將求模結(jié)果保存到C[u]中;然后對R[u]右移w位,結(jié)果保存到Carry1中;然后將Carry1與R[u+1]作和,并保存到R[u+1]中。本發(fā)明減少了計算的復(fù)雜度,提升了計算速度。
【專利說明】
一種利用浮點數(shù)計算指令實現(xiàn)大整數(shù)乘法計算加速方法
技術(shù)領(lǐng)域
[0001] 本發(fā)明屬于計算技術(shù)領(lǐng)域,涉及一種利用浮點數(shù)計算指令實現(xiàn)大整數(shù)乘法計算加 速方法。
【背景技術(shù)】
[0002] 隨著計算機技術(shù)的不斷發(fā)展與信息安全要求的不斷提高,密碼學(xué)被大量應(yīng)用到生 活以及工作領(lǐng)域中。許多非對稱密碼算法都建立在大整數(shù)乘法的運算基礎(chǔ)上,包括世界上 流行的非對稱密碼算法RSA以及橢圓曲線算法ECC等,因此大整數(shù)算數(shù)運算速度直接影響到 密碼運算以及數(shù)字簽名的效率。提高大整數(shù)乘法的運算速度具有重要研究價值與意義。
[0003] 由于當前計算機基本數(shù)據(jù)類型的限制,大整數(shù)表示方法一般不能直接通過基本類 型數(shù)據(jù)表示,因此對于超大規(guī)模數(shù)據(jù)的乘法,計算機人員一般采用編程的方式進行處理。
[0004] 同時,計算機圖形處理單元的迅速發(fā)展,使得原本只適用于圖形計算進而應(yīng)用到 通用計算當中,比如NVIDIA公司的CUDA并行計算架構(gòu),該架構(gòu)通過利用GPU的處理能力,可 大幅提高計算性能。由于GPU在計算機中主要負責圖像處理工作,更加擅長浮點數(shù)的運算, 為了適應(yīng)這一發(fā)展方向,本發(fā)明采用浮點數(shù)來表示大整數(shù),利用浮點數(shù)指令進行編程,實現(xiàn) 大整數(shù)運算。
[0005] 本發(fā)明使用的浮點數(shù)符合IEEE 754所規(guī)定的浮點數(shù)標準。IEEE標準從邏輯上用三 元組{S,E,T}表示一個數(shù),S表示符號位,E表示階碼,T表示長度為p比特的尾碼,同時尾碼中 還有一位隱含位。根據(jù)IEEE754國際標準常用的浮點數(shù)有兩種格式。分別為單精度浮點數(shù)與 雙精度浮點數(shù)。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明提供一種利用浮點數(shù)計算指令實現(xiàn)大整數(shù)乘法計算加速方法,該方法能夠 減少大整數(shù)乘法計算的復(fù)雜度,提升計算速度。
[0007] -種利用浮點數(shù)計算指令實現(xiàn)大整數(shù)乘法計算加速方法,其步驟為:
[0008] 1)將長度為n比特的被乘數(shù)A分為N段,長度為m比特乘數(shù)B分為M段;其中,每段的長 度為w比特,M多N;
[0009] 2)將被乘數(shù)A、乘數(shù)B的每段分別轉(zhuǎn)化為一浮點數(shù);
[0010] 3)采用熔加運算對步驟2)轉(zhuǎn)化后的被乘數(shù)A、乘數(shù)B進行乘法運算;并將運算結(jié)果 轉(zhuǎn)化為一定點數(shù);
[0011] 4)將該定點數(shù)分為多段,每段長度為W比特;然后對每一段定點數(shù)R[u]分別進行下 列操作:R[u]對2 W進行求模運算,將求模結(jié)果保存到C[u]中;然后對R[u]右移w位,結(jié)果保存 到Carryl中;然后將該R[u]右移后的結(jié)果Carry 1與R[u+1 ]作和,并保存到R[u+1 ]中;其中,R
[u]為第u段定點數(shù),R[u+1]為第u+1段定點數(shù)。
[0012] 進一步的,長度w滿足公式 P為浮點數(shù)的尾碼長度。 }
[0013] 進一步的,將分段后位寬W比特的每段定義為一個字;其中,A[0:N-1]表示被乘數(shù)A 的第0~(N-1)的N個字,B[0: M-1 ]乘數(shù)B的第0~(M-1)的M個字。
[0014] 進一步的,將被乘數(shù)A的每段分別轉(zhuǎn)化為一浮點數(shù)的方法為:首先初始化(N+1)個 初值為〇的浮點數(shù)用來表示分段后的被乘數(shù),即用一組浮點數(shù)A'[0:N]表示轉(zhuǎn)化后的被乘 數(shù);設(shè)被乘數(shù)A第u段對應(yīng)的字A[u]轉(zhuǎn)化的浮點數(shù)結(jié)果為A'[u],然后從A[0]開始到A[N-1]中 的每一字A[u]分別進行以下操作:判斷A[u]與2 1-1的大小關(guān)系,如果A[u]小于則將長度 為w的數(shù)值A(chǔ)[u]轉(zhuǎn)化為浮點數(shù)A'[u];否則,將(A[u]-2 W)的計算結(jié)果保存到A'[u]中,并且置 A[u+1]的數(shù)值為(A[u+1]+1);最后得到存儲轉(zhuǎn)化后的被乘數(shù)A的一組浮點數(shù)A'[0:N]。
[0015] 進一步的,將乘數(shù)B的每段分別轉(zhuǎn)化為一浮點數(shù)的方法為:首先初始化(M+1)個初 值為〇的浮點數(shù)用來表示分段后的乘數(shù),即用一組浮點數(shù)B'[0:M]表示轉(zhuǎn)化后的乘數(shù);設(shè)乘 數(shù)B第u段對應(yīng)的字B[u]轉(zhuǎn)化的浮點數(shù)結(jié)果為B'[u],然后從B[0]開始到B[M-1]中的每一字B [u]分別進行以下操作:判斷B[u]與21-1的大小關(guān)系,如果B[u]小于2W'則將長度為w的數(shù)值 B[u]轉(zhuǎn)化為浮點數(shù)B'[u];否則,將(B[u]-2W)的計算結(jié)果保存到B'[u]中,并且置B[u+1]的 數(shù)值為(B[u+1]+1);最后得到存儲轉(zhuǎn)化后的乘數(shù)B的一組浮點數(shù)B'[0:M]。
[0016] 進一步的,采用熔加運算對步驟2)轉(zhuǎn)化后的被乘數(shù)A、乘數(shù)B進行乘法運算的方法 為:首先初始化(M+N+1)個的浮點數(shù),記為R'[0:M+N];設(shè)min(a,b)操作為取a與b中的較小 值,max (a, b)操作為取a與b中的較大值;然后根據(jù)一定次序累加被乘數(shù)A的一個字和乘數(shù)B 的一個字相乘的乘積到浮點數(shù)R'[k]中,完成按字掃描的大整數(shù)乘法運算操作,其中R'[k] 計算方法為
[0017]將運算結(jié)果轉(zhuǎn)化一定點數(shù)的方法為:R'[0:M+N]中存儲浮點數(shù)形式的計算結(jié)果,對 R' [0:M+N]中從R' [0]到R' [M+N]的每一R' [u],將R' [u]轉(zhuǎn)換為對應(yīng)定點數(shù)R[u],并將轉(zhuǎn)化后 結(jié)果保存到一組定點數(shù)R[0 :M+N]中。
[0018] 進一步的,按照符合C語言類型的強制類型轉(zhuǎn)換,將R'[u]轉(zhuǎn)換為對應(yīng)定點數(shù)R[u]。
[0019] 進一步的,步驟1)中,從低位到高位將長度為n比特被乘數(shù)A分為N段,長度為m比特 乘數(shù)B分為M段;若最后一段長度不足w比特,將該最后一段高位補0。
[0020] 進一步的,
[0021] 與現(xiàn)有技術(shù)相比,本發(fā)明的積極效果為:
[0022] 在計算大整數(shù)乘法時,首先將被乘數(shù)與乘數(shù)按照上述方案拆分為一定長度的若干 字;拆分后將上述字按照本方法要求轉(zhuǎn)化為浮點數(shù),在浮點數(shù)轉(zhuǎn)化過程中,我們能夠充分利 用浮點數(shù)的符號位,有效節(jié)省浮點數(shù)存儲空間,從而我們減少了存儲乘數(shù)與被乘數(shù)的字節(jié) 數(shù);利用浮點數(shù)的乘加指令,根據(jù)一定次序累加被乘數(shù)每一個字與乘數(shù)每一個字乘積到對 應(yīng)位置,由于字節(jié)數(shù)的減少,導(dǎo)致乘加次數(shù)的減少;最后將計算結(jié)果轉(zhuǎn)化為要求的形式。本 發(fā)明利用浮點數(shù)實現(xiàn)大整數(shù)乘法運算,可減少計算的復(fù)雜度,提升計算速度。
【附圖說明】
[0024]圖1為本發(fā)明提供的大整數(shù)乘法計算加速方法流程圖。
【具體實施方式】
[0025]下面結(jié)合附圖對本發(fā)明進行進一步詳細描述。
[0026] -種利用浮點數(shù)計算指令實現(xiàn)大整數(shù)乘法的方法,其特征在于,包括:在大整數(shù)乘 法中,設(shè)置被乘數(shù)A的長度為n比特,設(shè)置乘數(shù)B的長度為m比特;將位寬w比特定義為一個字, A[0:s](s> = 0)表示A的第0個字到第s個字,A[u]表示A的第u個字。
[0027]本發(fā)明在計算過程中使用浮點式格式,其使用的浮點數(shù)符合IEEE 754所規(guī)定的浮 點數(shù)標準。IEEE標準從邏輯上用三元組{S,E,T}表示一個數(shù)N,其中,S表示符號位,E表示階 碼,T表示長度為p比特的尾碼,同時尾碼中還有一位隱含位。
[0029]本發(fā)明計算過程包括:
[0030] (a)將長度為n比特被乘數(shù)A分為N段,長度為m比特乘數(shù)B分為M段,同時滿足
[0031] M多N,每段的長度為w比特,分段從低位到高位進行,若最后一段長度不足w比特, 將該段高位補0。其中段數(shù)M與N計算式為:
[0033] 被乘數(shù)A與乘數(shù)B,按照以下格式進行分段: H-l M-.1
[0034] A = y.A[i]2''' , B = ^B[i]2H, i=〇 !=〇:
[0035] 最終A[0:N_1]與B[0:M_1]即為分段后的結(jié)果。其中w為分段后每段的長度,w取滿 足以下條件的最大值:
[0037] (b)按照上述說明,被乘數(shù)A與乘數(shù)B分段后,其結(jié)果可以表示為A[0:N_1]與B[0:M_ 1],將被乘數(shù)A的每段保存到單個浮點數(shù)中,本發(fā)明需要(N+1)個初值為0的浮點數(shù)用來表示 分段后的被乘數(shù),即用一組浮點數(shù)A'[0:N]表示轉(zhuǎn)化后的被乘數(shù)。在此定義字長w比特的A [u]轉(zhuǎn)化的浮點數(shù)結(jié)果為A'[u]。將從A[0]開始到A[N-1]中的每一字A[u]分別進行以下操 作:
[0038] 1)判斷A[u]與21-1的大小關(guān)系,如果A[u]小于2 W'轉(zhuǎn)換方式為下列步驟2),否則, 轉(zhuǎn)換方式為下列步驟3)。
[0039] 2)將長度為w的數(shù)值A(chǔ)[u]強制轉(zhuǎn)化為浮點數(shù)A' [u]。
[0040] 3)將(A[u]-2W)的計算結(jié)果保存到A'[u]中,并且置A[u+1]的數(shù)值為(A[u+1]+1)。 完成上述轉(zhuǎn)化后便將被乘數(shù)A存儲到一組浮點數(shù)A'[0:N]中。同上述操作可以將乘數(shù)B存儲 到另一組浮點數(shù)B'[0:M]中。
[0041] 步驟(b)之后,更包括下列步驟:
[0042] (c)為方便敘述,我們完成上述步驟(b)后,被乘數(shù)A與乘數(shù)B分別存儲到浮點數(shù)A'
[0:N]與B'[0:M]中,大整數(shù)乘法的計算中間結(jié)果用一組個數(shù)為(M+N+1)的浮點數(shù)R'[0:M+N] 來表示,在此利用浮點數(shù)的運算指令,現(xiàn)定義以下操作:min(a,b)操作取a與b中的較小值, max(a,b)操作取a與b中的較大值;本發(fā)明采用的恪加運算(Fused Multiply_Add,F(xiàn)MA)進行 大整數(shù)乘法操作,根據(jù)一定次序累加被乘數(shù)的一個字和乘數(shù)的一個字相乘的乘積到浮點數(shù) R'[k]中,完成按字掃描的大整數(shù)乘法運算操作,其中R'[k]計算方法為:
[0044] 步驟(c)之后,更包括下列步驟:
[0045] (d)經(jīng)過上述運算,計算結(jié)果以浮點數(shù)形式保存在R'[0:M+N]中,將R'[0:M+N]中的 每個浮點數(shù)強制轉(zhuǎn)化到能容納上述浮點類型的單個浮點數(shù)的定點數(shù)R[0:M+N]中;具體轉(zhuǎn)化 方法為對從R' [0]到R' [M+N]中的每一R' [u],分別按照符合C語言類型的強制類型轉(zhuǎn)換,將 R'[u]轉(zhuǎn)換為R[u]。轉(zhuǎn)化后將結(jié)果保存到一組定點數(shù)R[0:M+N]。
[0046] (e)在此設(shè)置計算乘積的計算結(jié)果用字母C表示,其長度為(M+N)Xw位,與乘數(shù)、被 乘數(shù)的表示方法類似,將位寬w比特定義為一個字,C[0:m+n-l]表示C的第0個字到第(m+n-1)個字,C[u]表示C的第u個字。將上述從R[0]到R[M+N-1]的每一定點數(shù)R[u]分別進行下列 操作:
[0047] l)R[u]對2W進行求模運算,將求模結(jié)果保存到C[u]中(C[u]=R[u]%2w);
[0048] 2)符合C語言類型的右移操作,對每一 R[u]右移w位,結(jié)果保存到Carryl中(Carryl = R[u]?w);
[0049] 3)將R[u]右移后的結(jié)果Carryl與R[u+1]作和,并保存到R[u+1]中(R[u+l]=R[u+ 1]+Carryl)〇
[0050]上述右移操作具體是指正數(shù)右移前位補0,負數(shù)右移前位補1。經(jīng)過上述操作,最后 大整數(shù)乘法的結(jié)果保存在C[0 :m+n-l ]中。
【主權(quán)項】
1. 一種利用浮點數(shù)計算指令實現(xiàn)大整數(shù)乘法計算加速方法,其步驟為: 1) 將長度為η比特的被乘數(shù)A分為N段,長度為m比特乘數(shù)B分為Μ段;其中,每段的長度為 w比特,Μ^Ν; 2) 將被乘數(shù)Α、乘數(shù)Β的每段分別轉(zhuǎn)化為一浮點數(shù); 3) 采用熔加運算對步驟2)轉(zhuǎn)化后的被乘數(shù)Α、乘數(shù)Β進行乘法運算;并將運算結(jié)果轉(zhuǎn)化 為一定點數(shù);4) 將該定點數(shù)分為多段,每段長度為w比特;然后對每一段定點數(shù)R[u]分別進行下列操 作:R[u]對2W進行求模運算,將求模結(jié)果保存到C[u]中;然后對R[u]右移w位,結(jié)果保存到 Carryl中;然后將該R[u]右移后的結(jié)果Carryl與R[u+1]作和,并保存到R[u+1]中;其中,R [u]為第u段定點數(shù),R[u+1]為第u+1段定點數(shù)。2. 如權(quán)利要求1所述的方法,其特征在于,長度w滿足公式 P為浮 f 點數(shù)的尾碼長度。3. 如權(quán)利要求1或2所述的方法,其特征在于,將分段后位寬w比特的每段定義為一個 字;其中,A[0:N-1]表示被乘數(shù)A的第0~(N-1)的N個字,B[0:M-1]乘數(shù)B的第0~(M-1)的Μ個 字。4. 如權(quán)利要求3所述的方法,其特征在于,將被乘數(shù)Α的每段分別轉(zhuǎn)化為一浮點數(shù)的方 法為:首先初始化(N+1)個初值為0的浮點數(shù)用來表示分段后的被乘數(shù),即用一組浮點數(shù)A' [〇:N]表示轉(zhuǎn)化后的被乘數(shù);設(shè)被乘數(shù)A第u段對應(yīng)的字A[u]轉(zhuǎn)化的浮點數(shù)結(jié)果為A'[u],然 后從A[0]開始到A[N-1]中的每一字A[u]分別進行以下操作:判斷A[u]與2^ 1的大小關(guān)系,如 果A[u]小于則將長度為w的數(shù)值A(chǔ)[u]轉(zhuǎn)化為浮點數(shù)A'[u];否則,將(A[u]-2 W)的計算結(jié) 果保存到A'[u]中,并且置A[u+1]的數(shù)值為(A[u+1] + 1);最后得到存儲轉(zhuǎn)化后的被乘數(shù)A的 一組浮點數(shù)Α'[0:Ν]。5. 如權(quán)利要求4所述的方法,其特征在于,將乘數(shù)B的每段分別轉(zhuǎn)化為一浮點數(shù)的方法 為:首先初始化(M+1)個初值為0的浮點數(shù)用來表示分段后的乘數(shù),即用一組浮點數(shù)Β'[0:Μ] 表示轉(zhuǎn)化后的乘數(shù);設(shè)乘數(shù)B第u段對應(yīng)的字B[u]轉(zhuǎn)化的浮點數(shù)結(jié)果為B'[u],然后從B[0]開 始到B[M-1]中的每一字B[u]分別進行以下操作:判斷B[u]與2H的大小關(guān)系,如果B[u]小于 2^,則將長度為w的數(shù)值B[u]轉(zhuǎn)化為浮點數(shù)B'[u];否則,將(B[u]-2 W)的計算結(jié)果保存到B' [u]中,并且置B[u+1]的數(shù)值為(B[u+1] + 1);最后得到存儲轉(zhuǎn)化后的乘數(shù)B的一組浮點數(shù)B' [0:M]〇6. 如權(quán)利要求5所述的方法,其特征在于,采用熔加運算對步驟2)轉(zhuǎn)化后的被乘數(shù)A、乘 數(shù)B進行乘法運算的方法為:首先初始化(M+N+1)個的浮點數(shù),記為R'[0:M+N];設(shè)min(a,b) 操作為取a與b中的較小值,max(a,b)操作為取a與b中的較大值;然后根據(jù)一定次序累加被 乘數(shù)A的一個字和乘數(shù)B的一個字相乘的乘積到浮點數(shù)R'[k]中,完成按字掃描的大整數(shù)乘 法運算操作,其中R'[k]計算方法為7. 如權(quán)利要求6所述的方法,其特征在于,將運算結(jié)果轉(zhuǎn)化一定點數(shù)的方法為:R'[0:M+ N]中存儲浮點數(shù)形式的計算結(jié)果,對R'[0:Μ+Ν]中從R'[0]到R'[M+N]的每一R'[u],將R'[u] 轉(zhuǎn)換為對應(yīng)定點數(shù)R[u],并將轉(zhuǎn)化后結(jié)果保存到一組定點數(shù)R[0:M+N]中。8. 如權(quán)利要求7所述的方法,其特征在于,按照符合C語言類型的強制類型轉(zhuǎn)換,將R' [u]轉(zhuǎn)換為對應(yīng)定點數(shù)R[u]。9. 如權(quán)利要求1或2所述的方法,其特征在于,步驟1)中,從低位到高位將長度為η比特 被乘數(shù)Α分為Ν段,長度為m比特乘數(shù)Β分為Μ段;若最后一段長度不足w比特,將該最后一段高 位補0。10. 如權(quán)利要求1或2所述的方法,其特征在于,
【文檔編號】G06F7/487GK105930128SQ201610325863
【公開日】2016年9月7日
【申請日】2016年5月17日
【發(fā)明人】鄭昉昱, 董建闊, 林璟鏘, 荊繼武, 蔡權(quán)偉, 趙原
【申請人】中國科學(xué)院數(shù)據(jù)與通信保護研究教育中心