使用simd指令的数据压缩和解压的制作方法

文档序号:9510372阅读:406来源:国知局
使用simd指令的数据压缩和解压的制作方法
【技术领域】
[0001]本发明涉及计算机领域,尤其涉及一种使用单指令多数据(single instruct1nmultiple data, SIMD) SIMD指令的数据压缩和解压。
【背景技术】
[0002]此处描述的技术关于数值数据的编码与解码,使用用于在计算应用中编码的数据的效率存储和/或传输特定的SIMD指令。
[0003]在当前的高性能计算应用中,通常需要在多个处理器核心之间或在处理器核心和存储器之间传输大量的数值数据。在多个处理器核心之间或在核心和存储器之间接口的有限的传输速率能产生对于所有数据处理速度和性能的瓶颈。在数据丰富的应用中,数值数据的存储对存储资源和存储设备提出了挑战。减少数值数据的数据传输和存储容量的指令能够提升计算系统的效率、经济性和性能。数值数据的压缩可以减少这些需求,然而却需要消耗额外的计算成本。在具有大量数值数据的应用中,该计算上有效的压缩是尤其重要的,以最小化对计算资源的需求。
[0004]在当前的微处理器架构中,S頂D处理执行由多数据元素或操作数上的单指令所指示的相同操作。在多操作数上,sn?操作被并行而不是循序地执行,从而加速了计算。sn?实施的优点包括减少的循序处理的处理时间、降低的指令的数目和更高的处理效率。sn?技术的实现可以从多个公司得到,包括:
[0005].Intel和AMD,其S頂D指令集通常称作MMX、SSE和AVX,
[0006]?先进RISC机器(ARM),其S頂D指令集被称作Neon,
[0007]# IBM、Freescale 和 Apple,其 SIMD 指令集被称作 AltiVec。
[0008]上述的S頂D实现方式的列表并非用来详尽列出而是说明S頂D处理已经被广泛地整合进微处理器架构中。本发明的实施例使用的sn?结构,并定义将在新sn?指令中实施的功能,以加速每个指令的多个数字样本的编码与解码的处理。
[0009]共有的专利和应用描述了多种压缩技术,其可应用于数值数据或信号样本的固定点、或整数表示。这些包括US5,839,100 (‘100专利),由Wegener提交的“样本数据信号的无损或限损压缩”、于1998年11月17日授权。共有的美国专利7,009,533 ( ‘533专利),由Wegener提交的名为“带限信号的自适应压缩和解压”,于2006年3月7日授权,其在这里被引用并描述是可配置的基于信号数据的特性与测量相关的信号特征压缩的压缩算法。共有的美国专利8,301,803 ( ‘803专利),由Wegener提交的名为“信号数据的块浮点型压缩”,于2011年4月28日授权,其在这里被引用并描述了用于整型样本的块浮点型编码器和解码器。共有的美国专利申请号13/534,330( ‘330申请),于2012年6月27日申请,由Wegener提交的名为“浮点型数据的计算高效压缩”,其在这里被引用并描述了通过处理浮点型格式的指数值和尾数值来进行直接压缩浮点型数据的算法。共有的专利申请号13/617,061( ‘061申请),于2012年9月14日申请,由Wegener提交的名为“转换和压缩的浮点型和整型数据”,其在这里被引用并描述用于将浮点型数据转换为整型数据和整型数据的压缩算法。这些申请所描述的压缩和解压的操作的至少一部分可以使用本发明所描述的sn?技术来实施。
[0010]共有的专利申请号12/891312( ‘312申请),由Wegener提交的名为“使用压缩和解压的增强型多处理器波形数据交换”公告号为2011-0078222,公开于2011年3月11日,其在此被引用做为参照,其描述了在具有多核处理器的计算系统中的可配置的固定点或整型数值数据类型。在多核处理环境中,输入、中间的以及输出波形数据经常在核心之间和在核心与存储设备之间交换。该‘312申请描述了在每个核心处的可配置的压缩器或解压器,它们能够压缩/解压整型的或数值的波形数据。该‘312申请描述了在存储控制器处的可配置的压缩/解压以压缩/解压在压缩包中向片外存储器传输或自片外存储器传输的整形或数字波形数据。‘312申请的可配置的压缩器和解压器的至少一些操作可以使用本说明书中所描述的sn?技术来实现。
[0011]共有的专利申请号13/617,205 (‘205申请),申请于2012年9月14,由Wegener提交的名为“用于直接内存存取传输的数据压缩”,在这里通过引用被参考,描述了通过DMA描述符提供用于压缩的数据和参数的直接内存存取(DMA)传输的压缩。共有的专利申请号13/616,898( ‘898申请),申请于2012年9月14日,由Wegener提交的名为“包括数据压缩API的处理系统和方法”,其通过引用被参考,描述了包括操作以及该操作的参数的应用编程接口,该接口用于数据压缩和解压联连同在存储系统的存储元件间的移动数据。这里描述的SB?指令可以被实施以用于’ 205和’ 898申请中所述的压缩和解压操作。
[0012]为了更好地满足很多计算应用中的高速传输数据、减少内存使用和最小化计算的要求,需要使用SIMD技术的数值数据的计算有效率的压缩和解压。

【发明内容】

[0013]由对数值数据进行SIMD实现的压缩而获得的计算效率可以提供更有效的数据传输和内存利用。
[0014]在一方面,数值数据压缩可以使计算机系统的资源来实现。该计算机系统的数据处理器可以执行sn?指令,该指令实施用于数据样本的压缩操作的至少一部分。该操作包括为对应于数据样本编码组的第一寄存器的操作数确定最大指数值,对所述操作数的位进行交织以产生多个半字节以存储在第二寄存器中,其中所述位基于各操作数中的所述位的位值被映射至给定的半字节。半字节的子集被选自所述第二寄存器中的多个半字节中,其中该子集的半字节的数目取决于最大指数值。半字节子集包括所述操作数的交织的尾数位。所述半字节子集的交织的尾数位被打包进压缩的数据包,其中所打包的交织的尾数位表示用于数据样本的所述编码组的压缩的数据。
[0015]指数令牌可以被产生以表示最大指数值、当前编码组和之前编码组的最大指数值之间的指数差异、或指数差异对。所述指数令牌被存储在所压缩的数据包中。
[0016]一方面,数据样本可以为第一寄存器提供操作数。在另外的方面,冗余去除操作可以被应用至数据样本,并且所得到的样本被作为操作数提供至所述第一寄存器。冗余去除操作可以包括计算数据样本的一阶或更高阶微分和/或衰减数据样本。冗余去除操作中的一个或多个可以使用SMD指令和寄存器实施。
[0017]在另一方面,压缩数据的解压可以使用计算机资源来实施。该计算机系统的数据处理器可以执行sn?指令,该指令实施用于压缩的数据样本的解压操作的至少一部分。存储在压缩数据包中的压缩数据包括用于多个编码组的指数令牌和打包的交织尾数位。该操作包括将多个压缩数据位子压缩数据包传送至解码位寄存器。为了处理该指数令牌,该操作包括提取和解码来自解码位寄存器以产生至少一个解码的指数值,其中,每个解码指数值对应于特定的编码组。为了处理该打包的交织的尾数位,该操作包括将压缩数据位的一部分自解码位寄存器传输至打包的尾数寄存器,该部分包括对应于特定编码组的打包的交织尾数位,将半字节子集自打包尾数寄存器传送至分级寄存器中的第一半字节子集,并且将填充值插入至分级寄存器中的第二半字节子集。该解码的指数值指示了来自打包尾数寄存器的子集中的半字节数目,形成分寄存器中的第一子集。将分级寄存器中的半字节的位进行反交织产生多个操作数以存储于第一寄存器。给定的半字节的反交织映射位取决于各操作数中的位的位值。所得到的操作数具有数据处理器所使用的数据格式。
[0018]在一方面,所得到的操作数表示解压的数据样本。杂技另一方面,信号再生处理被用至所述操作数以产生解压的数据样本。信号再生操作可以包括计算一阶或多阶积分和/或放大该操作数。冗余去除操作中的一个或多个可以使用S頂D指令和寄存器而被实施。
[0019]可以通过下面的附图、详细的说明以及权利要求认识到本发明的其它方面和优点。
【附图说明】
[0020]图1为用于实施压缩操作的逻辑资源的模块图;
[0021]图2为用于实施解压操作的逻辑资源的模块图;
[0022]图3描述了 S頂D寄存器和操作的示例;
[0023]图4描述了依据优选实施例的可用于样本序列减法运算的SMD寄存器架构;
[0024]图5描述了依据优选实施例的积分样本序列的SIMD操作;
[0025]图6描述了依据优选实施例的图4的DERIV指令的扩展容量;
[0026]图7描述了 DERIV指令,该指令隐式地指示了其中存储有早前样本x(-l)...x(_4)的S頂D寄存器;
[0027]图8描述了可替换的DERIV指令,该指令明确地地指示了其中存储有早前样本x(-l)...x(-4)的 SB? 寄存器;
[0028]图9描述了使用两个或更多个DERIV指令的更高阶微分(二次微分,三次微分等等)的计算;
[0029]图10描述了确定用于数值数据的两个补码表示的指数;
[0030]图11描述了用于确定四个SIMD操作数的最大指数的两个指令序列;
[0031]图12描述了用于确定SIMD操作数的最大指数的单指令;
[0032]图13描述了依据一实施例的半字节交织器;
[0033]图14描述了当操作数为有符号的两个补码整型时交织和选择的一个示例;
[0034]图15描述了当操作数为单精度浮点型样本时交织和选择的一个示例;
[0035]图16描述了用于压缩的数据包的一个配置;
[0036]图17描述了用于压缩的数据包的指数令牌和尾数令牌的另一配置;
[0037]图18描述了使用SMD寄存器和操作的压缩器的优选实施例;
[0038]图19示出了用于在指数令牌和指数差值或最大指数值之间的映射的指数令牌产生器的优选指数编码表;
[0039]图20描述了编码的最后一级的编码的存储打包器的操作,;
[0040]图21描述了用于将打包的输出字写至打包阵列的操作;
[0041]图22描述了使用SIMD指令序列来对包含编码的(压缩的)整型或浮点型样本的打包阵列进行解码的位解包器的操作;
[0042]图23描述了依据优选实施例的位收件器的操作;
[0043]图24描述了用于包报头的配置;
[0044]图25描述了指数解码器的模块图;
[0045]图26示出了用于指数解码器的操作的指数令牌解码表;
[0046]图27描述了尾数解包器的功能;
[0047]图28描述了整型符号扩展器的操作;
[0048]图29描述了浮点型尾数填充数的操作;
[0049]图30描述了半字节解交织器的操作;
[0050]图31提供了用于对4N整型或浮点型样本进行编码的程序的伪代码SB?指令的示例;
[0051]图32提供了用于将压缩的数据包解码至重构的4N整型或浮点型样本的程序的伪代码S頂D指令的示例;
[0052]图33进一步描述了宏V_INTEG_N的细节;
[0053]图34描述了用于实现无损、固定速率或固定质量编码操作的编码功能的额外指令;
[0054]图35示出了用于在固定速率操作期间更新“atten”值的指令;
[0055]图36提供了用于S頂D编码指令的相关参照表;
[0056]图37提供了用于S頂D解码指令的相关参照表;
[0057]图38为适用于使用SB?操作的来压缩和解压的示例的计算机系统的模块图。
【具体实施方式】
[0058]本文描述的压缩和解压实施例可以包括使用数值格式来表示数字的数据(这里称作数值数据)的多种计算架构。数值数据可以包括不同位宽(譬如,8位、16位、32位、64位等等)的整型数据和不同位宽(譬如,32位、64位、128位等等)的浮点型数据。该数值数据可以由多种应用产生并且该计算架构可以是通用的或特别用于特定的应用。该数值数据可以由来自物理进程的所检测到的数据,该数据由计算机模拟或数据处理的中间值所产生。例如,该数值数据可以源自模拟传感器信号,该模拟传感器信号是由模数转换器(ADC)转换至数字信号,该数字信号的样本被一数值格式(通常为整型格式)表示。另一示例中,该数字的数据可以是用于整形或浮点型格式的模拟计算机图形图像的空间数据点。
[0059]图1为用于实施压缩操作的逻辑资源的模块图。这些资源可以被实施为一个以上的硬件加速器,其具有通过软件实现的对应的库函数来提供的API的参数。可替换地,图1中的资源的一些或全部可以被实施为库函数中的软件。可替换地,图1中的一些或全部的资源可以被实施为硬件加速器和软件的结合。压缩操作可以使用本文描述的sn?寄存器和指令。通常地,压缩资源包括预处理器模块50和压缩器模块52,具有相关联的控制54。预处理器模块50适配多种不同的数据类型,在此示例中,包括整型数据、浮点型数据以及图像数据。将要被预处理和压缩的数值数据是由线51所表示的输入,并且所压缩的数据包是由线60所表示的输出。在硬件加速的环境中,线51和60能够对应于片上寄存器或数据总线。在软件实施例中,线51和60可以对应于由执行用于预处理和压缩的功能的处理器读取或写入的数据。其他实施例可以包括预处理器50的部件的一部分或不包括预处理器50 ο
[0060]预处理器模块50包括用于为压缩操作准备的输入数据的进程。这些可以包括在具有硬件加速器的实施例中的数调整器62,该硬件加速器被耦合至集成电路上的内总线。该数调整器62利用该内总线对将被压缩为一个宽度的样本进行调整,这可以具有与样本宽度不同的宽度。在一个示例中,内总线可以是DDR内存(DDR3)的64位宽的接口,而将被压缩的样本是16位整型。在另一示例中,内总线可以是128位宽总线,并且将被压缩的样本可以是32位的单精度的浮点型数据。在压缩操作之前,浮点型样本通过浮点预处理器64直接输入至选择器66或转换为整型格式。整型样本可以被直接转发至选择器66。图像样本被转发至图像预处理器68,其可以执行图像文件编码、颜色空间转换、颜色空间抽取等等多种独有的功能。对于一些应用,该些样本能够被转发至中心频率估计器70,该中心频率估计器70能够被用于从冗余去除算法得到的样本流,该算法取决于该样本流的中心频率。如下所述的,中心频率估计器70的输出被应用至控制模块54,其利用该中心频率为冗余去除器来产生“跨步”参数。
[0061]选择器66的输入包括浮点型预处理器64的输出、自数调整器62直接转发的样本以及图像预处理器68的输出。选择器66基于由控制模块54采用的参数选择合适的数据流,以给压缩器模块52提供输入样本。该参数可以从与被转发至控制模块54兼容的API的DMA描述符来确定。
[0062]压缩器模块52能够包括冗余去除器56和位打包器58。响应于由控制模块54提供的参数,压缩器52能够实施能够被用于无损和有损压缩的压缩算法。伴随冗余去除器56和位打包器58,报头产生器72被包含以用在将在线60上转发的包组件,包括去除冗余后的被压缩的数据。使用SB?操作的冗余去除器56和位打包器58的实施例被参照图18来描述。
[0063]控制模块54通过不同的逻辑模块来控制样本的路由并应用所需的压缩参数至该不同的逻辑模块。该控制模块54还控制在一些压缩模式中使用的衰减因素,以控制固定速率或固定质量的操作,例如,基于关于被压缩的包的特性的统计反馈的操作。该控制模块54可以接收DMA描述符,该DMA描述符可以提供例如用于选择器66的数据类型参数和用于压缩器52的压缩参数。
[0064]图2为用于实施解压操作的逻辑资源的模块图。这些资源可以被实现为硬件加速器,并具有通过软件实现的对应的库函数来提供的API的参数。可替换地,图2中的这些资源的一些或全部可以被实现为库文件中的软件,并且与兼容API的其他部件协调使用。可替换地,该资源可以被实现为硬件加速器和软件的结合。通常,该解压资源与参照图1中描述的压缩资源互补,并且包括解压器模块80、后处理器模块82和控制模块90。将被解压的数据包是由线61表示的输入,并且后处理的、解压的样本是由线99表示输出。在硬件加速环境下,线61和99能够对应于片上寄存器或数据总线。在软件实施例中,线61和99能够对应于由执行库函数的处理器读取或写入的数据。其他实施例可以包括后处理器82的部件的一部分或不包括后处理器82。
[0065]解压器模块80包括扩展压缩数据以产生解压样本的位解压器84和信号再生器86。解压参数可以由报头提取器88提取自包报头。控制模块90将自包报头提取的参数提供至解压器88以配置解压操作。DMA描述符或API可以提供额外的参数(譬如数据类型)至控制模块90。这些可以被后处理器所使用以执行合适的操作。
[0066]该位解包器84和报头提取器88处理该压缩数据以分开报头位和压缩数据位。该包的报头位被提取,并且被转发至控制模块90。控制模块90使用来自提取的包报头的参数以控制信号再生器86。该位解压器和报头提取器88的实施例被参照图22-24在下面更详细地描述。
[0067]信号再生器86执行与冗余去除器56相反的操作。使用SB?操作的信号再生器的实施例在下文被进一步详细地描述。信号再生器86的输出被应用于后处理器模块82的相应的单元。取决于引入的数据类型,信号再生器82的输出可以通过浮点型后处理器92或通过图像后处理器94路由。浮点型后处理器92可以执行整型至浮点型格式的转换,以反转由浮点型预处理器64执行的格式转换。选择器96由控制逻辑90控制,响应于API参数、DMA描述符参数或由解压的包携带的参数。在此示例中,选择器408的输入包括浮点型后处理器92的输出、信号再生器86的直接输出或图像后处理器94的输出。该选择器96的输出然后被应用于数调整器99(互补于以上在图1中所讨论的数调整器),以在必要时形成输出99。
[0068]图1和2中示出的额外方面的部件在’ 061申请、’ 205申请和’ 898申请中描述。根据图ι、2中示出的部件的结构,使用sn?寄存器和指令的压缩和解压函数的独立部件的一些细节在下文进行描述。
[0069]图3描述了 S頂D寄存器和指令的示例。S頂D寄存器100包括N寄存器集合,该N寄存器集合包括做为由S頂D指令所指定的操作的操作数的数值数据。该S頂D寄存器100的N寄存器集合保存相同数据类型的数值数据。sn?指令指定了将执行的操作以及sn?寄存器中的位将如何被积分为用于此操作的操作数。例如,sn?寄存器loo包括n样本,譬如标记的样本A(0)110a、A⑴110b和A(N)110c。因为SM)寄存器100中的每个操作数110a、110b或110c具有Nv位的长度,因此SB?寄存器中的位的全部数目Nr是等于N*Nv。操作数110a、110b或110c的数据类型的示例是8位有符号或无符号整型、16位有符号或无符号整型、32位有符号或无符号整型、64位有符号或无符号整型、32位浮点型样本或64位浮点型样本。S頂D寄存器长度Nr的通常值是64位(例如,Intel MMX)、128位(例如,Intel SSE、SSE2、SSE3)以及256位(例如,Intel AVX)。操作数长度Nv的通常值是8、16、32或64。SB?寄存器长度Nr和操作数长度Nv可以具有与这些通常值不同的其他值。SIMD寄存器中的操作数N的数目是Nr/Nv。SIMD寄存器的变化和操作数的变化不限制本发明的保护范围。
[0070]图3描述了对包含在两个S頂D寄存器中的操作数执行S頂D操作102的示例。通常地,sn?操作与被包含在sn?寄存器中的多个操作数并行地应用。数学的、逻辑的或其他运算符120被用于包含在一个S頂D寄存器REG_A100a中的多个操作数和包含在第二SIMD寄存器REG_B100b中的多个操作数,并且结果被存储在第三S頂D寄存器REG_C100c。用于包含S頂D寄存器lOOa-c的处理器的程序可以具有一指令,该指令用于操作S頂D源寄存器100a和100b、SIMD目标寄存器100c和多个格式中之一的运算符120,其中“运算符”指示了所需的数学的、逻辑的或其他操作(譬如,加法、减法、乘法、除法等),并且“dType”指示了操作数的数据类型:
[0071]# REG_C = REG_A(operator, dType)REG_B
[0072]· opcode(REG_A, REG_B, REG_C, dType)
[0073]· opcode_dType(REG_A, REG_B, REG_C)
[0074]# (dType)REG_C = REG_A(operator)REG_B
[0075]上文的示例的指令格式描述了 sn?指令集可以使用以表示相同的结果的一些可能的指令的句法。其他指令句法是可能的,并且不限制本发明实施例中的sn?指令的形式。发展SM)架构的公司(譬如,Intel、AMD、ARM等)经常开发他们自己的SM)指令集句法,或它们可能采用另外公
当前第1页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1