基于向量指令的大整数乘法实现方法及装置制造方法

文档序号:6634240阅读:264来源:国知局
基于向量指令的大整数乘法实现方法及装置制造方法
【专利摘要】一种基于向量指令的大整数乘法实现方法及装置,将大整数乘法的被乘数和乘数分别拆分为一个或多个向量长度整数,计算这些整数相乘,并对所有乘积求和;计算两个向量长度的整数相乘时,将所有向量乘法指令产生的积向量按照指定的次序组成两条加法进位链,利用带进位的向量加法指令,将每次向量相加产生的进位作为下一个向量加法指令的输入,消除链中所有加法进位,只产生两个加法进位,将其加回,得到两个向量长度整数的乘积。特别地,若被乘数和乘数的长度都小于向量长度的1/n,将n组整数相乘合并为一次向量长度整数相乘,计算吞吐量提升n倍。基于以上大整数乘法方法,还公开了一种基于Intel Xeon Phi协处理器的高速大整数乘法装置。本发明减少了大整数乘法需要的指令数,降低了计算延迟,提高了计算吞吐量。
【专利说明】基于向量指令的大整数乘法实现方法及装置

【技术领域】
[0001] 本发明涉及计算机技术中的数据加解密领域,特别涉及一种基于向量指令的大整 数乘法实现方法及装置。

【背景技术】
[0002] 大整数乘法广泛应用于计算机技术中公钥密码计算过程,保证所传输数据的安全 性。在计算机的数据密码计算领域,大整数乘法常常用于计算大整数模乘。大整数模乘是 一类公钥加密算法,如RSA算法和椭圆曲线算法)的基本运算,决定了算法的计算速度。对 于事先不知道模数的大整数模乘,如RSA算法中的模乘,一般使用蒙哥马利模乘算法实现; 对于可以事先确定模数且模数为梅森素数的大整数模乘,如椭圆曲线算法,比如SM2算法 和ECDSA算法中的模乘,可以先计算大整数乘法,再用快速约简对乘积取模。
[0003] 大整数乘法可以用硬件实现,也可以用软件实现。硬件实现包括采用现场可编辑 逻辑门阵列(FPGA)和专用集成电路(ASIC)实现。硬件实现比较灵活,可以按照需要定制 乘法器,如乘法器的字长,流水线的设计等。但是硬件实现一般开发难度大,开发周期长,成 本高。软件实现是在商用处理器上进行软件编程,利用商用处理器的特性优化算法。商用 处理器主要包括以下几类:中央处理器(CPU)、数字信号处理器(DSP)和图形处理器(GPU)。 这些处理器使用不同的指令集,存储结构也有所不同。CPU和DSP-般是单核或多核的处理 器,每个核都有较强的计算能力,可以执行不同指令,支持向量指令集。GPU是众核处理器, 一般拥有数千个核,每个核的计算能力较弱,多个核同时执行相同的指令。对于大整数乘法 的计算速率影响最大的是处理器使用的指令集,直接决定完成一次大整数乘法需要的指令 数。
[0004] 处理器的指令可分为两大类:标量指令和向量指令。标量指令是一条指令处理一 个字;向量指令是一条指令处理一个向量,一个向量包含多个字,即一条向量指令可以对向 量中的所有字同时执行相同操作。CPU,包括X86、ARM,支持向量指令集,是单指令多数据 (SMD)的处理器。GPU是单指令多线程(SMT)的处理器,即多个线程执行相同的指令,但 每个线程执行的指令一次只处理一个字。而且,CPU和GPU选择了不同的发展方向。CPU不 断加强向量指令,增加向量长度,添加新的向量指令,提升单核计算能力,GPU则不断增加核 的数量,提高线程并行度,增大总的计算吞吐量。因此,对于用户最常用的CPU处理器,要想 发挥其计算能力,必须充分利用向量指令。
[0005] X86CPU近20年不断加强向量指令集,从MMX指令集、SSE指令集发展到AVX指令 集、AVX2指令集,AVX2指令集支持256位的整数和浮点运算。英特尔公司的Xeon Phi协处 理器支持512位向量指令集,支持对16个单精度浮点数或16个32位整数同时计算。向量 指令集中的向量乘法指令和向量加法指令对两个向量相同位置的字进行计算。如果向量内 不同位置的字数据相关,如加法进位要累加到更高位置的字中,向量指令就很难处理。
[0006] 计算大整数相乘要对多个向量乘法结果求和,每次相加都要使用向量加法指令将 相同位置的字相加,并处理这些字产生的进位。其中最重要的是获取和保存各字产生的进 位,并将进位累加到和向量。一个字产生的进位需要加到更高位置的字中,而且还可能产生 新的进位,所以进位是不断向更高位置的字传播的,直到不再产生新的进位。所以如何处理 加法进位是实现基于向量指令的大整数乘法的关键,也是难点。
[0007] 目前利用向量指令处理大整数乘法中的加法进位的方法是使用冗余表示,S卩:将 大整数拆开存储到向量每个字的低比特位,空出若干高比特位,向量相加时产生的进位会 保存在高比特位,不会溢出,也不用立刻向更高的字传播,最后要将和向量从冗余表示转换 回整数。
[0008] 这种方法的主要缺点是:第一,将大整数转换为冗余表示,以及将大整数乘法的结 果从冗余表示转换回整数需要很多向量指令;第二,由于每个字都要留出若干高位容纳加 法产生的进位,大整数可能需要拆成更多的字,这样会增加向量乘法指令和向量加法指令 的运行次数。
[0009] 冗余表示的方法不能非常高效地计算大整数乘法中的向量快速求和,所以计算效 率较低。


【发明内容】

[0010] 有鉴于此,本发明提供了一种基于向量指令的大整数乘法实现方法,该方法能够 提高大整数乘法的计算效率。
[0011] 本发明还提供一种基于向量指令的大整数乘法的实现装置,该装置能够提高大整 数乘法的计算效率。
[0012] 根据上述目的,本发明是这样实现的:
[0013] 一种基于向量指令的大整数乘法实现方法,该方法应用在计算机的公钥密码计算 过程,
[0014] A、将大整数乘法的被乘数和乘数拆分为一个或多个向量长度整数;
[0015] B、计算向量长度整数相乘,过程为:
[0016] ⑴将被乘数向量依次与乘数向量的每个字相乘,得到所有积向量;
[0017] (2)将积向量组成一条字对齐的(:c/l型)加法进位链,利用带进位的向量加法指 令消除链中产生的所有加法进位,产生一组和向量和一个加法进位;
[0018] (3)将和向量组成一条错开一个字的型)加法进位链,利用带进位的向量加 法指令消除链中产生的所有加法进位,产生两个和向量和一个加法进位;
[0019] ⑷将两个加法进位加回和向量,得到被乘数向量和乘数向量的乘积;
[0020] 重复执行步骤(1)至步骤(4)计算出步骤A拆分出的所有向量长度整数的乘积。
[0021] C、对所有向量长度整数的乘积求和。
[0022] -种基于向量指令的大整数乘法实现装置,在支持带进位向量加法指令的处理器 上实现上述方法,包括:向量拆分组合模块、向量长度整数相乘模块、乘积求和模块,其中,
[0023] 向量拆分组合模块,用于将被乘数和乘数分别拆成一个或多个向量;或将η组长 度不大于向量长度的整数组合成两个向量;
[0024] 向量长度整数相乘模块包括两个子模块:向量乘法模块和向量加法模块;
[0025] 向量乘法模块,用于计算被乘数向量与乘数向量的各字相乘,得到所有积向量;
[0026] 向量加法模块包括型加法进位链模块和S型加法进位链模块,用于将积向量 组成一条^型加法进位链计算,将运算出的向量组成一条?型加法进位链,最后将两个加 法进位加回和向量,得到被乘数向量和乘数向量的乘积;如果被乘数或乘数被拆为多个向 量,需要多次调用向量长度整数相乘模块进行计算;
[0027] 乘积求和模块,用于对所有向量长度整数相乘模块产生的积向量求和。
[0028] 从上述方案可以看出,本发明将大整数乘法的被乘数和乘数分别拆分为一个或多 个向量长度整数,计算这些整数相乘,并对所有乘积求和;计算两个向量长度的整数相乘 时,将所有向量乘法指令产生的积向量按照指定的次序组成两条加法进位链,利用带进位 的向量加法指令,将每次向量相加产生的进位作为下一个向量加法指令的输入,消除链中 所有加法进位,只产生两个加法进位,将其加回,得到两个向量长度整数的乘积。特别地,若 被乘数和乘数的长度都小于向量长度的1/n,将η组整数相乘合并为一次向量长度整数相 乘,计算吞吐量提升η倍。基于以上大整数乘法方法,还公开了一种基于Intel Xeon Phi 协处理器的高速大整数乘法装置。本发明减少了大整数乘法需要的指令数,降低了计算延 迟,提高了计算吞吐量。

【专利附图】

【附图说明】
[0029] 图1为本发明实施例提供的基于向量指令大整数乘法实现方法的流程图;
[0030] 图2为本发明实施例提供的步骤102被乘数向量依次与乘数向量的每个字相乘的 具体计算流程图;
[0031] 图3为本发明实施例提供的进位累加算法计算过程及简化过程示意图;
[0032] 图4为本发明实施例提供的c/〖型加法进位链结构及计算过程示意图;
[0033] 图5为本发明实施例提供的B型加法进位链结构及计算过程示意图;
[0034] 图6为本发明实施例提供的步骤103 4型加法进位链的具体计算流程图;
[0035] 图7为本发明实施例提供的步骤104 S型加法进位链的具体计算流程图;
[0036] 图8为本发明实施例提供的步骤105将两个加法进位加回和向量的具体计算流程 图;
[0037] 图9为本发明实施例提供的基于向量指令的大整数乘法实现装置结构示意图;
[0038] 图10为本发明实施例中的Intel Xeon Phi掩码寄存器的使用示意图;
[0039] 图11为本发明第二实施例提供的基于Intel Xeon Phi的实现装置同时计算两个 256位整数乘法的具体计算流程图。

【具体实施方式】
[0040] 为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对 本发明作进一步详细说明。
[0041] 为了提高大整数乘法的计算效率,本发明在进行大整数计算时,不采用大整数冗 余表示的方法,以省去冗余表示和整数表示转换需要的多条指令,并充分利用向量每个字 的高比特位。本发明公开的大整数乘法的实现方法将本发明将大整数乘法的被乘数和乘数 分别拆分为一个或多个向量长度整数,计算这些整数相乘,并对所有乘积求和;计算两个向 量长度的整数相乘时,将所有向量乘法指令产生的积向量按照指定的次序组成两条加法进 位链,利用带进位的向量加法指令,将每次向量相加产生的进位作为下一个向量加法指令 的输入,消除链中所有加法进位,最后只产生两个加法进位,将其加回,得到两个向量长度 整数的乘积;特别的,若被乘数和乘数的长度都小于向量长度的1/n,可将η组整数相乘合 并为一次向量长度整数相乘,计算吞吐量提升η倍。基于以上大整数乘法实现方法,本发明 还公开了一种基于Intel Xeon Phi协处理器的高速大整数乘法装置。本发明公开的实现 方法和装置大幅减少了大整数乘法需要的指令数,降低了计算延迟,提高了计算吞吐量。 [0042] 本发明提供的大整数乘法应用于计算机技术中的传输数据的加解密过程。
[0043] 本发明提供的方法可以在处理器上完成,诸如Intel公司的Xeon Phi协处理器上 实现,可以对SM2、E⑶SA、RSA等多种密码计算过程中的大整数乘法进行高速计算。
[0044] 为了方便描述,本发明定义符号:
[0045] 带箭头的变量表示一个向量,如
[0046] 不带箭头的数组元素表示该向量的一个字,如X[i]表示向量兌的第i个字;
[0047] 带不同下标的多个向量表示这些向量之间有某种前后关系,如1^和1^都是低位 乘法向量指令的乘法结果,L 2比L1高一个字。
[0048] 向量长度为U比特,向量内字的长度为w比特,一个向量由s个字组成,u = s*w。
[0049] 图1为本发明实施例提供的基于向量指令大整数乘法实现方法的流程图,其具体 步骤为:
[0050] 步骤101、将大整数乘法的被乘数和乘数拆分为一个或多个向量长度整数;
[0051] 步骤102至步骤104用于计算一组向量长度整数相乘。
[0052] 步骤102、将被乘数向量依次与乘数向量的每个字相乘,得到所有积向量;
[0053] 步骤103、将积向量组成一条字对齐的型)加法进位链,利用带进位的向量加 法指令消除链中产生的所有加法进位,产生一组和向量和一个加法进位;
[0054] 步骤104、将和向量组成一条错开一个字的(:S型)加法进位链,利用带进位的向 量加法指令消除链中产生的所有加法进位,产生两个和向量和一个加法进位;
[0055] 步骤105、将两个加法进位加回和向量,得到被乘数向量和乘数向量的乘积;
[0056] 重复执行步骤102至步骤105计算出步骤101拆分出的所有向量长度整数的乘 积。
[0057] 步骤106、对所有向量长度整数的乘积求和。下面具体说明步骤101至步骤106的 实现方法。
[0058] 为了方便描述,本发明定义符号:
[0059] 带箭头的变量表示一个向量,如X:
[0060] 不带箭头的数组元素表示该向量的一个字,如X[i]表示向量?1的第i个字;
[0061] 带不同下标的多个向量表示这些向量之间有某种前后关系,如和ζ:都是低位 乘法向量指令的乘法结果,L2比L1高一个字。
[0062] 下面说明本发明用到的参数。
[0063] 向量长度为U比特,向量内字的长度为w比特,一个向量由s个字组成,u = s*w。 被乘数X的长度为a比特,乘数Y的长度为b比特。
[0064] 步骤101将任意长度的被乘数和乘数拆分为一个或多个向量长度整数,具体过程 为:
[0065] 将a比特的被乘数X划分为mx个字,b比特的乘数Y划分为my。最高的字中如果 长度不足u比特,将空出的高位比特置0。
[0066]

【权利要求】
1. 一种基于向量指令的大整数乘法实现方法,该方法应用在计算机的公钥密码计算过 程,其特征包括 : A、 将大整数乘法的被乘数和乘数拆分为一个或多个向量长度整数; B、 计算向量长度整数相乘,过程为: (1) 将被乘数向量依次与乘数向量的每个字相乘,得到所有积向量; (2) 将积向量组成一条字对齐的型)加法进位链,利用带进位的向量加法指令消 除链中产生的所有加法进位,产生一组和向量和一个加法进位; (3) 将和向量组成一条错开一个字的(S型)加法进位链,利用带进位的向量加法指令 消除链中产生的所有加法进位,产生两个和向量和一个加法进位; (4) 将两个加法进位加回和向量,得到被乘数向量和乘数向量的乘积; 重复执行步骤(1)至步骤(4)计算出步骤A拆分出的所有向量长度整数的乘积。 C、 对所有向量长度整数的乘积求和。
2. 如权利要求1中所述的实现方法,其特征在于,所述加法进位链算法利用带进位的 向量加法指令将多个需要求和的向量按指定次序组成一条加法进位链,消除链中所有进 位,其中, 带讲你向骨fin抹指冬Αη「πτ加下丰完.
ADC指令将向量:jf、铲:和进位向量CarryIn相加,产生和向量和新的进位向量CarryOut; 加法进位链,其特征在于,向量瓦与向量K相加产生进位向量Carry:Carry:作 为向量与向量求和的输入进位向量,相加产生进位向量Carry2,如此进行m-l次, CarrymS1作为向量t与向量求和的输入进位向量并产生进位向Λ:Carrymsm个 向量加法组成一条所述加法进位链。用公式可表示为:
加法进位链包括m个向量加法,最后只产生一个进位向量Carrym,消除m-l个进位向 量。
3. 如权利要求2所述实现方法,其特征在于,所述.^型加法进位链,若满足如下要求, 即为一条4型加法进位链:将需要求和的2s个向量按高低位排序,能够排成字对齐的s个 向量对,且向量对按高低顺序依次相差一个字,将向量对按从低到高的顺序组成一条加法 进位链,计算向量长度整数相乘,过程为:使用带进位的向量加法指令对W型加法进位链 的每组向量对求和,共需要执行S次,带进位的向量加法指令,产生S个和向量和一个进位 向量; 所述B型加法进位链,满足要求为:将需要求和的S个向量按高低位排序,能够排成依 次相差一个字的加法进位链,所述S型加法进位链规定如下三个操作为一轮B型加法进 位链计算操作: (1) 将和向量最低字保存到一个低位向量指定的字中; (2) 将和向量向低位移一个字; (3) 将和向量与下一个向量,以及进位向量相加,产生新的和向量和新的进位向量; 所述?型加法进位链由低到高的顺序依次对链中的s个向量执行?型加法进位链计 算操作,共需执行s-1次S型加法进位链计算操作,产生一个高位向量和若干低位向量以及 一个加法进位向量。
4. 如权利要求1所述的实现方法,其特征在于,所述向量长度整数相乘中的乘法计 算,使用向量乘法指令将被乘数向量依次与乘数向量的每个字相乘,得到所有积向量,过程 为: 使用字扩散指令(SPREAD),高位乘法向量指令(MULHIGH)和低位乘法向量指令 (MULLOff); 被乘数向量f和乘数向量f:都有s个字,计算过程为: FORi-Itos,反复执行步骤⑴至(3)
产生s个低位积向量K到ζ和s个高位积向量習^到Ιζβ
5. 如权利要求4所述的实现方法,其特征在于,所述向量长度整数相乘中的加法计算, 对所有被乘数向量依次与乘数向量的每个字相乘得到的积向量,使用加法进位链算法快速 求和; 使用带进位向量加法指令(ADC)、向量混合指令(BLEND)以及向量移位指令(SHIFT);B2、将所述2s个积向量中的2s-2个向量分为s-1组向量对,组成一条c/?型加法进位 链,由低位向高位对s-1组向量对依次求和,得到s+1个和向量,SuniQMSums,以及1个 加法进位向量Carrys;

B3、s+1个和向到Sums组成一条型加法进位链,进行S轮型加法进位链 计算,得到低位结果向量Low,高位和向量Hi彡Zis,加法进位向量Car?-ysf+i
+ ] B4、将进位向量Carrys、Carrys^1快速累加到高位和向量得到乘法结果向 量High、Low〇
6.如权利要求1所述的实现方法,其特征在于,当被乘数向量f或乘数向量i?的高位 若干个字为0时,对所述向量长度整数乘法进行优化: 设向量乂高Sx个字为0,向量F高Sy个字为0,若Sx >Sy,则交换向量f和向量?各字 的值; 向量F?的高Sy个字是0,只对向量^1的低S-SyA字扩散,进行S-Sy轮向量乘法,产生 S-Sy个低位积向量G到,和S-Sb个高位积向量瓦^到Hs_Sy ; 对产成的2* (S-Sy)个积向量,则步骤103只要进行S-Sy-I轮c/l型加法进位链计算,产 生s-sy+l个和向量,Smn^MSums_s^以及1个加法进位向量Carrys^1J; 对上面产生的s-sy+l个和向量到Sums_s^,以及1个加法进位向量 执行S-Sy轮2型加法进位链计算,得到低位结果向量Mm;,高位和向量加法进 位向量CarrysLsyH,其中向量Low只有S-Sy个低位字是有效的,高Sy个字是无效的; mCarrys^CcirTyj^syH累加到H诏fcs=Sj;,得到高位结果向量向量 和向量的低S-SyA字合并,组成向量f、F的乘法结果; 以上优化方法执行了S-Sy轮向量乘法,S-Sy-I轮型加法进位链计算,8-\轮?型加 法进位链计算,节省了Sy轮向量乘法、Sy轮^型加法进位链计算和Sy轮S型加法进位链计 算。
7.如权利要求1所述的实现方法,其特征在于,该方法还包括:将η组长度都不大于向 量长度[^的被乘数和乘数组成两个向量,一次计算出η组整数相乘,η为大于等于1的自 然数; 将η组被乘数组成一个被乘数向量η组乘数组成一个乘数向量每组被乘数和乘 数都是字对齐的; 只对?中的字进行组内扩散,即将乘数Yi的第j个字YiU]扩散到向量中从 _ *(i- 1) + !?到*i的_?个字。所以只需要进行轮向量乘法,产生$个低位积 向量ζ*到Lgj和_个高位积向量?到; 将2 - 1组字对齐的高位和低位积向量组成一条4·型加法进位链,进行H- 1轮 " - LtiJ ?Λ型加法进位链操作; 将bd- 1组字对齐的高位和低位积向量组成一条<^型加法进位链,进行一 1轮 ^型加法进位链操作,生成[fj+1个和向量到Sumgj; 将Ifj+1个和向量到组成一条s型加法进位链,进行轮?型加法 进位链操作,生成和Zftgh,将两个加法进位加回High; 将和按被乘数和乘数的分组拆开,组合成每组整数的乘法结果。
8. -种基于向量指令的大整数乘法实现装置,其特征在于,在支持带进位向量加法指 令的处理器上实现权利要求1?7中的任一方法,包括:向量拆分组合模块、向量长度整数 相乘模块、乘积求和模块,其中, 向量拆分组合模块,用于将被乘数和乘数分别拆成一个或多个向量;或将η组长度不 大于向量长度的整数组合成两个向量; 向量长度整数相乘模块包括两个子模块:向量乘法模块和向量加法模块; 向量乘法模块,用于计算被乘数向量与乘数向量的各字相乘,得到所有积向量; 向量加法模块包括c/l型加法进位链模块和S型加法进位链模块,用于将积向量组成 一条型加法进位链计算,将运算出的向量组成一条S型加法进位链,最后将两个加法进 位加回和向量,得到被乘数向量和乘数向量的乘积;如果被乘数或乘数被拆为多个向量,需 要多次调用向量长度整数相乘模块进行计算; 乘积求和模块,用于对所有向量长度整数相乘模块产生的积向量求和。
9. 如权利要求8所述的实现装置,其特征在于,在Intel公司的XeonPhi协处理器上 实现。
【文档编号】G06F7/523GK104461449SQ201410645961
【公开日】2015年3月25日 申请日期:2014年11月14日 优先权日:2014年11月14日
【发明者】林璟锵, 赵原, 荆继武, 潘无穷, 郑昉昱, 向继 申请人:中国科学院数据与通信保护研究教育中心
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1