CN107925419A - 用于使用硬件和软件进行解压缩的系统、方法和装置 - Google Patents
用于使用硬件和软件进行解压缩的系统、方法和装置 Download PDFInfo
- Publication number
- CN107925419A CN107925419A CN201680048980.XA CN201680048980A CN107925419A CN 107925419 A CN107925419 A CN 107925419A CN 201680048980 A CN201680048980 A CN 201680048980A CN 107925419 A CN107925419 A CN 107925419A
- Authority
- CN
- China
- Prior art keywords
- record
- token
- decoder
- original meaning
- stream
- 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
-
- 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/6005—Decoder aspects
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本文中详述的是用于使用硬件和软件进行解压缩的系统、方法和装置。在硬件中,输入缓冲器存储来自经压缩的流的传入输入记录。多个解码器对来自输入缓冲器的至少一个输入记录进行解码,并且从经解码的数据和多个解码器的子集输出中间记录以输出原义流。最后,重格式化电路将中间记录格式化为两种类型令牌中的一种。
Description
技术领域
本文中描述的各实施例涉及解压缩技术。
背景技术
Snappy是LZ77家族中的一种算法,LZ77家族广泛用于诸如Hadoop压缩、BTRFS文件系统之类的应用、用于诸如索引服务器之类的数据中心用途,并且也在一些浏览器中被启用。在这些用途中,解压缩等待时间对于系统性能是关键的。
附图说明
在所附附图中以示例方式而非限制方式说明本发明,在附图中,类似的附图标记指示类似的元件,其中:
图1示出用于经加速的解压缩的系统的实施例。
图2示出用于经加速的解压缩的系统的实施例。
图3示出硬件加速器的实施例。
图4示出来自加速器的令牌格式和令牌输出的实施例。
图5示出解压缩方法的实施例。
图6示出快速路径代码的示例。
图7示出异构硬件解压缩器的实施例。
图8示出快速和慢速路径令牌格式的实施例。
图9示出在支持第二令牌类型的处理器上的快速路径处理流程的实施例。
图10-图12示出在用于不同类型的压缩算法的中间格式中指定的偏移和长度。
图13是根据本发明的一个实施例的寄存器架构的框图。
图14A是示出根据本发明的实施例的示例性有序流水线和示例性的寄存器重命名的乱序发布/执行流水线的框图。
图14B是示出根据本发明的实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的乱序发布/执行架构核的框图。
图15A-图15B示出了更具体的示例性有序核架构的框图,该核将是芯片中的若干逻辑块之一(包括相同类型和/或不同类型的其他核)。
图16是根据本发明的实施例的处理器1600的框图,处理器1600可具有多于一个的核,可具有集成存储器控制器,并且可具有集成图形器件。
图17-图20是示例性计算机架构的框图。
图21是根据本发明的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
在以下描述中,陈述了众多具体细节。然而,应当理解,可不通过这些具体细节来实施本发明的实施例。说明书中提及“一个实施例”、“实施例”、“示例实施例”等表明所描述的实施例可以包括特定的特征、结构或特性,但是每个实施例可能不一定都包括该特定的特征、结构或特性。此外,此类短语不一定是指同一个实施例。此外,当结合实施例描述特定的特征、结构或特性时,认为结合无论是否被明确描述的其他实施例而影响此类特征、结构或特性是在本领域技术人员的知识范围之内的。
下文详述的是用于使用对固定功能硬件和软件之间的计算进行的高效且新颖的分区来对(例如,基于LZ77的压缩算法的)解压缩进行加速的实施例。以下实施例中的许多实施例讨论LZ77“Snappy”算法,但是同等地很好地适用基于(类似的)编码格式的该家族(例如,LZF、LZ4)中的其他压缩技术。总体而言,LZ77压缩算法发现反复的子串,并且用向后引用(相对距离偏移)来替换它们。经压缩的数据由两种类型的一系列元素构成:原义(literal)字节以及指向重复串的指针,其中,指针被表示为参数对<长度,向后距离偏移>。
Snappy格式由表示一连串原义字节或引用的符号组成。该编码起始于包含关于符号类型、原义或引用的长度的信息的标签或控制字节以及距离偏移的一些位。标签字节之后跟随的是原义,或者1个或2个距离偏移字节。在大型历史缓冲器或超长原义串的一些(罕见的)情况下,附加的字节也存在。
解压缩过程由两个主要步骤组成:1)将输入流解析为令牌(原义或LZ77副本);以及2)将指定数量的字节复制到输出流。用于实现LZ77解压缩的当前的软件方法受限于差的有条件的依赖于数据的分支、加载等待时间以及影响对符号进行解码的关键路径的大量指令。由于解压缩是串行过程,因此关键路径通常与能够多快地解析并开始处理下一符号有关。
在下文所讨论的实施例中,上述第一步骤在固定功能硬件中执行,并且第二步骤由常规处理器上的软件完成。下文中聚焦LZ77解压缩的关键部分,并且在仅用于前端解析的固定功能硬件与用于数据复制的软件之间高效地分割该问题。定义了中间令牌流,该中间令牌流通过消除低置信度依赖于数据的分支,在关键循环中具有少量指令,并且消除用于到达下一符号解码(通过定义固定长度令牌)的当前软件关键路径而对于软件性能是非常友好的。
后处理软件计算被分割为快速和慢速路径,并且确保快速路径在常规核上实现最高速度。图1示出用于经加速的解压缩的系统的实施例。在存储器103(易失性存储器(诸如,随机存取存储器(RAM))或非易失性存储设备(诸如,盘))中存储了经压缩的LZ77流105、未经压缩的LZ77流107、以及快速和慢速处理代码109。经压缩的流105是进入加速器111的输入,该输入包括经LZ77编码的文件。未经压缩的流107是加速器111和执行单元113的输出。典型地,该流包括已经被解码的内容的历史。用于处理该流以指示加速器111和执行单元113两者的代码存储在快速和慢速处理代码109中。该代码的示例见于将稍后讨论的图6中。
加速器111生成固定长度(例如,5字节)的令牌,该固定长度的令牌表示从历史/输出缓冲器复制或从输入流(即,原义集)复制。在下文中,时不时地可将加速器111称为前端硬件。加速器111在(经压缩的)LZ77流中读取,并且以固定长度格式输出令牌流(即,不包括原义数据)。处理器核101的执行单元113充当后端,并且使用令牌、原始流和输出流(历史)来生成经解码的输出。
图2示出用于经加速的解压缩的系统的实施例。在该示例中,组件与前一附图中的相同,然而,加速器211在处理器核101的外部。
加速器输出有固定长度(5字节)令牌的流组成。在大多数时候,LZ77记录将生成单个令牌。在罕见的实例中,记录将生成两个令牌,这种情况由处理器代码中的异常情况“慢速路径”来处理。令牌流提供两个偏移,这两个偏移被处理器代码用作用于存储器复制操作的相对于源和目的地基址寄存器的偏移。与使得代码在迭代中的每个步骤处将地址递增不同,硬件加速器为软件的基址提供增长的偏移。在某个时刻,当偏移变得过大时,更新令牌被发送以使处理器代码中的基址寄存器递增。这些更新事件是不频繁的,并且不显著地影响中间流的性能或尺寸;另一方面,由于代码的每一次迭代是紧凑的/小型循环,因此这些更新事件改善代码的每一次迭代的性能。
图3示出硬件加速器的实施例。例如,加速器111或211。在所示示例中,具有各自尺寸为8字节的两个输入暂存(staging)缓冲器301。这些输入缓冲器301接收经压缩数据(诸如,经Snappy压缩的数据)。当然,可使用其他缓冲器尺寸。缓冲器301基于由解码器305提供的指针来进展。
选择器303基于经解码的流中的当前指针从输入缓冲器选择至少一个字节。在实施例中,选择器303是从缓冲器301选择多至5个字节的8:1多路复用器。
解码器/偏移ALU 305对所选择的字节解码以确定数据的若干片段,这些片段包括以下一者或多者:如果经解码的数据是原义、符号,导致重叠条件(其中,输入和输出流重叠)、LZ77记录的尺寸(将用于源和目的地基址寄存器的更新同步)、原义或符号的长度、以及用于原义或符号的偏移。解码器305也确定下一指针,该下一指针用于继续移动缓冲器301并由选择器303使用。在一些实施例中,解码器的输出存储在LZ77记录寄存器311中。
去往令牌转换器313的LZ77取得解码器305(和寄存器311)的输出以生成固定长度令牌(例如,5字节),其包括经解码数据中的一些。转换器313也吸收并更新存储在基址寄存器315和317中的相对源和目的地偏移。
输出令牌寄存器319存储令牌,直到输出令牌累加器321准备将该令牌向外发送。
图4示出来自加速器的令牌格式和令牌输出的实施例。401示出总体格式,其包括用于以下部分的字段:源偏移、原义、更新、长型、重叠、长度和目的地偏移。示出示例性尺寸和位的位置,然而,可使用不同的尺寸和布置。此外,用于长度的字段(“len/16”)是16字节块中的长度,并且在一些实施例中为“floor((len-1)/16)”,因为应当具有至少一个块(除非是在慢速路径上)。
目的地/输出地址被指定为距基址指针(其中,该基址指针用“更新”记录来周期性地更新)的目的地偏移(”dst_offset”)。这意味着除了复制的输出是用于下一记录的复制的输入的情况之外,在多个迭代之间没有依赖性。
在大多数实施例中,将被复制的条目的长度被提供为向上舍入到16字节。这实现处理器代码中的快速简单复制,而不是慢速逐字节复制。然而,在LZ77中,会具有来自过于接近当前指针的距离的重叠副本,这将需要较慢的复制。加速器检测这些情况,并对“重叠”位标记置位。LZ77(诸如,Snappy)编码中的原义的长度可以多达232(4GB),但是大多数时候,它们将小于61字节。符号的长度限制到64(即,<=64),但是往回的距离可以与历史窗口一样大。
在所示示例中,所有副本被表达为16字节的倍数,但是,在一些实施例中,可使用其他尺寸。目的地地址将仅进展引用/原义系列的长度,但是复制较大的固定块体一般是高效的,因为那比可变的逐字节复制更快。
源偏移(“src_offset”)是有符号值。对于原义,它一般将是正值(相对于指向原始输入流的地址寄存器)。对于符号,它最初将是相对于输出指针(即,指向输出流的地址寄存器)的负值,但是随着输出被写入(不改变输出指针),它会变成正值。
更新指示输入和输出地址将被更新Δ(增量),该Δ使源指针和数据指针同步,并且典型地是要增加的大的量。原义指示正在被处理的是原义还是符号。长型指示是否存在应当为罕见的且调用慢速路径的大型、不可压缩数据。
403指示用于符号的令牌的示例,其中,源偏移相对于输出地址。这旨在相对于输出指针来复制符号。
405指示用于符号的令牌的示例,其中,源偏移相对于复制的输出与输入重叠之处的输出地址。
407示出用于原义的令牌的示例,其中,源偏移相对于原始未经压缩的流缓冲器的输入地址。这旨在从缓冲器复制原义。
409示出源和目的地偏移的更新将被进行的示例,并且示出用于那些更新的Δ。
411示出指示长原义的令牌的示例,其中,原义串的长度非常大。对此存在两个问题。第一个问题在于,长度/17对于7位而言是溢出的,因此,需要更大长度的字段(不可压缩的数据量)。在复制操作的开始,偏移字段(以及其相关联的基址寄存器)被合理地设定尺寸。第二个问题在于,在复制操作之后,输出指针已进展一“大”量(即,可能显著地大于可由正常的“更新”操作递增的量)。类似地,进入原始输入流的基址指针也将已经进展一“大”量。为了解决此问题,具有在复制操作完成之后将被增加到这两个基址指针的大值(隐式大更新)。
在长型原义的情况下,尺寸是给定的(不是尺寸/16)。这确定要被复制的数据量,并且也是要被增加到输入和输出基址寄存器的值。在一些实施例中,具有17位输入偏移和8位长度字段。在一些实施例中,令牌的固定长度被定义为8字节。
413指示长型符号,其中,甚至在更新之后,源偏移也不能够以字段的宽度来表达。
图5示出解压缩方法的实施例。该方法结合上述加速器来工作,并且消耗该加速器的输出。
在501处,从经解码的流加载记录。例如,从LZ77流(诸如,Snappy流)加载记录。在503处,第一数量的字节被添加到用于经解码的流的所加载的记录指针。例如,5个字节被添加到所加载记录的指针。这些步骤允许从经解码的流加载记录。
在505处,创建用于源偏移的有符号值。
在507处,作出是否将使用慢速路径(不使用硬件加速器)的判定。该判定使用来自硬件加速器的令牌输出来判定不允许对硬件加速器的高效使用的条件是否存在。例如,是否存在长型、更新或重叠条件。如果存在,则在步骤509处使用慢速路径,但这应当是罕见事件。
如果不存在此类条件,则在511处,作出经解码的数据是否为原义的判定。此信息来自由硬件加速器供应的令牌。如果经解码的流是原义,则在513处,用于该数据的源指针使用基址寄存器,该基址寄存器存储为与经压缩的(原始的)流相关联的基址指针。基址指针被加到有符号的源偏移以创建加载地址。如果经解码的流不是原义,则在515处,源指针为与经解压缩的输出相关联的基址指针加上进入经解压缩的(输出)流的有符号的源偏移。注意,这些基址寄存器要么存在于加速器中,要么存在于处理器核中。
在517处,基于源指针而加载来自经解压缩或经压缩的流的数据。在519处,经加载的数据被存储为块体(例如,16字节)。该方法重复进行,直到经压缩的流已被处理。
图6示出快速路径代码的示例。针对每一个符号执行该循环。前两条指令(mov和add)从经解码的流加载记录。之后的三条指令提供用于源偏移的有符号值。之后的两条指令测试令牌中所包括的条件。如果存在阻止快速路径有效的问题(长型、更新、或重叠置位为1),则跳转到慢速路径。之后的三条指令(mov、text和cmovnz)潜在地切换源指针。Vmovdqu是加载,并且跟随该指令一直到循环结尾的指令用于存储16字节副本。
异构的解压缩处理
上文详述了生成固定长度(5字节)的令牌的前端,该令牌表示:从历史/输出缓冲器复制N个字节,并从输入流(即,原义集)复制N个字节。这使得处理器代码能够是无分支的,并且简单地使用移动指令来加载源指针以进行复制。
遗憾的是,这并不是对于所有压缩算法都是理想的。例如,在不对原义集进行编码但仅对针对没有发现匹配的每个位置的单个原义字节进行编码的面向字节的格式中,上述前端不尽如人意。虽然简单的固定5字节令牌可表示单个原义,但是将针对每个原义生成1个令牌,这会在中间令牌流中导致大型臃肿,并且会导致在处理器上的后处理运行时间的相应增加。此外,其中原义不在字节边界上而是起始于某个任意位的某个n位集合以字节偏移(并且因此跨越字节)的任何面向位的格式(诸如,Deflate或LZS)会引起问题。同样,如果表示连续原义的位在位流中分散,则面向位的格式甚至是更有问题的。同样注意,在Deflate中,原义是经哈夫曼(Huffman)编码的,因此不能被看见。
下文详述的是用于处理这些其他格式的系统、装置和方法的实施例。除令牌流之外,还由硬件解压缩器生成次级输出流。本质上,硬件也将可能经编码的原义向外解析为在经压缩的位流中的任意位置处的位,并且将原义字节作为连续的原义流写出。
无论硬件输出解压缩什么格式,硬件输出都以确切相同的方式来定义。令牌流格式将是完全相同的,并且Deflate将恰具有所生成的附加的原义字节流(而Snappy将没有)。
除了上文详述的格式之外,还定义了为一些具有SIMD能力的处理器优化的从解压缩硬件到处理器的第二格式。在上文定义的格式仅需要具有良好性能的简单整型指令的情况下,更有能力的处理器可利用不同格式获得更大的加速。
图7示出异构硬件解压缩器的实施例。该解压缩器可用作诸如图1和图2中发现的那些加速器之类的加速器。在输入缓冲器701中接收经压缩的数据流以传递至一个或多个解码器(解码器0 703、解码器1 705和解码器N 707)。这些解码器(或解析器)取得那个输入数据流,并且生成中间记录(或令牌)和/或原义流。
Snappy和LZ4解码器(解码器N 707)仅生成单个输出(中间记录,这些中间记录随后经处理以形成令牌流),而用于Deflate的解码器(解码器703)和用于LZS的解码器(解码器705)具有附加的输出(字节对齐的原义流)。
这些前端解码器处理来自经压缩的流的输入记录,从而将它们转换为中间记录,这些中间记录随后被重新格式化为最终令牌流。基于所需的配置,可以为一些具有SIMD能力的处理器生成两种不同类型的令牌输出中的一种。取决于特定的解压缩算法,输入记录可生成单个或多个输出令牌。
多个解压缩器各自都创建中间记录,该中间记录被重新格式化为多种最终输出格式(例如,在一些实施例中,被重新格式化为本文中详述的两种最终输出格式)中间记录要么传达关于原义字节集合的信息,要么传达关于引用的信息。一个输入记录可确切地产生一个中间记录(例如,对Snappy进行解码的正常操作)。然而,一个输入记录可产生多个中间记录(例如,按Snappy格式的非常大型的所存储的原义块)。类似地,为了获得解码格式(诸如,Deflate)的效率,由于每一个原义将是一个输入记录,因此解码器可使这些输入记录的集合集中在一起以创建(用于N个原义的)单个中间记录。中间记录通常将包含信息使得解压缩器硬件能够知晓输入流正如何进展,原义流正如何进展,以及输出流正如何进展,所述信息诸如输入流中的当前记录的开始/结束、输入流是否将被使用、或用于提取软件中的原义的特殊原义流,等等。在所有情况下,引用将由长度/距离-偏移来表示。
在图10-图12中描绘在用于不同类型的压缩算法的中间格式中指定的偏移和长度。图10示出字节对齐的单个记录,诸如,在Snappy或LZF中发现的记录。每一个“输入记录”确切地包含原义或往回引用的一个记录。同样,原义字节在经压缩的流中的字节对齐的位置中是易于得到的。图11示出用于专用原义流的单个记录,专用原义流诸如,在LZS、LZSS和DEFLATE中发现的那些原义流。每一个“输入记录”确切地包含原义或往回引用的一个记录。然而,在经压缩的流中,在字节对齐的位置(例如,LZS、LZSS)中,原义是不易于得到的,并且/或者原义根本不可得到(例如,Deflate)。图12示出字节对齐的单个记录,诸如,在LZRW、LZ4和LZJB中发现的记录。每一个“输入记录”是包含多个记录的组,并且在经压缩的的流的字节对齐的位置中,原义字节是易于得到的。在压缩算法中的每一种算法中,原义来自经压缩的流。
选择器709用于在来自解码器的多个中间记录之间进行选择,这些中间记录随后在中间记录暂存缓冲器711中进行缓冲。记录重格式化电路713将多个中间记录组合为单个输出令牌。按一些格式,输入记录可按组指定。一些算法限制用于每一个记录的原义的长度,实际上,对于Deflate,仅一个字节。在此类情况下,经压缩的流可能潜在地具有连续的原义类型记录。重格式化电路713将多个原义记录合并为一个输出记录,而不是输出一个字节原义的多个输出令牌。在一些实施例中,8个连续的中间记录在缓冲器711中被缓冲,并且记录重格式化电路利用跨越经缓冲记录的短偏移来检查对引用记录的任何依赖性,并且(对于快速路径)发出完整的SIMD令牌或(对于慢速路径)发出多个单令牌。在下文中详述这些令牌。
选择器715在多个原义输出715之间进行选择,并且将所选择的原义呈现给选择器717,该选择器717基于来自输出仲裁器719的输入而在记录重格式化电路713的输出与原义之间进行选择。输出缓冲器721保存所选择的原义和令牌,以进行进一步处理。
如上文所暗示,在一些实施例中,具有两种输出令牌流格式。第一种格式是固定的40位令牌,其是为仅使用简单的整型指令且在上文中详述的任何处理器上的高效处理而设计的。第二种令牌流格式可被生成以利用一些SIMD处理器。在一些实施例中,对令牌的格式化由记录重格式化电路713执行。
在一些实施例中,解压缩器对最近的8个原义或引用令牌进行缓冲,并且检查是否存在任何相互依赖性。相互依赖性具有非常低的概率,因为平均而言,每个令牌生成约5个输出字节,该窗口内的依赖性暗示了引用具有的距离偏移<5*8=40。因此,假定没有依赖性,则可使用四字通道同时完成对8个令牌的处理。
第二种格式(对于最近8个令牌内的依赖性的罕见情况)具有快速和慢速路径。图8示出快速和慢速路径令牌格式的实施例。在快速路径格式中,提供多个非零长度801至803以及多个源指针805至807.典型地,这8个“长度”每一个尺寸都为8位,并且是按位的位置来表示的(按范围从1至8假定的长度)。这实质上是用于向量压缩的掩码。换言之,长度告知将复制数据的多少字节。8个四字(64位)指针用于四字聚集,并且提供用于原义或引用复制的源地址。
慢速路径在第一字节809中将0用作逃逸字节。长度811可以高达255。用于复制的源地址在指针813中被证明。
图9示出在支持第二令牌类型的处理器上的快速路径处理流程的实施例。具体地,处理器用于用于处理在如图8中所示的第二格式的最近的原义或引用令牌(诸如,8个令牌)。在一些实施例中,判定将使用快速处理路径还是慢速路径。这通过检查接收到的按第二格式的令牌的集合的第一个字节来看该字节是否为零来完成。当该字节为零,则使用慢速路径,否则,使用如本文中详述的快速路径。
在901处,以来自快速路径格式的长度来加载第一寄存器。在一些实施例中,这是被示出为图8中的长度的前8个令牌。典型地,该寄存器是64位通用寄存器,然而,可使用其他寄存器尺寸和类型。
在903处,以接收到的令牌的源指针来加载第二寄存器。参见图8,具有指针805-807。典型地,第二寄存器是512位的紧缩数据(或向量)寄存器。这些指针是提供用于输入流的原义或引用副本的地址的“聚集”指针。
在905处,以数据来加载第三寄存器,其中,该数据在第二寄存器的指针的位置处被发现。典型地,8个字节从每个位置被加载到512位紧缩数据(或向量)寄存器中。
在一些实施例中,在907处,以第一寄存器的64位来对特殊写掩码寄存器(例如,k掩码)置位。这对于掩码设置了将从第三寄存器抓取什么。
在909处,使用第一或写掩码寄存器中的一个进行对第三寄存器中的数据的压缩。这将第三寄存器的数据压缩为“好”的内容。在911处,该结果存储到输出指针。
在一些实施例中,输出指针被设置为第一寄存器中有效位(被置位为1的那些位)的数量加上911中的输出指针值。输出指针进展(由SIMD压缩操作)写入的有效字节的数量。在后续引用中使用的任何偏移将需要从经更新的输出指针向后工作。此外,在一些实施例中,在915处,令牌的令牌组排队以进行处理。
在伪代码中,根据实施例的处理器上的快速路径流为:
If(token[0]!=0){
load a 64-bit register RK=token[7:0]
load a ZMM1 register with next 64bytes,representing 8 gather pointers(以表示8个聚集指针的之后的64个字节加载ZMM 1寄存器)
Gather 8-bytes per token,for the 8 tokens(using the 8addresses)intoZMM2(对于(使用8个地址的)8个令牌,将针对每个令牌的8字节聚集到ZMM2中)
Set k-registers using KMOVQ that moves 64-bits from RK(使用KMOVQ设置k寄存器,KMOVQ从RK移动64位)
Vcompressb on gathered data in ZMM2 with k-mask above(利用上述k掩码对ZMM2中被聚集的数据执行Vcompressb)
Store result to output pointer(note,regular unaligned store,NOTscatter)(将结果存储到输出指针(注意,常规未对齐存储,非分散))
Output-pointer+=popcnt(RK);token+=72;
}
上述公开内容允许在许多不同应用中使用的无损压缩,并且由于压缩/解压缩是计算密集性非常高的,因此许多大型实体(例如,数据库、存储和联网应用)对加速压缩/解压缩日益感兴趣。为其提供更快解压缩的众多大规模市场用途包括网络服务器、经压缩文件系统中的输入/输出优化以及Hadoop中的Snappy压缩/解压缩。
在一些实施例中,完全相同的后处理软件例程可用于处理生成额外原义流以及不生成额外原义流的格式的似乎不相干的情况。当具有额外的原义流时,向软件例程的一个输入是由(如上文详述的)硬件生成的原义流的指针,而在后一种情况下,指向原始经压缩的流的指针被传递给软件。注意,额外的流由解码器0 703和解码器1 705(例如,DEFLATE和LZS)创建,并且在图11中示出。
下文详述可利用上文描述的实施例的示例性核架构、处理器和架构。
写掩码寄存器1315-在所示的实施例中,存在8个写掩码寄存器(k0至k7),每一个写掩码寄存器的尺寸是64位。在替代实施例中,写掩码寄存器1315的尺寸是16位。如先前所述的,在本发明的一个实施例中,向量掩码寄存器k0无法用作写掩码;当将要正常指示k0的编码用作写掩码时,它选择硬连线的写掩码0xFFFF,从而有效地停用该指令的写掩码操作。
通用寄存器1325——在所示出的实施例中,有十六个64位通用寄存器,这些寄存器与现有的x86寻址模式一起使用来寻址存储器操作数。这些寄存器通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8到R15来引用。
标量浮点栈寄存器组(x87栈)1345,在其上面重叠了MMX紧缩整数平坦寄存器组1350——在所示出的实施例中,x87栈是用于使用x87指令集扩展来对32/64/80位浮点数据执行标量浮点运算的八元素栈;而使用MMX寄存器来对64位紧缩整数数据执行操作,以及为在MMX和XMM寄存器之间执行的一些操作保存操作数。
本发明的替代实施例可以使用较宽的或较窄的寄存器。另外,本发明的替代实施例可以使用更多、更少或不同的寄存器组和寄存器。
处理器核可以用出于不同目的的不同方式在不同的处理器中实现。例如,这样的核的实现可以包括:1)旨在用于通用计算的通用有序核;2)预期用于通用计算的高性能通用乱序核;3)旨在主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可包括:1)包括旨在用于通用计算的一个或多个通用有序核和/或旨在用于通用计算的一个或多个通用乱序核的CPU;以及2)包括旨在主要用于图形和/或科学(吞吐量)的一个或多个专用核的协处理器。这样的不同处理器导致不同的计算机系统架构,其可包括:1)在与CPU分开的芯片上的协处理器;2)在与CPU相同的封装中但分开的管芯上的协处理器;3)与CPU在相同管芯上的协处理器(在该情况下,这样的协处理器有时被称为诸如集成图形和/或科学(吞吐量)逻辑等专用逻辑,或被称为专用核);以及4)可以将所描述的CPU(有时被称为应用核或应用处理器)、以上描述的协处理器和附加功能包括在同一管芯上的芯片上系统。接着描述示例性核架构,随后描述示例性处理器和计算机架构。
示例性核架构
有序和乱序核框图
图14A是示出根据本发明的实施例的示例性有序流水线和示例性的寄存器重命名的乱序发布/执行流水线的框图。图14B是示出根据本发明的各实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的乱序发布/执行架构核的框图。图14A-B中的实线框示出了有序流水线和有序核,而可选增加的虚线框示出了寄存器重命名的、乱序发布/执行流水线和核。给定有序方面是乱序方面的子集的情况下,将描述乱序方面。
在图14A中,处理器流水线1400包括取出级1402、长度解码级1404、解码级1406、分配级1408、重命名级1410、调度(也被称为分派或发布)级1412、寄存器读取/存储器读取级1414、执行级1416、写回/存储器写入级1418、异常处理级1422、提交级1424。
图14B示出处理器核1490,包括耦合至执行引擎单元1450的前端单元1430,该前端单元和执行引擎单元两者均耦合至存储器单元1470。核1490可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或混合或其他核类型。作为又一选项,核1490可以是专用核,诸如例如网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、或图形核等等。
前端单元1430包括耦合到指令高速缓存单元1434的分支预测单元1432,该指令高速缓存单元耦合到指令转换后备缓冲器(TLB)1436,该指令转换后备缓冲器耦合到指令取出单元1438,指令取出单元耦合到解码单元1440。解码单元1440(或解码器)可解码指令,并生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码单元1440可使用各种不同的机制来实现。合适的机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核1490包括(例如,在解码单元1440中或否则在前端单元1430内的)用于存储某些宏指令的微代码的微代码ROM或其他介质。解码单元1440耦合至执行引擎单元1450中的重命名/分配器单元1452。
执行引擎单元1450包括耦合到引退单元1454和一个或多个调度器单元1456的集合的重命名/分配器单元1452。(多个)调度器单元1456表示任意数量的不同调度器,包括预留站、中央指令窗口等。(多个)调度器单元1456耦合到(多个)物理寄存器组单元1458。每个物理寄存器组单元1458表示一个或多个物理寄存器组,其中不同的物理寄存器组存储一种或多种不同的数据类型,诸如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)等。在一个实施例中,物理寄存器组单元1458包括向量寄存器单元、写掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、和通用寄存器。(多个)物理寄存器组单元1458被引退单元1454所重叠,以示出可实现寄存器重命名和乱序执行的多种方式(诸如,使用(多个)重排序缓冲器和(多个)引退寄存器组、使用(多个)未来文件(future file)、(多个)历史缓冲器、(多个)引退寄存器组、使用寄存器映射和寄存器池等等)。引退单元1454和(多个)物理寄存器组单元1458耦合至(多个)执行群集1460。(多个)执行群集1460包括一个或多个执行单元1462的集合以及一个或多个存储器访问单元1464的集合。执行单元1462可执行多种操作(包括:移位、加法、减法、乘法)并可在多种数据类型(诸如、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)上执行。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但其他实施例可包括全部执行所有功能的仅一个执行单元或多个执行单元。(多个)调度器单元1456、(多个)物理寄存器组单元1458、(多个)执行群集1460被示出为可能是复数个,因为某些实施例为某些数据/操作类型创建了诸个单独流水线(例如,均具有各自调度器单元、(多个)物理寄存器组单元和/或执行群集的标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线、和/或存储器访问流水线,以及在单独的存储器访问流水线的情况下特定实施例被实现为仅仅该流水线的执行群集具有(多个)存储器访问单元1464)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以为乱序发布/执行,并且其余流水线可以为有序发布/执行。
存储器访问单元1464的集合耦合到存储器单元1470,该存储器单元包括耦合到数据高速缓存单元1474的数据TLB单元1472,其中数据高速缓存单元耦合到二级(L2)高速缓存单元1476。在一个示例性实施例中,存储器访问单元1464可包括加载单元、存储地址单元和存储数据单元,其中的每一个均耦合至存储器单元1470中的数据TLB单元1472。指令高速缓存单元1434还耦合到存储器单元1470中的第二级(L2)高速缓存单元1476。L2高速缓存单元1476耦合至一个或多个其他级别的高速缓存,并最终耦合至主存储器。
作为示例,示例性的寄存器重命名乱序发布/执行核架构可以如下所述地实现流水线1400:1)指令取出1438执行取出和长度解码级1402和1404;2)解码单元1440执行解码级1406;3)重命名/分配器单元1452执行分配级1408和重命名级1410;4)(多个)调度器单元1456执行调度级1412;5)(多个)物理寄存器组单元1458和存储器单元1470执行寄存器读取/存储器读取级1414;执行群集1460执行执行级1416;6)存储器单元1470和(多个)物理寄存器组单元1458执行写回/存储器写入级1418;7)各单元可牵涉到异常处理级1422;以及8)引退单元1454和(多个)物理寄存器组单元1458执行提交级1424。
核1490可支持一个或多个指令集(例如,x86指令集(具有与较新版本一起添加的一些扩展);加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集;加利福尼州桑尼维尔市的ARM控股的ARM指令集(具有诸如NEON等可选附加扩展)),其中包括本文中描述的各指令。在一个实施例中,核1490包括用于支持紧缩数据指令集扩展(例如,AVX1、AVX2)的逻辑,由此允许许多多媒体应用所使用的操作利用紧缩数据来执行。
应当理解,核可支持多线程化(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程化,此各种方式包括时分多线程化、同步多线程化(其中单个物理核为物理核正在同步多线程化的各线程中的每一个线程提供逻辑核)、或其组合(例如,时分取出和解码以及此后诸如用超线程化技术来同步多线程化)。
尽管在乱序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序架构中使用寄存器重命名。尽管所示出的处理器的实施例还包括分开的指令和数据高速缓存单元1434/1474以及共享L2高速缓存单元1476,但替代实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如一级(L1)内部高速缓存或多个级别的内部高速缓存。在一些实施例中,该系统可包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。或者,所有高速缓存都可以在核和/或处理器的外部。
具体的示例性有序核架构
图15A-B示出了更具体的示例性有序核架构的框图,该核将是芯片中的若干逻辑块之一(包括相同类型和/或不同类型的其他核)。根据应用,这些逻辑块通过高带宽的互连网络(例如,环形网络)与一些固定的功能逻辑、存储器I/O接口和其他必要的I/O逻辑通信。
图15A是根据本发明的实施例的单个处理器核以及它与管芯上互连网络1502的连接及其二级(L2)高速缓存的本地子集1504的框图。在一个实施例中,指令解码器1500支持具有紧缩数据指令集扩展的x86指令集。L1高速缓存1506允许对进入标量和向量单元中的高速缓存存储器的低等待时间访问。尽管在一个实施例中(为了简化设计),标量单元1508和向量单元1510使用分开的寄存器集合(分别为标量寄存器1512和向量寄存器1514),并且在这些寄存器之间转移的数据被写入到存储器并随后从一级(L1)高速缓存1506读回,但是本发明的替代实施例可以使用不同的方法(例如使用单个寄存器集合或包括允许数据在这两个寄存器组之间传输而无需被写入和读回的通信路径)。
L2高速缓存的本地子集1504是全局L2高速缓存的一部分,该全局L2高速缓存被划分成多个分开的本地子集,即每个处理器核一个本地子集。每个处理器核具有到其自己的L2高速缓存1504的本地子集的直接访问路径。被处理器核读出的数据被存储在其L2高速缓存子集1504中,并且可以与其他处理器核访问其自己的本地L2高速缓存子集并行地被快速访问。被处理器核写入的数据被存储在其自己的L2高速缓存子集1504中,并在必要的情况下从其他子集转储清除。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核、L2高速缓存和其他逻辑块之类的代理在芯片内彼此通信。每个环形数据路径为每个方向1012位宽。
图15B是根据本发明的各实施例的图15A中的处理器核的一部分的展开图。图15B包括L1高速缓存1504的L1数据高速缓存1506A部分,以及关于向量单元1510和向量寄存器1514的更多细节。具体地说,向量单元1510是16宽向量处理单元(VPU)(见16宽ALU 1528),该单元执行整型、单精度浮点以及双精度浮点指令中的一个或多个。该VPU通过混合单元1520支持对寄存器输入的混合、通过数值转换单元1522A-B支持数值转换、并通过复制单元1524支持对存储器输入的复制。写掩码寄存器1526允许断言所得的向量写入。
具有集成存储器控制器和图形器件的处理器
图16是根据本发明的各实施例可能具有超过一个核、可能具有集成存储器控制器、以及可能具有集成图形器件的处理器1600的框图。图16中的实线框示出具有单个核1602A、系统代理1610、一个或多个总线控制器单元的集合1616的处理器1600,而虚线框的可选附加示出具有多个核1602A-N、系统代理单元1610中的一个或多个集成存储器控制器单元的集合1614以及专用逻辑1608的替代处理器1600。
因此,处理器1600的不同实现可包括:1)CPU,其中专用逻辑1608是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核),并且核1602A-N是一个或多个通用核(例如,通用的有序核、通用的乱序核、这两者的组合);2)协处理器,其中核1602A-N是旨在主要用于图形和/或科学(吞吐量)的大量专用核;以及3)协处理器,其中核1602A-N是大量通用有序核。因此,处理器1600可以是通用处理器、协处理器或专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量的集成众核(MIC)协处理器(包括30个或更多核)、或嵌入式处理器等。该处理器可以被实现在一个或多个芯片上。处理器1600可以是一个或多个基板的一部分,和/或使用多种工艺技术(诸如,BiCMOS、CMOS、或NMOS)中的任意技术被实现在一个或多个基板上。
存储器层级包括核内的一个或多个高速缓存级、一个或多个共享高速缓存单元1606的集合、以及耦合至该集成存储器控制器单元集合1614的外部存储器(未示出)。共享高速缓存单元1606的集合可包括一个或多个中级高速缓存,诸如,第二级(L2)、第三级(L3)、第四级(L4)或其他级别的高速缓存、末级高速缓存(LLC)和/或以上的组合。尽管在一个实施例中,基于环的互连单元1612将集成图形逻辑1608、共享高速缓存单元的集合1606以及系统代理单元1610/集成存储器控制器单元1614互连,但替代实施例可使用任何数量的公知技术来将这些单元互连。在一个实施例中,可以维护一个或多个高速缓存单元1606和核1602A-N之间的一致性(coherency)。
在一些实施例中,核1602A-N中的一个或多个核能够多线程化。系统代理1610包括协调和操作核1602A-N的那些组件。系统代理单元1610可包括例如功率控制单元(PCU)和显示单元。PCU可以是对核1602A-N以及集成图形逻辑1608的功率状态进行调节所需的逻辑和组件,或可包括这些逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
核1602A-N在架构指令集方面可以是同构的或异构的;即,这些核1602A-N中的两个或更多个核可能能够执行相同的指令集,而其他核可能能够执行该指令集的仅仅子集或不同的指令集。
示例性计算机架构
图17-20是示例性计算机架构的框图。本领域已知的对膝上型设备、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电子设备的其他系统设计和配置也是合适的。一般地,能够包含本文中所公开的处理器和/或其他执行逻辑的多个系统和电子设备一般都是合适的。
现在参考图17,所示出的是根据本发明一个实施例的系统1700的框图。系统1700可以包括一个或多个处理器1710、1715,这些处理器耦合到控制器中枢1720。在一个实施例中,控制器中枢1720包括图形存储器控制器中枢(GMCH)1790和输入/输出中枢(IOH)1750(其可以在分开的芯片上);GMCH 1790包括存储器和图形控制器,存储器1740和协处理器1745耦合到该存储器和图形控制器;IOH 1750将输入/输出(I/O)设备1760耦合到GMCH1790。或者,存储器和图形控制器中的一个或两者可以被集成在处理器内(如本文中所描述的),存储器1740和协处理器1745直接耦合到处理器1710以及控制器中枢1720,控制器中枢1720与IOH 1750处于单个芯片中。
附加的处理器1715的可选性在图17中通过虚线来表示。每一处理器1710、1715可包括本文中描述的处理核中的一个或多个,并且可以是处理器1600的某一版本。
存储器1740可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或这两者的组合。对于至少一个实施例,控制器中枢1720经由诸如前端总线(FSB)之类的多分支总线、诸如快速通道互连(QPI)之类的点对点接口、或者类似的连接1795与处理器1710、1715进行通信。
在一个实施例中,协处理器1745是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、或嵌入式处理器等等。在一个实施例中,控制器中枢1720可以包括集成图形加速器。
在物理资源1710、1715之间可以存在包括架构、微架构、热、和功耗特征等的一系列品质度量方面的各种差异。
在一个实施例中,处理器1710执行控制一般类型的数据处理操作的指令。协处理器指令可嵌入在这些指令中。处理器1710将这些协处理器指令识别为应当由附连的协处理器1745执行的类型。因此,处理器1710在协处理器总线或者其他互连上将这些协处理器指令(或者表示协处理器指令的控制信号)发布到协处理器1745。(多个)协处理器1745接受并执行所接收的协处理器指令。
现在参考图18,所示为根据本发明的一实施例的更具体的第一示例性系统1800的框图。如图18所示,多处理器系统1800是点对点互连系统,且包括经由点对点互连1850耦合的第一处理器1870和第二处理器1880。处理器1870和1880中的每一个都可以是处理器1600的某一版本。在本发明的一个实施例中,处理器1870和1880分别是处理器1710和1715,而协处理器1838是协处理器1745。在另一实施例中,处理器1870和1880分别是处理器1710和协处理器1745。
处理器1870和1880被示为分别包括集成存储器控制器(IMC)单元1872和1882。处理器1870还包括作为其总线控制器单元的一部分的点对点(P-P)接口1876和1878;类似地,第二处理器1880包括P-P接口1886和1888。处理器1870、1880可以经由使用点对点(P-P)接口电路1878、1888的P-P接口1850来交换信息。如图18所示,IMC 1872和1882将处理器耦合到相应的存储器,即存储器1832和存储器1834,这些存储器可以是本地附连到相应处理器的主存储器的部分。
处理器1870、1880可各自经由使用点对点接口电路1876、1894、1886、1898的各个P-P接口1852、1854来与芯片组1890交换信息。芯片组1890可以可选地经由高性能接口1839与协处理器1838交换信息。在一个实施例中,协处理器1838是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、或嵌入式处理器等等。
共享高速缓存(未示出)可以被包括在任一处理器之内,或被包括在两个处理器外部但仍经由P-P互连与这些处理器连接,从而如果将某处理器置于低功率模式时,可将任一处理器或两个处理器的本地高速缓存信息存储在该共享高速缓存中。
芯片组1890可以经由接口1896耦合至第一总线1816。在一个实施例中,第一总线1816可以是外围组件互连(PCI)总线或诸如PCI高速总线或另一第三代I/O互连总线之类的总线,但是本发明的范围不限于此。
如图18所示,各种I/O设备1814可连同总线桥1818一起耦合到第一总线1816,总线桥1818将第一总线1816耦合到第二总线1820。在一个实施例中,诸如协处理器、高吞吐量MIC处理器、GPGPU的处理器、加速器(诸如例如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器的一个或多个附加处理器1815耦合到第一总线1816。在一个实施例中,第二总线1820可以是低引脚数(LPC)总线。各种设备可耦合到第二总线1820,包括例如键盘和/或鼠标1822、通信设备1827以及存储单元1828,诸如在一个实施例中可包括指令/代码和数据1830的盘驱动器或者其他大容量存储设备。此外,音频I/O 1824可以被耦合至第二总线1820。注意,其他架构是可能的。例如,代替图18的点对点架构,系统可以实现多分支总线或其他此类架构。
现在参考图19,所示为根据本发明的实施例的更具体的第二示例性系统1900的框图。图18和图19中的相同部件用相同附图标记表示,并从图19中省去了图18中的某些方面,以避免使图19的其他方面变得模糊。
图19示出处理器1870、1880可分别包括集成存储器和I/O控制逻辑(“CL”)1872和1882。因此,CL 1872、1882包括集成存储器控制器单元并包括I/O控制逻辑。图19示出不仅存储器1832、1834耦合至CL 1872、1882,而且I/O设备1914也耦合至控制逻辑1872、1882。传统I/O设备1915被耦合至芯片组1890。
现在参照图20,所示出的是根据本发明一个实施例的SoC 2000的框图。在图16中,相似的部件具有同样的附图标记。另外,虚线框是更先进的SoC的可选特征。在图20中,(多个)互连单元2002被耦合至:应用处理器2010,该应用处理器包括一个或多个核202A-N的集合以及(多个)共享高速缓存单元1606;系统代理单元1610;(多个)总线控制器单元1616;(多个)集成存储器控制器单元1614;一组或一个或多个协处理器2020,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元2030;直接存储器存取(DMA)单元2032;以及用于耦合至一个或多个外部显示器的显示单元2040。在一个实施例中,(多个)协处理器2020包括专用处理器,诸如例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、或嵌入式处理器等等。
本文公开的机制的各实施例可以被实现在硬件、软件、固件或这些实现方法的组合中。本发明的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
可将程序代码(诸如图18中示出的代码1830)应用于输入指令,以执行本文描述的各功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器之类的处理器的任何系统。
程序代码可以用高级程序化语言或面向对象的编程语言来实现,以便与处理系统通信。在需要时,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定编程语言的范围。在任一情形下,该语言可以是编译语言或解释语言。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,指令表示处理器中的各种逻辑,指令在被机器读取时使得该机器制作用于执行本文所述的技术的逻辑。被称为“IP核”的这些表示可以被存储在有形的机器可读介质上,并被提供给多个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。
这样的机器可读存储介质可以包括但不限于通过机器或设备制造或形成的物品的非瞬态的有形安排,其包括存储介质,诸如:硬盘;任何其他类型的盘,包括软盘、光盘、紧致盘只读存储器(CD-ROM)、紧致盘可重写(CD-RW)以及磁光盘;半导体器件,例如只读存储器(ROM)、诸如动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)之类的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM);相变存储器(PCM);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。
因此,本发明的各实施例还包括非瞬态的有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(HDL),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。这些实施例也被称为程序产品。
仿真(包括二进制变换、代码变形等)
在一些情况下,指令转换器可用来将指令从源指令集转换至目标指令集。例如,指令转换器可以变换(例如使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其他方式将指令转换成将由核来处理的一个或多个其他指令。指令转换器可以用软件、硬件、固件、或其组合实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。图21是根据本发明的各实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所示的实施例中,指令转换器是软件指令转换器,但作为替代,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图21示出可使用x86编译器2104来编译利用高级语言2102的程序,以生成可由具有至少一个x86指令集核的处理器2116原生执行的x86二进制代码2106。具有至少一个x86指令集核的处理器2116表示任何处理器,这些处理器能通过兼容地执行或以其他方式处理以下内容来执行与具有至少一个x86指令集核的英特尔处理器基本相同的功能:1)英特尔x86指令集核的指令集的本质部分,或2)目标为在具有至少一个x86指令集核的英特尔处理器上运行的应用或其他程序的目标代码版本,以便取得与具有至少一个x86指令集核的英特尔处理器基本相同的结果。x86编译器2104表示用于生成x86二进制代码2106(例如,目标代码)的编译器,该二进制代码可通过或不通过附加的链接处理在具有至少一个x86指令集核的处理器2116上执行。类似地,图21示出可以使用替代的指令集编译器2108来编译利用高级语言2102的程序,以生成可以由不具有至少一个x86指令集核的处理器2114(例如具有执行加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集、和/或执行加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集的核的处理器)原生执行的替代指令集二进制代码2110。指令转换器2112被用来将x86二进制代码2106转换成可以由不具有x86指令集核的处理器2114原生执行的代码。该转换后的代码不大可能与替代性指令集二进制代码2110相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般操作并由来自替代指令集的指令构成。因此,指令转换器2112通过仿真、模拟或任何其他过程来表示允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码2106的软件、固件、硬件或其组合。
Claims (25)
1.一种硬件解压缩器装置,包括:
输入缓冲器,用于存储来自经压缩的流的传入输入记录;
多个解码器,每个解码器都用于对来自所述输入缓冲器的至少一个输入记录进行解码,并且从经解码的数据和所述多个解码器的子集输出中间记录以输出原义流;
重格式化电路,用于将中间记录格式化为至少两种类型令牌中的一种。
2.如权利要求1所述的硬件装置,其中,所述多个解码器中的第一解码器用于根据DEFLATE压缩算法进行解码,并且输出经哈夫曼编码的原义的字节对齐的原义流。
3.如权利要求2所述的硬件装置,其中,所述中间记录包括以下至少一者:原义集、关于所述中间记录的原义数量的信息以及关于引用的信息。
4.如权利要求1-3中的任一项所述的硬件装置,其中,所述多个解码器中的第二解码器用于针对每个输入记录生成中间记录。
5.如权利要求1-4中的任一项所述的硬件装置,其中,所述多个解码器中的第三解码器用于从多个输入记录生成单个中间记录。
6.如权利要求1-5中的任一项所述的硬件装置,其中,所述多个解码器中的第四解码器用于从单个记录生成多个中间记录。
7.如权利要求1-6中的任一项所述的硬件装置,其中,取决于提供给所述解码器的内容,给定的解码器用于生成以下之一:针对每个输入记录的单个中间记录、针对每个输入记录的多个中间记录以及针对多个输入记录的单个中间记录。
8.如权利要求1-7中的任一项所述的硬件装置,其中,所述装置在处理器核外部。
9.如权利要求1-8中的任一项所述的装置,进一步包括:
中间记录暂存缓冲器,用于对连续的中间记录进行缓冲,其中,所述重格式化电路用于通过利用跨越经缓冲的连续中间记录的偏移来检查对引用记录的任何依赖性以格式化所述令牌,并且生成第一类型的令牌供快速路径使用或生成第二类型的令牌用于慢速路径。
缓冲八个连续的中间记录
10.一种方法,包括:
接收用于原义或引用的多个令牌;
以来自所述令牌的掩码加载第一寄存器;
以来自所述令牌的地址指针加载第二寄存器;
将指向作为所述第二寄存器的所述地址指针的位置处的针对每个令牌的第一数量的字节聚集并存储到第三寄存器中;
使用所述掩码来压缩被聚集和存储的字节;
将所述压缩的结果存储到输出指针;以及
使所述输出指针递增由所述压缩生成的字节的数量。
11.如权利要求10所述的方法,其中,所述掩码包括用于原义或引用的多个令牌的长度。
12.如权利要求10-11中的任一项所述的方法,其中,所述地址指针包括来自所述令牌中的每个令牌的64位值。
13.如权利要求10-12中的任一项所述的方法,进一步包括:
判定所述令牌的第一字节不为零。
14.如权利要求10-13中的任一项所述的方法,其中,所述第一寄存器是64位通用寄存器。
15.如权利要求10-13中的任一项所述的方法,其中,所述第一寄存器是64位写掩码寄存器。
16.如权利要求10-15中的任一项所述的方法,其中,所述第二寄存器和所述第三寄存器是512位紧缩数据寄存器。
17.一种方法,包括:
从解压缩器硬件接收两种类型的输出中的一种,其中,在第一种类型的输出中,所述解压缩器硬件除了生成令牌外还生成额外的原义流,并且在第二种类型中,所述解压缩器硬件仅生成令牌;以及
通过提供指向所述额外的原义流的输入指针来对所述第一类型的输出进行后处理,并且通过传递指向原始的经压缩的流的指针来对所述第二类型的输出进行后处理。
18.如权利要求17所述的方法,其中,对于任何所选类型的输出,所述解压缩器硬件在DEFLATE和LZS解码中的一种解码期间生成所述额外的原义流。
19.如权利要求17所述的方法,其中,对于任何所选类型的输出,所述解压缩器硬件在LZ4和Snappy解码期间不生成额外的原义流。
20.如权利要求17-19中的任一项所述的方法,其中,所述软件通过以下方式来维护历史缓冲器:保持所述解压缩器硬件的输出中的足够输出来服务从中聚集的引用。
21.一种硬件解压缩器装置,包括:
输入缓冲器装置,用于存储来自经压缩的流的传入输入记录;
多个解码器装置,每个解码器装置都用于对来自所述输入缓冲器的至少一个输入记录进行解码,并且从经解码的数据和所述多个解码器的子集输出中间记录以输出原义流;
重格式化装置,用于将中间记录格式化为至少两种类型令牌中的一种。
22.如权利要求21所述的硬件装置,其中,所述多个解码器装置中的第一解码器装置用于根据DEFLATE压缩算法进行解码,并且输出经哈夫曼编码的原义的字节对齐的原义流。
23.如权利要求22所述的硬件装置,其中,所述中间记录包括以下至少一者:原义集、关于所述中间记录的原义数量的信息以及关于引用的信息。
24.如权利要求21-23中的任一项所述的硬件装置,其特征在于,所述多个解码器装置中的第二解码器装置用于针对每个输入记录生成中间记录。
25.如权利要求21-24中的任一项所述的硬件装置,其特征在于,所述多个解码器装置中的第三解码器装置用于从多个输入记录生成单个中间记录。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111452703.4A CN114142867A (zh) | 2015-09-25 | 2016-09-23 | 用于使用硬件和软件进行解压缩的系统、方法和装置 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/866,749 US10135461B2 (en) | 2015-09-25 | 2015-09-25 | Systems, methods, and apparatuses for decompression using hardware and software |
US14/866,749 | 2015-09-25 | ||
PCT/US2016/053504 WO2017053840A1 (en) | 2015-09-25 | 2016-09-23 | Systems, methods, and apparatuses for decompression using hardware and software |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111452703.4A Division CN114142867A (zh) | 2015-09-25 | 2016-09-23 | 用于使用硬件和软件进行解压缩的系统、方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107925419A true CN107925419A (zh) | 2018-04-17 |
CN107925419B CN107925419B (zh) | 2022-01-04 |
Family
ID=58387442
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111452703.4A Pending CN114142867A (zh) | 2015-09-25 | 2016-09-23 | 用于使用硬件和软件进行解压缩的系统、方法和装置 |
CN201680048980.XA Active CN107925419B (zh) | 2015-09-25 | 2016-09-23 | 用于使用硬件和软件进行解压缩的系统、方法和装置 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111452703.4A Pending CN114142867A (zh) | 2015-09-25 | 2016-09-23 | 用于使用硬件和软件进行解压缩的系统、方法和装置 |
Country Status (5)
Country | Link |
---|---|
US (2) | US10135461B2 (zh) |
CN (2) | CN114142867A (zh) |
DE (1) | DE112016004359T5 (zh) |
TW (1) | TWI729996B (zh) |
WO (1) | WO2017053840A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112771498A (zh) * | 2018-07-05 | 2021-05-07 | 米西克有限公司 | 用于实施智能处理计算架构的系统和方法 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013179103A1 (en) | 2012-05-31 | 2013-12-05 | Baylis Medical Inc. | Radiofrequency perforation apparatus |
WO2014141077A1 (en) | 2013-03-15 | 2014-09-18 | Baylis Medical Company Inc. | Electrosurgical device having a distal aperture |
CA3190740A1 (en) | 2014-03-24 | 2015-10-01 | Boston Scientific Medical Device Limited | Medical apparatus for fluid communication |
US10541708B1 (en) * | 2018-09-24 | 2020-01-21 | Redpine Signals, Inc. | Decompression engine for executable microcontroller code |
US10707897B1 (en) * | 2019-09-04 | 2020-07-07 | Advanced Micro Devices, Inc. | Command processor with multiple string copy engines for a decompression system |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020101367A1 (en) * | 1999-01-29 | 2002-08-01 | Interactive Silicon, Inc. | System and method for generating optimally compressed data from a plurality of data compression/decompression engines implementing different data compression algorithms |
US6822589B1 (en) * | 1999-01-29 | 2004-11-23 | Quickshift, Inc. | System and method for performing scalable embedded parallel data decompression |
US20050104753A1 (en) * | 2003-11-18 | 2005-05-19 | M-Systems Flash Disk Pioneers, Ltd. | Decompression accelerator for flash memory |
US20100013678A1 (en) * | 2008-07-17 | 2010-01-21 | Giora Biran | Method and apparatus for data decompression in the presence of memory hierarchies |
CN102597948A (zh) * | 2009-10-23 | 2012-07-18 | 信飞系统公司 | 信号数据的块浮点压缩 |
CN102694554A (zh) * | 2011-01-19 | 2012-09-26 | 三星电子株式会社 | 数据压缩设备、其操作方法以及包括该设备的数据处理装置 |
CN103975533A (zh) * | 2011-12-07 | 2014-08-06 | 国际商业机器公司 | 可变长度编码的数据流的高带宽解压 |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5784631A (en) * | 1992-06-30 | 1998-07-21 | Discovision Associates | Huffman decoder |
US5325092A (en) * | 1992-07-07 | 1994-06-28 | Ricoh Company, Ltd. | Huffman decoder architecture for high speed operation and reduced memory |
US5363097A (en) * | 1992-09-14 | 1994-11-08 | Industrial Technology Research Institute | Direct sequential-bit variable length decoder |
US5583500A (en) * | 1993-02-10 | 1996-12-10 | Ricoh Corporation | Method and apparatus for parallel encoding and decoding of data |
JP2746109B2 (ja) * | 1994-03-09 | 1998-04-28 | 日本電気株式会社 | ハフマン符号復号化回路 |
US6021198A (en) * | 1996-12-23 | 2000-02-01 | Schlumberger Technology Corporation | Apparatus, system and method for secure, recoverable, adaptably compressed file transfer |
US5874908A (en) * | 1997-09-19 | 1999-02-23 | International Business Machines Corporation | Method and apparatus for encoding Lempel-Ziv 1 variants |
WO1999044368A1 (en) * | 1998-02-27 | 1999-09-02 | Kanebo Limited | Image data processing device and processing method |
US6195024B1 (en) * | 1998-12-11 | 2001-02-27 | Realtime Data, Llc | Content independent data compression method and system |
US6313767B1 (en) * | 1999-02-19 | 2001-11-06 | Canon Kabushiki Kaisha | Decoding apparatus and method |
US6865159B2 (en) * | 2001-10-02 | 2005-03-08 | Hewlett-Packard Development Company, L.P. | System and method for comfort noise production |
US6934903B1 (en) * | 2001-12-17 | 2005-08-23 | Advanced Micro Devices, Inc. | Using microcode to correct ECC errors in a processor |
US6907598B2 (en) * | 2002-06-05 | 2005-06-14 | Microsoft Corporation | Method and system for compressing program code and interpreting compressed program code |
US7283591B2 (en) * | 2003-03-28 | 2007-10-16 | Tarari, Inc. | Parallelized dynamic Huffman decoder |
US7164370B1 (en) * | 2005-10-06 | 2007-01-16 | Analog Devices, Inc. | System and method for decoding data compressed in accordance with dictionary-based compression schemes |
JP2009026106A (ja) * | 2007-07-20 | 2009-02-05 | Oki Electric Ind Co Ltd | 命令コード圧縮方法と命令フェッチ回路 |
JP4893657B2 (ja) * | 2008-02-29 | 2012-03-07 | ソニー株式会社 | 算術復号装置 |
US8125357B1 (en) | 2010-03-23 | 2012-02-28 | Sandia Corporation | Deflate decompressor |
TW201322649A (zh) * | 2011-11-17 | 2013-06-01 | Proscend Comm Inc | 一種資料壓縮方法 |
US8674856B2 (en) * | 2012-08-16 | 2014-03-18 | International Business Machines Corporation | Data compression utilizing longest common subsequence template |
US8618960B1 (en) * | 2012-08-16 | 2013-12-31 | International Business Machines Corporation | Selective recompression of a string compressed by a plurality of diverse lossless compression techniques |
US8791843B2 (en) * | 2012-10-15 | 2014-07-29 | Lsi Corporation | Optimized bitstream encoding for compression |
TWI490855B (zh) * | 2013-04-02 | 2015-07-01 | Mstar Semiconductor Inc | 解壓縮電路與相關的解壓縮方法 |
US9672041B2 (en) * | 2013-08-01 | 2017-06-06 | Andes Technology Corporation | Method for compressing variable-length instructions including PC-relative instructions and processor for executing compressed instructions using an instruction table |
US9252807B2 (en) | 2013-10-21 | 2016-02-02 | Globalfoundries Inc. | Efficient one-pass cache-aware compression |
US9348535B1 (en) * | 2014-03-07 | 2016-05-24 | Google Inc. | Compression format designed for a very fast decompressor |
CN104202054A (zh) * | 2014-09-16 | 2014-12-10 | 东南大学 | 一种硬件lzma压缩实现系统及方法 |
CN106656200B (zh) * | 2016-12-13 | 2019-11-08 | 合肥工业大学 | 一种程序计数器压缩方法及其硬件电路 |
-
2015
- 2015-09-25 US US14/866,749 patent/US10135461B2/en active Active
-
2016
- 2016-08-10 TW TW105125465A patent/TWI729996B/zh not_active IP Right Cessation
- 2016-09-23 CN CN202111452703.4A patent/CN114142867A/zh active Pending
- 2016-09-23 CN CN201680048980.XA patent/CN107925419B/zh active Active
- 2016-09-23 WO PCT/US2016/053504 patent/WO2017053840A1/en active Application Filing
- 2016-09-23 DE DE112016004359.7T patent/DE112016004359T5/de not_active Withdrawn
-
2018
- 2018-11-20 US US16/197,086 patent/US10666288B2/en active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020101367A1 (en) * | 1999-01-29 | 2002-08-01 | Interactive Silicon, Inc. | System and method for generating optimally compressed data from a plurality of data compression/decompression engines implementing different data compression algorithms |
US6822589B1 (en) * | 1999-01-29 | 2004-11-23 | Quickshift, Inc. | System and method for performing scalable embedded parallel data decompression |
US20050104753A1 (en) * | 2003-11-18 | 2005-05-19 | M-Systems Flash Disk Pioneers, Ltd. | Decompression accelerator for flash memory |
US20100013678A1 (en) * | 2008-07-17 | 2010-01-21 | Giora Biran | Method and apparatus for data decompression in the presence of memory hierarchies |
CN102597948A (zh) * | 2009-10-23 | 2012-07-18 | 信飞系统公司 | 信号数据的块浮点压缩 |
CN102694554A (zh) * | 2011-01-19 | 2012-09-26 | 三星电子株式会社 | 数据压缩设备、其操作方法以及包括该设备的数据处理装置 |
CN103975533A (zh) * | 2011-12-07 | 2014-08-06 | 国际商业机器公司 | 可变长度编码的数据流的高带宽解压 |
Non-Patent Citations (2)
Title |
---|
DIRK KOCH等: ""Hardware Decompression Techniques for FPGA-Based Embedded Systems"", 《ACM TRANSACTIONS ON RECONFIGURABLE TECHNOLOGY AND SYSTEMS》 * |
杨鹏: ""可重构片上系统配置数据压缩算法研究"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112771498A (zh) * | 2018-07-05 | 2021-05-07 | 米西克有限公司 | 用于实施智能处理计算架构的系统和方法 |
Also Published As
Publication number | Publication date |
---|---|
DE112016004359T5 (de) | 2018-06-07 |
US10666288B2 (en) | 2020-05-26 |
TW201722088A (zh) | 2017-06-16 |
WO2017053840A1 (en) | 2017-03-30 |
TWI729996B (zh) | 2021-06-11 |
CN107925419B (zh) | 2022-01-04 |
US10135461B2 (en) | 2018-11-20 |
CN114142867A (zh) | 2022-03-04 |
US20170093424A1 (en) | 2017-03-30 |
US20190173489A1 (en) | 2019-06-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9934031B2 (en) | Read and write masks update instruction for vectorization of recursive computations over independent data | |
CN104011647B (zh) | 浮点舍入处理器、方法、系统和指令 | |
CN104603746B (zh) | 由读和写掩码控制的向量移动指令 | |
CN108292222A (zh) | 用于数据解压缩的硬件装置和方法 | |
TW202125287A (zh) | 用於矩陣運算加速器之指令的裝置,方法和系統 | |
CN107925419A (zh) | 用于使用硬件和软件进行解压缩的系统、方法和装置 | |
CN104903867B (zh) | 用于将寄存器的内容广播到另一个寄存器的数据元素位置的系统、装置和方法 | |
US11095305B1 (en) | Method and apparatus for high performance compression and decompression | |
CN104126167B (zh) | 用于从通用寄存器向向量寄存器进行广播的装置和方法 | |
CN108292224A (zh) | 用于聚合收集和跨步的系统、设备和方法 | |
CN107003846A (zh) | 用于向量索引加载和存储的方法和装置 | |
CN105612509A (zh) | 用于提供向量子字节解压缩功能性的方法、设备、指令和逻辑 | |
CN110474645A (zh) | 用于压缩浮点数据的系统 | |
US20180181398A1 (en) | Apparatus and methods of decomposing loops to improve performance and power efficiency | |
CN107003852A (zh) | 用于执行向量位混洗的方法和装置 | |
CN109313553A (zh) | 用于跨步加载的系统、装置和方法 | |
CN107003845A (zh) | 用于在掩码寄存器和向量寄存器之间可变地扩展的方法和装置 | |
CN108780394A (zh) | 用于转换编码格式的硬件装置和方法 | |
CN117546152A (zh) | 用于加速流送数据变换操作的电路和方法 | |
CN107003840A (zh) | 用于执行检查以优化指令流的装置和方法 | |
CN107003847A (zh) | 用于将掩码扩展为掩码值向量的方法和装置 | |
CN109328334A (zh) | 用于累积式求和的系统、装置和方法 | |
US10069512B2 (en) | Systems, methods, and apparatuses for decompression using hardware and software | |
CN108292223A (zh) | 用于得到偶数数据元素和奇数数据元素的系统、设备和方法 | |
CN109328333A (zh) | 用于累积式乘积的系统、装置和方法 |
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 |