JP2005508043A - データの右方向平行シフトマージ方法及び装置 - Google Patents
データの右方向平行シフトマージ方法及び装置 Download PDFInfo
- Publication number
- JP2005508043A JP2005508043A JP2003540797A JP2003540797A JP2005508043A JP 2005508043 A JP2005508043 A JP 2005508043A JP 2003540797 A JP2003540797 A JP 2003540797A JP 2003540797 A JP2003540797 A JP 2003540797A JP 2005508043 A JP2005508043 A JP 2005508043A
- Authority
- JP
- Japan
- Prior art keywords
- data
- operand
- data elements
- group
- shifted
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 192
- 238000012545 processing Methods 0.000 claims description 179
- 230000008569 process Effects 0.000 claims description 122
- 238000004590 computer program Methods 0.000 claims description 4
- 230000033001 locomotion Effects 0.000 description 65
- 238000007792 addition Methods 0.000 description 33
- 238000013500 data storage Methods 0.000 description 32
- 238000007667 floating Methods 0.000 description 30
- 238000004422 calculation algorithm Methods 0.000 description 25
- 238000010586 diagram Methods 0.000 description 25
- 238000001914 filtration Methods 0.000 description 24
- 238000004364 calculation method Methods 0.000 description 23
- 238000005516 engineering process Methods 0.000 description 12
- 239000013598 vector Substances 0.000 description 11
- 230000006872 improvement Effects 0.000 description 7
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 description 6
- 230000004044 response Effects 0.000 description 6
- 238000012546 transfer Methods 0.000 description 6
- 238000010621 bar drawing Methods 0.000 description 5
- 238000004891 communication Methods 0.000 description 5
- 238000007906 compression Methods 0.000 description 5
- 230000006835 compression Effects 0.000 description 5
- 230000001186 cumulative effect Effects 0.000 description 5
- 238000011068 loading method Methods 0.000 description 5
- 229910052760 oxygen Inorganic materials 0.000 description 5
- 230000001419 dependent effect Effects 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 229910052757 nitrogen Inorganic materials 0.000 description 4
- 229910052698 phosphorus Inorganic materials 0.000 description 4
- 230000009467 reduction Effects 0.000 description 4
- 239000000872 buffer Substances 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 101100481702 Arabidopsis thaliana TMK1 gene Proteins 0.000 description 1
- 101100481703 Arabidopsis thaliana TMK2 gene Proteins 0.000 description 1
- 101100481704 Arabidopsis thaliana TMK3 gene Proteins 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000013144 data compression Methods 0.000 description 1
- 230000000593 degrading effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 229910003460 diamond Inorganic materials 0.000 description 1
- 239000010432 diamond Substances 0.000 description 1
- 238000003708 edge detection Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000009499 grossing Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000008450 motivation Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000004091 panning Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000007493 shaping process Methods 0.000 description 1
- 230000005236 sound signal Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/14—Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
- G06F17/147—Discrete orthonormal transforms, e.g. discrete cosine transform, discrete sine transform, and variations therefrom, e.g. modified discrete cosine transform, integer transforms approximating the discrete cosine transform
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/15—Correlation function computation including computation of convolution operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30109—Register structure having multiple operands in a single register
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Computing Systems (AREA)
- Discrete Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
Abstract
Description
本特許出願は、2001年10月29日に出願された米国特許出願第09/952,891号「コンテンツデータの効率的フィルタリング及び畳み込み装置及び方法(An Apparatus And Method For Efficient Filtering And Convolution Of Content Data)」の一部継続出願である。
【0002】
本特許出願は、2002年10月25日に出願された同時係属中の米国特許出願第10/280,612号「SIMDマージ命令による高速全探索動き(Fast Full Search Motion With SIMD Merge Instruction)」に関する。
[発明の技術分野]
本発明は、一般に、マイクロプロセッサ及びコンピュータシステムの分野に関する。より詳細には、本発明は、データの右方向平行シフトマージ(parallel shift right merge)方法及び装置に関する。
[発明の背景]
プロセッサ技術の進歩により、このようなプロセッサを備えたマシーン上で実行される新しいソフトウェアコードが生成されている。一般に、ユーザは、使用しているソフトウェアのタイプに関わらず、コンピュータからより高いパフォーマンスを期待及び要求する。このような問題は、プロセッサ内部において実行されている命令及び処理のタイプから生じる可能性がある。あるタイプの処理には、必要とされる回路の処理及び/あるいはタイプの複雑さに基づき、その完了に多くの時間を要するものもある。このようなことから、複雑な処理のプロセッサ内部での実行方法を最適化するという動機付けが生じる。
【0003】
メディアアプリケーションは、数十年もの間、マイクロプロセッサの発達を促進してきた。実際、近年における大部分の計算機の性能向上はメディアアプリケーションにより促進されてきたものである。娯楽性を高めた教育及び通信目的のため、重大な進歩は企業部門において見出されてきたが、上記のような性能の向上は主として消費者部門において起こってきたものである。にもかかわらず、これからのメディアアプリケーションには、さらに高い計算要件が要求されるであろう。この結果、将来のパーソナルコンピュータ(PC)では、使い安さだけでなくより充実したオーディオビジュアル機能が実現されるであろう。さらに、より重要なものとしては、計算機が通信と融合されるであろう。
【0004】
従って、現在の計算機においては、コンテンツとして総称される音声及び映像データの再生だけでなく画像の表示も、ますます一般的なアプリケーションとなりつつある。フィルタリング及び畳み込み処理は、画像、音声及び映像データのようなコンテンツデータに対し最もよく実行される処理である。当業者には周知のように、フィルタリング及び相関計算では、データや係数の積を加える乗加算演算により計算される。2つのベクトルAとBの相関は、和Sの計算からなる。
【0005】
【数1】
これはしばしばk=0により使われる。
【0006】
【数2】
ベクトルVに適用されるNタップフィルタfの場合、計算される和Sは以下のようになる。
【0007】
【数3】
このような演算には大きな計算量を要する一方、例えば、単一命令多重データ(SIMD)レジスタのような様々なデータ格納装置を利用した効率的実現法を通じ利用可能なハイレベルのデータ並列処理を提供する。
【0008】
フィルタリング処理の応用は、より広い範囲の画像及び映像処理タスク及び通信において見出すことができる。フィルタの利用例としては、MPEG(Motion Picture Expert Group)映像におけるブロックアーチファクトの低減、ノイズや音声の低減、透かし検出を向上させるための画素値からの透かしの抽出、スムージング、シャープニング、ノイズ低減、エッジ検出、画像または映像フレームサイズのスケーリングのための相関、サブピクセル動き予測のための映像フレームのアップサンプリング、音声信号の音質向上、及び通信における信号のパルス整形及び等化処理などが挙げられる。従って、畳み込み処理だけでなくフィルタリング処理もまた、画像、音声及び映像データを含むコンテンツの再生を提供する計算機とって重要なものである。
【0009】
しかしながら、既存の方法及び指示はフィルタリングの通常必要とされるものを満足することを目的としたものであり、より広い範囲をカバーするものではない。実際、多くのアーキテクチャが様々なフィルタ長及びデータタイプに対する効率的なフィルタ計算手段をサポートしていない。さらに、レジスタ内及びレジスタ間における部分的なデータ転送に対する隣接する値の加算と共に、SIMDレジスタのようなデータ記憶装置におけるデータオーダリングは、一般にサポートされていない。その結果、既存のアーキテクチャは不必要なデータタイプの変更を必要とし、それによって、命令あたりの処理数が最小化され、算術演算のためのデータ順序付けに要するクロックサイクル数を著しく増加させてしまう。
【0010】
本発明が実施例を利用することにより示される。本発明は添付される図面に制限されるものではない。図面中、同一の参照記号は同一の要素を示している。
[詳細な説明]
データに対し右方向平行シフトマージを実行する方法及び装置が開示される。また、コンテンツデータの効率的なフィルタリング及び畳み込みを実行する方法及び装置が開示される。さらにまた、SIMDマージ処理による高速全探索動き検出のための方法及び装置が開示される。ここで説明される実施例はマイクロプロセッサに関するものであるが、必ずしもそれに限定されるものではない。以下の実施例はプロセッサに関し説明されるが、他の実施例では、他のタイプの集積回路及び論理装置に適用することもできる。本発明の同様なテクニック及び教示は、より高いパイプラインスループット及び性能を享受しうる他のタイプの回路あるいは半導体デバイスに容易に適用することができる。本発明の教示は、データ操作を実行する任意のプロセッサあるいはマシーンに適用可能である。しかしながら、本発明は、256ビット、128ビット、64ビット、32ビットあるいは16ビットデータ処理を実行するプロセッサあるいはマシーンに限定されるものでなく、データの右方向シフトマージを必要する任意のプロセッサ及びマシーンに適用することができる。
【0011】
以下の記述では、説明のため、本発明の完全な理解を提供するため様々な具体的詳細が与えられる。本発明の実践に対し、これら具体的詳細が必ずしも必要でないということは当業者には認識されるであろう。また、周知の電気構造及び回路は、本発明を不必要に不明瞭にしないよう詳細には与えられていない。さらに、以下の説明は実施例を与えるものであり、添付される図面は例示のため様々な実施例を示している。しかしながら、これらの実施例は限定のためのものと解釈されるべきでない。これらの実施例は、本発明のすべての可能な実現を包括的に列挙するものでなく、単に本発明の例を提供することを目的としている。
【0012】
一実施例において、本発明による方法は、マシーン実行可能な命令により実現される。これらの命令により、プログラム可能な汎用あるいは特定用途向けプロセッサは本発明の各ステップを実行する。あるいは、本発明の各ステップは、これらのステップを実行する配線論理を含む特定のハードウェア要素により実行されてもよいし、あるいはプログラムされたコンピュータ構成要素及びカスタムハードウェア構成要素による任意の組み合わせにより実行されてもよい。
【0013】
本発明は、これに従う処理を実行するようコンピュータ(あるいは他の電子装置)をプログラムするのに利用される命令を有するマシーンまたはコンピュータ読み出し可能な媒体を備えたコンピュータプログラムプロダクツまたはソフトウェアとして与えることができる。そのようなソフトウェアはシステム内部のメモリに格納することができる。同様に、そのコードはネットワークまたは他のコンピュータ読み出し可能な媒体を介し配信されうる。コンピュータ読み出し可能な媒体には、以下に限定されるものではないが、フロッピーディスク(登録商標)、光ディスク、CD(Compact Disc)、CD−ROM(CD Read−Only Memory)、光磁気ディスク、ROM(Read−Only Memory)、RAM(Random Access Memory)、EPROM(Erasable Programmable Read−Only Memory)、EEPROM(Electrically Erasable Programmable Read−Only Memory)、磁気あるいは光カード、フラッシュメモリ、インターネット上の送信などが含まれる。
【0014】
従って、コンピュータ読み出し可能な媒体には、マシーン(例えば、コンピュータ)による読み出し可能な形態により電子的命令あるいは情報の格納または送信に適した任意のタイプのメディア/マシーン読み出し可能な媒体が含まれる。さらに、本発明はまた、コンピュータプログラムプロダクツとしてダウンロード可能であってもよい。その場合、プログラムはリモートコンピュータ(例えば、サーバ)からリクエストコンピュータ(例えば、クライアント)に転送される。プログラムの転送は、電子、光、音響あるいは搬送波で実現される他の形態のデータ信号、あるいは通信リンク(例えば、モデム、ネットワーク接続など)を介した他の伝搬媒体により実行されてもよい。
【0015】
今日のプロセッサでは、様々なコード及び命令の処理及び実行に多くの実行ユニットが利用されている。命令の中には即座に完了するものがある一方、膨大なクロックサイクルを要する命令もあるので、必ずしもすべての命令が等しく生成されるとは限らない。命令のスループットが速くなるほど、プロセッサの全体的なパフォーマンスはより向上する。従って、できる限り多くの命令が実行されることが望ましい。しかしながら、大きな複雑さを有し、多くの実行時間及びプロセッサリソースを要する命令もある。例えば、浮動小数点命令、ロード/ストア処理、データ転送などが挙げられる。
【0016】
ますます多くのコンピュータシステムがインターネットやマルチメディアアプリケーションにおいて利用されるに従い、追加的なプロセッササポートがこれまで導入されてきた。例えば、単一命令多重データ(SIMD)整数/浮動小数点命令やストリーミングSIMDエクステンション(SSE)は、特定のプログラムタスクの実行に要する全体の命令数を減少させる命令である。これらの命令は、複数のデータ要素に対し並列処理を行うことにより、ソフトウェアパフォーマンスの高速化を可能にする。これにより、映像、音声、及び画像/フォト処理を含む広範なアプリケーションにおいてパフォーマンスの向上を達成することが可能となる。通常、マイクロプロセッサや類似の論理回路におけるSIMD命令の実現には多くの発行が伴う。さらに、SIMD処理の複雑さはしばしば、正確なデータ処理及び操作のための追加的回路の必要性を生じさせる。
【0017】
本発明の実施例は、SIMDに関するハードウェアを利用するアルゴリズムとして、右方向平行シフトの実現方法を提供する。一例として、当該アルゴリズムは、所望の数のデータセグメントをあるオペランドから第2のオペランドの最上位サイドに右方向シフトし、同数のデータセグメントが第2のオペランドの最下位サイドにシフトするというコンセプトに基づいている。概念的には、この右方向シフトマージ処理では、データの2つのブロックを1つのブロックとしてマージし、新たなデータパターンを形成するために、データセグメントを所望の位置で揃えるようマージされたブロックのシフトが実行される。従って、本発明による右方向シフトマージアルゴリズムの実施例は、全体のパフォーマンスを大きく損なうことなく効率的にSIMD処理をサポートするプロセッサにおいて実現可能である。
コンピュータアーキテクチャ
図1は、本発明の一実施例が実現されうるコンピュータシステム100を示す。コンピュータシステム100は、情報を通信するためのバス101と、バス101に接続され、情報を処理するプロセッサ109から構成される。コンピュータシステム100はまた、バス101に接続され、プロセッサ109のための情報や命令を格納するメモリサブシステム104〜107を備える。
【0018】
プロセッサ109は、実行ユニット130、レジスタファイル200、キャッシュメモリ160、デコーダ165及び内部バス170から構成される。k多ッ主メモリ160は、実行ユニット130に接続され、プロセッサ109のために頻繁に及び/または最近使用された情報を格納する。レジスタファイル200は、プロセッサ109における情報を格納し、内部バス170を介し実行ユニット130に接続される。本発明の一実施例では、レジスタファイル200は、マルチメディア情報を格納するSIMDレジスタのような複数のマルチメディアレジスタを備える。一実施例では、各マルチメディアレジスタは、128ビットまでのパケットデータを格納する。マルチメディアレジスタは、専用マルチメディアレジスタであってもよいし、あるいはマルチメディア情報や他の情報の格納に利用されるレジスタであってもよい。一実施例では、マルチメディアレジスタは、マルチメディア処理の実行時にはマルチメディア情報を格納し、浮動小数点演算の実行時には浮動小数点データを格納する。
【0019】
実行ユニット130は、Packed命令セット140に含まれるプロセッサ109により受信された命令セットに従いPackedデータを処理する。実行ユニット130はまた、汎用プロセッサにおいて実現される命令に従って、スカラーデータを処理する。プロセッサ109は、Pentium(登録商標)マイクロプロセッサ命令セットとPacked命令セット140をサポートすることができる。Pentium(登録商標)マイクロプロセッサ命令セットのような標準的なマイクロプロセッサ命令セットにPacked命令セット140を含めることにより、Packedデータ命令を(標準的なマクロプロセッサ命令セットのために以前に書かれた)既存のソフトウェアに容易に内蔵することができる。PowerPC(商標)やAlpha(商標)プロセッサの命令セットのような他の標準的な命令セットが、説明される本発明に従い使用されてもよい。(Pentium(登録商標)は、インテルコーポレーションの登録商標である。PowerPC(商標)は、IBM、アップルコンピュータ及びモトローラの商標である。Alpha(商標)は、デジタルイクイップメントコーポレーションの商標である。)
一実施例では、Packed命令セット140は、(以下でさらなる詳細が示されるように)転送データ(MOVD)処理143と、データ記憶装置内のデータを構成するデータシャッフル(PSHUFD)処理145のための命令を含む。符号なし第1ソースレジスタと符号付き第2ソースレジスタに対するPacked乗算及び加算(PMADDUSBW処理147)。符号なし第1ソースレジスタと符号なし第2ソースレジスタに対する乗加算を実行するPacked乗加算処理(PMADDUUBW処理149)。符号付き第1ソースレジスタと符号付き第2ソースレジスタに対するPacked乗加算処理(PMADDSSBW処理151)と、16ビットデータを含む符号付き第1及び第2ソースレジスタに対するPacked乗加算処理(PMADDWD処理153)。最終的に、Packed命令セットには、隣接バイトを加える隣接加算命令(PAADDNB処理155)、隣接ワードを加える隣接加算命令(PAADDNWD処理157)、隣接ダブルワードを加える隣接加算命令(PAADDNDWD処理159)、2つのワード値を加える隣接加算命令(PAADDWD処理161)、16ビットの結果を生成するための2つのワードを加える隣接加算命令(PAADDNWW処理163)、クアドワード結果を生成するため2つのクアドワードを加える隣接加算命令(PAADDNDD処理165)、及びレジスタマージ処理167が含まれる。
【0020】
Packed命令セット140を汎用プロセッサ109の命令セットに、命令を実行する関連する回路と共に含めることによって、多くの既存のマルチメディアアプリケーションにより使われる処理が汎用プロセッサのPackedデータを利用することにより実行されてもよい。従って、Packedデータを処理するプロセッサのデータバスの最大幅を利用することにより、多くのマルチメディアアプリケーションは高速化され、より効率的に実行される。これにより、データのより小さなユニットをプロセッサのデータバスに転送し、一度にデータあたり複数の処理を実行させる必要がなくなる。
【0021】
図1を参照するに、本発明のコンピュータシステム100は、モニタのような表示装置121を含んでいてもよい。表示装置121は、フレームバッファのような中間装置を含んでいてもよい。コンピュータシステム100はまた、キーボードのような入力装置122と、マウス、トラックボールまたはトラックパッドのようなカーソル制御123を含んでいてもよい。表示装置121、入力装置122及びカーソル制御123は、バス101に接続される。コンピュータシステム100はまた、コンピュータシステム100がローカルエリアネットワーク(LAN)やワイドエリアネットワーク(WAN)の一部となるようネットワークコネクタ124を含んでもよい。
【0022】
さらに、コンピュータシステム100は、音声認識のための音声入力を記録するためのマイクロフォンに接続されるオーディオデジタイザのような音声記録及び/あるいは再生装置125に接続することができる。コンピュータシステム100はまた、映像のキャプチャに利用可能な映像デジタル化装置126、プリンタのようなハードコピー装置127、及びCD−ROM装置128を備えてもよい。これらの装置124〜128はまた、バス101に接続される。
プロセッサ
図2は、プロセッサ109の詳細な図を示す。プロセッサ109は、BiCMOS、CMOS及びNMOSのような多くのプロセス技術の何れかを利用した複数の基板において実現することができる。プロセッサ109は、プロセッサ109により使われる制御信号及びデータの復号化を行うデコーダ202を備える。その後、データは内部バス205を介しレジスタファイル200に格納される。問題を明瞭にするため、一例となるレジスタは特定のタイプの回路に限定されるべきでない。一例となるレジスタは、データの格納及び供給、並びにここで説明される機能の実行が可能であることが必要である。
【0023】
データタイプに応じて、データは、整数レジスタ201、レジスタ209、ステータスレジスタ(status register)208、または命令ポインタレジスタ211に格納することができる。例えば、浮動小数点レジスタのような他のレジスタは、レジスタファイル204に含めることができる。一実施例では、整数レ擬すタ201は32ビット整数データを格納する。一実施例では、レジスタ209は、例えば、Packedデータを含むSIMDレジスタのような8つのマルチメディアレジスタR0212a〜R7212hを有する。レジスタ209の各レジスタは、128ビット長である。R1212a、R2212b及びR3212cは、レジスタ209の各レジスタの一例である。レジスタ209のあるレジスタの32ビットを整数レジスタ201の整数レジスタに転送することができる。同様に、整数レジスタの値をレジスタ209のあるレジスタの32ビットに転送することができる。
【0024】
ステータスレジスタ208は、プロセッサ109の状態を示す。命令ポインタレジスタ211は、実行されるべき次の命令のアドレスを格納している。整数レジスタ201、レジスタ209、ステータスレジスタ208及び命令ポインタレジスタ211はすべて内部バス205に接続される。任意の追加的レジスタがまた内部バス205に接続されるであろう。
【0025】
他の実施例では、これらのレジスタのいくつかは、2つのデータタイプに利用することができる。例えば、レジスタ209と整数レジスタ201は、各レジスタが整数データあるいはPackedデータのどちらかを格納できるよう一体化されてもよい。他の実施例では、レジスタ209は浮動小数点レジスタとして利用することができる。この実施例では、Packedデータはレジスタ209あるいは浮動小数点データに格納することができる。一実施例では、一体化されたレジスタは128ビット長を有し、整数は128ビットとして表現される。この実施例では、Packedデータ及び整数データの格納において、レジスタはこれら2つのデータタイプを区別する必要はない。
【0026】
機能ユニット203は、プロセッサ109により実行される処理を行う。そのような処理には、シフト、加算、減算及び乗算などが含まれうる。機能ユニット203は内部バス205に接続される。キャッシュ160は、プロセッサ109の選択的ユニットであり、例えば、メインメモリ104からのデータ及び/あるいは制御信号をキャッシュするのに利用される。キャッシュ160は、デコーダ202に接続され、制御信号207を受信するよう接続される。
データ及び記録フォーマット
図3は、Packedバイト221、Packedワード222及びPackedダブルワード(dword)223の3つのPackedデータタイプを示す。Packedバイト221は、16のPackedバイトデータ要素を含む128ビット長である。一般に、データ要素とは、同じデータ長を有する他のデータ要素と共に1つのレジスタ(あるいはメモリ位置)に格納される個々のデータである。Packedデータ系列では、レジスタに格納されるデータ要素数は、データ要素のビット長により分割される128ビットである。
【0027】
Packedワード222は、128ビット長であり、8つのPackedワードデータ要素を含む。各Packedワードは16ビットの情報を含んでいる。packedダブルワード223は、128ビット長であり、4ついのPackedダブルワードデータ要素を含んでいる。各Packed ダブルワードデータ要素は、32ビットの情報を含んでいる。Packedクアドワードは、128ビット長で、2つのPackedクアドワードデータ要素を含んでいる。
【0028】
図4A〜4Cは、本発明の一実施例によるイン・レジスタ(in−register)Packedデータ記録表現を示す。図4Aに示されるように、符号なしPackedバイトイン・レジスタ表現310により、符号なしPackedバイト201のマルチメディアレジスタ209の1つへの記録が示される。各バイトデータ要素の情報は、第0バイトには第7ビットから第0ビットに、第1バイトには第15ビットから第8ビットに、第2バイトには第23ビットから第16ビットに、最後に、第15バイトには第128ビットから第127ビットから第120ビットにそれぞれ格納される。
【0029】
これにより、利用可能なすべてのビットがレジスタにおいて使用される。この記録配置は、プロセッサの記憶効率を高めるものである。さらに、16のデータ要素がアクセスされることにより、1つの処理がこれら16のデータ要素に同時に実行することができる。符号付きPackedバイトイン・レジスタ表現311により、符号付きPackedバイト211の記録が示される。ここで、すべてのバイトデータ要素の第8ビットは符号表示に使われる。
【0030】
図4Bに示されるように、符号なしPackedワードイン・レジスタ表現312により、第7ワードから第0ワードまでがどのようにマルチメディアレジスタ209のレジスタに格納されるか示されている。符号付きPackedワードイン・レジスタ表現313は、符号なしPackedワードイン・レジスタ表現312と同様である。ここで、各ワードデータ要素の第16ビットは符号表示に使われる。図4Cに示されるように、符号なしPackedダブルワードイン・レジスタ表現314により、マルチメディアレジスタ209がどのように2つのダブルワードデータ要素を格納するか示されている。符号付きPackedダブルワードイン・レジスタ表現315は、符号なしPackedダブルワードイン・レジスタ表現314と同様である。ここで、必要な符号ビットは、ダブルワードデータ要素の第32ビットである。
【0031】
本発明のより教示されるように、コンテンツデータの効率的フィルタリング及び畳み込みは、データ及びフィルタ/畳み込み係数によるデータソース装置のロードにより開始される。多くの場合、例えば、単一命令多重データ(SIMD)レジスタのようなデータ記憶装置内のデータあるいは係数の順序は、算術計算が実行される前に変更を要する。従って、効率的なフィルタ計算及び畳み込みには、適切な算術命令だけでなく、計算の実行に要する効率的なデータ構造化方法が必要とされる。
【0032】
例えば、バックグラウンド部において記号を利用して、例えば、S[I]により与えられる画素Iの値を置換することにより画像がフィルタリングされる。画素Iの何れかのサイドにおける画素値がS[I]のフィルタリング計算において使用される。同様に、画素I+1の何れかのサイドにおける画素が、SD[I+1]の計算に必要とされる。これにより、SIMDレジスタにおける1より多い画素のフィルタリング結果を計算するために、データが複製され、SIMDレジスタに置かれる。
【0033】
しかしながら、既存のコンピュータアーキテクチャでは、アーキテクチャ内の適切なすべてのデータサイズに対する効率的なデータ配置方法が欠落している。従って、図5に示されるように、本発明は、任意のサイズのデータを効率的に順序付けするバイトシャッフル命令(PSHUFB)145を備える。このバイトシャッフル処理145では、シャッフル処理中にバイトの相対位置をより大きなデータ内に維持することにより、バイトより大きなデータサイズの順序付けが行われる。さらに、バイトシャッフル処理145では、SIMDレジスタ内のデータの相対位置の変更、及びデータの複製もまた可能である。
【0034】
図5を再度参照するに、図5は、3つの係数を有するフィルタに対するバイトシャッフル処理145の一例が示されている。従来技術を利用すると、フィルタ係数(図示せず)が3つの画素に適用され、その後このフィルタ係数が他の画素に移動され、再び適用される。しかしながら、これらの処理を並列に実行するために、本発明は、データの配置に新たな命令を導入する。従って、図5に示されるように、データ404は目的データ記憶装置(destination data storage device)406内で構成される。一実施例では、目的データ記憶装置406は、各データ要素を格納するアドレスを特定するのにマスク402を利用したソースデータ記憶装置(source data storage device)404である。一実施例では、マスクの配置は、例えば、フィルタリング処理、畳み込み処理などを含む所望のデータ処理に基づく。
【0035】
従って、マスク402を利用することにより、係数と共にデータ406は並列に処理することが可能になる。上述の実施例では、ソースデータ記憶装置404は、初期的に16の8ビット画素を格納する128ビットSIMDレジスタである。さらに、3つの係数による画素フィルタが利用されるとき、第4の係数は0に設定される。一実施例では、ソースデータ記憶装置404内のデータ要素数に応じて、ソースレジスタ404は目的データ記憶装置あるいはレジスタとして利用され、それにより、一般に必要とされるよりレジスタ数を減少させることができる。さらに、ソースデータ記憶装置404内の上書きされたデータは、メモリから他のレジスタに再ロードされる。さらに、所望のように各データを目的データ記憶装置406内で構成することにより、複数のレジスタがソースデータ記憶装置404として利用されてもよい。
【0036】
データ要素と係数の順序付けが完了したら、データと対応する係数がデータ処理に従い処理される必要がある。様々なフィルタ係数及びデータサイズを利用することにより、フィルタ計算と畳み込み計算には様々な精度による処理が必要とされる。最も基本的なフィルタ処理は、2つの数のペアの乗算と、それらの加算である。この処理は、乗加算命令と呼ばれる。
【0037】
しかしながら、既知のコンピュータアーキテクチャでは、符号付きまたは符号なし係数を利用した複数の配列あるいはフィルタ長及びデータサイズに対する効率的な乗加算をサポートしていない。さらに、バイト演算もサポートされていない。その結果、従来技術によるコンピュータアーキテクチャは、Unpack命令を利用することにより16ビットデータを変換しなければならない。一般に、これらのコンピュータアーキテクチャは、異なるレジスタにある16ビットデータの積を計算し、隣接する積を加え合わせ、32ビットの結果を与える乗加算処理をサポートしている。この解決策は16ビットの精度を要するデータのフィルタ係数には受け入れられるが、(画像や映像において一般的な)8ビットデータの8ビットフィルタ係数に対しては、命令及びデータレベルの並列化は無駄である。
【0038】
図6を参照するに、図6は、第1ソースレジスタ452と第2ソースレジスタ454を示す。一実施例では、第1及び第2ソースレジスタは、例えば、128ビットIntel(登録商標)SSE2 XMMレジスタのようなNビット長SIMDレジスタである。このようなレジスタで実現される乗加算命令は、2つの画素ベクトル452と454に対して以下の結果を与え、目的レジスタ456内に格納される。従って、実施例はPMADDUSBW処理147(図1)と呼ばれる8ビットバイト−16ワード乗加算命令(8−bit byte to 16 word multiply−accumulate instruction)を示す。ここで、命令中の「U」と「S」はそれぞれ符号なしと符号付きバイトを表している。ソースレジスタの一方におけるバイトは符号付きであり、もう一方におけるバイトは符号なしである。
【0039】
本発明の一実施例では、符号なしデータを有するレジスタは、目的及び16乗加算結果である。この選択は、大部分の実行において、データは符号なし、係数は符号付きであるという理由による。データは以降の計算において必要とされる確率は低いので、データを上書きすることが好ましい。図1に示されるような追加的バイト乗加算命令は、両方のレジスタにおける符号なしバイトに対するPMADDUUBW処理149と、両方のソースレジスタにおける符号付きバイトに対するPMADDSSBW処理151である。この乗加算命令は、32ビット符号付き積の生成のために、16ビット符号付きワードのペアに適用されるPMADDWD命令153により完了される。
【0040】
一般的に、フィルタリング処理では、第2ベクトルはフィルタ係数を含んでいる。従って、XMMレジスタを用意するため、係数がレジスタの一部にロードされ、シャッフル命令145を使ってレジスタの残りの部分にコピーするようにしてもよい。例えば、図7Aに示されるように、例えば、XMM128ビットレジスタのような係数データ記憶装置502は、データロード命令の実行に応答して、3つの係数により初期ロードされる。しかしながら、フィルタ係数はデータ処理以前にメモリにおいて構成されるようにしてもよいということは当業者には理解されるであろう。さらに、フィルタリング処理以前に、係数はメモリ内の係数の構成に基づき図7Bに示されるように初期ロードされてもよい。
【0041】
さらに、係数レジスタ502には、符号付きあるいは符号なしとして符号化が可能なフィルタ係数F3、F2及びF1が含まれる。係数レジスタ502がロードされると、既存の命令PSHUFDを使って、図7Bに示されるような結果を得るために、係数レジスタの残り部分内のフィルタ係数をコピーする。図7Bに示されるように、係数レジスタ504には、データ処理の並列実行に要するシャッフルされた係数が含まれる。当業者に知られるように、3つの係数を含むフィルタは画像処理アルゴリズムではよく知られている。しかしながら、JPEG2000のようなフィルタリング処理では、9つの16ビット係数と7つの16ビット係数が利用される。従って、このような係数の処理は係数レジスタの能力を超えるものであり、部分的にフィルタリングされた結果が生じることとなる。各係数を使って最終的な結果が得られるまで、処理が続けられる。
【0042】
図7Cを参照するに、図7Cは、図5に示されるようなソースレジスタ404に初期的に含まれ、目的レジスタ406においてシャッフルされたソースレジスタ506の画素値の配置を示す。データ処理の実行に応答して、PMADDUSBW命令を使って、目的レジスタ510に格納されるにより2つの乗算の和が計算される。しかしながら、計算を完了させ、選ばれたデータ処理に対するデータ処理結果を生成するため、目的レジスタ510の隣接する積和ペアを加算する必要がある。
【0043】
従って、乗加算命令の和が一般的である2画素より長い場合、個々の和が加算される必要がある。しかしながら、既存のコンピュータアーキテクチャでは、隣接する和が同じ目的レジスタにあるということから、隣接する和を加える効率的な方法は提供されていない。従って、本発明は、隣接加算命令を利用している。その結果が図8A〜図8Dに示されている。
【0044】
図8Aを参照するに、図8Aは、32ビット和を与えるために、2つの隣接する16ビット値の加算(PADDD2WD処理157)に従う目的レジスタ552を示す。さらに、図8Aは、4バイトの積の32ビット和を与えるために加算される乗加算命令の2つの隣接する16ビットの結果を示す。図8Bは、32ビット和を与えるために4つの隣接する16ビット値を加算する隣接加算命令(PAADDD4WD処理157)を示す。さらに、バイト乗加算命令の4つの隣接する16ビットの結果が、8バイトの積の32ビット和を与えるために加算される。図8Cは、32ビット和を与えるために8つの隣接16ビット値を加算する隣接加算命令(PAADD8WD処理157)を示す。さらに、この例は、16倍との積の32ビット和を与えるために加算されるバイト乗加算処理の8つの隣接する16ビットの結果を示す。
【0045】
隣接加算処理を実行するための命令の選択は、和(N)におけるターン(turn)数に基づく。例えば、図7Aから図7Cに示されるような3タップフィルタを利用することにより、第1命令(PAADD2WD処理157)は図8Dに示されるような以下の結果を取得する。しかしながら、2つの16ビット画素ベクトル(例えば、マクロブロックの第1ライン)間の相関に対して、図8Cに示されるような最終命令(PAADD8WD処理157)が利用される。このような処理は、SIMDレジスタのサイズが大きくなるに従い、効率的な実行のためにますます重要となってきている。このような処理がなければ、多くの追加的な命令が必要となる。
【0046】
さらに、本発明により示されるように、隣接加算命令セットは、加算可能な隣接値の数と共通のデータタイプを広範にサポートする。一実施例において、隣接する16ビット値の加算は、2つの隣接する値を加算すること(N=2)から開始され、加算対象の数を4(N=4)、それから8(N=8)、そしてレジスタの合計まで倍加する範囲を有する命令セットを含む。16ビットの隣接加算の和のデータサイズは32ビットである。他の実施例では、隣接する16ビットの値が32ビットの和となるよう加算される(PAADDWD処理161)。
【0047】
この実施例では、16ビットのデータサイズによる他の命令は含まれない。なぜなら、32ビットの入力による隣接加算命令を使って、16ビットの入力による命令によって生成される和が加算される。どちらの実施例においても、2つの隣接する値を加算すること(N=2)から開始され、加算対象の数を4(N=4)、それから8(N=8)、そしてレジスタの合計まで倍加する範囲を有する32ビット隣接加算命令セット(PAADDNDWD処理159)が含まれる。32ビット隣接加算の和のデータサイズは32ビットである。いくつかのケースでは、その結果はレジスタを満たさない。例えば、図8Aから図8Cに示されるような命令である3つの相異なる隣接加算により、4、2及び132ビットの結果がもたらされる。一実施例では、これらの結果は目的データ記憶装置の下位及び最下位部分に格納される。
【0048】
従って、図8Bに示されるように、2つの32ビットの結果がある場合、この結果は下位の64ビットに格納される。図8Cに示されるように、32ビットの結果が1つである場合、この結果は下位の32ビットに格納される。当業者により認識されるように、アプリケーションの中には隣接バイトの和を利用するものもある。本発明は、16ビットワードを与える2つの隣接する符号付きバイトを加算する命令(PAADDNB処理155)と、16ビットワード結果を与える2つの隣接する符号なしバイトを加算する命令によりバイトの隣接加算をサポートしている。2より多くの隣接バイトの加算を要するアプリケーションでは、適当な16ビット隣接加算処理により2バイトの16ビットの和が加算される。
【0049】
データ処理結果が計算されると、次の処理はこの結果をメモリ装置に送ることからなる。上述の実施例によって示されるように、この結果は32ビットの精度による符号化が可能である。従って、例えば、レジスタ全体に実行される右方向シフト論理処理(PSRLDQ)や右方向シフトダブルクアドワード論理(shift double quad−word right logical)と共に、上述のMOVD処理143のようなダブルワードに関し実行されるシンプルな転送処理を利用することにより、結果がメモリに書き込まれる。さらに、すべての結果をメモリに書き込むには、第1のケース(図8A)では4つのMOVDと3つのPSRLDQを必要とし、第2のケース(図8B)では2つのMOVDと1つのPSRLDQを必要とし、最後のケースでは図8Cに示されるように1つのMOVDが必要とされる。
【0050】
しかしながら、図7Cに示されるように、隣接加算処理は並列に実行することが可能ではあるが、一般にフィルタリング計算では画像における次の画素が必要とされる。さらに、複数の画素がソースデータ記憶装置またはレジスタにロードされる必要がある。各時点で8つの画素をレジスタにロードすることを回避するために、この処理に2つの解決法が提案される。一実施例では、本発明は、図9Aに示されるように、レジスタマージ処理163を説明する。さらに、目的レジスタ606における画素A1からA8を処理するために、画素A7からA1が画素A8により連結され、目的レジスタ606に画素A8からA1が形成される。これにより、レジスタマージ処理は入力引数により与えられるバイト数を利用して、レジスタの選択を行う。
【0051】
図9Bを参照するに、図9Bは、レジスタマージ処理の実行のための他の実施例を示す。初期的に、8つの画素が第1ソースレジスタ608(MM0)にロードされる。次に、後続の8つの画素が第2ソースレジスタ610(MM1)にロードされる。次に、置換処理が第2ソースレジスタ610に対し実行される。実行されると、レジスタ610が第3ソースレジスタ(MM2)612にコピーされる。次に、第1ソースレジスタ608が8ビット分右方向にシフトされる。さらに、第2ソースレジスタ610とマスクレジスタ614が、Packed論理AND命令に従って合成され、第1ソースレジスタ608に格納される。
【0052】
次に、論理OR演算が第2ソースレジスタ610と第1ソースレジスタ608に対し実行され、目的レジスタ620に結果が生成され、レジスタマージ処理が実行された。この処理は、第1ソースレジスタ608をシフトすることにより、図示されるように続けられる。次に、第2ソースレジスタ610がシフトされ、レジスタ612が生成される。次に、論理AND演算がマスクレジスタ614と第2ソースレジスタ612に対し実行され、結果が目的レジスタ622に格納される。最後に、Packed OR演算が第2ソースレジスタ612と第1ソースレジスタ608に対し実行され、目的レジスタ624に後続のレジスタマージ処理が生成される。本発明の教示を実現する手続き方法が説明される。
動作
図10を参照するに、図10は、例えば、図1及び図2に示されるようなコンピュータシステム100におけるコンテンツデータの効率的フィルタリング及び畳み込みのための方法700を示すブロック図を示す。ここで説明されるように、コンテンツデータとは、画像、音声及び映像データを意味する。さらに、本発明は、当業者に理解されるように、例えば、128ビットIntel(登録商標)アーキテクチャSSE2 MMXレジスタのようなデータレジスタを含むデジタルデータの格納が可能な様々な装置を有するデータ記憶装置に関し言及している。
【0053】
図10を再び参照するに、本発明による方法は処理ブロック702から開始され、データ処理が実行されているか判断される。ここで説明されるように、このデータ処理には、以下に限定されないが、画素データに関し実行される畳み込み及びフィルタリング処理が含まれる。これが実行されると、処理ブロック704が実行される。処理ブロック704では、データロード命令が実行される。このデータロード命令の実行に応答して、処理ブロック706において、入力データストリームデータが、例えば図2に示されるように、ソースデータ記憶装置212Aと補助データ記憶装置212Bにロードされる。
【0054】
処理ブロック708において、このデータ処理によりデータシャッフル命令が実行されたか判断される。データシャッフル命令の実行に応答して、処理ブロック710において、例えば、ソースデータ記憶装置212Bからのデータの選択部分が、目的データ記憶装置内で、あるいは係数データ記憶装置(図5を参照)内の係数配置に従って構成される。係数データ記憶装置内の係数が、所望のデータ処理計算に従って(例えば、図7A及び図7Bに示されるように)構成される。一実施例では、フィルタリング処理以前に、係数はメモリ内で構成される。従って、シャッフルする必要なく、係数は係数データ記憶装置にロードすることができる(図7B参照)。
【0055】
上述のように、図7Aから図7Cに示されるように、データ処理に求められる並列計算の実現にはデータ及び係数の順序付けが必要とされる。しかしながら、これらの係数はデータ処理前に既知となっているので、データ処理中係数をシャッフルする必要なくメモリにおいて構成されるように係数レジスタへのロードを可能にするために、係数はメモリ内で構成されるようにしてもよい。最後に、処理ブロック720において、ロードされたデータはデータ処理に従って処理され、1つ以上のデータ処理結果が生成される。生成されると、データ処理結果はメモリに書き込まれる。
【0056】
図11を参照するに、図11は、データ処理に従ってデータを処理するための方法722を示すブロック図を示す。処理ブロック724において、データ処理が乗加算命令を実行したか判断される。乗加算命令の実行に応答して、処理ブロック726において、図7Cに示されるように、目的記憶装置におけるデータと係数データ記憶装置における係数の複数の積和ペアが生成される。次に、処理ブロック728において、データ処理が隣接加算命令を実行したか判断される。
【0057】
隣接加算命令の実行に応答して、処理ブロック730において、目的データ記憶装置510(図7C)における隣接積和ペアが加算され、1つ以上のデータ処理結果が生成される(図8D参照)。しかしながら、ある実施例では、係数の個数が係数レジスタの容量を超える場合(処理ブロック732参照)、部分的なデータ処理結果が取得される。従って、係数(処理ブロック734)とデータ(処理ブロック736)の処理及び構成は、選択的な処理ブロック732から736に示されるように、最終的なデータ処理結果が得られるまで続けられる。そうでない場合、処理ブロック738において、1つ以上のデータ処理結果は格納される。最後に、処理ブロック790において、入力データストリームデータの処理が完了したか判断される。処理が完了すると、制御フローは処理ブロック720に戻り、方法700は終了される。
【0058】
図12を参照するに、図12は、追加的な入力データを処理するための追加的方法740を示すブロック図を示す。処理ブロック742において、ソースデータ記憶装置212A内にアクセスされていないデータが存在するか判断される。ここで説明されるように、アクセスされていないデータとは、乗加算命令を実行するためデータ記憶装置においてシャッフルされていないソースデータ記憶装置212A内のデータを意味する。データ記憶装置がアクセスされていないデータを含む場合、処理ブロック744において、データの一部が選択データとしてソースデータ記憶装置から選択される。選択されると、処理ブロック786が実行される。
【0059】
そうでない場合、処理ブロック746において、ソースデータ記憶装置から1つ以上の未処理データ要素が選ばれると共に、補助データ記憶装置から1つ以上のデータ要素が選ばれる。ここで説明されるように、未処理データ要素とは、データ処理結果がまだ計算されていないデータ要素を意味している。次に、処理ブロック780において、レジスタマージ命令(図9A及び図9B参照)が実行され、ソースデータ記憶装置の未処理データ要素と補助データ記憶装置から選ばれたデータ要素が連結され、選択されたデータが生成される。次に、処理ブロック782において、補助データ記憶装置からのデータがソースデータ記憶装置に転送される。
【0060】
さらに、ソースデータ記憶装置は、すべて処理済であるため、もはや必要とされない。従って、未処理データを含むデータの補助記憶が利用され、ソースデータ記憶装置におけるデータが上書きされる。処理ブロック784において、補助データ記憶装置は、フィルタリング処理や畳み込み処理のような追加的なデータ処理に必要なメモリ装置からの入力データストリームデータによりロードされる。最後に、処理ブロック786において、選択されたデータが係数データ記憶装置(図5参照)における係数配置に従って、目的データ記憶装置内で構成される。これが実行されると、制御フローは選択されたデータの継続処理のため、図11に示されるように処理ブロック790に戻る。
【0061】
図13を参照するに、図13は、未処理データ要素を選択するための追加的方法748を示す。処理ブロック750において、ソースデータ記憶装置に未処理データが含まれているか判断される。ソースデータ記憶装置におけるデータの各部分が処理済である場合、処理ブロック770が実行される。処理ブロック770において、選択されたデータとして機能するデータの一部が補助データ記憶装置から選ばれ、データ処理に従い処理される。
【0062】
そうでない場合、処理ブロック752において、1つ以上の未処理データ要素がソースデータ記憶装置から選ばれる。最後に、処理ブロック766において、未処理データ要素の合計に従い補助データ記憶装置から追加的なデータ要素が選択され、選択されたデータが生成される。さらに、データ処理の実行前に、目的データ記憶装置におけるシャッフル処理のため選択されたデータは、フィルタ係数の個数に基づきデータ要素数に制限される。従って、このデータ要素の合計を利用して、レジスタマージ処理実行のため、補助データ記憶装置から選ばれるデータ要素数を決定するために、未処理データ要素数がデータ要素の合計から差し引かれる。
【0063】
最後に、図14を参照するに、図14は、図13に示されるように、処理ブロック752の未処理データ要素を選択するための追加的方法754を示す。処理ブロック756において、ソースデータ記憶装置からデータ要素が選ばれる。次に、処理ブロック758において、当該データ要素のデータ処理結果が計算されているかどうか判断ざれる。この結果が計算されている場合、選択されたデータ要素は破棄される。そうでない場合、処理ブロック760において、この選択されたデータ要素は未処理データ要素であり、格納される。次に、処理ブロック762において、未処理データ要素の合計がインクリメントされる。最後に、処理ブロック764において、ソースデータ記憶装置内の各データ要素が処理されるまで、処理ブロック756から762が繰り返される。
【0064】
さらに、本発明の教示を使って、不要なデータタイプ変更が回避される。これにより、命令あたりのSIMD処理数を最大化することができる。さらに、算術演算のためのデータ順序付けに要するクロックサイクル数を大幅に減らすことができる。従って、表1は、本発明のより説明された教示及び指示を利用したいくつかのフィルタリングアプリケーションのための高速化された推定値を与える。
【0065】
【表1】
他の実施例
SIMDレジスタを利用したコンテンツデータの効率的なフィルタリング及び畳み込み処理を提供するコンピュータアーキテクチャの一実施例のいくつかの特徴が説明されてきた。しかしながら、コンピュータアーキテクチャの様々な実施形態により、上述の特徴の補完、補助及び/あるいは置換を含む多くの特徴が提供される。これらの特徴は、コンピュータアーキテクチャの一部、あるいは異なる実施形態でのソフトウェアまたはハードウェア要素の一部として実現される。また、上記記述では説明のため、本発明の完全な理解を与えるため特定の用語が利用された。しかしながら、本発明の実践のために特定の詳細が必ずしも必要でないということは当業者には明らかであろう。
【0066】
さらに、ここで説明された実施例は、SIMDレジスタを使ったコンテンツデータの効率的なフィルタリング及び畳み込み処理のためのシステムを対象としているが、本発明の教示は他のシステムに適用可能であるということは当業者には理解されるであろう。実際、画像、音声及び映像データの処理システムは、本発明の範囲及び趣旨から逸脱することなく本発明の教示の範囲内に入る。上述の実施例は、本発明の原理及びその実践的適用を最も良く説明するため選ばれ、記述された。これらの実施例は、当業者が特定の利用形態に適するよう様々な修正を行うことにより、発明及び様々な実施例を最も良く利用できるよう選ばれた。
【0067】
本発明の実施例は、従来技術に対する多くの効果を提供する。本発明は、複数の配列長、データサイズ及び係数符号に対するフィルタリング/畳み込み処理を効率的に実行することができる。これらの処理は、小さな単一命令多重データ(SIMD)命令群の一部であるいくつかの命令を利用することにより実行される。従って、本発明は不要なデータタイプ変更を回避する。この結果、不要なデータタイプ変更を回避することによって、本発明は命令あたりのSIMD処理数を最大化する一方、乗加算演算のような算術処理のためデータを順序付ける必要があるクロックサイクル数を大きく減少させることができる。
【0068】
図15は、本発明による右方向平行シフトマージ処理を実行する論理回路を含む一例となるプロセッサのマイクロアーキテクチャのブロック図である。右方向シフトマージ処理はまた、上記説明と同様に、レジスタマージ処理及びレジスタマージ命令として呼ばれる。右方向シフトマージ命令(PSRMRG)の一実施例のため、当該命令は図1、9A及び9Bのレジスタマージ処理167と同じ結果をもたらす。イン・オーダーフロントエンド(in−order front end)1001は、実行対象のマクロ命令を取り込み、プロセッサパイプラインでの後の利用のためそれらを用意するプロセッサ1000の一部である。本実施例のフロントエンドは複数のユニットを含んでいる。命令プレフェッチャ(instruction prefetcher)1026は、メモリからマクロ命令を取り込み、それらを命令デコーダ1026に供給する。そして命令デコーダ1028は、このマクロ命令をマシーンが実行可能なマイクロ命令あるいはマイクロ処理(またはマイクロopまたはuopと呼ばれる)と呼ばれる要素に復号する。トレースキャッシュ1030は、復号化されたuopを受け取り、実行のためuopキュー1034においてそれらを順序付けされたプログラムシーケンスあるいはトレースに分解する。トレースキャッシュ1030が複雑なマクロ命令に直面すると、マイクロコードROM1032が当該処理の完了に必要なuopを提供する。
【0069】
多くのマクロ命令が1つのマイクロopに変換される一方、他のマクロ命令は完全な処理の完了のため複数のマイクロopを必要とするかもしれない。本実施例では、マクロ命令の完了のため4より多くのマイクロopが必要な場合、デコーダ1028はマイクロコードROM1032にアクセスし、マクロ命令を実行する。一実施例では、右方向平行シフトマージアルゴリズムのための命令は、多数のマイクロopが処理の実行に必要である場合、マイクロコードROM1032に格納することができる。トレースキャッシュ1030は、入力ポイントPLA(Programmable Logic Array)を参照し、マイクロコードROM1032における分割アルゴリズムのためのマイクロコードシーケンスを読み込むための正しいマイクロ命令ポインタを決定する。マイクロコードROM1032が現在のマクロ命令に対するマイクロopの順序付けを完了すると、マシーンのフロントエンド1001はトレースキャッシュ1030からマイクロopの取り込みを再開する。
【0070】
いくつかのSIMD及び他のマルチメディアタイプの命令は複雑な命令とみなされる。浮動小数点に関する大部分の命令もまた複雑な命令である。さらに、命令デコーダ1028が複雑なマクロ命令に直面すると、マイクロコードROM1032は当該マクロ命令のためのマイクロコードシーケンスを抽出するために、適当な位置でアクセスされる。このマクロ命令の実行に要する様々なマイクロopが、適当な整数及び浮動小数点実行ユニットにおける実行のため、アウト・オブ・オーダー実行エンジン1003に通信される。
【0071】
アウト・オブ・オーダー実行エンジン1003では、実行のためにマイクロ命令が用意されている。アウト・オブ・オーダー実行論理は、マイクロ命令がパイプラインに入り、実行のためスケジューリングされるとき、パフォーマンスを最適化するためマイクロ命令のフローを平滑化及び順序調整をするための複数のバッファを有する。割り当て論理は、各uopが実行に必要とするマシーンバッファやリソースを割り当てる。レジスタリネーム論理は、論理レジスタをレジスタファイルの入力に改名する。割り当て論理はまた、メモリスケジューラ、高速スケジューラ1002、低速/通常浮動小数点スケジューラ1004、及びシンプル浮動小数点スケジューラ1006の命令スケジューラの前に、メモリ処理及び非メモリ処理のための2つのuopキューの1つにおける各uopに対する入力を割り当てる。uopスケジューラ1002、1004及び1006は、スケジューラの従属入力レジスタオペランドソースの準備状況と、uopが処理の遂行に必要とする実行リソースの利用可能状況に基づき、uopの実行準備がいつ整うかを判断する。本実施例の高速スケジューラ1002がメインクロックサイクルの半サイクルごとにスケジューリングを行う一方、その他のスケジューラはメインプロセッサクロックサイクルあたり1回だけスケジューリングを行うことができる。スケジューラはディスパッチポートを調停して、実行のためのuopをスケジューリングする。
【0072】
レジスタファイル1008と1010は、スケジューラ1002、1004及び1006と、実行ブロック1011の実行ユニット1012、1014、1016、1018、1020、1022及び1024との間に配置される。整数及び浮動小数点演算のためにそれぞれレジスタファイル1008と1010がある。本実施例の各レジスタファイル1008と1010はまた、まだレジスタファイルに書き込まれていない完了結果を新しい従属uopにバイパスあるいは転送するバイパスネットワークを含む。整数レジスタファイル1008と浮動小数点レジスタファイル1010はまた、互いにデータの通信を行うことができる。一実施例において、整数レジスタファイル1008は2つのレジスタファイルに分割され、その一方は下位32ビットデータ用のレジスタファイルであり、もう一方は上位32ビットデータ用のレジスタファイルである。一実施例の浮動小数点レジスタファイルは1010は、128ビット幅の入力を有する。これは浮動小数点命令は典型的に、64から128ビット幅のオペランドを有するからである。
【0073】
実行ブロック1011は、命令を実際に実行する実行ユニット1012、1014、1016、1018、1020、1022及び1024を含む。この部分は、マイクロ命令が実行に必要とする整数及び浮動小数点データオペランド値を格納するレジスタファイル1008と1010を含む。本実施例のプロセッサ1000は、アドレス生成ユニット(AGU)1012、AGU1014、高速ALU1016、高速ALU1018、低速ALU1020、浮動小数点ALU1022及び浮動小数点移動ユニット1024からなる複数の実行ユニットから構成される。本実施例において、浮動小数点実行ブロック1022と1024は、浮動小数点MMX、SIMD及びSSE処理を実行する。本実施例の浮動小数点ALU322は、割算、平方根及び剰余に関するマイクロopを実行するための64ビット単位浮動小数点割算器を有する。本発明の実施例では、浮動小数に関する任意の処理は浮動小数点ハードウェアにより引き起こされる。例えば、整数形式と浮動小数形式間の変換には、浮動小数点レジスタファイルが関係する。同じように、浮動小数割算処理は浮動小数点割算器において引き起こされる。他方、非浮動小数点数及び整数タイプは整数ハードウェアリソースにより処理される。単純かつ頻繁に使用されるALU演算は、高速ALU実行ユニット1016と1018において処理される。本実施例の高速ALU1016と1018は、半分のクロックサイクルの効果的な待ち時間により高速処理を実行することができる。一実施例では、大部分の複雑な整数演算は低速ALU1020に渡される。低速ALU1020は、乗算、シフト、フラグ論理及び分岐処理のような長い待ち時間を要するタイプの処理用の整数実行ハードウェアを含む。メモリロード/ストア処理は、AGU1012と1014により実行される。本実施例では、整数ALU1016、1018及び1020は、64ビットデータオペランドに対する整数処理の実行に関して説明される。他の実施例では、ALU1016、1018及び1020は、16、32、128、256などの様々なデータビットをサポートするよう実現することができる。同じように、浮動小数点ユニット1022と1024は、様々なビット幅を有するオペランドをサポートするよう実現することができる。一実施例では、浮動小数点ユニット1022と1024は、SIMD及びマルチメディア命令に関して、128ビット幅のPackedデータオペランドにおいて実行される。
【0074】
本実施例では、uopスケジューラ1002、1004及び1006は、親ロードが実行を完了する前に、従属処理をディスパッチする。uopがプロセッサ1000において投機的にスケジューリング及び実行されるとき、プロセッサ1000はまたメモリミスを処理するための論理を含む。データキャッシュにおいてデータロードがミスする場合、一時的に誤ったデータをスケジューラに残したパイプラインにおけるフライト(flight)での従属処理が存在しうる。リプレイ機構が、誤ったデータを利用する命令を追跡及び再実行する。従属処理のみがリプレイされる必要があり、独立した処理は完了させることができる。プロセッサの一実施例のスケジューラ及びリプレイ機構はまた、拡張された精度整数割算処理の命令シーケンスを獲得するよう構成されている。
【0075】
「レジスタ」という単語は、オペランドを特定するマクロ命令の一部として利用されるオン・ボードプロセッサ記憶領域を参照するのにここでは使われる。言い換えると、ここで呼ばれるレジスタとは、プロセッサ外部から(プログラマーの視点から)見ることができるものである。しかしながら、ここで述べられるレジスタは、例えば、専用物理レジスタ、レジスタリネーミングを利用した動的に割り当てられた物理レジスタ、専用物理レジスタと動的に割り当てられる物理レジスタとを組み合わせたものなどのような様々なテクニックを利用したプロセッサ内部の回路により実現することができる。
【0076】
以下の説明のため、レジスタは、カリフォルニア州サンタクララのインテルコーポレーションからのMMX技術が可能なマイクロプロセッサにおける64ビット幅MMX(商標)レジスタ(mmレジスタ)のようなPackedデータの保持が可能なデータレジスタであると解釈される。このようなMMXレジスタは、整数及び浮動小数点の両方の形式で利用可能であり、SIMDとSSE命令を伴うPackedデータ要素により動作可能である。同様に、SSE2技術に関する128ビット幅XMMレジスタもまた、そのようなPackedデータオペランドの保持に利用可能である。
【0077】
以下の図面による例では、多数のデータオペランドが説明される。簡単化のため、データセグメントはAからアルファベット順にラベル付けされ、Aは最下位アドレスに、Zは最上位アドレスに位置する。従って、Aはアドレス0に、Bはアドレス1に、Cはアドレス3に、以下同様にしてラベル付けされる。いくつかの例では、データシーケンスは逆アルファベット順に配置された文字により表されるが、アドレッシングは依然として0にあるAから、1にあるBという順で開始される。概念的には、一実施例のための右方向シフトマージと同様に、右方向シフト処理は、シーケンスがD、C、B、Aである場合、最下位アドレスのデータセグメントを右方向にシフトすることに関する。右方向のシフトは、1つのデータブロック分のデータ要素を固定線に沿って単に右方向にシフトする。さらに、概念的には右方向シフトマージ処理は、最右データセグメントを1つのオペランドから他のデータオペランドの左側に、あたかもこれら2つのオペランドが連続するように、右方向にシフトする。
【0078】
図16Aは、本発明によるデータオペランドに対する右方向平行シフトマージ処理を実行する論理の一実施例のブロック図である。本実施例の右方向シフトマージ(またはレジスタシフト)処理のための命令(PSRMRG)は、第1データオペランド1102、第2データオペランド1104及びシフトカウント1106からなる3つの情報から開始される。一実施例では、シフトPSRMRG命令が1つのマイクロ処理に復号される。他の実施例では、当該命令はデータオペランドに対するシフトマージ処理を実行する様々なマイクロopに復号されてもよい。本実施例では、データオペランド1102と1104はレジスタ/メモリに格納された64ビット幅のデータ片であり、シフトカウント1106は8ビット幅の即値である。特定の実現に応じて、データオペランドとシフトカウントは、それぞれ128/256ビットと16ビットのような他の幅であってもよい。本実施例での第1オペランド1102は、P、O、N、M、L、K、J及びIの8つのデータセグメントから構成される。第2オペランドもまた、H、G、F、E、D、C、B及びAの8つのデータセグメントから構成される。これらデータセグメントは等しい長さを有し、それぞれ1バイト(8ビット)データから構成される。しかしながら、本発明の他の実施例はより長い128ビットのオペランドにより動作する。この場合、各データセグメントは1バイト(8ビット)からなり、128ビット幅のオペランドは16バイト幅のデータセグメントを有する。同様に、各データセグメントがダブルワード(32ビット)またはクアドワード(64ビット)である場合、128ビットオペランドはそれぞれ4ダブルワード幅あるいは2クアドワード幅のデータセグメントを有する。従って、本発明の実施例は特定の長さのデータオペランド、データセグメントあるいはシフトカウントに限定されるものでなく、各実現形態に対し適当なサイズとすることができる。
【0079】
オペランド1102と1104は、レジスタ、メモリ領域、レジスタファイルあるいはそれらを組み合わせたものに格納することができる。データオペランド1102と1104とカウント1106が、右方向シフトマージ命令と共にプロセッサ内の実行ユニット1110に送信される。右方向シフトマージ命令が実行ユニット1110に届くまでに、当該命令はプロセッサパイプラインにおいて復号されるべきであった。従って、右方向シフトマージ命令は、マイクロ処理(uop)による形式あるいは他の復号形式でありうる。本実施例では、2つのデータオペランド1102と1104が連結論理と仮のレジスタにおいて受信される。連結論理は、これら2つのオペランドに対しデータセグメントをマージ/ジョインし、新しいデータブロックを仮のレジスタに配置する。ここで、この新しいデータブロックは、P、O、N、M、L、K、J、I、H、G、F、E、D、C、B及びAの16のデータセグメントから構成される。本実施例は64ビット幅のオペランドにより動作するので、合成されたデータを保持する必要のある仮のレジスタは128ビット幅である。128ビット幅のデータオペランドに対しては、256ビット幅の仮レジスタが必要とされる。
【0080】
実行ユニット1110における右方向シフト論理1114は、仮レジスタのコンテンツを取得し、カウント1106により要求に従い、nデータセグメントだけデータブロックを右方向に論理シフトする。本実施例では、カウント1106は右方向にシフトするバイト数を示す。特定の実施形態に応じて、カウント1106を使ってデータセグメントの粒度に応じたシフトされるべきビット数、ニブル(nibble)数、ワード数、ダブルワード数、クアドワード数などを示すことができる。本実施例では、仮レジスタのコンテンツが3バイトだけシフトされるようnは3に等しくされる。各データセグメントがワードあるいはダブルワード幅であるとき、カウントはそれぞれシフトされるべきワード数あるいはダブルワード数を表す。本実施例では、レジスタのデータが右方向にシフトされるとき、空のスペースを埋めるために、仮レジスタの左側から0がシフト入力される。従って、シフトカウント1106がデータオペランドのデータセグメント数(この場合、8)より大きい場合、1つ以上の0が結果となる1108に現れる。さらに、シフトカウント1106が両方のオペランドに対しデータセグメントの総数以上であれば、すべてのデータセグメントがシフトにより破棄されるので、結果はすべて0となる。右方向シフト論理1114は、仮レジスタから適当な個数のデータセグメントを結果1108として出力する。他の実施例では、出力マルチプレクサあるいはラッチを、結果を出力する右方向シフト論理の後に備えることができる。本実施例では、当該結果は64ビット幅であり、8バイトを有する。2つのデータオペランド1102と1104に対する右方向シフトマージ処理により、結果はK、J、I、H、G、F、E及びDの8つのデータセグメントから構成される。
【0081】
図16Bは、右方向シフトマージ処理を実行する論理の他の実施例のブロック図である。図16Aの前記実施例と同様に、本実施例の右方向シフトマージ処理は、64ビット幅の第1データオペランド1102、64ビット幅の第2データオペランド1104及び8ビット幅のシフトカウント1106の3つの情報から開始される。シフトカウント1106は、データセグメントのシフト数を示す。本実施例では、カウント1106はバイト数に関し記述される。他の実施例では、カウントはデータのシフトされるべきビット数、ニブル数、ワード数、ダブルワード数、あるいはクアドワード数を示してもよい。本実施例における第1及び第2オペランドはそれぞれ、8に等しい長さのバイトサイズデータセグメントからなり、第1オペランド1102は8つのデータセグメント(H、G、F、E、D、C、B、A)、第2オペランド1104は8つのデータセグメント(P、O、N、M、L、K、J、I)から構成される。カウントnは3に等しい。本発明の他の実施例は、例えば、128/256/512ビット幅のオペランド、ビット/バイト/ワード/ダブルワード/クアドワードのサイズのデータセグメント、8/16/32ビット幅のシフトカウントのような他の長さのオペランド及びデータセグメントにより動作することも可能である。従って、本発明の実施例は、特定の長さのデータオペランド、データセグメントあるいはシフトカウントに限定されず、各実施形態に適したサイズとすることができる。
【0082】
データオペランド1102と1104、及びカウント1106は、右方向シフトマージ命令と共にプロセッサ内の実行ユニット1120に送信される。本実施例では、第1データオペランド1102と第2データオペランド1104が、それぞれ左方向シフト論理1122と右方向シフト論理1124において受信される。カウント1106もまた、シフト論理1122と1124に送られる。左方向シフト論理1122は、第1オペランド1102のデータセグメントを「第1オペランドのデータセグメント数−n」個のセグメントだけ左方向にシフトする。データセグメントが左にシフトされると、空いたスペースを埋めるように左側から0がシフト入力される。この場合、8つのデータセグメントがあるので、第1オペランド1102は8−3=5だけ左にシフトされる。第1オペランド1102は、論理ORゲート1126においてマージのため正しくデータを配置するために、この異なる値だけシフトされる。ここでの左方向へのシフト後、第1データオペランドは、K、J、I、0、0、0、0、0となる。カウント1106がオペランドのデータセグメント数より大きい場合、左方向へのシフト計算は負の値となり、これは左方向への負のシフトを表す。負のカウントのよる左方向シフト論理は、負の方向へのシフトとして解釈され、実質的に右方向へのシフト論理となる。左方向への負のシフトにより、第1オペランド1102の左側から0となる。
【0083】
同じように、右方向シフト論理1124は、第2オペランドのデータセグメントをnセグメントだけ右方向にシフトする。データセグメントが右にシフトされると、殻のスペースを埋めるために左側から0がシフト入力される。第2データオペランドは、0、0、0、H、G、F、E、Dとなる。シフトされたオペランドは左シフト論理1122または右シフト論理1124から出力され、論理ORゲート1126においてマージされる。ORゲートは、データセグメントの論理OR処理を実行し、本実施例の64ビット幅の結果1108を与える。「K、J、I、0、0、0、0、0」と「0、0、0、H、G、F、E、D」のOR処理により、8バイトのK、J、I、H、G、F、E、Dから構成される結果1108が生成される。この結果は、図16Aにおける本発明の第1実施例のものと同じである。ここで、オペランドのデータセグメント数より大きなカウントn1106に対しては、適当な数の0が結果の左側から現れる。さらに、カウント1106が両方のオペランドのデータ要素数の合計以上である場合、当該結果はすべて0より構成される。
【0084】
図17Aは、本発明の第1実施例による右方向平行シフトマージ命令の動作を示す。この説明において、MM11204、MM21206、TEMP1232及びDEST1242は一般に、オペランドまたはデータブロックと呼ばれるが、それに限定されるものでなく、レジスタ、レジスタファイル及びメモリ領域を含む。一実施例では、MM11204とMM21206は、64ビット幅のMMXレジスタ(あるいはいくつかの例では「mm」と呼ばれる)である。状態I1200において、シフトカウントimm[y]1202、第1オペランドMM1[x]1204及び第2オペランドMM2[x]1206が、右方向平行シフトマージ命令と共に送られる。カウント1202は、yビット幅の即値である。第1オペランド1204と第2オペランド1206はそれぞれ、各データセグメントが1バイト(8ビット)の場合、xデータセグメントを含み、8xビットの合計幅を有するデータブロックである。第1オペランドと第2オペランドはそれぞれ、多数のより小さいデータセグメントによりパックされる。本実施例では、第1データオペランドMM11204は、P1211、O1212、N1213、M1214、L1215、K1216、J1217、I1218の8に等しい長さのデータセグメントから構成される。同じように、第2データオペランドMM21206は、H1221、G1222、F1223、E1224、D1225、C1226、B1227、A1228の8に等しい長さのデータセグメントから構成される。従って、これらのデータセグメントのそれぞれは「x・8」ビット幅となる。これより、xが8のとき、各オペランドは8バイトあるいは64ビット幅となる。他の実施例では、データ要素は、ニブル(4ビット)、ワード(16ビット)、ダブルワード(32ビット)、クアドワード(64ビット)などであってもよい。他の実施例では、xは16、32、64のデータ要素幅であってもよい。本実施例では、カウントyは8に等しく、即値はバイトで表される。他の実施例では、yは4、16、32などのビット幅であってもよい。さらに、カウント1202は、即値に限定されず、レジスタまたはメモリ領域に格納される。
【0085】
オペランドMM11204とMM21206は、状態II1203においてマージされ、2xデータ要素幅(あるいはこの場合にはバイト)の仮のデータブロックTEMP[2x]1232が生成される。本実施例のマージされたデータ1232は、P、O、N、M、L、K、J、I、H、G、F、E、D、C、B及びAとして配置される16のデータセグメントから構成される。8バイト幅の窓1234は、最右端から始まる仮のデータブロック1232の8つのデータセグメントから構成される。従って、窓1234の右端は、窓1234がH、G、F、E、D、C、B及びAのデータセグメントから構成されるようデータブロック1232の右端から並べられる。シフトカウントn1202は、マージされたデータを右方向にシフトする所望のシフト数を示す。このカウント値は、ビット、ニブル、バイト、ワード、ダブルワード、クアドワードなど、あるいは特定のデータセグメント数に関するシフト数を示すよう実現されてもよい。カウント値1202に基づき、データブロック1232はnデータセグメントだけ右方向へシフトされる(1236)。本実施例では、nは3に等しく、データブロックは3だけ右にシフトされる。これのもう1つの見方は、窓1234を反対方向へシフトするというものである。言い換えると、窓1234は概念的には、仮のデータブロック1232の右端から左に3つシフトしたとみなすことができる。一実施例において、シフトカウントnが合成されたデータブロックにおいて与えられるデータセグメントの総数2xより大きい場合、結果はすべて0から構成されるであろう。同じように、シフトカウントnが第1オペランド1204におけるデータセグメント数x以上である場合、結果はそれの右端から1つ以上の0を含むことになる。状態III1240において、窓1234により構成されるデータセグメント「K、J、I、H、G、F、E、D」が、結果としてxデータ要素幅目的DEST[x]1242に出力される。
【0086】
図17Bは、第2実施例による右方向シフトマージ命令の動作を示す。状態I1250において、右方向シフトマージ命令は、yビットのカウントimm[y]、xデータセグメントの第1データオペランドMM1[x]、及びxデータセグメントの第2データオペランドMM2[x]により伴われる。図17Aの実施例に関し、yは8に等しく、xも8に等しい。ここでMM1とMM2はそれぞれ64ビットまたは8バイト幅である。本実施例の第1及び第2オペランドはそれぞれ同じサイズのデータセグメント数によりパックされる。この場合、各オペランドは1バイト幅であり、第1オペランド1204は「P1211、O1212、N1213、M1214、L1215、K1216、J1217、I1218」、第2オペランド1206は「H1221、G1222、F1223、E1224、D1225、C1226、B1227、A1228」から構成される。
【0087】
状態II1260において、第1オペランド1204と第2オペランド1206をシフトするのにシフトカウントn1202が利用される。本実施例のカウントは、マージされたデータを右にシフトするデータセグメント数を示す。本実施例では、第1オペランド1204と第2オペランド1206とのマージ処理前に、シフト処理は行われる。この結果、第1オペランド1204は異なってシフトされる。本実施例では、第1オペランド1204は(x−n)データセグメント数だけ左にシフトされる。この「x−n」の計算により、後のデータマージ処理での適切なデータ配置が可能になる。従って、カウントnが3のとき、第1オペランド1204は5データセグメントあるいは5バイトだけ左方向にシフトされる。空のスペースを埋めるために、左端から0がシフト入力される。しかしながら、シフトカウントn1202が第1オペランド1204において利用可能なデータセグメント数xより大きい場合、「x−n」の左方向シフト計算は、実質的に負の左方向へのシフトを示す負の値を生じる。一実施例では、負のカウントによる左方向への論理シフトは負の方向への左シフトとして解釈され、実質的に右方向への論理シフトとなる。負の左方向へのシフトにより、第1オペランド1204の左側から0が配置される。同じように、第2オペランド1206は、3のシフトカウントだけ右にシフトされ、空白を埋めるため左方向から0がシフト入力される。第1オペランド1204と第2オペランド1206に行われたシフト結果はそれぞれ、xデータセグメント幅のレジスタTEMP11266とTEMP21268に格納される。TEMP11266とTEMP21268からのシフト結果がマージされ(1272)、状態III1270においてレジスタDEST1242で所望のシフトマージデータが生成される。シフトカウントn1202がxより大きい場合、結果の中に左端から1つ以上の0を含む。さらに、シフトカウントn1202が2x以上である場合、DEST1242における結果はすべて0から構成されている。
【0088】
上記実施例において、図17A及び図17Bに示されるように、MM1とMM2の一方または両方がMMX/SSE技術により可能なプロセッサの64ビットデータレジスタ、あるいはSSE2技術による128ビットデータレジスタであってもよい。実施形態に応じて、これらのレジスタは64/128/256ビット幅であってもよい。同じように、MM1とMM2の一方または両方がレジスタ以外のメモリ領域であってもよい。一実施例のプロセッサアーキテクチャでは、MM1とMM2は上述のような右方向シフトマージ命令(PSRMRG)に対するソースオペランドである。シフトカウントIMMはまた、このようなPSRMRG命令の即値である。一実施例では、結果のための目的DESTはまた、MMXまたはXMMデータレジスタである。さらに、DESTはソースオペランドの1つと同じレジスタであってもよい。例えば、あるアーキテクチャでは、PSRMRG命令は、第1ソースオペランドMM1と第2ソースオペランドMM2を有する。結果に対する所定の目的は、この場合MM!である第1ソースオペランドのレジスタでありうる。
【0089】
図18Aは、データオペランドを並列に右方向シフト及びマージする方法の一実施例を示すフローチャートを示す。Lの長さが一般に、オペランドとデータブロックの幅を表すのに使われる。特定の実施例に応じて、Lはデータセグメント数、ビット数、倍と数、ワード数などに関して幅を表すのに使われてもよい。ブロック1302において、長さLの第1データオペランドが、シフトマージ処理の実行において利用するため受信される。このシフトマージ処理のための長さLの第2データオペランドがまたブロック1304において受信される。ブロック1306において、ビット/ニブル/バイト/ワード/ダブルワード/クアドワードでのデータセグメント数あるいは距離を示すシフトカウントが受信される。ブロック1308における実行論理は、第1オペランドと第2オペランドを連結する。一実施例において、長さ2Lの仮のレジスタにおいて、連結されたデータブロックが保持される。他の実施例では、マージされたデータはメモリ領域に保持される。ブロック1310において、連結されたデータブロックはシフトカウントだけ右にシフトされる。このカウントがデータセグメントカウントとして表されている場合、データブロックはそのデータブロックだけ右にシフトされ、空白を埋めるためデータブロックの最上位エンド(most significant end)に沿って左から0がシフト入力される。例えば、このカウントがビットあるいはバイトで表されていれば、データブロックはその距離だけ同じように右方向にシフトされる。ブロック1312において、長さLの結果がシフトされたデータブロックの左側あるいは最下位エンド(least significant end)から生成される。一実施例において、長さLのデータセグメントが、シフトされたデータブロックから目的レジスタあるいはメモリ領域にマックス(mux)される。
【0090】
図18Bは、データの右方向へのシフト及びマージ方法の他の実施例を示すフロー図である。ブロック1352において、長さLの第1データオペランドが右方向シフト及びマージ処理のため受信される。長さLの第2データセグメントがブロック1354において受信される。ブロック1356において、所望の右方向シフト距離を示すシフトカウントが受信される。ブロック1358において、シフトカウントによる計算に基づき、第1データオペランドが左方向にシフトされる。一実施例の計算は、シフトカウントをLから差し引くことからなる。例えば、オペランドの長さLとシフトカウントがデータセグメントに関するものである場合、第1オペランドは「L−シフトカウント」セグメントだけ左にシフトされ、当該オペランドの最下位エンドから0がシフト入力される。同じように、Lがビットにより、カウントがバイトにより表される場合、第1オペランドは「L−シフトカウント・8」ビットだけ左にシフトされる。ブロック1360において、第2データオペランドはシフトカウント分右にシフトされ、空白を埋めるため第2オペランドの最上位エンドから0がシフト入力される。ブロック1362において、シフトされた第1オペランドとシフトされた第2オペランドはマージされ、長さLの結果が生成される。一実施例では、このマージ処理により、第1及び第2オペランドの両方からの所望のデータセグメントからなる結果が生成される。
【0091】
コンピュータにおいてますますよく使われる利用方法は、サイズの大きな映像及び音声ファイルの操作に関するものである。これらの映像及び音声は典型的には広帯域幅のネットワークあるいは大容量記憶媒体を介し転送されるとしても、トラフィック処理のため依然としてデータ圧縮は必要である。この結果、様々な圧縮アルゴリズムが、多くの一般的な音声、画像及び映像フォーマットのための表現または符号化スキームの重要部分になりつつある。MPEG(Motion Picture Expert Group)規格の1つに従う映像は、圧縮を利用した1つの適用例である。MPEG映像は、レイヤ階層に分解され、エラー処理、ランダム探索と編集、及び同期に利用される。
【0092】
例示のため、1つのMPEG映像を構成するこれらのレイヤが簡潔に説明される。最上位レベルには、自己完結した(self−contained)ビットストリームを含む映像シーケンスレイヤがある。第2レイヤには、1つ以上のイントラ及び/または非イントラフレーム群からなる画像群がある。第3レイヤには画像レイヤがあり、その次のレイヤはスライスレイヤ(slice layer)である。各スライスは、以下に限定されるものではないが、最もよく利用されている典型的な映像アプリケーションでの行ベースに基づくラスター順序のマクロブロックの連続したシーケンスである。各スライスは、16×16の輝度画素(luminance pixel)配列と、それに対応する2つの8×8の色光度画素(chrominance pixel)配列とを有するマクロブロックまたは画像データ要素から構成される。マクロブロックは、変換符号化のようなさらなる処理のため相異なる複数の8×8ブロックに分割される。マクロブロックは、動き補償及び動き予測のための基本ユニットであり、それに関連付けされた動きベクトルを有する。実施例に応じて、マクロブロックは16行16列であってもよいし、あるいは様々なサイズであってもよい。
【0093】
MPEG映像で使われる時間予測テクニックは動き予測に基づいている。動き予測は、連続する映像フレームは一般に、これらフレーム内で動いているオブジェクトに起因する変化以外は、同じであるという前提に基づくものである。フレーム間の動きがゼロである場合、エンコーダは現在フレームを過去あるいは予測フレームの複製として容易かつ効率的に予測することができる。前フレーム(previous)はまた、参照フレームと呼ばれる。他の実施例では、参照フレームは、当該シーケンスにおける次のフレームあるいは他のフレームであるかもしれない。動き予測の実施例は、前フレームと現在フレームを比較する必要はない。他の任意のフレームがこの比較において利用できる。エンコーダに送信される必要のある情報は、もとの参照フレームから画像を復元するのに必要な構文オーバヘッド(syntactic overhead)となる。しかしながら、画像間に動きが存在する場合、状況はより複雑である。最もよく一致するマクロブロックと現在マクロブロックとの差は、理想的には多くが0となることである。マクロブロックを符号化するとき、最もよく一致するマクロブロックと現在マクロブロックとの差が変換及び量子化される。一実施例では、量子化された値が、圧縮のため可変長符号化処理に通信される。0は良好に圧縮することができるので、差が0である値を多く有する最もよく一致するマクロブロックが望ましい。動きベクトルはまた、これらの差の値から導出することもできる。
【0094】
図19Aは、動き予測の第1実施例を示す。左のフレーム1402は、棒線画と案内標識を含む前映像フレームのサンプルである。右のフレーム1404は、同様の棒線画と案内標識を含む現在映像フレームのサンプルである。現在フレーム1404では、パン撮りにより、案内標識が前フレーム1402のもとの位置から右下方に移動している。棒線画は現在フレームでは腕を上げ、さらに前フレーム1402の中央から右下方にシフトしている。動き予測アルゴリズムを利用することにより、これら2つの映像フレーム1402と1404との間の変化を適切に表すことができる。
【0095】
一実施例では、動き予測アルゴリズムは、各輝度マクロブロックに対して総合的な2次元(2D)空間探索を実行する。実施形態に応じて、動き予測はMPEG映像の色光度に直接適用されてはならない。なぜなら、色の動きは輝度と同じ動き情報により適切に表すことができるからである。多くの様々な方法が動き予測の実現に利用可能であるので、動き予測を行う方式はアプリケーションの複雑さと質の問題に依存する。一般に、広い2D領域での完全かつ網羅的な探索により、最もよく一致する結果を生成することができる。しかしながら、動き予測はしばしば映像符号化において最も計算量のかかる部分であるので、このパフォーマンスは膨大な計算コストを要する。画素探索の範囲や探索タイプを制限することによるコストを減らす試みは、映像クオリティをある程度犠牲にするというものである。
【0096】
図19Bは、マクロブロック探索の一例を示す。フレーム1410と1420は、それぞれ様々なマクロブロックを備えている。現在フレームのターゲットマクロブロック1430は、前フレーム1410と1420からの前マクロブロックと一致した現在マクロブロックである。第1フレーム1410では、良好に一致しないマクロブロック1412は、案内標識部分を含み、現在マクロブロックと良好に一致していない。第2フレーム1420では、符号化対象の現在マクロブロック1430と同様に、良好に一致したマクロブロック1420は案内標識と傍線画の頭部のビットを含んでいる。これら2つのマクロブロック1422と1430は、ある程度の共通点を有しており、わずかな違いしか見出すことはできない。相対的に良好な一致が検出されているので、エンコーダは当該マクロブロックに動きベクトルを割り当てる。これらのベクトルは、一致が達成されるように、マクロブロックの水平及び垂直方向への移動量を表す。
【0097】
図20は、第2フレームの生成における動き予測の適用例と予測結果を示す。前フレーム1510は、時間に関し現在フレーム1520の前にくる。本実施例では、符号化及び送信対象のより複雑さを有しない残差エラー画像1530を得るために、現在フレーム1520が前フレーム1510から差し引かれる。本実施例の前フレーム1510は、案内標識1511と棒線画1513から構成される。現在フレーム1520は、ボード1524上の案内標識1511と2つの棒線画1522と1523から構成される。動きがより正確に予測及び一致すると、残差エラーはより高い確率でゼロに近づき、それにより高い符号化効率が達成される。マクロブロック予測は、探索窓サイズの減少に貢献する。
【0098】
符号化効率の向上は、動きベクトルがマクロブロック間で大きな相関を有する傾向があるという事実を利用することにより達成することができる。従って、水平要素が、以前に有効な水平方向の動きベクトルと比較され、その差が符号化されてもよい。同じように、符号化前に、垂直要素の差を計算することができる。本実施例では、前フレーム1510からの現在フレーム1520を差し引くことにより、腕を上げた第2の棒線画1532とボード1534を含む残差画像1530が生成される。この残差画像1530は、圧縮そして送信される。この残差画像1530は、現在フレーム1520全体の圧縮及び送信より、符号化及びより少ないメモリの使用を可能にする複雑さが低減されたものであることが理想的である。しかしながら、必ずしもすべてのマクロブロック探索が許容できる一致を生じさせるとは限らない。エンコーダが許容可能な一致がないと判断すると、特定のマクロブロックが符号化される。
【0099】
図21A及び21Bは、動き予測において処理される一例となる現在フレーム1601と前フレーム1650を示す。前フレーム1650は、映像フレーム系列に対し時間順で現在フレーム1601を移行していく。各フレームは、フレームにおいて水平及び垂直方向に延びる多数の画素から構成される。現在フレーム1601は、水平及び垂直方向に配置されている多数のマクロブロック1610、1621から1627から構成される。本実施例では、現在フレーム1601は、同じサイズの重複のないマクロブロック1610、1621から1627に分割される。これら正方形のマクロブロックのそれぞれは、さらに同数の行と列に分割される。同一のマクロブロック1610に対し、8行8列のマトリックスを見ることができる。マクロブロック1610の各正方形が1つの画素に対応している。従って、このサンプルマクロブロック1610は64画素を含んでいる。他の実施例では、マクロブロックは16行16列(16×16)のサイズであってもよい。一実施例では、各画素のデータは、8データビットまたは1ワードから構成されている。他の実施例では、データ画素は、ニブル、ワード、ダブルワード、クアドワードなどを含む他のサイズから構成することができる。現在フレームのこれらの現在マクロブロックは、動き予測のため前フレーム1650のマクロブロックと一致させられる。
【0100】
本実施例では、前フレーム1650は、フレームの一部が囲まれた探索窓1651を含む。探索窓1651は、現在フレーム1601からの現在マクロブロックが一致させられる領域を有する。現在フレームと同様に、探索窓は複数のサイズの等しいマクロブロックに分割される。8行8列を有する一例となるマクロブロック1660がここでは示されているが、マクロブロックは16行16列を有する他の様々なサイズから構成することができる。一実施例の動き予測アルゴリズムにおいて、探索窓1651からの各マクロブロックは、許容できる一致を検出するため系列において、現在フレームからの現在マクロブロックと比較される。一実施例では、探索窓1651の第1前マクロブロックの左上方のコーナーが探索窓1651の左上方コーナーと並べられる。動き予測アルゴリズムにおいて、マクロブロック処理の方向は、画素単位で探索窓の左側から右端に進行する。従って、第2マクロブロックの左端は、探索窓の左端からの1画素である。第1画素行の終わりで、アルゴリズムは探索窓の左端に戻り、次の行の第1画素から進んでいく。探索窓1651の各画素のマクロブロックと現在マクロブロックとの比較が完了するまで、この処理は繰り返される。
【0101】
図22Aから22Dは、本発明の一実施例によるフレームの動き予測の動作を示す。ここで説明される本発明の実施例は、完全な探索動き予測アルゴリズムに関する。完全な探索では、前フレーム(参照フレーム)の探索窓のすべての画素位置に対するマクロブロックが、現在フレームのマクロブロックと一致するよう試みられる。一実施例では、高速完全探索動き予測アルゴリズムは、SIMD右方向シフトマージ処理を利用して、フレームからのPackedデータの高速処理を行う。一実施例のSIMD右方向シフトマージ処理はまた、データロード数、特に並べられていないメモリロード数及び他のデータ操作命令数を減らすことによって、プロセッサのパフォーマンスを向上させることができる。一般に、一実施例の動き予測処理は以下の擬似コードで記述することができる。
【0102】
【表2】
ここで、ブロック一致処理では以下が行われる。
【0103】
【表3】
従って、本実施例では、探索窓の各画素位置に対する前マクロブロックが現在マクロブロックに対し評価される。上述のように、本実施例ではループあたり4つの隣接する前マクロブロックが評価される。画素データはメモリ配置ロードにより、メモリからレジスタにロードされる。右方向シフトマージ処理の利用を通じて、この画素データは操作され、隣接するマクロブロックに適したシフトデータセグメントの様々な組み合わせが生成される。例えば、第1前マクロブロックの第1ラインにおける第1、第2、第3及び第4画素がそれぞれメモリアドレス0、1、2及び3においてスタートすることができる。第2前マクロブロックの第1ラインの第1画素に対して、当該画素はメモリアドレス1において開始される。従って、レジスタデータの右方向シフトマージ処理は、第1前マクロブロックのメモリからすでにロードされたデータを再利用することによって、第2前マクロブロックの必要な画素ラインデータを生成することができ、それによって、時間とリソースの節約が可能になる。同様のシフトマージ処理により、第3、第4、…のような他の隣接する前マクロブロックのラインデータを生成することができる。
【0104】
一実施例の動き予測アルゴリズムのブロック一致処理は以下の擬似コードで記述することができる。
【0105】
【表4】
この処理が以下でさらに説明される。これらの実施例は探索窓の隣接する4つのマクロブックにおける処理に関し説明されているが、本発明の他の実施例はそれに制限されるものではない。しかしながら、本発明の実施例は隣接するマクロブロックでの処理に制限されるものではない。処理に要する複数の参照マクロブロックは1画素ずつ変わる必要はない。一実施例では、特定の画素位置の周囲の16×16の窓の中の画素を有する任意の参照マクロブロックを一緒に処理してもよい。利用可能なデータレジスタ及び実行ユニットのようなハードウェアリソースの大きさに応じて、他の実施例はブロック一致処理やマクロブロック数に関する絶対差の和の計算を実行することもできる。例えば、8データセグメント幅の2つのデータ群に対する右方向シフトマージ処理から生成される画素データの4つの異なる組み合わせを保持する少なくとも8つのPackedデータレジスタを有する他の実施例では、4つの隣接する前マクロブロックへの2つの並べられた8データセグメント幅のメモリロードによる処理を行うことが可能である。8つのPackedデータレジスタのうちの4つが、前フレームからの最初の8データセグメント、前フレームの次の8データセグメント、現在フレームのための8データセグメント、及び右方向シフトマージしょりからの8データセグメントを保持する計算オーバヘッドに利用される。その他の4つのPackedデータレジスタは、4つのマクロブロックのそれぞれに対し、絶対差の和(SAD)の合計を累積するのに利用される。より多くのPackedデータレジスタが、共に処理される参照マクロブロックの数を増やすために、SAD計算と累積計算のために加えられてもよい。従って、4つの追加的Packedデータレジスタが利用可能である場合、4つの追加的な前マクロブロックもまた処理可能となる。一実施例の累積された絶対差の和を保持するのに利用可能なPackedデータレジスタ数は、一度に処理可能なマクロブロック数を制限するかもしれない。
【0106】
さらに、いくつかのプロセッサアーキテクチャでは、メモリアクセスは特定の粒度を有し、ある境界で並べられる。例えば、あるプロセッサは16または32バイトブロックに基づきメモリにアクセスすることができる。この場合、16または32バイトの境界で揃えられていないデータへのアクセスには、揃えられていないメモリアクセスを必要とし、実行時間とリソースにおいてコストがかかってしまう。さらに悪いことに、所望のデータ部分が境界をまたぎ、複数のメモリブロックを重複させてしまうかもしれない。異なる2つのキャッシュラインにあるデータにアクセスするために、揃えられていないロードを要するキャッシュライン分割はコストがかかってしまう。メモリページの境界をまたぐデータラインはさらに悪い。例えば、8バイトメモリブロック及び画素あたり1バイトのデータを有する8画素にわたるマクロブロックにより動作するプロセッサでは、1つの揃えられたメモリロードで当該マクロブロックラインにとって十分であろう。次の隣接マクロブロックがなければ、その画素ラインに必要なデータの1画素列は、第1マクロブロックからの、しかしまた、次のメモリブロックの1データバイトのメモリ境界を越してメモリブロックの7データバイトにわたるであろう。本発明の実施例は、右方向シフトマージ処理を使って、効率的にデータを処理する。一実施例では、2つの連続したメモリブロックが揃えられたメモリ境界に置かれ、いくつかの利用のためにレジスタに保持される。右方向シフトマージ処理は、これらのメモリブロックを取得し、そのなかのデータセグメントを正しいデータラインを得るのに必要な距離だけシフトする。本実施例によると、右方向シフトマージしょりは、ロード済みの2つのメモリブロックを取得し、第2ブロックから1データバイトをシフトし、第1ブロックから第2ブロックへ1データバイトをシフトし、並べられていないロードを実行する必要なく第2マクロブロックの第1ラインのデータを生成する。動き予測の実施例はまた、アルゴリズムの実現方法に基づき従属関係の連鎖を断ち切ることもできる。例えば、計算順序を変えることによって、データ/命令の依存関係が、図15のプロセッサ1000と同じように、ある計算及び命令を順序に従わずに削除あるいはシフトすることが可能である。実行待ち時間と利用可能な計算リソースの増加によって、より新しい世代のプロセッサアーキテクチャによるパフォーマンスの向上がより大きくなる。右方向シフトマージ処理の一実施例を使うことによって、ブロック一致シーケンスにおけるある依存関係が回避することができる。例えば、複数の絶対差の和の演算及び/あるいは累積演算は並列に実行することができる。
【0107】
図22Aは、現在フレーム1701における現在マクロブロックの経過を示す。本実施例では、各現在マクロブロック1710は16行16列に分割され、それによって、256の画素から構成されるようになる。本実施例では、各マクロブロック1710の画素は一度に各列1711処理される。現在ブロックの16行すべてが探索窓の所望のマクロブロックに対し処理されると、次の現在マクロブロックが処理される。本実施例のマクロブロックは、マクロブロックサイズ毎に現在フレーム1701の左側から右側に水平方向1720で処理される。言い換えると、本実施例において現在マクロブロックは重複することなく、現在マクロブロックは各マクロブロックが次のマクロブロックと隣接するよう配置される。例えば、第1マクロブロックは第1画素列から第16画素列に拡張可能である。第2マクロブロックは第17列から第32列に、以下同様にして、拡張することができる。マクロブロック行の終わりで、処理は左端に戻り(1722)、本実施例では16行である1マクロブロックの高さだけ下に降りる。フレーム17011の全体に対し一致処理が完了されるまで、マクロブロックサイズ毎にマクロブロックは水平方向に左から右へ処理されていく(1724)。
【0108】
図22Bは、前(参照)フレームの探索窓1751におけるマクロブロックの経過を示す。特定の実施形態に応じて、探索窓1751はある領域に焦点が当てられ、前フレーム全体よりも小さくされる。他の実施例では、探索窓は前フレームに完全に重複してもよい。現在フレームと同じように、各前マクロブロック1760、1765、1770及び1775は、それぞれが合計で256画素の16行16列に分割される。本実施例では、探索窓1751の4つの前マクロブロック1760、1765、1770及び1775が、一致探索での1つの現在ブロックに対して並列に処理される。現在フレームの現在マクロブロックと異なり、探索窓1751の前マクロブロック1760、1765、1770及び1775は本実施例と同じように重複しうる。ここで、各前マクロブロックは1画素列だけシフトされる。従って、BLK1の第1行の最左画素は画素1761であり、BLK2では画素1766、BLK3では画素1771、BLK4では画素1776である。動き予測アルゴリズムでは、前マクロブロック1760、1765、1770及び1775の各行は現在ブロックの対応する行に対して比較される。例えば、BLK11760、BLK21765、BLK31770及びBLK41775の第1行はそれぞれ現在ブロックの第1行と共に処理される。
【0109】
マクロブロックの16行すべてに対し実行されるまで、4つの重複した隣接するマクロブロックに対する行単位での比較が続けられる。本実施例のアルゴリズムは、次の4つのマクロブロックでの処理のため、4画素列だけシフトする。従って、例えば、次の4つのマクロブロックの最左第1画素列は、それぞれ画素1796、1797、1798及び1799となる。本実施例では、探索窓が完了するまで、前マクロブロック処理は探索窓1751において右方向1780へ続けられ、探索窓1751の最左画素において1画素列下に降りて再開される。本実施例の現在フレームの現在マクロブロックは重複せず、次のマクロブロックはマクロブロックの高さあるいは幅であるが、前フレームまたは参照フレームの前マクロブロックは重複し、次のマクロブロックは1画素行あるいは1画素列だけインクリメントされる。本実施例の4つの基準マクロブロック1760、1765、1770及び1775は隣接し、1画素列だけ異なっているが、選択された画素位置の周囲の特定領域を重複している探索窓1751の任意のマクロブロックを当該画素位置のマクロブロックとともに処理することができる。例えば、画素1796のマクロブロック1760が処理される。画素1796の周囲の16×16の窓の中の任意のマクロブロックを、マクロブロック1760と共に扱うことができる。本実施例の16×16の窓は、マクロブロックのサイズと行のライン長による。この場合、1つの行またはデータラインは、16のデータ要素を有する。動き予測アルゴリズムの本実施例のこのブロック一致機能により、16のデータ要素の2つのデータラインがロードされ、右方向シフトマージ処理の実行により2つのデータラインのシフト/マージされたものを有する様々なデータラインが生成されるので、このマクロブロックに対しデータがロードされる16×16の窓を重複する他のマクロブロックがこのロードされたデータを少なくとも部分的に再利用することができる。従って、マクロブロック1765、1770及び1775のような、マクロブロック1760を重複する任意のマクロブロック、あるいはマクロブロック1760の右下端画素位置で始まるマクロブロックを、マクロブロック1760と共に処理することができる。重複の大きさの差は、前のデータロードから再利用することができるデータ量に影響を与える。
【0110】
本発明による動き予測の実施例によると、マクロブロック解析は、2つのマクロブロック間の絶対差の和を得るために、行単位により前(参照)マクロブロックと現在マクロブロックとの比較からなる。この絶対差の和は、これらのマクロブロックがどれくらい異なっているか、そしてどれくらい近い一致が存在するかについて示している。一実施例の各前マクロブロックは、当該マクロブロックの16行すべての絶対差の和を累積することにより得られる値により表すことができる。解析中の現在マクロブロックに対し、最も近く一致するマクロブロックの記号が維持される。例えば、絶対差の最小累積和と、対応する前マクロブロックの位置インデックスが追跡される。動き予測が探索窓において進むとき、各前マクロブロックの累積和とこの最小値が比較される。より新しい前マクロブロックが追跡されている最小値のものより小さい累積差を有し、すなわち、これまでに最も近い一致よりもさらに近い一致を示すものがある場合、この新しい前マクロブロックの累積差とインデックス上方が、新しい最小差とインデックスになる。探索窓のずべての画素に対する利用可能なマクロブロックが一実施例において処理されるとき、最小差を有するこのインデックスのマクロブロックが、当該現在フレームの圧縮のため残差画像を取得するのに利用される。
【0111】
図22Cは、本発明の一実施例による現在ブロック1840による所与の探索窓の4つの参照マクロブロック1810、1815、1820及び1825の並列処理を示す。本実施例では、探索窓の画素データが「A、B、C、D、E、F、G、H、I、J、K、L、M、N、O、P」1860として順序付けされている。ここで、「A」はデータセットにおける最下位アドレス位置(0)であり、「P」は最上位アドレス一(15)である。この画素セット1860は、各自が8(m)データセグメントを有する2つのせく著ン1681と1682から構成される。右方向シフトマージ処理により、上述のように、本発明の実施例はこれら2つのデータセクション1618と1682によりオペランドを操作し、異なる前マクロブロック1810、1815、1820及び1825に対し適切に並べられた行データ1830を生成することができる。前マクロブロック1810、1815、1820及び1825と現在マクロブロック1840の各マクロブロックは、m行m列のサイズを有する。説明及び簡単化のため、本実施例においてmは8に等しい。他の実施例は、異なるサイズのマクロブロックを有することができ、例えば、mは4、16、32、64、128、256などであってもよい。
【0112】
本実施例では、動き予測アルゴリズムが、これら4つの前ブロック1810、1815、1820及び1825の第1行に、現在ブロックの第1行と共に適用される。一実施例では、2つのマクロブロック幅(2m)に対し2つのデータセクション1861と1862を含む画素データが、2つの配置メモリロード命令によりメモリからロードされ、仮レジスタに保持される。この2つのデータセクション1861と1862への右方向シフトマージ処理により、メモリアクセスを多用することなく、行データ1830の可能な9つの組み合わせを生成することができる。さらに、実行時間とリソースを多用する非配置メモリロードを回避することが可能になる。本実施例では、2つのデータセクション1861と1862がバイト境界で並べられる。例えば、データセグメントBまたはDのようなバイト境界でのアドレスから始まらないメモリロードは、典型的には、非配置メモリロード処理を要するであろう。各ブロックの行データ1830は以下のようになる。ここで最左データセグメントが最下位アドレスである。BLOCK11810において、ROW11811は、「A、B、C、D、E、F、G、H」から構成される。ROW11811のデータが第1データセクション1861と同じであるとき、シフト処理は必要ない。しかし、BLOCK21815のROW11816は、「B、C、D、E、F、G、H、I」から構成されている。前BLOCK11810とBLOCK21815が水平方向に1画素だけずれているので、BLOCK21815は画素データBから始まるが、BLOCK11810は画素データAから始まり、第2画素データはBである。従って、1のシフトカウントにより、2つのデータセクション1861と1862の右方向シフトマージ処理により、BLOCK2ROW1データが生成される。
【0113】
同様にして、BLOCK31820は、右方向へさらに1画素シフトしており、BLOCK31820のROW11821は、画素データCから始まり、「C、D、E、F、G、H、I、J」から構成される。2のシフトカウントによる2つのデータセクション1861と1862のオペランドに対する右方向シフトマージ処理により、BLOCK3ROW1データが生成される。BLOCK41825のROW11826は、「D、E、F、G、H、I、J、K」から構成される。このデータは、同じデータオペランドに対する4のシフトカウントによる右方向シフトマージ処理により生成される。一時的にセーブされ、前にロードされたデータセクション1861と1862に対する右方向シフトマージ処理により、他の隣接するマクロブロックの行データの生成におけるデータの再利用と、メモリロード数、特に非配置メモリロード数を減らすことによる時間/リソースの節約が可能になる。ここで、現在ブロックの画素データは、前フレームの参照マクロブロックに対する絶対差の和のすべての比較において同じである。1つの配置メモリロードは、現在ブロック1840がメモリ境界で並んでいるとき、現在ブロック1840の行データ1842に対し可能であるかもしれない。
【0114】
動き予測の一実施例のこの例に関して、絶対差の和を得るために、前マクロブロック1810、1815、1820及び1825の各行が現在ブロック1840の対応する行と比較される。従って、BLOCK11810のROW11811が、絶対差の和(SAD)を求める処理1850において、現在ブロック1840のROW11841と比較される。ここで処理されている他の3つのブロックに関しても同様の処理が行われる。これら4つのマクロブロック1810、1815、1820及び1825は同時あるいは並列に処理されているようであるが、本発明の他の実施例はこれに限定されない。従って、この4つのマクロブロックの処理は逐次的に4つのシーケンスとして実行することができる。例えば、各参照ブロックの第1行は、BLOCK11810、BLOCK21815、BLOCK31820及びBLOCK41825の順で、現在ブロック1840と共にSAD処理1850が実行される。その後、各参照ブロックの第2行に対し、そして以下同様に、SAD処理1850が実行される。各SAD処理1850の実行後、絶対差の和の現在トータルが仮レジスタに蓄積される。従って、本実施例では、4つのレジスタが、当該マクロブロックのすべてのm行が処理されるまで、絶対差の和を蓄積していく。マクロブロックの最良一致探索の一部として、各ブロックに対して蓄積された値がこれまでの最小差と比較される。本実施例は4つの隣接しかつ重複した前マクロブロックの処理を説明しているが、探索窓の第1ブロックBLK1810に重複している他のマクロブロックもまた、データラインに関連がある場合、BLK1810のデータラインと共に処理することができる。従って、処理中のマクロブロックの周囲の16×16の窓の中のマクロブロックもまた処理することができる。
【0115】
図22Dは、絶対差の和(SAD)の計算処理1940とこれらSAD値の合計処理を示す。ここで、参照マクロブロックBLOCK11900のROW AからROW Pの各行と、現在マクロブロック1920におけるそれに対応するものとが、SAD処理1940を実行される。SAD処理1940では、各行の画素を表すデータが比較され、前マクロブロック1900と現在マクロブロック1920からの2つの行の間の絶対差を表す値が計算される。AからPのすべての行に対して、SAD処理1940による値がブロック和1942として合計される。このブロック和1942は、前マクロブロック1900と現在マクロブロック1920全体に対する絶対差の和の蓄積された値を提供する。このブロック和1942に基づき、動き予測アルゴリズムは、前マクロブロック1900が現在マクロブロック1920に関してどのくらい近い一致であるか決定することができる。
【0116】
本実施例は一度に4つの参照マクロブロックに対して動作するが、他の実施例はロードされる画素データ量及び利用可能なレジスタ数に応じて、異なる数のマクロブロックに対して動作することができる。さらに、動き予測処理では、様々なレジスタを利用することができる。例えば、MMX技術によるmmレジスタやSSE2技術によるXMMレジスタのような拡張レジスタを利用して、画素データのようなPackedデータを保持することができる。一実施例では、64ビット幅のMMXレジスタは8バイトを保持することができ、またもし各画素が8ビットデータを有していれば、8画素を保持することができる。他の実施例では、128ビット幅のXMMレジスタは、16バイト、もし各画素が8ビットデータであれば、16画素を保持することができる。同じように、Packedデータを保持する32/128/256/512ビット幅のような他のサイズのレジスタもまた、本発明の実施例と共に利用可能である。他方、通常の整数演算のようなPackedデータレジスタを必要としない計算は、整数レジスタや整数ハードウェアを利用することができる。
【0117】
図23Aは、動きを予測する方法の一実施例を示すフローチャートである。ブロック2002において、追跡される最小値(min)と、この最小値に対するインデックス位置が初期化される。本実施例では、この追跡されているmin値とインデックスは、探索窓からの処理された前(参照)マクロブロックのどれが現在マクロブロックに最も近く一致しているか示す。ブロック2004において、現在フレームのすべての所望のマクロブロックが完了されたかチェックされる。もし完了されていれば、動き予測アルゴリズムのこの部分が実行される。もしすべての所望の現在マクロブロックが処理されていなければ、ブロック2006において未処理の現在マクロブロックが現在フレームに対し選択される。ブロック2008において、ブロック一致処理が前(参照)フレームの探索窓における第1画素位置から進む。ブロック2010において、探索窓が完了されたかチェックされる。第1のパスでは、探索窓の何れもが処理されていない。しかし次のパスで、探索窓の全体が処理されていれば、フローはブロック2004に戻り、他の現在マクロブロックが利用可能であるか判断される。
【0118】
探索窓の全体が解析されていなければ、ブロック2012において、このX軸行に沿ったすべての画素が処理されているかチェックされる。当該行が処理されていれば、行カウントは次の行にインクリメントされ、フローはブロック2010に戻り、この新たな行においてより多くのマクロブロックが探索窓において利用可能であるかチェックされる。しかしこの行の画素のすべての利用可能なマクロブロックが処理されていなければ、ブロック2014において、この画素列と行におけるマクロブロックが処理されているかチェックされる。もし当該マクロブロックが処理されていれば、列カウントがインクリメントされ、フローはブロック2012に戻り、この新しい列における画素のマクロブロックが処理されているかどうかチェックされる。一方、もしこの列及び行の画素のマクロブロックが処理されていなければ、ブロック一致処理がこの参照マクロブロックと現在マクロブロックとの間で実行される。
【0119】
本実施例におけるフローは、簡単化のため一度に1画素だけXとY軸に沿って画素の行及び列位置をインクリメントする処理を述べている。しかしながら、本発明の一実施例では、パスあたり4つの前マクロブロックが処理される。従って、Y軸に沿った列カウントはパスあたり4列分インクリメントされる。他の実施例はまた、一度に8、16、32などのマクロブロックを処理してもよく、これにより列カウントは、アルゴリズムの後続のパスに対し正しい画素位置を指すよう8、16、32などの列だけ対応してインクリメントされる。本実施例のブロック一致処理は順序付けされた形式でX及びY軸に沿って探索が実行されるが、他の実施例のブロック一致処理は、異なるパターンを使うダイアモンド探索やログ探索のような他のアルゴリズムを利用することもできる。
【0120】
図23Bは、図23Aのブロック一致処理をさらに説明するフローチャートである。ブロック2222において、参照マクロブロックと現在マクロブロックのデータがロードされる。一実施例では、2つのPackedデータ群が多数の連続する画素のデータを含むとき、参照マクロブロックデータがロードされる。一実施例では、各Packedデータ群は8つのデータセグメントから構成される。ブロック2224において、正確なデータ群を取得するために、右方向シフトマージ処理はデータ群に対し必要なものとして実行される。4つの前マクロブロックが一緒に処理された前述の実施例では、右方向シフトマージ処理は各マクロブロックにあるラインに対応するデータ群を生成することができる。各隣接マクロブロックに対するデータ群が1画素だけシフトされ、マクロブロックは探索窓の各画素行に対し同時に1画素だけスライドしているように見える。ブロック2226、2228、2230及び2232における処理が一緒に処理される4つの前マクロブロックのそれぞれに対し適用される。一実施例において、次の処理が実行される前に、4つのすべてのマクロブロックに対し同様の処理が行われる。他の実施例では、1つの前マクロブロックは、適切にシフトされたデータセグメントを含むデータ群を有する次の前マクロブロックが処理される前に、すべての処理を完了させるようにしてもよい。
【0121】
ブロック2226において、前マクロブロックと現在マクロブロックの対応するライン間の絶対差の和が、これらマクロブロックの各行に対し計算される。ブロック2228において、前マクロブロックのすべてのラインに対する絶対差の和が蓄積される。ブロック2230において、当該前マクロブロックに対し蓄積された差は現在の最小値と比較される。ブロック2232においてこの前マクロブロックの差が現在最小値より小さい場合、最小値はこの新しい差により更新される。インデックスもまた、このマクロブロックがこれまでで最も近い一致であるということを示すために、当該マクロブロックの位置を反映するよう更新される。しかし、ブロック2232においてこの新しい差が現在の最小値より大きい場合、当が前マクロブロックはこれまで一致してきたものよりより近い一致ではない。
【0122】
本発明による動き予測アルゴリズムの実施例はまた、現在のハードウェアリソースによるプロセッサ及びシステムのパフォーマンスの向上を可能にする。しかしながら、技術の進歩に従って、より多くのハードウェアリソースやより高速でより効率的な論理回路と組み合わされるとき、本発明の実施例はパフォーマンスの向上にさらなる著しい影響を与えうる。従って、動き予測の効率的な一実施例はプロセッサの生成に異なるより大きな影響をもたらしうる。最新のプロセッサアーキテクチャにより多くのリソースを単に付加するだけでは、よりよいパフォーマンスの向上は保証されない。動き予測と右方向シフトマージ命令(PSRMRG)の一実施例と同様にアプリケーションの効率を維持することにより、より大きなパフォーマンスの向上が可能になる。
【0123】
議論の簡単化のため、上記実施例は一般的に64ビット幅ハードウェア/レジスタ/オペランドに関し説明されているが、他の実施例では128ビット幅ハードウェア/レジスタ/オペランドを利用して、レジスタマージ処理、右方向シフトマージ処理、及び動き予測計算が実行される。さらに、本発明の実施例はMMX/SSE/SSE2技術のような特定のハードウェアあるいは技術タイプに制限されるものではなく、他のSIMD実施形態及び他のグラフィカルなデータ操作技術と共に利用することもできる。図20から23Bに関し説明された動き予測及びブロック一致の実施例は、8画素幅または8データ要素幅のライン/行、及び8行8列のマクロブロックに関して説明されているが、他の実施例は他のサイズを含んでいる。例えば、ライン/行は16画素幅または16データ要素幅でありうるし、マクロブロックは16行16列でありうる。
【0124】
上記明細書では、本発明は特定の実施例を参照することにより説明されてきた。しかしながら、添付されたクレームに与えられるように、発明のより広範な趣旨及び範囲から逸脱することなく様々な修正及び変更が可能であるということは明らかであろう。従って、明細書及び図面は限定的な意味よりも例示的な意味でみなされるべきである。
【図面の簡単な説明】
【0125】
【図1】図1は、本発明の一実施例を実現することができるコンピュータシステムを示すブロック図を示す。
【図2】図2は、本発明のさらなる一実施例による図1に示されるようなプロセッサの一実施例を示すブロック図を示す。
【図3】図3は、本発明のさらなる一実施例によるPackedデータタイプを示すブロック図を示す。
【図4A】図4Aは、本発明の一実施例によるイン・レジスタPackedバイト表現を示す。
【図4B】図4Bは、本発明の一実施例によるイン・レジスタPackedワード表現を示す。
【図4C】図4Cは、本発明の一実施例によるイン・レジスタPackedダブルワード表現を示す。
【図5】図5は、本発明の一実施例によるバイトシャッフル命令の動作を示すブロック図を示す。
【図6】図6は、本発明の一実施例によるバイト乗加算命令を示すブロック図を示す。
【図7A】図7Aは、本発明のさらなる一実施例による複数の積和ペアを生成する図6に示されるようなバイト乗加算命令と合成された図5のバイトシャッフル命令を示すブロック図を示す。
【図7B】図7Bは、本発明のさらなる一実施例による複数の積和ペアを生成する図6に示されるようなバイト乗加算命令と合成された図5のバイトシャッフル命令を示すブロック図を示す。
【図7C】図7Cは、本発明のさらなる一実施例による複数の積和ペアを生成する図6に示されるようなバイト乗加算命令と合成された図5のバイトシャッフル命令を示すブロック図を示す。
【図8A】図8Aは、本発明のさらなる一実施例による隣接加算命令を示すブロック図を示す。
【図8B】図8Bは、本発明のさらなる一実施例による隣接加算命令を示すブロック図を示す。
【図8C】図8Cは、本発明のさらなる一実施例による隣接加算命令を示すブロック図を示す。
【図8D】図8Dは、本発明のさらなる一実施例による隣接加算命令を示すブロック図を示す。
【図9A】図9Aは、本発明のさらなる一実施例によるレジスタマージ命令を示す。
【図9B】図9Bは、本発明のさらなる一実施例によるレジスタマージ命令を示す。
【図10】図10は、本発明の一実施例によるコンテンツデータの効率的なデータ処理のためのフローチャートを示すブロック図を示す。
【図11】図11は、本発明のさらなる一実施例によるデータ処理によるコンテンツデータを処理するための追加的方法を示すブロック図を示す。
【図12】図12は、本発明のさらなる一実施例によるコンテンツデータの継続処理のためのフローチャートを示すブロック図を示す。
【図13】図13は、本発明のさらなる一実施例によるレジスタマージ処理を示すフローチャートを示すブロック図を示す。
【図14】図14は、本発明の一実施例によるソースデータ記憶装置からの未処理データ要素を選択するための追加的方法を示すフローチャートを示す。
【図15】図15は、本発明による右方向シフトマージ処理を実行する論理回路を含む一実施例のプロセッサのためのマイクロアーキテクチャのブロック図である。
【図16A】図16Aは、本発明によるデータオペランドに対する右方向平行シフトマージ処理を実行する論理の一実施例のブロック図である。
【図16B】図16Bは、右方向シフトマージ処理を実行する論理の他の実施例のブロック図である。
【図17A】図17Aは、本発明の第1実施例による右方向平行シフトマージ命令の動作を示す。
【図17B】図17Bは、第2実施例による右方向シフトマージ命令の動作を示す。
【図18A】図18Aは、データオペランドを並列に右方向にシフトしマージする方法の一実施例を示すフローチャートである。
【図18B】図18Bは、データを右方向にシフトしマージする方法の他の実施例を示すフローチャートである。
【図19A】図19Aは、動き予測の一例を示す。
【図19B】図19Bは、動き予測の一例を示す。
【図20】図20は、動き予測の適用例と予測結果を示す。
【図21A】図21Aは、動き予測において処理される一例となる現在及び前フレームを示す。
【図21B】図21Bは、動き予測において処理される一例となる現在及び前フレームを示す。
【図22A】図22Aは、本発明の一実施例によるフレームに対する動き予測の動作を示す。
【図22B】図22Bは、本発明の一実施例によるフレームに対する動き予測の動作を示す。
【図22C】図22Cは、本発明の一実施例によるフレームに対する動き予測の動作を示す。
【図22D】図22Dは、本発明の一実施例によるフレームに対する動き予測の動作を示す。
【図23A】図23Aは、動き予測方法の一実施例を示すフローチャートである。
【図23B】図23Bは、動き予測方法の一実施例を示すフローチャートである。
Claims (44)
- シフトカウントMを受信するステップ;
L個のデータ要素の第1群を有する第1オペランドを(L−M)個のデータ要素だけ左シフトするステップ;
L個のデータ要素の第2群を有する第2オペランドをM個のデータ要素だけ右シフトするステップ;及び
L個のデータ要素を有する結果を生成するために、前記シフトされた第1群と前記シフトされた第2群をマージするステップ;
からなることを特徴とする方法。 - 請求項1記載の方法であって、前記第1オペランドをシフトするステップは、前記第1オペランドの左端から並べたれたM個のデータ要素からなる前記シフトされた第1群を生成することを特徴とする方法。
- 請求項2記載の方法であって、前記左シフトするステップは、前記第1オペランドから前記(L−M)個のデータ要素を取り除き、シフトアウトされた前記(L−M)個のデータ要素により空けられたスペースを置換するために前記第1オペランドの右端にゼロを挿入することを特徴とする方法。
- 請求項3記載の方法であって、前記第2オペランドをシフトするステップは、前記第2オペランドの右端から並べられた(L−M)個のデータ要素からなる前記シフトされた第2群を生成することを特徴とする方法。
- 請求項4記載の方法であって、前記右シフトするステップは、前記第2オペランドから前記M個のデータ要素を取り除き、前記シフトアウトされたM個のデータ要素により空けられたスペースを置換するために前記第2オペランドの左端にゼロを挿入することを特徴とする方法。
- 請求項5記載の方法であって、前記マージするステップは、前記シフトされた第1群と前記シフトされた第2群に対し論理OR処理を実行することからなることを特徴とする方法。
- 請求項6記載の方法であって、前記結果は前記シフトされた第1群からの前記M個のデータ要素と前記シフトされた第2群からの前記(L−M)個のデータ要素とから構成され、前記シフトされた第1群からの前記M個のデータ要素は前記シフトされた第2群からの前記(L−M)個のデータ要素と重複しないことを特徴とする方法。
- 請求項7記載の方法であって、前記第1オペランド、前記第2オペランド及び前記結果は、Packedデータオペランドであることを特徴とする方法。
- 請求項8記載の方法であって、各データ要素は1バイトのデータであることを特徴とする方法。
- 請求項9記載の方法であって、Lは8に等しいことを特徴とする方法。
- 請求項10記載の方法であって、Mは0から15までの値であることを特徴とする方法。
- 請求項9記載の方法であって、Lは16に等しいことを特徴とする方法。
- 請求項12記載の方法であって、Mは0から31までの値であることを特徴とする方法。
- 右シフトマージ命令、カウント、データ要素の第1群を含む第1データオペランド、及びデータ要素の第2群を含む第2データオペランドを受信するステップ;
前記データ要素の第1群を、前記第1データオペランドに残るデータ要素数が前記カウントに等しくなるまで左シフトするステップ;
前記第2データオペランドから前記カウントに等しい数のデータ要素を取り除くため、前記データ要素の第2群を右シフトするステップ;及び
前記第1データオペランドと前記第2データオペランドの両方からデータ要素を含む結果を取得するために、前記シフトされたデータ要素の第1群を前記シフトされたデータ要素の第2群とマージするステップ;
からなることを特徴とする方法。 - 請求項14記載の方法であって、前記データ要素の第1群を前記左シフトするステップは、前記第1データオペランドの左端からデータ要素を取り除き、該取り除かれたデータ要素により空にされた位置を埋めるために、前記第1データオペランドの右端にゼロを挿入することからなることを特徴とする方法。
- 請求項15記載の方法であって、前記データ要素の第2群を前記右シフトするステップは、前記第2データオペランドの右端からデータ要素を取り除き、該取り除かれたデータ要素により空にされた位置を埋めるために、前記第2データオペランドの左端にゼロを挿入することからなることを特徴とする方法。
- 請求項16記載の方法であって、前記マージするステップは、前記シフトされたデータ要素の第1群と前記シフトされたデータ要素の第2群の論理OR処理を実行することからなることを特徴とする方法。
- 請求項17記載の方法であって、前記第1オペランドと前記第2オペランドは連続するデータブロックの隣接するメモリ位置からのデータによりロードされ、前記データ要素の第1群と前記データ要素の第2群は重複していないことを特徴とする方法。
- シフトマージ命令とシフトカウントMを受信するステップ;
2L長のデータ要素のブロックを生成するために、L個のデータ要素の第1群を有する第1オペランドとL個のデータ要素の第2群を有する第2オペランドを連結するステップ;
最右のM個のデータ要素を落とすため前記ブロックをM個だけ右シフトするステップ;及び
前記シフトマージ命令の結果として、前記シフトされたブロックから最右のL個のデータ要素を出力するステップ;
からなることを特徴とする方法。 - 請求項19記載の方法であって、前記右シフトするステップは、さらに、前記M個のデータ要素により空にされたスペースを埋めるために、前記ブロックの最左端にゼロを挿入することからなることを特徴とする方法。
- 請求項20記載の方法であって、前記第1オペランドと前記第2オペランドはPackedデータオペランドであることを特徴とする方法。
- 請求項21記載の方法であって、各データ要素は1バイトのデータからなることを特徴とする方法。
- 請求項22記載の方法であって、Lは8に等しいことを特徴とする方法。
- 請求項23記載の方法であって、Mは0から15までの値であることを特徴とする方法。
- 請求項24記載の方法であって、前記ブロックは2L個のデータ要素のために利用可能なスペースを有する仮のPackedデータレジスタに保持されることを特徴とする方法。
- 右方向シフトマージ命令を復号するデコーダ;
L個のデータ要素の第1群からなる第1オペランド、L個のデータ要素の第2群からなる第2オペランド、及びシフトカウントMによる実行のため前記命令をディスパッチするスケジューラ;及び
前記命令を実行する実行ユニット;
からなる装置であって、前記命令は前記実行ユニットに、(L−M)個のデータ要素だけ前記第1オペランドを左シフトさせ、M個のデータ要素だけ前記第2オペランドを右シフトさせ、L個のデータ要素を有する結果を生成するため前記シフトされた第1オペランドと前記シフトされた第2オペランドをマージさせることを特徴とする装置。 - 請求項26記載の装置であって、前記右方向シフトマージ命令は1つのマイクロ命令(uop)から構成されることを特徴とする装置。
- 請求項27記載の装置であって、前記第1オペランドの前記左方向へのシフトは、前記第1オペランドの最左端から並べられたM個のデータ要素から構成されるシフトされたデータの第1群を生成することを特徴とする装置。
- 請求項28記載の装置であって、前記左シフトは前記第1オペランドから(L−M)個のデータ要素を取り除き、該シフトアウトされた(L−M)個のデータ要素により空にされたスペースを置換するため前記第1オペランドの右端にゼロを挿入することを特徴とする装置。
- 請求項29記載の装置であって、前記第2オペランドの前記右シフトは、前記第2オペランドの右端から並べられた(L−M)個のデータ要素からなる前記シフトされた第2群を生成することを特徴とする装置。
- 請求項30記載の装置であって、前記右シフトは前記第2オペランドから前記M個のデータ要素を取り除き、該シフトアウトされたM個のデータ要素により空にされたスペースを置換するため前記第2オペランドの左端にゼロを挿入することを特徴とする装置。
- 請求項31記載の装置であって、前記第1オペランド、前記第2オペランド、及び前記結果は、Packedデータレジスタであることを特徴とする装置。
- 請求項32記載の装置であって、各データ要素は1バイトのデータであることを特徴とする装置。
- 請求項33記載の装置であって、Lは8に等しいことを特徴とする装置。
- 請求項34記載の装置であって、Mは0から15までの値であることを特徴とする装置。
- 請求項35記載の装置であって、該装置は64ビットアーキテクチャからなることを特徴とする装置。
- 請求項33記載の装置であって、Lは16に等しく、Mは0から31までの値であり、該装置は128ビットアーキテクチャからなることを特徴とする装置。
- データ及び命令を格納するメモリ;
バス上で前記メモリに接続され、右方向シフトマージ処理を実行するプロセッサ;
からなるシステムであって、前記プロセッサは、前記メモリから命令を受信するバスユニット;K個のデータ要素の第1群を有する第1オペランドとL個のデータ要素の第2群を有する第2オペランドに対しシフトカウントMの右方向シフトマージ処理を実行するための命令を復号するデコーダ;実行のため前記復号された命令をディスパッチするスケジューラ;及び前記復号された命令を実行する実行ユニット;であって、前記復号された命令は該実行ユニットに、(K−M)個のデータ要素だけ前記第1オペランドを左シフトさせ、M個のデータ要素だけ前記第2オペランドを右シフトさせ、K個のデータ要素を有する結果を生成するため前記シフトされた第1オペランドと前記シフトされた第2オペランドをマージさせることを特徴とするシステム。 - 請求項38記載のシステムであって、KはLに等しく、KとLは共に8であることを特徴とするシステム。
- 請求項38記載のシステムであって、前記左シフトは、前記第1オペランドから(K−M)個のデータ要素を取り除き、該シフトアウトされた(K−M)個のデータ要素により空にされたスペースを置換するために前記第1オペランドの右端にゼロを挿入し、前記右シフトは、前記第2オペランドから前記M個のデータ要素を取り除き、該シフトアウトされたM個のデータ要素により空にされたスペースを置換するために前記第2オペランドの左端にゼロを挿入することを特徴とするシステム。
- 請求項38記載のシステムであって、各データ要素は1バイトのデータからなり、前記第1オペランドと前記第2オペランドはPackedデータオペランドであることを特徴とするシステム。
- コンピュータプログラムを含むマシーン読み出し可能な媒体であって、前記コンピュータプログラムは:
シフトカウントMを受信するステップ;
L個のデータ要素の第1群を有する第1オペランドを(L−M)個のデータ要素だけ左シフトするステップ;
L個のデータ要素の第2群を有する第2オペランドをM個のデータ要素だけ右シフトするステップ;及び
L個のデータ要素を有する結果を生成するために、前記シフトされた第1群と前記シフトされた第2群をマージするステップ;
からなる方法を実行するマシーンにより実行可能であることを特徴とする媒体。 - 請求項42記載のマシーン読み出し可能な媒体であって、前記左シフトするステップは、前記第1オペランドから前記(L−M)個のデータ要素を取り除き、該シフトアウトされる(L−M)個のデータ要素により空にされたスペースを置換するため前記第1オペランドの右端にゼロを挿入し、前記右シフトするステップは、前記第2オペランドから前記M個のデータ要素を取り除き、該シフトアウトされるM個のデータ要素により空にされたスペースを置換するため前記第2オペランドの左端にゼロを挿入し、前記マージするステップは、前記シフトされた第1群と前記シフトされた第2群に対し論理OR処理を実行することからなることを特徴とする媒体。
- 請求項43記載の方法であって、前記第1オペランド、前記第2オペランド、及び前記結果は、Packedデータオペランドであることを特徴とする方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/952,891 US7085795B2 (en) | 2001-10-29 | 2001-10-29 | Apparatus and method for efficient filtering and convolution of content data |
US10/280,612 US7685212B2 (en) | 2001-10-29 | 2002-10-25 | Fast full search motion estimation with SIMD merge instruction |
PCT/US2002/034404 WO2003038601A1 (en) | 2001-10-29 | 2002-10-28 | Method and apparatus for parallel shift right merge of data |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008193844A Division JP4750157B2 (ja) | 2001-10-29 | 2008-07-28 | データを右方向平行シフトマージする方法及び装置 |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2005508043A true JP2005508043A (ja) | 2005-03-24 |
JP2005508043A5 JP2005508043A5 (ja) | 2006-01-05 |
JP4623963B2 JP4623963B2 (ja) | 2011-02-02 |
Family
ID=26960393
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003540797A Expired - Lifetime JP4623963B2 (ja) | 2001-10-29 | 2002-10-28 | コンテンツデータを効率的にフィルタリング及び畳み込む方法及び装置 |
JP2008193844A Expired - Lifetime JP4750157B2 (ja) | 2001-10-29 | 2008-07-28 | データを右方向平行シフトマージする方法及び装置 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008193844A Expired - Lifetime JP4750157B2 (ja) | 2001-10-29 | 2008-07-28 | データを右方向平行シフトマージする方法及び装置 |
Country Status (8)
Country | Link |
---|---|
US (1) | US7685212B2 (ja) |
JP (2) | JP4623963B2 (ja) |
KR (1) | KR100602532B1 (ja) |
CN (1) | CN1269027C (ja) |
DE (1) | DE10297000B4 (ja) |
HK (1) | HK1068985A1 (ja) |
RU (1) | RU2273044C2 (ja) |
WO (1) | WO2003038601A1 (ja) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007528545A (ja) * | 2004-03-10 | 2007-10-11 | アーム・リミテッド | データ・ワードの中へビットを挿入する装置および方法 |
JP2007334819A (ja) * | 2006-06-19 | 2007-12-27 | Nec Corp | ベクトルリネーミング方式およびベクトル型計算機 |
JP2013235027A (ja) * | 2012-05-02 | 2013-11-21 | Nippon Telegr & Teleph Corp <Ntt> | 演算装置、その方法およびプログラム |
JP2018521426A (ja) * | 2015-07-31 | 2018-08-02 | エイアールエム リミテッド | スプライス演算を行うための装置および方法 |
JP2020501270A (ja) * | 2016-12-13 | 2020-01-16 | エイアールエム リミテッド | パーティション・レプリケート命令 |
US11977884B2 (en) | 2016-12-13 | 2024-05-07 | Arm Limited | Replicate elements instruction |
Families Citing this family (53)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7631025B2 (en) * | 2001-10-29 | 2009-12-08 | Intel Corporation | Method and apparatus for rearranging data between multiple registers |
US20040054877A1 (en) | 2001-10-29 | 2004-03-18 | Macy William W. | Method and apparatus for shuffling data |
US7818356B2 (en) * | 2001-10-29 | 2010-10-19 | Intel Corporation | Bitstream buffer manipulation with a SIMD merge instruction |
US7725521B2 (en) * | 2001-10-29 | 2010-05-25 | Intel Corporation | Method and apparatus for computing matrix transformations |
US7272622B2 (en) * | 2001-10-29 | 2007-09-18 | Intel Corporation | Method and apparatus for parallel shift right merge of data |
US7739319B2 (en) * | 2001-10-29 | 2010-06-15 | Intel Corporation | Method and apparatus for parallel table lookup using SIMD instructions |
US7624138B2 (en) * | 2001-10-29 | 2009-11-24 | Intel Corporation | Method and apparatus for efficient integer transform |
US7340495B2 (en) | 2001-10-29 | 2008-03-04 | Intel Corporation | Superior misaligned memory load and copy using merge hardware |
US7685212B2 (en) | 2001-10-29 | 2010-03-23 | Intel Corporation | Fast full search motion estimation with SIMD merge instruction |
CN1297887C (zh) * | 2003-11-28 | 2007-01-31 | 凌阳科技股份有限公司 | 可跨边界对齐复数暂存器资料的处理器及其方法 |
JP4488805B2 (ja) * | 2004-06-25 | 2010-06-23 | パナソニック株式会社 | 動きベクトル検出装置および方法 |
US7630585B2 (en) * | 2004-06-25 | 2009-12-08 | Intel Corporation | Image processing using unaligned memory load instructions |
US7461108B2 (en) * | 2004-09-14 | 2008-12-02 | Panasonic Corporation | Barrel shift device |
JP4453518B2 (ja) * | 2004-10-29 | 2010-04-21 | ソニー株式会社 | 符号化及び復号装置並びに符号化及び復号方法 |
WO2006048828A1 (en) * | 2004-11-03 | 2006-05-11 | Koninklijke Philips Electronics N.V. | Programmable data processing circuit that supports simd instruction |
US7747088B2 (en) * | 2005-09-28 | 2010-06-29 | Arc International (Uk) Limited | System and methods for performing deblocking in microprocessor-based video codec applications |
CN101300849B (zh) * | 2005-11-01 | 2011-07-06 | 三叉微***(远东)有限公司 | 数据处理*** |
US8250618B2 (en) * | 2006-09-18 | 2012-08-21 | Elemental Technologies, Inc. | Real-time network adaptive digital video encoding/decoding |
JP4686435B2 (ja) * | 2006-10-27 | 2011-05-25 | 株式会社東芝 | 演算装置 |
CN101584216A (zh) * | 2006-12-27 | 2009-11-18 | 英特尔公司 | 解码和编码视频信息的方法和装置 |
KR101520027B1 (ko) * | 2007-06-21 | 2015-05-14 | 삼성전자주식회사 | 움직임 추정 방법 및 장치 |
US8184715B1 (en) * | 2007-08-09 | 2012-05-22 | Elemental Technologies, Inc. | Method for efficiently executing video encoding operations on stream processor architectures |
JP2009055291A (ja) * | 2007-08-27 | 2009-03-12 | Oki Electric Ind Co Ltd | 動き検出回路 |
US8121197B2 (en) | 2007-11-13 | 2012-02-21 | Elemental Technologies, Inc. | Video encoding and decoding using parallel processors |
WO2009074947A1 (en) * | 2007-12-12 | 2009-06-18 | Nxp B.V. | Instruction set for parallel calculation of sad values for motion estimation |
US8078836B2 (en) | 2007-12-30 | 2011-12-13 | Intel Corporation | Vector shuffle instructions operating on multiple lanes each having a plurality of data elements using a common set of per-lane control bits |
US8755515B1 (en) | 2008-09-29 | 2014-06-17 | Wai Wu | Parallel signal processing system and method |
EP2424243B1 (en) * | 2010-08-31 | 2017-04-05 | OCT Circuit Technologies International Limited | Motion estimation using integral projection |
US20120254589A1 (en) * | 2011-04-01 | 2012-10-04 | Jesus Corbal San Adrian | System, apparatus, and method for aligning registers |
DE102011075261A1 (de) * | 2011-05-04 | 2012-11-08 | Robert Bosch Gmbh | Verfahren zum Bearbeiten von Videodaten und eine Anordnung zur Durchführung des Verfahrens |
US9823928B2 (en) * | 2011-09-30 | 2017-11-21 | Qualcomm Incorporated | FIFO load instruction |
US9715383B2 (en) * | 2012-03-15 | 2017-07-25 | International Business Machines Corporation | Vector find element equal instruction |
US8767252B2 (en) | 2012-06-07 | 2014-07-01 | Xerox Corporation | System and method for merged image alignment in raster image data |
CN103489427B (zh) * | 2012-06-14 | 2015-12-02 | 深圳深讯和科技有限公司 | Yuv转换成rgb以及rgb转换成yuv的方法和*** |
US9195521B2 (en) * | 2012-07-05 | 2015-11-24 | Tencent Technology (Shenzhen) Co., Ltd. | Methods for software systems and software systems using the same |
US9395988B2 (en) * | 2013-03-08 | 2016-07-19 | Samsung Electronics Co., Ltd. | Micro-ops including packed source and destination fields |
CN104243085A (zh) * | 2013-06-08 | 2014-12-24 | 阿尔卡特朗讯 | 用于编码重组位数据的方法、装置和基站控制器 |
US9880845B2 (en) * | 2013-11-15 | 2018-01-30 | Qualcomm Incorporated | Vector processing engines (VPEs) employing format conversion circuitry in data flow paths between vector data memory and execution units to provide in-flight format-converting of input vector data to execution units for vector processing operations, and related vector processor systems and methods |
EP3001307B1 (en) * | 2014-09-25 | 2019-11-13 | Intel Corporation | Bit shuffle processors, methods, systems, and instructions |
US20160125263A1 (en) | 2014-11-03 | 2016-05-05 | Texas Instruments Incorporated | Method to compute sliding window block sum using instruction based selective horizontal addition in vector processor |
IL281321B (en) * | 2016-10-04 | 2022-07-01 | Magic Leap Inc | Efficient data layouts for convolutional neural networks |
JP6733569B2 (ja) * | 2017-02-06 | 2020-08-05 | 富士通株式会社 | シフト演算回路およびシフト演算方法 |
US10481870B2 (en) | 2017-05-12 | 2019-11-19 | Google Llc | Circuit to perform dual input value absolute value and sum operation |
US11360744B2 (en) * | 2017-06-29 | 2022-06-14 | Beijing Qingying Machine Visual Technology Co., Ltd. | Two-dimensional data matching method, device and logic circuit |
US11803377B2 (en) * | 2017-09-08 | 2023-10-31 | Oracle International Corporation | Efficient direct convolution using SIMD instructions |
CN108540799B (zh) * | 2018-05-16 | 2022-06-03 | 重庆堂堂网络科技有限公司 | 一种可以精确表示一个视频文件两帧图像之间差异的压缩方法 |
CN110221807B (zh) * | 2019-06-06 | 2021-08-03 | 龙芯中科(合肥)技术有限公司 | 数据移位方法、装置、设备及计算机可读存储介质 |
JP6979987B2 (ja) * | 2019-07-31 | 2021-12-15 | 株式会社ソニー・インタラクティブエンタテインメント | 情報処理装置 |
US11601656B2 (en) * | 2021-06-16 | 2023-03-07 | Western Digital Technologies, Inc. | Video processing in a data storage device |
US20230205528A1 (en) * | 2021-12-23 | 2023-06-29 | Intel Corporation | Apparatus and method for vector packed concatenate and shift of specific portions of quadwords |
CN114816531B (zh) * | 2022-04-18 | 2023-05-02 | 海飞科(南京)信息技术有限公司 | 使用窄加法数据通道实现大位宽加操作数取数加操作的方法 |
US11941397B1 (en) * | 2022-05-31 | 2024-03-26 | Amazon Technologies, Inc. | Machine instructions for decoding acceleration including fuse input instructions to fuse multiple JPEG data blocks together to take advantage of a full SIMD width of a processor |
GB2620381A (en) * | 2022-06-30 | 2024-01-10 | Advanced Risc Mach Ltd | Vector extract and merge instruction |
Family Cites Families (75)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3711692A (en) | 1971-03-15 | 1973-01-16 | Goodyear Aerospace Corp | Determination of number of ones in a data field by addition |
US3723715A (en) | 1971-08-25 | 1973-03-27 | Ibm | Fast modulo threshold operator binary adder for multi-number additions |
US4139899A (en) | 1976-10-18 | 1979-02-13 | Burroughs Corporation | Shift network having a mask generator and a rotator |
US4161784A (en) | 1978-01-05 | 1979-07-17 | Honeywell Information Systems, Inc. | Microprogrammable floating point arithmetic unit capable of performing arithmetic operations on long and short operands |
US4418383A (en) | 1980-06-30 | 1983-11-29 | International Business Machines Corporation | Data flow component for processor and microprocessor systems |
US4393468A (en) | 1981-03-26 | 1983-07-12 | Advanced Micro Devices, Inc. | Bit slice microprogrammable processor for signal processing applications |
JPS57209570A (en) | 1981-06-19 | 1982-12-22 | Fujitsu Ltd | Vector processing device |
US4498177A (en) | 1982-08-30 | 1985-02-05 | Sperry Corporation | M Out of N code checker circuit |
US4569016A (en) | 1983-06-30 | 1986-02-04 | International Business Machines Corporation | Mechanism for implementing one machine cycle executable mask and rotate instructions in a primitive instruction set computing system |
US4707800A (en) | 1985-03-04 | 1987-11-17 | Raytheon Company | Adder/substractor for variable length numbers |
JPS6297060A (ja) | 1985-10-23 | 1987-05-06 | Mitsubishi Electric Corp | デイジタルシグナルプロセツサ |
US4989168A (en) | 1987-11-30 | 1991-01-29 | Fujitsu Limited | Multiplying unit in a computer system, capable of population counting |
US5019968A (en) | 1988-03-29 | 1991-05-28 | Yulan Wang | Three-dimensional vector processor |
EP0363176B1 (en) | 1988-10-07 | 1996-02-14 | International Business Machines Corporation | Word organised data processors |
US4903228A (en) | 1988-11-09 | 1990-02-20 | International Business Machines Corporation | Single cycle merge/logic unit |
KR920007505B1 (ko) | 1989-02-02 | 1992-09-04 | 정호선 | 신경회로망을 이용한 곱셈기 |
US5081698A (en) | 1989-02-14 | 1992-01-14 | Intel Corporation | Method and apparatus for graphics display data manipulation |
US5497497A (en) | 1989-11-03 | 1996-03-05 | Compaq Computer Corp. | Method and apparatus for resetting multiple processors using a common ROM |
US5168571A (en) | 1990-01-24 | 1992-12-01 | International Business Machines Corporation | System for aligning bytes of variable multi-bytes length operand based on alu byte length and a number of unprocessed byte data |
US5268995A (en) | 1990-11-21 | 1993-12-07 | Motorola, Inc. | Method for executing graphics Z-compare and pixel merge instructions in a data processor |
US5680161A (en) | 1991-04-03 | 1997-10-21 | Radius Inc. | Method and apparatus for high speed graphics data compression |
US5187679A (en) | 1991-06-05 | 1993-02-16 | International Business Machines Corporation | Generalized 7/3 counters |
US5321810A (en) | 1991-08-21 | 1994-06-14 | Digital Equipment Corporation | Address method for computer graphics system |
US5423010A (en) | 1992-01-24 | 1995-06-06 | C-Cube Microsystems | Structure and method for packing and unpacking a stream of N-bit data to and from a stream of N-bit data words |
US5426783A (en) | 1992-11-02 | 1995-06-20 | Amdahl Corporation | System for processing eight bytes or less by the move, pack and unpack instruction of the ESA/390 instruction set |
US5408670A (en) | 1992-12-18 | 1995-04-18 | Xerox Corporation | Performing arithmetic in parallel on composite operands with packed multi-bit components |
US5465374A (en) | 1993-01-12 | 1995-11-07 | International Business Machines Corporation | Processor for processing data string by byte-by-byte |
US5524256A (en) | 1993-05-07 | 1996-06-04 | Apple Computer, Inc. | Method and system for reordering bytes in a data stream |
JPH0721034A (ja) * | 1993-06-28 | 1995-01-24 | Fujitsu Ltd | 文字列複写処理方法 |
US5625374A (en) | 1993-09-07 | 1997-04-29 | Apple Computer, Inc. | Method for parallel interpolation of images |
US5390135A (en) | 1993-11-29 | 1995-02-14 | Hewlett-Packard | Parallel shift and add circuit and method |
US5487159A (en) | 1993-12-23 | 1996-01-23 | Unisys Corporation | System for processing shift, mask, and merge operations in one instruction |
US5781457A (en) | 1994-03-08 | 1998-07-14 | Exponential Technology, Inc. | Merge/mask, rotate/shift, and boolean operations from two instruction sets executed in a vectored mux on a dual-ALU |
US5594437A (en) | 1994-08-01 | 1997-01-14 | Motorola, Inc. | Circuit and method of unpacking a serial bitstream |
US5579253A (en) | 1994-09-02 | 1996-11-26 | Lee; Ruby B. | Computer multiply instruction with a subresult selection option |
US6738793B2 (en) | 1994-12-01 | 2004-05-18 | Intel Corporation | Processor capable of executing packed shift operations |
ZA9510127B (en) | 1994-12-01 | 1996-06-06 | Intel Corp | Novel processor having shift operations |
US6275834B1 (en) | 1994-12-01 | 2001-08-14 | Intel Corporation | Apparatus for performing packed shift operations |
US5636352A (en) * | 1994-12-16 | 1997-06-03 | International Business Machines Corporation | Method and apparatus for utilizing condensed instructions |
GB9509989D0 (en) | 1995-05-17 | 1995-07-12 | Sgs Thomson Microelectronics | Manipulation of data |
US6381690B1 (en) | 1995-08-01 | 2002-04-30 | Hewlett-Packard Company | Processor for performing subword permutations and combinations |
US6643765B1 (en) | 1995-08-16 | 2003-11-04 | Microunity Systems Engineering, Inc. | Programmable processor with group floating point operations |
US6385634B1 (en) | 1995-08-31 | 2002-05-07 | Intel Corporation | Method for performing multiply-add operations on packed data |
WO1997008608A1 (en) | 1995-08-31 | 1997-03-06 | Intel Corporation | A set of instructions for operating on packed data |
US7085795B2 (en) | 2001-10-29 | 2006-08-01 | Intel Corporation | Apparatus and method for efficient filtering and convolution of content data |
US5819117A (en) | 1995-10-10 | 1998-10-06 | Microunity Systems Engineering, Inc. | Method and system for facilitating byte ordering interfacing of a computer system |
US5880979A (en) | 1995-12-21 | 1999-03-09 | Intel Corporation | System for providing the absolute difference of unsigned values |
US5793661A (en) | 1995-12-26 | 1998-08-11 | Intel Corporation | Method and apparatus for performing multiply and accumulate operations on packed data |
US5838984A (en) | 1996-08-19 | 1998-11-17 | Samsung Electronics Co., Ltd. | Single-instruction-multiple-data processing using multiple banks of vector registers |
US5909572A (en) | 1996-12-02 | 1999-06-01 | Compaq Computer Corp. | System and method for conditionally moving an operand from a source register to a destination register |
US5933650A (en) | 1997-10-09 | 1999-08-03 | Mips Technologies, Inc. | Alignment and ordering of vector elements for single instruction multiple data processing |
US6223277B1 (en) | 1997-11-21 | 2001-04-24 | Texas Instruments Incorporated | Data processing circuit with packed data structure capability |
US6418529B1 (en) | 1998-03-31 | 2002-07-09 | Intel Corporation | Apparatus and method for performing intra-add operation |
US6041404A (en) | 1998-03-31 | 2000-03-21 | Intel Corporation | Dual function system and method for shuffling packed data elements |
US6211892B1 (en) | 1998-03-31 | 2001-04-03 | Intel Corporation | System and method for performing an intra-add operation |
US6192467B1 (en) | 1998-03-31 | 2001-02-20 | Intel Corporation | Executing partial-width packed data instructions |
US6115812A (en) | 1998-04-01 | 2000-09-05 | Intel Corporation | Method and apparatus for efficient vertical SIMD computations |
US6288723B1 (en) | 1998-04-01 | 2001-09-11 | Intel Corporation | Method and apparatus for converting data format to a graphics card |
US6098087A (en) * | 1998-04-23 | 2000-08-01 | Infineon Technologies North America Corp. | Method and apparatus for performing shift operations on packed data |
US6263426B1 (en) | 1998-04-30 | 2001-07-17 | Intel Corporation | Conversion from packed floating point data to packed 8-bit integer data in different architectural registers |
US20020002666A1 (en) | 1998-10-12 | 2002-01-03 | Carole Dulong | Conditional operand selection using mask operations |
US6484255B1 (en) | 1999-09-20 | 2002-11-19 | Intel Corporation | Selective writing of data elements from packed data based upon a mask using predication |
US6546480B1 (en) | 1999-10-01 | 2003-04-08 | Hitachi, Ltd. | Instructions for arithmetic operations on vectored data |
US6430684B1 (en) | 1999-10-29 | 2002-08-06 | Texas Instruments Incorporated | Processor circuits, systems, and methods with efficient granularity shift and/or merge instruction(s) |
US20050188182A1 (en) | 1999-12-30 | 2005-08-25 | Texas Instruments Incorporated | Microprocessor having a set of byte intermingling instructions |
US6745319B1 (en) | 2000-02-18 | 2004-06-01 | Texas Instruments Incorporated | Microprocessor with instructions for shuffling and dealing data |
US6816961B2 (en) | 2000-03-08 | 2004-11-09 | Sun Microsystems, Inc. | Processing architecture having field swapping capability |
AU2001239077A1 (en) * | 2000-03-15 | 2001-09-24 | Digital Accelerator Corporation | Coding of digital video with high motion content |
US7155601B2 (en) | 2001-02-14 | 2006-12-26 | Intel Corporation | Multi-element operand sub-portion shuffle instruction execution |
KR100446235B1 (ko) * | 2001-05-07 | 2004-08-30 | 엘지전자 주식회사 | 다중 후보를 이용한 움직임 벡터 병합 탐색 방법 |
US7818356B2 (en) | 2001-10-29 | 2010-10-19 | Intel Corporation | Bitstream buffer manipulation with a SIMD merge instruction |
US7272622B2 (en) | 2001-10-29 | 2007-09-18 | Intel Corporation | Method and apparatus for parallel shift right merge of data |
US7685212B2 (en) | 2001-10-29 | 2010-03-23 | Intel Corporation | Fast full search motion estimation with SIMD merge instruction |
US7340495B2 (en) | 2001-10-29 | 2008-03-04 | Intel Corporation | Superior misaligned memory load and copy using merge hardware |
US6914938B2 (en) * | 2002-06-18 | 2005-07-05 | Motorola, Inc. | Interlaced video motion estimation |
-
2002
- 2002-10-25 US US10/280,612 patent/US7685212B2/en not_active Expired - Lifetime
- 2002-10-28 CN CNB028132483A patent/CN1269027C/zh not_active Expired - Lifetime
- 2002-10-28 KR KR1020037017220A patent/KR100602532B1/ko not_active IP Right Cessation
- 2002-10-28 WO PCT/US2002/034404 patent/WO2003038601A1/en active Application Filing
- 2002-10-28 RU RU2003137531/09A patent/RU2273044C2/ru not_active IP Right Cessation
- 2002-10-28 DE DE10297000T patent/DE10297000B4/de not_active Expired - Lifetime
- 2002-10-28 JP JP2003540797A patent/JP4623963B2/ja not_active Expired - Lifetime
-
2005
- 2005-02-16 HK HK05101290A patent/HK1068985A1/xx not_active IP Right Cessation
-
2008
- 2008-07-28 JP JP2008193844A patent/JP4750157B2/ja not_active Expired - Lifetime
Non-Patent Citations (5)
Title |
---|
CSND199900751005, 松原 敦, "Pentium IIIの新命令を検証,第3部 新命令セット,プログラミング・テクニックで性能は大きく変わる", 日経バイト, 19990312, 第189号, p.136−143, JP, 日経BP社 Nikkei Business Publications,Inc. * |
CSND200000553004, SUGATECH, "Pentium IIIプログラミング", C MAGAZINE, 19990423, 第11巻 第5号, p.42−49, JP, ソフトバンクパブリッシング株式会社 * |
JPN6008009194, 松原 敦, "Pentium IIIの新命令を検証,第3部 新命令セット,プログラミング・テクニックで性能は大きく変わる", 日経バイト, 19990312, 第189号, p.136−143, JP, 日経BP社 Nikkei Business Publications,Inc. * |
JPN6008009196, SUGATECH, "Pentium IIIプログラミング", C MAGAZINE, 19990423, 第11巻 第5号, p.42−49, JP, ソフトバンクパブリッシング株式会社 * |
JPN7008001745, Peleg, A. Weiser, U., "MMX technology extension to the Intel architecture", IEEE Micro, 199608, Volume: 16, Issue: 4, p.42−50, US, IEEE * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007528545A (ja) * | 2004-03-10 | 2007-10-11 | アーム・リミテッド | データ・ワードの中へビットを挿入する装置および方法 |
JP2007334819A (ja) * | 2006-06-19 | 2007-12-27 | Nec Corp | ベクトルリネーミング方式およびベクトル型計算機 |
JP2013235027A (ja) * | 2012-05-02 | 2013-11-21 | Nippon Telegr & Teleph Corp <Ntt> | 演算装置、その方法およびプログラム |
JP2018521426A (ja) * | 2015-07-31 | 2018-08-02 | エイアールエム リミテッド | スプライス演算を行うための装置および方法 |
JP2020501270A (ja) * | 2016-12-13 | 2020-01-16 | エイアールエム リミテッド | パーティション・レプリケート命令 |
JP7053619B2 (ja) | 2016-12-13 | 2022-04-12 | アーム・リミテッド | パーティション・レプリケート命令 |
US11947962B2 (en) | 2016-12-13 | 2024-04-02 | Arm Limited | Replicate partition instruction |
US11977884B2 (en) | 2016-12-13 | 2024-05-07 | Arm Limited | Replicate elements instruction |
Also Published As
Publication number | Publication date |
---|---|
WO2003038601A1 (en) | 2003-05-08 |
HK1068985A1 (en) | 2005-05-06 |
JP4750157B2 (ja) | 2011-08-17 |
US7685212B2 (en) | 2010-03-23 |
KR20040038922A (ko) | 2004-05-08 |
KR100602532B1 (ko) | 2006-07-19 |
RU2273044C2 (ru) | 2006-03-27 |
CN1522401A (zh) | 2004-08-18 |
JP2009009587A (ja) | 2009-01-15 |
RU2003137531A (ru) | 2005-05-27 |
JP4623963B2 (ja) | 2011-02-02 |
CN1269027C (zh) | 2006-08-09 |
DE10297000B4 (de) | 2008-06-05 |
DE10297000T5 (de) | 2004-07-01 |
US20030123748A1 (en) | 2003-07-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4750157B2 (ja) | データを右方向平行シフトマージする方法及び装置 | |
US7272622B2 (en) | Method and apparatus for parallel shift right merge of data | |
US7085795B2 (en) | Apparatus and method for efficient filtering and convolution of content data | |
JP4064989B2 (ja) | パック・データの乗加算演算を実行する装置 | |
RU2263947C2 (ru) | Целочисленное умножение высокого порядка с округлением и сдвигом в архитектуре с одним потоком команд и множеством потоков данных | |
US7430578B2 (en) | Method and apparatus for performing multiply-add operations on packed byte data | |
US7395298B2 (en) | Method and apparatus for performing multiply-add operations on packed data | |
US6173394B1 (en) | Instruction having bit field designating status bits protected from modification corresponding to arithmetic logic unit result | |
US6370558B1 (en) | Long instruction word controlling plural independent processor operations | |
US5761726A (en) | Base address generation in a multi-processing system having plural memories with a unified address space corresponding to each processor | |
US5446651A (en) | Split multiply operation | |
JP4869552B2 (ja) | 符号乗算処理を実行する方法及び装置 | |
US5680339A (en) | Method for rounding using redundant coded multiply result | |
US6546480B1 (en) | Instructions for arithmetic operations on vectored data | |
US6219688B1 (en) | Method, apparatus and system for sum of plural absolute differences | |
US5606677A (en) | Packed word pair multiply operation forming output including most significant bits of product and other bits of one input | |
US5596519A (en) | Iterative division apparatus, system and method employing left most one's detection and left most one's detection with exclusive OR | |
US5880979A (en) | System for providing the absolute difference of unsigned values | |
US6574651B1 (en) | Method and apparatus for arithmetic operation on vectored data | |
JP3729540B2 (ja) | 画像処理装置 | |
US5479166A (en) | Huffman decoding method, circuit and system employing conditional subtraction for conversion of negative numbers | |
US20030046559A1 (en) | Apparatus and method for a data storage device with a plurality of randomly located data | |
US20050149701A1 (en) | Method, apparatus and system for pair-wise minimum and minimum mask instructions | |
Kim et al. | Architectural enhancements for color image and video processing on embedded systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20051028 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20051028 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080226 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20080526 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20080602 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20080626 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20080703 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080728 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20090303 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090701 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20090714 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20090915 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20091214 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20091221 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20100114 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20100121 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20100212 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20100219 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100315 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100615 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100910 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20101005 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20101102 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 Ref document number: 4623963 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131112 Year of fee payment: 3 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
EXPY | Cancellation because of completion of term |