加速压缩方法以及使用此方法的装置与流程

文档序号:11198962阅读:962来源:国知局
加速压缩方法以及使用此方法的装置与流程

本发明关于一种微处理器技术,特别是一种加速压缩方法以及使用此方法的装置。



背景技术:

字符串匹配方法通常可归类为:基于内容可寻址内存(cam-,contentaddressablememory-based);和基于散列(hash-based);两种。以上所述的字符串匹配都需要优化的最长字串匹配方法,而优化传统上以软件实现。然而,软件的执行效能往往劣于专属硬件的执行效能。因此,需要一种使用专属硬件的加速压缩方法以及使用此方法的装置,用以克服上述缺陷。



技术实现要素:

本发明的实施例提出一种加速压缩方法,实施于压缩加速器中,至少包含以下步骤:提供第一字符串和第二字符串;以及,反复执行循环,用以决定于第一字符串及第二字符串间的匹配长度。在循环的每一迭代中,从第一字符串中取得n个连续字符作为源字符串;将源字符串中的每个字符单独地与第二字符串中的所有字符比较以生成n个第一匹配结果;根据n个第一匹配结果生成第二匹配结果;根据第二匹配结果判断是否存在n个连续字符的匹配;当不存在上述n个连续字符的匹配时,更新并输出匹配长度,并且结束循环;以及当存在上述n个连续字符的匹配时,将匹配长度加上n及继续循环的下一迭代。

本发明的实施例提出一种加速压缩装置,至少包含滑动窗口缓存器、预取缓存器、掩码寄存器、n个字符串比较器、位移比较器、结果检查器及控制器,其中n大于1。预取缓存器锁存第一字符串中的n个连续字符作为源字符串,滑动窗口缓存器锁存第二字符串,以及掩码寄存器锁存掩码。n个字符串比较器将源字符串中的每个字符单独地与第二字符串中的所有字符比较,用以生成n个第一匹配结果。位移比较器根据n个第一匹配结果生成第二匹配结果。结果检查器根据第二匹配结果判断是否存在n个连续字符的匹配。当不存在上述n个连续字符的匹配时,控制器更新并输出匹配长度。当存在上述n个连续字符的匹配时,控制器将匹配长度加上n及控制预取缓存器以锁存第一字符串中的后续n个连续字符作为新源字符串。

附图说明

图1是根据本发明实施例的微处理器的系统架构图。

图2是根据本发明实施例的压缩加速器的方块图。

图3是根据本发明实施例的字符串比较器的方块图。

图4是根据本发明实施例的位移比较器的方块图。

图5是根据本发明实施例的结果检查器的方块图。

图6是根据本发明实施例的加速压缩的方法流程图。

图7a及图7b是根据本发明实施例的最大匹配长度计算示意图。

图8a及图8b是根据本发明实施例的最长字符串匹配器的方块图。

图9a是根据本发明实施例的第1级位移比较器的方块图。

图9b是根据本发明实施例的第2级位移比较器的方块图。

图9c是根据本发明实施例的第3级位移比较器的方块图。

图9d是根据本发明实施例的第4级位移比较器的方块图。

图10是根据本发明实施例的结果检查器的方块图。

图11a及图11b是根据本发明实施例的加速压缩的方法流程图。

图12是根据本发明实施例的最大匹配长度计算示意图。

图13是根据本发明实施例的加速压缩的方法流程图。

具体实施方式

以下说明是为完成发明的较佳实现方式,其目的在于描述本发明的基本精神,但并不用以限定本发明。实际的发明内容必须参考之后的权利要求范围。

必须了解的是,使用于本说明书中的“包含”、“包括”等词,是用以表示存在特定的技术特征、数值、方法步骤、作业处理、元件以及/或组件,但并不排除可加上更多的技术特征、数值、方法步骤、作业处理、元件、组件,或以上的任意组合。

在权利要求中使用如“第一”、“第二”、“第三”等词是用来修饰权利要求中的元件,并非用来表示之间具有优先权顺序,先行关系,或者是一个元件先于另一个元件,或者是执行方法步骤时的时间先后顺序,仅用来区别具有相同名字的元件。

图1是根据本发明实施例的微处理器的系统架构图。微处理器10可包含多个处理器核心170_1至170_j及多个加速器(accelerator)150_1至150_i,i、j为整数,随着不同设计需求而有不同。加速器150_1至150_i举例而言可以是加速功能单元(afu,acceleratorfunctionalunits)。处理器核心170_1至170_j中的任一个包含的组件都涉及电脑指令的执行,包括算术逻辑单元(alu,arithmeticlogicunit)、浮点运算单元(fpu,floatingpointunit)、一级缓存(l1cache)和二级缓存(l2cache)。每一处理器核心采用指令周期(有时也称提取-解码-执行周期),作为基本操作流程。此流程用以让处理器核心从记忆体取得程式指令,判定此指令指示进行何种操作,并且执行这些操作。加速器150_1至150_i可执行不同功能,并透过加速器接口(acceleratorinterface)130连接至末级缓存(last-levelcache)110,用以与处理器核心170_1至170_j通过虚拟位址(virtualaddress)进行数据交换。加速器150_1至150_i中的任一个可协助处理器核心170_1至170_j以更有效率地方式执行特定功能,上述特定功能包括例如压缩,加解密或正则匹配等运算量较大的功能,从而减轻处理器核心170_1至170_j的工作负担。加速器150_1至150_i中的一个可为压缩加速器(compressionaccelerator),用以完成字符串压缩功能。

图2是根据本发明实施例的压缩加速器的方块图。压缩加速器20包含滑动窗口缓存器(slidingwindowbuffer)310、预取缓存器(lookaheadbuffer)320、掩码寄存器(maskregister)370及匹配长度寄存器393。压缩加速器20包含控制器391,初始时,其控制预取缓存器320以锁存n个字符320_1至320_n,n可为4。虽然本发明实施例为每个批次比对4(n=4)个字符的设计,本领域技术人员可根据系统需求在每个批次比对更多或更少的字符,例如,3、5或6个,本发明并不因此局限。在一些实施例中,滑动窗口缓存器310可为2048比特的向量寄存器(vectorregister),用以锁存原始字符串中的256个字符,每个字符以8比特表示,例如,“a”、“b”、“c”、“d”、“e”、“f”、“a”、“b”、“c”、“d”、“e”、“f”等等,值得注意的是,在原始字符串的顺序上,滑动窗口缓存器310中的原始字符位于预取缓存器320中的待压缩的原始字符串之前。在一些实施例中,预取缓存器320可为32比特的向量寄存器,用以锁存原始字符串中的4个字符,每个字符以8比特表示,例如,字符320_1至320_4分别为“a”、“b”、“c”及“d”。在一些实施例中,掩码寄存器(maskregister)370可为256比特的寄存器,初始时所有比特均为第一值,例如“2’b1”。在一些实施例中,匹配长度寄存器393可为8比特的寄存器,初始时锁存“0”。压缩加速器20包含字符串比较器330_1至330_4,每一字符串比较器的输入端连接预取缓存器320及滑动窗口缓存器310,其输出端连接至匹配寄存器340_1至340_4中的指定一个。匹配寄存器340_1至340_4中的每一个可包含256个寄存器,其中的第i个寄存器锁存预取缓存器320的输入字符是否与滑动窗口缓存器310中的第i个字符的信息相符,i代表0~255间的任意整数。每一字符串比较器比较预取缓存器320的对应一个输入字符与滑动窗口缓存器310中的每一字符,并且将比对结果储存至匹配寄存器340_1至340_4中的指定一个。当预取缓存器320的输入字符与滑动窗口缓存器310中的第i个字符相符时,该比特设为第一值(例如“2’b1”);不相符则设为第二值(如“2’b0”)。假设字符320_1为“a”且滑动窗口缓存器310的第0至9个字符为“a”、“b”、“c”、“d”、“e”、“f”、“a”、“b”、“c”、“d”、“e”、“f”:字符串比较器330_1将比较结果“2’b1000010000”储存至匹配寄存器340_1的第0至9比特。图3是根据本发明实施例的字符串比较器的方块图。字符串比较器330_1包含256个8比特数字比较器(8-bitdigitalcomparator)400_0至400_255。其中8比特数字比较器400_i比较字符320_1及滑动窗口缓存器310中的第i个字符,i为0至255间的任意整数。当二者相符时,8比特数字比较器400_i输出“2’b1”至匹配寄存器340_1中的寄存器340_1_i,用以锁存“2’b1”。当二者不相符时,8比特数字比较器400_i输出“2’b0”至匹配寄存器340_1中的寄存器340_1_i,用以锁存“2’b0”。本领域技术人员可修改图3的字符串比较器330_1以完成字符串比较器330_2至330_4,不再赘述以求简洁。

压缩加速器20包含位移比较器350。图4是根据本发明实施例的位移比较器的方块图。位移比较器350将“2’b0”锁存至中介寄存器360中的寄存器360_0至360_3,将匹配寄存器340_1、340_2、340_3及340_4的值分别右移4个、3个、2个及1个比特,将位移后的结果进行以比特为基础的逻辑及运算,并且锁存运算结果至中介寄存器360中的寄存器360_4至360_255。右移4个、3个、2个及1个比特是指由最低有效位(lsb,leastsignificantbit)向最高有效位(msb,mostsignificantbit)分别移动4个、3个、2个及1个比特,并且分别将最低的4个、3个、2个及1个比特补“2’b0”。当中介寄存器360中的寄存器360_j为“2’b1”时,代表滑动窗口缓存器310的第“j-4”至“j-1”个字符与预取缓存器320中的全部四个字符相符,其中j为4至255间的任意整数。举例来说,位移比较器350可包含756个与门(andgates)540_0_0至540_0_251、540_1_0至540_1_251及540_2_0至540_2_251。与门540_0_i将匹配寄存器340_1中的寄存器340_1_i的值和匹配寄存器340_2中的寄存器340_2_(i+1)的值进行逻辑及运算,并输出结果至与门540_2_i,与门540_1_i将匹配寄存器340_3中的寄存器340_3_(i+2)的值和匹配寄存器340_4中的寄存器340_4_(i+3)的值进行逻辑及运算,并输出结果至与门540_2_i,并且与门540_2_i将与门540_0_i的输出结果与门540_1_i的输出结果进行逻辑及运算,并输出结果至中介寄存器360中的寄存器360_(i+4),其中,i为0至251间的任意整数。当然本发明的位移比较器350还可采用其它逻辑电路实现将匹配寄存器340_1的第i个比特(寄存器340_1_i的值)、匹配寄存器340_2的第(i+1)个比特(寄存器340_2_(i+1)的值)、匹配寄存器340_3的第(i+2)个比特(寄存器340_3_(i+2)的值)、匹配寄存器340_4的第(i+3)个比特(寄存器340_4_(i+3)的值)进行逻辑及运算,并输出结果至中介寄存器360的第(i+4)个比特(寄存器340_2_(i+4)的值),并不限于图4所示的756个与门(andgates)540_0_0至540_0_251、540_1_0至540_1_251及540_2_0至540_2_251的实施方式。

压缩加速器20包含结果检查器381及控制器391。当匹配长度寄存器393的值大于或等于4时,控制器391将掩码寄存器370的值右移4个比特。结果检查器381将(位移后)掩码及中介寄存器360的值进行以比特为基础的逻辑及运算,将运算结果更新回掩码寄存器370,并且检查运算结果中是否包含任何为“2’b1”的比特。图5是根据本发明实施例的结果检查器的方块图。结果检查器381可包含256个逻辑与门610_0至610_255及多输入单输出或门630。与门610_i将中介寄存器360中的寄存器360_i的值和掩码寄存器370中的寄存器370_i的值进行逻辑及运算,输出结果至寄存器370_i以锁存运算结果,及输出结果至多输入单输出或门630,其中,i为0至255间的任意整数。多输入单输出或门630可包含树状组织的或门,将与门610_0至与门610_255的输出结果进行逻辑或运算,并输出运算结果至结果寄存器383。当至少一个输入端为“2’b1”时,多输入单输出或门630输出“2’b1”。当所有输入端均为“2’b0”时,多输入单输出或门630输出“2’b0”。当结果寄存器383锁存的值为“2’b0”时,控制器391将匹配长度寄存器393的值输出作为匹配长度。当结果寄存器383锁存的值为“2’b1”时,控制器391将匹配长度寄存器393的值加4,并且控制预取缓存器320以锁存原始字符串中接续本轮比较的缓存于预取缓存器320中的源字符串的后的四个字符。

图6是根据本发明实施例的加速压缩的方法流程图。此方法使用图2所示的压缩加速器20执行,用以获得二个字符串间(亦即是第一字符串及第二字符串间)的最大匹配长度。将掩码中的m个比特的每一个初始化为第一值(如“2’b1”)及将匹配长度初始化为0,m可为256(步骤s711),以及将第一字符串中的前n个字符当作源字符串(步骤s713)。初始掩码可锁存于掩码寄存器370,初始匹配长度可锁存于匹配长度寄存器393,而初始源字符串可锁存于预取缓存器320。接着,反复执行一个循环,以获得第一字符串及第二字符串间的最大匹配长度(步骤s713至s771)。在每一迭代中,检测第一字符串及第二字符串间是否存在连续n个匹配。若是,则继续执行下一迭代的处理;否则,输出匹配长度。在每一迭代中,详细来说,将源字符串中的每个字符单独与第二字符串中的所有字符比较以生成n个第一匹配结果(步骤s731),在一实施例中,生成n个第一匹配结果的比较在硬件实现上是并行进行的,然后根据第一匹配结果生成第二匹配结果,用以储存源字符串的全部是否被包含于第二字符串的信息(步骤s733),将掩码右移n个比特,用以指示此迭代连续匹配预期出现的结束位置的后一位置的信息(步骤s735),值得注意的是,上一迭代的比较如存在连续n个字符的匹配,则匹配结束位置的后一比特的值为“2’b1”,将掩码右移n个比特的目的是将上一迭代匹配的连续n个字符的后一比特的“2’b1”右移至本迭代如果再存在连续n个字符的匹配的最后位置的后一比特,以便进行运算,接下来,根据应用位移后的掩码的第二匹配结果以判断是否存在连续n个字符的匹配(步骤s737)。第二字符串可锁存于滑动窗口缓存器310。步骤s731可使用如上所述的字符串比较器330_1至330_4完成,而第一匹配结果可锁存于匹配寄存器340_1至340_4。步骤s733可使用如上所述的位移比较器350完成,而第二匹配结果可锁存于中介寄存器360。步骤s737可使用如上所述的结果检查器381完成,而判断结果可锁存于结果寄存器383。在步骤s737中,更将锁存于掩码寄存器370的掩码更新为应用的结果。当不存在连续n个字符的匹配时(步骤s737中“否”的路径),输出匹配长度(步骤s771)。当存在连续n个字符的匹配时(步骤s737中“是”的路径),将匹配长度加n(步骤s751),以及将第一字符串中之后的n个字符当作源字符串(步骤s755)。步骤s751及s755可使用如上所述的控制器391完成。新的源字符串锁存于预取缓存器320。

以下举出实例说明图2的最长字符串匹配器及图6的加速压缩方法。图7a及图7b是根据本发明实施例的最大匹配长度计算示意图。假设第一字符串包含“a”、“b”、“c”、“d”、“e”、“f”、“a”和“c”的字符,而第二字符串包含“a”、“b”、“c”、“d”、“e”、“f”、“a”、“b”、“c”、“d”、“e”、“f”等等的字符:将掩码中的m个比特的每一个初始化为“2’b1”及将匹配长度初始化为0(步骤s711),以及将第一字符串中的字符“a”、“b”、“c”和“d”当作源字符串,并分别锁存于寄存器320_1至320_4(步骤s713)。掩码储存连续匹配的期望结束位置的后一位置的信息。参考图7a。在第一迭代中,使用字符串比较器330_1至330_4将源字符“a”、“b”、“c”和“d”分别单独地比较第二字符串中的所有字符以生成4个第一匹配结果(步骤s731)。详细来说,字符串比较器330_1比较源字符“a”及第二字符串中的所有字符后,生成并锁存第一匹配结果“2’b100000100000…”至匹配寄存器340_1。字符串比较器330_2比较源字符“b”及第二字符串中的所有字符后,生成并锁存第一匹配结果“2’b010000010000…”至匹配寄存器340_2。字符串比较器330_3比较源字符“c”及第二字符串中的所有字符后,生成并锁存第一匹配结果“2’b001000001000…”至匹配寄存器340_3。字符串比较器330_4比较源字符“d”及第二字符串中的所有字符后,生成并锁存第一匹配结果“2’b000100000100…”至匹配寄存器340_4。接着,位移比较器350根据4个第一匹配结果生成第二匹配结果(步骤s733)。详细来说,位移比较器350根据匹配寄存器340_1、340_2、340_3及340_4中位移后的值进行以比特为基础的逻辑及运算,并且锁存运算结果“2’b000010000010…”至中介寄存器360中的寄存器360_0至360_(m-1),作为第二匹配结果。接着,将掩码右移4个比特成为“2’b000011111111…”,用以指示此迭代连续匹配预期出现的结束位置的后一位置为第5个的信息(步骤s735),应用掩码至第二匹配结果并锁存应用后的结果“2’b000010000010…”至掩码寄存器370,以及根据应用后的结果判断是否包含任何为“2’b1”的比特(亦即是,是否存在连续4个字符的匹配)(步骤s737)。由于应用后的结果“2’b000010000010…”包含至少一个“2’b1”的比特(步骤s737中“是”的路径),控制器391更新匹配长度寄存器393的值为0+4=4(步骤s751),以及控制预取缓存器320以锁存“e”、“f”、“a”和“c”至寄存器320_1至320_4(步骤s755)。参考图7b。在第二迭代中,使用字符串比较器330_1至330_4将源字符“e”、“f”、“a”及“c”分别单独地与第二字符串中的所有字符比较以生成4个第一匹配结果(步骤s731)。详细来说,字符串比较器330_1比较源字符“e”及第二字符串中的所有字符后,生成并锁存第一匹配结果“2’b000010000010…”至匹配寄存器340_1。字符串比较器330_2比较源字符“f”及第二字符串中的所有字符后,生成并锁存第一匹配结果“2’b000001000001…”至匹配寄存器340_2。字符串比较器330_3比较源字符“a”及第二字符串中的所有字符后,生成并锁存第一匹配结果“2’b100000100000…”至匹配寄存器340_3。字符串比较器330_4比较源字符“c”及第二字符串中的所有字符后,生成并锁存第一匹配结果“2’b001000001000…”至匹配寄存器340_4。接着,位移比较器350根据4个第一匹配结果生成第二匹配结果(步骤s733)。详细来说,位移比较器350根据匹配寄存器340_1、340_2、340_3及340_4中位移后的值进行以比特为基础的逻辑及运算,并且锁存运算结果“2’b000000000000…”至中介寄存器360中的寄存器360_0至360_(m-1),作为第二匹配结果。接着,将掩码右移4个比特成为“2’b000000001000…”,用以指示此迭代连续匹配预期出现的结束位置的后一位置为第9个的信息(步骤s735),应用掩码至第二匹配结果并锁存应用后的结果“2’b000000000000…”至掩码寄存器370,以及根据应用后的结果判断是否包含任何为“2’b1”的比特(步骤s737)。由于应用后的结果“2’b000000000000…”没有包含任何“2’b1”的比特(步骤s737中“否”的路径),控制器391输出匹配长度寄存器393的值(步骤s771)。于此可了解的是,应用图2的最长字符串匹配器及图6的加速压缩方法只能输出n的倍数的匹配长度。

为了解决如上所述的缺陷,本发明实施例还另提供一种最长字符串匹配器及加速压缩方法。图8a及图8b是根据本发明实施例的最长字符串匹配器的方块图。本发明实施例可另包含多输入单输出或门960,每一个输入端连接至中介寄存器930_1~930_4其中之一,即连接至选择器971的输出端,并且可包含树状组织的或门。当由选择器971选出的中介寄存器930_1~930_4其中之一存在至少一个“2’b1”时,多输入单输出或门960输出“2’b1”。当由选择器971选出的中介寄存器930_1~930_4其中之一的所有位置均为“2’b0”时,多输入单输出或门960输出“2’b0”。初始时,透过多输入单输出或门960检查中介寄存器930_1~930_4其中之一的所有位置均锁存“2’b0”。如果是,控制器950输出匹配长度寄存器393中的值;否则,控制器950控制预取缓存器320以锁存n个字符320_1至320_n,n可为4。

除了如图2中所示的滑动窗口缓存器310、预取缓存器320、字符串比较器330_1至330_4、匹配寄存器340_1至340_4、掩码寄存器370及匹配长度寄存器393之外,本发明实施例可将位移比较器350置换为四级位移比较器910_1至910_4,并且配置四个中介寄存器930_1至930_4分别连接至位移比较器910_1至910_4。图9a是根据本发明实施例的第1级位移比较器的方块图。第1级位移比较器910_1将“2’b0”锁存至中介寄存器930_1中的寄存器930_1_0,以及将匹配寄存器340_1的值右移1个比特并依序锁存至中介寄存器930_1中的寄存器930_1_1至930_1_255。当中介寄存器930_1中的寄存器930_1_j为“2’b1”时,代表滑动窗口缓存器310的第“j-1”个字符与预取缓存器320中的第一个字符相符,其中j为1至255间的任意整数。具体来说,第1级位移比较器910_1包含255个逻辑与门1010_0至1010_254。与门1010_i将匹配寄存器340_1中的寄存器340_1_i的值和自己进行逻辑及运算,并输出结果至中介寄存器930_1中的寄存器930_1_(i+1),其中i为0至254间的任意整数。

图9b是根据本发明实施例的第2级位移比较器的方块图。第2级位移比较器910_2将“2’b0”锁存至中介寄存器930_2中的寄存器930_2_0及930_2_1,将匹配寄存器340_1及340_2的值分别右移2个及1个比特,将位移后的结果进行以比特为基础的逻辑及运算,并且锁存运算结果至中介寄存器930_2中的寄存器930_2_2至930_2_255。当中介寄存器930_2中的寄存器930_2_j为“2’b1”时,代表滑动窗口缓存器310的第“j-2”及“j-1”个字符与预取缓存器320中的前二个字符相符,其中j为2至255间的任意整数。具体来说,第2级位移比较器930_2可包含254个逻辑与门1020_0至1020_253。与门1020_i将匹配寄存器340_1中的寄存器340_1_i的值和匹配寄存器340_2中的寄存器340_2_(i+1)的值进行逻辑及运算,并输出结果至中介寄存器930_2中的寄存器930_2_(i+2),其中i为0至253间的任意整数。

图9c是根据本发明实施例的第3级位移比较器的方块图。第3级位移比较器910_3将“2’b0”锁存至中介寄存器930_3中的寄存器930_3_0至930_3_2,将匹配寄存器340_1、340_2及340_3的值分别右移3个、2个及1个比特,将位移后的结果进行以比特为基础的逻辑及运算,并且锁存运算结果至中介寄存器930_3中的寄存器930_3_3至930_3_255。当中介寄存器930_3中的寄存器930_3_j为“2’b1”时,代表滑动窗口缓存器310的第“j-3”至“j-1”个字符与预取缓存器320中的前三个字符相符,其中j为3至255间的任意整数。具体来说,第3级位移比较器910_3可包含506个与门1030_0_0至1030_0_252及1030_1_0至1030_1_252。与门1030_0_i将匹配寄存器340_1中的寄存器340_1_i的值和匹配寄存器340_2中的寄存器340_2_(i+1)的值进行逻辑及运算,并输出结果至与门1030_1_i,并且与门1030_1_i将匹配寄存器340_3中的寄存器340_3_(i+2)的值和与门1030_0_i的输出结果进行逻辑及运算,并输出结果至中介寄存器930_3中的寄存器930_3_(i+3),其中i为0至252间的任意整数。

图9d是根据本发明实施例的第4级位移比较器的方块图。第4级位移比较器910_4将“2’b0”锁存至中介寄存器930_4中的寄存器930_4_0至930_4_3,将匹配寄存器340_1、340_2、340_3及340_4的值分别右移4个、3个、2个及1个比特,将位移后的结果进行以比特为基础的逻辑及运算,并且锁存运算结果至中介寄存器930_4中的寄存器930_4_4至930_4_255。当中介寄存器930_4中的寄存器930_4_j为“2’b1”时,代表滑动窗口缓存器310的第“j-4”至“j-1”个字符与预取缓存器320中的全部四个字符相符,其中j为4至255间的任意整数。具体来说,第4级位移比较器910_4可包含756个与门1040_0_0至1040_0_251、1040_1_0至1040_1_251及1040_2_0至1040_2_251。与门1040_0_i将匹配寄存器340_1中的寄存器340_1_i的值和匹配寄存器340_2中的寄存器340_2_(i+1)的值进行逻辑及运算,并输出结果至与门1040_2_i,与门1040_1_i将匹配寄存器340_3中的寄存器340_3_(i+2)的值和匹配寄存器340_4中的寄存器340_4_(i+3)的值进行逻辑及运算,并输出结果至与门1040_2_i,并且与门1040_2_i将与门1040_0_i的输出结果与门1040_1_i的输出结果进行逻辑及运算,并输出结果至中介寄存器930_4中的寄存器930_4_(i+4),其中i为0至251间的任意整数。

本发明实施例可将图2的结果检查器381置换为结果检查器973。本发明实施例可另包含选择器971,用以根据控制器950的控制讯号将中介寄存器930_1至930_4中的一个连接至多输入单输出或门960及结果检查器973中的一个。控制器950控制选择器971将中介寄存器930_4连接至多输入单输出或门960,接着透过多输入单输出或门960检查中介寄存器930_4中是否包含至少一个“2’b1”。当中介寄存器930_4中包含至少一个“2’b1”时,控制器950将掩码寄存器370的值右移4个比特,并且控制选择器971将中介寄存器930_4连接至结果检查器973。结果检查器973将位移后的掩码寄存器370的值及中介寄存器930_4的值进行以比特为基础的逻辑及运算,将运算结果更新回掩码寄存器370,并且检查运算结果中是否包含任何为“2’b1”的比特。当结果寄存器383锁存的值为“2’b1”时,控制器950将匹配长度寄存器393的值加4,并且控制预取缓存器320以锁存下四个字符。

接着,当中介寄存器930_4中全部为“2’b0”时,控制器950控制选择器971将中介寄存器930_3连接至多输入单输出或门960,接着透过多输入单输出或门960检查中介寄存器930_3中是否包含至少一个“2’b1”。当中介寄存器930_3中包含至少一个“2’b1”时,控制器950将掩码寄存器370的值右移3个比特,并且控制选择器971将中介寄存器930_3连接至结果检查器973。结果检查器973将位移后的掩码寄存器370的值及中介寄存器930_3的值进行以比特为基础的逻辑及运算,将运算结果更新回掩码寄存器370,并且检查运算结果中是否包含任何为“2’b1”的比特。当结果寄存器383锁存的值为“2’b1”时,控制器950将匹配长度寄存器393的值加3,并将匹配长度寄存器393的值输出作为匹配长度。

接着,当中介寄存器930_3中全部为“2’b0”时,控制器950控制选择器971将中介寄存器930_2连接至多输入单输出或门960,接着透过多输入单输出或门960检查中介寄存器930_2中是否包含至少一个“2’b1”。当中介寄存器930_2中包含至少一个“2’b1”时,控制器950将掩码寄存器370的值右移2个比特,并且控制选择器971将中介寄存器930_2连接至结果检查器973。结果检查器973将位移后的值及中介寄存器930_2的值进行以比特为基础的逻辑及运算,将运算结果更新回掩码寄存器370,并且检查运算结果中是否包含任何为“2’b1”的比特。当结果寄存器383锁存的值为“2’b1”时,控制器950将匹配长度寄存器393的值加2,并将匹配长度寄存器393的值输出作为匹配长度。

接着,当中介寄存器930_2中全部为“2’b0”时,控制器950控制选择器971将中介寄存器930_1连接至多输入单输出或门960,接着透过多输入单输出或门960检查中介寄存器930_1中是否包含至少一个“2’b1”。当中介寄存器930_2中包含至少一个“2’b1”时,控制器950将掩码寄存器370的值右移1个比特,并且控制选择器971将中介寄存器930_1连接至结果检查器973。结果检查器973将位移后的值及中介寄存器930_1的值进行以比特为基础的逻辑及运算,将运算结果更新回掩码寄存器370,并且检查运算结果中是否包含任何为“2’b1”的比特。当结果寄存器383锁存的值为“2’b1”时,控制器950将匹配长度寄存器393的值加1,并将匹配长度寄存器393的值输出作为匹配长度。当结果寄存器383锁存的值为“2’b0”时,控制器950直接将将匹配长度寄存器393的值输出作为匹配长度。

图10是根据本发明实施例的结果检查器的方块图。结果检查器973可包含256个逻辑与门1110_0至1110_255及多输入单输出或门1130。与门1110_i将中介寄存器930_j中的寄存器930_j_i的值和掩码寄存器370中的寄存器370_i的值进行逻辑及运算,输出结果至寄存器370_i以锁存运算结果,及输出结果至多输入单输出或门1130,其中,i为0至255间的任意整数,j为1至4间的任意整数。多输入单输出或门1130可包含树状组织的或门,将与门1110_0至与门1110_255的输出结果进行逻辑或运算,并输出运算结果至结果寄存器383。当至少一个输入端为“2’b1”时,多输入单输出或门1130输出“2’b1”。当所有输入端均为“2’b0”时,多输入单输出或门1130输出“2’b0”。

图11a及图11b是根据本发明实施例的加速压缩的方法流程图。此方法使用图8a及图8b所示的压缩加速器20执行,用以获得二个字符串间(亦即是第一字符串及第二字符串间)的最大匹配长度。将掩码中的m个比特的每一个初始化为第一值(如“2’b1”)及将匹配长度初始化为0,m可为256(步骤s711),以及将第一字符串中的前n个字符当作源字符串(步骤s713)。初始掩码可锁存于掩码寄存器370,初始匹配长度可锁存于匹配长度寄存器393,而初始源字符串可锁存于预取缓存器320。接着,反复执行一个外循环,以获得第一字符串及第二字符串间的最大匹配长度(包含步骤s731至s771及步骤s1211至s1273)。在外循环的每一迭代中,详细来说,将源字符串中的所有字符单独地与第二字符串中的所有字符比较以生成n个第一匹配结果(步骤s731),在一实施例中,步骤s731的n个比较步骤是并行执行的,然后根据第一匹配结果生成n级第二匹配结果,其中,每一级匹配结果用以储存源字符串的一部份是否被包含于第二字符串的信息(步骤s1211),将k设为n(步骤s1213),以及执行一个内循环(包含步骤s771及步骤s1230至s1273)。第二字符串可锁存于滑动窗口缓存器310。步骤s731可使用如上所述的字符串比较器330_1至330_4完成,而第一匹配结果可锁存于匹配寄存器340_1至340_4。步骤s1211可使用如上所述的四级位移比较器910_1至910_4完成,而四级第二匹配结果可锁存于中介寄存器930_1至930_4。在内循环的每一迭代中,判断k级第二匹配结果是否包含至少一个“2’b1”(步骤s1230)。当k级第二匹配结果包含至少一个“2’b1”时(步骤s1230中“是”的路径),将掩码右移k个比特以指示此迭代连续匹配预期出现的结束位置的后一位置的信息(步骤s1240),应用掩码至k级第二匹配结果以判断是否存在连续k个字符的匹配(步骤s1251)。步骤s1240可使用如上所述的控制器950完成。步骤s1251可使用如上所述的结果检查器973完成,而判断结果可锁存于结果寄存器383。当存在连续k个字符的匹配时(步骤s1251中“是”的路径),判断k是否等于n(步骤s1253)。当不存在连续k个字符的匹配时(步骤s1251中“否”的路径),即本轮匹配的k个字符与前一外循环匹配的n个字符不连续,则执行步骤s1271。当k等于n时(步骤s1253中“是”的路径),将匹配长度加n(步骤s751),将锁存于掩码寄存器370的掩码更新为如步骤s1251中的应用结果(步骤s753),以及将第一字符串中之后的n个字符当作源字符串(步骤s755),k等于n则说明本次比较的n个连续的源字符全部匹配,因此流程返回步骤s731以继续进行下一个迭代的外循环继续向后寻找最长匹配。步骤s751及s755可使用如上所述的控制器950完成。新的源字符串锁存于预取缓存器320。当k不等于n时(步骤s1253中“否”的路径),将匹配长度加k(步骤s1255),以及输出匹配长度(步骤s771)。当k级第二匹配结果不包含至少一个“2’b1”时(步骤s1230中“否”的路径),将k减1(步骤s1271),以及判断k是否小于1(步骤s1273)。当k小于1时(步骤s1273中“是”的路径),输出匹配长度(步骤s771)。当k不小于1时(步骤s1273中“否”的路径),执行内循环下一迭代的处理(回到步骤s1230)。值得注意的是,在一实施例中,内循环的步骤s771及步骤s1230至s1273中k级第二匹配结果的检查可以在硬件上并行执行,即4级的第二匹配结果是否包含“2’b1”且其出现“2’b1”的位置是否与外循环的前一迭代确定的n个匹配字符连续可以并行执行,然后在步骤s1255输出最大的k值。此外,在一些实施例中也不必一定执行步骤s1240掩码右移k个比特的步骤,也可采用其他方式判断本迭代匹配的k个字符的位置是否与外循环的前一迭代确定的n个匹配字符的位置连续。

以下举出实例说明图8a及图8b的最长字符串匹配器及图11a及图11b的加速压缩方法。图12是根据本发明实施例的最大匹配长度计算示意图。假设第一字符串包含“a”、“b”、“f”和“d”的字符,而第二字符串包含“a”、“b”、“c”、“d”、“e”、“f”、“a”、“b”、“c”、“d”、“e”、“f”等等的字符:将掩码中的m个比特的每一个初始化为“2’b1”及将匹配长度初始化为0(步骤s711),以及将第一字符串中的字符“a”、“b”、“f”和“d”当作源字符串,并分别锁存于寄存器320_1至320_4(步骤s713)。接着,使用字符串比较器330_1至330_4将源字符“a”、“b”、“f”及“d”单独地与第二字符串中的所有字符比较以生成4个第一匹配结果(步骤s731)。详细来说,字符串比较器330_1比较源字符“a”及第二字符串中的所有字符后,生成并锁存第一匹配结果“2’b100000100000…”至匹配寄存器340_1。字符串比较器330_2比较源字符“b”及第二字符串中的所有字符后,生成并锁存第一匹配结果“2’b010000010000…”至匹配寄存器340_2。字符串比较器330_3比较源字符“f”及第二字符串中的所有字符后,生成并锁存第一匹配结果“2’b000001000001…”至匹配寄存器340_3。字符串比较器330_4比较源字符“d”及第二字符串中的所有字符后,生成并锁存第一匹配结果“2’b000100000100…”至匹配寄存器340_4。接着,位移比较器910根据第一匹配结果生成n级第二匹配结果(步骤s1211)。详细来说,位移比较器910_1根据匹配寄存器340_1中位移后的值进行以比特为基础的逻辑及运算,并且锁存运算结果“2’b010000010000…”至中介寄存器930_1中的寄存器930_1_0至930_1_(m-1),作为1级第二匹配结果。位移比较器910_2根据匹配寄存器340_1及340_2中位移后的值进行以比特为基础的逻辑及运算,并且锁存运算结果“2’b001000001000…”至中介寄存器930_2中的寄存器930_2_0至930_2_(m-1),作为2级第二匹配结果。位移比较器910_3根据匹配寄存器340_1、340_2及340_3中位移后的值进行以比特为基础的逻辑及运算,并且锁存运算结果“2’b000000000000…”至中介寄存器930_3中的寄存器930_3_0至930_3_(m-1),作为3级第二匹配结果。位移比较器910_4根据匹配寄存器340_1、340_2、340_3及340_4中位移后的值进行以比特为基础的逻辑及运算,并且锁存运算结果“2’b000000000000…”至中介寄存器930_4中的寄存器930_4_0至930_4_(m-1),作为4级第二匹配结果。由于4级及3级第二匹配结果不包含至少一个“2’b1”而2级第二匹配结果包含至少一个“2’b1”(步骤s1230),将掩码右移2个比特成为“2’b001111111111”,以指示此迭代连续匹配预期出现的结束位置的后一位置为第3个(步骤s735),应用掩码至2级第二匹配结果并锁存应用后的结果“2’b001000001000…”至掩码寄存器370,以及根据应用后的结果判断是否包含任何为“2’b1”的比特(亦即是,是否存在连续2个字符的匹配)(步骤s1251)。由于应用后的结果“2’b001000001000…”包含至少一个“2’b1”的比特(步骤s737中“是”的路径),控制器391更新匹配长度寄存器393的值为0+2=2(步骤s1255),输出匹配长度寄存器393的值(步骤s771)。于此可了解的是,应用图8a及图8b的最长字符串匹配器及图11a及图11b的加速压缩方法可输出任意的匹配长度。

图13是根据本发明实施例的加速压缩的方法流程图。此方法使用图2或图8a及图8b所示的压缩加速器20执行。此方法初始时提供第一字符串及第二字符串(步骤s1410),以及反复执行循环,以计算第一字符串及第二字符串间的最大匹配长度(步骤s1420至s1480)。在循环的每一迭代中,从第一字符串中取得n个连续字符作为源字符串,其中,除第一迭代外,上述n个连续字符接续上一迭代取得的字符串(步骤s1420);将源字符串中的各个字符单独地与第二字符串中的所有字符比较以生成n个第一匹配结果,此亦可称为竖向比较(步骤s1430);根据第一匹配结果生成第二匹配结果(步骤s1440);提供掩码(步骤s1450);以及根据上述第二匹配结果判断是否存在上述n个连续字符的匹配(步骤s1460)。当不存在上述n个连续字符的匹配时(步骤s1460中“否”的路径),更新并输出匹配长度(步骤s1470);以及当存在上述n个连续字符的匹配时(步骤s1460中“是”的路径),将上述匹配长度加上n(步骤s1480)及继续上述循环的下一迭代。关于步骤s1420的技术细节,可参考步骤s713及s755的说明。关于步骤s1430的技术细节,可参考步骤s731的说明。于此须注意的是,以硬件实现的并行比较相较于软件的程序更具效率。关于步骤s1440的技术细节,可参考步骤s733或s1211的说明。关于步骤s1450的技术细节,可参考步骤s735的说明。关于步骤s1460的技术细节,可参考步骤s737或s1251的说明。关于步骤s1470的技术细节,可参考步骤s771及s1255的说明。关于步骤s1480的技术细节,可参考步骤s751的说明。

虽然图1至图5及图8至图10中包含了以上描述的元件,但不排除在不违反发明的精神下,使用更多其他的附加元件,以达成更佳的技术效果。此外,虽然图6、11及13的方法流程图采用特定的顺序来执行,但是在不违反发明精神的情况下,本领域技术人员可以在达到相同效果的前提下,修改这些步骤间的顺序,所以,本发明并不局限于仅使用如上所述的顺序。

虽然本发明使用以上实施例进行说明,但需要注意的是,这些描述并非用以限缩本发明。相反地,此发明涵盖了本领域技术人员显而易见的修改与相似设置。所以,申请权利要求范围须以最宽广的方式解释来包含所有显而易见的修改与相似设置。

符号说明

10微处理器;

110末级缓存;

130加速器接口;

150_1~150_i加速器;

170_1~170_j处理器核心;

20压缩加速器;

310滑动窗口缓存器;

310_0~310_255向量寄存器;

320预取缓存器;

320_1~320_4向量寄存器;

330_1~330_4字符串比较器;

340_1~340_4匹配寄存器;

340_1_0~340_1_255寄存器;

340_2_0~340_2_255寄存器;

340_3_0~340_3_255寄存器;

340_4_0~340_4_255寄存器;

350位移比较器;

360中介寄存器;

360_0~360_255寄存器;

370掩码寄存器;

370_0~370_255寄存器;

381结果检查器;

383结果寄存器;

391控制器;

393匹配长度寄存器;

400_0~400_2558比特数字比较器;

540_0_0~540_0_255逻辑与门;

540_1_0~540_1_255逻辑与门;

540_2_0~540_2_255逻辑与门;

610_0~610_255逻辑与门;

630多输入单输出或门;

s711~s771方法步骤;

910_1~910_4位移比较器;

930_1~930_4中介寄存器;

930_1_0~930_1_255寄存器;

930_2_0~930_2_255寄存器;

930_3_0~930_3_255寄存器;

930_4_0~930_4_255寄存器;

950控制器;

960多输入单输出或门;

971选择器;

973结果检查器;

1010_0~1010_254逻辑与门;

1020_0~1020_253逻辑与门;

1030_0_0~1030_0_252、1030_1_0~1030_1_252逻辑与门;

1040_0_0~1040_0_251、1040_1_0~1040_1_251、1040_2_0~1040_2_251逻辑与门;

1110_0~1110_255逻辑与门;

1130多输入单输出或门;

s1211~s1273方法步骤;

s1410~s1470方法步骤。

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