CN116566399B - 基于向量多项式乘和指令的crc32c数据检错方法、系统、终端及介质 - Google Patents

基于向量多项式乘和指令的crc32c数据检错方法、系统、终端及介质 Download PDF

Info

Publication number
CN116566399B
CN116566399B CN202310572973.1A CN202310572973A CN116566399B CN 116566399 B CN116566399 B CN 116566399B CN 202310572973 A CN202310572973 A CN 202310572973A CN 116566399 B CN116566399 B CN 116566399B
Authority
CN
China
Prior art keywords
data
crc32c
result
polynomial
polynomial multiplication
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.)
Active
Application number
CN202310572973.1A
Other languages
English (en)
Other versions
CN116566399A (zh
Inventor
徐继辉
鲍沛泽
安张钰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hexin Technology Suzhou Co ltd
Hexin Technology Co ltd
Original Assignee
Hexin Technology Suzhou Co ltd
Hexin Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hexin Technology Suzhou Co ltd, Hexin Technology Co ltd filed Critical Hexin Technology Suzhou Co ltd
Priority to CN202310572973.1A priority Critical patent/CN116566399B/zh
Publication of CN116566399A publication Critical patent/CN116566399A/zh
Application granted granted Critical
Publication of CN116566399B publication Critical patent/CN116566399B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/09Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
    • H03M13/091Parallel or block-wise CRC computation
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/61Aspects and characteristics of methods and arrangements for error correction or error detection, not provided for otherwise
    • H03M13/615Use of computational or mathematical techniques
    • H03M13/617Polynomial operations, e.g. operations related to generator polynomials or parity-check polynomials
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/65Purpose and implementation aspects
    • H03M13/6502Reduction of hardware complexity or efficient processing
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/65Purpose and implementation aspects
    • H03M13/6561Parallelized implementations
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/65Purpose and implementation aspects
    • H03M13/6569Implementation on processors, e.g. DSPs, or software implementations
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0056Systems characterized by the type of code used
    • H04L1/0061Error detection codes

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Probability & Statistics with Applications (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Algebra (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Detection And Correction Of Errors (AREA)
  • Error Detection And Correction (AREA)

Abstract

本发明提供一种基于向量多项式乘和指令的CRC32C数据检错方法、系统、终端及介质,利用POWER平台的向量多项式乘和指令集对待运算数据中满足整数判除条件的数据部分进行多项式乘和分割运算操作,同时对待运算数据中的不满足首地址对齐条件的数据头部分以及不满足整数判除条件的数据尾部分进行软件分割查表运算操作计算对应的CRC32C校验结果,以实现在POWER平台进行大量CRC32C数据的校验加速;本发明采用软件和硬件加速的混合方案,针对不同数据的长度做出优化的处理以及对于大量数据采用并行硬件加速,实现高效的数据校验。

Description

基于向量多项式乘和指令的CRC32C数据检错方法、系统、终端 及介质
技术领域
本发明数据校验及通信领域,特别是涉及一种基于向量多项式乘和指令的CRC32C数据检错方法、系统、终端及介质。
背景技术
在数据通信领域中,由于外界干扰等原因,线路接收端接收到的数据报文与发送端所发出的数据报文可能不一致,从而导致数据报文信息误差。这些错误的报文无法准确传达发送端所想表达的意思,影响了用户的通信质量与使用体验。为了确保数据的准确有效,人们发明了很多算法用于校验检测数据。
通讯系统中一般采用循环冗余校验算法(Cyclic Redundancy Check,简称为CRC)对数据进行编码校验。CRC校验算法具有高性能、简单、易于实现等优点,在通讯系统中得到了广泛的应用。
传统的CRC校验使用多项式除法计算得到,理论上目前已知的CRC计算方法有三种:
(1)传统的CRC计算——逐比特计算法;
(2)以字节处理的查表法计算CRC;
(3)硬件实现的并行计算法;
理论上基于硬件实现的并行计算法,可以有效提高其在硬件上的计算效率,充分利用硬件资源。对于校验位较小的CRC不是问题。但是对于校验字较多,比如32位的CRC在硬件上就难以实现。
由于硬件实现CRC的种种限制,目前在通用计算平台上被大量采用的计算方法仍为“以字节处理的查表法计算CRC”,这种方法可以有效缩短计算时间,在处理较大数据时仍有较高的应用效率。但在POWER平台,因为缺少CRC优化计算单元用于并行加速,这种方法并不能最高效发挥平台优势,仍有继续优化的空间。
发明内容
鉴于以上所述现有技术的缺点,本发明的目的在于提供一种基于向量多项式乘和指令的CRC32C数据检错方法、系统、终端及介质,用于解决以上现有技术问题。
为实现上述目的及其他相关目的,本发明提供一种基于向量多项式乘和指令的CRC32C数据检错方法,所述方法包括:基于已知的CRC32C多项式生成对应的预处理CRC常数表;判断待运算数据是否满足首地址对齐条件以及整数判除条件;基于所述预处理CRC常数表,对所述待运算数据中满足整数判除条件的数据部分基于POWER平台的向量多项式乘和指令集执行多项式乘和分割运算操作,以获得对应的多项式乘和CRC32C运算结果;基于所述预处理CRC常数表,对分割获得的所述待运算数据中的不满足首地址对齐条件的数据头部分和/或分割获得的不满足整数判除条件的数据尾部分基于所述预处理CRC常数表执行软件分割查表运算操作,获得对应的查表CRC32C运算结果;基于获得的查表CRC32C运算结果以及多项式乘和CRC32C运算结果获得对应待运算数据的的CRC32C校验结果。
于本发明的一实施例中,所述判断所述待运算数据是否满足首地址对齐条件以及整数判除条件包括:判断所述待运算数据的首地址是否16字节对齐;若是,则所述待运算数据满足首地址对齐条件,并对所述待运算数据进行整数判除条件判断;若否,则所述待运算数据不满足首地址对齐条件,分割获得所述待运算数据中的不满足首地址对齐条件的数据头部分,并对分割数据头部分后的数据进行整数判除条件判断;其中,进行整数判除条件判断的方式包括:判断数据是否包含16字节整数倍数据;若是,则将数据中满足16字节整数倍数据的数据部分作为满足所述整数判除条件的数据部分以及将不满足16字节整数倍数据的数据部分作为不满足所述整数判除条件的数据尾部分并进行分割;若否,则将数据作为不满足整数判除条件的数据尾部分。
于本发明的一实施例中,所述预处理CRC常数表包括:用于进行单字节数据查表计算的单字节CRC32C结果值表、用于进行每行128字节数据查表计算的双字CRC32C结果值表、用于进行每行16字节数据查表计算的单字CRC32C结果值表以及用于进行Barrett归约算法计算的Barrett参数值表。
于本发明的一实施例中,所述多项式乘和分割运算操作包括:检测满足首地址对齐条件的待运算数据中满足整数判除条件的数据部分的数据大小是否大于256字节;若数据大小大于256字节,则基于所述双字CRC32C结果值表以及单字CRC32C结果值表对数据依次执行双字多项式乘和操作以及单字多项式乘和操作,获得64比特长的中间结果;若数据大小小于256字节,则基于所述单字CRC32C结果值表对数据执行单字多项式乘和操作,获得64比特长的中间结果;利用Barrett归约算法,基于所述Barrett参数值表根据获得的64比特长的中间结果计算获得满足16字节的CRC32C运算结果。
于本发明的一实施例中,所述双字多项式乘和操作包括:将数据分割为128字节的数据块;采用向量多项式乘和指令集中的8条并行的双字多项式乘和指令分别对每个数据块中的各16字节数据基于所述双字CRC32C结果值表进行查表计算,获得每个数据块中的各16字节数据的内部运算结果,并与上一个计算的数据块中的对应各16字节数据的内部运算结果进行异或合并获得128字节长的中间结果,以供后续进行单字多项式乘和操作。
于本发明的一实施例中,所述单字多项式乘和操作包括:将数据分割为4字节的数据块;采用向量多项式乘和指令集中的单字多项式乘和指令基于单字CRC32C结果值表同时对四个数据块数据进行查表计算,并对各数据块查表计算获得的结果值进行模二乘积再异或求和运算,以在各数据块运算完毕后获得64比特长的中间结果。
于本发明的一实施例中,所述软件分割查表运算操作包括:采用单字节CRC32C结果值表对分割获得的所述待运算数据中的不满足首地址对齐条件的数据头部分和/或分割获得的不满足整数判除条件的数据尾部分进行以每次单字节数据为单位的查表计算,获得对应的查表CRC32C运算结果。
于本发明的一实施例中,查表计算采用每次右移计算1比特位,每次增加8比特位的数据计算方式。
于本发明的一实施例中,利用Barrett归约算法,基于所述Barrett参数值表根据获得的64比特长的中间结果计算获得满足16字节的CRC32C运算结果包括:基于第一运算公式,根据获得的64比特长的中间结果以及从Barrett参数值表获取的对应64比特长的中间结果的CRC32C参数值计算获得商值;基于第二运算公式,根据获得的64比特长的中间结果以及获得的商值计算余数,以获得满足16字节的CRC32C运算结果;其中,对应64比特长的中间结果的对应CRC32C参数值m的计算公式为:
并且其中,n为已知的CRC32C多项式。
于本发明的一实施例中,所述第一运算公式包括:
q=a·m/264
其中,q为商值,a为获得的64比特长的中间结果,m为对应64比特长的中间结果的对应参数值;
所述第二运算公式包括:
Z=a-qn;
其中,Z为余数,a为获得的64比特长的中间结果,n为已知的CRC32C多项式。
于本发明的一实施例中,对所述CRC32C多项式执行反转操作采用字节反转方式。
于本发明的一实施例中,所述基于获得的查表CRC32C运算结果以及多项式乘和CRC32C运算结果获得对应待运算数据的的CRC运算结果包括:对获得的查表CRC32C运算结果以及多项式乘和CRC32C运算结果异或合并,获得对应待运算数据的CRC32C校验结果。
为实现上述目的及其他相关目的,本发明提供一种基于向量多项式乘和指令的CRC32C数据检错系统,所述系统包括:预处理CRC常数表生成模块,用于基于已知的CRC32C多项式生成对应的预处理CRC常数表;判断模块,连接所述预处理CRC常数表生成模块,用于判断待运算数据是否满足首地址对齐条件以及整数判除条件;多项式乘和分割运算模块,连接所述判断模块,用于基于所述预处理CRC常数表,对所述待运算数据中满足整数判除条件的数据部分基于POWER平台的向量多项式乘和指令集执行多项式乘和分割运算操作,以获得对应的多项式乘和CRC32C运算结果;软件分割查表运算模块,连接所述预处理CRC常数表生成模块以及判断模块,用于基于所述预处理CRC常数表,对分割获得的所述待运算数据中的不满足首地址对齐条件的数据头部分和/或分割获得的不满足整数判除条件的数据尾部分基于所述预处理CRC常数表执行软件分割查表运算操作,获得对应的查表CRC32C运算结果;CRC32C校验结果计算模块,连接所述多项式乘和分割运算模块以及软件分割查表运算模块,用于基于获得的查表CRC32C运算结果以及多项式乘和CRC32C运算结果获得对应待运算数据的CRC32C校验结果。
为实现上述目的及其他相关目的,本发明提供一种基于向量多项式乘和指令的CRC32C数据检错终端,包括:一或多个存储器及一或多个处理器;所述一或多个存储器,用于存储计算机程序;所述一或多个处理器,连接所述存储器,用于运行所述计算机程序以执行所述基于向量多项式乘和指令的CRC32C数据检错方法。
为实现上述目的及其他相关目的,本发明提供一种计算机可读存储介质,存储有计算机程序,所述计算机程序被一个或多个处理器运行时执行所述基于向量多项式乘和指令的CRC32C数据检错方法。
为实现上述目的及其他相关目的,本发明提供一种计算机可读存储介质,其特征在于,存储有计算机程序,所述计算机程序被一个或多个处理器运行时执行所述的方法。
如上所述,本发明是一种基于向量多项式乘和指令的CRC32C数据检错方法、系统、终端及介质,具有以下有益效果:本发明利用POWER平台的向量多项式乘和指令集对待运算数据中满足整数判除条件的数据部分进行多项式乘和分割运算操作,同时对待运算数据中的不满足首地址对齐条件的数据头部分以及不满足整数判除条件的数据尾部分进行软件分割查表运算操作计算对应的CRC32C校验结果,以实现在POWER平台进行大量CRC32C数据的校验加速;本发明采用软件和硬件加速的混合方案,针对不同数据的长度做出优化的处理以及对于大量数据采用并行硬件加速,实现高效的数据校验。
附图说明
图1显示为本发明一实施例中的CRC运算示意图。
图2显示为本发明一实施例中的基于向量多项式乘和指令的CRC32C数据检错方法的流程示意图。
图3显示为本发明一实施例中的预处理CRC常数表示意图。
图4显示为本发明一实施例中的基于向量多项式乘和指令的CRC32C数据检错方法的流程示意图。
图5显示为本发明一实施例中的CRC32C数据的软件分割查表运算示意图。
图6显示为本发明一实施例中的多项式指令计算过程示意图。
图7显示为本发明一实施例中的双字多项式乘和指令运算示意图。
图8显示为本发明一实施例中的单字多项式乘和指令运算示意图。
图9显示为本发明一实施例中的利用Barrett归约算法运算示意图。
图10显示为本发明一实施例中的字节反转原理示意图。
图11显示为本发明一实施例中的基于向量多项式乘和指令的CRC32C数据检错方法的流程示意图。
图12显示为本发明一实施例中的基于向量多项式乘和指令的CRC32C数据检错系统的结构示意图。
图13显示为本发明一实施例中的基于向量多项式乘和指令的CRC32C数据检错终端的结构示意图。
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
需要说明的是,在下述描述中,参考附图,附图描述了本发明的若干实施例。应当理解,还可使用其他实施例,并且可以在不背离本发明的精神和范围的情况下进行机械组成、结构、电气以及操作上的改变。下面的详细描述不应该被认为是限制性的,并且本发明的实施例的范围仅由公布的专利的权利要求书所限定。这里使用的术语仅是为了描述特定实施例,而并非旨在限制本发明。空间相关的术语,例如“上”、“下”、“左”、“右”、“下面”、“下方”、““下部”、“上方”、“上部”等,可在文中使用以便于说明图中所示的一个元件或特征与另一元件或特征的关系。
在通篇说明书中,当说某部分与另一部分“连接”时,这不仅包括“直接连接”的情形,也包括在其中间把其它元件置于其间而“间接连接”的情形。另外,当说某种部分“包括”某种构成要素时,只要没有特别相反的记载,则并非将其它构成要素,排除在外,而是意味着可以还包括其它构成要素。
其中提到的第一、第二及第三等术语是为了说明多样的部分、成分、区域、层及/或段而使用的,但并非限定于此。这些术语只用于把某部分、成分、区域、层或段区别于其它部分、成分、区域、层或段。因此,以下叙述的第一部分、成分、区域、层或段在不超出本发明范围的范围内,可以言及到第二部分、成分、区域、层或段。
再者,如同在本文中所使用的,单数形式“一”、“一个”和“该”旨在也包括复数形式,除非上下文中有相反的指示。应当进一步理解,术语“包含”、“包括”表明存在所述的特征、操作、元件、组件、项目、种类、和/或组,但不排除一个或多个其他特征、操作、元件、组件、项目、种类、和/或组的存在、出现或添加。此处使用的术语“或”和“和/或”被解释为包括性的,或意味着任一个或任何组合。因此,“A、B或C”或者“A、B和/或C”意味着“以下任一个:A;B;C;A和B;A和C;B和C;A、B和C”。仅当元件、功能或操作的组合在某些方式下内在地互相排斥时,才会出现该定义的例外。
本发明的一种基于向量多项式乘和指令的CRC32C数据检错方法,利用POWER平台的向量多项式乘和指令集对待运算数据中满足整数判除条件的数据部分进行多项式乘和分割运算操作,同时对待运算数据中的不满足首地址对齐条件的数据头部分以及不满足整数判除条件的数据尾部分进行软件分割查表运算操作计算对应的CRC32C校验结果,以实现在POWER平台进行大量CRC32C数据的校验加速;本发明采用软件和硬件加速的混合方案,针对不同数据的长度做出优化的处理以及对于大量数据采用并行硬件加速,实现高效的数据校验。
与此同时,为了使本发明的目的、技术方案及优点更加清楚明白,通过下述实施例并结合附图,对本发明实施例中的技术方案的进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定发明。
在对本发明进行进一步详细说明之前,对本发明实施例中涉及的名词和术语进行说明,本发明实施例中涉及的名词和术语适用于如下的解释:
<1>CRC:Cyclic Redundancy Check循环冗余检验,是一种基于已知数据计算一组效验码,用于核对数据传输过程中是否被更改或传输错误的算法。通过在发送端对数据按照某种算法计算出校验码,并将得到的校验码附在数据帧的后面,一起发送到接收端。接收端对收到的数据和校验码按照相同算法进行验证,以此判断接收到的数据是否正确、完整。
假设数据传输过程中需要发送15位的二进制信息g=101001110100001,这串二进制码可表示为代数多项式g(x)=x^14+x^12+x^9+x^8+x^7+x^5+1,其中g中第k位的值,对应g(x)中x^k的系数。将g(x)乘以x^m,即将g后加m个0,然后除以m阶多项式h(x),得到的(m-1)阶余项r(x)对应的二进制码r就是g的CRC编码。这里的h(x)可以自由选择或者使用国际通行标准,一般按照h(x)的阶数m,将CRC算法称为CRC-m,比如CRC-32、CRC-64等。
<2>CRC32C:h(x)的阶数32,其生成多项式为0x1EDC6F41,反转形式为0x82F63B78,作为最新的CRC计算标准。
<3>POWER:Performance Optimization With Enhanced RISC,最通用的几种CPU体系结构之一,一种由IBM开发的一种基于RISC指令系统的架构。相对于我们常见的X86架构的处理器,采用POWER架构的处理器,具有结构简单和高效率的特点。
<4>模二运算:是一种二进制算法,CRC校验技术中的核心部分。模二运算也使用与四则运算相同的运算符,即“+”表示模二加,“-”表示模二减,“×”或“·”表示模二乘,“÷”或“/”表示模二除。与四则运算不同的是模二运算不考虑进位和借位。
4.1模二加减法:就是不需要考虑进位和借位的异或操作,具体规则如下:0±0=0,1±1=0,0±1=1,1±0=1;例如,例:1101±1001=0100。
4.2模二乘积法:类似于普通意义上的多位二进制乘法,不同之处在于后者累加中间结果(或称部分积)时采用带进位的加法,而模二乘法对中间结果的处理方式采用的是模二加法。例:1011×101=100111。
4.3模二除法:需要用到模二加减法,类似于模二乘法不产生借位,规则如下:例:1100100÷1011=111余110。
<5>CRC校验:CRC传输实际上就是在长度为k的数据后面添加供差错检测(FrameCheck Sequence)用的r位冗余码(Redundant code),使原数据构成n=k+r位并发送出去,此方式又叫(n,k)码。可以证明存在一个最高次幂为n-k=r的多项式G(x),根据G(x)可以生成k位信息的校验码,这里的G(x)叫做这个CRC码的生成多项式(Poly);
将长度为k位的数据块对应一个GF(2)多项式M,以8位数据块11100110举例,如果先传输MSB(Most Significant比特),则它对应的多项式为x^7+x^6+x^5+x^2+x(8位对应x的7次幂,因为从x0开始计数,2进制为1时有效)。发送端和接收端约定一个次数为r的CRC多项式即上述的G(x),取CRC-4为例:x^4+x+1,此时r=4。在数据块后面加上r个0对应的多项式为M'。用M'除以CRC-4将得到一个次数等于或小于r-1的余数多项式R,其对应的r位数值则为校验码。发送方通过指定的CRC多项式产生r位的CRC校验码(即将M的末尾加上R发送),接收方则通过该CRC多项式(相同的G(x))来验证收到的报文码的CRC校验码是否为0,具体运算方式如图1所示。
下面以附图为参考,针对本发明的实施例进行详细说明,以便本发明所述技术领域的技术人员能够容易地实施。本发明可以以多种不同形态体现,并不限于此处说明的实施例。
如图2展示本发明实施例中的一种基于向量多项式乘和指令的CRC32C数据检错方法的流程示意图。
所述方法包括:
步骤S1:基于已知的CRC32C多项式生成对应的预处理CRC常数表。
在一实施例中,CRC的运算性质如式(1):
CRC(ABCD)
=CRC(A000 xor BCD)
=CRC(A000 xor B00 xor C0 xor D)
= CRC((A.CRC(1000)) xor (B.CRC(100) ) xor (C.CRC(10)) xor D) (1)
由式(1)的CRC的运算性质推导可知,一个数据可以进行分割,即可以分段独立处理,这也为并行处理提供了可能。同时还有些常数结果,例如上述中的CRC常数运算结果是可以预先计算加速的。
为加速CRC计算的速度,将可以预先计算的部分提前准备好,以节省实际的计算时间,根据方案的整体流程考虑,如图3,我们可以将其分为四个部分:
1、针对小数据(16字节以内)的单字节CRC32C结果值表,用于进行单字节数据查表计算,将每字节(8比特)之间的所有可能值进行枚举;
2、针对大数据(大于256字节)的双字CRC32C结果值表,用于进行每行128字节数据查表计算的,每8字节具有一结果值;
3、针对16~256字节之间长度数据的单字CRC32C结果值表,用于进行每行16字节数据查表计算,每4字节具有一结果值;
4、用于Barrett归约算法计算的Barrett参数值表;其中,Barrett参数值的各Barrett参数值m的计算公式为:
其中,k为根据比特数,n为对应的CRC多项式,且根据n的规模选取合适的k,一般要求
本发明采用的CRC32C多项式,一般取k=64,则对应64比特长的中间结果的对应Barrett参数值m的计算公式为:
并且其中,n为已知的CRC32C多项式。
步骤S2:判断所述待运算数据是否满足首地址对齐条件以及整数判除条件。
在一实施例中,如图4所示,步骤S2包括:
判断所述待运算数据的首地址是否16字节对齐;由于指令运算需要,则需要判断首地址是否16字节对齐;
若是,则所述待运算数据满足首地址对齐条件,并对所述待运算数据进行整数判除条件判断;
若否,则所述待运算数据不满足首地址对齐条件,分割获得所述待运算数据中的不满足首地址对齐条件的数据头部分,并对分割数据头部分后的数据进行整数判除条件判断;
其中,对所述待运算数据进行整数判除条件判断的方式包括:
判断数据是否包含16字节整数倍数据;由于因为硬件指令一次可处理16字节数据,因此需要判断数据中是否包含16字节整数倍数据;
若是,则将数据中满足16字节整数倍数据的数据部分作为满足所述整数判除条件的数据部分以及将不满足16字节整数倍数据的数据部分作为不满足所述整数判除条件的数据尾部分并进行分割;
若否,则将数据作为不满足整数判除条件的数据尾部分。
因为,向量多项式乘和指令一次可以处理16字节,并且数据的起始地址必须要为16字节对齐形式,因此我们会利用多项式乘和分割运算操作分割出可以指令加速的部分,对于不满足这两个条件的其余头尾数据则基于软件查表利用软件分割查表运算操作来计算获得,如图5所示。
举例来说,需要CRC的数据长度为39,分配地址为0x10099bf8。因为地址不满足16字节对齐,需要将8个字节在数据头处理,于是分割头部由查表计算完成,剩余数据地址变为0x10099c00(满足对齐条件);剩余31个字节有一个16字节可以利用多项式乘和分割运算操作加速处理;最后还是15个字节进入数据尾部分,由软件分割查表运算操作计算完成。
步骤S3:基于所述预处理CRC常数表,对所述待运算数据中满足整数判除条件的数据部分基于POWER平台的向量多项式乘和指令集执行多项式乘和分割运算操作,以获得对应的多项式乘和CRC32C运算结果。
其中,多项式指令运算的原理为在计算两个数据的模二乘的过程,多项式乘和指令是以列为基本单位,依次计算乘积结果的每一位,如图6所示。
一个向量多项式乘和指令则可以在6个周期处理16字节的数据(这也是为何可以加速计算的原因),本方法用到的两类指令分别为单字(4字节)和双字(8字节)两种情况,向量多项式乘和指令集包括:双字多项式乘和指令以及单字多项式乘和指令;分别为双字和单字的向量多项式模二乘以及自动完成结果的异或加和的POWER指令,多用于有限域算术运算。
在一实施例中,如图4,所述多项式乘和分割运算操作包括:
检测满足首地址对齐条件的待运算数据中满足整数判除条件的数据部分的数据大小是否大于256字节;
若数据大小大于256字节,则基于所述双字CRC32C结果值表对数据依次执行双字多项式乘和操作以及单字多项式乘和操作,获得64比特长的中间结果;
若数据大小小于256字节,则基于所述单字CRC32C结果值表对数据执行单字多项式乘和操作,获得64比特长的中间结果;
利用Barrett归约算法,基于所述Barrett参数值表根据获得的64比特长的中间结果计算获得满足16字节的CRC32C运算结果。
在一实施例中,所述双字多项式乘和操作包括:
将数据分割为128字节(1024比特)的数据块;
采用向量多项式乘和指令集中的8条并行的双字多项式乘和指令分别对每个数据块中的各16字节数据基于所述双字CRC32C结果值表进行查表计算,获得每个数据块中的各16字节数据的内部运算结果,并与上一个计算的数据块中的对应各16字节数据的内部运算结果进行异或合并因此要保证此循环进行至少需要2个128字节即256字节数据,满足128字节数据全部分割计算同时合并完成后,将获得一128字节长的中间结果,以供后续进行单字多项式乘和操作。
因此,对于大于256字节的部分,对于每组128字节数据会利用指令并行处理方式,一次处理8条双字多项式指令,一次并行计算128字节数据,每条多项式指令将数据按照64比特分割,利用多项式双字指令实现两个8字节相乘,计算过程类似于上述4*4字节计算过程,如图7所示。每组128字节会在运行时彼此之间进行并行的异或操作,内部的16字节彼此异或(如图中右下部分),最后计算后得到一个128字节的中间结果,然后类似小于256字节的部分,采用单字多项式乘和指令对128字节的结果再进行32比特分割,最后得到一个64比特的结果。
在一实施例中,所述单字多项式乘和操作包括:
将数据分割为4字节的数据块;
采用向量多项式乘和指令集中的单字多项式乘和指令做“模二乘法”运算组合,该条指令可以一次计算4个字即4x4=16字节数据,即同时对四个数据块数据基于单字CRC32C结果值表进行查表计算并对各数据块查表计算获得的结果值模二乘积再异或求和运算,因此利用硬件指令加速的最小数据长度为16字节,所有4字节块经过模二乘积再异或求和后,最终将得到一个双字64比特长的中间结果。
其中,所述单字多项式乘和指令的数据处理原理为:
通过先对两个数据内的字彼此之间模二乘(如图6),然后再将所有结果进行异或构成64比特结果,如图8所示:由于CRC的运算具有以下性质:
CRC(ABCD)=CRC(A000 xor BCD)=CRC(A000 xor B00 xor C0 xor D)
=CRC((A.CRC(1000))xor(B.CRC(100))xor(C.CRC(10))xor D);
结合多项式指令的计算情况,再结合CRC拆分的推导,可以看出利用多项式指令可以一次将(A.CRC(1000))xor(B.CRC(100))xor(C.CRC(10))xor D)计算处理;一次可以算出4*4字节=16字节的值。
对于本算法中小于256字节的部分,其计算过程就是按照上述描述,每次计算4x32比特的16字节数据。同样根据上述公式推导,所有的数据最后都可以化简为32比特的段,通过分段计算,然后将所有中间结果异或就构成了一个64比特的数据结果,此结果再进行一次CRC计算即可得到整个数据的CRC值。
在一实施例中,根据根据上述CRC运算性质的公式推导,所有的32比特数据块,最后中间结果都会是一个64比特的中间结果,需要再进行一次CRC计算(即最外层的CRC计算);因为CRC计算是一个模二除操作,除法运算需要开销较高,为简化运算提高速度,采用Barrett方法将除法替换为乘法运算。
使用Barrett归约算法的思想为:如果想要计算a mod n的结果,一般代码的实现形式为:
其中,a为分割后的32比特数据块,n为CRC32C多项式。
但是这个计算中有除法运算,性能开销较大,我们需要用性能开销更小的乘法替换这里的除法,计算出:
可以定义两个整数k和m,构造出一个式子使得:
m/2k≈1/n;(6)
此时我们要优化的目标(6)式就变成了:
q≈a·m/2k;(7)
这样,要计算的(4)式中的除法运算就被拆成了一次乘法和一次位移,大大加快了运算的速度。
此时该取余运算唯一需要考虑的就只剩m和k的取值。
由(6)式可得:
m≈2k/n;(8)
此时,我们只需要预处理出这个除法的结果,就可以在运算时直接调用了。
在实际运算中,为了防止算出的商超过实际的商,一般对(8)进行简化,取:
而对于k而言,为了避免算出的q与实际的商有较大偏离,k的取值要满足:
也就是使得2k≈n2,这样取k时,由(4),(5),(7)可得:
a-qn=a-nam/2k=a/2k·(2k-nm) ; (11)
又因(9),故有:
2k/n-1<m≤2k/n ; (12)
化简得:
0<2k-nm≤n ; (13)
此时只要满足(10),a-qn就在[0,n)的范围内了。
因此,利用Barrett归约算法根据获得的64比特长的中间结果计算获得满足16字节的CRC32C运算结果包括:
如图9所示,首先从Barrett参数值表获取的对应64比特长的中间结果的参数值m;该参数值m的计算公式为:
并且其中,n为已知的CRC32C多项式。
基于第一运算公式,根据获得的64比特长的中间结果以及从Barrett参数值表获取的对应64比特长的中间结果的CRC32C参数值计算获得商值;
所述第一运算公式包括:
q=a·m/264; (14)
其中,q为商值,a为获得的64比特长的中间结果,m为对应64比特长的中间结果的对应参数值;
基于第二运算公式,根据获得的64比特长的中间结果以及获得的商值计算余数,以获得满足16字节的CRC32C运算结果;
所述第二运算公式包括:
Z=a-qn; (15)
其中,Z为余数,a为获得的64比特长的中间结果,n为已知的CRC32C多项式。
误差e=1/n-m/264的存在也使得a-qn只能落在[0,2n),而并非理想情况下的[0,n),如果计算后的余数仍大于除数,还需要花费一段常数时间检测,并消减余数直至余数小于除数。
步骤S4:对不满足首地址对齐条件的待运算数据或满足首地址对齐条件的待运算数据中不满足整数判除条件的数据部分基于所述预处理CRC常数表执行软件分割查表运算操作,获得对应的查表CRC32C运算结果。
在一实施例中,采用单字节CRC32C结果值表对分割获得的所述待运算数据中的不满足首地址对齐条件的数据头部分和/或分割获得的不满足整数判除条件的数据尾部分(16字节以内)进行以每次单字节数据为单位的查表计算,获得对应的查表CRC32C运算结果。
步骤S5:基于获得的查表CRC32C运算结果以及多项式乘和CRC32C运算结果获得对应待运算数据的的CRC32C校验结果。
在一实施例中,若由于待运算数据不满足首地址对齐条件以及不具有满足整数判除条件的数据部分,仅获得查表CRC32C运算结果,则将该查表CRC32C运算结果作为待运算数据的的CRC32C校验结果,进行CRC32C数据检错;
若由于待运算数据满足首地址对齐条件且数据均满足整数判除条件,仅获得多项式乘和CRC32C运算结果,则将该多项式乘和CRC32C运算结果作为待运算数据的的CRC32C校验结果,进行CRC32C数据检错;
若由于待运算数据满足首地址对齐条件且具有满足整数判除条件的数据部分,获得多项式乘和CRC32C运算结果以及查表CRC32C运算结果,则基于多项式乘和CRC32C运算结果以及查表CRC32C运算结果进行处理待运算数据的的CRC32C校验结果,进行CRC32C数据检错。
在一具体实施例中,对获得的查表CRC32C运算结果以及多项式乘和CRC32C运算结果异或合并,获得对应待运算数据的的CRC运算结果。
在一实施例中,原始的CRC计算方式,一次右移一位,即一次只能处理一个比特的数据,但是如果发送的数据块很长的话,效率太低,这种方法就不太适合。
所以我们本发明步骤S3以及S4采用的查表计算可以每次右移计算1位,每次增加8位;先把后8位的所有可能计算出来,这样每次查表,实现一次右移8位。假设reg(每次计算的部分)中放置了前32位,与p(传输数据)拼接构成一个长的计算数据,即reg|p先计算前8比特的crc即CRC(reg&0xFF000000),记为table[i];
在计算前8比特的过程中后面的数据也是一同参与其异或操作,因此如果要得到计算完前比特的结果,后面的拼接构成的数据reg=(reg<<8)|p[i]需要与前比特的CRC值进行异或,即reg=((reg<<8)|p[i])^sum_poly。
查表法原理的推导如下:
CRC(AB)
=CRC(A0 xor B)
=CRC(A0)xor CRC(B)
=CRC(CRC(A0)xor B); (16)
由上述推导获得查表法整个计算过程如下:
for(int i=0;i<8;i++)
reg=((reg<<8)|p[i])^crc_table((reg>>24)&0xFF); (17)
在一实施例中,对于CRC32C多项式,由于其总是首先对最低有效位进行操作,其在内存中是这样排布的如下:[24..31][16..23][8..15][0..7];
为了满足CRC32C运算需要对其进行反转,一般的操作是反转每个字节中的位,变成形如下形式:[31..24][15..8][15..8][7..0];
这样满足运算要求,但对CPU的运算量增加不少。为了提高性能,可以反向加载字节,将反转简化处理为只是字节转换,内部位则没有变换,这样位和字节就会重新变得有序。
如图10所示,这样的话,寄存器的最低有效位在左边,最高有效位在右边,将数据运算逻辑直接进行了反转。之所以可以随意反转数据而不用担心结果出错,是因为之前所说,模2乘法是无进位的,加法和减法也是异或运算的,所以我们的操作不会产生进位,不会对整体结果产生影响。
为了更好的说明上述基于向量多项式乘和指令的CRC32C数据检错方法,本发明提供以下具体实施例。
实施例1:一种基于向量多项式乘和指令的CRC32C数据检错方法。图11为本实施例中的CRC32C数据检错加速方法的流程示意图。
所述方法包括:
步骤S1:利用已知的CRC32C多项式提前算出需要预先处理的CRC常数表。预处理的CRC常数表包括:单字节CRC32C结果值表、双字(8字节)的CRC32C结果值表、单字(4字节)的CRC32C结果值表以及Barrett CRC32C值表;
步骤S2:检测数据的首地址是否16字节对齐(指令运算需要)以及是否包含16字节整数倍数据(因为硬件指令一次可处理16字节数据),对需要进行CRC运算的数据进行整除判断:
(1)如果数据大小在内存中首地址不为16字节对齐以及包含不满足16字节整数倍数据,将会送到步骤S3进行软件分割查表运算;
(2)如果数据大小包含16字节整数倍的数据部分(尾部不满足16字节也进入S3处理),将会直接送到步骤S4进行多项式乘和分割运算;
步骤S3:对头部未对齐的数据以及不满足16字节的数据基于进行单独软件查表运算,即通过查询步骤S1的单字节CRC32C结果值表来加速计算结果,计算出的结果送到步骤S8进行合并。步骤S4进行多项式乘和指令运算后剩余部分不满足16字节也进入此步骤完成计算;
步骤S4:检测数据的大小是否大于256字节:
(1)如果数据大小大于256字节(2048比特),就将数据分割为128字节(1024比特)的小块,送到步骤S5进行处理;
(2)如果数据大小小于256字节(2048比特),就将数据直接送到步骤S6进行处理;
步骤S5:每个128字节(1024比特)块,分别用8条并行的双字多项式乘和指令(双字为8字节)利用双字(8字节)的CRC32C结果值表分别处理16字节(128比特)的数据,同时每个128字节内部运算后的结果与上一组中每个16字节进行异或合并,因此要保证此循环进行至少需要2个128字节即256字节数据,满足128字节数据全部分割计算同时合并完成后,将得到一个128字节长的中间结果再送到步骤S6进行处理。
步骤S6:进入此阶段的数据将会被分割成4字节块,利用单字多项式乘和指令(单字为4字节)利用单字(4字节)的CRC32C结果值表查表计算,再对计算结果做“模二乘法”运算组合,该条指令可以一次计算4个字即4x4=16字节数据,因此利用硬件指令加速的最小数据长度为16字节,所有4字节块经过模二乘积再异或求和后,最终将得到一个双字64比特长的中间结果送到步骤S7进行处理;
步骤S7:利用定点Barrett归约以及Barrett参数值表来简化步骤S6中64比特数据的模2除运算,得到满足16字节部分的CRC32C结果。
步骤S8:异或合并步骤S3和步骤S7单元算出的结果。
与上述实施例原理相似的是,本发明提供一种基于向量多项式乘和指令的CRC32C数据检错系统。
以下结合附图提供具体实施例:
如图12展示本发明实施例中的一种基于向量多项式乘和指令的CRC32C数据检错系统的结构示意图。
所述系统包括:
预处理CRC常数表生成模块1,用于基于已知的CRC32C多项式生成对应的预处理CRC常数表;
判断模块2,连接所述预处理CRC常数表生成模块1,用于判断待运算数据是否满足首地址对齐条件以及整数判除条件;
多项式乘和分割运算模块3,连接所述预处理CRC常数表生成模块1以及所述判断模块2,用于基于所述预处理CRC常数表,对所述待运算数据中满足整数判除条件的数据部分基于POWER平台的向量多项式乘和指令集执行多项式乘和分割运算操作,以获得对应的多项式乘和CRC32C运算结果;
软件分割查表运算模块4,连接所述预处理CRC常数表生成模块1以及判断模块2,用于基于所述预处理CRC常数表,对分割获得的所述待运算数据中的不满足首地址对齐条件的数据头部分和/或分割获得的不满足整数判除条件的数据尾部分基于所述预处理CRC常数表执行软件分割查表运算操作,获得对应的查表CRC32C运算结果;
CRC32C校验结果计算模块5,连接所述多项式乘和分割运算模块3以及软件分割查表运算模块4,用于基于获得的查表CRC32C运算结果以及多项式乘和CRC32C运算结果获得对应待运算数据的CRC32C校验结果。
需说明的是,应理解图12系统实施例中的各个模块的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。且这些模块可以全部以软件通过处理元件调用的形式实现;也可以全部以硬件的形式实现;还可以部分模块通过处理元件调用软件的形式实现,部分模块通过硬件的形式实现;
例如各模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(Application Specific Integrated Circuit,简称ASIC),或,一个或多个微处理器(digital signal processor,简称DSP),或,一个或者多个现场可编程门阵列(Field Programmable Gate Array,简称FPGA)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(CentralProcessing Unit,简称CPU)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上系统(system-on-a-chip,简称SOC)的形式实现。
由于该基于向量多项式乘和指令的CRC32C数据检错系统的实现原理已在前述实施例中进行了叙述,因此此处不作重复赘述。
在一实施例中,所述判断模块2用于判断所述待运算数据的首地址是否16字节对齐;若是,则所述待运算数据满足首地址对齐条件,并对所述待运算数据进行整数判除条件判断;若否,则所述待运算数据不满足首地址对齐条件,分割获得所述待运算数据中的不满足首地址对齐条件的数据头部分,并对分割数据头部分后的数据进行整数判除条件判断;
其中,进行整数判除条件判断的方式包括:判断数据是否包含16字节整数倍数据;若是,则将数据中满足16字节整数倍数据的数据部分作为满足所述整数判除条件的数据部分以及将不满足16字节整数倍数据的数据部分作为不满足所述整数判除条件的数据尾部分并进行分割;若否,则将数据作为不满足整数判除条件的数据尾部分。
在一实施例中,所述预处理CRC常数表包括:用于进行单字节数据查表计算的单字节CRC32C结果值表、用于进行每行128字节数据查表计算的双字CRC32C结果值表、用于进行每行16字节数据查表计算的单字CRC32C结果值表以及用于进行Barrett归约算法计算的Barrett参数值表。
在一实施例中,所述多项式乘和分割运算操作包括:检测满足首地址对齐条件的待运算数据中满足整数判除条件的数据部分的数据大小是否大于256字节;若数据大小大于256字节,则基于所述双字CRC32C结果值表以及单字CRC32C结果值表对数据依次执行双字多项式乘和操作以及单字多项式乘和操作,获得64比特长的中间结果;若数据大小小于256字节,则基于所述单字CRC32C结果值表对数据执行单字多项式乘和操作,获得64比特长的中间结果;利用Barrett归约算法,基于所述Barrett参数值表根据获得的64比特长的中间结果计算获得满足16字节的CRC32C运算结果。
在一实施例中,所述双字多项式乘和操作包括:将数据分割为128字节的数据块;采用向量多项式乘和指令集中的8条并行的双字多项式乘和指令分别对每个数据块中的各16字节数据基于所述双字CRC32C结果值表进行查表计算,获得每个数据块中的各16字节数据的内部运算结果,并与上一个计算的数据块中的对应各16字节数据的内部运算结果进行异或合并获得128字节长的中间结果,以供后续进行单字多项式乘和操作。
在一实施例中,所述单字多项式乘和操作包括:将数据分割为4字节的数据块;采用向量多项式乘和指令集中的单字多项式乘和指令基于单字CRC32C结果值表同时对四个数据块数据进行查表计算,并对各数据块查表计算获得的结果值进行模二乘积再异或求和运算,以在各数据块运算完毕后获得64比特长的中间结果。
在一实施例中,所述软件分割查表运算操作包括:采用单字节CRC32C结果值表对分割获得的所述待运算数据中的不满足首地址对齐条件的数据头部分和/或分割获得的不满足整数判除条件的数据尾部分进行以每次单字节数据为单位的查表计算,获得对应的查表CRC32C运算结果。
在一实施例中,查表计算采用每次右移计算1比特位,每次增加8比特位的数据计算方式。
在一实施例中,利用Barrett归约算法,基于所述Barrett参数值表根据获得的64比特长的中间结果计算获得满足16字节的CRC32C运算结果包括:基于第一运算公式,根据获得的64比特长的中间结果以及从Barrett参数值表获取的对应64比特长的中间结果的CRC32C参数值计算获得商值;基于第二运算公式,根据获得的64比特长的中间结果以及获得的商值计算余数,以获得满足16字节的CRC32C运算结果;其中,对应64比特长的中间结果的对应CRC32C参数值m的计算公式为:并且其中,n为已知的CRC32C多项式。
在一实施例中,所述第一运算公式包括:q=a·m/264;其中,q为商值,a为获得的64比特长的中间结果,m为对应64比特长的中间结果的对应参数值;所述第二运算公式包括:Z=a-qn;其中,Z为余数,a为获得的64比特长的中间结果,n为已知的CRC32C多项式。
在一实施例中,对所述所述CRC32C多项式执行反转操作采用字节反转方式。
在一实施例中,所述基于获得的查表CRC32C运算结果以及多项式乘和CRC32C运算结果获得对应待运算数据的的CRC运算结果包括:对获得的查表CRC32C运算结果以及多项式乘和CRC32C运算结果异或合并,获得对应待运算数据的CRC32C校验结果。
如图13展示本发明实施例中的基于向量多项式乘和指令的CRC32C数据检错终端130的结构示意图。
所述基于向量多项式乘和指令的CRC32C数据检错终端130包括:存储器131及处理器132。所述存储器131用于存储计算机程序;所述处理器132运行计算机程序,实现如图2所述的基于向量多项式乘和指令的CRC32C数据检错方法。
可选的,所述存储器131的数量均可以是一或多个,所述处理器132的数量均可以是一或多个,而图13中均以一个为例。
可选的,所述基于向量多项式乘和指令的CRC32C数据检错终端130中的处理器132会按照如图2所述的步骤,将一个或多个以应用程序的进程对应的指令加载到存储器131中,并由处理器132来运行存储在第一存储器131中的应用程序,从而实现如图2所述基于向量多项式乘和指令的CRC32C数据检错方法中的各种功能。
可选的,所述存储器131,可能包括但不限于高速随机存取存储器、非易失性存储器。例如一个或多个磁盘存储设备、闪存设备或其他非易失性固态存储设备;所述处理器132,可能包括但不限于中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital SignalProcessing,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
可选的,所述处理器132可以是通用处理器,包括中央处理器(CentralProcessing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(ApplicationSpecific Integrated Circuit,简称ASIC)、现场可编程门阵列(Field-ProgrammableGate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
本发明还提供计算机可读存储介质,存储有计算机程序,所述计算机程序运行时实现如图2所示的基于向量多项式乘和指令的CRC32C数据检错方法。所述计算机可读存储介质可包括,但不限于,软盘、光盘、CD-ROM(只读光盘存储器)、磁光盘、ROM(只读存储器)、RAM(随机存取存储器)、EPROM(可擦除可编程只读存储器)、EEPROM(电可擦除可编程只读存储器)、磁卡或光卡、闪存、或适于存储机器可执行指令的其他类型的介质/机器可读介质。所述计算机可读存储介质可以是未接入计算机设备的产品,也可以是已接入计算机设备使用的部件。
由此可知,本发明具有以下优势:
1、实现采用软硬结合的方式对数据进行CRC32C的处理,可以有效提高计算效率,充分利用硬件资源。
2、利用向量多项式乘和指令集对分块后数据进行加速CRC32C计算,实现在POWER平台更高效的实现CRC数据校验。
3、对于不同数据长度进行分类处理,以尽可能达到多种数据长度的性能最优。
4、针对大数据进行并行硬件加速处理,同时循环内再次进行并行合并结果,以达到极致加速。
5、利用定点Barrett归约方法来简化CRC运算结果,开销降低,简化运算提高速度。
6、针对CRC32C采用字节反转来代替位反转,以简化处理的开销。
综上所述,本发明的基于向量多项式乘和指令的CRC32C数据检错方法、系统、终端及介质,利用POWER平台的向量多项式乘和指令集对待运算数据中满足整数判除条件的数据部分进行多项式乘和分割运算操作,同时对待运算数据中的不满足首地址对齐条件的数据头部分以及不满足整数判除条件的数据尾部分进行软件分割查表运算操作计算对应的CRC32C校验结果,以实现在POWER平台进行大量CRC32C数据的校验加速;本发明采用软件和硬件加速的混合方案,针对不同数据的长度做出优化的处理以及对于大量数据采用并行硬件加速,实现高效的数据校验。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
上述实施例仅示例性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,但凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。

Claims (15)

1.一种基于向量多项式乘和指令的CRC32C数据检错方法,其特征在于,所述方法包括:
基于已知的CRC32C多项式生成对应的预处理CRC常数表;
判断待运算数据是否满足首地址对齐条件以及整数判除条件;
基于所述预处理CRC常数表,对所述待运算数据中满足整数判除条件的数据部分基于POWER平台的向量多项式乘和指令集执行多项式乘和分割运算操作,以获得对应的多项式乘和CRC32C运算结果;
基于所述预处理CRC常数表,对分割获得的所述待运算数据中的不满足首地址对齐条件的数据头部分和/或分割获得的不满足整数判除条件的数据尾部分基于所述预处理CRC常数表执行软件分割查表运算操作,获得对应的查表CRC32C运算结果;
基于获得的查表CRC32C运算结果以及多项式乘和CRC32C运算结果获得对应待运算数据的CRC32C校验结果。
2.根据权利要求1中所述的基于向量多项式乘和指令的CRC32C数据检错方法,其特征在于,所述判断待运算数据是否满足首地址对齐条件以及整数判除条件包括:
判断所述待运算数据的首地址是否16字节对齐;
若是,则所述待运算数据满足首地址对齐条件,并对所述待运算数据进行整数判除条件判断;
若否,则所述待运算数据不满足首地址对齐条件,分割获得所述待运算数据中的不满足首地址对齐条件的数据头部分,并对分割数据头部分后的数据进行整数判除条件判断;其中,进行整数判除条件判断的方式包括:
判断数据是否包含16字节整数倍数据;
若是,则将数据中满足16字节整数倍数据的数据部分作为满足所述整数判除条件的数据部分以及将不满足16字节整数倍数据的数据部分作为不满足所述整数判除条件的数据尾部分并进行分割;
若否,则将数据作为不满足整数判除条件的数据尾部分。
3.根据权利要求2中所述的基于向量多项式乘和指令的CRC32C数据检错方法,其特征在于,所述预处理CRC常数表包括:用于进行单字节数据查表计算的单字节CRC32C结果值表、用于进行每行128字节数据查表计算的双字CRC32C结果值表、用于进行每行16字节数据查表计算的单字CRC32C结果值表以及用于进行Barrett归约算法计算的Barrett参数值表。
4.根据权利要求3中所述的基于向量多项式乘和指令的CRC32C数据检错方法,其特征在于,所述多项式乘和分割运算操作包括:
检测满足首地址对齐条件的待运算数据中满足整数判除条件的数据部分的数据大小是否大于256字节;
若数据大小大于256字节,则基于所述双字CRC32C结果值表以及单字CRC32C结果值表对数据依次执行双字多项式乘和操作以及单字多项式乘和操作,获得64比特长的中间结果;
若数据大小小于256字节,则基于所述单字CRC32C结果值表对数据执行单字多项式乘和操作,获得64比特长的中间结果;
利用Barrett归约算法,基于所述Barrett参数值表根据获得的64比特长的中间结果计算获得满足16字节的CRC32C运算结果。
5.根据权利要求4中所述的基于向量多项式乘和指令的CRC32C数据检错方法,其特征在于,所述双字多项式乘和操作包括:
将数据分割为128字节的数据块;
采用向量多项式乘和指令集中的8条并行的双字多项式乘和指令分别对每个数据块中的各16字节数据基于所述双字CRC32C结果值表进行查表计算,获得每个数据块中的各16字节数据的内部运算结果,并与上一个计算的数据块中的对应各16字节数据的内部运算结果进行异或合并获得128字节长的中间结果,以供后续进行单字多项式乘和操作。
6.根据权利要求5中所述的基于向量多项式乘和指令的CRC32C数据检错方法,其特征在于,所述单字多项式乘和操作包括:
将数据分割为4字节的数据块;
采用向量多项式乘和指令集中的单字多项式乘和指令基于单字CRC32C结果值表同时对四个数据块数据进行查表计算,并对各数据块查表计算获得的结果值进行模二乘积再异或求和运算,以在各数据块运算完毕后获得64比特长的中间结果。
7.根据权利要求3中所述的基于向量多项式乘和指令的CRC32C数据检错方法,其特征在于,所述软件分割查表运算操作包括:
采用单字节CRC32C结果值表对分割获得的所述待运算数据中的不满足首地址对齐条件的数据头部分和/或分割获得的不满足整数判除条件的数据尾部分进行以每次单字节数据为单位的查表计算,获得对应的查表CRC32C运算结果。
8.根据权利要求5至7中任一项所述的基于向量多项式乘和指令的CRC32C数据检错方法,其特征在于,查表计算采用每次右移计算1比特位,每次增加8比特位的数据计算方式。
9.根据权利要求4中所述的基于向量多项式乘和指令的CRC32C数据检错方法,其特征在于,利用Barrett归约算法,基于所述Barrett参数值表根据获得的64比特长的中间结果计算获得满足16字节的CRC32C运算结果包括:
基于第一运算公式,根据获得的64比特长的中间结果以及从Barrett参数值表获取的对应64比特长的中间结果的CRC32C参数值计算获得商值;
基于第二运算公式,根据获得的64比特长的中间结果以及获得的商值计算余数,以获得满足16字节的CRC32C运算结果;
其中,对应64比特长的中间结果的对应CRC32C参数值m的计算公式为:
并且其中,n为已知的CRC32C多项式。
10.根据权利要求9中所述的基于向量多项式乘和指令的CRC32C数据检错方法,其特征在于,所述第一运算公式包括:
q=a·m/264
其中,q为商值,a为获得的64比特长的中间结果,m为对应64比特长的中间结果的对应参数值;
所述第二运算公式包括:
Z=a-qn;
其中,Z为余数,a为获得的64比特长的中间结果,n为已知的CRC32C多项式。
11.根据权利要求5或7中所述的基于向量多项式乘和指令的CRC32C数据检错方法,其特征在于,在查表计算时对CRC32C多项式执行反转操作;其中,所述反转操作采用字节反转方式。
12.根据权利要求1中所述的基于向量多项式乘和指令的CRC32C数据检错方法,其特征在于,所述基于获得的查表CRC32C运算结果以及多项式乘和CRC32C运算结果获得对应待运算数据的CRC校验结果包括:
对获得的查表CRC32C运算结果以及多项式乘和CRC32C运算结果异或合并,获得对应待运算数据的CRC32C校验结果。
13.一种基于向量多项式乘和指令的CRC32C数据检错系统,其特征在于,所述系统包括:
预处理CRC常数表生成模块,用于基于已知的CRC32C多项式生成对应的预处理CRC常数表;
判断模块,连接所述预处理CRC常数表生成模块,用于判断待运算数据是否满足首地址对齐条件以及整数判除条件;
多项式乘和分割运算模块,连接所述判断模块,用于基于所述预处理CRC常数表,对所述待运算数据中满足整数判除条件的数据部分基于POWER平台的向量多项式乘和指令集执行多项式乘和分割运算操作,以获得对应的多项式乘和CRC32C运算结果;
软件分割查表运算模块,连接所述预处理CRC常数表生成模块以及判断模块,用于基于所述预处理CRC常数表,对分割获得的所述待运算数据中的不满足首地址对齐条件的数据头部分和/或分割获得的不满足整数判除条件的数据尾部分基于所述预处理CRC常数表执行软件分割查表运算操作,获得对应的查表CRC32C运算结果;
CRC32C校验结果计算模块,连接所述多项式乘和分割运算模块以及软件分割查表运算模块,用于基于获得的查表CRC32C运算结果以及多项式乘和CRC32C运算结果获得对应待运算数据的CRC32C校验结果。
14.一种基于向量多项式乘和指令的CRC32C数据检错终端,其特征在于,包括:一或多个存储器及一或多个处理器;
所述一或多个存储器,用于存储计算机程序;
所述一或多个处理器,连接所述存储器,用于运行所述计算机程序以执行如权利要求1至12中任一项所述的方法。
15.一种计算机可读存储介质,其特征在于,存储有计算机程序,所述计算机程序被一个或多个处理器运行时执行如权利要求1至12中任一项所述的方法。
CN202310572973.1A 2023-05-19 2023-05-19 基于向量多项式乘和指令的crc32c数据检错方法、系统、终端及介质 Active CN116566399B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310572973.1A CN116566399B (zh) 2023-05-19 2023-05-19 基于向量多项式乘和指令的crc32c数据检错方法、系统、终端及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310572973.1A CN116566399B (zh) 2023-05-19 2023-05-19 基于向量多项式乘和指令的crc32c数据检错方法、系统、终端及介质

Publications (2)

Publication Number Publication Date
CN116566399A CN116566399A (zh) 2023-08-08
CN116566399B true CN116566399B (zh) 2023-11-07

Family

ID=87494394

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310572973.1A Active CN116566399B (zh) 2023-05-19 2023-05-19 基于向量多项式乘和指令的crc32c数据检错方法、系统、终端及介质

Country Status (1)

Country Link
CN (1) CN116566399B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117420981A (zh) * 2023-10-24 2024-01-19 上海合芯数字科技有限公司 二进制数基础运算检错方法及装置、存储介质和终端

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101854222A (zh) * 2009-03-31 2010-10-06 华为技术有限公司 一种数据处理的方法、通信装置和系统
CN107239362A (zh) * 2017-02-20 2017-10-10 中国科学院微电子研究所 一种并行crc校验码的计算方法及系统
CN109947368A (zh) * 2019-03-21 2019-06-28 记忆科技(深圳)有限公司 数据可靠性检测方法、装置、计算机设备及存储介质
CN114389755A (zh) * 2022-01-12 2022-04-22 上海黑眸智能科技有限责任公司 一种数据校验方法、装置、存储介质及终端
CN115374048A (zh) * 2022-07-19 2022-11-22 北京融数联智科技有限公司 一种多项式处理方法、fpga端、pc端及存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11444767B1 (en) * 2021-03-03 2022-09-13 Nxp B.V. Method for multiplying polynomials for a cryptographic operation

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101854222A (zh) * 2009-03-31 2010-10-06 华为技术有限公司 一种数据处理的方法、通信装置和系统
CN107239362A (zh) * 2017-02-20 2017-10-10 中国科学院微电子研究所 一种并行crc校验码的计算方法及系统
CN109947368A (zh) * 2019-03-21 2019-06-28 记忆科技(深圳)有限公司 数据可靠性检测方法、装置、计算机设备及存储介质
CN114389755A (zh) * 2022-01-12 2022-04-22 上海黑眸智能科技有限责任公司 一种数据校验方法、装置、存储介质及终端
CN115374048A (zh) * 2022-07-19 2022-11-22 北京融数联智科技有限公司 一种多项式处理方法、fpga端、pc端及存储介质

Also Published As

Publication number Publication date
CN116566399A (zh) 2023-08-08

Similar Documents

Publication Publication Date Title
US8745472B2 (en) Memory with segmented error correction codes
US7562283B2 (en) Systems and methods for error correction using binary coded hexidecimal or hamming decoding
US5440570A (en) Real-time binary BCH decoder
US10243589B2 (en) Multi-bit error correction method and apparatus based on a BCH code and memory system
US5818855A (en) Galois field multiplier for Reed-Solomon decoder
KR920000828B1 (ko) 가로아체(Galois field)연산장치
US9608669B2 (en) Latency reduced error correction scheme with error indication function for burst error correction codes
CN116566399B (zh) 基于向量多项式乘和指令的crc32c数据检错方法、系统、终端及介质
US9075739B2 (en) Storage device
CN102096609A (zh) 可编程循环冗余校验(crc)计算的指令集架构
KR20080018560A (ko) 에러 정정 회로, 그 방법 및 상기 회로를 구비하는 반도체메모리 장치
JPWO2011142133A1 (ja) 誤り訂正符号処理方法及びその装置
CN107239362B (zh) 一种并行crc校验码的计算方法及系统
CN112306741B (zh) 一种crc校验方法及相关装置
EP0836285A2 (en) Reed-Solomon decoder with general-purpose processing unit and dedicated circuits
CN101296053A (zh) 计算循环冗余校验码之方法及系统
CN114389752A (zh) 循环冗余校验码生成方法、装置、设备、介质和程序产品
US6263471B1 (en) Method and apparatus for decoding an error correction code
EP4395183A1 (en) Decoding an error correction code in a galois field based on the verdic theorem
KR102401902B1 (ko) 손실 연산
Xueqiang et al. A high-speed two-cell BCH decoder for error correcting in MLC nor flash memories
EP0991196B1 (en) Method of correcting lost data and circuit thereof
CN116861493B (zh) 一种校验码生成方法、处理器及电子设备
CN111628783A (zh) 一种eg-ldpc译码器
CN117993355A (zh) 一种循环冗余校验的方法及芯片

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant