一种利用AI加速器实现环上多项式乘法计算加速的方法和装置转让专利

申请号 : CN202010498697.5

文献号 : CN111796797A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 郑昉昱万立鹏林璟锵

申请人 : 中国科学院信息工程研究所

摘要 :

本发明公开了一种利用AI加速器实现环上多项式乘法计算加速的方法和装置。本方法为:1)将维度为n的被乘数向量s变换为维度为2n的向量s*;2)将被乘数向量a、新的乘数向量s*、以及累加向量e转换成AI加速器所需要的格式;3)对多组向量a、e进行合并拼接,对向量s*进行移位填充扩展,分别得到16×n的矩阵A、E,16×2n的矩阵S;4)对矩阵划分、加载到特定格式,并进行迭代计算求和,得到16×n矩阵B;然后将矩阵B按行逆序,所得的每一个行向量即为一组(a,e)与同一s的计算结果。本发明利用了AI加速器高性能的特定,增加了吞吐量,提升了计算速度。

权利要求 :

1.一种利用AI加速器实现环上多项式乘法计算加速的方法,以b=as+e为计算目标,其步骤包括:在n维向量a、s中选择一个向量,假定选择s,将其变换成维数为2n的向量s*;

将s*拓展成2n×16的矩阵S;

对于至少一组向量a、e,将其变换得到16×n矩阵A、E;

利用AI加速器,采用矩阵乘加指令B=AS+E对矩阵S、A、E进行计算,得到计算结果矩阵B;

从矩阵B中提取各组向量的计算结果。

2.如权利要求1所述的方法,其特征在于,向量s*的获得步骤包括:将向量s逆序,然后对前n-1个元素取负并附加到逆序结果尾部,最后添加一个0,得2n维向量s*。

3.如权利要求2所述的方法,其特征在于,矩阵S的获得步骤包括:向量s*左移一个元素,然后在向量尾部用0填充空位,将新获得的向量放置到新行,依次操作多次,得到与计算要求相符的矩阵,并转置。

4.如权利要求3所述的方法,其特征在于,若有多组向量(a,e)与同一个向量s运算,则将多个向量a和向量e分别合并成矩阵A、E;若仅有一组向量(a,e)或者所得矩阵行数不对齐,则采用0补齐,分别得一个或多个对齐的矩阵A、E。

5.如权利要求4所述的方法,其特征在于,采用矩阵乘加计算API操纵AI加速器对矩阵S、A、E进行操作,包括将矩阵划分为更小的矩阵并加载至特定内建类型,然后进行矩阵乘加计算。

6.如权利要求5所述的方法,其特征在于,对获得的矩阵B按行进行逆序重排,每一个行向量即为一个计算结果,最终结果有一个或多个,即大于等于1组向量(a,e)参与了计算。

7.如权利要求1所述的方法,其特征在于,所述AI加速器为采用矩阵操作模式的AI加速器,包括Tensor Core。

8.一种采用权利要求1~7中任一权利要求所述方法的利用AI加速器实现环上多项式乘法计算加速的装置,其特征在于,包括:向量扩展模块,用于在n维向量a、s中选择一个向量,假定选择s,将其变换成维数为2n的向量s*;

矩阵变换模块,用于将s*拓展成2n×16的矩阵S;对于至少一组向量a、e,将其变换得到

16×n矩阵A、E;

AI加速器,用于采用矩阵乘加指令B=AS+E对矩阵S、A、E进行计算,得到计算结果矩阵B;

结果提取模块,用于从矩阵B中提取各组向量的计算结果。

9.一种电子装置,其特征在于,包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行权利要求1~7中任一权利要求所述方法的指令。

10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储计算机程序,所述计算机程序被计算机执行时,实现权利要求1~7中任一权利要求所述的方法。

说明书 :

一种利用AI加速器实现环上多项式乘法计算加速的方法和

装置

技术领域

[0001] 本发明属于计算技术领域,涉及一种利用AI加速器实现环上多项式乘法计算加速的方法和装置。

背景技术

[0002] 得益于人工智能的发展,与之相关的应用越来越普及。为此,一些厂商研发了他们自己的AI处理器或者加速器,如Google的TPU、英特尔的神经网络棒、特斯拉的无人驾驶汽车芯片,以及现在众多智能手机所带有的神经网络加速引擎等,为专门的业务提供强劲的性能处理能力。这些AI加速装置通常采用低精度、新颖数据流、内存内计算的架构,而且针对特定算法操作(如卷积操作)进行过优化,性能远高于一般的通用处理器,例如NVIDIA Tesla V100的Tensor Core可以提供125Tensor TFLOPS的算力。随着技术的发展,此类强大的算力资源必然越来越常见,且更容易获得访问。如果能够将AI加速器的算力用于除人工智能应用外的其它领域,如密码计算,那一定也会大大提升该领域的计算效率。
[0003] 另一方面,量子计算机给信息安全尤其是既有密码体制安全带来了巨大的挑战。格密码,作为一种抗量子密码,被广泛认为最有希望成为下一代的公钥密码标准的密码系统。在标准格中,环上多项式乘法计算是特别耗时间的操作。因此,解决环上多项式乘法的运算速度问题,对推动格密码乃至整个信息安全有重要的研究意义与价值。
[0004] 本发明针对的是环Rq=Zq[x]/(xn+1)上多项式乘(加)法计算b=as或b=as+e,其中a,s,b,e均为阶小于n-1的多项式,即n维向量。以a为例,其展开形式为 其中ai为模q的整数。现在问题的关键在于AI加速器为特定设计架构,计算模式固定,很难适用于其它计算任务。例如,NVIDIA的Titan V上,Tensor Core的操作模式为D=AB+C,且D、A、B、C均为矩阵,在线程束级别上大小为16×16(或32×8)。其中,A、B的数据类型均为半精度浮点数。根据IEEE 754-2008标准,半精度浮点数类型是长度为16bit的浮点数格式,又称为binary16或half类型。

发明内容

[0005] 本发明提供了一种利用AI加速器实现环上多项式乘法计算加速的方法和装置,能够充分利用AI加速器的算力资源,大幅提升计算速度。本发明适用于采用矩阵操作模式的AI加速器,如NVIDIA的Tensor Core(以下简称Tensor Core)等。
[0006] 本发明的一种利用AI加速器实现环上多项式乘法计算加速方法,以b=as+e为计算目标,其步骤为:
[0007] 在n维向量a、s中选择一个向量,假定选择s,将其变换成维数为2n的向量s*;
[0008] 将s*拓展成2n×16的矩阵S;
[0009] 对于至少一组向量a、e,将其变换得到16×n矩阵A、E;
[0010] 利用AI加速器,采用矩阵乘加指令B=AS+E对矩阵S、A、E进行计算,得到计算结果矩阵B;
[0011] 从矩阵B中提取各组向量的计算结果。
[0012] 进一步的,以Tensor Core为例,上述方法包括以下具体步骤:
[0013] 1)在n维向量a、s中选择一个向量,假定选择s,将其逆序、扩展,并用0填充成维数为2n的向量s*;
[0014] 2)将a、s*、e的数据格式转换为AI加速器所需要的类型;
[0015] 3)将s*按行进行移位复制并用0填充,拓展成16×2n的矩阵,并转置成2n×16的矩阵S;
[0016] 4)将a按行用0进行填充;或者,当有多个a向量要与同一个s相乘时,也可以用其它的a向量填充至16行,得16×n矩阵A;
[0017] 5)将e按行用0进行填充;或者,当有多个a向量要与同一个s相乘,且都加上各自的e向量时,可以用其它e向量或0填充,得16×n矩阵E;
[0018] 6)将矩阵A、S、E按照16×16的片段进行划分;
[0019] 7)使用CUDA WMMA API将划分好的片段加载到特定内建类型中,进行迭代,并求和;计算结果为16×n的矩阵B,B=AS+E;
[0020] 8)对矩阵B按行进行逆序,则16行结果对应矩阵A的16行输入,即每一个行向量代表一组(a,e)与s运算后的结果向量,从而得到的b=as+e的计算结果。
[0021] 其中,步骤7)中的内建类型是内部数据组织形式。为便于数据的控制与访问,AI加速器的待处理数据可能具有特定的组织形式,这类数据组织形式一般为专用类型。
[0022] 其中,步骤7)的CUDA  WMMA  API中,CUDA即Compute  Unified  Device Architecture(统一计算设备架构);WMMA即Warp Matrix Multiply Accumulate(线程束级矩阵乘加);API即Application Programming Interface(应用程序接口);
[0023] 进一步的,向量a、s的各维数值均在half(半精度浮点数)的表示范围内。向量s*的获得步骤包括:将向量s逆序,然后对前n-1个元素取负并附加到逆序结果尾部,最后添加一个0,得2n维向量s*。具体地,假定原始的n维向量s为{s0,s1,…,sn-1},经过逆序、扩展,以及用0填充后得到维数为2n的新向量s*为{sn-1,sn-2,…,s0,-sn-1,-sn-2,…,-s1,0}。
[0024] 进一步的,a、s*均转换为half类型,而e则转换为float类型。
[0025] 进一步的,矩阵S的获得步骤包括:向量s*左移一个元素,然后在向量尾部用0填充空位,将新获得的向量放置到新行,依次操作多次,得到与计算要求相符的矩阵,并转置。具体地,s*向量依次向左移动一个元素获得一个新行,尾部用0填充空余位置;最终移动15次得到一个16×2n的矩阵S,描述过程可以见附图1。
[0026] 进一步的,若有多组向量(a,e)与同一个向量s运算,则将多个向量a和向量e分别合并成矩阵A、E;若仅有一组向量(a,e)或者所得矩阵行数不对齐,则采用0补齐,分别得一个或多个对齐的矩阵A、E。具体地,对于同一个s(或者说是同一个矩阵S),多组(a,e),可以分别将多个a、e单独按照16行的方式进行拼接,不足16行的可以用0填充,获得16×n矩阵A、E。
[0027] 进一步的,采用矩阵乘加计算API操纵AI加速器对矩阵S、A、E进行操作,包括将矩阵划分为更小的矩阵并加载至特定内建类型,然后进行矩阵乘加计算。例如,采用CUDA WMMA API先将矩阵按照16×16的片段加载到Tensor Core内建类型fragment(重载类类型名称,存储矩阵内容的一部分)中,然后迭代执行,遍历整个矩阵。遍历的方式:对于矩阵A,每一轮迭代都是从第一行的第一个元素开始,每隔16列取一个小矩阵片段;对于矩阵S,第一轮迭代从第一行的第一个元素开始,之后的迭代都是上一轮迭代起始位置(第一行)间隔16个元素。迭代的总次数为 迭代的结果再与相应的矩阵E片段求和,得到矩阵B,描述过程可以见附图2。
[0028] 进一步的,在上一步骤中求得的结果矩阵是最终结果的(行)逆序,还需要将矩阵B按行进行重排,每一个行向量即为一个计算结果,最终结果有一个或多个,即大于等于1组向量(a,e)参与了计算。
[0029] 基于同一发明构思,本发明还提供一种利用AI加速器实现环上多项式乘法计算加速的装置,其包括:
[0030] 向量扩展模块,用于在n维向量a、s中选择一个向量,假定选择s,将其变换成维数为2n的向量s*;
[0031] 矩阵变换模块,用于将s*拓展成2n×16的矩阵S;对于至少一组向量a、e,将其变换得到16×n矩阵A、E;
[0032] AI加速器,用于采用矩阵乘加指令B=AS+E对矩阵S、A、E进行计算,得到计算结果矩阵B;
[0033] 结果提取模块,用于从矩阵B中提取各组向量的计算结果。
[0034] 与现有技术相比,本发明的积极效果为:
[0035] 首次将AI加速器引入到密码计算加速领域。在计算环上多项式乘法时,首先将多项式按照上述方案转换为特殊的类型,并且经过一系列变形,以适应AI加速器(Tensor Core等)的计算模式;这种扩展模式可以为其它AI加速器的计算任务适配提供参考思路。同时,为了充分利用Tensor Core等AI加速器的计算资源,本发明还采用了多个向量拼接成矩阵的方式,使得一次操作执行,完成多个向量组的计算。借助于AI加速器的强大性能,本发明实现的环上多项式乘法运算,可大幅提升计算速度,并同时计算多个任务,增加了吞吐量。
[0036] 本发明实现的环上多项式乘法运算,可以用于基于格的后量子密码实现与加速等具体领域。基于格的后量子密码(简称格密码,一般为公钥密码体制)中,最耗时的操作往往是环上多项式乘法运算,以致于格密码的速度远低于传统的如RSA之类的公钥密码。通过对格密码中的多项式乘法运算加速,进而加速整体效率,可以推动格密码的发展与应用。

附图说明

[0037] 图1为本发明中s*的变换处理示意图。
[0038] 图2为本发明迭代遍历计算过程示意图。
[0039] 图3为本发明提供的环上多项式乘法计算加速方法流程图。

具体实施方式

[0040] 下面结合附图对本发明进行进一步详细描述。
[0041] 本实施例的一种利用AI加速器实现环上多项式乘法的方法,在环Rq=Zq[x]/(xn+1)上多项式乘法中,原始n维参数向量a、s、e、b,以b=as+e为计算目标,其中a、s是两个乘数向量,e是累加向量;多项式系数(即向量各元素的数值),需要在AI加速器的表示范围内。
[0042] 本实施例的AI加速器采用的是Titan V上的Tensor Core,输入的多项式系数值应在半精度浮点数表示范围内。根据IEEE  754-2008标准,半精度浮点数格式又称为binary16,或简称为half,其表示的最大值为65504。
[0043] 本实施例的一种利用AI加速器实现环上多项式乘法计算加速的方法,其流程如图3所示,具体计算过程包括:
[0044] (a)将维度为n的乘数向量s={s0,s1,…,sn-1}逆序,得{sn-1,sn-2,…,s0},对前n-1个元素取负号并拼接到尾部,得{sn-1,sn-2,…,s0,-sn-1,-sn-2,…,-s1};然后用0补齐得维度为2n的向量s*={sn-1,sn-2,…,s0,-sn-1,-sn-2,…,-s1,0},如图1所示。
[0045] (b)使用CUDA内建函数float2half或者int2half将向量a、s*的元素类型转换为half;对于向量e,则直接乘上浮点数1.0将元素转换为浮点数类型。
[0046] (c)将s*左移一个元素,获得一个新行,用0填充尾部空位;然后移动新行,尾部依旧用0填充,重复该过程,直到获得一个16×2n的矩阵S,如图1所示。
[0047] (d)当存在多个不同的向量组(a,e)与同一个向量s运算时,可以将这些向量组分别拼接合并。在此之前,都需要按照步骤(b)进行格式转换。考虑到Tensor Core的对齐需要,将它们拼接为16×n的矩阵A、E。
[0048] (e)使用CUDA WMMA API。用load_matrix_sync函数将矩阵分成16×16的片段加载到模板类型fragment中。对于所有初始值均为0的e向量,调用fill_fragment函数,用0进行初始化填充。调用mma_sync函数进行矩阵乘加运算,并迭代本步骤。迭代方式如图2所示,包括:对于矩阵A,每一轮迭代都是从第一行的第一个元素开始,每隔16列取一个小矩阵片段;对于矩阵S,第一轮迭代从第一行的第一个元素开始,之后的迭代都是上一轮迭代起始位置(第一行)间隔16个元素。迭代的总次数为 迭代的结果再与相应的矩阵E片段求和,得到矩阵B。
[0049] (f)步骤(e)之后获得的矩阵B需要经过行逆序,之后,每一个行向量代表一组(a,e)与s运算后的结果向量。原结果向量数据类型为float,在结果导出时还需要对系数取模并转换为所需要的格式。
[0050] 示例:假设环Rq=Zq[x]/(xn+1),为方便计算,取n=4,同时假定AI加速器的输入要求2×2对齐。向量表示为a={a0,a1,a2,a3}表示多项式a(x)=a0+a1x+a2x2+a3x3,a0,a1,a2,a3均为模q的整数。类似的,假设多项式s(x)、e(x)由向量s={s0,s1,s2,s3}、e={e0,e1,e2,e3}表示。那么环上多项式运算,可以用向量形式表示。
[0051] 现求环上多项式乘加运算b=as+e:假定b*=as,由环的特性xn≡-1mod(xn+1),于是将b*展开得:
[0052]
[0053]
[0054]
[0055]
[0056] 另一方面,按照以上过程,
[0057] 1)首先获得s*={s3,s2,s1,s0,-s3,-s2,-s1,0},然后对参与计算的向量转换格式;
[0058] 2)将s*扩展为8×2矩阵S:
[0059]
[0060] 3)将多个向量组(a,e)分别合拼、补齐成如下矩阵A、E(注意,不同的上标表示不同的向量):
[0061]
[0062] 4)使用矩阵乘加指令将矩阵划分为2×2小片段,并进行迭代计算,获得矩阵B:
[0063]
[0064] 5)将结果B按行逆序,并提取每一组(a,e)与s的计算结果:
[0065]
[0066] 在本发明的测试实验中,n=512,实验性能可以达到每秒3048万次,而传统CPU实现方案性能在百万级别。
[0067] 基于同一发明构思,本发明的另一个实施例提供一种利用AI加速器实现环上多项式乘法计算加速的装置,其包括:
[0068] 向量扩展模块,用于在n维向量a、s中选择一个向量,假定选择s,将其变换成维数*为2n的向量s;
[0069] 矩阵变换模块,用于将s*拓展成2n×16的矩阵S;对于至少一组向量a、e,将其变换得到16×n矩阵A、E;
[0070] AI加速器,用于采用矩阵乘加指令B=AS+E对矩阵S、A、E进行计算,得到计算结果矩阵B;
[0071] 结果提取模块,用于从矩阵B中提取各组向量的计算结果。
[0072] 其中各模块的具体实施过程参见前文对本发明方法的描述。
[0073] 基于同一发明构思,本发明的另一个实施例提供一种电子装置(计算机、服务器、智能手机等),其包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行本发明方法中各步骤的指令。
[0074] 基于同一发明构思,本发明的另一个实施例提供一种计算机可读存储介质(如ROM/RAM、磁盘、光盘),所述计算机可读存储介质存储计算机程序,所述计算机程序被计算机执行时,实现本发明方法的各个步骤。
[0075] 以上公开的本发明的具体实施例和附图,其目的在于帮助理解本发明的内容并据以实施,本领域的普通技术人员可以理解,在不脱离本发明的精神和范围内,各种替换、变化和修改都是可能的。本发明不应局限于本说明书的实施例和附图所公开的内容,本发明的保护范围以权利要求书界定的范围为准。