CN103631660A - 在gpu中进行大整数计算时的存储资源分配方法及装置 - Google Patents
在gpu中进行大整数计算时的存储资源分配方法及装置 Download PDFInfo
- Publication number
- CN103631660A CN103631660A CN201310435220.2A CN201310435220A CN103631660A CN 103631660 A CN103631660 A CN 103631660A CN 201310435220 A CN201310435220 A CN 201310435220A CN 103631660 A CN103631660 A CN 103631660A
- Authority
- CN
- China
- Prior art keywords
- large integer
- integer calculations
- thread
- mould
- calculations
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Complex Calculations (AREA)
Abstract
本发明公开了一种在图形处理器GPU中进行大整数计算时的存储资源分配方法及装置,在采用GPU线程执行各种大整数计算过程中,为每个线程分配寄存器,在线程执行大整数计算过程中,将线程当前执行的大整数计算的操作数和中间计算变量存储在该线程所分配的寄存器中,将线程当前执行的大整数计算的模数和其他数据存储在内存中。这样,GPU线程中的大整数计算要调用操作数和中间计算变量时,都可以直接重复调用已分配的寄存器获得,一方面减少GPU线程的寄存器使用量,提高线程的并行执行效率,另一方面为大整数计算保留必要的寄存器,能更加有效地提高大整数计算的执行速度。
Description
技术领域
本发明涉及大整数计算技术,特别涉及一种在图形处理器(GPU,Graphics Processing Unit)中进行大整数计算时的存储资源分配方法及装置。
背景技术
采用多核并行计算是提升处理器性能的重要方式,因此出现了包括海量并行结构运算单元的GPU,GPU已经发展成为了并行度高、多线程、计算快捷及内存带宽大的高性能通用处理器。GPU体系结构在组成上分为三层:第一层由若干个线程处理器簇(TPC,Thread Processing Cluster)组成,第二层由多个流多处理器(SM,Streaming Multiprocessor)组成,第三层为构成SM的流处理器(SP,Stream Processor),也可以称为线程处理器。SM作为GPU的一个任务执行和调度单元,主要负责执行GPU分发的线程指令,而SP是GPU中最基本的指令执行单元,其执行的操作由所属的SM控制。
2006年NVIDIA公司推出了统一计算设备架构(CUDA,Compute Unified Device Architecture)可编程平台,通过对标准C语言的一定拓展与改造,使得用户可以通过类C语言代码来实现GPU线程的调度,为GPU在通用计算领域的应用提供了友好的开发环境。在CUDA可编程平台架构下,GPU执行的最小单位是线程(thread),数个线程(thread)可以组成一个线程块(block)。一个block中的thread可以存取同一共享内存且同步。执行相同程序的block,组成栅格(grid),不同的grid可以执行不同的程序。在CUDA可编程平台架构中,每个thread都有私有的存储器(register)和本地内存(Local Memory)。同一个block中的所有thread共享一共享内存(Shared Memory),所有的thread共享一全局内存(Global Memory)、常 数内存(Constant Memory)及纹理内存(Texture Memory)。不同的grid有各自的全局内存、常数内存和纹理内存。GPU中不同层次存储结构具有不同的资源容量和访问延迟等特性,例如,寄存器资源容量和访问延迟都最小,而全局内存的资源容量和访问延迟都最大。
一个SM上可以驻留多个block,block数量根据GPU架构不同而不同,驻留在同一SM上的block共享该SM上的寄存器和共享内存等资源。而SM从当前驻留的block中以由32个thread组成的线程束(warp)为单位抓取thread计算。同样,一个SP上也可以驻留多个thread。
一个SM能够支持的并发thread个数同时受两个条件制约:第一,SM中所有thread占用的寄存器资源之和不能超过该SM包含的寄存器资源总容量;第二,目前CUDA规定每个block中最多包含512个thread,SM所能包含的thread数目还要受该SM驻留的block数目限制。
例如,假设一个SM包含65Kbit的寄存器资源,每个thread平均占用128bit的寄存器。
若nb=1,,则nt=512×1=512。
可见,thread占用的寄存器资源对GPU的并行度具有很大的影响,thread占用的寄存器资源越少,SM中包含的并发thread才能越多,才能更好的提高thread的并行执行效率和GPU的运算性能。
随着计算机的发展,计算机保密系统变得越来越重要,各种公钥密码算法得到了快速发展,这些算法的实现都建立在大整数计算的基础上。目前,各种编程语言所提供的基本数据类型中,一般整形数所能表示的最大整数只有232-1或264-1,与计算机的机器字长相匹配。而公钥密码算法中的大整数 数据位宽一般为128~2048位,大整数的计算开销是非常大的。因此如何解决耗时的大整数计算问题是公钥密码算法领域普遍关注的热点问题。基于GPU的高度并行计算特点,针对公钥密码中普遍存在的大整数计算问题,可以利用GPU上丰富的分布式计算部件,同时加速处理很多个大整数计算,能够非常有效的降低公钥密码算法的平均时间消耗。公钥密码中的大整数计算主要包括模加、模减、模乘、模逆、模约减、模平方及模幂等几种类型的运算,可分别表示为:C=(A+B)mod m、C=(A-B)mod m、C=(A*B)mod m、C=(A-1)mod m、C=(A-0)mod m、C=(A*A)mod m和C=(An)mod m,其中A、B为运算的输入数据,m为模数,且A、B、m都是大整数,上述各种运算的计算结果C也是大整数。例如,若两个源操作数A、B和模数m都是256bit的大整数,目的操作数C也是一个256bit的大整数。
在采用大整数计算的公钥密码中,一种就是非对称(SM2)算法,其具体的过程如下所述。
(1)SM2算法中的数字签名生成算法
设待签名的消息为M,为了获取消息M的数字签名(r,s),作为签名者的用户A应实现以下运算步骤:
A1:置
A3:用随机数发生器产生随机数k∈[1,n-1];
A4:计算椭圆曲线点(x1,y1)=[k]G,按GM/T0003.1-2012的4.2.8给出的方法将x1的数据类型转换为整数;
A5:计算r=(e+x1)mod n,若r=0或r+k=n则返回A3;
A6:计算s=((1+dA)-1(k-rdA))modn’若s=0则返回A3;
A7:按GM/T0003.1-20124.2.2给出的细节将r、s的数据类型转换为字符串,消息M的签名为(r,s)。
其中,ZA:关于用户A的可辨别标识、部分椭圆曲线系统参数和用户A公钥的杂凑值;G:椭圆曲线的一个基点,其阶为素数;n:基点G的阶(n是#E(Fq)的素因子);dA:用户A的私钥。
(2)SM2算法中的数字签名验证算法
为了检验收到的消息M’及其数字签名(r’,s’),作为验证者的用户B应实现以下运算步骤:
B1:检验r'∈[1,n-1]是否成立,若不成立则验证不通过;
B2:检验s'∈[1,n-1]是否成立,若不成立则验证不通过;
B3:置
B4:计算按GM/T0003.1-20124.2.4和4.2.3给出的方法将e’的数据类型转换为整数;
B5:按GM/T0003.1-20124.2.3给出的方法将r’、s’的数据类型转换为整数,计算t=(r’+s’)mod n,若t=0,则验证不通过;
B6:计算椭圆曲线点(x1’,y1’)=[s’]G+[t]PA;
B7:按GM/T0003.1-20124.2.8给出的方法将x1’的数据类型转换为整数,计算R=(e’+x1’)mod n,检验R=r’是否成立,若成立则验证通过;否则验证不通过。
其中,PA为用户A的公钥。
(3)SM2算法中的加密算法
设需要发送的消息为比特串M,klen为M的比特长度。
为了对明文M进行加密,作为加密者的用户A应实现以下运算步骤:
A1:用随机数发生器产生随机数k∈[1,n-1];
A2:计算椭圆曲线点C1=[k]G=(x1,y1),按GM/T0003.1-2012的4.2.9和4.2.5给出的方法,将C1的数据类型转换为比特串;
A3:计算椭圆曲线点S=[h]PB,若S是无穷远点,则报错并退出;
A4:计算椭圆曲线点[k]PB=(x2,y2),按GM/T0003.1-2012的4.2.6和4.2.5给出的方法,将坐标x2、y2的数据类型转换为比特串;
A5:计算t=KDF(x2||y2,klen),若t为全0比特串,则返回A1;
A6:计算C2=M t;
A7:计算C3=Hash(x2||M||y2);
A8:输出密文C=C1||C3||C2。
其中,PB:用户B的公钥;KDF():密钥派生函数。
(4)SM2算法中的解密算法
设klen为密文中C2的比特长度。
为了对密文C=C1||C3||C2进行解密,作为解密者的用户B应实现以下运算步骤:
B1:从C中取出比特串C1,按GM/T0003.1-2012的4.2.4和4.2.10给出的方法,将C1的数据类型转换为椭圆曲线上的点,验证C1是否满足椭圆曲线方程,若不满足则报错并退出;
B2:计算椭圆曲线点S=[h]C1,若S是无穷远点,则报错并退出;
B3:计算[dB]C1=(x2,y2),按GM/T0003.1-2012的4.2.6和4.2.5给出的方法,将坐标x2、y2的数据类型转换为比特串;
B4:计算t=KDF(x2||y2,klen),若t为全0比特串,则报错并退出;
B5:从C中取出比特串C2,计算M’=C2 t;
B6:计算u=Hash(x2||M’||y2),从C中取出比特串C3,若u≠C3,则报错并退出;
B7:输出明文M’。
其中,dB为用户B的私钥。
(5)SM2算法中的密钥交换协议
设用户A和B协商获得密钥数据的长度为klen比特,用户A为发起方,用户B为响应方。
用户A和B双方为了获得相同的密钥,应实现如下运算步骤:
用户A:
A1:用随机数发生器产生随机数rA∈[1,n-1];
A2:计算椭圆曲线点RA=[rA]G=(x1,y1);
A3:将RA发送给用户B;
用户B:
B1:用随机数发生器产生随机数rB∈[1,n-1];
B2:计算椭圆曲线点RB=[rB]G=(x2,y2);
B3:从RB中取出域元素x2,按GM/T0003.1-20124.2.8给出的方法将x2的数据类型转换为整数,计算
B4:计算
B6:计算椭圆曲线点 若V是无穷远点,则B协商失败;否则按GM/T0003.1-20124.2.6和4.2.5给出的方法将xV、yV的数据类型转换为比特串;
B7:计算KB=KDF(xV||yV||ZA||ZB,klen);
B8:(选项)按GM/T0003.1-20124.2.6和4.2.5给出的方法将RA的坐标x1、y1和RB的坐标x2、y2的数据类型转换为比特串,计算SB=Hash(0x02||yV||Hash(xV||ZA||ZB||x1||y1||x2||y2));
B9:将RB、(选项SB)发送给用户A;
用户A:
A5:计算
A7:计算椭圆曲线点 若U是无穷远点,则A协商失败;否则按GM/T0003.1-20124.2.6和4.2.5给出的方法将xU、yU的数据类型转换为比特串;
A8:计算KA=KDF(xU||yU||ZA||ZB,klen);
A9:(选项)按GM/T0003.1-20124.2.6和4.2.5给出的方法将RA的坐标x1、y1和RB的坐标x2、y2的数据类型转换为比特串,计算S1=Hash(0x02||yU||Hash(xU||ZA||ZB||x1||y1||x2||y2)),并检验S1=SB是否成立,若等式不成立则从B到A的密钥确认失败;
A10:(选项)计算SA=Hash(0x03||yU||Hash(xU||ZA||ZB||x1||y1||x2||y2)),并将SA发送给用户B。
用户B:
B10:(选项)计算S2=Hash(0x03||yV||Hash(xV||ZA||ZB||x1||y1||x2||y2)),并检验S2=SA是否成立,若等式不成立则从A到B的密钥确认失败。
从上述SM2算法的几种具体算法可以看出,数字签名生成算法在步骤A4中调用了点乘运算,在步骤A5和A6调用了模加、模减、模乘和模逆等大整数计算;数据签名验证算法在步骤B6调用了点乘和点加运算,在步骤B5和B7调用了模加运算;加密算法在步骤A2、A3和A4调用了点乘运算;解密算法在步骤B2和B3调用了点乘运算;密钥交换协议在步骤A2、A7、B2和B6调用了点乘和点加运算,在步骤A5和步骤B4调用了模加、模乘大整数计算。
在SM2算法中,点乘运算是一种主要的运算,可以以多种方式实现,比如以Montgomery点乘算法为例,如下所示:
从上述算法描述中可以看出,每次循环都需要调用一次倍点运算和一次点加运算,运算结果需要判断ki的值才能正确的写入至P1和P2,再进行下一步循环。可见,点乘运算主要是通过调度点加和倍点运算来实现的。
在素数域中,点加运算大多使用仿射坐标系到Jacobian射影坐标系的混合坐标系进行运算(在仿射坐标系到Jacobian射影坐标系的混合坐标系下,Z2为1),而倍点运算大多使用Jacobian射影坐标系进行运算。点加和倍点算法分别如下所示,下表中的计算都是在素数域中执行的,在描述时省略了其中的mod p表示:
从上述点加和倍点算法的描述可以看出,点加和倍点运算都是通过调度模加、模减、模乘等大整数计算来实现的。需要说明的是,SM2算法中由点乘运算调用的模加、模减、模乘等大整数计算是对素数p进行取模运算的,SM2算法中直接使用的模加、模减、模乘等大整数计算则是对基点G的阶n进行取模运算的。
从上述描述可以看出,以SM2算法为例,公钥密码算法中的各种运算都可以通过多次调用各种大整数计算实现,在这些大整数计算过程中需要使用和产生大量的数据,可以分为以下四类:(1)大整数计算过程中需要使用的源操作数和计算产生的结果作为目的操作数;(2)大整数计算过程中产生的临时中间计算变量;(3)大整数计算过程中需要使用的模数,如素数p和基点G的阶n;(4)与大整数计算无关的其他数据。上述四类数据在大整数计算中具有不同的存储容量和存取频率需求以及不同的使用特性,这些数据的存储将直接影响到GPU对整个算法的执行效率。因此,如何结合GPU的存储结构特点和多线程并发执行特征,对大整数计算中内存和寄 存器进行有效地使用分配,以提高GPU的计算并行度,是一个亟待解决的问题。
发明内容
有鉴于此,本发明提供一种在GPU中进行大整数计算时的存储资源分配方法,该方法能够在采用GPU进行大整数计算时,提高大整数计算的执行速度。
本发明还提供一种在GPU中进行大整数计算时的存储资源分配装置,该装置能够在GPU进行大整数计算时,提高大整数计算的执行速度。
为达到上述目的,本发明实施的技术方案具体是这样实现的:
一种在图形处理器GPU中进行大整数计算时的存储资源分配方法,GPU线程执行大整数计算过程中,包括:
线程当前执行的大整数计算的模数和与线程当前执行的大整数计算无关的其他数据存储在内存中,所述其他数据为除了线程当前执行的大整数计算的操作数、中间计算变量和模数之外的数据;
线程当前执行的大整数计算的操作数和中间计算变量存储在线程所分配的寄存器中;
线程调用分配的寄存器中的大整数计算的操作数和中间计算变量,调用内存中的大整数计算的模数,进行大整数计算。
当大整数计算采用模加、模减或模乘时,所述线程当前执行的大整数计算的操作数为源操作数、中间计算变量及目的操作数;
所述内存包括GPU的常数内存和全局内存,其中,将线程当前执行的大整数计算的模数存储在所述常数内存中,将与线程当前执行的大整数计算无关的其他数据存储在全局内存中。
所述大整数计算应用在SM2算法中时,所述模数为素数p和基点G的阶n。
当大整数计算采用模加时,所述中间计算变量为算数加法之和;
当大整数计算采用模减时,所述中间计算变量为算数减法之差;
当大整数计算采用模乘时,所述中间计算变量为算数乘法之积和其中快速模约减运算中多次迭代计算中产生的结果。
完整的大整数计算由多个GPU线程同时完成;
所述线程所分配的寄存器大小根据操作数和中间计算变量大小确定。
一种在图形处理器GPU中进行大整数计算时的存储资源分配装置,该装置包括:内存、寄存器及大整数计算模块,其中,
内存,用于存储线程当前执行的大整数计算的模数和存储与线程当前执行的大整数计算无关的其他数据,所述其他数据为除了线程当前执行的大整数计算的操作数、中间计算变量和模数之外的数据;
寄存器,用于存储线程当前执行的大整数计算的操作数和中间计算变量;
大整数计算模块,用于线程调用寄存器中的大整数计算的操作数和中间计算变量,调用内存中的大整数计算的模数,进行大整数计算。
当大整数计算采用模加、模减或模乘时,
所述寄存器,还用于所述线程当前执行的大整数计算的操作数为源操作数、中间计算变量及目的操作数;
所述内存,还包括常数内存和全局内存,其中,
常数内存,用于存储线程当前执行的大整数计算的模数;
全局内存,用于存储与线程当前执行的大整数计算无关的其他数据。
当大整数计算应用在SM2算法时,所述常数内存,还用于存储的模数为素数p和基点G的阶n。
所述寄存器,还用于当大整数计算采用模加时,所述存储的中间计算变量为算数加法之和;当大整数计算采用模减时,所述存储的中间计算变量为算数减法之差;当大整数计算采用模乘时,所述存储的中间计算变量为算数乘法之积和其中快速模约减运算中多次迭代计算中产生的结果。
由上述方案可以看出,本发明在采用GPU线程执行各种大整数计算过 程中,为每个线程分配寄存器,在线程执行大整数计算过程中,将线程当前执行的大整数计算的操作数和中间计算变量存储在该线程所分配的寄存器中,将线程当前执行的大整数计算的模数和与线程当前执行的大整数计算无关的其他数据存储在内存。这样,GPU线程中的大整数计算要调用操作数和中间计算变量时,都可以直接重复调用已分配的寄存器获得,一方面减少GPU线程的寄存器使用量,提高线程的并行执行效率,另一方面为大整数计算保留必要的寄存器,能更加有效地提高大整数计算的执行速度。
附图说明
图1为本发明实施例提供的在GPU中进行大整数计算时的存储资源分配方法流程图;
图2为本发明实施例提供的在GPU中进行大整数计算时的存储资源分配装置结构示意图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步详细说明。
本发明为了在采用GPU进行SM2算法的大整数计算时,提高大整数计算的执行速度,在采用GPU线程执行各种大整数过程中,为每个线程分配寄存器,将当前执行的大整数计算的操作数和中间计算变量存储在所分配的寄存器中,将当前执行的大整数计算的模数和与当前执行的大整数计算无关的其他数据存储在内存中。这样,GPU线程中的大整数计算要调用的操作数和中间计算变量,都可以直接重复调用已分配的寄存器获得,一方面能减少GPU线程的寄存器使用量,提高线程的并行执行效率,另一方面为大整数计算保留必要的寄存器,能更加有效地提高大整数计算的执行速度。
图1为本发明实施例提供的在GPU中进行大整数计算时的存储资源分配方法流程图,GPU的线程执行大整数计算过程中,包括:
步骤101、线程当前执行的大整数计算的模数和与线程当前执行的大整数计算无关的其他数据存储在内存中;
该步骤中,所述其他数据为除了线程当前执行的大整数计算的操作数、中间计算变量和模数之外的数据;
步骤102、线程当前执行的大整数计算的操作数和中间计算变量存储在线程所分配的寄存器中;
步骤103、线程调用线程已分配的寄存器中的大整数计算的操作数和中间计算变量,调用内存中的大整数计算的模数,进行大整数计算。
在本发明中,当大整数计算采用模加、模减或模乘时,线程在执行大整数计算的过程中,可以将大整数计算的源操作数、中间计算变量及目的操作数存储在所分配的寄存器中,而将模数存储在常数内存中,将大整数计算涉及的其他数据存储在全局内存中。
寄存器容量小,存取速度快,用于存储要调用的大整数计算的源操作数、中间计算变量及目的操作数,可以提高线程的并行执行效率;常数内存的容量较为适中,但却有与寄存器相当的存取速度,将在整个大整数计算过程中频繁使用但数值却保持不变的模数存储在常数内存中,既可以一定程度的节省寄存器存储资源,又可以提高大整数计算的执行速度;全局内存容量较大,但存取速度也较慢。
在本发明中,一个完整的大整数计算由多个线程同时进行,这时,每个线程按照图1的过程只对自身当前执行的大整数计算中涉及的数据进行处理。
在本发明中,为线程所分配的寄存器的大小,根据要存储的大整数计算的源操作数、中间计算变量及目的操作数的大小确定,这里不限定。
在本发明中,当大整数计算应用在SM2算法时,存储在常数内存中的模数可以是素数p和基点G的阶n。
在本发明中,当大整数计算采用模加时,所述中间计算变量为加法之和;当大整数计算采用模减时,所述中间计算变量为算数减法之差;当大整数计 算采用模乘时,所述中间计算变量为算数乘法之积和其中快速模约减运算中多次迭代计算中产生的结果。
图2为本发明实施例提供的在GPU中进行大整数计算时的存储资源分配装置结构示意图,包括:内存、寄存器及大整数计算模块,其中,
内存,用于存储线程当前执行的大整数计算的模数和存储与线程当前执行的大整数计算无关的其他数据;
寄存器,用于存储线程当前执行的大整数计算的操作数和中间计算变量;
大整数计算模块,用于线程调用寄存器中的大整数计算的操作数和中间计算变量,线程调用内存中的大整数计算的模数,进行大整数计算。
在该装置中,当大整数计算采用模加、模减或模乘时,所述寄存器,还用于所述线程当前执行的大整数计算的操作数为源操作数、中间计算变量及目的操作数;
所述内存,还包括常数内存和全局内存,其中,
常数内存,用于存储当前执行的大整数计算的模数;
全局内存,用于存储与当前执行的大整数计算无关的其他数据。
在该装置中,当大整数计算应用在SM2算法时,所述寄存器,还用于当大整数计算采用模加时,所述存储的中间计算变量为加法之和;当大整数计算采用模减时,所述存储的中间计算变量为算数减法之差;当大整数计算采用模乘时,所述存储的中间计算变量为算数乘法之积和其中快速模约减运算中多次迭代计算中产生的结果。
在该装置中,当大整数计算应用在SM2算法时,所述常数内存,还用于存储的模数为素数p和基点G的阶n。
本发明提出的方案涉及的大整数计算,应用在各种公钥密码算法中,不仅仅限于SM2算法,还包括RSA或椭圆曲线密码编码学(ECC)等,这里不限定。
以下以大整数计算应用在SM2算法为例,对本发明提供的方法及装置 进行详细说明。
公钥密码算法中,诸如SM2算法的大整数计算包括模加、模减、模乘、模逆、模约减、模平方和模幂等几种类型的大整数计算,进一步分析发现,其中模加、模减和模乘是三种最基本的大整数计算,其他大整数计算都可以通过调用上述三种最基本的大整数计算间接实现,因此本发明将大整数计算功能划分为模加、模减和模乘三个大整数基本运算,且只考虑素数域上的运算,也就是模数是正素数。
模加、模减、模乘三种大整数基本计算可分别表示为:
C=(A+B)mod m
C=(A-B)mod m
C=(A*B)mod m
其中,A、B为运算的输入数据,m为模数,C为计算结果。三种基本计算都具有两个源操作数和一个目的操作数,且所有的操作数和模数都是大整数。
对于模加运算来说,其计算过程可分解为算术加法和取模两步,如下所示:
A-1:C=A+B
A-2.1:if(C257==1)C=C-m
A-2.2:else if(C=>m)C=C-m
A-2.3:else C=C
若源操作数A、B和模数m都是t位的大整数,经过步骤A-1的算术加法运算后,和C作为中间计算变量,可能是t或者t+1位的大整数。步骤A-2.1~A-2.3对算术加法之和C进行取模运算,使得目的操作数C是小于模数m的t位大整数:若和C为t+1位的大整数,必然大于模数m,则和C对m取模计算的结果为C-m,作为目的操作数C;若和C为t位的大整数,且和C大于等于模数m,和C对m取模计算的结果为C-m,作为目的操作数C;若C为t位的大整数,且C小于模数m,C对m取模计算的结果即为C 本身。
对于模减运算来说,其计算过程可分解为算术减法和取模两步,如下所示:
S-1:C=A-B
S-2.1:if(C257==1)C=C-m
S-2.2:else if(C=>m)C=C-m
S-2.3:else C=C
若源操作数A、B和模数m都是t位的大整数,经过步骤S-1的算术减法运算后,差C作为中间计算变量,可能是t或者t+1位的大整数。步骤S-2.1~S-2.3对算术减法之差C进行取模运算,使得计算结果C是小于模数m的t位大整数:若C为t+1位的大整数,必然大于模数m,C对m取模计算的结果为C-m,作为目的操作数C;若C为t位的大整数,且C大于等于模数m,C对m取模计算的结果为C-m,作为目的操作数C;若C为t位的大整数,且C小于模数m,对m取模计算的结果即为C本身。
对于模乘运算来说,其计算过程可分解为算术乘法、快速模约减和取模三步,如下所示:
M-1:C=A*B
M-2:C=fast modular reduction(C,m)
M-3:C=fast modular reduction(C,m)
M-4.1:if(C=>m)C=C-m
M-4.2:else C=C
若源操作数A、B和模数m都是t位的大整数,经过步骤M-1的算术乘法运算后,乘积C作为中间计算变量,可能是t~2t位的大整数。步骤M-2根据模数m的具体取值,对算术乘法之积C进行一次快速模约减运算,对SM2算法来说,可将计算结果C约减到<-4m,17m>范围之间。步骤M-3再进行一次快速模约减运算,可将计算结果C约减到<m,2m>范围之间。步骤M-4.1~M-4.2对第二次快速模约减的计算结果C进行普通的取模运算,使得 计算结果C是小于模数m的t位大整数:若C为t位的大整数,且C大于等于模数m,C对m取模计算的结果为C-m,作为目的操作数C;若C为t位的大整数,且C小于模数m,C对m取模计算的结果即为C本身。
快速模约减的计算方法如下所示:
(1)将模数m表示成以232为基的多项式形式:
m=f(q)=qk+dk-1qk-1+…+d1q+d0
其中,q=232,k=t/32,di∈{-1,0,1}(0<=i<=k-1)。可得:
qk≡-(dk-1qk-1+dk-2qk-2+…+d1q+d0)(modf(q))
通过迭代,可分别得到qk+1,qk+2,...,q2k-1的同余表达式,且qi(k+1<=i<=2k-1)是由qk-1,qk-2,...,q表示的同余表达式。
(2)将qk,qk+1,qk+2,...,q2k-1代入,可将步骤M-1产生的算术乘法之积C表示为:
其中,hk-1,hk-2,...,h1,h0都是由ci(0<=i<=2k-1)表示的系数。
由上述快速模约减计算步骤可见,模数m给定后,qk的同余表达式就确定了,进而对算术乘法之积C进行多次迭代计算,得到其同余表达式。
从上述模加、模减和模乘三种大整数基本计算过程的描述中可见,每种大整数基本计算除了源操作数、目的操作数和模数外,还会在计算过程中产生临时数据,如模加运算中两个源操作数的算术加法之和、模减运算中两个源操作数的算术减法之差、模乘运算中两个源操作数的算术乘法之积以及快速模约减运算过程中产生的各种中间计算变量。为了保证大整数计算的有效执行,这些在计算过程中产生的中间计算变量需要和源、目的操作数一起,被有效的存储在线程所分配的寄存器中。
在SM2算法中,除了大整数计算外,还有一些其他的运算。比较而言,大整数计算是整个算法中最核心的运算,也是影响算法整体执行性能的关键所在。当GPU线程执行密码算法时,会执行多次大整数计算。针对每一次 大整数计算,本发明仅将当前大整数计算需要用到的源操作数、目标操作数和临时中间计算变量存储在线程所分配的寄存器中,因SM2算法中素数p和基点的阶n都是固定的大整数,故将素数p和基点的阶n存储在常数内存中,而将线程中其他的数据存储在全局内存中。
具体地说,当一个GPU线程进行某一次SM2算法的大整数计算时,
首先除当前这次大整数计算的两个源操作数外,将素数p和基点的阶n存储在常数内存中,而线程中其他数据都被存储在全局内存中。因SM2算法中素数p和基点的阶n都是固定的大整数,所以在本发明具体执行过程中,只需要在第一次大整数计算时调用执行该步操作,后续大整数计算时则不需要进行该步骤;
然后为当前线程分配设定数量的寄存器资源,这里不限定,将当前这次大整数计算的两个源操作数、一个目的操作数和中间计算变量,存储在当前线程分配的寄存器中;
最后使用已分配的寄存器完成该次大整数计算。
再进行其他的大整数计算时,重复上述过程。
可见,本发明在GPU中实现大整数计算的内存和寄存器使用分配方法,为每个线程分配设定数量的寄存器资源,把与线程当前执行的大整数计算相关的源、目的操作数和中间计算变量存储在线程所分配的寄存器中,把模数存储在常数内存中,而把线程中其他的数据存储在全局内存中,线程中的大整数基本计算重复调用已分配的寄存器资源,减少了每个线程的寄存器使用量,提高了线程的并发执行效率,更加有效的保证了SM2算法中大整数计算的执行速度。
以下举一个具体在SM2算法中实现大整数计算的例子说明本发明。
该例子的实验环境为:
CPU:Intel公司,至强CPU产品系列,型号Xeon E31230v2
操作系统:Canonical公司,Linux操作系统类型,型号Ubuntu11.1064位
主存:8G
GPU:包含8个SM,每个SM包含192个SP,每个SP包含65Kbit的寄存器资源
分别以模加、模减和模乘三种大整数基本计算为实施例说明本发明。因为SM2算法使用素数域256位椭圆曲线,所以本实施例中所有大整数基本计算的源操作数、目的操作数、素数p及基点G的阶n都是256位的大整数,且
p=FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF00000000FFFFFFFF FFFFFFFF
n=FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF7203DF6B21C6052B53BBF40939D54123
当线程执行模加运算时,
A-1:C=A+B
A-2.1:if(C257==1)C=C-m
A-2.2:else if(C=>m)C=C-m
A-2.3:else C=C
(1)将256位的模数m,即素数p或基点G的阶n存储在常数内存中,若当前模加运算是算法中第一次大整数计算,需要执行该步骤;否则省略该步骤;
(2)因两个256位的大整数进行算术加法运算的和最大可能为257位的大整数,而GPU中的寄存器是以32位为单元进行读写操作的,要存储257位的大整数,至少需要256+32=288位的寄存器资源。所以为当前线程分配800位的寄存器资源,分别用来存储两个均为256位的源操作数A、B以及288位的A、B的算术加法之和;
(3)执行步骤A-1的算术加法运算,A与B的算术加法之和C作为中间计算变量,存储在所分配的288位的寄存器中;
(4)执行步骤A-2.1~A-2.3的取模运算,A与B的算术加法之和C对 模数m的取模计算结果作为目的操作数C,存储在所分配的288位的寄存器中,有效数据为该寄存器的低256位,至此便完成了线程当前的模加运算。
当线程执行模减运算时,
S-1:C=A-B
S-2.1:if(C257==1)C=C-m
S-2.2:else if(C=>m)C=C-m
S-2.3:else C=C
(1)将256位的模数m,即素数p或基点G的阶n存储在常数内存中,若当前模减运算是算法中第一次大整数计算,需要执行该步骤;否则省略该步骤;
(2)因两个256位的大整数进行算术减法运算的差最大可能为257位的大整数,而GPU中的寄存器是以32位为单元进行读写操作的,要存储257位的大整数,至少需要256+32=288位的寄存器资源。所以为当前线程分配800位的寄存器资源,分别用来存储两个为均256位的源操作数A、B以及288位的A、B的算术减法之差;
(3)执行步骤S-1的算术减法运算,A与B的算术减法之差C作为中间计算变量,存储在所分配的288位的寄存器中;
(4)执行步骤S-2.1~S-2.3的取模运算,A与B的算术减法之差C对模数m的取模计算结果作为目的操作数C,存储在所分配的288位的寄存器中,有效数据为该寄存器的低256位,至此便完成了线程当前的模减运算。
当线程执行模乘运算时,
M-1:C=A*B
M-2:C=fast modular reduction(C,m)
M-3:C=fast modular reduction(C,m)
M-4.1:if(C=>m)C=C-m
M-4.2:else C=C
(1)将256位的模数m,即素数p或基点G的阶n存储在常数内存中, 若当前模乘运算是算法中第一次大整数计算,需要执行该步骤;否则省略该步骤;
(2)因两个256位的大整数进行算术乘法运算的积最大可能为512位的大整数,所以为当前线程分配1024位的寄存器资源,分别用来存储两个均为256位的源操作数A、B以及512位的A、B的算术乘法之积;
(3)执行步骤M-1的算术乘法运算,源操作数A与源操作数B的算术乘法之积C作为中间计算变量,存储在所分配的512位的寄存器中;
(4)执行步骤M-2的快速模约减运算,根据模数m的具体取值,采用快速模约减计算方法,将计算结果C约减到<-4m,17m>范围之间,快速模约减计算中多次迭代计算产生的计算结果及最终的计算结果C都作为中间计算变量,存储在所分配的512位寄存器的低位中;
(5)执行步骤M-3的快速模约减运算,根据模数m的具体取值,采用快速模约减计算方法,将计算结果C约减到<m,2m>范围之间,快速模约减计算中多次迭代计算产生的计算结果及最终的计算结果C都作为中间计算变量,存储在分配的512位寄存器的低位中;
(6)执行步骤M-4.1~M-4.2的取模运算,第二次快速模约减的计算结果C对模数m的取模计算结果作为目的操作数C,存储在所分配的512位的寄存器中,有效数据为寄存器的低256位,至此便完成了线程当前的模乘运算。
源操作数A与B的算术乘法之积C快速模约减的计算结果作为目的操作数C,存储在线程所分配的512位的寄存器中,有效数据为该寄存器的低256位,至此便完成了线程当前的大整数模乘运算。
在本发明中,对于SM2算法中的多个大整数计算,重复调用上述三种大整数基本计算的执行过程即可。对于每一种大整数基本计算,在计算过程中,中间计算变量和目的操作数复用线程所分配的寄存器,能够有效减少执行大整数计算时线程占用的寄存器资源,从而可以建立更多的并发线程,进而显著提高SM2算法中大整数的计算效率。
以上举较佳实施例,对本发明的目的、技术方案和优点进行了进一步详 细说明,所应理解的是,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (9)
1.一种在图形处理器GPU中进行大整数计算时的存储资源分配方法,其特征在于,GPU线程执行大整数计算过程中,包括:
线程当前执行的大整数计算的模数和与线程当前执行的大整数计算无关的其他数据存储在内存中,所述其他数据为除了线程当前执行的大整数计算的操作数、中间计算变量和模数之外的数据;
线程当前执行的大整数计算的操作数和中间计算变量存储在线程所分配的寄存器中;
线程调用分配的寄存器中的大整数计算的操作数和中间计算变量,调用内存中的大整数计算的模数,进行大整数计算。
2.如权利要求1所述的方法,其特征在于,当大整数计算采用模加、模减或模乘时,所述线程当前执行的大整数计算的操作数为源操作数、中间计算变量及目的操作数;
所述内存包括GPU的常数内存和全局内存,其中,将线程当前执行的大整数计算的模数存储在所述常数内存中,将与线程当前执行的大整数计算无关的其他数据存储在全局内存中。
3.如权利要求2所述的方法,其特征在于,所述大整数计算应用在SM2算法中时,所述模数为素数p和基点G的阶n。
4.如权利要求3所述的方法,其特征在于,当大整数计算采用模加时,所述中间计算变量为加法之和;
当大整数计算采用模减时,所述中间计算变量为算数减法之差;
当大整数计算采用模乘时,所述中间计算变量为算数乘法之积和其中快速模约减运算中多次迭代计算中产生的结果。
5.如权利要求1~4任一所述的方法,其特征在于,完整的大整数计算由多个GPU线程同时完成;
所述线程所分配的寄存器大小根据操作数和中间计算变量大小确定。
6.一种在图形处理器GPU中进行大整数计算时的存储资源分配装置,其特征在于,该装置包括:内存、寄存器及大整数计算模块,其中,
内存,用于存储线程当前执行的大整数计算的模数和存储与线程当前执行的大整数计算无关的其他数据,所述其他数据为除了线程当前执行的大整数计算的操作数、中间计算变量和模数之外的数据;
寄存器,用于存储线程当前执行的大整数计算的操作数和中间计算变量;
大整数计算模块,用于线程调用寄存器中的大整数计算的操作数和中间计算变量,调用内存中的大整数计算的模数,进行大整数计算。
7.如权利要求6所述的装置,其特征在于,当大整数计算采用模加、模减或模乘时,
所述寄存器,还用于所述线程当前执行的大整数计算的操作数为源操作数、中间计算变量及目的操作数;
所述内存,还包括常数内存和全局内存,其中,
常数内存,用于存储线程当前执行的大整数计算的模数;
全局内存,用于存储与线程当前执行的大整数计算无关的其他数据。
8.如权利要求7所述的装置,其特征在于,当大整数计算应用在SM2算法时,所述常数内存,还用于存储的模数为素数p和基点G的阶n。
9.如权利要求7所述的装置,其特征在于,所述寄存器,还用于当大整数计算采用模加时,所述存储的中间计算变量为加法之和;当大整数计算采用模减时,所述存储的中间计算变量为算数减法之差;当大整数计算采用模乘时,所述存储的中间计算变量为算数乘法之积和其中快速模约减运算中多次迭代计算中产生的结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310435220.2A CN103631660A (zh) | 2013-09-23 | 2013-09-23 | 在gpu中进行大整数计算时的存储资源分配方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310435220.2A CN103631660A (zh) | 2013-09-23 | 2013-09-23 | 在gpu中进行大整数计算时的存储资源分配方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103631660A true CN103631660A (zh) | 2014-03-12 |
Family
ID=50212749
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310435220.2A Pending CN103631660A (zh) | 2013-09-23 | 2013-09-23 | 在gpu中进行大整数计算时的存储资源分配方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103631660A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016202154A1 (zh) * | 2015-06-19 | 2016-12-22 | 华为技术有限公司 | 一种gpu资源的分配方法及系统 |
CN106648546A (zh) * | 2016-09-07 | 2017-05-10 | 北京大学 | 用于gpu寄存器分配和并行度管理的协同优化编译方法 |
CN106921638A (zh) * | 2015-12-28 | 2017-07-04 | 航天信息股份有限公司 | 一种基于非对称加密的安全装置 |
CN108964914A (zh) * | 2017-05-17 | 2018-12-07 | 中国科学技术大学 | 抗侧信道攻击的sm2点乘架构 |
CN109284082A (zh) * | 2017-07-21 | 2019-01-29 | 深圳市中兴微电子技术有限公司 | 一种ecc和sm2通用的点运算方法及装置 |
CN110262773A (zh) * | 2019-04-28 | 2019-09-20 | 阿里巴巴集团控股有限公司 | 一种计算机数据处理方法及装置 |
CN112184536A (zh) * | 2020-09-24 | 2021-01-05 | 成都海光集成电路设计有限公司 | 基于gemm处理图像数据的方法、装置、设备和介质 |
CN114489792A (zh) * | 2021-03-25 | 2022-05-13 | 沐曦集成电路(上海)有限公司 | 处理器装置及其指令执行方法 |
CN117527192A (zh) * | 2024-01-08 | 2024-02-06 | 蓝象智联(杭州)科技有限公司 | 一种基于GPU的Paillier解密方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102646033A (zh) * | 2011-02-21 | 2012-08-22 | 中国科学院研究生院 | 模乘运算的实现方法和装置 |
CN102662641A (zh) * | 2012-04-16 | 2012-09-12 | 浙江工业大学 | 一种基于cuda的种子分布数据并行获取方法 |
CN103049241A (zh) * | 2013-01-24 | 2013-04-17 | 重庆邮电大学 | 一种提高cpu+gpu异构装置计算性能的方法 |
-
2013
- 2013-09-23 CN CN201310435220.2A patent/CN103631660A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102646033A (zh) * | 2011-02-21 | 2012-08-22 | 中国科学院研究生院 | 模乘运算的实现方法和装置 |
CN102662641A (zh) * | 2012-04-16 | 2012-09-12 | 浙江工业大学 | 一种基于cuda的种子分布数据并行获取方法 |
CN103049241A (zh) * | 2013-01-24 | 2013-04-17 | 重庆邮电大学 | 一种提高cpu+gpu异构装置计算性能的方法 |
Non-Patent Citations (2)
Title |
---|
叶剑: "基于GPU的密码算法实现技术研究", 《中国优秀硕士学位论文全文数据库》 * |
王健: "椭圆曲线加密体制的双有限域算法及其硬件实现", 《中国博士学位论文全文数据库》 * |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106325996B (zh) * | 2015-06-19 | 2019-11-19 | 华为技术有限公司 | 一种gpu资源的分配方法及系统 |
CN106325996A (zh) * | 2015-06-19 | 2017-01-11 | 华为技术有限公司 | 一种gpu资源的分配方法及系统 |
WO2016202154A1 (zh) * | 2015-06-19 | 2016-12-22 | 华为技术有限公司 | 一种gpu资源的分配方法及系统 |
US10613902B2 (en) | 2015-06-19 | 2020-04-07 | Huawei Technologies Co., Ltd. | GPU resource allocation method and system |
CN106921638A (zh) * | 2015-12-28 | 2017-07-04 | 航天信息股份有限公司 | 一种基于非对称加密的安全装置 |
CN106648546A (zh) * | 2016-09-07 | 2017-05-10 | 北京大学 | 用于gpu寄存器分配和并行度管理的协同优化编译方法 |
CN108964914A (zh) * | 2017-05-17 | 2018-12-07 | 中国科学技术大学 | 抗侧信道攻击的sm2点乘架构 |
CN108964914B (zh) * | 2017-05-17 | 2020-08-25 | 中国科学技术大学 | 抗侧信道攻击的sm2点乘架构 |
CN109284082A (zh) * | 2017-07-21 | 2019-01-29 | 深圳市中兴微电子技术有限公司 | 一种ecc和sm2通用的点运算方法及装置 |
CN110262773A (zh) * | 2019-04-28 | 2019-09-20 | 阿里巴巴集团控股有限公司 | 一种计算机数据处理方法及装置 |
CN110262773B (zh) * | 2019-04-28 | 2020-08-04 | 阿里巴巴集团控股有限公司 | 一种计算机数据处理方法及装置 |
CN112184536A (zh) * | 2020-09-24 | 2021-01-05 | 成都海光集成电路设计有限公司 | 基于gemm处理图像数据的方法、装置、设备和介质 |
CN112184536B (zh) * | 2020-09-24 | 2022-09-30 | 成都海光集成电路设计有限公司 | 基于gemm处理图像数据的方法、装置、设备和介质 |
CN114489792A (zh) * | 2021-03-25 | 2022-05-13 | 沐曦集成电路(上海)有限公司 | 处理器装置及其指令执行方法 |
CN114489792B (zh) * | 2021-03-25 | 2022-10-11 | 沐曦集成电路(上海)有限公司 | 处理器装置及其指令执行方法 |
CN117527192A (zh) * | 2024-01-08 | 2024-02-06 | 蓝象智联(杭州)科技有限公司 | 一种基于GPU的Paillier解密方法 |
CN117527192B (zh) * | 2024-01-08 | 2024-04-05 | 蓝象智联(杭州)科技有限公司 | 一种基于GPU的Paillier解密方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103631660A (zh) | 在gpu中进行大整数计算时的存储资源分配方法及装置 | |
Szerwinski et al. | Exploiting the power of GPUs for asymmetric cryptography | |
CN103546288B (zh) | Sm2数字签名生成算法的实现方法及装置 | |
CN105099672B (zh) | 混合加密方法及实现该方法的装置 | |
Granger et al. | Hardware and software normal basis arithmetic for pairing-based cryptography in characteristic three | |
CN103475469A (zh) | 一种结合cpu和gpu实现sm2算法的方法及装置 | |
CN102043916B (zh) | 一种高性能可扩展公钥密码协处理器结构 | |
Fadhil et al. | Parallelizing RSA algorithm on multicore CPU and GPU | |
Fan et al. | Parallelization of RSA algorithm based on compute unified device architecture | |
CN103942031A (zh) | 椭圆域曲线运算方法和椭圆域曲线运算器 | |
Dong et al. | Ec-ecc: Accelerating elliptic curve cryptography for edge computing on embedded gpu tx2 | |
Saxena et al. | State of the art parallel approaches for RSA public key based cryptosystem | |
Seo | SIKE on GPU: Accelerating supersingular isogeny-based key encapsulation mechanism on graphic processing units | |
Pu et al. | Fastplay-a parallelization model and implementation of smc on cuda based gpu cluster architecture | |
Moon et al. | Fast VLSI arithmetic algorithms for high-security elliptic curve cryptographic applications | |
CN111917548B (zh) | 基于gpu与cpu异构结构的椭圆曲线数字签名方法 | |
Saxena et al. | An enhanced parallel version of RSA public key crypto based algorithm using openMP | |
Moreno et al. | SPA-resistant binary exponentiation with optimal execution time | |
Henry et al. | Solving discrete logarithms in smooth-order groups with CUDA | |
Seo et al. | Pseudo random number generator and hash function for embedded microprocessors | |
Si et al. | An improved RSA signature algorithm based on complex numeric operation function | |
Morales-Sandoval et al. | On the hardware design of an elliptic curve cryptosystem | |
Hafeez et al. | High Throughput Acceleration of Scabbard Key Exchange and Key Encapsulation Mechanism Using Tensor Core on GPU for IoT Applications | |
Lei et al. | Accelerating homomorphic full adder based on fhew using multicore cpu and gpus | |
Martins et al. | Stretching the limits of programmable embedded devices for public-key cryptography |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140312 |