对异构压缩加速器中的经压缩的流进行错误校验的制作方法

文档序号:14396411阅读:229来源:国知局

本公开关于存储器管理的领域,并且特别地关于优化对异构压缩加速器中的经压缩的流进行错误校验。



背景技术:

硬件加速器为定制电路设计提供实现数量级的性能和功率改进的机会。然而,由于技术已经进步,需要被处理、存储和传输的数据量也已经发展。所谓的大数据是当今技术解决方案的一大部分,并且利用大数据,进步用于压缩和解压缩的方案,使得比以往任何时候都在更少的空间中(或要求更少带宽)存储和传输更多数据。然而,存在检测执行压缩的硬件引擎中的无声数据损坏的挑战。软错误(ser)的问题是已知的,但这些通常是可检测的。然而,当在压缩操作期间没有检测到错误时,该问题是严重的。生成高度压缩的流的算法遭受以下问题:损坏的流非常难以从中恢复数据;在最差情况下,丢失在损坏点之后的所有数据。

大多数当前解决方案仅仅依赖于固化在压缩器中使用的结构,诸如纠错码(ecc)保护的ram或校验位(parity)保护的总线。但是,如果存在未检测到的多位错误或者计算数据路径逻辑中的事件,则不清楚这些是否可以被避免,除非使用其本质上不精确的概率方法。一些开发者声称已经开发完全解压缩操作作为对压缩的错误校验,但该解决方案是昂贵的,由于其要求显著的硬件资源并且还向应用的处理流水线增加显著的延迟。

附图说明

图1是具有完全压缩和解压缩引擎的示例性错误校验系统的示图。

图2是具有异构压缩和解压缩引擎而没有完全解压缩的示例性错误校验系统的示图。

图3是用于采用图2的系统的异构设计对经压缩流进行错误校验的示例性方法的流程图。

图4是用于采用图2的系统的异构设计对经压缩流进行错误校验的另一个示例性方法的流程图。

图5a是图示根据一个实施例的有序流水线和寄存器重命名级、无序发出/执行流水线的框图。

图5b是图示根据一个实施例的用于实现固态存储器设备中的压缩/解压缩优化的处理器的微架构的框图。

图6图示根据一个实施例的用于包括执行固态存储器设备中的压缩/解压缩优化的逻辑电路的处理器的微架构的框图。

图7是根据一种实现方式的计算机系统的框图。

图8是根据另一种实现方式的计算机系统的框图。

图9是根据一种实现方式的片上系统的框图。

图10图示用于计算系统的框图的另一种实现方式。

图11图示用于计算系统的框图的另一种实现方式。

具体实施方式

对于当采用完全解压缩作为对压缩的错误校验时对应用处理的昂贵影响的一个解决方案是要使用异构(或混合)压缩和解压缩设计,其使用硬件和软件二者。这些引擎小得多,因为需要较少硬件,而是以一些软件处理为代价的。在这些异构模型中提供错误校验可能产生附加挑战,包括在检测错误中增加的延迟。这可能是由于在应用的处理流程的关键路径中的多个硬件-软件交互而引起的。本公开提出使用异构压缩和解压缩引擎的具有降低的延迟的实现经压缩流内的错误检测的解决方案,比完全压缩之后是完全解压缩更好。

在一个示例中,压缩引擎可以被重设计用于经压缩的流的更高效的错误校验,以包括异构设计的适配,所述异构设计包括压缩和解压缩的交错的硬件和软件级。硬件字符串匹配器的输出可以被逆转(reverse)以生成位流,所述位流然后与到压缩引擎的输入流相比较作为第一错误校验。该逆转操作可以以软件来执行,并且可以提供压缩过程中的早期错误校验。压缩引擎的最终经压缩输出可以被部分地解压缩以对熵代码编码器的熵代码编码进行逆转。经部分解压缩的输出可以与熵代码生成器的输出相比较以执行第二错误校验。在第一错误校验时找到错误大大降低生成故障或异常的延迟,利用软件而不是专门硬件执行压缩和解压缩的计算密集方面也是如此。

在另一个示例中,错误校验数据压缩系统可以包括压缩引擎,所述压缩引擎具有压缩输入数据流的多个压缩级。第一压缩级可以包括硬件匹配器,其对输入流的各种子字符串进行字符串匹配以及生成相应子字符串匹配的中间令牌格式。在一个实施例中,第一压缩级可以包括lz77压缩器。第二压缩级可以包括处理器核,其执行作为熵代码生成器的第一指令以从对应于相应子字符串匹配的令牌的频率生成熵代码。在一个实施例中,熵代码生成器是树生成器,其从令牌的频率生成哈夫曼(huffman)树。第三压缩级可以包括硬件熵代码编码器,其利用熵代码对输入流的最终经压缩输出进行编码。在一个实施例中,熵代码编码器可以是哈夫曼编码器,其从哈夫曼树生成最终经压缩输出。

多个解压缩级可以插入在多个压缩级内以提供错误校验。例如,在第一解压缩级中,处理器核可以执行作为逆字符串匹配器的第二指令以从相应子字符串匹配的中间令牌格式生成位流。第一解压缩级还可以包括第一比较器,其将输入流与位流相比较并且响应于确定对输入流和位流进行匹配中的错误而生成第一故障或异常。第二解压缩级可以包括硬件解码器,其部分地解压缩最终经压缩输出,对熵代码编码器的编码进行逆转,生成经部分解压缩的输出。第二解压缩级可以包括第二比较器,其将最终经压缩输出与经部分解压缩的输出相比较并且响应于确定对熵代码生成器的输出与经部分解压缩的输出进行匹配中的错误而生成第二故障或异常。

图1是具有压缩引擎108和解压缩引擎120的示例性错误校验系统100的示图,其中系统100可以实现为处理器或其他设备。在该示例中,系统100被设计有完全解压缩以便执行错误校验。压缩引擎108可以对输入流进行压缩以生成最终经压缩输出。解压缩引擎120可以对最终经压缩输出进行解压缩以生成经解压缩的输出以与输入流相比较,以及在找到经解压缩的输出与输入流之间的失配时生成任何故障或异常。

更具体地,压缩引擎108可以包括字符串匹配器110、熵代码生成器114和熵代码编码器118。字符串匹配器110、熵代码生成器114或熵代码编码器118中的任何一个可以通过由系统100的至少一个处理器核执行指令来执行,例如以便以软件来执行。字符串匹配器110可以对输入流的各种子字符串进行字符串匹配以及生成相应子字符串匹配的中间令牌格式,例如取决于匹配子字符串而创建针对每个文字或反向引用的令牌。在一个示例中,字符串匹配器110是lz77压缩器。熵代码生成器114可以执行熵(或其他算数)算法以从对应于相应子字符串匹配的令牌的频率生成熵代码。在一个实施例中,熵代码生成器114是树生成器,其从令牌的频率生成哈夫曼树。熵代码编码器118然后可以利用熵代码对输入流的最终经压缩输出进行编码。在一个实施例中,熵代码编码器是哈夫曼编码器,其从哈夫曼树生成最终经压缩输出。

解压缩引擎120可以包括解码器124和历史复制器126。解码器124可以对最终经压缩输出进行解码,并且使用历史复制器126来根据位于编码内的文字和后向引用来创建输出位流,所述历史复制器126访问解压缩引擎120的历史缓冲器中存储的历史拷贝。更具体地,解码器124可以将经压缩流解析成表示文字字节或对重复字符串的引用的令牌。历史复制器126然后可以将来自文字字节或来自后向引用的字符串复制到输出流中,其中引用在历史的最近32kb中。解码器124和历史复制器126中的任一或二者可以以软件来执行。在历史复制器126块由cpu或其他处理器核执行的情况下,历史复制器126块可以将压缩引擎减少到大约1/15。

系统100还可以包括比较器130,其将输出位流与输入数据流相比较,其响应于确定输出位流和输入流之间的失配而生成故障或异常(指示错误)。比较器130可以针对相等性而比较输入和输出缓冲器中的每一个字节,或者可以计算相应缓冲器的一些校验和(例如,循环冗余校验(crc))并且然后进行校验以查看校验和是相同的。这两种方案中任一个可以由本文所述的任何比较器使用。

在一个示例中,系统100可以采用广泛使用的标准deflate压缩算法。deflate形成用于诸如gzip/zliptm以及winzip®(或pkzip®)之类的格式的基础。deflate标准数据格式包括对应于连续输入数据块的一系列块。使用lz77算法和哈夫曼编码的组合来压缩每一个块。lz77算法找到重复的子字符串并且用后向引用(例如,相对距离偏移)来替代所述重复的子字符串。lz77算法可以使用对出现在直到缓冲器中向后32k输入字节的相同或之前块中的复制字符串的引用。经压缩的数据可以包括两个类型的元素的系列:文字字节和指向重复字符串的指针,其中指针被表示为一对<长度,后向距离>。还可以采用其他编码数据格式,并且对deflate格式的引用不被解释为限制性的,而是作为示例性的。

图2是具有异构压缩器208和用于在压缩期间和压缩之后对经压缩流进行错误校验的解压缩的交错级的另一个示例性错误校验系统200的示图。类似于图1的压缩引擎108,异构压缩器208可以包括多个压缩级,并且可以由处理器或其他处理设备来实现。这些压缩级可以包括例如具有与关于图1讨论的类似的功能性的字符串匹配器210(第一压缩级)、熵代码生成器214(第二压缩级)和熵代码编码器218(第三压缩级),以生成最终经压缩输出。

在一个实施例中,虽然字符串匹配器210可以是硬件字符串匹配器并且熵代码编码器218可以是硬件熵代码编码器,但处理器核或其他cpu可以执行指令以作为软件来实现熵代码生成器214。因为该第二压缩级是计算密集的,所以作为软件来执行熵代码生成器214可以大大减小异构压缩器208的大小。

然而,与图1不同,图2图示在压缩级之间和之后交错的错误校验解压缩级。更具体地,第一解压缩级可以包括逆字符串匹配器212以对来自字符串匹配器210的输出执行逆操作以生成位流213。比较器216可以将位流213与输入流相比较,从而响应于确定位流213与输入流之间的任何失配而生成第一故障或异常222。假定没有来自字符串匹配器210的输出的错误,位流213应与输入流相同。因此,逆字符串匹配器212执行与图1的解压缩引擎120的历史复制器126块相同或类似的功能性。在一个实施例中,至少一个处理器核执行指令以作为软件来实现逆字符串匹配器212。

此外,第二解压缩级可以移除图1的系统100中采用的历史复制器。这种移除留下解码器224(诸如硬件解码器),利用所述解码器部分地解压缩最终经压缩输出以对熵代码编码器218执行的编码进行逆转,从而生成经部分解压缩的输出225。比较器236然后可以将熵代码生成器214的输出与经部分解压缩的输出225相比较,并且在熵代码生成器214的输出失配经部分解压缩的输出225时生成第二故障或异常242。通过以软件来执行逆字符串匹配器212并且移除历史复制器(图1中所见),大大减小采用于错误校验的解压缩级的整体大小,并且使错误校验更加高效。在一个示例中,解码器224和比较器236可以以专门硬件来执行。

故障或异常可以被生成为机器校验架构故障(mca),其可能是灾难性的,通常导致通知(一个或多个)最高优先级中断以避免贯穿计算系统传播数据内的错误。任何这样的mca可以被记录在日志中并且报告给管理员或it人员以供分析,或者以自动的方式被分析并且其结果被报告给这样的人员。有利地,图2的系统200提供错误检测的改进的粒度,因为第一故障或异常222可以与在最终经压缩输出中检测到的故障或异常242分别地被记日志、跟踪和报告。

证实在压缩期间经压缩流的数据尚未损坏的方式是要用图2的解压缩级证实两个子问题。第一,字符串匹配器210找到的实际匹配或文字字节是正确的。因而,软件使用字符串匹配器令牌流并且执行逆操作(在一个实施例中,lz77“解压缩”的类型)。比较器216的操作然后可以断言这些匹配原始输入流。第二,假设由逆字符串匹配器212输出的位流213不包含错误,第二解压缩级证实编码器没有生成有错误的经压缩流。此处,在一个实施例中,部分硬件解码器块(例如,解码器224)可以执行哈夫曼解码,并且将输出与从熵代码生成器214(在一个实施例中,通过哈夫曼树生成器)中出来的令牌化流相比较。

注意到第一解压缩级(由逆字符串匹配器212执行)可以非常早期完成,因此可以馈送早期mca错误校验。事实上,假定足够灵敏校验,自由(没有附加延迟)提供该第一解压缩级。熵(或哈夫曼)编码和解码步骤稍后验证,但仍比图1的更快,由于系统200从解压缩器的第一级校验。可以甚至在生成熵代码后哈夫曼树之前生成早期校验,从而不给正常处理的延迟增加时间。

得到检测到第一错误的定时可以通过示例来说明。让我们假设我们针对输入数据的每一个128kb创建deflate块(来自真实使用的合理假设)。我们还假设输入缓冲器以32kb组块(chunk)被分配,并且从而每个块进行四个压缩调用。假设高级zlibtm压缩,字符串匹配器210运行大约8循环/字节,每个压缩调用需要大约250k循环(并且对于完整块大约1m循环)。熵代码(或树)生成是大约50k循环,并且我们假设通过编码和解码块的延迟是每个大约1k循环,并且最后历史复制器具有大约20循环的延迟。

在图1的压缩和完全解压缩设计中,系统100可以检测到错误的最早时间在大约1m+50k+2k+20循环。在图2的设计中,假设错误是字符串匹配器级(最可能是ser事件),则检测到第一错误的时间是:250k*i循环,其中,i=1,2,3,4,取决于对压缩的哪个调用具有该事件。因此,错误检测越早,延迟越低。

在图2的系统200的设计中,如果在熵代码编码器218编码流程期间发生错误,则系统100可以作为最差情况在1m+50k+2k循环报告错误。因此,系统200可以快得多地检测到错误(在该示例中,当在第一调用中(例如在字符串匹配器210之后)发生错误时,高达大约4倍快)。还注意到,完全解压缩器本身增加在解压缩器中具有ser事件的显著概率,从而增加到假阴性的生成。

图3是用于采用图2的系统200的异构设计对经压缩流进行错误校验的示例性方法的流程图。系统200的压缩引擎可以以硬件和软件异构地利用多个压缩级对输入流进行压缩(310)。系统200还可以对来自多个压缩级的至少两个输出进行解压缩以生成至少两个经解压缩输出(尽管输出可能未被完全解压缩)(320)。系统200还可以利用对应输入对至少两个经解压缩输出进行错误校验以识别任何失配(330)。系统200还可以响应于错误校验的失配而生成最终或异常(诸如mca)(340)。

图4是用于采用图2的系统200的异构设计对经压缩流进行错误校验的另一个示例性方法的流程图。系统200可以开始于在第一压缩级中使用字符串匹配器(诸如lz77压缩器)对输入流进行压缩以生成子字符串匹配的中间令牌格式,具有针对对于单数的每一个文字以及针对对子字符串匹配的每一个后向引用一个令牌(410)。在第一解压缩级中,系统200可以进行字符串匹配器的逆操作以生成位流(420)。系统200然后可以通过利用比较器将输入流与位流相比较来执行早期错误校验以生成任何第一故障或异常(诸如mca)(430)。

图4的方法可以用系统200继续,在第二压缩级中,利用熵代码生成器从对应于相应子字符串匹配的令牌的频率生成熵代码(440)。在一个实施例中,熵代码生成器可以是树生成器,其从令牌的频率生成哈夫曼树。在其他实施例中,可以采用其他算数或熵算法。在第三压缩级中(例如,采用熵代码编码器),系统200还可以利用熵代码对输入流的最终经压缩输出进行编码(450)。在一个实施例中,第三压缩级可以包括哈夫曼编码器。在另一个实施例中,第三压缩级可以是算数或其他熵代码编码器。

图4的方法可以在第二解压缩级中继续,其中使用解码器对最终经压缩输出部分地解压缩以对第三压缩级的编码逆转以生成经部分解压缩的输出(460)。系统200然后可以使用比较器来执行熵代码生成器的输出与经部分压缩输出的错误校验,从而响应于确定对熵代码生成器的输出与经部分解压缩的输出进行匹配中的错误而生成任何第二故障或异常(其可以是mca或类似故障)(470)。系统200还可以对任何第一故障或异常和任何第二故障或异常记日志以及可选地报告(480),从而对何时以及何事引起这样的故障或异常提供较高粒度水平。

图5a是图示用于可以执行图1的系统100或图2的系统200的处理器核500的微架构的框图。具体地,处理器核500描绘根据本公开的至少一个实施例的要包括在处理器中的有序架构核和寄存器重命名逻辑、无序发出/执行逻辑。承载附加位的纠错码的实施例可以由处理器核500来实现。

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

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

执行引擎单元550包括耦合到引退单元554和一个或多个调度器单元556的集合的重命名/分配器单元552。(一个或多个)调度器单元556表示任何数目的不同调度器,包括保留站(ra)、中央指令窗口等。(一个或多个)调度器单元556可以被耦合到(一个或多个)物理寄存器文件单元558。(一个或多个)物理寄存器文件单元558中的每一个表示一个或多个物理寄存器文件,其中的不同物理寄存器文件存储一个或多个不同的数据类型,诸如标量整数、标量浮点、封装整数、封装浮点、矢量整数、矢量浮点等、状态(例如,作为要执行的下一指令的地址的指令指针)等。(一个或多个)物理寄存器文件单元558可以由引退单元554重叠,以说明其中寄存器重命名和无序执行可以被实现的各种方式(例如,使用(一个或多个)重排序缓冲器以及(一个或多个)引退寄存器文件,使用(一个或多个)未来文件、(一个或多个)历史缓冲器、以及(一个或多个)引退寄存器文件;使用寄存器映射和寄存器池;等等)。

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

虽然一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可以仅包括一个执行单元或全部执行所有功能的多个执行单元。(一个或多个)调度器单元556、(一个或多个)物理寄存器文件单元558和(一个或多个)执行群集560被示出为可能是复数个的,因为某些实施例创建用于某些类型的数据/操作的单独的流水线(例如,标量整数流水线、标量浮点/封装整数/封装浮点/矢量整数/矢量浮点流水线和/或存储器访问流水线,每个都具有其自己的调度器单元、(一个或多个)物理寄存器文件单元和/或执行群集——并且在单独的存储器访问流水线的情况下,实现其中仅该流水线的执行群集具有(一个或多个)存储器访问单元564的某些实施例)。还应当理解,在使用单独流水线的情况下,这些流水线中的一个或多个可以是无序发出/执行并且其余是有序的。

存储器访问单元的集合564可以耦合到存储器单元570,存储器单元570可以包括数据预取器580、数据tlb单元572、数据高速缓存单元(dcu)574和2级(l2)高速缓存单元576,这些仅是举一些示例。在一些实施例中,dcu574还称为一级数据高速缓存(l1高速缓存)。dcu574可以处置多个未解决的高速缓存未命中并且继续服务即将到来的存储和加载。它还支持维持高速缓存一致性。数据tlb单元572是用于通过映射虚拟和物理地址空间来改进虚拟地址转换速度的高速缓存。在一个示例性实施例中,存储器访问单元564可以包括加载单元、存储地址单元和存储数据单元,其中的每一个耦合到存储器单元570中的数据tlb单元572。l2高速缓存单元576可以耦合到一个或多个其他级的高速缓存并且最终耦合到主存储器。

在一个实施例中,数据预取器580通过自动预测程序将要消耗哪个数据而推测地加载/预取数据到dcu574。预取可以是指在数据实际上被处理器需要之前将存储在存储器层级(例如,较低级高速缓存或存储器)的一个存储器位置(例如,定位)中的数据传递到更靠近(例如,导致较低访问延迟)于处理器的较高级存储器位置。更具体地,预取可以是指在处理器发出对于要返回特定数据的需求之前从较低级高速缓存/存储器之一早期取回数据到数据高速缓存和/或到预取缓冲器。

处理器核500可以支持一个或多个指令集(例如,x86指令集(具有已经添加有较新版本的一些扩展);英国赫特福德郡的imaginationtechnologiesofkingslangley的mips指令集;arm指令集(具有加利福尼亚州桑尼维尔的arm控股公司的可选附加扩展,诸如neon)。

应当理解,核可以支持多线程化(执行操作或线程的两个或更多个并行集合),并且可以以各种方式来这样做,包括时间分段多线程化、同时多线程化(其中单个物理核提供用于物理核同时多线程化的线程中的每一个的逻辑核)或其组合(例如,时间分段取出和解码以及此后的同时多线程化,诸如在intel®超线程技术中)。

虽然寄存器重命名在无序执行的上下文中进行描述,但是应当理解,寄存器重命名可以在有序架构中使用。虽然所图示的处理器的实施例还包括单独的指令和数据高速缓存单元和共享l2高速缓存单元,但是替代实施例可以具有用于指令和数据二者的单个内部高速缓存,诸如例如1级(l1)内部高速缓存或多级内部高速缓存。在一些实施例中,系统可以包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。可替代地,所有高速缓存可以在核和/或处理器外部。

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

图6图示用于包括可以执行系统100和/或图2的系统200的逻辑电路的处理器600的微架构的框图。在一些实施例中,根据一个实施例的指令可以被实现以在具有字节、字、双字、四字等的大小以及诸如单精度整数和双精度整数以及浮点数据类型之类的数据类型的数据元素上操作。在一个实施例中,有序前端601是处理器600的部分,其取出要执行的指令并且准备它们稍后在处理器流水线中使用。

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

一些指令被转换成单个微op,而其他指令需要若干微op来完成全操作。在一个实施例中,如果需要多于四个微op来完成指令,则解码器618访问微代码rom632来进行该指令。对于一个实施例,指令可以被解码成少量微op以供在指令解码器618处进行处理。在另一个实施例中,指令可以被存储在微代码rom632内,如果需要许多微op来完成操作的话。跟踪高速缓存630是指入口点可编程逻辑阵列(pla)以确定正确的微指令指针以用于读取微代码序列来完成来自微代码rom632的根据一个实施例的一个或多个指令。在微代码rom632完成对用于指令的微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、agu614、快速alu616、快速alu618、慢速alu620、浮点alu622、浮点移动单元614。对于一个实施例,浮点执行块622、624执行浮点、mmx、simd和sse或其他操作。一个实施例的浮点alu622包括64位乘64位浮点除法器,以执行除法、平方根和余数微op。对于本公开的实施例,可以用浮点硬件来处置涉及浮点值的指令。

在一个实施例中,alu操作去往高速alu执行单元616、618。一个实施例的快速alu616、618可以执行具有半个时钟周期的有效延迟的快速操作。对于一个实施例,更复杂的整数操作去往慢速alu620,由于慢速alu620包括用于长延迟类型的操作的整数执行硬件,诸如乘法器、移位、标志逻辑和分支处理。由agu612、614执行存储器加载/存储操作。对于一个实施例,在64位数据操作数上执行整数操作的上下文中描述整数alu616、618、620。在可替换实施例中,alu616、618、620可以实现成支持各种数据位,包括16、32、128、256等。类似地,浮点单元622、624可以实现成支持具有各种宽度的位的操作数范围。对于一个实施例,浮点单元622、624可以结合simd和多媒体指令在128位宽封装数据操作数上操作。

在一个实施例中,uop调度器602、604、606在父负载已经完成执行之前分派相关操作。由于在处理器600中推测地调度和执行uop,因此处理器600还包括处置存储器未命中的逻辑。如果数据加载在数据高速缓存中未命中,则可以在流水线中存在进行中(inflight)的相关操作,所述相关操作已经留下具有临时不正确的数据的调度器。重放机制跟踪并且重执行使用不正确的数据的指令。只有相关操作需要被重放,并且允许独立操作完成。处理器的一个实施例的调度器和重放机制还被设计成捕获用于文本字符串比较操作的指令序列。

处理器600还包括根据一个实施例的实现固态存储器设备中的压缩/解压缩优化的逻辑。在一个实施例中,处理器600的执行块611可以包括mcu115以执行根据本文的描述的固态存储器设备中的压缩/解压缩优化。

术语“寄存器”可以是指用作标识操作数的指令的部分的板上处理器存储位置。换言之,寄存器可以是从处理器的外部(从编程者的角度看)可用的那些。然而,实施例的寄存器不应在含义上限于特定类型的电路。而是,实施例的寄存器能够存储和提供数据,并且执行本文所述的功能。本文所述的寄存器可以由使用任何数目的不同技术的处理器内的电路来实现,诸如专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、专用和动态分配的物理寄存器的组合等。在一个实施例中,整数寄存器存储三十二位整数数据。一个实施例的寄存器文件还包含用于封装数据的八个多媒体simd寄存器。

对于本文的讨论,寄存器被理解为数据寄存器,其被设计成保存封装数据,诸如利用来自加利福尼亚圣克拉拉的intel公司的mmx技术实现的微处理中的64位宽mmxtm寄存器(在一些实例中也称为“mm”寄存器)。以整数和浮点形式可用的这些mmx寄存器可以与封装数据元素一起操作,所述封装数据元素伴随simd和sse指令。类似地,与sse2、sse3、sse4或更高(通常称为“ssex”)技术相关的128位宽xmm寄存器还可以用于保存这样的封装数据操作数。在一个实施例中,在存储封装数据和整数数据时,寄存器不需要在两个数据类型之间进行区分。在一个实施例中,整数和浮点被包含在相同寄存器文件中,或者包含在不同寄存器文件中。另外,在一个实施例中,浮点和整数数据可以存储在不同寄存器中或者相同寄存器中。

可以以许多不同的系统类型来实现实施例。现在参考图7,示出了根据实现方式的多处理器系统700的框图。如图7中所示,多处理器系统700是点对点互连系统,并且包括经由点对点互连750耦合的第一处理器770和第二处理器780。如图7中所示,处理器770和780中的每一个可以是多核处理器,其包括第一和第二处理器核(即,处理器核774a和774b以及处理器核784a和784b),尽管在处理器中潜在地可以存在多得多的核。这些处理器均可以包括根据本公开的实施例的混合写入模式逻辑。在处理器770、处理器780或二者中可以实现页面添加和内容拷贝的实施例。

虽然示出有两个处理器770、780,但要理解的是,本公开的范围不限于此。在其他实现方式中,一个或多个附加处理器可以存在于给定处理器中。

处理器770和780被示出分别包括集成存储器控制器单元772和782。作为其总线控制器单元的部分,处理器770还包括点对点(p-p)接口776和788;类似地,第二处理器780包括p-p接口786和788。处理器770、780可以使用p-p接口电路778、788经由点对点(p-p)接口750来交换信息。如图7中所示,imc772和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总线之类的总线或另一第三代i/o互连总线,但是本发明的范围并不限于此。

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

现在参考图8,示出了根据本公开的实施例的第三系统800的框图。图7和图8中的类似元件承受类似的附图标记,并且图7的某些方面已经从图7中省略,以避免使图8的其他方面模糊。

图8图示了处理器870、880可以分别包括集成存储器和i/o控制逻辑(“cl”)872和882。对于至少一个实施例,cl872、882可以包括诸如本文所述的集成存储器控制器单元。此外,cl872、882还可以包括i/o控制逻辑。图8图示了存储器832、834耦合到cl872、882,并且i/o设备814也耦合到控制逻辑872、882。传统i/o设备815耦合到芯片组890。在处理器870、处理器880或二者中可以实现页面添加和内容拷贝的实施例。

图9是可以包括核902中的一个或多个的示例性片上系统(soc)900。本领域中已知的用于膝上型计算机、台式计算机、手持pc、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(dsp)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备和各种其他电子设备的其他系统设计和配置也是合适的。通常,能够合并如本文公开的处理器和/或其他执行逻辑的大量各种各样的系统或电子设备通常是合适的。

图9是根据本公开的实施例的soc900的框图。虚线框是更高级的soc上的特征。在图9中,(一个或多个)互连单元902被耦合到:应用处理器917,其包括一个或多个核902a-n的集合和(一个或多个)共享高速缓存单元906;系统代理单元910;(一个或多个)总线控制器单元916;(一个或多个)集成存储器控制器单元914;一组或一个或多个多媒体处理器920,其可以包括集成图形逻辑908、用于提供静态和/或视频摄像机功能性的图像处理器924、用于提供硬件音频加速的音频处理器926和用于提供视频编码/解码加速的视频处理器928;静态随机存取存储器(sram)单元930;直接存储器访问(dma)单元932;以及用于耦合到一个或多个外部显示器的显示单元940。在soc900中可以实现页面添加和内容拷贝的实施例。

接下来转到图10,描绘根据本公开的实施例的片上系统(soc)设计的实施例。作为说明性示例,soc1000被包括在用户设备(ue)中。在一个实施例中,ue是指被最终用户用于通信的任何设备,诸如手持电话、智能电话、平板电脑、超薄笔记本电脑、具有宽带适配器的笔记本电脑或任何其他类似的通信设备。ue可以连接到基站或节点,其可以本质上对应于gsm网络中的移动站(ms)。在soc1000中可以实现页面添加和内容拷贝的实施例。

此处,soc1000包括2个核——1006和1007。类似于以上讨论,核1006和1007可以遵从指令集架构,诸如具有intel®架构核tm的处理器、高级微型器件公司(amd)处理器、基于mips的处理器、基于arm的处理器设计或其客户以及其被许可方或采用者。核1006和1007耦合到高速缓存控制部1008,其与总线接口单元1009和l2高速缓存1010相关联以与soc1000的其他部分通信。互连1011包括片上互连,诸如iosf、amba或以上讨论的其他互连,其可以实现所述公开的一个或多个方面。

互连1011向其他组件提供通信信道,所述其他组件诸如与sim卡对接的订户身份模块(sim)1030、保存引导代码以供核1006和1007执行以初始化和引导soc1000的引导rom1035、与外部存储器(例如,dram1060)对接的sdram控制器1040、与非易失性存储器(例如,闪存1065)对接的闪存控制器1045、与外设对接的外设控制部1050(例如,串行外设接口)、显示和接收输入(例如,触摸使能的输入)的视频编解码器1020和视频接口1025、执行图形相关计算的gpu1015等。这些接口中的任一个可以合并本文所述的实施例的方面。

此外,系统图示用于通信的外设,诸如蓝牙模块1070、3g调制解调器1075、gps1080和wi-fi1085。注意如上所述,ue包括用于通信的无线电装置。结果,这些外设通信模块可能不全部被包括在内。然而,在ue中,应包括某个形式的无线电装置以用于外部通信。

图11图示计算系统1100的示例形式的机器的示图表示,在所述计算系统内可以执行用于使机器执行本文讨论的方法中的任何一个或多个的指令集。在可替代实施例中,机器可以连接(例如,联网)到lan、内联网、外联网或互联网中的其他机器。机器可以在客户端-服务器网络环境中以服务器或客户端设备的能力操作,或者作为对等(或分布式)网络环境中的对等机器操作。机器可以是个人计算机(pc)、平板pc、机顶盒(stp)、个人数字助理(pda)、蜂窝电话、网络装置、服务器、网络路由器、交换机或桥接器或者能够执行指定要由该机器采取的动作的指令集(顺序或以其他方式的)的任何机器。另外,虽然仅图示单个机器,但术语“机器”应还被理解为包括单独地或联合地执行指令集(或多个指令集)以执行本文讨论的方法中的任何一个或多个的机器的任何集合。可以在计算系统1100中实现执行图1的系统100或图2的系统200的实施例。

计算系统1100包括处理设备1102、主存储器1104(例如,闪速存储器、动态随机存取存储器(dram)(诸如同步dram(sdram)或dram(rdram)等)、静态存储器1106(例如,闪速存储器、静态随机存取存储器(sram)等)以及数据存储设备1116,其经由总线1108与彼此通信。

处理设备1102表示一个或多个通用处理设备,诸如微处理器、中央处理单元等。更具体地,处理设备可以是复杂指令集计算(cisc)微处理器、精简指令集计算机(risc)微处理器、甚长指令字(vliw)微处理器或实现其他指令集的处理器或者实现指令集的组合的处理器。处理设备1102还可以是一个或多个专用处理设备,诸如专用集成电路(asic)、现场可编程门阵列(fpga)、数字信号处理器(dsp)、网络处理器等。在一个实施例中,处理设备1102可以包括一个或多个处理器核。处理设备1102被配置成执行处理逻辑或指令1126以用于执行本文讨论的操作。

在一个实施例中,处理设备1102可以是图1的处理设备100。可替代地,计算系统1100可以包括如本文所述的其他组件。应当理解,核可以支持多线程化(执行操作或线程的两个或更多个并行集合),并且可以以各种方式来这样做,包括时间分段多线程化、同时多线程化(其中单个物理核提供用于物理核同时多线程化的线程中的每一个的逻辑核)或其组合(例如,时间分段取出和解码以及此后的同时多线程化,诸如在intel®超线程技术中)。

计算系统1100还可以包括通信地耦合到网络1119的网络接口设备1118。计算系统1100还可以包括视频显示设备1110(例如,液晶显示器(lcd)或阴极射线管(crt))、数字字母输入设备1112(例如,键盘)、光标控制设备1114(例如,鼠标)、信号生成设备1120(例如,扬声器)或其他外围设备。另外,计算系统1100可以包括图形处理单元1122、视频处理单元1128和音频处理单元1132。在另一个实施例中,计算系统1100可以包括芯片组(未图示),其是指集成电路或芯片的群组,所述集成电路或芯片被设计成与处理设备1102一起工作并且控制处理设备1102与外部设备之间的通信。例如,芯片组可以是母板上将处理设备1102链接到非常高速设备(诸如,主存储器1104和图形控制器)以及将处理设备1102链接到外设的较低速外围总线(诸如,usb、pci或isa总线)的芯片的集合。

数据存储设备1116可以包括计算机可读存储介质1124,在所述计算机可读存储介质上存储体现本文所述的功能的方法中的任何一个或多个的软件1126。软件1126还可以完全或至少部分地驻留在主存储器1104内作为指令1126和/或在处理设备1102内作为在其执行期间供计算系统1100执行的处理逻辑;主存储器1104和处理设备1102还构成计算机可读存储介质。

计算机可读存储介质1124还可以用于利用诸如关于图1-4描述的处理设备1102和/或包含调用以上应用的方法的软件库来存储指令1126。虽然计算机可读存储介质1124在示例实施例中示出为单个介质,但术语“计算机可读存储介质”应被理解为包括存储一个或多个指令集的单个介质或多个介质(例如,集中式或分布式数据库,和/或关联的高速缓存和服务器)。术语“计算机可读存储介质”还应被理解为包括能够存储、编码或承载指令集以供机器执行并且使机器执行本实施例的方法中的任何一个或多个的任何介质。术语“计算机可读存储介质”相应地应被理解为包括但不限于固态存储器,以及光学和磁性介质。

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

示例1是一种处理器,其包括:1)硬件字符串匹配器,其对输入流的各种子字符串进行字符串匹配以及生成相应子字符串匹配的中间令牌格式;2)处理器核,其执行作为熵代码生成器的第一指令以从对应于相应子字符串匹配的令牌的频率生成熵代码;以及3)解压缩引擎,其在所述输入流正被压缩时生成指示所述输入流的错误校验的至少两个输出,其中所述处理器核要执行第二指令以生成所述至少两个输出中的一个。

在示例2中,示例1的处理器,其中所述硬件字符串匹配器包括lz77压缩器。

在示例3中,示例1的处理器,其中所述处理器核要执行第二指令以执行逆操作,所述逆操作从相应子字符串匹配的中间令牌格式生成位流,所述处理器还包括比较器,其将所述输入流与所述位流相比较并且响应于确定对所述输入流和所述位流进行匹配中的错误而生成故障或异常。

在示例4中,示例1的处理器,还包括熵代码编码器,其利用所述熵代码对所述输入流的最终经压缩输出进行编码。

在示例5中,示例1-4的处理器,其中所述解压缩引擎包括:a)硬件解码器,其部分地解压缩所述最终经压缩输出以对所述熵代码编码器的编码进行逆转,以生成经部分解压缩的输出;以及b)比较器,其将所述熵代码生成器的输出与所述经部分解压缩的输出相比较,并且响应于确定对所述熵代码生成器的输出与所述经部分解压缩的输出进行匹配中的错误而生成故障或异常。

在示例6中,示例1-5的处理器,其中所述熵代码生成器是树生成器,其从所述令牌的频率生成哈夫曼树。

在示例7中,示例6的处理器,其中所述熵代码编码器包括哈夫曼编码器,其从所述哈夫曼树生成所述最终经压缩输出。

各种实施例可以具有上述结构特征的不同组合。例如,上述计算系统的所有可选特征还可以关于本文所述的方法或过程实现,并且示例中的细节可以在一个或多个实施例中任何位置使用。

示例8是一种设备,其包括:1)压缩器,其对数据的输入流进行压缩,所述压缩器包括:a)硬件字符串匹配器,其对所述输入流的各种子字符串进行字符串匹配以及生成相应子字符串匹配的中间令牌格式;b)处理器核,其执行作为熵代码生成器的第一指令以从对应于相应子字符串匹配的令牌的频率生成熵代码;以及2)解压缩引擎,其包括:a)处理器核,其执行作为逆字符串匹配器的第二指令以从相应子字符串匹配的中间令牌格式生成位流;以及b)第一比较器,其将所述输入流与所述位流相比较,并且响应于确定对所述输入流和所述位流进行匹配中的错误而生成第一故障或异常。

在示例9中,示例8的设备,其中所述硬件字符串匹配器包括lz77压缩器。

在示例10中,示例9-10的设备,其中所述压缩器还包括熵代码编码器,其利用所述熵代码对所述输入流的最终经压缩输出进行编码。

在示例11中,示例10的设备,其中所述熵代码生成器是树生成器,其从所述令牌的频率生成哈夫曼树,并且其中所述熵代码编码器包括哈夫曼编码器,其从所述哈夫曼树生成所述最终经压缩输出。

在示例12中,示例9-11的设备,其中所述解压缩引擎还包括:a)解码器,其部分地解压缩所述最终经压缩输出以对所述熵代码编码器的编码进行逆转,以生成经部分解压缩的输出;以及b)比较器,其将所述熵代码生成器的输出与所述经部分解压缩的输出相比较,并且响应于确定对所述熵代码生成器的输出与所述经部分解压缩的输出进行匹配中的错误而生成第二故障或异常。

在示例13中,示例12的设备,其中所述第一故障或异常包括可与所述第二故障或异常区分的机器校验架构(mca)故障,并且其中所述至少一个处理器还要:a)在日志内跟踪所述第一故障或异常的生成的第一频率;以及b)在所述日志内跟踪所述第二故障或异常的生成的第二频率。

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

示例14是一种错误校验、数据压缩系统,其包括:1)压缩引擎,其对数据的输入流进行压缩,所述压缩引擎包括:a)硬件字符串匹配器,其对所述输入流的各种子字符串进行字符串匹配以及生成相应子字符串匹配的中间令牌格式;b)处理器核,其执行作为熵代码生成器的第一指令以从对应于相应子字符串匹配的令牌的频率生成熵代码;以及c)硬件熵代码编码器,其利用所述熵代码对所述输入流的最终经压缩输出进行编码;以及2)解压缩引擎,其对所述输入流的压缩进行错误校验,所述解压缩引擎包括:a)处理器核,其执行作为逆字符串匹配器的第二指令以从相应子字符串匹配的中间令牌格式生成位流;b)第一比较器,其将所述输入流与所述位流相比较,并且响应于确定对所述输入流和所述位流进行匹配中的错误而生成第一故障或异常;c)硬件解码器,其部分地解压缩所述最终经压缩输出以对所述熵代码编码器的编码进行逆转,以生成经部分解压缩的输出;以及d)第二比较器,其将所述熵代码生成器的输出与所述经部分解压缩的输出相比较,并且响应于确定对所述熵代码生成器的输出与所述经部分解压缩的输出进行匹配中的错误而生成第二故障或异常。

在示例15中,示例14的系统,其中所述第一故障或异常包括可与所述第二故障或异常区分的机器校验架构(mca)故障,并且其中所述至少一个处理器还要:a)在日志内跟踪所述第一故障或异常的生成的第一频率;b)在所述日志内跟踪所述第二故障或异常的生成的第二频率;以及c)向系统管理员报告所述第一频率和所述第二频率。

在示例16中,示例14-15的系统,其中所述硬件字符串匹配器包括lz77压缩器。

在示例17中,示例15-16的系统,其中所述熵代码生成器是树生成器,其从所述令牌的频率生成哈夫曼树,并且其中所述硬件熵代码编码器包括哈夫曼编码器,其从所述哈夫曼树生成所述最终经压缩输出。

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

示例18是一种方法,其包括:1)用异构压缩器对数据的输入流进行压缩,其中所述异构压缩器的第一部分包括专用硬件,并且所述异构压缩器的第二部分被执行为软件;2)对所述压缩器的至少两个输出进行解压缩以生成至少两个经解压缩的输出;以及3)利用对应输入对所述至少两个经解压缩的输出执行错误校验以识别正由所述压缩器创建的经压缩流内的任何失配。

在示例19中,示例18的方法,其中所述异构压缩器包括:a)硬件字符串匹配器,其对输入流的各种子字符串进行字符串匹配以及生成相应子字符串匹配的中间令牌格式;b)处理器核,其执行作为熵代码生成器的第一指令以从对应于相应子字符串匹配的令牌的频率生成熵代码;以及c)硬件熵代码编码器,其利用所述熵代码对所述输入流的最终经压缩输出进行编码。

在示例20中,示例19的方法,其中所述处理器核要执行第二指令以生成所述至少两个输出中的一个,其中所述解压缩还包括:a)通过执行所述第二指令来执行逆操作以从由所述字符串匹配器生成的相应子字符串匹配的中间令牌格式生成位流;b)将所述输入流与所述位流相比较;以及c)响应于确定对所述输入流和所述位流进行匹配中的错误而生成故障或异常。

在示例21中,示例19-20的方法,其中所述解压缩还包括:a)部分地解压缩所述最终经压缩输出以对所述熵代码编码器的编码进行逆转,以生成经部分解压缩的输出;b)将所述熵代码生成器的输出与所述经部分解压缩的输出相比较;以及c)响应于确定对所述熵代码生成器的输出和所述经部分解压缩的输出进行匹配中的错误而生成故障或异常。

在示例22中,示例19-22的方法,其中所述硬件字符串匹配器包括lz77压缩器。

在示例23中,示例19-22的方法,其中所述熵代码生成器是树生成器,其从所述令牌的频率生成哈夫曼树,并且其中第三压缩级包括哈夫曼编码器,其从所述哈夫曼树生成所述最终经压缩输出。

虽然已经关于有限数目的实施例描述了本公开,但本领域技术人员将领会到众多修改及根据其的变形。意图在于随附权利要求涵盖如落入该本公开的真实精神和范围内的所有这样的修改和变形。

在本文的描述中,阐述众多特定细节,诸如特定类型的处理器和系统配置、特定硬件结构、特定架构和微架构细节、特定寄存器配置、特定指令类型、特定系统组件、特定测量/高度、特定处理器流水线级和操作等的示例以便提供对本公开的透彻理解。然而,对本领域技术人员将明显的是,这些特定细节不需要用于实践本公开。在其他实例中,尚未详细描述诸如特定和可替代处理器架构、用于所述算法的特定逻辑电路/代码、特定固件代码、特定互连操作、特定逻辑配置、特定制造技术和材料、特定编译器实现方式、代码中的算法的特定表述、特定掉电和门控技术/逻辑以及计算机系统的其他特定操作细节之类的熟知的组件或方法以便避免不必要地使本公开模糊。

参考特定集成电路中(诸如在计算平台或微处理器中)的固态存储器设备中的压缩/解压缩优化来描述实施例。实施例还可以适用于其他类型的集成电路和可编程逻辑器件。例如,公开的实施例不限于台式计算机系统或便携式计算机,诸如intel®ultrabooks™计算机。并且还可以在诸如手持设备、平板电脑、其他薄型笔记本之类的其他设备中使用片上系统(soc)设备和嵌入式应用。手持设备的一些示例包括蜂窝电话、互联网协议设备、数字摄像机、个人数字助理(pda)和手持pc。嵌入式应用典型地包括微控制器、数字信号处理器(dsp)、片上系统、网络计算机(netpc)、机顶盒、网络集线器、广域网(wan)交换机或可以执行以下教导的功能和操作的任何其他系统。所描述的是系统可以是任何种类的计算机或嵌入式系统。公开的实施例可以尤其用于低端设备,比如可穿戴设备(例如,手表)、电子植入器、传感和控制基础设施设备、控制器、监管控制和数据采集(scada)系统等。此外,本文描述的装置、方法和系统不限于物理计算设备,而是还可以涉及用于能量节省和效率的软件优化。如在以下描述中将容易地变得明显的,本文描述的方法、装置和系统的实施例(无论是否参考硬件、固件、软件或其组合)是对平衡性能考虑的“绿色技术”未来至关重要的。

尽管参考处理器描述本文的实施例,但其他实施例适用于其他类型的集成电路和逻辑设备。本公开的实施例的类似技术和教导可以应用于其他类型的电路或半导体设备,其可受益于较高流水线吞吐量和改进的性能。本公开的实施例的教导适用于执行数据操纵的任何处理器或机器。然而,本公开不限于执行512位、256位、128位、64位、32位或16位数据操作的处理器或机器,并且可以应用于其中执行数据的操纵和管理的任何处理器和机器。此外,本文的描述提供示例,并且附图示出各种示例用于说明的目的。然而,这些示例不应该以限制性含义解释,因为其仅仅意图于提供本公开的实施例的示例,而不是提供本公开的实施例的所有可能实现方式的穷尽列表。

尽管以下示例在执行单元和逻辑电路的上下文中描述指令处置和分布,但本公开的其他实施例可以通过存储在机器可读有形介质上的数据或指令的方式来实现,所述指令当被机器执行时使机器执行与本公开的至少一个实施例一致的功能。在一个实施例中,与本公开的实施例关联的功能以机器可执行指令来体现。指令可以用于使编程有指令的通用或专用处理器执行本公开的步骤。本公开的实施例可以被提供为计算机程序产品或软件,其可以包括其上存储有指令的机器或计算机可读介质,所述指令可以用于对计算机(或其他电子设备)编程以执行根据本公开的实施例的一个或多个操作。可替代地,本公开的实施例的操作可能通过包含用于执行操作的固定功能逻辑的特定硬件组件或者通过编程的计算机组件和固定功能硬件组件的任何组合来执行。

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

设计可以经历各种阶段,从创建到仿真到制造。表示设计的数据可以以多种方式表示设计。首先,如在仿真中有用的,可以使用硬件描述语言或另一个功能描述语言来表示硬件。此外,具有逻辑和/或晶体管门的电路级模型可以在设计过程的一些阶段处产生。另外,在一些阶段处的大多数设计达到表示硬件模型中的各种设备的物理放置的数据级。在其中使用常规半导体制造技术的情况下,表示硬件模型的数据可以是指定针对用于产生集成电路的掩模的不同掩模层上的各种特征的存在或不存在的数据。在设计的任何表示中,可以在任何形式的机器可读介质中存储数据。存储器或诸如盘之类的磁性或光学储存器可以是机器可读介质,其存储经由被调制或以其他方式生成的光波或电波传输的信息以传输这样的信息。当指示或承载代码或设计的电载波被传输时,在执行电信号的拷贝、缓冲、或重传的意义上,做出新的拷贝。因而,通信提供商或网络提供商可以至少临时地在有形、机器可读介质上存储制品,诸如体现本公开的实施例的技术的编码到载波中的信息。

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

在一个实施例中,短语“被配置成”的使用是指对装置、硬件、逻辑或元件进行布置、放在一起、制造、供给销售、导入和/或设计以执行指定或确定的任务。在该示例中,不在操作的装置或其元件仍“被配置成”执行指定任务,如果它被设计、耦合和/或互连以执行所述指定任务的话。作为纯粹说明性示例,逻辑门可以在操作期间提供0或1。但是“被配置成”向时钟提供使能信号的逻辑门不包括可以提供1或0的每一个潜在逻辑门。而是,逻辑门是以在操作期间1或0输出要使能时钟的某种方式耦合的逻辑门。再次注意到术语“被配置成”的使用不要求操作,而是聚焦于装置、硬件和/或元件的潜在状态,其中在潜在状态中,装置、硬件和/或元件被设计成当装置、硬件和/或元件在操作时执行特定任务。

另外,在一个实施例中,短语“以”、“能够/能”和/或“可操作成”的使用是指以这样的方式设计的一些装置、逻辑、硬件和/或元件要使能以指定方式对装置、逻辑、硬件和/或元件的使用。如上所指出的,在一个实施例中,以、能或可操作成的使用是指装置、逻辑、硬件和/或元件的潜在状态,其中装置、逻辑、硬件和/或元件不在操作,而是以这样的方式被设计成使能以指定方式对装置的使用。

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

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

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

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

贯穿本说明书对“一个实施例”或“实施例”的引用意味着结合实施例描述的特定特征、结构或特性被包括在本公开的至少一个实施例中。因而,在贯穿本说明书的各种位置中的短语“在一个实施例”或“在实施例中”的出现不一定全部是指相同的实施例。另外,在一个或多个实施例中可以以任何合适的方式组合特定特征、结构或特性。

在前述说明书中,已经参考特定示例性实施例给出详细描述。然而,将明显的是,可以在不背离如随附权利要求中所阐述的本公开的较宽泛精神和范围的情况下对其做出各种修改和改变。因此,说明书和附图要以说明性含义而不是限制性含义来看待。另外,实施例和其他示例性语言的前述使用不一定是指相同的实施例或相同示例,而是可以是指不同和独特的实施例以及潜在地是指相同的实施例。

在对计算机存储器内的数据位的操作的算法和符号表示的方面呈现详细描述的一些部分。这些算法描述和表示是数据处理领域的技术人员用于向本领域其他技术人员更有效地传达其工作的实质的手段。算法在此处并且一般地被设想为导致期望结果的操作的自一致序列。操作是要求物理量的物理操纵的那些。通常,尽管不是必要的,这些量采取能够被存储、传递、组合、比较或以其他方式操纵的电学或磁性信号的形式。已经证实便捷的是,有时主要为了公共使用的原因,将这些信号称为位、值、元素、符号、字符、项、数字等。本文所述的块可以是硬件、软件、固件或其组合。

然而,应考虑到,所有这些和类似术语要与适当物理量关联,并且仅仅是应用于这些物理量的便捷标签。除非另有从以上讨论明显的具体陈述,否则应领会的是,贯穿本描述,利用诸如“定义”、“接收”、“确定”、“发出”、“链接”、“关联”、“获得”、“认证”、“抑制”、“执行”、“请求”、“通信”等之类的术语的讨论是指计算系统或类似电子计算设备的动作或过程,所述计算系统或类似电子计算设备操纵表示为计算系统的寄存器和存储器内的物理(例如,电子)量的数据和将其变换成类似地表示为计算系统存储器或寄存器或其他这样的信息存储、传输或显示设备内的物理量的其他数据。

词语“示例”或“示例性”在本文用于意指充当示例、实例或说明。本文描述为“示例”或“示例性”的任何方面或设计不一定被解释为相对于其他方面或设计是优选的或有利的。而是,词语“示例”或“示例性”的使用意图在于以具体的方式呈现概念。如在本申请中使用的,术语“或”意图在于意指包含性“或”而不是排除性“或”。也就是说,除非另有指定或从上下文中清楚的,否则“x包括a或b”意图在于意指本质上包含性排列中的任何一个。也就是说,如果x包括a;x包括b;或x包括a和b二者,则在任何前述实例下满足“x包括a或b”。此外,如本申请以及随附权利要求中使用的冠词“一”和“一个”应一般地解释为意指“一个或多个”,除非另有指定或从上下文清楚是针对单数形式。此外,贯穿全文术语“实施例”或“一个实施例”或“实现方式”或“一种实现方式”的使用不意图意指相同实施例或实现方式,除非这样描述。而且,如本文使用的术语“第一”、“第二”、“第三”、“第四”等意味是标签以区分不同元素,并且可以不一定具有根据其数字表示的次序含义。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1