(57)【要約】単一の命令を受信するとき、２つの独立した差分絶対値和（ＳＡＤ）演算（５０５、７０５）を実行するための方法および装置が提供される。２つの演算は並列で実行され得る。演算は２個のソースレジスタ（４０５、４１０）内に記憶された値を処理して、結果はデスティネーションレジスタ（４２５）に記憶される。ソースレジスタおよびデスティネーションレジスタはそれぞれ２つの独立したアクセス可能な区分を有し、それにより、第１のＳＡＤ演算（４０１）は第１の区分にアクセスすることが可能であり、一方、第２の独立したＳＡＤ演算（４０２）はレジスタの第２の区分に同時にアクセスすることが可能である。第１のＳＡＤ演算は、ソースレジスタの第１の区分内の値に関して実行され、結果はデスティネーションレジスタの第１の区分に記憶されている。第２のＳＡＤ演算は、ソースレジスタの第２の区分内の値に関して実行され、結果はデスティネーションレジスタの第２の区分に記憶されている。値は画素値を含み得る。
2009536773.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ可読媒体であって、
差分絶対値和（ＳＡＤ）演算の結果を記憶するためのデスティネーションレジスタを指定する、前記媒体内に含まれるＳＡＤ命令、
を備え、
その命令は、ＳＡＤ命令処理ユニットによって実行されるとき、前記処理ユニットに２つの独立したＳＡＤ演算を実行させ、
前記の第１のＳＡＤ演算の結果は、前記デスティネーションレジスタ内の第１の区分内に記憶されており、前記の第２のＳＡＤ演算の結果は、前記デスティネーションレジスタ内の第２の区分内に記憶されている、
コンピュータ可読媒体。
【請求項２】
前記処理ユニットは、前記２つのＳＡＤ演算を並列で実行する、請求項１に記載のコンピュータ可読媒体。
【請求項３】
前記ＳＡＤ命令は、前記２つのＳＡＤ演算によって処理するためのソース値を記憶する２個のソースレジスタをさらに指定し、
前記処理ユニットは、
前記の第１のソースレジスタの第１の区分内および前記の第２のソースレジスタの第１の区分内に記憶されたソース値に関して前記の第１のＳＡＤ演算を実行することと、
前記の第１のソースレジスタの第２の区分内および前記の第２のソースレジスタの第２の区分内に記憶されたソース値に関して前記の第２のＳＡＤ演算を実行することと、
によって、前記２つの独立したＳＡＤ演算を実行し、
前記デスティネーションレジスタおよび前記ソースレジスタはそれぞれ、位置合わせされた１対のレジスタを備え、前記対の前記第１のレジスタは、前記ソースレジスタまたは前記デスティネーションレジスタの前記第１の区分を備え、前記対の前記第２のレジスタは、前記ソースレジスタまたは前記デスティネーションレジスタの前記第２の区分を備える、
請求項１に記載のコンピュータ可読媒体。
【請求項４】
前記の第１のＳＡＤ演算が前記レジスタの第１の区分にアクセスすることができ、一方、前記の第２の独立したＳＡＤ演算が前記レジスタの第２の区分に同時にアクセスすることができるように、前記ソースレジスタおよび前記デスティネーションレジスタはそれぞれ、２つの、独立してアクセス可能な区分を備える、請求項３に記載のコンピュータ可読媒体。
【請求項５】
前記処理ユニットは、前記の第１および第２のソースレジスタの前記第１の区分内に記憶された対応するソース値の差分絶対値を備える第１の差分絶対値のセットの和を決定することによって、前記の第１のＳＡＤ演算を実行し、
前記処理ユニットは、前記の第１および第２のソースレジスタの前記第２の区分内に記憶された対応するソース値の前記差分絶対値を備える第２の差分絶対値のセットの和を決定することによって、前記の第２のＳＡＤ演算を実行する、
請求項３に記載のコンピュータ可読媒体。
【請求項６】
前記の第１および第２のソースレジスタ内に記憶された前記ソース値は、ビデオフレームの画素値を備え、
前記の第１のソースレジスタは、現在のフレームの現在のブロックの画素値を記憶し、前記第２のソースレジスタは、基準フレームの２つの異なるブロックの画素値を記憶する、
請求項３に記載のコンピュータ可読媒体。
【請求項７】
前記処理ユニットは、
前記デスティネーションレジスタの前記第１の区分内に記憶された別のＳＡＤ演算の結果を前記の第１のＳＡＤ演算の前記結果に対して加算することと、そして、前記加算した和を前記デスティネーションレジスタの前記第１の区分内に記憶することと、
前記デスティネーションレジスタの前記第２の区分内に記憶された別のＳＡＤ演算の結果を前記の第２のＳＡＤ演算の前記結果に対して加算することと、そして、前記加算した和を前記デスティネーションレジスタの前記第２の区分内に記憶することと、
によって、前記２つの独立したＳＡＤ演算を実行する、
請求項１に記載のコンピュータ可読媒体。
【請求項８】
差分絶対値和（ＳＡＤ）演算を実行するための方法であって、
ＳＡＤ演算の結果を記憶するためのデスティネーションレジスタを指定する単一のＳＡＤ命令を受信することと、
前記単一のＳＡＤ命令を受信することに応答して、２つの独立したＳＡＤ演算を実行することと、
を備え、
前記の第１のＳＡＤ演算の結果は、前記デスティネーションレジスタの第１の区分内に記憶されており、前記の第２のＳＡＤ演算の結果は、前記デスティネーションレジスタの第２の区分内に記憶されている、
方法。
【請求項９】
前記２つのＳＡＤ演算は、並列で実行される、請求項８に記載の方法。
【請求項１０】
前記単一のＳＡＤ命令は、前記２つのＳＡＤ演算による処理のためのソース値を記憶する２個のソースレジスタをさらに指定し、
前記２つのＳＡＤ演算を実行することは、
前記の第１のソースレジスタの第１の区分内および前記の第２のソースレジスタの第１の区分内に記憶されたソース値に関して前記の第１のＳＡＤ演算を実行することと、
前記の第１のソースレジスタの第２の区分内および前記の第２のソースレジスタの第２の区分内に記憶されたソース値に関して前記の第２のＳＡＤ演算を実行することと、
をさらに備え、
前記デスティネーションレジスタおよび前記ソースレジスタはそれぞれ、位置合わせされた１対のレジスタを備え、前記対の前記第１のレジスタは、前記ソースレジスタまたは前記デスティネーションレジスタの前記第１の区分を備え、前記対の前記第２のレジスタは、前記ソースレジスタまたは前記デスティネーションレジスタの前記第２の区分を備える、
請求項８に記載の方法。
【請求項１１】
前記の第１のＳＡＤ演算が前記レジスタの第１の区分にアクセスでき、一方、前記第２の独立したＳＡＤ演算が前記レジスタの第２の区分に同時にアクセスできるように、前記ソースレジスタおよび前記デスティネーションレジスタはそれぞれ、２つの、独立してアクセス可能な区分を備える、請求項１０に記載の方法。
【請求項１２】
前記の第１のＳＡＤ演算を実行することは、前記の第１および第２のソースレジスタの前記第１の区分内に記憶された対応するソース値の差分絶対値を備える第１の差分絶対値のセットの和を決定すること、をさらに備え、
前記の第２のＳＡＤ演算を実行することは、前記第１および第２のソースレジスタの前記第２の区分内に記憶された対応するソース値の前記差分絶対値を備える第２の差分絶対値のセットの和を決定すること、をさらに備える、
請求項１０に記載の方法。
【請求項１３】
前記の第１および第２のソースレジスタ内に記憶された前記ソース値は、ビデオフレームの画素値を備え、
前記の第１のソースレジスタは、現在のフレームの現在のブロックの画素値を記憶し、前記の第２のソースレジスタは、基準フレームの２つの異なるブロックの画素値を記憶する、
請求項１０に記載の方法。
【請求項１４】
前記２つのＳＡＤ演算を実行することは、
前記デスティネーションレジスタの前記第１の区分内に記憶された別のＳＡＤ演算の結果を前記の第１のＳＡＤ演算の前記結果に対して加算することと、そして、前記加算した和を前記デスティネーションレジスタの前記第１の区分内に記憶することと、
前記デスティネーションレジスタの前記第２の区分内に記憶された別のＳＡＤ演算の結果を前記の第２のＳＡＤ演算の前記結果に対して加算することと、そして、前記加算した和を前記デスティネーションレジスタの前記第２の区分内に記憶することと、
を備える、
請求項８に記載の方法。
【請求項１５】
差分絶対値和（ＳＡＤ）演算を実行するための装置であって、
ＳＡＤ演算結果を記憶するためのデスティネーションレジスタを指定する単一のＳＡＤ命令を受信するための手段と、
前記単一のＳＡＤ命令を受信することに応答して、２つの独立したＳＡＤ演算を実行するための手段と、
を備え、
前記の第１のＳＡＤ演算の結果は、前記デスティネーションレジスタ内の第１の区分内に記憶されており、前記の第２のＳＡＤ演算の結果は、前記デスティネーションレジスタの第２の区分内に記憶されている、
装置。
【請求項１６】
前記２つのＳＡＤ演算は、並列で実行される、請求項１５に記載の装置。
【請求項１７】
前記単一のＳＡＤ命令は、前記２つのＳＡＤ演算による処理のためのソース値を記憶する２個のソースレジスタをさらに指定し、
前記２つの独立したＳＡＤ演算を実行するための前記手段は、
前記の第１のソースレジスタの第１の区分内および前記の第２のソースレジスタの第１の区分内に記憶されたソース値に関して前記の第１のＳＡＤ演算を実行するための手段と、
前記の第１のソースレジスタの第２の区分内および前記の第２のソースレジスタの第２の区分内に記憶されたソース値に関して前記の第２のＳＡＤ演算を実行するための手段と、
をさらに備え、
前記デスティネーションレジスタおよび前記ソースレジスタはそれぞれ、位置合わせされた１対のレジスタを備え、前記対の前記第１のレジスタは、前記ソースレジスタまたは前記デスティネーションレジスタの前記第１の区分を備え、前記対の前記第２のレジスタは、前記ソースレジスタまたは前記デスティネーションレジスタの前記第２の区分を備える、
請求項１５に記載の装置。
【請求項１８】
前記の第１のＳＡＤ演算が前記レジスタの第１の区分にアクセスでき、一方、前記の第２の独立したＳＡＤ演算が前記レジスタの第２の区分に同時にアクセスできるように、前記ソースレジスタおよび前記デスティネーションレジスタはそれぞれ、２つの、独立してアクセス可能な区分を備える、請求項１７に記載の装置。
【請求項１９】
前記の第１のＳＡＤ演算を実行するための前記手段は、前記の第１および第２のソースレジスタの前記第１の区分内に記憶された対応するソース値の差分絶対値を備える第１の差分絶対値のセットの和を決定するための手段、をさらに備え、
前記の第２のＳＡＤ演算を実行するための前記手段は、前記の第１および第２のソースレジスタの前記第２の区分内に記憶された対応するソース値の前記差分絶対値を備える第２の差分絶対値のセットの和を決定するための手段、をさらに備える、
請求項１７に記載の装置。
【請求項２０】
前記の第１および第２のソースレジスタ内に記憶された前記ソース値は、ビデオフレームの画素値を備え、
前記の第１のソースレジスタは、現在のフレームの現在のブロックの画素値を記憶し、前記の第２のソースレジスタは、基準フレームの２つの異なるブロックの画素値を記憶する
請求項１７に記載の装置。
【請求項２１】
前記２つのＳＡＤ演算を実行するための前記手段は、
前記デスティネーションレジスタの前記第１の区分内に記憶された別のＳＡＤ演算の結果を前記の第１のＳＡＤ演算の前記結果に対して加算し、前記加算した和を前記デスティネーションレジスタの前記第１の区分内に記憶するための手段と、
前記デスティネーションレジスタの前記第２の区分内に記憶された別のＳＡＤ演算の結果を前記の第２のＳＡＤ演算の前記結果に対して加算し、前記加算した和を前記デスティネーションレジスタの前記第２の区分内に記憶するための手段と、
を備える、
請求項１５に記載の装置。
【請求項２２】
差分絶対値和（ＳＡＤ）演算を実行するための装置であって、
前記装置は、
ＳＡＤ演算の結果を記憶するためのデスティネーションレジスタを指定する少なくとも１つのＳＡＤ命令を記憶するためのメモリと、
前記メモリに結合された処理ユニットと、
を備え、
前記処理ユニットは、単一のＳＡＤ命令を受信すると、２つの独立したＳＡＤ演算を実行するように構成されており、前記処理ユニットは、
ＳＡＤ演算を実行するように構成された１つまたは複数の実行ユニットと、
デスティネーションレジスタを備えるレジスタのセットと、
を備え、
前記の第１のＳＡＤ演算の結果は、前記デスティネーションレジスタの第１の区分内に記憶され、前記の第２のＳＡＤ演算の結果は、前記デスティネーションレジスタの第２の区分内に記憶される、
装置。
【請求項２３】
前記処理ユニットは、前記２つのＳＡＤ演算を並列で実行するように構成されている、請求項２２に記載の装置。
【請求項２４】
前記ＳＡＤ命令は、前記２つのＳＡＤ演算による処理のためのソース値を記憶する２個のソースレジスタをさらに指定し、
前記レジスタのセットは、２個のソースレジスタをさらに備え、
前記処理ユニットは、
前記の第１のソースレジスタの第１の区分内および前記の第２のソースレジスタの第１の区分内に記憶されたソース値に関して前記の第１のＳＡＤ演算を実行することと、
前記の第１のソースレジスタの第２の区分内および前記の第２のソースレジスタの第２の区分内に記憶されたソース値に関して前記の第２のＳＡＤ演算を実行することと、
によって、前記２つの独立したＳＡＤ演算を実行するように構成されており、
前記デスティネーションレジスタおよび前記ソースレジスタはそれぞれ、位置合わせされた１対のレジスタを備え、前記対の前記の第１のレジスタは、前記ソースレジスタまたは前記デスティネーションレジスタの前記第１の区分を備え、前記対の前記の第２のレジスタは、前記ソースレジスタまたは前記デスティネーションレジスタの前記第２の区分を備える、
請求項２２に記載の装置。
【請求項２５】
前記の第１のＳＡＤ演算は前記レジスタの第１の区分にアクセスすることは可能であり、一方、前記第２の独立したＳＡＤ演算は前記レジスタの第２の区分に独立してアクセスすることはできるように、前記ソースレジスタおよび前記デスティネーションレジスタはそれぞれ２つの独立してアクセス可能な区分を備える、請求項２４に記載の装置。
【請求項２６】
前記処理ユニットは、前記第１および第２のソースレジスタの前記第１の区分内に記憶された対応するソース値の前記差分絶対値を備える第１の差分絶対値のセットの和を決定することによって、前記の第１のＳＡＤ演算を実行するように構成され、
前記処理ユニットは、前記第１および前記第２のソースレジスタの前記第２の区分内に記憶された対応するソース値の前記差分絶対値を備える第２の差分絶対値のセットの和を決定することによって、前記の第２のＳＡＤ演算を実行するように構成されている、
請求項２４に記載の装置。
【請求項２７】
前記の第１および第２のソースレジスタ内に記憶された前記ソース値は、ビデオフレームの画素値を備え、
前記の第１のソースレジスタは、現在のフレームの現在のブロックの画素値を記憶し、前記第２のソースレジスタは基準フレームの２つの異なるブロックの画素値を記憶する
請求項２４に記載の装置。
【請求項２８】
前記処理ユニットは、
前記デスティネーションレジスタの前記第１の区分内に記憶された別のＳＡＤ演算の結果を前記の第１のＳＡＤ演算の前記結果に対して加算することと、そして、前記加算した和を前記デスティネーションレジスタの前記第１の区分内に記憶することと、
前記デスティネーションレジスタの前記第２の区分内に記憶された別のＳＡＤ演算の結果を前記の第２のＳＡＤ演算の前記結果に対して加算することと、前記加算した和を前記デスティネーションレジスタの前記第２の区分内に記憶することと、
によって、前記２つ独立したＳＡＤ演算を実行するように構成されている、
請求項２２に記載の装置。
【発明の詳細な説明】
【背景】
【０００１】
（分野）
本実施形態は、一般に、２つの独立した差分絶対値和(sums of absolute differences)を生成するための命令に関する。
【０００２】
（背景）
現在、動作推定は、ビデオ情報を符号化／圧縮するために広く使用される方法である。ブロックベースの動作推定では、各ビデオフレームは１６×１６、８×８、または４×４画素(pixels)のブロックなど、ブロック（画素アレイ(pixel arrays)）内に区分化される。図１は、動作推定方法の概念図である。図１に示されるように、現在のフレーム１０５の現在のブロック１１０の場合、探索は（画素値(pixel values)の点で）ブロック１１０が最も一致するブロックに関する基準フレーム１１５（例えば、現在のフレームの前のフレームまたは後のフレーム）の探索領域１２０内で実行される。最も一致するブロック１２５が基準フレーム１１５内で発見されるとき、（現在のブロック１１０に照らして最も一致するブロック１２５の偏位を表示する）動作ベクトル１３０と、現在のブロック１１０との画素値の差とが現在のブロックを符号化するために使用される。このプロセスは、現在のフレームの各ブロックに関して繰り返される。
【０００３】
現在のブロックに最も一致する基準フレーム内のブロックを決定するための技術は、通常、差分絶対値和(sum-of-absolute-differences)（ＳＡＤ）演算を使用して決定される（平均絶対誤差(mean absolute error)（ＭＡＥ）または差分絶対値平均(mean absolute difference)（ＭＡＤ）などの）基準を使用する。これらの技術では、現在のブロックと基準フレームの探索領域内の各ブロックの間の画素値の差分絶対値和が計算される。画素値Ａｉを有する現在のブロックと、画素値Ｂｉを有する基準ブロックに関して実行されるＳＡＤ演算は、方程式
Σ｜Ａｉ−Ｂｉ｜＝Ｃ
によって表現され得る。
【０００４】
ＳＡＤ演算は探索領域内の各基準ブロックに関して実行され、最低ＳＡＤ値（Ｃ）を有する基準ブロックが最も一致するブロックとして選択される。しかし、動作推定で要求される多数のＳＡＤ演算は演算処理上集中的であり、大量の処理時間と資源とを消費する可能性がある。したがって、ＳＡＤ演算を実行するための効率的な方法の必要性が存在する。
【発明の開示】
【概要】
【０００５】
開示されるいくつかの態様は、単一のＳＡＤ命令を受信するとき、２つの独立したＳＡＤ演算を実行するための方法および装置を提供する。いくつかの実施形態では、２つの独立したＳＡＤ演算は並列で(in parallel)実行される。ＳＡＤ演算は、演算の２つの和の結果がデスティネーションレジスタ(destination register)にロードされる２個のソースレジスタ(source registers)内に記憶されたソース値(source values)に関して動作する。いくつかの実施形態では、ソースレジスタおよびデスティネーションレジスタはそれぞれ位置合わせされた１対のレジスタを備え、対の第１のレジスタはソースレジスタまたはデスティネーションレジスタの第１の区分(first section)と呼ばれ、対の第２のレジスタはソースレジスタまたはデスティネーションレジスタの第２の区分(second register)と呼ばれる。いくつかの実施形態では、第１のＳＡＤ演算がソースレジスタまたはデスティネーションレジスタの第１の区分（レジスタ）にアクセスすることができ、一方、第２の独立したＳＡＤ演算がソースレジスタまたはデスティネーションレジスタの第２の区分に同時に（並列で）アクセスすることができるように、位置合わせされた１対のレジスタの各区分（レジスタ）は独立してアクセス可能である。
【０００６】
第１のＳＡＤ演算は、第１のソースレジスタの第１の区分内に記憶された第１の値のセットおよび第２のソースレジスタの第１の区分内に記憶された第２の値のセットに関して実行される。第１のＳＡＤ演算の結果は、次いで、デスティネーションレジスタの第１の区分に記憶される。第２のＳＡＤ演算は、第１のソースレジスタ内の第２の区分内に記憶された第３の値のセットおよび第２のソースレジスタの第２の区分内に記憶された第４の値のセットに関して実行される。第２のＳＡＤ演算の結果は、次いで、デスティネーションレジスタの第２の区分に記憶される。
【０００７】
いくつかの実施形態では、２つの独立したＳＡＤ演算によって処理される値は、ビデオフレームのブロックの画素値(pixel values)である。いくつかの実施形態では、２つの独立したＳＡＤ演算はビデオ圧縮または動作推定に関して使用される。
【詳細な説明】
【０００８】
語「例示的な(exemplary)」は、「例(example)、事例(instance)、または例示(illustration)としての役割を果たしている」を意味するようにここでは使用される。「例示的な」としてここに説明されるいずれの実施形態も、他の実施形態よりも好ましいあるいは有利であると必ずしも解釈されるべきではない。
【０００９】
図２は、現在のフレームの現在のブロック２０５および基準フレームの基準ブロック２１０に関して実行されるＳＡＤ演算の概念図を示す。図２の例では、フレームのブロックは、各画素が１バイトの画素値を備える、４×４の画素アレイを備える。他の実施形態では、ブロックは、各画素が異なるサイズの画素値を備える、異なるサイズの画素アレイを備える。
【００１０】
図２に示されるように、現在のブロック２０５は複数の画素Ａ０〜Ａ１５を備え、基準ブロック２１０は複数の画素Ｂ０〜Ｂ１５を備える。現在のブロックおよび基準ブロックに関して実行されるＳＡＤ演算は、まず現在のブロックおよび基準ブロック２０５および２１０の対応する画素の画素値の間の差（すなわち、Ａ０−Ｂ０、Ａ１−Ｂ１、Ａ２−Ｂ２、．．．Ａ１５−Ｂ１５）を決定する。ＳＡＤ演算は、次いで、現在のブロックおよび基準ブロック２０５および２１０の対応する画素の画素値の間の差分絶対値を備える差分絶対値のセット（すなわち、｜Ａ０−Ｂ０｜、｜Ａ１−Ｂ１｜、｜Ａ２−Ｂ２｜、．．．｜Ａ１５−Ｂ１５｜）を決定する。最後に、ＳＡＤ演算は、差分絶対値のセットの和（すなわち、｜Ａ０−Ｂ０｜＋｜Ａ１−Ｂ１｜＋｜Ａ２−Ｂ２｜．．．＋｜Ａ１５−Ｂ１５｜）を決定する。
【００１１】
ここにおいて使用されるように、ＳＡＤ演算は、少なくとも２つの値（例えば、画素値Ａ０およびＡ１）を備える第１の値のセットならびに少なくとも２つの値（例えば、画素値Ｂ０およびＢ１）を備える第２の値のセットに関して実行され、ＳＡＤ演算は、第１および第２の値のセットの特定の値の間の少なくとも２つの差分絶対値を備える差分絶対値のセット（例えば、｜Ａ０−Ｂ０｜および｜Ａ１−Ｂ１｜）と、少なくとも２つの差分絶対値のセットの和（例えば、｜Ａ０−Ｂ０｜＋｜Ａ１−Ｂ１｜）とを決定する。いくつかの実施形態では、第１および第２の値のセットはそれぞれ２つ以上の値（例えば、画素値Ａ０〜Ａ１５およびＢ０〜Ｂ１５）を備える。第１の値のセットＡｉおよび第２の値のセットＢｉに関して実行されるＳＡＤ演算は、方程式
Σ｜Ａｉ−Ｂｉ｜＝Ｃ
によって表現され得る。式中、ＣはＳＡＤ演算の結果（すなわち、生成された値）を表す。
【００１２】
動作推定に関して実行されるＳＡＤ演算は、通常、ソフトウェアまたはハードウェア（例えば、中央演算処理装置、マイクロプロセッサ、デジタル信号プロセッサなど）を介して実施される。ＳＡＤ演算を使用して現在のブロックを複数の基準ブロックと比較するためにソフトウェアまたはハードウェアがどのように構成されるかに応じて、ブロック比較は直列または並列で行われ得る。直列のブロック比較では、画素は、第２の基準ブロックの任意の画素に対する現在のブロックの比較が始まる前に、第１の基準ブロックのすべての対応する画素と比較される。
【００１３】
直列のブロック比較の例は、別の基準ブロックからの画素値に対する比較が始まる前に、現在のブロック２０５からのすべての画素値（Ａ０〜Ａ１５）が基準ブロック２１０からのすべての画素値（Ｂ０〜Ｂ１５）と比較される図２に示される。現在のブロック２０５からの画素値（Ａ０〜Ａ１５）および基準ブロック２１０からの画素値（Ｂ０〜Ｂ１５）は、別の基準ブロックからの任意の画素値がメモリからレジスタにロードされる前に基準ブロックの処理を完了するために、メモリからレジスタにロードされる（しかし、レジスタのサイズに応じて、２つ以上のロードサイクルが、通常必要とされることになる）。
【００１４】
他の実施形態では、並列のブロック比較が実行され、それにより、現在のブロックの第１の画素のサブセット（例えば、第１の画素の行）が第１の基準ブロックの対応する画素のサブセット（例えば、第１の画素の行）と比較され、かつ、同時に第２の基準ブロックの対応する第２の画素のサブセット（例えば、第１の画素の行）と比較される。現在のブロックの次の画素のサブセット（例えば、第２の画素の行）は、次いで、第１の基準ブロックの対応する次の画素のサブセット（例えば、第２の画素の行）と比較され、かつ、第２の基準ブロックの画素の対応する次のサブセット（例えば、第２の画素の行）と同時に比較され、現在のブロックならびに第１および第２の基準ブロックの各画素が処理されるまで、以下同様に行われる。これにより、並列のブロック比較では、現在のブロックおよび２つ以上の基準ブロックの間の比較は並列で実行され得る。並列のブロック比較では、メモリからのより少ないデータ取出しが存在するため、データ取出し時間は削減され得る点に留意されたい。例えば、値Ａ０〜Ａ３は一度取り出されて、２つのＳＡＤ演算に使用される（一方、直列のブロック比較では、値Ａ０〜Ａ７はより長い取出し時間を要求して取り出される）。
【００１５】
図３は、第１のＳＡＤ演算が現在のブロックの（画素Ａ０〜Ａ３を備える）第１の行３０５および第１の基準ブロックの（画素Ｂ０〜Ｂ３を備える）第１の行３１０に関して実行され、第２のＳＡＤ演算が現在のブロック３０５の第１の行および第２の基準ブロックの（画素Ｃ０〜Ｃ３を備える）第１の行３１５に関して実行される並列ブロック処理の概念図を示す。いくつかの実施形態では、第１および第２のＳＡＤ演算は並列で実行される。図３の例では、フレームのブロックは４×４の画素アレイを備え、アレイ内の各行は４画素を備え、各画素は１バイトの画素値を備える。他の実施形態では、ブロックは異なるサイズの画素アレイを備え、アレイ内の各行は異なる数の画素を備え、各画素は異なるサイズの画素値を備える。
【００１６】
現在のブロック２０５からの画素値（Ａ０〜Ａ３）ならびに第１および第２の基準ブロックからの画素値（Ｂ０〜Ｂ３およびＣ０〜Ｃ３）は、通常、処理のためにレジスタにロードされる。現在のブロックの第１の行３０５および第１の基準ブロックの（Ｂ０〜Ｂ３を備える）第１の行３１０に関して実行される第１のＳＡＤ演算は、対応する画素の間の差分絶対値を決定すること（すなわち、｜Ａ０−Ｂ０｜、｜Ａ１−Ｂ１｜、｜Ａ２−Ｂ２｜および｜Ａ３−Ｂ３｜）と、差分絶対値を合計すること（すなわち、｜Ａ０−Ｂ０｜＋｜Ａ１−Ｂ１｜＋｜Ａ２−Ｂ２｜および｜Ａ３−Ｂ３｜）とを備える。現在ブロックの第１の行３０５および第２の基準ブロックの（画素Ｃ０〜Ｃ３を備える）第１の行３１５に関して実行される第２のＳＡＤ演算は、対応する画素の間の差分絶対値を決定すること（すなわち、｜Ａ０−Ｃ０｜、｜Ａ１−Ｃ１｜、｜Ａ２−Ｃ２｜、および｜Ａ３−Ｃ３｜）と、差分絶対値を合計すること（すなわち、｜Ａ０−Ｃ０｜＋｜Ａ１−Ｃ１｜＋｜Ａ２−Ｃ２｜＋｜Ａ３−Ｃ３｜）とを備える。次いで、第３および第４のＳＡＤ演算は、現在のブロックならびに第１および第２の基準ブロックに関する第２の画素の行に関して実行され、現在のブロックのすべての画素が処理されるまで、以下同様に行われる。
【００１７】
現在のブロックがＳＡＤ演算を使用して基準ブロックと直列で比較されるかまたは並列で比較されるかにかかわらず、ＳＡＤ動作が、処理時間および処理資源の使用を削減して効率的に実行される場合は、動作推定は最適化され得る。いくつかの実施形態では、２つの独立したＳＡＤ演算は、２つの独立したＳＡＤ演算の結果を記憶するためのデスティネーションレジスタを使用して並列で実行される。いくつかの実施形態では、２つの独立したＳＡＤ演算を指定する(specify)ために単一の命令が使用され、単一の命令の実行は２つの独立したＳＡＤ結果を生成する。
【００１８】
図４は、２つの独立したＳＡＤ演算４０１および４０２が２個のソースレジスタと１個のデスティネーションレジスタとを使用して並列で実行されるコンピュータアーテクチャ４００の概念図を示す。図４は、例示だけを目的とし、ＳＡＤ演算の個別のステップを例示する点に留意されたい。他の実施形態では、ＳＡＤ演算は（図４に示されるように）複数のステップを用いて実行されず、単一のステップで実行される。図４に示されるように、２つのＳＡＤ演算４０１および４０２は、第１のソースレジスタＲｓｓ４０５にロードされた値Ｘ０〜Ｘ７および第２のソースレジスタＲｔｔ４１０にロードされた値Ｙ０〜Ｙ７に関して実行される。ここにおいて参照されるように、ＳＡＤ演算によって処理される入力値（例えば、Ｘ０〜Ｘ７およびＹ０〜Ｙ７）はソース値と呼ばれる。ソースレジスタ内の各値は、ソースレジスタ内の他の値と相対的な特定の順序また配置（第１の値、第２の値など）を有する。第１のソースレジスタ内の特定の値および第２のソースレジスタ内の特定の値が第１および第２のレジスタ内に同じ順序または同じ位置を有する場合は、第１のソースレジスタ内の特定の値および第２のソースレジスタ内の特定の値は「対応する値」と見なされる。例えば、第１のソースレジスタ内の第１の値および第２のソースレジスタ内の第１の値は対応する値である。２つのＳＡＤ演算４０１および４０２の結果はデスティネーションレジスタＲｄｄ４２５にロードされる。
【００１９】
ＳＡＤ演算４０１および４０２は、（例えば、値Ｘ０〜Ｘ７が図２の値Ａ０〜Ａ７に等しく、値Ｙ０〜Ｙ７が図２の値Ｂ０〜Ｂ７に等しい場合）ブロック処理に直列で使用され得る。ＳＡＤ演算４０１および４０２はまた、（例えば、値Ｘ０〜Ｘ３が図３の値Ａ０〜Ａ３に等しく、値Ｘ４〜Ｘ７も図３の値Ａ０〜Ａ３に等しく、値Ｙ０〜Ｙ３が図３のＣ０〜Ｃ３に等しく、値Ｙ４〜Ｙ７が図３の値Ｂ０〜Ｂ３等しい場合）ブロック処理に並列で使用されることも可能である。他の実施形態では、ＳＡＤ演算４０１および４０２は他のタイプの処理の際に使用される。いくつかの実施形態では、ＳＡＤ演算４０１および４０２は、２つのベクトルを備える値に関して動作し、スカラ値の結果を生成する。
【００２０】
第１のＳＡＤ演算４０１は、第１のソースレジスタＲｓｓ４０５の第１の区分内に記憶された第１の値のセットＸ０〜Ｘ３および第２のソースレジスタＲｔｔ４１０の第１の区分内に記憶された第２の値のセットＹ０〜Ｙ３に関して実行される。第１のＳＡＤ演算４０１は、第１および第２のソースレジスタの第１の区分内に記憶された第１および第２の値のセット内の対応する値の間の差分絶対値を備える第１の差分絶対値のセットを決定すること（すなわち、｜Ｘ０−Ｙ０｜、｜Ｘ１−Ｙ１｜、｜Ｘ２−Ｙ２｜および｜Ｘ３−Ｙ３｜）と、第１の差分絶対値のセットを合計すること（すなわち、｜Ｘ０−Ｙ０｜＋｜Ｘ１−Ｙ１｜＋｜Ｘ２−Ｙ２｜＋｜Ｘ３−Ｙ３｜）とを備える。第１のＳＡＤ演算４０１の和の結果は、デスティネーションレジスタＲｄｄ４２５の第１の区分（Ｗ０）内に記憶される。
【００２１】
第２のＳＡＤ演算４０２は、第１のソースレジスタＲｓｓ４０５の第２の区分内に記憶された第３の値のセットＸ４〜Ｘ７および第２のソースレジスタＲｔｔ４１０の第２の区分内に記憶された第４の値のセットＹ４〜Ｙ７に関して実行される。第２のＳＡＤ演算４０２は、第１および第２のソースレジスタの第２の区分内に記憶された第３および第４の値のセット内の対応する値の間の差分絶対値を備える第２の差分絶対値のセットを決定すること（すなわち、｜Ｘ４−Ｙ４｜、｜Ｘ５−Ｙ５｜、｜Ｘ６−Ｙ６｜および｜Ｘ７−Ｙ７｜）と、差分絶対値の第２のセットを合計すること（すなわち、｜Ｘ４−Ｙ４｜＋｜Ｘ５−Ｙ５｜＋｜Ｘ６−Ｙ６｜＋｜Ｘ７−Ｙ７｜）とを備える。第２のＳＡＤ演算４０２の和の結果は、デスティネーションレジスタＲｄｄ４２５の第２の区分（Ｗ１）内に記憶される。
【００２２】
いくつかの実施形態では、図４に例示される処理ステップは、上で説明された処理ステップを実行するように構成された（演算論理ユニットなどの）成分を有する実行ユニットによって実施される。例えば、複数のＡＤ成分４１５は差分絶対値（ＡＤ）演算を実行するように構成されることが可能であり、複数の加算成分４２０は追加の演算を実行するように構成されることが可能である。他の実施形態では、図４に例示される処理ステップは演算論理ユニット内に含まれる実行ユニットによって実施される。
【００２３】
いくつかの実施形態では、演算を実行するために実行ユニットによって使用されるレジスタのアーキテクチャは、１つまたは複数のレジスタが単一のレジスタとしてまたは位置合わせされた１対のレジスタとしてアクセスされ得るようなものである。例えば、レジスタは、命令が３２ビットの値または６４ビットの値に関して動作し得るように、単一のレジスタとしてまたは位置合わせされた１対の６４ビットのレジスタとしてアクセスされ得る複数の３２ビットのレジスタを備えてよい。いくつかの実施形態では、ソースレジスタおよびデスティネーションレジスタ（Ｒｓｓ、Ｒｔｔ、およびＲｄｄ）はそれぞれ位置合わせされた１対のレジスタを備え、対の第１のレジスタはソースレジスタまたはデスティネーションレジスタの第１の区分と呼ばれ、対の第２のレジスタはソースレジスタまたはデスティネーションレジスタの第２の区分と呼ばれる。いくつかの実施形態では、第１のＳＡＤ演算が（例えば、第１の区分内に記憶された値を取り出して処理するために、もしくは第１の区分に値をロードするために）ソースレジスタまたはデスティネーションレジスタの第１の区分にアクセスすることが可能であり、一方、第２の独立したＳＡＤ演算が（例えば、第１の区分内に記憶された値を取り出して処理するために、もしくは第２の区分に値をロードするために）ソースレジスタまたはデスティネーションレジスタの第２の区分に同時に（並列で）アクセスすることが可能であるように、位置合わせされた１対のレジスタの各区分（レジスタ）は独立してアクセス可能である。いくつかの実施形態では、第１のＳＡＤ演算は２個のソースレジスタおよび１個のデスティネーションレジスタの第１の区分にアクセスし／を使用し、第２のＳＡＤ演算はそれらの２個のソースレジスタおよびその１個のデスティネーションレジスタの第２の区分にアクセスし／を使用し、各レジスタの第１および第２の区分は独立してアクセス可能である。
【００２４】
例えば、第１および第２のソースＲｓｓおよびＲｔｔが６４ビット（倍語）の位置合わせされた１対のレジスタであり、各加算成分４２０が３２ビットの加算器であるように、第１および第２のソースレジスタＲｓｓおよびＲｔｔ内の各値（Ｘ０〜Ｘ７およびＹ０〜Ｙ７）は１バイトを備えると仮定する。したがって、第１のＳＡＤ演算は、第１のソースレジスタＲｓｓの第１の３２ビット（単語）の区分／レジスタ内に記憶された値Ｘ０〜Ｘ３にアクセスして、第２のソースレジスタＲｔｔの第１の３２ビット（単語）の区分／レジスタ内に記憶された値Ｙ０〜Ｙ３にアクセスする。加えて、第２のＳＡＤ演算は、第１のソースレジスタＲｓｓの第２の３２ビットの区分／レジスタ内に記憶された値Ｘ４〜Ｘ７に同時にアクセスして、第２のソースレジスタＲｔｔの第２の３２ビットの区分／レジスタ内に記憶された値Ｙ４〜Ｙ７にアクセスする。デスティネーションレジスタＲｄｄは６４ビット（倍語）の位置合わせされた１対のレジスタであることになる。第１のＳＡＤ演算の和の結果は、第１の３２ビットの区分／レジスタ（語０に関する「Ｗ０」）に記憶され、第２のＳＡＤ演算の和の結果は、デスティネーションレジスタＲｄｄの第２の３２ビットの区分／レジスタ（語１に関する「Ｗ１」）に記憶される。
【００２５】
いくつかの実施形態では、図４に例示される２つの独立したＳＡＤ演算は、単一のＳＡＤ命令によって指定される。図５は、図４に示されるコンピュータアーキテクチャ４００内で２つの独立したＳＡＤ結果を生成する単一のＳＡＤ命令の命令構文５０５を示す。図５はまた、（例えば、プロセッサの実行ユニットによって）単一のＳＡＤ命令が受信および実行されるときに引き起こされる動作／結果として生じるステップ５４０も示す。
【００２６】
命令構文５０５は、ＳＡＤ演算を指定する命令識別子５１０（例えば、「ｓａｄ」）を含む。命令構文５０５は、２つの独立したＳＡＤ結果が記憶されるレジスタを識別する１つのデスティネーションレジスタ識別子５１５（例えば、Ｒｄｄ）ならびに２つのＳＡＤ演算によって処理されることになるソース値が記憶される２個のレジスタを識別するする２つのソースレジスタ識別子５２０（例えば、ＲｓｓおよびＲｔｔ）も含む。いくつかの実施形態では、命令構文５０５は、ソース値（インプット）またはＳＡＤ演算の生成された値（アウトプット）を特徴づける識別子をさらに含み得る。例えば、ソース値が２つのベクトルを備え、生成された結果がスカラ値であることを表示するために（「削減されたベクトル」に関する）「ｖｒ」が使用され得る。更なる例として、ソース値が符号無しのバイト値を備えることを表示するために（「符号無しのバイト」に関する）「ｕｂ」が使用され得る。
【００２７】
単一のＳＡＤ命令の実行によって引き起こされる処理は、図５の動作／結果として生じるステップ５１０で説明される。結果として生じるステップは、デスティネーションレジスタの初期化（Ｒｄｄ＝０）と、ソースレジスタの第１の区分内に記憶された値を処理するための第１のステップのセット５４５と、ソースレジスタの第２の区分内に記憶された値を処理するための第２のステップのセット５５０とを含む。第１および第２の処理ステップのセットはそれぞれ差分絶対値演算５６５と、デスティネーションレジスタへの差分絶対値の合計５６０と、（特定の数の反復のための）演算の繰返し５５５とを含む。いくつかの実施形態では、第１および第２の処理ステップのセットは並列で実行される。
【００２８】
例えば、第１の処理ステップのセット５４５は、ソースレジスタＲｓｓおよびＲｔｔの第１の区分内に（バイト０から３で）記憶された値の差分絶対値を決定すること（「ＡＢＳ（（Ｒｓｓ．ｕｂ［ｉ］−Ｒｔｔ．ｕｂ［ｉ］）」）と、デスティネーションレジスタの第１の区分（Ｗ０）内に差分絶対値を合計すること（「Ｒｄｄ．ｗ［０］＝（Ｒｄｄ．ｗ［０］＋ＡＢＳ（（Ｒｓｓ．ｕｂ［ｉ］−Ｒｔｔ．ｕｂ［ｉ］）））」）と、特定の数の反復に関して演算を繰り返すこと（「ｉ＝０の場合、ｉ＜４、ｉ＋＋」）とを含む。第２の処理ステップのセット５５０は、ソースレジスタＲｓｓおよびＲｔｔの第２の区分内に（バイト４から７で）記憶された値の差分絶対値を決定すること（「ＡＢＳ（（Ｒｓｓ．ｕｂ［ｉ］−Ｒｔｔ．ｕｂ［ｉ］）」）と、デスティネーションレジスタの第２の区分（Ｗ１）内で差分絶対値を合計すること（「Ｒｄｄ．ｗ［１］＝（Ｒｄｄ．ｗ［１］＋ＡＢＳ（（Ｒｓｓ．ｕｂ［ｉ］−Ｒｔｔ．ｕｂ［ｉ］）））」）と、特定の数の反復に関して演算を繰り返すこと（「ｉ＝４の場合、ｉ＜８、ｉ＋＋」）とを含む。
【００２９】
図６は、２個のソースレジスタＲｓｓおよびＲｔｔならびに１個のデスティネーションレジスタＲｄｄを使用して２つの独立したＳＡＤ演算が並列で実行される、代替のコンピュータアーキテクチャ６００の概念図を示す。図６は、例示だけを目的としており、ＳＡＤ演算の個別のステップを例示する点に留意されたい。他の実施形態では、ＳＡＤ演算は（図６に示されるように）複数のステップを用いて実行されず、単一のステップで実行される。
【００３０】
代替のコンピュータアーキテクチャ６００は各ＳＡＤ演算のために累積ループ６０５を含む点を除き、代替のコンピュータアーキテクチャ６００は図４のコンピュータアーキテクチャ４００に類似する。累積ループ６０５は、２つ以上のＳＡＤ演算の和の結果をデスティネーションレジスタＲｄｄの特定の区分内に累積することを可能にする。例えば、第１のＳＡＤ演算は、デスティネーションレジスタの第１の区分に記憶された第１の和の結果を生成する２個のソースレジスタの第１の区分内でソース値に関して実行されると仮定する。その後、新しいソース値は２個のソースレジスタの第１の区分内にロードされ、第２のＳＡＤ演算が第２の和の結果を生成するために新しいソース値に関して実行される。累積ループ６０５は、第２の和の結果がデスティネーションレジスタの第１の区分内に記憶された第１の和の結果に対して累積／加算されることを可能にする。累積された和（第１の和＋第２の和）は、次いで、デスティネーションレジスタの同じ第１の区分内に記憶し戻される。代替のコンピュータアーキテクチャ６００内の加算成分４２０は、デスティネーションレジスタＲｄｄからのインプットも受信する点に留意されたい。
【００３１】
したがって、累積ループ６０５の使用により、現在のＳＡＤ演算の現在の和の結果は、１つまたは複数の先のＳＡＤ演算の（通常、非ゼロ値を備える）１つまたは複数の先の和の結果に対して加算／累積され得る。いくつかの実施形態では、現在のＳＡＤ演算の和の結果は、デスティネーションレジスタの特定の区分内で非ゼロ値に対して加算／累積され（非ゼロ値は、１つまたは複数の先のＳＡＤ演算の１つまたは複数の先の和の結果を備える）、累積された和（現在の和＋１つまたは複数の先の和）は、次いで、デスティネーションレジスタの同じ区分に記憶し戻される。
【００３２】
図７は、図６に示される代替のコンピュータアーキテクチャ６００内で２つの独立したＳＡＤ結果を生成する単一のＳＡＤ命令の命令構文７０５を示す。図７はまた、（例えば、プロセッサの実行ユニットによって）単一のＳＡＤ命令が受信および実行されるときに引き起こされる動作／結果として生じるステップ７４０も示す。図６の代替のコンピュータアーキテクチャ６００に関する命令構文７０５では、レジスタＲｓｓ、ＲｔｔおよびＲｄｄの値から３つのインプットが要求される点に留意されたい。これは、（レジスタＲｓｓおよびＲｔｔ内の値から）２つのインプットだけを要求する、図４のコンピュータアーキテクチャ４００に関する命令構文５０５と対照的である。また、命令構文５０５の結果として生じるステップ５４０は、現在のＳＡＤ演算および先のＳＡＤ演算の和を累積しないため、命令構文５０５の結果として生じるステップ５４０では、デスティネーションレジスタはゼロに初期化される（Ｒｄｄ＝０）点にも留意されたい。しかし、命令構文７０５の結果として生じるステップ７４０では、デスティネーションレジスタは１つまたは複数の先のＳＡＤ演算を保持することが可能であり、命令構文７０５の結果として生じるステップ７４０は現在のＳＡＤ演算および先のＳＡＤ演算の和を累積するため、デスティネーションレジスタはゼロに初期化されない。
【００３３】
和の累積は、現在のブロックおよび基準ブロックのすべての画素の差分絶対値の総計が必要とされるブロック比較において特に有利である。単一のＳＡＤ演算は、通常、現在のブロックおよび基準ブロックの一部だけを処理するため、複数のＳＡＤ演算が各ブロック比較に必要とされる。例えば、４行の画素を有する現在のブロックおよび基準ブロックの場合、現在のブロックと基準ブロックとを比較するために、通常、４つのＳＡＤ演算（各行に関して１つのＳＡＤ演算）が必要とされる。したがって、４つのＳＡＤ演算の結果の総計（すなわち、４つの和の結果の累積）が決定されなければならない。累積ループ６０５は、同じ現在のブロックおよび同じ基準ブロックに関して実行された個別のＳＡＤ演算の和の結果が各ＳＡＤ演算の後で累積されることを可能にする。したがって、個別のＳＡＤ演算の和の結果は、後に個別の命令を通じて一緒に加算されなくてよい。
【００３４】
図８は、ハードウェア内でＳＡＤ命令を実施するために使用され得るコンパイライントリンシックおよび符号化を示す表である。コンパイライントリンシックは、（Ｃ言語などの）高級言語でコードを書き込むとき、プログラマにとって有用である。プログラマは、組み立て段階で（図８に示されるように）Ｒｄｄ＝ｖｒｓａｄｕｂ（Ｒｓｓ、Ｒｔｔ）またはＲｘｘ＋＝ｖｒｓａｄｕｂ（Ｒｓｓ、Ｒｔｔ）に対応する命令を使用するようコンパイラに命令するためにコンパイライントリンシックを使用することができる。符号化はプロセッサ（例えば、デジタル信号プロセッサ）の命令ユニットを設計するために使用され得る。他の実施形態では、ハードウェア内でＳＡＤ命令を実施するために異なるコンパイライントリンシックおよび符号化が使用される。
【００３５】
図９は、２個のソースレジスタと１個のデスティネーションレジスタとを使用して、２つの独立したＳＡＤ演算を並列で実行するための方法９００の流れ図である。いくつかの実施形態では、方法９００のいくつかのステップは、ソフトウェア内または（例えば、プロセッサの実行ユニットによって）ハードウェア内で実施される。方法９００のステップは、例示だけを目的としており、ステップの順序または数は他の実施形態において異なってよく、または交換され得る。
【００３６】
方法９００は、（９０５で）ＳＡＤ演算を指定する単一のＳＡＤ命令が受信されるときに開始し、第１および第２のレジスタはソース値を記憶し、デスティネーションレジスタはＳＡＤ動作結果を記憶する（例えば、「Ｒｄｄ＝ｖｒｓａｄｕｂ（Ｒｓｓ、Ｒｔｔ）」）。単一のＳＡＤ命令を受信することに応答して、方法９００は、次いで、２つの独立したＳＡＤ演算を実行する。そうするために、方法は（９０７で）メモリから第１のソースレジスタの第１の区分に第１の値のセット（例えば、Ｘ０〜Ｘ３）をロードし、第２のソースレジスタの第１の区分に第２の値のセット（例えば、Ｙ０〜Ｙ３）をロードし、第１のソースレジスタの第２の区分に第３の値のセット（例えば、Ｘ４〜Ｘ７）をロードし、第２のソースレジスタの第２の区分に第４の値のセット（例えば、Ｙ４〜Ｙ７）をロードする。方法は、次いで、ソースレジスタの第１の区分内に記憶されたソース値に関して第１のＳＡＤ演算を実行するために第１のステップのセット（９１０〜９２０）を実行して、ソースレジスタの第２の区分内に記憶されたソース値に関して第２のＳＡＤ演算を実行するために第２のステップのセット（９２５〜９３５）を実行する。いくつかの実施形態では、第１および第２のステップのセット（すなわち、第１および第２のＳＡＤ演算）は並列で実行される。
【００３７】
ステップ９１０で、方法９００は、第１および第２のソースレジスタの第１の区分内に記憶された第１および第２の値のセット内の対応する値の差分絶対値を備える第１の差分絶対値のセットを決定する。方法は、次いで、（９１５で）第１の差分絶対値のセットを合計する。オプションで、方法は、次いで、（９１７で）第１の差分絶対値のセットの和をデスティネーションレジスタの第１の区分内に記憶された、１つまたは複数の先のＳＡＤ演算の１つまたは複数の先の和（通常、非ゼロ値）に対して加算／累積する。方法は、次いで、（９２０で）和または累積の結果をデスティネーションレジスタの第１の区分にロードする。
【００３８】
ステップ９２５で、方法９００は、第１および第２のソースレジスタの第２の区分内に記憶された第３および第４の値のセット内の対応する値の差分絶対値を備える第２の差分絶対値のセットを決定する。方法は、次いで、（９３０で）第２の差分絶対値のセットを合計する。オプションで、方法は、次いで、第２の差分絶対値のセットの和をデスティネーションレジスタの第２の区分内に記憶された１つまたは複数の先のＳＡＤ演算の１つまたは複数の和（通常、非ゼロ値）に対して加算／累積する。方法は、次いで、（９３５で）和または累積の結果をデスティネーションレジスタの第２の区分にロードする。方法は次いで終了する。
【００３９】
図１０は、いくつかの実施形態で使用される汎用コンピュータアーキテクチャ１０００の概念図を示す。アーキテクチャ１０００は、メモリ１０１０と、処理ユニット１０３０と、メモリ１０１０を処理ユニット１０３０に結合する１つまたは複数のバス１０２０とを含む。
【００４０】
メモリ１０１０はデータ（例えば、ビデオフレームのブロックの画素値）と、少なくとも１つのＳＡＤ命令を含めて、命令とを記憶する。データおよび命令は、メモリ１０１０からデータまたは命令を取り出すために使用される特定のアドレスをメモリ１０１０内に有する。メモリに対するアドレス指定方式は当技術分野でよく知られており、ここでは詳細に議論されない。メモリ１０１０内のデータおよび／または命令は、バス１０２０を経由して処理ユニット１０３０にロードされる。
【００４１】
処理ユニット１０３０は、シーケンサ１０３５と、複数の実行ユニット１０４５のための複数のパイプライン１０４０と、（複数の汎用レジスタを備える）汎用レジスタファイル１０５０と、制御レジスタファイル１０６０とを備える。処理ユニット１０３０は、中央演算処理層、マイクロプロセッサ、デジタル信号プロセッサなどを備えてよい。いくつかの実施形態では、複数の実行ユニット１０４５は、ＳＡＤ演算を実行するように構成された（ＳＡＤ実行ユニットと呼ばれる）１つまたは複数の実行ユニットを含む。ＳＡＤ実行ユニットは、（差分絶対値演算を実行するための複数のＡＤ成分４１５および値を累積／合計するための複数の加算成分４２０など）ＳＡＤ演算のために要求される処理ステップを実行するように構成された（演算論理ユニットなどの）成分を備える。他の実施形態では、ＳＡＤ実行ユニットは演算論理ユニット内に含まれる。
【００４２】
通常、各命令は、命令を処理するために必要とされる実行ユニット１０４５のタイプに関する情報を含み、各実行ユニットは、通常、特定のタイプの命令だけを処理することが可能である。シーケンサ１０３５はメモリ１０１０から命令を受信して、命令を復号し、（命令内に含まれる情報を使用して）各命令に関して適切な実行ユニット１０４５を決定する。命令に関してこの決定を行った後に、シーケンサ１０３５は、適切な実行ユニット１０４５に制御信号を送信して、適切な実行ユニット１０４５による処理のために命令を適切なパイプライン１０４０内に入力する。
【００４３】
命令を受信する各実行ユニット１０４５は、汎用レジスタファイル１０５０を使用して命令を実行する。当技術分野でよく知られているように、汎用レジスタファイル１０５０はレジスタのアレイを備える。命令を実行するために必要とされる任意のデータ（例えば、画素値）は、メモリ１０１０から取り出されて、汎用レジスタファイル１０５０内のレジスタにロードされる。命令が実行ユニット１０４５によって実行された後で、結果として生じるデータ（例えば、ＳＡＤ演算結果）は汎用レジスタファイル１０５０に記憶され、次いで、メモリ１０１０内にロードおよび記憶される。データはバス１０２０を経由してメモリ１０１０にロードされ、メモリ１０１０からロードされる。命令を実行するために、実行ユニット１０４５は、制御レジスタファイル１０６０を使用することも可能である。制御レジスタ１０６０は、通常、変更子レジスタ、状態レジスタ、および述語レジスタなど、特別なレジスタのセットを備える。制御レジスタ１０６０は、ループカウント（反復カウント）など、ソフトウェアループまたはハードウェアループに関する情報を記憶するために使用されることも可能である。
【００４４】
例えば、シーケンサ１０３５がＳＡＤ命令を受信する場合は、シーケンサ１０３５は、ＳＡＤ実行ユニット１０４５による処理のために命令を適切なパイプライン１０４０に入力することになる。また、ＳＡＤ命令を実行するために要求されるデータ（例えば、画素値）は、汎用レジスタファイル１０５０内の２個のソースレジスタにロードされる。したがって、ＳＡＤ命令は（ＳＡＤ実行ユニット１０４５を使用して）処理ユニット１０３０に２つの独立したＳＡＤ演算を実行させ、２つの和の結果を生成させる。２つの和の結果は汎用レジスタファイル１０５０内のデスティネーションレジスタに記憶され、次いで、バス１０２０を経由して、メモリ１０１０にロードおよび記憶される。いくつかの実施形態では、ＳＡＤ実行ユニット１０４５によって使用されるソースレジスタおよびデスティネーションレジスタはそれぞれ独立してアクセス可能な位置合わせされた１対のレジスタを備える。
【００４５】
当業者は、情報および信号は様々な異なる技術および技法のうちのいずれかを使用して表現され得る点を理解されよう。例えば、上の説明を通じて参照され得るデータ、命令、コマンド、情報、信号、ビット、記号、およびチップは、電圧、電流、電磁波、磁場もしくは磁粉、光場もしくは光粒子、またはそれらの任意の組合せによって表現され得る。
【００４６】
当業者は、ここにおいて開示された実施形態に関して説明された様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、またはそれら両方の組合せとして実施され得る点をさらに理解されよう。ハードウェアおよびソフトウェアのこの交換可能性を分かりやすく例示するために、様々な例示的な成分、ブロック、モジュール、回路、およびステップが、一般に、それらの機能性の点から上で説明されている。そのような機能性がハードウェアとして実施されるかまたはソフトウェアとして実施されるかは、特定の適用業務およびシステム全体に課せられた設計制約に依存する。当業者は、説明された機能性を各特定の適用業務に関して様々な方法で実施することが可能であるが、そのようなインプリメンテーションの決定(implementation decision)は、本発明の範囲からの逸脱を引き起こすとして解釈されるべきではない。
【００４７】
ここで開示される実施形態に関して説明された様々な例示的な論理ブロック、モジュール、および回路は、汎用プロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラム可能なゲートアレイ（ＦＰＧＡ）もしくは他のプログラム可能な論理デバイス、離散的ゲートもしくはトランジスタ論理、離散的なハードウェア成分、またはここで説明された機能を実行するように設計されたそれらの任意の組合せを用いて実施または実行され得る。汎用プロセッサはマイクロプロセッサであり得るが、または代替では、プロセッサは任意の従来のプロセッサ、コントローラ、マイクロコントローラ、もしくは状態機械であってよい。プロセッサはまた、コンピューティングデバイスの組合せ、例えば、ＤＳＰおよびマイクロプロセッサ、複数のマイクロプロセッサ、ＤＳＰコアと共に１つもしくは複数のマイクロプロセッサ、または任意の他のそのような構成として実施されることも可能である。
【００４８】
ここに開示された実施形態に関して説明された方法またはアルゴリズムのステップは、ハードウェアで直接的に、プロセッサによって実行されるソフトウェアモジュールで、またはそれら２つの組合せで実施され得る。ソフトウェアモジュールは、ＲＡＭメモリ、フラッシュメモリ、ＲＯＭメモリ、ＥＰＲＯＭメモリ、ＥＥＰＲＯＭメモリ、レジスタ、ハードディスク、着脱可能ディスク、ＣＤ−ＲＯＭ、または当技術分野で知られている記憶媒体の任意の他の形態の中に常駐し得る。例示的な記憶媒体は、プロセッサが記憶媒体から情報を読み取り、記憶媒体に情報を書き込むことができるようにプロセッサに結合される。代替では、記憶媒体はプロセッサと一体であり得る。プロセッサおよび記憶媒体は、ＡＳＩＣ内に常駐し得る。ＡＳＩＣはユーザ端末内に常駐し得る。代替では、プロセッサおよび記憶媒体は、ユーザ端末内の離散的成分として常駐し得る。
【００４９】
開示された実施形態のこれまでの説明は、当業者が本発明を作り、または使用することを可能にするために提供される。これらの実施形態への様々な変更は当業者に容易に理解されよう、またここにおいて定義される包括的な原理は、本発明の精神または範囲から逸脱することなく、他の実施形態に適用され得る。したがって、本発明はここに示される実施形態に限定されるようには意図されておらず、ここに開示される原理および新規な特徴と整合する最も広い範囲が与えられるべきである。
【図面の簡単な説明】
【００５０】
【図１】動作推定方法の概念図。
【図２】現在のブロックおよび基準ブロックに関して実行されるＳＡＤ演算の概念図。
【図３】並列ブロック処理の概念図。
【図４】２つの独立したＳＡＤ演算が並列で実行されるコンピュータアーキテクチャの概念図。
【図５】図４に示されるコンピュータアーキテクチャ内で２つの独立したＳＡＤ結果を生成する単一のＳＡＤ命令の命令構文。
【図６】２つの独立したＳＡＤ演算が並列で実行される代替のコンピュータアーキテクチャの概念図。
【図７】図６に示される代替のコンピュータアーキテクチャ内で２つの独立したＳＡＤ結果を生成する単一のＳＡＤ命令の命令構文。
【図８】ハードウェア内でＳＡＤ命令を実施するために使用され得るコンパイライントリンシック(compiler intrinsics)および符号化を示す表。
【図９】２個のソースレジスタと１個のデスティネーションレジスタとを使用して、２つの独立したＳＡＤ演算を並列で実行するための方法の流れ図。
【図１０】いくつかの実施形態で使用される汎用コンピュータアーキテクチャの概念図。
【図１】
2009536773.tif 000003
【図２】
2009536773.tif 000004
【図３】
2009536773.tif 000005
【図４】
2009536773.tif 000006
【図５】
2009536773.tif 000007
【図６】
2009536773.tif 000008
【図７】
2009536773.tif 000009
【図８】
2009536773.tif 000010
【図９】
2009536773.tif 000011
【図１０】
2009536773.tif 000012
【国際調査報告】
2009536773.tif 000013
2009536773.tif 000014