支持压缩数据的随机访问

文档序号:1660205 发布日期:2019-12-27 浏览:16次 >En<

阅读说明:本技术 支持压缩数据的随机访问 (Supporting random access of compressed data ) 是由 V.戈帕尔 J.吉尔福德 D.库特 K.亚普 于 2019-05-20 设计创作,主要内容包括:一种处理设备,包括压缩电路和耦合于该压缩电路的解压电路,该压缩电路用于:确定压缩源数据的压缩配置;生成处于未经压缩状态的源数据的校验和;基于压缩配置将源数据压缩成至少一个块,其中该至少一个块包括:多个子块,其中该多个子块包括预定大小;块报头,该块报头对应于多个子块;其中该解压电路用于:在未输出源数据的解压数据流时:生成对应于多个子块的索引信息;响应于生成索引信息,生成与多个子块相关联的压缩源数据的校验和;以及确定采用未经压缩格式的源数据的校验和与压缩源数据的校验和是否匹配。(A processing device comprising compression circuitry and decompression circuitry coupled to the compression circuitry, the compression circuitry to: determining a compression configuration of compression source data; generating a checksum of the source data in an uncompressed state; compressing the source data into at least one block based on the compression configuration, wherein the at least one block comprises: a plurality of sub-blocks, wherein the plurality of sub-blocks comprise a predetermined size; a block header corresponding to the plurality of sub-blocks; wherein the decompression circuit is configured to: when the decompressed data stream of the source data is not output: generating index information corresponding to the plurality of sub-blocks; generating a checksum of the compressed source data associated with the plurality of sub-blocks in response to generating the index information; and determining whether the checksum of the source data in the uncompressed format matches the checksum of the compressed source data.)

支持压缩数据的随机访问

技术领域

本公开的实施例大体上涉及硬件处理器,并且更具体地涉及但不限于,支持压缩数据的随机访问。

背景技术

对于“大数据”应用,例如在数据中心或云计算环境内,需要可靠且采用有成本效益的方式存储大量数据。一般采用压缩过程来减少数据大小而无需牺牲数据内所包含的信息。需要数据消费者在使用数据之前对经压缩的文件解压。对于大数据存储的常规压缩格式典型地产生例如相对差的压缩比,这是因为它们只是相当简单化地试图提供高效软件实现,同时还允许有一定程度的随机访问。例如Deflate等压缩方案提供更好的压缩比,但当前实现不允许有对压缩数据的随机访问。例如,在大数据环境中通常使用面向列的数据库来提供期望的输出。然而,经压缩的面向列的数据需要对从起始点到感兴趣点的数据列解压来访问该感兴趣点。从而,使用常规技术方案在经压缩的大数据存储上的随机访问的成本和资源一般都令人却步。此外,在一些实例中,压缩数据在压缩过程期间可能被损坏。因此,确认压缩数据在提交前未被损坏,这是可期望的。

具体实施方式

本文描述的实施例针对的是数据压缩技术,该数据压缩技术能够为例如Deflate等压缩方案提供高压缩比同时还提供对压缩数据的随机访问。另外,本文描述的实施例准许在压缩期间验证压缩数据来确保它与未经压缩的源数据匹配。例如,本文描述的验证通过校验和提供,该校验和可以采用各种方式工作。在压缩期间,最终的校验和对压缩数据可以被成功解压(即,压缩未被损坏)给出合理保证。在解压期间,校验和对位流在压缩后未被损坏并且到压缩流中的索引是正确的(即,数据在存储中未被损坏,并且解压过程被正确执行)给出合理保证。

各种实施例一般可以针对的是计算机系统所提供的数据压缩的技术。计算机系统可以包括压缩电路,其操作以执行压缩过程来压缩源数据以生成压缩数据。在一些实施例中,源数据可以包括来自一个或多个“大数据”源的数据。大数据源的非限制性示例可以包括例如来自面向列的数据库管理系统(DBMS)的面向列的数据库。在一些实施例中,压缩过程可以生成由包括一个或多个子块(或“小型块”)的离散块所形成的压缩数据。在各种实施例中,每个子块可以只包括参考该子块内的数据的信息(例如,“历史”信息)。因此,每个子块可以不包括来自压缩数据的其他离散子块的历史信息。在各种实施例中,可以对每个离散子块解压而不需要对其他数据元素解压,例如对其他离散子块解压。在各种实施例中,压缩过程可以生成块索引,其包括用于独立访问离散子块的数据。块索引还可以包括与和子块有关的数据相关联的校验和。

另外,在一些实施例中,提供解压-验证过程来防止数据丢失。解压-验证过程对压缩数据解压并且针对原始数据(经由校验和)进行核对(在可以提交压缩数据之前)。这确保在压缩过程中没有软错误(或不明显缺陷)损坏数据使得它后来无法从存储得到解压。

一般而言,随机操作可以包括对感兴趣的规定数据(“操作目标”)或对包括感兴趣的规定数据的压缩数据的一部分的任何类型的操作。例如,用户期望在特定字节(例如,字节x)访问未经压缩的数据。在一些实施例中,随机操作可以包括对压缩数据的随机访问。例如,压缩数据可以包括压缩位流,其具有离散子块b0-b100,并且操作目标可以位于b50内。在常规系统中,除其他过程外,还将需要对感兴趣数据定位和解压的解压过程,来对从起始数据块(例如,第一Deflate块)到包含操作目标的数据块(例如,第二Deflate块)的数据解压,或对整个Deflate块解压以便只访问Deflate块的一部分。然而,根据一些实施例的解压过程可以操作以只对离散子块b50(其可以是组成Deflate块的多个离散子块中的一个)定位和解压以便访问操作目标。采用该方式,根据一些实施例的压缩过程能够提供具有高压缩比的压缩数据。

各种实施例一般可以针对计算机系统所提供的数据压缩和解压-验证过程的技术。在一个实施例中,计算机系统的处理设备包括压缩电路和耦合于该压缩电路的解压电路,该压缩电路用于:确定压缩源数据的压缩配置;生成处于未经压缩状态的源数据的校验和;基于压缩配置将源数据压缩成至少一个块,其中该至少一个块包括:多个子块,其中该多个子块包括预定大小;块报头,其对应于多个子块;其中解压电路用于:在未输出源数据的解压数据流时:生成对应于多个子块的索引信息;响应于生成索引信息,生成与多个子块相关联的压缩源数据的校验和;以及确定采用未经压缩格式的源数据的校验和与压缩源数据的校验和是否匹配。

图1描绘了可以表示各种实施例的操作系统。该操作系统可以包括处理设备100。处理设备100除了别的之外还可以包括互相耦合的存储器101、核102、压缩电路110和解压电路120。处理设备100可以包括一个或多个核。

如图1中所示出的,处理设备100可以包括压缩电路110。在各种实施例中,压缩电路110可以包括以下或设置在其内:处理器电路、SoC、现场可编程门阵列(FPGA)和/或类似物。在一些实施例中,压缩电路110可以包括处理器电路。

在一些实施例中,压缩电路110可以在软件、固件、硬件或其组合中实现。在各种实施例中,压缩电路110可以在配置成执行软件、固件和/或类似物以执行根据一些实施例的操作的硬件中实现。在一些实施例中,压缩电路110可以是或可以包括压缩软件应用,其操作以根据一些实施例压缩数据来生成压缩数据。在一些实施例中,压缩电路110可以是或可以包括处理器电路所执行的压缩软件应用。压缩电路110可以包括数据输入/输出接口(未示出),其配置成访问源数据130。压缩电路110然后压缩源数据来生成压缩数据138(例如,块和子块)。在图3中描绘压缩数据的示例,在下文将进一步详细描述该图3。

在各种实施例中,压缩数据138可以包括由离散块(例如,Deflate块或基于Deflate的块)形成的压缩数据。压缩数据的块可以由各种块元素形成,其包括但不限于报头和子块。

在一些实施例中,源数据130可以包括未经压缩的数据。在各种实施例中,源数据130可以包括使用常规压缩技术生成的压缩数据(例如,根据一些实施例不包括离散子块或小型块的压缩数据)。因此,在一些实施例中,压缩电路110(例如,结合解压电路)可以操作以将常规压缩数据变换为压缩数据138(其包括块和子块)。

压缩电路110可以从各种源接收源数据130,这些源包括软件应用或线程、硬件元件、数据缓冲器和/或类似物。例如,可以从数据库150获得源数据130。在各种实施例中,数据库150可以包括来自例如数据中心、云计算环境、分布式计算环境、社交网络平台、商业分析平台和/或类似物等大数据平台的数据。一般而言,大数据平台可以由与平台相关联的数据的各种特性(例如容量、速度、种类和/或数据的值)所定义。在一些实施例中,数据库150可以包括例如DBMS的面向列(或列式)的数据库。一般而言,面向列的数据库通过列而不是行来存储数据。在面向列的数据库中,可以用连续存储的相同列的属性值来单独存储每个列。尽管在一些示例中使用面向列的数据库,实施例没有这样的限制,因为根据一些实施例,其他类型的数据库可以用作数据库150或用作源数据130。其他数据库的非限制性类型可以包括关系数据库、相关数据库、对象数据库、层级数据库和/或类似物。

另外,数据库150和源数据130可以包括来自各种所有权和/或开放源平台(例如Oracle®、Microsoft® SQL Server、IBM® Informix®、SAP® Sybase®和/或类似物)的数据库或数据源。在各种实施例中,源数据130可以采用被压缩电路110接收或另外被压缩电路110访问的数据序列或流的形式。数据缓冲器(未示出)可以用于存储数据,例如中间数据、等待被压缩的数据、等待被传送的压缩数据和/或类似物。在一些实施例中,压缩电路110可以访问数据缓冲器内存储的压缩数据以传输给压缩数据的消费者。

压缩电路110操作以压缩源数据130来生成压缩数据138。在各种实施例中,压缩电路110访问或生成源数据130的校验和(例如,循环冗余校验(CRC))。然后将未经压缩的源数据130的校验和与所计算的从解压器输出的未经压缩数据的校验和(例如CRC)比较(或将从解压器输出的未经压缩数据的校验和与未经压缩数据的所存储校验和相比较)以除别的以外还验证压缩数据未被损坏,这将在下文进一步详细描述。另外,压缩电路110基于压缩配置来压缩源数据,这也将在下文进一步详细描述。

在各种实施例中,压缩电路110可以包括压缩引擎、算法、过程、软件应用、固件应用、处理器、协处理器、FPGA和/或类似物。压缩电路110可以配置成根据一些实施例使用离散压缩过程来对数据编码或压缩。该离散压缩过程可以基于一个或多个现有压缩过程。压缩过程的非限制性示例可以包括无损数据压缩、Lempel-Ziv(LZ)、LZ77、LZ4、LZFX、LZSS、Deflate、Snappy、Huffman编码、压缩自适应索引(COMPAX)、改进COMPAX(ICX)、单程再压缩(single-pass recompression)(SPR)和/或类似物。

在一些实施例中,由压缩电路110执行的离散压缩过程可以包括LZ77压缩和/或Deflate的变体。例如,离散压缩过程可以使用Deflate压缩过程来操作,只是:除别的之外,离散压缩过程可以生成包括根据一些实施例的离散子块的离散压缩数据,而不是生成由常规Deflate块形成的压缩数据。在各种实施例中,离散压缩数据可以包括由一个或多个离散子块形成的Deflate块。一般而言,并且如在下文更详细描述的,常规Deflate压缩过程可以保持跟踪每个Deflate块中的历史信息。因此,在Deflate压缩数据的任何点,例如对于特定Deflate块,针对例如32 KB的某一窗口(其可以包括一个或多个其他Deflate块中的数据)存在有之前字符的历史信息。32 KB滑动窗口意指压缩器(和解压器)有最后的32768(32*1024)个字符是什么的记录。因此,Deflate块中存储的操作目标的解压数据需要对至少整个Deflate块以及涉及在Deflate块的历史信息(其还可以包括涉及仍有其他Deflate块的历史信息,等等)中的任何块解压。然而,在一些实施例中,离散压缩过程可以使用基于LZ77和/或基于Deflate的压缩过程,但除别的以外还可以生成由根据一些实施例的离散块而不是常规Deflate块形成的压缩数据。例如,在一些实施例中,离散子块可不包括涉及其他离散子块的历史信息(该历史信息可以指向相同离散子块内的其他数据)。在一些实施例中,每个离散子块可以包括对离散子块解压缩必需的所有信息并且不依赖其他离散子块以便被解压。尽管LZ77和Deflate被用作示例,但实施例没有这样的限制,因为本文预想根据一些实施例能够被使用的任何压缩过程。

一般而言,LZ77压缩过程通过用对输入(未经压缩)数据流中早些存在的数据之前出现的参考来替换该数据的重复出现而操作。通过叫作长度-距离对(“距离”可以称为“偏移”)的一对数字来对匹配编码。如此,LZ77压缩过程找到重复子串并且用反向参考(相对距离偏移)来替换它们。如果相对距离小于在算法编码中所定义的最大历史大小(例如,在Deflate中是32KB),则LZ77压缩过程可以使用对复制串的参考。压缩数据由两个类型的一系列元素组成:文字字节(数据的副本)和指向复制串的指针,其中指针被表示为对<长度,反向距离>。LZ77系列中的各种算法在压缩期间都找到LZ77串匹配,但对文字或参考的编码却不同(例如,在Deflate中是Huffman码,在Snappy中是简单的面向字节的封装,和/或类似物),并且具有不同的最大历史窗口。一般而言,文字可以包括原始编码数据(如与编码为长度、距离对的数据对照)。

为了发现匹配,LZ77编码器保持跟踪一定量的最近数据,例如最后的2 kB、4 kB、32 kB和/或类似物。其中在其中保持该数据的结构叫作“滑动窗口”或“历史窗口”(因此,LZ77有时称为滑动窗口压缩)。编码器使最近数据保持在滑动窗口内来寻找匹配(并且解码器同样将保持该数据来解译编码器所涉及的匹配)。因此,在数据中的任何点,例如对于特定Deflate块,存在有之前的字符(其可以在一个或多个其他Deflate块中)的记录(“历史”或“历史信息”)。32 KB滑动窗口意指压缩器(和解压器)有最后的32768(32*1024)个字符是什么的记录。

在LZ77压缩期间,字节流的之前(较早或较旧)部分的字节模式可以与该字节流的当前部分(或当前位序列)相比较。如果在当前部分中找到与之前部分中的字节序列(或之前字节序列)匹配的字节序列,则当前部分中的字节序列被对较早部分中的相同字节序列的参考所替换。

针对当前字节序列***的参考将当前字节序列的长度和所表达的之前字节序列的位置例如标识为从当前字节序列到匹配之前字节序列的“距离”。如此,LZ77压缩过程将字节序列编码为“长度、距离对”,将其***字节流中来代替当前字节序列。在对压缩流解码时,当解码器达到被嵌入字节流中的长度、距离对时,解码器使用长度、距离对的距离部分以回头参考匹配字节序列的开始并且通过从匹配字节序列的开始重新产生一定数量(其等于长度、距离对的长度分量)的字节来重新产生解码流的正确字节序列。

LZ77压缩过程的非限制性示例可以在下列说明性序列上执行(在压缩之前采用一定形式列举):“ABCD BBBB BC CDE DEFG BBBB EFGH”。在压缩期间,LZ77压缩过程可以定位具有长度为6(包括空间)的匹配“BBBB”。匹配“BBBB”序列具有15的匹配偏移(例如,介入距离)。压缩句可以采用下列形式:“ABCD BBBB BC CDE DEFG @(6,15)EFGH”,其中“(6,15)”是与BBBB匹配相关联的长度和距离对。

Deflate压缩过程用作例如gzip/Zlib和Winzip/PKzip等各种压缩平台的基础。一般而言,Deflate使用对应于输入数据的连续块的一系列块(Deflate块)。每个块可以使用LZ77压缩过程和Huffman编码的组合来压缩。如上文描述的,LZ77压缩过程操作以找到重复子串并且用例如相对距离偏移等参考来替换子串。LZ77压缩过程可以使用对在相同块或之前的块(例如,多至32 KB之前的输入字节(“历史”或“历史信息”))中出现的复制串的参考。压缩数据可以包括两个类型的一系列元素:文字字节和指向复制串的指针(表示为对:<长度,反向距离>)。LZ77压缩过程操作以在每个位置找到串匹配。

使用数据结构来高效地对其中可以找到匹配串的位点编索引,LZ77压缩过程可以操作以搜索许多位点来确定“最佳”匹配。通过压缩级来规定投入(effort)(例如,所尝试的搜索的次数)。例如,gzip/Zlib定义了范围从1至9的多个压缩级,其中9是最高压缩级并且需要最高处理成本。文件可以被表示为一系列令牌(token),其中每个令牌可以表示文字字节或之前出现的文本的匹配。可以使用大小可变的代码(例如,Huffman代码后跟随有某些“附加位”)来对令牌编码。

如图1中所示出的,处理设备100可以包括解压电路120。解压电路120能操作以对压缩数据(例如离散压缩数据138)解压来生成解压数据132。在一些实施例中,解压电路120可以操作以在解压-验证过程(继压缩过程之后或与之并发)期间生成索引信息134。在一些实施例中,索引信息134可以包括解压电路访问离散压缩数据138内的数据(例如在特定块(例如,Deflate块)和/或离散压缩数据138的离散子块处的数据)的信息。例如,索引信息134可以包括索引阵列或可以记录Deflate块和/或离散压缩数据138的子块的偏移信息的其他数据结构。在各种实施例中,偏移信息可以包括对于每个离散块的起始位偏移、对于每个离散块的第一令牌的位偏移、与离散块相关联的报头的位偏移和/或类似物。在一些实施例中,解压电路120可以使用索引信息134来对离散压缩数据138解压以生成解压数据132。

在各种实施例中,向索引表140提供索引信息134。在各种实施例中,索引表140由解压电路120生成。在一个实施例中,解压电路120包括索引表140。备选地,解压电路120不包括索引表140。例如,索引表140被存储在存储器中。

应意识到在解压期间执行操作中的一些可以是有利的,因为不必为冷压缩数据存储元数据。当数据从冷存储得到访问时,可以执行顺序解压。另外,重新生成的元数据可用,只要列是热/暖的即可,从而使得进一步的随机访问读取能够高效。

在各种实施例中,解压电路120响应于解压电路120生成索引信息134而生成校验和数据136。如将在下文进一步详细描述的,校验和数据136是对应于压缩数据中的子块的累积校验和。校验和数据136也被提供给索引表140。因此,索引表140包括索引信息134以及对应于压缩数据138的特定组成部分(例如,报头、块、子块等)的校验和数据136。

在各种实施例中,解压电路120确定未经压缩的源数据(被压缩电路110访问/生成)的校验和与压缩数据的校验和数据136是否匹配,以及压缩电路110是否适当生成小型块,这将在下文进一步详细描述。

在各种实施例中,压缩电路110包括用于输出压缩数据138的一个输出。因此,在各种实施例中,压缩电路110不能并发生成和输出索引信息134和/或校验和数据136。因此,解压电路120能够(同时不输出解压数据132)生成索引信息134和/或校验和数据136,同时压缩电路110生成压缩数据138。备选地,在一些实施例中,与索引信息有关的处理由压缩电路(在验证流程期间)提供。例如,压缩电路可以缓冲有限数量的具有一定大小的子块(例如,128)并且然后写出输出流,或写到其中保存状态的配置空间。

在各种实施例中,离散压缩数据138可以包括Deflate(或基于Deflate的)压缩流使得离散压缩数据138可以使用Deflate兼容的压缩器来解压。在各种实施例中,为了对离散压缩数据138执行随机操作,例如对离散压缩数据132解压,解压电路120可以使用索引信息134来确定哪个离散块包括操作目标以及对应报头(例如,对应Deflate块的Deflate报头)位于哪里(参见,例如图3)。报头然后将在概念上附加到离散子块并且将对离散子块解压。这样做是为了获得对组合数据解压而不需要实际附加数据的效果。在一个实施例中,例如,如果解压器支持适当的收集功能性,则报头和子块可以被规定为收集列表上的条目。因此,为了根据一些实施例对单个元素解压,离散解压过程平均起来将仅必须对一半的离散块(与经压缩的面向列的数据的整个数据列比较)解压。

图2图示可以表示各种实施例的操作环境的示例。图2中所描绘的操作环境可以包括处理设备100,该处理设备100除别的以外还包括压缩电路110和解压电路120。压缩电路110可以操作以生成离散压缩数据138。在一些实施例中,压缩电路110可以在经由处理器电路执行的硬件和/或软件中实现。在各种实施例中,压缩电路110可以配置成操作基于LZ77和/或基于Deflate的离散压缩过程。一般而言,压缩电路110可以配置成操作根据一些实施例的离散压缩过程以根据基于Deflate的压缩过程使用离散块代替常规的Deflate块或与之结合来压缩数据。

如图2中所示出的,压缩电路110的LZ77搜索引擎240可以接收源数据130。LZ77搜索引擎240可以针对重复模式来分析源数据130。具有某一长度(例如,大于或等于3个字符)的重复模式可以减少至长度-距离对令牌。令牌242可以被提供给编码器244,例如Huffman编码器。编码器244可以操作以例如通过用最小大小的位符号来对最频繁看到的令牌242编码而对令牌242编码。

在各种实施例中,编码器244可以生成块250-1至250-n。在一些实施例中,块250可以是由离散子块形成的Deflate块。在各种实施例中,编码器可以生成块250,其包括预定数量的离散子块。例如,编码器244可以每n个子块生成新的Deflate块,其中n可以包括1、2、3、4等等。因此,在一些实施例中,每个Deflate块包括某一数量的一体、未被划分的离散块(例如,子块可以不跨越多个Deflate块)。

离散子块可以配置成包括某一量的数据。在一些实施例中,数据的预定数量可以包括1kb、2kb、3kb等。应意识到,子块可以包括任何预定量的数据。在一些实施例中,每个子块包括预定量的数据(例如,每个子块包括1kb数据)。在一些实施例中,离散块可以具有不同量的数据。在一些实施例中,离散块每个可以具有相同(或大致相似)量的数据或对数据量具有限制。在各种实施例中,每个离散块可以包括固定量的约1KB的未经压缩数据。在一些实施例中,数据量可以不受Deflate标准约束并且可以在到达下一个子块边界的第一令牌242之后生成子块。

根据一些实施例的离散压缩过程可以基于例如块大小、子块大小、每个Deflate块中子块的数量和/或类似物等一个或多个特性来生成各种压缩配置。

例如,包括1KB大小的子块(其中每Deflate块有四个离散子块)的压缩配置可以具有1/4的压缩配置。在另一个示例中,压缩配置可以包括1/16,其中具有1KB的子块大小和16KB的块大小(例如,每高级块有16个离散块)。

在一些实施例中,压缩电路110截断了最后一个匹配使得长度没有跨越到下一个子块中(通过可能将最后几个字节编码为文字)。如上文描述的,压缩电路提供了预定子块大小(例如,1kb)。然而,压缩电路可以生成略大于预定子块大小的子块以便保存可能延伸到具有预定大小的子块之外的最后一个匹配。如果生成了具有超过预定子块大小的大小的子块,则索引表将包括对子块正确解压的额外信息。例如,在一个实施例中,索引表将进一步包括压缩数据流和未经压缩数据流两者之中的子块的边界。

在各种实施例中,压缩电路110可以使用一个或多个默认压缩配置来生成离散压缩数据。在一些实施例中,压缩电路110可以使用确定成对被压缩的数据提供一个或多个最佳压缩特性(例如,压缩比、压缩速度和/或类似物)的最佳压缩配置。在一些实施例中,对于特定数据源(例如,面向列的数据库)的最佳压缩配置可以存储在例如存储器中或作为元数据存储在与数据源相关联的数据库中,并且可以由压缩电路110查找以供在离散压缩过程期间使用。

解压电路120耦合于压缩电路110并且能操作以生成解压数据132、偏移260和校验和262,这将在下文进一步详细描述。在各种实施例中,对解压电路120提供两个标志(当前不在Deflate方案中),如在下文的表1中所指示的:

表1:

Disable_Decompress_Output 1位 没有将解压字节写到输出流
Index_Size 3位 定义了子块(512…32k,等),零禁用特征

如果位(关于表1)都是0,则解压作为生成未经压缩流的正常操作而出现。

如果设置disable_decompress_output,并且index-size是0,则解压作为正常操作出现。计算校验和(例如,CRC)但没有将解压输出写到输出流。这有助于校验和数据上的一些解压-验证流程。

如果index_size是非零,则必须设置disable_decompress_output。下面是关于其中index_size是非零(即其中,在压缩时使用了子块方案)的情况。index_size定义了子块大小。子块大小是2的幂(>=512)。采用该模式,预期的是,解压的动作将经由CRC(且并未真正输出未经压缩的数据)而完整地验证压缩位流,以及小型块的形成。未经压缩的数据从解压电路中的输出累积器写出,但从写端口被抑制。相反预留写端口来写出位索引的流和每子块的CRC元数据。

解压电路检查以下项来确保压缩电路对块/子块的有效构建:

1. 如果看到Deflate块报头,并且输出字节的累积数量不是小型块大小的倍数,则解压电路返回错误。对此的例外是零长度存储的块。

2. 如果匹配令牌(参考,len-dist)的输出横跨两个小型块,则解压电路返回错误。

3. 如果看到所存储的块,并且大小不是小型块大小的倍数,则解压电路返回错误。可以只对非最终块进行该检查。应该对除零长度存储的块以外的块进行该检查。

4. 如果输出溢出,则它是不可恢复的错误。

5. 当规定有子块时将修改正常距离检查错误。在每个子块之后,确保有效距离降至0并且然后开始再次往上计数。从而,当规定了子块时,对参考执行更严格的距离检查。这保证整体deflate流也将是良好成形的。

应意识到上文的检查列表是非限制性列表。在各种实施例中,可以执行更多或更少的检查。

根据一些实施例,在下文描述一般写流程。

首先,压缩器配置有子块大小和子块模式。

其次,源数据被压缩并且确定对于整个未经压缩数据的CRC。

第三,使用CRC来对解压器配置解压-验证模式但也启用子块模式。

第四,解压器不输出未经压缩的数据,但计算整个数据流的CRC并且定期输出累积CRC(例如,校验和262)直至指定点(例如,偏移260)。例如,给出子块开始处的累积CRC和子块末端处的累积CRC(以及子块的大小),可以计算子块的CRC,但二者累积CRC都不是该子块的CRC(但其中初始CRC是0的第一子块的情况除外)。具体地,如果子块大小是100个字节,则计算下列区域的CRC:(0…99)、(0…199)、(0…299)等。

第五,解压器验证在deflate流中是否正确生成每个子块并且针对由压缩器计算的校验和来检查来自解压器的整个文件校验和。

根据一些实施例,在下文描述一般读流程。

如果需要整个列/文件,则解压器设置成像往常一样读取正常deflate流。

如果需要随机访问,并且没有元数据可用(例如,索引和CRC数据),则解压器生成子块元数据(至少必须知道压缩器所使用的子块大小,但这可以是整个数据库或表的参数)。

对于其中元数据可用(例如,索引和CRC数据)的随机访问,确定起始子块位置并且解压器加载有包含deflate报头(例如,对Huffman表解析并且保存状态)的位流。然后,在恢复所保持状态之后,随着子块符号的实际开始,提交第二个作业。

图3描绘根据一些实施例的说明性压缩数据流。如图3中所示出的,压缩数据流300可以包括各种元素,其包括块310、报头320和子块330。在一些实施例中,数据流300可以包括Deflate块310,其可以由报头320和/或子块330形成。应意识到子块30表示Huffman编码数据,并且块310-2和310-4是在它们之后没有任何数据的零长度存储的块。

在各种实施例中,解压电路120可以生成索引信息134(例如,偏移340),其可以包括与离散压缩数据流的元素(例如Deflate块310、报头320和子块330)相关联的元素信息。

在一些实施例中,索引信息134可以包括索引阵列(例如,索引表140),其配置成包括例如偏移340等元素信息。因为离散块不是字节对齐的,偏移的非限制性示例因此可以包括每个离散块的起始位偏移。在各种实施例中,图3中描绘的索引信息134(例如,偏移340)的箭头参考可以表示到索引阵列中的条目。

在各种实施例中,在下列情况/规则中生成偏移340的输出:

1. 当从输出累积器“写”出的字节的数量是子块大小的倍数时,则将下列令牌的输入位偏移写到输出流。

2. 在解压结束时,如果自最后的输出“写”了任何字节,则输入流末端的位偏移被写入。

3. 当完成对deflate报头解析并且它不是零长度存储的块时,写入下一个令牌的位偏移。

另外,在一些实施例中,当写入位偏移时,直到该点的所有输入数据的CRC也被写入。因此,一次写入8个字节。

下文的表2是示例索引表140,其包括针对于压缩数据流300的偏移和对应校验和(例如,CRC)。

表2:

偏移 CRC
偏移340-1 初始CRC(0)
偏移340-2 从偏移340-1到偏移340-2的数据的CRC
偏移340-3 从偏移340-1到偏移340-3的数据的CRC
偏移340-4 与之前的条目相同
偏移340-5 从偏移340-1到偏移340-5的数据的CRC
偏移340-6 从偏移340-1到偏移340-6的数据的CRC

参考表2,应意识到CRC是偏移之间(例如,偏移340-1与340-3之间)的压缩数据所表示的未经压缩数据的CRC。在各种实施例中,索引表可以包括对于压缩位流中未改变未经压缩字节流的其他项(例如但不限于块末端符号、用于填补压缩位流的空存储块等)的位偏移。

参考生成上文的索引表和数据流300的情况/规则,表2(例如,索引表)被创建如下:

假设偏移340-1是在文件开始处,初始CRC是0。当解析器到达报头320-1末端时,它将使用规则3将位偏移340-1写到输出。CRC将是0。

当解压器“输出”字节直至子块330-1末端时,它将使用规则1来写入位偏移340-2。CRC将包括从340-1到340-2的数据。同样的事情发生在子块330-2的末端。

当解压器完成解析报头320-2时,规则3是异常情况,因此什么都没有写。当解压器完成解析报头320-3时,通过规则3,它写出偏移340-4。在子块330-3末端,发生与在偏移340-2相同的事情。

当解压器到达块报头320-4的末端时,假设输入文件不是小型块大小的倍数,规则1将不适用。在报头320-4的末端,规则3将不适用。然后,因为这是在文件末端,因此规则2写偏移340-6。如果文件大小是子块大小的倍数,则相反将写入报头320-4的开始的偏移,并且然后将不写入另外的偏移。

至少参考上文的表2,在一些实施例中,子块的校验和(例如,CRC)被定义成直至子块末端(例如,包括所有之前的子块)的所有数据的校验和。这能够实现使用相同电路生成子块校验和全deflate流校验和(因为需要在额外点的校验和状态的快照并且随后输出它)。

图4描绘根据实施例用于支持压缩数据的随机访问的方法400的流程图。

在410,确定压缩源数据的压缩配置。例如,压缩电路110访问(或生成)压缩配置(例如,子块大小、块中子块的数量等)以用于压缩源数据。

在420,生成处于未经压缩状态的源数据的校验和。例如,压缩电路访问(或生成)未经压缩源数据的CRC。

在430,基于压缩配置将源数据压缩成至少一个块。例如,压缩数据的块包括多个子块和该块的块报头,该多个子块中的每个包括预定大小(例如,~1kb)。

在440,当解压电路未输出源数据的解压数据流时,解压电路生成对应于多个子块的索引信息。例如,生成索引阵列,其记录每个子块的第一令牌/符号的位偏移和Deflate块报头的起始位偏移。

在450,响应于生成索引信息,生成与多个子块相关联的压缩源数据的校验和。例如,索引阵列还记录每个子块处的CRC。每个子块处的CRC是直到特定子块末端(包括所有之前的子块)的所有数据的CRC。

在460,确定采用未经压缩格式的源数据的校验和与压缩源数据的校验和是否匹配。例如,将未经压缩的源数据的CRC(由压缩电路生成)与压缩源数据的CRC(由解压电路生成)比较。如果CRC相同,则假设源数据被压缩而没有任何错误/缺陷。如果CRC不相同,则假设源数据的压缩可能包括错误/缺陷。

图5A是图示根据本公开的一个实施例实现包括异构核的处理设备的处理器500的微架构的框图。具体地,根据本公开的至少一个实施例,处理器500描绘待包括在处理器中的有序架构核和寄存器重命名逻辑、乱序发出/执行逻辑。

处理器500包括耦合于执行引擎单元550的前端单元530,并且两者都耦合于存储器单元570。处理器500可以包括精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或混合或备选核类型。作为又一个选项,处理器500可以包括专用核,例如网络或通信核、压缩引擎、图形核或类似物。在一个实施例中,处理器500可以是多核处理器或可以是多处理器系统的部分。

前端单元530包括分支预测单元532,其耦合于指令高速缓存单元534,该指令高速缓存单元534耦合于指令转换后备缓冲器(TLB)536,其耦合于指令提取单元538,该指令提取单元538耦合于解码单元540。解码单元540(也称为解码器)可以对指令解码,并且生成从原始指令解码或另外反映原始指令或从原始指令得到的一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号作为输出。解码器540可以使用各种不同机制实现。适合机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。指令高速缓存单元534进一步耦合于存储器单元570。解码单元540耦合于执行引擎单元550中的重命名/分配器单元552。

执行引擎单元550包括重命名/分配器单元552,其耦合于引退单元554和一个或多个调度器单元集556。调度器单元556表示任意数量的不同调度器,其包括预留站(RS)、中央指令窗口等。调度器单元556耦合于物理寄存器堆单元558。物理寄存器堆单元558中的每个表示一个或多个物理寄存器堆,其中的不同物理寄存器堆存储一个或多个不同数据类型,例如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点等、状态(例如,指令指针,其是待执行的下一个指令的地址)等。物理寄存器堆单元558被引退单元554掩覆来图示可以实现寄存器重命名和乱序执行所采用的各种方式(例如,使用重排序缓冲器和引退寄存器堆;使用未来文件、历史缓冲器和引退寄存器堆;使用寄存器映射和寄存器池;等)。

在一个实现中,处理器500可以与如关于图1和2所描述的处理设备100相同。

一般而言,架构寄存器从处理器的外部或从程序员的角度来看是可见的。寄存器不限于任何已知特定类型的电路。各种不同类型的寄存器只要它们能够如本文描述的那样存储和提供数据就都是适合的。适合寄存器的示例包括但不限于,专用物理寄存器、使用寄存器重命名的动态分配物理寄存器、专用和动态分配物理寄存器的组合等。引退单元554和物理寄存器堆单元558耦合于执行集群560。执行集群560包括一个或多个执行单元集562和一个或多个存储器访问单元集564。执行单元562可以执行各种操作(例如,移位、加法、减法、乘法)并且操作在各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)上。

尽管一些实施例可以包括专用于特定功能或功能集的许多执行单元,其他实施例可以仅包括一个执行单元或多个执行单元,其全部执行所有功能。因为某些实施例对某些类型的数据/操作创建单独流水线(例如,标量整数流水线、标量浮点/打包整数/打包浮点/向量整数/向量浮点流水线,和/或存储器访问流水线,每个具有它们自身的调度器单元、物理寄存器堆单元和/或执行集群-并且在单独存储器访问流水线的情况下,实现其中仅该流水线的执行集群具有存储器访问单元564的某些实施例),调度器单元556、物理寄存器堆单元558和执行集群560示出为可能是复数个。还应理解在使用单独流水线的情况下,这些流水线中的一个或多个可以是乱序发出/执行并且余下的是有序的。

存储器访问单元集564耦合于存储器单元570,列举几个例子,该存储器单元570可以包括数据预取器580、数据TLB单元572、数据高速缓存单元(DCU)574和2级(L2)高速缓存单元576。在一些实施例中,DCU 574也称为第一级数据高速缓存(L1高速缓存)。DCU 574可以处理多个未完成的缓冲未命中并且继续服务于进入的存储和负载。它还支持维持高速缓存一致性。数据TLB单元572是用于通过映射虚拟和物理地址空间来提高虚拟地址转换速度的高速缓存。在一个示范性实施例中,存储器访问单元564可以包括负载单元、存储地址单元和存储数据单元,其中的每个耦合于存储器单元570中的数据TLB单元572。L2高速缓存单元576可以耦合于一个或多个其他级高速缓存并且最终耦合于主存储器。

在一个实施例中,数据预取器580通过自动预测程序即将消费哪个数据而试探性地加载/预取数据到DCU 574。预取可以指存储器层级(例如,较低级高速缓存或存储器)的一个存储器位点中存储的数据在其被处理器实际需求之前被转移到更接近处理器的较高级存储器位点(例如,产生较低访问延迟)。更具体地,预取可以指早期从较低级高速缓存/存储器到数据高速缓存的数据检索和/或在处理器发出返回特定数据的需求之前预取缓冲器。

处理器500可以支持一个或多个指令集(例如,x86指令集(具有添加有较新版本的一些扩展);加利福尼亚州Sunnyvale市的MIPS Technologies的MIPS指令集;加利福尼亚州Sunnyvale市的ARM Holdings的ARM指令集(具有可选的额外扩展,例如NEON))。

应理解核可以支持多线程(执行两个或以上并行操作或线程集),并且可以采用多种方式这样做,包括时间分片多线程、同时多线程(其中单个物理核对线程中的每个提供逻辑核,该物理核是同时多线程的)或其组合(例如,时间分片提取和解码以及之后的同时多线程,例如在Intel® Hyperthreading技术中)。

尽管在乱序执行的上下文中描述寄存器重命名,应理解寄存器重命名可以在有序架构中使用。尽管处理器的图示实施例还包括单独指令和数据高速缓存单元以及共享L2高速缓存单元,备选实施例可以对于指令和数据两者都具有单个内部高速缓存,例如1级(L1)内部高速缓存,或多级内部高速缓存。在一些实施例中,系统可以包括内部高速缓存以及核和/或处理器外部的外部高速缓存的组合。备选地,所有高速缓存可以在核和/或处理器外部。

图5B是图示根据本公开的一些实施例的图5A的处理器500所实现的有序流水线和示范性寄存器重命名阶段、乱序发出/执行流水线的框图。图5B中的实线框图示有序流水线,而虚线框图示寄存器重命名、乱序发出/执行流水线和核。在图5B中,处理器500作为流水线包括提取阶段502、长度解码阶段504、解码阶段506、分配阶段508、重命名阶段510、调度(也称为调派或发出)阶段512、寄存器读取/存储器读取阶段514、执行阶段516、写回/存储器写入阶段518、异常处理阶段522和提交阶段524。在一些实施例中,阶段502-524的排序可以与所图示的不同并且不限于图5B中示出的特定排序。

图6图示根据本公开的一个实施例包括混合核的处理器600(例如,处理设备100)的微架构的框图。在一些实施例中,根据一个实施例的指令可以被实现以对具有字节、字、双字、四字等大小以及数据类型(例如单和双精度整数和浮点数据类型)的数据元素操作。在一个实施例中,有序前端601是处理器600的部分,其提取待执行的指令并且准备稍后在处理器流水线中使用它们。

前端601可以包括若干单元。在一个实施例中,指令预取器626从存储器提取指令并且将它们馈送给指令解码器628,该指令解码器628进而对它们解码或解译它们。例如,在一个实施例中,解码器将所接收的指令解码为机器可以执行的一个或多个操作,叫作“微指令”或“微操作”(也叫作微op或uop)。在其他实施例中,解码器将指令解析为被微架构用于执行根据一个实施例的操作的操作码和对应数据以及控制字段。在一个实施例中,跟踪高速缓存630取经解码的uop并且将它们组装成uop队列634中的程序有序序列或踪迹以供执行。当跟踪高速缓存630遇到复杂指令时,微代码ROM 632提供完成操作所需要的uop。

一些指令被转换成单个微op,而其他需要若干微op来完成全操作。在一个实施例中,如果需要超过四个微op来完成指令,则解码器628访问微代码ROM 632来运行指令。对于一个实施例,指令可以被解码为少量微op以供在指令解码器628处处理。在另一个实施例中,如果需要许多微op来完成操作,则指令可以存储在微代码ROM 632内。跟踪高速缓存630指的是进入点可编程逻辑阵列(PLA),用于确定正确的微指令指针来读取微代码序列以完成根据一个实施例来自微代码ROM 632的一个或多个指令。在微代码ROM 632完成对指令的微op定序后,机器的前端601恢复从跟踪高速缓存630提前微op。

乱序执行引擎603是准备指令以供执行的地方。乱序执行逻辑有许多缓冲器以在指令沿流水线走下去时使指令流顺畅并且对其重排序以优化性能并且被调度以供执行。分配器逻辑分配每个uop所需要的机器缓冲器和资源以便执行。寄存器重命名逻辑在寄存器堆中的条目之上对逻辑寄存器重命名。分配器还对两个uop队列(一个针对存储器操作并且一个针对非存储器操作)中的一个中的每个uop分配条目,在指令调度器前面:存储器调度器、快调度器602、慢/通用浮点调度器604和简单浮点调度器606。Uop调度器602、604、606基于它们相关的输入寄存器操作数源的准备就绪和uop完成它们的操作所需要的执行资源的可用性来确定uop何时准备执行。一个实施例的快调度器602可以在每半个主时钟周期调度,而其他调度器每主处理器时钟周期只可以调度一次。调度器仲裁调派端口来调度uop以供执行。

寄存器堆608、610位于调度器602、604、606与执行块611中的执行单元612、614、616、618、620、622、624之间。对于整数和浮点操作,分别有单独寄存器堆608、610。一个实施例的每个寄存器堆608、610还包括旁路网络,其可以绕过还未被写入寄存器堆的完成结果或只是将该完成结果转发到新的相关uop。整数寄存器堆608和浮点寄存器堆610还能够互相传达数据。对于一个实施例,整数寄存器堆608被分成两个单独寄存器堆,一个寄存器堆针对数据的低阶32个位并且第二寄存器堆针对数据的高阶32个位。一个实施例的浮点寄存器堆610具有128位宽条目,因为浮点指令典型地具有宽度为64到128个位的操作数。

执行块611包含执行单元612、614、616、618、620、622、624,指令实际上在这里执行。该部分包括寄存器堆608、610,其存储微指令需要执行的整数和浮点数据操作数值。一个实施例的处理器600由许多执行单元组成:地址生成单元(AGU)612、AGU 614、快ALU 616、快ALU 618、慢ALU 620、浮点ALU 622、浮点移动单元624。对于一个实施例,浮点执行块622、624执行浮点、MMX、SIMD和SSE,或其操作。一个实施例的浮点ALU 622包括64位乘64位浮点除法器,用于执行除法、平方根和剩余的微op。对于本公开的实施例,牵涉浮点值的指令可以用浮点硬件来处理。

在一个实施例中,ALU操作去往高速ALU执行单元616、618。一个实施例的快ALU616、618可以以半个时钟周期的有效延迟执行快操作。对于一个实施例,大部分复杂整数操作去往慢ALU 620,因为慢ALU 620包括对于长延迟型操作的整数执行硬件,例如乘法器、移位、标志逻辑和分支处理。存储器加载/存储操作由AGU 612、614执行。对于一个实施例,在对64位数据操作数执行整数操作的上下文中描述整数ALU 616、618、620。在备选实施例中,可以实现ALU 616、618、620来支持包括16、32、128、256等多种数据位。相似地,可以实现浮点单元622、624来支持具有各种宽度的位的一系列操作数。对于一个实施例,浮点单元622、624可以连同SIMD和多媒体指令一起对128位宽的打包数据操作数操作。

在一个实施例中,uop调度器602、604、606在上级加载已完成执行之前调派相关操作。因为uop在处理器600中被试探性地调度和执行,处理器600还包括处理存储器未命中的逻辑。如果数据加载在数据高速缓存中未命中,则在流水线中可以有在运行中的相关操作,其为调度器留下暂时不正确的数据。重放机构跟踪并且重新执行使用不正确数据的指令。只需要重放相关操作并且允许完成独立操作。处理器的一个实施例的调度器和重放机构还设计成为文本串比较操作捕捉指令序列。

处理器600还包括根据本公开的实施例为存储器消歧实现存储地址预测的逻辑。在一个实施例中,处理器600的执行块611可以包括存储地址预测器(未示出),用于为存储器消歧实现存储地址预测。

术语“寄存器”可以指机载处理器存储位点,其被用作识别操作数的指令的部分。也就是说,寄存器可以是从处理器外部(从程序员的角度来看)可用的寄存器。然而,实施例的寄存器在意思上不应局限于特定类型的电路。相反,实施例的寄存器能够存储和提供数据,并且执行本文描述的功能。本文描述的功能可以由处理器内的电路使用任意数量的不同技术实现,例如专用物理寄存器、使用寄存器重命名的动态分配物理寄存器、专用和动态分配物理寄存器的组合等。在一个实施例中,整数寄存器存储三十二位整数数据。一个实施例的寄存器堆还包含对于打包数据的八个多媒体SIMD寄存器。

对于下文的论述,寄存器被理解为被设计成保持打包数据的数据寄存器,例如在用加利福尼亚州Santa Clara市的Intel公司的MMX技术启用的微处理器中的64位宽MMXTM寄存器(在一些实例中也称为‘mm’寄存器)。采用整数和浮点形式都可用的这些MMX寄存器可以用伴随SIMD和SSE指令的打包数据元素来操作。相似地,涉及SSE2、SSE3、SSE4或以上(一般称为“SSEx”)的128位宽XMM寄存器技术也可以用于保持这样的打包数据操作数。在一个实施例中,在存储打包数据和整数数据中,寄存器不需要区分这两个数据类型。在一个实施例中,整数和浮点被包含在相同寄存器堆或不同寄存器堆中。此外,在一个实施例中,浮点和整数数据可以存储在不同寄存器或相同寄存器中。

现在参考图7,其示出框图,该框图图示其中可以使用本公开的实施例的系统700。如图7中所示出的,多处理器系统700是点到点互连系统,并且包括经由点到点互连750而耦合的第一处理器770和第二处理器780。尽管仅示出有两个处理器770、780,要理解本公开的实施例的范围没有这样的限制。在其他实施例中,在指定处理器中可以存在一个或多个额外处理器。在一个实施例中,多处理器系统700可以如本文描述的那样实现混合核。

示出处理器770和780,其分别包括集成存储器控制器单元772和782。处理器770还包括点到点(P-P)接口776和778作为它的总线控制器单元的部分;相似地,第二处理器780包括P-P接口786和788。处理器770、780可以经由点到点(P-P)接口750使用P-P接口电路778、788交换信息。如图7中所示出的,IMC 772和782使处理器耦合于相应的存储器,即存储器732和存储器734,其可以是本地附连到相应处理器的主存储器的部分。

处理器770、780每个可以经由独立P-P接口752、754使用点到点接口电路776、794、786、798来与芯片集790交换信息。芯片集790还可以经由高性能图形接口739与高性能图形电路738交换信息。

共享高速缓存(未示出)可以包括在任一处理器中或在两个处理器外部,然而经由P-P互连与处理器连接,使得如果处理器被放置到低功率模式则任一或两个处理器的本地高速缓存信息可以存储在共享高速缓存中。

芯片集790可以经由接口796耦合于第一总线716。在一个实施例中,第一总线716可以是***组件互连(PCI)总线,或例如PCI Express总线或另一个第三代I/O互连总线等总线,但本公开的范围没有这样的限制。

如图7中所示出的,各种I/O设备714可以连同总线桥718一起耦合于第一总线716,该总线桥718使第一总线716耦合于第二总线720。在一个实施例中,第二总线720可以是低引脚计数(LPC)总线。各种设备可以耦合第二总线720,其包括例如键盘和/或鼠标722、通信设备727和存储单元728,例如盘驱动器或其他大容量存储设备,其在一个实施例中可以包括指令/代码和数据730。此外,音频I/O 724可以耦合于第二总线720。注意其他架构是可能的。例如,代替图7的点到点架构,系统可以实现多点总线或其他这样的架构。

现在参考图8,其示出其中可以操作本公开的一个实施例的系统800的框图。系统800可以包括一个或多个处理器810、815,其耦合于图形存储器控制器集线器(GMCH)820。额外处理器815的可选性质在图8中用虚线指示。在一个实施例中,处理器810、815实现根据本公开的实施例的混合核。

每个处理器810、815可以是如上文描述的电路、集成电路、处理器和/或硅集成电路的某一版本。然而,应注意在处理器810、815中将不可能存在集成图形逻辑和集成存储器控制器单元。图8图示GMCH 820可以耦合于存储器840,其例如可以是动态随机存取存储器(DRAM)。DRAM对于至少一个实施例可以与非易失性高速缓存相关联。

GMCH 820可以是芯片集,或芯片集的一部分。GMCH 820可以与处理器810、815通信并且控制处理器810、815与存储器840之间的交互。GMCH 820还可以充当处理器810、815与系统800的其他元件之间的加速总线接口。对于至少一个实施例,GMCH 820经由例如前端总线(FSB)895等多点总线而与处理器810、815通信。

此外,GMCH 820耦合于显示器845(例如平板或触屏显示器)。GMCH 820可以包括集成图形加速器。GMCH 820进一步耦合于输入/输出(I/O)控制器集线器(ICH)850,其可以用于使各种***设备耦合于系统800。在图8的实施例中示出了例如外部图形设备860,其可以是连同另一个图形设备870一起耦合于ICH 850的分离图形设备。

备选地,在系统800中还可以存在额外或不同的处理器。例如,额外处理器815可以包括与处理器810相同的额外处理器、与处理器810异构或不对称的额外处理器、加速器(例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器。从指标(其包括架构、微架构、热、功耗特性及类似物)的度量谱方面来看,在处理器810、815之间可以存在多种差异。这些差异可以有效地使它们在处理器810、815之中表现出不对称和异构的。对于至少一个实施例,各种处理器810、815可以驻存在相同的晶片封装中。

现在参考图9,其示出其中可以操作本公开的实施例的系统900的框图。图9图示处理器970、980。在一个实施例中,处理器970、980可以如上文描述的那样实现混合核。处理器970、980可以分别包括集成存储器和I/O控制逻辑(“CL”)972和982并且分别经由点到点(P-P)接口978和988之间的点到点互连950而彼此互通信。处理器970、980各自通过如示出的相应P-P接口976至944以及986至998经由点到点互连952和954而与芯片集990通信。对于至少一个实施例,CL 972、982可以包括集成存储器控制器单元。CL 972、982可以包括I/O控制逻辑。如所描绘的,耦合于CL 972、982和I/O设备914的存储器932、934还耦合于控制逻辑972、982。遗留I/O设备915经由接口996耦合于芯片集990。

实施例可以在许多不同的系统类型中实现。图10是根据本公开的实施例的SoC1000的框图。虚线框是关于更高级SoC的可选特征。在图10中,互连单元1012耦合于:应用处理器1020,其包括一个或多个核的集1002A-N和共享高速缓存单元1006;系统代理单元1010;总线控制器单元1016;集成存储器控制器单元1014;媒体处理器集或一个或多个媒体处理器1018,其可以包括集成图形逻辑1008、用于提供静止和/或视频拍摄装置功能性的图像处理器1024、用于提供硬件音频加速的音频处理器1026和用于提供视频编码/解码加速的视频处理器1028;静态随机存取存储器(SRAM)单元1030;直接存储器访问(DMA)单元1032;和显示单元1040,用于耦合于一个或多个外部显示器。在一个实施例中,存储器模块可以包括在集成存储器控制器单元1014中。在另一个实施例中,存储器模块可以包括在SoC1000的一个或多个其他组件中,该SoC 1000可以用于访问和/或控制存储器。应用处理器1020可以包括存储地址预测器,用于如在本文的实施例中所描述的那样实现混合核。

存储器层级包括核内的一个或多个级别的高速缓存、共享高速缓存单元集或一个或多个共享高速缓存单元1006,和耦合于集成存储器控制单元集1014的外部存储器(未示出)。共享高速缓存单元集1006可以包括一个或多个中间级别的高速缓存,例如2级(L2)、3级(L3)、4级(L4)或其他级别的高速缓存、最后一级高速缓存(LLC)和/或其组合。

在一些实施例中,核1002A-N中的一个或多个具有多线程的能力。系统代理1010包括协调并且操作核1002A-N的那些组件。系统代理单元1010可包括例如功率控制单元(PCU)和显示单元。PCU可以是或包括调节核1202A-N和集成图形逻辑1008的功率状态所需要的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。

核1002A-N从架构指令集方面来看可以是同构或异构的。例如,核1002A-N中的一些可以是有序的,而其他是乱序的。作为另一个示例,核1002A-N中的两个或以上可以能够执行相同指令集,而其他可以仅能够执行该指令集的子集或不同指令集。

应用处理器1020可以是通用处理器,例如Core™ i3、i5、i7、2 Duo和Quad、Xeon™、Itanium™、Atom™或Quark™处理器,其可以从加利福尼亚州Santa Clara 市的Intel™ Corporation可获得。备选地,应用处理器1020可以来自另一个公司,例如ARMHoldings, Ltd、MIPS。应用处理器1020可以是专用处理器,例如网络或通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器或类似物。应用处理器1020可以在一个或多个芯片上实现。应用处理器1020可以是一个或多个衬底的一部分和/或可以使用工艺技术(例如,BiCMOS、CMOS或NMOS)中的任一个在一个或多个衬底上实现。

图11是根据本公开的片上系统(SoC)设计的实施例的框图。作为特定说明性示例,SoC 1100包括在用户设备(UE)中。在一个实施例中,UE指的是最终用户用于通信的任何设备,例如手持电话、智能电话、平板、超薄笔记本、带有宽带适配器的笔记本或任何其他相似的通信设备。UE通常连接到基站或节点,其潜在地本质上对应于GSM网络中的移动站(MS)。

在这里,SOC 1100包括2个核-1106和1107。核1106和1107可以遵循指令集架构,例如基于Intel® Architecture Core™的处理器、Advanced Micro Devices, Inc.(AMD)处理器、基于MIPS的处理器、基于ARM的处理器设计或其客户端,以及它们的被许可方或采纳者。核1106和1107耦合于高速缓存控制1108,其与总线接口单元1109和L2高速缓存1110相关联来与系统1100的其他部分通信。互连1111包括片上互连,例如IOSF、AMBA或上文论述的其他互连,这些互连潜在地实现所描述的公开的一个或多个方面。在一个实施例中,核1106、1107可以如在本文的实施例中所描述的那样实现混合核。

互连1111向其他组件提供通信信道,这些组件例如与订户身份模块(SIM)卡接口的SIM 1130、持有启动代码以供核1106和1107执行来使SoC 1100初始化并且启动它的启动ROM 1135、与外部存储器(例如DRAM 1160)接口的SDRAM控制器1140、与非易失性存储器(例如闪存1165)接口的闪存控制器1145、与外设接口的外设控制1150(例如,串行***接口)、显示和接收输入(例如支持触摸的输入)的视频编解码器1120和视频接口1125、执行图形相关计算的GPU 1115等。这些接口中的任一个可以包含本文描述的本公开的方面。另外,系统1100图示用于通信的外设,例如蓝牙模块1170、3G调制解调器1175、GPS 1180和Wi-Fi1185。

图12图示采用计算机系统1200的示例形式的机器的图形表示,在该计算机系统1200内可以执行指令集,用于促使该机器执行本文论述的方法中的任一个或多个。在备选实施例中,机器可以连接(例如,联网)到LAN、内联网、外联网或因特网中的其他机器。机器在客户端-服务器网络环境中可以以服务器或客户端设备的身份操作,或在对等(或分布式)网络环境中作为对等机操作。机器可以是个人计算机(PC)、平板PC、机顶盒(STB)、个人数字助理(PDA)、蜂窝电话、web家电、服务器、网络路由器、交换机或网桥或能够执行指令集(相继或另外)的任何机器,该指令集规定该机器要采取的动作。此外,尽管仅图示单个机器,术语“机器”也将视为包括各自或联合执行指令集(或多个集)来执行本文描述的方法中的任一个或多个的机器(例如,计算机)的任何集合。

计算机系统1200包括处理设备1202、主存储器1204(例如,只读存储器(ROM)、闪速存储器、动态随机存取存储器(DRAM)(例如同步DRAM(SDRAM)或DRAM(RDRAM)等)、静态存储器1206(例如,闪速存储器、静态随机存取存储器(SRAM)等)和数据存储设备1218,它们经由总线1230而互相通信。

处理设备1202表示一个或多个通用处理设备,例如微处理器、中央处理单元或类似物。更特定地,处理设备可以是复杂指令集计算(CISC)微处理器、精简指令集计算机(RISC)微处理器、超长指令字(VLIW)微处理器或实现其他指令集的处理器或实现指令集组合的处理器。处理设备1202还可以是一个或多个专用处理设备,例如专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)、网络处理器或类似物。在一个实施例中,处理设备1202可以包括一个或多个处理核。处理设备1202配置成执行处理逻辑1226以用于执行本文论述的操作和步骤。例如,处理逻辑1226可以执行如图4中所描述的操作。

计算机系统1200可以进一步包括可通信耦合于网络1220的网络接口设备1208。计算机系统1200还可以包括视频显示单元1210(例如,液晶显示器(LCD)或阴极射线管(CRT))、字母数字输入设备1212(例如,键盘)、光标控制设备1214(例如,鼠标)和信号发生设备1216(例如,扬声器)。此外,计算机系统1200可以包括图形处理单元1222、视频处理单元1228和音频处理单元1232。

数据存储设备1218可以包括机器可访问存储介质1224,在其上存储实现本文描述的功能的方法中的任一个或多个的软件1226,例如为如上文描述的存储器消歧实现存储地址预测。软件1226作为指令1226也可以驻存(完全或至少部分)在主存储器1204内和/或作为处理逻辑1226在其被计算机系统1200执行期间驻存在处理设备1202内;主存储器1204和处理设备1202也构成机器可访问存储介质。

机器可读存储介质1224还可以用于存储指令1226,其为例如根据本公开的实施例所描述的混合核实现存储地址预测。尽管机器可访问存储介质1128在示例实施例中示出为单个介质,术语“机器可访问存储介质”应视为包括单个介质或多个介质(例如,集中或分布式数据库,和/或相关联的高速缓存和服务器),其存储一个或多个指令集。术语“机器可访问存储介质”还将视为包括能够存储指令集或对其编码或携带指令集以供机器执行并且促使机器执行本公开的方法中的任一个或多个的任何介质。术语“机器可访问存储介质”相应地将视为包括但不限于固态存储器以及光和磁介质。

下列示例关于另外的实施例。

示例1是处理设备,其包括:1)压缩电路,用于:a)确定压缩源数据的压缩配置;b)生成处于未经压缩状态的源数据的校验和;c)基于压缩配置将源数据压缩成至少一个块,其中该至少一个块包括:多个子块,其中该多个子块包括预定大小;块报头,其对应于多个子块;以及2)解压电路,其耦合于压缩电路,其中该解压电路:在未输出源数据的解压数据流时:a)生成对应于多个子块的索引信息;b)响应于生成索引信息,生成与多个子块相关联的压缩源数据的校验和;以及c)确定采用未经压缩格式的源数据的校验和与压缩源数据的校验和是否匹配。

在示例2中,示例1的处理设备,其中解压电路进一步用于:响应于确定采用未经压缩数据格式的源数据的校验和与压缩源数据的校验和匹配,验证出源数据被正确压缩。

在示例3中,示例1的处理设备,其中解压电路进一步用于:响应于确定采用未经压缩数据格式的源数据的校验和与压缩源数据的校验和不匹配,验证出源数据未被正确压缩。

在示例4中,示例1的处理设备,其中解压电路进一步用于:基于压缩配置确定源数据是否被压缩成至少一个块。

在示例5中,示例1的处理设备,其中块是Deflate块。

在示例6中,示例1的处理设备,其中索引信息包括多个子块中的每个的位偏移。

在示例7中,示例1的处理设备,其中解压电路进一步用于:在多个子块中的每个的位偏移处生成压缩源数据的累积校验和。

在示例8中,示例1的处理设备,其中多个子块的子块包括用于对子块中的所有数据解压的历史信息,该历史信息不包括对于多个子块的其他子块的信息。

在示例9中,示例1的处理设备,其中解压电路进一步用于:通过接收对于多个子块的单个子块的请求并且对所请求的单个子块解压而不对多个子块的其他子块解压,提供对该单个子块的随机访问。

各种实现可以具有上文所描述的结构特征的不同组合。例如,上文描述的处理器和方法的所有可选特征还可以关于本文描述的系统而实现并且示例中的细节可以在一个或多个实现中在任何地方使用。

示例10是处理系统,其包括:1)核,2)耦合于该核的存储器,3)压缩电路,用于:a)确定压缩源数据的压缩配置;b)生成处于未经压缩状态的源数据的校验和;c)基于压缩配置将源数据压缩成至少一个块,其中该至少一个块包括:多个子块,其中该多个子块包括预定大小;对应于多个子块的块报头;以及4)解压电路,其耦合于压缩电路,其中该解压电路:在未输出源数据的解压数据流时:a)生成对应于多个子块的索引信息;b)响应于生成索引信息,生成与多个子块相关联的压缩源数据的校验和;以及c)确定采用未经压缩格式的源数据的校验和与压缩源数据的校验和是否匹配。

在示例11中,示例10的处理系统,其中解压电路进一步用于:响应于确定采用未经压缩数据格式的源数据的校验和与压缩源数据的校验和匹配,验证出源数据被正确压缩。

在示例12中,示例10的处理系统,其中解压电路进一步用于:响应于确定采用未经压缩数据格式的源数据的校验和与压缩源数据的校验和不匹配,验证出源数据未被正确压缩。

在示例13中,示例10的处理系统,其中解压电路进一步用于:基于压缩配置确定源数据是否被压缩成至少一个块。

在示例14中,示例10的处理系统,其中块是Deflate块。

在示例15中,示例10的处理系统,其中索引信息包括多个子块中的每个的位偏移。

在示例16中,示例10的处理系统,其中解压电路进一步用于:在多个子块中的每个的位偏移处生成压缩源数据的累积校验和。

在示例17中,示例10的处理系统,其中多个子块的子块包括用于对子块中所有数据解压的历史信息,该历史信息不包括对于多个子块的其他子块的信息。

在示例18中,示例10的处理系统,其中解压电路进一步用于:通过接收对于多个子块的单个子块的请求并且对所请求的单个子块解压而不对多个子块的其他子块解压,提供对该单个子块的随机访问。

各种实现可以具有上文所描述的结构特征的不同组合。例如,上文描述的处理器和方法的所有可选特征还可以关于本文描述的系统而实现并且示例中的细节可以在一个或多个实现中在任何地方使用。

在示例19中,是存储指令的非暂时性计算机可读介质,这些指令在由处理器执行时促使该处理器执行多个逻辑操作,其包括:确定压缩源数据的压缩配置;生成处于未经压缩状态的源数据的校验和;基于压缩配置将源数据压缩成至少一个块,其中该至少一个块包括:多个子块,其中该多个子块包括预定大小;以及对应于多个子块的块报头;并且在未输出源数据的解压数据流时:生成对应于多个子块的索引信息;响应于生成索引信息,生成与多个子块相关联的压缩源数据的校验和;以及确定采用未经压缩格式的源数据的校验和与压缩源数据的校验和是否匹配。

在示例20中,示例19的非暂时性计算机可读介质,响应于确定采用未经压缩数据格式的源数据的校验和与压缩源数据的校验和匹配,验证出源数据被正确压缩。

在示例21中,示例19的非暂时性计算机可读介质,基于压缩配置确定源数据是否被压缩成至少一个块。

在示例22中,示例19的非暂时性计算机可读介质,在多个子块中的每个的位偏移处生成压缩源数据的累积校验和。

在示例23中,示例19的非暂时性计算机可读介质,通过接收对于多个子块的单个子块的请求并且对所请求的单个子块解压而不对多个子块的其他子块解压,提供对该单个子块的随机访问。

各种实现可以具有上文所描述的结构特征的不同组合。例如,上文描述的处理器和方法的所有可选特征还可以关于本文描述的系统而实现并且示例中的细节可以在一个或多个实现中在任何地方使用。

示例24是这样的装置,其包括1)用于确定压缩源数据的压缩配置;生成处于未经压缩状态的源数据的校验和的部件;2)用于基于压缩配置将源数据压缩成至少一个块的部件;以及在未输出源数据的解压数据流时:3)用于生成对应于多个子块的索引信息的部件;响应于生成索引信息,4)用于生成与多个子块相关联的压缩源数据的校验和的部件;以及5)用于确定采用未经压缩格式的源数据的校验和与压缩源数据的校验和是否匹配的部件。

设计可以经历各种阶段,从创建到模拟到制造。表示设计的数据可以采用许多方式来表示该设计。首先,如在模拟中有用的,硬件可以使用硬件描述语言或另一个功能描述语言来表示。另外,具有逻辑和/或晶体管栅极的电路级模型可在设计过程的某些阶段产生。此外,大部分设计在某个阶段达到表示硬件模型中各种设备的物理布局的数据水平。在使用常规半导体制造技术的情况下,表示硬件模型的数据可以是规定对用于生产集成电路的掩模的不同掩模层上的各种特征存在或不存在的数据。在设计的任何表示中,数据可以采用机器可读介质的任何形式存储。存储器或磁或光存储(例如盘)可以是存储信息(经由被调制成或用别的方式生成以传送这样的信息的光波或电波来传送)的机器可读介质。当传送指示或携带代码或设计的电载波时,就执行电信号的复制、缓冲或重传来说,制作新的副本。从而,通信提供商或网络提供商可以将例如编码到载波中的信息等物品存储在有形、机器可读介质上(至少暂时地),这体现本公开的实施例的技术。

如本文使用的模块指硬件、软件和/或固件的任何组合。作为示例,模块包括硬件,例如微控制器,其与非暂时性介质关联来存储适于由该微控制器执行的代码。因此,在一个实施例中对模块的引用指的是硬件,其具体配置成识别和/或执行在非暂时性介质上保持的代码。此外,在另一个实施例中,模块的使用指包括代码的非暂时性介质,该代码具体适于由微控制器执行来执行预定的操作。并且如可以推断的,在又一个实施例中,术语模块(在该示例中)可以指微控制器和非暂时性介质的组合。通常,图示为分开的模块边界通常变化并且潜在地重叠。例如,第一和第二模块可以共享硬件、软件、固件,或其组合,同时潜在地保留一些独立硬件、软件或固件。在一个实施例中,术语逻辑的使用包括例如晶体管、寄存器等硬件或例如可编程逻辑设备等其他硬件。

在一个实施例中,短语‘配置成’的使用指设置、装配一起、制造、提供推销、进口和/或设计装置、硬件、逻辑或元件来执行指定或确定的任务。在该示例中,不在操作的装置或其元件如果它被设计、耦合和/或互连来执行指定任务则仍然‘配置成’执行所述指定任务。作为纯粹说明性的示例,逻辑门在操作期间可以提供0或1。但‘配置成’向时钟提供使能信号的逻辑门不包括可以提供1或0的每个潜在的逻辑门。相反,逻辑门是采用在操作期间1或0输出要启用时钟的某个方式而耦合的逻辑门。再一次注意术语‘配置成’的使用不要求操作,而相反集中在装置、硬件和/或元件的潜伏状态,其中在潜伏状态中,装置、硬件和/或元件设计成当装置、硬件和/或元件操作时执行特定任务。

此外,在一个实施例中,短语 ‘以’、‘具有…的能力/能够’和/或‘可操作以’的使用指一些装置、逻辑、硬件和/或元件采用以能够实现采用规定方式使用这些装置、逻辑、硬件和/或元件的这样的方式而设计。如上文指出“以”、“具有…的能力/能够”或“可操作以”在一个实施例中的使用指装置、逻辑、硬件和/或元件的潜伏状态,其中装置、逻辑、硬件和/或元件不操作但以能够实现采用规定的方式使用设备的这样的方式而设计。

如本文使用的值包括数字、状态、逻辑状态或二进制逻辑状态的任何已知表示。通常,逻辑水平、逻辑值或逻辑的值的使用也指1和0,这简单地表示二进制逻辑状态。例如,1指高逻辑水平并且0指低逻辑水平。在一个实施例中,例如晶体管或闪存单元等存储单元可能够保持单个逻辑值或多个逻辑值。然而,在计算机系统中已使用值的其他表示。例如,十进制数字十也可表示为910的二进制值和十六进制字母A。因此,值包括能够保持在计算机系统中的信息的任何表示。

此外,状态可以由值或值的部分表示。作为示例,例如逻辑1的第一个值可以表示默认或初始状态,而例如逻辑0的第二个值可以表示非默认状态。另外,术语重设和设置在一个实施例中分别指默认和更新的值或状态。例如,默认值潜在地包括高逻辑值,即重设,而更新值潜在地包括低逻辑值,即设置。注意可以利用值的任何组合来表示任意数量的状态。

上文阐述的方法、硬件、软件、固件或代码的实施例可以经由存储在机器可访问、机器可读、计算机可访问或计算机可读介质上、由处理元件可执行的指令或代码实现。非暂时性机器可访问/可读介质包括采用由例如计算机或电子系统等机器可读的形式提供(即,存储和/或传送)信息的任何机构。例如,非暂时性机器可访问介质包括随机存取存储器(RAM),例如静态RAM(SRAM)或动态RAM(DRAM);ROM;磁或光存储介质;闪速存储器设备;电存储设备;光存储设备;声存储设备;用于保持从暂时(传播的)信号(例如,载波、红外信号、数字信号)接收的信息的其他形式的存储设备;等,这要与可从其处接收信息的非暂时性介质区别开。

用于对逻辑编程来执行本公开的实施例的指令可以存储在系统中的存储器内,例如DRAM、高速缓存、闪速存储器或其他存储等。此外,指令可以经由网络或通过其他计算机可读介质的方式而分发。从而机器可读介质可以包括用于采用由机器(例如,计算机)可读的形式存储或传送信息的任何机构,但不限于软盘、光盘、压缩盘、只读存储器(CD-ROM)和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁或光卡、闪速存储器或有形的机器可读存储,其在经由电、光、声或其他形式的传播信号(例如,载波、红外信号、数字信号等)通过互联网传送信息中使用。因此,计算机可读介质包括任何类型的有形机器可读介质,其适合于采用由机器(例如,计算机)可读的形式存储或传送电子指令或信息。

贯穿整个说明书对“一个实施例”或“实施例”的引用意指结合实施例描述的特定特征、结构或特性包括在本公开的至少一个实施例中。从而,短语“在一个实施例中”或“在实施例中”在贯穿整个说明书的各种地方的出现不一定都指相同的实施例。此外,特定特征、结构或特性可以采用任何适合的方式在一个或多个实施例中组合。

在前面的说明书中,参考特定示范性实施例给出详细描述。然而,可对其做出各种修改和改变而不脱离如附上的权利要求中阐述的本公开更广泛的精神和范围,这将是明显的。说明书和图因此要在说明性意义而非限制性意义上考虑。此外,实施例和其他示范性语言在前面的使用不一定都指相同的实施例或相同的示例,而是可指不同且截然不同的实施例,以及潜在地相同的实施例。

38页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:数据压缩方法、装置和终端设备

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类