首页 / 专利库 / 电脑零配件 / 向量处理 / 有限域运算方法、系统、运算设备和计算机可读存储介质

有限域运算方法、系统、运算设备和计算机可读存储介质

阅读:728发布:2020-05-08

专利汇可以提供有限域运算方法、系统、运算设备和计算机可读存储介质专利检索,专利查询,专利分析的服务。并且本 发明 提供了一种有限域运算方法、系统、运算设备和计算机可读存储介质。涉及计算机技术领域,解决了有限域消耗资源量大的问题。该方法包括:获取 服务器 CPU的缓存的信息;根据所述缓存的信息对运算任务的向量进行分 块 处理,得到多个不大于所述缓存大小的数据向量块;对所述数据向量块进行运算。本发明提供的技术方案适用于处理器性能优化,实现了高效率的CPU运算。,下面是有限域运算方法、系统、运算设备和计算机可读存储介质专利的具体信息内容。

1.一种有限域运算方法,其特征在于,包括:
获取服务器CPU的缓存的信息;
根据所述缓存的信息对运算任务的向量进行分处理,得到多个不大于所述缓存大小的数据向量块;
对所述数据向量块进行运算。
2.根据权利要求1所述的有限域运算方法,其特征在于,所述数据向量块的大小不大于所述CPU一级缓存的大小。
3.根据权利要求2所述的有限域运算方法,其特征在于,所述数据向量块的大小不大于所述CPU一级缓存的大小的二分之一。
4.根据权利要求1所述的有限域运算方法,其特征在于,对所述数据向量块进行运算的步骤包括:
根据所述CPU的特征参数,获取最优指令集,所述最优指令集中包含支持的扩展指令;
使用所述最优指令集,对所述数据向量块进行运算。
5.根据权利要求4所述的有限域运算方法,其特征在于,使用所述最优指令集,对所述数据向量块进行运算的步骤还包括:
在所述运算任务为加法或减法运算,且所述运算任务大于所述CPU的二级缓存大小时,使用Non-Temporal Hint指令将运算结果写入内存。
6.一种有限域运算系统,其特征在于,包括:
CPU信息获取模块,用于获取服务器CPU的缓存的信息;
分块模块,用于根据所述缓存的信息对运算任务的向量进行分块处理,得到多个不大于所述缓存大小的数据向量块;
运算模块,用于对所述数据向量块进行运算。
7.根据权利要求6所述的有限域运算系统,其特征在于,所述运算模块包括:
指令集获取单元,用于根据所述CPU的特征参数,获取最优指令集,所述最优指令集中包含支持的扩展指令;
指令运算单元,用于使用所述最优指令集,对所述数据向量块进行运算。
8.根据权利要求7所述的有限域运算系统,其特征在于,所述运算模块还包括:
内存写入单元,用于在所述运算任务为加法或减法运算,且所述运算任务大于所述CPU的二级缓存大小时,使用Non-Temporal Hint指令将运算结果写入内存。
9.一种运算设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机指令,其特征在于,所述处理器执行所述计算机指令时实现权利要求1-5任意一项所述方法的步骤。
10.一种计算机可读存储介质,其存储有计算机指令,其特征在于,所述计算机指令被处理器执行时实现权利要求1-5任意一项所述方法的步骤。

说明书全文

有限域运算方法、系统、运算设备和计算机可读存储介质

技术领域

[0001] 本发明涉及计算机技术领域,尤其涉及一种有限域运算方法、系统、运算设备和计算机可读存储介质。

背景技术

[0002] 有限域运算会消耗大量的CPU时间,并可能成为系统中的性能瓶颈。如何提升CPU有限域运算效率,是一个需要长期关注的问题。

发明内容

[0003] 本发明旨在解决上面描述的问题。本发明的一个目的是提供解决以上问题中的任何一个的一种有限域运算方法、系统、运算设备和计算机可读存储介质。
[0004] 根据本发明的第一方面,一种有限域运算方法,包括:
[0005] 获取服务器CPU的缓存的信息;
[0006] 根据所述缓存的信息对运算任务的向量进行分处理,得到多个不大于所述缓存大小的数据向量块;
[0007] 对所述数据向量块进行运算。
[0008] 优选的,所述数据向量块的大小不大于所述CPU一级缓存的大小。
[0009] 优选的,所述数据向量块的大小不大于所述CPU一级缓存的大小的二分之一。
[0010] 优选的,对所述数据向量块进行运算的步骤包括:
[0011] 根据所述CPU的特征参数,获取最优指令集,所述最优指令集中包含支持的扩展指令;
[0012] 使用所述最优指令集,对所述数据向量块进行运算。
[0013] 优选的,使用所述最优指令集,对所述数据向量块进行运算的步骤还包括:
[0014] 在所述运算任务为加法或减法运算,且所述运算任务大于所述CPU的二级缓存大小时,使用Non-Temporal Hint指令将运算结果写入内存。
[0015] 根据本发明的又一方面,一种有限域运算系统,包括:
[0016] CPU信息获取模块,用于获取服务器CPU的缓存的信息;
[0017] 分块模块,用于根据所述缓存的信息对运算任务的向量进行分块处理,得到多个不大于所述缓存大小的数据向量块;
[0018] 运算模块,用于对所述数据向量块进行运算。
[0019] 优选的,所述运算模块包括:
[0020] 指令集获取单元,用于根据所述CPU的特征参数,获取最优指令集,所述最优指令集中包含支持的扩展指令;
[0021] 指令运算单元,用于使用所述最优指令集,对所述数据向量块进行运算。
[0022] 优选的,所述运算模块还包括:
[0023] 内存写入单元,用于在所述运算任务为加法或减法运算,且所述运算任务大于所述CPU的二级缓存大小时,使用Non-Temporal Hint指令将运算结果写入内存。
[0024] 根据本发明的又一方面,一种运算设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机指令,所述处理器执行所述计算机指令时实现上述有限域运算方法的步骤。
[0025] 根据本发明的又一方面,一种计算机可读存储介质,其存储有计算机指令,所述计算机指令被处理器执行时实现上述有限域运算方法的步骤。
[0026] 本发明提供了一种有限域运算方法、系统、运算设备和计算机可读存储介质,获取服务器CPU的缓存的信息,根据所述缓存的信息对运算任务的向量进行分块处理,得到多个不大于所述缓存大小的数据向量块,再对所述数据向量块进行运算。通过对待运算的运算任务的向量进行分块处理,并自动选择最优指令,提升了CPU运算效率,解决了有限域消耗资源量大的问题。
[0027] 参照附图来阅读对于示例性实施例的以下描述,本发明的其他特性特征和优点将变得清晰。

附图说明

[0028] 并入到说明书中并且构成说明书的一部分的附图示出了本发明的实施例,并且与描述一起用于解释本发明的原理。在这些附图中,类似的附图标记用于表示类似的要素。下面描述中的附图是本发明的一些实施例,而不是全部实施例。对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,可以根据这些附图获得其他的附图。
[0029] 图1示例性地示出了本发明的一实施例提供的一种有限域运算方的流程;
[0030] 图2示例性地示出了图1中步骤102的具体流程;
[0031] 图3示例性地示出了本发明的一实施例提供的一种有限域运算系统的结构;
[0032] 图4示例性地示出了运算模块303的结构。

具体实施方式

[0033] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
[0034] 有限域运算会消耗大量的CPU时间,并可能成为系统中的性能瓶颈。如何提升CPU有限域运算效率,是一个需要长期关注的问题。
[0035] 具体的,现有的有限域运算方式存在如下问题:
[0036] 1、没有利用最新的扩展指令集。如使用最为广泛的Jerasure并不支持avx2。
[0037] 2、需要二次开发,以避免性能惩罚或数据错误等问题。如需要调用者去清理寄存器,如果开启了NT store,则需要调用者在读取编码数据之前调用fence来避免读到脏数据。
[0038] 3、错误的利用多核技术,造成缓存污染,降低了整体I/O吞吐。利用多核技术可以提高单任务的效率,单对于多任务来说,由于缓存上的竞争,总体效率反而降低。因此应该避免使用多核单任务的运算模型。
[0039] 4.没有充分利用缓存,I/O效率低。对于下一个循环所需要运算的数据并没有提前缓存。
[0040] 5.错误的缓存不必要的数据,I/O效率低。
[0041] 6.对寄存器不对齐的数据没有进行加速处理。
[0042] 为了解决上述问题,本发明的实施例提供了一种有限域运算方法、系统、运算设备和计算机可读存储介质,通过对待运算的运算任务的向量进行分块处理,并自动选择最优指令,提升了CPU运算效率,解决了有限域消耗资源量大的问题。
[0043] 本发明的一实施例提供了一种有限域运算方法,使用该方法完成有限域运算的流程如图1所示,包括:
[0044] 步骤101、获取服务器CPU的缓存的信息。
[0045] 步骤102、根据所述缓存的信息对运算任务的向量进行分块处理,得到多个不大于所述缓存大小的数据向量块。
[0046] 本步骤中,具体的,所述数据向量块的大小不大于所述CPU一级缓存的大小。优选的,所述数据向量块的大小不大于所述CPU一级缓存的大小的二分之一。所述数据向量块具体为向量分块(Split vector)。
[0047] 具体的,对待运算的向量进行分块处理,每次运算不超过1/2的一级缓存大小(L1Data Cache Size)的数据向量。L1Cache速度最快,分块尺寸取值范围优先考虑小于L1Data Cache Size,根据大量测试1/2L1Data Cache Size在绝大多数情况下取得了最好的性能表现。
[0048] 步骤103、对所述数据向量块进行运算。
[0049] 本步骤具体如图2所示,纵向为数据流,横向为指令流,本步骤包括:
[0050] 步骤1031、根据所述CPU的特征参数,获取最优指令集,所述最优指令集中包含支持的扩展指令。
[0051] 由于并不是所有CPU都包含所有扩展指令,因此本步骤中也要判断操作系统的支持情况(比如,虚拟化后可能不支持一些扩展指令)。
[0052] 在完成拆分向量(Split vector)后,初始化CPU特征参数,获取最优指令集,其中,CPU特征可以是扩展指令的支持情况,最优指令集为关于扩展指令选择的结果,每次运算将重用该结果。可根据寄存器位宽选择最优指令集,例如优先选择寄存器位宽最宽的指令集作为最优指令集。具体的,AVX512支持位宽为512bit的寄存器,AVX2支持位宽为256bit的寄存器,SSSE3支持位宽为128bit的寄存器。
[0053] 例如,可以通过cpuid以及xgetbv指令获得CPU的扩展指令的支持情况,保存在数据结构中,以此为依据选择最优指令集。
[0054] 步骤1032、使用所述最优指令集,对所述数据向量块进行运算。
[0055] 例如,1.通过cpuid以及xgetbv指令获得扩展指令的支持情况,保存在数据结构中,以此为依据选择最优指令集。算法支持的指令集包括:AVX512、AVX2、SSSE3。AVX512/AVX2/AVX loop为实际的运算单元。对于同一个运算任务:
[0056] a.服务器支持AVX512时,优先使用AVX512指令,不足64Bytes则使用AVX2,不足32Bytes使用AVX,不足16Bytes对向量进行补齐。
[0057] 由于AVX512支持ZMM寄存器(位宽512bit)、AVX/AVX2支持YMM寄存器(位宽256bit),而其中AVX支持部分XMM寄存器(位宽128bit)运算。因此,依次选择位宽最宽的寄存器运算,可减少指令开销,提高吞吐。而使用补齐使得运算完全使用单指令多数据流(SIMD)模式,避免其他模式下的运算过程污染缓存。
[0058] b.服务器支持AVX2时,优先使用AVX2指令,不足32Bytes则使用AVX,不足16Bytes对向量进行补齐。
[0059] c.服务器支持SSSE3时,优先使用SSSE3指令,不足16Bytes对向量进行补齐。
[0060] 在所述运算任务为加法或减法运算,且所述运算任务大于所述CPU的二级缓存大小时,使用穿透缓存的Non-Temporal Hint指令将运算结果写入内存。
[0061] 当运算任务为加法或者减法(异或),且运算任务大于二级缓存大小(L2Cache Size)时,使用Non-Temporal Hint技术。考虑到数据在运算之后可能被立即使用,如果直接使用Non-Temporal Hint穿透缓存,会影响接下来的程序性能。有限域的乘法/除法运算多被应用于矩阵运算当中,涉及到大量的数据重复读取,因此使用Non-Temporal Hint可能会降低整体性能表现。对于异或运算则没有这个问题,当所需要缓存的数据过大,使用Non-Temporal Hint可以有效提高性能表现。根据大量测试L2 Size作为Non-TemporalHint的衡量标准。
[0062] 本发明的一实施例还提供了一种有限域运算方法,使用该方法完成对运算任务运算的流程如图2所示,包括:
[0063] 步骤201、获取CPU Feature,存入数据结构中。数据结构中定义元素,元素命为“cpu”,值为0/1/2/3,分别代表AVX512/AVX2/SSSE3/NoSIMD。
[0064] 步骤202、获取CPU L2Cache Size,当待运算向量长度大于L2CacheSize且为有限域加法运算时使用Non-Temporal Hint Store,直接将运算求得的结果写入内存。在使用NT Store后,在函数ret前使用sfence,保障调用者读取的数据是正确的。
[0065] 对向量进行拆分,最小尺寸为16Bytes,最大尺寸为16KB。拆分算法描述如下:向量长度为n,当n小于16Bytes时,返回16;当小于1/2L1DataCache Size时,返回(n>>4)<<4;其余情况返回1/2L1Data Cache Size。
[0066] 对于不满足16Bytes的数据,将使用补齐操作,补齐后进行截取。
[0067] 在拆分完成后,即可对拆分得到的分块向量进行运算。
[0068] 步骤203、根据CPU Feature选取最合适的指令对拆分后的分块向量进行运算,包含从1Byte到64Bytes的循环。在选择指令时,在AVX512/AVX2/SSSE3(优先级由高到低)中依次判断平台是否支持,选择平台所支持的优先级最高的指令级(即支持的寄存器位宽最宽的指令集)。所有使用AVX家族的指令的函数在RET前均会使用vzeroupper指令规避AVX-SSE Transition Penalties。
[0069] 优选的,如果使用了Non-Temporal Hint技术,还会在ret前使用sfence来实现数据有序化。
[0070] 本发明的一实施例还提供了一种有限域运算系统,其结构如图3所示,包括:
[0071] CPU信息获取模块301,用于获取服务器CPU的缓存的信息;
[0072] 分块模块302,用于根据所述缓存的信息对运算任务的向量进行分块处理,得到多个不大于所述缓存大小的数据向量块;
[0073] 运算模块303,用于对所述数据向量块进行运算。
[0074] 优选的,所述运算模块303的结构如图4所示,包括:
[0075] 指令集获取单元3031,用于根据所述CPU的特征参数,获取最优指令集,所述最优指令集中包含支持的扩展指令;
[0076] 指令运算单元3032,用于使用所述最优指令集,对所述数据向量块进行运算。
[0077] 优选的,所述运算模块303还包括:
[0078] 内存入单元3033,用于在所述运算任务为加法或减法运算,且所述运算任务大于所述CPU的二级缓存大小时,使用Non-Temporal Hint指令将运算结果写入内存。
[0079] 本发明实施例还提供了一种运算设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机指令,所述处理器执行所述计算机指令时实现本发明的任一实施例提供的有限域运算方法的步骤。
[0080] 本发明实施例还提供了一种计算机可读存储介质,其存储有计算机指令,所述计算机指令被处理器执行时实现本发明的任一实施例提供的有限域运算方法的步骤。
[0081] 本发明的实施例提供了一种有限域运算方法、系统、运算设备和计算机可读存储介质,获取服务器CPU的缓存的信息,根据所述缓存的信息对运算任务的向量进行分块处理,得到多个不大于所述缓存大小的数据向量块,再对所述数据向量块进行运算。通过对待运算的运算任务的向量进行分块处理,并自动选择最优指令,提升了CPU运算效率,解决了有限域消耗资源量大的问题。
[0082] 本发明的实施例提供的技术方案对CPU Cache进行了充分合理的利用,实现了简洁,高效的算法。全自动的指令集选择,可以在不同平台上选择最优指令;隐藏了CPU指令细节,无需外层介入;单核单任务,避免缓存污染;运算任务向量分块,充分利用高速缓存;缓存规则自动选择,通过缓存穿透技术加速吞吐;对寄存器不对齐数据依然使用向量运算,在加速的同时,避免了缓存污染。在性能最优的同时,对使用者最为友好。
[0083] 上面描述的内容可以单独地或者以各种方式组合起来实施,而这些变型方式都在本发明的保护范围之内。
[0084] 最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制。尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈