数据并行右移合并的方法与装置的制作方法

文档序号:6423997阅读:288来源:国知局
专利名称:数据并行右移合并的方法与装置的制作方法
技术领域
本发明一般地涉及微处理器及计算机系统领域。更具体地说,本发明涉及用于数据的并行右移合并的方法和装置。
背景技术
处理器技术在发展中,人们也正在创造更新的软件代码来运行在具有这些处理器的机器上。用户一般都期望并需要从他们的计算机获得更高的性能,而无论使用的软件的类型是什么。从处理器内实际执行的指令和操作的类型中可能会产生一个这样的问题。基于操作的复杂度和/或所需电路的类型,某些类型的操作需要更多的时间来完成。这提供了一个机会,可以优化某些复杂操作在处理器内执行的方式。
十多年来,多媒体应用一直在推动微处理器的发展。事实上,近年来的大多数计算进展都是由多媒体应用推动的。这些进展主要出现在消费领域内,尽管在企业领域内也目睹了许多重要的发展,以用于更具娱乐性的教育和通信。然而,未来的多媒体应用将渴求更高的计算需求。结果,明天的个人计算(PC)体验在视听效果上将更加丰富,并更易于使用,而且更重要的是,计算将与通信相融和。
因此,图像的显示以及音频与视频数据的回放对当前的计算设备来说已变成越来越流行的应用,在此将图像、音频与视频数据统称为内容。滤波与卷积运算已进入在内容数据例如图像、音频和视频数据上进行的最通常的运算之列。如本领域内的技术人员所公知的,滤波和关联计算是利用将数据与系数的乘积相加的乘法-累加运算来执行的。两个向量A和B的关联由和S的计算构成S[k]=1NΣi=0N-1a[i]·b[i+k],]]>等式(1)经常令k=0S
=1NΣi=0N-1a[i]·b[i]]]>等式(2)如果对向量V应用N抽头滤波器f,则如下计算和SS=Σi=0N-1f[i]·V[i]]]>等式(3)这些运算都是计算密集型的,但提供了高级别的数据并行度,可以通过使用各种数据存储设备例如单指令多数据(SIMD)寄存器的高效实现来利用这一并行度。
在大量图像与视频处理作业和通信中存在滤波运算的应用。动画专家组(MPEG)视频中的马赛克的衰减,噪音与音频的衰减,从象素值中解耦水印以改进水印检测,用于平滑、锐化、衰减噪音的关联、寻找图像或视频帧的边缘并缩放其尺寸、对视频帧进行超取样(up sampling)以用于子象素运动估计,提高音频信号质量,以及通信中的脉冲成形和均衡信号等都是滤波器的使用的示例。因此,对提供包括图像、音频和视频数据在内的内容的回放的计算设备来说,滤波和卷积运算是非常重要的。
不幸地是,当前的方法和指令都是针对于滤波的一般需求而不全面。事实上,许多体系结构不支持用于多种滤波长度和数据类型的高效滤波器计算的手段。另外,一般也不支持数据存储设备例如SIMD寄存器内的数据排序,以及在寄存器中加入相邻值以及用于寄存器之间的部分数据转移的能力。结果,当前的体系结构需要一些不必要的数据类型改变,这最小化了每条指令的操作数量,并大大增加了将数据排序以用于算术运算的时钟周期数。


在附图中通过例示而非限制性的方式说明了本发明,其中相似的标号表示类似的元件,并且图1示出了一个框图,图示了能够实现本发明一个实施例的计算机系统;图2示出了一个框图,图示了根据本发明另一个实施例的图1所示的处理器的实施例;图3图示了一个框图,图示了根据本发明另一个实施例的组合型(packed)数据类型;图4A图示了根据本发明一个实施例的寄存器内组合型字节表示;图4B图示了根据本发明一个实施例的寄存器内组合型字表示;图4C图示了根据本发明一个实施例的寄存器内组合型双字表示;图5示出了一个框图,图示了根据本发明实施例的字节洗牌指令的操作;图6示出了一个框图,图示了根据本发明实施例的字节乘法累加(multiply-accumulate)指令的操作;图7A-7C示出了多个框图,图示了根据本发明的另一个实施例,与图6所示的字节乘法累加指令相结合的图5的字节洗牌指令,以产生多个累加乘积对(summed-product pair);图8A-8D示出了多个框图,图示了根据本发明另一个实施例的相邻加(adjacent-add)指令;图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)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁或光卡、闪存、因特网上的传输等等。
相应地,所述计算机可读介质包括适用于以机器(例如计算机)可读形式来存储或传输电子指令或信息的任意类型的媒体/机器可读介质。而且,本发明也可作为计算机程序产品而被下载。照这样,所述程序可以从远程计算机(例如服务器)传输到请求计算机(例如客户机)。程序的传输可以是通过电、光、声或包含在载波或其他介质中的其他形式的数据信号而经由通信链路(例如调制解调器、网络连接等等)而完成的。
在现代处理器中,使用了多个不同的执行单元来处理并执行多种代码和指令。不是所用的指令都被创建成相同的,因为一些指令比较快地完成,而其他指令可能花费大量的时钟周期。指令的吞吐率越快,处理器的整体性能就越好。因此,使得尽可能多的指令尽可能快地执行将会是很有利的。然而,某些指令具有更高的复杂度,并且需要更多的执行时间和处理器资源。例如,浮点指令、载入/存储操作、数据移动等等。
随着在因特网和多媒体应用中使用越来越多的计算机系统,也引入了一些其他的处理器支持。例如,单指令多数据(SIMD)整数/浮点指令和SIMD流扩展(SSE)是可以减少执行特定程序作业所需要的指令总数的指令。这些指令可以通过并行地对多个数据元素进行操作而提高软件性能。结果,可以在大量应用中获得性能增益,包括视频、语音和图像/照片处理。在微处理及类似类型的逻辑电路中实现SIMD指令通常涉及多个问题。而且,SIMD操作的复杂度经常使得需要附加的电路系统,以正确地处理并操纵数据。
本发明的实施例提供了一种方式,将并行右移指令实现为一种利用了SIMD相关硬件的算法。对一个实施例,该算法基于下述思想将预期数量的数据段从一个操作数右移到第二操作数的最高有效位侧,同时将相同数量的数据段移出第二操作数的最低有效位侧。从理论上说,右移合并操作可被视为将两个数据块合并为一个块,并将所结合的块移位,以在预期位置处将数据段对齐,从而形成一种新模式的数据。这样,可以在处理器中实现根据本发明的右移合并算法的实施例,以高效地支持SIMD操作,而不会严重地损害整体性能。
计算体系结构图1示出了计算机系统100,可在其上实现本发明的一个实施例。计算机系统100包括用于传送信息的总线101,以及耦合到总线101用于处理信息的处理器109。计算机系统100还包括存储子系统104-107,其耦合到总线101,以存储信息和指令,用于处理器109。
处理器109包括执行单元130、寄存器文件200、高速缓存存储器160、译码器165和内部总线170。高速缓存存储器160耦合到执行单元130,并存储经常和/或最近使用的信息,以用于处理器109。寄存器文件200存储处理器109中的信息,并通过内部总线170而耦合到执行单元130。在本发明的一个实施例中,寄存器文件200包括多媒体寄存器例如SIMD寄存器,用于存储多媒体信息。在一个实施例中,每个多媒体寄存器都可存储多达128位的组合型数据。多媒体寄存器可以是专用多媒体寄存器,或者是用于存储多媒体信息及其他信息的寄存器。在一个实施例中,多媒体寄存器在执行多媒体操作时存储多媒体数据,而在执行浮点运算时则存储浮点数据。
执行单元130根据由处理器109接收的、包含在组合型指令集140中的指令而对组合型数据(packed data)进行操作。执行单元130也根据通用处理器中实现的指令而对标量数据进行操作。处理器109能够支持Pentium微处理器指令集和组合型指令集140。通过在标准微处理器指令集例如Pentium微处理器指令集中包含组合型指令集140,可容易地将组合型数据指令包含到现存软件(以前为标准微处理器指令集编写的软件)中去。根据在此描述的发明,也可使用其他标准指令集,例如PowerPCTM和AlphaTM处理器指令集。(Pentium是英特尔公司的注册商标,是PowerPCTM是IBM、苹果计算机公司和摩托罗拉公司的商标,AlphaTM是数字设备公司的商标。)在一个实施例中,组合型指令集140包括多个指令(下面将详细描述)用于移动数据(MOVD)操作143和数据洗牌操作(PSHUFD)145,用于在数据存储设备内组织数据;对无符号第一源寄存器和有符号第二源寄存器的组合型乘法与累加(PMADDUSBW运算147);组合型乘法累加运算(PMADDUUBW运算149),用于对无符号第一源寄存器和无符号第二源寄存器执行乘法和累加;用于有符号第一和第二源寄存器的组合型乘法累加(PMADDSSBW运算151);以及用于包含16位数据的有符号第一和第二源寄存器的标准乘法累加(PMADDWD运算153)。最后,该组合型指令集包括相邻加指令,用于相加相邻字节(PAADDNB运算155)、字(PAADDNWD运算157)以及双字(PAADDNDWD159)、双字值(PAADDWD 161)、2个字以获得16位的结果(PAADDNWW运算163)、2个四字以获得四字结果(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的详细示意图。可以使用多种处理技术例如BiCMOS、CMOS和NMOS中的任一种而在一个或多个衬底上实现处理器109。处理器109包括译码器202,用于对处理器109所使用的控制信号和数据进行译码。然后数据可通过内部总线205而存储在寄存器文件200中。为了清楚起见,实施例的所述寄存器不应当被限制为指称某种特定类型的电路。相反,实施例的寄存器只需要能够存储并提供数据,以及执行在此描述的功能。
取决于数据类型,数据可被存储在整数寄存器201、寄存器209、状态寄存器208或指令指针寄存器211中。在寄存器文件200中可包括其他寄存器,例如浮点寄存器。在一个实施例中,整数寄存器201存储32位整数数据。在一个实施例中,寄存器209包括8个多媒体寄存器,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。
数据与存储格式图3图示了三种组合型数据类型组合型字节221、组合型字222和组合型双字(dword)223。组合型字222长128位,包含16个组合型字节数据元素。一般地,数据元素是单个数据段,所述数据元素和其它相同长度的数据元素一起存储在单个寄存器(或存储器单元)中。在组合型数据序列中,存储在寄存器中的数据元素的数量等于128位除以数据元素的位长。
组合型字222长128位,包含8个组合型字数据元素。每个组合型字数据元素包含16位信息。组合型双字223长128位,包含4个组合型双字数据元素。每个组合型双字数据元素包含32位信息。组合型四字长128位,包含2个组合型四字数据元素。
图4A-4C图示了根据本发明一个实施例的寄存器内组合型数据存储表示。无符号组合型字节寄存器内表示310图示了无符号组合型字节201在多媒体寄存器209中的一个中的存储,如图4A所示。每个字节数据元素的信息按如下方式存储第7位到第0位用于第0字节,第15位到第8位用于第1字节,第23位到第16位用于第2字节,最后第120位到第127位用于第15字节。
这样,在寄存器中使用了所有可用的位。这一存储安排提高了处理器的存储效率。而且,访问了16个数据元素,现在可以同时对16个数据元素执行一个操作。有符号组合型字节寄存器内表示311图示了有符号组合型字节221的存储。注意,每个字节数据元素的第8位是符号指示符。
无符号组合型字寄存器内表示312图示了第7字到第0字是如何存储在多媒体寄存器209中的寄存器中的,如图4B所示。有符号组合型字寄存器内表示313与无符号组合型字寄存器内表示312类似。注意,每个字数据元素的第16个位是符号指示符。无符号组合型双字寄存器内表示314示出了多媒体寄存器209是怎样存储2个双字数据元素的,如图4C所示。有符号组合型双字寄存器内表示315与无符号组合型双字寄存器内表示314类似。注意,必需的符号位是双字数据元素的第32位。
如本发明所教导的内容数据的高效滤波与卷积开始于将数据和滤波/卷积系数装载到数据源设备。在许多情况下,在进行算术计算前,需要改变数据存储设备例如单指令多数据(SIMD)寄存器内的数据或系数的顺序。相应地,高效的滤波计算和卷积不仅需要合适的算术指令,还需要用于组织进行计算所需的数据的高效方法。
例如,使用背景技术部分中的符号,通过替换由S[I]给出的例如象素I的值,对图像进行滤波。在S[I]的滤波计算中使用了象素I两侧的象素的值。类似地,需要象素I+1两侧的象素来计算S[I+1]。因此,为了在SIMD寄存器中计算多于1个象素的滤波结果,需要在SIMD寄存器中复制并安排数据以用于计算。
不幸地是,当前的计算体系结构缺乏高效的方法,来安排该计算体系结构内所有合适数据大小的数据。相应地,如图5所示,本发明包括字节洗牌指令(PSHUFB)145,其高效地对任何大小的数据进行排序。在洗牌操作期间,通过在更大地数据内保持字节的相对位置,字节洗牌操作145对大于字节的数据大小进行排序。另外,字节洗牌操作145可以改变SIMD寄存器中的数据的相对位置,并且还可以复制数据。
再次参考图5,图5示出了用于具有3个系数的滤波器的字节洗牌操作145的示例。使用传统技术,将滤波器系数(未示出)应用到3个象素上,然后将滤波器系数转移到另一个象素上并再次应用。然而,为了并行地执行这些操作,本发明描述了一种用于安排所述数据的新指令。相应地,如图5所示,通过利用掩码402来指定各数据元素在目标寄存器406中的存储地址,在目标数据存储设备406内组织数据404,所述目标数据存储设备406在一个实施例中是源数据存储设备404。在一个实施例中,掩码的安排基于所希望的数据处理运算,可包括例如滤波运算、卷积运算等等。
相应地,使用掩码掩码402,可以并行地执行数据406以及所述系数的处理。在所述示例中,源数据存储设备404是128位SIMD寄存器,其最初存储16个8位象素。照这样,当利用具有3个系数的象素滤波器时,第4个系数被置为0。在一个实施例中,取决于源数据存储设备404中的数据元素的数量,源寄存器404可以用作目标数据存储设备或寄存器,从而与通常相比减少了必需的寄存器的数目。照这样,源数据存储设备404内被覆盖的数据可以从存储器或另一个寄存器中重新装载。另外,可将多个寄存器用作源数据存储设备404,将它们各自的数据如所希望地在目标数据存储设备406中组织。
一旦完成了数据元素以及系数的排序,就必须根据数据处理操作来处理数据和对应的系数。本领域内的技术人员可认识到,对利用不同数量的滤波器系数和数据大小的滤波器计算和卷积计算来说需要不同精度的运算。最基本的滤波器运算是将两对数字相乘,并将它们的乘积相加。这一运算称为乘法累加指令。
不幸地是,当前的计算体系结构不提供对利用有符号或无符号系数的多种滤波器长度和多种数据大小的高效乘法累加指令的支持。另外,也不支持字节操作。结果,传统的计算机体系结构必须使用解组合指令来转换16位的数据。这些计算机体系结构一般包括对某些乘法累加运算的支持,这些乘法累加运算计算不同寄存器中的16位数据的乘积,然后将相邻的乘积相加以给出32位的结果。这一方案对于需要16位精度的数据的滤波器系数来说是可以接收的,但是,对于8位滤波器系数来说,在8位数据(对图像和视频来说是很常见的)中,指令和数据级并行就被浪费了。
现在参考图6,图6示出了第一源寄存器452和第二源寄存器454。在一个实施例中,第一和第二源寄存器是N位长的SIMD寄存器,例如128位的InterlSSE2 XMM寄存器。在这种寄存器上实现的乘法与累加指令可以给出两个象素向量452和454的下述结果,其存储在目标寄存器456中。相应地,该示例示出了8位字节到16位字乘法累加指令,称为PMADDUSBW运算147(图1),其中,指令中的U和S指的是无符号和有符号字节,以有助于记忆。所述源寄存器中的一个当中的字节是有符号的,而另一个当中的字节是无符号的。
在本发明的一个实施例中,有无符号数据的寄存器是所述目标和所述16位乘法累加结果。这一选择的原因在于,在多数实现中,数据是无符号的,而系数是有符号的。相应地,优选地将所述数据覆盖掉,因为在以后的计算中不太可能还需要该数据。如图1所示,用于两个寄存器中的无符号字节的PMADDUUBW运算149和用于两个源寄存器中的有符号字节的PMADDSSBW运算151是另外的字节乘法累加指令。所述乘法累加指令由PMADDWD指令153完成,其应用于16位有符号字对,以获得32位的有符号乘积。
如滤波运算的一般情况那样,第二向量一般包含有滤器系数。相应地,为了预备XMM寄存器,可以将系数装载到寄存器的一部分中,并利用洗牌指令145而拷贝到寄存器的其余部分。例如,如图7A所示,响应于数据装载指令的执行,系数数据存储设备502例如XMM 128位寄存器最初装载了3个系数。然而,本领域内的技术人员会认识到,在数据处理之前,可以在存储器中组织滤波器系数。照这样,在滤波之前,基于其在存储器中的组织,最初系数可以如图7B所示地被装载。
照这样,系数寄存器502包含有滤波器系数F3、F2和F1,它们可以被编码成有符号或无符号字节。一旦装载了系数寄存器502,就可以使用现有的指令PSHUFD来将滤波器系数拷贝到系数寄存器的其余部分,以获得如图7B所示的下述结果。如图7B所示,系数寄存器504现在包含按需要被洗牌的系数,以并行地执行数据处理操作。如本领域内的技术人员所公知的那样,在图像处理算法中包括3个系数的滤波器是非常常见的。然而,本领域内的技术人员将会认识到,某些滤波运算例如JPEG 2000利用9个和7个16位系数。相应地,这些系数的处理超过了系数寄存器的容量,而产生部分滤波的结果。因此,处理继续进行,直到使用每个系数获得最终结果。
现在参考图7C,图7C示出了源寄存器506中的象素数据的安排,所述数据如图5所示最初被包含在源寄存器404中,并在目标寄存器406中被洗牌。相应地,响应于数据处理操作的执行,利用存储在目标寄存器510中的结果,可用PMADDUSBW指令来计算两个乘法的和。不幸地是,为了为所选择的数据处理操作完成计算并产生数据处理结果,必须相加目标寄存器510中相邻的累加乘积对。
相应地,如果乘法累加指令的和长于2个象素(这是很常见的),必须相加不同的和。不幸地是,当前的计算体系结构没有提供相加相邻的和的高效算法,因为相邻的和位于相同的目标寄存器内。相应地,本发明利用了相邻加指令,图8A-8D示出了其结果。
现在参考图8A,图8A示出了相加2个相邻的16位值(PAADD2WD运算157)以给出32位和之后的目标寄存器552。照这样,图8A示出了乘法累加指令的2个相邻的16位结果,相加所述2个16位结果,以给出4个字节乘积的32位和。图8B示出了相邻加指令(PAADD4WD运算157),其相加4个相邻的16位值,以给出32位和。照这样,相加字节乘法累加指令的4个相邻的16位结果,以给出8个字节乘积的32位和。图8C图示了相邻加指令(PAADD8WD运算157),其相加8个相邻的16位值,以给出32位和。照这样,该示例图示了字节乘法累加运算的8个相邻的16位结果,相加所述结果以给出16个字节乘积的32位和。
相应地,选择指令以执行相邻加运算是基于和中的加数(turn)的数量(N)。例如,利用如图7A-7C所示的3抽头滤波器,第一指令(PAADD2WD运算157)将获得如图8D所示的下述结果。然而,对于2个16位象素向量(例如宏块(macro block)的第一行)的关联来说,利用最后一个指令(PAADD8WD运算157),如图8C所示。随着SIMD寄存器在大小上的增大,这种运算对于一个高效的实现来说也变得越来越重要。没有这种运算,就需要许多其他的指令。
照这样,如本发明所述的相邻加指令集支持大量可以相加的相邻值和大量的通用数据类型。在一个实施例中,相邻的16位值的相加包括一组指令(PAADDNWD运算157),其范围开始于相加2个相邻值(N=2),并将相加的数目翻倍成4(N=4)然后是8(N=8),一直到寄存器中的总数。16位相邻加的和的数据大小是32位。在另一个可选实施例中,相加相邻的16位值(PAADDWD运算161),以获得32位和。
在此可选实施例中,没有包括其他具有16位的数据大小的指令,因为使用了具有32位的输入的相邻加指令来相加由具有16位的输入的指令所产生的和。两个实施例都包括一组32位的相邻加指令(PAADDNDWD运算159),其范围开始于相加2个相邻值(N=2),并将相加的数目翻倍成4(N=4),然后是8(N=8)等等,一直到寄存器中的总数。32位相邻加的和的数据大小是32位。在一些情形下,所述结果没有填满寄存器。例如图8A、8B和8C所示的指令,3个不同的相邻加产生了4个、2个和1个32位的结果。在一个实施例中,结果存储在目标数据存储设备的较低的、最低有效位的部分。
相应地,当有2个32位的结果时,如图8B所示,所述结果存储在低64位。在一个32位的结果的情形下,如图8C所示,所述结果存储在低32位。如本领域内的技术人员所认识到的那样,一些应用利用了相邻字节的和。利用相加2个相邻有符号字节以给出16位字的指令(PAADDNB运算155)以及相加2个相邻无符号字节以给出16位字结果的指令,本发明支持字节的相邻加。需要相加多于2个的相邻字节的应用利用合适的16位相邻加运算,将两个字节的16位和相加在一起。
一旦已计算数据处理操作结果,下一个操作就将所述结果返回到存储设备。如上述实施例所图示的那样,所述结果可用32位精度来编码。因此,可以使用对双字进行操作的简单转移(move)操作例如上述的MOVD操作143,以及对整个寄存器进行操作的逻辑右移操作(PSRLDQ)、双四字逻辑右移,来将结果写回存储器。照这样,将所有的结果写回存储器在第一种情形下(图8A)将需要4个MOVD和3个PSRLDQ,在第二种情形下(图8B)需要2个MOVD和1个PSRLDQ,而在最后的情形下只需要1个MOVD,如图8C所示。
不幸地是,尽管可以并行执行如图7C所示的相邻加运算,但是滤波计算一般需要图像中的下一个象素。因此,需要在源数据存储设备或寄存器中装载一个或多个象素。为了避免每次在寄存器中装载8个象素,人们提出了两种方案来用于这一操作。在一个实施例中,本发明描述了寄存器合并操作163,如图9A所示。照这样,为了处理目标寄存器606中的象素A1-A8,将象素A7-A1与象素A8串接起来,以在目标寄存器606中形成象素A8-A1。相应地,寄存器合并操作利用字节数量来选择寄存器,所述数量由输入自变量提供。
现在参考图9B,图9B示出了用于执行寄存器合并操作的可选实施例。最初,将8个象素装载到第一源寄存器608(MM0)中。然后,将随后的8个象素装载到第二源寄存器(MM1)610中。然后,对第二源寄存器610执行排列(permute)运算。一旦被执行,就将寄存器610拷贝到第三源寄存器(MM2)612中。然后,将第一源寄存器608右移8位。另外,根据组合型逻辑与(AND)指令将第二源寄存器610与掩码寄存器614相结合,并存储在第一源寄存器608中。
然后,在第二源寄存器610和第一源寄存器608之间执行逻辑或(OR)运算,以在目标寄存器620中产生下述结果,形成寄存器合并操作。通过对第一源寄存器608进行移位来如图所示地继续所述过程。然后,将第二源寄存器610进行移位,以产生寄存器612。然后,在掩码寄存器614和第二源寄存器612之间执行逻辑与运算,其结果存储在目标寄存器622中。最后,在第二源寄存器612和第一源寄存器608之间执行组合型或运算,以在目标寄存器624中产生后续寄存器合并操作。现在描述用于实现本发明的教导的过程性方法。
操作现在参考图10,图10示出了一个框图,图示了方法700,用于在例如图1和2所示的计算机系统100中高效地执行内容数据的滤波和卷积。如在此所述地,内容数据指图像、音频、视频和语音数据。另外,如本领域内的技术人员所认识到的那样,本发明所指的数据存储设备包括能够存储数字化数据的各种设备,包括例如数据寄存器,例如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),就会获得部分数据处理结果。因此,继续处理和组织系数(处理框734)和数据(处理框736),一直到获得了最终的数据处理操作结果,如可选处理框732-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示出了另一个方法754,用于选择处理框752的未处理数据元素,如图13所示。在处理框756,从源数据存储设备选择数据元素。然后,在处理框758,确定是否已为该数据元素计算数据处理操作结果。当已经计算这个结果时,丢弃所选择的数据元素。否则,在处理框760,所选择的数据元素是未处理数据元素,并将之存储起来。然后,在处理框762,增加未处理数据元素计数。最后,在处理框764,重复处理框756-762,直到源数据存储设备中的每一个数据元素都被处理。
照这样,使用本发明的教导,可以避免不必要的数据类型改变,获得了每条指令的SIMD操作数量的最大化。另外,也大大减少了为算术运算而对数据排序所需的时钟周期数量。相应地,表1给出了使用本发明所述的教导和指令的几种滤波应用的估计加速比值。
表1

可选实施例已经描述了用于提供使用SIMD寄存器的高效数据滤波和卷积的计算体系结构的一个实现的几个方面。然而,该计算体系结构的各种实现提供了大量的包含、完善、补充和/或替换上述特征的特征。在不同的实现中,多个特征可被实现为计算体系结构的一部分,或者实现为具体软件或硬件组件的一部分。另外,为了说明的目的,前面所描述的内容使用了具体的术语以提供对本发明的透彻理解。然而,对本领域内的技术人员来说,很清楚并不需要这些具体细节来实施本发明。
另外,尽管在此描述的实施例涉及一种系统,其使用SIMD寄存器用于内容数据的高效滤波和卷积,但是,对本领域内的技术人员来说,很清楚本发明的教导也可用于其他系统。事实上,用于处理图像、音频和视频数据的系统都在本发明的教导之内,而不偏离本发明的精神和范围。选择并描述上述实施例是为了最好地说明本发明的原理及其实际应用。选择这些实施例是为了使得本领域内的技术人员可使用适合于其所考虑的具体用途的各种修改来最好地利用本发明及各种实施例。
本发明的实施例提供了许多优于公知技术的优点。本发明包括了一种能力,可高效地实现用于多种数组长度、数据大小和系数符号的滤波/卷积的运算。通过使用作为一小组单指令多数据(SIMD)指令的一部分的一些指令,实现了这些操作。相应地,本发明避免了不必要的数据类型转换。结果,通过避免不必要的数据类型转换,本发明最大化了每条指令的SIMD操作数量,同时大大减少了为算数运算例如乘法累积运算而进行数据排序所需的时钟周期数量。
图15是一个实施例的处理器的微体系结构的框图,其包括多个逻辑电路,以执行根据本发明的并行右移合并操作。右移合并操作也可称为寄存器合并操作和寄存器合并指令,如上所述。对于右移合并指令(PSRMRG)的一个实施例来说,该指令获得了与图1、9A和9B的寄存器合并操作167相同的结果。良序前端(in-order front end)1001是处理器1000的一部分,其取得(fetch)要被执行的多个宏指令(macro-instruction),并准备之后在处理器流水线中使用它们。这一实施例的前端包括几个单元。指令预取器1026从存储器取宏指令,并将它们馈送到指令译码器1028,指令译码器1028随后将它们译码成称为微指令或微操作(也称为微op或uop)的原语,机器知道如何执行这些原语。踪迹缓存(trace cache)1030取得已译码的uop,并在uop队列1034中将它们组装成程序排序序列(sequence)或说踪迹(trace),以用于执行。当踪迹缓存1030遇到复杂宏指令时,微码ROM 1032提供所需的uop以完成操作。
许多宏指令被转换成单个微op,而其他宏指令需要几个微op来完成整个操作。在此实施例中,如果需要多于4个的微op来完成宏指令,译码器1028就访问微码ROM 1032以执行该宏指令。在一个实施例中,如果需要多个微op来完成操作,则可将用于并行右移合并算法的指令存储在微码ROM 1032内。踪迹缓存1030参考入口点可编程逻辑阵列(PLA)来确定一个正确的微指令指针,用于为微码ROM 1032中的移位合并算法来读取微码序列。在微码ROM 1032为当前的宏指令完成微op序列化之后,机器的前端1001恢复从踪迹缓存1030中取微op。
一些SIMD和其他的多媒体类型的指令被认为是复杂指令。大多数浮点相关的指令也是复杂指令。照这样,当指令译码器1028遇到复杂指令时,访问微码ROM 1032的适当位置,以获取用于该宏指令的微码序列。将执行该宏指令所需的各个微op传送到乱序执行引擎1003,以在合适的整数和浮点执行单元处执行。
乱序执行引擎1003是准备微指令以用于执行的地方。乱序执行逻辑具有多个缓冲器,在微指令顺着流水线下行并被调度执行时,用于平滑并重排序微指令流,以优化性能。分配器逻辑分配每个uop为执行所需要的机器缓冲器和资源。寄存器重命名逻辑将逻辑寄存器重命名到寄存器文件中的条目上。分配器还在指令调度器之前的两个uop队列之一中为每个uop分配入口,所述两个队列中一个用于存储器操作,一个用于非存储器操作,所述指令调度器是存储器调度器、快速调度器1002、慢速/通用浮点调度器1004和简单浮点调度器1006。uop调度器1002、1004、1006基于它们的相关输入寄存器源操作数的准备程度和所述uop完成它们的操作所需的执行资源的可用性来确定uop何时准备执行。本实施例的快速调度器1002可每半个主时钟周期就进行一次调度,而其他调度器每个主处理器时钟周期只能进行一次调度。所述调度器对分发端口进行仲裁,以调度uop用于执行。
寄存器文件1008、1010位于调度器1002、1004、1006和执行模块1011中的执行单元1012、1014、1016、1018、1020、1024之间。对于整数和浮点运算分别有不同的的寄存器文件1008、1010。本实施例的每个寄存器文件1008、1010还包括一个旁路网络,其可以绕过刚刚完成但尚未写入寄存器文件中的结果,或将其转发到新的相关uop。整数寄存器文件1008和浮点寄存器文件1010还能够向彼此发送数据。对于一个实施例,整数寄存器文件1008被分成两个独立的寄存器文件,一个寄存器文件用于数据的低端32位,另一个寄存器文件用于数据的高端32位。一个实施例的浮点寄存器文件1010具有128位宽的条目,因为浮点指令一般具有从64到128位宽的操作数。
执行模块1011包括执行单元1012、1014、1016、1018、1020、1024,在其中实际执行指令。这一部件包括寄存器文件1008、1010,其存储微指令执行所需的整数和浮点数据操作数。此实施例的处理器1000由多个执行单元组成地址生成单元(AGU)1012、AGU 1014、快速ALU1016、快速ALU 1018、慢速ALU 1020、浮点ALU 1022、浮点转移(move)单元1024。对于此实施例,浮点执行模块1022、1024执行浮点、MMX、SIMD和SSE操作。这一实施例的浮点ALU 1022包括64位除64位的浮点除法器以执行除法、平方根和余数微op。对于本发明的实施例,涉及浮点值的任何动作都与浮点硬件相关。例如,整数格式与浮点格式之间的转换涉及浮点寄存器文件。类似地,浮点除法运算在浮点除法器处执行。另一方面,非浮点数和整数类型由整数硬件资源处理。简单的频繁发生的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位宽的组合型数据操作数进行操作。
在这一实施例中,uop调度器1002、1004、1006在双亲装载完成执行之前分发相关操作。由于uop是在处理器1000中预测式地调度和执行的,所以处理器1000还包括用于处理存储器缺失的逻辑。如果数据装载在数据缓存中发生缺失,则在流水线中可能会有悬空(in flight)的相关操作,其已向调度器提供暂时不正确的数据。回放(replay)机制可跟踪并重新执行使用不正确数据的指令。只有相关操作才需要回放,而相关操作可以完成。处理器的一个实施例的调度器和回放机制还被设计来捕捉指令序列,以用于扩展精度的整数除法运算。
术语“寄存器”在此用来指称板载处理器存储单元,其用作微指令的一部分,以标识操作数。换句话说,在此所指的寄存器是那些处理器外部(从程序员的角度)可见的寄存器。然而,在此所描述的寄存器可以使用任意数量的不同技术来由处理器内的电路实现,例如专用物理寄存器、使用寄存器重命名的动态分配物理寄存器、专用和动态分配物理寄存器的组合等等。对于下面的讨论,应理解到所述寄存器是设计来保持组合型数据的数据寄存器,例如加利福尼亚州圣克拉拉市的英特尔公司的微处理器中的64位宽的MMXTM寄存器(mm寄存器),该微处理器使用MMX技术。这些处理器同时有整数和浮点形式,可以对伴随SIMD和SSE指令的组合型数据元素进行操作。类似地,与SSE2技术相关的128位宽的XMM寄存器也可用来保持这种组合型数据操作数。
在下述附图的示例中,描述了多个数据操作数。为了简单起见,从字母A往上按字母表顺序对数据段进行标注,其中A位于最低地址处,而Z位于最高地址处。这样,A可以在地址0处,B在地址1处,C在地址2处等等。尽管一些示例中的数据序列以逆字母表序出现,但是寻址仍然以A在0处、B在1处等等开始。理论上,如在一个实施例的右移合并中的那样,如果序列是D、C、B、A,则右移运算使得较低地址数据段右移出去。这样,右移只是将数据块的数据元素右移过一条固定线。而且,理论上右移合并操作可以将来自一个操作数的最右端的数据段右移到另一个数据操作数的左侧,好像这两个操作数是连续的一样。
图16A是一个方框图,示出了根据本发明对数据操作数执行并行右移合并操作的逻辑的实施例。用于这一实施例的右移合并(以及寄存器移位)的指令(PSRMRG)从3项信息开始第一数据操作数1102、第二数据操作数1103和移位计数1106。在一个实施例中,移位PSRMRG指令被译码成一个微操作。在另一个实施例中,该指令可以被译码成不同数量的微op,以对数据操作数执行移位合并操作。对于这一示例,数据操作数1102、1104是存储在寄存器/存储器中的64位宽的数据,而移位计数1106是8位宽的立即数值。取决于具体的实现,数据操作数和移位计数可以具有其他宽度,例如分别是128/256位和16位。这一示例中的第一操作数1102由8个数据段组成P、O、N、M、L、K、J和I。第二操作数1104也由8个数据段组成H、G、F、E、D、C、B和A。这里的数据段具有相等的长度,并且每一个都由单个字节(8位)的数据组成。然而,本发明的另一个实施例用更长的128位的操作数来操作,其中所述数据段每一个都由单个字节(8位)组成,而该128位宽的操作数可具有16个单字节宽的数据段。类似地,如果每个数据段是双字(32位)或四字(64位),则该128位的操作数可分别具有4个双字宽或2个四字宽的数据段。因此,本发明的实施例不限于特定长度的数据操作数、数据段或移位计数,而是可以对每个实现都具有合适的大小。
操作数1102、1104可驻留在寄存器或存储器单元或寄存器文件或混合结构中。将数据操作数1102、1104和计数1106连同右移合并指令发送到处理器中的执行单元1110。在右移合并指令到达执行单元1110之时,该指令应当已在处理器流水线中预先被译码。因此,右移合并指令可以具有微操作(uop)的形式或其他已译码的格式。对于这一实施例,在串接逻辑和临时寄存器处接收到两个数据操作数1102、1104。串接逻辑合并/连接(join)两个操作数的数据段,并将新的数据块放置在临时寄存器中。在此,该新数据块包括16个数据段P、O、N、M、L、K、J、I、H、G、F、E、D、C、B、A。由于这一实施例以64位宽的操作数工作,因此,需要来保持所结合的数据的临时寄存器宽128位。对于128位宽的数据操作数,需要256位宽的临时寄存器。
执行单元1110中的右移逻辑1114取得临时寄存器的内容,并对该数据块执行n个数据段的逻辑右移,如计数1106所请求的那样。在此实施例中,计数1106表示要右移的字节数。取决于具体的实施例,计数1106也可用来表示要移位的位、半字节、字、双字、四字等等的数量,这取决于数据段的粒度。对于这一实施例,n等于3,因此将临时寄存器的内容移位3个字节。如果每个数据段都是字或双字宽,则该计数分别表示要移位的字或双字的数量。对于这一实施例,当临时寄存器中的数据右移时,从该寄存器的左侧移进0,以填充空缺的空间。因此,如果移位计数1106大于数据操作数中的数据段的数量(在此情形下是8),则可在结果数1108中出现一个或多个0。而且,如果移位计数1106等于或超过两个操作数的数据段的总数,则结果数将全由0组成,因为所有的数据段都将被移走。右移逻辑1114输出来自临时寄存器的合适数量的数据段,作为结果数1108。在另一个实施例中,可以在右移逻辑之后包括一个输出多路复用器或锁存器,以输出结果数。对于这一实施例,结果数宽64位,包括8个字节。由于对两个数据操作数1102、1104的右移合并操作,结果数由下述8个数据段组成K、J、I、H、G、F、E和D。
图16B是一个方框图,示出了执行右移合并操作的逻辑的另一个实施例。类似于图16A的前一个示例,这一实施例的右移合并操作以3项信息开始64位宽的第一数据操作数1102、64位宽的第二数据操作数1104和8位宽的右移计数1106。移位计数1106表示数据段要移位的位置数量。对于这一实施例,计数1106以字节表示。在另一个实施例中,该计数可以表示要将数据移位的位、半字节、字、双字或四字的数量。这一示例中的第一操作数1102由8个等长的、字节大小的数据段(H、G、F、E、D、C、B、A)组成,第二操作数1104由8个数据段(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,以填充空缺的空间。在此情形下,存在8个数据段,因此将第一操作数1102左移8减3个或说5个位置。将第一操作数1102移位这一不同的值,而获得正确的数据对齐以在逻辑或门1126处合并。在左移后,第一操作数变成K、J、I、O、O、O、O、O。如果计数1106大于操作数中的数据段的数量,则左移计算可产生一个负数,表示负左移。带有负计数的逻辑左移可理解为负向移位,实质上是逻辑右移。负左移将从第一操作数1102的左侧引进0。
类似地,右移逻辑1124将第二操作数的数据段右移n个段。当数据段右移时,从左侧移进0以填充空缺的位置。第二数据操作数变成O、O、O、H、G、F、E、D。从左/右移逻辑1122、1124输出被移位的操作数,并在逻辑或门1126处合并在一起。或门执行数据段的逻辑或,并提供这一实施例的64位宽的结果数1108。“K、J、I、O、O、O、O、O”和“O、O、O、H、G、F、E、D”的或运算产生包括8个字节的结果数1108K、J、I、H、G、F、E、D。这一结果与图16A中的第一实施例的结果相同。注意,对于大于操作数中的数据元素数量的计数n 1106,可在结果数的左侧开始出现合适数量的0。而且,如果计数1106大于或等于两个操作数中的数据元素的总数,则结果数全由0组成。
图17A图示了根据本发明第一实施例的并行右移合并指令的操作。对于这些讨论,MM1 1204、MM2 1206、TEMP 1232和DEST 1242一般都是指操作数或数据块,但不限于这些,而是还包括寄存器、寄存器文件和存储器单元。在一个实施例中,MM1 1204和MM2 1206是64位宽的MMX寄存器(在一些情形下也称为“mm”)。在状态I 1200处,移位计数imm[y]1202、第一操作数MM1[x]1204和第二操作数MM2[x]1206连同并行右移合并指令一起被发送。计数1202是宽y位的立即数值。第一操作数1204和第二操作数1206是包括x个数据段的数据块,并且如果每个数据段是一个字节(8位),则每个操作数都具有总宽度8x位。第一操作数1204和第二操作数1206中的每个都由多个较小的数据段组合而成。对于这一示例,第一数据操作数MM1 1204由8个等长的数据段组成P1211、O 1212、N 1213、M 1214、L 1215、K 1216、J 1217、I 1218。类似地,第二数据操作数MM2 1206由8个等长的数据段组成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不限于是立即数值,并且也可存储在寄存器或存储器单元中。
操作数MM1 1204和MM2 1206在状态II 1230处被合并在一起,以形成临时数据块TEMP[2x]1232,其宽为2x个数据元素(或字节,在此情形下)。这一示例的合并数据1232由16个数据段组成,排列为P、O、N、M、L、K、J、I、H、G、F、E、D、C、B和A。一个8字节宽的窗口1234包围了临时数据块1232的8个数据段,从最右边缘开始。因此,窗口1234的右边缘将与数据块1232的右边缘对齐,从而窗口1234包围数据段H、G、F、E、D、C、B和A。移位计数n 1202表示将合并数据右移的所需数量。该计数值可以实现来以位、半字节、字节、字、双字、四字等等或特定数据段数量为单位指定移位量。在此,基于计数值1202,数据块1232右移1236 n个数据段。对于这一示例,n等于3,并且数据块1232向右移动3个位置。考察这一问题的另一个种方式是将窗口1234以相反的方向移位。换句话说,窗口1234在理论上可以看作从临时数据块1232的右边缘向左移动3个位置。对于一个实施例,如果移位计数n大于组合数据块中出现的数据段总数量2x,则结果数将全由0组成。类似地,如果移位计数n大于或等于第一操作数1204中的数据段数量x,则结果数从左侧开始包含一个或多个0。在状态III 1240处,将由窗口1234包围的数据段(K、J、I、H、G、F、E、D)作为结果数输出到x个数据元素宽的目标DEST[x]1242。
图17B示出了根据第二实施例的右移合并指令的操作。在状态I 1250处右移合并指令同时存在具有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、L 1215、K1216、J 1217、I 1218”以及“H 1221、G 1222、F 1223、E 1224、D1225、C 1226、B 1227、A 1228”。
在状态II 1260处,使用移位计数n 1202对第一操作数1204和第二操作数1206进行移位。这一实施例的计数表示合并数据将要右移的数据段的数量。对于这一实施例,移位发生在第一操作数1204和第二操作数1206的合并之前。结果,以不同的方式对第一操作数1204进行移位。在这一示例中,将第一操作数1204左移x-n个数据段。计算x-n是考虑到在后面的数据合并处正确的数据对齐。因此,对于值为3的计数n,将第一操作数1204左移5个数据段或说5个字节。从右侧移进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。而且,如果移位计数1202等于2x或更大,则DEST 1242中的结果数将全由0组成。
在上述示例例如图17A和18B中,MM1和MM2中的一个或二者都可以是具有MMX/SSE技术的处理器中的64位数据寄存器,或者具有SSE2技术的128位数据寄存器。取决于实现,这些寄存器可以是64/128/256位宽。类似地,MM1和MM2中的一个或二者都可以是寄存器单元而非寄存器。在一个实施例的处理器体系结构中,MM1和MM2是右移合并指令(PSRMRG)的源操作数,如上所述。对于这种PSRMRG指令,移位计数IMM也是立即数。对于一个实施例,结果数的目标位置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的结果数。对于一个实施例,所述合并产生了一个包含来自第一和第二操作数的所期望的数据段的结果。
一种越来越流行的计算机应用涉及操纵极大的视频和音频文件。即使这些视频和音频一般是通过具有很高带宽的网络或大容量存储介质而传输的,仍需要数据压缩来处理所述流量。结果,不同的压缩算法正成为许多流行的音频、图像(image)和视频格式的表示或编码方案的重要部分。根据动画专家组(MPEG)标准之一的视频是一种使用压缩的应用。将MPEG视频分割成具有多个层的层次结构,以有助于误差处理、随机搜索和编辑以及同步。
为了说明的目的,将简要地描述这些构成一个MPEG视频的层。在最顶部的级别是视频序列层,其包括一个自包含的比特流。向下的第二层是一组图像(picture),由内帧(intra-frame)和/或非内帧(non-intraframe)的一个或多个组构成。向下的第三层是图像层(picture layer)自身,再下一层是像条层(slice layer)。每个像条是光栅排序的宏块(macroblock)的连续序列,在典型的视频应用中最经常是基于行的,但并不限于此。每个像条由多个宏块组成,所述宏块是16×16的亮度象素或说图像数据元素阵列,并具有两个8×8的关联色度象素阵列。可将宏块进一步划分成不同的8×8的块以用于进一步的处理,例如变换编码。宏块是是运动补偿(motion compensation)和运动估计(motionestimation)的基本单元,并可具有与其关联的运动向量。取决于实施例,宏块可具有16行×16列或多种维度。
MPEG视频中所使用的一种时间预测技术是基于运动估计的。运动估计基于这一假设,即连续的视频帧基本类似,除了帧内由于物体移动所导致的变化。如果在帧之间没有运动,则编码器可容易而高效地将当前帧预测为先前的或说预测帧的复制。先前的帧也可称为参考帧。在另一个实施例中,参考帧可以是下一个帧甚或序列中的某个其他帧。运动估计的实施例不需要将当前帧与先前帧进行比较。因此,可在比较中使用任何其他的帧。然后,必须传输到编码器的信息就变成从初始参考帧重建图像所需的语法开销(syntactic overhead)了。但是,如果在图像之间有运动,则情形就更复杂了。最佳匹配宏块与当前宏块之间的差理想情况下是多个0值。当编码宏块时,将最佳匹配宏块和当前宏块之间的差进行变换和数量化。对于一个实施例,将所量化的值传送到可变长度编码部件以用于压缩。由于0可以很好地压缩,因此期望具有许多0差值的最佳匹配。也可从差值中导出运动向量。
图19A图示了运动估计的第一示例。左边的帧1402是先前视频帧的采样,包括一个小人和路标。右边的帧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包括路标1521和两个小人1522、1523,位于板1524上。运动估计和匹配得越精确,残留误差就越可能接近0,并获得更高的编码效率。宏块预测有助于减小搜索窗口大小。
通过利用运动向量在宏块之间趋向于高度相关这一事实可实现高效编码。因此,水平分量可与先前的有效水平运动向量比较,并对差进行编码。类似地,可以在编码前计算垂直分量的差。对于这一示例,从先前帧1510中减去当前帧1520产生了包括手臂举起的第二小人1532和板1534的残留图像1530。压缩并传送这一残留图像1530。理想情况下,这一残留图像1530与压缩和传送整个当前帧1520相比,编码起来更简单而且需要较少的存储器。然而,不是每一个宏块搜索都会获得可接受的匹配。如果编码器确定不存在可接受的匹配,则对该特定宏块进行编码。
图21A-B图示了在运动估计期间所处理的示例性当前帧1601和先前帧1650。先前帧1650在视频帧系列的时间顺序上先于当前帧1601。每个帧都由大量在水平和垂直方向上延伸跨越该帧的象素组成。当前帧1601包括多个宏块1610、1621-1627,按水平和垂直方向排列。对于这一实施例,当前帧1601被划分成相等大小且不重叠的宏块1610、1621-1627。这些方形宏块中的每一个都进一步被划分成相等数量的行和列。对于同一个宏块1610,可得到8行8列的矩阵。宏块1610的每一个方块都对应于单个象素。因此,这一采样宏块1610包括64个象素。在其他实施例中,宏块具有16行16列(16×16)的维度。对于一个实施例,每个象素的数据包括8个数据位或一个字。在另一些实施例中,每个象素的数据可以具有其他大小,包括半字节、字、双字、四字等等。尝试将当前帧的这些当前宏块与先前帧1650中的宏块进行匹配,以用于运动估计。
对于这一实施例,先前帧1650包括搜索窗口1651,其中该帧的一部分被搜索窗口1651所包围。搜索窗口1651包括一个区域,在其中尝试匹配来自当前帧1601的当前宏块。与当前帧相似,搜索窗口被划分成多个相等大小的宏块。在此图示了具有8行8列的示例性宏块1660,但宏块可包括各种其他维度,包括具有16行16列。在一个实施例的运动估计算法中,将来自搜索窗口1651的每个单个宏块依次与来自当前帧的当前宏块进行比较,以找到可接受的匹配。对于一个实施例,搜索窗口1651中第一先前宏块的左上角与搜索窗口1651的左上角对齐。在一种运动估计算法中,宏块处理的方向从搜索窗口的左侧开始逐象素地朝右边缘进行。因此,第二宏块的最左边缘离搜索窗口的左边缘一个象素,依此类推。在第一象素行的结尾处,算法返回到搜索窗口的左边缘,并从下一行的第一个象素开始进行。重复这一处理,直到搜索窗口1651中象素的每一个的宏块都已与当前宏块进行了比较。
图22A-D图示了根据本发明的一个实施例对帧的运动估计的操作。在此所讨论的本发明的实施例涉及全搜索运动估计算法。利用全搜索,尝试将先前帧(参考帧)的搜索窗口中的所有象素位置的宏块都和来自当前帧的宏块进行匹配。对于一个实施例,快速全搜索运动估计算法采用了SIMD右移合并操作,以迅速地处理帧中的组合型数据。一个实施例的SIMD右移合并操作也可通过减小数据装载尤其是未对齐的存储器装载以及其他数据操纵指令的数量来提高处理器性能。一般地说,可以如下的伪码来描述一个实施例的运动估计过程for(x和y方向的每一个当前块){for(搜索窗口的y轴中的所有模1位置){for(搜索窗口的x轴中的所有模4位置){从存储器向寄存器装载象素数据;为4个相邻先前帧进行块匹配;跟踪所述先前帧的最小值和索引位置;}}}其中一个块匹配操作需要for(第1行到第m行中的每一行){for(开始于第1列到第4列的每一个宏块){从保持在寄存器中的数据为这一先前[行]生成正确的数据;评估数据[行]+=绝对差(当前[行],先前[行])的总和;}}。
因此,对于这一实施例,搜索窗口中的每一个象素位置的先前宏块都相对于当前宏块进行评估。如上所述,这一实施例每个循环评估4个相邻先前宏块。利用存储器对齐装载指令将象素数据从存储器装载到寄存器中。通过使用右移合并操作,可以操纵这一象素数据,以形成适合于相邻宏块的已移位数据段的各种组合。例如,第一先前宏块的第一行上的第一、第二、第三和第四个象素可以分别始于存储器地址0、1、2、3。对于第二先前宏块的第一行上的第一个象素,该象素始于存储器地址1。这样,对寄存器数据的右移合并操作可以通过复用为第一先前宏块而已从存储器装载的数据来为第二先前宏块产生必需的象素行数据,从而节约时间与资源。类似的移位合并操作可为其他相邻先前宏块产生行数据,例如第三、第四先前宏块等等。
这样,可以以如下的伪码来描述一个实施例的运动估计算法的块匹配过程对4个相邻先前宏块的块匹配{for(第1行到第m行中的每一行){为当前宏块的一行装载象素数据;为搜索窗口的一行将2个连续的象素数据块存储器对齐地从存储器装载到寄存器中;通过右移合并操作,从所装载的数据中为所述4个相邻的先前宏块中的每一个产生合适的象素数据行;为所述4个相邻的先前宏块中的每一个计算来自先前宏块的行和来自对齐宏块的对应行之间的绝对差的总和;为所述4个相邻的先前宏块中的每一个累加4个各自的绝对差值总和;}}。
下面进一步描述这一过程。尽管按照对搜索窗口的4个相邻宏块进行操作来描述这些示例,但是本发明的可选实施例并不限于此。然而,本发明的实施例并不限制于或局限于对相邻宏块进行操作。一起处理的多个参考宏块也不必以单个象素的距离来变动。对于一个实施例,可以一起处理任意一个参考宏块,只要其具有位于特定象素位置四周的16×16窗口之内的象素。取决于硬件资源例如可用的数据寄存器和执行单元的数量,其他实施例可对或多或少的宏块执行块匹配和绝对差总和的计算。例如,另一个实施例具有至少8个组合型数据寄存器,以保持对两个8个数据段宽的数据块进行右移合并操作而产生的象素数据的4个不同组合,该实施例能够只利用两次对齐的8个数据段宽的存储器装载来对4个相邻先前宏块进行操作。所述8个组合型数据寄存器中的4个用于计算开销保持来自先前帧的第一批8个数据段、先前帧的下一批8个数据段、当前帧的8个数据段以及来自右移合并操作的8个数据段。另4个组合型数据寄存器用于累加所述4个宏块中的每一个的绝对差总和(SAD)的总数。但是,可增加更多的组合型数据寄存器用于SAD计算和累加,从而增加一起处理的参考宏块的数量。因此,如果还有4个组合型数据寄存器可用,就还可处理4个其他的先前宏块。在一个实施例中,保持绝对差累加总和的可用组合型寄存器的数量可限制一次可处理的宏块的数量。
而且,在一些处理器体系结构中,存储器访问可具有特定的粒度,并与特定边界对齐。例如,一种处理器可以基于16或32字节的块来访问存储器。在此情形下,访问不在16或32字节边界处对齐的数据可能需要未对齐存储器访问指令,其在执行时间和资源上都很费成本。更糟的是,一项所需的数据可能跨越边界,而覆盖多个存储器块。需要未对齐装载指令以访问位于两个不同缓存行上的数据的缓存行分割可能很费成本。跨越存储器页边界的数据行的情况甚至更糟。例如,利用对8字节存储器块和跨越8个象素、每个象素具有一个字节数据的宏块的处理,一个对齐的存储器装载指令对于该宏块行就足够了。但是对于下一个相距一个象素列的相邻宏块,该象素行所需的数据将跨越从第一宏块开始的7个数据字节的存储器块,还跨越下一个存储器块的一个数据字节的存储器边界。本发明的实施例采用右移合并操作来高效地处理这种数据。在一个实施例中,在对齐的存储器边界处装载两个连续的存储器块,并保持在寄存器中以多次使用。右移合并操作可取得这些存储器块,并对其中的数据段移位所需的距离,以获得正确的数据行。因此,对于这一示例,右移合并指令可取得所述两个已装载的存储器块,将一个数据字节移出第二块,并将一个数据字节从第一块移入第二块,以产生第二宏块的第一行的数据,而不必执行未对齐装载。运动估计的实施例还可以基于所述算法是怎样实现的来打断相关链。例如,通过修改计算的顺序,可去除或移位数据/指令相关,以使得可乱序执行某些计算和指令,如图15的处理器1000那样。由于增加的执行延迟和可用的计算资源,利用更新的处理器体系结构甚至可获得更大的性能改进。通过使用右移合并指令的实施例,可避免块匹配序列中的某些相关。例如,可以并行地执行多个绝对差总和的运算和/或累加运算。
图22图示了当前宏块跨越当前帧1701的进行情况。对于这一实施例,每个当前宏块1710被划分成16行16列,因此包括256个单个的象素。对于这一实施例,每个宏块1710中的象素以每次一行1711的方式处理。当已经相对于搜索窗口中的期望的宏块处理了当前块中的所有16行时,就处理下一个当前宏块。按照以宏块计算大小的步骤,以从当前帧1701的左侧到右侧的水平方向1720来处理这一实施例的宏块。也就是说,这一实施例中的对齐宏块不重叠,并且当前宏块被安排成使得每个宏块都与下一个宏块相邻。例如,第一宏块可以从第1象素列延伸到第16象素列。第二宏块从第17列延伸到第32列,依此类推。在宏块行的结尾处,所述处理返回1722到左边缘,并下降一个宏块的高度,在此示例中是16行。然后从左到右水平地处理1724下降一个宏块大小的宏块,直到完成对于整个帧1701的尝试性匹配。
图22B图示了宏块跨越先前(参考)帧的搜索窗口1751的进行情况。取决于具体实现,搜索窗口1751可以集中于某个区域,并因此小于整个的先前帧。在另一个实施例中,搜索窗口可以与先前帧完全重叠。类似于当前块,每个先前宏块1760、1765、1770、1775被划分成16行16列,每个宏块中总共有256个象素。对于本发明的这一实施例,在寻找匹配中,将搜索窗口1751的四个先前宏块1760、1765、1770、1775并行地与单个当前块进行处理。与当前帧的当前宏块不同,搜索窗口1751中的先前宏块1760、1765、1770、1775可以重叠,而且如在这一示例中那样,它们的确重叠。在此,将每个先前宏块移位一个象素列。这样,BLK1的第一行上的最左端的象素是象素1761,对于BLK 2它是象素1766,对于BLK 3它是象素1771,而对于BLK 4它是象素1776。在运动估计算法中,先前宏块1760、1765、1770、1775的每一行都与当前块的对应行进行比较。例如,BLK 1的第一行1760、BLK 2的第一行1765、BLK 3的第一行1770和BLK 4的第一行1775都与当前块第一行进行处理。
继续对所述4个重叠的相邻宏块的逐行比较,直到所述宏块的所有16行都已完成比较。这一实施例的算法移位4个象素列的距离,以对下四个宏块进行操作。这样,对于这一示例,下四个宏块的最左端象素列将分别是象素1796、象素1797、象素1798、象素1799。对于这一实施例,先前宏块处理继续向右进行1780,跨越搜索窗口1751,绕回1782以向下一个象素行而在搜索窗口1751的最左端象素处重新开始,直到完成所述搜索窗口。尽管这一实施例的当前帧的当前宏块不重叠并且下一批单个宏块距离一个宏块高或宽,但是先前或说参考帧的先前宏块的确重叠,并且下一批宏块增加单个象素行或列。尽管这一示例的四个参考宏块1760、1765、1770、1775是相邻的,并且彼此相距单个象素列,但是可以将搜索窗口中在选定象素位置的四周的指定区域上重叠的任何宏块与在该象素处的宏块一起处理。例如,当前正在处理象素1796处的宏块1760。围绕象素1796的16×16的窗口内的任何宏块都可以与宏块1760一起处理。这一示例的16×16的窗口源于宏块的维度和一行的行宽。在此情形下,一行或数据行具有16个数据元素。因为运动估计算法的这一实施例的这一块匹配功能可以装载两个具有16个数据元素的数据行并执行右移合并操作,以产生具有两个所述数据行的移位/合并版本的各种数据行,所以,在将为其装载用于这一宏块的数据的16×16的窗口上重叠的其他宏块将能够至少部分地复用所装载的数据。因此,与宏块1760重叠的任何宏块例如宏块1760、1765、1770、1775,或者开始于宏块1760的右下象素位置的宏块可以与宏块1760一起处理。重叠数量上的差别会影响可从先前数据装载中复用的数据量。
利用根据本发明的运动估计的实施例,宏块分析包括逐行地将先前(参考)宏块与当前宏块进行比较,以获得两个宏块之间的绝对差的总和。所述绝对差的总和可以表示所述宏块的差别程度以及匹配存在的接近程度。对于一个实施例,每个先前宏块可以由通过对宏块中的所有16行来累加绝对差的总和而获得的值来表示。对于正在被分析的当前宏块,维护最接近匹配宏块的标志。例如,跟踪绝对差的最小累加总和以及用于该对应先前宏块的位置索引。当运动估计跨越搜索窗口而进行时,将每个先前宏块的累加总和与所述最小值进行比较。如果更新的先前宏块具有比所跟踪的最小值更小的累加差值,因此表示一个比现存的最接近匹配更接近的匹配,则该更新的先前宏块的累加差值和索引信息称为新的最小差值和索引。在一个实施例中,当已处理搜索窗口中所有象素的可用宏块时,可以使用具有最小差值的索引宏块来帮助获得用于压缩该当前帧的残留图像。
图22C图示了对于本发明的一个实施例,对于给定搜索窗口的4个参考宏块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包括两个部分1861、1862,每一个都具有8(m)个数据段。使用如上所述的右移合并操作使得本发明的实施例可对所述两个数据部分1861、1862的操作数进行操纵,并为不同的先前宏块1810、1815、1820、1825产生正确对齐的行数据1830。每个宏块(先前宏块1810、1815、1820、1825和当前宏块1840)都具有m行m列的大小。为了讨论的目的并使问题简化,在这一示例中m等于8。其他实施例可具有不同大小的宏块,其中m等于例如4、16、32、128、256等等。
在这一示例中,将运动估计算法应用到所述4个先前宏块1810、1815、1820、1825以及当前宏块1840的第一行上。对于一个实施例,利用两个对齐的存储器装载操作,将两个宏块宽度(2m)的包括所述两个数据部分1861、1862的象素数据从存储器中装载并保持在临时寄存器中。对所述两个数据部分1861、1862的右移合并操作可产生行数据1830的9种可能的组合,而无需大量的存储器访问。而且,可以避免在执行时间和资源上都很费成本的未对齐存储器装载。在这一示例中,所述两个数据部分1861、1862以字节边界对齐。不从字节边界上的地址开始的例如从数据段B、C或D开始的存储器装载一般会需要未对齐的存储器装载操作。所述块中每一个的行数据1830如下安排,其中最左端的数据段是最低地址。在块11810中,第1行1811包括“A、B、C、D、E、F、G、H”。由于第1行1811中的数据与第一数据部分1861相同,因此不需要移位。但是块21815的第1行1816包括“B、C、D、E、F、G、H、I”。因为先前块11810和块21815水平相距1个象素,因此块21815开始于象素数据B,而块11810开始于象素数据A,并且第二象素数据是B。因此,所述两个数据部分1861、1862的移位计数是1的右移合并将产生块2的第1行数据。
类似地,块31820位于向右再一个象素处,并且块31820的第1行1821开始于象素数据C,包括“C、D、E、F、G、H、I、J”。对所述两个数据部分1861、1862的操作数的移位计数是2的右移合并操作产生了块3的第1行数据。块41825的第1行1826由“D、E、F、G、H、I、J、K”组成。这一数据可由对相同数据操作数的计数是4的右移合并操作而产生。对临时保存的、先前所装载的数据部分1861、1862使用右移合并操作可允许在为其他相邻宏块产生行数据时复用数据,并通过减少存储器装载尤其是未对齐存储器装载的数量来节省时间/资源。注意,用于当前块的象素数据和用于与先前帧的参考宏块进行比较的所有绝对差总和的象素数据相同。单个对齐的存储器装载可用于当前块1840的行数据1842,因为当前块1840可能与存储器边界对齐。
下面继续进行运动估计的一个实施例的这一示例,先前宏块1810、1815、1820、1825的每一行都与当前块1840的对应行进行比较,以获得绝对差总和的值。因此,在绝对差总和(SAD)的操作1850中,将块11810的第1行1811与当前块1840的第1行1841进行比较。对当前正在被操作的其他3个块进行相同的操作。尽管看起来4个宏块1810、1815、1820、1825正在并发或并行地被操作,但是本发明的其他实施例并不限于此。因此,对所述4个宏块的操作可在时间上串行地发生,但作为一个具有4个宏块的序列而发生。例如,按照块11810、块21815、块31820和块41825的顺序,使每个参考块的第1行接受与当前块1840的该行的SAD操作1850。然后,每个参考块的第2行接受SAD操作1850,依此类推。在每一个SAD操作1850之后,在临时寄存器中累加绝对差的总和的运行时总和。因此,在这一示例性实施例中,4个寄存器累加绝对差的总和,直到该宏块的所有m行都已完成。作为最佳宏块匹配搜索的一部分,将每个块的累加值与现有的最小差值进行比较。尽管这一示例描述了4个相邻的重叠先前宏块的处理,但是,如果数据行相关的话,其他在搜索窗口中与第一块BLK 1810重叠的宏块也可与BLK 1810的数据装载一起处理。因此,也可处理当前正在被处理的宏块周围的16×16的窗口内的宏块。
图22D图示了绝对差总和(SAD)的操作1940和这些SAD值的求和。在此,参考宏块块11900的从行A到行P中的每一行及其在当前宏块1920中的对应行都接受SAD操作1940。SAD操作1940将表示每一行中的象素的数据进行比较,并计算表示两个行(一个来自先前宏块1900,一个来自当前宏块1920)之间的绝对差的值。来自这些SAD操作1900的所有行A到P的值在一起求和,作为块总和1942。这一块总和1942提供了整个先前宏块1900和当前宏块1920的绝对差的总和的累加值。基于这一块总和1942,运动估计算法可以确定先前宏块1900相对于这一当前宏块1920的类似程度和匹配接近程度。
尽管这一实施例一次对4个参考宏块进行操作,但是其他实施例可对不同数量的宏块进行操作,取决于所装载的象素数据量以及可用寄存器的数量。而且,在运动估计处理中可使用多种寄存器。例如,扩展寄存器例如具有MMX技术的mm寄存器和具有SSE2技术的XMM寄存器可用来保持类似于象素数据的组合型数据。在一个实施例中,64位宽的MMX寄存器可保持8个字节,如果每个象素具有8比特数据的话则可保持8个单个象素。在另一个实施例中,128位宽的XMM寄存器可保持16个字节,如果每个象素具有8比特数据的话则可保持16个单个象素。类似地,可保持组合型数据的其他大小例如32/128/256/512位宽的寄存器也可与本发明的实施例一起使用。另一方面,不需要组合型数据寄存器的计算例如常规整数运算可使用整数寄存器和整数硬件。
图23A是一个流程图,图示了用于预测和运动估计的方法的一个实施例。在方框2002处,初始化所跟踪的最小(min)值和该最小值的索引位置。对于这一实施例,所跟踪的min值和索引表示来自搜索窗口中的被处理的先前(参考)宏块中的哪一个是当前宏块的最接近的匹配。在方框2004处检查是否已完成当前帧中所有的所期望的宏块。如果是,就完成了运动估计的这一部分。如果未处理完所有的所期望的当前宏块,则在方框2006处选择当前帧的一个未处理的当前宏块。在方框2008处,块匹配从先前(参考)帧的搜索窗口中的第一个象素位置开始进行。在方框2010处,检查是否已完成了对搜索窗口的处理。在第一轮中,搜索窗口中的任何一个都未被处理。但是在随后的一轮中,如果整个搜索窗口都已被处理,则流程返回到方框2004,以确定是否有其他的当前宏块。
如果还未完成对整个搜索窗口的分析,则在方框2012处进行检查,以确定是否已处理完沿着这一x轴的行的所有象素。如果这一行已完成,则将行计数增加到下一行,所述流程返回到方框2010,以确定在搜索窗口中是否有这一新行上的更多宏块。但是,如果该行上的象素的所有存在的宏块并未都被处理,则在方框2014处检查是否已处理这一象素列和行处的宏块。如果该宏块已被处理,则增加列计数,并且所述流程返回到方框2012处,以确定是否已处理这一新列处的象素的宏块。但是如果这一列和行处的象素的宏块尚未被处理,则在这一参考宏块和当前宏块之间执行块匹配。
这一示例中的流程是按照沿着X和Y轴增加象素的行和列位置来描述的,为了简单起见每次增加一个象素。然而,对于本发明的一个实施例,每一轮可处理4个先前宏块。这样,沿着Y轴的列计数可以每轮增加4列。其他实施例还可以每次处理8、16、32等等个宏块,因此列计数相应地增加8、16、32等等列,以指向该算法的随后轮次的正确的象素位置。尽管这一实施例的块匹配处理采用了以有序的方式沿着X和Y轴的搜索,但是另一个实施例的块匹配可以使用另一种算法,例如使用不同模式的菱形搜索(diamond search),或对数搜索(log search)。
图23B是一个流程图,进一步描述了图23A的块匹配。在方框1222处,装载参考宏块和当前宏块的数据。对于一个实施例,将参考宏块数据装载为两个组合型数据块,包括多个连续象素的数据。在一个实施例中,每个组合型数据块包括8个数据元素。在方框2224处,按需要在所述数据块上执行右移合并操作,以获得正确的数据块。对于上述4个先前宏块一起被处理的实施例,右移合并操作可产生对应于位于每一个宏块中的行的数据块。相距一个象素的每一个相邻宏块的数据块也被移位一个象素,其中,对于搜索窗口中的每一个象素行,所述宏块看起来每次一个象素地滑动过搜索窗口。将方框2226、2228、2230和2232处的操作应用到正被一起处理的4个先前宏块上。对于一个实施例,在下一个操作发生前,所有的4个宏块都接受相同的操作。对于另一个实施例,在处理带有包括正确移位数据段的数据块的下一个先前宏块前,单个先前宏块可完成所有的操作。
在方框2226处,对于这些宏块的每一行,计算先前宏块和当前宏块的对应行之间的绝对差的总和。在方框2228处,将先前宏块中的所有行的绝对差的总和累加在一起。在方框2230处,将先前宏块的所累加的差值与现在的最小值进行比较。在方框2232处,如果这一先前宏块的差值小于现在的min值,则用这一新差值来更新所述min值。还更新所述索引,以反映这一先前宏块的位置,以表示该先前宏块是迄今为止最接近的匹配。但是,在方框2232处,如果新差值大于预设的min值,则该先前块不是与迄今已经匹配的块相比更接近的匹配。
根据本发明的运动估计算法的实施例还可利用现有硬件资源来提高处理器和系统性能。但是,随着技术的继续改进,本发明的实施例如果与更多数量的硬件资源和更快更高效的逻辑电路结合时,对性能的提高可具有更大的影响。因此,运动估计的一种高效的实施例可在不同代的处理器上具有不同和更大的影响。只是在现代处理器体系结构中简单地增加更多的资源并不能保证有更好的性能改进。通过还保持类似于所述运动估计和右移合并指令(PSRMRG)实施例的应用的效率,可获得更大的性能改进。
虽然为简化讨论上述示例一般是在64位宽的硬件/寄存器/操作数的上下文中描述的,但是其他实施例也可采用128位宽的硬件/寄存器/操作数,以执行寄存器合并操作、右移合并操作和运动估计计算。而且,本发明的实施例不局限于具体的硬件或技术类型例如MMX/SSE/SSE2技术,而是可与其他SIMD实现和其他图形数据操纵技术一起使用。尽管对于图20-23B所述的运动估计和块匹配实施例是在8个象素宽或8个数据元素宽的行(line或row)以及8行8列大小的宏块的上下文中描述的,但是其他实施例也可包括其他的维度。例如,行(line或row)可以是16个象素宽或16个数据元素宽,而宏块可以是16行16列。
在前述说明中,已参考其具体的示例性实施例来描述了本发明。然而,很清楚可对其进行各种修改和变化,而不会偏离本发明在所附权利要求中所阐明的更宽的精神和范围。因此,说明书和附图应被理解成描述性而非限制性的。
权利要求
1.一种方法,包括接收移位计数M;将具有第一集的第一操作数左移‘L-M’个数据元素,所述第一集具有L个数据元素;将具有第二集的第二操作数右移M个数据元素,所述第二集具有L个数据元素;以及合并所述已移位的第一集与所述已移位的第二集,以产生具有L个数据元素的结果数。
2.如权利要求1所述的方法,其中,所述第一操作数的所述移位产生包括与所述第一操作数的左边缘对齐的M个数据元素的所述已移位的第一集。
3.如权利要求2所述的方法,其中,所述左移从所述第一操作数去除所述‘L-M’个数据元素,并且其中,在所述第一操作数的右边缘插入0,以取代由所述被移出的‘L-M’个数据元素空出的空间。
4.如权利要求3所述的方法,其中,所述第二操作数的所述移位产生包括与所述第二操作数的右边缘对齐的‘L-M’个数据元素的所述已移位的第二集。
5.如权利要求4所述的方法,其中,所述右移从所述第二操作数去除所述M个数据元素,并且其中,在所述第二操作数的左边缘插入0,以取代由所述被移出的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所述的方法,其中,所述第一数据元素集的左移包括从所述第一数据操作数的左边缘去除数据元素,并且在所述第一数据操作数的右边缘插入0,以填充由所述被移出的数据元素空出的位置。
16.如权利要求15所述的方法,其中,所述第二数据元素集的右移包括从所述第二数据操作数的右边缘去除数据元素,并在所述第二操作数的左边缘插入0,以填充由所述被去除的数据元素空出的位置。
17.如权利要求16所述的方法,其中,所述合并包括将所述已移位的第一数据元素集和所述已移位的第二数据元素集逻辑或在一起。
18.如权利要求17所述的方法,其中,所述第一操作数和所述第二操作数装载有从连续数据块的相邻存储器位置来的数据,并且其中,所述第一数据元素集和所述第二数据元素集不重叠。
19.一种方法,包括接收移位合并指令和移位计数M;将具有第一L个数据元素集的第一操作数和具有第二L个数据元素集的第二操作数串接起来,以形成长为2L的数据元素块;将所述块右移M个位置,其中,丢弃最右端的M个数据元素;从所述已移位的块输出最右端的L个数据元素,作为所述移位合并指令的结果数。
20.如权利要求19所述的方法,其中所述右移还包括在所述块的最左边缘处插入0,以填充由所述M个数据元素空出的空间。
21.如权利要求20所述的方法,其中,所述第一操作数和所述第二操作数是组合型数据操作数。
22.如权利要求21所述的方法,其中,每个数据元素包括一个字节的数据。
23.如权利要求22所述的方法,其中,L等于8。
24.如权利要求23所述的方法,其中,M是0到15之间的值。
25.如权利要求24所述的方法,其中,所述块保持在临时组合型数据寄存器中,所述临时组合型数据寄存器具有可用于2L个数据元素的空间。
26.一种装置,包括译码器,用于译码右移合并指令;调度器,用于分发所述指令,以用于对包括第一L个数据元素集的第一操作数、包括第二L个数据元素集的第二操作数和移位计数M执行操作;以及执行单元,用于执行所述指令,所示指令使得所述执行单元将所述第一操作数左移‘L-M’个数据元素;将所述第二操作数右移M个数据元素;将所述已移位的第一操作数与所述已移位的第二操作数合并,以产生具有L个数据元素的结果数;
27.如权利要求26所述的装置,其中,所述右移合并指令由一个微指令组成。
28.如权利要求27所述的装置,其中,所述第一操作数的所述左移产生包括M个数据元素的已移位的第一数据集,所述M个数据元素与所述第一操作数的最左边缘对齐。
29.如权利要求28所述的装置,其中,所述左移从所述第一操作数去除‘L-M’个数据元素,并且其中,在所述第一操作数的右边缘插入0,以取代由所述被移出的‘L-M’个数据元素空出的空间。
30.如权利要求29所述的装置,其中,所述第二操作数的所述右移产生包括‘L-M’个数据元素的所述已移位的第二集,所述‘L-M’个数据元素与所述第二操作数的右边缘对齐。
31.如权利要求30所述的装置,其中,所述右移从所述第二操作数去除M个数据元素,并且其中,在所述第二操作数的左边缘插入0,以取代由所述被移出的M个数据元素空出的空间。
32.如权利要求31所述的装置,其中,所述第一操作数、所述第二操作数和所述结果数是组合型数据操作数。
33.如权利要求32所述的装置,其中,每个数据元素是一个字节的数据。
34.如权利要求33所述的装置,其中,L等于8。
35.如权利要求34所述的装置,其中,M是0到15之间的值。
36.如权利要求35所述的装置,其中,所述装置包括64位的体系结构。
37.如权利要求33所述的装置,其中,L等于6,M是0到31之间的值,并且所述装置包括128位的体系结构。
38.一种系统,包括存储器,用于存储数据和指令;处理器,在总线上耦合到所述存储器,所述处理器可操作来执行右移合并操作,所述处理器包括总线单元,用于从所述存储器接收指令;译码器,用于译码指令,以对具有第一集的第一操作数和具有第二集的第二操作数进行移位计数为M的右移合并,所述第一集具有K个数据元素,所述第二集具有L个数据元素;调度器,用于分发所述指令,以用于执行;以及执行单元,用于执行所述已译码的指令,所述已译码的指令使得所述执行单元将所述第一操作数左移‘K-M’个数据元素;将所述第二操作数右移M个数据元素;将所述已移位的第一操作数与所述已移位的第二操作数合并,以产生具有K个数据元素的结果数。
39.如权利要求38所述的系统,其中,K等于L,并且K和L都是8。
40.如权利要求38所述的系统,其中所述左移从所述第一操作数去除所述‘K-M’个数据元素,并且其中,在所述第一操作数的右边缘插入0,以取代由所述被移出的‘K-M’个数据元素空出的空间;并且所述右移从所述第二操作数去除所述M个数据元素,并且其中,在所述第二操作数的左边缘插入0,以取代由所述被移出的M个数据元素空出的空间。
41.如权利要求38所述的系统,其中,每个数据元素包括1个字节的数据,并且所述第一操作数和所述第二操作数是组合型数据操作数。
42.一种机器可读介质,其上包含有计算机程序,所述计算机程序可由机器执行,以执行一个包括如下步骤的方法接收移位计数M;将具有第一集的第一操作数左移‘L-M’个数据元素,所述第一集具有L个数据元素;将具有第二集的第二操作数右移M个数据元素,所述第二集具有L个数据元素;合并所述已移位的第一集与所述已移位的第二集,以产生具有L个数据元素的结果数。
43.如权利要求42所述的机器可读介质,其中所述左移从所述第一操作数去除所述‘L-M’个数据元素,并且其中,在所述第一操作数的右边缘插入0,以取代由所述被移出的‘L-M’个数据元素空出的空间;所述右移从所述第二操作数去除所述M个数据元素,并且其中,在所述第二操作数的左边缘插入0,以取代由所述被移出的M个数据元素空出的空间;并且所述合并包括对所述已移位的第一集和所述已移位的第二集执行逻辑或运算。
44.如权利要求43所述的机器可读介质,其中,所述第一操作数、所述第二操作数和所述结果数是组合型数据操作数。
全文摘要
本发明公开了一种并行数据右移合并方法。一个实施例的所述方法包括接收移位计数M。将具有第一集的第一操作数左移‘L-M’个数据元素,所述第一集具有L个数据元素。将具有第二集的第二操作数右移M个数据元素,所述第二集具有L个数据元素。将已移位的第一集与已移位的第二集合并,以产生具有L个数据元素的结果数。
文档编号G06F7/24GK1522401SQ02813248
公开日2004年8月18日 申请日期2002年10月28日 优先权日2001年10月29日
发明者朱利恩·塞博特, 小威廉·梅西, 埃里克·迪贝斯, 辉·源, 梅西, 迪贝斯, 朱利恩 塞博特 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1