掌桥专利:专业的专利平台
掌桥专利
首页

一种杂凑值计算方法及系统

文献发布时间:2023-06-19 19:28:50


一种杂凑值计算方法及系统

技术领域

本申请涉及密码算法领域,具体而言,涉及一种杂凑值计算方法及系统。

背景技术

sm3算法作为一款商密杂凑算法,能够通过对传输消息填充、扩展和压缩等过程,将任意长度的传输消息映射成固定长度数据,从而使其适用于数字签名、传输消息的完整性检测、消息的起源认证性检测等场景中。正因为如此,sm3算法在金融、网络传输等领域中得到了广泛的应用。

然而,在实践中发现,目前的sm3算法应用多是基于OpenSSL库由C语言软件仿真完成的,其性能难以满足大量高速应用场景的需求。

发明内容

本申请实施例的目的在于提供一种杂凑值计算方法及系统,能够适用于不同应用场景下对sm3算法带宽的要求,从而起到平衡对算法性能需求和对fpga资源消耗的效果。

本申请实施例第一方面提供了一种杂凑值计算方法,包括:

识别杂凑值计算系统的运算性能;

基于所述运算性能,确定算法核数量;

在所述杂凑值计算系统中,设置与所述算法核数量相对应的多个算法核;

对所述多个算法核进行流水线排序,得到算法核序列;

基于所述算法核序列对接收到的待计算数据进行计算,得到杂凑值。

在上述实现过程中,该方法可以优先识别杂凑值计算系统的运算性能;可见,该方法是基于系统运算性能自适应实现的一种sm3算法,从而以此来确保对算法性能需求和对fpga资源消耗之间的平衡。具体的,该方法可以基于运算性能,确定算法核数量;可见,该方法可以在性能富裕的情况下使用更多的算法核,在性能稀缺的情况下使用更少的算法核,从而以此来确保该方法对不同运算性能的适应性,进而保障sm3算法的顺利实现。然后,该方法在杂凑值计算系统中,设置与算法核数量相对应的多个算法核;可见,该方法在确定出算法核数量之后,可以对算法核进行设定与初始化,以确保每个算法核都能够执行相同的功能。在设置好多个算法核之后,该方法再对多个算法核进行流水线排序,得到算法核序列;可见,该方法可以将多个算法核串联起来,使其能够形成为一个算法核序列,实现流水线作业;同时,由于所有算法核都具有相同的功能,所以连接顺序较为自由,也允许首尾相连,从而实现算法核序列的复用。最后,该方法再基于算法核序列对接收到的待计算数据进行计算,得到杂凑值;可见,该方法可以基于算法核序列逐步实现sm3算法,从而使得该方法能够在性能大小、移植方便性等方面表现出极强的优势。

进一步地,所述算法核数量为64个、32个、16个、8个或4个。

在上述实现过程中,由于sm3算法需要执行64轮,所以该方法于基础上要设置64个算法核;基于此,该方法可以基于实际的系统性能情况对其进行裁剪,从而使得该方法可以将其中的算法核数量设置为32个、16个、8个或4个,进而使得该方法可以通过对算法核的复用使用降低对性能的要求,并提高该方法应用的灵活性。

进一步地,所述对所述多个算法核进行流水线排序,得到算法核序列的步骤包括:

当所述算法核数量小于64个时,对所述多个算法核进行循环流水线排序,得到算法核序列。

在上述实现过程中,该方法可以在算法核数量小于64个时,对多个算法核进行循环流水线排序,得到算法核序列。可见,该方法可以对32个、16个或者其他数量的算法核进行流水线循环排序,从而使得得到的算法核序列能够首尾相连,进而使得少数算法核也能够实现64个算法核的效果。

进一步地,所述基于所述算法核序列对接收到的待计算数据进行计算,得到杂凑值的步骤包括:

对接收到的待计算数据进行填充,得到填充数据;

所述算法核序列中的首个算法核对所述填充数据和预设初始值进行计算,得到第一扩展数据和第一压缩数据;

判断所述第一压缩数据是否为最终运算结果;

当所述第一压缩数据不为所述最终运算结果时,通过所述算法核序列中的下一个算法核对所述第一扩展数据和所述第一压缩数据进行计算,得到第二扩展数据和第二压缩数据;

将确定所述第二扩展数据确定为第一扩展数据,将所述第二压缩数据确定为第一压缩数据,并触发执行所述判断所述第一压缩数据是否为最终运算结果的步骤;

当所述第一压缩数据为所述最终运算结果时,将所述第一压缩数据确定为杂凑值,并输出所述杂凑值。

在上述实现过程中,该方法可以在基于算法核序列对接收到的待计算数据进行计算,得到杂凑值的过程中,优先对接收到的待计算数据进行填充,得到填充数据;可见,该方法可以优先基于sm3算法进行数据填充。然后,再通过算法核序列中的首个算法核对填充数据和预设初始值进行计算,得到第一扩展数据和第一压缩数据;可见,该方法示出了单一算法核的计算方式,从而实现sm3算法中的一轮迭代。再后,该方法,判断第一压缩数据是否为最终运算结果;可见,该方法此时便开始对第一压缩数据进行结果检验,以此确定其不是第64轮压缩结果,从而以便促进该迭代的进行,促进算法核的流水线调用。其中,当第一压缩数据不为最终运算结果时,通过算法核序列中的下一个算法核对第一扩展数据和第一压缩数据进行计算,得到第二扩展数据和第二压缩数据;将确定第二扩展数据确定为第一扩展数据,将第二压缩数据确定为第一压缩数据,并触发执行判断第一压缩数据是否为最终运算结果的步骤;可见,该方法能够基于sm3算法多次顺着其顺序调用算法核执行迭代压缩,从而促使64轮迭代压缩的完成。最后,再在第一压缩数据为最终运算结果时,将第一压缩数据确定为杂凑值,并输出杂凑值。可见,该方法可以再64轮迭代压缩完成时,自动输出结果杂凑值。

进一步地,所述通过所述算法核序列中的下一个算法核对所述第一扩展数据和所述第一压缩数据进行计算,得到第二扩展数据和第二压缩数据的步骤包括:

调用所述算法核序列中包括扩展模块和压缩模块的下一个算法核;

通过所述扩展模块对所述第一扩展数据进行扩展计算,得到第二扩展数据;

通过所述压缩模块对所述第一压缩数据进行迭代压缩,得到第二压缩数据。

在上述实现过程中,该方法在通过算法核序列中的下一个算法核对第一扩展数据和第一压缩数据进行计算,得到第二扩展数据和第二压缩数据的过程中,可以优先调用算法核序列中包括扩展模块和压缩模块的下一个算法核;然后再通过扩展模块对第一扩展数据进行扩展计算,得到第二扩展数据;并通过压缩模块对第一压缩数据进行迭代压缩,得到第二压缩数据。可见,该方法在每个算法核中设定两个算法模块,从而在一轮迭代中实现数据扩展与数据压缩的两个并行步骤,进而实现单独运算效果,且便于对数据进行传递。

本申请实施例第二方面提供了一种杂凑值计算系统,所述杂凑值计算系统包括:

识别单元,用于识别杂凑值计算系统的运算性能;

确定单元,用于基于所述运算性能,确定算法核数量;

设置单元,用于在所述杂凑值计算系统中,设置与所述算法核数量相对应的多个算法核;

排序单元,用于对所述多个算法核进行流水线排序,得到算法核序列;

计算单元,用于基于所述算法核序列对接收到的待计算数据进行计算,得到杂凑值。

在上述实现过程中,该系统可以通过识别单元识别杂凑值计算系统的运算性能;通过确定单元来基于运算性能,确定算法核数量;通过设置单元在杂凑值计算系统中,设置与算法核数量相对应的多个算法核;通过排序单元对多个算法核进行流水线排序,得到算法核序列;再通过计算单元基于算法核序列对接收到的待计算数据进行计算,得到杂凑值。可见,该系统能够适用于不同应用场景下对sm3算法带宽的要求,从而起到平衡对算法性能需求和对fpga资源消耗的效果。

进一步地,所述算法核数量为64个、32个、16个、8个或4个。

进一步地,所述排序单元,具体用于当所述算法核数量小于64个时,对所述多个算法核进行循环流水线排序,得到算法核序列。

进一步地,所述计算单元包括:

填充子单元,用于对接收到的待计算数据进行填充,得到填充数据;

计算子单元,用于通过所述算法核序列中的首个算法核对所述填充数据和预设初始值进行计算,得到第一扩展数据和第一压缩数据;

判断子单元,用于判断所述第一压缩数据是否为最终运算结果;

所述计算子单元,还用于当所述第一压缩数据不为所述最终运算结果时,通过所述算法核序列中的下一个算法核对所述第一扩展数据和所述第一压缩数据进行计算,得到第二扩展数据和第二压缩数据;

确定子单元,用于将确定所述第二扩展数据确定为第一扩展数据,将所述第二压缩数据确定为第一压缩数据,并触发所述判断子单元执行所述判断所述第一压缩数据是否为最终运算结果的操作;

所述确定子单元,还用于当所述第一压缩数据为所述最终运算结果时,将所述第一压缩数据确定为杂凑值,并输出所述杂凑值。

进一步地,所述计算子单元,具体用于调用所述算法核序列中包括扩展模块和压缩模块的下一个算法核;

所述计算子单元,具体还用于通过所述扩展模块对所述第一扩展数据进行扩展计算,得到第二扩展数据;

所述计算子单元,具体还用于通过所述压缩模块对所述第一压缩数据进行迭代压缩,得到第二压缩数据。

本申请实施例第三方面提供了一种电子设备,包括存储器以及处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序以使所述电子设备执行本申请实施例第一方面中任一项所述的杂凑值计算方法。

本申请实施例第四方面提供了一种计算机可读存储介质,其存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行本申请实施例第一方面中任一项所述的杂凑值计算方法。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本申请实施例提供的一种杂凑值计算方法的流程示意图;

图2为本申请实施例提供的另一种杂凑值计算方法的流程示意图;

图3为本申请实施例提供的一种杂凑值计算系统的结构示意图;

图4为本申请实施例提供的另一种杂凑值计算系统的结构示意图;

图5为本申请实施例提供的一种该方法应用的sm3算法流水框架图;

图6为本申请实施例提供的一种该系统中数据调度连接关系示意图;

图7为本申请实施例提供的一种算法核连接关系图;

图8为本申请实施例提供的一种该方法使用8个32bit寄存器实现迭代压缩算法的生成关系示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

实施例1

请参看图1,图1为本实施例提供了一种杂凑值计算方法的流程示意图。其中,该杂凑值计算方法包括:

S101、识别杂凑值计算系统的运算性能。

S102、基于运算性能,确定算法核数量。

S103、在杂凑值计算系统中,设置与算法核数量相对应的多个算法核。

S104、对多个算法核进行流水线排序,得到算法核序列。

S105、基于算法核序列对接收到的待计算数据进行计算,得到杂凑值。

本实施例中,该方法采用了流水线方式,该流水线方式是FPGA实现高性能运算的一种常见的方式,但不同的流水架构,却能在性能大小、移植方便性等方面表现出很大的差异。

本实施例中,该方法能够侧重于国密sm3算法领域安全应用场景中,其具体涉及的技术关键点如下:

(1)该方法所使用的流水线算法架构,下一级算法核所需要的数据来自与上一级算法核算出的结果,大大提高了算法性能;

(2)灵活的算法数据调度,可根据实际需要灵活裁剪算法流水的级数,平衡性能和fpga资源,使其达到最优性价比。

在本实施例中,该方法提供了一种可裁剪的流水线算法架构,该架构由多个结构完全相同的算法核组成,每一个算法核数据的输入是上一个算法核的输出,第一个算法核的输入接口则接收来自算法控制模块输送进来的数据,最后一个算法核的输出数据输送至算法控制模块,以此来实现算法核之间数据的流水关系,能既极大提高算法性能,同时也大大降低了移植、裁剪等方面的复杂度。其流水关系连接图如图5所示。

本实施例中,该方法的执行主体可以为计算机、服务器等计算系统,对此本实施例中不作任何限定。

在本实施例中,该方法的执行主体还可以为智能手机、平板电脑等智能设备,对此本实施例中不作任何限定。

可见,实施本实施例所描述的杂凑值计算方法,能够采用流水线形式来根据算法性能需求和fpga硬件资源进行灵活裁剪,从而使其能够覆盖4核、8核、16核、32核以及64核算法核的5种裁剪方式,进而大大增加了可应用的场景,节省了开发成本。

实施例2

请参看图2,图2为本实施例提供了一种杂凑值计算方法的流程示意图。其中,该杂凑值计算方法包括:

S201、识别杂凑值计算系统的运算性能。

S202、基于运算性能,确定算法核数量。

本实施例中,算法核数量为64个、32个、16个、8个或4个。

在本实施例中,每一级流水完成一次算法的运算,由于sm3算法需要进行64轮算法的运算才能算出一个哈希值,因此可设计成64个算法核,来实现64级流水完成一次哈希的计算,并且最高能实现64个算法核的同时计算,以此满足sm3算法对高性能的要求,但由于64个算法核对FPGA的资源需求较大,也可以根据需要裁剪成32个算法核,完成2次32级的流水来实现一次哈希计算,即最后一个算法核完成第一次计算后将算完的哈希值输出给算法控制模块,再由算法控制模块将该值进行第二次32轮的计算,以此实现一次完整的sm3哈希计算,这种裁剪最多可同时实现32组数据的计算。根据需要可进一步裁剪成16个算法核,完成4次16级的流水来实现一次完整的sm3哈希计算,也可裁剪成8个算法核,完成8次8级的流水来实现一次完整的sm3哈希计算,甚至裁剪成4个算法核,完成16次4级的流水来实现一次完整的sm3哈希计算。

实施这种实施方式,随着这些不同裁剪所用到的算法核数量变少,sm3算法性能会相对降低,但对fpga寄存器资源需求越低,因此可根据不同的应用场景选择所需要的裁剪方案来满足不同的需求。

S203、在杂凑值计算系统中,设置与算法核数量相对应的多个算法核。

本实施例中,该系统中数据调度连接关系示意图如图6所示。可见,该图中示出了三个数据缓存和一个数据调度组成,其中,中间数据缓存存储的是参与了算法运算但尚未完成64轮运算的中间数据,64轮计算结果缓存存储的则是完成64轮运算的数据。数据调度会对填充数据缓存和中间数据缓存以及64轮计算结果缓存进行实时监测,当监测到其缓存非空,则认为有数据要参与算法运算,则将对应的缓存数据和信息搬至算法核参与算法运算,且中间数据缓存里的数据搬至算法核的优先级最高,64轮计算结果缓存里的数据优先级次之,填充数据缓存里的数据优先级最低,这样可保证优先计算中间数据缓存里的数据而不至于使其存储量过大。

在本实施例中,64轮运算结果缓存存储的是一个512bit数据经过64轮算法运算算出的iv值,数据调度模块在检测到该缓存非空时会进行判断,若该512bit数据是该包数据的最后一组512bit,则会将其与上一组512bit数据经过64轮运算后的iv进行异或后,作为该包数据的算法结果进行输出,若该512bit数据不是该包数据的最后一组512bit,则作为该包数据的下一组512bit数据的初始向量参与算法运算。

S204、对多个算法核进行流水线排序,得到算法核序列。

作为一种可选的实施方式,对多个算法核进行流水线排序,得到算法核序列的步骤包括:

当算法核数量小于64个时,对多个算法核进行循环流水线排序,得到算法核序列。

本实施例中,所有的算法核都采用统一的结构。如图7所示为算法核之间相互连接关系图,每一个算法核是由一个扩展模块和一个压缩模块组成。

S205、对接收到的待计算数据进行填充,得到填充数据。

本实施例中,当填充数据大于512位时,该方法可以对其进行分组处理,得到多个分组数据。此时,该方法将分组数据分别输入至后续的算法核序列中,得到各种中间值;然后,该方法在基于中间值和分组数据重复调用算法核序列,从而以此来实现大数据的杂凑值计算。

S206、通过算法核序列中的首个算法核对填充数据和预设初始值进行计算,得到第一扩展数据和第一压缩数据。

S207、判断第一压缩数据是否为最终运算结果,若是,则执行步骤S212;若否,则执行步骤S208~S211。

S208、调用算法核序列中包括扩展模块和压缩模块的下一个算法核。

S209、通过扩展模块对第一扩展数据进行扩展计算,得到第二扩展数据。

本实施例中,扩展模块按如下公式进行数据扩展:

其中,每个扩展模块只完成一次数据的扩展,输入512bit数据,将其分别赋值给16个32bit的寄存器W0、W1…W15,利用上述公式和这16个数据可以分别生成出W’0和W16,W0和W’0输出给该级算法核的压缩模块进行运算,W16则与W1…W15按{W1,W2…W15,W16}拼接成新的512bit数据输出给下一级扩展模块进行扩展,最后一级算法核生成的数据则对外输出。

S210、通过压缩模块对第一压缩数据进行迭代压缩,得到第二压缩数据。

本实施例中,压缩模块只利用当前的W0、W’0和向量IV以及T值按如下公式进行计算:

SS1←((A<<12)+E+(T

TT1←FF

TT2←GG

请参看图8,基于图8可知:256bit的IV为公式中8个32bit的ABCDEFGH的拼接,W0为上式中的Wj、W’0为上式中的W’j,T为上式中的Tj。算出上述值后,按照下述流程图进行赋值得到新的A’、B’、C’、D’、E’、F’、G’、H’值,亦即新的IV,输出给下一级模块,如此实现图7所示的IV_1到IV_2的转变。

S211、将确定第二扩展数据确定为第一扩展数据,将第二压缩数据确定为第一压缩数据,并触发执行步骤S207。

本实施例中,该方法能够控制待计算的数据输入到第一个算法核,接收最后一个算法核的数据并判断其是否为最终所算数据包的结果来决定是继续参与下一步算法计算还是作为结果输出。

在本实施例中,算法核则主要包含数据扩展模块和数据压缩,数据扩展主要完成该级数据压缩模块所需要的扩展数据并将剩余数据输出给下一级数据扩展模块,数据压缩模块则完成该级数据的压缩并将结果输出给下一级。

S212、将第一压缩数据确定为杂凑值,并输出杂凑值。

本实施例中,上述中的数据扩展模块和数据压缩模块合成一个算法核,实现一级算法流水。由于sm3算法要求完成一个512bit的数据运算要进行64轮运算,上述架构可根据需要调整成64个算法核进行一次循环、32个算法核进行两次循环、16个算法核进行4次循环、8个算法核进行8次循环、4个算法核进行16次循环来实现sm3算法。整个过程全部用流水线实现,可大大提高算法的性能并且能根据运用场景灵活选择所需要的算法核数,从而可以在性能和资源中做出适合该场景的最佳方案。

举例来说,该方法可以应用于国密哈希算法sm3上,具体通过16个算法核实现本方法。其中,该sm3算法的执行过程可以概括成三个步骤:消息填充、消息扩展、迭代压缩。其中,

填充是将消息填充至512bit的整数倍,填充规则是在消息末尾先填充1bit“1”,后面加上k个“0”,其中k是满足(n+1+k)mod512=448的最小正整数。最后再添加64bit的消息长度。

消息的扩展则是根据消息的内容,将其每512bit划分成16个消息字(每一个消息字的长度为32bit),并且作为生成的132个消息字的前16个,再用这16个消息字递推生成剩余的116个消息字,其中前68个消息字构成数列W,后64个消息字构成数列W’。

最后则是迭代压缩,将扩展得到的消息字和初始向量值通过压缩函数进行64轮压缩迭代,再将生成的数值与当前用到的向量值进行异或,就是压缩函数的输出,这个输出再作为下一次调用压缩函数时的初值。依次类推,直到用完最后一组132个消息字为止。

可见,该方法完成一次sm3算法运算需要经过16个算法核4轮运算,即需经过4次数据调度。按照本发明详细描述中的方法,具体的流程如下:

(1)填充数据缓存。填充数据缓存包含两部分:一部分是用来存储将要进行算法运算的数据包,另一部分是存储对应数据包的info信息。该数据包是原始数据经过填充处理后的数据。由于填充过程比较简单,在此不再详述。填充数据缓存大小的设置是根据算法核数量决定的。所列举例子算法性能需要16个算法核,处理的消息数据长度不超过2048字节,可设置一个深度为512(2048*16/64=512),位宽为512位的ram缓存作为数据输入缓存。将ram划分成16块,与16个算法核相对应,每一ram块存储一包数据,用地址位宽的高4位来区分当前数据包第几个数据包,低5位则表示当前数据包有多少个512bit的数据。在每往数据ram中存储一个数据包的同时,也会在fifo中存储一个与之相应的数据包的info信息,该info信息主要包含当前包是第几个包以及包的长度。

(2)算法数据的控制。数据调度部分在检测到info_fifo非空时,读取该info信息,并根据info信息获知将该数据包属于第几包从ram中读取512bit数据输送至算法核,与此同时送入至算法核中的数据还有向量IV以及包含该512bit数据信息(经过了第几轮算法运算、第几个数据包)的sq值。在数据经过第16个算法核运算后,从扩展模块输出的512bit数据和压缩模块输出的256bitIV以及sq值重新返还数据调度,以使数据调度根据返回sq值的信息来判断其是否完成4次调度,若没有则将其存至中间数据缓存中等待再次进入算法核进行运算;若已完成4次调度,说明已完成一次完整的sm3算法运算,将IV值存至64轮结果缓存中并作进一步判断:该组数据是否是该数据包最后一组512bit数据,若是,则将算出的IV值与上一组512bit数据算出的IV值进行异或后作为该数据包的hash结果进行输出,否则,将其作为下一组512bit数据的算法运算初始IV参与运算。

(3)数据的扩展:进入算法扩展模块的512bit数据,将其分别存至16个32bit的寄存器W0、W1…W15中,其中W16根据sm3算法中的数据扩展公式进行实现,故,W’0的生成按照公式进行实现,故。生成完之后,W0和W’0输出给该级的压缩模块参与运算,新的512bit数据则按照{W1,W2…W15,W16}格式拼接后输出下一级数据扩展模块。在下一级数据扩展模块中,完全按照上述流程进行重复进行。

(4)数据的压缩:进入数据压缩模块的256bit向量IV数据,将其存至8个32bit寄存器ABCDEFGH中,这几个寄存器的数值和来自扩展模块的消息扩展字W0、W’0以及常量值T按下述公式参与运算。

完成上述运算后,实现ABCDEFGH的重新赋值,其赋值流程如下图所示,新得到A’、B’、C’、D’、E’、F’、G’、H’值作为新的256bitIV值赋值给下一级压缩模块,若该级为第16个算法核的压缩模块,则对数值进行输出。

本实施例中,该方法的执行主体可以为计算机、服务器等计算系统,对此本实施例中不作任何限定。

在本实施例中,该方法的执行主体还可以为智能手机、平板电脑等智能设备,对此本实施例中不作任何限定。

可见,实施本实施例所描述的杂凑值计算方法,能够采用流水线形式来根据算法性能需求和fpga硬件资源进行灵活裁剪,从而使其能够覆盖4核、8核、16核、32核以及64核算法核的5种裁剪方式,进而大大增加了可应用的场景,节省了开发成本。

实施例3

请参看图3,图3为本实施例提供的一种杂凑值计算系统的结构示意图。如图3所示,该杂凑值计算系统包括:

识别单元310,用于识别杂凑值计算系统的运算性能;

确定单元320,用于基于运算性能,确定算法核数量;

设置单元330,用于在杂凑值计算系统中,设置与算法核数量相对应的多个算法核;

排序单元340,用于对多个算法核进行流水线排序,得到算法核序列;

计算单元350,用于基于算法核序列对接收到的待计算数据进行计算,得到杂凑值。

本实施例中,对于杂凑值计算系统的解释说明可以参照实施例1或实施例2中的描述,对此本实施例中不再多加赘述。

可见,实施本实施例所描述的杂凑值计算系统,能够采用流水线形式来根据算法性能需求和fpga硬件资源进行灵活裁剪,从而使其能够覆盖4核、8核、16核、32核以及64核算法核的5种裁剪方式,进而大大增加了可应用的场景,节省了开发成本。

本申请实施例提供了一种电子设备,包括存储器以及处理器,存储器用于存储计算机程序,处理器运行计算机程序以使电子设备执行本申请实施例1或实施例2中的杂凑值计算方法。

本申请实施例提供了一种计算机可读存储介质,其存储有计算机程序指令,计算机程序指令被一处理器读取并运行时,执行本申请实施例1或实施例2中的杂凑值计算方法。

实施例4

请参看图4,图4为本实施例提供的一种杂凑值计算系统的结构示意图。如图4所示,该杂凑值计算系统包括:

识别单元310,用于识别杂凑值计算系统的运算性能;

确定单元320,用于基于运算性能,确定算法核数量;

设置单元330,用于在杂凑值计算系统中,设置与算法核数量相对应的多个算法核;

排序单元340,用于对多个算法核进行流水线排序,得到算法核序列;

计算单元350,用于基于算法核序列对接收到的待计算数据进行计算,得到杂凑值。

本实施例中,算法核数量为64个、32个、16个、8个或4个。

作为一种可选的实施方式,排序单元340,具体用于当算法核数量小于64个时,对多个算法核进行循环流水线排序,得到算法核序列。

作为一种可选的实施方式,计算单元350包括:

填充子单元351,用于对接收到的待计算数据进行填充,得到填充数据;

计算子单元352,用于通过算法核序列中的首个算法核对填充数据和预设初始值进行计算,得到第一扩展数据和第一压缩数据;

判断子单元353,用于判断第一压缩数据是否为最终运算结果;

计算子单元352,还用于当第一压缩数据不为最终运算结果时,通过算法核序列中的下一个算法核对第一扩展数据和第一压缩数据进行计算,得到第二扩展数据和第二压缩数据;

确定子单元354,用于将确定第二扩展数据确定为第一扩展数据,将第二压缩数据确定为第一压缩数据,并触发判断子单元执行判断第一压缩数据是否为最终运算结果的操作;

确定子单元354,还用于当第一压缩数据为最终运算结果时,将第一压缩数据确定为杂凑值,并输出杂凑值。

作为一种可选的实施方式,计算子单元352,具体用于调用算法核序列中包括扩展模块和压缩模块的下一个算法核;

计算子单元352,具体还用于通过扩展模块对第一扩展数据进行扩展计算,得到第二扩展数据;

计算子单元352,具体还用于通过压缩模块对第一压缩数据进行迭代压缩,得到第二压缩数据。

本实施例中,对于杂凑值计算系统的解释说明可以参照实施例1或实施例2中的描述,对此本实施例中不再多加赘述。

可见,实施本实施例所描述的杂凑值计算系统,能够采用流水线形式来根据算法性能需求和fpga硬件资源进行灵活裁剪,从而使其能够覆盖4核、8核、16核、32核以及64核算法核的5种裁剪方式,进而大大增加了可应用的场景,节省了开发成本。

本申请实施例提供了一种电子设备,包括存储器以及处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序以使所述电子设备执行本申请实施例1或实施例2中的杂凑值计算方法。

本申请实施例提供了一种计算机可读存储介质,其存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行本申请实施例1或实施例2中的杂凑值计算方法。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统和方法,也可以通过其它的方式实现。以上所描述的系统实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

相关技术
  • 一种二值运动描述子的计算方法及系统
  • 一种多元件并列供电系统失负荷损失值计算方法
  • 一种集成成像系统显示端像素值计算方法及系统
  • 一种发电企业信息系统风险值的计算方法及系统
技术分类

06120115920602