CN107180018B - 基于散列的加速压缩方法以及使用此方法的装置 - Google Patents
基于散列的加速压缩方法以及使用此方法的装置 Download PDFInfo
- Publication number
- CN107180018B CN107180018B CN201710347209.9A CN201710347209A CN107180018B CN 107180018 B CN107180018 B CN 107180018B CN 201710347209 A CN201710347209 A CN 201710347209A CN 107180018 B CN107180018 B CN 107180018B
- Authority
- CN
- China
- Prior art keywords
- mentioned
- hash
- matching
- state
- examples detailed
- 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
Links
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3086—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/126—Character encoding
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0613—Improving I/O performance in relation to throughput
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/06—Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
- G06F5/065—Partitioned buffers, e.g. allowing multiple independent queues, bidirectional FIFO's
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3091—Data deduplication
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6017—Methods or arrangements to increase the throughput
- H03M7/6023—Parallelization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4498—Finite state machines
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Software Systems (AREA)
Abstract
基于散列的加速压缩方法以及使用此方法的装置。本发明的实施例提出一种基于散列的加速压缩方法,实施于微处理器的压缩加速器中,至少包含以下步骤:从数据缓存器提取待压缩字符串;存储相应于待压缩字符串的多个实例于中介缓存器,其中,每一实例关联于子字符串;为每一实例发送散列请求给散列匹配器,并且依据散列匹配器传来的第一回复发送数据请求给最长字串匹配器,并且依据最长字串匹配器传来的第二回复更新实例的状态、匹配长度及匹配偏移量;以及按照实例关联的子字符串在待压缩字符串中的原始顺序,并依据每一实例的状态、匹配长度及匹配偏移量输出结果给格式化器。
Description
技术领域
本发明涉及一种微处理器技术,特别涉及一种基于散列的加速压缩方法以及使用此方法的装置。
背景技术
对于压缩加速器(compression accelerator)来说,最复杂的部分在于进行最长前缀字符串匹配(longest-prefix string matching),而最长前缀字符串匹配方法通常可归类为:基于内容可寻址内存(CAM-,Content Addressable Memory-based);及基于散列(hash-based)二种。基于散列的字符串匹配通常都藉由降低散列链长度和/或使用低冲突函数来进行优化,而上述优化均为软件算法上的优化。然而,软件的执行效能往往劣于专属硬件的执行效能。因此,需要一种基于散列的加速压缩方法以及使用此方法的装置,用以克服上述缺陷。
发明内容
本发明的实施例提出一种基于散列的加速压缩方法,实施于微处理器的压缩加速器中,至少包含以下步骤:从数据缓存器提取待压缩字符串;存储相应于待压缩字符串的多个实例于中介缓存器,其中,每一实例关联于子字符串,包含关联的子字符串的状态、匹配长度及匹配偏移量;为每一实例发送散列请求给散列匹配器,并且依据散列匹配器传来的第一回复发送数据请求给最长字串匹配器,并且依据最长字串匹配器传来的第二回复更新实例的状态、匹配长度及匹配偏移量;以及按照实例关联的子字符串在待压缩字符串中的原始顺序,并依据每一实例的状态、匹配长度及匹配偏移量输出结果给格式化器,使得格式化器据以压缩待压缩字符串。
本发明的实施例提出一种基于散列的加速压缩装置,至少包含:中介缓存器;及有限状态机。中介缓存器存储相应于数据缓存器中的待压缩字符串的多个实例,其中,每一实例关联于子字符串,包含关联的子字符串的状态、匹配长度及匹配偏移量。有限状态机耦接于中介缓存器,为每一实例发送散列请求给散列匹配器,并且依据散列匹配器传来的第一回复发送数据请求给最长字串匹配器,并且依据最长字串匹配器传来的第二回复更新实例的状态、匹配长度及匹配偏移量;以及按照实例关联的子字符串在待压缩字符串中的原始顺序,并依据每一实例的状态、匹配长度及匹配偏移量输出结果给格式化器,使得格式化器据以压缩待压缩字符串。
本发明的实施例提出一种基于散列的加速压缩装置,至少包含:有限状态机;及散列匹配器。散列匹配器耦接于有限状态机,包含:多个散列函数;选择器,耦接于散列函数;以及对应于多个散列函数的多个匹配路径,耦接至选择器。多个散列函数并行接收有限状态机传来的多个子字符串,并将每一子字符串映射成散列索引,及依据散列索引驱动选择器以连接至匹配路径中的一个。当连接的匹配路径判定散列表不包含子字符串时,传送不匹配的信息给有限状态机。当连接的匹配路径判定散列表包含子字符串时,传送匹配的信息及散列表中相应于子字符串的匹配偏移量给有限状态机。
本发明的前述有限状态机可以在同一时钟周期同时输出多个散列请求分别给多个散列函数并行进行散列匹配,并且藉由本发明之中介缓存器记录各实例的状态、匹配长度及匹配偏移量,使得乱序执行散列匹配和最长匹配后的实例能够按照待压缩字符串中的原始顺序退却以进行压缩。
附图说明
图1是依据本发明实施例的微处理器的***架构图。
图2是依据本发明实施例的压缩加速器的方块图。
图3是依据本发明实施例的状态图。
图4是依据本发明实施例的散列请求程序的流程图。
图5是依据本发明实施例的散列回复处理程序的流程图。
图6是依据本发明实施例的数据回复处理程序的流程图。
图7是依据本发明实施例的退却处理程序的流程图。
图8是依据本发明实施例的散列匹配器的方块图。
图9是依据本发明实施例的匹配器的方块图。
图10是依据本发明实施例的散列匹配方法的流程图。
【符号说明】
10 微处理器;
110 末级快取;
130 加速器接口;
150_1~150_i 压缩加速器;
170_1~170_j 处理器内核;
20 压缩加速器;
210 数据缓存器;
220 提取单元;
230 中介缓存器;
240 有限状态机;
250 散列匹配器;
260 最长字串匹配器;
270 格式化器;
280 预取缓存器;
S31 空闲状态;
S32 散列请求状态;
S33 数据请求状态;
S34 不匹配状态;
S36 完全匹配状态;
S37 部分匹配状态;
S410~S470 方法步骤;
S510~S577 方法步骤;
S610~S695 方法步骤;
S710~S770 方法步骤;
810_1~810_4 散列函数;
830 选择器;
850_1~850_4 先进先出队列;
870_1~870_4 匹配器;
890_1~890_4 存储器库;
910_1~910_3 比较器;
930 仲裁器;
S1010~S1077 方法步骤。
具体实施方式
以下说明为完成发明的优选实现方式,其目的在于描述本发明的基本精神,但并不用以限定本发明。实际的发明内容必须参考之后的权利要求范围。
必须了解的是,使用于本说明书中的“包含”、“包括”等词,用以表示存在特定的技术特征、数值、方法步骤、作业处理、元件和/或组件,但并不排除可加上更多的技术特征、数值、方法步骤、作业处理、元件、组件,或以上的任意组合。
在权利要求中使用如“第一”、“第二”、“第三”等词用来修饰权利要求中的元件,并非用来表示之间具有优先权顺序,先行关系,或者是一个元件先于另一个元件,或者是执行方法步骤时的时间先后顺序,仅用来区别具有相同名字的元件。
图1是依据本发明实施例的微处理器的***架构图。微处理器10可包含多个处理器内核170_1至170_j及多个加速器(Accelerator)150_1至150_i,i、j为整数,随着不同设计需求而有不同。加速器150_1至150_i举例而言可以是加速功能单元(AFU,AcceleratorFunctional 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通过虚拟地址(virtualaddress)进行数据交换。加速器150_1至150_i中的任何一个可协助处理器内核170_1至170_j以更有效率地方式执行特定功能,上述特定功能包括例如压缩,加解密或正则匹配等运算量较大的功能,从而减轻处理器内核170_1至170_j的工作负担。加速器150_1至150_i中的一个可为压缩加速器(compression accelerator),用以完成字符串压缩功能。
图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)及匹配长度(matchedlength)等。由于压缩加速器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)来完成本发明实施例中描述的控制。
图3是依据本发明实施例的状态图。初始时,提取单元220从数据缓存器210的原始字符串提取固定长度的待压缩的字符串并依序存储其中的字符至中介缓存器230的实例。举例来说,提取单元220从数据缓存器210提取字符串”abcdxyzefgaf”并依序存储其中的字符至中介缓存器230。初始时,每个实例的状态为空闲状态(idle state)S31,可表示为虚无值(null value)。表1显示实例的初始结果:
表1
索引 | 字符 | 状态 | 匹配长度(len) | 匹配偏移量(offset) |
0 | a | / | ||
1 | b | / | ||
2 | c | / | ||
3 | d | / | ||
4 | x | / | ||
5 | y | / | ||
6 | z | / | ||
7 | e | / | ||
8 | f | / | ||
9 | g | / | ||
10 | a | / | ||
11 | f | / |
其中,符号“/”代表虚无值。
基于散列的加速压缩方法包含数个程序:散列请求;散列回复处理;数据回复处理;及退却处理。散列请求及退却处理为并行处理程序,并且拥有较高的优先级。图4是依据本发明实施例的散列请求程序的流程图。在每一个时钟周期,有限状态机240取得发布指针指向的实例(步骤S410),为取得的实例发出散列请求给散列匹配器250(步骤S430),更新此实例的状态为“HASH_ISSUED”以指出此实例进入散列请求状态S32(步骤S450),以及更新发布指针以指向下一个实例(步骤S470)。散列请求包含从此实例开始且长度为n的连续实例的字符,例如,参考表1,相应于实例0的散列请求包含字符串“abc”,相应于实例1的散列请求包含字符串“bcd”,依此类推。字符串“abc”及“bcd”可称为字符串“abcdxyzefgaf”的子字符串(substring)。
图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:
表2
索引 | 字符 | 状态 | 匹配长度(len) | 匹配偏移量(offset) |
0 | a | NM | ||
1 | b | HASH_ISSUED | ||
2 | c | NM | ||
3 | d | NM | ||
4 | x | DATA_ISSUED | 3 | 1000 |
5 | y | NM | ||
6 | z | NM | ||
7 | e | / | ||
8 | f | / | ||
9 | g | / | ||
10 | a | / | ||
11 | f | / |
表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。
图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)。
在一个时钟周期中,有限状态机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详述。
接续表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<max_match,更新实例4的状态为”PM”以指出实例4进入部分匹配状态S37(步骤S671),以及更新实例4的匹配长度len=3+2=5(步骤S673)。中介缓存器230的实例状态更新为表3:
表3
索引 | 字符 | 状态 | 匹配长度(len) | 匹配偏移量(offset) |
0 | / | |||
1 | b | HASH_ISSUED | ||
2 | c | NM | ||
3 | d | NM | ||
4 | x | PM | 5 | 1000 |
5 | y | NM | ||
6 | z | NM | ||
7 | e | HASH_ISSUED | ||
8 | f | / | ||
9 | g | / | ||
10 | a | / | ||
11 | f | / |
接续表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:
表4
索引 | 字符 | 状态 | 匹配长度(len) | 匹配偏移量(offset) |
0 | a | / | ||
1 | b | NM | ||
2 | c | NM | ||
3 | d | NM | ||
4 | x | PM | 5 | 1000 |
5 | y | NM | ||
6 | z | NM | ||
7 | e | HASH_ISSUED | ||
8 | f | HASH_ISSUED | ||
9 | g | / | ||
10 | a | / | ||
11 | f | / |
接续表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:
表5
索引 | 字符 | 状态 | 匹配长度(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 | / |
参考图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”滑动进入其滑动窗中成为新字典的一部分。
如以上范例所示,虽然有限状态机240依实例的先后顺序发出相应的散列请求来启动压缩程序,应注意的是,但因为散列匹配器250及最长字串匹配器260的运算时间无法预期,使得每个实例无法依原来的顺序进入不匹配状态S340或部分匹配状态S370。尽管每个实例无法依原来的顺序进入不匹配状态S340或部分匹配状态S370,通过以上所述的实施例,有限状态机240还是可根据退却指针依原来顺序输出相应于每个实例的散列匹配器250及最长字串匹配器260的运算结果给格式化器270。
图8是依据本发明实施例的散列匹配器的方块图。为加速散列匹配,散列匹配器可包含多个可平行处理的匹配路径,每一个路径包含先进先出队列、匹配器及存储器库(memory bank)。例如,第一匹配路径包含先进先出队列850_1、匹配器870_1及存储器库890_1,第二匹配路径包含先进先出队列850_2、匹配器870_2及存储器库890_2,依此类推。散列函数(hashfunctions)810_1至810_4中的任何一个将有限状态机240传来的子字符串映射成散列索引(hash index),依据上述散列索引驱动选择器830以连接至匹配路径中的一个,用以传送此子字符串至连接上的匹配路径。当连接的匹配路径判定散列表(hashtable)不包含此子字符串时,传送不匹配的信息给有限状态机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所示:
表6
每笔条目的第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”,其代表滑动窗的原始字符串中所包含的第三散列键对应的子字符串的偏移量。本领域技术人员可依据设计需求改变每笔条目的内容,用以存储更多或更少的散列键及关联的散列偏移量,本发明并不因此受限。
为了加速散列匹配,散列匹配器250可包含四个散列函数810_1至810_4,散列函数810_1至810_4执行相同的算法,用以将任意的子字符串映射成固定长度的散列索引(hashindex)。散列索引的长度少于子字符串的长度。有限状态机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产生的字符串及相应散列函数产生的散列索引。
散列匹配器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关于散列请求中的字符串已匹配的信息及此散列键关联的散列偏移量。
图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。
本发明的前述有限状态机可以在同一时钟周期同时输出多个散列请求分别给多个散列函数并行进行散列匹配,并且藉由本发明之中介缓存器记录各实例的状态、匹配长度及匹配偏移量,使得乱序执行散列匹配和最长匹配后的实例能够按照待压缩字符串中的原始顺序退却以进行压缩。
图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的执行。
虽然图1、2、8、9中包含了以上描述的元件,但不排除在不违反发明的精神下,使用更多其他的附加元件,以达成更佳的技术效果。此外,虽然第4至7及10图的方法流程图采用特定的顺序来执行,但是在不违反发明精神的情况下,本领域技术人员可以在达到相同效果的前提下,修改这些步骤间的顺序,所以,本发明并不局限于仅使用如上所述的顺序。
虽然本发明使用以上实施例进行说明,但需要注意的是,这些描述并非用以限缩本发明。相反地,此发明涵盖了本领域技术人员显而易见的修改与相似设置。所以,申请权利要求范围须以最宽广的方式解释来包含所有显而易见的修改与相似设置。
Claims (17)
1.一种基于散列的加速压缩方法,实施于压缩加速器中,包含:
从数据缓存器提取待压缩字符串;
存储相应于上述待压缩字符串的多个实例于中介缓存器,其中,每一上述实例关联于上述待压缩字符串中的子字符串,包含上述关联的子字符串的状态、匹配长度及匹配偏移量;
为每一上述实例发送散列请求给散列匹配器,并且依据上述散列匹配器传来的第一回复是否包含匹配的信息或不匹配的信息,当上述第一回复中包含上述匹配的信息时发送数据请求给最长字串匹配器,并且依据上述最长字串匹配器传来的第二回复包含的长度是否小于最大匹配长度的判断,更新上述实例的上述状态、上述匹配长度及上述匹配偏移量;以及
按照上述实例关联的上述子字符串在上述待压缩字符串中的原始顺序,并依据每一上述实例的上述状态、上述匹配长度及上述匹配偏移量输出一结果给格式化器,使得上述格式化器据以压缩上述待压缩字符串。
2.如权利要求1所述的基于散列的加速压缩方法,其中当上述第一回复包含上述不匹配的信息时,将上述实例的上述状态更新为不匹配状态;以及
当上述第一回复包含上述匹配的信息时,还将上述实例的上述状态更新为数据请求状态,更新上述实例的上述匹配长度为上述子字符串的长度,以及更新上述实例的上述匹配偏移量为上述第一回复中的偏移量。
3.如权利要求1所述的基于散列的加速压缩方法,其中
当上述第二回复包含的上述长度小于上述最大匹配长度时,更新上述实例的上述状态为部分匹配状态,以及以上述长度更新上述实例的上述匹配长度;以及
当上述第二回复包含的上述长度不小于上述最大匹配长度时,更新上述实例的上述状态为完全匹配状态,以上述最大匹配长度更新上述实例的上述匹配长度,发出相应于上述实例的另一数据请求给上述最长字串匹配器,用以继续后续的字串比对。
4.如权利要求1所述的基于散列的加速压缩方法,在按照上述实例关联的上述子字符串在上述待压缩字符串中的原始顺序,并依据每一上述实例的上述状态、上述匹配长度及上述匹配偏移量输出一结果给格式化器的步骤,还包含:
当上述实例的上述状态为不匹配状态时,上述结果包含上述实例中的字符;以及
当上述实例的上述状态为部分匹配状态或者完全匹配状态时,上述结果包含上述实例中的上述匹配长度及上述匹配偏移量。
5.如权利要求1所述的基于散列的加速压缩方法,其中,上述压缩加速器包括有限状态机,上述有限状态机包含散列请求程序、散列回复处理程序、数据回复处理程序及退却处理程序,
其中,上述散列请求程序为每一上述实例发送上述散列请求给上述散列匹配器,
其中,上述散列回复处理程序依据上述散列匹配器传来的上述第一回复发送上述数据请求给上述最长字串匹配器,
其中,上述数据回复处理程序依据上述最长字串匹配器传来的上述第二回复更新上述实例的上述状态、上述匹配长度及上述匹配偏移量,
其中,上述退却处理程序按照上述实例关联的上述子字符串在上述待压缩字符串中的原始顺序,并依据每一上述实例的上述状态、上述匹配长度及上述匹配偏移量输出上述结果给上述格式化器。
6.如权利要求5所述的基于散列的加速压缩方法,其中,上述散列请求程序及上述退却处理程序为并行处理程序,并且拥有较高的优先级。
7.如权利要求1所述的基于散列的加速压缩方法,其中,上述实例关联的上述子字符串在上述待压缩字符串中的原始顺序由退却指针控制。
8.如权利要求1所述的基于散列的加速压缩方法,其中,上述子字符串的长度为3。
9.一种基于散列的加速压缩装置,包含:
中介缓存器,存储相应于数据缓存器中的待压缩字符串的多个实例,其中,每一上述实例关联于上述待压缩字符串中的一子字符串,包含上述关联的子字符串的状态、匹配长度及匹配偏移量;以及
有限状态机,耦接于上述中介缓存器,为每一上述实例发送散列请求给散列匹配器,并且依据上述散列匹配器传来的第一回复是否包含匹配的信息或不匹配的信息,当上述第一回复中包含上述匹配的信息时发送数据请求给最长字串匹配器,并且依据上述最长字串匹配器传来的第二回复包含的长度是否小于最大匹配长度的判断,更新上述实例的上述状态、上述匹配长度及上述匹配偏移量;以及按照上述实例关联的上述子字符串在上述待压缩字符串中的原始顺序,并依据每一上述实例的上述状态、上述匹配长度及上述匹配偏移量输出一结果给格式化器,使得上述格式化器据以压缩上述待压缩字符串。
10.如权利要求9所述的基于散列的加速压缩装置,其中,上述有限状态机当上述第一回复包含上述不匹配的信息时,将上述实例的上述状态更新为不匹配状态;以及当上述第一回复包含上述匹配的信息时,还将上述实例的上述状态更新为数据请求状态,更新上述实例的上述匹配长度为上述子字符串的长度,以及更新上述实例的上述匹配偏移量为上述第一回复中的偏移量。
11.如权利要求9所述的基于散列的加速压缩装置,其中,当上述第二回复包含的上述长度小于上述最大匹配长度时,更新上述实例的上述状态为部分匹配状态,以及以上述长度更新上述实例的上述匹配长度;以及当上述第二回复包含的上述长度不小于上述最大匹配长度时,更新上述实例的上述状态为完全匹配状态,以上述最大匹配长度更新上述实例的上述匹配长度,发出相应于上述实例的另一数据请求给上述最长字串匹配器,用以继续后续的字串比对。
12.如权利要求9所述的基于散列的加速压缩装置,其中,上述有限状态机当上述实例的上述状态为不匹配状态时,上述结果包含上述实例中的字符;以及当上述实例的上述状态为部分匹配状态或者完全匹配状态时,上述结果包含上述实例中的上述匹配长度及上述匹配偏移量。
13.如权利要求9所述的基于散列的加速压缩装置,其中,上述有限状态机包含散列请求程序、散列回复处理程序、数据回复处理程序及退却处理程序,
其中,上述散列请求程序为每一上述实例发送上述散列请求给上述散列匹配器,
其中,上述散列回复处理程序依据上述散列匹配器传来的上述第一回复发送上述数据请求给上述最长字串匹配器,
其中,上述数据回复处理程序依据上述最长字串匹配器传来的上述第二回复更新上述实例的上述状态、上述匹配长度及上述匹配偏移量,
其中,上述退却处理程序按照上述实例关联的上述子字符串在上述待压缩字符串中的原始顺序,并依据每一上述实例的上述状态、上述匹配长度及上述匹配偏移量输出上述结果给上述格式化器。
14.如权利要求13所述的基于散列的加速压缩装置,其中,上述散列请求程序及上述退却处理程序为并行处理程序,并且拥有较高的优先级。
15.如权利要求9所述的基于散列的加速压缩装置,其中,上述中介缓存器及上述有限状态机设置于压缩加速器中,以及上述压缩加速器设置于处理器内核之外。
16.如权利要求9所述的基于散列的加速压缩装置,其中,上述实例关联的上述子字符串在上述待压缩字符串中的原始顺序由退却指针控制。
17.如权利要求9所述的基于散列的加速压缩装置,其中,上述子字符串的长度为3。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710347209.9A CN107180018B (zh) | 2017-05-17 | 2017-05-17 | 基于散列的加速压缩方法以及使用此方法的装置 |
US15/673,736 US9979414B1 (en) | 2017-05-17 | 2017-08-10 | Methods for accelerating hash-based compression and apparatuses using the same |
EP17207638.2A EP3404838A1 (en) | 2017-05-17 | 2017-12-15 | Methods for accelerating hash-based compression and apparatuses using the same |
TW106144377A TWI655580B (zh) | 2017-05-17 | 2017-12-18 | 基於散列的加速壓縮方法以及使用此方法的裝置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710347209.9A CN107180018B (zh) | 2017-05-17 | 2017-05-17 | 基于散列的加速压缩方法以及使用此方法的装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107180018A CN107180018A (zh) | 2017-09-19 |
CN107180018B true CN107180018B (zh) | 2018-11-20 |
Family
ID=59831860
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710347209.9A Active CN107180018B (zh) | 2017-05-17 | 2017-05-17 | 基于散列的加速压缩方法以及使用此方法的装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9979414B1 (zh) |
EP (1) | EP3404838A1 (zh) |
CN (1) | CN107180018B (zh) |
TW (1) | TWI655580B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107317584B (zh) * | 2017-06-28 | 2020-11-06 | 上海兆芯集成电路有限公司 | 加速压缩方法以及加速压缩装置 |
CN107612891B (zh) * | 2017-08-25 | 2020-09-11 | 国网辽宁省电力有限公司 | 一种数据压缩加密电路 |
US10476518B1 (en) * | 2018-12-06 | 2019-11-12 | Nyquist Semiconductor Limited | Hardware friendly data compression |
CN109857463B (zh) * | 2019-01-30 | 2020-12-01 | 上海兆芯集成电路有限公司 | 加速压缩方法以及加速压缩装置 |
CN109828789B (zh) * | 2019-01-30 | 2020-11-27 | 上海兆芯集成电路有限公司 | 加速压缩方法以及加速压缩装置 |
CN109802686B (zh) * | 2019-01-30 | 2022-12-06 | 上海兆芯集成电路有限公司 | 加速压缩方法以及加速压缩装置 |
CN109802685B (zh) * | 2019-01-30 | 2022-12-27 | 上海兆芯集成电路有限公司 | 加速压缩方法以及加速压缩装置 |
CN110674364B (zh) * | 2019-08-30 | 2021-11-23 | 北京浩瀚深度信息技术股份有限公司 | 一种利用fpga实现的滑动字符串匹配的方法 |
US11593311B2 (en) * | 2019-09-24 | 2023-02-28 | Ati Technologies Ulc | Compression system with longest match processing for generating compressed data |
CN111259203B (zh) * | 2020-01-08 | 2023-08-25 | 上海兆芯集成电路股份有限公司 | 数据压缩器以及数据压缩方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6202090B1 (en) * | 1997-12-11 | 2001-03-13 | Cisco Technology, Inc. | Apparatus and method for downloading core file in a network device |
US9112525B1 (en) * | 2014-03-28 | 2015-08-18 | Comtech Ef Data Corp. | System and method for parallel hash-based data compression |
CN106021356A (zh) * | 2015-05-11 | 2016-10-12 | 上海兆芯集成电路有限公司 | 依据输入区块类型使用动态散列算法的硬件数据压缩器 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4558302A (en) * | 1983-06-20 | 1985-12-10 | Sperry Corporation | High speed data compression and decompression apparatus and method |
JP4242970B2 (ja) * | 1998-07-09 | 2009-03-25 | 富士通株式会社 | データ圧縮方法及びデータ圧縮装置 |
US7681018B2 (en) * | 2000-08-31 | 2010-03-16 | Intel Corporation | Method and apparatus for providing large register address space while maximizing cycletime performance for a multi-threaded register file set |
US7873782B2 (en) * | 2004-11-05 | 2011-01-18 | Data Robotics, Inc. | Filesystem-aware block storage system, apparatus, and method |
KR101146484B1 (ko) * | 2004-11-05 | 2012-07-05 | 데이터 로보틱스, 인크. | 저장 시스템 상태 지시자 방법 및 저장 시스템 |
US20060248095A1 (en) * | 2005-04-29 | 2006-11-02 | Cisco Technology, Inc. (A California Corporation) | Efficient RAM lookups by means of compressed keys |
US9363339B2 (en) * | 2011-07-12 | 2016-06-07 | Hughes Network Systems, Llc | Staged data compression, including block level long range compression, for data streams in a communications system |
GB2524516A (en) * | 2014-03-25 | 2015-09-30 | Ibm | Hardware compression method finding backward references with multi-level hashes |
JP6319740B2 (ja) * | 2014-03-25 | 2018-05-09 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | データ圧縮を高速化する方法、並びに、データ圧縮を高速化するためのコンピュータ、及びそのコンピュータ・プログラム |
US9584155B1 (en) * | 2015-09-24 | 2017-02-28 | Intel Corporation | Look-ahead hash chain matching for data compression |
-
2017
- 2017-05-17 CN CN201710347209.9A patent/CN107180018B/zh active Active
- 2017-08-10 US US15/673,736 patent/US9979414B1/en active Active
- 2017-12-15 EP EP17207638.2A patent/EP3404838A1/en active Pending
- 2017-12-18 TW TW106144377A patent/TWI655580B/zh active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6202090B1 (en) * | 1997-12-11 | 2001-03-13 | Cisco Technology, Inc. | Apparatus and method for downloading core file in a network device |
US9112525B1 (en) * | 2014-03-28 | 2015-08-18 | Comtech Ef Data Corp. | System and method for parallel hash-based data compression |
CN106021356A (zh) * | 2015-05-11 | 2016-10-12 | 上海兆芯集成电路有限公司 | 依据输入区块类型使用动态散列算法的硬件数据压缩器 |
Also Published As
Publication number | Publication date |
---|---|
TW201901413A (zh) | 2019-01-01 |
EP3404838A1 (en) | 2018-11-21 |
TWI655580B (zh) | 2019-04-01 |
CN107180018A (zh) | 2017-09-19 |
US9979414B1 (en) | 2018-05-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107180018B (zh) | 基于散列的加速压缩方法以及使用此方法的装置 | |
CN107168936B (zh) | 基于散列的加速压缩方法以及使用此方法的装置 | |
Kraska et al. | The case for learned index structures | |
KR101938953B1 (ko) | 빅 데이터 질의 엔진을 위한 플래시 최적화된 열 데이터 배치 및 데이터 액세스 처리 알고리즘 | |
US8117137B2 (en) | Field-programmable gate array based accelerator system | |
JP2790466B2 (ja) | 文字列検索方法及び装置 | |
Drew et al. | Polymorphic malware detection using sequence classification methods | |
EP2757521B1 (en) | Image search apparatus, image search method, program, and computer-readable recording medium | |
CN102831222B (zh) | 一种基于重复数据删除的差量压缩方法 | |
EP2092419B1 (en) | Method and system for high performance data metatagging and data indexing using coprocessors | |
US11741157B2 (en) | Propagating multi-term contextual tags to digital content | |
US20170286507A1 (en) | Database search system and database search method | |
US20110302166A1 (en) | Search system, search method, and program | |
AU2010200866B1 (en) | Data reduction indexing | |
CN110569245A (zh) | 重复数据删除***中基于强化学习的指纹索引预取方法 | |
CN102169491B (zh) | 一种多数据集中重复记录动态检测方法 | |
Li et al. | ASLM: Adaptive single layer model for learned index | |
KR102219948B1 (ko) | 메모리에 저장된 데이터 검색 방법 및 시스템 | |
CN109828789A (zh) | 加速压缩方法以及加速压缩装置 | |
US20230394236A1 (en) | Extracting content from freeform text samples into custom fields in a software application | |
CN109802685A (zh) | 加速压缩方法以及加速压缩装置 | |
Yin et al. | Content‐Based Image Retrial Based on Hadoop | |
Sailaja et al. | An overview of pre-processing text clustering methods | |
CN109802686A (zh) | 加速压缩方法以及加速压缩装置 | |
WO2015105043A1 (ja) | 演算システム、データベース管理装置および演算方法 |
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 | ||
CP03 | Change of name, title or address |
Address after: Room 301, 2537 Jinke Road, Zhangjiang High Tech Park, Pudong New Area, Shanghai 201203 Patentee after: Shanghai Zhaoxin Semiconductor Co.,Ltd. Address before: Room 301, 2537 Jinke Road, Zhangjiang hi tech park, Shanghai 201203 Patentee before: VIA ALLIANCE SEMICONDUCTOR Co.,Ltd. |
|
CP03 | Change of name, title or address |