CN109802685A - 加速压缩方法以及加速压缩装置 - Google Patents
加速压缩方法以及加速压缩装置 Download PDFInfo
- Publication number
- CN109802685A CN109802685A CN201910091400.0A CN201910091400A CN109802685A CN 109802685 A CN109802685 A CN 109802685A CN 201910091400 A CN201910091400 A CN 201910091400A CN 109802685 A CN109802685 A CN 109802685A
- Authority
- CN
- China
- Prior art keywords
- word string
- matching
- state
- hash
- control circuit
- 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.)
- Granted
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
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
- G06F13/12—Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor
- G06F13/122—Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware performs an I/O function other than control of data transfer
-
- 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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开一种加速压缩方法以及加速压缩装置。该加速压缩装置包括预取缓冲器(look‑ahead buffer)、字串匹配处理流水线及控制电路。从数据缓冲器(data buffer)提取的存储待压缩字串被存储至预取缓冲器。待压缩字串包括Q个字符,在预取缓冲器中为待压缩字串中的每一字符对应存储一重复标志。在每个发布周期并行发布P个实例。当所述P个实例对应的P个所述子字串所包含的所有字符完全相同时,所述控制电路将所述P个实例中的后面(P‑1)个实例对应的所述起始字符的所述重复标志均设为设置态。发送所述P个实例中有任一字符的所述重复标志未被设为所述设置态的实例至所述字串匹配处理流水线进行一匹配操作,而不发送所有字符的所述重复标志均被设为所述设置态的实例至所述字串匹配处理流水线。
Description
技术领域
本发明涉及一种加速装置,且特别涉及一种对压缩操作进行硬件加速的加速压缩方法以及加速压缩装置。
背景技术
加速压缩装置(compression accelerator)是专门协助执行压缩/解压缩的硬件。加速压缩装置一般会采用基于字典的压缩算法(例如LZ77、LZSS、LZ78、LZW等算法)。在字典(即滑动窗,sliding window)中的位置信息(包含匹配长度与匹配偏移量)被用来替代原始数据(raw data),从而实现数据压缩。对于加速压缩装置来说,最复杂的部分在于进行最长首码字串匹配(longest-prefix string matching),而最长首码字串匹配方法通常可归类为:基于内容可定址存储器(CAM-based,Content Addressable Memory-based)以及基于散列(hash-based)二种。
以基于散列的字串匹配器为例,其通常利用散列电路将待压缩字串的多个字符(散列键,Hask Key)转换为散列值(Hash Value)。散列电路依据散列值对散列表(hashtable)进行查表与比较。散列键对应的散列值出现在散列表中,表明字典(滑动窗)的内容具有这个字符(散列键),因此加速压缩装置可以获得这个字符在字典(滑动窗)中的位置(匹配偏移量),接着进行最长匹配(Longest Match,LM)比较。所谓最长匹配比较,是从所述匹配偏移量开始,在字典(滑动窗)中寻找最长能匹配的长度。最后,加速压缩装置可以输出匹配对(match pair,即匹配长度与匹配偏移量)来替代原始数据(raw data),从而实现数据压缩。
无论如何,若是待压缩字串的内容出现了大量连续重复字符,很显然地,这些连续重复字符(相同的Hask Key)必然对应相同的散列值。相同的散列值都进入同一个散列库(Hash Bank),导致原本可以并行方式处理多个散列键的硬件压缩加速器,只能以串行方式处理,进而导致数据吞吐能力(throughput)降低,甚至可能会降低至软件压缩的水准。
发明内容
本发明提供一种加速压缩方法以及加速压缩装置,以改善相同内容的多个子字串被发送至散列匹配器导致散列冲突的情形,提高硬件压缩加速器的压缩效率。
本发明的实施例提供一种加速压缩方法,用以实施于加速压缩装置中。加速压缩装置包括预取缓冲器及字串匹配处理流水线。所述加速压缩方法包括:从数据缓冲器提取待压缩字串并存储至预取缓冲器,其中所述待压缩字串包括Q个字符,在所述预取缓冲器中为所述待压缩字串中的每一字符对应存储一个重复标志;以及在每个发布周期并行发布P个实例(instance),其中,所述P个实例的每一个依序对应于以所述待压缩字串中的连续P个字符的每一个为起始字符的一个子字串,其中Q和P为大于1的正整数,且Q大于P。当所述P个实例对应的P个所述子字串所包含的所有字符完全相同时,将所述P个实例中的后面(P-1)个实例对应的起始字符的重复标志均设为设置态。发送所述P个实例中有任一字符的重复标志未被设为所述设置态的实例至字串匹配处理流水线进行匹配操作,而不发送所有字符的重复标志均被设为设置态的实例至字串匹配处理流水线。
本发明的实施例提供一种加速压缩装置。加速压缩装置包括预取缓冲器、字串匹配处理流水线以及控制电路。预取缓冲器用以存储从数据缓冲器提取的待压缩字串。待压缩字串包括Q个字符。在预取缓冲器中为所述待压缩字串中的每一个字符对应存储一个重复标志。在每个发布周期从所述预取缓冲器并行发布P个实例。所述P个实例的每一个依序对应于以所述待压缩字串中的连续P个字符的每一个为起始字符的一个子字串。其中,Q和P为大于1的正整数,且Q大于P。字串匹配处理流水线耦接于所述预取缓冲器。当所述P个实例对应的P个所述子字串所包含的所有字符完全相同时,所述控制电路将所述P个实例中的后面(P-1)个实例对应的起始字符的重复标志均设为设置态。所述控制电路将所述P个实例中有任一字符的重复标志未被设为初始态的实例发送至字串匹配处理流水线进行匹配操作,而不发送所有字符的所述重复标志均被设为所述设置态的实例至所述字串匹配处理流水线。
基于上述,本发明诸实施例所述加速压缩方法以及加速压缩装置判断多个实例所关联的多个子字串是否互为相同。当这些实例所关联的这些子字串互为相同时,一部分实例或全部实例所关联的子字串的重复标志被设为设置态。在所述P个实例中,有任一字符的重复标志未被设为初始态的实例会被发送至字串匹配处理流水线进行匹配操作,而被设为所述设置态的所述重复标志所关联的实例则没有被发送至字串匹配处理流水线。因此,所述加速压缩方法以及加速压缩装置可以改善相同内容的多个子字串被发送至散列匹配器导致散列冲突的情形。所述加速压缩方法以及所述加速压缩装置可以提高硬件压缩加速器的压缩效率。
为让本发明的上述特征和优点能更明显易懂,下文特举实施例,并配合附图作详细说明如下。
附图说明
图1是依据本发明实施例的微处理器的系统架构图。
图2是依据本发明一实施例所绘示的一种加速压缩装置的电路方块(circuitblock)示意图。
图3是依据本发明实施例所绘示的状态图。
图4是依据本发明一实施例所绘示的散列请求操作的流程示意图。
图5是依据本发明一实施例所绘示的散列回复处理操作的流程示意图。
图6是依据本发明一实施例所绘示的数据回复处理操作的流程示意图。
图7是依据本发明一实施例所绘示的退却处理操作的流程示意图。
图8是依据本发明一实施例说明图2所示散列匹配器的电路方块示意图。
图9是依据本发明一实施例说明图8所示匹配器的电路方块示意图。
图10是依据本发明一实施例说明一种散列匹配方法的流程示意图。
图11说明待压缩字串的具体范例。
图12说明待压缩字串的另一个具体范例。
图13说明待压缩字串的又一个具体范例。
【符号说明】
10:微处理器
20:加速压缩装置
22:字串匹配处理流水线
110:末级高速缓冲存储器
130:加速器接口
150_1、150_2、150_j:加速器
170_1、170_2、170_i:处理器内核
210:数据缓冲器
220:提取单元
230:中介缓冲器
240:控制电路
250:散列匹配器
260:最长字串匹配器
270:格式化器
280:预取缓冲器
810_1、810_2、810_3、810_4:散列函数
830:选择器
850_1、850_2、850_3、850_4:先进先出队列
870_1、870_2、870_3、870_4:匹配器
890_1、890_2、890_3、890_4:存储器库
910_1、910_2、910_3:比较器
930:仲裁器
IP:发布指针
RP:退却指针
S31:空闲状态
S32:散列请求状态
S33:数据请求状态
S34:不匹配状态
S36:完全匹配状态
S37:部分匹配状态
S410~S470、S510~S577、S610~S695、S710~S770、S1010~S1077:步骤
T1、T2、T3、Tk、Ta、Tb、Tc:发布周期
具体实施方式
在本申请说明书全文(包括权利要求书)中所使用的“耦接(或连接)”一词可指任何直接或间接的连接手段。举例而言,若文中描述第一装置耦接(或连接)于第二装置,则应该被解释成该第一装置可以直接连接于该第二装置,或者该第一装置可以通过其他装置或某种连接手段而间接地连接至该第二装置。另外,凡可能之处,在附图及实施方式中使用相同标号的元件/构件/步骤代表相同或类似部分。不同实施例中使用相同标号或使用相同用语的元件/构件/步骤可以相互参照相关说明。
图1是依据本发明实施例的微处理器10的系统架构图。微处理器10可包含多个处理器内核,例如图1所示处理器内核170_1、170_2、…、170_i。微处理器10还包含多个加速器(Accelerator),例如图1所示加速器150_1、150_2、…、150_j。其中,i、j为整数,随着不同设计需求而有不同。加速器150_1~150_j举例而言可以是加速功能单元(AFU,AcceleratorFunctional Units)。处理器内核170_1~170_i中的任何一个包含的元件都涉及计算机指令的执行,包括算术逻辑单位(ALU,Arithmetic Logic Unit)、浮点运算单元(FPU,Floating Point Unit)、一级高速缓冲存储器(Ll Cache)及二级高速缓冲存储器(L2Cache)。每一个处理器内核采用指令周期(有时亦称为提取-解码-执行周期)作为基本操作流程。此流程用以让处理器内核从存储器取得程序指令,判定此程序指令进行何种操作,并且执行这些操作。
加速器150_1~150_j可执行不同功能,并通过加速器接口(AcceleratorInterface)130连接至末级高速缓冲存储器(Last-level Cache)110。加速器150_1~150_j可以利用虚拟地址(virtual address)通过末级高速缓冲存储器110而与处理器内核170_1~170_i进行数据交换。加速器150_1~150_j中的任何一个可协助处理器内核170_1~170_i以更有效率地方式执行特定功能,从而减轻处理器内核170_1~170_i的工作负担。上述特定功能包括压缩、加密、解密、正则匹配和/或其他运算量较大的功能。加速器150_1~150_j中的一个可为加速压缩装置(compression accelerator),用以完成字串压缩功能。
图2是依据本发明一实施例所绘示的一种加速压缩装置20的电路方块(circuitblock)示意图。当图1所示加速器150_1~150_j中的一个被实现为加速压缩装置时,此加速压缩装置的实施细节可以参照图2所示加速压缩装置20的相关说明。请参照图2,加速压缩装置20包含预取缓冲器(look-ahead buffer)280及字串匹配处理流水线22。依照设计需求,在一实施例中还包括控制电路240,其控制从预取缓冲器280发布的字串至字串匹配处理流水线22进行字串匹配操作(后会详述)。在一实施例中,字串匹配处理流水线22还包括散列匹配器(hash matcher)250以及最长字串匹配器(longest string matcher)260但本发明并不局限于采用基于散列的字串匹配方法,本发明后述的技术方案也可适用于采取其它匹配技术的字串匹配处理流水线22。在一实施例中,加速压缩装置20还包括格式化器270,其根据字串匹配处理流水线22输出的匹配结果采用特定的压缩算法对待压缩字串进行压缩。
在另一实施例中,加速压缩装置20还包括数据缓冲器210。依照设计需求,数据缓冲器210长度可为1024M字节(bytes)或是其他长度。数据缓冲器210用以存储原始字串(rawstring,亦即待压缩字串)以及经压缩字串(compressed string)。值得注意的是,在其它实施例中,数据缓冲器210可以位于末级高速缓冲存储器(例如图1所示末级高速缓冲存储器110)中,亦即位于加速压缩装置20外部。
在另一实施例中,加速压缩装置20还包含提取单元220及控制电路240,其中经由提取单元220可以向数据缓冲器210发出预取请求(look-ahead request),以便从数据缓冲器210提取长度固定为Q(Q例如16字节)的待压缩字串。提取单元220可以将所述待压缩字串存储至预取缓冲器280中,作为送至字串匹配处理流水线22进行字串压缩的对象。其中更经由控制电路240控制在每个发布周期从预取缓冲器280并行发布(issue)P个实例(instance),其中,这P个实例每一个依序对应于以待压缩字串中的连续P个字符的每一个字符作为起始字符的一个子字串,其中Q和P为大于1的正整数,且Q大于P,在一实施例中,P可为4,且每个子子串包括3个字符,但本发明并不局限于此。
在另一实施例中,加速压缩装置20还包括中介缓冲器(intermediary buffer)230。在一实施例中,各个实例一经发布便按序被存储至中介缓冲器(intermediarybuffer)230中。中介缓冲器230存储关联于每一个子字串的相关运算信息(例如散列、最长字串匹配和/或其他运算信息)。详细来说,中介缓冲器230划分出多段存储器空间,每段可用来存储一个实例(instance)的信息。每个实例包含数个字段,这些字段用以记录索引、对应子字串的起始字符、状态、匹配偏移量(matched offset)、匹配长度(matched length)和/或其他运算信息。
由于加速压缩装置20包含许多并行运算,使得相应于每一个实例的运算时间(或称时钟周期数目)无法预测。也就是说,相应于较后被发布的实例的运算结果可能早于相应于较前被发布的实例的运算结果。中介缓冲器230可以让所有实例的计算结果的输出顺序相符于待压缩的原始字符的原始顺序,据以完成最终的最长字串匹配。预取缓冲器280和中介缓冲器230均包含发布指针(issuance pointer)及退却指针(retirement pointer)。预取缓冲器280的发布指针按照各个子字串在待压缩字串中的原始排列顺序依序地指向预取缓冲器280中下一个被发布的实例,由于每个发布周期并行发布P个实例,因此在每个发布周期,发布指针顺序向后跳转P个字符。预取缓冲器280的退却指针按照各个子字串在待压缩字串中的原始排列顺序依序地指向预取缓冲器280中下一个需要退却的实例,即退却指针能够控制各个实例的子字串按照在待压缩字串中的原始顺序退却,由于每个发布周期并行退却P个已经完成匹配操作的实例,因此在每个发布周期,退却指针顺序向后跳转P个字符。值得注意的是,中介缓冲器230的发布/退却指针与预取缓冲器280发布/退却指针可以是同步的,在一实施例中,预取缓冲器280的大小举例而言为512字节,最多存储512个字符,则其发布/退却指针长度为9位;中介缓冲器230举例而言包含64层表项(entry),最多可存储64个起始字符开始的实例,其发布/退却指针分别为预取缓冲器280发布/退却指针的低6位(bit)。
在初始时,提取单元220从数据缓冲器210提取多个原始字符(待压缩字串)。提取单元220从所述待压缩字串中提取多个子字串,并以实例的形式并行发布这些子字串。在一实施例中,这些子字串对应的实例一经发布便被依序写入中介缓冲器230中。在另一实施例中,这些子字串对应的实例在产生匹配结果后,才会依照其在待压缩字串中的原始顺序写入中介缓冲器230对应的空间。值得注意的是,前面所谓的“发布”是指:当预取缓冲器280的发布指针指向预取缓冲器280中的某个字符,意即“发布”以该字符为起始字符的子字串(实例),当并行发布这P个子字串(实例)以后,发布指针加P,例如当前发布指针指向B3,那么Hash Key 1:{B5,B4,B3},Hash Key 2:{B6,B5,B4},Hash Key 3:{B7,B6,B5},Hash Key 4:{B8,B7,B6},同时发布指针跳到B7的位置。
依照设计需求,控制电路240可以包括有限状态机(FSM,Finite-State Machine)和/或其他控制电路/元件。例如,在一些实施例中,本实施例所描述控制电路240的控制操作可被实现于可编程设计逻辑装置(PLD,Programmable Logic Device)、可编程逻辑控制器(PLC,Programmable Logic Controller)、现场可编程设计门阵列(FPGA,FieldProgrammable Gate Array)或特殊应用集成电路(ASIC,application-specificintegrated circuit)。
在一实施例中,控制电路240可为一个实例发出散列请求给散列匹配器250,以便取得相应于所述一个实例且长度为n的子字串是否可匹配散列表(hash table)中的一个散列键的信息。在一些实施例中,依照设计需求,n为3或以上。控制电路240另可针对一个实例发出数据请求(data request)给最长字串匹配器260,以便取得相应于所述一个实例的子字串以后可匹配到数据缓冲器210的滑动窗(字典)中的原始字串的长度。应注意的是,滑动窗中的原始字串位于预取缓冲器280中的待压缩的原始字串之前,即滑动窗中的原始字串是已经被压缩过的字串。
图3是依据本发明实施例所绘示的状态图。初始时,提取单元220从数据缓冲器210的原始字串提取固定长度的待压缩字串并存储至预取缓冲器280,其中待压缩字串包括Q个字符。在一实施例中,Q等于16。在一实施例中,在发布之后或者在匹配结果产生之后还将待压缩字串中的多个子字串所对应的实例依序存储至中介缓冲器230。举例来说,提取单元220从数据缓冲器210提取待压缩字串“abcdxyzefgafabc…”,并在发布之后或者在匹配结果产生之后依序存储其中的子字串所对应的实例至中介缓冲器230。表1显示多个实例的初始结果。初始时,每个实例的状态为空闲状态(idle state)S31,如表1所示。表1的状态字段所示“/”表示为空值(null value)。
表1:
在一实施例中,控制电路240控制各个实例在字串匹配处理流水线22中进行匹配操作。控制电路240可由逻辑电路实现,其控制散列匹配器250及最长字串匹配器260执行下述图4至图7的字串匹配操作流程,但本发明并不局限于此。
图4是依据本发明一实施例所绘示的散列请求操作的流程示意图。在每一个时钟周期(发布周期),控制电路240取得发布指针所指向的实例(步骤S410),为此实例发出散列请求给散列匹配器250(步骤S430),更新此实例的状态为“HASH_ISSUED”以指出此实例进入散列请求状态S32(步骤S450),以及更新发布指针以指向下一个实例(步骤S470)。散列请求包含从此实例开始且长度为n的连续实例的字符。例如,参考表1,相应于实例0的散列请求包含子字串“abc”,相应于实例1的散列请求包含子字串“bcd”,依此类推。子字串“abc”及“bed”是字串“abcdxyzefgaf”的子字串(substring),字符“a”和“b”分别为子字串“abc”及“bed”的起始字符。
图5是依据本发明一实施例所绘示的散列回复处理操作的流程示意图。当控制电路240从散列匹配器250接收到相应于一个实例的回复(步骤S510)后,控制电路240可以判断在此回复中是否包含匹配的信息(步骤S530)。在一实施例中,当在此回复中包含“不匹配”的信息时(步骤S530中“否”的路径),控制电路240可以更新此实例的状态为“NM”以指出此实例进入不匹配状态S34(步骤S550)。从散列匹配器250接收到的回复中包含了先前请求的子字串,用以让控制电路240辨认此回复相应于哪个实例。当一个实例进入不匹配状态S34时,控制电路240便可在将来的时钟周期回收此实例的存储器空间给将来产生的实例使用。
当此回复中包含“匹配”的信息时(步骤S530中“是”的路径),控制电路240可以从此回复中取得匹配偏移量(步骤S571),以及发出相应于此实例的数据请求给最长字串匹配器260(步骤S573)。其中,所述数据请求包含上述匹配偏移量。在一实施例中,最长字串匹配器260在步骤S573中可以搜寻预取缓冲器280中相应于此实例的子字串开始的字串以及数据缓冲器210的滑动窗(字典)中从所述匹配偏移量开始的字串两者之间的最大匹配长度。控制电路240可以更新此实例的匹配长度为n(步骤S575),以及更新此实例的状态为“DATA_ISSUED”以指出此实例进入数据请求状态S33(步骤S577)。值得注意的是,在其它实施例中,控制电路240从回复中取得匹配偏移量(步骤S571)后可以直接发出相应于此实例的数据请求给最长字串匹配器260,而并不会更新中介缓冲器230中此实例的内容(亦即不会执行步骤S575和步骤S577)。
举例来说,表2显示多个实例的被更新的结果。经过2个时钟周期(发布周期)后,控制电路240依据散列匹配器250及最长字串匹配器260的回复结果更新中介缓冲器230中各表项的内容为表2。
表2:
索引 | 子字串 | 状态 | 匹配长度 | 匹配偏移量 |
0 | abc | NM | ||
1 | bcd | HASH_ISSUED | ||
2 | cdx | NM | ||
3 | dxy | NM | ||
4 | xyz | DATA_ISSUED | 3 | 1000 |
5 | yze | NM | ||
6 | zef | NM | ||
7 | efg | / | ||
8 | fga | / | ||
9 | gaf | / | ||
10 | afa | / | ||
11 | fab | / |
表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的滑动窗(字典)中的原始字串出现过。控制电路240已经从散列匹配器250接收到相应于实例4的回复(其中包含“匹配”的信息),以及已经发出数据请求给最长字串匹配器260(但尚未接收到任何回复)。实例4所对应的子字串“xyz”被散列匹配器250判定为匹配,亦即子字串“xyz”在数据缓冲器210的滑动窗中的原始字串出现过。控制电路240从散列匹配器250的回复中取得实例4所对应的子字串“xyz”在滑动窗中的匹配偏移量。依据散列匹配器250传来的回复,控制电路240可以发出包含所述匹配偏移量的数据请求给最长字串匹配器260,以便搜寻预取缓冲器280中相应于实例4的字串“xyz”开始的字串及数据缓冲器210的滑动窗中从偏移量1000开始的字串两者之间的最大匹配长度。此外,控制电路240尚未从散列匹配器250接收到相应于实例1的任何回复。
图6是依据本发明一实施例所绘示的数据回复处理操作的流程示意图。当控制电路240从最长字串匹配器260接收到相应于一个实例的回复(步骤S610)后,控制电路240可以从回复中取得最长字串匹配器260计算出的长度L(步骤S630),以及判断长度L是否小于最大匹配长度max_match(步骤S650),并根据该判断结果去更新该实例的状态、匹配长度及匹配偏移量。具体而言,在一实施例中,当长度L小于最大匹配长度max_match时(步骤S650中“是”的路径),控制电路240可以更新此实例的状态为“PM”以指出此实例进入部分匹配状态S37(步骤S671),以及更新此实例的匹配长度Len=Len+L(步骤S673)。当一个实例进入部分匹配状态S37时,控制电路240便可在将来的时钟周期回收此实例的存储器空间给将来产生的实例使用;当长度L不小于(通常为等于)最大匹配长度max_match时(步骤S650中“否”的路径),控制电路240可以更新此实例的状态为“FM”以指出此实例进入完全匹配状态S36(步骤S691),更新此实例的匹配长度为Len=Len+max_match(步骤S693),以及发出相应于此实例的另一数据请求给最长字串匹配器260以继续后续的字串比对(步骤S695)。在一实例中,最大匹配长度max_match为16字节,而在LZ77系列算法中定义的最大算法匹配长度max_match_length为258字节,在步骤S673和S693之后都会判断此实例的匹配长度Len是否达到该最大算法匹配长度max_match_length,如果是,则图11的流程结束,即是说即使是完全匹配状态,也并不会一直比较下去,而是到达最大算法匹配长度max_match_length后,停止比较,例如每次比较16字节,但如果达到匹配长度258字节之后,就停止比较。值得注意的是,在图5如果不执行更新中介缓冲器230中实例的内容的步骤S575,则图6中更新匹配长度时Len还要加上实例所对应的子字串的长度n(例如n=3)。
在一个时钟周期中,控制电路240除了执行散列请求操作,更执行退却处理操作,以按照发布过的所有实例的子字串在待压缩字串中的原始顺序,并依据每个实例的状态、匹配长度及匹配偏移量,而输出匹配结果给格式化器270,使得格式化器270据以压缩所预取的待压缩字串。图7是依据本发明一实施例所绘示的退却处理操作的流程示意图。在每一个时钟周期,控制电路240取得退却指针指向的实例的状态(步骤S710),以及判断中介缓冲器230中此实例的状态是否为不匹配状态(步骤S731)。当此实例的状态是不匹配状态时(步骤S731中“是”的路径),控制电路240输出此实例的字符本身给格式化器270(步骤S733),使得格式化器270可据以压缩预取缓冲器280中的待压缩字串。
当此实例的状态不是“不匹配状态”时(步骤S731中“否”的路径),控制电路240可以判断中介缓冲器230中此实例的状态是否为部分匹配状态(步骤S751)。当此实例的状态是部分匹配状态时(步骤S751中“是”的路径),控制电路240可以输出此实例的匹配偏移量及匹配长度给格式化器270(步骤S753),使得格式化器270可据以压缩预取缓冲器280中的待压缩字串。
在步骤S733或步骤S753中,格式化器270可使用LZ4、LZO(Lempel-Ziv-Oberhumer)、DEFLATE等已知算法来压缩所述待压缩字串。在完成步骤S733或步骤S753后,控制电路240在步骤S770中可以更新此实例的状态为空值,并且更新退却指针以指向下一个实例(用以退却此实例,使得此存储器空间可提供给将来推入的实例)。
当此实例的状态为匹配但不是部分匹配状态时(步骤S751中“否”的路径),即为完全匹配时,则如图6的步骤S691所述,除非匹配长度Len达到最大算法匹配长度max_match_length,控制电路240会发出相应于此实例的另一数据请求给最长字串匹配器260用以继续后续的字串比对,而并不会对所述实例执行退却操作。在图7中步骤S751中“否”的路径会返回步骤S710继续等待所述实例状态的变化。概括地说,控制电路240在图7的执行退却处理操作时,是按照中介缓冲器230中各个实例关联的子字串在待压缩字串中的原始顺序(例如退却指针依照的顺序),并依据每一实例在中介缓冲器230中对应状态、匹配长度及匹配偏移量(如后续表3至表5所示)输出结果给格式化器270,使得格式化器270据以压缩待压缩的原始字串。后面会配合表3至表5详述。
接续表2的范例。假设在时钟周期T7,发布指针指向实例7,退却指针指向实例0,最大匹配长度max_match预设为258字节(byte),且控制电路240从最长字串匹配器260接收到相应于实例4的回复。在此时钟周期T7,请参考图4,控制电路240取得发布指针指向的实例7(步骤S410),控制电路240为实例7发出包含子字串“efg”的散列请求给散列匹配器250(步骤S430),控制电路240更新实例7的状态为“HASH_ISSUED”以指出实例7进入散列请求状态S32(步骤S450),以及控制电路240更新发布指针以指向实例8(步骤S470)。在此时钟周期T7,请参考图7,控制电路240取得退却指针指向的实例0的状态(步骤S710)。因为实例0的状态为不匹配状态,控制电路240输出实例0的字符“a”给格式化器270(步骤S733),使得格式化器270可保留字符“a”不做压缩动作。控制电路240让数据缓冲器210中的滑动窗向前移动一个字符,即让数据缓冲器210中的字符“a”滑动进入其滑动窗中成为新字典的一部分。控制电路240更新实例0的状态为空值“/”,并更新退却指针以指向实例1(步骤S770)。请参考图6,在此时钟周期T7,控制电路240从相应于实例4的回复中取得最长字串匹配器260计算出的长度L=2(步骤S630)。因为L<max_match,控制电路240更新实例4的状态为“PM”以指出实例4进入部分匹配状态S37(步骤S671),以及控制电路240更新实例4的匹配长度Len=3+2=5(步骤S673)。中介缓冲器230的实例状态更新为表3。
表3:
接续表3的范例。假设在时钟周期T8,控制电路240从散列匹配器250接收到相应于实例1的回复。在此时钟周期T8,请参考图4,控制电路240取得发布指针指向的实例8(步骤S410),为实例8发出包含子字串“fga”的散列请求给散列匹配器250(步骤S430),更新实例8的状态为“HASH_ISSUED”以指出实例8进入散列请求状态S32(步骤S450),以及更新发布指针以指向实例9(步骤S470)。请参考图7,在此时钟周期T8,控制电路240取得退却指针指向的实例1的状态(步骤S710)。因为实例1的状态为散列请求状态,控制电路240不做任何处理。请参考图5,在此时钟周期T8,控制电路240从散列匹配器250接收到相应于实例1的回复(步骤S510)。因为回复中包含“不匹配”的信息,控制电路240更新实例1的状态为“NM”以指出实例1进入不匹配状态S34(步骤S550)。中介缓冲器230的实例状态更新为表4。
表4:
索引 | 子字串 | 状态 | 匹配长度 | 匹配偏移量 |
0 | abc | / | ||
1 | bcd | NM | ||
2 | cdx | NM | ||
3 | dxy | NM | ||
4 | xyz | PM | 5 | 1000 |
5 | yze | NM | ||
6 | zef | NM | ||
7 | efg | HASH_ISSUED | ||
8 | fga | HASH_ISSUED | ||
9 | gaf | / | ||
10 | afa | / | ||
11 | fab | / |
接续表4的范例。假设在时钟周期T9,控制电路240从散列匹配器250接收到相应于实例7的回复。在此时钟周期T9,请参考图4,控制电路240取得发布指针指向的实例9(步骤S410),为实例9发出包含子字串“gaf”的散列请求给散列匹配器250(步骤S430),更新实例9的状态为“HASH_ISSUED”以指出实例9进入散列请求状态S32(步骤S450),以及更新发布指针以指向实例10(步骤S470)。请参考图7,在此时钟周期T9,控制电路240取得退却指针指向的实例1的状态(步骤S710)。因为实例1的状态为不匹配状态,控制电路240输出实例1的字符“b”给格式化器270,使得格式化器270可保留字符“b”不做压缩动作(步骤S733)。控制电路240让数据缓冲器210的中滑动窗向前移动一个字符,即让数据缓冲器210中的字符“b”滑动进入其滑动窗中成为新字典的一部分。控制电路240更新实例1的状态为空值“/”,并更新退却指针以指向实例2(步骤S770)。请参考图5,在此时钟周期T9,控制电路240从散列匹配器250接收到相应于实例7的回复(步骤S510)。因为回复中包含“不匹配”的信息,控制电路240更新实例7的状态为“NM”以指出实例7进入不匹配状态S34(步骤S550)。中介缓冲器230的实例状态更新为表5。
表5:
索引 | 子字串 | 状态 | 匹配长度 | 匹配偏移量 |
0 | abc | / | ||
1 | bcd | / | ||
2 | cdx | NM | ||
3 | dxy | NM | ||
4 | xyz | PM | 5 | 1000 |
5 | yze | NM | ||
6 | zef | NM | ||
7 | efg | NM | ||
8 | fga | HASH_ISSUED | ||
9 | gaf | HASH_ISSUED | ||
10 | afa | / | ||
11 | fab | / |
请参考图7。经过一段时间,例如在时钟周期T12,控制电路240取得退却指针指向的实例4的状态(步骤S710)。值得注意的是,在此之前,预取缓冲器280中的待压缩字串中的字符“c”和“d”均为不匹配,因此字符“c”和“d”均被保留不做压缩动作,并且数据缓冲器210中的字符“c”和“d”也已经滑动进入其滑动窗中成为新字典的一部分。在时钟周期T12,因为实例4的状态为部分匹配状态,控制电路240输出实例4的匹配偏移量(例如1000)及匹配长度(例如5)给格式化器270,使得格式化器270可据以压缩预取缓冲器280中的待压缩的原始字串(步骤S753)。因为实例4的状态为部分匹配状态且匹配长度为5,因此预取缓冲器280中的字符“xyzef”被取代为匹配对(1000,5),并且数据缓冲器210的中滑动窗向前移动5个字符(亦即让数据缓冲器210中的字符“xyzef”滑动进入其滑动窗中成为新字典的一部分)。
应注意的是,如以上范例所示,虽然控制电路240依实例的先后顺序发出相应的散列请求来启动压缩操作,但因为散列匹配器250及最长字串匹配器260的运算时间无法预期,使得每个实例无法依原来的顺序进入不匹配状态S34或部分匹配状态S37。尽管每个实例无法依原来的顺序进入不匹配状态S34或部分匹配状态S37,通过以上所述的实施例,控制电路240还是可根据退却指针依各实例对应的子字串原来在预取缓冲器280中的待压缩字串中的原始顺序输出相应于每个实例的散列匹配器250及最长字串匹配器260的运算结果给格式化器270。
图8是依据本发明一实施例说明图2所示的字串匹配处理流水线22中的散列匹配器250的电路方块示意图。为加速散列匹配,散列匹配器250可包含多个可平行处理的匹配路径,每一个路径包含先进先出队列、匹配器及存储器库(memory bank)。例如,第一匹配路径包含先进先出队列850_1、匹配器870_1及存储器库890_1,第二匹配路径包含先进先出队列850_2、匹配器870_2及存储器库890_2,第三匹配路径包含先进先出队列850_3、匹配器870_3及存储器库890_3,而第四匹配路径包含先进先出队列850_4、匹配器870_4及存储器库890_4。散列函数(hash functions)810_1、810_2、810_3、810_4中的任何一个将控制电路240传来的一个实例对应的子字串映射成散列索引(hash index),并且依据散列索引而驱动选择器830以连接至这些匹配路径中的一个对应匹配路径,以便将此子字串传送至此对应匹配路径。值得注意的是,散列函数810_1、810_2、810_3、810_4执行相同的散列运算。当此对应匹配路径判定散列表(hash table)不包含此子字串时,此对应匹配路径传送“不匹配”的信息给控制电路240。散列表包含此子字串,表示所述子字串存在于数据缓冲器210中的滑动窗内,例如散列表中包含前述实例4对应的子字串“xyz”,即说明子字串“xyz”存在于数据缓冲器210中的滑动窗中内。当此对应匹配路径判定散列表包含此子字串时,此对应匹配路径传送“匹配”的信息及散列表中相应于此子字串的匹配偏移量给控制电路240。
虽然本发明实施例使用四套的匹配路径说明,本领域技术人员可依据设计需求于散列匹配器250中配置较多或较少的匹配路径,本发明并不因此受限。散列表按照散列索引(即散列表地址)的高两位划分为四部分,分别存储在四个存储器库890_1至890_4。存储器库890_1至890_4可以用高速缓冲存储器(cache)存储器实现。散列表包含N笔条目(entries)。存储器库890_1存储第0笔至第(N/4)-1笔条目,存储器库890_2存储第N/4笔至第(N/2)-1笔条目,存储器库890_3存储第N/2笔至第(3N/4)-1笔条目,以及存储器库890_4存储第(3N/4)笔至第(N-1)笔条目,亦即散列表按照散列表地址的高两位来分布。在其它实施中,散列表也可以按照散列表地址的低两位或者散列表地址的其他位来分布。在本实施例中,每笔条目可包含多个(例如三个)散列键(hash keys)的相关信息,而这三个散列键拥有相同的散列索引而形成散列链结(hash chain)。举例来说,n为3且使用16字节存储每笔条目的数据,数据结构如表6所示。
表6:
地址 | 名称 | 描述 |
Byte[0] | Tag | 标签 |
Byte[1:3] | Hash_Key_1 | 第一散列键 |
Byte[4:5] | Hash_Offset_1 | 第一散列偏移量 |
Byte[6:8] | Hash_Key_2 | 第二散列键 |
Byte[9:10] | Hash_Offset_2 | 第二散列偏移量 |
Byte[11:13] | Hash_Key_3 | 第三散列键 |
Byte[14:15] | Hash_Offset_3 | 第三散列偏移量 |
每笔条目的第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,即在每个发布周期,预取缓冲器280的发布指针顺序向后跳转四个字符,控制电路240依据发布指针从预取缓冲器280并行发布四个字符为起始字符的子字串(实例)。散列函数810_1至810_4之一依据映射出的散列索引驱动选择器830连接自己至先进先出队列850_1至850_4中的一个,以便将散列请求推入经连接的先进先出队列。例如,当散列函数810_1将子字串“abc”映射/转换为散列索引“0”时,散列函数810_1可以驱动选择器830,以便将散列函数810_1连接至先进先出队列850_1,使得散列函数810_1可以将散列请求推入先进先出队列850_1。在此须注意的是,经推入的散列请求包含控制电路240产生的字串及相应散列函数产生的散列索引。
散列匹配器250可包含四个平行处理的匹配器(matchers)870_1至870_4。匹配器870_1连接于先进先出队列850_1及存储器库890_1之间。匹配器870_2连接于先进先出队列850_2及存储器库890_2之间。匹配器870_3连接于先进先出队列850_3及存储器库890_3之间。匹配器870_4连接于先进先出队列850_4及存储器库890_4之间。匹配器870_1至870_4中的任何一个从其所连接的先进先出队列取出一个最早进入的散列请求,从其连接的存储器库找寻符合散列请求中的散列索引的条目,并且藉检查找寻到的条目的标签判断是否存在有效的散列键。当不存在有效的散列键时,匹配器判定找寻不到符合散列请求中的散列索引的条目,并且回复控制电路240关于散列请求中的字串“不匹配”的信息。当存在有效的散列键时,匹配器更判断是否存在任何有效的散列键与散列请求中的字串相同。当所有有效的散列键与散列请求中的字串不同时,匹配器回复控制电路240关于散列请求中的字串“不匹配”的信息。当存在一个有效的散列键与散列请求中的字串相同时,此匹配器回复控制电路240关于散列请求中的字串“已匹配”的信息以及此散列键关联的散列偏移量。
图9是依据本发明一实施例说明图8所示匹配器870_1的电路方块示意图。虽然图9所示实施例以匹配器870_1举例说明,本领域技术人员可依据图9的相关说明而类推出图8所示匹配器870_2至870_4的实施细节。在图9所示实施例中,匹配器870_1包含比较器910_1、比较器910_2、比较器910_3以及仲裁器930。比较器910_1从先进先出队列850_1取得散列请求中的字串以及从存储器库890_1中取得相应条目的第一散列键及第一散列偏移量。比较器910_1判断所述字串与所述第一散列键是否相同。当所述字串与所述第一散列键相同时,比较器910_1输出所述第一散列偏移量给仲裁器930。比较器910_2从先进先出队列850_1取得散列请求中的字串以及从存储器库890_1中取得相应条目的第二散列键及第二散列偏移量。比较器910_2判断所述字串与所述第二散列键是否相同。当所述字串与所述第二散列键相同时,比较器910_2输出所述第二散列偏移量给仲裁器930。比较器910_3从先进先出队列850_1取得散列请求中的字串以及从存储器库890_1中取得相应条目的第三散列键及第三散列偏移量。比较器910_3判断所述字串与所述第三散列键是否相同。当所述字串与所述第三散列键相同时,比较器910_3输出所述第三散列偏移量给仲裁器930。
当仲裁器930从比较器910_1至910_3没有接收到任何散列偏移量时,仲裁器930回复控制电路240关于散列请求中的字串“不匹配”的信息。当仲裁器930从比较器910_1至910_3接收到一个散列偏移量时,仲裁器930回复控制电路240关于散列请求中的字串“已匹配”的信息以及接收到的散列偏移量。当仲裁器930从比较器910_1至910_3接收到二个以上散列偏移量时,仲裁器930回复控制电路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。
本实施例中,在每个发布周期,预取缓冲器280的发布指针顺序向后跳转P个字符,控制电路240依据发布指针从预取缓冲器280并行发布P个字符为起始字符的子字串(实例)。进一步地,控制电路240可以在同一时钟周期同时输出R个散列请求给多个散列函数并行地进行散列匹配。藉由本实施例的中介缓冲器记录各实例的状态、匹配长度及匹配偏移量,使得乱序执行散列匹配和最长匹配后的实例能够按照待压缩字串中的原始顺序退却以进行压缩。后面图11~13的实施例会详述在待压缩字串中存在大量重复字符时,P和R的关系。
图10是依据本发明一实施例说明一种散列匹配方法的流程示意图。请参照图8与图10。散列函数810_1至810_4并行接收从控制电路240传来的多个子字串(步骤S1010)。接着,散列函数810_1将接收的子字串映射成散列索引,以及依据散列索引驱动选择器830以将自己连接至多个匹配路径中的一个(步骤S1031)。散列函数810_2将接收的子字串映射成散列索引,以及依据散列索引驱动选择器830以将自己连接至多个匹配路径中的一个(步骤S1033)。散列函数810_3将接收的子字串映射成散列索引,以及依据散列索引驱动选择器830以将自己连接至多个匹配路径中的一个(步骤S1035)。散列函数810_4将接收的子字串映射成散列索引,以及依据散列索引驱动选择器830以将自己连接至多个匹配路径中的一个(步骤S1037)。在此须注意的是,在步骤S1031、S1033、S1035、S1037中,散列函数810_1至810_4中的至少二个可连接到相同的匹配路径,并且将包含这些子字串的散列请求推入此匹配路径中的先进先出队列。
接着,当散列函数810_1连接的匹配路径中的匹配器(如匹配器870_1、870_2、870_3或870_4)判定散列表不包含散列函数810_1接收的子字串(步骤S1051)时,传送“不匹配”的信息给控制电路240。当散列函数810_1连接的匹配路径中的匹配器判定散列表包含散列函数810_1接收的子字串(步骤S1051)时,传送“匹配”的信息及散列表中相应于子字串的匹配偏移量给控制电路240(步骤S1071)。当散列函数810_2连接的匹配路径中的匹配器(如匹配器870_1、870_2、870_3或870_4)判定散列表不包含散列函数810_2接收的子字串(步骤S1053)时,传送“不匹配”的信息给控制电路240。当散列函数810_2连接的匹配路径中的匹配器判定散列表包含散列函数810_2接收的子字串(步骤S1053)时,传送“匹配”的信息及散列表中相应于子字串的匹配偏移量给控制电路240(步骤S1073)。当散列函数810_3连接的匹配路径中的匹配器(如匹配器870_1、870_2、870_3或870_4)判定散列表不包含散列函数810_3接收的子字串(步骤S1055)时,传送“不匹配”的信息给控制电路240。当散列函数810_3连接的匹配路径中的匹配器判定散列表包含散列函数810_3接收的子字串(步骤S1055)时,传送“匹配”的信息及散列表中相应于子字串的匹配偏移量给控制电路240(步骤S1075)。当散列函数810_4连接的匹配路径中的匹配器(如匹配器870_1、870_2、870_3或870_4)判定散列表不包含散列函数810_4接收的子字串(步骤S1057)时,传送“不匹配”的信息给控制电路240。当散列函数810_4连接的匹配路径中的匹配器判定散列表包含散列函数810_4接收的子字串(步骤S1057)时,传送“匹配”的信息及散列表中相应于子字串的匹配偏移量给控制电路240(步骤S1077)。
在此须注意的是,当一个匹配路径的先进先出队列包含二个以上的散列请求时,此匹配路径的匹配器依据散列请求到达的先后循序执行如上所述的判断。例如,当一个匹配路径的先进先出队列包含散列函数810_1及810_2的散列请求且散列函数810_1的散列请求较早时,步骤S1031、S1051及S1071的执行早于步骤S1033、S1053及S1073的执行。
为了方便说明,以下将假设一个实例相应的子字串长度n为3个字符。对于图8所示多个散列匹配路径路的散列匹配操作而言,所述发布指针(issuance pointer)会每次向后移动4个字符(即,前述P=4)来从预取缓冲器280顺次取待压缩字串中6个字符作为4个实例的4个子字串,其中每个子字串依序以6个字符中的前4个字符的每一个作为起始字符。这4个子字串被推入图8所示4个散列函数810_1至810_4以便进行散列计算。无论如何,当待压缩字串中存在大量连续的相同字符时,此大量连续相同的字符会进入同一个散列库(HashBank),造成该散列库冲突严重,而其它几个散列库所对应的散列匹配路径路会被闲置。针对这个课题,以下介绍三个解决方案。
第一解决方案:
首先经由提取单元220从数据缓冲器210提取包括Q个字符的待压缩字串并存储至预取缓冲器280;经由控制电路240在每个发布周期从预取缓冲器280并行发布P个实例,其中每个实例依序对应于以待压缩字串中的连续P个字符的每一个字符作为起始字符的一个子字串,其中Q和P为大于1的正整数,且Q大于P。以下均以Q=16,P=4及n=3(即,每个实例所对应的子字串包括3个字符)为例来说明,但本发明并不局限于此,P、Q和n也可以是其它数值:控制电路240判断在一个时钟周期(发布周期)所发布的4个实例所对应的4个子字串是否互为完全相同,在一实施例中,控制电路240可以判断在一个时钟周期(发布周期)所取到的6个字符(依序取连续的3个字符构成1个子字串,所以这6个字符构成4个子字串)是否相同来判断4个子字串是否互为完全相同。当在一个发布周期(例如发布周期T1)中这4个实例所对应的这些子字串互为完全相同时,控制电路240将4个实例中的第一实例与第二实例发送至字串匹配处理流水线22进行匹配操作,而不发送这些实例中的其余实例至字串匹配处理流水线22。在发布周期T1后的连续发布周期中,控制电路240不发送4个实例的每一个至字串匹配处理流水线22,直到4个实例所关联的这些子字串互不完全相同。在一实施例中,当4个实例所关联的这些子字串互不完全相同时,控制电路240可以将这4个实例的每一个发送至字串匹配处理流水线22进行匹配操作。在另一实施例中,在发布周期T1后的连续发布周期中,控制电路240不发送4个实例的每一个至字串匹配处理流水线22,直到前述第二实例的匹配长度达到最大匹配长度,例如为288字节(byte),也就是说,在重复字符大量出现的情形下,控制电路240不发送这些重复字符组成的子字串对应的实例至字串匹配处理流水线22,除非重复字符结束或者第二实例的匹配达到了最大匹配长度,根据图6的实施例,在某些压缩算法中,最大匹配长度max_match为258字节(即子字串长度3byte再加上255byte)。
举例来说,图11说明待压缩字串的具体范例。图11所示横轴表示时间,IP(T1)表示发布指针IP在发布周期T1所指的位置,IP(T2)表示发布指针IP在发布周期T2所指的位置,IP(Tk)表示发布指针IP在发布周期Tk所指的位置。在图11所示范例中,待压缩字串中存在大量连续的相同字符“a”。控制电路240可以在发布周期T1从发布指针IP所指的位置取到6个字符“a”,亦即T1所发布的4个子字串均为“aaa”。控制电路240可以发现在发布周期T1中所发布的这4个子字串互为相同,因此控制电路240可以将第一个子字串“aaa”与第二个子字串“aaa”所对应的实例发送至字串匹配处理流水线22进行匹配操作,但是不将第三个子字串“aaa”与第四个子字串“aaa”所对应的实例发送至字串匹配处理流水线22。本实施例的方法并不限制字串匹配处理流水线22采用何种匹配方法,下面以前述图3至图7的基于散列的字串匹配方法为例说明:在发布周期T1中所取的第一个子字串“aaa”会进入字典(数据缓冲器210的滑动窗),而最长字串匹配器260会针对在发布周期T1中所取的第二个子字串“aaa”进行最长匹配(Longest Match,LM)比较而产生匹配对。
在发布周期T1后的连续发布周期(例如图11所示发布周期T2)中,控制电路240不发送4个实例的每一个至字串匹配处理流水线22,直到这些实例所关联的这些子字串互不完全相同。举例来说,控制电路240在发布周期Tk中依照发布指针IP所发布的4个子字串互不完全相同,因此控制电路240将在发布周期Tk中所取到的4个子字串所关联的每一个实例发送至字串匹配处理流水线22进行匹配操作。另一个恢复匹配的时机是在发布周期Tn(未绘示):当前述第二实例的匹配达到了最大匹配长度max_match,即在发布周期T1后的连续数个发布周期后,第二实例的匹配长度达到最大匹配长度max_match(例如258字节),则在达到该最大匹配长度的发布周期Tn,将该发布周期发布的4个实例中的第一和第二实例重新发送至字串匹配处理流水线22进行匹配操作。在另一实施例中,在发布之前会再加入判断发布周期Tn所发布的4个实例所对应的P个子字串是否互为完全相同的步骤。
第二解决方案:
预取缓冲器280可以额外配置一组重复标志(repeat flag)。其中,在预取缓冲器280的所述待压缩字串中的每一字符对应存储一个重复标志(Repeat Flag,RF)。首先经由提取单元220从数据缓冲器210提取包括Q个字符的待压缩字串并存储至预取缓冲器280,并且在预取缓冲器280中为Q个字符中的每一字符对应存储一个重复标志Repeat Flag(RF);经由控制电路240在每个发布周期从预取缓冲器280并行发布P个实例,其中每个实例依序对应于以待压缩字串中的连续P个字符的每一个字符作为起始字符的一个子字串,其中Q和P为大于1的正整数,且Q大于P。以下均以Q=16,P=4及n=3(即,每个实例所对应的子字串包括3个字符)为例来说明,但本发明并不局限于此,P、Q和n也可以是其它数值:控制电路240判断在一个时钟周期(发布周期)所发布的4个实例所对应的4个子字串是否互为完全相同,在一实施例中,控制电路240可以判断在一个时钟周期(发布周期)所取到的6个字符(亦即4个子字串)是否相同来判断4个子字串是否互为完全相同。当这4个实例所对应的4个子字串互为完全相同时,控制电路240可以将这4个实例中的后3个实例对应的3个子字串的3个起始字符的重复标志设为设置态(例如将这些重复标志设置为“真,true”)。为设置态的重复标志表示该字符与前字符相同。在一实施例中,如果一个时钟周期(发布周期)所取到的6个字符(亦即4个子字串)完全相同,则将第2、3、4个字符的重复标志设置为“真,true”。所述重复标志可以提供给控制电路240的所述退却处理操作使用。在一实施例中,当4个实例所对应的4个子字串互不完全相同时,控制电路240可以将这4个实例的每一个的子字串的所有字符的重复标志维持在初始态(例如初始时,将这些重复标志设置为默认值“假,false”)。
控制电路240的所述散列请求操作可以将4个实例中有任一字符的重复标志为初始态(即,未被设为设置态)的实例发送至字串匹配处理流水线22进行匹配操作,而不发送所有字符的重复标志均被设为设置态的实例至字串匹配处理流水线22。控制电路240可以在执行如图6的数据回复处理操作流程时或者如图7的退却处理操作流程,可以计数被设为设置态且连续的重复标志的个数,以获得连续重复计数值。控制电路240可以用所述连续重复计数值更新实例的匹配长度。具体而言,在一实例中,在图6的数据回复处理操作流程中的步骤S630中,可将最长子串匹配其计算出的长度L更新为最长子串匹配器260计算出的长度L再加上前述连续重复计数值;在另一实例中,在图7的退却处理操作流程中的步骤S753中,可将其中的匹配长度L更新为图6操作后最长子串匹配器260输出的长度L再加上前述连续重复计数值,再输出给格式化器270。
举例来说,图12说明待压缩字串的另一个具体范例。图12所示横轴表示时间,IP(T1)表示发布指针IP在发布周期T1所指的位置,IP(T2)表示发布指针IP在发布周期T2所指的位置,IP(T3)表示发布指针IP在发布周期T3所指的位置,RP(Ta)表示退却指针RP在发布周期Ta所指的位置,RP(Tb)表示退却指针RP在发布周期Tb所指的位置,RP(Tc)表示退却指针RP在发布周期Tc所指的位置。在图12所示范例中,待压缩字串中存在大量连续的相同字符“0”。控制电路240可以在发布周期T1从发布指针IP所指的位置取到6个字符“210000”,亦即取到4个子字串分别为“210”、“100”、“000”、“000”。控制电路240在发布周期T1中依照发布指针IP所取到的4个子字串互不相同,因此控制电路240可以将这些子字串所关联的4个重复标志设置为“0”(初始态)。在发布周期T1中,控制电路240在执行如图4的散列请求操作时,将有任意一个字符的重复标志维持在“0”的实例均发送至字串匹配处理流水线22进行匹配操作(具体而言,即散列请求给散列匹配器250)。即是说,T1发布的4个实例对应的子字串“210”、“100”、“000”、“000”的重复标志分别为“000”、“000”、“000”、“001”,即这4个实例都有字符的重复标志为0,因此这4个实例对会被发送至字串匹配处理流水线22进行匹配操作。
控制电路240可以在发布周期T2从发布指针IP所指的位置取到6个字符“000000”,亦即取到4个子字串均为“000”。控制电路240可以发现在发布周期T2中所取的这4个子字串互为完全相同,因此控制电路240可以将这些子字串的后3个子字串的起始字符的重复标志设为“1”(设置态)。详而言之,在发布周期T2中发布指针IP所指的第一个子字串“000”的重复标志为“011”,因此第一个子字串“000”会被发送至字串匹配处理流水线22进行匹配操作(具体而言,即散列请求给散列匹配器250)将在发布周期T2中所取的第一个子字串“000”推入字典(数据缓冲器210的滑动窗)。在发布周期T2中所取的其余子字串所关联的重复标志会被设为“111”,即其余子字串的所有字符的重复标志全被设置为设置态,如图12所示。控制电路240在执行散列请求操作时不将重复标志被设为“111”的实例发送散列请求,因此减少了散列库冲突的机会和不必要的匹配操作,提高了匹配效率。
须注意的是,在其他应用情况中,假设在发布周期T2中发布指针IP所指位置的前一个字符所关联的重复标志已经被设为“1”(表示这个相同的子字串“000”在先前时间已经被推入字典),则在发布周期T2中发布指针IP所指位置的字符的重复标志可以被设为“1”,即将4个实例的第1个实例的起始字符的重复标志也设为“1”。亦即,控制电路240可以将在发布周期T2中所获取的这4个子字串的所有字符的全部重复标志都设为“1”(设置态)。
在进行例如图7的退却操作时,控制电路240可以计数被设为“1”(设置态)且连续的重复标志的个数,以获得连续重复计数值。以图12所示退却指针RP为例,在发布周期Ta中退却指针RP所指位置的连续4个字符的重复标志都是“0”,所以退却处理操作的连续重复计数值保持为初始值0。在发布周期Tb中退却指针RP所指位置的连续4个字符的重复标志分别为“0”、“1”、“1”、“1”,所以退却处理操作的连续重复计数值为3(连续3个重复标志被设为“1”)。在发布周期Tc中退却指针RP所指位置的连续4个字符的重复标志分别为“1”、“1”、“1”、“1”(连续4个重复标志被设为“1”),所以退却处理操作的连续重复计数值为3+4=7。以此类推,直到被设为“1”的重复标志不再连续出现。控制电路240可以用所述连续重复计数值去更新实例的匹配长度L。具体而言,在如图7的退却处理操作流程中的步骤S753中,可将其中的匹配长度L更新为图6操作后最长子串匹配器260输出的长度L再加上前述连续重复计数值,再输出给格式化器270。值得注意的是,本实施例的方法并不限制字串匹配处理流水线22采用的具体匹配方法,前述仅以图3至图7的基于散列的字串匹配方法为例说明,但本发明并不局限于此。
第三解决方案:
首先经由提取单元220从数据缓冲器210提取包括Q个字符的待压缩字串并存储至预取缓冲器280;经由控制电路240在每个发布周期从预取缓冲器280并行发布P个实例,其中每个实例依序对应于以待压缩字串中的连续P个字符的每一个字符作为起始字符的一个子字串,其中Q和P为大于1的正整数,且Q大于P。以下均以Q=16,P=4及n=3(即,每个实例所对应的子字串包括3个字符)为例来说明,但本发明并不局限于此,P、Q和n也可以是其它数值:控制电路240判断在一个时钟周期(发布周期)所发布的4个实例所对应的4个子字串是否互为完全相同,在一实施例中,控制电路240可以判断在一个时钟周期(发布周期)所取到的6个字符(亦即4个子字串)是否相同来判断4个子字串是否互为完全相同。当这4个实例所对应的这4个子字串互为完全相同时,控制电路240可以将这4个实例中的一个实例发送至字串匹配处理流水线22进行匹配操作,但是不将这4个实例中的其余3个实例发送至字串匹配处理流水线22。当这4个实例所对应的4个子字串互不完全相同时,控制电路240将这4个实例的每一个均发送至字串匹配处理流水线22进行匹配操作。与前述第一解决方案的不同之处在于:首先,当4个子字串互为完全相同时,仅发送4个实例中的1个实例至字串匹配处理流水线22进行匹配操作,而第一解决方案要发送2个实例至字串匹配处理流水线22进行匹配操作以形成匹配对;另外,当后续的发布周期中的4个实例所对应的4个子字串连续为完全相同,在本解决方案中,每个发布周期都要发布4个相同实例中的1个实例至字串匹配处理流水线22进行匹配操作,而在第一解决方案中,后续发布周期则不发布任何实例直到出现不同的子字串或者达到最大匹配长度。控制电路240存储所有实例于中介缓冲器230,其中没有被发送至字串匹配处理流水线22的实例在中介缓冲器230中的状态为一不匹配状态(No Match)。
举例来说,图13说明待压缩字串的又一个具体范例。图13所示横轴表示时间,IP(T1)表示发布指针IP在发布周期T1所指的位置,IP(T2)表示发布指针IP在发布周期T2所指的位置,IP(T3)表示发布指针IP在发布周期T3所指的位置。在图13所示范例中,待压缩字串中存在大量连续的相同字符“a”。控制电路240可以在发布周期T1从发布指针IP所指的位置取到6个字符“a”,亦即T1所发布的4个子字串均为“aaa”。控制电路240可以发现在发布周期T1中所发布的这4个子字串互为相同,因此控制电路240可以将在发布周期T1所发布第1个实例发送至字串匹配处理流水线22进行匹配操作,但是不将在发布周期T1所发布的其余3个实例发送至字串匹配处理流水线22进行匹配操作。以此类推,因为在发布周期T2中所发布的这4个实例对应的子字串也互为完全相同,因此控制电路240可以仅将在发布周期T2所发布的第一个实例发送至字串匹配处理流水线22进行匹配操作0,但是不将在发布周期T2所发布的其余3个实例发送至字串匹配处理流水线22进行匹配操作。
依照不同的设计需求,所述提取单元220、中介缓冲器230、控制电路240、字串匹配处理流水线22(例如包括散列匹配器250与最长字串匹配器260)、格式化器270和/或是预取缓冲器280的方块的实现方式可以是硬件(hardware)、固件(firmware)、软件(software,即程序)或是前述三者中的多个的组合形式。
以硬件形式而言,所述提取单元220、中介缓冲器230、控制电路240、字串匹配处理流水线22(例如包括散列匹配器250与最长字串匹配器260)、格式化器270和/或是预取缓冲器280的方块可以实现于集成电路(integrated circuit)上的逻辑电路。所述提取单元220、中介缓冲器230、控制电路240、字串匹配处理流水线22(例如包括散列匹配器250与最长字串匹配器260)、格式化器270和/或是预取缓冲器280的相关功能可以利用硬件描述语言(hardware description languages,例如Verilog HDL或VHDL)或其他合适的编程语言来实现为硬件。举例来说,所述提取单元220、中介缓冲器230、控制电路240、字串匹配处理流水线22(例如包括散列匹配器250与最长字串匹配器260)、格式化器270和/或是预取缓冲器280的相关功能可以被实现于一或多个控制器、微控制器、微处理器、特殊应用集成电路(Application-specific integrated circuit,ASIC)、数字信号处理器(digital signalprocessor,DSP)、现场可编程逻辑门阵列(Field Programmable Gate Array,FPGA)和/或其他处理单元中的各种逻辑区块、模块和电路。
以软件形式和/或固件形式而言,所述提取单元220、中介缓冲器230、控制电路240、字串匹配处理流水线22(例如包括散列匹配器250与最长字串匹配器260)、格式化器270和/或是预取缓冲器280的相关功能可以被实现为编程码(programming codes)。例如,利用一般的编程语言(programming languages,例如C或C++)或其他合适的编程语言来实现所述提取单元220、中介缓冲器230、控制电路240、字串匹配处理流水线22(例如包括散列匹配器250与最长字串匹配器260)、格式化器270和/或是预取缓冲器280。所述编程码可以被记录/存放在记录介质中,所述记录介质中例如包括只读存储器(Read Only Memory,ROM)、存储装置和/或随机存取存储器(Random Access Memory,RAM)。计算机、中央处理器(Central Processing Unit,CPU)、控制器、微控制器或微处理器可以从所述记录介质中读取并执行所述编程码,从而达成相关功能。作为所述记录介质,可使用“非临时的计算机可读介质(non-transitory computer readable medium)”,例如可使用带(tape)、碟(disk)、卡(card)、半导体存储器、可编程设计的逻辑电路等。而且,所述程序也可经由任意传输介质(通信网络或广播电波等)而提供给所述计算机(或CPU)。所述通信网络例如是互联网(Internet)、有线通信(wired communication)、无线通信(wireless communication)或其它通信介质。
综上所述,本发明诸实施例所述加速压缩方法以及加速压缩装置20可以判断多个实例所对应的多个子字串是否互为完全相同。当这些子字串互为完全相同时,控制电路240可以针对这些子字串的部分(或全部)而停止发送至字串匹配处理流水线22进行匹配操作。因此,所述加速压缩方法以及加速压缩装置可以改善具有相同内容的多个子字串被发送至字串匹配处理流水线22进行不必要的冗余匹配操作的情形。
虽然本发明已以实施例公开如上,然其并非用以限定本发明,本领域技术人员在不脱离本发明的精神和范围内,当可作些许的更动与润饰,故本发明的保护范围当视所附权利要求书界定范围为准。
Claims (20)
1.一种加速压缩方法,实施于加速压缩装置中,该加速压缩装置包括预取缓冲器及字串匹配处理流水线,所述加速压缩方法包括:
从数据缓冲器提取待压缩字串并存储至所述预取缓冲器,其中所述待压缩字串包括Q个字符,其中在所述预取缓冲器中为所述待压缩字串中的每一字符对应存储重复标志;以及
在每个发布周期并行发布P个实例,其中,所述P个实例的每一个依序对应于以所述待压缩字串中的连续P个字符的每一个为一起始字符的子字串,其中Q和P为大于1的正整数,且Q大于P,其中:
当所述P个实例对应的P个所述子字串所包含的所有字符完全相同时,将所述P个实例中的后面(P-1)个实例对应的所述起始字符的所述重复标志均设为设置态;及
发送所述P个实例中有任一字符的所述重复标志未被设为所述设置态的实例至所述字串匹配处理流水线进行匹配操作,而不发送所有字符的所述重复标志均被设为所述设置态的实例至所述字串匹配处理流水线。
2.如权利要求1所述的加速压缩方法,其中,当所述P个实例对应的P个子字串两两相同时,判定所述P个实例对应的P个子字串所包含的所有字符完全相同。
3.如权利要求1所述的加速压缩方法,其中所述字串匹配处理流水线还包括散列匹配器及最长字串匹配器,所述匹配操作还包括:
为每一所述实例发送散列请求给所述散列匹配器,当所述散列匹配器传来的第一回复中包含匹配信息时,发送数据请求给所述最长字串匹配器;
依据所述最长字串匹配器传来的第二回复中包含的长度是否小于最大匹配长度的判断,去更新所述实例的状态、匹配长度及匹配偏移量。
4.如权利要求3所述的加速压缩方法,其中所述匹配操作还包括:
计数被设为所述设置态的且连续的所述重复标志的个数,以获得连续重复计数值;
以所述连续重复计数值更新所述实例的所述匹配长度;以及
按照发布过的所述实例所对应的所述子字串在所述待压缩字串中的原始顺序,并依据所述实例的每一个的所述状态、所述匹配长度及所述匹配偏移量,输出结果给格式化器,使得所述格式化器据以压缩所述待压缩字串。
5.如权利要求4所述的加速压缩方法,其中,所述实例所对应的所述子字串在所述待压缩字串中的所述原始顺序由退却指针控制,其中在每个所述发布周期,所述退却指针顺序向后跳转P个字符。
6.如权利要求3所述的加速压缩方法,其中发布过的所述实例按照所对应的所述子字串在所述待压缩字串中的所述原始顺序被存储在中介缓冲器,所述中介缓冲器独立于所述字串匹配处理流水线。
7.如权利要求3所述的加速压缩方法,其中,还包括:
当所述第一回复包含不匹配信息时,将所述实例的所述状态更新为不匹配状态;以及
当所述第一回复包含所述匹配信息时,还将所述实例的所述状态更新为数据请求状态,更新所述实例的所述匹配长度为所述子字串的长度,以及更新所述实例的所述匹配偏移量为所述第一回复中的偏移量。
8.如权利要求3所述的加速压缩方法,其中
当所述第二回复所包含的所述长度小于所述最大匹配长度时,更新所述实例的所述状态为部分匹配状态,以及以所述长度更新所述实例的所述匹配长度;以及
当所述第二回复包含的所述长度不小于所述最大匹配长度时,更新所述实例的所述状态为完全匹配状态,以所述最大匹配长度更新所述实例的所述匹配长度,以及发出相应于所述实例的另一数据请求给所述最长字串匹配器以继续后续的字串比对。
9.如权利要求3所述的加速压缩方法,其中,输出所述结果给所述格式化器的步骤包括:
当所述实例的所述状态为不匹配状态时,所述结果包含所述实例中的字符;以及
当所述实例的所述状态为部分匹配状态或者完全匹配状态时,所述结果包含所述实例中的所述匹配长度及所述匹配偏移量。
10.如权利要求1所述的加速压缩方法,其中发布所述实例的顺序由发布指针控制,其中在每个所述发布周期,所述发布指针顺序向后跳转P个字符。
11.一种加速压缩装置,包括:
预取缓冲器,用以存储从数据缓冲器提取的待压缩字串,其中所述待压缩字串包括Q个字符,在所述预取缓冲器中为所述待压缩字串中的每一字符对应存储重复标志,在每个发布周期从所述预取缓冲器并行发布P个实例,以及所述P个实例的每一个依序对应于以所述待压缩字串中的连续P个字符的每一个为一起始字符的子字串,其中Q和P为大于1的正整数,且Q大于P;
字串匹配处理流水线,耦接于所述预取缓冲器;
控制电路,其中,
当所述P个实例对应的P个所述子字串所包含的所有字符完全相同时,所述控制电路将所述P个实例中的后面(P-1)个实例对应的所述起始字符的所述重复标志均设为设置态;以及
所述控制电路发送所述P个实例中有任一字符的所述重复标志未被设为所述初始态的实例至所述字串匹配处理流水线进行匹配操作,而不发送所有字符的所述重复标志均被设为所述设置态的实例至所述字串匹配处理流水线。
12.如权利要求11所述的加速压缩装置,其中,当所述P个实例对应的P个子字串两两相同时,所述控制电路判定所述P个实例对应的P个子字串所包含的所有字符完全相同。
13.如权利要求11所述的加速压缩装置,其中其中所述字串匹配处理流水线还包括散列匹配器及最长字串匹配器,所述匹配操作还包括:
所述控制电路为每一所述实例发送散列请求给所述散列匹配器,当所述散列匹配器传来的第一回复中包含匹配信息时,发送数据请求给所述最长字串匹配器;
所述控制电路依据所述最长字串匹配器传来的第二回复中包含的长度是否小于最大匹配长度的判断,去更新所述实例的状态、匹配长度及匹配偏移量。
14.如权利要求13所述的加速压缩装置,其中所述匹配操作还包括:
所述控制电路计数被设为所述设置态的且连续的所述重复标志的个数,以获得连续重复计数值;
所述控制电路以所述连续重复计数值更新所述实例的所述匹配长度;以及
按照发布过的所述实例所对应的所述子字串在所述待压缩字串中的原始顺序,并依据所述实例的每一个的所述状态、所述匹配长度及所述匹配偏移量,所述控制电路输出结果给格式化器,使得所述格式化器据以压缩所述待压缩字串。
15.如权利要求14所述的加速压缩装置,其中,所述实例所对应的所述子字串在所述待压缩字串中的所述原始顺序由退却指针控制,其中在每个所述发布周期,所述退却指针顺序向后跳转P个字符。
16.如权利要求13所述的加速压缩装置,其中所述控制电路按照所对应的所述子字串在所述待压缩字串中的所述原始顺序将发布过的所述实例存储于中介缓冲器,所述中介缓冲器独立于所述字串匹配处理流水线。
17.如权利要求13所述的加速压缩装置,其中,
当所述第一回复包含不匹配信息时,所述控制电路将所述实例的所述状态更新为不匹配状态;以及
当所述第一回复包含所述匹配信息时,所述控制电路还将所述实例的所述状态更新为数据请求状态,更新所述实例的所述匹配长度为所述子字串的长度,以及更新所述实例的所述匹配偏移量为所述第一回复中的偏移量。
18.如权利要求13所述的加速压缩装置,其中,
当所述第二回复所包含的所述长度小于所述最大匹配长度时,所述控制电路更新所述实例的所述状态为部分匹配状态,以及以所述长度更新所述实例的所述匹配长度;以及
当所述第二回复包含的所述长度不小于所述最大匹配长度时,所述控制电路更新所述实例的所述状态为完全匹配状态,以所述最大匹配长度更新所述实例的所述匹配长度,以及发出相应于所述实例的另一数据请求给所述最长字串匹配器以继续后续的字串比对。
19.如权利要求13所述的加速压缩装置,其中,
当所述实例的所述状态为不匹配状态时,所述结果包含所述实例中的字符;以及
当所述实例的所述状态为部分匹配状态或者完全匹配状态时,所述结果包含所述实例中的所述匹配长度及所述匹配偏移量。
20.如权利要求11所述的加速压缩装置,其中发布所述实例的顺序由发布指针控制,其中在每个所述发布周期,所述发布指针顺序向后跳转P个字符。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910091400.0A CN109802685B (zh) | 2019-01-30 | 2019-01-30 | 加速压缩方法以及加速压缩装置 |
US16/425,973 US10879926B2 (en) | 2019-01-30 | 2019-05-30 | Accelerated compression method and accelerated compression apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910091400.0A CN109802685B (zh) | 2019-01-30 | 2019-01-30 | 加速压缩方法以及加速压缩装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109802685A true CN109802685A (zh) | 2019-05-24 |
CN109802685B CN109802685B (zh) | 2022-12-27 |
Family
ID=66559314
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910091400.0A Active CN109802685B (zh) | 2019-01-30 | 2019-01-30 | 加速压缩方法以及加速压缩装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10879926B2 (zh) |
CN (1) | CN109802685B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112104658A (zh) * | 2020-09-17 | 2020-12-18 | 山东方寸微电子科技有限公司 | 一种报文压缩方法及系统 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113630123B (zh) * | 2021-06-30 | 2023-08-18 | 山东云海国创云计算装备产业创新中心有限公司 | 一种数据压缩系统及方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5448733A (en) * | 1993-07-16 | 1995-09-05 | International Business Machines Corp. | Data search and compression device and method for searching and compressing repeating data |
CN1228887A (zh) * | 1996-07-24 | 1999-09-15 | 尤尼西斯公司 | 与串搜索交错进行即时字典更新的数据压缩和解压缩系统 |
CN106021356A (zh) * | 2015-05-11 | 2016-10-12 | 上海兆芯集成电路有限公司 | 依据输入区块类型使用动态散列算法的硬件数据压缩器 |
CN107180018A (zh) * | 2017-05-17 | 2017-09-19 | 上海兆芯集成电路有限公司 | 基于散列的加速压缩方法以及使用此方法的装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11252552A (ja) * | 1998-03-05 | 1999-09-17 | Sony Corp | ビデオ信号の圧縮符号化方法及び圧縮符号化装置、並びに、圧縮符号化データの多重化方法及び多重化装置 |
CN109857463B (zh) * | 2019-01-30 | 2020-12-01 | 上海兆芯集成电路有限公司 | 加速压缩方法以及加速压缩装置 |
CN109828789B (zh) * | 2019-01-30 | 2020-11-27 | 上海兆芯集成电路有限公司 | 加速压缩方法以及加速压缩装置 |
-
2019
- 2019-01-30 CN CN201910091400.0A patent/CN109802685B/zh active Active
- 2019-05-30 US US16/425,973 patent/US10879926B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5448733A (en) * | 1993-07-16 | 1995-09-05 | International Business Machines Corp. | Data search and compression device and method for searching and compressing repeating data |
CN1228887A (zh) * | 1996-07-24 | 1999-09-15 | 尤尼西斯公司 | 与串搜索交错进行即时字典更新的数据压缩和解压缩系统 |
CN106021356A (zh) * | 2015-05-11 | 2016-10-12 | 上海兆芯集成电路有限公司 | 依据输入区块类型使用动态散列算法的硬件数据压缩器 |
CN107180018A (zh) * | 2017-05-17 | 2017-09-19 | 上海兆芯集成电路有限公司 | 基于散列的加速压缩方法以及使用此方法的装置 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112104658A (zh) * | 2020-09-17 | 2020-12-18 | 山东方寸微电子科技有限公司 | 一种报文压缩方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
US10879926B2 (en) | 2020-12-29 |
CN109802685B (zh) | 2022-12-27 |
US20200244281A1 (en) | 2020-07-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107180018B (zh) | 基于散列的加速压缩方法以及使用此方法的装置 | |
Kraska et al. | The case for learned index structures | |
Boucher et al. | Prefix-free parsing for building big BWTs | |
JP2790466B2 (ja) | 文字列検索方法及び装置 | |
CN106797446B (zh) | 基于存储器的历史搜索 | |
CN107168936B (zh) | 基于散列的加速压缩方法以及使用此方法的装置 | |
CN109828789A (zh) | 加速压缩方法以及加速压缩装置 | |
CN107608750A (zh) | 状态机晶格中的计数器操作 | |
CN104904167A (zh) | 通信网络中对于分组处理的高性能基于哈希的查找 | |
CN109802685A (zh) | 加速压缩方法以及加速压缩装置 | |
WO2016109570A1 (en) | Systems and devices for accessing a state machine | |
JP4267707B2 (ja) | データフローアーキテクチャにおけるビットストリングのn−ウェイ処理 | |
US11366675B2 (en) | Systems and devices for accessing a state machine | |
CN109857463A (zh) | 加速压缩方法以及加速压缩装置 | |
CN112926647B (zh) | 模型训练方法、域名检测方法及装置 | |
CN109802686A (zh) | 加速压缩方法以及加速压缩装置 | |
CN113495901B (zh) | 一种面向可变长数据块的快速检索方法 | |
CN111357203A (zh) | 用于将大数据变换成较小的表示的系统和方法 | |
JPH0773187A (ja) | 検索システム | |
JP2760790B2 (ja) | データ処理装置 | |
US12105690B1 (en) | Multiple pass sort | |
JP2772125B2 (ja) | 辞書検索方式 | |
JP2772124B2 (ja) | 辞書検索方式 | |
JP2002049645A (ja) | ハッシュ値算出方法、ハッシュ値算出装置、検索方法、検索装置、記録媒体 | |
JP2535655B2 (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 |