CN101438598B - 用于产生两个独立绝对差和的指令 - Google Patents
用于产生两个独立绝对差和的指令 Download PDFInfo
- Publication number
- CN101438598B CN101438598B CN2007800164584A CN200780016458A CN101438598B CN 101438598 B CN101438598 B CN 101438598B CN 2007800164584 A CN2007800164584 A CN 2007800164584A CN 200780016458 A CN200780016458 A CN 200780016458A CN 101438598 B CN101438598 B CN 101438598B
- Authority
- CN
- China
- Prior art keywords
- register
- source
- sad
- stored
- value
- 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
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N7/00—Television systems
- H04N7/12—Systems in which the television signal is transmitted via one channel or a plurality of parallel channels, the bandwidth of each channel being less than the bandwidth of the television signal
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/42—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
- H04N19/43—Hardware specially adapted for motion estimation or compensation
Abstract
本发明提供用于在接收单个指令(505、705)时执行两个独立的绝对差和(SAD)运算的方法及设备。可并行执行所述两个运算。将运算过程值存储在两个源寄存器(405、410)中且将结果存储到目的寄存器(425)中。所述源寄存器及目的寄存器各自具有两个可独立存取的部分,由此第一SAD运算(401)可存取第一部分,而第二独立SAD运算(402)可同时存取所述寄存器的第二部分。对所述源寄存器的第一部分中的值执行所述第一SAD运算,将所述结果存储到所述目的寄存器的第一部分中。对所述源寄存器的第二部分中的值执行所述第二SAD运算,将所述结果存储到所述目的寄存器的第二部分中。所述值可包含像素值。
Description
技术领域
本发明实施例大体来说涉及一种用于产生两个独立绝对差和的指令。
背景技术
当前,运动估计是广泛用于对视频信息进行编码/压缩的一种方法。在基于块的运动估计中,每一视频帧被分割为块(像素阵列),例如16x16、8x8或4x4像素的块。图1是一种运动估计方法的概念图。如图1中所示,对于当前帧105的当前块110来说,在参考帧115(例如,所述当前帧之前或之后的帧)的搜索区域120中执行搜索以找出其最匹配的块(根据像素值)。当在参考帧115中找到最匹配的块125时,使用运动向量130(指示最匹配的块125相对于当前块110的位移)及与当前块110的像素值差来对所述当前块进行编码。针对所述当前帧中的每一块重复此过程。
用于确定参考帧中的与当前块最匹配的块的技术通常使用使用绝对差和(SAD)运算确定的准则(例如,平均绝对误差(MAE)或平均绝对差(MAD)准则)。在这些技术中,计算当前块与参考帧的搜索区域中的每一块之间的像素值的绝对差和。对具有像素值Ai的当前块及具有像素值Bi的参考块执行的SAD运算可由以下方程式表示:
Σ|Ai-Bi|=C.
针对所述搜索区域中的每一参考块执行SAD运算且将具有最低SAD值(C)的参考块选择为最匹配块。然而,运动估计中所需要的大量SAD运算在计算上密集且可消耗大量的处理时间及资源。因此,需要一种用以执行SAD运算的高效方式。
发明内容
所揭示的某些方面提供一种用于在接收到单个SAD指令时执行两个独立SAD运算的方法及设备。在某些实施例中,并行执行所述两个独立SAD运算。所述SAD运算处理存储在两个源寄存器中的源值,其中将所述运算的两个和结果加载到目的寄存器中。在某些实施例中,所述源寄存器及目的寄存器各自包含一对经对准的寄存器,所述对中的第一寄存器称作第一部分,而所述对中的第二寄存器称作所述源寄存器或目的寄存器的第二部分。在某些实施例中,可独立地存取一对经对准的寄存器的每一部分(寄存器),使得第一SAD运算可存取所述源寄存器或目的寄存器的第一部分(寄存器),而第二独立SAD运算可同时(并行)存取所述源寄存器或目的寄存器的第二部分。
对存储在所述第一源寄存器的第一部分中的第一组值及存储在所述第二源寄存器的第一部分中的第二组值执行所述第一SAD运算。然后,将所述第一SAD运算的结果存储到所述目的寄存器的第一部分中。对存储在所述第一源寄存器的第二部分中的第三组值及存储在所述第二源寄存器的第二部分中的第四组值执行所述第二SAD运算。然后,将所述第二SAD运算的结果存储到所述目的寄存器的第二部分中。
在某些实施例中,所述两个独立SAD运算所处理的值为视频帧的块的像素值。在某些实施例中,所述两个独立SAD运算用于视频压缩或运动估计。
附图说明
图1是一种运动估计方法的概念图;
图2显示对当前块及参考块执行的SAD运算的概念图;
图3显示并行块处理的概念图;
图4显示其中并行执行两个独立SAD运算的计算机架构的概念图;
图5显示在图4中所示的计算机架构中产生两个独立SAD结果的单个SAD指令的指令语法;
图6显示其中并行执行两个独立SAD运算的替代性计算机架构的概念图;
图7显示在图6中所示的替代性计算机架构中产生两个独立SAD结果的单个SAD指令的指令语法;
图8是显示可用于在硬件中实施SAD指令的编译器本征及编码的表格;
图9是一种用于使用两个源寄存器及一目的寄存器并行执行两个独立SAD运算的方法的流程图;及
图10显示用于某些实施例中的通用计算机架构的概念图。
具体实施方式
本文所用“实例性”一词意指“用作实例、例证或例示”。本文中说明为“实例性”的任一实施例未必解释为优选或比其它实施例有利。
图2显示对当前帧的当前块205及参考帧的参考块210执行的SAD运算的概念图。在图2的实例中,帧的块包含4x4像素阵列,每一像素包含1字节的像素值。在其它实施例中,块包含不同大小的像素阵列,每一像素包含不同大小的像素值。
如图2中所示,当前块205包含多个像素A0-A15且参考块210包含多个像素B0-B15。对所述当前及参考块执行的SAD运算首先确定所述当前与参考块205及210的对应像素的像素值之间的差(即,A0-B0、A1-B1、A2-B2,...A15-B15)。然后,所述SAD运算确定一组绝对差,其包含所述当前与参考块205及210的对应像素的像素值之间的绝对差(即,|A0-B0|、|A1-B1|、|A2-B2|,...|A15-B15|)。最后,所述SAD运算确定所述组绝对差的和(即,|A0-B0|+|A1-B1|+|A2-B2|...+|A15-B15|)。
如本文中所使用,对包含至少两个值(例如,像素值A0及A1)的第一组值及包含至少两个值(例如,像素值B0及B1)的第二组值执行SAD运算,所述SAD运算确定一组绝对差,其包含所述第一及第二组值的特定值之间的至少两个绝对差(例如,|A0-B0|及|A1-B1|)及所述组至少两个绝对差的和(例如,|A0-B0|+|A1-B1|)。在某些实施例中,所述第一及第二组值各自包含两个以上的值(例如,像素值A0-A15及B0-B15)。对第一组值Ai及第二组值Bi执行的SAD运算可由以下方程式表示:
Σ|Ai-Bi|=C
其中C表示所述SAD运算的结果(即,所产生的值)。
通常通过软件或硬件(例如,中央处理器、微处理器、数字信号处理器或类似装置)来实施针对运动估计执行的SAD运算。取决于所述软件或硬件如何经配置来使用SAD运算将当前块与多个参考块相比较,可串行或并行进行块比较。在串行块比较中,在与第二参考块的任何像素的比较开始之前,将当前块的像素与第一参考块的所有对应像素相比较。
图2中图解说明串行块比较的实例,其中在与来自另一参考块的像素值的比较开始之前,将来自当前块205的所有像素值(A0-A15)与来自参考块210的所有像素值(B0-B15)相比较。将来自当前块205的像素值(A0-A15)及来自参考块210的像素值(B0-B15)从存储器加载到寄存器以在来自另一参考块的任何像素值被从存储器加载到所述寄存器(但通常需要两个或两个以上加载循环,此取决于所述寄存器的大小)之前完成所述参考块的处理。
在其它实施例中,可执行并行块比较,从而将当前块的第一子组像素(例如,第一行像素)与第一参考块的对应像素子组(例如,第一行像素)相比较,且还同时与第二参考块的对应像素子组(例如,第一行像素)相比较。然后,将所述当前块的下一子组像素(例如,第二行像素)与所述第一参考块的对应下一子组像素(例如,第二行像素)相比较且还同时与第二参考块的对应下一子组像素(例如,第二行像素)相比较等等,直到处理完所述当前以及第一及第二参考块的每一像素。因此,在并行块比较中,可并行执行当前块与两个或两个以上参考块之间的比较。应注意,在并行块比较中,可减少数据检索时间,因为从存储器检索较少数据。举例来说,值A0-A3被一次检索且用于两个SAD运算中(而在串行块比较中,检索值A0-A7需要较长检索时间)。
图3显示并行块处理的概念图,其中对当前块的第一行305(包含像素A0-A3)及第一参考块的第一行310(包含像素B0-B3)执行第一SAD运算,且对当前块305的第一行及第二参考块的第一行315(包含像素C0-C3)执行第二SAD运算。在某些实施例中,并行执行所述第一及第二SAD运算。在图3的实例中,帧的块包含4x4像素阵列,所述阵列中的每一行包含4个像素,每一像素包含1字节的像素值。在其它实施例中,块包含不同大小的像素阵列,所述阵列中的每一行包含不同数量的像素,每一像素包含不同大小的像素值。
通常将来自当前块205的像素值(A0-A3)及来自第一及第二参考块的像素值(B0-B3及C0-C3)加载到寄存器中以进行处理。对所述当前块的第一行305及所述第一参考块的第一行310(包含像素B0-B3)执行的第一SAD运算包含确定对应像素之间的绝对差(即,|A0-B0|、|A1-B1|、|A2-B2|及|A3-B3|)及将所述绝对差相加(即,|A0-B0|+|A1-B1|+|A2-B2|+|A3-B3|)。对所述当前块的第一行305及所述第二参考块的第一行315(包含像素C0-C3)执行的第二SAD运算包含确定对应像素之间的绝对差(即,|A0-C0|、|A1-C1|、|A2-C2|及|A3-C3|)及将所述绝对差相加(即,|A0-C0|+|A1-C1|+|A2-C2|+|A3-C3|)。然后,对所述当前及第一及第二参考块的第二行像素执行第三及第四SAD运算等等,直到处理完所述当前块的所有像素。
不管使用SAD运算串行还是并行将当前块与参考块相比较,如果可通过减少使用处理时间及资源高效地执行SAD运算,那么可优化运动估计。在某些实施例中,使用用于存储两个独立SAD运算的结果的目的寄存器并行执行所述两个独立SAD运算。在某些实施例中,使用单个指令来规定所述两个独立SAD运算,其中所述单个指令的执行产生两个独立的SAD结果。
图4显示计算机架构400的概念图,其中使用两个源寄存器及一目的寄存器并行执行两个独立SAD运算401及402。应注意,图4仅出于例示的目的且图解说明SAD运算的分离步骤。在其它实施例中,SAD运算不通过多个步骤(如图4中所示)来执行,而是在单个步骤中执行。如图4中所示,对加载到第一源寄存器Rss405的值X0-X7及加载到第二源寄存器Rtt410的值Y0-Y7执行所述两个SAD运算401及402。如本文中所提及,由SAD运算处理的输入值(例如,X0-X7及Y0-Y7)称作源值。源寄存器中的每一值具有相对于所述源寄存器中的其它值的特定排序或位置(第一值、第二值等)。如果所述第一源寄存器中的特定值与所述第二源寄存器中的特定值在所述第一及第二源寄存器中具有相同的排序或位置,那么将其视为“对应值”。举例来说,所述第一源寄存器中的第一值与所述第二源寄存器中的第一值为对应值。将所述两个SAD运算401及402的结果加载到目的寄存器Rdd425中。
可在串行块处理中使用所述SAD运算401及402(例如,其中值X0-X7等于值A0-A7,而值Y0-Y7等于图2的值B0-B7)。可在并行块处理中使用所述SAD运算401及402(例如,其中值X0-X3等于值A0-A3,值X4-X7也等于值A0-A3,值Y0-Y3等于值C0-C3,且值Y4-Y7等于图3的值B0-B3)。在其它实施例中,在其它类型的处理中使用所述SAD运算401及402。在某些实施例中,所述SAD运算401及402处理包含两个向量的值并产生超标量值结果。
对存储在第一源寄存器Rss405的第一部分中的第一组值X0-X3及存储在第二源寄存器Rtt410的第一部分中的第二组值Y0-Y3执行第一SAD运算401。所述第一SAD运算401包含确定第一组绝对差,其包含存储在所述第一及第二源寄存器的第一部分中的第一及第二组值中的对应值之间的绝对差(即,|X0-Y0|、|X1-Y1|、|X2-Y2|及|X3-Y3|)并将所述第一组绝对差相加(即,|X0-Y0|+|X1-Y1|+|X2-Y2|+|X3-Y3|)。将所述第一SAD运算401的和结果存储在目的寄存器Rdd425的第一部分(W0)中。
对存储在第一源寄存器Rss405的第二部分中的第三组值X4-X7及存储在第二源寄存器Rtt410的第二部分中的第四组值Y4-Y7执行第二SAD运算402。所述第二SAD运算402包含确定第二组绝对差,其包含存储在所述第一及第二源寄存器的第二部分中的第三及第四组值中的对应值之间的绝对差(即,|X4-Y4|、|X5-Y5|、|X6-Y6|及|X7-Y7|)并将所述第二组绝对差相加(即,|X4-Y4|+|X5-Y5|+|X6-Y6|+|X7-Y7|)。将所述第二SAD运算402的和结果存储在目的寄存器Rdd425的第二部分(W1)中。
在某些实施例中,图4中所图解说明的处理步骤由具有经配置以执行上文所说明的处理步骤的组件(例如,算术逻辑单元)的执行单元实施。举例来说,多个AD组件415可经配置以执行绝对差(AD)运算,且多个加法组件420可经配置以执行加法运算。在其它实施例中,图4中图解说明的处理步骤由算术逻辑单元内所包含的执行单元实施。
在某些实施例中,由所述执行单元用来执行运算的所述寄存器的架构使得可将一个或一个以上寄存器作为单个寄存器或作为经对准的寄存器对来存取。举例来说,所述寄存器可包含多个32位寄存器,可将其作为单个寄存器或作为经对准的64位寄存器对来存取,使得指令可处理32位或64位值。在某些实施例中,所述源寄存器及目的寄存器(Rss、Rtt及Rdd)各自包含一对经对准的寄存器,所述对中的第一寄存器称作第一部分,而所述对中的第二寄存器称作所述源寄存器或目的寄存器的第二部分。在某些实施例中,可独立地存取一对经对准的寄存器的每一部分(寄存器),使得第一SAD运算可存取所述源寄存器或目的寄存器的第一部分(例如,以检索并处理存储在所述第一部分中的值或将值加载到所述第一部分中),而第二独立SAD运算可同时(并行)存取所述源寄存器或目的寄存器的第二部分(例如,以检索并处理存储在所述第一部分中的值或将值加载到所述第二部分中)。在某些实施例中,所述第一SAD运算存取/使用两个源寄存器及一目的寄存器的第一部分,而所述第二SAD运算存取/使用所述两个源寄存器及所述目的寄存器的第二部分,可独立地存取每一寄存器的第一及第二部分。
举例来说,假设所述第一及第二源寄存器Rss及Rtt中的每一值(X0-X7及Y0-Y7)包含1个字节,使得所述第一及第二源寄存器Rss及Rtt为64位(双字)经对准的寄存器对且每一加法组件420为32位加法器。因此,所述第一SAD运算存取存储在所述第一源寄存器Rss的第一32位(单字)部分/寄存器中的值X0-X3且存取存储在所述第二源寄存器Rtt的第一32位(单字)部分/寄存器中的值Y0-Y3。此外,所述第二SAD运算同时存取存储在所述第一源寄存器Rss的第二32位部分/寄存器中的值X4-X7并存取存储在所述第二源寄存器Rtt的第二32位部分/寄存器中的值Y4-Y7。所述目的寄存器Rdd将为64位(双字)经对准的寄存器对。将所述第一SAD运算的和结果存储到第一32位部分/寄存器(用于字0的“W0”)中且将所述第二SAD运算的和结果存储到所述目的寄存器Rdd的第二32位部分/寄存器(用于字1的“W1”)中。
在某些实施例中,图4中所图解说明的两个独立SAD运算可由单个SAD指令规定。图5显示在图4中所示的计算机架构400中产生两个独立SAD结果的单个SAD指令的指令语法505。图5还显示当接收并执行所述单个SAD指令(例如,通过处理器的执行单元)时所产生的行为/所得步骤540。
所述指令语法505包括规定SAD运算的指令识别符510(例如,“sad”)。指令语法505还包括:目的寄存器识别符515(例如,Rdd),其识别存储所述两个独立SAD结果的寄存器;及两个源寄存器识别符520(例如,Rss及Rtt),其识别存储将由所述两个SAD运算处理的源值的两个寄存器。在某些实施例中,指令语法505可进一步包括表征所述源值(输入)或所述SAD运算的所产生的值(输出)的识别符。举例来说,可使用“vr”(代表“减小的向量”)来指示所述源值包含两个向量且所产生的结果为超标量值。作为其它实例,可使用“ub”(针对“无符号字节”)来指示所述源值包含无符号字节值。
在图5的行为/所得步骤510部分中说明执行单个SAD指令所导致的过程。所述所得步骤包括所述目的寄存器的初始化(Rdd=0),用于处理存储在所述源寄存器的第一部分中的值的第一组步骤545,及用于处理存储在所述源寄存器的第二部分中的值的第二组步骤550。所述第一及第二组处理步骤各自包括绝对差运算565、所述绝对差相加到目的寄存器560中及运算555的重复(达一特定迭代数量)。在某些实施例中,并行执行所述第一及第二组处理步骤。
举例来说,所述第一组处理步骤545包括:确定存储在所述源寄存器Rss及Rtt的第一部分(在字节0到3处)中的值的绝对差(“ABS((Rss.ub[i]-Rtt.ub[i])”);将所述绝对差相加到所述目的寄存器的第一部分(W0)中(“Rdd.w[0]=(Rdd.w[0]+ABS((Rss.ub[i]-Rtt.ub[i])))”);及重复所述运算达一特定迭代数量(“其中i=0;i<4;i++”)。举例来说,所述第二组处理步骤550包括:确定存储在所述源寄存器Rss及Rtt的第二部分(在字节4到7处)中的值的绝对差(“ABS((Rss.ub[i]-Rtt.ub[i])”);将所述绝对差相加到所述目的寄存器的第二部分(W1)中(“Rdd.w[1]=(Rdd.w[1]+ABS((Rss.ub[i]-Rtt.ub[i])))”);及重复所述运算达一特定迭代数量(“其中i=4;i<8;i++”)。
图6显示替代性计算机架构600的概念图,其中使用两个源寄存器Rss及Rtt及一目的寄存器Rdd并行执行两个独立SAD运算。应注意,图6仅出于例示的目的且图解说明SAD运算的分离步骤。在其它实施例中,SAD运算不通过多个步骤(如图6中所示)来执行,而是在单个步骤中执行。
替代性计算机架构600类似于图4的计算机架构400,除替代性计算机架构600包括用于每一SAD运算的累加循环605。累加循环605允许两个或两个以上SAD运算的和结果累加到所述目的寄存器Rdd的特定部分中。举例来说,假设对所述两个源寄存器的第一部分中的源值执行第一SAD运算,所述运算产生被存储到所述目的寄存器的第一部分中的第一和结果。那么此后,将新的源值加载到所述两个源寄存器的第一部分中且对所述新源值执行第二SAD运算以产生第二和结果。累加循环605允许所述第二和结果与存储在所述目的寄存器的第一部分中的第一和结果累加/相加。然后,将所述所累加的和(第一和+第二和)存储回所述目的寄存器的相同第一部分。应注意,替代性计算机架构600中的加法组件420还从目的寄存器Rdd接收输入。
因此,通过使用累加循环605,可将当前SAD运算的当前和结果与一个或一个以上先前SAD运算的一个或一个以上先前和结果(通常包含非零值)相加/累加。在某些实施例中,将当前SAD运算的和结果与所述目的寄存器的特定部分中的非零值相加/累加(所述非零值包含一个或一个以上先前SAD运算的一个或一个以上先前和结果),其中然后将所述所累加的和(当前和+一个或一个以上先前和)存储回所述目的寄存器的相同部分。
图7显示在图6中所示的替代性计算机架构600中产生两个独立SAD结果的单个SAD指令的指令语法705。图7还显示当接收并执行所述单个SAD指令(例如,通过处理器的执行单元)时所产生的行为/所得步骤740。应注意,在图6的所述替代性计算机架构600的指令语法705中,需要来自寄存器Rss、Rtt及Rdd的值的三个输入。此与图4的计算机架构400的指令语法505形成对比,其仅需要两个输入(来自寄存器Rss及Rtt中的值)。还应注意,在指令语法505的所得步骤540中,将所述目的寄存器初始化为零(Rdd=0),因为指令语法505的所得步骤540不累加当前与先前SAD运算的和。然而,在指令语法705的所得步骤740中,不将所述目的寄存器初始化为零,因为所述目的寄存器可能保存一个或一个以上先前SAD运算的和且指令语法705的所得步骤740累加当前与先前SAD运算的和。
和的累加在其中需要当前块与参考块的所有像素的绝对差的总和的块比较中尤其有益。每一块比较需要多个SAD运算,因为单个SAD运算通常仅可处理当前及参考块的一部分。举例来说,对于具有四行像素的当前及参考块来说,通常需要四个SAD运算(一个SAD运算用于每一行)来将所述当前与参考块相比较。因此,必须确定所述四个SAD运算的结果的总和(即,所述四个和结果的累加)。累加循环605允许在每一SAD运算之后累加对相同当前及参考块执行的分离SAD运算的和结果。因此,不需要稍后通过分离的指令将所述分离SAD运算的和结果相加在一起。
图8是显示可用于在硬件中实施SAD指令的编译器本征及编码的表格。当用高级语言(例如C语言)写入代码时,所述编译器本征对于编程师来说有用。所述编程师可使用所述编译器本征来指导编译器在汇编级使用对应于Rdd=vrsadub(Rss,Rtt)或Rxx+=vrsadub(Rss,Rtt)(如图8中所示)的指令。所述编码可用于设计处理器(例如,数字信号处理器)的指令单元。在其它实施例中,不同的编译器本征及编码用于在硬件中实施SAD指令。
图9是一种用于使用两个源寄存器及一目的寄存器并行执行两个独立SAD运算的方法900的流程图。在某些实施例中,在软件或硬件中实施(例如,通过处理器的执行单元)方法900的某些步骤。方法900的步骤仅出于例示性目的且步骤的次序或编号可在其它实施例中改变或互换。
当接收单个SAD指令(在905处)时,方法900开始,所述指令规定SAD运算、存储源值的第一及第二源寄存器及用以存储所述SAD运算结果(例如,“Rdd=vrsadub(Rss,Rtt)”)的目的寄存器。响应于接收所述单个SAD指令,然后所述方法900执行两个独立的SAD运算。为进行此运算,所述方法从存储器将第一组值(例如,X0-X3)加载到所述第一源寄存器的第一部分中,将第二组值(例如,Y0-Y3)加载到所述第二源寄存器的第一部分中,将第三组值(例如,X4-X7)加载到所述第一源寄存器的第二部分中且将第四组值(例如,Y4-Y7)加载到所述第二源寄存器的第二部分中(在907处)。然后,所述方法执行用于对存储在所述源寄存器的第一部分中的源值执行第一SAD运算的第一组步骤(910-920)及用于对存储在所述源寄存器的第二部分中的源值执行第二SAD运算的第二组步骤(925-935)。在某些实施例中,并行执行所述第一及第二组步骤(即,所述第一及第二SAD运算)。
在步骤910处,方法900确定第一组绝对差,其包含存储在所述第一及第二源寄存器的所述第一部分中的第一及第二组值中的对应值的绝对差。然后,所述方法将所述第一组绝对差相加(在915处)。视情况,然后,所述方法将所述第一组绝对差的和与存储在目的寄存器的第一部分中的一个或一个以上先前SAD运算的一个或一个以上先前和(通常为非零值)相加/累加(在917处)。然后,所述方法将所述和或累加结果加载到所述目的寄存器的第一部分中(在920处)。
在步骤925处,方法900确定第二组绝对差,其包含存储在所述第一及第二源寄存器的所述第二部分中的第三及第四组值中的对应值的绝对差。然后,所述方法将所述第二组绝对差相加(在930处)。视情况,然后,所述方法将所述第二组绝对差的和与存储在目的寄存器的第二部分中的一个或一个以上先前SAD运算的一个或一个以上先前和(通常为非零值)相加/累加(在932处)。然后,所述方法将所述和或累加结果加载到所述目的寄存器的第二部分中(在935处)。然后,所述方法结束。
图10显示用于某些实施例中的通用计算机架构1000的概念图。架构1000包括存储器1010、处理单元1030及将存储器1010耦合到处理单元1030的一个或一个以上总线1020。
存储器1010存储数据(例如,视频帧的块的像素值)及指令,包括至少一个SAD指令。数据及指令在存储器1010中具有用于从存储器1010检索所述数据或指令的特定地址。存储器的寻址方案在所属技术领域中众所周知且在此不予以详细论述。通过总线1020将存储器1010中的数据及/或指令加载到处理单元1030中。
处理单元1030包含定序器1035,用于多个执行单元1045的多个管线1040、通用寄存器堆1050(包含多个通用寄存器)及控制寄存器堆1060。处理单元1030可包含中央处理器、微处理器、数字信号处理器及类似装置。在某些实施例中,所述多个执行单元1045包括经配置以执行SAD运算的一个或一个以上执行单元(称作SAD执行单元)。SAD执行单元包含经配置以执行SAD运算所需要的处理步骤的组件(例如算术逻辑单元)(例如用于执行绝对差运算的多个AD组件415及用于将值累加/相加的多个加法组件420)。在其它实施例中,SAD执行单元包含于算术逻辑单元中。
通常,每一指令包含关于处理指令所需要的执行单元1045的类型的信息,其中每一执行单元通常仅可处理特定类型的指令。定序器1035从存储器1010接收指令,将所述指令解码、确定用于每一指令的适当执行单元1045(使用所述指令中所包含的信息)。在针对指令作出此确定之后,定序器1035向适当的执行单元1045发送控制信号且将所述指令输入到适当管线1040中以通过所述适当执行单元1045进行处理。
接收指令的每一执行单元1045使用通用寄存器堆1050执行所述指令。如所属技术领域中众所周知,通用寄存器堆1050包含寄存器阵列。从存储器1010检索执行指令所需要的任何数据(例如,像素值)且将其加载到通用寄存器堆1050中的寄存器中。在通过执行单元1045执行指令之后,将所得数据(例如,SAD运算结果)存储到所述通用寄存器堆1050中且然后将其加载并存储到存储器1010中。通过总线1020将数据加载到存储器1010中及从存储器1010加载数据。为执行指令,执行单元1045还可使用控制寄存器堆1060。控制寄存器1060通常包含一组专用寄存器,例如修改器、状态及断定寄存器。控制寄存器1060还可用于存储与软件或硬件循环(例如,循环计数)(反复计数)相关的信息。
举例来说,如果定序器1035接收SAD指令,那么定序器1035将所述指令输入到适当管线1040中以通过SAD执行单元1045进行处理。此外,将执行所述SAD指令所需要的数据(例如,像素值)加载到通用寄存器堆1050中的两个源寄存器中。因此,所述SAD指令致使处理单元1030(使用SAD执行单元1045)执行两个独立SAD运算并产生两个和结果。将所述两个和结果存储到通用寄存器堆1050中的目的寄存器,然后,通过总线1020将其加载并存储到存储器1010中。在某些实施例中,SAD执行单元1045所使用的所述源寄存器及目的寄存器各自包含可单独存取的一对经对准的寄存器。
所属技术领域中的技术人员应了解,可使用各种不同技术及技法中的任一种来表示信息及信号。举例来说,以上说明通篇可能提及的数据、指令、命令、信息、信号、位、符号、及码片均可由电压、电流、电磁波、磁场或粒子、光场或粒子或其任一组合表示。
所属技术领域中的技术人员应进一步了解,结合本文所揭示实施例而说明的各种例示性逻辑块、模块、电路及算法步骤可实施为电子硬件、计算机软件或两者的组合。为清楚地图解说明硬件与软件的此种可互换性,上文就其功能性大体说明了各种例示性组件、块、模块、电路及步骤。所述功能性实施为硬件还是软件取决于特定应用及施加于整个系统上的设计约束条件。所属技术领域中的技术人员可针对每一特定应用采用不同的方法执行所说明的功能性,但所述实施决策不应被解释为背离本发明的范围。
结合本文所揭示实施例说明的各种例示性逻辑块、模块及电路可通过以下装置实施或执行:通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑装置、离散门或晶体管逻辑、离散硬件组件或其设计用于执行本文所说明功能的任一组合。通用处理器可以是微处理器,但另一选择为,所述处理器可以是任一常规处理器、控制器、微控制器或状态机。处理器也可实施为计算装置的组合,例如DSP与微处理器的组合、多个微处理器的组合、一个或一个以上微处理器与DSP核心的联合或任何其它此类配置。
结合本文所揭示实施例说明的方法或算法的步骤可直接包含于硬件中、由处理器执行的软件模块中或两者的组合中。软件模块可驻存在RAM存储器、快闪存储器、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可抽换式磁盘、CD-ROM或所属技术领域中已知的任一其它形式的存储媒体中。例示性存储媒体耦合到所述处理器,使得所述处理器可从所述存储媒体读取信息及向所述存储媒体写入信息。另一选择为,所述存储媒体可与所述处理器成一体。所述处理器及所述存储媒体可驻存于ASIC中。ASIC可驻存于用户终端中。另一选择为,所述处理器及所述存储媒体可作为离散组件驻存于用户终端中。
提供对所揭示实施例的以上说明旨在使所属技术领域中的技术人员能够制作或使用本发明。所属技术领域中的技术人员将容易地明了对这些实施例的各种修改,且本文所定义的一般原理也可在背离本发明的精神或范围的情况下应用于其它实施例。因此,并非打算将本发明限定为本文所示实施例,而是赋予其与本文所揭示原理及新颖特征相一致的最宽广范围。
Claims (21)
1.一种用于执行绝对差和SAD运算的方法,所述方法包含:
接收规定第一源寄存器、第二源寄存器和不同于所述第一源寄存器和所述第二源寄存器的目的寄存器的单个SAD指令,所述目的寄存器用以存储SAD运算结果;及
响应于接收到所述单个SAD指令,执行两个独立SAD运算,第一SAD运算的结果存储在所述目的寄存器的第一部分中且第二SAD运算的结果存储在所述目的寄存器的第二部分中,其中所述目的寄存器包含第一对经对准的寄存器,所述第一对经对准的寄存器中的第一寄存器称作所述目的寄存器的所述第一部分且所述第一对经对准的寄存器中的第二寄存器称作所述目的寄存器的所述第二部分,
其中,执行所述两个独立SAD运算进一步包括:对存储在所述第一源寄存器的第一部分中及所述第二源寄存器的第一部分中的源值执行所述第一SAD运算,以及,对存储在所述第一源寄存器的第二部分中及所述第二源寄存器的第二部分中的源值执行所述第二SAD运算,
其中,存储在所述第一源寄存器的第一部分中的源值与存储在所述第二源寄存器的第一部分中的源值是具有相同排序或位置的对应值,以及,存储在所述第一源寄存器的第二部分中的源值与存储在所述第二源寄存器的第二部分中的源值是具有相同排序或位置的对应值。
2.如权利要求1所述的方法,其中并行执行所述两个独立SAD运算。
3.如权利要求1所述的方法,其中所述第一及第二源寄存器的每一者包含经对准的寄存器对。
4.如权利要求3所述的方法,其中所述第一源寄存器、所述第二源寄存器和所述目的寄存器的每一者包括两个独立的可存取部分。
5.如权利要求3所述的方法,其中:
执行所述第一SAD运算进一步包含确定第一组绝对差的和,所述第一组绝对差包含存储在所述第一及第二源寄存器的所述第一部分中的对应源值的所述绝对差;且
执行所述第二SAD运算进一步包含确定第二组绝对差的和,所述第二组绝对差包含存储在所述第一及第二源寄存器的所述第二部分中的对应源值的所述绝对差。
6.如权利要求3所述的方法,其中:
存储在所述第一及第二源寄存器中的源值包含视频帧的像素值;且
所述第一源寄存器存储当前帧的当前块的像素值且所述第二源寄存器存储参考帧的两个不同块的像素值。
7.如权利要求1所述的方法,其中执行所述两个独立SAD运算包含:
对分别存储在所述第一源寄存器的第一部分和所述第二源寄存器的第一部分中的另外的两个源值执行第三SAD运算;
将存储在所述目的寄存器的所述第一部分中的所述第三SAD运算的结果与所述第一SAD运算的所述结果相加求和并将所述和存储在所述目的寄存器的所述第一部分中;
对分别存储在所述第一源寄存器的第二部分和所述第二源寄存器的第二部分中的另外的两个源值执行第四SAD运算;及
将存储在所述目的寄存器的所述第二部分中的所述第四SAD运算的结果与所述第二SAD运算的所述结果相加求和并将所述和存储在所述目的寄存器的所述第二部分中。
8.一种用于执行绝对差和SAD运算的设备,所述设备包含:
用于接收规定第一源寄存器、第二源寄存器和不同于所述第一源寄存器和所述第二源寄存器的目的寄存器的单个SAD指令的装置,所述目的寄存器用以存储SAD运算结果;及
用于响应于接收到所述单个SAD指令而执行两个独立SAD运算的装置,第一SAD运算的结果存储在所述目的寄存器的第一部分中且第二SAD运算的结果存储在所述目的寄存器的第二部分中,其中所述目的寄存器包含第一对经对准的寄存器,所述第一对经对准的寄存器中的第一寄存器称作所述目的寄存器的所述第一部分且所述第一对经对准的寄存器中的第二寄存器称作所述目的寄存器的所述第二部分,
其中,执行所述两个独立SAD运算进一步包括:对存储在所述第一源寄存器的第一部分中及所述第二源寄存器的第一部分中的源值执行所述第一SAD运算,以及,对存储在所述第一源寄存器的第二部分中及所述第二源寄存器的第二部分中的源值执行所述第二SAD运算,
其中,存储在所述第一源寄存器的第一部分中的源值与存储在所述第二源寄存器的第一部分中的源值是具有相同排序或位置的对应值,以及,存储在所述第一源寄存器的第二部分中的源值与存储在所述第二源寄存器的第二部分中的源值是具有相同排序或位置的对应值。
9.如权利要求8所述的设备,其中并行执行所述两个独立SAD运算。
10.如权利要求8所述的设备,其中所述第一及第二源寄存器的每一者包含经对准的寄存器对。
11.如权利要求10所述的设备,其中所述第一源寄存器、所述第二源寄存器和所述目的寄存器的每一者包括两个独立的可存取部分。
12.如权利要求10所述的设备,其中:
所述用于执行所述第一SAD运算的装置进一步包含用于确定第一组绝对差的和的装置,所述第一组绝对差包含存储在所述第一及第二源寄存器的所述第一部分中的对应源值的绝对差;且
所述用于执行所述第二SAD运算的装置进一步包含用于确定第二组绝对差的和的装置,所述第二组绝对差包含存储在所述第一及第二源寄存器的所述第二部分中的对应源值的绝对差。
13.如权利要求10所述的设备,其中:
存储在所述第一及第二源寄存器中的源值包含视频帧的像素值;且
所述第一源寄存器存储当前帧的当前块的像素值且所述第二源寄存器存储参考帧的两个不同块的像素值。
14.如权利要求8所述的设备,其中所述用于执行所述两个独立SAD运算的装置包含:
用于对分别存储在所述第一源寄存器的第一部分和所述第二源寄存器的第一部分中的另外的两个源值执行第三SAD运算的装置;
用于将存储在所述目的寄存器的所述第一部分中的所述第三SAD运算的结果与所述第一SAD运算的所述结果相加求和并将所述和存储在所述目的寄存器的所述第一部分中的装置;
用于对分别存储在所述第一源寄存器的第二部分和所述第二源寄存器的第二部分中的另外的两个源值执行第四SAD运算的装置;及
用于将存储在所述目的寄存器的所述第二部分中的所述第四SAD运算的结果与所述第二SAD运算的所述结果相加求和并将所述和存储在所述目的寄存器的所述第二部分中的装置。
15.一种用于执行绝对差和SAD运算的设备,所述设备包含:
存储器,其用于存储规定第一源寄存器、第二源寄存器和不同于所述第一源寄存器和所述第二源寄存器的目的寄存器的至少一个SAD指令,所述目的寄存器用以存储SAD运算结果;及
处理单元,其耦合到所述存储器,所述处理单元经配置以在接收到单个SAD指令时执行两个独立SAD运算,所述处理单元包含:
一个或一个以上执行单元,其经配置以执行SAD运算;及
一组寄存器,其包含目的寄存器,其中,第一SAD运算的结果存储在所述目的寄存器的第一部分中且第二SAD运算的结果存储在所述目的寄存器的第二部分中,其中所述目的寄存器包含第一对经对准的寄存器,所述第一对经对准的寄存器中的第一寄存器称作所述目的寄存器的所述第一部分且所述第一对经对准的寄存器中的第二寄存器称作所述目的寄存器的所述第二部分,
其中,所述两个独立SAD运算进一步包括:对存储在所述第一源寄存器的第一部分中及所述第二源寄存器的第一部分中的源值执行所述第一SAD运算,以及,对存储在所述第一源寄存器的第二部分中及所述第二源寄存器的第二部分中的源值执行所述第二SAD运算,
其中,存储在所述第一源寄存器的第一部分中的源值与存储在所述第二源寄存器的第一部分中的源值是具有相同排序或位置的对应值,以及,存储在所述第一源寄存器的第二部分中的源值与存储在所述第二源寄存器的第二部分中的源值是具有相同排序或位置的对应值。
16.如权利要求15所述的设备,其中所述处理单元经配置以并行执行所述两个独立SAD运算。
17.如权利要求15所述的设备,其中所述第一及第二源寄存器的每一者包含经对准的寄存器对。
18.如权利要求17所述的设备,其中所述第一源寄存器、所述第二源寄存器和所述目的寄存器的每一者包括两个独立的可存取部分。
19.如权利要求17所述的设备,其中:
所述处理单元经配置以通过确定第一组绝对差的和来执行所述第一SAD运算,所述第一组绝对差包含存储在所述第一及第二源寄存器的所述第一部分中的对应源值的所述绝对差;且
所述处理单元经配置以通过确定第二组绝对差的和来执行所述第二SAD运算,所述第二组绝对差包含存储在所述第一及第二源寄存器的所述第二部分中的对应源值的所述绝对差。
20.如权利要求17所述的设备,其中:
存储在所述第一及第二源寄存器中的源值包含视频帧的像素值;且
所述第一源寄存器存储当前帧的当前块的像素值且所述第二源寄存器存储参考帧的两个不同块的像素值。
21.如权利要求15所述的设备,其中所述处理单元经配置以通过以下方式执行所述两个独立SAD运算:
对分别存储在所述第一源寄存器的第一部分和所述第二源寄存器的第一部分中的另外的两个源值执行第三SAD运算;
将存储在所述目的寄存器的所述第一部分中的所述第三SAD运算的结果与所述第一SAD运算的所述结果相加求和并将所述和存储在所述目的寄存器的所述第一部分中;
对分别存储在所述第一源寄存器的第二部分和所述第二源寄存器的第二部分中的另外的两个源值执行第四SAD运算;及
将存储在所述目的寄存器的所述第二部分中的所述第四SAD运算的结果与所述第二SAD运算的所述结果相加求和并将所述和存储在所述目的寄存器的所述第二部分中。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/431,301 | 2006-05-10 | ||
US11/431,301 US8290044B2 (en) | 2006-05-10 | 2006-05-10 | Instruction for producing two independent sums of absolute differences |
PCT/US2007/068389 WO2007134011A2 (en) | 2006-05-10 | 2007-05-07 | Instruction for producing two independent sums of absolute differences |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101438598A CN101438598A (zh) | 2009-05-20 |
CN101438598B true CN101438598B (zh) | 2013-08-14 |
Family
ID=38658606
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007800164584A Active CN101438598B (zh) | 2006-05-10 | 2007-05-07 | 用于产生两个独立绝对差和的指令 |
Country Status (8)
Country | Link |
---|---|
US (1) | US8290044B2 (zh) |
EP (1) | EP2025175B1 (zh) |
JP (1) | JP4995897B2 (zh) |
KR (1) | KR100996337B1 (zh) |
CN (1) | CN101438598B (zh) |
ES (1) | ES2733022T3 (zh) |
HU (1) | HUE044078T2 (zh) |
WO (1) | WO2007134011A2 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108196823A (zh) | 2011-12-23 | 2018-06-22 | 英特尔公司 | 用于执行双块绝对差求和的系统、装置和方法 |
CN108140232B (zh) * | 2015-06-10 | 2022-05-24 | 无比视视觉技术有限公司 | 用于处理图像的图像处理器和方法 |
KR102425668B1 (ko) * | 2017-02-23 | 2022-07-28 | 에이알엠 리미티드 | 데이터 처리장치에서의 곱셈-누적 |
US10481870B2 (en) | 2017-05-12 | 2019-11-19 | Google Llc | Circuit to perform dual input value absolute value and sum operation |
KR20200008539A (ko) | 2019-12-27 | 2020-01-28 | 주식회사 성환산업 | 빗물의 재활용 방법 및 시스템 |
KR102267401B1 (ko) | 2020-08-06 | 2021-06-18 | 주식회사 선샘산업 | 저장 용수의 수질 오염 방지 유닛 및 그 오염 방지 유닛을 이용한 저장 용수 수질 오염 방지 방법 및 방지 시스템 |
US20220308881A1 (en) * | 2021-03-26 | 2022-09-29 | Intel Corporation | Instruction and logic for sum of absolute differences |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1147102A (zh) * | 1994-12-31 | 1997-04-09 | 现代电子产业株式会社 | 运动估算芯片的处理元件装置 |
CN1195824A (zh) * | 1997-01-09 | 1998-10-14 | 松下电器产业株式会社 | 运动矢量检测装置 |
CN1491383A (zh) * | 2001-02-20 | 2004-04-21 | Arm | 使用协处理器的数据处理 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3545004B2 (ja) | 1993-01-25 | 2004-07-21 | ソニー株式会社 | 演算回路 |
JP3869947B2 (ja) * | 1998-08-04 | 2007-01-17 | 株式会社日立製作所 | 並列処理プロセッサ、および、並列処理方法 |
US7054895B2 (en) * | 2001-06-21 | 2006-05-30 | Ligos Corporation | System and method for parallel computing multiple packed-sum absolute differences (PSAD) in response to a single instruction |
JP4699685B2 (ja) | 2003-08-21 | 2011-06-15 | パナソニック株式会社 | 信号処理装置及びそれを用いた電子機器 |
JP4170173B2 (ja) | 2003-08-21 | 2008-10-22 | 株式会社ルネサステクノロジ | ブロックマッチング演算装置 |
US20060002471A1 (en) * | 2004-06-30 | 2006-01-05 | Lippincott Louis A | Motion estimation unit |
US7555513B2 (en) * | 2004-09-13 | 2009-06-30 | Broadcom Corporation | SIMD processor having enhanced operand storage interconnects |
-
2006
- 2006-05-10 US US11/431,301 patent/US8290044B2/en active Active
-
2007
- 2007-05-07 HU HUE07761976A patent/HUE044078T2/hu unknown
- 2007-05-07 WO PCT/US2007/068389 patent/WO2007134011A2/en active Application Filing
- 2007-05-07 CN CN2007800164584A patent/CN101438598B/zh active Active
- 2007-05-07 ES ES07761976T patent/ES2733022T3/es active Active
- 2007-05-07 EP EP07761976.5A patent/EP2025175B1/en active Active
- 2007-05-07 KR KR1020087030050A patent/KR100996337B1/ko active IP Right Grant
- 2007-05-07 JP JP2009510124A patent/JP4995897B2/ja active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1147102A (zh) * | 1994-12-31 | 1997-04-09 | 现代电子产业株式会社 | 运动估算芯片的处理元件装置 |
CN1195824A (zh) * | 1997-01-09 | 1998-10-14 | 松下电器产业株式会社 | 运动矢量检测装置 |
CN1491383A (zh) * | 2001-02-20 | 2004-04-21 | Arm | 使用协处理器的数据处理 |
Also Published As
Publication number | Publication date |
---|---|
WO2007134011A2 (en) | 2007-11-22 |
US20070263730A1 (en) | 2007-11-15 |
JP4995897B2 (ja) | 2012-08-08 |
HUE044078T2 (hu) | 2019-09-30 |
EP2025175B1 (en) | 2019-04-03 |
WO2007134011A3 (en) | 2008-01-24 |
EP2025175A2 (en) | 2009-02-18 |
US8290044B2 (en) | 2012-10-16 |
KR20090012269A (ko) | 2009-02-02 |
JP2009536773A (ja) | 2009-10-15 |
ES2733022T3 (es) | 2019-11-27 |
KR100996337B1 (ko) | 2010-11-23 |
CN101438598A (zh) | 2009-05-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101438598B (zh) | 用于产生两个独立绝对差和的指令 | |
Poudel et al. | Fast-scnn: Fast semantic segmentation network | |
EP3614259A1 (en) | Processing apparatus and processing method | |
RU2273044C2 (ru) | Способ и устройство для параллельного объединения данных со сдвигом вправо | |
CN112016475B (zh) | 一种人体检测识别方法和装置 | |
CN110489428B (zh) | 多维稀疏矩阵压缩方法、解压缩方法、装置、设备及介质 | |
Roux et al. | Embedded convolutional face finder | |
EP3974966A1 (en) | Large scale matrix restructuring and matrix-scalar operations | |
CN110782009B (zh) | 基于ARMv8体系的计算内核优化方法 | |
CN111950517A (zh) | 一种目标检测方法、模型训练方法,电子设备及存储介质 | |
US9241142B2 (en) | Descriptor-based stream processor for image processing and method associated therewith | |
CN113743593B (zh) | 神经网络量化方法、系统、存储介质及终端 | |
Kumar et al. | Parallel blob extraction using the multi-core Cell processor | |
CN113313720A (zh) | 对象分割方法和装置 | |
CN101370143B (zh) | 图像的运动估计方法及装置 | |
KR20020064913A (ko) | 데이터 디코딩 | |
CN108322759A (zh) | 一种像素值获取方法及装置 | |
Kim et al. | A 66fps 3 8mW nearest neighbor matching processor with hierarchical VQ algorithm for real-time object recognition | |
Szwoch | Parallel background subtraction in video streams using OpenCL on GPU platforms | |
US5754461A (en) | Arithmetic processing method | |
Wang et al. | Experimentation with a host-based parallel algorithm for image processing | |
Yang et al. | A Shallow Information Enhanced Efficient Small Object Detector Based on YOLOv5 | |
CN114492728A (zh) | 基于图像数据y分量的处理方法、装置、设备及存储介质 | |
CN113903027A (zh) | 一种图片分类装置及方法 | |
CN110991296A (zh) | 视频标注方法、装置、电子设备及计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |