JP4607105B2 - データをシャッフルするための方法及び装置 - Google Patents

データをシャッフルするための方法及び装置 Download PDF

Info

Publication number
JP4607105B2
JP4607105B2 JP2006515370A JP2006515370A JP4607105B2 JP 4607105 B2 JP4607105 B2 JP 4607105B2 JP 2006515370 A JP2006515370 A JP 2006515370A JP 2006515370 A JP2006515370 A JP 2006515370A JP 4607105 B2 JP4607105 B2 JP 4607105B2
Authority
JP
Japan
Prior art keywords
data
shuffle
operand
mask
packed
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2006515370A
Other languages
English (en)
Other versions
JP2007526536A (ja
Inventor
メイシー,ウィリアム,ジュニア
デベス,エリック
ルーセル,パトリス
グエン,フイ
Original Assignee
インテル コーポレイション
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by インテル コーポレイション filed Critical インテル コーポレイション
Publication of JP2007526536A publication Critical patent/JP2007526536A/ja
Application granted granted Critical
Publication of JP4607105B2 publication Critical patent/JP4607105B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion

Description

発明の詳細な説明
本出願は、2001年10月29日に出願された米国特許出願第09/952,891号「An Apparatus And Method For Efficient Filtering And Convolution Of Content Data」の一部継続出願である。
本出願は、2003年6月30日に出願された同時係属中の米国特許出願「Method And Apparatus For Parallel Table Lookup Using SIMD Instruction」と、2003年6月30日に出願された同時係属中の米国特許出願「Method And Apparatus For Rearranging Data Between Multiple Registers」に関連する。
[発明の技術分野]
本発明は、一般にマイクロプロセッサ及びコンピュータシステムの技術分野に関する。より詳細には、本発明は、データをシャッフルするための方法及び装置に関する。
[発明の背景]
コンピュータシステムが、私たちの社会においてますます普及してきている。コンピュータの処理能力は、広範な分野における労働者の効率性と生産性を向上させてきた。コンピュータを購入及び主有する費用が下落し続けるに従い、ますます多くの消費者がより新しく高速のマシーンを利用することが可能となってきている。さらに、多数の人々がその自由性によりノートブックコンピュータを使用することを享有している。モバイルコンピュータは、ユーザがオフィスを離れたり、旅行に出かけたりするとき、容易にデータを移送し、作業することを可能にする。このシナリオは、マーケティングスタッフ、企業役員及び学生に大変なじみのあるものであろう。
プロセッサ技術の進歩に従い、より新しいソフトウェアコードがプロセッサを備えたマシーン上で実行されるため生成されている。ユーザは一般に、使用されるソフトウェアのタイプに関係なく、ユーザのコンピュータからより高いパフォーマンスを期待及び要求する。そのような問題の1つは、プロセッサ内で実際に実行される命令及び処理のタイプから生じ得るものである。あるタイプの処理は、必要とされる回路のタイプ及び/または処理の複雑さに基づき、完了するのにより多くの時間を要する。これは、特定の複合処理がプロセッサ内で実行される方法を最適化する機会を提供する。
メディアアプリケーションは、10年以上の間にマイクロプロセッサの進歩の原動力となってきた。実際、近年のほとんどの計算力向上は、メディアアプリケーションにより駆動されてきた。大きな進歩が娯楽性を高めた教育及び通信のため企業レベルで見られてきたが、上記向上は消費者レベル内でも顕著に行われてきている。にもかかわらず、将来的なメディアアプリケーションは、より高い計算要求を求めるであろう。この結果、将来のパーソナルコンピュータの計算は、使いやすさと共に、オーディオビジュアル効果においてさらに充実したものとなり、より重要なことには、計算が通信と結び付くことになるであろう。
従って、画像の表示と共に、コンテンツと総称される音声及び映像の再生が、現在の計算装置のより一般的な用途となりつつある。フィルタリング処理と畳み込み処理は、画像、音声、映像データなどのコンテンツデータに対して実行される最も一般的な処理の一部である。このような処理は大きな計算量を要求するが、SIMD(Single Instruction Multiple Data)レジスタなどの各種データ記憶装置を用いた効率的な実現形態を通じて利用可能なハイレベルなデータ並列化を提供する。いくつかの現在のアーキテクチャはまた、命令スループットを最小化し、算術処理にデータを指示するのに必要とされるクロックサイクルのサイクル数を大きく増大させる不必要なデータタイプの変更を求める。
[詳細な説明]
データをシャッフルするための方法及び装置が開示される。SIMD命令を用いてパラレルなテーブル検索のための方法及び装置がまた開示される。複数のレジスタ間においてデータを再構成するための方法及び装置がまた開示される。ここで説明される実施例は、マイクロプロセッサに関して説明されるが、それに限定されるものではない。以下の実施例はプロセッサに関して説明されるが、他の実施例は、他のタイプの集積回路やロジック装置に適用可能である。本発明の同様の技術及び教示が、より大きなパイプラインスループット及びパフォーマンス向上を可能にする他のタイプの回路または半導体装置に容易に適用することができる。本発明の教示は、データ操作を実行する任意のプロセッサまたはマシーンに適用可能である。しかしながら、本発明は256ビット、128ビット、64ビット、32ビットあるいは16ビットデータ処理を実行するプロセッサまたはマシーンに限定されるものではなく、データのシャッフリングが必要とされる任意のプロセッサ及びマシーンに適用可能である。
以下の説明では、本発明の完全なる理解を提供するため、多数の具体的詳細が与えられる。しかしながら当業者は、これらの具体的詳細が本発明を実現するために必要ではないということを理解するであろう。他の例では、周知の電気的構成及び回路は、本発明を不必要に不明りょうとしないように、詳細には与えられていない。さらに、以下の説明は具体例を与え、添付された図面は例示のための各種具体例を示す。しかしながら、これらの具田入れは、本発明のすべての可能な実現形態の包括的なリストを提供するためのものではなく、単に本発明の具体例を提供するためのものであるため、限定的に解釈されるべきではない。
一実施例では、本発明の方法は、機械実行可能な命令により実現される。当該命令は、プログラムされる汎用または特殊用途向けプロセッサに本発明の各ステップを実行させるのに使用可能である。あるいは、本発明の各ステップは、当該ステップを実行するための配線化されたロジックを有する特殊なハードウェアコンポーネントによって、または、プログラムされたコンピュータコンポーネント及びカスタムハードウェアコンポーネントの任意の組み合わせによって実行されてもよい。
以下の具体例は実行ユニットやロジック回路に関して命令の処理及び配布を説明しているが、本発明の他の実施例はソフトウェアにより実現可能である。本発明は、本発明によるプロセスを実行するようコンピュータ(または他の電子装置)をプログラムするのに利用可能な命令を格納したマシーンまたはコンピュータ可読媒体を有するコンピュータプログラムプロダクツまたはソフトウェアとして提供されてもよい。そのようなソフトウェアがシステムのメモリ内に格納可能である。同様に、コードはネットワークを介して、または他のコンピュータ可読媒体を介して配布可能である。従って、機械可読媒体は、以下に限定されるものではないが、フロッピー(登録商標)ディスク、光ディスク、CD−ROM(Compact Disc Read−Only Memory)、光磁気ディスク、ROM(Read−Only Memory)、RAM(Random Access Memory)、EPROM(Erasable Programmable Read−Only Memory)、EEPROM(Electrically Erasable Programmable Read−Only Memory)、磁気または光カード、フラッシュメモリ、インターネットを介した送信、電気、光、音響または他の形態の伝搬信号(搬送波、赤外線信号、デジタル信号など)など、マシーン(コンピュータなど)により読出し可能な形態により情報を格納または送信するための任意の機構を有するかもしれない。
従って、コンピュータ可読媒体は、マシーン(コンピュータなど)により読出し可能な形態による電子命令または情報を格納または送信するのに適した任意のタイプの媒体/機械可読媒体を含む。さらに、本発明はまた、コンピュータプログラムプロダクツとしてダウンロードされてもよい。また、プログラムは、リモートコンピュータ(サーバなど)から要求元コンピュータ(クライアントなど)に転送されてもよい。プログラムの転送は、通信リンク(モデム、ネットワーク接続など)を介し搬送波や他の伝搬媒体に実現される電気、光、音響、または他の形態のデータ信号を介したものであってもよい。
さらに、本発明による集積回路設計の実施例は、テープまたは他の機械可読媒体上のデータベースとして電子形式により通信または転送可能である。例えば、一実施例によるプロセッサの電子形式による集積回路設計は、コンピュータコンポーネントを取得するため工場を介し処理または製造可能である。他の例では、電子形式による集積回路は、マシーンによりコンピュータコンポーネントをシミュレートするよう処理可能である。従って、一部の実施例によるプロセッサの設計及び/または回路レイアウトプランは、機械可読媒体を介し配布可能であり、マシーンによる処理時にプロセッサをシミュレートする集積回路のシミュレーションまたは製造のため、回路に実現可能である。機械可読媒体はまた、他の実施例において本発明による所定の機能を表すデータを格納可能である。
現在のプロセッサでは、いくつかの実行ユニットが各種コード及び命令を処理及び実行するのに利用される。すべての命令が等しく生成されるとは限らない。なぜなら、いくつかは素早く完了し、他のものは膨大な数のクロックサイクルを要する可能性があるためである。命令のスループットが高速化するほど、プロセッサの全体的パフォーマンスは向上する。従って、可能な限り高速かつ多数の命令を実行させることが効果的である。しかしながら、実行時間とプロセッサリソースに関して、より大きな複雑さを有し、より多くのものを必要とする命令が存在する。例えば、浮動小数点命令、ロード/ストア処理、データ移動などがあげられる。
ますます多くのコンピュータシステムがインターネットやマルチメディアアプリケーションに利用されると、時間の経過と共に追加的なプロセッサのサポートが導入されてきた。例えば、SIMD(Single Instruction Multiple Data)整数/浮動小数点命令とSSE(Streaming SIMD Extension)は、特定のプログラムタスクを実行するのに必要とする命令の合計数を減少させる命令である。これらの命令は、複数のデータ要素に対するパラレル処理によりソフトウェアパフォーマンスをスピードアップすることが可能である。この結果、映像、音声及び画像処理を含む広範なアプリケーションにおいてパフォーマンス向上が実現可能である。マイクロプロセッサ及び同様のタイプのロジック回路におけるSIMD命令の実現は、通常はいくつかの発行を伴う。さらに、SIMD処理の複雑さは、しばしばデータを正確に処理及び操作するため、追加的な回路を必要性を生じさせる。
本発明の実施例は、SIMD関連ハードウェアを利用するアルゴリズムとして、ゼロクリア(flush to zero)機能を有するpackedバイトシャッフル命令を実現する一手法を提供する。一実施例では、当該アルゴリズムは、各データ要素位置の制御マスクの値に基づき、特定のレジスタまたはメモリ位置からのデータをシャッフリングするコンセプトに基づくものである。packedバイトシャッフルの実施例は、データを再構成する多数のアプリケーションにおいて必要とされる命令数を減少するのに利用可能である。packedバイトシャッフル命令はまた、アラインされていないロードを有する任意のアプリケーションにも利用可能である。このシャッフル命令の実施例は、効率的な乗算加算処理のためデータを構成するフィルタリングに利用可能である。同様に、packedシャッフル命令は、データ及び小さな検索テーブルを順序付けするため、映像及び暗号化アプリケーションにおいて利用可能である。当該命令は、2以上のレジスタからのデータを合成するのに利用可能である。従って、本発明によるゼロクリア対応アルゴリズムによるpackedシャッフルの実施例は、全体的なパフォーマンスの重大な妥協なく、効率的にSIMD処理をサポートするためプロセッサにおいて実現可能である。
本発明の実施例は、任意のサイズのデータを効率的に順序付け及び構成するため、ゼロクリア機能をpackedデータシャッフル命令(PSHUFB)に提供する。一実施例では、データはバイト粒度によりレジスタにおいてシャッフルまたは再構成される。バイトシャッフル処理は、シャッフル処理中、より大きなデータの内部におけるバイトの相対位置を維持することによって、バイトより大きなデータサイズを指示する。さらに、バイトシャッフル処理は、SIMDレジスタにおけるデータの相対位置を変更し、さらにデータを複製することが可能である。このPSHUFB命令は、第2ソースレジスタのシャッフル制御バイトの内容に従って、第1ソースレジスタからのバイトをシャッフルする。上記命令はデータを並び替えるが、シャッフルマスクは本実施例のシャッフル処理中には影響を受けず、変更もされない。一実現形態のニーモニック(mnemonic)は、「PSHUFBレジスタ1,レジスタ2/メモリ」であり、第1及び第2オペランドはSIMDレジスタである。しかしながら、第2オペランドのレジスタはまた、メモリ位置に置換可能である。第1オペランドは、シャッフルのためのソースデータを含む。本実施例では、第1オペランドのレジスタは、デスティネーションレジスタである。本発明による実施例はまた、位置変更に加えて、選択されたバイトをzeroに設定する機能を有する。
第2オペランドは、シャッフルパターンを指定するため、シャッフル制御マスクバイト群を有する。ソースデータ要素を選択するのに用いられるビット数は、ソースオペランドのデータ要素の個数のlogである。例えば、128ビットレジスタの実施例におけるバイト数は16バイトである。16のlogは4である。従って、4ビット、すなわち1ニブルが必要とされる。以下のコードの[3:0]インデックスは4ビットを参照する。シャッフル制御バイトの最上位ビット(MSB)、本実施例ではビット7が設定されている場合、定数ゼロが結果のバイトに書き込まれる。第2オペランドのバイトIの最下位ニブル、マスクセットが整数Jを有する場合、シャッフル命令は、第1ソースレジスタのJ番目のバイトをデスティネーションレジスタのI番目のバイトにコピーさせる。以下において、128ビットオペランドに対するpackedバイトシャッフル処理の一実施例の例示的な擬似コードが与えられる。
Figure 0004607105
同様に、以下は64ビットオペランドに対するpackedバイトシャッフル処理の他の実施例の一例となる擬似コードである。
Figure 0004607105
この64ビットレジスタの実施例では、64ビットレジスタに8バイトあるとき、マスクの下位3ビットが利用される。8のlogは3である。上記コードのビット数は3ビットを参照している。他の実施例では、マスクのビット数は、ソースデータにおいて利用可能なデータ要素の個数に適応するよう可変とされる。例えば、下位5ビットを有するマスクは、256ビットレジスタにおいてデータ要素を選択するのに必要とされる。
現在、SIMDにおいてデータを再構成することは、困難かつ退屈なことである。いくつかのアルゴリズムは、上記処理を実行するための実際の命令数より、算術処理のためにデータを構成するのにより多くの命令を要する。本発明によりpackedバイトシャッフル命令の実施例を実現することによって、データの再構成を実現するのに必要とされる命令数は、劇的に減少させることができる。例えば、packedバイトシャッフル命令の一実施例は、1バイトのデータを128ビットレジスタのすべての位置に配信することが可能である。レジスタにおけるデータの配信は、単一のデータアイテムが多数の係数と乗算されるフィルタリングアプリケーションにおいてしばしば利用される。当該命令がない場合、データバイトはそれのソースからフィルタリングされ、最下位バイト位置にシフトされる必要があるであろう。このとき、当該単一バイトは、まず1バイトとして複製され、その後、当該2バイトがダブルワードを形成するよう再び複製され、最後に当該ダブルワードがクワドワードを形成するよう複製される必要がある。これらすべての処理は、シングルpackedシャッフル命令と置換可能である。
同様に、ビッグエンディアンとリトルエンディアン形式との間の変更など、128ビットレジスタのすべてのバイトの反転は、シングルpackedシャッフル命令により容易に実行可能である。これら極めてシンプルなパターンは、packedシャッフル命令が利用されなかった場合、いくつかの命令を必要とする一方、複雑またはランダムなパターンはさらに非効率な命令ルーチンを要求する。SIMDレジスタにおいてランダムバイトをリオーダするための最も直接的な手段は、当該バイトをバッファに書き込み、その後に整数バイトリード/ライトを用いて、それらをリオーダし、SIMDレジスタに読み戻すことである。これらすべてのデータ処理は長いコードシーケンスを必要とするが、シングルpackedシャッフル命令のみで十分である。必要とされる命令数を減少させることによって、同一の結果を生成するのに必要とされるクロックサイクル数は大きく減らされる。本発明の実施例はまた、シャッフル命令を用いてSIMD命令によりテーブルの複数の値にアクセスする。テーブルがレジスタの2倍のサイズである場合でさえ、本発明によるアルゴリズムは、整数処理と同様に命令ごとに1つのデータ要素より速く複数のデータ要素にアクセスすることを可能にする。
図1Aは、本発明の一実施例によるデータをシャッフルするための命令を実行する実行ユニットを有するプロセッサにより構成される一例となるコンピュータシステムのブロック図である。システム100は、ここで説明される実施例などの本発明に従って、ロジック含む実行するユニットを用いてデータをシャッフルするアルゴリズムを実行するプロセッサ102などのコンポーネントを含む。システム100は、他のシステム(他のマイクロプロセッサを有するPC、エンジニアリングワークステーション、セットトップボックスなどを含む)もまた利用されてもよいが、カリフォルニア州サンタクララのインテルコーポレイションから入手可能なPENTIUM(登録商標)III、PENTIUM(登録商標)4、Celeron(登録商標)、XeonTM、Itanium(登録商標)、XScaleTM及び/またはStrongARMTMマイクロプロセッサに基づく処理システムを表す。一実施例では、サンプルシステム100は、他のオペレーティングシステム(UNIX(登録商標)やLinuxなど)、埋め込みソフトウェア及び/またはグラフィカルユーザインタフェースもまた利用されてもよいが、ワシントン州のレッドモンドのマイクロソフトコーポレイションから入手可能なWINDOWS(登録商標)オペレーティングシステムの一バージョンを実行するようにしてもよい。従って、本発明は、ハードウェア回路及びソフトウェアの任意の具体的組み合わせに限定されるものではない。
本拡張は、コンピュータシステムに限定されるものではない。本発明の他の実施例が、携帯型装置や埋め込みアプリケーションアドの他の装置において利用可能である。携帯型装置のいくつかの例として、携帯電話、インターネットプロトコル装置、デジタルカメラ、携帯情報端末(PDA)及び携帯型PCがあげられる。埋め込みアプリケーションとして、マイクロコントローラ、デジタル信号プロセッサ(DSP)、チップ上のシステム、ネットワークコンピュータ(NetPC)、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク(WAN)スイッチ、またはオペランドに対し整数シャッフル処理を実行する他の何れかのシステムがあげられる。さらに、いくつかのアーキテクチャは、マルチメディアアプリケーションの効率性を向上させるため、命令が複数のデータに対して同時に実行可能となるよう実現されている。データのタイプ及びデータ量が増大するに従って、コンピュータ及びそのプロセッサは、より効率的にデータを操作するよう拡張される必要がある。
図1Aは、本発明によるデータシャッフルアルゴリズムを実行する1以上の実行ユニット108を有するプロセッサにより構成されるコンピュータシステム100のブロック図である。本実施例は、単一プロセッサデスクトップやサーバシステムに関して説明されるが、他の実施例はマイクロプロセッサシステムに備えることが可能である。システム100は、ハブアーキテクチャの一例である。コンピュータシステム100は、データ信号を処理するプロセッサ102を有する。プロセッサ102は、CISC(Complex Instruction Set Computer)マイクロプロセッサ、RISC(Reduced Instruction Set Computing)マイクロプロセッサ、VLIW(Very Long Instruction Word)マイクロプロセッサ、命令セットの組み合わせを実現するプロセッサ、あるいはデジタル信号プロセッサなどの他の任意のプロセッサ装置とすることが可能である。プロセッサ102は、プロセッサ102とシステム100の他のコンポーネントとの間のデータ信号を送信可能なプロセッサバス110に接続される。システム100の要素は、当業者には周知のそれらの従来技術による機能を実行する。
一実施例では、プロセッサ102は、レベル1(L1)内部キャッシュメモリ104を有する。アーキテクチャに応じて、プロセッサ102は、複数レベルの内部キャッシュまたは単独の内部キャッシュを有することも可能である。あるいは他の実施例では、キャッシュメモリは、プロセッサ102の外部に配置することも可能である。他の実施例はまた、特定の実現形態及びニーズに応じて、内部キャッシュと外部キャッシュの両方の組み合わせを有することが可能である。レジスタファイル106は、整数レジスタ、浮動小数点レジスタ、状態レジスタ及び命令ポインタレジスタを含む各種レジスタに異なるタイプのデータを格納することが可能である。
整数及び浮動小数点処理を実行するロジックを含む実行ユニット108がまた、プロセッサ102内に配置される。プロセッサ102はまた、特定のマイクロ命令のためのマイクロコードを格納するマイクロコード(ucode)ROMを有する。本実施例では、実行ユニット108は、packed命令セット109を処理するロジックを有する。一実施例では、packed命令セット109は、データを整理するためpackedシャッフル命令を有する。命令を実行する付属の回路と共に、packed命令セット109を汎用プロセッサ102の命令セットに含めることによって、多数のマルチメディアアプリケーションにより用いられる処理は、汎用プロセッサ102のpackedデータを用いて実行されるかもしれない。従って、多くのマルチメディアプリケーションは、packedデータに対する処理を実行するため、プロセッサのデータバスの幅全体を用いることにより、より効率的に実行及び高速化することが可能である。これにより、1回に1つのデータ要素に対して1以上の処理を実行するため、プロセッサのデータバスを介しより小さなデータユニットを転送する必要性を解消することができる。
実行ユニット108の他の実施例がまた、マイクロコントローラ、埋め込みプロセッサ、グラフィック装置、DSP及び他のタイプのロジック回路において利用可能である。システム100は、メモリ120を有する。メモリ120は、DRAM(Dynamic Random Access Memory)装置、SRAM(Static Random Access Memory)装置、フラッシュメモリ装置、または他の記憶装置とすることが可能である。メモリ120は、プロセッサ102により実行可能なデータ信号により表されるデータ及び/または命令を格納することが可能である。
システムロジックチップ116は、プロセッサバス110及びメモリ120に接続される。図示された実施例では、システムロジックチップ116は、MCH(Memory Controller Hub)である。プロセッサ102は、プロセッサバス110を介しMCH116と通信可能である。MCH116は、命令及びデータの格納のため、及びグラフィックコマンド、データ及びテクスチャの格納のため、広帯域幅メモリパス118をメモリ120に設ける。MCH116は、プロセッサ102、メモリ120及びシステム100の他のコンポーネントとの間でデータ信号を指示し、プロセッサバス110、メモリ120及びシステムI/O122との間でデータ信号をブリッジするためのものである。一部の実施例では、システムロジックチップ116は、グラフィックコントローラ112と接続するためのグラフィックポートを設けることが可能である。MCH116は、メモリインタフェース118を介しメモリ120と接続される。グラフィックカード112は、AGP(Accelerated Graphics Port)インタコネクト114を介しMCH116と接続される。
システム100は、専用のハブインタフェースバス122を用いて、MCH116とI/Oコントローラハブ(ICH)130とを接続する。ICH130は、ローカルI/Oバスを介しいくつかのI/O装置との直接的接続を提供する。ローカルI/Oバスは、周辺装置とメモリ120、チップセット及びプロセッサ102とを接続するための高速I/Oバスである。いくつかの例として、音声コントローラ、ファームウェアハブ(フラッシュBIOS)128、ワイヤレストランシーバ126、データストレージ124、ユーザ入力とキーボードインタフェースを含む従来のI/Oコントローラ、USB(Universal Serial Bus)などのシリアル拡張ポート及びネットワークコントローラ134があげられる。データストレージ装置124は、ハードディスクドライブ、フロッピー(登録商標)ディスクドライブ、CD−ROM装置、フラッシュメモリ装置、または他の大容量記憶装置から構成することが可能である。
システムの他の実施例では、シャッフル命令によりアルゴリズムを実行する実行ユニットが、チップ上のシステムにより利用可能である。チップ上のシステムの一実施例は、プロセッサとメモリとから構成される。そのようなシステムのメモリは、フラッシュメモリである。フラッシュメモリは、プロセッサ及び他のシステムコンポーネントと同一のダイ上に配置することが可能である。さらに、メモリコントローラやグラフィックコントローラなどの他のロジックブロックもまた、チップ上のシステムに配置することが可能である。
図1Bは、本発明の原理を実現するデータ処理システム140の他の実施例を示す。データ処理システム140の一実施例では、インテルXScaleTM技術を有するインテル(登録商標)PCA(Personal Internet Client Architecture)アプリケーションプロセッサである(developer.intel.comにおいてワールドワイドウェブ上に説明されるように)。ここで開示される実施例は、本発明の範囲から逸脱することなく他の処理システムにより利用可能であるということは、当業者には容易に理解されるであろう。
コンピュータシステム140は、シャッフルを含むSIMD処理を実行可能な処理コア159から構成される。一実施例では、処理コア159は、以下に限定されるものではないが、CISC、RISCまたはVLIWタイプアーキテクチャを含む任意のタイプのアーキテクチャの処理ユニットを表す。処理コア159はまた、1以上の処理技術において製造に適したものであってもよいし、十分詳細に機械可読媒体上に表すことにより、製造を容易にするのに適したものであってもよい。
処理コア159は、実行ユニット142、レジスタファイル群145及びデコーダ144から構成される。処理コア159はまた、本発明の理解に不要な追加的回路(図示せず)を有する。実行ユニット142は、処理コア159により受信された命令を実行するのに利用される。典型的なプロセッサ命令を認識するのに加えて、実行ユニット142は、packedデータ形式に対する処理を実行するため、packed命令セット143の命令を認識することが可能である。packed命令セット143は、シャッフル処理をサポートする命令を有し、さらに他のpacked命令を有するようにしてもよい。実行ユニット142は、内部バスによりレジスタファイル145に接続される。レジスタファイル145は、データを含む情報を格納するため、処理コア159上の格納領域を表す。前述のように、packedデータを格納するのに用いられる格納領域は重要なものではないということが理解されるであろう。実行ユニット142は、デコーダ144に接続される。デコーダ144は、処理コア159により受信される命令を制御信号及び/またはマイクロコードエントリポイントに復号するのに利用される。上記制御信号及び/またはマイクロコードエントリポイントに応答して、実行ユニット142は、適切な処理を実行する。
処理コア159は、以下に限定されるものではないが例えば、SDRAM(Synchronous Dynamic Random Access Memory)制御146、SRAM(Static Random Access Memory)制御147、バーストフラッシュメモリインタフェース148、PCMCIA(Personal Computer Memory Card International Association)/CF(Compact Flash)カード制御149、LCD(Liquid Crystal Display)制御150、DMA(Direct Memory Access)コントローラ151及び代替バスマスタインタフェース152を含む他の各種システム装置と通信するためのバス141と接続されている。一実施例では、データ処理システム140はまた、各種I/O装置とI/Oバス153を介し通信するためのI/Oブリッジ154を有するようにしてもよい。そのようなI/O装置は、以下に限定されるものではないが例えば、UART(Universal Asynchronous Receiver/Transmitter)155、USB(Universal Serial Bus)156、BluetoothワイアレスUART157及びI/O拡張インタフェース158を含むものであってもよい。
データ処理システム140の一実施例は、シャッフル処理を含むSIMD処理を実行可能な処理コア159と、モバイル、ネットワーク及び/またはワイアレス通信を提供する。処理コア159は、ウォルシュ・アダマール変換、高速フーリエ変換(FFT)、離散コサイン変換(DCT)などの離散変換及びそれらの逆変換、色空間変換、映像符号化動き予測または映像復号化動き補償などの圧縮/解凍技術、及びPCM(Pulse Coded Modulation)などの変調/復調(MODEM)機能を含む各種音声、映像、画像処理及び通信アルゴリズムによりプログラムされてもよい。
図1Cは、SIMDシャッフル処理を実行可能なデータ処理システムのさらなる他の実施例を示す。他の実施例によると、データ処理システム160は、メインプロセッサ166、SIMDコプロセッサ161、キャッシュメモリ167及び入出力システム168を有するようにしてもよい。入出力システム168は任意的に、ワイアレスインタフェース169に接続されてもよい。SIMDコプロセッサ161は、データシャッフルを含むSIMD処理を実行することが可能である。処理コア170は、1以上の処理技術において製造に適したものであり、十分詳細に機械可読媒体上に表すことにより、処理コア170を含むデータ処理システム160のすべてまたは一部の製造を容易にするのに適したものであってもよい。
一実施例では、SIMコプロセッサ161は、実行ユニット162とレジスタファイル群164を有する。メインプロセッサ165の一実施例は、実行ユニット162による実行のため、SIMDシャッフル命令を含む命令セット163の命令を認識するためのデコーダ165を有する。他の実施例では、SIMDコプロセッサ161はまた、命令セット163の命令を復号するため、デコーダ165Bの少なくとも一部を有する。処理コア170はまた、本発明の理解には不要なさらなる回路(図示せず)を有する。
処理に関して、メインプロセッサ166は、入出力システム168とキャッシュメモリ167とのやりとりを含む一般的なデータ処理を制御するデータ処理命令のストリームを実行する。SIMDコプロセッサ命令は、データ処理命令のストリームに埋め込まれる。メインプロセッサ166のデコーダ165は、付属のSIMDコプロセッサ161により実行されるべきタイプとして、上記SIMDコプロセッサ命令を認識する。従って、メインプロセッサ166は、これらのSIMDコプロセッサ命令(またはSIMDコプロセッサ命令を表す制御信号)を、それらが付属の何れかのSIMDコプロセッサにより受け取られるコプロセッサバス166を介し発行する。この場合、SIMDコプロセッサ161は、それに対する受信したSIMDコプロセッサ命令を受付及び実行するであろう。
SIMDコプロセッサ命令による処理のため、データがワイアレスインタフェース169を介し受信される。例えば、音声通信が、デジタル信号形式により受信され、音声通信を表すデジタル音声サンプルを再生成するようSIMDコプロセッサ命令により処理されてもよい。他の例では、圧縮された音声及び/映像が、デジタルビットストリーム形式で受信され、デジタル音声サンプル及び/または動き映像フレームを再生成するようSIMDコプロセッサ命令により処理される。処理コア170の一実施例では、メインプロセッサ166とSIMDコプロセッサ161が、SIMDシャッフル命令を含む命令セット163の命令を認識するため、実行ユニット162、レジスタファイル群164及びデコーダ165からなる単一の処理コア170に一体化される。
図2は、本発明によるシャッフル処理を実行するロジック回路を有する一実施例によるプロセッサ200のマイクロアーキテクチャのブロック図である。シャッフル処理はまた、上述の説明と同様に、packedデータシャッフル処理及びpackedシャッフル命令と呼ばれてもよい。シャッフル命令の一実施例では、当該命令は、あるバイト粒度によりpackedデータをシャッフルすることが可能である。この命令はまた、PSHUFBまたはpackedシャッフルバイトと呼ぶことも可能である。他の実施例では、シャッフル命令はまた、ワード、ダブルワード、クアドワードなどのサイズを有するデータ要素に対して処理するよう実現可能である。インオーダフロントエンド201は、実行されるマクロ命令をフェッチし、プロセッサパイプラインにおける以降の利用のためそれらを用意するプロセッサ200の一部である。本実施例のフロントエンド201は、複数のユニットを含む。命令プリフェッチャ226は、メモリからマクロ命令をフェッチし、それらを命令デコーダ228に供給し、次に命令デコーダ228がそれらをマシーンが実行方法を知っているマイクロ命令またはマイクロ処理(マイクロopまたはuopとも呼ばれる)と呼ばれるプリミティブに復号する。トレースキャッシュ230は、復号されたuopを抽出し、それらをプログラムオーダードシーケンスに構成するか、あるいは実行のためuopキュー234にトレースする。トレースキャッシュ230が複合マクロ命令に遭遇すると、マイクロコードROM232は、当該処理を完了させるのに必要なuopを提供する。
多数のマクロ命令が1つのマイクロopに変換され、その他は完全な処理を完了させるため複数のマイクロopを必要とする。本実施例では、5以上のマイクロopがマクロ命令を完了させるのに必要とされる場合、デコーダ228は、マクロ命令を実行するのにマイクロコードROM232にアクセスする。一実施例では、packedシャッフル命令が命令デコーダ228における処理のため、少数のマイクロopに復号することが可能である。他の実施例では、packedデータシャッフルアルゴリズムの命令は、当該処理を実現するのにいくつかのマイクロopが必要な場合、マイクロコードROM232に格納可能である。トレースキャッシュ230は、マイクロコードROM232のシャッフルアルゴリズムのためのマイクロコードシーケンスを読み出すため、正しいマイクロ命令ポインタを決定するためのエントリポイントPLA(Programmble Logic Array)を参照する。マイクロコードROM232が現在のマクロ命令に対するマイクロopのシーケンス処理を終了した後、マシーンのフロントエンド201は、トレースキャッシュ230からマイクロopのフェッチを再開する。
一部のSIMD及び他のマルチメディアタイプの命令は、複合処理とみなされる。ほとんどの浮動小数点関連命令は、複合命令である。また命令デコーダ228が複合マクロ命令に遭遇すると、マイクロコードROM232は、マクロ命令のマイクロコードシーケンスを抽出するため、適切な位置でアクセスされる。当該マクロ命令を実行するのに必要とされる各種マイクロopは、適切な整数及び浮動小数点実行ユニットにおける実行のため、アウトオブオーダ実行エンジン203に通信される。
アウトオブオーダ実行エンジン203では、マイクロ命令が実行のため用意される。アウトオブオーダ実行ロジックは、パイプラインに進み、実行のスケジューリングがされたとき、パフォーマンスを最適化するようマイクロ命令のフローを平坦化及びリオーダするためのいくつかのバッファを有する。アロケータロジックは、各uopが実行に要するマシーンバッファとリソースを割当てる。レジスタリネーミングロジックは、ロジックレジスタをレジスタファイルのエントリにリネームする。アロケータはまた、メモリスケジューラ、高速スケジューラ202、低速/汎用浮動小数点スケジューラ204及びシンプル浮動小数点スケジューラ206の命令スケジューラの前に、メモリ処理の1つと非メモリ処理の1つの2つのuopキューの1つにおける各uopに対するエントリを割当てる。uopスケジューラ202、204及び206は、それらに従属する入力レジスタオペランドソースの準備及びそれの処理を完了させるのにuopが必要とする実行リソースの利用性に基づき、uopの実行が準備できた時点を判断する。本実施例の高速スケジューラ202は、メインクロックサイクルの各半分についてスケジューリング可能であり、その他のスケジューラは、メインプロセッサクロックサイクルごとに1回のみスケジューリングを行うことが可能である。スケジューラは、実行されるuopをスケジューリングするため、ディスパッチポートを調停する。
レジスタファイル208と210が、スケジュール202、204、206と実行ブロック211の実行ユニット212、214、216、218、220、222、224との間に配置される。整数処理と符号小数点処理のそれぞれに対して、独立したレジスタファイル208と210が設けられる。本実施例の各レジスタファイル208と210は、レジスタファイルにまだ書き込まれていない完了された結果を新しい従属uopにバイパスまたは転送することが可能なバイパスネットワークを有する。整数レジスタファイル208と浮動小数点レジスタファイル210は、他方とデータを通信することが可能である。一実施例では、整数レジスタファイル208は、2つの独立したレジスタファイルに分割され、1つのレジスタファイルはローオーダ32ビットデータ用であり、第2のレジスタファイルはハイオーダ32ビットデータ用である。一実施例の浮動小数点レジスタファイル210は、浮動小数点命令が典型的には、64〜128ビット幅のオペランドを有するため、128ビット長のエントリを有する。
実行ブロック211は、命令が実際に実行される実行ユニット212、214、216、218、220、222及び224を有する。当該セクションは、マイクロ命令が実行するのに必要とする整数及び浮動小数点データオペランドの値を格納するレジスタファイル208と210を有する。本実施例のプロセッサ200は、AGU(Address Generation Unit)212と214、高速ALU216と218、低速ALU220、浮動小数点ALU222及び浮動小数点移動ユニット224のいくつかの実行ユニットから構成される。本実施例では、浮動小数点実行ブロック222と224は、浮動小数点MMX、SIMD及びSSE処理を実行する。本実施例の浮動小数点ALU222は、除算、平方根及び剰余マイクロopを実行する浮動小数点除算器を有する。本発明の実施例では、浮動少数に関する任意のアクションは、浮動小数点ハードウェアにより行われる。例えば、整数形式と浮動少数形式との間の変換は、浮動小数点レジスタファイルに関する。同様に、浮動小数点除算処理は、浮動小数点除算器において行われる。他方、非浮動小数及び整数タイプは、整数ハードウェアリソースにより処理される。シンプルで頻繁にALU処理は、高速ALU実行ユニット216と218で行われる。本実施例の高速ALU216と218は、半分のクロックサイクルの効果的なレイタンシーにより高速処理を実行可能である。一実施例では、ほとんどの複合整数処理は、低速ALU220で行われる。なぜなら、低速ALU220は、乗算、シフト、フラグロジック、ブランチ処理などの長いレイタンシーのタイプの処理のための整数実行ハードウェアを有するためである。メモリロード/ストア処理は、AGU212と214により実行される。本実施例では、整数ALU216、218及び220は、64ビットデータオペランドに対する整数処理を実行することに関して説明される。他の実施例では、ALU216、218及び220は、16、32、128、256などを含む各種データビットをサポートするよう実現することが可能である。同様に、浮動小数点ユニット222と224は、各種ビット長を有するある範囲のオペランドをサポートするよう実現可能である。一実施例では、浮動小数点ユニット222及び224は、SIMD及びマルチメディア命令に関して128ビット長のpackedデータオペランドに対して実行可能である。
本実施例では、uopスケジューラ202、204及び206は、親ロードの実行終了前に従属する処理をディスパッチする。uopがプロセッサ200において投機的にスケジューリング及び実行されるとき、プロセッサ200はまた、メモリミスを処理するロジックを有する。データロードがデータキャッシュにおいてミスした場合、一時的に誤ったデータをスケジュールに残したパイプラインに従属した処理が存在し得る。リプレイ機構は、誤ったデータを利用した命令を追跡及び再実行する。従属した処理のみがリプレイされる必要があり、独立した処理は完了を許可される。プロセッサの一実施例のスケジューラ及びリプレイ機構はまた、シャッフル処理用の命令シーケンスを取得するよう構成される。
ここでは、「レジスタ」という用語は、オペランドを特定するためのマクロ命令の一部として用いられるオンボードプロセッサ格納位置を参照するのに用いられる。言い換えると、ここで参照されるレジスタは、プロセッサの外部から可視的なものである(プログラマーの観点から)。しかしながら、一実施例のレジスタは、特定タイプの回路を意味するものとして限定されるべきではない。むしろ、一実施例のレジスタは、データの格納及び提供、及びここで説明される機能の実行が可能でありさえすればよい。ここで説明されるレジスタは、専用の物理的レジスタ、レジスリネーム処理を用いた動的割当された物理的レジスタ、専用及び動的割当物理的レジスタの組み合わせなど各種技術を利用して、プロセッサ内の回路により実現可能である。一実施例では、整数レジスタは、32ビット整数データを格納する。一実施例のレジスタファイルはまた、packedデータ用の8つのマルチメディアSIMDレジスタを有する。以下の説明のため、レジスタは、カリフォルニア州サンタクララのインテルコーポレイションのMMX技術に対応したマイクロプロセッサにおける64ビット長MMXTMレジスタ(一部の例では、「mm」レジスタとも呼ばれる)などのpackedデータを保持するよう構成されたデータレジスタであると理解される。整数と浮動小数点形式の両方で利用可能なこれらのMMXレジスタは、SIMD及びSSE命令を伴うpackedデータ要素により処理可能である。同様に、SSE2技術に関する128ビット長XMMレジスタは、そのようなpackedデータオペランドを保持するのに利用可能である。本実施例では、packedデータ及び整数データの格納において、レジスタはこれら2つのデータタイプを区別する必要はない。
以下の図面の例では、いくつかのデータオペランドが説明される。簡単化のため、最初のソースデータセグメントは、Aからアルファベット順にラベル付けされ、Aは最下位アドレスにあり、Zは最上位アドレスにある。従って、Aはまずアドレス0にあり、Bはアドレス1にあり、Cはアドレス3にあるなどされる。理論的には、一実施例によるpackedバイトシャッフルと同様に、シャッフル処理は第1オペランドからのデータセグメントのシャッフル処理と、ソースデータ要素の1以上を第2オペランドのマスク群により指定されるパターンに再構成することを伴う。従って、シャッフルは、データ要素の一部またはすべてを所望の順序に回転または完全に再構成することが可能である。さらに、特定のデータ要素またはいくつかのデータ要素は、結果において重複または配信可能である。本発明によるシャッフル命令の実施例は、ゼロクリア機能を有し、各データ要素のマスクは、当該データ要素の位置を結果においてゼロにすることが可能である。
図3A〜Cは、本発明の各種実施例によるシャッフルマスクを示す。本例では、複数のデータ要素311、312、313及び314から構成されるpackedデータオペランド310が示される。本例のpackedオペランド310は、他のオペランドの対応するpackedデータ要素のシャッフルパターンを示すマスク群を含めるためのpackedデータオペランドに関して説明される。従って、packedオペランド310の各データ要素311、312、313及び314のマスクは、結果の対応するpackedデータ要素位置の内容を示す。例えば、データ要素311は、最左データ要素位置にある。データ要素311のマスクは、シャッフル処理の結果の最左データ要素位置にどのデータがシャッフルまたは配置されるべきか示すためのものである。同様に、データ要素312は、第2の最左データ要素位置である。データ要素312のマスクは、結果の第2最左データ要素位置にどのデータが配置されるべきか示すものである。本実施例では、シャッフルマスクを含むpackedオペランドの各データ要素は、packed結果のデータ要素位置との1以上の対応を有する。
図3Aでは、データ要素312は、一実施例の一例となるシャッフルマスクの内容を記述するのに利用される。一実施例によるシャッフルマスク318は、「ゼロ設定フラグ(set to zero flag)」フィールド315、「予約(reserved)」フィールド316及び「選択ビット(selections bits)」フィールド317の3つの部分から構成される。「ゼロ設定フラグ」フィールド315は、現在のマスクにより指定される結果のデータ要素位置がゼロとされるべきか、または言い換えると、「0」の値と置換されるべきか示すためのものである。一実施例では、「ゼロ設定フラグ」フィールドは優勢であり、当該フィールド315が設定されている場合、マスク318の残りのフィールドは無視され、結果のデータ要素位置には「0」が充填される。「予約」フィールド316は、他の実施例では利用されないかもしれず、あるいは、以降または特別な使用のため確保された1以上のビットを有する。このシャッフルマスク318の「選択ビット」フィールド317は、packed結果の対応するデータ要素位置のデータソースを示すためのものである。
packedデータシャッフル命令の一実施例では、1つのオペランドは一組のマスクから構成され、他のオペランドは一組のpackedデータ要素から構成される。何れのオペランドも同じサイズを有する。オペランドのデータ要素の個数に応じて、可変数の選択ビットがpacked結果の配置のため、第2のpackedデータオペランドから各データ要素を選択するのに必要とされる。例えば、packedバイトの128ビットソースオペランドでは、16のバイトデータ要素が選択に利用可能であるため、少なくとも4つの選択ビットが必要とされる。マスクの選択ビットにより示される値に基づき、ソースデータオペランドからの適切なデータ要素が、当該マスクの対応するデータ要素位置に配置される。例えば、データ要素312のマスク318は、第2最左データ要素位置に対応する。マスク318の選択ビット317が「X」の値を有する場合、ソースデータオペランドのデータ要素位置「X」からのデータ要素が、結果の第2最左データ要素位置にシャッフルされる。「ゼロ設定フラグ」フィールド315が設定されている場合、結果の第2最左データ要素位置は「0」と置換され、選択ビット317の指定は無視される。
図3Bは、128ビット長packedオペランドとバイトサイズデータ要素により処理される一実施例のマスク328の構成を示す。本実施例では、「ゼロ設定」フィールド325はビット7から構成され、「選択ビット」フィールド327は、16の可能なデータ要素の選択が存在するため、ビット3〜0から構成される。ビット6〜4は本実施例では利用されず、「予約」フィールド326に配置される。他の実施例では、「選択ビット」フィールド327に用いられるビット数は、ソースデータオペランドに利用可能なデータ要素の可能な選択数に適合するように、必要に応じて増減することが可能である。
図3Cは、バイトサイズデータ要素及び128ビット長packedオペランドによるが、複数のデータ要素ソースにより処理する他の実施例のマスク338の構成を示す。本実施例では、マスク338は、「ゼロ設定」フィールド335、「ソース(src)選択」フィールド336及び「選択」フィールド337から構成される。「ゼロ設定」フィールド335と「選択」フィールド337は、上記記載と同様に機能する。本実施例の「ソース選択」フィールド336は、どのデータソースから選択ビットにより指定されるデータオペランドが取得されるか示すためのものである。例えば、同一のマスク群が、複数のマルチメディアレジスタなどの複数のデータソースにより利用されてもよい。各ソースマルチメディアレジスタには値が割当てられ、「ソース選択」フィールド336の値は、これらソースレジスタの1つに指定される。「ソース選択」フィールド336の内容に応じて、選択されたデータ要素が、packed結果の対応するデータ要素位置の配置のため、適切なデータソースから選択される。
図4Aは、本発明の一実施例によるマルチメディアレジスタの各種packedデータタイプ表現を示す。図4Aは、128ビット長オペランドのpackedバイト410、packedワード420及びpackedダブルワード(dword)のデータタイプを示す。本例のpackedバイトフォーマット410は、128ビット長であり、16のpackedバイトデータ要素を含む。ここでは、1バイトは8データビットとして規定される。各バイトデータ要素の情報は、バイト0に対してはビット7〜ビット0に、バイト1に対してはビット15〜ビット8に、バイト2に対してはビット23〜ビット16に、最後にバイト15に対してはビット120〜ビット127に格納される。従って、すべての利用可能なビットは、レジスタにおいて利用される。この格納構成は、プロセッサの格納効率を向上させる。また16個のデータ要素がアクセスされる場合、1つの処理が16個のデータ要素に対してパラレルに実行可能となる。
一般に、データ要素は、同じ長さの他のデータ要素を有するオペランド(単一のレジスタまたは記憶位置)に格納される個々のデータである。SSE2技術に関するpackedデータシーケンスでは、オペランド(XMMレジスタまたは記憶位置)に格納されるデータ要素の個数は、個々のデータ要素のビットの長さにより除された128ビットである。同様に、MMX及びSSE技術に関するpackedデータシーケンスでは、オペランド(MMXレジスタまたは記憶位置)に格納されているデータ要素の個数は、個々のデータ要素のビットの長さにより除された64ビットである。本例のpackedワードフォーマット420は、128ビット長であり、8つのpackedワードデータ要素を有する。各packedワードは、16ビットの情報を有する。図4Aのpackedダブルワードフォーマット430は、128ビット長であり、4つのpackedダブルワードデータ要素を有する。各packedダブルワードデータ要素は、32ビットの情報を有する。packedクワドワードは、128ビット長であり、2つのpackedクワドワードデータ要素を有する。
図4Bは、他のインレジスタデータストレージフォーマットを示す。各packedデータは、複数の独立したデータ要素を有することが可能である。packedハーフ442、packedシングル442及びpackedダブル443の3つのpackedデータフォーマットが示される。packedハーフ441、packedシングル442及びpackedダブル443の一実施例は、不動点データ要素を含む。他の実施例では、packedハーフ441、packedシングル442及びpackedダブル443の1以上が、浮動点データ要素を含むようにしてもよい。packedハーフ441の他の実施例は、8つの16ビットデータ要素を含む128ビット長である。packedシングル442の一実施例は、128ビット長であり、4つの32ビットデータ要素を含む。packedダブル443の一実施例は、128ビット長であり、2つの64ビットデータ要素を含む。このようなpackedデータフォーマットは、96ビット、160ビット、192ビット、224ビット、256ビット、またはそれ以上の他のレジスタ長に拡張されてもよい。
図4Cは、「intel.com/design/litcentr」のワールドワイドウェブ(www)上のカリフォルニア州サンタクララのインテルコーポレイションから入手可能な「IA−32 Intel Architecture Software Developer’s Manual Volume 2:Instruction Set Reference」にう記載されるあるタイプのオペコードフォーマットに対応するレジスタ/メモリオペランドアドレッシングモード及び32ビット以上を有する処理符号化(オペコード)フォーマット460の一実施例を示す。シャッフル処理タイプが、フィールド461と462の1以上により符号化されてもよい。2つまでのソースオペランド識別子464と465を含む命令ごとに2つまでのオペランド位置が特定されるかもしれない。シャッフル命令の一実施例では、デスティネーションオペランド識別子466は、ソースオペランド識別子464と同一である。他の実施例では、デスティネーションオペランド識別子466は、ソースオペランド識別子465と同一である。従って、シャッフル処理の実施例では、ソースオペランド識別子464と465により識別されるソースオペランドの1つは、シャッフル処理の結果により上書きされる。シャッフル命令の一実施例では、オペランド識別子464と465は、64ビットソース及びデスティネーションオペランドを識別するのに利用されてもよい。
図4Dは、40ビット以上を有する他の処理符号化(オペコード)フォーマット470を示す。オペコードフォーマット470は、オペコードフォーマット460に対応し、任意的なプリフィックスバイト478から構成される。シャッフル処理タイプは、フィールド478、471及び472の1以上により符号化されてもよい。命令ごとに2までのオペランド位置が、ソースオペランド識別子474と475及びプリフィックスバイト478により識別されてもよい。シャッフル命令の一実施例では、プリフィックスバイト478が、128ビットソース及びデスティネーションオペランドを識別するのに利用されてもよい。シャッフル命令の一実施例では、デスティネーションオペランド識別子476は、ソースオペランド識別子474と同一である。他の実施例では、デスティネーションオペランド識別子476は、ソースオペランド識別子475と同一である。従ってシャッフル処理の実施例では、ソースオペランド識別子474と475により特定されるソースオペランドの1つは、シャッフル処理の結果により上書きされる。オペコードフォーマット460と470は、MODフィールド463と473により部分的に、かつ任意的なスケール・インデックス・ベース及びディスプレイスメントバイトにより指定されるレジスタ・ツー・レジスタ、メモリ・ツー・レジスタ、レジスタ・バイ・メモリ、レジスタ・バイ・レジスタ、レジスタ・バイ・イミディエート、レジスタ・ツー・メモリアドレッシングを可能にする。
次に図4Eにおいて、他の実施例では、64ビットSIMD(Single Instruction Multiple Data)算術処理が、CDP(Coprocessor Data Processing)命令を通じて実行されてもよい。処理符号化(オペコード)フォーマット480は、CDPオペコードフィールド482と489を有する当該CDP命令を示す。シャッフル処理の他の実施例では、CDP命令タイプは、フィールド483、484、487及び488の1以上により符号化されてもよい。2つまでのソースオペランド識別子485と490及び1つのデスティネーションオペランド識別子486を含む命令ごとに3つまでのオペランド位置が特定される。コプロセッサの一実施例が、8、16、32及び64ビット値に対して処理される。一実施例では、シャッフル処理が不動点または整数データ要素に対して実行される。一部の実施例では、シャッフル命令は、条件フィールド481を用いて条件付きで実行されてもよい。いくつかのシャッフル命令では、データサイズがフィールド483により符号化されてもよい。シャッフル命令のいくつかの実施例では、ゼロ(Z)、ネガティブ(N)、キャリー(C)及びオーバーフロー(V)検出が、SIMDフィールドに対して実行可能である。いくつかの命令では、サチュレーションのタイプはフィールド484により符号化されてもよい。
図5は、本発明によるシャッフルマスクに基づくデータオペランドに対してシャッフル処理を実行するロジックの一実施例のブロック図である。本実施例のゼロ設定機能を有するシャッフル処理の命令(PSHUFB)は、第1(マスク)オペランド510と第2(データ)オペランド520の2つの情報から開始される。以下の説明では、MASK、DATA及びRESULTANTは、一般にオペランドまたはデータブロックと呼ばれ、以下に限定されないが、レジスタ、レジスタファイル及び記憶位置を含む。一実施例では、シャッフルPSHUFB命令は、1つのマイクロ処理に復号される。他の実施例では、当該命令は、データオペランドに対してシャッフル処理を実行するよう様々な個数のマイクロopも復号されてもよい。本例では、オペランド510と520は、バイト長データ要素を有するソースレジスタ/メモリに格納されている128ビット長の情報である。一実施例では、オペランド510と520は、128ビットSSE2 XMMレジスタなどの128ビット長SIMDレジスタに保持される。しかしながら、オペランド510と520の1つまたは両方が、記憶位置からロード可能である。一実施例では、RESULTANT540はまた、MMXまたはXMMデータレジスタである。さらに、RESULTANT540はまた、ソースオペランドの1つと同一のレジスタまたは記憶位置であってもよい。特定の実現形態に応じて、オペランドとレジスタは、32、64及び256ビット等の他の長さとすることも可能であり、ワード、ダブルワードまたはクワドワードサイズのデータ要素を有することも可能である。本例では、第1オペランド510は、0x0E、0x0A、0x09、0x8F、0x02、0x0E、0x06、0x06、0x06、0xF0、0x04、0x08、0x08、0x06、0x0D及び0x00の16個のマスク(16進数形式による)から構成される。各マスクは、結果540の対応するデータ要素位置の内容を特定するものである。
第2オペランド520は、P、O、N、M、L、K、J、I、H、G、F、E、D、C、B及びAの16個のデータセグメントから構成される。第2オペランド520の各データセグメントはまた、16進数形式によるデータ要素位置の値によりラベル付けされている。ここで、データセグメントとは、等しい長さを有し、それぞれは1バイト(8ビット)データから構成される。各データ要素がワード(16ビット)、ダブルワード(32ビット)またはクワドワード(64ビット)である場合、128ビットオペランドはそれぞれ、8ワード長、4ダブルワード長または2クワドワード長データ要素を有するであろう。しかしながら、本発明の他の実施例は、他のサイズのデータオペランド及びデータセグメントにより処理可能である。本発明の実施例は、特定の長さのデータオペランド、データセグメントまたはシフトカウントに限定されず、各実現形態に適したサイズとすることが可能である。
オペランド510と520は、レジスタ、記憶位置、レジスタファイルまたは組み合わせにより配置することが可能である。データオペランド510と520は、シャッフル命令と共に、プロセッサの実行ユニットのシャッフルロジック530に送信される。シャッフル命令が実行ユニットに到達するときまでに、当該命令はプロセッサパイプラインにおいて早期に復号されるべきであった。従って、シャッフル命令はマイクロ処理(uop)または他の復号形式とすることが可能である。本実施例では、これら2つのオペランド510と520は、シャッフルロジック530において受信される。シャッフルロジック530は、マスクオペランド510の値に基づき、ソースデータオペランド520からデータ要素を選択し、選択されたデータ要素を結果540の適切な位置に整理/シャッフルする。シャッフルロジック530はまた、指定されるように、結果540の与えられたデータ要素位置をゼロにする。ここで、結果540は、O、K、J、「0」、C、O、G、G、F、「0」、E、I、I、G、N及びAの16個のデータセグメントから構成される。
シャッフルロジック530の処理が、ここではいくつかのデータ要素により説明される。マスクオペランド510の最左データ要素位置のシャッフルマスクは、0x0Eである。シャッフルロジック530は、図3A〜Cにおいて上述されるようにマスクの各種フィールドを解釈する。この場合、「ゼロ設定」フィールドは設定されない。下位4ビット、すなわちニブルからなる選択フィールドは、「E」の16進数値を有する。シャッフルロジック530は、データオペランド520のデータ要素位置「0x0E」のデータOを結果540の最左データ要素位置にシャッフルする。同様に、マスクオペランド510の第2最左データ要素位置のマスクは、0x0Aである。シャッフルロジック530は、当該位置に対するマスクを解釈する。この選択フィールドは、「A」の16進数値を有する。シャッフルロジック530は、データオペランド520のデータ要素位置「0xA」のデータKを結果540の第2最左データ要素位置にコピーする。
本実施例のシャッフルロジック530は、シャッフル命令のゼロクリア機能をサポートしている。マスクオペランド510の左から4番目のデータ要素位置におけるシャッフルマスクは、0x8Fである。シャッフルロジック510は、「ゼロ設定」フィールドがマスクのビット8における「1」により示されるように設定されていると認識する。これに応答して、ゼロ設定指示は選択フィールドに優先し、シャッフルロジック510は、当該マスクの選択フィールドの16進数「F」を無視する。「0」が、結果540の左から4番目の対応するデータ要素位置に配置される。本実施例では、シャッフルロジック530は、各マスクに対して「ゼロ設定」及び選択フィールドを評価し、予約ビットやソース選択フィールド等のマスクの当該フィールド外に存在するその他のビットについては考慮しない。シャッフルマスク及びデータシャッフルの当該処理は、マスクオペランド510のマスク全体に対して繰り返される。一実施例では、これらのマスクのすべては、パラレルに処理される。他の実施例では、マスク及びデータ要素の一部が、一度に一緒に処理可能である。
当該シャッフル命令の実施例では、オペランドのデータ要素は様々な手法により再構成可能である。さらに、あるデータ要素からのデータは、複数のデータ要素位置において繰り返すことが可能であるか、あるいは、すべての位置に配信することも可能である。例えば、第4マスクと第5マスクの両方が、0x08の16進数値を有する。この結果、データオペランド520のデータ要素位置0x8のデータIは、結果540の右側から4番目と5番目のデータ要素位置にシャッフルされる。ゼロ設定機能により、シャッフル命令の実施例は、結果540のデータ要素位置の何れかを「0」にすることが可能である。
実現形態に応じて、各シャッフルマスクは、結果における1つのデータ要素位置の内容を指定するのに利用可能である。本例と同様に、各バイト長シャッフルマスクは、結果540のバイト長データ要素位置に対応する。他の実施例では、複数のマスクの組み合わせは、データ要素ブロックを一緒に指定するのに利用可能である。例えば、2バイト長マスクは、ワードワイド長データ要素を指定するのに利用可能である。シャッフルマスクは、バイト長に限定されるものではなく、実現形態に必要とされる他の任意のサイズとすることが可能である。同様に、データ要素及びデータ要素位置は、バイト以外の粒度を有することが可能である。
図6は、本発明によるデータシャッフル処理を実行するロジック600の一実施例のブロック図である。本実施例の回路は、第2オペランドのシャッフルマスクの復号に基づき、第1ソースオペランドから正しい結果バイトを選択する多重構成から構成される。ここで、ソースデータオペランドは、上位のpackedデータ要素と下位のpackedデータ要素から構成される。本実施例の多重構成は、他のpacked命令を実現するのに用いられる他の多重構成より比較的シンプルなものである。この結果、本実施例の多重構成は、新たなクリティカルなタイミングパスを導入するものではない。本実施例の回路600は、シャッフルマスクブロック、ソースオペランドからの下位/上位packedデータ要素を保持するブロック、データ要素の最初の選択のための第1の複数の8:1mux、上位及び下位のデータ要素の選択のための他の複数の3:1mux、mux選択&ゼロロジック及び多数の制御信号を有する。簡単化のため、図6においては、限られた個数の8:1及び3:1muxが示され、ドットにより表される。しかしながら、それらの機能は、図示されたものと同様であり、以下の説明から理解することができる。
本例のシャッフル処理中、一組のpackedデータ要素を有する第1オペランドと、一組のシャッフルマスクを有する第2オペランドの2つのオペランドが当該シャッフル処理回路600において受信される。シャッフルマスクは、シャッフルマスクブロック602に伝搬される。当該シャッフルマスク群は、各種選択信号(SELECT A606、SELECT B608、SELECT C610)及びゼロ設定信号(ZERO)611を生成するため、mux選択及びゼロロジックブロック604において復号される。これらの信号は、結果632を貫通するのにmuxの処理を制御するのに利用される。
本例では、マスクオペランドとデータオペランドは共に、128ビット長であり、それぞれ16バイトサイズデータセグメントによりpackedされる。各種信号に対して示されるような値Nは、この場合には16である。本実施例では、データ要素は、一組の上位及び下位packedデータ要素に分けられ、各組は8つのデータ要素を有する。これは、16:1muxではなくデータ要素選択中により小さな8:1muxの使用を可能にする。これら上位及び下位のpackedデータ要素の組は、それぞれ上位及び下位の格納領域622と612に保持される。下位データセットから始まり、8つのデータ要素のそれぞれが、ルーティングライン614などの一組のラインを介し第1の組の16個の8:1mux618A〜Dに送信される。16個の8:1mux618A〜Dのそれぞれは、N個のSELECT A信号606の1つにより制御される。それのSELECT A606の値に応じて、当該muxは、さらなる処理のため下位の8つのデータ要素614の1つを出力するためのものである。下位データ要素の何れかを16個の結果データ要素位置の何れかにシャッフルすることが可能であるため、下位packedデータ要素に対しては、16個の8:1muxが存在する。16個の8:1muxのそれぞれは、16個の結果データ要素位置の1つに対するものである。同様に、16個の8:1muxが、上位のpackedデータ要素に対して与えられる。上位8つのデータ要素が、第2組の16個の8:1mux624A〜Dのそれぞれに送信される。16個の8:1mux624A〜Dのそれぞれは、N個のSELECT B信号608の1つにより制御される。それのSELECT B608の値に基づき、当該8:1muxは、さらなる処理のため上位8つのデータ要素616の1つを出力するためのものである。
16個の3:1mux628A〜Dのそれぞれは、結果632のデータ要素位置に対応する。16個の下位データmux618A〜Dからの16個の出力620A〜Dは、上位データmux624A〜Dからの出力626A〜Dと同様に、16個の3:1上位/下位選択mux628A〜Dに送られる。これら3:1選択mux628A〜Dのそれぞれは、mux選択及びゼロロジック604から自らのSELECT C610とZERO611の信号を受け取る。当該3:1muxに対するSELECT C610の値は、muxが下位のデータセットまたは上位のデータセットから選択されたデータオペランドを出力するためのものである。各3:1muxへの制御信号ZERO611は、当該muxがそれの出力をゼロ(「0」)にすべきであるか否かを示すためのものである。本実施例では、制御信号ZERO611は、SELECT C610に対する選択を優先し、当該データ要素位置の出力を結果632において「0」にする。
例えば、3:1mux628Aは、当該データ要素位置に対して、8:1mux624Aから選択された上位データ要素626Aと、8:1mux618Aから選択された下位データ要素620Aを受け取る。SELECT C610は、それが結果632において管理するデータ要素位置にそれの出力630Aにおけるシャッフルすべきデータ要素を制御する。しかしながら、mux628Aへの信号ZERO611がアクティブ状態であり、当該データ要素位置に対するシャッフルマスクが「0」が所望されるということを示しているということが示されれば、mux出力630Aは「0」であり、データ要素入力620Aと626Aのいずれも利用されない。シャッフル処理の結果632は、16個の3:1mux628A〜Dからの出力630A〜Dから構成され、各出力は特定のデータ要素位置に対応し、データ要素または「0」の何れかとなる。本例では、各3:1mux出力は、1バイト長であり、結果は、16バイトpackedデータから構成されるデータブロックとなる。
図7は、本発明の一実施例によるバイト長データ要素に対するデータシャッフルの処理を示す。これは、「PSHUFB DATA,MASK」命令の一例である。ここで、MASK701のバイト位置0x6と0xCのシャッフルマスクの最上位ビットは、当該位置の結果741における結果がゼロとなるように設定されることに留意されたい。本例では、ソースデータは、デスティネーションデータ記憶装置721に構成され、一実施例では、ソースオペランド721からの各データ要素がデスティネーションレジスタ741に格納されるアドレスを指定する一組のマスク701に関して、デスティネーションデータ記憶装置721は、ソースデータ記憶装置721となる。マスク701とデータ721の2つのソースオペランドは、結果741と同様に、本例ではそれぞれ16個のpackedデータ要素から構成される。本実施例では、関係するデータ要素のそれぞれは、8ビット、すなわち1バイト長である。従って、マスク701、データ721、及び結果741のデータブロックはそれぞれ128ビット長である。さらに、これらのデータブロックは、メモリまたはレジスタに配置することが可能である。一実施例では、マスクの構成は、例えば、フィルタリング処理や畳み込み処理を含む所望のデータ処理に基づく。
図7に示されるように、マスクオペランド701は、「0x0E」702、「0x0A」703、「0x09」704、「0x8F」705、「0x02」706、「0x0E」707、「0x06」708、「0x06」709、「0x05」710、「0xF0」711、「0x04」712、「0x08」713、「0x08」714、「0x06」715、「0x0D」716、「0x00」717のシャッフルマスクを有するデータ要素を有する。同様に、データオペランド721は、「P」722、「O」723、「N」724、「M」725、「L」726、「K」727、「J」728、「I」729、「H」730、「G」731、「F」732、「E」733、「D」734、「C」735、「B」736及び「A」737のソースデータ要素を有する。図7のデータセグメントの表現では、データ要素位置は、16進数としてのデータにおいて言及される。従って、packedシャッフル処理は、マスク701とデータ721により実行される。シャッフルマスク701を利用して、データ721の処理がパラレルに実行可能である。
各データ要素シャッフルマスクが評価されると、指定されたデータ要素または「0」からの適切なデータが、当該シャッフルマスクの対応するデータ要素位置にシャッフルされる。例えば、最右シャッフルマスク717は、ソースデータオペランドの位置「0x0」からデータを指定するのに復号される「0x00」の値を有する。これに応答して、データ位置「0x0」からのデータAは、結果741の最右位置にコピーされる。同様に、右から2番目のシャッフルマスク716は、「0xD」に復号された「0x0D」の値を有する。従って、データ位置「0xD」からのデータNは、結果741の右から2番目の位置にコピーされる。
結果741の左から4番目のデータ要素位置は、「0」である。これは、当該データ要素位置に対するシャッフルマスクにおける「0x8F」の値により生じる。本実施例では、シャッフルマスクバイトのビット7は、「ゼロ設定」または「ゼロクリア」標識である。当該フィールドが設定されると、結果における対応するデータ要素位置は、ソースデータオペランド721からのデータの代わりに、「0」の値により充填される。同様に、結果741の右から7番目の位置は、「0」の値を有する。これは、マスク701の当該データ要素位置に対する「0xF0」のシャッフルマスク値によるものである。ここで、シャッフルマスクのすべてのビットが実施例において利用されるとは限らないということに留意されたい。本実施例では、シャッフルマスクの下位ニブル、すなわち下位4ビットで、ソースデータオペランド721の可能な16個のデータ要素の何れかを選択するのに十分である。ビット7が「ゼロ設定」フィールドであるとき、他の3つのビットは使用されないままであり、実施例において予約または無視することが可能である。本実施例では、シャッフルマスクの下位ニブルに示されるように、「ゼロ設定」フィールドはデータ要素選択を制御及びオーバーライドする。これらの例の両方で、左から4番目のデータ要素位置と右から7番目の位置、「ゼロクリア」フラグがビット7において設定される「0x80」のシャッフルマスク値はまた、対応する結果となるデータ要素位置が「0」により充填されるのを可能にする。
図7に示されるように、矢印はマスク701のシャッフルマスクごとのデータ要素のシャッフル処理を示す。シャッフルマスクに応じて、ソースデータ要素の1以上は結果741に現れないかもしれない。いくつかの例では、1以上の「0」がまた、結果741の様々なデータ要素位置に出現し得る。シャッフルマスクが1つのデータ要素またはデータ要素群を配信するよう構成される場合、これらデータ要素のデータは、結果における選ばれたパターンとして繰り返されてもよい。本発明の実施例は、何れか特定の構成またはシャッフルパターンに限定されるものではない。
上述のように、ソースデータレジスタはまた、本実施例のデスティネーションデータストレージレジスタとして利用され、これにより、必要なレジスタの個数を減少させることができる。ソースデータ721がオーバーライドされるが、シャッフルマスク701は変更されず、以降の参照のため利用可能である。ソースデータストレージ装置内のオーバーライドされたデータは、メモリまたは他のレジスタからリロードすることが可能である。他の実施例では、複数のレジスタが、ソースデータストレージ装置として利用可能であり、各データは所望のようにデスティネーションデータストレージ装置内に構成される。
図8は、本発明の他の実施例によるワード長データ要素に対するデータシャッフル処理を示す。本例の一般的説明は、図7と同様である。本実施例では、データ要素ワードは、マスクオペランド801のシャッフルマスクがバイトサイズであるため、データ要素バイトのペアとして処理される。従って、シャッフルマスクバイトのペアは、各データ要素ワード位置を規定するのに利用される。しかしながら他の実施例では、シャッフルマスクは、ワード粒度を有することが可能であり、結果におけるワードサイズのデータ要素位置を記述する。
本例のマスクオペランド801は、「0x03」802、「0x02」803、「0x0F」804、「0x0F」804、「0x0E」805、「0x83」806、「0x82」807、「0x0D」808、「0x0C」809、「0x05」810、「0x04」811、「0x0B」812、「0x0A」813、「0x0D」814、「0x0C」815、「0x01」816及び「0x00」817のシャッフルマスクを有するバイト長データ要素を有する。データオペランド821は、「H」822、「G」823、「F」824、「E」835、「D」836、「C」827、「B」828、「A」829のソースデータ要素を有する。図8のデータセグメントの表示において、データ要素位置はまた、16進数としてのデータにより表される。図8に示されるように、データオペランド821の各ワードサイズデータ要素は、それが2バイトサイズ位置を占有するデータ位置アドレスを有する。例えば、データ「H」822は、バイトサイズデータ要素位置「0xF」と「0xE」を占有する。
packedシャッフル処理は、マスク801とデータ821により実行される。図8の矢印は、マスク801のシャッフルマスクごとのデータ要素のシャッフル処理を示す。各データ要素シャッフルマスクが評価されるとき、データオペランド821または「0」の指定されたデータ要素位置からの適当なデータが、当該シャッフルマスクに対する結果831の対応するデータ要素位置にシャッフルされる。本実施例では、ワードサイズデータ要素を指定するため、バイトサイズシャッフルマスクがペアで処理される。例えば、マスクオペランド801の2つの最左シャッフルマスク「0x03」802と「0x02」803は共に、結果831の最左ワード長データ要素位置832に対応する。シャッフル処理中、これら2つのデータバイト、または本ケースではデータB828であるデータ要素バイト位置0x03と0x02における1つのデータワードは、結果831の2つの最左バイトサイズデータ要素位置832に構成される。
さらに、シャッフルマスクはまた、結果831の第3のワードサイズデータ要素位置834のシャッフルマスク「0x83」806と「0x82」807により示されるように、結果においてワードサイズデータ要素を「0」にするよう構成可能である。シャッフルマスク「0x83」806と「0x82」807は、それらの「ゼロ設定」フィールドセットを有する。2つのシャッフルマスクバイトが共にペアにされているが、異なるペアリングが、例えば、クワドワードとして4バイト、または、ダブルのクワドワードを形成するため8バイトを構成するよう実現可能である。同様に、当該ペアリングは、連続するシャッフルマスクまたは特定バイトに限定されるものではない。他の実施例では、ワードサイズシャッフルマスクが、ワードサイズデータ要素を指定するのに利用可能である。
図9は、データをシャッフルするための方法の一実施例を示すフローチャート900である。Lの長さの値が、一般にデータブロック及びオペランドの幅を表すのに利用される。実施例に応じて、Lはデータセグメント数、ビット、」バイト、ワード等に関する長さを指定するのに利用可能である。ブロック910において、第1長さLのpackedデータオペランドが、シャッフル処理による利用のため受け取られる。ブロック920において、シャッフルパターンを指定するMの長さのシャッフルマスクの長さLが受け取られる。本例では、Lは128ビットであり、Mは8ビット、すなわち1バイトである。他の実施例では、LとMはまた、それぞれ256と16などの他の値とすることも可能である。ブロック930において、シャッフル処理が実行され、データオペランドからのデータ要素が、シャッフルパターンに従って結果にシャッフル構成される。
本実施例のブロック930におけるシャッフルの詳細がさらに、各データ要素位置に対して行われるものに関して説明される。一実施例では、すべてのpacked結果データ要素位置のシャッフル処理は、パラレルに処理される。他の実施例では、マスクの一部が一度に一緒に処理される。ブロック932において、ゼロフラグが設定されているかチェックされる。このゼロフラグは、各シャッフルマスクの「ゼロ設定」または「ゼロクリア」フィールドを参照する。ゼロフラグがブロック932において設定されていると判断されると、当該シャッフルマスクに対応する結果のデータ要素位置のエントリが「0」に設定される。ゼロフラグがブロック932において設定されていないと検出されると、シャッフルマスクにより指定されるソースデータ要素からのデータは、当該シャッフルマスクに対応する結果のデスティネーションデータ要素位置に構成される。
現在、整数命令を用いたテーブル検索は、多数の命令を必要とする。整数処理がSIMD命令により実現されるアルゴリズムに対するデータへのアクセスに利用される場合、さらに多数の命令が検索ごとに必要となる。しかし、packedバイトシャッフル命令の実施例を利用することによって、命令数と実行時間を劇的に低減することができる。例えば、テーブルサイズが16バイト以下である場合、1つの命令によるテーブル検索中に16データバイトにアクセス可能である。テーブルサイズが17〜32バイトの範囲内にある場合、11個のSIMD命令がテーブルデータを検索するのに利用可能である。テーブルサイズが33〜64バイトの範囲内にある場合、23個のSIMD命令が必要となる。
検索テーブルの利用によるSIMD命令により実現できないデータ並列化によるいくつかのアプリケーションがある。映像圧縮方法H.26Lの量子化及びデブロッキングアルゴリズムは、128ビットレジスタに適合しない小さな検索テーブルを用いたアルゴリズムの一例である。いくつかのケースでは、これらのアルゴリズムにより利用される検索テーブルは、小さなものである。テーブルが1つのレジスタにおいて適合可能である場合、テーブル検索処理は、1つのpackedシャッフル命令により実現することが可能である。テーブルのメモリスペース要求が1つのレジスタのサイズを超える場合、packedシャッフル命令の一実施例は、異なるアルゴリズムを介して動作可能である。サイズ超過したテーブルを処理する方法の一実施例は、テーブルを各々がレジスタの要領に等しいセクションに分割し、シャッフル命令によりこれらのテーブルセクションのそれぞれにアクセスする。シャッフル命令は、同一のシャッフル制御シーケンスを用いてテーブルの各セクションにアクセスする。この結果、パラレルテーブル検索が、packedバイトシャッフル命令による場合に実現することが可能となり、これにより、アルゴリズムのパフォーマンスを向上させるため、SIMD命令の利用が可能となる。本発明の実施例は、パフォーマンスを向上させるのに利用可能であり、小さな検索テーブルを利用するあるアルゴリズムに必要なメモリアクセス数を低減することが可能となる。他の実施例は、SIMD命令を用いた複数の検索テーブル要素のアクセスを可能にする。本発明によるpackedバイトシャッフル命令は、小さな検索テーブルを用いたアルゴリズムのあまり効率的でない整数移入の代わりに、効率的なSIMD命令実現形態を可能にする。本発明の実施例は、1つのレジスタより大きなメモリスペースを必要とするテーブルからのデータへのアクセス方法を明示する。本例では、レジスタはテーブルの異なるセグメントを含む。
図10A〜Hは、SIMD命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。図10A〜Hに説明される例は、複数のテーブルからのデータの検索に関し、一組のマスクに指定されるような選択されたデータ要素が、これら複数のテーブルから結果データのマージされたブロックにシャッフルされる。以下の説明は、特に前述のようなpackedシャッフル命令などのpacked処理に関して説明される。本例のシャッフル処理は、レジスタのソーステーブルデータを上書きする。テーブルが検索処理に従って再利用される場合、テーブルデータは、他のロードが必要とならないように当該処理が実行される前に、他のレジスタにコピーされる。他の実施例では、シャッフル処理は、2つのソースと1つのデスティネーションの3つの独立したレジスタまたは記憶位置を利用する。他の実施例のデスティネーションは、ソースオペランドの何れかとは異なるレジスタまたは記憶位置である。従って、ソーステーブルデータは、オーバーライドされず、再利用可能である。本例では、テーブルデータはより大きなテーブルの各部分からのものとして扱われる。例えば、LOW TABLE DATA1021は、テーブルの下位アドレス領域からのものであり、HIGH TABLE DATA1051は、テーブルの上位アドレス領域からのものである。本発明の実施例は、テーブルデータのソースに関して限定されるものではない。データブロック1021と1051は、隣接していてもよし、離れていてもよいし、重複していてもよい。同様に、テーブルデータはまた、異なるデータテーブルまたはメモリソースからのものとすることも可能である。また、このようなテーブル検索及びデータマージ処理は、複数のテーブルからのデータに対して実行可能であると想定される。例えば、同じテーブルの異なる部分から取得される代わりに、LOW TABLE DATA1021が第1テーブルから、HIGH TABLE DATA1051が第2テーブルからのものとすることも可能である。
図10Aは、一組のシャッフルマスクに基づくテーブルからの第1組のデータ要素のpackedデータシャッフルを示す。この第1組のデータ要素は、LOW TABLE DATA1021と称されるオペランドとしてグループ化される。MASK1001とLOW TABLE DATA1021はそれぞれ、本例では16個の要素から構成される。MASK1001とLOW TABLE DATA1021のシャッフル処理は、結果としてのTEMP RESULTANT1041をもたらす。シャッフル制御マスクの下位部分は、レジスタのデータ要素を選択する。データ要素を選択するのに必要とされるビット数は、log2でのレジスタデータ要素数である。例えば、レジスタ容量が128ビットであって、データタイプがバイトである場合、レジスタデータ要素の個数は16である。この場合、データ要素を選択するのに4ビットが必要となる。図10Bは、図10Aの同じ組のシャッフルマスクに基づくテーブルからの第2組のデータ要素のpackedデータシャッフルを示す。この第2組のデータ要素は、HIGH TABLE DATAと名付けられたオペランドとしてグループ化される。HIGH TABLE DATA1051はまた、本例では16個の要素から構成される。MASK1001とHIGH TABLE DATA1051のシャッフル処理は、結果のTEMP RESULTANT B1042をもたらす。
同一の組のマスク1001がLOW TABLE DATA1021とHIGH TABLE DATA1051の両方で利用されたため、それぞれの結果1041と1042は、異なるソースデータから同様に配置されたデータを有するようになる。例えば、両方の結果1041と1042の最左データ位置は、それの各自のデータソース1021と1051のデータ要素「0xE」1023と1053からのデータを有する。図10Cは、SELECT FILTER1043とシャッフルマスクの組MASKに関する論理packedAND処理を示す。このケースでのSELECT FILTERは、MASK1001のシャッフルマスクの何れが第1テーブルデータ1021に関し、何れが第2テーブルデータに関するものであるか区別するためのフィルタである。本実施例のシャッフルマスクは、図3Cで前述されたように、ソース選択フィールド「SRC SELECT」336を利用する。シャッフル制御バイトの下位ビットは、レジスタのデータ要素位置を選択するのに利用され、最上位ビットを除く上位ビットは、テーブルのセグメントを選択するのに利用される。本実施例では、データを選択するのに利用されるものの直前及び隣接するビットが、テーブルの選択を選択する。SELECT FILTER1043は、シャッフルマスクからのソース選択フィールドから分離されたMASK1001のすべてのシャッフルマスクに「0x10」を適用する。packedAND処理は、最終結果のどのデータ要素位置が、第1データ群1021または第2データ群1051からものとすべきか示すTABLE SELECT MASK1044をもたらす。
テーブル選択を選択するためのビット数は、logによるテーブルセクション数に等しい。例えば、16バイトレジスタを有する17〜32バイトの範囲内のテーブルサイズの場合には、最下位の4ビットがデータを選択し、5番目のビットがテーブルセクションを選択する。ここで、ソース選択は、2つのデータソース1021と1051があるため、各シャッフルマスクの第2ニブルの最下位ビットであるビット4を用いてデータソースを指定する。0から15までのインデックスを有するテーブルのセクションが、図10Aのpackedシャッフル命令によりアクセスされる。16から31までのインデックスを有するテーブルのセクションが、図10Bのpackedシャッフル命令によりアクセスされる。テーブルのセクションを選択するフィールドは、図10Cのシャッフル制御バイト/インデックスとは隔離されている。多数のデータソースを有する実現形態では、追加ビットは、ソース選択フィールドを必要するかもしれない。32バイトテーブルの場合には、シャッフル制御バイト「0x00」〜「0x0F」は、第1テーブルセクションのテーブル要素0〜15を選択し、シャッフル制御バイト「0x10」〜「0x1F」は、第2テーブルセクションのテーブル要素16〜31を選択する。例えば、シャッフル制御バイトが「0x19」を指定していると考える。「0x19」のビット表現は、「00011001」である。下位4ビット「1001」は、9番目のバイト(0からカウントする)を選択し、「1」に設定されている5番目のビットは2つのテーブルの第2テーブルを選択する。「0」に等しい第5ビットは、第1テーブルを選択する。
インデックス0〜15を有する第1テーブルセクションからアクセスされるデータ値を選択するマスクは、第5ビットがゼロとなるシャッフル制御バイトを選択することにより、図10Dの本実施例のpacked compare equal operationにより計算される。図10Dは、LOW FILTER1045とTABLE SELECT MASK1044のpacked「compare equal operation」を示す。第1テーブルセクションに対する図10Dにおいて生成された下位テーブル選択マスクは、他のpackedシャッフル処理により第1テーブルセクションからアクセスされるデータ要素を選択する。本例のLOW FILTER1045は、第1データセット1021から生じるようなシャッフルマスクにより示されるデータ要素位置をハイライトまたは抽出するためのマスクである。本実施例において、ソース選択フィールドは「0」である場合、データソースは、LOW TABLE DATA1021となる。compare equal operationは、「0」のソース選択値を有するデータ要素位置に対する「0xFF」の値を有するLOW TABLE SELECT MASK1046をもたらす。
16〜31のインデックスを有する第2テーブルセクションからアクセスされるデータ値を選択するマスクは、第5ビットが1となるシャッフル制御バイトを選択することにより図10Eのpacked compare equal operationにより計算される。図10Eは、HIGH FILTER1047とTABLE SELECT MASK1044に対する同様のcompare equal operationを示す。第2テーブルセクションに対する図10Eにおいて生成される上位のテーブル選択マスクは、packedシャッフル処理により第2テーブルセクションからアクセスされるデータ要素を選択する。HIGH FILTER1047は、第2データセット1051から生じるようなシャッフルマスクのソース選択フィールドにより示されるデータ要素位置を抽出するマスクである。本実施例において、ソース選択フィールドが「1」である場合、データソースは、HIGH TABLE DATA1051となる。compare equal operationは、「1」のソース選択値を有するデータ要素位置に対して「0xFF」の値を有するHIGH TABLE SELECT MASK1048をもたらす。
図10Fにおいて、2つのテーブルセクションから選択されたデータ要素がマージされる。図10Fにおいて、LOW TABLE SELECT MASK1046とTEMP RESULTANT A1041に対するpacked AND処理が示される。このpacked AND処理は、ソース選択フィールドに基づくマスク1046ごとに第1データセット1021から選択されたシャッフルされたデータ要素をフィルタリングする。例えば、最左データ要素位置に対するシャッフルマスク1002のソース選択フィールドは、TABLE SELECT MASK1044に示されるように、「0」の値を有する。従って、LOW TABLE SELECT MASK1046は、当該位置に0xFFの値を有する。最左データ要素位置のデータと0xFFとの間の図10FにおけるAND処理は、データOをSELECTED LOW TABLE DATA1049に転送させる。他方、左から3番目のデータ要素位置に対するシャッフルマスク1004のソース選択フィールドは、データが第1データセット1021以外のソースからのものであることを示す「1」の値を有する。従って、LOW TABLE SELECT MASK1046は、当該位置に「0x00」の値を有する。ここで、AND処理は、データ「J」をSELECTED LOW TABLE DATA1049にわたさず、当該位置は「0x00」としてエンプティのままにされる。
図10Gにおいて、HIGH TABLE SELECT MASK1048及びTEMP RESULTANT B1042に対する同様のpacked AND処理が示される。このpacked AND処理は、マスク1048ごとに第2データセット1051から選択されたシャッフルデータ要素をフィルタリングする。図10Fにおいて説明されるpackedAND処理とは異なり、マスク1048は、第2データセットからもたらされるようなソース選択フィールドにより示されるデータが、SELECTED HIGH TABLE DATA1050にわたされるのを可能にし、その他のデータ要素位置がエンプティのままにされる。
図10Hは、第1データセットと第2データセットからの選択されたデータのマージ処理を示す。本例では、パラレルテーブル検索アルゴリズムの所望の結果であるMERGED SELECTED TABLE DATA1070を取得するため、SELECTED LOW TABLE DATA1049とSELECTED HIGH TABLE DATA1050に対して、packed論理OR処理が実行される。他の実施例では、SELECTED LOW TABLE DATA1049とSELECTED HIGH TABLE DATA1050を加算するためのpacked加算処理が、MERGED SELECTED TABLE DATA1070を生成することが可能である。図10Hに示されるように、SELECTED LOW TABLE DATA1049またはSELECTED HIGH TABLE DATA1050の何れかは、本実施例では与えられたデータ位置に0x00の値を有する。これは、0x00を有さないその他のオペランドが適切なソースから選択された所望のテーブルデータを有するためである。ここで、結果1070の最左データ要素位置は、第1データセット1021からのシャッフルされたデータ1041である「O」である。同様に、結果1070の左から3番目のデータ要素位置は、第2データセット1051からのシャッフルされたデータ1042である「Z」である。
本実施例のサイズ超過したテーブルを検索する方法は、一般に以下の処理によりまとめることができる。まず、テーブルデータをレジスタにコピーまたはロードする。各テーブルセクションからのテーブル値が、packedシャッフル処理によりアクセスされる。テーブルセクションを特定するソース選択フィールドは、シャッフルマスクから抽出される。どのテーブルセクションがシャッフルされたデータ要素の適切なソースであるか判断するためのテーブルセクション番号を有するソース選択フィールドに対するcompare−if−equal処理が実行される。このcompare−if−equal処理は、各テーブルセクションに対して所望のシャッフルされたデータ要素をさらにフィルタリングするためのマスクを提供する。適切なテーブル要素からの所望のデータ要素が、最終的なテーブル検索結果を形成するためマージされる。
図11は、SIMD命令を用いてテーブル検索を実行する方法の一実施例を示すフローチャートである。ここで説明されたフローは一般に、図10A〜Hの方法に従うが、これに限定されるものではない。これらの処理のいくつかは、異なる順序または様々なタイプのSIMD命令を用いて実行可能である。ブロック1102において、シャッフルパターンを指定する一組のシャッフルマスクが受け取られる。これらのシャッフルマスクはまた、どのテーブルまたはソースから所望の結果を取得するためデータ要素をシャッフルすべきか示すためのソースフィールドを有する。ブロック1104において、テーブルまたは第1データセットの第1部分のデータ要素がロードされる。ブロック1106において、ブロック1102のシャッフルパターンに従って、第1部分データ要素がシャッフルされる。ブロック1108において、第2データセットまたはテーブルの第2部分のデータ要素がロードされる。ブロック1110において、第2部分データ要素は、ブロック1102のシャッフルパターンに従ってシャッフルされる。ブロック1112において、テーブル選択が、シャッフルマスクからフィルタリングされる。本実施例のテーブル選択は、データ要素がどこから生じるか示すソース選択フィールドに関する。ブロック1114において、テーブルの第1部分からシャッフルデータに対して、テーブル選択マスクが生成される。ブロック1116において、テーブルの第2部分からシャッフルデータに対して、テーブル選択マスクが生成される、これらのテーブル選択マスクは、適切なテーブルデータソースから特定のデータ要素位置に対する所望のシャッフルされたデータ要素をフィルタリングするためのものである。
ブロック1118において、第1テーブル部分に対するブロック1114のテーブル選択マスクに従って、第1テーブル部分のシャッフルされたデータからデータ要素が選択される。ブロック1120において、第2テーブル部分に対するブロック1116のテーブル選択マスクに従って、第2テーブル部分のシャッフルされたデータからデータ要素が選択される。ブロック1118において第1テーブル部分及びブロック1120において第2テーブル部分から選択されたシャッフルされたデータ要素は、マージされたテーブルデータを取得するため、ブロック1122においてマージされる。一実施例のマージされたテーブルデータは、第1及び第2テーブルデータからのシャッフルされたデータ要素を含む。他の実施例では、マージされたテーブルデータは、3以上のテーブルソースまたは記憶領域から検索されたデータを有することが可能である。
図12は、テーブル検索を実行する方法の他の実施例を示すフローチャートである。ブロック1202において、複数のデータ要素を有するテーブルがロードされる。ブロック1204において、当該テーブルが1つのレジスタに適合するか判断される。テーブルが1つのレジスタに適合する場合、ブロック1216において、テーブル検索がシャッフル処理により実行される。データが1つのレジスタに適合しない場合、ブロック1206において、テーブルの関連する各部分に対して、テーブル検索がシャッフル処理により実行される。テーブル部分またはデータソースを選択するビットまたはフィールドを取得するため、論理packed AND処理が実行される。ブロック1210において、「compare−if−equal」処理が、検索されるテーブルの関連する部分からテーブルデータを選択するためのマスクを生成する。ブロック1212において、テーブルセクションからデータアイテムを選択及び検索するため、論理AND処理が利用される。ブロック1214において、論理OR処理は、所望の検索データを取得するため、選択されたデータをマージする。
ゼロクリア機能を用いて複数のレジスタ間のデータを再構成するためのアルゴリズムへのpackedシャッフル命令の一実施例が実現される。ミックス処理の目的は、結果におけるデータ位置がソースオペランドのもとの位置とは異なる選択された構成の1つのSIMDレジスタの2以上のSIMDレジスタの内容をマージするためのものである。選択されたデータ要素は、まず所望の結果位置に移動され、選択されていないデータ要素はゼロに設定される。選択されたデータ要素が1つのレジスタに対して移動された位置が、他のレジスタではゼロに設定される。この結果、結果レジスタの1つは、与えられたデータ要素位置に非ゼロのデータアイテムを含む。以下の一般的な命令シーケンスが、2つのオペランドからデータを合成するのに利用可能である。
Figure 0004607105
オペランドDATA A及びDATA Bは、ゼロ設定のため再構成される要素を含む。オペランドMASK AとMASK Bは、データ要素が移動される場所及びどのデータ要素がゼロに設定されるかを指定するシャッフル制御バイトを含む。本実施例では、MASK Aによりゼロに設定されないデスティネーション位置のデータ要素が、MASK Bによりゼロに設定され、MASK Bによりゼロに設定されないデスティネーション位置が、MASK Aによりゼロに設定される。図13A〜Cは、複数のレジスタの間のデータを再構成するためのアルゴリズムを示す。本例では、2つのデータソースまたはレジスタ1304と1310からのデータ要素が、インタリーブされたデータブロック1314にシャッフルされる。本例のマスク1302と1308、ソースデータ1304と1310及び結果1306、1312と1314を含むデータブロックはそれぞれ、128ビット長であり、16バイトサイズのデータ要素から構成される。しかしながら、他の実施例は、様々なサイズのデータ要素を有する他の長さのデータブロックを含むことが可能である。
図13Aは、第1ソースデータオペランドDATA A1304に対する第1マスクMASK A1302の第1のpackedデータシャッフル処理を示す。本例では、所望のインタリーブされた結果1314は、第1データソース1304から1つのデータ要素と、第2データソース1310から他のデータ要素のインタリーブパターンを含む。本例では、DATA A1304の第5バイトは、DATA B1310の20番目のバイトとインタリーブされる。MASK A1302は、本実施例では、「0x80」と「0x05」の繰り返しのパターンを含む。本実施例の「0x80」の値は、ゼロ設定フィールドを有し、関連するデータ要素位置は「0」で充填される。「0x05」の値は、当該シャッフルマスクの関連するデータ要素位置が、DATA A1304のデータ要素0x5からのデータF1により構成されるべきである。本来的に、MASK A1302のシャッフルパターンは、1つおきの結果のデータ要素位置のデータF1を構成及び繰り返す。ここで、データF1は、DATA A1304からシャッフルされる1つのデータである。他の実施例では、各個数のソースデータ要素からのデータが、シャッフル可能である。従って、実施例は特定のパターンまたは1つのデータに関するパターンに限定されるものではない。マスクパターンの構成の組み合わせは、すべてのタイプの可能にオープンである。図13Aの矢印は、MASK A1302のシャッフルマスクごとのデータ要素のシャッフル処理を示す。このシャッフル処理のRESULTANT A1306は、マスクパターン1302ごとに「0」とF1のパターンから構成される。
図13Bは、第2ソースデータオペランドDATA B1310と共に、第2マスクMASK B1308に関する第2のpackedデータシャッフル処理を示す。MASK B1308は、「0x0C」と「0x80」の繰り返しのパターンを有する。「0x80」の値は、当該シャッフルマスクの関連するデータ位置に「0」を受け取らせる。「0xC0」の値は、当該シャッフルマスクに対応する結果のデータ要素位置をDATA B1310のデータ要素0xCからのデータM2により配置させる。MASK B1308のシャッフルパターンは、データM2を1つおきの結果のデータ要素位置に配置する。図13Bの矢印は、MASK B1308のシャッフルマスクの組ごとのデータ要素のシャッフル処理を示す。このシャッフル処理のRESULTANT B1312は、マスクパターン1308ごとのM2と「0」のパターンから構成される。
図13Cは、INTERLEAVED RESULTANT1314を実現するため、シャッフルされたデータRESULTANT A1306とRESULTANT B1312のマージ処理を示す。マージ処理は、packed論理OR処理により実現される。RESULTANT A1306とRESULTANT B1312の「0」の値のパターンは、M2とF1のデータ値1314のインタリーブを可能にする。例えば、最左データ要素位置では、「0」とM2の論理ORは、結果1314の最左データ要素位置にM2をもたらす。同様に最右データ要素位置では、F1と「0」の論理ORにより、結果1314の最右データ要素位置がF1になる。従って、複数のレジスタまたは記憶位置からのデータが、所望のパターンに再構成することが可能である。
図14は、複数のレジスタの間でデータを再構成する方法の一実施例を示すフローチャートである。ブロック140において、データは第1レジスタまたは記憶位置からロードされる。ブロック1404において、第1のシャッフルマスクの組に基づき、第1レジスタデータがシャッフルされる。ブロック1406において、第2レジスタまたは記憶位置からデータがロードされる。ブロック1408において、この第2レジスタデータは、第2のシャッフルマスクの組に従ってシャッフルされる。ブロック1410において、第1及び第2のレジスタシャッフルからのシャッフルされたデータは、第1及び第2レジスタからのデータを有するインタリーブされたデータブロックに到着するよう論理ORによりブロック1410においてマージされる。
図15A〜Kは、インタリーブされたデータを生成するため複数のレジスタの間でデータをシャッフルするアルゴリズムを示す。これは、平面カラーデータをインタリーブするアプリケーションの一例である。しばしば画像データは、個別のカラー平面において処理され、その後、これらの平面が表示のため以降でインタリーブされる。以下に説明されるアルゴリズムは、ビットマップ等の画像フォーマットにより利用されるような赤平面、緑平面及び青平面のインタリーブ処理を示す。多数の色空間及びインタリーブパターンが可能である。また、このアプローチは、他の色空間及びフォーマットに容易に拡張可能である、本例による実現形態は、しばしば赤(R)平面、緑(G)平面及び青(B)平面データがRGBフォーマットにインタリーブされる画像処理データフォーマット処理を利用する。本例は、本発明によるゼロクリア機能がメモリアクセスを大きく減少させる方法を示す。
これらのソースからのデータは、インタリーブ形式に合成される。より詳細には、当該データは画素カラーデータに関する。例えば、各画素のカラーデータは、赤(R)、緑(G)及び青(B)ソースからの情報を含むことが可能である。色情報を合成することによって、赤/緑/青(RGB)データは、当該画素の所望の色を提供するよう評価可能である。ここで、赤データはオペランドDATA A1512に保持され、緑データはデータオペランドDATA B1514に保持され、青データはDATA C1516に保持される。この構成は、各色のデータがストリーミングデータと同様に個別に収集または一緒に格納されるグラフィックまたはメモリシステムに存在可能である。所望の画像を再生成または表示するのにこの情報を利用するため、画素データは、当該画素のすべてのデータがグループ化されるRGBパターンに構成される必要がある。
本実施例では、所定のパターンを有する一組のマスクが、RGBデータをインタリーブルするのに利用される。図15Aは、第1パターンを有するMASK A1502、第2パターンを有するMASK B1504、及び第3パターンを有するMASK C1506をマスク群として示す。各レジスタからのデータは、他の2つのレジスタからデータとインタリーブされ得るように、3バイト離れて配置される。16進数「0x80」を有する制御バイトは、対応するバイトがpackedバイトシャッフル命令によりゼロクリアされるように、最上位ビットセットを有する。これらのマスクのそれぞれにおいて、3つおきにシャッフルマスクがシャッフル処理用のデータ要素を選択することが可能にされ、2つの介在するシャッフルマスクは0x80の値を有する。「0x08」の値は、これら対応するデータ要素位置のマスクのゼロ設定フィールドが設定されていることを示す。従って、当該マスクに係るデータ要素位置に「0」が配置される。本例では、マスクパターンは、インタリーブ処理を実現するため、各色に対してデータ要素を基本的に分離する。例えば、MASK A1502がシャッフル処理においてデータオペランドに適用されるとき、MASK A1502は、各データ要素間の2つのデータ要素スペースにより6つのデータ要素(0x0、0x1、0x2、0x3、0x4、0x5)を個別にシャッフルさせる。同様に、MASK B1504は、0x0、0x1、0x2、0x3、0x4において個別にシャッフルする。MASK C1506は、0x0、0x1、0x2、0x3、0x4においてデータ要素を個別にシャッフルする。
ここで、本実現形態では、重複する各データ要素位置に対するシャッフルマスクは、2つのゼロ設定フィールドとデータ要素を指定する1つのシャッフルマスクを有する。例えば、3つのマスク1502、1504及び1056の最右データ要素位置を参照するに、シャッフルマスク値は、MASK A1502、MASK B1504及びMASK C1506に対して0x00、0x80及び0x80となる。従って、MASK A1502に対するシャッフルマスク0x00のみが、当該位置に対するデータを指定する。本実施例のマスクは、シャッフルされたデータがインタリーブされたRGBデータブロックを形成するのに容易にマージ可能となるようパターン処理される。
図15Bは、DATA A1512、DATA B1514及びDATA C1516のインタリーブされるデータブロックを示す。本実施例では、各データセットは、16個の画素位置に対する色情報を有するデータエントリを有する。ここで、データ要素における各色レターを伴うサブスクリプトは、当該画素番号を表す。例えば、R0は画素0に対する赤色データであり、G15は画素15に対する緑色データである。図示される各データ要素における16進数は、当該データ要素位置の番号である。色データ(DATA A1512、DATA B1514、DATA C1516)は、データがシャッフル処理により上書きされず、他のロード処理なく再利用できないように、他のレジスタにコピーされてもよい。本実施例では、3つのマスク1502、1504及び1506を有する3つのパスが、画素データインタリーブ処理を完了させるのに必要とされる。他の実現形態及び他のデータ量では、パス及びシャッフル処理の回数は、必要に応じて可変とされる。
図15Cは、第1シャッフルパターンMASK A1502による赤色画素データDATA A1512に対するpackedシャッフル処理の結果のデータブロックMASKED DATA A1522を示す。MASK A1502に応答して、赤色画素データが3つおきのデータ要素位置に配置される。同様に、図15Dは、第2シャッフルパターンMASK B1504による緑色画素データDATA B1514に対するpackedシャッフル処理に対する結果のデータブロックMASKED DATA B1524を示す。図15Eは、第3シャッフルパターンMASK C1506による青色画素データDATA C1516に対するpackedシャッフル処理に対する結果のデータブロックMASKED DATA C1526を示す。本実施例のマスクパターンに対して、これらのシャッフル処理からの結果のデータブロックは、データ要素の1つがデータを有し、2つが「0」を有するように交互にされるデータ要素を提供する。例えば、これらの結果1522、1524及び1526の最左データ要素位置は、それぞれR5、「0」及び「0」を含む。次のデータ要素位置において、RGBカラーの他の画素データが与えられる。従って、マージされるとき、RGBタイプのグループ化が実現される。
本実施例では、赤色データと緑色データの上記シャッフルされたデータが、packed論理OR処理によりまずマージされる。図15Fは、MASKED DATA A1522とMASKED DATA B1524のpacked論理OR処理に対する結果のデータINTERLEAVED A&B DATA1530を示す。ここで、シャッフルされた青色データは、他のpacked論理OR処理によりインタリーブされた赤色及び緑色データとマージされる。図15Gは、MASKED DATA C1526とMASKED DATA A&B1530のpacked論理OR処理からの新たな結果であるINTERLEAVED A,B&C DATA1532を示す。従って、図15Gの結果のデータブロックは、最初の5つの画素に対するインタリーブされたRGBデータと第6画素の一部を含む。本実施例のアルゴリズムの以降の繰り返しは、残りの16個の画素に対するインタリーブされたRGBデータを生成する。
この時点で、DATA A1512、DATA B1514及びDATA C1516のデータの1/3がインタリーブされたことになる。2つのアプローチが、これらのレジスタの残りのデータを処理するのに利用可能である。他の一組のシャッフル制御バイトは、インタリーブされるデータを配置するよう利用可能であり、DATA A1512、DATA B1514及びDATA C1516は、シャッフルマスク1502、1504及び1506が再び利用可能となるように、右にシフトすることが可能である。ここに示される実現形態では、追加のシャッフル制御バイトをロードするのに必要とされるメモリアクセスを行うことを回避するため、データはシフトされる。これらのシフト処理がない場合、9組の制御バイトが3つ(MASK A1502、MASK B1504、MASK C1506)の代わりに本実施例において必要とされるであろう。本実施例はまた、限られた個数のレジスタが利用可能であり、メモリアクセスが長いアーキテクチャにおいて適用可能である。
多数のレジスタが利用可能な他の実施例では、シフト処理が不要となるように、レジスタの多数またはすべてのマスク群を保持することが、より効率的となり得る。さらに、多数のレジスタと実行ユニットを有するアーキテクチャでは、シャッフル処理のすべてがシフト処理の実行を待機する必要なく、パラレルに実行可能である。例えば、9つのシャッフルユニットと9つのマスク群を有するアウトオブオーダプロセッサは、9つのシャッフル処理をパラレルに実行することが可能である。上記実施例では、マスクが再適用される前にデータがシフトされる必要がある。
DATA A1512、DATA B1514及びDATA C1516のもとの色データのデータ要素が、当該カラーに対してすでに処理されたデータ要素数に従ってシフトされる。本例では、6つの画素のデータが赤色に対して上記処理され、これにより、緑色のデータオペランドDATA B1514と青色のデータオペランドDATA C1516のデータ要素が、それぞれ5つのデータ要素位置だけ右にシフトされる。同様に、5つの画素のデータは緑色と青色の両方に対して処理され、緑色のデータオペランドDATA B1514と青色のデータオペランドDATA C1516がそれぞれ5つのデータ要素位置だけ右にシフトされる。図15Hにおいて、シフトされたソースデータは、赤色、緑色及び青色のそれぞれに対してDATA A’1546、DATA B’1542及びDATA C’1544として示される。
図15A〜Gに関して上述されたようなシャッフル及び論理OR処理が、当該シフトされたデータに対して繰り返される。3つのpackedシャッフル結果に対するpacked論理OR処理と共に、MASK A1502、MASK B1504及びMASK C1506のそれぞれと共にDATA B’1542、DATA C’1544及びDATA A’1546に対する以降のpackedシャッフル処理が、他の2つの一部及び他の4がそのインタリーブされたRGBデータを提供する。この結果のデータINTERLEAVED A’、B’及びC’ DATA1548が、図15Iに示される。ここで、最右の2つのデータ要素が、第1のインタリーブされたデータセット1532により配置された赤色データR5を既に有する6番目の画素に関するものであるということに留意されたい。未処理の画素色データが、第2パスの処理結果ごとの適切な場所数だけ再びシフトされる。ここで、追加の5つの画素に対するデータは赤色と青色に対して処理されたものであるため、赤色データオペランドDATA A’1546と青色データオペランドDATA C’1544のデータ要素は、5つのデータ要素位置だけ右にシフトされる。6つの画素のデータが緑色に対して処理されたため、緑色のデータオペランドDATA B’1542に対するデータ要素は6つの位置だけ右にシフトされる。図15Jにおいて、この第3のパスに対するシフトされたデータが示される。上記のpackedシャッフル及び論理OR処理の繰り返しが、DATA C’’1552、DATA A’’1554及びDATA B’’1556に適用される。図15Kにおいて、16個の画素の最後に対する結果のインタリーブされたRGBデータは、INTERVEAVED A’’,B’’ DATA1558として示される。B10を有する最右データ要素は、第2のインタリーブされたデータセット1548により配置されたそれの緑色データG10と赤色データR10を既に有する11番目の画素に関する。従って、一組のマスクパターン及びpacked論理OR処理によるpackedシャッフル系列により、複数のソース1512、1514及び1516からのデータは、これらの結果1532、1548及び1558と同様の処理またはさらなる利用のため、所望の手法によりマージ及び再構成可能である。
図16は、インタリーブされたデータを生成するため、複数のレジスタ間のデータをシャッフルする方法の一実施例を示すフローチャートである。例えば、本方法の実施例は、図15A〜Kに説明されるように、インタリーブされた画素データの生成に適用可能である。本実施例は3つのデータソースまたはデータ平面に関して説明されるが、2以上のデータ平面に関して他の実施例は処理可能である。これらのデータ平面は、1以上の画像フレームに対する色データを有することが可能である。ブロック1602において、第1、第2及び第3平面のフレームデータがロードされる。本例では、複数の画素のRGB色データが、異なる3つの平面からの個々の色として利用可能である。第1平面のデータは赤色に対するものであり、第2平面のデータは緑色に対するものであり、第3平面のデータは青色に対するものである。ブロック1604において、シャッフル制御パターンを有する一組のマスク(M1、M2及びM3)がロードされる。これらのシャッフル制御パターンは、色をインタリーブするため、データの配置及びシャッフルパターンを決定する。実現形態に応じて、任意数のシャッフルパターンが、所望のデータは位置を生成するため利用可能である。
ブロック1606において、各データ平面に対して、適切な制御パターンが選択される。本実現形態では、色データが所望される順序及び現在実行中の繰り返しに基づき、シャッフルパターンが選択される。第1データセットである赤色からのフレームデータが、シャッフルされた赤色データを取得するため、ブロック1608において第1のシャッフル制御パターンによりシャッフルされる。第2のデータセットである緑色が、シャッフルされた緑色のデータを取得するため、第2のシャッフル制御パターンによりブロック1610においてシャッフルされる。ブロック1612において、第3のデータセットである青色が、シャッフルされた青色データを実現するため、第3シャッフル制御パターンによりシャッフルされる。これら3つのマスクと各自のシャッフル制御パターンは本実施例では互いに異なるが、各繰り返し中に複数のデータセットに対して、マスク及びそれのシャッフルパターンが利用可能である。さらに、いくつかのマスクは、他のものより頻繁に利用されてもよい。
ブロック1614において、3つのデータセットに対するシャッフルされたデータブロック1608、1610及び1612が、当該パスのインタリーブされた結果を形成するためマージされる。例えば、第1パスの結果は、図15Gのインタリーブされたデータ1532と同様のものとすることが可能であり、各画素のRGBデータは一組としてグループ化される。ブロック1616において、シャッフリングに対してレジスタにロードされるフレームデータがさらにあるかチェックされる。ない場合には、ブロック1620において、インタリーブされる3つのデータ平面からのさらなるデータがないかチェックされる。ない場合には、本方法は終了する。ブロック1620において利用可能なさらなる平面データがあれば、当該プロセスはブロック1602に戻り、シャッフルリングのためのさらなるフレームデータがロードされる。
ブロック1616における判定が真であれば、各色データ平面のフレームデータは、最後のパス中に当該色に対してデータセットに適用されたマスクパターンに対応する所定のカウントだけシフトされる。例えば、図15Gからの第1パスの例を維持するのに、第1、第2及び第3平面の赤色、緑色および青色データが、それぞれ6、5及び5の位置だけシフトされる。実現形態に応じて、各色データに対して選択されたシャッフルパターンは、各パス異なるものであるか、あるいは同一のものが再利用されるようにしてもよい。一実施例の第2パス中、第1の繰り返しからの3つのマスクは、第1平面データが第3マスクとペアにされ、第2平面データが第1マスクとペアにされ、第3平面データが第3マスクとペアにされるように回転される。このマスクの回転は、図15Gと15Iに示されるように、1つのパスから次のパスへのインタリーブされたRGBデータの適切な連続性を可能にする。シャッフル及びマージ処理は、第1パスと同様に継続される。3以上の繰り返しが所望される場合、本実施例のシャッフルマスクパターンは、さらなるインタリーブされたRGBデータを生成するため、異なるデータ平面において回転され続ける。
本発明によるpackedシャッフル命令を用いたアルゴリズムの実施例は、現在のハードウェアリソースによりプロセッサ及びシステムパフォーマンスを向上させることが可能である。しかしながら、技術が向上し続けるに従い、本発明の実施例はより多くかつより高速のハードウェアリソースと組み合わされるとき、より効率的なロジック回路がパフォーマンス向上に対するさらに大きな影響を与えることが可能である。従って、バイト粒度とzeroクリアオプションを有するpackedシャッフル命令の効率的な実施例は、プロセッサの生成に対して異なるより大きな影響を有することが可能である。現在のプロセッサアーキテクチャにさらなるリソースを単に追加することだけでは、より良いパフォーマンス向上を保証することはできない。パラレルテーブル検索及びpackedシャッフル命令(PSHUFB)の一実施例と同様に、アプリケーションの効率性を維持することによって、より高いパフォーマンス向上が可能となり得る。
上記例は説明を簡単化するため、128ビット長ハードウェア/レジスタ/オペランドに関して一般に説明されたが、packedシャッフル処理、パラレルテーブル検索及び複数レジスタデータ再構成を実行するため、他の実施例では64または128ビット長ハードウェア/レジスタ/オペランドが利用されてもよい。さらに、本発明の実施例はMMX/SSE/SSE2技術などの特定のハードウェアまたは技術タイプに限定されるものではなく、他のSIMD実現形態及び他のグラフィカルデータ操作技術により利用可能である。
本明細書では、本発明はそれの特定の実施例を参照して説明された。しかしながら、添付された請求項に与えられるような本発明のより広い趣旨及び範囲から逸脱することなく、各種改良及び変更が可能であるということは明らかであろう。従って、明細書及び図面は、限定的なものではなく例示的なものとみなされるべきである。
図1Aは、本発明の一実施例によるデータをシャッフルするための命令を実行する実行ユニットを含むプロセッサにより構成されるコンピュータシステムのブロック図である。 図1Bは、本発明の他の実施例による他の一例となるコンピュータシステムのブロック図である。 図1Cは、本発明の他の実施例による他の一例となるコンピュータシステムのブロック図である。 図2は、本発明によるデータシャッフル処理を実行するロジック回路を有する一実施例のプロセッサのマイクロアーキテクチャのブロック図である。 3A、3B、3Cは、本発明による各種実施例によるシャッフルマスクを示す。 図4Aは、本発明の一実施例によるマルチメディアレジスタの各種packedデータタイプ表現を示す。 図4Bは、他の実施例によるpackedデータタイプを示す。 図4Cは、シャッフル命令の処理符号化(オペコード)フォーマットの一実施例を示す。 図4Dは、他の処理符号化フォーマットを示す。 図4Eは、さらなる他の処理符号化フォーマットを示す。 図5は、本発明によるシャッフルマスクに基づくデータオペランドに対するシャッフル処理を実行するロジックの一実施例のブロック図である。 図6は、本発明によるデータシャッフリング処理を実行する回路の一実施例のブロック図である。 図7は、本発明の一実施例によるバイト長データ要素に対するデータシャッフルの処理を示す。 図8は、本発明の他の実施例によるワード長データ要素に対するデータシャッフル処理の処理を示す。 図9は、データをシャッフルする方法の一実施例を示すフローチャートである。 図10Aは、SIMD命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。 図10Bは、SIMD命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。 図10Cは、SIMD命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。 図10Dは、SIMD命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。 図10Eは、SIMD命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。 図10Fは、SIMD命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。 図10Gは、SIMD命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。 図10Hは、SIMD命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。 図11は、SIMD命令を用いたテーブル検索を実行するための方法の一実施例を示すフローチャートである。 図12は、テーブル検索を実行するための方法の他の実施例を示すフローチャートである。 図13Aは、複数のレジスタ間においてデータを再構成するためのアルゴリズムを示す。 図13Bは、複数のレジスタ間においてデータを再構成するためのアルゴリズムを示す。 図13Cは、複数のレジスタ間においてデータを再構成するためのアルゴリズムを示す。 図14は、複数のレジスタ間においてデータを再構成するための方法の一実施例を示すフローチャートである。 図15Aは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。 図15Bは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。 図15Cは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。 図15Dは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。 図15Eは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。 図15Fは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。 図15Gは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。 図15Hは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。 図15Iは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。 図15Jは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。 図15Kは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。 図16は、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするための方法の一実施例を示すフローチャートである。

Claims (27)

  1. 制御ロジックが、L個のデータ要素を有する第1オペランドと、各シャッフルマスクが一意的な結果のデータ要素位置に関連付けされるL個のシャッフルマスクの形式によるL個の制御要素を有する第2オペランドとを受け取り、結果の各データ要素位置について選択信号とゼロクリア信号とを提供するステップと、
    前記制御ロジックに接続されるL個のマルチプレクサの各マルチプレクサであって、一意的な結果のデータ要素位置に関連付けされる各マルチプレクサを介して、それの関連付けされたゼロクリア信号がアクティブである場合にはゼロを出力し、それの関連付けされたゼロクリア信号が非アクティブである場合には、それの関連付けされた選択信号に基づき個のデータ要素から選択されたデータを出力するステップと、
    を有するデータシャッフル方法であって、
    前記シャッフルマスクのそれぞれは、ゼロクリアビットである第1部分と、前記L個のデータ要素の1つの位置を示す位置選択フィールドである第2部分と、予約フィールドである第3部分との3つの部分に分割されるデータシャッフル方法。
  2. 請求項1記載の方法であって、
    前記L個の制御要素のそれぞれは、前記第2オペランドに配置されることを特徴とする方法。
  3. 請求項2記載の方法であって、
    前記L個のデータ要素のそれぞれは、前記第1オペランドに配置されることを特徴とする方法。
  4. 請求項3記載の方法であって、
    前記結果のデータ要素位置のそれぞれは、それの関連付けされたマルチプレクサからの出力を保持することを特徴とする方法。
  5. 請求項4記載の方法であって、
    前記制御要素のそれぞれは、前記ゼロクリアビットと前記位置選択フィールドとから構成され、
    前記ゼロクリアビットは、該制御要素に係るデータ要素位置がゼロの値により充填されるべきか示し、
    前記位置選択フィールドは、データをシャッフルする第1オペランドデータ要素を示す、
    ことを特徴とする方法。
  6. 請求項5記載の方法であって、
    前記制御要素のそれぞれはさらに、前記予約フィールドから構成されることを特徴とする方法。
  7. 請求項2記載の方法であって、さらに、
    前記第2オペランドの制御要素に応答して、前記第1オペランドからシャッフルされたデータを有する結果のデータブロックを出力するステップを有することを特徴とする方法。
  8. 請求項1記載の方法であって、
    前記データ要素のそれぞれは、1バイトのデータから構成されることを特徴とする方法。
  9. 請求項8記載の方法であって、
    前記制御要素のそれぞれは、1バイト長であることを特徴とする方法。
  10. 請求項9記載の方法であって、
    Lは8であり、前記第1オペランド、前記第2オペランド及び前記結果は、それぞれ64ビット長packedデータから構成されることを特徴とする方法。
  11. 請求項9記載の方法であって、
    Lは16であり、前記第1オペランド、前記第2オペランド及び前記結果は、それぞれ128ビット長packedデータから構成されることを特徴とする方法。
  12. 前記第1オペランドの受け取り、前記第2オペランドの受け取り及び前記データを関連付けされた結果のデータ要素に配置することは、3ビットにより前記第1オペランドを格納する第1レジスタを指定し、3ビットにより前記第2オペランドを格納する第2レジスタを指定する1つのpackedシャッフル命令を受け取ることに応答して実行され、前記第1オペランドと前記第2オペランドとは同じサイズを有し、前記L個のデータ要素とL個の制御要素とのキャッシュは同じサイズを有しており、
    前記L個の制御要素のそれぞれは、3つの部分に分割され、第1部分は各シャッフルマスクの最上位ビットを占有するゼロクリアビットであり、第2部分は少なくともlogLのビット長であって、前記L個のデータ要素の1つの位置を示す位置選択フィールドである、請求項1記載の方法。
  13. 複数のソースデータ要素を格納する第1記憶位置と、
    各制御要素が結果のデータ要素位置に対応し、ゼロクリアビットと選択フィールドとを有するL個のシャッフルマスクの形式による複数の制御要素を格納する第2記憶位置と、
    前記第2記憶位置に接続され、前記制御要素の値に応答して、複数の選択信号と複数のゼロクリア信号とを生成する制御ロジックと、
    前記第1記憶位置に接続され、前記複数の選択信号を受信する複数の第1マルチプレクサであって、各マルチプレクサが特定の結果のデータ要素位置に対応する選択信号に応答して、前記特定の結果のデータ要素位置のデータ要素をシャッフルする複数の第1マルチプレクサと、
    前記複数の第1マルチプレクサに接続され、前記複数のゼロクリア信号を受信する複数の第2マルチプレクサであって、各マルチプレクサが特定の結果のデータ要素位置に関連付けされ、それのゼロクリア信号がアクティブである場合にはゼロを出力し、または、前記特定の結果のデータ要素位置に対してシャッフルされたデータ要素を出力する複数の第2マルチプレクサと、
    から構成されることを特徴とするデータシャッフル装置。
  14. 請求項13記載の装置であって、
    前記複数のソースデータ要素は、第1packedデータオペランドであることを特徴とする装置。
  15. 請求項14記載の装置であって、
    前記複数の制御要素は、第2packedデータオペランドであることを特徴とする装置。
  16. 請求項14記載の装置であって、
    前記第1及び第2記憶位置は、SIMD(Single Instruction Multiple Data)レジスタであることを特徴とする装置。
  17. 請求項15記載の装置であって、
    前記第1packedオペランドは64ビット長であり、前記ソースデータ要素のそれぞれは1バイト長であり、
    前記第2packedオペランドは64ビット長であり、前記制御要素のそれぞれは1バイト長である、
    ことを特徴とする装置。
  18. 請求項15記載の装置であって、
    前記第1packedオペランドは128ビット長であり、前記ソースデータ要素のそれぞれは1バイト長であり、
    前記第2packedオペランドは128ビット長であり、前記制御要素のそれぞれは1バイト長である、
    ことを特徴とする装置。
  19. シャッフルマスクが一意的な結果のデータ要素位置に関連付けされるL個のシャッフルマスクを受け付け、各結果のデータ要素位置に対して、選択信号とゼロ設定信号とを提供する制御ロジックと、
    前記制御ロジックに接続され、各マルチプレクサもまた一意的な結果のデータ要素位置に関連付けされ、それの関連付けされたゼロクリア信号がアクティブである場合にはゼロを、それの関連付けされたゼロクリア信号が非アクティブである場合には、それの関連付けされた選択信号に基づき個のデータ要素から選択されたデータを出力するL個のマルチプレクサと、
    から構成され、
    前記L個のシャッフルマスクのそれぞれは、ゼロクリアビットである第1部分と、データ要素の位置を示す位置選択フィールドである第2部分と、予約フィールドである第3部分との3つの部分に分割されることを特徴とするデータシャッフル装置。
  20. 請求項19記載の装置であって、さらに、
    各データ要素位置がそれの関連付けされたマルチプレクサからの出力を保持するL個の一意的なデータ要素位置を有するレジスタを有することを特徴とする装置。
  21. 請求項20記載の装置であって、
    Lは16であることを特徴とする装置。
  22. データ及び命令を格納するメモリと、
    前記メモリから、プロセッサにデータシャッフル処理を実行させる命令を受信するバスと、
    前記メモリに前記バスを介して接続され、前記データシャッフル処理を実行可能なプロセッサと、
    から構成されるシステムであって、
    前記プロセッサは、
    L個のデータ要素を有する第1オペランドと、各シャッフルマスクが一意的な結果のデータ要素位置に関連付けされるL個のシャッフルマスクの形式によるL個の制御要素を有する第2オペランドとを受け取り、結果の各データ要素位置について選択信号とゼロクリア信号とを提供する制御ロジックと、
    各マルチプレクサが一意的な結果のデータ要素位置に関連付けされ、それの関連付けされたゼロクリア信号がアクティブである場合にはゼロを出力し、それの関連付けされたゼロクリア信号が非アクティブである場合には、それの関連付けされた選択信号に基づき個のデータ要素から選択されたデータを出力する、前記制御ロジックに接続されたL個のマルチプレクサと、
    から構成され、
    前記L個のシャッフルマスクのそれぞれは、ゼロクリアビットである第1部分と、前記L個のデータ要素の1つの位置を示す位置選択フィールドである第2部分と、予約フィールドである第3部分との3つの部分に分割されることを特徴とするシステム。
  23. 請求項22記載のシステムであって、
    各シャッフル制御要素は、前記ゼロクリアビットと前記位置選択フィールドとから構成され、
    前記ゼロクリアビットは、該シャッフル制御要素に係るデータ要素位置がゼロの値により充填されるべきか示し、
    前記位置選択フィールドは、データをシャッフルする第1オペランドデータ要素を示す、
    ことを特徴とするシステム。
  24. 請求項23記載のシステムであって、
    前記L個のデータ要素のそれぞれは、ソース選択フィールドから構成されることを特徴とするシステム。
  25. 請求項22記載のシステムであって、
    前記命令は、ゼロクリア機能を有するpackedバイトシャッフルであることを特徴とするシステム。
  26. 請求項22記載のシステムであって、
    前記L個のデータ要素のそれぞれは1バイト長であり、
    各シャッフルコマンド要素は1バイト長であり、
    Lは8である、
    ことを特徴とするシステム。
  27. 請求項22記載のシステムであって、
    前記第1オペランドは64ビット長であり、
    前記第2オペランドは64ビット長である、
    ことを特徴とするシステム。
JP2006515370A 2003-06-30 2004-06-24 データをシャッフルするための方法及び装置 Active JP4607105B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/611,344 US20040054877A1 (en) 2001-10-29 2003-06-30 Method and apparatus for shuffling data
PCT/US2004/020601 WO2005006183A2 (en) 2003-06-30 2004-06-24 Method and apparatus for shuffling data

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2010180413A Division JP5490645B2 (ja) 2003-06-30 2010-08-11 データをシャッフルするための方法及び装置

Publications (2)

Publication Number Publication Date
JP2007526536A JP2007526536A (ja) 2007-09-13
JP4607105B2 true JP4607105B2 (ja) 2011-01-05

Family

ID=34062338

Family Applications (4)

Application Number Title Priority Date Filing Date
JP2006515370A Active JP4607105B2 (ja) 2003-06-30 2004-06-24 データをシャッフルするための方法及び装置
JP2010180413A Active JP5490645B2 (ja) 2003-06-30 2010-08-11 データをシャッフルするための方法及び装置
JP2011045001A Active JP5535965B2 (ja) 2003-06-30 2011-03-02 データをシャッフルするための方法及び装置
JP2013115254A Active JP5567181B2 (ja) 2003-06-30 2013-05-31 データをシャッフルするための方法及び装置

Family Applications After (3)

Application Number Title Priority Date Filing Date
JP2010180413A Active JP5490645B2 (ja) 2003-06-30 2010-08-11 データをシャッフルするための方法及び装置
JP2011045001A Active JP5535965B2 (ja) 2003-06-30 2011-03-02 データをシャッフルするための方法及び装置
JP2013115254A Active JP5567181B2 (ja) 2003-06-30 2013-05-31 データをシャッフルするための方法及び装置

Country Status (11)

Country Link
US (8) US20040054877A1 (ja)
EP (1) EP1639452B1 (ja)
JP (4) JP4607105B2 (ja)
KR (1) KR100831472B1 (ja)
CN (2) CN101620525B (ja)
AT (1) ATE442624T1 (ja)
DE (1) DE602004023081D1 (ja)
HK (1) HK1083657A1 (ja)
RU (1) RU2316808C2 (ja)
TW (1) TWI270007B (ja)
WO (1) WO2005006183A2 (ja)

Families Citing this family (115)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040054877A1 (en) 2001-10-29 2004-03-18 Macy William W. Method and apparatus for shuffling data
US7739319B2 (en) * 2001-10-29 2010-06-15 Intel Corporation Method and apparatus for parallel table lookup using SIMD instructions
US7925891B2 (en) * 2003-04-18 2011-04-12 Via Technologies, Inc. Apparatus and method for employing cryptographic functions to generate a message digest
US7647557B2 (en) * 2005-06-29 2010-01-12 Intel Corporation Techniques for shuffling video information
US20070073925A1 (en) * 2005-09-28 2007-03-29 Arc International (Uk) Limited Systems and methods for synchronizing multiple processing engines of a microprocessor
US20070106883A1 (en) * 2005-11-07 2007-05-10 Choquette Jack H Efficient Streaming of Un-Aligned Load/Store Instructions that Save Unused Non-Aligned Data in a Scratch Register for the Next Instruction
US20070226469A1 (en) * 2006-03-06 2007-09-27 James Wilson Permutable address processor and method
US8290095B2 (en) 2006-03-23 2012-10-16 Qualcomm Incorporated Viterbi pack instruction
US20080071851A1 (en) * 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
US20080077772A1 (en) * 2006-09-22 2008-03-27 Ronen Zohar Method and apparatus for performing select operations
US9069547B2 (en) * 2006-09-22 2015-06-30 Intel Corporation Instruction and logic for processing text strings
US7536532B2 (en) 2006-09-27 2009-05-19 International Business Machines Corporation Merge operations of data arrays based on SIMD instructions
JP4686435B2 (ja) * 2006-10-27 2011-05-25 株式会社東芝 演算装置
US8700884B2 (en) * 2007-10-12 2014-04-15 Freescale Semiconductor, Inc. Single-instruction multiple-data vector permutation instruction and method for performing table lookups for in-range index values and determining constant values for out-of-range index values
US7962718B2 (en) * 2007-10-12 2011-06-14 Freescale Semiconductor, Inc. Methods for performing extended table lookups using SIMD vector permutation instructions that support out-of-range index values
US8515052B2 (en) 2007-12-17 2013-08-20 Wai Wu Parallel signal processing system and method
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
GB2456775B (en) * 2008-01-22 2012-10-31 Advanced Risc Mach Ltd Apparatus and method for performing permutation operations on data
US9513905B2 (en) 2008-03-28 2016-12-06 Intel Corporation Vector instructions to enable efficient synchronization and parallel reduction operations
WO2009144681A1 (en) * 2008-05-30 2009-12-03 Nxp B.V. Vector shuffle with write enable
US8195921B2 (en) * 2008-07-09 2012-06-05 Oracle America, Inc. Method and apparatus for decoding multithreaded instructions of a microprocessor
JP5375114B2 (ja) * 2009-01-16 2013-12-25 富士通株式会社 プロセッサ
JP5438551B2 (ja) * 2009-04-23 2014-03-12 新日鉄住金ソリューションズ株式会社 情報処理装置、情報処理方法及びプログラム
US9507670B2 (en) * 2010-06-14 2016-11-29 Veeam Software Ag Selective processing of file system objects for image level backups
CN103460181B (zh) * 2011-03-30 2017-10-24 飞思卡尔半导体公司 集成电路器件和执行其位操纵的方法
US20120254588A1 (en) * 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
US20120278591A1 (en) * 2011-04-27 2012-11-01 Advanced Micro Devices, Inc. Crossbar switch module having data movement instruction processor module and methods for implementing the same
KR101918464B1 (ko) 2011-09-14 2018-11-15 삼성전자 주식회사 스위즐드 버추얼 레지스터 기반의 프로세서 및 스위즐 패턴 제공 장치
JP5988222B2 (ja) * 2011-10-18 2016-09-07 パナソニックIpマネジメント株式会社 シャッフルパターン生成回路、プロセッサ、シャッフルパターン生成方法、命令
WO2013089750A1 (en) * 2011-12-15 2013-06-20 Intel Corporation Methods to optimize a program loop via vector instructions using a shuffle table and a blend table
WO2013095554A1 (en) 2011-12-22 2013-06-27 Intel Corporation Processors, methods, systems, and instructions to generate sequences of consecutive integers in numerical order
US9513918B2 (en) * 2011-12-22 2016-12-06 Intel Corporation Apparatus and method for performing permute operations
CN108681465B (zh) 2011-12-22 2022-08-02 英特尔公司 用于产生整数序列的处理器、处理器核及系统
US10223111B2 (en) 2011-12-22 2019-03-05 Intel Corporation Processors, methods, systems, and instructions to generate sequences of integers in which integers in consecutive positions differ by a constant integer stride and where a smallest integer is offset from zero by an integer offset
CN104011644B (zh) 2011-12-22 2017-12-08 英特尔公司 用于产生按照数值顺序的相差恒定跨度的整数的序列的处理器、方法、系统和指令
CN104025040B (zh) * 2011-12-23 2017-11-21 英特尔公司 用于混洗浮点或整数值的装置和方法
US9495162B2 (en) * 2011-12-23 2016-11-15 Intel Corporation Apparatus and method for performing a permute operation
WO2013095657A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Instruction and logic to provide vector blend and permute functionality
JP5935319B2 (ja) * 2011-12-26 2016-06-15 富士通株式会社 回路エミュレーション装置、回路エミュレーション方法及び回路エミュレーションプログラム
US8683296B2 (en) 2011-12-30 2014-03-25 Streamscale, Inc. Accelerated erasure coding system and method
US8914706B2 (en) 2011-12-30 2014-12-16 Streamscale, Inc. Using parity data for concurrent data authentication, correction, compression, and encryption
US9329863B2 (en) 2012-03-13 2016-05-03 International Business Machines Corporation Load register on condition with zero or immediate instruction
JP5730812B2 (ja) * 2012-05-02 2015-06-10 日本電信電話株式会社 演算装置、その方法およびプログラム
US9268683B1 (en) * 2012-05-14 2016-02-23 Kandou Labs, S.A. Storage method and apparatus for random access memory using codeword storage
US9953436B2 (en) 2012-06-26 2018-04-24 BTS Software Solutions, LLC Low delay low complexity lossless compression system
US9542839B2 (en) 2012-06-26 2017-01-10 BTS Software Solutions, LLC Low delay low complexity lossless compression system
US9218182B2 (en) * 2012-06-29 2015-12-22 Intel Corporation Systems, apparatuses, and methods for performing a shuffle and operation (shuffle-op)
US9342479B2 (en) * 2012-08-23 2016-05-17 Qualcomm Incorporated Systems and methods of data extraction in a vector processor
US9804840B2 (en) 2013-01-23 2017-10-31 International Business Machines Corporation Vector Galois Field Multiply Sum and Accumulate instruction
US9471308B2 (en) 2013-01-23 2016-10-18 International Business Machines Corporation Vector floating point test data class immediate instruction
US9778932B2 (en) * 2013-01-23 2017-10-03 International Business Machines Corporation Vector generate mask instruction
US9513906B2 (en) 2013-01-23 2016-12-06 International Business Machines Corporation Vector checksum instruction
US9715385B2 (en) 2013-01-23 2017-07-25 International Business Machines Corporation Vector exception code
US9823924B2 (en) 2013-01-23 2017-11-21 International Business Machines Corporation Vector element rotate and insert under mask instruction
US9207942B2 (en) * 2013-03-15 2015-12-08 Intel Corporation Systems, apparatuses,and methods for zeroing of bits in a data element
US9405539B2 (en) * 2013-07-31 2016-08-02 Intel Corporation Providing vector sub-byte decompression functionality
US10001993B2 (en) 2013-08-08 2018-06-19 Linear Algebra Technologies Limited Variable-length instruction buffer management
US11768689B2 (en) 2013-08-08 2023-09-26 Movidius Limited Apparatus, systems, and methods for low power computational imaging
CN103501348A (zh) * 2013-10-16 2014-01-08 华仪风能有限公司 一种风力发电机组主控系统与监控系统的通讯方法及系统
US9582419B2 (en) * 2013-10-25 2017-02-28 Arm Limited Data processing device and method for interleaved storage of data elements
KR102122406B1 (ko) 2013-11-06 2020-06-12 삼성전자주식회사 셔플 명령어 처리 장치 및 방법
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
EP3087473A1 (en) * 2013-12-23 2016-11-02 Intel Corporation Instruction and logic for identifying instructions for retirement in a multi-strand out-of-order processor
US9552209B2 (en) * 2013-12-27 2017-01-24 Intel Corporation Functional unit for instruction execution pipeline capable of shifting different chunks of a packed data operand by different amounts
US9256534B2 (en) 2014-01-06 2016-02-09 International Business Machines Corporation Data shuffling in a non-uniform memory access device
US9274835B2 (en) 2014-01-06 2016-03-01 International Business Machines Corporation Data shuffling in a non-uniform memory access device
KR101826707B1 (ko) * 2014-03-27 2018-02-07 인텔 코포레이션 마스킹된 결과 요소들로의 전파를 이용하여 연속 소스 요소들을 마스킹되지 않은 결과 요소들에 저장하기 위한 프로세서, 방법, 시스템 및 명령어
EP3123300A1 (en) * 2014-03-28 2017-02-01 Intel Corporation Processors, methods, systems, and instructions to store source elements to corresponding unmasked result elements with propagation to masked result elements
US10169803B2 (en) 2014-06-26 2019-01-01 Amazon Technologies, Inc. Color based social networking recommendations
US9996579B2 (en) * 2014-06-26 2018-06-12 Amazon Technologies, Inc. Fast color searching
US9424039B2 (en) * 2014-07-09 2016-08-23 Intel Corporation Instruction for implementing vector loops of iterations having an iteration dependent condition
CN106796504B (zh) * 2014-07-30 2019-08-13 线性代数技术有限公司 用于管理可变长度指令的方法和设备
US9619214B2 (en) 2014-08-13 2017-04-11 International Business Machines Corporation Compiler optimizations for vector instructions
US9785649B1 (en) 2014-09-02 2017-10-10 Amazon Technologies, Inc. Hue-based color naming for an image
JP2017199045A (ja) * 2014-09-02 2017-11-02 パナソニックIpマネジメント株式会社 プロセッサ及びデータ並び替え方法
US10133570B2 (en) * 2014-09-19 2018-11-20 Intel Corporation Processors, methods, systems, and instructions to select and consolidate active data elements in a register under mask into a least significant portion of result, and to indicate a number of data elements consolidated
EP3001307B1 (en) * 2014-09-25 2019-11-13 Intel Corporation Bit shuffle processors, methods, systems, and instructions
US10169014B2 (en) 2014-12-19 2019-01-01 International Business Machines Corporation Compiler method for generating instructions for vector operations in a multi-endian instruction set
US10296489B2 (en) * 2014-12-27 2019-05-21 Intel Corporation Method and apparatus for performing a vector bit shuffle
US10296334B2 (en) * 2014-12-27 2019-05-21 Intel Corporation Method and apparatus for performing a vector bit gather
KR20160139823A (ko) 2015-05-28 2016-12-07 손규호 두 키 값과 바이트 중첩을 이용한 다중 자료형 데이터 패킹 또는 패킹 복원 방법
US10001995B2 (en) * 2015-06-02 2018-06-19 Intel Corporation Packed data alignment plus compute instructions, processors, methods, and systems
CN105022609A (zh) * 2015-08-05 2015-11-04 浪潮(北京)电子信息产业有限公司 一种数据混洗方法和数据混洗单元
US9880821B2 (en) 2015-08-17 2018-01-30 International Business Machines Corporation Compiler optimizations for vector operations that are reformatting-resistant
US10503502B2 (en) 2015-09-25 2019-12-10 Intel Corporation Data element rearrangement, processors, methods, systems, and instructions
US10620957B2 (en) * 2015-10-22 2020-04-14 Texas Instruments Incorporated Method for forming constant extensions in the same execute packet in a VLIW processor
US20170177350A1 (en) * 2015-12-18 2017-06-22 Intel Corporation Instructions and Logic for Set-Multiple-Vector-Elements Operations
US20170177351A1 (en) * 2015-12-18 2017-06-22 Intel Corporation Instructions and Logic for Even and Odd Vector Get Operations
US10338920B2 (en) * 2015-12-18 2019-07-02 Intel Corporation Instructions and logic for get-multiple-vector-elements operations
US20170177354A1 (en) 2015-12-18 2017-06-22 Intel Corporation Instructions and Logic for Vector-Based Bit Manipulation
US9946541B2 (en) * 2015-12-18 2018-04-17 Intel Corporation Systems, apparatuses, and method for strided access
US10467006B2 (en) * 2015-12-20 2019-11-05 Intel Corporation Permutating vector data scattered in a temporary destination into elements of a destination register based on a permutation factor
US10565207B2 (en) * 2016-04-12 2020-02-18 Hsilin Huang Method, system and program product for mask-based compression of a sparse matrix
US10331830B1 (en) * 2016-06-13 2019-06-25 Apple Inc. Heterogeneous logic gate simulation using SIMD instructions
US10592468B2 (en) * 2016-07-13 2020-03-17 Qualcomm Incorporated Shuffler circuit for lane shuffle in SIMD architecture
US10169040B2 (en) * 2016-11-16 2019-01-01 Ceva D.S.P. Ltd. System and method for sample rate conversion
CN106775587B (zh) * 2016-11-30 2020-04-14 上海兆芯集成电路有限公司 计算机指令的执行方法以及使用此方法的装置
EP3336692B1 (en) 2016-12-13 2020-04-29 Arm Ltd Replicate partition instruction
EP3336691B1 (en) * 2016-12-13 2022-04-06 ARM Limited Replicate elements instruction
US9959247B1 (en) 2017-02-17 2018-05-01 Google Llc Permuting in a matrix-vector processor
US10140239B1 (en) 2017-05-23 2018-11-27 Texas Instruments Incorporated Superimposing butterfly network controls for pattern combinations
US11194630B2 (en) 2017-05-30 2021-12-07 Microsoft Technology Licensing, Llc Grouped shuffling of partition vertices
US10970081B2 (en) * 2017-06-29 2021-04-06 Advanced Micro Devices, Inc. Stream processor with decoupled crossbar for cross lane operations
CN109324981B (zh) * 2017-07-31 2023-08-15 伊姆西Ip控股有限责任公司 高速缓存管理系统和方法
US10460416B1 (en) * 2017-10-17 2019-10-29 Xilinx, Inc. Inline image preprocessing for convolution operations using a matrix multiplier on an integrated circuit
US10891274B2 (en) 2017-12-21 2021-01-12 International Business Machines Corporation Data shuffling with hierarchical tuple spaces
US10956125B2 (en) 2017-12-21 2021-03-23 International Business Machines Corporation Data shuffling with hierarchical tuple spaces
US11789734B2 (en) * 2018-08-30 2023-10-17 Advanced Micro Devices, Inc. Padded vectorization with compile time known masks
US10620958B1 (en) 2018-12-03 2020-04-14 Advanced Micro Devices, Inc. Crossbar between clients and a cache
CN109783054B (zh) * 2018-12-20 2021-03-09 中国科学院计算技术研究所 一种rsfq fft处理器的蝶形运算处理方法及系统
US11200239B2 (en) 2020-04-24 2021-12-14 International Business Machines Corporation Processing multiple data sets to generate a merged location-based data set
KR102381644B1 (ko) * 2020-11-27 2022-04-01 한국전자기술연구원 고속 이차원 FFT 신호처리를 위한 데이터 정렬 방법 및 이를 적용한 SoC
US20220197974A1 (en) * 2020-12-22 2022-06-23 Intel Corporation Processors, methods, systems, and instructions to select and store data elements from two source two-dimensional arrays indicated by permute control elements in a result two-dimensional array
CN114297138B (zh) * 2021-12-10 2023-12-26 龙芯中科技术股份有限公司 向量混洗方法、处理器及电子设备
CN115061731B (zh) * 2022-06-23 2023-05-23 摩尔线程智能科技(北京)有限责任公司 混洗电路和方法、以及芯片和集成电路装置

Family Cites Families (84)

* Cited by examiner, † Cited by third party
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
FR2666472B1 (fr) 1990-08-31 1992-10-16 Alcatel Nv Systeme de memorisation temporaire d'information comprenant une memoire tampon enregistrant des donnees en blocs de donnees de longueur fixe ou variable.
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
JP2642039B2 (ja) 1992-05-22 1997-08-20 インターナショナル・ビジネス・マシーンズ・コーポレイション アレイ・プロセッサ
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
US5568415A (en) 1993-02-19 1996-10-22 Digital Equipment Corporation Content addressable memory having a pair of memory cells storing don't care states for address translation
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
US5399135A (en) 1993-12-29 1995-03-21 Azzouni; Paul Forearm workout bar
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
US6275834B1 (en) 1994-12-01 2001-08-14 Intel Corporation Apparatus for performing packed shift operations
US5819101A (en) 1994-12-02 1998-10-06 Intel Corporation Method for packing a plurality of packed data elements in response to a pack instruction
US5636352A (en) 1994-12-16 1997-06-03 International Business Machines Corporation Method and apparatus for utilizing condensed instructions
TW388982B (en) 1995-03-31 2000-05-01 Samsung Electronics Co Ltd Memory controller which executes read and write commands out of order
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
CN1264085C (zh) 1995-08-31 2006-07-12 英特尔公司 一种用于执行多媒体应用的操作的装置、系统和方法
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
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
US6061521A (en) * 1996-12-02 2000-05-09 Compaq Computer Corp. Computer having multimedia operations executable as two distinct sets of operations within a single instruction cycle
DE19654846A1 (de) 1996-12-27 1998-07-09 Pact Inf Tech Gmbh Verfahren zum selbständigen dynamischen Umladen von Datenflußprozessoren (DFPs) sowie Bausteinen mit zwei- oder mehrdimensionalen programmierbaren Zellstrukturen (FPGAs, DPGAs, o. dgl.)
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
US6211892B1 (en) 1998-03-31 2001-04-03 Intel Corporation System and method for performing an intra-add operation
US6307553B1 (en) 1998-03-31 2001-10-23 Mohammad Abdallah System and method for performing a MOVHPS-MOVLPS instruction
US6041404A (en) 1998-03-31 2000-03-21 Intel Corporation Dual function system and method for shuffling packed data elements
US6122725A (en) * 1998-03-31 2000-09-19 Intel Corporation Executing partial-width packed data instructions
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
US5996057A (en) * 1998-04-17 1999-11-30 Apple Data processing system and method of permutation with replication within a vector register file
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
JP3869947B2 (ja) * 1998-08-04 2007-01-17 株式会社日立製作所 並列処理プロセッサ、および、並列処理方法
US20020002666A1 (en) * 1998-10-12 2002-01-03 Carole Dulong Conditional operand selection using mask operations
US6405300B1 (en) * 1999-03-22 2002-06-11 Sun Microsystems, Inc. Combining results of selectively executed remaining sub-instructions with that of emulated sub-instruction causing exception in VLIW processor
US6484255B1 (en) 1999-09-20 2002-11-19 Intel Corporation Selective writing of data elements from packed data based upon a mask using predication
US6446198B1 (en) 1999-09-30 2002-09-03 Apple Computer, Inc. Vectorized table lookup
US6546480B1 (en) 1999-10-01 2003-04-08 Hitachi, Ltd. Instructions for arithmetic operations on vectored data
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
WO2001069938A1 (en) 2000-03-15 2001-09-20 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 엘지전자 주식회사 다중 후보를 이용한 움직임 벡터 병합 탐색 방법
US7162607B2 (en) * 2001-08-31 2007-01-09 Intel Corporation Apparatus and method for a data storage device with a plurality of randomly located data
US7685212B2 (en) 2001-10-29 2010-03-23 Intel Corporation Fast full search motion estimation with SIMD merge instruction
US20040054877A1 (en) 2001-10-29 2004-03-18 Macy William W. Method and apparatus for shuffling data
US7272622B2 (en) 2001-10-29 2007-09-18 Intel Corporation Method and apparatus for parallel shift right merge of data
US7631025B2 (en) * 2001-10-29 2009-12-08 Intel Corporation Method and apparatus for rearranging data between multiple registers
US7739319B2 (en) 2001-10-29 2010-06-15 Intel Corporation Method and apparatus for parallel table lookup using SIMD instructions
US7343389B2 (en) * 2002-05-02 2008-03-11 Intel Corporation Apparatus and method for SIMD modular multiplication
US6914938B2 (en) 2002-06-18 2005-07-05 Motorola, Inc. Interlaced video motion estimation

Also Published As

Publication number Publication date
US20130007416A1 (en) 2013-01-03
EP1639452B1 (en) 2009-09-09
US20120272047A1 (en) 2012-10-25
CN101620525B (zh) 2014-01-29
RU2006102503A (ru) 2006-06-27
TWI270007B (en) 2007-01-01
US9477472B2 (en) 2016-10-25
US20150121039A1 (en) 2015-04-30
US20110029759A1 (en) 2011-02-03
JP2007526536A (ja) 2007-09-13
JP5567181B2 (ja) 2014-08-06
JP2011138541A (ja) 2011-07-14
CN100492278C (zh) 2009-05-27
WO2005006183A2 (en) 2005-01-20
US8688959B2 (en) 2014-04-01
US8225075B2 (en) 2012-07-17
KR20060040611A (ko) 2006-05-10
DE602004023081D1 (de) 2009-10-22
ATE442624T1 (de) 2009-09-15
US10152323B2 (en) 2018-12-11
US20040054877A1 (en) 2004-03-18
US9229719B2 (en) 2016-01-05
WO2005006183A3 (en) 2005-12-08
CN1813241A (zh) 2006-08-02
US9229718B2 (en) 2016-01-05
JP5490645B2 (ja) 2014-05-14
US8214626B2 (en) 2012-07-03
US20150154023A1 (en) 2015-06-04
JP2010282649A (ja) 2010-12-16
EP1639452A2 (en) 2006-03-29
JP2013229037A (ja) 2013-11-07
US20170039066A1 (en) 2017-02-09
JP5535965B2 (ja) 2014-07-02
US20090265523A1 (en) 2009-10-22
KR100831472B1 (ko) 2008-05-22
TW200515279A (en) 2005-05-01
CN101620525A (zh) 2010-01-06
HK1083657A1 (en) 2006-07-07
RU2316808C2 (ru) 2008-02-10

Similar Documents

Publication Publication Date Title
JP4607105B2 (ja) データをシャッフルするための方法及び装置
US7739319B2 (en) Method and apparatus for parallel table lookup using SIMD instructions
JP7052171B2 (ja) プロセッサ、システム及び方法
US7631025B2 (en) Method and apparatus for rearranging data between multiple registers
JP4480997B2 (ja) Simd整数乗算上位丸めシフト
JP4697639B2 (ja) ドット積演算を行うための命令および論理
US7725521B2 (en) Method and apparatus for computing matrix transformations
JP6508850B2 (ja) プロセッサ、方法、システム、装置、コンピュータプログラムおよびコンピュータ可読記録媒体

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20080902

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080930

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090105

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20090331

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090629

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20090730

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091104

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100204

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100511

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100811

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: 20100907

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: 20101006

R150 Certificate of patent or registration of utility model

Ref document number: 4607105

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131015

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250