用于数据的并行右移位合并的方法和装置的制作方法

文档序号:6421112阅读:104来源:国知局
专利名称:用于数据的并行右移位合并的方法和装置的制作方法
技术领域
本发明通常涉及微处理器和计算机系统领域。尤其是,本发明涉及一种用于数据的并行右移位合并的方法和装置。
背景技术
本专利申请是于2001年10月29日提出的、名为“用于内容数据的有效过滤和卷积的装置和方法(An Apparatus And Method For Efficient Filtering AndConvolution Of Content Data)”的US专利申请号09/952,891的部分后续申请。
本专利申请涉及于2002年10月25日提出的、名为“使用SIMD合并指令进行快速完全搜索运动估计(Fast Full Search Motion Estimation With SIMD MergeInstruction)”的共同待决的美国专利申请号._/____。
处理器技术进步了,也正在生成更加新的软件代码以在具有这些处理器的机器上运行。用户通常期望和要求它们的计算机有更高的性能,而不考虑正在使用的软件类型。由实际上正在处理器内被执行的指令与操作的类型能够引起这样的一个问题。根据所需要的操作复杂性和/或电路类型,某些类型的操作要求有更多的完成时间。这提供了一个优化在处理器内部执行某些复杂操作的方式的机会。
近10多年来,媒体应用一直推动着微处理器的发展。实际上,近年来大多数的计算升级已经由媒体应用所推动。尽管在企业方面也已经看到了用于增强娱乐的教育和通信目的重要进展,但是这些升级主要发生在消费者方面。然而,将来的媒体应用将需要高得多的计算要求。因此,明天的个人计算(PC)体验将在视听效果上更丰富,并且更容易使用,而且更重要的是计算将与通信融合在一起。
因此,图像的显示以及在此总起来被称为内容的音频与视频数据的回放对于当前的计算设备来说已经变成了越来越普及的应用。过滤和卷积操作对内容数据,诸如图像音频与视频数据执行的最常用的一些操作。如本领域技术人员已知的那样,用把数据和系数的乘积相加的乘—累加(multiply-accumulate)操作来计算过滤和相关计算。两个向量A和B的相关性在于总和S的计算
S[k]=1NΣi=0N-1a[i]·b[i+k]]]>等式(1)这经常和k=0一起使用S
=1NΣi=0N-1a[i]·b[i]]]>等式(2)在向向量V应用N抽头(Ntap)过滤器f的情况下,总和S被计算如下S=Σi=0N-1f[i]·V[i]]]>等式(3)这种操作是高强度的计算,但是提供了高级的数据并行性,其能够通过使用各种数据存储设备、诸如例如单指令多数据(sigle instruction multiple data,SIMD)寄存器的高效实现而被拓展。
在一个宽广系列的图像和视频处理任务和通信中都能找到过滤操作的应用。使用过滤器的例子有在运动图象专家组(MPEG)视频中减少块人为现象,降低噪音和音频,从像素值中分离水印以提高水印检测,用于平稳、锐化、降低噪音、查找边缘以及缩放图像或者视频帧的尺寸的相关性,向上采样用于子像素运动估计的视频帧,增强音频信号质量以及脉冲整形和均衡通信中的信号。因此,过滤和卷积操作对于提供包含图像、音频与视频数据在内的内容的回放的计算设备是不可缺少的。
不幸地是,当前的方法和指令把过滤的一般需要作为目标而且不是全面的。实际上,许多体系结构不支持一个用于为一个范围的过滤长度和数据类型进行有效的过滤计算的装置。此外,在诸如SIMD寄存器的数据存储设备内的数据排序,以及在一个寄存器中添加相邻值和用于在寄存器之间的部分数据传输的能力,通常都不被支持。因此,当前的体系结构需要不必要的数据类型改变,这些改变最小化每个指令的操作数目,以及显著地增加为算术运算而排序数据所要求的时钟周期数目。


本发明通过举例加以说明,但并不局限于附图中的图,其中相同的附图标记指示相同的元件,其中图1描述了一个框图,其说明了一个能够实现本发明一个实施例的计算机系统。
图2描述了一个框图,其依据本发明的另一个实施例说明了在图1中描述的处理器的一个实施例。
图3描述了一个框图,其说明了依据本发明另一个实施例的压缩数据类型。
图4A说明了依据本发明一个实施例的寄存器内的压缩字节表示。
图4B说明了一个依据本发明一个实施例的寄存器内的压缩字表示。
图4C说明了一个依据本发明一个实施例的寄存器内的压缩双字表示。
图5描述了一个框图,其说明了依据本发明的一个实施例的字节混洗指令的操作。
图6描述了一个框图,其说明了依据本发明的一个实施例的字节乘-累加指令。
图7A-7C描述了这样的框图,其说明了依据本发明另一个实施例的、图5中的字节混洗指令结合在图6中描述的字节乘-累加指令以产生多个乘积求和对(summed-product pairs)。
图8A-8D描述了这样的框图,其说明了依据本发明的另一个实施例的相邻加法指令;图9A和9B描述了依据本发明另一个实施例的寄存器合并指令。
图10描述了一个框图,其依据本发明一个实施例说明了内容数据的有效数据处理的流程图。
图11描述了一个框图,其依据本发明的另一个实施例说明了一种用于依据一个数据处理操作处理内容数据的附加方法。
图12描述了一个框图,其依据本发明的另一个实施例说明了用于内容数据的连续处理的流程图。
图13描述了一个框图,其依据本发明的另一个实施例说明寄存器合并操作的流程图。
图14描述了一个流程图,其依据本发明的一个示例实施例说明了一种用于从一个源数据存储设备中选择未处理的数据单元的附加方法。
图15是依据本发明的、用于一个实施例中的处理器的微型体系结构的框图,该处理器包含用于执行并行右移位合并操作的逻辑电路;图16A是依据本发明的、用于对数据操作数执行并行右移位合并操作的逻辑的一个实施例的框图;图16B是用于执行右移位合并操作的逻辑的另一个实施例的框图;
图17A说明了依据本发明第一实施例的、并行右移位合并指令的操作;图17B说明了依据第二实施例的右移位合并指令的操作;图18A是一个流程图,说明了一种并行右移位和合并数据操作数的方法的一个实施例;图18B是一个流程图,说明了一种右移位和合并数据的方法的另一个实施例;图19A-B说明了一个运动估计的示例;图20说明了运动估计和结果预测的一个示例应用;图21A-B说明了在运动估计期间加以处理的当前和先前帧示例;图22A-D说明了依据本发明的一个实施例对帧执行运动估计的操作;以及图23A-B是一个流程图,说明了一种预测和估计运动的方法的一个实施例。
具体实施例方式
公开了一种用于对数据执行并行右移位合并的方法和装置。也描述了一种用于内容数据的有效过滤和卷积的方法和装置。还公开了一种用于利用SIMD合并操作的快速全搜索运动估计的方法和装置。在此描述的实施例是在一个微处理器的环境中进行描述的,但不局限于此。虽然以下的实施例参考一个处理器加以描述,但是其它实施例适用于其它类型的集成电路和逻辑设备。本发明的相同技术和示教能够被容易地应用于能够从更高流水线吞吐量和改善的性能中得益的其它类型的电路或者半导体设备。本发明的示教适用于任何执行数据操纵的处理器或者机器。然而,本发明不局限于执行256位、128位、64位、32位、或者16位数据操作的处理器或者机器,而且能够适用于需要数据的右移位合并的任何处理器和机器。
在下面的描述中,为了说明起见,阐述了许多具体的细节以便提供对本发明的一个彻底了解。然而在本领域的普通技术人员将要理解这些具体的细节不是为了实践本发明所必要的。在其它实例中,没有特别详细地阐述众所周知的电结构和电路,以便不必要地模糊本发明。此外,以下的描述提供了示例,并且为了说明起见在附图中显示了各个示例。然而,因为这些示例仅仅用来提供本发明的示例而不是提供本发明所有可能实现的一个穷举列表,所以不应该以一个限制的意义解释这些示例。
在一个实施例中,本发明的方法体现为机器可执行指令。这些指令能够用来导致一个用该指令编程的通用或者专用处理器执行本发明的步骤。此外,本发明中的步骤可以由包含用于执行该步骤的硬连线逻辑的专门硬件部件执行,或者可以由编程的计算机部件和定制的硬件部件的任何组合执行。
本发明可以作为一个计算机程序产品或者软件提供,该计算机程序产品或者软件可以包含具有存储在其上的指令的一个机器或者计算机可读介质,这些指令可以用来编程一台计算机(或者其它电子设备)以依据本发明执行一个处理过程。这样的软件能够被存储在该系统中的一个存储器内。类似地,代码能够经由网络或者通过其它计算机可读介质进行分发。该计算机可读介质可以包含但不局限于软盘、光盘、压缩盘、只读存储器(CD-ROM)、和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦可编程只读存储器(EFROM)、电可擦可编程只读存储器(EEPROM)、磁或者光卡、闪速存储器、经由因特网的传输等等。
因此,计算机可读介质包含任何类型的如下介质/机器可读介质,所述介质适合于存储或者传输可由机器(例如,计算机)读取的形式的电子指令或者信息。此外,本发明还可以作为计算机程序产品被下载。因而,该程序可以从一台远程计算机(例如,一台服务器)传输到一台请求的计算机(例如,一个客户机)。该程序的传输可以经由一条通信链路(例如,一个调制解调器、网络连接等等)通过被包含在一个载波或者其它传播介质中的、以电、光、声或者其它形式的数据信号来进行。
在现代的处理器中,很多不同的执行单元用来处理和执行各种代码和指令。因为某些指令被更快地完成而其它的指令可能占用大量的时钟周期数量,所以不是所有指令都被平等地创建。指令的吞吐量越快,处理器的综合性能越好。因此让尽可能多的指令尽可能快地执行是有利的。然而,就执行时间和处理器资源而言,某些具有更大复杂度的指令需要的更多。例如,浮点指令、加载/存储操作、数据移动等等。
因为越来越多的计算机系统用于互连网和多媒体应用,所以随着时间的过去已经引入了附加的处理器支持。例如,单指令、多数据(SIMD)整数/浮点指令和流SIMD扩展(SSE)是用于降低执行一特定程序任务所要求的总体指令数量的指令。这些指令能够通过对多个数据单元进行并行操作而加速软件性能。因此,能够在包含视频、语音、和图像/照片处理在内的很宽应用范围内实现性能的增加。SIMD指令在微处理器和类似类型的逻辑电路中的实现通常涉及很多问题。此外,SIMD操作的复杂度经常导致需要附加的电路以便正确地处理和操作数据。
本发明中的实施例把一种用于实现并行右移位指令的方式提供为一种利用SIMD相关硬件的算法。对于一个实施例,该算法基于这样的概念从一个操作数右移位期望数目的数据段到第二操作数的最高有效端,同时相同数量的数据段被移出第二操作数的最低有效端。在概念上,右移位合并操作能够被看作是把两个数据块合并在一起作为一个块,并且移位连接起来的块以在期望的位置处对齐数据段从而形成数据的新模式。因此依据本发明的一个右移位合并算法的实施例,能够在一个处理器中加以实现来有效地支持SIMD操作,而不严重地折衷整体性能。
计算体系结构图1显示了一个能够在其上实现本发明的一个实施例的计算机系统100。计算机系统100包含用于传送信息的总线101,以及与总线101相耦合且用于处理信息的处理器109。计算机系统100还包含与总线101相耦合且用于为处理器109存储信息和指令的存储器子系统104-107。
处理器109包含执行单元130、寄存器堆200、高速缓冲存储器160、译码器165和内部总线170。高速缓冲存储器160与执行单元130相耦合,并且为处理器109存储频繁和/或最近使用的信息。寄存器堆200存储在处理器109中的信息,并且经由内部总线170耦合到执行单元130。在本发明的一个实施例中,寄存器堆200包含用于存储多媒体信息的多媒体寄存器,例如,SIMD寄存器。在一个实施例中,多媒体寄存器每个都存储高达128位的压缩数据。多媒体寄存器可以是专用的多媒体寄存器或者是被用来存储多媒体信息及其它信息的寄存器。在一个实施例中,当执行多媒体操作时,多媒体寄存器存储多媒体数据,而当执行浮点操作时,多媒体寄存器存储浮点数据。
执行单元130依据由处理器109接收的、被包含在压缩指令集140内的指令对压缩数据进行操作。执行单元130还依据在通用处理器中实现的指令对标量数据进行操作。处理器109能够支持Pentium微处理器指令集和压缩指令集140。通过在一个标准的微处理器指令集诸如Pentium微处理器指令集中包含压缩指令集140,压缩数据指令能够被容易地并入现有的软件(先前为标准微处理器指令集编写的软件)中。其它的标准指令集,诸如PowerPCTM以及AlphaTM处理器指令集也可以依据描述的发明被使用。(Pentium是Intel Corporation的注册商标。PowerPCTM是IBM、APPLE COMPUTER和MOTOROLA的商标。AlphaTM是Digital Equipment Corporation的商标。)在一个实施例中,压缩的指令集包含如下指令(如在下面进一步详细描述的),所述指令用于移动数据(MOVD)操作143、和用于在数据存储设备内组织数据的数据混洗操作(PSHUFD)145。用于无符号第一源寄存器和有符号第二源寄存器的压缩乘累加(PMADDUSBW操作147)。用于为无符号第一源寄存器和无符号第二源寄存器执行乘累加的压缩乘累加操作(PMADDUUBW操作149)。用于有符号第一和第二源寄存器的压缩乘累加(PMADDSSBW操作151)和用于包含16位数据的有符号第一和第二源寄存器的标准乘累加(PMADDWD操作153)。最后,压缩指令集包含一相邻加法指令,用于相加相邻的字节(PAADDNB操作155)、字(PAADDNWD操作157)、和双字(PAADDNDWD 159)、两个字的值(PAADDWD 161)、用于产生一个16位的结果的两个字(PAADDNWW操作163)、用于产生一个四倍字结果的两个四倍字(PAADDNDD操作165)和一个寄存器合并操作167。
通过在通用处理器109的指令集中包含压缩指令集140,连同用于执行这些指令的相关联的电路,由许多现有的多媒体应用使用的操作可以使用压缩数据在一个通用处理器中加以执行。因此,通过使用一个处理器数据总线的全部宽度来对压缩数据执行操作,许多多媒体应用可以被加速和被更有效地执行。这除去了通过该处理器的数据总线传输较小的数据单位以一次一个数据单元地执行一个或多个操作的需要。
仍然参见图1,本发明中的计算机系统100可以包含一个诸如监视器的显示设备121。显示设备121可以包含诸如帧缓冲器的中间设备。计算机系统100还包含诸如键盘的输入设备122,以及诸如鼠标、或轨迹球、或轨迹板的光标控制123。显示设备121、输入设备122、和光标控制123都和总线101相耦合。计算机系统100还可以包含一网络连接器124,以便使计算机系统100作为局域网(LAN)或者广域网(WAN)的一部分。
另外,计算机系统100能够和用于录音、和/或回放的设备125相耦合,该设备诸如是与麦克风相耦合、且用于为语音识别记录声音输入的音频数字化器。计算机系统100还可以包含一能够用来捕获视频图像的视频数字化设备126、诸如打印机的硬拷贝设备127以及CD-ROM设备128。设备124-128也和总线101相耦合。
处理器图2说明了处理器109的一个详细框图。处理器109能够使用多种工艺技术,诸如BiCMOS、CMOS和NMOS中的任何一种在一个或多个衬底上加以实现。处理器109包含一用于译码由处理器109使用的数据和控制信号的译码器202。数据然后能够经由内部总线205被存储在寄存器堆200中。为了清楚起见,实施例中的寄存器不应该被限制为是指一种特定类型的电路。相反地,实施例中的寄存器仅仅需要能够存储和提供数据,以及执行在此描述的功能。
根据数据类型,数据可以被存储在整数寄存器201、寄存器209、状态寄存器208或者指令指针寄存器211中。其它的寄存器能够被包含在寄存器堆204中,例如浮点寄存器。在一个实施例中,整数寄存器201存储32位整数数据。在一个实施例中,寄存器209包含八个多媒体寄存器,R0212a到R7212h,例如包含压缩数据的SIMD寄存器。在寄存器209中的每个寄存器都为128位长。R1 212a、R2 212b和R3 212c是在寄存器209中的各个寄存器的示例。在寄存器209中的一个寄存器的32位能够被移入到在整数寄存器201中的一个整数寄存器中。类似地,在一个整数寄存器中的值能够被移入到寄存器209中的一个寄存器的32位中。
状态寄存器208指示处理器109的状态。指令指针寄存器211存储要被执行的下一个指令的地址。整数寄存器201、寄存器209、状态寄存器208和指令指针寄存器211都连接到内部总线205。任何附加的寄存器将也和内部总线205连接。
在另一个实施例中,这些寄存器中的一些寄存器能够供两种不同类型的数据使用。例如,寄存器209和整数寄存器201能够被组合在一起,其中每个寄存器能够存储整型数据或者压缩数据。在另一个实施例中,寄存器209能够被用作浮点寄存器。在这个实施例中,压缩数据能够被存储在寄存器209或者浮点数据中。在一个实施例中,组合的寄存器长度为128位,而且整数被表示为128位。在这个实施例中,在存储压缩数据和整型数据时,寄存器不需要区分这两种数据类型。
功能单元203执行由处理器109实现的操作。这样的操作可以包含移位、加法、减法和乘法等。功能单元203连接到内部总线205。高速缓存器160是处理器109的一个可选单元,而且能够用来高速缓存来自例如主存储器104的数据和/或控制信号。高速缓存器160连接到译码器202,而且被连接来接收控制信号207。
数据和存储格式图3A说明了三种压缩数据类型压缩字节221、压缩字222和压缩双字(dword)223。压缩字节221为128位长,包含16个压缩字节数据单元。通常,一个数据单元是一个和其它同样长度的数据单元一起存储在单个寄存器(或者存储单元)中的单个数据段。在压缩数据序列中,保存在一个寄存器中的数据单元的数目是128位除以以数据单元的位为单位的长度。
压缩字222为128位长,并且包含8个压缩字数据单元。每个压缩字包含16位的信息。压缩双字223为128位长,并且包含4个压缩双字数据单元。每个压缩双字数据单元包含32位信息。一个压缩四倍字为128位长,而且包含2个压缩四倍字数据单元。
图4A-4C说明了依据本发明一个实施例的在寄存器内的压缩数据存储表示。如图4A所示,无符号的压缩字节在寄存器内的表示310说明了在多媒体寄存器209之一中的无符号压缩字节201的存储。用于每个字节数据单元的信息按如下方式被存储,其中对于字节零是第七位到第零位,对于字节1是第十五位到第八位,对于字节2是第二十三位到第十六位,以及最后对于字节十五是第120到第127位。
因此在该寄存器中使用了所有可用的位。这种存储布置增加了该处理器的存储效率。同样,如果16个数据单元被存取,则现在一次操作就能够同时对十六个数据单元加以执行。有符号压缩字节在寄存器内的表示311说明了一个有符号的压缩字节221的存储。要注意到每个字节数据单元的第八位是符号指示符。
如在图4B中说明的那样,无符号压缩字在寄存器内的表示312说明了字七到字零是如何被存储在多媒体寄存器209的一个寄存器中的。有符号压缩字在寄存器内的表示313类似于无符号压缩字在寄存器内的表示312。要注意到每个字数据单元的第十六位是符号指示符。如图4C说明的那样,无符号压缩双字在寄存器内的表示314显示了多媒体寄存器209是如何存储两个双字数据单元的。有符号压缩双字在寄存器内的表示315类似于无符号压缩双字在寄存器内的表示314。要注意到必要的符号位是双字数据单元的第32位。
内容数据的有效过滤和卷积,如由本发明示教的那样,开始于具有数据和过滤/卷积系数的数据源设备的加载。在很多情况下,在一个数据存储设备例如像单指令多数据(SIMD)寄存器内的数据或者系数的次序,在能够做算术计算之前要求改变。因此,有效的过滤计算和卷积不仅需要适当的算术指令,而且需要用于组织作出计算所需要的数据的有效方法。
例如,使用在背景部分中的符号,通过替换例如由S[I]给定的像素I的值来过滤图像。在像素I的任一边的像素的值被用在S[I]的过滤计算上。类似地,需要在像素I+1任一边的像素来计算S[I+1]。因此,为了在一个SIMD寄存器中为超过一个的像素计算过滤结果,在SIMD寄存器中为该计算复制和布置数据。
不幸地是,当前的计算体系结构缺乏一种针对在该计算体系结构内的所有适当的数据大小布置数据的有效方法。因此,如图5所述,本发明包含一个有效地排序任何大小的数据的字节混洗指令(PSHUFB)145。字节混洗操作145通过在混洗操作期间维护在更大数据内的字节的相对位置,排序比字节大的数据大小。此外,字节混洗操作145能够改变数据在SIMD寄存器中的相对位置,而且还能够复制数据。
再次参见图5,图5描述了一个用于具有三个系数的过滤器的字节混洗操作145的一个示例。使用传统的技术,过滤系数(没有显示)会被应用于三个像素,然后该过滤系数被移动到另一个像素并且再次进行应用。然而,为了并行执行这些操作,本发明描述了一个用于数据布置的新指令。因此,如图5中描述的那样,在目的数据存储设备406中通过如下方式组织数据404,在一个实施例中目的数据存储设备406是源数据存储设备404,所述方式是使用一掩码402来指定相应数据单元被存储在目的寄存器406中的地址。
在一个实施例中,掩码的布置基于期望的数据处理操作,所述数据处理操作可以包含例如,过滤操作、卷积操作等等。
因此,使用掩码402,数据406以及系数的处理能够被并行执行。在描述的示例中,源数据存储设备404是一个128位的SIMD寄存器,该SIMD寄存器最初存储十六个8位像素。因而,当使用一个具有三个系数的像素过滤器时,第四个系数被设置为零。在一个实施例中,根据在源数据存储设备404内的数据单元的数目,源寄存器404能够被用作目的数据存储设备或者寄存器,由此和通常必要的数目相比减少了寄存器的数目。因而,在源数据存储设备404内被覆盖的数据可以从存储器或者从另一个寄存器中重新加载。此外,多个寄存器可以被用作源数据存储设备404,它们相应的数据按照要求在目的数据存储设备406内进行组织。
一旦数据单元以及系数的排序完成了,则数据和相应的系数必须依据一个数据处理操作进行处理。本领域技术人员将意识到使用过滤系数和数据大小的不同数量,过滤计算以及卷积计算需要具有不同精度的操作。最基本的过滤操作将两对数相乘,并且将它们的乘积相加。这个操作被称作一个乘-累加指令。
不幸地是,当前的计算体系结构不提供对使用有符号或者无符号系数,对多个数组或者过滤长度和多种数据大小的有效乘-累加计算的支持。此外,字节操作不被支持。因此,传统的计算机体系结构必须使用分拆(unpack)指令来转换16位的数据。这些计算机体系结构通常包含对如下乘-累加操作的支持,所述乘-累加操作在独立的寄存器中计算16位数据的乘积,然后将相邻的乘积相加以给出一个32位的结果。该解决方案对于对应要求16位精度的数据的过滤系数是可接受的,但是对于8位的过滤系数,在8位数据(这对于图像和视频是通常情况)中,指令和数据级别的并行性是浪费的。
现在参见图6,图6描述了第一源寄存器452和第二源寄存器454。在一个实施例中,第一和第二源寄存器是N位长的SIMD寄存器,例如像128位IntelSSE2XMM寄存器。在这样一个寄存器上实现的乘累加指令会为两个像素向量452和454给出以下的结果,其被存储在目的寄存器456内。因此,该示例显示了一个被称为PMADDUSBW操作147(图1)的8位字节到16位字的乘-累加指令,其中在该指令中的U和S方便记忆地是指无符号和有符号的字节。在一个源寄存器中的字节是有符号的,而在其他源寄存器中它们是无符号的。
在本发明的一个实施例中,具有无符号数据的寄存器是目的地和16位乘-累加的结果。这个选择的理由是在大多数的实现中,数据是无符号的,且系数是有符号的。因此,优选地是将该数据覆盖掉,因为在将来的计算中不怎么可能需要该数据。在图1中描述的额外字节乘-累加指令是用于在两个寄存器中的无符号字节的PMADDUUBW操作149和用于在两个源寄存器中的有符号字节的PMADDSSBW操作151。通过一个应用于16位有符号字的对以产生一个32位有符号乘积的PMADDWD指令153,完成乘-累加指令。
因为通常是过滤操作的情况,第二向量通常包含过滤系数。因此,为了准备一个XMM寄存器,能够在该寄存器的一部分内加载该系数,而且使用混洗指令145把系数复制到该寄存器的其余部分。例如,如图7A所述,系数数据存储设备502,诸如例如一个XMM 128位寄存器,响应于一个数据加载指令的执行最初用三个系数加载。然而,在本领域的那些技术人员将要承认可以在数据处理之前在存储器中组织过滤系数。因而,在过滤之前,基于它们在存储器内的组织,系数可以最初如图7B所述进行加载。
因而,系数寄存器502包含过滤系数F3、F2和F1,它们能够被编码为有符号或者无符号的字节。一旦加载了系数寄存器502,现有的指令PSHUFD能够用来在该系数寄存器的剩余部分内拷贝该过滤系数,以获得如图7B所述的下列结果。如图7B所述,系数寄存器504现在包含用于并行执行数据处理操作所要求的、混洗了的系数。如本领域的那些技术人员所知的那样,包含三个系数的过滤器在图像处理算法中是非常普遍的。然而,在本领域的那些技术人员将要承认某些过滤操作,诸如JPEG 2000,使用九个和七个16位的系数。因此,这样的系数的处理超过了系数寄存器的容量,并导致部分地过滤的结果。因此,处理过程继续,直到使用每个系数都获得一个最终结果为止。
现在参见图7C,图7C说明了在源寄存器506内的像素数据的布置,该像素数据最初包含在如图5所述的源寄存器404内,并且在目的寄存器406内被混洗过。因此,响应于一个数据处理操作的执行,PMADDUSBW指令能够用来计算两个乘法的总和,并且把结果存储在目的寄存器510中。不幸地是,为了为选择的数据处理操作完成计算而且产生数据处理结果,必须将在目的寄存器510内的相邻乘积求和对相加。
因此,如果一个乘-累加指令的总和比两个像素更长,通常是这种情况,就必须相加单独的总和。不幸地是,由于相邻的和是在同一个目的寄存器内的事实,当前的计算体系结构没有提供一种相加相邻和的有效方法。因比,本发明利用相邻加法指令,其结果如图8A-8D所述。
现在参见图8A,图8A描述了在相加两个相邻16位值(PADDD2WD操作157)以给出一个32位和之后的目的寄存器552。因而,图8A描述了一个乘-累加指令的两个相邻的16位结果,它们被相加以给出4个字节乘积的32位和。图8B描述一个相邻加法指令(PAADDD4WD操作157),该指令把4个相邻16位值相加以给出一个32位的和。因而,一个字节乘-累加指令的4个相邻的16位结果被相加,以给出8个字节乘积的32位和。图8C说明一个相邻加法指令(PAADDD8WD操作157),该指令把8个相邻的16位值相加以给出一个32位的和。因而,该示例说明了一个字节乘-累加操作的8个相邻的16位结果,它们被相加以给出16个字节乘积的32位和。
因此,执行一个相邻加法操作的指令的选择是基于在一个求和中的轮次数目(N)。例如,使用在图7A-7C中描述的三抽头过滤器,第一指令(PAADD2WD操作157)将获得如图8D所述的下列结果。然而,针对在两个16位像素向量(例如,一个宏块的第一行)之间的相关性,使用了如图8C所述的最后一个指令(PAADD8WD操作157)。随着SIMD寄存器在大小上的增加,这样一个操作对于有效实现变得越来越重要。如果没有这样一个操作,则需要许多附加的指令。
因而,如本发明所述的相邻加法指令集,支持能够被相加的相邻值的数量的广阔范围和通用数据类型的全部范围。在一个实施例中,相邻16位值的加法包含一个指令集(PAADDNWD操作157),该指令集的范围从两个相邻值(N=2)的加法开始,以及加倍被相加的数量到四个(N=4),然后到八个(N=8)以及直至达到寄存器中的总数量为止。16位相邻加法的和的数据大小是32位。在一个替换实施例中,相邻的16位值(PAADDWD操作161)被相加以产生一个32位的和。
在这个替换实施例中,没有包含其它具有16位数据大小的指令,这是因为具有32位输入的相邻加法指令被用来相加由具有16位输入的指令产生的和。两个实施例中都包含一个32位相邻加法指令集(PAADDNDWD操作159),该指令集的范围从两个相邻值(N=2)的加法开始,以及加倍被相加的数量到四个(N=4),然后到八个(N=8)等,以及直至达到寄存器中的总数量为止。32位相邻加法的和的数据大小是32位。有时候,这些结果没有填充该寄存器。例如,如图8A、8B和8C所示的指令,三个不同的相邻加产生4、2和1个32位结果。在一个实施例中,这些结果被保存在目的数据存储设备的较低的最低有效部分中。
因此,当有两个32位结果时,如图8B所述,这些结果被保存在较低的64位中。在一个32位结果的情况下,如图8C中说明的那样,这些结果被保存在较低的32位中。如本领域的那些技术人员所认识到的那样,某些应用使用相邻字节的和。本发明利用一个把两个相邻有符号字节相加以给出一个16位字的指令(PAADDNB操作155)和一个把两个相邻无符号字节相加以给出一个16位字结果的指令来支持字节的相邻加法。需要超过两个相邻字节加法的应用利用适当的16位相邻加法操作把两个字节的16位和进行相加。
一旦已经计算出数据处理操作的结果,下一个操作在于把这些结果向回发送到存储器设备。如由如上所述的实施例说明的那样,这些结果能够以32位精度进行编码。因此,使用作用于双字的简单移位操作,例如,如上所述的MOVD操作143和作用于整个寄存器的逻辑右移操作(PSRLDQ),逻辑右移位双倍的4倍字,能够把结果写回到存储器中。因而,把所有结果写回到存储器在第一种情况中会需要四个MOVD和三个PSRLDQ(图8A),在第二种情况中会需要两个MOVD和一个PSRLDQ(图8B)以及最后,如图8C所述,在最后一种情况中仅仅需要一个MOVD。
不幸地是,虽然如图7C所述,相邻加法操作能够并行执行,但是过滤计算通常需要在该图像中的下一个像素。因而,需要在一个源数据存储设备或者寄存器中加载一个或多个像素。为了避免每次在寄存器中加载八个像素,提出了用于这个操作的两种解决方案。在一个实施例中,如图9A所述,本发明描述了一个寄存器合并操作163。因而,为了在一个目的寄存器606内处理像素A1-A8,像素A7-A1和像素A8串接在一起以在目的寄存器606中形成像素A8-A1。因此,寄存器合并操作利用字节数目来选择寄存器,其通过一个输入参数提供。
现在参见图9B,图9B描述了一个用于执行寄存器合并操作的替换实施例。最初,八个像素被加载到第一源寄存器608(MM0)中。接下来,在第二源寄存器(MM1)610中加载后续的八个像素。接下来,对第二源寄存器610执行置换操作。一旦执行了,寄存器610被复制到第三源寄存器(MM2)612。接下来,第一源寄存器608被右移8位。此外,依据压缩逻辑与指令组合第二源寄存器610和屏蔽寄存器614,并且将其存储在第一源寄存器608内。
接下来,在第二源寄存器610和第一源寄存器608之间执行逻辑或操作,以在目的寄存器620内产生下列的结果,导致寄存器合并操作。如说明的那样,通过移位第一源寄存器608继续该过程。接下来,移位第二源寄存器610以产生寄存器612。接下来,在屏蔽寄存器614和第二源寄存器612之间执行逻辑与操作,结果被存储在目的寄存器622中。最后,在第二源寄存器612和第一源寄存器608之间执行压缩或操作,以在目的寄存器624内产生随后的寄存器合并操作。现在描述用于实现本发明示教的过程方法。
操作现在参见图10,图10描述了一个框图,其说明了一种用于在例如如图1和2所述的计算机系统100内的内容数据的有效过滤和卷积的方法700。如在此描述的那样,内容数据涉及图像、音频、视频和语音数据。此外,本发明涉及数据存储设备,其如本领域的那些技术人员所承认的那样,包含各种能够存储数字数据的设备,这些设备例如包括,诸如128位Intel体系结构SSE2 MMX寄存器的数据寄存器。
再次参见图10,该方法从过程块702开始,其中确定是否执行一个数据处理操作。如在此描述的那样,数据处理操作包含但不局限于对像素数据执行的卷积和过滤操作。一旦执行了,则执行过程块704。在过程块704处,执行一个数据加载指令。响应于数据加载指令的执行,在过程块706处,在源数据存储设备212A和辅助数据存储设备212B内加载输入数据流数据,例如如图2所述的。
在过程块708处,确定数据处理操作是否已经执行了一个数据混洗指令。响应于执行一个数据混洗指令,在过程块710处,来自例如一个源数据存储设备212B的数据的选择部分在一个目的数据存储设备内或者依据在一个系数数据存储设备(参见图5)内的系数布置进行组织。在一个系数数据存储设备内的系数依据期望的数据处理操作计算(例如,如在图7A和7B中说明的那样)进行组织。在一个实施例中,在任何过滤操作之前在存储器内组织系数。因此,系数可以被加载到一个系数数据存储器中而不需要混洗(参见图7B)。
如上所述,如图7A-7C所述,如数据处理操作所要求的那样,排序数据和系数是实现并行计算所要求的。然而,因为系数在数据处理操作之前就是已知的,所以可以在存储器中组织该系数,以允许以在存储器中组织的形式加载到一个系数寄存器中,而不需要在数据处理操作期间混洗这些系数。最后,在过程块720处,依据数据处理操作处理加载的数据以产生一个或多个数据处理结果。一旦产生了,这些数据处理操作的结果能够被写回到存储器。
现在参见图11,图11描述了一个框图,其说明了一种用于依据数据处理操作处理数据的方法722。在过程块724处,确定数据处理操作是否已经执行了乘-累加指令。响应于该乘-累加指令的执行,在过程块726处,如图7C所述,产生多个在目的存储设备内的数据和在系数数据存储设备内的系数的乘积求和对。接下来,在过程块728处,确定该数据处理操作是否已经执行了一个相邻加法指令。
响应于相邻加法的执行,在过程块730处,响应于相邻加法指令的执行,将在目的数据存储设备510(图7C)内的相邻乘积求和对相加,以形成一个或多个数据处理操作结果(参见图8D)。然而,在某些实施例中,在系数的数目超过系数寄存器的容量的地方(参见过程块732),获得部分的数据处理结果。因此,如在可选过程块732-736中所指示的那样,继续处理和组织系数(过程块734)数据(过程块736),直到获得最后的数据处理操作结果为止。否则,在过程块738处,存储一个或多个数据处理操作结果。最后,在过程块790处,确定是否完成了输入数据流数据的处理。照这样,重复过程块724-732,直到输入数据流数据的处理完成为止。一旦处理完成了,控制流返回到过程块720,在那儿结束方法700。
现在参见图12,图12描述了一个框图,其说明了一种用于处理附加输入数据的附加方法740。在过程块742处,确定在源数据存储设备212A内是否有任何未存取的数据。如在此描述的那样,未存取的数据是指在源数据存储设备212A内的如下数据,该数据在该数据存储设备内还没有为了执行一个乘-累加指令而被混洗。当数据存储设备包含未存取的数据时,在过程块744处,从源数据存储设备中选择一部分数据作为选择的数据。一旦选择了,则执行过程块786。
否则,在过程块746处,从源数据存储设备中选择一个或多个未处理的数据单元,以及从一个辅助数据存储设备中选择一个或多个数据单元。如在此描述的那样,未处理的数据单元是指还没有为其计算一个数据处理操作结果的数据单元。接下来,在过程块780处,执行一个寄存器合并指令(参见图9A和9B),该指令把源数据存储设备中未处理的数据单元和从辅助数据存储设备中选择的数据单元串接起来,以形成选择的数据。接下来,在过程块782处,来自辅助数据存储设备的数据被移动到源数据存储设备中。
因而,不再需要源数据存储设备的数据,这是因为所有的都已经被存取了。因此,包含未存取数据的数据的辅助存储器,能够用来覆盖在源数据存储设备内的数据。在过程块784处,用来自存储器设备的输入数据流数据加载辅助数据存储设备,其需要额外的数据处理,诸如过滤或者卷积。最后,在过程块786处,在目的数据存储设备内或者依据在系数数据存储设备(参见图5)内的系数布置组织选择的数据。一旦执行了,控制流程返回到过程块790,如图11所述用于选择数据的继续处理。
现在参见图13,图13描述了一种用于选择未处理的数据单元的附加方法748。在过程块750处,确定源数据存储设备是否包含未处理的数据。当在源数据存储设备内数据的每个部分都已经被处理了,则执行过程块770。在过程块770处,从辅助数据存储设备中选择一部分数据,它们充当选定数据,其然后依据数据处理操作进行处理。
否则,在过程块752处,从源数据存储设备中选择一个或多个未处理的数据单元。最后,在过程块766处,依据未处理数据单元的计数从辅助数据存储设备中选择附加的数据单元,以形成所选择的数据。因而,在数据处理操作执行之前被选择用来在目的数据存储设备内进行混洗的数据,被限制在基于过滤系数数目的数据单元的计数。因此,使用这个数据单元计数,从数据单元计数中减去未处理数据单元的数目,以确定为了执行寄存器合并操作要从辅助数据存储设备中选择的单元数目。
最后,参见图14,图14描述了一种用于选择如图13所述的过程块752中的未处理数据单元的附加方法754。在过程块756处,从源数据存储设备中选一个数据单元。接下来,在过程块758处,确定是否已经为该数据单元计算了一个数据处理操作结果。当已经计算了这样的一个结果时,放弃选择的数据单元。否则,在过程块760处,选择的数据单元是一个未处理的数据单元并且被存储。接下来,在过程块762处,递增未处理的数据单元计数。最后,在过程块764处,重复过程块756-762,直到在源数据存储设备内的每个数据单元都被处理了为止。
因而,使用本发明的示教,避免了不必要的数据类型改变,导致每个指令SIMD操作数目的最大化。此外,还实现了显著减少为算术操作而排序数据所要求的时钟周期数目。因此,表格1给出了几个使用由本发明描述的示教和指令的过滤应用的估算加速值。
表格1

替换实施例已经描述了使用SIMD寄存器来提供内容数据的有效过滤和卷积的计算体系结构的一个实现的几个方面。然而,计算体系结构的各个实现提供了许多的特征,它们包含补充、增补、和/或代替如上所述的特征。在不同的实现中特征能够被实现为计算体系结构的一部分,或者实现为专门软件或者硬件部件的一部分。此外,上面的描述,为了解释起见,使用了具体的命名法以提供对本发明实施例的一个彻底了解。然而,对于本领域的技术人员来说显而易见的是,这些特定的细节不是为实践本发明所必需的。
此外,虽然在此描述的一个实施例针对一用于使用SIMD寄存器进行内容数据有效过滤和卷积的系统,然而在本领域的那些技术人员将要理解本发明中的示教能够应用于其它的系统。实际上,用于处理图象、音频与视频数据的系统在本发明的示教的范围之内,而没有背离本发明的范围和精神。选择和描述如上所述的实施例是为了最好地说明本发明的原理和它的实际应用。选择这些实施例以借此允许在本领域的其它技术人员利用适用于所考虑特定使用的各个修改最好地使用本发明和各个实施例。
本发明的实施例提供了许多优于已知技术的优点。本发明包含有效地实现用于多个数组长度和数据大小以及系数符号的过滤/卷积的操作的能力。这些操作通过使用一小组单指令多数据(SIMD)指令中的一部分的几条指令来完成。因此,本发明避免了不必要的数据类型改变。因此,通过避免了不必要的数据类型改变,本发明最大化每个指令的SIMD操作的数目,同时显著地减少了为诸如乘-累加操作的算术操作而排序数据所要求的时钟周期数目。
图15是一个实施例中的处理器的微型体系结构的框图,该处理器包含逻辑电路,用于依据本发明执行并行右移位合并操作。如在上面讨论的那样,右移位合并操作还可以被称为寄存器合并操作和寄存器合并指令。对于右移位合并指令(PSRMRG)的一个实施例,该指令产生和图1、9A和9B中的寄存器合并操作167相同的结果。有序前端1001是处理器1000的一部分,其取出要被执行的宏指令并且准备它们以稍后在处理器流水线中使用。该实施例的前端包含几个单元。指令预取器1026从存储器中取出宏指令并且把它们馈送给指令译码器1028,其接着把它们译码成为机器知道如何执行的、称为微指令或者微操作(也称作微op或者uops)的原语。轨迹高速缓存器1030取走译码的微操作,并且将它们汇编到程序有序序列中,或者在微指令队列1034中跟踪以便执行。当轨迹高速缓存器1030遇到一个复杂的宏指令时,微码ROM 1032提供完成该操作所需要的微操作。
许多宏指令被转换成为单个微指令,而其它的需要几个微操作来完成全部的操作。在这个实施例中,如果需要超过四次微操作来完成一个宏指令,则译码器1028访问微码ROM 1032以执行该宏指令。在一个实施例中,如果需要许多微操作来完成该操作,则用于一个并行右移位合并算法的指令能够被存储在微码ROM 1032内。轨迹高速缓存器1030参考入口指针可编程逻辑阵列(PLA),以确定一个正确的微指令指针,从而在微代码ROM 1032中读取用于除法算法的微代码序列。在微码ROM 1032完成用于当前宏指令的定序微操作之后,机器的前端1001再继续从轨迹高速缓存器1030中取出微操作。
某些SIMD及其它多媒体类型的指令被认为是复杂的指令。大多数浮点相关的指令也是复杂的指令。因而,当指令译码器1028遇到一个复杂的宏指令时,在适当位置访问微码ROM 1032以检索用于那个宏指令的微码序列。执行那个宏指令所需要的各个微操作被传递给无序执行引擎1003,以便在适当的整数和浮点执行单元处执行。
无序执行引擎1003是微指令准备用于执行的地方。无序执行逻辑具有多个缓冲器,用于平滑和重新排序微指令流,以在这些微指令沿着流水线向下进行以及被调度用于执行时优化性能。分配器逻辑分配每个微指令按序执行所需要的机器缓冲器和资源。寄存器重命名逻辑把逻辑寄存器重命名到寄存器堆中的条目。该分配器还在指令调度器存储器调度器、快速调度器1002、慢速/一般浮点调度器1004和简单浮点调度器1006的前面,在两个微操作队列中的一个中为每个微操作分配一个条目,这两个队列一个用于存储器操作一个用于非存储器操作。微指令调度器1002、1004、1006基于它们的相关输入寄存器操作数源的准备状态和微操作完成它们的操作所需要的执行资源的可用性,确定一条微指令已就绪来执行的时间。这个实施例中的快速调度器1002能够按每半个主时钟周期进行调度,而其它调度器在每个主处理器时钟周期仅仅能够调度一次。调度器为分派端口进行仲裁,以调度要执行的微操作。
寄存器堆1008、1010位于调度器1002、1004、1006和在执行块1011中的执行单元1012、1014、1016、1018、1020、1022、1024之间。存在一个单独的寄存器堆1008、1010,分别用于整数和浮点操作。这个实施例中的每个寄存器堆1008、1010还包含一个旁路网络,其能够绕过还没有被写入到寄存器堆中的、刚刚完成的结果或者将其转发到新的相关微操作。整数寄存器堆1008和浮点寄存器堆1010还能够和其它寄存器堆进行数据通信。对于一个实施例,整数寄存器堆1008被分成两个单独的寄存器堆,一个寄存器堆用于数据的低阶32位,一个第二寄存器堆用于数据的高阶32位。一个实施例中的浮点寄存器堆1010具有128位宽的条目,这是因为浮点指令通常具有宽度从64位到128位的操作数。
执行块1011包含执行单元1012、1014、1016、1018、1020、1022、1024,指令实际上在这些执行单元中被执行。这个部分包含寄存器堆1008、1010,其存储微指令需要执行的整数和浮点数操作数值。这个实施例中的处理器1000由许多执行单元组成地址产生单元(AGU)1012、AGU 1014、快速ALU 1016、快速ALU 1018、慢速ALU 1020、浮点ALU 1022、浮点移动单元1024。对于这个实施例,浮点执行块1022、1024,执行浮点、MMX、SIMD和SSE操作。这个实施例中的浮点ALU 322包含一个64位乘64位的浮点除法器,以执行除、平方根、和求余微操作。对于本发明的实施例,任何涉及浮点值的动作都利用浮点硬件发生。例如,在整型格式和浮点格式之间的转换涉及一个浮点寄存器堆。类似地,浮点除操作发生在一个浮点除法器。在另一方面,非浮点数和整数类型用整数硬件资源加以处理。简单的、非常频繁的ALU操作转向高速ALU执行单元1016、1018。这个实施例中的快速ALU 1016、1018能够用半个时钟周期的有效等待时间来执行快速的操作。对于一个实施例,最复杂的整数操作转向慢速ALU 1020,因为慢速ALU 1020包含用于诸如乘法、移位、标志逻辑、和分支处理的长等待时间类型操作的整数执行硬件。通过AGU 1012、1014执行存储器加载/存储操作。对于这个实施例,对64位数据操作数执行整数操作的环境中描述了整数ALU 1016、1018、1020。在替换实施例中,能够实现ALU 1016、1018、1020以支持各种数据位,这些位包含16、32、128、256等等。类似地,能够实现浮点单元1022、1024以支持具有各种宽度的位的操作数范围。对于一个实施例,浮点单元1022、1024能够结合SIMD和多媒体指令对128位宽的压缩数据操作数进行操作。
在这个实施例中,微操作调度器1002、1004、1006在父加载(parent load)已经执行完成之前,分派相关的操作。因为微操作在处理器1000中被推测地调度和执行,所以处理器1000还包含用于处理存储器未命中的逻辑。如果数据加载在数据高速缓存器中未命中,则在流水线中实时存在的相关操作让调度器具有暂时错误的数据。一种重放机制跟踪和重新执行使用错误数据的指令。仅仅相关的操作需要被重放,而无关的操作被允许完成。处理器的一个实施例中的调度器和重放机制还被设计为捕捉用于扩展精度整数除操作的指令序列。
术语“寄存器”在此被用来指板上处理器的存储单元,所述存储单元被用作宏指令的一部分以便标识操作数。换句话说,在此所指的寄存器是可从处理器的外面(从一个程序员的角度)看见的那些寄存器。然而,在此描述的寄存器能够由一个处理器内的电路使用任何数量的不同技术加以实现,诸如专用的物理寄存器、使用寄存器重命名的动态分配的物理寄存器、专用和动态分配的物理寄存器的组合等等。对于在下面的讨论,寄存器被理解为是被设计为保持压缩数据的数据寄存器,诸如使用California,Santa Clara的Intel公司的MMX技术允许的微处理器中的64位宽的MMXTM寄存器(mm寄存器)。这些MMX寄存器,可以采用整数和浮点形式使用,能够与伴随着SIMD和SSE指令的压缩数据单元一起进行操作。类似地,与SSE2技术有关的128位宽XMM寄存器还能够用来保持这样的压缩数据操作数。
在下列图的示例中,描述了多个数据操作数。为简单起见,数据段从字母A按字母顺序向前进行标记,其中A位于最低地址处而Z将位于最高地址处。因此,A可以在地址0处,B在地址1处,C在地址3处,诸如此类。虽然在一些示例中的数据序列用以相反字母次序排列的字母来显示,但是地址将仍然从A在0处、B在1处等等开始。概念上,一个右移位操作,如在一个实施例的右移位合并中,如果序列为D、C、B、A的话,则要求右移位移出较低地址的数据段。因此,右移位只是把一个数据块中的数据单元向右移通过一条固定的线。此外,右移位合并操作在概念上能够将一个操作数中最右侧的数据段右移到另一个数据操作数的左侧,就好象这两个操作数是在一个连续区上一样。
图16A是一个依据本发明对数据操作数执行一个并行右移位合并操作的逻辑的一个实施例的框图。用于这个实施例的右移位合并(同样,一个寄存器移位)操作的指令(PSRMRG)从三块信息开始第一数据操作数1102、第二数据操作数1104和移位计数1106。在一个实施例中,移位PSRMRG指令被译码成为一个微操作。在一个替换实施例中,该指令可以被译码成为不同数量的微操作,以对该数据操作数执行移位合并操作。对于这个示例,数据操作数1102、1104是存储在寄存器/存储器中的64位宽的数据段,而且移位计数1106是一个8位宽的立即值。根据特定的实现,数据操作数和移位计数能够为其它的宽度,诸如分别为128/256位和16位。在这个示例中的第一操作数1102由八个数据段组成,它们是P、O、N、M、L、K、J和I。第二操作数1104同样由八个数据段组成,它们是H、G、F、E、D、C、B和A。在此的数据段具有相等的长度而且每个都包含数据的单个字节(8位)。然而,本发明的另一个实施例用更长的128位操作数进行操作,其中每个数据段都由单个字节(8位)组成,而且128位宽的操作数将具有十六个字节宽的数据段。类似地,如果每个数据段是一个双字(32位)或者一个四倍长字(64位),则128位操作数将分别具有四个双字宽或者两个四倍长字宽的数据段。因此,本发明的实施例不局限于特定长度的数据操作数、数据段、或者移位计数,而且能够为每个实现恰当地改变大小。
操作数1102、1104能够驻留在寄存器或者存储单元或者寄存器堆或者它们的混合中。数据操作数1102、1104,和计数1106连同一个右移位合并指令一起被发给在处理器中的执行单元1110。等到右移位合并指令到达执行单元1110时,指令早先在处理器流水线中应该是已经被译码了。因此右移位合并指令能够具有一个微操作(微指令)或者其它译码格式的形式。对于这个实施例,在串接逻辑和临时寄存器处接收两个数据操作数1102、1104。串接逻辑合并/连接这两个操作数的数据段,并且把新的数据块放置在一个临时寄存器中。在此,新的数据块由十六个数据段组成,它们是P、O、N、M、L、K、J、I、H、G、F、E、D、C、B、A。因为这个示例用64位宽的操作数进行操作,所以保持这个组合的数据所需要的临时寄存器为128位宽。对于128位宽的数据操作数,则需要一个256位宽的临时寄存器。
在执行单元1110中的右移逻辑1114取走临时寄存器的内容,并且按照计数1106所要求的n个数据段执行数据块的逻辑右移。在这个实施例中,计数1106指示要右移的字节数目。根据特定的实现,计数1106还能够用来指示要移位的位、半字节、字、双字、四倍字等的数目,取决于数据段的粒度。对于这个示例,n等于3,因此临时寄存器内容被移位三个字节。如果每个数据段都是一个字或者双字宽,则该计数能够分别指示要移位的字或者双字的数目。对于这个实施例,在寄存器中的数据被右移位的同时,从临时寄存器的左端移入0值来填充空出的空间。因此如果移位计数1106大于在一个数据操作数中数据段的数目(在这种情况下为8),则在结果1108中能够出现一个或多个0。此外,如果移位计数1106等于或者超过两个操作数的数据段总数,则该结果将全部由0组成,因为所有的数据段将都已经被移出了。右移逻辑1114从临时寄存器中输出适当数量的数据段作为结果1108。在另一个实施例中,能够在右移逻辑之后包含一个输出多路复用器或者锁存器来输出结果。对于这个示例,结果为64位宽并且包含八个字节。由于对两个数据操作数1102、1104执行了右移位合并操作,所以结果由下列八个数据段组成,它们是K、J、I、H、G、F、E和D。
图16B是一个执行右移位合并操作的逻辑的另一个实施例的框图。类似于图16A中的先前示例,这个实施例中的右移位合并操作从三块信息开始第一64位宽的数据操作数1102、第二64位宽的数据操作数1104和8位宽的移位计数1106。移位计数1106指示该数据段要移位多少位置。对于这个实施例,计数1106以字节的数目说明。在一个替换实施例中,该计数可以指示用来移位该数据的位、半字节、字、双字或者四倍字的数目。在这个示例中的第一和第二操作数1102每个都由八个相等长度的字节大小数据段(H、G、F、E、D、C、B、A)组成,且第二操作数1104由八个数据段(P、O、N、M、L、K、J、I)组成。计数n等于3。本发明的另一个实施例能够用替换长度的操作数和数据段进行操作,诸如128/256/512位宽的操作数和位/字节/字/双字/四倍长字大小的数据段和8/16/32位宽的移位计数。因此本发明的实施例不局限于特定长度的数据操作数、数据段或者移位计数,而且能够为每个实现恰当地改变大小。
数据操作数1102、1104,和计数1106连同一个右移位合并指令一起被发给在处理器中的执行单元1120。对于这个实施例,分别在左移位逻辑1122和右移位逻辑1124处接收第一数据操作数1102和第二数据操作数1104。计数1106也被发送给移位逻辑1122、1124。左移位逻辑1122把第一操作数1102的数据段向左移位“第一操作数中的数据段数目-n”个段数目。因为数据段被左移位了,从右侧移入0值来填充空出的空间。在这种情况下,有八个数据段,所以第一操作数1102被左移位八减去三,或者说五个位置。第一操作数1102被移位这个差值,以实现用于在逻辑或门1126处合并的正确的数据对准。在在此的左移位之后,第一数据操作数变为K、J、I、0、0、0、0、0。如果计数1106大于在操作数中数据段的数目,左移位计算能够产生一个负数,以指示一个负的左移位。具有一个负计数的逻辑左移被解释为在反方向上的移位,而且实质上是一个逻辑右移。负的左移位将从第一操作数1102的左侧引入0值。
类似地,右移位逻辑1124将第二操作数的数据段向右移位n个数目。因为数据段被右移位了,从左侧移入0值来填充空出的空间。第二数据操作数变为0、0、0、H、G、F、E、D。从左移位/右移位逻辑1122、1124中输出移位了的操作数,而且在逻辑或门11 26处将其合并在一起。或门执行数据段的逻辑或,并且提供这个实施例的一个64位宽的结果1108。“K、J、I、0、0、0、0、0”和“0、0、0、H、G、F、E、D”或在一起产生一个包含八个字节K、J、I、H、G、F、E、D的结果1108。这个结果与用于在图16A中的本发明第一实施例的结果相同。要注意到对于一个大于在一个操作数中的数据单元数目的计数n 1106,能够在结果中从左侧开始出现适当数目的0值。此外,如果计数1106大于或等于在两个操作数中的数据单元的总数,则结果将全部由0组成。
图17A说明了依据本发明第一实施例的一个并行右移位合并指令的操作。对于这些对论,MM1 1204、MM2 1206、TEMP1232和DEST1242通常被称为操作数或者数据块,但是不局限于这些而且还包含寄存器、寄存器堆和存储单元。在一个实施例中,MM1 1204和MM2 1206是64位宽的MMX寄存器(在有些情况下也称为‘mm’)。在状态I1200处,移位计数imm[y] 1202、第一操作数MM1[x] 1204和第二操作数MM2[x] 1206和并行右移位合并指令一起发送。计数1202是一个y位宽度的立即值。第一1204和第二1206操作数是包含x数据段的数据块,而且如果每个数据段是一个字节(8位)的话,则每个都具有8x位的总宽。第一1204和第二1206操作数每个都被装满多个较小的数据段。对于这个示例,第一数据操作数MM1 1204由八个相等长度的数据段组成,它们是P 1211、O 1212、N 1213、M 1214、L 1215、K 1216、J 1217、I1218。类似地,第二数据操作数MM2 1206由八个相等长度的数据段组成,它们是H 1221、G1222,F 1223、E 1224、D 1225、C 1226、B 1227、A 1228。因此这些数据段中的每一个都是‘x*8’位宽。所以如果x为8,则每个操作数都是8个字节或者64位宽。对于其它的实施例,一个数据单元能够是一个半字节(4位)、字(16位)、双字(32位)、四倍字(64位)等等。在替换实施例中,x能够是16、32、64等数据单元宽。对于这个实施例,计数y等于8而且立即值能够被表示为一个字节。对于替换的实施例,y能够是4、16、32等位宽。此外,计数1202不局限于一个立即值,而且还能够被存储在一个寄存器或者存储单元中。
在状态II1230处操作数MM1 1204和MM2 1206被合并在一起,以形成一个2x数据单元(或者在这种情况下是字节)宽的临时数据块TEMP[2x] 1232。这个示例中的合并数据1232由十六个数据段组成,它们被排列为P、O、N、M、L、K、J、I、H、G、F、E、D、C、B和A。一个八字节宽的窗口1234从最右边缘开始框出临时数据块1232中的八个数据段。因此窗口1234的右边缘将与数据块1232的右边缘排在一起,这样,窗口1234框出以下的数据段H、G、F、E、D、C、B和A。移位计数n 1202指示右移合并数据的期望数量。计数值能够被实现采用位、半字节、字节、字、双字、四倍字等或数据段的特定数目来说明移位量。基于计数值1202,在此数据块1232被右移位n个数据段1236。对于这个示例,n等于3而且数据块1232被向右滑动三个位置。检查这个的另一种方法是在相反方向上移位窗口1234。换句话说,在概念上窗口1234能够被看作从临时数据块1232的右边缘向左移位三个位置。对于一个实施例,如果移位计数n大于数据段的的总数,这在组合数据块中给出的是2x,则结果将全部由0组成。类似地,如果移位计数n大于或等于在第一操作数1204中的数据段数目,x,则结果将包含从结果左侧开始的一个或多个0。在状态III 1240处,由窗口1234框出的数据段(K、J、I、H、G、F、E、D)作为结果输出到一个x数据单元宽的目的地DEST[x] 1242。
图17B说明了依据一个第二实施例的右移位合并指令的操作。右移位合并指令在状态I1250伴有y位的计数imm[y],x数据段的第一数据操作数MM1[x]以及x数据段的第二数据操作数MM2[x]。作为图17A中的示例,y等于8以及x等于8,其中MM1和MM2每个都是64位或者8字节宽。这个实施例中的第一1204和第二1206都被多个相等大小的数据段填充,在这种情况下每个都是一个字节宽,这两个操作数分别为“P 1211、O 1212、N 1213、M 1214、L1215、K 1216、J 1217、I1218”和“H 1221、G 1222、F1223、E 1224、D1225、C 1226、B 1227、A 1228”。
在状态II1260处,移位计数n 1202用来移位第一1204和第二1206操作数。这个实施例中的计数指示右移合并数据的数据段数目。对于这个实施例,移位发生在第一1204和第二1206操作数的合并之前。因此,第一操作数1204被不同地移位。在这个示例中,第一操作数1204被左移位x减n个数据段。“x-n”计算允许在稍后的数据合并处恰当的数据对齐。因此对于一个3的计数n,第一操作数1204被左移五个数据段或者五个字节。有多个0从右侧移入以填充空出的空间。但是如果移位计数n 1202大于在第一操作数1204中可得到的数据段x的数目,则“x-n”的左移位计算能够产生一个负数,其实质上指示一个负的左移位。在一个实施例中,一个具有负计数的逻辑左移被解释为在反方向中的左移位,而且实质上是一个逻辑右移。负的左移位将从第一操作数1204的左侧引入0值。类似地,第二操作数1206被右移位3个移位计数而且从左侧移入0值来填充空白。为第一1204和第二1206操作数保持的移位结果被分别保存在x数据段宽的寄存器TEMP1 1266和TEMP2 1268。在状态III 1270处,来自TEMP1 1266和TEMP2 1268的移位结果被合并在一起1272,以在寄存器DEST 1242处产生期望的移位合并数据。如果移位计数n 1202大于x,则操作数在该结果中能够从左侧开始包含一个或多个0。此外,如果移位计数n 1202等于2x或者更大,则在DEST1242中的结果将全部由0组成。
在上述示例中,诸如在图17A和17B中,MM1和MM2中的一个或者两个能够是在一个允许MMX/SSE技术的处理器中的64位数据寄存器,或者是具有SSE2技术的128位数据寄存器。根据该实现,这些寄存器能够是64/128/256位宽。类似地,MM1和MM2中的一个或者两个能够是除了寄存器之外的存储单元。在一个实施例的处理器体系结构中,MM1和MM2是如上所述的一个右移位合并指令(PSRMRG)的源操作数。移位计数IMM对于这样一个PSRMRG指令也是一个立即值。对于一个实施例,结果的目的地,DEST,也是一个MMX或者XMM数据寄存器。此外,DEST可以是和一个源操作数相同的寄存器。例如,在一个体系结构中,一个PSRMRG指令具有第一源操作数MM1和第二源操作数MM2。结果的预定目的地能够是第一源操作数的寄存器,在这种情况下是MM1。
图18A是一个流程图,说明了一种并行右移位和合并数据操作数的方法的一个实施例。通常在此使用的长度值L表示操作数和数据块的宽度。根据特定实施例,L能够用来用数据段、位、字节、字的数目等等指定宽度。在块1302处,接收一个长度L的第一数据操作数以供执行移位合并操作使用。在块1304处还接收一个长度L的第二数据操作数以供执行该移位合并操作使用。在块1306处接收一个以位/半字节/字节/字/双字/四倍字为单位指示有多少数据段或者距离的移位计数。在块1308处的执行逻辑把第一操作数和第二操作数串接在一起。对于一个实施例,一个长度2L的临时寄存器保持串接的数据块。在一个替换实施例中,合并的数据被保持在一个存储单元中。在块1310处,串接的数据块被右移位移位计数个位置。如果计数表示为一个数据段计数,则数据块被右移位那么多个数据段,而且从左侧沿着数据块的最高有效端移入0值来填充空白。例如,如果计数以位或者字节表示,则数据块被类似地右移那个距离。在块1312处,从移位了的数据块的右侧部分或者最低有效端产生一个长度L的结果。对于一个实施例,长度数量为L的数据段被从移位的数据块多路复用到一个目的寄存器或者存储单元。
图18B是一个流程图,说明了一种右移位和合并数据的方法的另一个实施例。在块1352处接收一个长度L的第一数据操作数以便利用右移位和合并操作进行处理。在块1354处接收一个长度L的第二数据操作数。在块1356处,一个移位计数指示期望的右移距离。基于利用该移位计数的计算在块1358处左移位第一数据操作数。一个实施例的计算包含从L中减去该移位计数。例如,如果操作数长度L和移位计数是用数据段表示的话,则第一操作数被左移位“L-移位计数”个段,并从该操作数的最低有效端移入0值。类似地,如果L以位为单位表示而且计数以字节为单位表示的话,则第一操作数将被左移位“L-移位计数*8”个位。在块1360处,第二数据操作数被右移位该移位计数值,而且从第二操作数的最高有效端移入0值来填充空白。在块1362处,移位了的第一操作数和移位了的第二操作数被合并在一起以产生一个长度L的结果。对于一个实施例,该合并产生一个包含来自第一和第二操作数的期望数据段的结果。
对计算机的一个越来越普及的使用涉及非常大的视频和音频文件的操纵。尽管这些视频和音频一般经由很高带宽的网络或者大容量的存储介质进行传输,但是为了处理该通信量,数据压缩仍然是必要的。因此,不同的压缩算法正变为用于许多普及的音频、图像和视频格式的表示或者编码方案中重要的一部分。依据运动图象专家组(MPEG)标准的视频,是使用压缩的一个应用。MPEG视频被分解成为一个层的分级结构,以帮助对错误进行处理、随机搜索和编辑、以及同步。
为了说明的目的,简要地描述构成一个MPEG视频的这些层。在顶层是一视频序列层,该视频序列层是一个自包含的位流。向下的第二层是一组由一个或多个内部和/或非内部帧组所组成的图片。向下的第三层是图片层本身而在下面的下一层是一个片断层。每个片段是光栅排序宏块的一个连续序列,在典型的视频应用中,这大多数经常在一个行的基础上,但并不限制于这样。每个片段都包含宏块,它们是16×16阵列的亮度像素,或者是具有两个8×8阵列的关联色度像素的画面数据单元。宏块能够被进一步分成分别的8×8块以便进一步的处理,诸如转换编码。宏块是用于运动补偿和运动估计的基本单位,而且能够具有与它相关联的运动矢量。取决于实施例,宏块能够为16行乘16列或者各种尺寸。
在MPEG视频中使用的一种临时预测技术是基于运动估计。运动估计基于这样的前提除了由对象在该帧内的移动引起的改变之外,连续的视频帧通常将是类似的。如果在帧之间没有运动,则编码器能够容易和有效地把当前帧预测为先前或者预测帧的复制。先前帧也可以被称作参考帧。在另一个实施例中,参考帧能够是下一个帧或者甚至是在该序列中的某个其它帧。该运动估计的实施例不要求把一个当前帧和先前的帧进行比较。因此在比较中使用了任何其它的帧。于是,为传输到编码器所必须的信息变为从初始参考帧重构画面所需要的合成开销。但是当在图像之间有运动时,情况就变得更加复杂了。在一个最佳匹配宏块和当前宏块之间的差别理想地将是大量的0值。当编码一个宏块时,转换和量化在最佳匹配和当前宏块之间的差别。对于一个实施例,传达量化了的值到一个用于压缩的可变长度编码。因为0能够被很好地压缩,所以具有许多0差值的最佳匹配是所希望的。还能够从差值中导出运动矢量。
图19A说明了一个运动估计的第一示例。左边的帧1402是包含一木头人(stick figure)和一路标的先前视频帧的样本。右边的帧1404是包含一类似的木头人和路标的当前视频帧的样本。在当前帧1404中,镜头移动已经导致路标从它在先前帧1402中的起始位置向下向右移动。在当前帧中具有现在举起手臂的木头人也已经从先前帧1402的中心向下移动到右侧。运动估计算法能够用来充分地表示在这两个视频帧1402、1404之间的改变。
对于一个实施例,运动估计算法为每个亮度宏块都执行一个全面的二维(2D)空间搜索。根据实现,运动估计可以不直接应用于在MPEG视频中的色度,因为颜色运动也许可以由和亮度相同的运动信息充分地表示。可能有许多不同的方法用于实现运动估计,而且用于实施运动估计的特定方案多少取决于对于那个专门应用的复杂度与品质对比的问题。一个经由宽广的2D区域的完全、穷举搜索通常能够产生最佳匹配结果。然而,这个性能需要一个最大的计算成本,因为运动估计常常是视频编码中最耗费计算的部分。试图通过限制像素搜索范围或者搜索类型来降低成本可能牺牲某些视频品质。
图19B说明了一个宏块搜索的一个示例。帧1410、1420,每个都包含不同的宏块。当前帧中的目标宏块1430是要和来自先前帧1410、1420的先前宏块匹配的当前宏块。在第一帧1410中,一个坏的匹配宏块1412包含路标的一部分而且是一个和当前宏块的坏匹配。在第二帧1420中,好的匹配宏块1420包含一个路标中的位和来自木头人的头部,如同在要被编码的当前宏块1430中的那样。两个宏块1422、1430具有某些共性而且仅仅有一些微小误差是可见的。因为找到一个相对好的匹配,所以编码器给这个宏块分配运动矢量。这些矢量指示宏块必须横向和纵向移动多远以便产生一个匹配。
图20说明了运动估计的一个示例应用和在产生第二帧中的一个结果预测。先前帧1510在时间上是在当前帧1520之前到来的。对于这个示例,从先前帧1510中减去当前帧1520,以获得一个能够被编码和传输的、较不复杂的残留误差画面1530。这个示例中的先前帧1510包含一个路标1511和一个木头人1513。当前帧1520包含在一个板1524上的一个路标1521和两个木头人1522、1523。运动被估算和匹配得越准确,残留误差接近零的可能性就越高,而且能够导致更高的编码效率。宏块预测能够帮助减少搜索窗口的大小。
编码效率能够通过利用运动矢量趋向于在宏块之间是高度相关的事实来完成。因此,水平分量可以和先前有效的水平运动矢量进行比镜并且编码差值。类似地,能够在编码之前计算一个垂向分量的差值。对于这个示例,从先前帧1510中减去当前帧1520产生一个包含第二个具有举起手臂的木头人1532和板1534的剩余画面1530。这个剩余画面1530被压缩和传输。理想地,和压缩和传输整个当前帧1520相比,这个剩余画面1530在编码上更不复杂而且占用更少的存储器。然而,不是每个宏块搜索都将导致一个可接受的匹配。如果编码器确定没有可接受的匹配存在,则能够编码特定的宏块。
图21A-B说明了在运动估计期间处理的示例当前帧1601和先前帧1650。先前帧1650以视频帧序列的时间次序在当前帧1601的前面。每个帧都由在水平和垂直方向横穿该帧扩展的非常多数量的像素组成。当前帧1601包含多个水平和垂直地排列的宏块1610、1621-1627。对于这个实施例,当前帧1601被分成相等大小,不相重叠的宏块1610、1621-1627。这个正方形宏块中的每一个都被进一步再分成一个相等数目的行和列。对于同一个宏块1610,可见到一个八行和八列的矩阵。宏块1610中的每个正方形方块都对应于单个像素。因此这个样本宏块1610包含64个像素。在其它实施例中,宏块具有十六行乘十六列(16×16)的尺寸。对于一个实施例,每一个像素的数据包含八个数据位或者单个字。在替换实施例中,数据像素能够包含其它的大小,包括半字节、字、双字、四倍字等等。为了运动估计,当前帧中的这些当前宏块试图和在先前帧1650中的宏块进行匹配。
对于这个实施例,先前帧1650包括一个搜索窗口1651,在其中该帧的一部分由搜索窗口1651所包围。搜索窗口1651包含如下的区域,其中要试图匹配当前帧1601的当前宏块。类似于当前帧,搜索窗口被分成多个相等大小的宏块。在此说明了一个具有八行八列的示例宏块1660,但是宏块能够由一个包括具有十六行和十六列的其它各种尺寸组成。在一个实施例的运动估计算法期间,来自搜索窗口1651的每个单独宏块都按照次序和来自当前帧的一个当前宏块进行比较以寻找一个可接受的匹配。对于一个实施例,在搜索窗口1651中的第一个先前宏块的左上角和搜索窗口1651的左上角排在一起。在一个运动估计算法期间,宏块处理的方向,一个像素接着一个像素,从搜索窗口的左侧向右边进行。因此第二宏块的最左边离搜索窗口的左边一个像素,诸如此类。在第一像素行的结尾处,该算法返回到搜索窗口的左边并且从下一行的第一个像素开始进行。重复这个处理过程,直到用于在搜索窗口1651中每一个像素的宏块都已经和当前宏块比较了为止。
图22A-D依据本发明的一个实施例说明了对帧的运动估计操作。在此讨论的本发明实施例涉及完全搜索运动估计算法。利用一次完全搜索,对应在先前帧(参考帧)的搜索窗口中的全部像素位置的宏块被尝试与当前帧的宏块进行匹配。对于一个实施例,快速完全搜索运动估计算法使用SIMD右移位合并操作来快速地处理帧的压缩数据。一个实施例中的SIMD右移位合并操作,还能够通过减少数据加载的数目,尤其是不对齐的存储器加载的数目及其它数据操作指令来改善处理器性能。通常,一个实施例中的运动估计过程能够以伪代码描述为for each current block in both x andy direction{for all mod l position in the y axis of the search windowfor all mod 4 positions in the x axis of the search windowload pixel data from memory to registers;attempt block match for 4 adjacent previous macroblocks;keep track of minimum value and index location for that previous macroblock;其中块匹配操作要求for each line of l to m{for each macroblock starting at column of l to 4{generate correct data for this previous [line]from data held in registers;evaluate data[line]+=sum of absolute diffences (current [line],previous[line]);}}因此对于这个实施例,相对于当前宏块估算在搜索窗口中每个像素位置的先前宏块。如上所指出的那样,这个实施例每个循环估算四个相邻的先前宏块。用存储器对齐的加载把像素数据从存储器中加载到寄存器中。通过右移位合并操作的使用,能够操作这个像素数据,以形成适合于相邻宏块的移位了的数据段的不同组合。例如,在第一个先前宏块的第一行上的第一、第二、第三和第四个像素能够分别在存储器地址0、1、2和3处开始。对于第二个先前宏块中第一行的第一个像素,该像素从存储器地址1开始。因此,一个在寄存器数据上的右移位合并操作,能够通过重新使用为第一个先前宏块早已从存储器中加载的数据,产生用于第二个先前宏块的必要像素行数据,导致时间和资源的节省。相似的移位合并操作能够为象第三、第四和诸如此类的其它相邻的先前宏块产生行数据。
因此,用于一个实施例中的运动估计算法的块匹配过程能够以伪代码描述为block match for four adjacent previous macroblocksfor each line of l to m {load pixel data for one line of current macroblock;aligned memory loads of two consecutive chunks of pixel data for one line ofsearch window from memory to registers;generate proper pixel data lines for each of the four adjacent previousmacroblocks from loaded data through shift right merge operations;calculate sum of absolute differences between a line from a previousmacroblock and corresponding line from current macroblock for each of four adjacentprevious macroblocks;accumulate four individual sum of absolute differences values for each of fouradjacent previous macroblocks;这个过程在下面被进一步描述。虽然这些示例依据对一个搜索窗口的四个相邻宏块的操作进行描述,本发明的替换实施例不局限于此。然而,本发明的实施例不局限于或者限于对相邻宏块的操作。被一起处理的多个参考宏块也不必要必须单个像素距离地变化。对于一个实施例,任何具有一个位于在一个专门像素位置周围的16乘16窗口内的像素的参考宏块能够被一起处理。取决于硬件资源诸如可用数据寄存器和执行单元的数量,其它实施例能够对或多或少数目的宏块执行块匹配和绝对差值和的计算。例如,另一个实施例具有至少8个压缩数据寄存器,这至少8个压缩数据寄存器用于保持从对两个8数据段宽数据块执行右移位合并操作所产生的像素数据的4种不同组合,该实施例能够用简单的两个对齐的8数据段宽存储器加载对4个相邻的先前宏块进行操作。8个压缩数据寄存器中的4个用于计算开销保持来自先前帧的第一个8数据段、先前帧中的下一个8数据段、用于当前帧的8数据段、以及来自右移位合并操作的8数据段。其它四个压缩数据寄存器用于为四个宏块中每一个的绝对差(SAD)值的和累计总数。宏模块仍然可以添加更多的压缩数据寄存器以便进行SAD计算和累加,以增加被一起处理的参考宏模块的数目。因此,如果有四个额外的压缩数据寄存器是可用的,则还能够处理四个额外的先前宏块。在一个实施例中,可以用来保持绝对差值的积累和的压缩数据寄存器的数目能够限制有多少宏块能够被一次处理。
此外,在某些处理器体系结构中,存储器存取具有专门的粒度而且与某些边界对齐。例如,一个处理器能够基于16或者32个字节块进行存储器存取。在那种情况下,存取不在16或者32字节边界对齐的数据,可能需要一个不对齐的存储器存取,其在执行时间和资源方面是昂贵的。甚至更坏的是,一个数据的期望部分可能穿过一个边界而且重叠多个存储块。为了存取位于两条单独高速缓存线上的数据而将要求不对齐加载的高速缓存线分拆,可能是昂贵的。穿过一个存储器页面边界的数据线甚至是更坏的。例如,如果利用如下的过程,该过程使用8字节存储块和如下宏块进行操作,所述宏块具有8个像素,每个像素都具有一个字节的数据,则对于那个宏块线而言,一个对齐的存储器加载就足够了。但是对于下一个相邻宏块,其距离前一个宏块为一个像素列,则那个像素线需要的数据将覆盖来自第一个宏块的存储块中的7个数据字节,而且为下一个存储块中的1个数据字节而穿过一个存储器边界。本发明中的实施例使用右移位合并操作来有效地处理数据。在一个实施例中,在对齐的存储器边界处加载两个连续的存储块,并且保持在寄存器中用于多次使用。右移位合并操作能够使用这些存储块,并且移位在它们中的数据段必要的距离来获得正确的数据线。所以利用这个示例,一个右移位合并指令能够使用两个早已加载的存储块,并且从第二个块中移出一个数据字节,以及从第一块移位一个数据字节到第二块中,来产生用于第二个宏块第一线的数据,而不用必须执行一个不对齐的加载。运动估计的实施例还能够基于如何实现该算法来打断相关性链。例如,通过修改计算的次序,能够删除或者变换数据/指令的相关性,以便如图15中的处理器1000所述,某些计算和指令能够被无次序地执行。利用新一代的处理器体系结构,因为提高了的执行等待时间和可用计算资源,性能改善甚至能够变得更大。通过使用右移位合并指令的一个实施例,能够避免块匹配序列中的某些相关性。例如,能够并行执行多个绝对差值求和操作和/或累加操作。
图22A说明了当前宏块贯穿当前帧1701的前进。对于这个实施例,每个当前宏块1710被分成16行和16列,而且因此包含256个单独的像素。对于这个实施例,在每个宏块1710中的像素被一次一行1711地处理。在当前块中的全部十六行都已经相对于在一个搜索窗口中的期望宏块被处理了时,处理下一个当前宏块。这个实施例的宏块以宏块大小为步长、在水平方向1720中从当前帧1701的左边到右边进行处理。换句话说,当前宏块在这个实施例中没有重叠,而且这样排列当前宏块,以致于每个宏块都紧挨着下一个宏块。例如,第一个宏块能够从像素列1扩展到像素列16。第二个宏块将从列17扩展到列32,诸如此类。在宏块行的末端,该处理返回1722到左边沿并且下降一个宏块高度,在这示例中是十六行。降低一个宏块大小的宏块,然后从左至右被水平地处理1724,直到用于整个帧1701的试图匹配都完成了为止。
图22B说明了宏块横穿一个先前(参考)帧的搜索窗口1751的前进。取决于特定的实现,搜索窗口1751能够集中于某个区域,而且因此小于整个先前帧。在另一个实施例中,搜索窗口能够完全和先前帧重叠。类似于当前块,每个先前的宏块1760、1765、1770、1775都被分成16行16列,在每个宏块中总共有256像素。对于本发明的这个实施例,在搜索一个匹配中,搜索窗口1751中的四个先前宏块1760、1765、1770、1775相对于单个当前块进行并行处理。不同于一个当前帧中的当前宏块,如这个示例所示,在一个搜索窗口1751中的先前宏块1760、1765、1770、1775能够重叠而且确实重叠了。在此,每个先前宏块被移位一个像素列。因此,在BLK 1第一行最左边的像素是像素1761,对于BLK 2它是像素1766,对于BLK 3它是像素1771,而且对于BLK 4是像素1776。在一个运动估计算法期间,一个先前宏块1760、1765、1770、1775中的每一行相对于一个当前块中的相应行进行比较。例如,BLK 11760、BLK 2 1765、BLK3 1770和BLK 4 1775中的行1每个都用一个当前块行1进行处理。
用于四个重叠、相邻宏块的逐行比较继续,直到该宏块的全部16行都被执行了为止。这个实施例中的算法移位四个像素列,以对下一个四个宏块进行操作。因此对于这个示例,用于下一个四个宏块的最左边的第一个像素列将分别是像素1796、像素1797、像素1798和像素1799。对于这个实施例,先前宏块的处理继续向右1780贯穿搜索窗口1751,折回1782向下一个像素行,以在搜索窗口1751的最左边像素重新开始,直到该搜索窗口被完成了为止。尽管这个实施例中的一个当前帧的当前宏块没有重叠,而且下一个独立宏块为一个宏块高度或者宽度,但是一个先前或者参考帧的先前宏块确实重叠,而且下一个宏块递增了单个像素行或列。虽然这个示例中的四个参考宏块1760、1765、1770、1775是相邻的,而且相差单个像素列,但是在搜索窗口1751中,在一个选定像素位置周围覆盖一个指定区域的任何宏块,能够和在那个像素位置处的宏块一起被处理。例如,在像素1796处的宏块1760正被处理。任何在像素1796周围16×16窗口内的宏块都能够和宏块1760一起被处理。这个示例中的16×16窗口是由于一个宏块的尺寸和行的线宽。在这种情况下,一行或者数据线具有16个数据单元。因为这个用于一个运动估计算法的本实施例的块匹配函数,能够加载两条16个数据单元的数据线,并且执行右移位合并,以产生具有这两条数据线的移位/合并版本的不同的数据线,所以其它如下宏块将能够至少部分地重用那个加载的数据,其中所述宏块与16×16窗口相重叠,将为这个宏块加载所述窗口的数据。因此任何和宏块1760重叠的宏块,诸如宏块1765、1765、1770、1775,或者一个起始于宏块1760的右下像素位置的宏块,能够和宏块1760一起被处理。在重叠数量上的差异影响能够从先前加载的数据中重用的数据数量。
利用按照本发明的运动估计实施例,宏块分析包含以逐行为基础在先前(参考)宏块和当前宏块之间的进行比较,以获得在两个宏块之间绝对差值的和。绝对差值的和能够指示宏块的不同程度以及存在的匹配的接近程度。用于一个实施例的每个先前宏块都能够由如下值加以表示,该值是通过累加该宏块中的全部十六行的绝对差值的和而获得的。对于正被分析的当前宏块,保持一个最匹配宏块的记号。例如,跟踪绝对差值的最小累加和以及用于相应先前宏块的位置索引。随着运动估计贯穿搜索窗口前进,把每个先前宏块的累加和与最小值进行比较。如果更近的先前宏块具有一个比跟踪的最小值要小的累加差值,因此指示了一个比现有最匹配更接近的匹配,则用于那个最近先前宏块的累加差值和索引信息变为新的最小差值和索引。当在一个实施例中已经处理了对应一个搜索窗口中的所有像素的可用宏块时,具有最小差值的被索引宏块能够用来帮助获得一残留画面,以便对那个当前帧进行压缩。
图22C说明了并行处理对应一个给定搜索窗口的四个参考宏块1810、1815、1820、1825与用于本发明一个实施例的当前块1840。对于这个示例,对应搜索窗口中的像素的数据被排序为“A、B、C、D、E、F、G、H、I、J、K、L、M、N、O、P”1860,其中“A”位于数据集之中的最低地址位置(0)而且“P”位于最高地址位置(15)。这个像素集1860包含两部分1681、1682,每个都具有八个(m)数据段。如上面所述,右移合并操作的使用允许本发明的实施例操作具有两个数据段1618、1682的操作操,而且为不同的先前宏块1810、1815、1820、1825产生正确对齐的行数据1830。每个宏块,先前的1810、1815、1820、1825和当前的1840,都具有一个m行m列的大小。为了讨论的目的以及为了保持事情简单,在这个示例中m等于八。替换的实施例能够具有不同大小的宏块,例如其中m等于4、16、32、64、128、256等等。
在这个示例中,用当前块1840中的第一行,把运动估计算法应用于这四个先前块1810、1815、1820、1825的第一行。对于一个实施例,用两个对齐的存储器加载操作,为两个宏块宽度(2m),从存储器中加载包含两个数据段1861、1862的像素数据以及把它们保持在临时寄存器中。对这两个数据段1861、1862的右移位合并操作允许产生行数据1830的九个可能的组合,而不用多次的存储器存取。此外,能够避免在执行时间和资源方面昂贵的不对齐的存储器加载。在这个示例中,两个数据段1861、1862和字节边界对齐。不以字节边界上的地址开始的存储器加载,诸如从数据段B、D或者D中的存储器加载,典型地会要求非对齐的存储器加载操作。对应每一块的行数据1830如下所述,其中最左边的数据段是最低的地址。在块1 1810中,行1 1811包含“A、B、C、D、E、F、G、H”。因为在行1 1811中的数据与第一个数据段1861相同,所以不需要移位。但是块2 1815中的行I 1816包含“B、C、D、E、F、G、H、I”。因为先前的块1 1810和块2 1815水平相隔一个像素,块2 1815从像素数据B开始,而块1 1810从像素数据A开始,而且第二个像素数据是B。因此用一个移位计数将两个数据段1861、1862右移位合并将产生块2中的行1数据。
类似地,块3 1820再向右一个像素,而且块3 1820中的行1 1821从像素数据C开始,包含“C、D、E、F、G、H、I、J”。利用两个移位计数对两个数据段1861、1863的操作数进行右移位合并,将产生块3中的行1数据。块4 1825中的行1 1826包含“D、E、F、G、H、I、J、K”。这个数据能够通过对相同数据操作数进行四个计数的右移位合并操作而产生。因此对暂时保存的、先前加载的数据段1861、1862进行右移位合并操作的使用,允许在为其它相邻宏块产生行数据的过程种重用数据,以及通过减少存储器加载的数目,尤其是非对齐存储器加载的数目来节省时间/资源。要注意到对于针对先前帧的参考宏块所进行的所有绝对差的和的比较而言,对应当前块的像素数据都是相同的。因为当前块1840可以和存储器边界对齐,所以单个对齐的存储器加载对于当前块1840中的行数据1842是可能的。
继续进行这一运动估计实施例的示例,先前宏块1810、1815、1820、1825中的每一行都和当前块1840的相应行进行比较,以获得绝对差值的和。因此,在绝对差值求和(SAD)操作1850中,块1 1810中的行1 1811和当前块1840中的行1 1841进行比较。同样的操作发生在其它三个正被操作的块。虽然看起来四个宏块1810、1815、1820、1825被同时或者并行操作,但是本发明的其它实施例不局限于这样。因此,对这四个宏块的操作能够在时间上连续地发生,但是是作为四个的序列。例如,按块1 1810、块2 1815、块3 1820和块4 1825的次序,每个参考块的行1都经受使用当前块1840中的那行所进行的SAD操作1850。然后,每个参考块的行2经受一个SAD操作1850,诸如此类。对每个SAD操作1850之后,在一个临时寄存器中累加绝对差值和的运行总计。因此,在这个示例实施例,四个寄存器累加绝对差值的和,直到那个宏块中的所有m行都被执行了为止。每个块的累加值和作为一个最佳宏块匹配搜索的一部分的现有最小差值进行比较。虽然这个示例描述了四个相邻的、重叠的先前宏块的处理,但是如果数据线是相关的话,那么和在搜索窗口中的第一块BLK 1810重叠的其它宏块也能够和用于BLK 1810的数据加载一起加以处理。因此,一个在正被处理的当前宏块周围的16×16窗口内的宏块也能够被处理。
图22D说明了绝对差值和(SAD)操作1940以及那些SAD值求和。在此,参考宏块BLOCK 1 1900从行A到行P的每一行和它的用于当前宏块1920的对应物进行SAD操作1940。SAD操作1940比较用于表示在每一行中的像素的数据,并且计算用于表示在两行之间的绝对差的值,在所述的两行中,一行来自于前一宏块1900,一行来自于当前的宏块1920。把来自所有行A到P的这些SAD操作1940的值求和在一起,作为一个块总和1942。这个块总和1942提供了用于整个先前宏块1900和当前宏块1920的绝对差的总和的累加值。基于这个块总和1942,运动估计算法能够确定先前宏块1900相对于这个当前宏块1920的匹配的相似或接近程度。
尽管这个实施例每次对四个参考宏块进行操作,但是替换的实施例能够根据加载的像素数据的数量和可利用的寄存器的数目对不同数目的宏块进行操作。此外,在运动估计处理期间,能够使用各种寄存器。例如,扩充寄存器,诸如MMX技术的mm寄存器、或SSE2技术的XMM寄存器,能够被用来保持诸如像素数据这样的压缩数据。在一个实施例中,如果每一个像素有8位数据,则64位宽的MMX寄存器能够保持8个字节、或8个单独的像素。在另一个实施例中,如果每一个像素有8位数据,则128位宽的MMX寄存器能够保持16个字节、或16个单独的像素。类似地,能够保持压缩数据的其它大小诸如32/128/256/512位宽的寄存器,也能够被用于本发明的实施例。另一方面,不需要压缩数据寄存器的计算,诸如常规整数运算,能够使用整数寄存器和整数硬件。
图23A是说明了一种预测和估计运动的方法的一个实施例的流程图。在块2002,跟踪的最小(min)值和用于那个最小值的索引位置被初始化。就这个实施例来说,跟踪的最小值和索引指示了搜索窗口中被处理的先前(参考)宏块中的哪一个宏会与当前宏块最匹配。在块2004,检查是否已经完成了当前帧中的所有希望的宏块。如果是这样的话,则完成了这一运动估计算法的部分。如果所有希望的当前宏块还没有被完全处理,则在块2006,为当前帧选择一个未被处理的当前宏块。在块2008,从先前(参考)帧的搜索窗口中的第一个像素位置继续进行块匹配。在块2010,检查是否已经完成了该搜索窗口。通过第一遍,搜索窗口都没有被处理。但是通过后续的一遍,如果整个搜索窗口都已经被处理了,则流程返回到块2004,以确定其它的当前宏块是否可用。
如果整个搜索窗口都没有被分析,则在块2012进行检查,以确定沿着这个X轴行的所有像素是否都已经被处理了。如果这一行已经被完成了,则行计数增加到下一行,并且流程返回到块2010,以查看在搜索窗口中是否可得到在这一新行上的更多宏块。但是如果对应该行上的像素的所有可得到的宏块还被被完全处理,则在块2014,检查这个像素列和行的宏块是否已经被处理了。如果该宏块已经被处理了,则增加列计数值,并且流程返回到块2012,以查看对应这个新列的像素的宏块是否已经被处理了。但是,如果对应这一列和行的像素的宏块还没有被处理,则在这个参考宏块和当前宏块之间执行块匹配。
用沿着X和Y轴增加的像素的行和列位置描述了在这个例子中的流程,并且为了简单起见每次增加一个像素。然而,就本发明的一个实施例来说,每一遍处理四个在前的宏块。因此,每一遍沿着Y轴的列计数值将会增加4列。其它实施例还能够每次处理8、16、32等的宏块,并且因此列计数值相应的增加8、16、32等列,以便为算法的后续一遍指向正确的像素位置。尽管这个实施例中的块匹配处理使用了以有序方式沿着X和Y轴的搜索,但是另一个实施例中的块匹配能够使用类似于使用了不同模式的菱形搜索、或log搜索的另一种算法。
图23B是进一步描述了图23A中的块匹配的流程图。在块2222,加载对应参考宏块和当前宏块的数据。就一个实施例来说,因为两个压缩数据块包括对应许多连续像素的数据,所以参考宏块数据被加载。在一个实施例中,每个压缩数据块包含8个数据单元。在块2224,根据需要对数据块执行右移位合并操作,以获得正确的数据块。对于4个在前宏块一起被处理的实施例来说,能够为对应于位于每个宏块中的行的数据块生成右移位合并操作。对应一个像素位置以上的每个相邻宏块的数据块被移动一个像素位置以上,其中对于搜索窗口中的每一个像素行,宏块看来像是一次一个像素地滑动通过搜索窗口。向被一起处理的4个在前的宏块中的每一个应用块2226、2228、2230和2232的操作。就一个实施例来说,在下一个操作发生之前,所有4个宏块进行相同的操作。就另一个实施例来说,在处理具有包含被适当移位的数据段的数据块的下一个在前宏块之前,单个在前的宏块可以完成所有操作。
在块2226,为这些宏块中的每一行计算在前宏块和当前宏块的对应行之间的绝对差的总和。在块2228,把用于在前宏块中的所有行的绝对差的总和累加在一起。在块2230,把用于在前宏块的累加的差值与当前的最小值进行比较。如果在块2232,用于这个在前宏块的差值小于当前的最小值,则用这个新的差值更新最小值。此外,还更新索引以反映这个在前宏块的位置,以指示这个在前的宏块是迄今为止最匹配的。但是如果在块2232,该新的差值大于当前的最小值,则这个在前的块与迄今为止已经匹配的相比,并不是更紧密的匹配。
依据本发明的运动估计算法的实施例还能够用当前的硬件资源改善处理器和系统性能。但是,随着技术继续发展,本发明中的实施例在同更大量的硬件资源和更快的更高效的逻辑电路相结合时能够对改善性能有更加深远的影响。因此,运动估计的一个有效的实施例能够跨越处理器阶段具有不同的和更大的影响。仅仅简单地在现代的处理器体系结构中增加更多的资源不能保证更好的性能改善。此外,通过维护像运动估计和右移位合并指令(PSRMRG)的一个实施例那样的应用的效率,更大的性能改善是可能的。
尽管为了简化讨论以上的例子通常是在64位宽的硬件/寄存器/操作数的环境中描述的,但是其它实施例使用了128位宽的硬件/寄存器/操作数来执行寄存器合并操作、右移位合并操作和运动估计计算。此外,本发明中的实施例不局限于特殊的硬件或诸如MMX/SSE/SSE2技术之类的技术类型,并且能够和其它SIMD实现及其它图形数据操作技术一起使用。尽管以上就图20-23B描述的运动估计和块匹配实施例是在8个像素宽或8个数据单元宽的行和8行乘8列大小的宏块的环境中描述的,但是其它实施例包含其它尺寸。例如,行可以是16个像素宽或16个数据单元宽,而且宏块是16行乘16列。
在上述的说明书中,结合其中的具体示范性实施例已经对本发明进行了描述。然而,显然可以对它进行各种修改和变化,而没有背离由附加利要求书所阐述的本发明的更广的精神和范围。因此,说明书和附图只是说明性的,而没有限制意义。
权利要求
1.一种方法,包含接收一个移位计数M;把具有第一组L个数据单元的第一操作数左移位“L-M”个数据单元;把具有第二组L个数据单元的第二操作数右移位M个数据单元;把所述移位了的第一组和所述移位了的第二组进行合并以生成一个具有L个数据单元的结果。
2.如权利要求1所述的方法,其特征在于所述第一操作数的所述移位生成所述移位了的第一组,所述移位了的第一组包含M个数据单元,且与所述第一操作数的左边对齐。
3.如权利要求2所述的方法,其特征在于所述左移位从所述第一操作数中移去了所述的“L-M”个数据单元,并且在所述第一操作数的右边插入零,以代替由移出的所述“L-M”个数据单元空出的空间。
4.如权利要求3所述的方法,其特征在于所述第二操作数的所述移位生成所述移位了的第二组,所述移位了的第二组包含“L-M”个数据单元,且与所述第二操作数的右边对齐。
5.如权利要求4所述的方法,其特征在于所述右移位从所述第二操作数中移去了所述M个数据单元,并且在所述第二操作数的左边插入零,以代替由所述移出的M个数据单元空出的空间。
6.如权利要求5所述的方法,其特征在于所述合并包含对所述移位了的第一组和所述移位了的第二组执行逻辑或操作。
7.如权利要求6所述的方法,其特征在于所述结果由所述移位了的第一组的所述M个数据单元以及所述移位了的第二组的所述“L-M”个数据单元组成,并且其中所述移位了的第一组的所述M个数据单元与所述移位了的第二组的所述“L-M”个数据单元不重叠。
8.如权利要求7所述的方法,其特征在于所述第一操作数、所述第二操作数、和所述结果是压缩数据操作数。
9.如权利要求8所述的方法,其特征在于每个数据单元是数据的字节。
10.如权利要求9所述的方法,其特征在于L等于8。
11.如权利要求10所述的方法,其特征在于M是从0到15的值。
12.如权利要求9所述的方法,其特征在于L等于16。
13.如权利要求12所述的方法,其特征在于M是从0到31的值。
14.一种方法,包含接收右移位合并指令、计数、包含第一组数据单元的第一数据操作数和包含第二组数据单元的第二数据操作数;左移位所述第一组数据单元,直到保留在所述第一数据操作数中的数据单元的数目等于所述计数为止;右移位所述第二组数据单元,以从所述第二数据操作数中移去等于所述计数值的数目的数据单元;以及将所述移位了的第一组数据单元和所述移位了的第二组数据单元合并在一起,以获得一个包含所述第一数据操作数和所述第二数据操作数的数据单元的结果。
15.如权利要求14所述的方法,其特征在于所述第一组数据单元的所述左移位包含从所述第一数据操作数的左边移去数据单元,并且在所述第一数据操作数的右边插入零以填充由所述移去的数据单元空出的位置。
16.如权利要求15所述的方法,其特征在于所述第二组数据单元的所述右移位包含从所述第二数据操作数的右边移去数据单元,并且在所述第二操作数的左边插入零以填充由所述移去的数据单元空出的位置。
17.如权利要求16所述的方法,其特征在于所述合并包含把所述移位了的第一组数据单元和所述移位了的第二组数据单元一起逻辑或。
18.如权利要求17所述的方法,其特征在于所述第一操作数和所述第二操作数加载有一连续数据块的相邻存储单元的数据,而且所述第一组数据单元和所述第二组数据单元不重叠。
19.一种方法,包含接收一条移位合并指令和一个移位计数M;把具有第一组L个数据单元的第一操作数与具有第二组L个数据单元的第二操作数串接起来,以形成一个2L长的数据单元块;把所述块右移位M个位置,其中最右边的M个数据单元被丢弃了;以及从所述移位了的块中输出最右边的L个数据单元,作为所述移位合并指令的结果。
20.如权利要求19所述的方法,其特征在于所述右移位进一步包含在所述块的最左边插入零以填充由所述M个数据单元空出的空间。
21.如权利要求20所述的方法,其特征在于所述第一操作数和所述第二操作数是压缩数据操作数。
22.如权利要求21所述的方法,其特征在于每个数据单元包含数据的字节。
23.如权利要求22所述的方法,其特征在于L等于8。
24.如权利要求23所述的方法,其特征在于M是从0到15的值。
25.如权利要求24所述的方法,其特征在于所述块被保持在具有2L个数据单元的可用空间的暂时压缩数据寄存器中。
26.一种装置,包含一译码器,用于译码右移位合并指令;一调度器,用于分派所述指令,以便用第一操作数、第二操作数和移位计数M加以执行,其中第一操作数包含第一组L个数据单元,第二操作数包含第二组L个数据单元;以及一执行单元,用于执行所述指令,所述指令导致所述执行单元进行如下操作把所述第一操作数左移位“L-M”个数据单元;把所述第二操作数右移位M个数据单元;把所述移位了的第一操作数和所述移位了的第二操作数进行合并,以生成一个具有L个数据单元的结果。
27.如权利要求26所述的装置,其特征在于所述右移位合并指令包含一条微指令(uop)。
28.如权利要求27所述的装置,其特征在于所述第一操作数的所述左移位生成移位了的第一组数据,所述移位了的第一组数据包含M个数据单元,且与所述第一操作数的最左边对齐。
29.如权利要求28所述的装置,其特征在于所述左移位从所述第一操作数中移去“L-M”个数据单元,并且在所述第一操作数的右边插入零,以代替由所述移出的“L-M”个数据单元空出的空间。
30.如权利要求29所述的装置,其特征在于所述第二操作数的所述右移位生成所述移位了的第二组,所述移位了的第二组包含“L-M”个数据单元,且与所述第二操作数的右边对齐。
31.如权利要求30所述的装置,其特征在于所述右移位从所述第二操作数中移去所述M个数据单元,并且在所述第二操作数的左边插入零,以代替由所述移出的M个数据单元空出的空间。
32.如权利要求31所述的装置,其特征在于所述第一操作数、所述第二操作数和所述结果是压缩数据寄存器。
33.如权利要求32所述的装置,其特征在于每个数据单元是数据的字节。
34.如权利要求33所述的装置,其特征在于L等于8。
35.如权利要求34所述的装置,其特征在于M是从0到15的值。
36.如权利要求35所述的装置,其特征在于所述装置包含64位的体系结构。
37.如权利要求33所述的装置,其特征在于L等于16,M是从0到31的值,并且所述装置包含128位的体系结构。
38.一种系统,包含一存储器,用于存储数据和指令;一处理器,通过总线与所述存储器相耦合,所述处理器可操作用于执行右移位合并操作,所述处理器包含一总线单元,用于从所述存储器接收指令;一译码器,用于译码指令,以便对具有第一组K个数据单元的第一操作数和具有第二组L个数据单元的第二操作数执行移位计数M的右移位合并;一调度器,用于分派所述译码了的指令以便执行;以及一执行单元,用于执行所述译码了的指令,所述译码了的指令导致所述执行单元进行如下操作把所述第一操作数左移位“K-M”个数据单元;把所述第二操作数右移位M个数据单元;把所述移位了的第一操作数和所述移位了的第二操作数进行合并以生成一个具有K个数据单元的结果。
39.如权利要求38所述的系统,其特征在于K等于L,并且K和L都为8。
40.如权利要求38所述的系统,其特征在于所述左移位从所述第一操作数中移去“K-M”个数据单元,并且在所述第一操作数的右边插入零,以代替由所述移出的“K-M”个数据单元空出的空间;和所述右移位从所述第二操作数中移去所述M个数据单元,并且在所述第二操作数的左边插入零,以代替由所述移出的M个数据单元空出的空间。
41.如权利要求38所述的系统,其特征在于每个数据单元包含数据的字节,并且所述第一操作数和所述第二操作数是压缩数据操作数。
42.一种在其上包含了计算机程序的机器可读介质,所述计算机程序可由机器执行以实现包含以下步骤的方法接收一个移位计数M;把具有第一组L个数据单元的第一操作数左移“L-M”个数据单元;把具有第二组L个数据单元的第二操作数右移M个数据单元;把所述移位了的第一组和所述移位了的第二组进行合并以生成一个具有L个数据单元的结果。
43.如权利要求42所述的机器可读介质,其特征在于所述左移位从所述第一操作数中移去所述的“L-M”个数据单元,并且在所述第一操作数的右边插入零,以代替由移出的所述“L-M”个数据单元空出的空间;所述右移位从所述第二操作数中移去所述M个数据单元,并且在所述第二操作数的左边插入零,以代替由所述移出的M个数据单元空出的空间;以及所述合并包含对所述移位了的第一组和所述移位了的第二组执行逻辑或操作。
44.如权利要求43所述的方法,其特征在于所述第一操作数、所述第二操作数和所述结果是压缩数据操作数。
45.一种方法,包含接收一个移位计数M;把具有第一组L个数据单元的第一操作数移位“L-M”个数据单元;把具有第二组L个数据单元的第二操作数移位M个数据单元;把所述移位了的第一组和所述移位了的第二组进行合并以生成一个具有L个数据单元的结果。
46.如权利要求45所述的方法,其特征在于所述第一操作数被右移位“L-M”个数据单元。
47.如权利要求46所述的方法,其特征在于所述第一操作数的所述右移位生成所述移位了的第一组,所述移位了的第一组包含M个数据单元,且与所述第一操作数的右边对齐,并且所述右移位从所述第一操作数中移去所述“L-M”个数据单元,并且在所述第一操作数的左边插入零。
48.如权利要求45所述的方法,其特征在于所述第二操作数被左移位M个数据单元。
49.如权利要求48所述的方法,其特征在于所述第二操作数的所述左移位生成所述移位了的第二组,所述移位了的第二组包含“L-M”个数据单元,且与所述第二操作数的左边对齐,并且所述左移位从所述第二操作数中移去所述M个数据单元,并且在所述第二操作数的右边插入零。
50.如权利要求45所述的方法,其特征在于所述结果包含所述移位了的第一组的M个数据单元以及所述移位了的第二组的“L-M”个数据单元,并且所述移位了的第一组的所述M个数据单元与所述移位了的第二组的所述“L-M”个数据单元不重叠。
51.如权利要求50所述的方法,其特征在于所述第一操作数、所述第二操作数和所述结果每个都是压缩数据操作数。
52.如权利要求51所述的方法,其特征在于每个数据单元包含数据的字节,L等于8,而且M是从0到15的值。
53.一种方法,包含接收移位合并指令、计数、包含第一组数据单元的第一数据操作数和包含第二组数据单元的第二数据操作数;移位所述第一组数据单元,直到保留在所述第一数据操作数中的数据单元的数目等于所述计数为止;移位所述第二组数据单元,以从所述第二数据操作数中移去等于所述计数值的数目的数据单元;以及将所述移位了的第一组数据单元和所述移位了的第二组数据单元合并在一起,以获得一个包含所述第一数据操作数和所述第二数据操作数的数据单元的结果。
54.如权利要求53所述的方法,其特征在于所述第一组数据单元被右移位,其中从所述第一数据操作数的右边移出数据单元,而且在所述第一数据操作数的左边插入零。
55.如权利要求54所述的方法,其特征在于所述第二组数据单元被左移位,其中从所述第二数据操作数的左边移出数据单元,而且在所述第二操作数的右边插入零。
56.一种方法,包含接收一条移位合并指令和一个移位计数M;把具有第一组L个数据单元的第一操作数与具有第二组L个数据单元的第二操作数串接起来,以形成一个2L长的数据单元块;把所述块移位M个位置,其中M个数据单元被丢弃了;以及从所述移位了的块中输出一组L个连续数据单元,作为所述移位合并指令的结果。
57.如权利要求56所述的方法,其特征在于所述移位进一步包含在所述块的、与丢弃所述M个数据单元相对的一边插入零。
58.一种装置,包含一执行单元,用于执行包含第一操作数、第二操作数和移位计数M的移位合并指令,其中第一操作数包含第一组L个数据单元,第二操作数包含第二组L个数据单元,所述指令使所述执行单元进行如下操作把所述第一操作数移位“L-M”个数据单元;把所述第二操作数移位M个数据单元;把所述移位了的第一操作数和所述移位了的第二操作数进行合并以生成一个具有L个数据单元的结果。
59.如权利要求58所述的装置,其特征在于所述右移位合并指令包含单条微指令(uop)。
60.如权利要求58所述的装置,其特征在于所述第一操作数被左移位“L-M”个数据单元,所述第二操作数被右移位M个数据单元。
61.如权利要求60所述的装置,其特征在于所述第一操作数的所述左移位生成一个移位了的第一组数据,所述移位了的第一组数据包含M个数据单元,且与所述第一操作数的左边对齐,并且所述左移位从所述第一操作数中移去“L-M”个数据单元,并且在所述第一操作数的右边插入零;以及所述第二操作数的所述右移位生成所述移位了的第二组数据,所述移位了的第二组数据包含“L-M”个数据单元,且与所述第二操作数的右边对齐,并且所述右移位从所述第二操作数中移去M个数据单元,并且在所述第二操作数的左边插入零。
62.如权利要求58所述的装置,其特征在于所述第一操作数被右移位“L-M”个数据单元,所述第二操作数被左移位M个数据单元。
63.如权利要求62所述的装置,其特征在于所述第一操作数的所述右移位生成一个移位了的第一组数据,所述移位了的第一组数据包含M个数据单元,且与所述第一操作数的右边对齐,并且所述右移位从所述第一操作数中移去“L-M”个数据单元,并且在所述第一操作数的左边插入零;以及所述第二操作数的所述左移位生成所述移位了的第二组数据,所述移位了的第二组数据与包含“L-M”个数据单元,且与所述第二操作数的左边对齐,并且所述左移位从所述第二操作数中移去M个数据单元,并且在所述第二操作数的右边插入零。
64.一种包含机器可读介质的物品,其中该机器可读介质存储了表示一个集成电路的数据,该集成电路包含一执行单元,用于执行包含第一操作数、第二操作数和移位计数M的移位合并指令,其中第一操作数包含第一组L个数据单元,第二操作数包含第二组L个数据单元,所述指令使所述执行单元进行如下操作把所述第一操作数移位“L-M”个数据单元;把所述第二操作数移位M个数据单元;把所述移位了的第一操作数和所述移位了的第二操作数进行合并以生成一个具有L个数据单元的结果。
65.如权利要求64所述的物品,其特征在于所述右移位合并指令包含单条微指令。
66.一种包含机器可读介质的物品,其中该机器可读介质存储了表示一个预定功能的数据,该功能包含接收一个移位计数M;把具有第一组L个数据单元的第一操作数移位“L-M”个数据单元;把具有第二组L个数据单元的第二操作数移位M个数据单元;把所述移位了的第一组和所述移位了的第二组进行合并以生成一个具有L个数据单元的结果。
67.如权利要求66所述的物品,其特征在于由所述机器可读介质存储的所述数据表示一个集成电路设计,其在被制造好时响应于单条指令执行所述预定功能。
68.如权利要求67所述的物品,其特征在于所述第一操作数被左移位以生成所述移位了的第一组,所述移位了的第一组包含M个数据单元,且与所述第一操作数的左边对齐,并且所述左移位从所述第一操作数中移去所述“L-M”个数据单元,并且在所述第一操作数的右边插入零。
69.如权利要求68所述的物品,其特征在于所述第二操作数被右移位以生成所述移位了的第二组,所述移位了的第二组包含“L-M”个数据单元,且与所述第二操作数的右边对齐,并且所述右移位从所述第二操作数中移去所述M个数据单元,并且在所述第二操作数的左边插入零。
70.如权利要求67所述的物品,其特征在于所述第一操作数被右移位以生成所述移位了的第一组,所述移位了的第一组包含M个数据单元,且与所述第一操作数的右边对齐,并且所述右移位从所述第一操作数中移去所述“L-M”个数据单元,并且在所述第一操作数的左边插入零。
71.如权利要求70所述的物品,其特征在于所述第二操作数被左移位以生成所述移位了的第二组,所述移位了的第二组包含“L-M”个数据单元,且与所述第二操作数的左边对齐,并且所述左移位从所述第二操作数中移去所述M个数据单元,并且在所述第二操作数的右边插入零。
72.如权利要求66所述的物品,其特征在于由所述机器可读介质存储的所述数据表示一条计算机指令,如果该计算机指令机器执行的话,则导致所述机器执行所述预定功能。
全文摘要
一种用于数据的并行右移位合并的方法。一个实施例的方法包含接收一个移位计数M。把具有第一组L个数据单元的第一操作数左移位“L-M”个数据单元。把具有第二组L个数据单元的第二操作数右移位M个数据单元。把移位了的第一组和移位了的第二组进行合并以生成一个具有L个数据单元的结果。
文档编号G06F9/38GK1506807SQ20031012034
公开日2004年6月23日 申请日期2003年10月24日 优先权日2002年10月25日
发明者J·赛波特, W·W·马西, E·德贝斯, H·V·阮, J 赛波特, 此, 阮, 马西 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1