CN105264779B - 使用simd指令的数据压缩和解压 - Google Patents

使用simd指令的数据压缩和解压 Download PDF

Info

Publication number
CN105264779B
CN105264779B CN201480005743.6A CN201480005743A CN105264779B CN 105264779 B CN105264779 B CN 105264779B CN 201480005743 A CN201480005743 A CN 201480005743A CN 105264779 B CN105264779 B CN 105264779B
Authority
CN
China
Prior art keywords
data
simd
instruction
operand
register
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201480005743.6A
Other languages
English (en)
Other versions
CN105264779A (zh
Inventor
阿尔伯特·W·魏格纳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Altera Corp
Original Assignee
Altera Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US13/747,342 external-priority patent/US9274802B2/en
Priority claimed from US13/747,352 external-priority patent/US9298457B2/en
Application filed by Altera Corp filed Critical Altera Corp
Publication of CN105264779A publication Critical patent/CN105264779A/zh
Application granted granted Critical
Publication of CN105264779B publication Critical patent/CN105264779B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6005Decoder aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3059Digital compression and data reduction techniques where the original information is represented by a subset or similar information, e.g. lossy compression
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6011Encoder aspects
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6017Methods or arrangements to increase the throughput
    • H03M7/6023Parallelization
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6017Methods or arrangements to increase the throughput
    • H03M7/6029Pipelining
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/27Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes using interleaving techniques

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

本发明公开了使用SIMD指令的数值数据的压缩与解压。数值数据包括整型和浮点型样本。压缩支持是哪个编码模式:无损、固定速率和固定质量。用于压缩操作的SIMD指令可以包括衰减、微分计算、位打包以及形成压缩包,用于该包的报头产生,以及压缩数组的输出操作。用于解压的SIMD指令包括压缩数组输入操作、报头恢复、解码器控制、位解包、积分以及放大。压缩和解压可以被实施在使用SIMD指令的在微处理器、数字信号处理器、现场可编程门阵列、专用集成电路、片上系统或图像处理器。数值数据的压缩与解压可以减少存储、网络和存储瓶颈。该摘要并不用来限制权利要求中所述的本发明的保护范围。

Description

使用SIMD指令的数据压缩和解压
技术领域
本发明涉及计算机领域,尤其涉及一种使用单指令多数据(single instructionmultiple data,SIMD)SIMD指令的数据压缩和解压。
背景技术
此处描述的技术关于数值数据的编码与解码,使用用于在计算应用中编码的数据的效率存储和/或传输特定的SIMD指令。
在当前的高性能计算应用中,通常需要在多个处理器核心之间或在处理器核心和存储器之间传输大量的数值数据。在多个处理器核心之间或在核心和存储器之间接口的有限的传输速率能产生对于所有数据处理速度和性能的瓶颈。在数据丰富的应用中,数值数据的存储对存储资源和存储设备提出了挑战。减少数值数据的数据传输和存储容量的指令能够提升计算系统的效率、经济性和性能。数值数据的压缩可以减少这些需求,然而却需要消耗额外的计算成本。在具有大量数值数据的应用中,该计算上有效的压缩是尤其重要的,以最小化对计算资源的需求。
在当前的微处理器架构中,SIMD处理执行由多数据元素或操作数上的单指令所指示的相同操作。在多操作数上,SIMD操作被并行而不是循序地执行,从而加速了计算。SIMD实施的优点包括减少的循序处理的处理时间、降低的指令的数目和更高的处理效率。SIMD技术的实现可以从多个公司得到,包括:
●Intel和AMD,其SIMD指令集通常称作MMX、SSE和AVX,
●先进RISC机器(ARM),其SIMD指令集被称作Neon,
●IBM、Freescale和Apple,其SIMD指令集被称作AltiVec。
上述的SIMD实现方式的列表并非用来详尽列出而是说明SIMD处理已经被广泛地整合进微处理器架构中。本发明的实施例使用的SIMD结构,并定义将在新SIMD指令中实施的功能,以加速每个指令的多个数字样本的编码与解码的处理。
共有的专利和应用描述了多种压缩技术,其可应用于数值数据或信号样本的固定点、或整数表示。这些包括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提交的名为“转换和压缩的浮点型和整型数据”,其在这里被引用并描述用于将浮点型数据转换为整型数据和整型数据的压缩算法。这些申请所描述的压缩和解压的操作的至少一部分可以使用本发明所描述的SIMD技术来实施。
共有的专利申请号12/891312(‘312申请),由Wegener提交的名为“使用压缩和解压的增强型多处理器波形数据交换”公告号为2011-0078222,公开于2011年3月11日,其在此被引用做为参照,其描述了在具有多核处理器的计算系统中的可配置的固定点或整型数值数据类型。在多核处理环境中,输入、中间的以及输出波形数据经常在核心之间和在核心与存储设备之间交换。该‘312申请描述了在每个核心处的可配置的压缩器或解压器,它们能够压缩/解压整型的或数值的波形数据。该‘312申请描述了在存储控制器处的可配置的压缩/解压以压缩/解压在压缩包中向片外存储器传输或自片外存储器传输的整形或数字波形数据。‘312申请的可配置的压缩器和解压器的至少一些操作可以使用本说明书中所描述的SIMD技术来实现。
共有的专利申请号13/617,205(‘205申请),申请于2012年9月14,由Wegener提交的名为“用于直接内存存取传输的数据压缩”,在这里通过引用被参考,描述了通过DMA描述符提供用于压缩的数据和参数的直接内存存取(DMA)传输的压缩。共有的专利申请号13/616,898(‘898申请),申请于2012年9月14日,由Wegener提交的名为“包括数据压缩API的处理系统和方法”,其通过引用被参考,描述了包括操作以及该操作的参数的应用编程接口,该接口用于数据压缩和解压联连同在存储系统的存储元件间的移动数据。这里描述的SIMD指令可以被实施以用于’205和’898申请中所述的压缩和解压操作。
为了更好地满足很多计算应用中的高速传输数据、减少内存使用和最小化计算的要求,需要使用SIMD技术的数值数据的计算有效率的压缩和解压。
发明内容
由对数值数据进行SIMD实现的压缩而获得的计算效率可以提供更有效的数据传输和内存利用。
在一方面,数值数据压缩可以使计算机系统的资源来实现。该计算机系统的数据处理器可以执行SIMD指令,该指令实施用于数据样本的压缩操作的至少一部分。该操作包括为对应于数据样本编码组的第一寄存器的操作数确定最大指数值,对所述操作数的位进行交织以产生多个半字节以存储在第二寄存器中,其中所述位基于各操作数中的所述位的位值被映射至给定的半字节。半字节的子集被选自所述第二寄存器中的多个半字节中,其中该子集的半字节的数目取决于最大指数值。半字节子集包括所述操作数的交织的尾数位。所述半字节子集的交织的尾数位被打包进压缩的数据包,其中所打包的交织的尾数位表示用于数据样本的所述编码组的压缩的数据。
指数令牌可以被产生以表示最大指数值、当前编码组和之前编码组的最大指数值之间的指数差异、或指数差异对。所述指数令牌被存储在所压缩的数据包中。
一方面,数据样本可以为第一寄存器提供操作数。在另外的方面,冗余去除操作可以被应用至数据样本,并且所得到的样本被作为操作数提供至所述第一寄存器。冗余去除操作可以包括计算数据样本的一阶或更高阶微分和/或衰减数据样本。冗余去除操作中的一个或多个可以使用SIMD指令和寄存器实施。
在另一方面,压缩数据的解压可以使用计算机资源来实施。该计算机系统的数据处理器可以执行SIMD指令,该指令实施用于压缩的数据样本的解压操作的至少一部分。存储在压缩数据包中的压缩数据包括用于多个编码组的指数令牌和打包的交织尾数位。该操作包括将多个压缩数据位子压缩数据包传送至解码位寄存器。为了处理该指数令牌,该操作包括提取和解码来自解码位寄存器以产生至少一个解码的指数值,其中,每个解码指数值对应于特定的编码组。为了处理该打包的交织的尾数位,该操作包括将压缩数据位的一部分自解码位寄存器传输至打包的尾数寄存器,该部分包括对应于特定编码组的打包的交织尾数位,将半字节子集自打包尾数寄存器传送至分级寄存器中的第一半字节子集,并且将填充值插入至分级寄存器中的第二半字节子集。该解码的指数值指示了来自打包尾数寄存器的子集中的半字节数目,形成分寄存器中的第一子集。将分级寄存器中的半字节的位进行反交织产生多个操作数以存储于第一寄存器。给定的半字节的反交织映射位取决于各操作数中的位的位值。所得到的操作数具有数据处理器所使用的数据格式。
在一方面,所得到的操作数表示解压的数据样本。杂技另一方面,信号再生处理被用至所述操作数以产生解压的数据样本。信号再生操作可以包括计算一阶或多阶积分和/或放大该操作数。冗余去除操作中的一个或多个可以使用SIMD指令和寄存器而被实施。
可以通过下面的附图、详细的说明以及权利要求认识到本发明的其它方面和优点。
附图说明
图1为用于实施压缩操作的逻辑资源的模块图;
图2为用于实施解压操作的逻辑资源的模块图;
图3描述了SIMD寄存器和操作的示例;
图4描述了依据优选实施例的可用于样本序列减法运算的SIMD寄存器架构;
图5描述了依据优选实施例的积分样本序列的SIMD操作;
图6描述了依据优选实施例的图4的DERIV指令的扩展容量;
图7描述了DERIV指令,该指令隐式地指示了其中存储有早前样本x(-1)...x(-4)的SIMD寄存器;
图8描述了可替换的DERIV指令,该指令明确地地指示了其中存储有早前样本x(-1)...x(-4)的SIMD寄存器;
图9描述了使用两个或更多个DERIV指令的更高阶微分(二次微分,三次微分等等)的计算;
图10描述了确定用于数值数据的两个补码表示的指数;
图11描述了用于确定四个SIMD操作数的最大指数的两个指令序列;
图12描述了用于确定SIMD操作数的最大指数的单指令;
图13描述了依据一实施例的半字节交织器;
图14描述了当操作数为有符号的两个补码整型时交织和选择的一个示例;
图15描述了当操作数为单精度浮点型样本时交织和选择的一个示例;
图16描述了用于压缩的数据包的一个配置;
图17描述了用于压缩的数据包的指数令牌和尾数令牌的另一配置;
图18描述了使用SIMD寄存器和操作的压缩器的优选实施例;
图19示出了用于在指数令牌和指数差值或最大指数值之间的映射的指数令牌产生器的优选指数编码表;
图20描述了编码的最后一级的编码的存储打包器的操作,;
图21描述了用于将打包的输出字写至打包阵列的操作;
图22描述了使用SIMD指令序列来对包含编码的(压缩的)整型或浮点型样本的打包阵列进行解码的位解包器的操作;
图23描述了依据优选实施例的位收件器的操作;
图24描述了用于包报头的配置;
图25描述了指数解码器的模块图;
图26示出了用于指数解码器的操作的指数令牌解码表;
图27描述了尾数解包器的功能;
图28描述了整型符号扩展器的操作;
图29描述了浮点型尾数填充数的操作;
图30描述了半字节解交织器的操作;
图31提供了用于对4N整型或浮点型样本进行编码的程序的伪代码SIMD指令的示例;
图32提供了用于将压缩的数据包解码至重构的4N整型或浮点型样本的程序的伪代码SIMD指令的示例;
图33进一步描述了宏V_INTEG_N的细节;
图34描述了用于实现无损、固定速率或固定质量编码操作的编码功能的额外指令;
图35示出了用于在固定速率操作期间更新“atten”值的指令;
图36提供了用于SIMD编码指令的相关参照表;
图37提供了用于SIMD解码指令的相关参照表;
图38为适用于使用SIMD操作的来压缩和解压的示例的计算机系统的模块图。
具体实施方式
本文描述的压缩和解压实施例可以包括使用数值格式来表示数字的数据(这里称作数值数据)的多种计算架构。数值数据可以包括不同位宽(譬如,8位、16位、32位、64位等等)的整型数据和不同位宽(譬如,32位、64位、128位等等)的浮点型数据。该数值数据可以由多种应用产生并且该计算架构可以是通用的或特别用于特定的应用。该数值数据可以由来自物理进程的所检测到的数据,该数据由计算机模拟或数据处理的中间值所产生。例如,该数值数据可以源自模拟传感器信号,该模拟传感器信号是由模数转换器(ADC)转换至数字信号,该数字信号的样本被一数值格式(通常为整型格式)表示。另一示例中,该数字的数据可以是用于整形或浮点型格式的模拟计算机图形图像的空间数据点。
图1为用于实施压缩操作的逻辑资源的模块图。这些资源可以被实施为一个以上的硬件加速器,其具有通过软件实现的对应的库函数来提供的API的参数。可替换地,图1中的资源的一些或全部可以被实施为库函数中的软件。可替换地,图1中的一些或全部的资源可以被实施为硬件加速器和软件的结合。压缩操作可以使用本文描述的SIMD寄存器和指令。通常地,压缩资源包括预处理器模块50和压缩器模块52,具有相关联的控制54。预处理器模块50适配多种不同的数据类型,在此示例中,包括整型数据、浮点型数据以及图像数据。将要被预处理和压缩的数值数据是由线51所表示的输入,并且所压缩的数据包是由线60所表示的输出。在硬件加速的环境中,线51和60能够对应于片上寄存器或数据总线。在软件实施例中,线51和60可以对应于由执行用于预处理和压缩的功能的处理器读取或写入的数据。其他实施例可以包括预处理器50的部件的一部分或不包括预处理器50。
预处理器模块50包括用于为压缩操作准备的输入数据的进程。这些可以包括在具有硬件加速器的实施例中的数调整器62,该硬件加速器被耦合至集成电路上的内总线。该数调整器62利用该内总线对将被压缩为一个宽度的样本进行调整,这可以具有与样本宽度不同的宽度。在一个示例中,内总线可以是DDR内存(DDR3)的64位宽的接口,而将被压缩的样本是16位整型。在另一示例中,内总线可以是128位宽总线,并且将被压缩的样本可以是32位的单精度的浮点型数据。在压缩操作之前,浮点型样本通过浮点预处理器64直接输入至选择器66或转换为整型格式。整型样本可以被直接转发至选择器66。图像样本被转发至图像预处理器68,其可以执行图像文件编码、颜色空间转换、颜色空间抽取等等多种独有的功能。对于一些应用,该些样本能够被转发至中心频率估计器70,该中心频率估计器70能够被用于从冗余去除算法得到的样本流,该算法取决于该样本流的中心频率。如下所述的,中心频率估计器70的输出被应用至控制模块54,其利用该中心频率为冗余去除器来产生“跨步”参数。
选择器66的输入包括浮点型预处理器64的输出、自数调整器62直接转发的样本以及图像预处理器68的输出。选择器66基于由控制模块54采用的参数选择合适的数据流,以给压缩器模块52提供输入样本。该参数可以从与被转发至控制模块54兼容的API的DMA描述符来确定。
压缩器模块52能够包括冗余去除器56和位打包器58。响应于由控制模块54提供的参数,压缩器52能够实施能够被用于无损和有损压缩的压缩算法。伴随冗余去除器56和位打包器58,报头产生器72被包含以用在将在线60上转发的包组件,包括去除冗余后的被压缩的数据。使用SIMD操作的冗余去除器56和位打包器58的实施例被参照图18来描述。
控制模块54通过不同的逻辑模块来控制样本的路由并应用所需的压缩参数至该不同的逻辑模块。该控制模块54还控制在一些压缩模式中使用的衰减因素,以控制固定速率或固定质量的操作,例如,基于关于被压缩的包的特性的统计反馈的操作。该控制模块54可以接收DMA描述符,该DMA描述符可以提供例如用于选择器66的数据类型参数和用于压缩器52的压缩参数。
图2为用于实施解压操作的逻辑资源的模块图。这些资源可以被实现为硬件加速器,并具有通过软件实现的对应的库函数来提供的API的参数。可替换地,图2中的这些资源的一些或全部可以被实现为库文件中的软件,并且与兼容API的其他部件协调使用。可替换地,该资源可以被实现为硬件加速器和软件的结合。通常,该解压资源与参照图1中描述的压缩资源互补,并且包括解压器模块80、后处理器模块82和控制模块90。将被解压的数据包是由线61表示的输入,并且后处理的、解压的样本是由线99表示输出。在硬件加速环境下,线61和99能够对应于片上寄存器或数据总线。在软件实施例中,线61和99能够对应于由执行库函数的处理器读取或写入的数据。其他实施例可以包括后处理器82的部件的一部分或不包括后处理器82。
解压器模块80包括扩展压缩数据以产生解压样本的位解压器84和信号再生器86。解压参数可以由报头提取器88提取自包报头。控制模块90将自包报头提取的参数提供至解压器88以配置解压操作。DMA描述符或API可以提供额外的参数(譬如数据类型)至控制模块90。这些可以被后处理器所使用以执行合适的操作。
该位解包器84和报头提取器88处理该压缩数据以分开报头位和压缩数据位。该包的报头位被提取,并且被转发至控制模块90。控制模块90使用来自提取的包报头的参数以控制信号再生器86。该位解压器和报头提取器88的实施例被参照图22-24在下面更详细地描述。
信号再生器86执行与冗余去除器56相反的操作。使用SIMD操作的信号再生器的实施例在下文被进一步详细地描述。信号再生器86的输出被应用于后处理器模块82的相应的单元。取决于引入的数据类型,信号再生器82的输出可以通过浮点型后处理器92或通过图像后处理器94路由。浮点型后处理器92可以执行整型至浮点型格式的转换,以反转由浮点型预处理器64执行的格式转换。选择器96由控制逻辑90控制,响应于API参数、DMA描述符参数或由解压的包携带的参数。在此示例中,选择器408的输入包括浮点型后处理器92的输出、信号再生器86的直接输出或图像后处理器94的输出。该选择器96的输出然后被应用于数调整器99(互补于以上在图1中所讨论的数调整器),以在必要时形成输出99。
图1和2中示出的额外方面的部件在’061申请、’205申请和’898申请中描述。根据图1、2中示出的部件的结构,使用SIMD寄存器和指令的压缩和解压函数的独立部件的一些细节在下文进行描述。
图3描述了SIMD寄存器和指令的示例。SIMD寄存器100包括N寄存器集合,该N寄存器集合包括做为由SIMD指令所指定的操作的操作数的数值数据。该SIMD寄存器100的N寄存器集合保存相同数据类型的数值数据。SIMD指令指定了将执行的操作以及SIMD寄存器中的位将如何被积分为用于此操作的操作数。例如,SIMD寄存器100包括N样本,譬如标记的样本A(0)110a、A(1)110b和A(N)110c。因为SIMD寄存器100中的每个操作数110a、110b或110c具有Nv位的长度,因此SIMD寄存器中的位的全部数目Nr是等于N*Nv。操作数110a、110b或110c的数据类型的示例是8位有符号或无符号整型、16位有符号或无符号整型、32位有符号或无符号整型、64位有符号或无符号整型、32位浮点型样本或64位浮点型样本。SIMD寄存器长度Nr的通常值是64位(例如,Intel MMX)、128位(例如,Intel SSE、SSE2、SSE3)以及256位(例如,Intel AVX)。操作数长度Nv的通常值是8、16、32或64。SIMD寄存器长度Nr和操作数长度Nv可以具有与这些通常值不同的其他值。SIMD寄存器中的操作数N的数目是Nr/Nv。SIMD寄存器的变化和操作数的变化不限制本发明的保护范围。
图3描述了对包含在两个SIMD寄存器中的操作数执行SIMD操作102的示例。通常地,SIMD操作与被包含在SIMD寄存器中的多个操作数并行地应用。数学的、逻辑的或其他运算符120被用于包含在一个SIMD寄存器REG_A100a中的多个操作数和包含在第二SIMD寄存器REG_B100b中的多个操作数,并且结果被存储在第三SIMD寄存器REG_C100c。用于包含SIMD寄存器100a-c的处理器的程序可以具有一指令,该指令用于操作SIMD源寄存器100a和100b、SIMD目标寄存器100c和多个格式中之一的运算符120,其中“运算符”指示了所需的数学的、逻辑的或其他操作(譬如,加法、减法、乘法、除法等),并且“dType”指示了操作数的数据类型:
●REG_C=REG_A(operator,dType)REG_B
●opcode(REG_A,REG_B,REG_C,dType)
●opcode_dType(REG_A,REG_B,REG_C)
●(dType)REG_C=REG_A(operator)REG_B
上文的示例的指令格式描述了SIMD指令集可以使用以表示相同的结果的一些可能的指令的句法。其他指令句法是可能的,并且不限制本发明实施例中的SIMD指令的形式。发展SIMD架构的公司(譬如,Intel、AMD、ARM等)经常开发他们自己的SIMD指令集句法,或它们可能采用另外公司的指令句法。本发明中描述的多种SIMD操作将采用下列指令句法:(dType)REG_C=REG_A(operator)REG_B,其中“dType”指示了操作数110a、110b和110c的数据类型,并且“operator”指示了所述的操作120。通常地,但不是独有,“operator”具有特定的前缀、后缀或其他指示SIMD操作的标签。例如,Intel的SIMD指令经常在操作数中包括字母“P”(用于并行)或“V”(用于向量),以指示该指令是SIMD指令。虽然操作120可以是一元的(一个输入值或操作数,产生一个输出值)、二元的(两个输入值或操作数,产生一个输出值)或三元的(三个输入值或操作数,产生一个输出值),但是其他操作数可以接收或要求其他数目的输入操作数,并且可以产生其他数目的输出结果。操作数还可以包括输入样本可以被读取的内存地址、或输出样本可以被写入的内存地址。SIMD指令还可以包括立即值(即值在指令中被编码的操作数)和用于SIMD操作的多种选项的选择。
例如,对于假发和减法运算符,SIMD寄存器REG_B100b中的四个操作数[B(3)B(2)B(1)B(0)]被加至(+)SIMD寄存器REG_A100a中的四个操作数[A(3)A(2)A(1)A(0)]或自SIMD寄存器REG_A100a中的四个操作数[A(3)A(2)A(1)A(0)]减去,从而得到寄存器REG_C100c中的结果[C(3)C(2)C(1)C(0)]。在这个示例中:
●对于加法(+):REG_C=REG_A+REG_B
●C(3)=A(3)+B(3) C(2)=A(2)+B(2)
●C(1)=A(1)+B(1) C(0)=A(0)+B(0)
●对于减法(-):REG_C=REG_A–REG_B
●C(3)=A(3)-B(3) C(2)=A(2)-B(2)
●C(1)=A(1)-B(1) C(0)=A(0)-B(0)
在多个应用中,数学操作被应用于表示可以一次表示信号样本的波形的样本序列,譬如模拟传感器的由模数转换器(ADC)数字化的输出、图像的一个以上的栅格或颜色面、表示视频的像素阵列序列等等。如在’312申请中所描述的,采样的数据波形是经常地(但不是独有地)使用模数转换器(ADC)来数字化现实世界的模拟信号(譬如,演讲、音频、图像、视频或其他传感器输出信号)来得到。采样的数据信号还能够被模拟并且直接地或在额外的波形数据处理操作之后馈入数模转换器(DAC),从而产生模拟的演讲、音频、图像、视频信号。在本说明书中,术语“采样的数据波形”还包括自基于输入或即时的采样的数据波形执行的数学和/或逻辑操作产生的即时的和/或最终的采样的数据波形。
图4描述了依据优选实施例的可用于样本序列的减法操作的SIMD寄存器架构。图4指示了序列样本的子集[A(3)...A(-1)],譬如来自采样的数据波形,可以被存储在SIMD寄存器REG_A100a和寄存器130中,并且图4还指示减法器420能够被配置为产生序列样本的一阶微分(也被称为一阶差异)。该SIMD减法元件420产生相邻样本间的差异以产生REG_B100b的微分样本。SIMD微分指令440,REG_B=DERIV(REG_A)是有用的压缩操作。样本与样本的相关性可以通过对原始的样本流进行一个以上的微分而被减少。相较于原始样本流,该微分样本使用更小的动态范围,这允许了该信号使用比表示原始样本流所要求的位数更少的位来被表示。
SIMD微分指令440产生来自SIMD寄存器REG_A和寄存器130的5个样本的序列的一阶微分,并且存储该结果至REG_B100b中:B(0)=A(0)–A(-1) B(1)=A(1)–A(0) B(2)=A(2)–A(1) B(3)=A(3)–A(2)
图5描述了依据优选实施例的积分(累加)样本序列的SIMD操作。SIMD积分操作540提供了与SIMD微分操作440的相反的操作。该SIMD积分操作540产生了来自REG_A100a和寄存器130的5个样本序列的一阶积分:
B(0)=A(0)+A(-1) B(1)=A(1)+A(0) B(2)=A(2)+A(1)B(3)=A(3)+A(2)
在图4和5中,样本A(-1)被存储在寄存器130中,而不是在SIMD寄存器REG_A100a中。用于存储样本A(-1)和其前导子A(-2)、A(-3)等的SIMD寄存器的可替换的实施例被结合图7至9在下面进行描述。依据一实施例,图6显示了依据一优选的实施例,图4的DERIV指令440的扩展的功能。有时,样本序列被交织,即数组中的奇数和偶数索引包含来自两个不同数值序列的样本。在这种情况下,具有奇数索引[A(-1)、A(1)、A(3)、A(5)等]的样本是相关的,并且具有偶数索引[A(0)、A(2)、A(4)等]的样本是相互关联的。在这种情况下,该DERIV指令640包括一个附加的参数,称为“跨步(stride)”,该参数指示在序列中相关样本间的距离。图6显示了DERIV指令640使用为2的跨步生成的下列差异:
B(0)=A(0)–A(-2) B(1)=A(1)–A(-1) B(2)=A(2)–A(0)B(3)=A(3)–A(1)
例如,在SIMD指令640中,该跨步被指示为DERIV指令的第二参数:REG_B=DERIV(REG_A,2)。
图7和图8说明了用于存储结合图4和5描述的DERIV和INTEG操作的样本序列的两个选择。图7和图8说明如何生成样本序列{x(-4),x(-3),...x(2)、x(3)}的一阶微分,其中x(-4)是序列中的第一个样本,x(3)是序列中的最后一个样本。图7描述了隐式地指示哪个SIMD寄存器中存储有早前的样本x(-1)...x(-4)的DERIV指令。早前样本的位置通过寄存器次序的隐含序列来被隐式地指示。在隐含的寄存器排序中,SIMD寄存器REG_A、REG_B、REG_C等都是隐式地按顺序排列,并且DERIV指令710使用该隐式序列来确定之前的样本x(-1)的存储位置。在图7中,REG_B 700b保存样本{x(3),x(2),x(1),x(0)},并且因为隐式寄存器顺序(REG_A700a在REG_B 700b之前),REG_A700a因此包含早前的样本{x(-1)、x(-2)、x(-3)、x(-4)}。该SIMD指令710REG_B=DERIV(REG(B))表示x(-1)被隐式地存储在SIMD寄存器REG_A(700a)的最左操作数中。
图8说明了显式地指示哪些SIMD寄存器中存储早前的样本x(-1)...x(-4)的可替换的DERIV指令。DERIV指令810(REG_h=DERIV(REG_h,REG_g)显式地具有两个寄存器标识符(REG_g 800a和REG_h 800b),其中REG_g800a包含早前的样本{x(-1),x(-2),x(-3),x(-4)},并且REG_h 800b包含样本{x(3)、x(2)、x(1)、x(0)}。因此REG_g 800a的最左操作数包含样本x(-1)。用于积分操作540的显式和隐式SIMD指令的类似的替换如下所示。积分操作REG_B=INTEG(REG_B)隐式地指示如图7中REG_A 700a和REG_B700b所示的样本次序。积分操作REG_h=INTEG(REG_h,REG_g)显示地指示为了积分操作,REG_g 800a存储早前的样本{x(-1)、x(-2)、x(-3)、x(-4)}并且REG_h800b存储样本{x(3)、x(2)、x(1)、x(0)}。
图9显示了使用两个或多个DERIV指令940的高阶微分的计算(二阶微分,三阶微分等)。在图9中,REG_A 900a保存样本{x(3)…x(0)},并且另一个寄存器(未显示在图9中)保存早前的样本{x(-1),x(-2)}。在第一DERIV指令940a[REG_B=DERIV(REG_A)]之后,REG_B900b包含一阶微分{d1(3)...d1(0)}。同样,在第二DERIV指令940b[REG_C=DERIV(REG_B)]之后,REG_C900c包含二阶微分{d2(3)...d2(0)}。用于压缩的SIMD微分(DERIV)操作可能通过SIMD积分(INTEG)操作被反向。使用图5INTEG指令540的连续操作可以用于从{d2(3)...d2(0)}再生{d1(3)...d(0)},并且从{d1(3)...d(0)}再生{x(3)...x(0)}。因此,SIMDDERIV指令940可以减低数值序列的数值范围,同时SIMD INTEG指令540可以恢复原始数值序列,该原始数值序列的微分使用一个或多个DERIV指令940生成。通过减少数字序列的数值范围,该序列可以使用更少的位来被编码以用于传输或存储。当被应用处理需要时,该序列能够使用反向操作再生。
图10描述了确定用于数值数据的二进制补码的表示形式的指数。有符号的整型的通用格式是二进制补码表示。二进制补码表示包含大小和符号位;通常地,整型的大小使用该整型的低位的整型表示形式,同时,符号位(和符号扩展位)使用整型表示形式的高位。第一个例子是一个具有12个幅值位1042b的16位整型1042(符号位为1,其次是“0”位,其次是10“无关”x位)和4个符号扩展位1042a,其是幅值区最左侧符号位(“1”)的复制。对于该第一个示例,指数是12。第二个例子是16-位整型1044,其具有14个幅值位1044b(符号位为0,其次是“1”的位,然后12“无关”x位)和2个符号扩展位1044a,其是幅值区最左侧符号位(“0”)的复制。对于第二个示例,指数是14。指数生成逻辑1120确定来自SIMD寄存器1100a(REG_A)的输入操作数的指数,并将生成的指数值存储在SIMD寄存器1100b(REG_B)中。在优选的实施例中,应用于SIMD寄存器1100a的指数生成逻辑1120可以通过并行使用N优先编码器以对在前的1(负二进制补码整型)和在前的0(正二级制补码整型)编码来实现,其中N是SIMD寄存器1100a中操作数的数目。优先编码器包括对单个操作数执行指数计算的逻辑。所确定的指数指示代表数值数据的、非符号扩展位的数目。
图11和图12描述了确定SIMD操作数的最高指数的两个可替换的SIMD指令序列。图11显示了用于确定四个SIMD操作数最大指数的两个指令序列。对于此示例,SIMD输入寄存器1100a(REG_A)存储有四个操作数{A(3)...A(0)},第一指令1140a[REG_B=EXP(REG_A)]计算用于SIMD寄存器1100a[REG_A]中的四个操作数的四个指数,使用结合图10在先讨论的指数计算逻辑1120a,并且将四个所计算的指数存储在SIMD寄存器1100b[REG_B]中。第二指令1140b[REG_C=MAX(REG_B)]从四个指数{B(3)......B(0)}中计算最大的指数,并且将该最大的指数存储在SIMD寄存器1100c[REG_C]的最右操作数C(0)中。图12描述了用于确定SIMD操作数的最高指数的单指令。对于此示例,SIMD指令1204[RA_exp=EXPMAX(REG_A)]使用时序逻辑执行指数计算1202和最大指数计算1200,而不在寄存器中保存四个个体指数。最大的指数计算优选的实施例是SIMD指令1204,因为单SIMD指令预计比两个连续的SIMD指令的操作更快。当寄存器1100a(REG_A)包含浮点型操作数,SIMD最大值的指数操作1202和1204可以应用于操作数的浮点型指数位以确定最大的指数值。对于浮点型数据类型,SIMD指令可以确定浮点型操作数的最大浮点型值。额外的SIMD指令可以规格化以基于最大浮点型值或最大浮点型指数值来规格化浮点型样本。如上文所述,具有每操作数的位数为Nv以及SIMD寄存器长度为Nr的数据类型决定SIMD寄存器中操作数的数量N。对于某些数据类型,最大指数值可以被计算以用于SIMD寄存器中N个操作数的子集。例如,八个操作数可能分为两个四操作数子集,并且为每个子集确定最大指数。如上文所述,指令句法可能包括“dType”来指示操作数的数据类型。虽然最大指数测定的操作数优选的数目为4,其他数目的操作数也是可以的。
最大的指数或块指数(block exponent)被用于对来自寄存器1100a(REG_A)的组输入进行高效的编码和打包,进一步说明如下。最大的指数或块指数对应于此处作为编码组的一组样本。对于图11和图12的示例,SIMD寄存器1100a为对应于最大指数的编码组保存四个样本。
上文所述的SIMD指令也可以用在用于从数值数据去除冗余计算机程序中。冗余去除操作减少数值输入操作数的动态范围。指数计算指令确定相关位的数目,或用于范围减少的样本的编码组的块指数。用于该编码组的块指数被用于有效的位打包操作,从而形成压缩的数据包。
图13示出了依据一实施例的半字节交织1320。“半字节”具有4位。在此示例中,SIMD寄存器1310a[REG_A]包含四个32位样本{val3,val2,val1,val0}。半字节交织器基于每个样本的位的位值重组REG_A1310a中的每个样本的位,从而形成存储在REG_Ai 1310b中的半字节。例如,当REG_A 1310a存储四个32位的样本时,每个半字节根据位值包含来自每个样本中的一位,以形成REG_Ai 1310b中的32个半字节,n0至n32。优选地,在REG_Ai1310b中,该些半字节按顺序从最低有效的(最右)半字节的最低有效位到最高有效半字节的最高有效(最左)位。图13的例子显示了{val3,val2,val1,val0}的最低有效位(bit[0])被顺序地存储在SIMD寄存器1310b[REG_Ai]中的最低半字节中,其中,“i”后缀表示“交织的”。
半字节交织器1320也可应用于位宽不是32位的操作数。对于128位的SIMD寄存器长度(例如,英特尔SSE、SSE2、SSE3),至少下面的组合是可能的:
●将四个32位的样本交织为32个4位的半字节(如图13所示)
●将八个16位的样本交织为16个字节(每个字节为8位)
●将十六个8位的样本交织为8个短整型(每个短整型字为16位)
●将两个64位的样本交织为32个4位的半字节,其中每个半字节包含来自两个样本中每一个的2位。
对于256位的SIMD寄存器长度(例如,英特尔AVX),至少下面的组合是可能的:
●将四个64位的样本交织为64个4位的半字节
●将八个32位的样本交织为32个字节
●将十六个16位的样本交织为16个短整型
●将两个128位的样本交织为64个4位的半字节,其中每个半字节包含来自两个样本中每一个的2位。
半字节交织器网络1320优选的实施方式可使用电线将寄存器1310a的位单元连接至寄存器1310b中的合适的位置,从而产生如图13所示的相继次序的半字节。此实施方式具有最小化交织操作的延迟的优点。半字节交织器的一个有用的特点是其操作可以完全使用电线来执行,如半字节交织网络1320,而不是组合逻辑(晶体管)。在片上系统(SoC)实现中,其也称为专用集成电路(ASIC),晶体管和导线被结合以创建集成电路的功能元件。实施使用电线的半字节交织的吸引人的特征是它们需要的延迟明显地少于比级联的组合逻辑元件(晶体管)。仅使用半字节交织网络1320的电线来实现的半字节交织器将比使用组合逻辑元素的可选的实施方式操作更快且延迟更低。
下面所述的位打包操作包括从样本选择将要打包的位子集。半字节的相继次序允许更简单的操作以从寄存器1310b REG_Ai选择位子集以进行位打包操作。
通常情况下,选择四个32位样本{val3,val2,val1,val0}的四个M位的子集需要被称为掩蔽电路和桶形移位器的几个电路。掩蔽电路通常清除(设置为0)输入操作数的一个或多个位;掩蔽电路可选地清除输入操作数的Nmask最高有效位或Nmask最低有效位。桶形移位器是相对复杂的设备,其通过将输入操作数移至左边(上移)或移至右边(下移)来将输入操作数置于几个输出位单元中的一个。
用于位包装的可替换的实施方式可采用掩蔽电路和桶形移位器。例如,可替换的实施方式能够以下列方式将SIMD寄存器1310a{val3,val2,val1,val0}四个操作数[REG_A](与示例指数19)打包进SIMD寄存器1310b[REG_Ai]:
●Val0[18:0]→REG_Ai[18:0]
●Val1[18:0]→REG_Ai[37:19]
●Val2[18:0]→REG_Ai[56:38]
●Val3[18:0]→REG_Ai[75:57]
以这种方式交织位要求以下的掩蔽和移位操作:
●掩蔽val0的上部13位以及传送到REG_Ai[18:0]
●掩蔽val1的上部13位、右移val113位,以及传送到REG_Ai[37:19]
●掩蔽val2上部的13位,右移val2 26位,以及传送到REG_Ai[56:38]
●掩蔽val3的高13位,右移val339位,以及传送到REG_Ai[75:57]
这些掩蔽和移位操作需要重要的组合逻辑,该逻辑引入REG_A 1310a和REG_Ai1310b之间的延迟。
相比之下,基于位值(如图13的REG_Ai 1310b所示),半字节交织器优选的实施方式仅使用电线将不同顺序的输入位进行分组。对于位打包的示例,75个顺序位的子集可以选自REG_Ai[75:0]。在SoC和ASIC器件的设计中,更快的速度和更低的延迟是优选的特点。半字节交织1320优选的实施方式能够操作得明显更快,并且比使用掩蔽电路和桶形移位器实现的可替换的位打包器具有更小的延迟。
在位打包操作的优选的实施例中,位的一个子集选自REG_Ai 1310b的交织位。该选择操作可以取决于SIMD输入寄存器中的操作数的数据类型。
图14示出了当操作数是有符号的二级制补码整型时交织和选择的一个示例。SIMD寄存器REG_A 1310a包含四个32位的操作数,该操作数具有由“sgnE”指示的符号、符号扩展位和由“mant”指示的尾数位。该变量Nexp指定将为每个样本被保存的位的数目。对于此示例,Nexp=24,包括1个符号位和23个尾数位。二级制补码算法生成存储在SIMD寄存器1310a[REG_A]中每个样本的最高有效(最左)半字节中的附加符号扩展位。将在半字节交织的SIMD寄存器1310b[REG_Ai]的位打包期间存储的位是Nexp最低有效(最右)半字节。对于此示例,Nexp=24个最低有效半字节,n0到n23,其被选择以打包。包括SIMD寄存器REG_Ai1310b中的Nexp最右半字节的子集对应于从SIMD寄存器REG_Ai 1310a中的每个操作数选择Nexp位(包括1个符号位和Nexp-1个尾数位)。将要被打包的半字节的数目,Nexp,可以适合于使用结合图10所描述的技术的每组SIMD寄存器操作数。
图15示出了当操作数是单精度浮点型样本时的交织和选择的示例。SIMD寄存器1310a[REG_A]包含四个32位的单精度浮点型样本,每个包括符号位“s”、浮点型指数位“ex”以及尾数位“mant”。例如,浮点型算法的IEEE 754标准指定浮点型为1个符号位([31:0]的第31位)、8个指数位(位[30:23])和23个尾数位(位[22:0])。使用半字节交织网络1320对SIMD寄存器1310b的最左(最高有效)半字节进行打包保持了每个浮点型操作数的符号位、每个浮点型操作数指数位中的一个或多个以及每个浮点型操作数的一定数量的最高有效(最左)尾数位。将要被打包的半字节数目由Nexp指定。对于图15中的示例,Nexp=23,每个样本的23个最左的位将被存储以打包,包括1个符号位、8个指数位以及和14个尾数位。该子集包括SIMD寄存器1310b的Nexp=23最高有效(最左)半字节,其对应于从每个操作数SIMD寄存器1310a中选择Nexp位。对于浮点型的样本,Nexp可能被选择以在解码(解压)之后实现所需的用户指定的或者依赖于数据的数值质量,或在编码(压缩)后实现所需的用户指定或者依赖于数据的压缩比。Nexp越大,解码(解压)的结果的质量越高,但编码(压缩)的压缩比越低。’330申请,题为“浮点型数据的计算高效压缩”描述了用于确定尾数位数以为浮点型样本编码的方法。
图16示出了压缩的数据包的一个配置。被应用于样本的编码组的块浮点型编码提供指数令牌E_TOK1—E_TOKM和尾数令牌MANT_1—MANT_N。对于此示例,一个指数令牌E_TOK表示编码组的四个尾数的块指数。四个尾数令牌中的每个浮点型编码组具有由块指数的值所指示的相同数目的位。每个四尾数组的指数令牌E_TOK表示该组的指数或其与先前指数的指数差异。第一指数令牌E_TOK1将被绝对地编码,也就是说,块指数值被直接保存到压缩的数据包。在优选的实施例中,第一次指数令牌被使用8位来表示,因此,从0到255之间的指数值可以被表示。后续的块指数通过对之前的块指数和当前的块指数之间的差异进行编码而被编码。例如,如果6个编码组的块指数序列是{10,9,8,10,11,12},该6个块指数将使用序列{10,-1,-1,+2,+1,+1}来被编码。因为指数差异经常是小范围的(如范围-2至+2},相较于对每个指数进行绝对编码(即使用8位),指数差异可以使用更少的位来编码。因此可以使用表示指数差异的指数令牌来对指数编码,而不是使用块指数自身。在图16的配置中,每个指数令牌E_TOK被编码组的4个尾数令牌MANT_i紧跟。例如,指数令牌E_TOK1后紧接着尾数令牌MANT_1、MANT_2、MANT_3、MANT4,并且指数令牌E_TOK2后紧跟着4个尾数令牌MANT_5、MANT_6、MANT_7、MANT_8。压缩的数据包可以包括报头610,该报头610包括可以运输用于解码器的配置参数的Nhdr位。压缩的数据包的报头、指数令牌和尾数字段可能有不同的位宽。压缩的数据包的链接位可以一次性地被存储在内存Nb位中,其中Nb是计算系统的优选的内存宽度。Nb的示例值为32、64或128位。
图17示出了用于压缩的数据包指数令牌和尾数令牌的另一种配置。在此配置中,指数令牌E_TOK表示最连续的编码组的最大指数的两个指数差异。指数令牌E_TOK对应于两个块指数e1和e2。块指数e1指示第一4尾数令牌MANT_a到MANT_d中的每一个令牌的位数,指数e2指示第二4尾数令牌MANT_e到MANT_h中的每一个令牌的位数。压缩的数据包可以包含用于图16和17所示的指数令牌和尾数令牌的配置的结合,其中,指数令牌后紧跟着4或8个尾数。选择的一个或两个指数差异的指数令牌的选择如下结合图19和26和专利803进一步地描述。
图3-17描述了使用SIMD操作的压缩与解压功能的单个组件。接下来介绍了使用这些组件在实施方案中的压缩器52(图1)和解压程序80(图2)。
图18示出了使用SIMD寄存器和操作的压缩器52的实施例。本例中的冗余去除器1801的此示例的资源包括SIMD输入寄存器1800a、1800b和1800c、指数寄存器1200a、1200b和1200c和利用相关的与SIMD寄存器选择器1810b和指数寄存器选择器1810a的微分选择信号(DERIV_SEL)1880。位打包器1802的此示例的资源包括包括半字节交织器1860、指数寄存器1820a和1820b、指数差异寄存器1830a和1830b、中间SIMD寄存器1810a和1810b、指数令牌生成器1700、输出分级寄存器1840,和输出大小寄存器1850。该SIMD输入寄存器1800a[RA]保存提供用于冗余去除器1801的操作的数值操作数的输入样本。在可替换的实施例中,可以包括SIMD衰减操作,其将输入寄存器1800a[RA]的样本乘以衰减因子并将结果存回寄存器1800a[RA],其中,衰减因子存储在另一个寄存器中(未显示)。冗余去除器1801和位打包器1802的操作减少了存储SIMD输入寄存器1800a’的数值操作数所需的位数。
例如,SIMD输入寄存器1800a[RA]可以包含4个32位操作数,其操作数可以是4个32位整型或4个32位浮点型样本。SIMD寄存器1800b[RB]保存SIMD指令940aRB=DERIV(RA)的结果,SIMD输入寄存器1800a输入样本的一阶微分。SIMD寄存器1800c[RC]存储SIMD指令940bRC=DERIV(RB)的结果,SIMD输入寄存器1800a的输入样本的二阶微分。寄存器1200a[RAe]、1200b[RBe]和1200c[RCe]分别存储SIMD寄存器1800a[RA]、1800b[RB]和1800c[RC]的块指数。微分选择信号1880[DERIV_SEL]控制SIMD寄存器选择器1810b和指数寄存器选择器1810a的操作。在一种替代方法中,可以根据用户所选参数来设置微分选择信号1880。在另一种选择中,冗余去除器1801可以测量样本和微分,并且设置微分选择信号1880以选择提供最大压缩的寄存器。在优选的实施例中,对于将在相同压缩的数据包中存储的每组样本,微分选择信号1880是固定的,并且微分选择信号1880在包报头610中被指示,如结合图24所进一步描述的。
寄存器选择器1810b为半字节交织器1860提供对所选的SIMD寄存器RA、RB或RC的访问。寄存器选择器1810b可以通过多路复用器来实现,该多路复用器具有来自寄存器1800a-c的三个输入和提供给半字节交织器1860的一个输出。多路复用器输入和输出的宽度优选地与SIMD寄存器1800a-c相同。对于此示例,该宽度是128位,但其他的宽度也是可能的。半字节交织器1860根据所选择的寄存器的操作数的位值对操作数的位重新排序,如图13所描述的,并且将所交织的位存储在寄存器1812b(RD)中。对于每个寄存器1800a-c中的四个操作数的此示例中,在寄存器1812b(RD)中的每个半字节具有来自所选的寄存器的每个操作数的一位。中间的SIMD寄存器1812a(RE)和1812b(RD)存储用于顺序编码组的半字节交织器1860的半字节交织的输出。
如结合图12中所描述的,寄存器1800a-c的最大指数值根据EXPMAX指令1204来计算,并且被存储在相应的指数寄存器1200a-c中。选择器1810a根据微分选择信号1880来选择指数寄存器RAe、RBe或RCe。所选的指数Rae、RBe或RCe对应于选定的SIMD寄存器RA、RB或RC。顺序选择的指数值被存储在寄存器1820b和1820a中。寄存器1820a存储来自来先前迭代的指数e1。用于连续迭代的所选的最大指数值之间的差异被计算,并且存储在指数差异寄存器1830a和1830b中。指数差异寄存器1830a保存最大的指数值e1和在e1之前的最大的指数值e0之间的差异d1,同时,指数差异寄存器1830b保存最大指数值e2和最大指数值e1之间的差异。指数令牌生成器1700(结合图20、21被进一步描述)生成指数令牌“tok”1842,该令牌需要令牌长度TOK_LEN位。在优选的实施例中,指数令牌的长度可能是0、4或8位。SIMD寄存器1810a(RE)和1810b(RD)存储半字节交织器1860的顺序半字节交织输出,同时,指数令牌生成器1700生成指数令牌1842。输出分级寄存器1840(RF)存储的输出存储指数令牌1842和中间寄存器1812a的、已进行令牌长度TOK_LEN位的移位的一个版本。
输出大小寄存器1850存储将由编码的存储打包器2005打包的位的数目Nnew,其结合图20和21被进一步描述。如果输入寄存器1800a(RA)中的操作数的数据类型是32位整型,如结合图14所述,来自输出分级寄存器1840(RF)的多个最低有效半字节将被打包。如果输入寄存器1800a中的操作数的数据类型是32位浮点型数,如图15所述,来自输出分级寄存器1840(RF)的多个最高有效位将被打包。参数Nnew指示将被打包的位的数目(包括指数令牌和编码组的编码的尾数)。
指数的令牌生成器1700基于指数差异值或最大指数值来提供指数令牌。图19显示了用于在指数令牌和指数差异值或最大的指数值之间的映射的指数令牌生成器1700优选的编码表。指数令牌生成器1700的输入包括最大指数1820a(e1)、最大指数1820b(e2)、指数差异1830a(d1)和指数差异1830b(d2)。指数令牌可以表示1个最大指数(e1)或2个最大指数(e1和e2,其间接地由指数差异d1和d2来表示)。指数令牌生成器1700生成落入以下三个条件的指数令牌:
●联合的指数条件-指数令牌1842表示2个联合编码的指数差异,并且指数令牌长度1844是4位,如行1870所示
●差异指数条件-指数令牌1842表示1个指数的差异,并且指数令牌长度1844是4位,如行1872所示
●绝对的指数条件-指数令牌1842表示绝对编码的1个指数,并且指数令牌1844长度为8位,如该表底部的行所指示,如行1874所示。
当指数差异1830a(d1)和1830b(d2)均位于范围{-1到+1}之间时,相应的最高指数e1和e2都可以使用4位指数令牌1842来表示,其令牌长度1844为4位。当指数差异1830a(d1)和1830b(d2)都不在范围{-1至+1}中,但指数差异d1是在{-2到+2}的范围中时,单指数e1可以使用4位的指数令牌1842来表示,其令牌长度1844为4位。当d1 1830a或d2 1830b不在{-2到+2}的范围中时,最大指数e1使用8位的指数令牌1842来被绝对编码,其令牌长度是8位。在最后的条件下,指数令牌以3位‘'111’开头并且后面有5位‘abcde’,这能够表示从0到32的绝对指数长度。当编码组指数为0时,没有尾数位因该编码组而被发送。指数令牌生成器1700还计算指数令牌位加尾数位的总数来确定Nnew1850,将要为该编码组打包的位数。编码组中每个编码尾数的位数是由最大指数值给出。编码组中尾数的位数由编码组中的尾数的数目乘以每个编码的尾数的位数的数目所得到。根据d1 1830a和d2 1830b值,指数令牌生成器1700可以生成一个或两个指数令牌1842、令牌长度(TOK_LEN)1844值和Nnew 1850值。在联合指数编码期间,当为两个最大指数仅生成一个令牌时,如行1870行的令牌长度所指示的,没有指数令牌为第二尾数组而编码。所得到的编码组对应于图17中所示的配置。例如,当{d1、d2}={0,0}时,指数令牌1842是‘0100’,对于第一尾数组,令牌长度1844是4,对于第二尾数组,令牌长度1844是0(无令牌)。同样,对于第一尾数组,Nnew 1850是e1+4,对于第二尾数组,Nnew 1850是e2。‘803专利,题为“信号数据的块浮点型压缩”描述了指数令牌生成器1700的其它实施例。
图18中所描述的冗余去除器1801的示例计算一阶和二阶微分和寄存器1800a-c的所对应的最大指数值。依据微分选择信号1880,选择器1810a、b每个从三种备选方案中选择。在其他实施例中,冗余去除器1801可以包括用于其他高阶微分的寄存器和指令,其中选择器1810a,b可以从三种以上的备选方案中选择。在另一个实施例中,冗余去除器1801可以计算一阶微分,而不是二阶微分,使用两个寄存器1800a、b和两个指数寄存器1200a、b,并且选择器1810a、b将从两个备选方案中选择。在另一个实施例中,冗余去除器1801可以使用一个固定的微分阶数,并且将不包括选择器1810a和1810b。在另一个实施例中,冗余去除器1801可以为寄存器1200a计算寄存器1800a中输入样本的最大指数,并且可以不包括微分操作、相关寄存器1800b、c和1200b、c以及选择器1810a和1810b。对于此可替换的实施例,位打包器1802将对寄存器1800a中的输入样本的块指数和尾数进行编码和打包。
图20和图21示出了编码的内存包2005的操作,压缩的最后级将固定宽度Nout的位写至压缩数组2130。例如,Nout可能是32、64或128位。对于图21的示例,Nout=128。压缩数组2130可以被存储在任何合适的片上或片外存储器中,包括缓存内存(通常位于片上,位于与编码逻辑相同的裸片上)或双数据速率随机存取(DDR)内存(通常位于与编码逻辑分开的片外裸片上)。在优选的实施例中,输出寄存器2000a和2000b具有与压缩数组2130相同的宽度。在图20的示例中,输出寄存器2000a和2000b均是128位宽(Nout=128),与SIMD寄存器1800a-c的宽度相同。根据指数尾数选择器2095(HDR_OR_EM)的值,编码的存储打包器2005能够对具有报头长度2070位(HDR_LEN)或打包的指数令牌的报头位2080和具有Nnew205位(Nnew)的尾数位2080进行编码。在优选的实施例中,HDR_OR_EM选择器2095利用值0对EM进行编码(编码指数+尾数位2060)并且利用值1对HDR进行编码(编码报头位2080)。输出寄存器2000a、2000b实现双缓冲技术,其中,样本被写入到第一(“活动”)寄存器,直到该寄存器包含超过Nout=128位,因此,剩余位被存储在第二(“溢出”)寄存器中。位计数寄存器2010(Ncount)包含存储在两个计数输出寄存器2000a和2000b中所有位的计数。当位计数寄存器2010在打包新的报头或指数尾数位之后超过Nout时,该“活动”的输出寄存器2000a或2000b将被写到编码的输出数组2130。图21示出了用于将打包的输出字写到压缩的数组2130的操作。当新的位被提供给编码的存储打包器2005时,根据HDR_OR_MEM 2095的值,位计数寄存器2010递增Nnew 2050或HDR_LEN 2070。位计数寄存器2010通常比对Nout编码所需的位数要宽1位。例如,当Nout=128位宽(需要7个地址位),位计数寄存器2010将是8位的宽度。位计数寄存器2010的最高有效位(MSbit)指示输出寄存器2000a或2000b是否将充满指数尾数位2060或报头位2080。当MSbit 2010a=0时,输出寄存器2000a是“活跃”寄存器;当MSbit2010a=1时,输出寄存器2000b是“活跃”的寄存器。编码的存储打包器2005将Nnew 2050或HDR_LEN 2070位与当前存储在“活动的”寄存器(2000a或2000b)中的Ncount位2010匹配。在“活动的”寄存器以及被打包后,剩余的任何溢出位被存储在“溢出”寄存器(2000b或2000a)中。
在将新的位打包进输出寄存器2000a和/或2000b中后,如果更新的位计数寄存器2010a等于或超过Nout,以往“活跃的”寄存器的所有Nout位将被写入编码的输出数组2130。图21示出了在写控制逻辑2115的控制下,“活跃的”寄存器的Nout位如何被写入编码的输出数组2130的细节。存储器阵列可以使用至少3个寄存器来写入到在相关联的编码的输出数组2130中的位置:
●地址寄存器2126
●数据寄存器2128
●写使能信号2117。
写控制逻辑2115维持存储压缩数组2130中将要被写入的下一位置的地址的压缩数组指针2120。在位计数寄存器2110已经递增了Nnew2050或HDR_LEN2070后,写控制逻辑2115检测位计数器2010的MSbit2010a何时已更改状态(从0到1,或从1到0)。当这发生时,此前的“活跃的”寄存器现在包含将被写入到压缩数组2130的Nout位。为了执行该写操作,写控制逻辑2115激活写使能信号2117,这将使得数据寄存器2140中的内容被写入到地址寄存器2126中指定的地址(压缩数组指针2120中存储的地址)。如果MSbit2010a被设置为“1”,输出寄存器位2000a的Nout位将被写入到数据寄存器2128。如果MSbit2010a被设置为“0”,输出寄存器2000b的Nout位将被写入到数据寄存器2128。写多路复用器2124通过倒相的MSbit2110a信号(由反相器2122进行倒相)来控制。当反相器2122的输入是0时,输出为1。当2122反相器的输入是1时,输出为0。当数据寄存器2128中的新写入的数据值已经被写入压缩数组2130后,写控制逻辑2115使能地址递增信号2119,其递增输出指针。压缩数组指针2120可以递增1或其他适当的数量,取决于用于访问压缩数组2130的寻址方案。结合图16和17所述的,压缩数组2130可以保存一个或多个压缩的数据包。
综上所述,图18至21描述了压缩器52或数值编码器的实施例,其使用SIMD指令序列,接受SIMD输入寄存器中的整型或浮点型的样本,并且产生布置在压缩的数据包中并且写入压缩数据2130的编码的压缩数据。图22-30将开始描述解压器80(图2)的操作或数值解码器的操作,其接收来自压缩数据包的编码的压缩数据并且输出SIMD输出寄存器中的解码的整型或浮点型样本。减压操作包括用于位解包和信号再生的操作。用于位解包的操作处理压缩的数据数据包以产生用于编码组的未打包的尾数和编码指数。信号再生的操作反转应用于压缩的冗余去除操作,以产生解压的样本。在图22-30中描述的示例中,SIMD寄存器被假定有128位的宽度并存储四个32位的整型或四个32位浮点型样本。在可替换的实施方式中,SIMD寄存器可以存储多于或少于128位,并且SIMD寄存器中的操作数可以是8、16、32、64,其中,操作数通常是SIMD寄存器宽度的整型的因子。SIMD寄存器和操作数的变化不限制本发明的范围。下面的例子都只是说明用于解码器的SIMD指令解码器的一种实施方式。
图22示出了位解包器220的操作,位解包器2200使用SIMD指令序列来解码包含编码的(压缩的)整型或浮点型样本的压缩数组2130。位解包器2200包括用于四个客户端操作的功能模块:位收件器2220、包报头解析器2240、指数解码器2260和尾数解包器2280。位收件器2220获取来自压缩数组2130的打包的单元(通常具有32、64或128位的宽度),使用索引到压缩数组2130的地址ADDR。除了指向压缩数组2130的地址指针,位收件器2220维持一个位计数器从而当前Nbits最新位都可以被位收件器2220的客户端所使用。位收件器2200将包报头数据和压缩的数据包的压缩数据分离。对于包报头数据,根据其状态,位收件器2220公式将最近的48位传送到数据包报头解析器2240,根据每个包报头610中的控制位,其解析该48位并且确定32或48位是否是必需的。包报头解析器从用于解码操作的、如在图24所述的报头数据中提取参数。如在图16和17中所描述的,压缩的数据包含指数令牌和尾数令牌。对于指数令牌,根据其状态,位收件器2220将8个最新位传送至指数解码器2260,指数解码器2260对每个指数令牌1842解码并决定0、4或8位构成当前指数令牌。对于尾数令牌,根据其状态位,收件器2220将4*Nexp个最近位传送至尾数解包器2280。对于此示例,4*Nexp<=128。尾数解包器2280对尾数令牌的编码组进行解包。为重构整型样本,尾数解包器2280适当地对尾数组的最高有效位进行符号扩展。为重建浮点型样本,尾数解包器2280将尾数组的最低有效位填入0。图23进一步介绍了在INT_OR_FLOAT信号的控制下,尾数解包器2280重新构造整型或浮点型样本。由此产生的解码的尾数被存储在解包的SIMD寄存器2275中。
图23显示了依据一优选的实施例的位收件器2220的操作。位收件器2220的客户端将请求(或被提供)达128位,并不是所有的将被需要。位收件器2220的操作为其所有客户端执行三个通用功能:
●它保持解码位寄存器2322中的至少128位,
●它向其客户提供N_FETCH位2324,以及
●它通过对解码位寄存器2322右移位将R_SHIFT位2328丢弃,然后选择性地从压缩数组2130中读取额外的128位以保持解码位寄存器2322中的至少为128位。
如在位收件状态机表2326中所示,位收件器2220具有三种状态:报头解析状态、指数解码状态和尾数解包状态,这对应于先前结合图16、17讨论的编码单元的三种类型。在报头解析状态,位收件器2220向包报头解析器2340提供来自解码位寄存器2322的48位。在包报头(进一步如图24中所述的)优选的实施例中,包报头包含32或48位。在解析包报头之后,包报头解析器2340返回32或48的R_SHIFT值,或在优选的实施例中,返回0或1的HDR_LEN指示符至位收件器2320。位收件器2320然后将解码位寄存器2322(当HDR_LEN=0时)右移32位或右移48位(当HDR_LEN=48时)。如果解码后位寄存器2322的位的数目在右移后是少于128,则包报头解析器2340从压缩数组2130读取额外的128位。同样,位收件器2220提供8位至指数解码器2360,指数解码器2360返回0、4或8位的R_SHIFT计数(或在优选的实施例中,0、1或2的TOK_LEN指示符为)至位收件器2220。然后,当TOK_LEN=0、1或2时,位收件器2220对解码位寄存器2322分别右移0、4或8位。如果在解码后位寄存器2322中右移的位数是少于128,则包报头解析器2340从压缩数组2130读取额外的128位。同样,位收件器2220提供128位至尾数解压器2360,尾数解压器2360返回4*Nexp的R_SHIFT计数,其中,Nexp是当前的尾数组的指数位宽。位收件器2320然后对解码位寄存器2322右移4*Nexp位。如果解码位寄存器2322中的尾数的数目在右移后是少于128,那么包报头解析器2340从压缩数组2130读取额外的128位。
图24描述配置数据包报头610。在优选的实施例中,当压缩的数据包包含压缩的整型样本时,包报头610包含32位,或压缩的数据数据包中包含压缩的浮点型样本时,包报头610包含48位。数据包报头610包括六个字段610a到610f。列2451列出了每个包报头字段的示例的名字,而列2452提供有关每个字段的注释,在优选的实施例中,包括用于该字段的位编码。同步字段610a有助于将数据从压缩的数据包同步,从而每个压缩的数据包以相同的SYNC值开始。衰减字段610b保存用于在如下所述的信号再生后合适地放大再生的尾数的参数ATTEN。微分字段610c指定在信号再生期间需要多少次积分操作,这对应于由冗余去除器1801的选择器1810b所选择的微分操作的顺序。数据类型指示符字段610d指示编码的尾数表示整型还是浮点型样本。保留的字段610e可能用于携带额外的编码参数。可选浮点型的指数比例字段610f可以用于转换重建的整型样本至为浮点型样本。如果数据类型指示符字段610d指示的数据类型是浮点型,浮点型指数比例字段610f出现在包报头610中。
图25显示了指数解码器2260的框图。位收件器2220提供指数令牌TOKEN82564至指数令牌解码表2570,其在图26中被进一步地描述。在优选的实施例中,指数令牌2564包含8位,以反映用于绝对指数编码的8位的指数最大宽度。指数解码表2570生成令牌长度TOK_LEN指示符2562,并将其提供回至位接收器2220以控制R_SHIFT 2328。指数的译码表2570还会生成指数差异EXP_DIFF12575和指数差异EXP_DIFF2 2576。在优选的实施例中,指数解码器2260维持内部当前指数寄存器2573,其表示最近解码的指数。当前指数寄存器2573的内容被添加到指数差异EXP_DIFF1来生成指数1 2568a。指数1 2568a被添加到指数差异EXP_DIFF2以生成指数EXP2 2568b。如图25所述,指数EXP1 2568a和指数EXP2 2568b并不总是有效,所以指数有效信号EXP1_22566指示指数EXP1 2568a和指数EXP2 2568b一个或两个是有效的。在某些情况下,指数令牌解码表2570检测指数已经被绝对编码,这需要8指数令牌位。在这种情况下,也会生成额外的绝对指数值ABS_EXP2571。最后,指数令牌解码表2570生成指数选择控制信号EXP_SEL2572以控制指数选择复用器2574,指数选择复用器2574依次地控制当前指数寄存器2573的更新的内容。在指数解码周期后,当前的指数寄存器2573可以包含指数EXP1 2568a、指数EXP2 2568b或绝对指数值ABS_EXP2571。当前的指数寄存器中的解码的指数表示尾数令牌的相应编码组的最大的指数。
图26示出了用于指数解码器2260操作的指数令牌解码表2570。表条目中的“x”表示“不关心”的条件。在优选的实施例中,0、4或8位的令牌长度可能编码为2位二进制值0、1或2以传递回位接收器2220。由于一些指数令牌表示两个指数(如先前结合图18所述),指数令牌解码表2570可以提供1或2个令牌长度指示符TOK_LEN 2562至位收件器2220。为给定的指数令牌2564而生成的令牌长度指示符的数目在列2562中由1或2个令牌长度指示符的存在而指示。作为指数令牌2564的函数,用于指数差异EXP_DIFF1 2575和指数差异EXP_DIFF22576的值在图26中被列出。作为指数令牌2564的函数,指数有效信号EXP1_2 2566的值、绝对指数值ABS_EXP2571和指数选择控制信号EXP_SEL2572在图26中列出。总之,指数解码器2260为每个指数令牌2564生成1或2个指数,分别提供足以解压4或8编码的尾数的指数信息。
图27示出了尾数解包器2280的功能。指数解码器2260向尾数解包器2280提供指数有效信号EXP1_2 2566和结合的指数寄存器EXPS 2568中的一个或两个指数。尾数解压控制块2784内部存储1或2个指数,并且产生一个或两个自位收件器2220的128位请求。通过请求来自位收件器2220的最近的128位,由于最大指数值是32,尾数解包器2280能够将4个打包的尾数解码至非打包的尾数寄存器U_MANTS2275。当指数有效信号EXP1_22566指示结合的指数寄存器EXPS2568中的一个指数是无效的,尾数解压控制2784使四个打包的尾数能够从接收自位收件器2220的打包的尾数位P_MANT2782被解码。当指数有效信号EXP1_2 2566指示结合的指数寄存器EXPS2568中的两个指数是有效时,尾数解包控制2784使两组的四个打包的尾数依次地被解码。根据由包报头解析器2240先前自包报头610解码的数据类型指示符INT_OR_FLT 610d,尾数多路复用器2700从整型符号扩展器2790或从浮点型尾数填充器2795中选择半字节反交织器3050的输入。
如结合图14和15在前文所述的,32位整型的最低有效半字节或32位浮点型样本的最高有效半字节被存储在打包的尾数P_MANTS2782中。如结合图28和29所示,整型符号扩展器2790和浮点型尾数填充器2795为整型和浮点型样本将打包的尾数2782中的半字节对齐。尾数多路复用器2700使用数据类型指示符610d来选择适当的半字节对齐方式。如结合图30所示的,半字节反交织器3050完成尾数解包操作,并生成解压的SIMD寄存器2275的内容U_MANTS。
图28显示了整型符号扩展器2790的操作。给定的128个候选打包的尾数位2782(P_MANTS)和块指数(Nexp),整型符号扩展器2790将Nexp半字节自寄存器2891a复制到SIMD分级寄存器2898a中最低(最右)的Nexp半字节。此外,包括打包的尾数的四个符号位SGN2894的最高半字节2893s被复制并被复制至分级寄存器2898a的上部半字节。完成此操作后,分级寄存器2898a的最高有效半字节全包含符号扩展半字节。如果分级寄存器2898a被尾数多路复用器2700选择,然后其准备好半字节反交织。
图29示出了浮点型尾数填充器2795的操作。给定128个候选的打包尾数位2782和块指数(Nexp),浮点型符号扩展器2790将Nexp半字节自寄存器2891b复制到SIMD分级寄存器2898b中最高(最左)的Nexp半字节。此外,分级寄存器2898b的下部半字节2997被以零填充。完成此操作后,分级寄存器2898a的最高有效位包含合适的浮点型半字节,并且下部的尾数半字节2997包含零。如果被尾数多路复用器2700选择,然后分级寄存器2898b准备好半字节反交织。
图30显示了半字节反交织器3050的操作。半字节反交织器3050可以解包由结合图13所述的半字节交织器1320和结合图18所述的半字节交织器1860生成的半字节交织的位。半字节反交织器3050的输入以整型格式抵达半字节交织的SIMD分级寄存器2898a或以浮点型格式抵达半字节交织的SIMD分级寄存器2898b。在经半字节反交织器网络3062处理后,反交织的位被存储在SIMD寄存器2275中。反交织器网络3062还原原始的位顺序,以重建在交织前样本的数据格式。在这例子中,32位整型或浮点型样本,由val0、val1、val2和val3表示。在尾数解包器2280的背景下,半字节反交织器3050恢复用于被打包的位的子集的位的尾数的原始顺序。尾数解包器2280通过对浮点型样本进行零填充或恢复二级制补码整型样本的符号扩展位来该该尾数还原到样本的原始长度。尾数解包器2280的这些操作将打包的尾数转换为具有整型或浮点型格式的解包样本。寄存器2275中的解包的尾数U_MANTS表示通过信号再生操作来进一步处理的解包的样本。
信号再生操作可能应用于SIMD寄存器2275中解包的样本,以反向冗余去除器1801所执行的操作。信号再生操作可能包括如之前在图5中描述的SIMD积分指令540。该积分操作按照来自微分字段610c的参数DERIV来执行,该参数之前由报头解析器2240解码。该DERIV参数决定了积分操作的积分阶数,这将反转由冗余去除器1801计算的微分。当衰减操作在压缩过程中被应用到的样本时,解压操作包括乘以放大因子的操作,该放大因子大约地反向了该衰减因子。该放大因子基于来自包报头610的衰减字段610d的ATTEN参数所确定。
图31和32给出了用于编码(压缩)操作和解码(减压)操作的伪代码指令的示例。伪代码不是旨在正确编译或考虑到在句法正确、充分运作的软件实现中所需的所有可能的条件。图31和32中的伪代码指令的示例仅说明用于实施压缩与解压操作的SIMD指令序列。许多伪代码指令运算符具有前缀“V_”,这是典型的SIMD运算符名称。
图31提供了用于对4N整型或浮点型样本编码的程序的伪代码SIMD指令的示例。4N中的“N”表示的编码器函数700的迭代的次数,其中每次迭代处理4个样本,共4N个样本。编码器函数700利用指定将被编码的第一个数值操作数的地址的输入数组指针701来指定数值操作数将被编码的输入数组。例如在图31中,访问存储器的SIMD指令将从存储器(譬如,片上缓存)读取4个32位样本(共计128位),或向存储器(譬如,片上缓存)写入4个32位样本(共计128位)。输出数组指针701b指定编码的输出值将存储的位置的起始地址,即压缩数组2130(前面所述在图21)的起始地址。循环计数器701c指定将被编码的样本数目,该数目被除以4(因为每个SIMD内存读取指令815获取四个32位操作数)。衰减器设置701d指定将要编码的4N个样本的衰减值。通常,衰减器的设置落在0.0至1.0的范围中。参数“DERIV”对应于微分选择器DERIV_SEL1880(先前结合图18进行讨论的),并指定当前编码组的哪个微分将被打包。
编码器函数700一般分三个阶段执行:
●初始化(元素705、800、710和805)
●编码循环(元素810、815、820、940a、940b、817、720和725)
●清除(元素730、735、825、830和740)。
当启动指针寻址指令805将输出数组指针701b保存在称为“startPtr”的局部变量中时,初始化阶段开始。包报头指令705[V_PACK_HDR]将衰减器设置701d和微分选择器1880写入编码的数据包报头610。在其他实施例中,包报头指示705可包括额外的报头参数,譬如在图23中所述的那些。衰减器初始化指令800加载衰减器设置610d到所有四个32位操作数的SIMD寄存器R4,这将被用在编码环路中从而以相同的数量对输入样本进行衰减。微分说明符指令710将微分选择参数“deriv”或DERIV_SEL1880加载至寄存器中,如之前结合图18所述的,该寄存器控制指数寄存器选择器1810a和SIMD寄存器选择器1810b。
图31的编码循环开始于循环初始化和控制指令810,其指定了循环计数器变量“i”的起始值和结束值,以及“i”随着每个循环迭代而递增。SIMD寄存器加载指令815[V_LOAD]将四个32位操作数从当前输入的数组指针701a加载到SIMD寄存器R1中。该输入数组指针在4-操作数接收后递增,有效地将输入数组指针701a推进到下一个4-操作数存储位置。SIMD乘法指令820将SIMD寄存器R1中每个操作数与衰减器设置701d(以前存储在SIMD寄存器R4中)相乘。两个顺序SIMD微分指令940a和940b生成四个输入操作数的一阶和二阶微分,如上文结合图6、7、8和9所述。一阶微分存储在SIMD寄存器R2中,二阶微分储存于SIMD寄存器R3中。最大指数的计算和选择指令817[V_EXPMAX]将EXPMAX1204指令的操作、DERIV_SEL参数1880和之前结合图12和18所描述的选择器1810a和1810b相结合。可替换地,V_EXPMAX指令817的操作可以计算选定的SIMD寄存器R1、R2、R3中的样本的最大指数,由微分选择参数“deriv”决定的(即DERIV_SEL1880)。在另一种选择中,V_EXPMAX指令817的操作计算SIMD寄存器R1、R2和R3中样本的最大指数,并且根据微分选择参数“derive”(即DERIV_SEL1880)选择从最大的指数中(即,从图18中的寄存器1200a-c中)选择。V_EXPMAX指令817的操作在寄存器Re(即寄存器e21820b)中存储最大的指数,并且从R1、R2和R3中对应选择的尾数存储至SIMD寄存器R5中。该打包指令V_PACK_REG720结合如图18和19所描述的半字节交织器1860和指数令牌生成器1700的操作。该操作使用SIMD寄存器Re中的最大指数信息来从所选SIMD寄存器(R1、R2、R3)来生成具有与四个打包的尾数1840的相应的指数令牌1842。SIMD条件性写指令V_WRITE_IF_FULL725实施如图20和21所述的编码的存储打包器2005的操作。这些操作将指数令牌1842和四个打包的尾数1840与输出寄存器2000a、b中任何先前存储的位相结合,并且将输出寄存器2000a、b的任意完整的128位字写入到打包数组2130。
图31中更新阶段始于SIMD清除指令30[V_FLUSH],这使得输出寄存器2000a、b中的任何保留的位被写入压缩数组2130中。微分更新指令735[V_UPDATE_DERIV]审查三个指数寄存器1200a-c(前面在图18所述的)和更新对应于最低计数的微分选择参数“DERIV”1880,即当前编码组的要求最少尾数位的输入的样本、一阶微分或二阶微分。该更新的微分选择参数“deriv”或DERIV_SEL1880将被用于选择SIMD寄存器R1、R2和R3以及在下一次迭代中处理的下一个编码组的对应的最高指数。数据包长度计算指令825计算最终输出指针值(outPtr)和初始输出指针(startPtr)之间的差异,其表示被写入用于压缩的数据包的压缩数组2130的128位字的数目。在固定速率编码期间,数据包长度误差计算指令830计算当前压缩的数据包的大小(pktLen)和目标数据包长度之间的差异。SIMD衰减器更新指令740[V_UPDATE_ATTEN]基于之前由数据包长度错误计算指令830计算的数据包差异更新衰减器设置701d。V_UPDATE_ATTEN指令740被结合图35做进一步描述。当执行函数返回指令840时,编码器功能700完成。
图31描述了两个替代方法,编码循环指令可以通过将两个或多个编码循环指令结合成一条指令来指定。通过将两个指令的逻辑和寄存器结合为背靠背的电路,指令的这种结合在SIMD架构中是被允许的,其中,第一SIMD指令的输出变为第二(或后续)SIMD指令的输入。这种结合可能会引入额外的延迟,但缩短了程序内存。在可替换的方式1a中,SIMD冗余去除指令745[V_RR]表示四个SIMD指令V_MPY 820、V_DERIV 940a(第一调用)、V_DERIV940b(第二调用)以及V_EXPMAX 817的顺序的执行。SIMD打包和写指令750[V_PACK_WRITE]表示顺序执行两个SIMD指令V_PACK_REG 720和V_WRITE_IF_FULL 725。在可替换的方式1b中,SIMD编码指令755[V_ENCODE]表示SIMD指令V_RR 745和V_PACK_WRITE 750的顺序执行。在可替换的方式2中,SIMD编码器参数更新760[V_UPDATE_PARAMS]表示SIMD指令V_UPDATE_DERIV 735和V_UPDATE_ATTEN 740的顺序执行。
图32提供了用于程序的伪代码SIMD指令的示例,该程序对压缩的数据包解码以来重建4N整型或浮点型样本。解码器函数900利用输入数组指针901a来指定江北解码的压缩数组2130,该数组指针901a指定在一个或多个压缩数据包中第一个被压缩的数据包的地址。在此示例中,SIMD访问内存的指令会从内存读取或向内存写入四个32位样本(共计128位),该内存通常是片上缓存。对于其他的实施方式,比128位更宽或更窄的内存宽度是可能。输出数组指针901b指定将存储已解码的128位输出样本的起始地址。循环计数器901c指定将被解码的样本的数目,该数目被除以4(因为每个128位内存写入指令815存储四个32位操作数)。在此示例中,每个解码循环的迭代创建四个新的32位操作数。
解码器的功能900一般分三个阶段进行:
●初始化(元素905、910和800)
●解码循环(元素812、915、920,925a-b、930a-b、820a-b、850a-b和860a-b)
●更新(元素730和840)。
当SIMD解码初始化指令V_INIT_DECODE 905初始化所有解码器状态机和指针时,初始化阶段开始。V_INIT_DECODE 905将输入的指针901a复制到指向压缩数组2130的第一个128位的内部解码器寄存器。如前文在图23中所述的,在将压缩数组2130的第一个128位读进解码位寄存器2322后,该指令也递增输入指针901a。参考图22,位收件器2220还保持解码位寄存器2322中的位元的可用数目的内部计数器,并且自压缩数据213读取所需的附加的128位组,因为包报头解析器2240、指数解码器2260和尾数解包器2280指定从解码位寄存器2322放弃多少位R_SHIFT2328。每当从压缩数组2130读取额外的128位组,位收件器2220引用(然后推进)当前输入指针。SIMD报头读取和解码指令V_DECODE_HDR 910读取和解码衰减器设置“atten”610b和来自包报头610的微分选择参数“DERIV”610c。在其他实施例中,指令V_DECODE_HDR910可能返回的附加报头参数,譬如在图24所述的那些。SIMD衰减器初始化指令V_LOAD800将衰减器设置“atten”的倒数加载到SIMD寄存器R4的所有四个32位操作数。寄存器R4将用在编码循环中以放大在信号再生处理末尾的样本。
图32中的解码循环开始于“while”循环初始化和控制指令812,这指定了在大括号“{}”中的代码将会重复,直到计数器值N是零或负数。SIMD读取指数指令V_FETCH_EXP 915使得位收件器2220(图22-23)中的来自解码位寄存器2322的8位被传输至指数解码器2260(图25)。接下来,指数解码指令V_DECODE_EXP 920对该对这些8位执行前面结合图25和26所述的指数解码功能。由V_DECODE_EXP指令920所得到的解码的指数被存储在寄存器R3,并且指数的数目被保存在本地变量nExps 921中。接下来,SIMD尾数解码的指令V_DECODE_MANTS925a使得128位被自位接收器2220中的解码位寄存器2322中传送到尾数解包器2280,其对最高有效SIMD寄存器位进行解码和符号扩展(对于打包的整型),或对最低有效SIMD寄存器进行解码和零填充(对于打包的浮点型数),如上文结合图27、28和29所述。尾数解包的结果存储在寄存器R2中。V_DECODE_MANTS指令925a路包括一个控制参数"1",其指定寄存器R3中将用于解码该四个尾数的第一指数,因为由V_DECODE_EXP指令920解码的指数令牌代表两个指数。下一步,V_INTEG_N宏930(在图33中进一步描述),由指令930a调用,其可以计算寄存器R2中的一阶或二阶积分,或在微分选择参数"DERIV"610c控制下,不计算积分。SIMD乘法指令V_MPY 820a将SIMD寄存器R1中的每个操作数与放大因子相乘,该放大因子是由V_LOAD指令800存储在SIMD寄存器R4中的衰减器设置610b的倒数。SIMD寄存器写指令V_STORE850a将SIMD寄存器R1的内容(四个32位的字)写入解码的输出数组。V_STORE指令850递增输出指针901b以反映128输出位被写入输出数组。最后,指令860a递减组计数器901c("while"循环812迭代计数器)。
条件测试“if”指令924确定是否应该解码额外的四个尾数,其发生在本地变量nExps921的值等于2的时候。在这种情况下,指令序列{925b、930b、820b、850b和860b}生成第二组的解码32位操作数并将其写入到输出数组。
图32的更新阶段始于SIMD清除指令730[V_FLUSH],如果任何部分的比特处于压缩数组2130中,其推进了编码输入的数组指针901a。解码函数通900过执行函数返回指令840完成。
图32描述解码循环指令能够通过将两个或多个编码循环指令合成为一个单指令来指定的两个替代方法。通过将两个指令的逻辑和寄存器结合为背靠背的电路,指令的这种结合在SIMD架构中是被允许的,其中,第一SIMD指令的输出变为第二(或后续)SIMD指令的输入。这种结合可能会引入额外的延迟,但缩短了程序内存。备选方案1中,SIMD获取并解码指数V_FD_EXP指令935表示两个SIMD指令顺序执行:
●V_FETCH_EXP指令915,和
●V_DECODE_EXP指令920,
同样,SIMD再生尾数指令940[V_REGEN]表示四个SIMD指令顺序执行:
●V_UNPACK_MANTS指令925,
●V_INTEG_N宏指令930,
●V_MPY指令820,和
●V_STORE指令850。
在备选方案2中,SIMD解码V_DECODE 945表示SIMDV_FD_EXP指令935和SIMDV_REGEN指令750顺序执行。
图33进一步描述V_INTEG_N宏930,其具有输入参数SIMD输入寄存器Ra930a、微分选择参数“DERIV”930c和SIMD输出寄存器Rb 930c。取决于微分选择参数“DERIV”930c的值,SIMD积分指令141不被调用(当DERIV=0时),在指令141a被调用一次(当DERIV=1时),在指示141b和141c被调用两次(当DERIV=2时)。在所有三种情况下,所需的积分结果被返回输出寄存器Rb930b。如果微分控制930c的值不是0、1或2,在输出寄存器Rb930b中返回错误代码。
条件执行的“if”语句通常减慢软件的执行,尤其是如果条件测试执行在如“while”循环812的循环中。因为这个原因,图33的解码循环的另一种可替换的实施例将包括三个单独的“while”循环,每个“while”循环包含适当数量的(0、1或2)对微分选择参数“DERIV”610c值的V_INTEG指令141的调用。在主要的解码循环之前进行一次微分测试,可以通过将执行条件测试“if”指令924的成本移出主循环来加速循环。这个可替换的实施例也不需要V_INTEG_N宏930。
图34说明用于编码函数700的附加指令以实施无损、固定速率或固定的质量编码操作模式。取决于被编码的数值数据的性质及统计,用户可能需要无损编码的数值数据,从而,所解码的数值样本与原始数值样本是相同的。在其他情况下,用户可能想要针对特定的压缩比,如2:1或3:1,以便编码数值数据可以通过所期望的带宽传输或以所期望的容量存储。在第三种情况下,用户可能想要指定少量可容忍的错误。出于这些原因,编码和解码算法支持一个或多个模式是所希望的:无损、固定率和固定的质量。可替换的实施例支持三种模式中的一个或多个,如结合图34和35进一步说明的,利用以下指令:
●SIMD衰减器初始化V_LOAD指令800,
●数据包误差计算指令825,和
●衰减器更新指令740(需要固定速率方式)
再参考图31,主编码循环中有衰减指令820采用的衰减量是由SIMD衰减器初始化V_LOAD指令800加载的"atten"参数所决定的。当"atten"值设置为1.0时,衰减指令820不修改将编码的任何数值操作数。同样地,如果"atten"值被SIMD衰减器初始化V_LOAD指令800设置为小于1.0,并且然后在压缩处理中永远不会被修改,衰减指令820将把相同的衰减值(小于1.0)应用到每个将被压缩的样本,这支持了固定质量模式。在固定速率编码是所需的情况下,"atten"值可能会更改。数值数据时难以压缩(比可预测的更随机),较小的衰减值去除每个操作数的更最低有效位,以进一步提高压缩比。同样,当数值数据容易被压缩(比随机更容易预测),较大的衰减值保留每个操作数的最低有效位。为了实现固定的输出比特率,"atten"值可以修改,取决于压缩数组2130中的压缩的数据包的顺序进行(平均)的大小。
图34显示SIMD衰减器初始化V_LOAD指令800加载atten=1.0的无损模式,而固定的速率和固定的质量模式接收初始atten值(小于1.0)。图34进一步显示,对于无损和固定质量模式,数据包长度计算指令825和数据包长度误差计算指令830并非所必需的,因为对于这些模式,"atten"值不会基于数据包长度或块长度进行修改。最后,图34显示在每个编码的块大小被计算后,固定的速率编码模式如何利用以下三个指令来更新"atten"值:
●数据包长度的计算指令825,
●数据包长度误差计算指令830,
●V_UPDATE_ATTEN指令740,在图35中进一步被详述。
图35显示在固定的速率操作期间用于更新"atten"值的指令。在数据包长度误差被计算后,atten值通过将数据包长度误差的一小部分(mu)的添加到现有的atten值进行调整。如果仅是编码的包小于目标包大小,数据包长度误差将是正的并且和衰减值将增加(少衰减)。如果仅编码的数据包大于目标数据包大小,则数据包长度误差将是负的且衰减值将降低(更多衰减)。适应常数mu控制衰减器反馈回路的适应的速率:较小的mu对应于较慢的更新速率、而更大的mu对应于较大的更新速率。适应常数mu应在{0.0,1.0}范围内,首选值为0.25。
图36提供用于SIMD编码指令的一个交织引用表,其涉及以下项:
●(第1栏)SIMD编码指令的元素数字,
●(第2栏)SIMD编码指令,
●(第3栏)由SIMD编码指令执行的操作的说明,
●(第4栏)与SIMD编码指令相关的附图列表,
图37提供用于SIMD解码指令的交织引用表,其涉及以下项:
●(第1栏)SIMD解码指令的元素数字,
●(第2栏)SIMD解码指令,
●(第3栏)由SIMD解码指令执行的操作的说明,
●(第4栏)与SIMD编码指令相关的附图列表,
数值编码器(压缩器)和解码器(解压器)的实施例存在多个可替换的实施方式。实现可以包括逻辑来执行此处所述的过程,其逻辑可以包括专用逻辑电路,如现场可编程逻辑阵列FPGA块的可佩的逻辑,配置为执行功能,被编程以执行功能的通用用途的处理器或数字信号处理器,以及这里的各种组合。上面引用的’312申请描述可配置的、被多核心处理系统中的应用于数值数据的压缩器/解压器。使用此处所述的SIMD操作数值的压缩和减压技术可能在申请’312所述的可配置的压缩器和解压器中实施。
数值的压缩与解压操作可以实现在硬件、软件或两者的组合,并被列入计算系统。硬件实现包括ASIC、FPGA或知识产权(IP)块。数值的压缩与解压操作可以在软件或固件在可编程处理器,如数字信号处理器(DSP)、微处理器、微控制器、多核CPU或GPU上的实现。压缩的数据数据包可用于在数据处理系统或计算机系统的组件之间的压缩的数值数据的传输,譬如,在数据处理器和存储器之间,在多个处理器内核之间,在数据处理系统的存储器之间等。压缩的数据包也可用于在通信通道或网络上传输数据至存储设备、计算机可读介质或另一种数据处理系统。
图38是适合应用SIMD操作以压缩和解压的计算机系统的框图。计算机系统10通常包括至少一个处理器14,其与多个外围设备通过总线子系统12进行通信。这些外围设备可能包括存储子系统24(包括存储器子系统26和文件存储子系统28)、用户接口输入设备22、用户接口输出设备20和通信接口子系统16。输入和输出设备允许用户与计算机系统10交互。通信接口子系统16提供连接至通信信道或网络18的接口,其可以是单信道或有多个信道的通信网络。通信信道或网络18被耦合到在其他计算机系统中的、传输或接收设备中的或外部网络(未显示)中的相应的接口装置。通信信道或网络18可能包括有线链接、光链路、无线链接或任何其他信息沟通机制。通信网络18可能包括许多相互连接的计算机系统和通信链路。在一个实施例中,通信网络18是互联网,在其他实施例中,通信网络18可能是任何适合的计算机网络。
用户界面输入的设备22可能包括键盘,指点设备(如鼠标,轨迹球、触摸板或图形的平板电脑,扫描仪,纳入显示的触摸屏)、音频的输入的设备(如语音识别系统、麦克风)以及其他类型的输入设备的触摸屏。一般情况下,使用"输入设备"一词的用意是要包括所有可能的类型的设备和方法可用于输入信息转化为计算机系统10,可为我们提供适合的用户输入101。
用户接口输出设备20可能包括显示子系统、打印机、传真机或非可视显示器等音频输出设备。显示子系统可能包括阴极射线管(CRT)、液晶显示器(LCD)等平板设备、投影设备或用于创建一个可见的图像的其他一些机器。显示子系统也可以提供非可视显示,如通过音频输出设备。一般情况下,使用"输出设备"一词旨在包括所有可能的设备和方法以输出的信息从计算机系统10给用户或另一台计算机或计算机系统类型。
存储子系统24存储可能提供对SIMD实施的压缩和/或解压的一些或全部功能的基本程序和数据结构。这些软件模块一般都由处理器14执行。
处理器14可能包括一个或多个DSP、微处理器、微控制器、中央处理单元(CPU)或图形处理单元(GPU)或这些设备组合。处理器14也可能包含实施一些或所有的压缩和/或减压的功能的专用集成电路(ASIC)或现场可编程逻辑阵列(FPGA)逻辑。处理器14包括可能充当SIMD寄存器的寄存器和具有一个或多个流水线站以执行用于上文所述压缩和解压的SIMD指令。存储器子系统26通常包括大量的存储器,该存储器包括用于存储在程序执行期间的指令和数据的随机访问存储器(RAM)30和用于存储固定的指令的只读存储器(ROM)32。存储器子系统26可能存储用于压缩和解压(譬如,如指数编码表(图19)和指数译码表(图26)操作)的参数。文件存储子系统28持久性存储提供程序和数据文件,并可能包括硬磁盘驱动器、软盘驱动器和相关联的可移动媒体、CD-ROM驱动器、光盘驱动器或可移动媒体盒,包括带USB接口的通用串行总线(USB)拇指驱动器和闪存存储媒体。可能由文件存储子系统28存储数据库和执行某些实施方案中的功能模块。
总线子系统12提供了一个机制,让各种组件和子系统的计算机系统10彼此通信。虽然总线子系统12被示意为单总线,总线子系统可替换实施例可以使用多个总线。
计算机可读介质40可以关联于文件存储子系统28,和/或通信接口子系统16介质。计算机可读介质40可以是硬盘、软盘、CD-ROM、光学介质、可移动介质盒、USB拇指驱动器,闪存介质存储或电磁波。计算机可读介质40示出了使用此处所述的SIMD操作来存储一个压缩的数据文件42的数据压缩。计算机可读介质40可以存储使用SIMD指令的功能实现压缩和/或减压的程序或库,并可能包括处理器14的扩展的指令集,该指令集包括用于压缩/解压的程序或库的SIMD指令。在一些实施例中,压缩/解压的程序或库或扩展的指令集被配置为特定的硬件配置、硬件配置类或一个或多个硬件加速器。在其它实施例中,压缩/解压程序或库或扩展的指令集包括支持多个不同的硬件配置类的硬件配置的组件。
在一个实施例中,通过提供库访问编译器来使用压缩/解压库80,该编译器将应用程序链接到由程序员选择的库的组件。可以使用指定的参数的库函数和相应的库文件(例如,具有".lib"文件扩展名、Windows操作系统的系统,或具有Linux操作系统的系统",所以"文件扩展名的文件".obj"文件扩展名的文件),使用的参数和执行压缩操作头文件(例如,具有".h"文件扩展名的文件)完成对库由编译器访问/减压,包括至少某些SIMD操作。由编译器将由计算机运行的应用程序连接的组件存储,可能作为编译的对象的代码,执行由应用程序的要求。在其他实施例中,库可以包含组件可以动态地链接到应用程序,和这种动态链接组件存储在计算机的系统内存,可能作为编译的对象的代码,执行由应用程序的要求。链接或动态链接组件可以包括部分可能在‘898申请中描述包括用于压缩操作参数应用程序编程接口(API)的应用程序。
至少一个处理器14包括执行单元,包括配置为执行单指令多数据(SIMD)指令的逻辑,其包括响应于一个或任意组合的以下指令的逻辑:
(1)第一SIMD指令(V_DERIV)包含多数据标识符,用于标识多个操作数,以计算对由多数据标识符,以产生多个差异值操作数标识多个操作数中的操作数之间的区别。多数据标识符可包含指向SIMD寄存器的指针寄存器(例如"REG_A"),SIMD寄存器被逻辑用来存储指令执行中的多个操作数。因为被包含在SIMD寄存器中,多个差异值可以包含相同数量的结果数据值。结合此处的V_DERIV,所述指令标识保存N(如四个或八个)操作数的单个的SIMD寄存器,并隐式或显式地标识用于在目标SIMD寄存器中生成的差异数目N的额外一个、两个或多个操作数的位置。
(2)第二SIMD指令(V_EXPMAX)包含多数据标识符,以标识多个操作数来确定由多数据标识符标识的多个操作数的最大指数值。
(3)第三SIMD指令(V_PACK_REG)用于基于最大指数值(例如响应于V_ECPMAXSIMD指令而确定的)每个所述多个操作数中打包多个位以形成压缩的数据组,其中压缩的数据组代表多个操作数。
(4)第四SIMD指令(V_DECODE_MANTS)包含标识恒定数据长度的多个数据值的目标的多数据标识符,其使用一组打包的尾数的指数,解码并符号扩展用于整形数据的最高有效位以产生由多数据标识符标识的多数据值,或解码和零填充用于浮点数据类型的最低有效位以产生由该多数据标识符标识的多数据值。。
(5)第五SIMD指令(V_INTEG)包含多数据标识符,用于标识多操作数,以计算对由第二标识多数据标识符标识的多个操作数中的操作数的对的和,以产生多个积分的值操作数。
处理器14可以使用一个或多个SIMD指令来控制,以及其他逻辑和指令来控制,以执行此处所述的压缩和解压过程。
实现SIMD寄存器和指令集的执行单位因硅供应商而异。一般情况下,可以使用控制可编程逻辑的微代码指令实现SIMD。在一个实施方式中,现有的的与英特尔SSESIMD指令集一起使用128位的寄存器也可以用于存储执行冗余去除器1801和封隔器位1802的指令操作数。新SIMD指令的实施方式,例如那些列在图36和37中的,仍然需要规范的一个或多个输入操作数(多数据标识符或寄存器指针)和存储结果(输出)操作数(寄存器指针)的位置。指定输入和输出寄存器可能是相似的或甚至可能完全相同,使用现有的SIMD指令如何制定输入和输出的寄存器操作数。新的指令将包括新的、独特的操作码,它指定新的操作。当调用时新SIMD操作码(指令)时,对应于新的操作码(指令)的组合逻辑会访问一个或多个输入操作数从现有的SIMD寄存器中。一旦结果是由新指令的组合逻辑生成的,结果将被存储在指定的SIMD输出寄存器中。因此每个新的SIMD操作码(指令)通常(但不是限于)可能伴随着用于新指令的专用逻辑,这将在执行相应的SIMD操作码时被使用。现对于给定操作码(指令),硬件加速器实,尽可能的提高新指令的速度和/或减少延迟。通过修改组合逻辑的流水线阶段的数目,来修改每个新SIMD指令的速度和延迟。除了或代替现有的SIMD寄存器,新的SIMD指令的其他实现可以使用专用的输入和输出寄存器中。
虽然本发明的优选实施方案已经进行了说明和描述,但明确的是本发明并不局限于这些实施例。对于本领域技术人员来说,大量修改、更改、变更、替换和等同将是明显的,而不脱离本发明的范围与思想。

Claims (18)

1.一种数据处理器,包括:
执行单元,其被配置为执行单指令多数据SIMD指令,所述执行单元包括响应于第一SIMD指令的逻辑,所述第一SIMD指令包括用于标识多个操作数的多数据标识符以确定由所述多数据标识符标识的所述多个操作数的最大指数值,其中所述执行单元包括一逻辑,该逻辑用于基于响应于所述第一SIMD指令而确定的所述最大指数值对来自所述多个操作数中的每一个操作数的多个位进行打包以形成压缩数据组,其中,所述压缩数据组表示所述多个操作数。
2.如权利要求1所述的数据处理器,其中,所述响应于所述第一SIMD指令的逻辑确定所述多个操作数的第一子集的第一最大指数值和所述多个操作数的第二子集的第二最大指数值,所述最大指数值是所述第一最大指数值和所述第二最大指数值之一。
3.如权利要求1所述的数据处理器,其中,所述逻辑响应于第二SIMD指令。
4.如权利要求1所述的数据处理器,其中,所述逻辑对所述最大指数值进行编码以形成用于所述压缩数据组的指数令牌。
5.如权利要求1所述的数据处理器,所述执行单元包括一个双缓冲电路,用于将来自压缩数据组的数据存储于所述双缓冲电路中的逻辑,以及用于当所述双缓冲电路保持固定宽度的数据时响应于条件指令以将数据自所述双缓冲电路写到具有所述固定宽度的数组的逻辑。
6.一种数据处理器,包括:
执行单元,其被配置为执行单指令多数据SIMD指令,所述执行单元包括响应于第一SIMD指令的逻辑,所述第一SIMD指令包括用于标识多个操作数的多数据标识符以确定由所述多数据标识符标识的所述多个操作数的最大指数值,所述执行单元包括用于将所述操作数的位映射到多个半字节的逻辑,多个半字节中的一给定的半字节包括基于相应操作数中的所述位的位值而选自所述多个操作数中的每一个操作数的位。
7.一种数据处理器,包括:
执行单元,其被配置为执行单指令多数据SIMD的指令,所述执行单元包括响应于第一SIMD指令的逻辑,所述第一SIMD指令包括用于标识多个操作数的多数据标识符以计算由所述多数据标识符标识的所述多个操作数中的每对操作数之间的差异,以产生多个差异值操作数,所述执行单元包括用于将所述差异值操作数的位映射到数据存储中的多个半字节的逻辑,所述多个半字节中的一给定的半字节包括基于相应差异值操作数中的所述位的位值而选自所述多个操作数中的每一个操作数的位。
8.如权利要求7所述的数据处理器,所述执行单元包括逻辑响应于第二SIMD指令的逻辑,所述第二SIMD指令包括用于标识多个操作数的第二多数据标识符以确定所述多个操作数的最大指数值,其中所述多个操作数包括所述多个差异值操作数。
9.一种数据处理器,包括:
执行单元,其被配置为执行单指令多数据SIMD的指令,所述执行单元包括响应于第一SIMD指令的逻辑,所述第一SIMD指令包括用于标识多个操作数的多数据标识符以计算由所述多数据标识符标识的所述多个操作数中的每对操作数之间的差异,以产生多个差异值操作数,所述执行单元包括一逻辑,该逻辑用于基于最大指数值对来自所述多个差异值操作数中的每一个差异值操作数的多个位进行打包以形成压缩数据组,其中,所述压缩数据组表示所述多个操作数。
10.如权利要求9所述的数据处理器,其中,所述逻辑响应于第三SIMD指令。
11.如权利要求9所述的数据处理器,其中,所述逻辑对所述最大指数值进行编码,以形成所述压缩数据组的指数令牌。
12.如权利要求9所述的数据处理器,所述逻辑响应于第四SIMD指令,以生成包括衰减器设置和微分选择器的报头,并且将所述报头和一个或更多的压缩数据组包括在一个压缩数据包中。
13.如权利要求9所述的数据处理器,所述执行单元包括一个双缓冲电路,以及用于将一个或更多的压缩数据组存储于所述双缓冲电路中的逻辑,和用于当所述双缓冲电路保持固定宽度的数据时响应于条件指令以将数据自所述双缓冲电路写到具有所述固定宽度的数组的逻辑。
14.一种数据处理器,包括:
执行单元,其被配置为执行单指令多数据SIMD指令,所述执行单元包括响应于第一SIMD指令的逻辑,所述第一SIMD指令包括用于标识恒定数据长度的多数据值的目标的多数据标识符,所述第一SIMD指令使用一组打包的尾数的指数对整形数据类型的最高有效位进行解码和符号扩展以产生由所述多数据标识符标识的多个数据值,或对浮点型数据类型的最低有效位进行解码或零填充以产生由所述多数据标识符标识的多个数据值。
15.如权利要求14所述的数据处理器,所述执行单元包括用于对压缩的数据包解码以获取所述指数和所述打包的尾数的组的逻辑。
16.如权利要求15所述的数据处理器,其中所述压缩的数据包包括具有以衰减值衰减的值的打包的尾数,以及所述执行单元包括用于将所述多个数据值乘以所述衰减值的倒数的逻辑。
17.如权利要求14所述的数据处理器,所述执行单元包括响应于第二SIMD指令的逻辑,所述第二SIMD指令包括用于标识多个操作数的第二多数据标识符,计算由所述第二多数据标识符标识的所述多个操作数中的操作数对的和以产生多个积分值操作数。
18.一种数据处理器,包括:
执行单元,其被配置为执行单指令多数据SIMD的指令,所述执行单元包括响应以下项的逻辑:
第一SIMD指令,其包括用于标识多个操作数的多数据标识符,以计算由所述多数据标识符标识的所述多个操作数中的一对操作数之间的差异,以产生多个差异值操作数;
第二SIMD指令,其包括用于标识多个操作数的多数据标识符以确定由所述多数据标识符标识的所述多个操作数的最大指数值;
第三SIMD指令,其基于最大指数值来对来自所述多个操作数的每个操作数的多个位打包,以形成压缩数据组,其中所述压缩数据组表示所述多个操作数;
第四SIMD指令,其包含用于标识恒定数据长度的多个数据值的目标的多数据标识符,其使用一组打包的尾数的指数,对整形数据类型的最高有效位进行解码和符号扩展以产生由所述多数据标识符标识的所述多个数据值,或对浮点型数据类型的最低有效位进行解码或零填充以产生由所述多数据标识符标识的所述多个数据值;和
第五SIMD指令,其包含用于标识多个操作数的第二多数据标识符,以计算由所述第二多数据标识符标识的所述多个操作数中的操作数对的和,以产生多个积分值操作数。
CN201480005743.6A 2013-01-22 2014-01-22 使用simd指令的数据压缩和解压 Active CN105264779B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US13/747,352 2013-01-22
US13/747,342 US9274802B2 (en) 2013-01-22 2013-01-22 Data compression and decompression using SIMD instructions
US13/747,342 2013-01-22
US13/747,352 US9298457B2 (en) 2013-01-22 2013-01-22 SIMD instructions for data compression and decompression
PCT/US2014/012565 WO2014116712A1 (en) 2013-01-22 2014-01-22 Data compression and decompression using simd instructions

Publications (2)

Publication Number Publication Date
CN105264779A CN105264779A (zh) 2016-01-20
CN105264779B true CN105264779B (zh) 2019-06-07

Family

ID=51227992

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201480005743.6A Active CN105264779B (zh) 2013-01-22 2014-01-22 使用simd指令的数据压缩和解压

Country Status (3)

Country Link
EP (1) EP2949047B1 (zh)
CN (1) CN105264779B (zh)
WO (1) WO2014116712A1 (zh)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016045733A1 (en) * 2014-09-25 2016-03-31 Nokia Solutions And Networks Oy Improving communication efficiency
WO2017131578A1 (en) * 2016-01-29 2017-08-03 Zeropoint Technologies Ab Methods, devices and systems for compressing and decompressing data
CN106549673B (zh) * 2016-10-27 2020-02-21 深圳市金证科技股份有限公司 一种数据压缩方法及装置
US10275391B2 (en) * 2017-01-23 2019-04-30 International Business Machines Corporation Combining of several execution units to compute a single wide scalar result
US10191740B2 (en) * 2017-02-28 2019-01-29 Intel Corporation Deinterleave strided data elements processors, methods, systems, and instructions
US10795836B2 (en) * 2017-04-17 2020-10-06 Microsoft Technology Licensing, Llc Data processing performance enhancement for neural networks using a virtualized data iterator
EP3625670B1 (en) 2017-05-17 2022-02-23 Google LLC Performing matrix multiplication in hardware
CN107395211B (zh) * 2017-09-12 2020-12-01 苏州浪潮智能科技有限公司 一种基于卷积神经网络模型的数据处理方法及装置
CN108133025B (zh) * 2017-12-28 2020-12-08 和芯星通(上海)科技有限公司 传感器数据的批处理方法及装置、电子设备及存储介质
CN109189788B (zh) * 2018-08-20 2021-04-13 中冶南方工程技术有限公司 用于钢铁过程控制的高速数据存储方法和系统
GB2579399B (en) 2018-11-30 2020-12-16 Imagination Tech Ltd Data compression and storage
CN111008230B (zh) * 2019-11-22 2023-08-04 远景智能国际私人投资有限公司 数据存储方法、装置、计算机设备及存储介质
CN111026445A (zh) * 2019-12-17 2020-04-17 湖南长城银河科技有限公司 一种智能识别方法及芯片
US12106104B2 (en) * 2020-12-23 2024-10-01 Intel Corporation Processor instructions for data compression and decompression
CN113176853A (zh) * 2021-04-26 2021-07-27 深圳市华沃表计科技有限公司 数据压缩存储方法
CN115291949B (zh) * 2022-09-26 2022-12-20 中国人民解放军国防科技大学 一种面向计算流体力学的加速计算装置和加速计算方法
TWI820994B (zh) * 2022-11-01 2023-11-01 大陸商星宸科技股份有限公司 指令壓縮方法、指令解壓縮方法及流程壓縮方法
CN118012575B (zh) * 2024-04-08 2024-06-11 中电科申泰信息科技有限公司 一种面向国产化平台的多媒体数据解包的软件模拟方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4881168A (en) * 1986-04-04 1989-11-14 Hitachi, Ltd. Vector processor with vector data compression/expansion capability
CN1326132A (zh) * 2000-05-25 2001-12-12 斯罗扬有限公司 具有压缩指令的处理器及处理器指令的压缩方法
CN1708797A (zh) * 2002-10-28 2005-12-14 松下电器产业株式会社 半导体激光驱动装置、光学头装置、光信息处理装置及光记录介质
CN101040254A (zh) * 2004-11-16 2007-09-19 国际商业机器公司 用于管理数据的系统和方法
CN101971139A (zh) * 2008-02-11 2011-02-09 线性代数技术有限公司 处理器

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5621674A (en) * 1996-02-15 1997-04-15 Intel Corporation Computer implemented method for compressing 24 bit pixels to 16 bit pixels
US5839100A (en) 1996-04-22 1998-11-17 Wegener; Albert William Lossless and loss-limited compression of sampled data signals
US7346643B1 (en) * 1999-07-30 2008-03-18 Mips Technologies, Inc. Processor with improved accuracy for multiply-add operations
US7009533B1 (en) 2004-02-13 2006-03-07 Samplify Systems Llc Adaptive compression and decompression of bandlimited signals
US20100002793A1 (en) * 2008-07-02 2010-01-07 Texas Instruments Incorporated Method and apparatus for coding relating to a forward loop
US8418021B2 (en) * 2009-03-27 2013-04-09 Mediatek Inc. Storage controller with encoding/decoding circuit programmable to support different ECC requirements and related method thereof
EP2309648A1 (en) * 2009-09-14 2011-04-13 Thomson Licensing Method for encoding floating-point data, method for decoding floating-point data, and corresponding encoder and decoder
CN102754078B (zh) 2009-09-30 2015-05-20 阿尔特拉公司 使用压缩和解压缩的增强型多处理器波形数据交换
US8301803B2 (en) 2009-10-23 2012-10-30 Samplify Systems, Inc. Block floating point compression of signal data
US9081501B2 (en) * 2010-01-08 2015-07-14 International Business Machines Corporation Multi-petascale highly efficient parallel supercomputer
US8959129B2 (en) 2011-06-30 2015-02-17 Altera Corporation Compression of floating-point data
US9104473B2 (en) 2012-03-30 2015-08-11 Altera Corporation Conversion and compression of floating-point and integer data
US9158686B2 (en) 2012-03-30 2015-10-13 Altera Corporation Processing system and method including data compression API
US9026568B2 (en) 2012-03-30 2015-05-05 Altera Corporation Data compression for direct memory access transfers

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4881168A (en) * 1986-04-04 1989-11-14 Hitachi, Ltd. Vector processor with vector data compression/expansion capability
CN1326132A (zh) * 2000-05-25 2001-12-12 斯罗扬有限公司 具有压缩指令的处理器及处理器指令的压缩方法
CN1708797A (zh) * 2002-10-28 2005-12-14 松下电器产业株式会社 半导体激光驱动装置、光学头装置、光信息处理装置及光记录介质
CN101040254A (zh) * 2004-11-16 2007-09-19 国际商业机器公司 用于管理数据的系统和方法
CN101971139A (zh) * 2008-02-11 2011-02-09 线性代数技术有限公司 处理器

Also Published As

Publication number Publication date
EP2949047A4 (en) 2016-09-07
WO2014116712A1 (en) 2014-07-31
EP2949047A1 (en) 2015-12-02
CN105264779A (zh) 2016-01-20
EP2949047B1 (en) 2021-03-31

Similar Documents

Publication Publication Date Title
CN105264779B (zh) 使用simd指令的数据压缩和解压
US9298457B2 (en) SIMD instructions for data compression and decompression
US9274802B2 (en) Data compression and decompression using SIMD instructions
CN108292222B (zh) 用于数据解压缩的硬件装置和方法
CN107545066B (zh) 用于在易失性存储器内保持关系型数据的列向量的技术
CN108268422A (zh) 用于处理非常稀疏和超稀疏矩阵数据的硬件加速器架构
JP5869125B2 (ja) エントロピ符号化命令シーケンスの記憶および実行可能な形式への変換のための方法および装置
GB2457303A (en) Randomly accessing elements of compressed matrix data by calculating offsets from non-zero values of a bitmap
US7275147B2 (en) Method and apparatus for data alignment and parsing in SIMD computer architecture
KR20150079809A (ko) 축소된 다중 네스트된 루프들의 벡터화
CN107092961B (zh) 一种基于模式频率统计编码的神经网络处理器及设计方法
KR20220114519A (ko) 양자 오류 정정 디코딩 시스템 및 방법, 내결함성 양자 오류 정정 시스템 및 칩
CN117632085B (zh) 用于掩码张量转换的方法、计算设备和存储介质
CN113222159A (zh) 一种量子态的确定方法及装置
Jun et al. Zip-io: Architecture for application-specific compression of big data
CN101751356B (zh) 用于改进直接存储器存取传送效率的方法、系统和装置
CN113222157A (zh) 一种量子模拟方法、装置、电子装置及存储介质
TW200834414A (en) Methods and apparatuses for compaction and/or decompaction
CN110914801A (zh) 在数据处理设备中的向量交叉
Sierra et al. High-performance decoding of variable-length memory data packets for FPGA stream processing
KR20220100030A (ko) 패턴 기반 캐시 블록 압축
Gao et al. Efficient and Effective Digital Waveform Compression for Large-scale Logic Simulation of Integrated Circuit
Hu et al. Memory Bandwidth Conservation for SpMV Kernels Through Adaptive Lossy Data Compression
CN107835158A (zh) Sna网络体系下交互数据的传输方法及装置
Grützmacher et al. FRSZ2 for In-Register Block Compression Inside GMRES on GPUs

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant