数据压缩的制作方法
【专利说明】数据压缩
【背景技术】
[0001] 在数据将被存储在存储器中和/或从存储器被读取的许多应用中,无损的和有损 的数据压缩两者都是值得要的。通过在将数据存储在存储器中之前压缩数据,可以减少传 送至存储器的数据量。数据压缩特别有用的数据的一种示例是图像数据,诸如将被存储在 深度缓冲器中的深度数据、将被存储在帧缓冲器中的像素数据、以及将被存储在纹理缓冲 器中的纹理数据。这些缓冲器可以是任何适当类型的存储器,诸如缓存存储器、分离的存储 器子系统、共享存储器系统中的存储器区域、或者它们的某种组合。
[0002] 图形处理单元(GPU)可以被用来处理图像数据,以便确定将被存储在帧缓冲器中 以用于输出至显示器的图像的像素值。GPU通常具有用于并行处理大块数据的高度并行化 结构。使得GPU (尤其是意图在移动设备上实施的那些GPU)在较低的功率电平处进行操作 存在着显著的商业压力。与之相抵触的是,在更快的GPU上使用更高质量的渲染算法的要 求,这由此对相对有限的资源:存储器带宽施加了压力。然而,增加存储器子系统的带宽可 能不是有吸引力的解决方案,因为向GPU移动数据和从GPU移动数据以及甚至在GPU内移 动数据,消耗了 GPU的显著一部分的功率预算。除了 GPU之外,相同的问题可能也与中央处 理单元(CPU)有关。
[0003] 如上文所描述的,减少传送至存储器的数据量的一种方式是压缩将向存储器传送 和从存储器传送的数据。用于数据被压缩和解压缩所花费的时间增加到存储器读取操作和 写入操作的时延,并且因此可能影响GPU工作的速度。此外,可以准许数据被压缩的速率不 同于经压缩的数据被解压缩的速率。作为一个示例,经常可以准许用于压缩纹理数据的压 缩过程(其通常为有损的压缩过程)显著地慢于用于解压缩经压缩的纹理数据的解压缩过 程。相对照地,用于压缩用于存储在深度缓冲器中的深度数据或者用于存储在帧缓冲器中 的像素数据的压缩过程(其通常为无损的压缩过程)理想地应当以与对应的解压缩过程近 似相同的速率来加以执行。GB2451911公开了一种能够压缩二维数据集合的图形渲染系统。
【发明内容】
[0004] 本概述被提供用以采用简化形式来介绍对下文在详细描述中进一步描述的概念 的选择。本概述不意图为识别所要求保护的主题的关键特征或者必要特征,也不意图用来 限制所要求保护的主题的范围。
[0005] 提供了一种在空间解相关模块处作为数据压缩过程的一部分对数据值的块执行 空间解相关的方法,所述块中的所述数据值被布置到二维阵列中,其中所述空间解相关模 块包括每个都包括第一级和第二级的多个并行的处理管线,其中所述处理管线的所述第一 级被配置为在第一维度中实施第一空间解相关,并且其中所述处理管线的所述第二级被配 置为在第二维度中实施第二空间解相关,所述方法在多次迭代中的每次迭代中包括步骤: 在所述处理管线中的每个处理管线的第一级处,从来自所述块的数据值的第一排接收所述 数据值中的一个或多个数据值;在所述处理管线的第一级处对所接收的数据值在第一维度 中实施第一空间解相关,以由此从所述处理管线中的每个处理管线的第一级向所述处理管 线的对应的第二级输出用于所述第一排的数据值中的相应一个数据值的第一系数;选择性 地将用于所述第一排的所述第一系数存储在所述处理管线的第二级的相应的存储单元中; 以及针对在前次迭代中为其执行所述第一空间解相关的第二排,在所述处理管线的所述第 二级处对第一系数在第二维度中实施第二空间解相关,以由此从所述处理管线中的每个处 理管线的第二级输出用于所述第二排的数据值中的相应一个数据值的第二系数,其中所述 第二系数是经空间解相关的数据值,其中选择性地存储所述第一系数包括:如果用于所述 第一排的所述第一系数将被使用用于在后次迭代时针对所述块的另一排的第二空间解相 关,则将用于所述第一排的所述第一系数存储在所述相应的存储单元中,并且其中在所述 处理管线的所述第一级处以特定顺序来接收数据值的所述排,使得如果用于特定排的所述 第一系数将被使用用于针对另一排的第二空间解相关,则所述特定排的数据值在比所述另 一排的数据值在所述第一级处被接收的迭代更早的迭代中在所述第一级处被接收。可以提 供一种计算机可读存储介质,具有被编码在其上的计算机可读程序代码,该计算机可读程 序代码用于生成空间接相关模块,该空间接相关模块被配置为执行本文所描述的任何示例 的执行空间接相关方法。
[0006] 提供了一种空间解相关模块,被配置为作为数据压缩系统的一部分对数据值的块 执行空间解相关,其中所述块中的所述数据值被布置到二维阵列中,并且其中所述空间解 相关模块包括每个都包括第一级和第二级的多个并行的处理管线,其中所述处理管线的所 述第一级被配置为在第一维度中实施第一空间解相关,并且其中所述处理管线的所述第二 级包括相应的存储单元并且被配置为在第二维度中实施空间解相关,其中所述处理管线中 的每个处理管线的所述第一级被配置为,在多次迭代中的每次迭代中:( a)从来自所述块 的数据值的第一排接收所述数据值中的一个或多个数据值;(b)对所接收的数据值在第一 维度中实施第一空间解相关,以由此向所述处理管线的对应的第二级输出用于所述第一排 的数据值中的相应一个数据值的第一系数;并且其中所述处理管线中的每个处理管线的第 二级被配置为,在所述多次迭代中的每次迭代中:(a)选择性地将用于所述第一排的所述 第一系数存储在所述相应的存储单元中;以及(b)针对在前次迭代中为其执行所述第一空 间解相关的第二排,对第一系数在第二维度中实施第二空间解相关,以由此输出用于所述 第二排的数据值中的相应一个数据值的第二系数,其中所述第二系数是经空间解相关的数 据值,其中所述处理管线的所述第二级被配置为,如果用于所述第一排的所述第一系数将 被使用用于在后次迭代时针对所述块的另一排的第二空间解相关,则选择性地将用于所述 第一排的所述第一系数存储在所述相应的存储单元中,并且其中所述处理管线的所述第一 级被配置为,以特定顺序来接收数据值的所述排,使得如果用于特定排的第一系数将被使 用用于针对另一排的第二空间解相关,则所述特定排的数据值在比所述另一排的数据值在 所述第一级处被接收的迭代更早的迭代中在所述第一级处被接收。可以提供一种数据压缩 单元,包括根据本文所描述的任何示例的空间解相关模块。
[0007] 提供了一种在空间重相关模块处作为数据解压缩过程的一部分对经空间解相关 的数据值的块执行空间重相关的方法,所述块中的所述经空间解相关的数据值被布置到二 维阵列中,其中所述空间重相关模块包括每个都包括第一级和第二级的多个并行的处理管 线,其中所述处理管线的所述第一级被配置为在第一维度中实施第一空间重相关,并且其 中所述处理管线的所述第二级被配置为在第二维度中实施第二空间重相关,所述方法在多 次迭代中的每次迭代中包括步骤:在所述处理管线中的每个处理管线的第一级处,从所述 块的经空间解相关的数据值的第一排接收所述经空间解相关的数据值中的相应的一个经 空间解相关的数据值;在所述处理管线的所述第一级处对所接收的经空间解相关的数据值 在第一维度中实施第一空间重相关,以由此从所述处理管线中的每个处理管线的所述第一 级输出用于所述第一排的经空间解相关的数据值中的相应的一个经空间解相关的数据值 的第一系数;选择性地将用于所述第一排的所述第一系数存储在所述处理管线的所述第一 级的相应的存储单元中;以及针对在前次迭代中为其执行第一空间重相关的第二排,在所 述处理管线的所述第二级处对第一系数在第二维度中实施第二空间重相关,以由此从所述 处理管线中的每个处理管线的所述第二级输出用于所述第二排的经空间解相关的数据值 中的相应的一个经空间解相关的数据值的第二系数,其中所述第二系数是经空间重相关的 数据值,其中选择性地存储所述第一系数包括:如果用于所述第一排的所述第一系数将被 使用用于在后次迭代时针对所述块的另一排的第一空间重相关,则将用于所述第一排的所 述第一系数存储在所述相应的存储单元中,并且其中在所述处理管线的所述第一级处以特 定顺序来接收经空间解相关的数据值的所述排,使得如果用于特定排的所述第一系数将被 使用用于针对另一排的第一空间重相关,则所述特定排的经空间解相关的数据值在比所述 另一排的经空间解相关的数据值在所述第一级处被接收的迭代更早的迭代中在所述第一 级处被接收。可以提供一种计算机可读存储介质,具有被编码在其上的计算机可读程序代 码,该计算机可读程序代码用于生成空间重相关模块,该空间重相关模块被配置为执行本 文描述的任何示例的空间重相关的方法。
[0008] 提供了一种空间重相关模块,被配置为作为数据解压缩系统的一部分对经空间解 相关的数据值的块执行空间重相关,其中所述块中的所述经空间解相关的数据值被布置到 二维阵列中,并且其中所述空间重相关模块包括每个都包括第一级和第二级的多个并行的 处理管线,其中所述处理管线的所述第一级包括相应的存储单元并且被配置为在第一维度 中实施第一空间重相关,并且其中所述处理管线的所述第二级被配置为在第二维度中实施 空间重相关,其中所述处理管线中的每个处理管线的所述第一级被配置为,在多次迭代中 的每次迭代中:(a)从所述块的经空间解相关的数据值的第一排接收所述经空间解相关的 数据值中的相应的一个经空间解相关的数据值;(b)对所接收的经空间解相关的数据值在 第一维度中实施第一空间重相关,以由此向所述处理管线的对应的第二级输出用于所述第 一排的经空间解相关的数据值中的相应的一个经空间解相关的数据值的第一系数;以及 (c)选择性地将用于所述第一排的所述第一系数存储在所述相应的存储单元中;其中所述 处理管线中的每个处理管线的所述第二级被配置为,在所述多次迭代中的每次迭代中:针 对在前次迭代中为其执行第一空间重相关的第二排,对第一系数在第二维度中实施第二空 间重相关,以由此输出用于所述第二排的经空间解相关的数据值中的相应的一个经空间解 相关的数据值的第二系数,其中所述第二系数是经空间重相关的数据值,其中所述处理管 线的所述第一级被配置为,如果用于所述第一排的所述第一系数将被使用用于在后次迭代 时针对所述块的另一排的第一空间重相关,则选择性将用于所述第一排的所述第一系数存 储在所述相应的存储单元中,并且其中所述处理管线的所述第一级被配置为以特定顺序来 接收经空间解相关的数据值的所述排,使得如果用于特定排的所述第一系数将被使用用于 针对另一排的第一空间重相关,则所述特定排的经空间解相关的数据值在比所述另一排的 经空间解相关的数据值在所述第一级处被接收的迭代更早的迭代中在所述第一级处被接 收。可以提供一种数据解压缩单元,包括根据本文所描述的任何示例的空间重相关模块。
[0009] 如对本领域的技术人员将是明显的,上面的特征在适当时可以被组合,并且可以 与本文所描述的示例的方面中的任何方面进行组合。
【附图说明】
[0010] 现在将参考附图具体描述示例,在附图中:
[0011] 图1示出了一种图形渲染系统;
[0012] 图2示出了 一种数据压缩单元;
[0013] 图3示出了用于一种压缩数据的方法的流程图;
[0014] 图4示出了一种数据解压缩单元;
[0015] 图5示出了用于一种解压缩数据的方法的流程图;
[0016] 图6示出了一种空间解相关模块;
[0017] 图7示出了一种线性预测方法的图示;
[0018] 图8图示了空间解相关模块的处理管线的操作;
[0019] 图9示出了用于一种在数据值块上执行空间解相关的方法的流程图;
[0020] 图10是图示了熵编码方案如何编码不同符号值的表格;
[0021 ] 图11示出了一种熵编码模块;
[0022] 图12示出了用于一种对多个数据值执行熵编码的方法的流程图;
[0023] 图13示出了一种熵解码模块;
[0024] 图14示出了用于一种对多个经熵编码的数据值执行熵解码的方法的流程图;
[0025] 图15表示包括经编码的数据值的块的第一数据分组;
[0026] 图16表示包括多个数据块的第二数据分组;
[0027] 图17图示了通道的数据如何被存储在经编码的数据值的块中;
[0028] 图18示出了一种空间重相关模块;以及
[0029] 图19图示了空间重相关模块的一级处理管线的操作。
[0030] 贯穿附图,在适当处使用共同的参考数字来指示类似的特征。
【具体实施方式】
[0031] 现在通过仅为示例的方式来描述实施例。
[0032] 在各种各样的不同场景中,数据压缩是有用的。本文描述的示例中的大多数示例 涉及用于由GPU使用的图像数据的压缩(以及解压缩),但是类似的原理可以应用到其他类 型的数据的压缩(以及解压缩),诸如音频数据、数字数据、或文本数据和/或用于由除了 GHJ之外的其他处理单元(诸如CPU)使用的数据。
[0033] 图1示出了可以实施在电子设备(诸如移动设备)中的图形渲染系统100。图形 渲染系统100包括主机CPU 102、GPU 104、存储器106 (例如图形存储器)以及显示器108。 CPU 102被布置为与GPU 104进行通信。数据(其可以是经压缩的数据)能够在GPU 104 与存储器106之间在任一方向上加以传送。由GPU 104渲染的图像可以被显示在显示器 108 上。
[0034] GPU 104包括渲染单元110、压缩/解压缩单元112、存储器接口 114、以及显示器 接口 116。系统100被布置使得数据能够在以下各项之间在任一方向上传递:(i)CPU 102 与渲染单元110 ;(ii)CPU 102与存储器接口 114 渲染单元110与存储器接口 114 ; (iv)存储器接口 114与存储器106 ; (v)植染单元110与压缩/解压缩单元112 ; (vi)压缩 /解压缩单元112与存储器接口 114 ;以及(vii)存储器接口 114与显示器接口。系统100 进一步被布置使得数据能够从压缩/解压缩单元112传递到显示器接口 116,并且使得数据 能够从显示器接口传递到显示器108。
[0035] 在操作中,GPU 104个体地处理图像数据的区域。区域可以例如表示图像的矩形 (包括正方形)部分。渲染单元110可以使用诸如Z-测试和纹理映射的已知技术来执行图 形基元(primitives)(诸如三角形和线)的扫描转换。植染单元110可以包含缓存单元以 减少存储器流量。一些数据由渲染单元110经由存储器接口单元114(其可以包括缓存) 读取或写入至存储器106,但是对于其他数据(诸如将被存储在帧缓冲器中的数据),数据 优选地从渲染单元110经由压缩/解压缩单元112去到存储器接口 114。压缩/解压缩单 元112通过如下文更详细描述的那样对数据进行压缩,来减少将跨越外部存储器总线而被 传送至存储器106的数据量。
[0036] 显示器接口 116将所完成的图像数据发送至显示器108。未压缩的图像可以直接 从存储器接口单元114来加以访问。经压缩的数据可以经由压缩/解压缩单元112来加以 访问,并且作为未压缩的数据而被发送至显示器108。在替换的示例中,经压缩的数据可以 被直接发送至显示器108,并且显示器108可以包括如下逻辑,该逻辑用于以与压缩/解压 缩单元112的解压缩等同的方式来解压缩经压缩的数据。虽然被示出为单个实体,但是为 了增强性能的原因,压缩/解压缩单元112可以包含多个并行的压缩和/或解压缩单元。
[0037] 作为一般性的概述,压缩系统可以遵循一种基本的算法纲要(algorithmic outline),从而执行以下步骤(并不必然按照下文给出的顺序):
[0038] 1.划分为块
[0039] 图像数据在逻辑上被划分为独立的非重叠的矩形块,以便于准许对经压缩的数 据的随机访问。块的尺寸是依赖于实施方式的,并且块可以例如为数据值的8X8、16X4、 32X2、4X4或32X16块。增加块尺寸趋于提高所实现的压缩比。然而,增加块尺寸还趋于 招致更大的硬件成本,并且此外,在访问模态(pattern)变得较不连贯时,可能会具有降低 的效率。因此,在选择块尺寸时存在将要达到(struck)的一个平衡,其依赖于实施方式并 且其可以例如依赖于将被压缩的数据的类型的特性。可以独立于由GPU处理的区域的尺寸 来选择块尺寸,然而从选择块尺寸而使得它是区域尺寸的方便倍数或者反之亦然,可能会 得到某种益处。
[0040] 2.格式转换
[0041] 一些缓冲器(例如深度缓冲器)可以以浮点格式来存储数据,但是对浮点数执行 无损算法可能是有问题的。因此,浮点值可以被解释为带符号的大小整数值以准许无损计 算。在数据值包括表示不同颜色分量的数据的多个通道的场合,也可以使用格式转换,其中 这些通道中的值不是8比特的倍数,例如RGB 5:6:5或者ARGB 2:10:10:10格式。数据值 的格式可以被转换,从而每个通道具有8比特的倍数的值(例如ARGB 8:8:8:8格式)。在 压缩过程中并不总是需要该格式转换步骤,例如,当数据已经采用整数格式或者能够对其 执行无损算法的某种其他格式时。
[0042] 3.颜色通道解相关
[0043] 数据值可以包括表示不同颜色分量的数据的多个通道。例如,数据可以采用ARGB 8:8:8:8格式,其中存在8个比特来表示数据值中的每个数据值的阿尔法通道、红色通道、 绿色通道和蓝色通道中的每个通道。在这些颜色通道中的一些或所有颜色通道(例如R通 道、G通道和B通道)的值之间经常存在值得考虑的相关性,并且压缩算法能够利用这种相 关性通过平均地减少这些通道中的一些通道的范围来压缩数据。用于利用不同颜色通道之 间的相关性的适合的颜色空间变换在本领域中是已知的,例如在GB2451911中所描述的, 并且本文中没有详细描述。适合的颜色空间变换是无损的和"非扩展的",意味着用来表示 颜色值的比特数目不会由于颜色空间变换而增加。
[0044] 4.空间解相关
[0045] 空间解相关(也称为"预测")移除了邻近像素之间的一些相关性,由此平均地减 少了值的动态范围。下文参考图6到9详细地描述一种用于执行空间解相关的方法。
[0046] 5.熵编码
[0047] 熵编码利用经解相关的数据的统计性质来减少用来表示数据的比特数目。算术 编码方案在计算上是相对密集和缓慢的。因此,相对简单的可变长度编码(VLC)(例如 Huffman或Golomb-Rice)或者基于运行长度的熵编码方案已经被使用。然而,即使利用简 单的VLC编码方案,可能还是难以高速地执行熵编码。下文参考图10到14详细地描述了 一种用于高速地并且以低计算复杂度地执行熵编码和解码的新方法。
[0048] 6.存储
[0049] 最后,经压缩的数据被存储在存储器106中。用于将数据存储在存储器106中的机 制的细节对本领域的技术人员而言将是已知的,并且如此在本文中并不非常详细地描述。
[0050] 解压缩系统可以遵循上文针对压缩所给出的基本算法纲要的逆转(并非必然按 照上文给出的顺序的逆转)。
[0051] 上文给出的一般压缩算法可以应用在压缩/解压缩单元112中。图2示出了压缩 /解压缩单元112的模块,当压缩/解压缩单元112作为压缩单元进行操作时,这些模块将 被用来压缩包括四个8比特通道的ARGB数据值的块。在其他示例中,压缩/解压缩单元 112可以被用来压缩具有其他格式的数据值的块。压缩单元112包括颜色解相关模块202、 四个空间解相关模块204$」204