一种循环冗余校验方法以及多核处理器与流程

文档序号:12747876阅读:194来源:国知局
一种循环冗余校验方法以及多核处理器与流程

本申请涉及通信领域,尤其涉及一种循环冗余校验方法以及多核处理器。



背景技术:

循环冗余校验(英文:cyclic redundancy check,缩写:CRC)是利用除法及余数原理来进行错误侦测(英文:error detecting)的方法。网络设备,如基站控制器、核心网设备等在通信过程中,发送端与接收端约定好一个CRC常量。发送端以该CRC常量作为除数对待发送的原报文段进行取余运算,得到的余数为原报文段的CRC码。发送端将计算得到的原报文段的CRC码附加在原报文段末尾发送给接收端。接收端接收到原报文段后重新计算原报文段的CRC码,并将计算得到的CRC码与发送端发送的CRC码比较。若两个CRC码不同,则认为通信出现了错误。

CRC校验一般在上层协议中由网络设备的处理器来实现。但是现阶段的处理器进行CRC校验的效率较低,在实际应用中尤其是视频等海量数据通信的场景中无法满足应用要求。



技术实现要素:

本申请提供了一种循环冗余校验方法,用于提升多核处理器的CRC处理效率。本申请中还提供了相关的多核处理器。

本申请的第一方面提供了一种CRC方法,适用于多核处理器。其中,该多核处理器包括第一内核在内的多个内核。第一内核将待进行CRC校验的原报文段切割成P个子报文段,该P个子报文段按照从前往后的顺序依次为第一子报文段至第P子报文段,P为大于等于2的正整数。第一内核确定用于处理该P个子报文段的Q个内核,每个内核与其处理的子报文段对应。其中一个内核可以对应一个或多个子报文段,但是一个子报文段只能对应一个内核,Q≤P。第一内核在确定了P个子报文段对应的内核后,将该P个子报文段的切割信息分别发送给对应的内核,切割信息用于唯一确定各子报文段,例如可以为各子报文段的地址信息、或各子报文段在原报文段中的位置信息,也可以为其它类型的信息。该Q个内核获取了对应的子报文段的切割信息后,根据该切割信息,以及内存中的原报文段,获取对应的子报文段。然后该Q个内核分别确定自身对应的子报文段的校验信息,并将自身对应的子报文段的校验信息发送给第一内核。在该Q个内核均向第一内核发送了对应的子报文段的校验信息后,第一内核根据该P个子报文段的校验信息,计算得到原报文段的CRC码。通过这样的方法,第一内核不需要计算整个原报文段的CRC码,而是分配了Q个内核来计算子报文段的校验信息。第一内核只需要进行简单的原报文段切割操作以及P个子报文段的校验信息的运算操作即可。这样就将原报文段的CRC码的计算操作分摊给Q个内核来承担,大大减少了第一内核的计算量,均衡了处理器中各内核的负荷,有利于提升处理器进行CRC校验的效率。

可选的,该P个子报文段中,第i子报文段的切割信息包括第i子报文段相对于原报文段的偏移量offset_i、以及第i子报文段的长度length_i,1≤i≤P。第i子报文段对应的内核能够根据offset_i以及length_i,确定第i子报文段是从原报文段的第offset_i字节开始,长为length_i字节的报文序列。

可选的,该Q个内核确定对应的子报文段的校验信息,具体可以为该Q个内核计算对应的子报文段的等价校验码。其中等价校验码用于表示在第i子报文段的末尾补上j个0后得到的报文段的CRC码,j=原报文段的长度length_sum-offset_i–length_i。第一内核根据P个子报文段的校验信息确定原报文段的CRC码,具体可以为将该P个子报文段的校验信息进行异或,得到原报文段的CRC码。这样只需要进行简单的原报文段切割操作以及P个子报文段的等价校验码的异或操作即可,进一步减少了第一内核的计算量。

可选的,该Q个内核计算对应的子报文段的等价校验码,具体可以为该Q个内核计算对应的子报文段的CRC码,然后根据对应的子报文段的CRC码计算对应的子报文段的等价校验码,以减少直接计算对应的子报文段的等价校验码的查表次数。

可选的,该Q个内核可以通过查找第一CRC表,确定对应子报文段的CRC码。其中第一CRC表列举了单个字节的序列的CRC码。

可选的,该Q个内核可以根据对应的子报文段的CRC码查找第二CRC表,得到对应的子报文段的等价校验码。第二CRC表中列举了多个单比特有效序列的CRC码,单比特有效序列用于表示第一比特位为1其它比特位为0的序列。

可选的,该Q个内核查找第二CRC表格,具体可以是该Q个内核分别确定对应的子报文段的CRC码中每个比特位对应的单比特有效序列,然后在第二CRC表中查找每个比特位对应的单比特有效序列的CRC码,最后将每个比特位对应的单比特有效序列的CRC码进行亦或,就得到了对应的子报文段的等价校验码。这样相比于直接查找第一CRC表格得到对应子报文段的等价校验码,能够减少查表次数。

可选的,多核处理器中还包括内存,该Q个内核根据对应的子报文段的切割信息获取对应的子报文段,具体可以是通过共享内存方式从内存中获取原报文段,然后根据对应子报文段的切割信息以及原报文段得到对应的子报文段。

本申请第二方面提供了一种多核处理器,该多核处理器包括第一内核在内的多个内核。其中,第一内核用于:将待进行CRC校验的原报文段切割成P个子报文段,该P个子报文段按照从前往后的顺序依次为第一子报文段至第P子报文段,P为大于等于2的整数。确定用于处理该P个子报文段的Q个内核,其中每个内核与其处理的子报文段对应,Q≤P。将该P个子报文段的切割信息发送给对应的内核。该Q个内核用于:在获取了对应的子报文段的切割信息后,根据切割信息,获取对应的子报文段。获取了对应的子报文段后,计算对应的子报文段的校验信息,然后将对应子报文段的校验信息发送给第一内核。第一内核还用于:接收该Q个内核中每个内核发送的对应子报文段的校验信息,得到该P个子报文段的校验信息。然后根据该P个子报文段的校验信息,计算原报文段的CRC码。本申请提供的多核处理器中,第一内核只需要进行简单的原报文段切割操作以及P个子报文段的校验信息的运算操作即可。这样就将原报文段的CRC码的计算操作分摊给Q个内核来承担,大大减少了第一内核的计算量,处理器中各内核的负荷更为均衡,进行CRC校验的效率较高。

可选的,该P个子报文段中,第i子报文段的切割信息包括第i子报文段相对于原报文段的偏移量offset_i、以及第i子报文段的长度length_i,1≤i≤P。第i子报文段对应的内核具体用于:根据offset_i以及length_i,确定第i子报文段是从原报文段的第offset_i字节开始,长为length_i字节的报文序列。

可选的,该Q个内核具体用计算对应的子报文段的等价校验码。其中等价校验码用于表示在第i子报文段的末尾补上j个0后得到的报文段的CRC码,j=原报文段的长度length_sum-offset_i–length_i。第一内核具体用于将该P个子报文段的校验信息进行异或,得到原报文段的CRC码。这样第一内核只需要进行简单的原报文段切割操作以及P个子报文段的等价校验码的异或操作即可,能够进一步减少第一内核的计算量。

可选的,该Q个内核具体用于计算对应的子报文段的CRC码,然后根据对应的子报文段的CRC码计算对应的子报文段的等价校验码,以减少直接计算对应的子报文段的等价校验码的查表次数。

可选的,该Q个内核还用于通过查找第一CRC表,确定对应子报文段的CRC码。其中第一CRC表列举了单个字节的序列的CRC码。

可选的,该Q个内核还用于根据对应的子报文段的CRC码查找第二CRC表,得到对应的子报文段的等价校验码。第二CRC表中列举了多个单比特有效序列的CRC码,单比特有效序列用于表示第一比特位为1其它比特位为0的序列。

可选的,该Q个内核还用于分别确定对应的子报文段的CRC码中每个比特位对应的单比特有效序列,然后在第二CRC表中查找每个比特位对应的单比特有效序列的CRC码,最后将每个比特位对应的单比特有效序列的CRC码进行亦或,就得到了对应的子报文段的等价校验码。这样相比于直接查找第一CRC表格得到对应子报文段的等价校验码,能够减少查表次数。

可选的,多核处理器中还包括内存,该Q个内核还用于通过共享内存方式从内存中获取原报文段,然后根据对应子报文段的切割信息以及原报文段得到对应的子报文段。

附图说明

图1为本申请提供的多核处理器一个实施例结构图;

图2为本申请提供的CRC方法一个实施例流程图。

具体实施方式

本申请提供了一种循环冗余校验CRC方法,能够提升多核处理器的CRC处理效率。本申请还提供了相关的多核处理器,以下将分别进行描述。

处理器的内核(英文:core,又名:Die)又称为处理器的核心,是处理器的最重要组成部分。单个处理器中可以部署有一个或多个内核。若处理器中部署的内核个数M不小于2,则处理器称为多核处理器。图1仅以M=8为例进行描述。如图1所示,多核处理器100的八个内核分为为第一内核101、第二内核102、第三内核103、第四内核104、第五内核105、第六内核106、第七内核107以及第八内核108。其中第一内核为主内核,负责协调其它内核对报文进行处理。多核处理器中还包括用于存储数据的内存109,如双倍速率同步动态随机存储器(英文:double data rate synchronous dynamic random access memory,缩写:DDR SDRAM,简称:DDR)。其中,每个内核与所述内存以总线的方式进行连接,且每个内核通过共享内存的方式访问所述内存中的数据。

下面在图1所示的多核处理器的基础上,介绍本申请提供的CRC方法的实施例一,其基本流程请参阅图2,包括:

201、第一内核将原报文段切割成P个子报文段。

若内存中有原报文段待进行CRC校验,则第一内核将该原报文段切割成P个子报文段,P为大于等于2的正整数。该P个子报文段按照从前往后的顺序依次为第一子报文段X1、第二子报文段X2、……第P子报文段XP

举例来说,若原报文段为9字节报文段报文段a1a2a3b1b2b3c1c2c3,第一内核将原报文段切割成3个子报文段X1、X2、X3,则X1=a1a2a3,X2=b1b2b3,X3=c1c2c3

可选的,第一内核可以尽可能的平均切割该原报文段。举例来说:在一种平均切割方法中,第一内核可以将原报文段切割成等长的P个子报文段。若原报文段多余出k个字节不能被P整除,则第一内核将该k个字节分摊到k个子报文段中。如若原报文段长度为500字节,P=8,则切割得到4个长度为62的子报文段以及4个长度为63的子报文段。在另一种平均切割方法中,若原报文段多余出k个字节不能被P整除,则第一内核将该k个字节分配到其中一个子报文段上。如若原报文段长度为500字节,P=8,则切割得到7个长度为62字节的子报文段以及1个长度为66的子报文段。

第一内核将原报文切割后能够得到各子报文段的切割信息,切割信息用于唯一确定各子报文段,具体可以为各子报文段的地址信息、或各子报文段在原报文段中的位置信息,也可以为其它类型的信息。举例来说:切割信息可以包括各子报文段相对于原报文段的偏移量,以及各子报文段的长度。处理器中的各内核只要获取了子报文段的切割信息,就能够根据原报文段以及该切割信息还原出子报文段中的内容。为了便于描述,本申请中用offset_i表示Xi相对于原报文段的偏移量(即Xi的起始位置距离原报文段的起始位置的距离),用length_i表示Xi的长度,用length_sum表示原报文段的长度,1≤i≤P。

值得指出的是,切割后的子报文段也能够还原成原报文段。举例来说,可以在子报文段的末尾补零,使得子报文段的末尾与原报文段的末尾对齐,即在Xi的末尾补上一个全零的序列Yi,其中Yi的字节数等于:length_sum-offset_i–length_i。为了便于描述,本申请中用XiYi表示Yi紧跟在Xi后的报文序列(即补零后的第i子报文段),将XiYi的CRC码称为第i子报文段的等价校验码。可以理解的,将补零后的各子报文段进行异或即可得到原报文段,即原报文段=X1Y1^X2Y2^……^XiYi……^XPYP。其中需要特别指出的,YP的位数为0,即XPYP=XP

举例来说,若原报文段为a1a2a3b1b2b3c1c2c3,X1=a1a2a3,X2=b1b2b3,X3=c1c2c3,则X1Y1=a1a2a30 0 0 0 0 0,X2Y2=b1b2b30 0 0,X3Y3=c1c2c3。原报文段a1a2a3b1b2b3c1c2c3=X1Y1^X2Y2^X3Y3=a1a2a30 0 0 0 0 0^b1b2b30 0 0^c1c2c3

202、第一内核将所述P个子报文段的切割信息发送给对应的Q个内核。

第一内核确定用于处理该P个子报文段的Q个内核。为了便于表述,本申请中将用于处理某个子报文段的内核称为该子报文段对应的内核,将某个内核处理的子报文段称为该内核对应的子报文段。其中,一个子报文段只能对应一个内核。多个子报文段可以对应同一个内核,也可以对应不同的内核。该P个子报文段共对应Q个内核。

可选的,该P个子报文段可以和该Q个内核是一一对应的关系,即P=Q。

可选的,第一内核可以是该Q个内核中的一个,也可以不属于该Q个内核。特别的,若第一内核是该Q个内核中的一个,则第一内核可以不执行向自己发送对应的子报文段的步骤。

可选的,该Q个内核可以是多核处理器中的部分内核,但为了充分利用多核处理器的处理资源,该Q个内核也可以是多核处理器的全部内核,即Q=M。

第一内核确定了该P个子报文段对应的内核后,将该P个子报文段的切割信息分别发送给对应的内核。

203、Q个内核根据对应的子报文段的切割信息获取对应的子报文段。

处理器中的各内核能够通过共享内存的方式访问内存中的原报文段。该Q个内核获取了对应的子报文段的切割信息后,根据该切割信息,以及内存中的原报文段,获取对应的子报文段。

举例来说:假设第二内核对应第二子报文段X2,则第二内核从第一内核处接收X2的切割信息offset_2以及length_2,并通过共享内存的方式获取原报文段,然后确定X2从原报文段的第offset_2字节开始,长为length_2字节。这样第二内核就获取了X2

204、Q个内核确定对应的子报文段的校验信息并发送给第一内核。

通过步骤201~203,该Q个内核已经获取了各自对应的子报文段。于是该Q个内核分别确定自身对应的子报文段的校验信息,并将自身对应的子报文段的校验信息发送给第一内核。

其中,子报文段的校验信息为根据子报文段计算得到的信息,用于第一内核根据每个子报文段的校验信息来计算原报文段的CRC码。校验信息的具体形式与计算方法将在后面的实施例中详述,本实施例中不做限定。

特别的,若第一内核是该Q个内核中的一个,则第一内核可以不执行向自己发送对应的子报文段的校验信息的步骤。

205、第一内核根据P个子报文段的校验信息,确定原报文段的CRC码。

在该Q个内核均向第一内核发送了对应的子报文段的校验信息后,第一内核就能够获取该P个子报文段的校验信息。于是第一内核根据该P个子报文段的校验信息,计算得到原报文段的CRC码。

第一内核根据P个子报文段的校验信息计算原报文段的CRC码的具体方法将在后面的实施例中详述,此处不做限定。

本实施例中,第一内核将原报文段切割成P个子数据段,并将该P个子报文段的切割信息发送给对应的Q个内核。该Q个内核计算得到该P个子报文段的校验信息发送给第一内核,第一内核根据该P个子报文段的校验信息得到原报文段的CRC码。通过上述方法可以看出,本实施例中第一内核不需要计算整个原报文段的CRC码,而是分配了Q个内核来计算子报文段的校验信息。第一内核只需要进行简单的原报文段切割操作以及P个子报文段的校验信息的运算操作即可。这样就将原报文段的CRC码的计算操作分摊给Q个内核来承担,大大减少了第一内核的计算量,均衡了处理器中各内核的负荷,有利于提升处理器进行CRC校验的效率。

上面的实施例中论述了本申请提供的CRC方法的基本流程,下面将对步骤204~205中提到的计算子报文段的校验信息,以及根据子报文段的校验信息计算原报文段的CRC码的具体方法进行描述:

在本申请的实施例二中,步骤204所描述的Q个内核确定对应的子报文段的校验信息,具体可以为该Q个内核计算对应的子报文段的等价校验码。内核计算子报文段的等价校验码的方法有很多,将在后面的实施例中详述,此处不做限定。该Q个内核将对应的子报文段的校验信息发送给并发送给第一内核,具体可以为将该Q个内核将对应的子报文段的等价校验码发送给第一内核。以第二内核为例:假设第二内核对应第二子报文段X2,则第二内核根据步骤203中获取到的X2,计算X2的等价校验码(即X2Y2的CRC码)作为X2的校验信息,并将X2的校验信息发送给第一内核。步骤205所描述的第一内核根据P个子报文段的校验信息确定原报文段的CRC码,具体可以为将该P个子报文段的校验信息进行异或,得到原报文段的CRC码。

实施例二中,Q个内核分别计算对应子报文段的等价校验码,第一内核将该P个子报文段的等价校验码进行异或,就得到了原报文段的CRC码。可以看出,第一内核不需要计算整个原报文段的CRC码,只需要进行简单的原报文段切割操作以及P个子报文段的等价校验码的异或操作即可,进一步减少了第一内核的计算量。

实施例二提供的CRC方法中,各内核计算对应的子报文段的等价校验码,第一内核将各子报文段的等价校验码进行异或,得到了原报文段的CRC码。其中,各子报文段的等价校验码的异或等于原报文段的CRC码的原因如下:

首先明确本申请中“/”表示模2除运算,“^”表示异或运算,“*”表示模2乘运算。设两个报文序列分别为D1、D2,CRC常量为P。且:

D1/P=Q1余R1,即D1的CRC码为R1; (1.1)

D2/P=Q2余R2,即D2的CRC码为R2。 (1.2)

则由(1.1)(1.2)变换可得:

D1=(P*Q1)^R1; (1.3)

D2=(P*Q2)^R2。 (1.4)

将(1.3)与(1.4)进行异或,得到:

D1^D2=(P*Q1)^R1^(P*Q2)^R2

=(P*Q1)^(P*Q2)^R1^R2。 (1.5)

计算等式(1.5)左右两边的CRC码,其中,由于(P*Q1)^(P*Q2)能够被P整除,故D1^D2的CRC码=R1^R2。 (1.6)

根据(1.6)可知,原报文段的CRC码可以由各子报文段的等价校验码异或而得到,即原报文段的CRC码=X1Y1的CRC码^X2Y2的CRC码^……^XiYi的CRC码……^XPYP的CRC码。

上面的实施例中,各内核分别计算对应的子报文段的等价校验码,第一内核将各子报文段的等价校验码进行异或得到原报文段的CRC码。下面将进一步介绍各内核计算等价校验码的方法。

CRC码从定义上说,是将报文段对CRC常量进行取余运算得到的余数。但是取余操作实现起来较为繁琐,在实际工程中多采用查表法来计算CRC码以避免取余操作。在现有技术的查表法中,处理器需要在内存中维护一张第一CRC表,以现有常用的长度为256的CRC表为例:处理器维护一张第一CRC表,第一CRC表中列举了单个字节的256种取值的CRC码。处理器根据第一CRC表,逐个字节的确定报文段的CRC码。具体的确定方法为:

(1)将第f-1字节的CRC码的低八位左移8位,;

(2)将第f-1字节的CRC码的高八位与第f字节进行异或;

(3)在第一CRC表中,查找(2)的结果对应的CRC码;

(4)将(1)、(3)的结果进行异或,得到第f字节的CRC码。

其中f为正整数且不大于报文段的字节数。且定义当f取值为1时,第0字节的CRC码为0。当处理器对报文段的所有字节依次执行了步骤(1)~(4)后,就得到了报文段的CRC码。

本申请中仅以长度为256的CRC表为例来介绍现阶段的查表法,在实际工程中也可以采用长度为128或512的CRC表来进行查表操作,本申请中不做限定。

从步骤(1)~(4)中可以看出,现有技术的查表法无需进行取余操作,在实现起来的时候较为简单,能够提高处理器的CRC计算效率。因此在本申请的实施例三中,各内核可以采用现有技术提供的查表法计算对应子报文段的等价校验码。每个内核计算对应的子报文段的等价校验码的流程可以参阅步骤(1)~(4),此处不做赘述。

但是,从步骤(3)中可以看出,查表法需要对报文段的每个字节都查阅一次第一CRC表,故其查表次数与报文段的字节数相等。而在本申请的X1Y1~XPYP报文段中,单是X1Y1报文段的字节数就与原报文段的字节数相同。因此若直接使用查表法,则单确定X1Y1的CRC码所需要执行的查表次数,就与直接确定原报文段的CRC码所需的查表次数相当,而确定X1Y1~XPYP全部的CRC码则要进行更多的查表操作,大大增加了处理器的负担。

申请人经过研究发现,本申请的X1Y1~XPYP报文段具有特殊性:Y1~YP是全零序列。这种末尾为全零序列的报文段在计算CRC码的时候可以进一步简化。为此,本申请实施例四还提供了一种计算等价校验码的优化方法,适用于各内核计算对应的子报文段的等价校验码,下面将对该方法进行详细介绍:

本申请中,将第一位不为零,余下位均为零的报文段称为单比特有效序列。每个报文段均可以拆分成一个或多个单字节有效的报文段的异或,以两个字节的16位报文段为例:报文段1001 0000 1001 0000=1000 0000 0000 0000^1 0000 0000 0000^1000 0000^1 0000。

假设XiYi拆分成了多个单比特有效序列的异或,则XiYi的CRC码等于其拆分得到的多个单字节有效报文段的CRC码的异或。仍以上一段中的16位报文段为例:报文段1001 0000 1001 0000的CRC码=1000 0000 0000 0000的CRC码^1 0000 0000 0000的CRC码^1000 0000的CRC码^1 0000的CRC码。

在序列长度有上限的前提下,单比特有效序列是很容易穷举的,因此可选的,本申请中将全部单比特有效序列的CRC码提前计算出来,记录在第二CRC表中,并保存在多核处理器的内存内。在需要确定单比特有效序列的CRC码时,只需要在第二CRC表中进行查找即可。

表1给出了第二CRC表的一个具体实例。在实际工程中,第二CRC表也可以为其它形式,只要其与表1一般记录了各单比特有效序列的CRC码即可。第二CRC表中记录的序列的长度可以根据实际需要来确定,此处不做限定。

表1

仍以上文中的16位报文段为例:若要计算报文段1001 0000 1001 0000的CRC码,则在表1中分别查找序列1000 0000 0000 0000的CRC码、序列1 0000 0000 0000的CRC码、序列1000 0000的CRC码、以及序列1 0000的CRC码,然后计算1001 0000 1001 0000的CRC码=1000 0000 0000 0000的CRC码^1 0000 0000 0000的CRC码^1000 0000的CRC码^1 0000的CRC码。

需要指出的是,上面的论述仅仅是从原理的角度来对本申请提供的一种查表法进行解释,在实际应用中,并不需要将报文段真实的拆分成多个单比特有效序列,只需要按照报文段的每个比特位的值查阅第一CRC表即可。例如若要确定报文段1001 0000 1001 0000的CRC码,则由于报文段的右数第5位、第8位、第13位、和第16位为1,则在实际应用中,只需要在表1中查找第5个CRC码、第8个CRC码、第13个CRC码、以及第16个CRC码即可。

可以理解的,若通过查找第二CRC表来确定XiYi的CRC码,则查找第二CRC表的次数与Xi中的非零比特数相等。而实施例三中查找第一CRC表的次数与XiYi的字节数相等。在Xi较短而Yi较长的时候,通过查找第二CRC表来确定XiYi的CRC码能够有效的减少查表次数。例如,设Xi有2个字节,其中共有10个非零比特,而Yi有20个字节。则实施例三提供的方法需要查阅2+20=22次第一CRC表才能得到XiYi的CRC码,而实施例四只需要查阅10次第二CRC表就能够得到XiYi的CRC码。且实施例四中只需要对查表结果进行异或即可,相比实施例三而言运算操作更为简单,能够提升处理器的CRC处理效率。

但是由于实施例四需要逐个比特的查阅第二CRC表,故在Xi较长的时候,实施例四的查表次数会远多于实施例三。例如,设Xi有10字节,且每个字节中的每个比特均不为零,则通过实施例四需要查阅10×8=80次第二CRC表,而实施例三的查表法只需要查阅10次第一CRC表即可。

针对上述情况,本申请对实施例四进行了改进得到实施例五,用于减少查找第二CRC表的次数。其具体方法如下:

(A)内核根据实施例三提供的查表法查找第一CRC表,得到Xi的CRC码Ci,其中查找第一CRC表的次数等于Xi的字节数,Ci的长度不多于CRC常量减一;

(B)内核将CiYi作为待求取CRC码的报文序列,并根据实施例四提供的查表法查找第二CRC表,得到CiYi的CRC码,CiYi的CRC码即等于XiYi的CRC码。其中查找第二CRC表的次数等于Ci的非零比特位个数。由于Ci的长度较短,故查找第二CRC表的次数较少。

步骤(A)(B)查表的总次数等于Xi的字节数+Ci的非零比特数。与实施例四中查表次数等于Xi中的非零比特数相比,在Xi较长且非零位较多的场景下,实施例五的查表次数远少于实施例四的查表次数。与实施例三中查表次数等于XiYi的字节数相比,在在Yi略长(如大于两字节)的场景下,实施例五的查表次数远少于实施例三的查表次数。

步骤(B)中内核计算CiYi的CRC码得到XiYi的CRC码,CiYi的CRC码等于XiYi的CRC码的原因如下:

已知Ci为Xi的CRC码,设CRC常量为P,Yi的字节数为n,则Xi/P=Q3余Ci,即:

Xi=(P*Q3)^Ci; (2.1)

将(2.1)等式左右两边同时左移n字节(即8n比特)后得到:

XiYi=[(P*Q3)Yi]^(CiYi)。 (2.2)

将(2.2)左右两边同时除以CRC常量P,得到:

XiYi/P={[(P*Q3)Yi]^(CiYi)}/P。 (2.3)

由于[(P*Q3)Yi]能够被P整除,故{[(P*Q3)Yi]^(CiYi)}/P的余数与CiYi/P的余数相等。因此,XiYi的CRC码等于CiYi的CRC码。

上面的实施例中介绍了本申请提供的CRC方法。下面将在实施例六中介绍本申请提供的用于实现上述CRC方法的多核处理器。

本申请实施例六提供的多核处理器包括第一内核在内的多个内核,还可以包括用于存储数据的内存,具体结构可以参阅图1。其中,图1仅以具有八个内核的处理器为例进行了描述,在实际应用中多核处理器也可以具有更少或更多的内核,本申请中不做限定。

其中,第一内核101具体用于:在有原报文段待进行CRC校验时,将该原报文段切割成P个子报文段,P为大于等于2的整数。该P个子报文段按照从前往后的顺序依次为第一子报文段X1至第P子报文段XP。第一内核101确定该P个子报文段中每个子报文段对应的内核,并该P个子报文段的切割信息分别发送给对应的内核。其中该P个子报文段共对应Q个内核,Q≤P。第一内核101在确定了P个子报文段对应的内核后,将该P个子报文段的切割信息发送给对应的内核。各子报文段的切割信息中可以包括各子报文段相对于原报文段的偏移量,以及各子报文段的长度。

该Q个内核具体用于:该Q个内核中的每个内核在获取了对应的子报文段的切割信息后,根据切割信息,获取对应的子报文段。Q个内核中的每个内核获取了对应的子报文段后,计算对应的子报文段的校验信息,然后将对应子报文段的校验信息发送给第一内核101。

第一内核101还用于:接收该Q个内核中每个内核发送的对应子报文段的校验信息,得到该P个子报文段的校验信息。然后根据该P个子报文段的校验信息,计算原报文段的CRC码。

本实施例中,第一内核101将原报文段切割成P个子数据段,并将该P个子报文段的切割信息发送给对应的Q个内核。该Q个内核计算得到该P个子报文段的校验信息发送给第一内核101,第一内核101根据该P个子报文段的校验信息得到原报文段的CRC码。通过上述方法可以看出,本实施例中第一内核101不需要计算整个原报文段的CRC码,而是将计算原报文段的CRC码的任务分配给Q个内核。本实施例提供的多核处理器中,第一内核101只需要进行简单的原报文段切割操作以及P个子报文段的校验信息的运算操作即可。这样就将原报文段的CRC码的计算操作分摊给Q个内核来承担,大大减少了第一内核101的计算量,处理器中各内核的负荷更为均衡,进行CRC校验的效率较高。

可选的,该P个子报文段中的Xi的切割信息包括:Xi相对于原报文段的起始位置的偏移量offset_i,以及Xi的长度length_i,1≤i≤P。Xi对应的内核用于根据Xi对应的切割信息,从共享内存的原报文段中获取Xi为:从原报文段的第offset_i字节开始,长度为length_i的报文序列。

可选的,该Q个内核用于确定Xi的校验信息,具体为用于确定Xi的等价校验码。Xi的等价校验码等于:在Xi的末尾补上一个全零的序列Yi后的报文序列XiYi的CRC码。其中其中Yi的字节数等于:length_sum-offset_i–length_i。第一内核101根据该P个子报文段的校验信息确定原报文段的CRC码,具体为将该P个子报文段的等价校验码进行异或,得到原报文段的CRC码。

可选的,该Q个内核用于确定对应的子报文段的等价校验码,具体可以是用于先确定对应的子报文段的CRC码,再根据对应子报文段的CRC码,确定对应子报文段的等价校验码。

可选的,该Q个内核中的每个内核具体用于:通过查找第一CRC表确定对应子报文段的CRC码。其中第一CRC表中列举了多个长度为一个字节的报文序列的CRC码。然后各内核在第二CRC表中查找:对应的子报文段的CRC码的每个非零比特位对应的单比特有效序列的CRC码。其中,第二CRC表中列举了多个单比特有效序列的CRC码,单比特有效序列用于表示第一比特位为1且其它比特位为0的序列。然后各内核将对应子报文段的每个非零比特位对应的单比特有效序列的CRC码进行异或,就得到了对应子报文段的CRC码。

可选的,多核处理器还包括内存109,用于保存原报文段。该Q个内核还用于:根据对应的子报文段的切割信息,通过共享内存的方式从内存中的原报文段中获取对应的子报文段。

上述装置的相关描述可以对应参阅方法实施例部分的相关描述和效果进行理解,本处不做过多赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

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

以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1