实现对基于处理器的系统中的小数据块的高效无损压缩的制作方法

文档序号:17486866发布日期:2019-04-20 06:53阅读:319来源:国知局
实现对基于处理器的系统中的小数据块的高效无损压缩的制作方法

本申请要求2016年9月8日提交且标题为“实现对基于处理器的系统中的小数据块的高效无损压缩(providingefficientlosslesscompressionforsmalldatablocksinprocessor-basedsystems)”的第15/259,686号美国专利申请的优先权,所述美国专利申请的内容以全文引用的方式并入本文中。

本公开技术大体上涉及无损压缩操作,以及具体地说,涉及实现对基于处理器的系统中的高速缓存线和其它相对小的存储器块的无损压缩。



背景技术:

无损数据压缩技术(即,允许从经压缩数据完美地重建原始数据的数据压缩技术)有潜力证明适用于解决各种计算机处理器性能和架构问题。作为非限制性实例,无损数据压缩可提供一种用于改进存储器带宽、增加有效存储器容量和/或减少末级高速缓存(llc)大小的机构。为了实现这些益处,所实施的特定无损数据压缩机构应能够高效地压缩相对小的数据块,例如常规高速缓存线大小的数据块(例如,在一些方面中,128字节的数据块)。

然而,例如zip压缩等大多数常规无损压缩方法被设计成对相对更大的数据块(例如,一(1)千字节(kb)或更大的数据块)进行操作。此外,用于小块压缩的常规解决方案具有多个相关联缺点,或具有未知有效性。举例来说,smaz和base-delta-immediate压缩机构在压缩小数据块时可能无法实现可接受的结果,而fpc(常见模式压缩)机构是基于主要压缩数据块内的零(0)值。被称为高速缓存封隔器(c-pack)方法的最近开发的压缩机构类似于zip压缩且据报导针对小块进行了优化。然而,c-pack实施起来相对复杂,且其整体有效性并未被熟知。

因此,为了实现对例如高速缓存线等小数据块的高效压缩,相对更简单的无损压缩机构是合乎期望的。



技术实现要素:

具体实施方式中所公开的方面包含实现对基于处理器的系统中的小数据块的高效无损压缩。在此方面,在一些方面中,提供一种用于检测和编码相对小的数据块内的模式的经压缩存储器控制器。经压缩存储器控制器提供存储多个掩码的掩码表,所述多个掩码各自与前缀相关联。经压缩存储器控制器还包含模式识别电路和输出生成电路。

模式识别电路首先接收输入数据块,所述输入数据块包括待压缩的多个输入字。在示范性方面中,输入数据块可包括128字节线,所述128字节线包括各自为32位的32个输入字。模式识别电路接着通过掩码表中的掩码进行迭代,且在每次迭代期间,将掩码应用到输入字以生成多个模式(即,输入字的非掩码部分)。如果经生成模式当中的模式被识别为最频繁出现的模式,那么所述模式以及每个对应输入字的未压缩数据部分(即,输入字的被掩蔽以生成模式的部分)(如果存在的话)与同掩码相关联的前缀相关联而被输出到输出生成电路。对应于最频繁出现的模式的每个输入字被分配有对应于掩码的前缀,且模式识别电路将下一掩码应用到剩余未分配输入字。

模式识别电路将被分配给输入字中的每一个的前缀输出到输出生成电路。输出生成电路接着生成经压缩输出块,所述经压缩输出块包含每个输入字的经分配前缀,且还包含各自与经分配前缀相关联的一或多个频繁出现的模式,以及一或多个对应输入字的一或多个未压缩数据部分。

在一些方面中,掩码表还可包含指示零(0)值的前缀。在开始通过掩码表的掩码的迭代之前,模式识别电路可首先确定是否存在任何值为零(0)的输入字。如果是,那么模式识别电路可将指示零(0)值的前缀分配给值为零(0)的输入字。一些方面可实现:在完成通过掩码表的掩码的迭代之后,模式识别电路可确定任何未分配输入字是否保持在多个输入字当中。如果是,那么模式识别电路可将每个未分配输入字的值与指示未压缩输入字的前缀相关联而输出到输出生成电路作为未分配输入字的未压缩数据部分。根据一些方面,输出生成电路可生成经压缩输出块,所述经压缩输出块进一步包含掩码表中的每个前缀的一组标志,所述一组标志指示在压缩期间哪些前缀被分配给输入字。

在另一方面中,提供经压缩存储器控制器(cmc)。cmc包括掩码表,所述掩码表提供多个掩码和相关联多个前缀。cmc进一步包括模式识别电路。模式识别电路被配置成接收多个输入字。模式识别电路被进一步配置成:针对掩码表的多个掩码中的每个掩码,将掩码应用到多个输入字中的每个未分配输入字以生成对应多个模式。模式识别电路还被配置成确定最频繁出现的模式是否存在于多个模式当中。模式识别电路另外被配置成:响应于确定最频繁出现的模式存在于多个模式当中,与同掩码相关联的多个前缀的前缀相关联而将最频繁出现的模式和每个未分配输入字的未压缩数据部分输出到输出生成电路。模式识别电路被进一步配置成将与掩码相关联的前缀分配给对应于最频繁出现的模式的每个未分配输入字。模式识别电路还被配置成将分配给多个输入字的多个经分配前缀输出到输出生成电路。输出生成电路被配置成生成经压缩输出块。经压缩输出块包括分配给多个输入字的多个经分配前缀。经压缩输出块进一步包括一或多个最频繁出现的模式,所述一或多个最频繁出现的模式各自与多个经分配前缀中的一个相关联。经压缩输出块还包括多个输入字中的对应一或多个输入字的一或多个未压缩数据部分。

在另一方面中,提供cmc。cmc包括用于接收多个输入字的装置。cmc进一步包括一种针对多个掩码中的每个掩码将掩码应用到多个输入字中的每个未分配输入字以生成对应多个模式的装置。cmc还包括一种用于确定最频繁出现的模式是否存在于多个模式当中的装置。cmc另外包括一种用于响应于确定最频繁出现的模式存在于多个模式当中与同掩码相关联的前缀相关联而存储最频繁出现的模式和每个未分配输入字的未压缩数据部分的装置。cmc进一步包括一种用于响应于确定最频繁出现的模式存在于多个模式当中而将与掩码相关联的前缀分配给对应于最频繁出现的模式的每个未分配输入字的装置。cmc还包括一种用于生成经压缩输出块的装置,所述经压缩输出块包括:分配给多个输入字的多个经分配前缀、各自与多个经分配前缀中的一个相关联的一或多个最频繁出现的模式以及多个输入字中的对应一或多个输入字的一或多个未压缩数据部分。

在另一方面中,提供一种用于实现数据块的高效无损压缩的方法。所述方法包括接收多个输入字。所述方法进一步包括针对多个掩码中的每个掩码将掩码应用到多个输入字中的每个未分配输入字以生成对应多个模式。所述方法还包括确定最频繁出现的模式是否存在于多个模式当中。所述方法另外包括:响应于确定最频繁出现的模式存在于多个模式当中,与同掩码相关联的前缀相关联而存储最频繁出现的模式和每个未分配输入字的未压缩数据部分。所述方法进一步包括将与掩码相关联的前缀分配给对应于最频繁出现的模式的每个未分配输入字。所述方法还包括生成经压缩输出块,所述经压缩输出块包括:分配给多个输入字的多个经分配前缀、各自与多个经分配前缀中的一个相关联的一或多个最频繁出现的模式以及多个输入字中的一或多个对应输入字的一或多个未压缩数据部分。

在另一方面中,提供一种其上存储有计算机可执行指令的非暂时性计算机可读介质。计算机可执行指令在由处理器执行时使处理器接收多个输入字。计算机可执行指令进一步使处理器针对多个掩码中的每个掩码将掩码应用到多个输入字中的每个未分配输入字以生成对应多个模式。计算机可执行指令还使处理器确定最频繁出现的模式是否存在于多个模式当中。计算机可执行指令另外使处理器响应于确定最频繁出现的模式存在于多个模式当中与同掩码相关联的前缀相关联而存储最频繁出现的模式和每个未分配输入字的未压缩数据部分。计算机可执行指令进一步使处理器将与掩码相关联的前缀分配给对应于最频繁出现的模式的每个未分配输入字。计算机可执行指令进一步使处理器生成经压缩输出块,所述经压缩输出块包括:分配给多个输入字的多个经分配前缀、各自与多个经分配前缀中的一个相关联的一或多个最频繁出现的模式以及多个输入字中的对应一或多个输入字的一或多个未压缩数据部分。

附图说明

图1是包含基于处理器的系统的示范性芯片上系统(soc)的示意图;

图2是包含示范性基于处理器的系统的soc的示意图,所述示范性基于处理器的系统具有多个中央处理单元(cpu)和被配置成实现存储器带宽压缩的经压缩存储器控制器(cmc);

图3是图2的cmc的更详细示意图,其中cmc进一步以通信方式耦合到可用以提供存储器带宽压缩的任选内部存储器;

图4是说明图2和3的cmc的示范性元件的图式,所述示范性元件用于实现对高速缓存线和其它相对小的数据块的高效无损压缩;

图5是说明可由图2、3和4的cmc使用以执行小数据块的无损压缩的示范性掩码表的图式;

图6a到6e是说明用于压缩输入数据字和生成经压缩输出块的图2、3和4的cmc的示范性操作的图式;

图7是说明用于将经压缩输入块解压缩成经解压缩输出块的图2、3和4的cmc的示范性操作的图式;

图8a到8d是说明用于执行小数据块的无损压缩的图2、3和4的cmc的示范性操作的流程图;

图9是说明用于将经压缩输入块解压缩成经解压缩输出块的图2、3和4的cmc的示范性操作的流程图;以及

图10是可包含图2、3和4的cmc的示范性基于处理器的系统的框图。

具体实施方式

现参考各图,描述本公开的数个示范性方面。词语“示范性”在本文中用于意味着“充当实例、例子或说明”。本文中描述为“示范性”的任何方面不必解释为比其它方面优选或有利。

具体实施方式中所公开的方面包含实现基于处理器的系统中的小数据块的高效无损压缩。在此方面,在一些方面中,提供一种用于检测和编码相对小的数据块内的模式的经压缩存储器控制器。经压缩存储器控制器提供存储多个掩码的掩码表,所述多个掩码各自与前缀相关联。经压缩存储器控制器还包含模式识别电路和输出生成电路。

模式识别电路首先接收输入数据块,所述输入数据块包括待压缩的多个输入字。在示范性方面中,输入数据块可包括128字节线,所述128字节线包括各自为32位的32个输入字。模式识别电路接着通过掩码表中的掩码进行迭代,且在每次迭代期间,将掩码应用到输入字以生成多个模式(即,输入字的非掩码部分)。如果经生成模式当中的模式被识别为最频繁出现的模式,那么所述模式以及每个对应输入字的未压缩数据部分(即,输入字的被掩蔽以生成模式的部分)(如果存在的话)与同掩码相关联的前缀相关联而被输出到输出生成电路。对应于最频繁出现的模式的每个输入字被分配有对应于掩码的前缀,且模式识别电路将下一掩码应用到剩余未分配输入字。

模式识别电路将被分配给输入字中的每一个的前缀输出到输出生成电路。输出生成电路接着生成经压缩输出块,所述经压缩输出块包含每个输入字的经分配前缀,且还包含各自与经分配前缀相关联的一或多个频繁出现的模式,以及一或多个对应输入字的一或多个未压缩数据部分。

在更详细地论述用于实现对小数据块的高效无损压缩的操作之前,关于图1到3描述示范性基于处理器的系统及其元件。在此方面,图1是包含基于处理器的系统102的示范性芯片上系统(soc)100的示意图。在此实例中,基于处理器的系统102包含多个中央处理单元(cpu)块104(0)到104(n),其中‘n’等于所要任何数目的cpu块104(0)到104(n)。在图1的实例中,cpu块104(0)到104(n)中的每一个包含两个(2)cpu106(0)、106(1)。cpu块104(0)到104(n)进一步分别包含共享2级(l2)高速缓存108(0)到108(n)。还提供系统高速缓存110(例如,3级(l3)高速缓存)以用于存储由cpu块104(0)到104(n)中的任一个使用或在cpu块104(0)到104(n)中的每一个当中共享的高速缓存的数据。内部系统总线112被提供以使得cpu块104(0)到104(n)中的每一个能够存取系统高速缓存110以及其它共享资源。由cpu块104(0)到104(n)通过内部系统总线112存取的其它共享资源可包含存储器控制器114,所述存储器控制器114用于存取主外部存储器(例如,双速率动态随机存取存储器(dram)(ddr),作为非限制性实例)、外围设备116、其它存储装置118、快速外围组件互连(pci-e)接口120、直接存储器存取(dma)控制器122和/或集成存储器控制器(imc)124。

随着在图1中的基于处理器的系统102中执行的基于处理器的应用程序的复杂性和性能增加,对存储器带宽的限制可对基于处理器的系统102强加约束条件。如果对外部存储器的存取达到存储器带宽限制,那么可迫使基于处理器的系统102的存储器控制器114将存储器存取请求排成队列。存储器存取请求的此类排队列可增加存储器存取的等待时间,其反过来可降低基于处理器的系统102的性能。

为了解决这些问题,基于处理器的系统102的一些方面可提供经压缩存储器控制器(cmc),所述经压缩存储器控制器被配置成实现对待写入存储器阵列的数据的压缩,所述存储器阵列例如l2高速缓存108(0)到108(n)、系统高速缓存110和/或系统存储器。在此方面,图2是包含类似于图1中的基于处理器的系统102的具有多个cpu块104(0)到104(n)的基于处理器的系统202的soc200的示意图。图2中的基于处理器的系统202包含与图1中的基于处理器的系统102共同的一些组件,所述组件由图1和2之间的共同元件数字标注。出于简洁起见,这些元件将不再重新描述。然而,在图2中的基于处理器的系统202中,提供cmc204。cmc204控制对系统存储器206的存取。作为非限制性实例,系统存储器206可包括一或多个ddrdram208(0)到208(r)(在下文中被称为“dram208(0)到208(r)”)。在此实例中,cmc204采用根据本文中和下文所公开的方面的存储器带宽压缩。类似于图1的基于处理器的系统102的存储器控制器114,

图2中的基于处理器的系统202中的cmc204由cpu块104(0)到104(n)通过内部系统总线112共享。

图2的基于处理器的系统202可涵盖已知数字逻辑元件、半导体电路、处理核心和/或存储器结构以及其它元件中的任一个,或其组合。本文中所描述的各方面并不限于任何特定元件布置,且所公开的技术可容易地延伸到半导体裸片或封装上的各种结构和布局。应理解,基于处理器的系统202的一些方面可包含除图2中所说明的那些元件之外的元件。

图3中提供图2中的cmc204的示范性内部组件的更详细示意图。在此实例中,cmc204设置在与包含图2中的cpu块104(0)到104(n)的半导体裸片302(0)、302(1)分开的半导体裸片300上。替代地,在一些方面中,cmc204可包含在与cpu块104(0)到104(n)共同的半导体裸片(未示出)中。不管裸片配置如何,提供cmc204,使得cpu块104(0)到104(n)可经由内部系统总线112向cmc204做出存储器存取请求,且通过cmc204从存储器接收数据。

继续参考图3,cmc204控制对系统存储器206的存储器存取的操作,系统存储器206在图2和3中被示出为包括dram208(0)到208(r)。cmc204包含用于服务存储器存取请求的多个存储器接口(memi/f)304(0)到304(p)(例如,ddrdram接口)。在此方面,cmc204在此实例中包含压缩控制器306。压缩控制器306响应于来自cpu块104(0)到104(n)的存储器存取请求而控制存储到系统存储器206的数据的压缩和从系统存储器206检索的数据的解压缩。压缩控制器306还可被配置成执行在内部系统总线112上提供到cpu块104(0)到104(n)的信息的带宽压缩。

为压缩控制器306所需的数据结构和其它信息提供本地存储器308以执行压缩技术和算法。在此方面,按静态随机存取存储器(sram)310的形式提供本地存储器308。本地存储器308具有待用于数据结构和压缩控制器306执行压缩技术和算法可需要的其它数据存储装置的足够大小。本地存储器308还可被分区以包含高速缓存,例如4级(l4)高速缓存,以提供额外高速缓存存储器以供cmc204内的内部使用。因此,l4控制器312还可设置在cmc204中以实现对l4高速缓存的存取。增强压缩技术和算法可能需要更大内部存储器。举例来说,本地存储器308可提供128千字节(kb)的存储器。

此外,如图3中所示出,还可为cmc204提供任选的额外内部存储器314。作为一实例,额外内部存储器314可被设置为dram。额外内部存储器314可促进额外的或比用于cmc204的本地存储器308中更大的量的数据结构和其它数据的存储,所述cmc204提供存储器带宽压缩和解压缩机构来增加基于处理器的系统202的存储器带宽压缩。一些方面可在cmc204中提供内部存储器控制器316以控制对额外内部存储器314的存储器存取。在此类方面中,内部存储器控制器316不可被cpu块104(0)到104(n)存取或观察。

图3中的cmc204中所提供的资源中的每一个,包含本地存储器308和额外内部存储器314,可个别地或彼此结合使用以实现资源和区域、功率消耗、增加的存储器容量和增加的性能当中的所要平衡。此外,上文描述用于由cmc204使用的资源可被启用或停用以实现效率、功率消耗和性能当中的所要权衡。

为了说明用于实现对小数据块的高效无损压缩的图2和3的cmc204的示范性元件,提供图4。如图4中所见,基于处理器的系统202包含cmc204和存储器阵列400。在一些方面中,存储器阵列400可包括:高速缓存,例如l2高速缓存108(0)到108(n)和/或图1的系统高速缓存110;图2的系统存储器206;和/或图3的本地存储器308和/或内部存储器314,作为非限制性实例。cmc204提供掩码表402,多个掩码(未示出)和相关联前缀(未示出)存储在所述掩码表402中。cmc204进一步包括模式识别电路404和输出生成电路406。模式识别电路404被配置成:接收包括多个输入字(未示出)的未压缩输入块408;将来自掩码表402的掩码应用到输入字以生成模式;识别每个掩码的最频繁出现的模式;和将输入字压缩成对应于掩码的前缀和未压缩数据部分。输出生成电路406接着将经压缩数据汇编成经压缩输出块410。下文关于图5更详细地描述掩码表402的结构和内容,且下文关于图6a到6e更详细地论述由模式识别电路404和输出生成电路406执行以用于执行未压缩输入块408的无损压缩的示范性操作。

图5说明可由图2、3和4的cmc204使用以用于执行小数据块的无损压缩的图4的掩码表402的示范性方面。出于说明起见,在图5的实例中假设掩码表402用于编码32位输入字。如图5中所见,掩码表402包含多个前缀500(0)到500(7),所述多个前缀500(0)到500(7)中的每一个包括范围为零(0)到七(7)的三(3)位值。应理解,在一些方面中,前缀500(0)到500(7)中的每一个可包括比图5中所示出的更多或更少的位,从而导致比图5中所示出的八个(8)更多或更少的前缀500(0)到500(7)。

掩码表402进一步包含多个掩码502(0)到502(5),所述多个掩码502(0)到502(5)中的每一个分别与前缀500(2)到500(7)相关联,且所述多个掩码502(0)到502(5)中的每一个包括32位掩码值。如图5中所见,掩码502(0)到502(5)被选择,使得掩码502(0)到502(5)中的连续掩码掩蔽使用逻辑“与”运算将掩码502(0)到502(5)应用到的输入字的愈发更大部分。举例来说,掩码502(1),其具有十六进制值0xfffffff0,将掩蔽掩码502(1)应用到的输入字的下部四个(4)位,而具有十六进制值0xffffff00的掩码502(2)将掩蔽输入字的下部八个(8)位,等等。如本文中所使用,术语“未压缩数据部分”指代输入字的被给定掩码502(0)到502(5)掩蔽的下部位,而术语“模式”是指被掩码502(0)到502(5)留下的剩余上部位。因此,如果具有十六进制值0xffff0000的掩码502(4)被应用到具有十六进制值0x1234abcd的输入字,那么输入字的所得模式将为值0x1234,而输入字的未压缩数据部分将为值0xabcd。

应注意,在图5中所示出的方面中,前缀500(0)和500(1)不与掩码相关联。实际上,前缀500(0)用于指示其被分配给的输入字是未压缩的(好像具有十六进制值0x00000000的掩码502被应用到输入字)。前缀500(1)用于指示其被分配给的输入字的值为零(0)。

图5进一步说明由于前缀500(0)到500(7)和掩码表402的掩码502(0)到502(5)的使用而产生的所得模式大小504(0)到504(5)和所得未压缩数据部分大小506(0)到506(7)。前缀500(0),其指示未压缩输入字,与32位所得未压缩数据部分大小506(0)(即,整个输入字)相关联。相反地,指示值为零(0)的输入字的前缀500(1)与零(0)位所得未压缩数据部分大小506(1)相关联(即,仅前缀500(1)需要按次序存储以压缩输入字)。如图5中所见,由掩码502(0)生成的所得模式大小504(0)为32位,而由掩码502(0)生成的所得未压缩数据部分大小506(2)为零(0)位。这是因为将具有十六进制值0xffffffff的掩码502(0)应用到输入字会导致整个输入字被用作模式。图5中所示出的每个后续掩码502(1)到502(5)生成比先前所得模式大小504(0)到504(4)小四(4)位的所得模式大小504(1)到504(5),以及比先前所得未压缩数据部分大小506(2)到506(6)大四(4)位的所得未压缩数据部分大小506(3)到506(7)。

应理解,在一些方面中,掩码502(0)到502(5)的值可不同于图5中所示出的那些,且可基于频繁遇到的输入字值和/或预期输入字值进行选择。根据一些方面,掩码502(0)到502(5)中的一或多个可生成与由先前或后续掩码502(0)到502(5)生成的模式具有相同大小的所得模式。作为非限制性实例,两个(2)连续掩码502(0)到502(5)可各自生成具有32位大小的所得模式。

图2、3和4的cmc204采用图5的前缀500(0)到500(7)和掩码502(0)到502(5)以执行输入字的无损压缩。在此方面,图6a到6e被提供以说明用于压缩输入数据字和生成经压缩输出块410的图4的模式识别电路404和输出生成电路406的示范性操作。如图6a中所见,未压缩输入块408,其由模式识别电路404接收,包括多个输入字600(0)到600(x)。在一些方面中,输入字600(0)到600(x)可包括32个输入字,所述32个输入字的大小各自为32位。出于说明的目的,图6a到6d说明被处理成概念性经压缩输出块602的未压缩输入块408,所述概念性经压缩输出块602示出输入字600(0)到600(x)与其经压缩形式之间的关系。概念性经压缩输出块602接着被重新组织成实际经压缩输出块410,如图6e中所示出。虽然在图6a到6e中未示出,但是此处理和重新组织可包含中间存储装置的使用,所述中间存储装置例如临时缓冲器、寄存器、存储器等。

根据一些方面,模式识别电路404可首先查找值为零(0)的任何输入字600(0)到600(x)。那些输入字600(0)到600(x)分配有指示所有零(0)值的前缀500(1)。在图6a的实例中,模式识别电路404识别值为零(0,或十六进制值0x00000000)的输入字600(3),且将输入字600(3)与值为1的经分配前缀604(3)(对应于掩码表402的前缀500(1)相关联。因为输入字600(3)的值为零(0),所以不必存储除经分配前缀604(3)外的任何信息以压缩输入字600(3)。

现在参考图6b,模式识别电路404接下来开始将掩码表402的掩码502(0)到502(5)中的每一个按顺序应用到未分配输入字600(0)到600(2)和600(4)到600(x)的过程。应注意,输入字600(3),其已经与经分配前缀604(3)相关联,被排除在进一步处理之外。在图6b中,模式识别电路404首先将值为0xffffffff的掩码502(0)应用到未分配输入字600(0)到600(2)和600(4)到600(x)以生成多个经生成模式606(0)到606(6)。因为掩码502(0)具有十六进制值0xffffffff,所以经生成模式606(0)到606(6)中的每一个与对应输入字600(0)到600(2)、600(4)到600(x)具有相同值。因此,经生成模式606(0)具有十六进制值0xaeb0e67d,经生成模式606(1)具有十六进制值0x9c06f5a9等。

模式识别电路404接下来确定最频繁出现的模式是否存在于经生成模式606(0)到606(6)当中。在一些方面中,经生成模式606(0)到606(6)不被认为是最频繁出现的模式,除非其在经生成模式606(0)到606(6)当中至少出现两次。一些方面可提供:如果多于一个频繁出现的模式被识别(即,经生成模式606(0)到606(6)中的两个或多于两个重复出现且出现相同次数),那么模式识别电路404可随机地或根据任意标准选择频繁出现的模式中的一个。在图6b的实例中,模式识别电路404确定最频繁出现的模式是十六进制值0x8ffbc3ca,所述最频繁出现的模式在分别对应于输入字600(2)和600(6)的经生成模式606(2)和606(5)中出现。因此,模式识别电路404将输入字600(2)和600(6)与经分配前缀604(2)和604(6)相关联,所述经分配前缀604(2)和604(6)各自的值为2(对应于掩码表402的前缀500(2))。模式识别电路404还将经生成模式606(2)、606(5)的值与前缀500(2)相关联而存储为最频繁出现的模式608(0)。

操作接着在图6c中继续,其中模式识别电路404将具有十六进制值0xfffffff0的下一掩码502(1)应用到未分配输入字600(0)、600(1)、600(4)、600(5)和600(x)。掩码502(1)用以掩蔽输入字600(0)、600(1)、600(4)、600(5)和600(x)中的每一个的下部四个(4)位,从而产生各自具有28位长度的经生成模式606(0)到606(4)。因此,经生成模式606(0)具有十六进制值0xaeb0e67,经生成模式606(1)具有十六进制值0x9c06f5a等。

模式识别电路404接着确定最频繁出现的模式是否存在于经生成模式606(0)到606(4)当中。在图6c的实例中,经生成模式606(0)、606(2)和606(4)具有十六进制值0xaeb0e67,而经生成模式606(1)和606(3)两者具有十六进制值0x9c06f5a。因此,模式识别电路404将对应于输入字600(0)、600(4)和600(x)的经生成模式606(0)、606(2)和606(4)识别为最频繁出现的模式。如图6c中所见,模式识别电路404将输入字600(0)、600(4)和600(x)分别与经分配前缀604(0)、604(4)和604(x)相关联,其中经分配前缀604(0)、604(4)和604(x)中的每一个的值为3(对应于掩码表402的前缀500(3))。还存储输入字600(0)、600(4)和600(x)的在生成经生成模式606(0)到606(4)时被掩码502(1)掩蔽的部分,其中经分配前缀604(0)、604(4)和604(x)作为未压缩数据部分610(0)、610(2)和610(4)。举例来说,未压缩数据部分610(0)具有十六进制值0xd,对应于输入字600(0)的十六进制值0xaeb0e67d的被掩码502(1)掩蔽的下部四个(4)位的值。最后,模式识别电路404将经生成模式606(0)、606(2)、606(4)的值与前缀500(3)相关联而存储为最频繁出现的模式608(1)。

现在参考图6d,模式识别电路404通过将具有十六进制值0xffffff00的掩码502(2)应用到剩余未分配输入字600(1)和600(5)而继续。经生成模式606(0)和606(1)通过以下方式产生:使用掩码502(2)掩蔽输入字600(1)、600(5)中的每一个的下部八个(8)位,从而产生十六进制值0x9c06f5。由于对应于输入字600(1)、600(5)的经生成模式606(0)和606(1)具有相同值,模式识别电路404将经生成模式606(0)、606(1)识别为最频繁出现的模式。因此,模式识别电路404将输入字600(1)和600(5)分别与经分配前缀604(1)和604(5)相关联,其中经分配前缀604(1)和604(5)中的每一个的值为4(对应于掩码表402的前缀500(4))。还存储输入字600(1)和600(5)的在生成经生成模式606(0)、606(1)时被掩码502(2)掩蔽的八(8)位部分,其中经分配前缀604(1)和604(5)作为未压缩数据部分610(1)和610(3)。在图6d的实例中,未压缩数据部分610(1)具有十六进制值0xa9,对应于输入字600(1)的十六进制值0x9c06f5a9的被掩码502(2)掩蔽的下部四个(8)位的值。同样地,未压缩数据部分610(3)具有十六进制值0xa8,对应于输入字600(5)的十六进制值0x9c06f5a8的下部四个(8)位的值。模式识别电路404另外将经生成模式606(0)、606(1)的值与前缀500(4)相关联而存储为最频繁出现的模式608(2)。

模式识别电路404以此方式通过将剩余掩码502(3)到502(5)按顺序应用到任何未分配输入字600(0)到600(x)而继续处理。对于掩码502(3)到502(5)中的每一个,模式识别电路404试图识别最频繁出现的模式(如果存在的话)。如果成功,那么模式识别电路404针对对应于最频繁出现的模式的每个输入字600(0)到600(x)存储经分配前缀604(0)到604(x)和未压缩数据部分610,而且还与经分配前缀604(0)到604(x)相关联而存储最频繁出现的模式。

在一些方面中,在所有掩码502(0)到502(5)已被处理之后,模式识别电路404可确定输入字600(0)到600(x)中是否有任何输入字仍然未被分配给前缀500(1)到500(7)。如果是,那么模式识别电路404将指示未压缩字的前缀500(0)分配给那些未分配输入字600(0)到600(x)。模式识别电路404还将每个未分配输入字600(0)到600(x)的整个值与前缀500(0)相关联而存储为输入字600(0)到600(x)的未压缩数据部分610。

在图6a到6d中所说明的操作期间,模式识别电路404可将概念性经压缩输出块602中所示出的数据中的一些或全部输出到输出生成电路406。在所有掩码502(0)到502(5)和输入字600(0)到600(x)已被处理之后(或与此类处理同时),输出生成电路406将经生成数据组织成经压缩输出块410。在此方面,图6e说明经压缩输出块410的示范性格式。在图6e中,经分配前缀604(0)到604(x),其各自对应于输入字600(0)到600(x)中的一个,首先定位在经压缩输出块410中(从最右侧开始且向左继续)。在一些方面中,经压缩输出块410接下来可包含一组标志指示器612(0)到612(5),所述一组标志指示器612(0)到612(5)各自对应于前缀500(2)到500(7)中的一个。标志指示器612(0)到612(5)中的每一个由输出生成电路406设定以指示使用对应于标志指示器612(0)到612(5)的前缀500(2)到500(7)生成的最频繁出现的模式608(0)到608(2)是否存在于经压缩输出块410中。举例来说,如果特定最频繁出现的模式608(0)到608(2)全部为零(0),那么可通过将对应标志指示器612(0)到612(5)设定为零(0)和从经压缩输出块410省略全部为零的最频繁出现的模式608(0)到608(2)而实现更高压缩水平。

接下来,由待包含在经压缩输出块410中的模式识别电路404识别的最频繁出现的模式608(0)到608(2)在经压缩输出块410中。这些经压缩输出块410后面跟着未压缩数据部分610(0)到610(4)。应注意,虽然输入字600(0)到600(x)中的每一个具有对应经分配前缀604(0)到604(x),但是输入字600(0)到600(x)中的一些可能没有对应未压缩数据部分610(0)到610(4)。举例来说,值为零(0)或被分配给掩码502(0)的输入字600(0)到600(x)不需要将额外未压缩数据存储在经压缩输出块410内。

在一些方面中,在生成经压缩输出块410之后,输出生成电路406可将经压缩输出块410的大小与指定阈值进行比较以确定输入字600(0)到600(x)的压缩是否被视为成功的。举例来说,在处理具有1024位总大小的一组输入字600(0)到600(x)时,输出生成电路406可将经压缩输出块410的大小与513位指定阈值进行比较。如果经压缩输出块410小于指定阈值,那么输出生成电路406可确定压缩是成功的,且可将经压缩输出块410存储在存储器阵列400中。然而,如果经压缩输出块410不小于指定阈值,那么输出生成电路406可确定压缩不成功,且因此可将原始未压缩输入字600(0)到600(x)存储在存储器阵列400中。

如上文所论述,cmc204的一些方面还可提供用于接收经压缩输入块414和生成经解压缩输出块416的解压缩电路412。在此方面,提供图7以说明用于执行解压缩的示范性操作。出于清楚起见,假设解压缩电路412接收与图6e的经压缩输出块410具有相同格式和内容的经压缩输入块414作为输入。因此,经压缩输入块414包含一组前缀700(0)到700(x)、一组标志702(0)到702(5)、一组模式704(0)到704(2)和一组未压缩数据部分706(0)到706(4)。

为了解压缩经压缩输入块414,解压缩电路412按顺序处理前缀700(0)到700(x)中的每一个以生成经解压缩输出字710(0)到710(x)。对于值为一(1)的对应于指示零(0)值的图5的前缀500(1)的前缀700(0)到700(x),解压缩电路412可在不进行进一步计算的情况下生成对应经解压缩输出字710(0)到710(x)。否则,针对每个前缀700(0)到700(x),解压缩电路412生成指示对应未压缩数据部分706(0)到706(4)存储在经压缩输入块414内的何处的偏移708。在一些方面中,基于针对先前处理的前缀700(0)到700(x)确定模式704(0)到704(2)的大小和先前处理的未压缩数据部分706(0)到706(4)的大小而生成偏移708。

在图7的实例中,生成前缀700(4)的偏移708,所述偏移708指示具有十六进制值0xc的未压缩数据部分706(2)的位置。还针对前缀700(4)检索模式704(1),其具有十六进制值0xaeb0e67。这些模式被组合以生成具有十六进制值0xaeb0e67c的经解压缩输出字710(4)。针对其它前缀700(0)到700(x)执行类似处理,从而产生与图6a到6d的未压缩输入块408具有相同值的经解压缩输出块416。

为了说明用于执行小数据块的无损压缩的图2、3和4的cmc204的示范性操作,提供图8a到8d。为清楚起见,在描述图8a到8d时参考图4、5和6a到6e的元件。在图8a中,处理开始于cmc204的模式识别电路404接收多个输入字600(0)到600(x)(框800)。在此方面,模式识别电路404在本文中可被称为“一种用于接收多个输入字的装置”。在一些方面中,多个输入字600(0)到600(x)可包括32个输入字600(0)到600(x),所述32个输入字600(0)到600(x)各自的大小为32位。

在一些方面中,模式识别电路404接下来可确定多个输入字600(0)到600(x)的一或多个输入字600(0)到600(x)的值是否为零(0)(框802)。如果多个输入字600(0)到600(x)中没有输入字的值为零(0),那么处理在图8b的框804处重新开始。然而,如果模式识别电路404在决策框802处确定多个输入字600(0)到600(x)中的一或多个输入字600(0)到600(x)的值为零(0),那么模式识别电路404将指示零(0)值的前缀500(1)分配给多个输入字600(0)到600(x)中的一或多个输入字600(0)到600(x)中的值为零(0)的每个输入字600(0)到600(x)(框806)。处理接着在图8b的框804处继续。

现在参考图8b,模式识别电路404针对多个掩码502(0)到502(5)中的每个掩码502(0)到502(5)执行一系列操作(框804)。模式识别电路404首先将掩码502(0)到502(5)应用到多个输入字600(0)到600(x)中的每个未分配输入字600(0)到600(x)以生成对应多个模式606(0)到606(6)(框808)。因此,模式识别电路404在本文中可被称为“一种针对多个掩码中的每个掩码的将掩码应用到多个输入字中的每个未分配输入字以生成对应多个模式的装置”。模式识别电路404接着确定最频繁出现的模式608(0)到608(2)是否存在于多个模式606(0)到606(6)当中(框810)。模式识别电路404因此在本文中可被称为“一种用于确定最频繁出现的模式是否存在于多个模式当中的装置”。如果不存在最频繁出现的模式608(0)到608(2)(例如,在一些方面中,没有经生成模式606(0)到606(6)出现至少两次),那么处理在框812处重新开始。

然而,如果模式识别电路404在决策框810处确定最频繁出现的模式608(0)到608(2)存在,那么模式识别电路404与同掩码502(0)到502(5)相关联的前缀500(2)到500(7)相关联而存储最频繁出现的模式608(0)到608(2)和每个未分配输入字600(0)到600(x)的未压缩数据部分601(0)到601(4)(框814)。在此方面,模式识别电路404在本文中可被称为“一种用于响应于确定最频繁出现的模式存在于多个模式当中与同掩码相关联的前缀相关联而存储最频繁出现的模式和每个未分配输入字的未压缩数据部分的装置”。模式识别电路404接着将与掩码502(0)到502(5)相关联的前缀500(2)到500(7)分配给对应于最频繁出现的模式608(0)到608(2)的每个未分配输入字600(0)到600(x)(框816)。因此,模式识别电路404在本文中可被称为“一种用于响应于确定最频繁出现的模式存在于多个模式当中而将与掩码相关联的前缀分配给对应于最频繁出现的模式的每个未分配输入字的装置”。模式识别电路404接着进行到下一掩码502(0)到502(5)以进行处理(框812)。在所有掩码502(0)到502(5)已被模式识别电路404处理之后,处理在图8c的框818处重新开始。

现在转向图8c,模式识别电路404的一些方面可确定一或多个未分配输入字600(0)到600(x)(即,未分配有图8a的框806中的前缀500(1)或图8b的框804中的前缀500(2)到500(7)中的一个的输入字600(0)到600(x))存在于多个输入字600(0)到600(x)内(框818)。如果不存在未分配输入字600(0)到600(x),那么处理在框820处重新开始。然而,如果模式识别电路404在决策框818处确定一或多个未分配输入字600(0)到600(x)存在于多个输入字600(0)到600(x)内,那么模式识别电路404与指示未压缩输入字600(0)到600(x)的前缀500(0)相关联而将一或多个未分配输入字600(0)到600(x)中的每个未分配输入字600(0)到600(x)的值存储为未分配输入字600(0)到600(x)的未压缩数据部分610(0)到610(4)(框822)。

cmc204的输出生成电路406接着生成经压缩输出块410,所述经压缩输出块410包括:分配给多个输入字600(0)到600(x)的多个经分配前缀604(0)到604(x)、各自与多个经分配前缀604(0)到604(x)中的一个相关联的一或多个最频繁出现的模式608(0)到608(2)以及多个输入字600(0)到600(x)中的对应一或多个输入字600(0)到600(x)的一或多个未压缩数据部分610(0)到610(4)(框820)。输出生成电路406因此在本文中可被称为“一种用于生成经压缩输出块的装置,所述经压缩输出块包括:分配给多个输入字的多个经分配前缀;各自与多个经分配前缀中的一个相关联的一或多个最频繁出现的模式;以及多个输入字中的对应一或多个输入字的一或多个未压缩数据部分”。在一些方面中,用于生成经压缩输出块410的框820的操作可包含生成经压缩输出块410以包含多个标志指示器612(0)到612(5),所述多个标志指示器612(0)到612(5)对应于多个经分配前缀604(0)到604(x)且指示经压缩输出块410的一或多个最频繁出现的模式608(0)到608(2)是否包含与对应经分配前缀604(0)到604(x)相关联的最频繁出现的模式608(0)到608(2)(框824)。处理接着在图8d的框826处重新开始。

如图8d中所见,输出生成电路406的一些方面可确定经压缩输出块410的大小是否小于指定阈值(框826)。作为非限制性实例,如果输入字600(0)到600(x)的总大小为1024位,那么输出生成电路406可确定经压缩输出块410是否小于513位指定阈值。如果输出生成电路406在决策框826处确定经压缩输出块410的大小小于指定阈值,那么输出生成电路406可将经压缩输出块410存储在存储器阵列400中(框828)。然而,如果在决策框826处确定经压缩输出块410的大小不小于指定阈值,那么输出生成电路406可将多个输入字600(0)到600(x)(即,原始未压缩输入数据)存储在存储器阵列400中(框830)。

如上文所论述,cmc204的一些方面还可提供解压缩电路412以用于将经压缩输入块414解压缩成经解压缩输出块416。在此方面,图9说明根据一些方面的用于执行解压缩的图2、3和4的cmc204的示范性操作。出于清楚起见,在描述图9时参考图4和7的元件。图9中的操作开始于解压缩电路412接收经压缩输入块414,所述经压缩输入块414包括多个前缀700(0)到700(x),以及针对表示非零输入字600(0)到600(x)的每个前缀700(0)到700(x),包括模式704(0)到704(2)和与前缀700(0)到700(x)相关联的未压缩数据部分706(0)到706(4)(框900)。解压缩电路412接着对表示非零输入字600(0)到600(x)的多个前缀700(0)到700(x)中的每个前缀700(0)到700(x)执行一系列操作(框902)。解压缩电路412首先基于前缀700(0)到700(x)计算与对应未压缩数据部分706(0)到706(4)的偏移708(框904)。解压缩电路412接着基于偏移708检索对应未压缩数据部分706(0)到706(4)(框906)。解压缩电路412基于对应于前缀700(0)到700(x)的模式704(0)到704(2)和对应未压缩数据部分706(0)到706(4)生成经解压缩输出字710(0)到710(x)(框908)。解压缩电路412接着生成包括一或多个经解压缩输出字710(0)到710(x)的经解压缩输出块416(框910)。

根据本文中所公开的各方面的实现对基于处理器的系统中的小数据块的高效无损压缩可设置在或整合到任何基于处理器的装置中。实例包含但不限于机顶盒、娱乐单元、导航装置、通信装置、固定位置数据单元、移动位置数据单元、移动电话、蜂窝电话、智能电话、平板计算机、平板手机、服务器、计算机、便携式计算机、桌上型计算机、个人数字助理(pda)、监视器、计算机监视器、电视机、调谐器、广播、卫星广播、音乐播放器、数字音乐播放器、便携式音乐播放器、数字视频播放器、视频播放器、数字视频光盘(dvd)播放器、便携式数字视频播放器和汽车。

在此方面,图10说明可采用图2、3和4中所说明的cmc204的基于处理器的系统1000的实例。基于处理器的系统1000包含一或多个cpu1002,所述一或多个cpu1002各自包含一或多个处理器1004。cpu1002可具有耦合到处理器1004以便于快速存取临时存储的数据的高速缓存存储器1006。cpu1002耦合到系统总线1008且可使包含在基于处理器的系统1000中的主装置和从属装置互相耦合。如所熟知,cpu1002通过在系统总线1008上交换地址、控制和数据信息而与这些其它装置通信。举例来说,cpu1002可将总线事务请求传达到作为从属装置的一实例的cmc204。

其它主装置和从属装置可连接到系统总线1008。如图10中所说明,这些装置可包含存储器系统1012、一或多个输入装置1014、一或多个输出装置1016、一或多个网络接口装置1018和一或多个显示控制器1020,作为实例。输入装置1014可包含任何类型的输入装置,包含但不限于输入密钥、开关、语音处理器等。输出装置1016可包含任何类型的输出装置,包含但不限于音频、视频、其它视觉指示器等。网络接口装置1018可为被配置成允许数据到网络1022和从网络1022的交换的任何装置。网络1022可为任何类型的网络,包含但不限于有线或无线网络、私用或公用网络、局域网(lan)、无线局域网(wlan)、广域网(wan)、bluetoothtm网络和因特网。网络接口装置1018可被配置成支持所要的任何类型的通信协议。存储器系统1012可包含一或多个存储器单元1024(0)到1024(n)。

cpu1002还可被配置成在系统总线1008上存取显示器控制器1020以控制发送到一或多个显示器1026的信息。显示器控制器1020经由一或多个视频处理器1028将信息发送到显示器1026以待显示,所述一或多个视频处理器1028将待显示的信息处理成适合于显示器1026的格式。显示器1026可包含任何类型的显示器,包含但不限于阴极射线管(crt)、液晶显示器(lcd)、等离子显示器等。

所属领域的技术人员将进一步了解,结合本文中所公开的各方面所描述的各种说明性逻辑块、模块、电路和算法可被实施为电子硬件、存储在存储器或另一计算机可读介质中且由处理器或其它处理装置执行的指令,或这两者的组合。作为实例,本文中所描述的主装置和从属装置可用于任何电路、硬件组件、集成电路(ic)或ic芯片中。本文中所公开的存储器可为任何类型和大小的存储器,且可被配置成存储所要的任何类型的信息。为清楚说明此可互换性,上文已大体上关于其功能性而描述了各种说明性组件、块、模块、电路和步骤。如何实施此功能性取决于特定应用、设计选项和/或强加于整个系统的设计约束。所属领域的技术人员可针对每一特定应用以不同方式来实施所描述的功能性,但这样的实施决策不应被解释为会引起脱离本公开的范围。

结合本文中所公开的各方面所描述的各种说明性逻辑块、模块和电路可用以下各项来实施或执行:处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或其它可编程逻辑装置、离散门或晶体管逻辑、离散硬件组件,或其被设计成执行本文中所描述的功能的任何组合。处理器可为微处理器,但在替代方案中,处理器可为任何常规处理器、控制器、微控制器或状态机。处理器也可被实施为计算装置的组合(例如,dsp和微处理器的组合、多个微处理器、与dsp核心结合的一或多个微处理器,或任何其它此类配置)。

本文中所公开的各方面可以硬件和存储在硬件中的指令来体现,且可驻存于例如随机存取存储器(ram)、快闪存储器、只读存储器(rom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)、寄存器、硬盘、可装卸式磁盘、cd-rom或所属领域中已知的任何其它形式的计算机可读介质中。示范性存储介质耦合到处理器,使得处理器可从存储介质读取信息且将信息写入所述存储介质。在替代方案中,存储介质可与处理器成一体。处理器和存储介质可驻存在asic中。asic可驻存在远程站中。在替代方案中,处理器和存储介质可作为离散组件驻存在远端台、基站或服务器中。

还应注意,描述本文中的示范性方面中的任一个中所描述的操作步骤是为了提供实例和论述。可用除了所说明的序列之外的大量不同序列执行所描述的操作。此外,在单个操作步骤中描述的操作实际上可在数个不同步骤中执行。此外,可组合在示范性方面中所论述的一或多个操作步骤。应理解,如所属领域的技术人员将易于显而易见,流程图中所说明的操作步骤可经受大量不同修改。所属领域的技术人员还将了解,可使用多种不同技术和技法中的任一个来表示信息和信号。举例来说,可通过电压、电流、电磁波、磁场或磁粒子、光场或光粒子或其任何组合来表示在整个上文描述中可能参考的数据、指令、命令、信息、信号、位、符号和芯片。

提供本公开的先前描述以使得所属领域的技术人员能够制造或使用本发明。所属领域的技术人员将易于显而易见对本公开的各种修改,且本文中所定义的一般原理可应用于其它变化形式而不会脱离本公开的精神或范围。因此,本公开并不希望限于本文中所描述的实例和设计,而应被赋予与本文中所公开的原理和新颖特征相一致的最广范围。

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