首页 / 专利库 / 物理 / 加速 / 基于散列的加速压缩方法以及使用此方法的装置

基于散列的加速压缩方法以及使用此方法的装置

阅读:136发布:2023-02-10

专利汇可以提供基于散列的加速压缩方法以及使用此方法的装置专利检索,专利查询,专利分析的服务。并且基于散列的 加速 压缩方法以及使用此方法的装置。本 发明 的 实施例 提出一种基于散列的加速压缩方法,实施于 微处理器 的压缩加速器中,至少包含以下步骤:多个散列函数并行接收从有限状态机传来的多个子字符串;每一散列函数将接收的子字符串映射成散列索引,及依据散列索引驱动选择器以连接至多个匹配路径中的一个;当连接的匹配路径中的匹配器判定散列表不包含子字符串时,传送不匹配的信息给有限状态机;以及当连接的匹配路径中的匹配器判定散列表包含子字符串时,传送匹配的信息及散列表中相应于子字符串的匹配偏移量给有限状态机。,下面是基于散列的加速压缩方法以及使用此方法的装置专利的具体信息内容。

1.一种基于散列的加速压缩方法,实施于微处理器的压缩加速器中,包含:
多个散列函数并行接收从有限状态机传来的多个子字符串;
每一上述散列函数将上述接收的子字符串映射成散列索引及依据上述散列索引驱动选择器以连接至多个匹配路径中的一个;
当每一上述连接的匹配路径中的匹配器判定散列表不包含上述子字符串时,传送不匹配的信息给上述有限状态机,其中上述散列表分散存储于上述多个匹配路径中;以及当每一上述连接的匹配路径中的上述匹配器判定上述散列表包含上述子字符串时,传送匹配的信息及上述散列表中相应于上述子字符串的匹配偏移量给上述有限状态机。
2.如权利要求1所述的基于散列的加速压缩方法,其中,上述连接的匹配路径中的存储器库存储上述散列表的一部分,
其中,在当上述连接的匹配路径的上述匹配器判定上述散列表不包含上述子字符串时,传送不匹配的信息给上述有限状态机的步骤中,包含:当上述匹配器判定上述部分的散列表不包含上述子字符串时,传送不匹配的信息给上述有限状态机,以及其中,在当上述匹配器判定上述散列表包含上述子字符串时,传送匹配的信息及上述散列表中相应于上述子字符串的上述匹配偏移量给上述有限状态机的步骤中,包含:当上述匹配器判定上述部分的散列表包含上述子字符串时,传送匹配的信息及上述部分的散列表中相应于上述子字符串的上述匹配偏移量给上述有限状态机。
3.如权利要求2所述的基于散列的加速压缩方法,其中,上述部分的散列表包含多笔条目,以及每一上述条目包含多个散列键,其中所述多个散列键拥有相同的散列索引。
4.如权利要求2所述的基于散列的加速压缩方法,其中,上述部分的散列表包含多笔条目,以及每一上述条目包含多个散列键及相应于每一上述散列键的散列偏移量,以及其中,上述匹配器当判定上述部分的散列表存在散列键与上述子字符串相同时,传送匹配的信息及上述部分的散列表中相应于上述散列键的上述散列偏移量给上述有限状态机。
5.如权利要求2所述的基于散列的加速压缩方法,其中,上述部分的散列表包含多笔条目,以及每一上述条目包含第一散列键及相应于上述第一散列键的第一散列偏移量,第二散列键及相应于上述第二散列键的第二散列偏移量,及第三散列键及相应于上述第三散列键的第三散列偏移量。
6.如权利要求5所述的基于散列的加速压缩方法,还包含:
上述匹配器比较上述第一散列键及上述子字符串是否相同;
上述匹配器比较上述第二散列键及上述子字符串是否相同;以及
上述匹配器比较上述第三散列键及上述子字符串是否相同。
7.如权利要求5所述的基于散列的加速压缩方法,其中,当上述匹配器判断上述第一散列键至上述第三散列键中的至少一个与上述子字符串相同时,传送匹配的信息及上述部分的散列表中相应于上述相同散列键中的一个的上述散列偏移量给上述有限状态机。
8.如权利要求5所述的基于散列的加速压缩方法,其中,当上述匹配器判断上述第一散列键至上述第三散列键中有二者及以上与上述子字符串相同时,传送匹配的信息及上述部分的散列表中相应于上述相同散列键的上述散列偏移量中的最小值给上述有限状态机。
9.如权利要求1所述的基于散列的加速压缩方法,其中,上述散列索引的长度小于上述子字符串的长度。
10.如权利要求1所述的基于散列的加速压缩方法,其中,上述有限状态机在同一时钟周期同时输出上述多个子字符串。
11.一种基于散列的加速压缩装置,包含:
有限状态机;以及
散列匹配器,耦接于上述有限状态机,包含:
多个散列函数;
选择器,耦接于上述散列函数;以及
多个匹配路径,耦接至上述选择器,对应于上述多个散列函数,
其中,上述多个散列函数并行接收从上述有限状态机传来的多个子字符串,并将每一上述子字符串映射成散列索引,及依据上述散列索引驱动上述选择器以连接至上述匹配路径中的一个,
其中,当上述连接的匹配路径中的匹配器判定散列表不包含上述子字符串时,传送不匹配的信息给上述有限状态机,其中上述散列表分散存储于上述多个匹配路径中,其中,当上述匹配器判定上述散列表包含上述子字符串时,传送匹配的信息及上述散列表中相应于上述子字符串的匹配偏移量给上述有限状态机。
12.如权利要求11所述的基于散列的加速压缩装置,其中,上述连接的匹配路径,包含:
存储器库,存储上述散列表中的一部分;
先进先出队列,耦接至上述选择器,其中,上述散列函数依据上述散列索引驱动上述选择器将上述散列函数连接至上述先进先出队列,用以将上述子字符串推入上述先进先出队列;以及
上述匹配器,耦接于上述存储器库及上述先进先出队列之间,用以从上述先进先出队列取出上述子字符串,当判定上述部分的散列表不包含上述子字符串时,传送不匹配的信息给上述有限状态机,以及当判定上述部分的散列表包含上述子字符串时,传送匹配的信息及上述部分的散列表中相应于上述子字符串的上述匹配偏移量给上述有限状态机。
13.如权利要求12所述的基于散列的加速压缩装置,其中,上述部分的散列表包含多笔条目,每一上述条目包含多个散列键,其中所述多个散列键拥有相同的散列索引。
14.如权利要求12所述的基于散列的加速压缩装置,其中,上述部分的散列表包含多笔条目,每一上述条目包含多个散列键及相应于每一上述散列键的散列偏移量,上述匹配器当判定上述部分的散列表存在散列键与上述子字符串相同时,传送匹配的信息及上述部分的散列表中相应于上述散列键的上述散列偏移量给上述有限状态机。
15.如权利要求12所述的基于散列的加速压缩装置,其中,上述部分的散列表包含多笔条目,以及每一上述条目包含第一散列键及相应于上述第一散列键的第一散列偏移量,第二散列键及相应于上述第二散列键的第二散列偏移量,及第三散列键及相应于上述第三散列键的第三散列偏移量。
16.如权利要求15所述的基于散列的加速压缩装置,其中上述匹配器包含:
第一比较器,比较上述第一散列键及上述子字符串是否相同,若是,输出上述第一散列偏移量;
第二比较器,比较上述第二散列键及上述子字符串是否相同,若是,输出上述第二散列偏移量;
第三比较器,比较上述第三散列键及上述子字符串是否相同,若是,输出上述第三散列偏移量;以及
仲裁器,耦接于上述第一至第三比较器,当从上述第一至第三比较器没有接收到任何散列偏移量时,回复上述有限状态机不匹配的信息;当从上述第一至第三比较器接收到至少一个散列偏移量时,回复上述有限状态机匹配的信息及上述接收到的散列偏移量。
17.如权利要求16所述的基于散列的加速压缩装置,其中,当从上述第一至第三比较器接收到二个以上的上述散列偏移量时,上述仲裁器回复上述有限状态机匹配的信息及上述接收到的散列偏移量中的最小值给上述有限状态机。
18.如权利要求11所述的基于散列的加速压缩装置,其中,上述有限状态机及上述散列匹配器设置于压缩加速器中,以及上述压缩加速器设置于处理器内核之外。
19.如权利要求11所述的基于散列的加速压缩装置,其中,上述散列索引的长度小于上述子字符串的长度。
20.如权利要求11所述的基于散列的加速压缩装置,其中,上述有限状态机在同一时钟周期同时输出上述多个子字符串。

说明书全文

基于散列的加速压缩方法以及使用此方法的装置

技术领域

[0001] 本发明涉及一种微处理器技术,特别涉及一种基于散列的加速压缩方法以及使用此方法的装置。

背景技术

[0002] 对于压缩加速器(compression accelerator)来说,最复杂的部分在于进行最长前缀字符串匹配(longest-prefix string matching),而最长前缀字符串匹配方法通常可归类为:基于内容可寻址内存(CAM-,Content Addressable Memory-based);及基于散列(hash-based)二种。基于散列的字符串匹配通常都藉由降低散列链长度和/或使用低冲突函数来进行优化,而上述优化均为软件算法上的优化。然而,软件的执行效能往往劣于专属硬件的执行效能。因此,需要一种基于散列的加速压缩方法以及使用此方法的装置,用以克服上述缺陷

发明内容

[0003] 本发明的实施例提出一种基于散列的加速压缩方法,实施于微处理器的压缩加速器中,至少包含以下步骤:多个散列函数并行接收从有限状态机传来的多个子字符串;每一散列函数将接收的子字符串映射成散列索引,及依据散列索引驱动选择器以连接至多个匹配路径中的一个;当连接的匹配路径中的匹配器判定散列表不包含子字符串时,传送不匹配的信息给有限状态机;以及当连接的匹配路径中的匹配器判定散列表包含子字符串时,传送匹配的信息及散列表中相应于子字符串的匹配偏移量给有限状态机。
[0004] 本发明的实施例提出一种基于散列的加速压缩装置,至少包含:有限状态机;及散列匹配器。散列匹配器耦接于有限状态机,包含:多个散列函数;选择器,耦接于散列函数;以及对应于多个散列函数的多个匹配路径,耦接至选择器。多个散列函数并行接收有限状态机传来的多个子字符串,并将每一子字符串映射成散列索引,及依据散列索引驱动选择器以连接至匹配路径中的一个。当连接的匹配路径判定散列表不包含子字符串时,传送不匹配的信息给有限状态机。当连接的匹配路径判定散列表包含子字符串时,传送匹配的信息及散列表中相应于子字符串的匹配偏移量给有限状态机。
[0005] 本发明的前述有限状态机可以在同一时钟周期同时输出多个散列请求分别给多个散列函数并行进行散列匹配,并且藉由本发明之中介缓存器记录各实例的状态、匹配长度及匹配偏移量,使得乱序执行散列匹配和最长匹配后的实例能够按照待压缩字符串中的原始顺序退却以进行压缩。附图说明
[0006] 图1是依据本发明实施例的微处理器的系统架构图。
[0007] 图2是依据本发明实施例的压缩加速器的方图。
[0008] 图3是依据本发明实施例的状态图。
[0009] 图4是依据本发明实施例的散列请求程序的流程图
[0010] 图5是依据本发明实施例的散列回复处理程序的流程图。
[0011] 图6是依据本发明实施例的数据回复处理程序的流程图。
[0012] 图7是依据本发明实施例的退却处理程序的流程图。
[0013] 图8是依据本发明实施例的散列匹配器的方块图。
[0014] 图9是依据本发明实施例的匹配器的方块图。
[0015] 图10是依据本发明实施例的散列匹配方法的流程图。
[0016] 【符号说明】
[0017] 10 微处理器;
[0018] 110 末级快取;
[0019] 130 加速器接口
[0020] 150_1~150_i 压缩加速器;
[0021] 170_1~170_j 处理器内核
[0022] 20 压缩加速器;
[0023] 210 数据缓存器;
[0024] 220 提取单元;
[0025] 230 中介缓存器;
[0026] 240 有限状态机;
[0027] 250 散列匹配器;
[0028] 260 最长字串匹配器;
[0029] 270 格式化器;
[0030] 280 预取缓存器;
[0031] S31 空闲状态;
[0032] S32 散列请求状态;
[0033] S33 数据请求状态;
[0034] S34 不匹配状态;
[0035] S36 完全匹配状态;
[0036] S37 部分匹配状态;
[0037] S410~S470 方法步骤;
[0038] S510~S577 方法步骤;
[0039] S610~S695 方法步骤;
[0040] S710~S770 方法步骤;
[0041] 810_1~810_4 散列函数;
[0042] 830 选择器;
[0043] 850_1~850_4 先进先出队列;
[0044] 870_1~870_4 匹配器;
[0045] 890_1~890_4 存储器库;
[0046] 910_1~910_3 比较器;
[0047] 930 仲裁器;
[0048] S1010~S1077 方法步骤。

具体实施方式

[0049] 以下说明为完成发明的优选实现方式,其目的在于描述本发明的基本精神,但并不用以限定本发明。实际的发明内容必须参考之后的权利要求范围。
[0050] 必须了解的是,使用于本说明书中的“包含”、“包括”等词,用以表示存在特定的技术特征、数值、方法步骤、作业处理、元件和/或组件,但并不排除可加上更多的技术特征、数值、方法步骤、作业处理、元件、组件,或以上的任意组合。
[0051] 在权利要求中使用如“第一”、“第二”、“第三”等词用来修饰权利要求中的元件,并非用来表示之间具有优先权顺序,先行关系,或者是一个元件先于另一个元件,或者是执行方法步骤时的时间先后顺序,仅用来区别具有相同名字的元件。
[0052] 图1是依据本发明实施例的微处理器的系统架构图。微处理器10可包含多个处理器内核170_1至170_j及多个加速器(Accelerator)150_1至150_i,i、j为整数,随着不同设计需求而有不同。加速器150_1至150_i举例而言可以是加速功能单元(AFU,Accelerator Functional Units)。处理器内核170_1至170_j中的任何一个包含的组件都涉及计算机指令的执行,包括算术逻辑单元(ALU,Arithmetic Logic Unit)、浮点运算单元(FPU,Floating Point Unit)、一级快取(L1Cache)及二级快取(L2Cache)。每一处理器内核采用指令周期(有时亦称提取-解码-执行周期),作为基本操作流程。此流程用以让处理器内核从存储器取得程序指令,判定此指令指示进行何种操作,并且执行这些操作。加速器150_1至150_n可执行不同功能,并通过加速器接口(Accelerator Interface)130连接至末级快取(Last-level Cache)110,用以与处理器内核170_1至170_j通过虚拟地址(virtual address)进行数据交换。加速器150_1至150_i中的任何一个可协助处理器内核170_1至170_j以更有效率地方式执行特定功能,上述特定功能包括例如压缩,加解密或正则匹配等运算量较大的功能,从而减轻处理器内核170_1至170_j的工作负担。加速器150_1至150_i中的一个可为压缩加速器(compression accelerator),用以完成字符串压缩功能。
[0053] 图2是依据本发明实施例的压缩加速器的方块图。压缩加速器20包含数据缓存器210,长度可为1024M字节(bytes),用以存储原始字符串(raw string)及压缩后字符串(compressed string),值得注意的是,在其它实施例中,数据缓存器210可以位于例如图1的末级快取110中,即位于压缩加速器20外部。提取单元220每次向数据缓存器210发出预取请求(lookahead request),用以从数据缓存器210提取固定长度的待压缩的原始字符串,例如16字节,并存储至预取缓存器(look ahead buffer)280中,作为进行字符串压缩的对象。该待压缩字符串更按序存储至中介缓存器(intermediary buffer)230中,中介缓存器
230存储关联于每一个字符的散列及最长字串匹配的相关运算信息。详细来说,中介缓存器
230划分出多段存储器空间,每段可用来存储一个实例(instance)的信息。每个实例包含数个字段,用以记录索引、字符、状态、匹配偏移量(matched offset)及匹配长度(matched length)等。由于压缩加速器20包含许多并行运算,使得相应于每一个实例的运算时间(或称时钟周期数目)无法预测,也就是说,相应于较后实例的运算结果可能早于相应于较前实例的运算结果。因此,本发明通过中介缓存器230让所有实例的计算结果的输出顺序相符于待压缩的原始字符的原始顺序,据以完成最终的最长字串匹配。中介缓存器230还包含发布指针(issuance pointer)及退却指针(retirement pointer),分别指向下一个需要发出散列请求及退却的实例。在初始时,提取单元220从数据缓存器210的待压缩的原始字符串提取多个字符并依序写入中介缓存器230的实例。有限状态机(FSM,Finite-State Machine)
240可发出散列请求(hash request)给散列匹配器(hash matcher)250,用以取得相应于一个实例且长度为n的字符串是否可匹配散列表(hash table)中的一个散列键的信息。在一些实施例中,n为3或以上。有限状态机240另可针对一个实例发出数据请求(data request)给最长字串匹配器(longest string matcher)260,用以取得相应于一个实例的字符串以后可匹配到数据缓存器210的滑动窗(sliding window)中的原始字符串的长度。应注意的是,滑动窗中的原始字符串位于中介缓存器230中的待压缩的原始字符串之前,即滑动窗中的原始字符串是已经被压缩过的字符串。有限状态机240可在可编程逻辑装置(PLD,Programmable Logic Device)、可编程控制器(PLC,Programmable Logic Controller)、现场可编程阵列(FPGA,Field Programmable Gate Array)或特殊应用集成电路(ASIC,application-specific integrated circuit)中实现固定功能(fixed functions)来完成本发明实施例中描述的控制。
[0054] 图3是依据本发明实施例的状态图。初始时,提取单元220从数据缓存器210的原始字符串提取固定长度的待压缩的字符串并依序存储其中的字符至中介缓存器230的实例。举例来说,提取单元220从数据缓存器210提取字符串“abcdxyzefgaf”并依序存储其中的字符至中介缓存器230。初始时,每个实例的状态为空闲状态(idle state)S31,可表示为虚无值(null value)。表1显示实例的初始结果:
[0055] 表1
[0056]
[0057]
[0058] 其中,符号“/”代表虚无值。
[0059] 基于散列的加速压缩方法包含数个程序:散列请求;散列回复处理;数据回复处理;及退却处理。散列请求及退却处理为并行处理程序,并且拥有较高的优先级。图4是依据本发明实施例的散列请求程序的流程图。在每一个时钟周期,有限状态机240取得发布指针指向的实例(步骤S410),为取得的实例发出散列请求给散列匹配器250(步骤S430),更新此实例的状态为“HASH_ISSUED”以指出此实例进入散列请求状态S32(步骤S450),以及更新发布指针以指向下一个实例(步骤S470)。散列请求包含从此实例开始且长度为n的连续实例的字符,例如,参考表1,相应于实例0的散列请求包含字符串“abc”,相应于实例1的散列请求包含字符串“bcd”,依此类推。字符串“abc”及“bcd”可称为字符串“abcdxyzefgaf”的子字符串(substring)。
[0060] 图5是依据本发明实施例的散列回复处理程序的流程图。当有限状态机240从散列匹配器250接收到相应于一个实例的回复后(步骤S510),判断回复中是否包含匹配的信息(步骤S530)。当回复中包含不匹配的信息时(步骤S530中”否”的路径),更新此实例的状态为“NM”以指出此实例进入不匹配状态S34(步骤S550)。从散列匹配器250接收到的回复中包含先前请求的字符串,用以让有限状态机240辨认此回复相应于哪个实例。当一个实例进入不匹配状态S34时,有限状态机240便可于将来的时钟周期回收此实例的存储器空间给将来产生的实例使用。当回复中包含匹配的信息时(步骤S530中“是”的路径),有限状态机240从回复中取得匹配偏移量(步骤S571),发出相应于此实例的数据请求给最长字串匹配器260,其中,数据请求包含上述匹配偏移量,用以让最长字串匹配器260搜寻中介缓存器230中相应于此实例的字符串开始的字符串及数据缓存器210的滑动窗(sliding window)中从该匹配偏移量开始的字符串两者之间的最大匹配长度(步骤S573),更新此实例的匹配长度为n(步骤S575),以及更新此实例的状态为”DATA_ISSUED”以指出此实例进入数据请求状态S33(步骤S577)。举例来说,经过7个时钟周期后,有限状态机240依据散列匹配器250及最长字串匹配器260的回复结果将中介缓存器230的实例状态更新为表2:
[0061] 表2
[0062]
[0063] 表2显示相应于实例0至6的散列请求已经发出给散列匹配器250。有限状态机240已经从散列匹配器250接收到相应于实例0、2至3及5至6的回复,其中包含没有匹配的信息,即均为NM(No Match),即是说实例0、2至3及5至6对应的字符串“abc”“cdx”“dxy”“yze”“zef”均未在散列匹配器250中匹配,即均未在数据缓存器210的滑动窗(sliding window)中的原始字符串出现过。有限状态机240已经从散列匹配器250接收到相应于实例4的回复,其中包含匹配的信息,以及已经发出数据请求给最长字串匹配器260但尚未接收到任何回复,即实例4对应的字符串“xyz”在散列匹配器250中匹配,即字符串“xyz”在数据缓存器210的滑动窗中的原始字符串出现过;有限状态机240取得实例4对应的字符串“xyz”在滑动窗中的匹配偏移量offset,并发出包含该匹配偏移量offset的数据请求给最长字串匹配器260,用以搜寻中介缓存器230中相应于实例4的字符串“xyz”开始的字符串及数据缓存器
210的滑动窗中从偏移量1000开始的字符串两者之间的最大匹配长度。此外,有限状态机
240尚未从散列匹配器250接收到相应于实例1的任何回复。值得注意的是,在其它实施中,有限状态机240从回复中取得匹配偏移量(步骤S571)后直接发出相应于此实例的数据请求给最长字串匹配器260,并不会更新中介缓存器230中此实例的内容,即不会执行步骤S575和步骤S577。
[0064] 图6是依据本发明实施例的数据回复处理程序的流程图。当有限状态机240从最长字串匹配器260接收到相应于一个实例的回复后(步骤S610),从回复中取得最长字串匹配器260计算出的长度l(步骤S630),以及判断长度l是否小于最大匹配长度max_match(步骤S650)。当长度l小于最大匹配长度max_match时(步骤S650中“是”的路径),更新此实例的状态为“PM”以指出此实例进入部分匹配状态S37(步骤S671),以及更新此实例的匹配长度len=len+l(步骤S673)。当一个实例进入部分匹配状态S37时,有限状态机240便可于将来的时钟周期回收此实例的存储器空间给将来产生的实例使用。当长度l不小于(通常为等于)最大匹配长度max_match时(步骤S650中“否”的路径),更新此实例的状态为“FM”以指出此实例进入完全匹配状态S36(步骤S691),更新此实例的匹配长度为len=len+max_match(步骤S693),以及发出相应于此实例的另一数据请求给最长字串匹配器260,用以继续后续的字串比对(步骤S695)。值得注意的是,在图5如果不执行更新中介缓存器230中实例的内容的步骤,则图6中更新匹配长度时len还要加上实例所对应的子字符串的长度n(例如n=3)。
[0065] 在一个时钟周期中,有限状态机240除了执行散列请求程序,更执行退却处理程序。图7是依据本发明实施例的退却处理程序的流程图。在每一个时钟周期,有限状态机240取得退却指针指向的实例的状态(步骤S710),判断中介缓存器230中此实例的状态是否为不匹配状态(步骤S731)。当此实例的状态是不匹配状态时(步骤S731中“是”的路径),输出此实例的字符给格式化器270,使得格式化器270可据以压缩预取缓存器280中的待压缩字符串(步骤S733),更新此实例的状态为虚无值并更新退却指针以指向下一个实例,用以退却此实例,使得此存储器空间可提供给将来推入的实例(步骤S770)。当此实例的状态不是不匹配状态时(步骤S731中“否”的路径),判断中介缓存器230中此实例的状态是否为部分匹配状态(步骤S751)。当此实例的状态是部分匹配状态时(步骤S751中“是”的路径),输出此实例的匹配偏移量及匹配长度给格式化器270,使得格式化器270可据以压缩预取缓存器280中的待压缩字符串(步骤S753),更新此实例的状态为虚无值并更新退却指针以指向下一个实例,用以退却此实例,使得此存储器空间可提供给将来推入的实例(步骤S770)。格式化器270可使用LZ4、LZO(Lempel-Ziv-Oberhumer)、DEFLATE等算法来压缩待压缩的原始字符串。当此实例的状态为匹配但不是部分匹配状态时(步骤S751中“否”的路径),即为完全匹配时,则如图6S691所述,有限状态机240会发出相应于此实例的另一数据请求给最长字串匹配器260用以继续后续的字串比对,而并不会执行该实例的退却程序,在图7中步骤S751中“否”的路径会返回步骤S710继续等待该实例状态的变化。概括之,有限状态机240在图7的执行退却处理程序时,是按照中介缓存器230中各个实例关联的子字符串在待压缩字符串中的原始顺序(例如退却指针依照的顺序),并依据每一实例在中介缓存器230中对应状态、匹配长度及匹配偏移量(如后续表2至表5所示)输出结果给格式化器270,使得格式化器270据以压缩待压缩的原始字符串。后面会配合表2至表5详述之。
[0066] 接续表2的范例。假设在时钟周期c7,发布指针指向实例7,退却指针指向实例0,最大匹配长度max_match预设为16,且有限状态机240从最长字串匹配器260接收到相应于实例4的回复:参考图4。于此时钟周期,有限状态机240取得发布指针指向的实例7(步骤S410),为实例7发出散列请求给散列匹配器250,其中包含字符串“efg”(步骤S430),更新实例7的状态为“HASH_ISSUED”以指出实例7进入散列请求状态S32(步骤S450),以及更新发布指针以指向实例8(步骤S470)。参考图7。有限状态机240取得退却指针指向的实例0的状态(步骤S710)。因为实例0的状态为不匹配状态,有限状态机240输出实例0的字符“a”给格式化器270,使得格式化器270可据以压缩预取缓存器280中的待压缩的原始字符串(步骤S733),因为实例0的状态为不匹配状态,这里字符“a”保留不做压缩动作;并且让数据缓存器210的中滑动窗向前移动一个字符,即让数据缓存器210的中的字符“a”滑动进入其滑动窗中成为新字典的一部分,更新实例0的状态为虚无值“/”并更新退却指针以指向实例1(步骤S770)。参考图6。在此时钟周期,有限状态机240从相应于实例4的回复中取得最长字串匹配器260计算出的长度l=2(步骤S630)。因为l
[0067] 表3
[0068]
[0069] 接续表3的范例。假设在时钟周期c8,有限状态机240从散列匹配器250接收到相应于实例1的回复:参考图4。在此时钟周期,有限状态机240取得发布指针指向的实例8(步骤S410),为实例8发出散列请求给散列匹配器250,其中包含字符串“fga”(步骤S430),更新实例8的状态为“HASH_ISSUED”以指出实例8进入散列请求状态S32(步骤S450),以及更新发布指针以指向实例9(步骤S470)。参考图7。有限状态机240取得退却指针指向的实例1的状态(步骤S710)。因为实例1的状态为散列请求状态,有限状态机240不做任何处理。参考图5。于此时钟周期,有限状态机240从散列匹配器250接收到相应于实例1的回复(步骤S510)。因为回复中包含不匹配的信息,更新实例1的状态为“NM”以指出实例1进入不匹配状态S34(步骤S550)。中介缓存器230的实例状态更新为表4:
[0070] 表4
[0071]
[0072] 接续表4的范例。假设在时钟周期c9,有限状态机240从散列匹配器250接收到相应于实例7的回复:参考图4。在此时钟周期,有限状态机240取得发布指针指向的实例9(步骤S410),为实例9发出散列请求给散列匹配器250,其中包含字符串“gaf”(步骤S430),更新实例9的状态为“HASH_ISSUED”以指出实例9进入散列请求状态S32(步骤S450),以及更新发布指针以指向实例10(步骤S470)。参考图7。有限状态机240取得退却指针指向的实例1的状态(步骤S710)。因为实例1的状态为不匹配状态,有限状态机240输出实例1的字符“b”给格式化器270,使得格式化器270可据以压缩预取缓存器280中的待压缩的原始字符串(步骤S733),因为实例1的状态为不匹配状态,这里字符“b”保留不做压缩动作;并且让数据缓存器210的中滑动窗向前移动一个字符,即让数据缓存器210的中的字符“b”滑动进入其滑动窗中成为新字典的一部分,更新实例1的状态为虚无值“/”并更新退却指针以指向实例2(步骤S770)。参考图5。于此时钟周期,有限状态机240从散列匹配器250接收到相应于实例7的回复(步骤S510)。因为回复中包含不匹配的信息,更新实例7的状态为“NM”以指出实例7进入不匹配状态S34(步骤S550)。中介缓存器230的实例状态更新为表5:
[0073] 表5
[0074]索引 字符 状态 匹配长度(len) 匹配偏移量(offset)
0 a /    
1 b /    
2 c NM    
3 d NM    
4 x PM 5 1000
5 y NM    
6 z NM    
7 e NM    
8 f HASH_ISSUED    
9 g HASH_ISSUED    
10 a /    
11 f /    
[0075] 参考图7。经过一段时间,当有限状态机240取得退却指针指向的实例4的状态(步骤S710)。值得注意的是,在此之前,预取缓存器280中的待压缩的原始字符串中的字符“c”和“d”均为不匹配,因此保留不做压缩动作;并且数据缓存器210的中的字符“c”和“d”也已经滑动进入其滑动窗中成为新字典的一部分。在本时钟周期,因为实例4的状态为部分匹配状态,有限状态机240输出实例4的匹配偏移量offset=1000及匹配长度len=5给格式化器270,使得格式化器270可据以压缩预取缓存器280中的待压缩的原始字符串(步骤S753),因为实例4的状态为部分匹配状态且匹配长度len=5,因此预取缓存器280中的字符“xyzef”以(offset,len)代替,即以(1000,5)代替;并且让数据缓存器210的中滑动窗向前移动5个字符,即让数据缓存器210的中的字符“xyzef”滑动进入其滑动窗中成为新字典的一部分。
[0076] 如以上范例所示,虽然有限状态机240依实例的先后顺序发出相应的散列请求来启动压缩程序,应注意的是,但因为散列匹配器250及最长字串匹配器260的运算时间无法预期,使得每个实例无法依原来的顺序进入不匹配状态S340或部分匹配状态S370。尽管每个实例无法依原来的顺序进入不匹配状态S340或部分匹配状态S370,通过以上所述的实施例,有限状态机240还是可根据退却指针依原来顺序输出相应于每个实例的散列匹配器250及最长字串匹配器260的运算结果给格式化器270。
[0077] 图8是依据本发明实施例的散列匹配器的方块图。为加速散列匹配,散列匹配器可包含多个可平行处理的匹配路径,每一个路径包含先进先出队列、匹配器及存储器库(memory bank)。例如,第一匹配路径包含先进先出队列850_1、匹配器870_1及存储器库890_1,第二匹配路径包含先进先出队列850_2、匹配器870_2及存储器库890_2,依此类推。
散列函数(hash functions)810_1至810_4中的任何一个将有限状态机240传来的子字符串映射成散列索引(hash index),依据上述散列索引驱动选择器830以连接至匹配路径中的一个,用以传送此子字符串至连接上的匹配路径。当连接的匹配路径判定散列表(hash table)不包含此子字符串时,传送不匹配的信息给有限状态机240。当连接的匹配路径判定散列表包含此子字符串(即该子字符串在数据缓存器210的中的滑动窗中存在,例如散列表中包含实例4对应的子字符串“xyz”,即说明子字符串“xyz”在数据缓存器210的中的滑动窗中存在)时,传送匹配的信息及散列表中相应于此子字符串的匹配偏移量给有限状态机
240。虽然本发明实施例使用四套的匹配路径说明,本领域技术人员可依据设计需求于散列匹配器250中配置较多或较少的匹配路径,本发明并不因此受限。散列表分散存储于四个存储器库(memory banks)870_1至870_4。存储器库870_1至870_4可以快取存储器(cache)实现。散列表包含N笔条目(entries)。存储器库870_1存储第0笔至第(N/4-1)笔条目,存储器库870_2存储第(N/4)笔至第(N/2-1)笔条目,存储器库870_3存储第(N/2)笔至第(3N/4-1)笔条目,及存储器库870_4存储第(3N/4)笔至第(N-1)笔条目,即散列表按照散列表地址高两位来分布。在其它实施中,散列表也可以按照散列表地址的低两位或者散列表地址的其他位来分布。在本实施例中,每笔条目可包含多个,例如三个散列键(hash keys)的相关信息,而这三个散列键拥有相同的散列索引而形成散列链结(hash chain)。举例来说,n为3且使用16字节存储每笔条目的数据,数据结构如表6所示:
[0078] 表6
[0079]
[0080]
[0081] 每笔条目的第0字节存储标签“Tag”,使用固定位置的3比特分别表示此条目中的三个散列键是否有效。例如,3比特“100”代表此笔条目中的第一散列键有效而第二及第三散列键无效,3比特“110”代表此笔条目中的第一及第二散列键有效而第三散列键无效,依此类推。每笔条目的第1至3字节存储关联于一个散列索引的第一散列键“Hash_Key_1”,表示滑动窗的原始字符串中包含第一散列键“Hash_Key_1”对应的子字符串;第4至5字节存储关联于第一散列键的第一散列偏移量“Hash_Offset_1”,其代表滑动窗的原始字符串中所包含的第一散列键对应的子字符串的偏移量。此条目的第6至8字节存储关联于相同散列索引的第二散列键“Hash_Key_2”,表示滑动窗的原始字符串中包含第二散列键“Hash_Key_2”对应的子字符串;第9至10字节存储关联于第二散列键的第二散列偏移量“Hash_Offset_2”,其代表滑动窗的原始字符串中所包含的第二散列键对应的子字符串的偏移量。此条目的第11至13字节存储关联于相同散列索引的第三散列键“Hash_Key_3”,表示滑动窗的原始字符串中包含第三散列键”Hash_Key_3”对应的子字符串;第14至15字节存储关联于第三散列键的第三散列偏移量”Hash_Offset_3”,其代表滑动窗的原始字符串中所包含的第三散列键对应的子字符串的偏移量。本领域技术人员可依据设计需求改变每笔条目的内容,用以存储更多或更少的散列键及关联的散列偏移量,本发明并不因此受限。
[0082] 为了加速散列匹配,散列匹配器250可包含四个散列函数810_1至810_4,散列函数810_1至810_4执行相同的算法,用以将任意的子字符串映射成固定长度的散列索引(hash index)。散列索引的长度少于子字符串的长度。有限状态机240可以以四发射(4-issue)的方式在同一时钟周期同时输出四个散列请求分别给散列函数810_1至810_4中的一个。散列函数810_1至810_4中的任何一个依据映射出的散列索引驱动选择器830连接自己至先进先出队列850_1至850_4中的一个,用以将散列请求推入连接的先进先出队列。例如,当散列函数810_1将字符串“abc”(亦即是子字符串)映射出散列索引“0”时,驱动选择器830连接散列函数810_1至先进先出队列850_1,用以将散列请求推入先进先出队列850_1。在此须注意的是,散列请求包含有限状态机240产生的字符串及相应散列函数产生的散列索引。
[0083] 散列匹配器250可包含四个平行处理的匹配器(matchers)870_1至870_4分别连接于先进先出队列850_1及存储器库890_1之间、先进先出队列850_2及存储器库890_2之间、先进先出队列850_3及存储器库890_3之间及先进先出队列850_4及存储器库890_4之间。匹配器870_1至870_4中的任何一个从连接的先进先出队列取出一个最早进入的散列请求,从其连接的存储器库找寻符合散列请求中的散列索引的条目,并且藉检查找寻到的条目的标签判断是否存在有效的散列键。当不存在有效的散列键时,匹配器判定找寻不到符合散列请求中的散列索引的条目,并且回复有限状态机240关于散列请求中的字符串不匹配的信息。当存在有效的散列键时,匹配器更判断是否存在任何有效的散列键与散列请求中的字符串相同。当所有有效的散列键与散列请求中的字符串不同时,匹配器回复有限状态机240关于散列请求中的字符串不匹配的信息。当存在一个有效的散列键与散列请求中的字符串相同时,此匹配器回复有限状态机240关于散列请求中的字符串已匹配的信息及此散列键关联的散列偏移量。
[0084] 图9是依据本发明实施例的匹配器的方块图。虽然本发明实施例以匹配器870_1举例说明,熟习此技艺人士可据以类推出匹配器870_2至870_4的技术细节。匹配器870_1包含比较器910_1至910_3及仲裁器930。比较器910_1从先进先出队列850_1取得散列请求中的字符串以及从存储器库890_1中相应条目的第一散列键及第一散列偏移量,以及判断字符串与第一散列键是否相同。当字符串与第一散列键相同时,比较器910_1输出第一散列偏移量给仲裁器930。比较器910_2从先进先出队列850_1取得散列请求中的字符串以及从存储器库890_1中相应条目的第二散列键及第二散列偏移量,以及判断字符串与第二散列键是否相同。当字符串与第二散列键相同时,比较器910_2输出第二散列偏移量给仲裁器930。比较器910_3从先进先出队列850_1取得散列请求中的字符串以及从存储器库890_1中相应条目的第三散列键及第三散列偏移量,以及判断字符串与第三散列键是否相同。当字符串与第三散列键相同时,比较器910_3输出第三散列偏移量给仲裁器930。当仲裁器930从比较器910_1至910_3没有接收到任何散列偏移量时,回复有限状态机240关于散列请求中的字符串不匹配的信息。当仲裁器930从比较器910_1至910_3接收到一个散列偏移量时,回复有限状态机240关于散列请求中的字符串已匹配的信息及接收到的散列偏移量。当仲裁器930从比较器910_1至910_3接收到二个以上散列偏移量时,回复有限状态机240关于散列请求中的字符串已匹配的信息及接收到的散列偏移量中的最小值。举例而言,散列请求中的字符串“abc”,其通过散列函数810_1映射(或计算)出散列索引“0”时,对应的存储器库890_1中相应散列索引“0”的条目包括3个散列键及其散列偏移量:第一散列键“abc”(散列偏移量为
50),第二散列键“xyz”(散列偏移量为100)及第三散列键“abc”(散列偏移量为200),值得注意的是,虽然散列键“abc”和“xyz”的键值不同,但有可能经过散列函数810_1映射(或计算)出的散列索引却相同,这跟散列函数的运算规则有关,例如这里的散列键“abc”和“xyz”的散列索引均为“0”;此外,2个相同的散列键“abc”表示在滑动窗的原始字符串中的不同偏移位置出现了2次子字符串“abc”,但其散列偏移量不同。因为第一散列键“abc”和第三散列键“abc”均与散列请求中的字符串“abc”相同,因此比较器910_1和比较器910_3会分别输出第一散列偏移量(50)和第三散列偏移量(200)给仲裁器930,此时仲裁器930会将字符串“abc”已匹配的信息及较小的散列偏移量50回复有限状态机240。值得注意的是,在其它实施方式中,当存储器库中的每个散列表条目有前述多个匹配(即多个散列键均为“abc”)时,仲裁器
930会回复有限状态机240关于散列请求中的字符串已匹配的信息,并且将所有匹配的散列偏移量均推送给有限状态机240。
[0085] 图10是依据本发明实施例的散列匹配方法的流程图。散列函数810_1至810_4并行接收从有限状态机240传来的多个子字符串(步骤S1010)。接着,散列函数810_1将接收的子字符串映射成散列索引及依据散列索引驱动选择器830连接至多个匹配路径中的一个(步骤S1031),散列函数810_2将接收的子字符串映射成散列索引及依据散列索引驱动选择器830连接至多个匹配路径中的一个(步骤S1033),依此类推。在此须注意的是,在步骤S1031、S1033、S1035、S1037中,散列函数810_1至810_4中的至少二者可连接到相同的匹配路径,并且将包含这些子字符串的散列请求推入此匹配路径中的先进先出队列。接着,当散列函数
810_1连接的匹配路径中的匹配器(如匹配器870_1、870_2、870_3或870_4)判定散列表不包含散列函数810_1接收的子字符串时,传送不匹配的信息给有限状态机240(步骤S1051),以及当散列函数810_1连接的匹配路径中的匹配器判定散列表包含散列函数810_1接收的子字符串时,传送匹配的信息及散列表中相应于子字符串的匹配偏移量给有限状态机240(步骤S1071)。当散列函数810_2连接的匹配路径中的匹配器(如匹配器870_1、870_2、870_3或
870_4)判定散列表不包含散列函数810_2接收的子字符串时,传送不匹配的信息给有限状态机240(步骤S1053),以及当散列函数810_2连接的匹配路径中的匹配器判定散列表包含散列函数810_2接收的子字符串时,传送匹配的信息及散列表中相应于子字符串的匹配偏移量给有限状态机240(步骤S1073)。步骤S1055、S1075、S1057及S1077的细节可从如上所述的步骤推论而得,不再赘述。在此须注意的是,当一个匹配路径的先进先出队列包含二个以上的散列请求时,此匹配路径的匹配器依据散列请求到达的先后顺序执行如上所述的判断。例如,当一个匹配路径的先进先出队列包含散列函数810_1及810_2的散列请求且散列函数810_1的散列请求较早时,步骤S1031、S1051及S1071的执行早于步骤S1033、S1053及S1073的执行。
[0086] 本发明的前述有限状态机可以在同一时钟周期同时输出多个散列请求分别给多个散列函数并行进行散列匹配,并且藉由本发明之中介缓存器记录各实例的状态、匹配长度及匹配偏移量,使得乱序执行散列匹配和最长匹配后的实例能够按照待压缩字符串中的原始顺序退却以进行压缩。
[0087] 虽然图1、2、8、9中包含了以上描述的元件,但不排除在不违反发明的精神下,使用更多其他的附加元件,以达成更佳的技术效果。此外,虽然第4至7及10图的方法流程图采用特定的顺序来执行,但是在不违反发明精神的情况下,熟习此技艺人士可以在达到相同效果的前提下,修改这些步骤间的顺序,所以,本发明并不局限于仅使用如上所述的顺序。
[0088] 虽然本发明使用以上实施例进行说明,但需要注意的是,这些描述并非用以限缩本发明。相反地,此发明涵盖了本领域技术人员显而易见的修改与相似设置。所以,申请权利要求范围须以最宽广的方式解释来包含所有显而易见的修改与相似设置。
相关专利内容
标题 发布/更新时间 阅读量
一种离子加速器 2020-05-11 256
一种自屏蔽加速器及利用该加速器的PET塑料瓶生产线 2020-05-12 734
防磁高电压加速管 2020-05-12 111
一种电子加速器 2020-05-11 426
粒子加速器 2020-05-11 753
超导高频加速腔的制造方法 2020-05-13 752
一种电子加速器加速管粘贴工装 2020-05-11 335
大功率加速器 2020-05-12 164
高压型加速器 2020-05-12 808
一种加速管 2020-05-11 108
高效检索全球专利

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

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

申请试用

分析报告

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

申请试用

QQ群二维码
意见反馈