説明

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

【課題】効果的にデータをシャッフルするための方法及び装置を提供すること。
【解決手段】一実施例の方法は、L個のデータ要素を有する第1オペランドとL個の制御要素を有する第2オペランドとを受け取ることからなる。各制御要素に対して、当該制御要素により指定された第1オペランドデータ要素からのデータは、それのゼロクリアフィールドが設定されていない場合に関連付けされた結果のデータ要素位置にシャッフルされ、それのゼロクリアフィールドが設定されていない場合、関連付けされた結果のデータ要素位置にゼロが配置される。

【発明の詳細な説明】
【技術分野】
【0001】
本出願は、2001年10月29日に出願された米国特許出願第09/952,891号「An Apparatus And Method For Efficient Filtering And Convolution Of Content Data」の一部継続出願である。
【0002】
本出願は、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」に関連する。
【0003】
本発明は、一般にマイクロプロセッサ及びコンピュータシステムの技術分野に関する。より詳細には、本発明は、データをシャッフルするための方法及び装置に関する。
【背景技術】
【0004】
コンピュータシステムが、私たちの社会においてますます普及してきている。コンピュータの処理能力は、広範な分野における労働者の効率性と生産性を向上させてきた。コンピュータを購入及び主有する費用が下落し続けるに従い、ますます多くの消費者がより新しく高速のマシーンを利用することが可能となってきている。さらに、多数の人々がその自由性によりノートブックコンピュータを使用することを享有している。モバイルコンピュータは、ユーザがオフィスを離れたり、旅行に出かけたりするとき、容易にデータを移送し、作業することを可能にする。このシナリオは、マーケティングスタッフ、企業役員及び学生に大変なじみのあるものであろう。
【0005】
プロセッサ技術の進歩に従い、より新しいソフトウェアコードがプロセッサを備えたマシーン上で実行されるため生成されている。ユーザは一般に、使用されるソフトウェアのタイプに関係なく、ユーザのコンピュータからより高いパフォーマンスを期待及び要求する。そのような問題の1つは、プロセッサ内で実際に実行される命令及び処理のタイプから生じ得るものである。あるタイプの処理は、必要とされる回路のタイプ及び/または処理の複雑さに基づき、完了するのにより多くの時間を要する。これは、特定の複合処理がプロセッサ内で実行される方法を最適化する機会を提供する。
【0006】
メディアアプリケーションは、10年以上の間にマイクロプロセッサの進歩の原動力となってきた。実際、近年のほとんどの計算力向上は、メディアアプリケーションにより駆動されてきた。大きな進歩が娯楽性を高めた教育及び通信のため企業レベルで見られてきたが、上記向上は消費者レベル内でも顕著に行われてきている。にもかかわらず、将来的なメディアアプリケーションは、より高い計算要求を求めるであろう。この結果、将来のパーソナルコンピュータの計算は、使いやすさと共に、オーディオビジュアル効果においてさらに充実したものとなり、より重要なことには、計算が通信と結び付くことになるであろう。
【0007】
従って、画像の表示と共に、コンテンツと総称される音声及び映像の再生が、現在の計算装置のより一般的な用途となりつつある。フィルタリング処理と畳み込み処理は、画像、音声、映像データなどのコンテンツデータに対して実行される最も一般的な処理の一部である。このような処理は大きな計算量を要求するが、SIMD(Single Instruction Multiple Data)レジスタなどの各種データ記憶装置を用いた効率的な実現形態を通じて利用可能なハイレベルなデータ並列化を提供する。いくつかの現在のアーキテクチャはまた、命令スループットを最小化し、算術処理にデータを指示するのに必要とされるクロックサイクルのサイクル数を大きく増大させる不必要なデータタイプの変更を求める。
【発明の概要】
【発明が解決しようとする課題】
【0008】
本発明の課題は、上記問題点に鑑み、効果的にデータをシャッフルするための方法及び装置を提供することである。
【課題を解決するための手段】
【0009】
上記課題を解決するため、本発明の一態様は、L個のデータ要素を有する第1オペランドとL個の制御要素を有する第2オペランドとを受け取るステップと、各制御要素に対して、該制御要素により指定される第1オペランドデータ要素からのデータを、それのゼロクリアフィールドが設定されていない場合、関連付けされた結果のデータ要素位置にシャッフルし、それのゼロクリアフィールドが設定されていない場合、前記関連付けされた結果のデータ要素位置にゼロを配置するステップとから構成されることを特徴とする方法に関する。
【発明の効果】
【0010】
本発明によると、効果的にデータをシャッフルするための方法及び装置を提供することができる。
【図面の簡単な説明】
【0011】
【図1A】図1Aは、本発明の一実施例によるデータをシャッフルするための命令を実行する実行ユニットを含むプロセッサにより構成されるコンピュータシステムのブロック図である。
【図1B】図1Bは、本発明の他の実施例による他の一例となるコンピュータシステムのブロック図である。
【図1C】図1Cは、本発明の他の実施例による他の一例となるコンピュータシステムのブロック図である。
【図2】図2は、本発明によるデータシャッフル処理を実行するロジック回路を有する一実施例のプロセッサのマイクロアーキテクチャのブロック図である。
【図3】図3A、3B、3Cは、本発明による各種実施例によるシャッフルマスクを示す。
【図4A】図4Aは、本発明の一実施例によるマルチメディアレジスタの各種packedデータタイプ表現を示す。
【図4B】図4Bは、他の実施例によるpackedデータタイプを示す。
【図4C】図4Cは、シャッフル命令の処理符号化(オペコード)フォーマットの一実施例を示す。
【図4D】図4Dは、他の処理符号化フォーマットを示す。
【図4E】図4Eは、さらなる他の処理符号化フォーマットを示す。
【図5】図5は、本発明によるシャッフルマスクに基づくデータオペランドに対するシャッフル処理を実行するロジックの一実施例のブロック図である。
【図6】図6は、本発明によるデータシャッフリング処理を実行する回路の一実施例のブロック図である。
【図7】図7は、本発明の一実施例によるバイト長データ要素に対するデータシャッフルの処理を示す。
【図8】図8は、本発明の他の実施例によるワード長データ要素に対するデータシャッフル処理の処理を示す。
【図9】図9は、データをシャッフルする方法の一実施例を示すフローチャートである。
【図10A】図10Aは、SIMD命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。
【図10B】図10Bは、SIMD命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。
【図10C】図10Cは、SIMD命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。
【図10D】図10Dは、SIMD命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。
【図10E】図10Eは、SIMD命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。
【図10F】図10Fは、SIMD命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。
【図10G】図10Gは、SIMD命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。
【図10H】図10Hは、SIMD命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。
【図11】図11は、SIMD命令を用いたテーブル検索を実行するための方法の一実施例を示すフローチャートである。
【図12】図12は、テーブル検索を実行するための方法の他の実施例を示すフローチャートである。
【図13A】図13Aは、複数のレジスタ間においてデータを再構成するためのアルゴリズムを示す。
【図13B】図13Bは、複数のレジスタ間においてデータを再構成するためのアルゴリズムを示す。
【図13C】図13Cは、複数のレジスタ間においてデータを再構成するためのアルゴリズムを示す。
【図14】図14は、複数のレジスタ間においてデータを再構成するための方法の一実施例を示すフローチャートである。
【図15A】図15Aは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。
【図15B】図15Bは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。
【図15C】図15Cは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。
【図15D】図15Dは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。
【図15E】図15Eは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。
【図15F】図15Fは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。
【図15G】図15Gは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。
【図15H】図15Hは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。
【図15I】図15Iは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。
【図15J】図15Jは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。
【図15K】図15Kは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。
【図16】図16は、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするための方法の一実施例を示すフローチャートである。
【発明を実施するための形態】
【0012】
データをシャッフルするための方法及び装置が開示される。SIMD命令を用いてパラレルなテーブル検索のための方法及び装置がまた開示される。複数のレジスタ間においてデータを再構成するための方法及び装置がまた開示される。ここで説明される実施例は、マイクロプロセッサに関して説明されるが、それに限定されるものではない。以下の実施例はプロセッサに関して説明されるが、他の実施例は、他のタイプの集積回路やロジック装置に適用可能である。本発明の同様の技術及び教示が、より大きなパイプラインスループット及びパフォーマンス向上を可能にする他のタイプの回路または半導体装置に容易に適用することができる。本発明の教示は、データ操作を実行する任意のプロセッサまたはマシーンに適用可能である。しかしながら、本発明は256ビット、128ビット、64ビット、32ビットあるいは16ビットデータ処理を実行するプロセッサまたはマシーンに限定されるものではなく、データのシャッフリングが必要とされる任意のプロセッサ及びマシーンに適用可能である。
【0013】
以下の説明では、本発明の完全なる理解を提供するため、多数の具体的詳細が与えられる。しかしながら当業者は、これらの具体的詳細が本発明を実現するために必要ではないということを理解するであろう。他の例では、周知の電気的構成及び回路は、本発明を不必要に不明りょうとしないように、詳細には与えられていない。さらに、以下の説明は具体例を与え、添付された図面は例示のための各種具体例を示す。しかしながら、これらの具体例は、本発明のすべての可能な実現形態の包括的なリストを提供するためのものではなく、単に本発明の具体例を提供するためのものであるため、限定的に解釈されるべきではない。
【0014】
一実施例では、本発明の方法は、機械実行可能な命令により実現される。当該命令は、プログラムされる汎用または特殊用途向けプロセッサに本発明の各ステップを実行させるのに使用可能である。あるいは、本発明の各ステップは、当該ステップを実行するための配線化されたロジックを有する特殊なハードウェアコンポーネントによって、または、プログラムされたコンピュータコンポーネント及びカスタムハードウェアコンポーネントの任意の組み合わせによって実行されてもよい。
【0015】
以下の具体例は実行ユニットやロジック回路に関して命令の処理及び配布を説明しているが、本発明の他の実施例はソフトウェアにより実現可能である。本発明は、本発明によるプロセスを実行するようコンピュータ(または他の電子装置)をプログラムするのに利用可能な命令を格納したマシーンまたはコンピュータ可読媒体を有するコンピュータプログラムプロダクツまたはソフトウェアとして提供されてもよい。そのようなソフトウェアがシステムのメモリ内に格納可能である。同様に、コードはネットワークを介して、または他のコンピュータ可読媒体を介して配布可能である。従って、機械可読媒体は、以下に限定されるものではないが、フロッピー(登録商標)ディスク、光ディスク、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)、磁気または光カード、フラッシュメモリ、インターネットを介した送信、電気、光、音響または他の形態の伝搬信号(搬送波、赤外線信号、デジタル信号など)など、マシーン(コンピュータなど)により読出し可能な形態により情報を格納または送信するための任意の機構を有するかもしれない。
【0016】
従って、コンピュータ可読媒体は、マシーン(コンピュータなど)により読出し可能な形態による電子命令または情報を格納または送信するのに適した任意のタイプの媒体/機械可読媒体を含む。さらに、本発明はまた、コンピュータプログラムプロダクツとしてダウンロードされてもよい。また、プログラムは、リモートコンピュータ(サーバなど)から要求元コンピュータ(クライアントなど)に転送されてもよい。プログラムの転送は、通信リンク(モデム、ネットワーク接続など)を介し搬送波や他の伝搬媒体に実現される電気、光、音響、または他の形態のデータ信号を介したものであってもよい。
【0017】
さらに、本発明による集積回路設計の実施例は、テープまたは他の機械可読媒体上のデータベースとして電子形式により通信または転送可能である。例えば、一実施例によるプロセッサの電子形式による集積回路設計は、コンピュータコンポーネントを取得するため工場を介し処理または製造可能である。他の例では、電子形式による集積回路は、マシーンによりコンピュータコンポーネントをシミュレートするよう処理可能である。従って、一部の実施例によるプロセッサの設計及び/または回路レイアウトプランは、機械可読媒体を介し配布可能であり、マシーンによる処理時にプロセッサをシミュレートする集積回路のシミュレーションまたは製造のため、回路に実現可能である。機械可読媒体はまた、他の実施例において本発明による所定の機能を表すデータを格納可能である。
【0018】
現在のプロセッサでは、いくつかの実行ユニットが各種コード及び命令を処理及び実行するのに利用される。すべての命令が等しく生成されるとは限らない。なぜなら、いくつかは素早く完了し、他のものは膨大な数のクロックサイクルを要する可能性があるためである。命令のスループットが高速化するほど、プロセッサの全体的パフォーマンスは向上する。従って、可能な限り高速かつ多数の命令を実行させることが効果的である。しかしながら、実行時間とプロセッサリソースに関して、より大きな複雑さを有し、より多くのものを必要とする命令が存在する。例えば、浮動小数点命令、ロード/ストア処理、データ移動などがあげられる。
【0019】
ますます多くのコンピュータシステムがインターネットやマルチメディアアプリケーションに利用されると、時間の経過と共に追加的なプロセッサのサポートが導入されてきた。例えば、SIMD(Single Instruction Multiple Data)整数/浮動小数点命令とSSE(Streaming SIMD Extension)は、特定のプログラムタスクを実行するのに必要とする命令の合計数を減少させる命令である。これらの命令は、複数のデータ要素に対するパラレル処理によりソフトウェアパフォーマンスをスピードアップすることが可能である。この結果、映像、音声及び画像処理を含む広範なアプリケーションにおいてパフォーマンス向上が実現可能である。マイクロプロセッサ及び同様のタイプのロジック回路におけるSIMD命令の実現は、通常はいくつかの発行を伴う。さらに、SIMD処理の複雑さは、しばしばデータを正確に処理及び操作するため、追加的な回路を必要性を生じさせる。
【0020】
本発明の実施例は、SIMD関連ハードウェアを利用するアルゴリズムとして、ゼロクリア(flush to zero)機能を有するpackedバイトシャッフル命令を実現する一手法を提供する。一実施例では、当該アルゴリズムは、各データ要素位置の制御マスクの値に基づき、特定のレジスタまたはメモリ位置からのデータをシャッフリングするコンセプトに基づくものである。packedバイトシャッフルの実施例は、データを再構成する多数のアプリケーションにおいて必要とされる命令数を減少するのに利用可能である。packedバイトシャッフル命令はまた、アラインされていないロードを有する任意のアプリケーションにも利用可能である。このシャッフル命令の実施例は、効率的な乗算加算処理のためデータを構成するフィルタリングに利用可能である。同様に、packedシャッフル命令は、データ及び小さな検索テーブルを順序付けするため、映像及び暗号化アプリケーションにおいて利用可能である。当該命令は、2以上のレジスタからのデータを合成するのに利用可能である。従って、本発明によるゼロクリア対応アルゴリズムによるpackedシャッフルの実施例は、全体的なパフォーマンスの重大な妥協なく、効率的にSIMD処理をサポートするためプロセッサにおいて実現可能である。
【0021】
本発明の実施例は、任意のサイズのデータを効率的に順序付け及び構成するため、ゼロクリア機能をpackedデータシャッフル命令(PSHUFB)に提供する。一実施例では、データはバイト粒度によりレジスタにおいてシャッフルまたは再構成される。バイトシャッフル処理は、シャッフル処理中、より大きなデータの内部におけるバイトの相対位置を維持することによって、バイトより大きなデータサイズを指示する。さらに、バイトシャッフル処理は、SIMDレジスタにおけるデータの相対位置を変更し、さらにデータを複製することが可能である。このPSHUFB命令は、第2ソースレジスタのシャッフル制御バイトの内容に従って、第1ソースレジスタからのバイトをシャッフルする。上記命令はデータを並び替えるが、シャッフルマスクは本実施例のシャッフル処理中には影響を受けず、変更もされない。一実現形態のニーモニック(mnemonic)は、「PSHUFBレジスタ1,レジスタ2/メモリ」であり、第1及び第2オペランドはSIMDレジスタである。しかしながら、第2オペランドのレジスタはまた、メモリ位置に置換可能である。第1オペランドは、シャッフルのためのソースデータを含む。本実施例では、第1オペランドのレジスタは、デスティネーションレジスタである。本発明による実施例はまた、位置変更に加えて、選択されたバイトをzeroに設定する機能を有する。
【0022】
第2オペランドは、シャッフルパターンを指定するため、シャッフル制御マスクバイト群を有する。ソースデータ要素を選択するのに用いられるビット数は、ソースオペランドのデータ要素の個数のlogである。例えば、128ビットレジスタの実施例におけるバイト数は16バイトである。16のlogは4である。従って、4ビット、すなわち1ニブルが必要とされる。以下のコードの[3:0]インデックスは4ビットを参照する。シャッフル制御バイトの最上位ビット(MSB)、本実施例ではビット7が設定されている場合、定数ゼロが結果のバイトに書き込まれる。第2オペランドのバイトIの最下位ニブル、マスクセットが整数Jを有する場合、シャッフル命令は、第1ソースレジスタのJ番目のバイトをデスティネーションレジスタのI番目のバイトにコピーさせる。以下において、128ビットオペランドに対するpackedバイトシャッフル処理の一実施例の例示的な擬似コードが与えられる。
【0023】
【表1】

同様に、以下は64ビットオペランドに対するpackedバイトシャッフル処理の他の実施例の一例となる擬似コードである。
【0024】
【表2】

この64ビットレジスタの実施例では、64ビットレジスタに8バイトあるとき、マスクの下位3ビットが利用される。8のlogは3である。上記コードのビット数は3ビットを参照している。他の実施例では、マスクのビット数は、ソースデータにおいて利用可能なデータ要素の個数に適応するよう可変とされる。例えば、下位5ビットを有するマスクは、256ビットレジスタにおいてデータ要素を選択するのに必要とされる。
【0025】
現在、SIMDにおいてデータを再構成することは、困難かつ退屈なことである。いくつかのアルゴリズムは、上記処理を実行するための実際の命令数より、算術処理のためにデータを構成するのにより多くの命令を要する。本発明によりpackedバイトシャッフル命令の実施例を実現することによって、データの再構成を実現するのに必要とされる命令数は、劇的に減少させることができる。例えば、packedバイトシャッフル命令の一実施例は、1バイトのデータを128ビットレジスタのすべての位置に配信することが可能である。レジスタにおけるデータの配信は、単一のデータアイテムが多数の係数と乗算されるフィルタリングアプリケーションにおいてしばしば利用される。当該命令がない場合、データバイトはそれのソースからフィルタリングされ、最下位バイト位置にシフトされる必要があるであろう。このとき、当該単一バイトは、まず1バイトとして複製され、その後、当該2バイトがダブルワードを形成するよう再び複製され、最後に当該ダブルワードがクワドワードを形成するよう複製される必要がある。これらすべての処理は、シングルpackedシャッフル命令と置換可能である。
【0026】
同様に、ビッグエンディアンとリトルエンディアン形式との間の変更など、128ビットレジスタのすべてのバイトの反転は、シングルpackedシャッフル命令により容易に実行可能である。これら極めてシンプルなパターンは、packedシャッフル命令が利用されなかった場合、いくつかの命令を必要とする一方、複雑またはランダムなパターンはさらに非効率な命令ルーチンを要求する。SIMDレジスタにおいてランダムバイトをリオーダするための最も直接的な手段は、当該バイトをバッファに書き込み、その後に整数バイトリード/ライトを用いて、それらをリオーダし、SIMDレジスタに読み戻すことである。これらすべてのデータ処理は長いコードシーケンスを必要とするが、シングルpackedシャッフル命令のみで十分である。必要とされる命令数を減少させることによって、同一の結果を生成するのに必要とされるクロックサイクル数は大きく減らされる。本発明の実施例はまた、シャッフル命令を用いてSIMD命令によりテーブルの複数の値にアクセスする。テーブルがレジスタの2倍のサイズである場合でさえ、本発明によるアルゴリズムは、整数処理と同様に命令ごとに1つのデータ要素より速く複数のデータ要素にアクセスすることを可能にする。
【0027】
図1Aは、本発明の一実施例によるデータをシャッフルするための命令を実行する実行ユニットを有するプロセッサにより構成される一例となるコンピュータシステムのブロック図である。システム100は、ここで説明される実施例などの本発明に従って、ロジック含む実行するユニットを用いてデータをシャッフルするアルゴリズムを実行するプロセッサ102などのコンポーネントを含む。システム100は、他のシステム(他のマイクロプロセッサを有するPC、エンジニアリングワークステーション、セットトップボックスなどを含む)もまた利用されてもよいが、カリフォルニア州サンタクララのインテルコーポレイションから入手可能なPENTIUM(登録商標)III、PENTIUM(登録商標)4、Celeron(登録商標)、XeonTM、Itanium(登録商標)、XScaleTM及び/またはStrongARMTMマイクロプロセッサに基づく処理システムを表す。一実施例では、サンプルシステム100は、他のオペレーティングシステム(UNIX(登録商標)やLinuxなど)、埋め込みソフトウェア及び/またはグラフィカルユーザインタフェースもまた利用されてもよいが、ワシントン州のレッドモンドのマイクロソフトコーポレイションから入手可能なWINDOWSTMオペレーティングシステムの一バージョンを実行するようにしてもよい。従って、本発明は、ハードウェア回路及びソフトウェアの任意の具体的組み合わせに限定されるものではない。
【0028】
本拡張は、コンピュータシステムに限定されるものではない。本発明の他の実施例が、携帯型装置や埋め込みアプリケーションアドの他の装置において利用可能である。携帯型装置のいくつかの例として、携帯電話、インターネットプロトコル装置、デジタルカメラ、携帯情報端末(PDA)及び携帯型PCがあげられる。埋め込みアプリケーションとして、マイクロコントローラ、デジタル信号プロセッサ(DSP)、チップ上のシステム、ネットワークコンピュータ(NetPC)、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク(WAN)スイッチ、またはオペランドに対し整数シャッフル処理を実行する他の何れかのシステムがあげられる。さらに、いくつかのアーキテクチャは、マルチメディアアプリケーションの効率性を向上させるため、命令が複数のデータに対して同時に実行可能となるよう実現されている。データのタイプ及びデータ量が増大するに従って、コンピュータ及びそのプロセッサは、より効率的にデータを操作するよう拡張される必要がある。
【0029】
図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の要素は、当業者には周知のそれらの従来技術による機能を実行する。
【0030】
一実施例では、プロセッサ102は、レベル1(L1)内部キャッシュメモリ104を有する。アーキテクチャに応じて、プロセッサ102は、複数レベルの内部キャッシュまたは単独の内部キャッシュを有することも可能である。あるいは他の実施例では、キャッシュメモリは、プロセッサ102の外部に配置することも可能である。他の実施例はまた、特定の実現形態及びニーズに応じて、内部キャッシュと外部キャッシュの両方の組み合わせを有することが可能である。レジスタファイル106は、整数レジスタ、浮動小数点レジスタ、状態レジスタ及び命令ポインタレジスタを含む各種レジスタに異なるタイプのデータを格納することが可能である。
【0031】
整数及び浮動小数点処理を実行するロジックを含む実行ユニット108がまた、プロセッサ102内に配置される。プロセッサ102はまた、特定のマイクロ命令のためのマイクロコードを格納するマイクロコード(ucode)ROMを有する。本実施例では、実行ユニット108は、packed命令セット109を処理するロジックを有する。一実施例では、packed命令セット109は、データを整理するためpackedシャッフル命令を有する。命令を実行する付属の回路と共に、packed命令セット109を汎用プロセッサ102の命令セットに含めることによって、多数のマルチメディアアプリケーションにより用いられる処理は、汎用プロセッサ102のpackedデータを用いて実行されるかもしれない。従って、多くのマルチメディアプリケーションは、packedデータに対する処理を実行するため、プロセッサのデータバスの幅全体を用いることにより、より効率的に実行及び高速化することが可能である。これにより、1回に1つのデータ要素に対して1以上の処理を実行するため、プロセッサのデータバスを介しより小さなデータユニットを転送する必要性を解消することができる。
【0032】
実行ユニット108の他の実施例がまた、マイクロコントローラ、埋め込みプロセッサ、グラフィック装置、DSP及び他のタイプのロジック回路において利用可能である。システム100は、メモリ120を有する。メモリ120は、DRAM(Dynamic Random Access Memory)装置、SRAM(Static Random Access Memory)装置、フラッシュメモリ装置、または他の記憶装置とすることが可能である。メモリ120は、プロセッサ102により実行可能なデータ信号により表されるデータ及び/または命令を格納することが可能である。
【0033】
システムロジックチップ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と接続される。
【0034】
システム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装置、フラッシュメモリ装置、または他の大容量記憶装置から構成することが可能である。
【0035】
システムの他の実施例では、シャッフル命令によりアルゴリズムを実行する実行ユニットが、チップ上のシステムにより利用可能である。チップ上のシステムの一実施例は、プロセッサとメモリとから構成される。そのようなシステムのメモリは、フラッシュメモリである。フラッシュメモリは、プロセッサ及び他のシステムコンポーネントと同一のダイ上に配置することが可能である。さらに、メモリコントローラやグラフィックコントローラなどの他のロジックブロックもまた、チップ上のシステムに配置することが可能である。
【0036】
図1Bは、本発明の原理を実現するデータ処理システム140の他の実施例を示す。データ処理システム140の一実施例では、インテルXScaleTM技術を有するインテル(登録商標)PCA(Personal Internet Client Architecture)アプリケーションプロセッサである(developer.intel.comにおいてワールドワイドウェブ上に説明されるように)。ここで開示される実施例は、本発明の範囲から逸脱することなく他の処理システムにより利用可能であるということは、当業者には容易に理解されるであろう。
【0037】
コンピュータシステム140は、シャッフルを含むSIMD処理を実行可能な処理コア159から構成される。一実施例では、処理コア159は、以下に限定されるものではないが、CISC、RISCまたはVLIWタイプアーキテクチャを含む任意のタイプのアーキテクチャの処理ユニットを表す。処理コア159はまた、1以上の処理技術において製造に適したものであってもよいし、十分詳細に機械可読媒体上に表すことにより、製造を容易にするのに適したものであってもよい。
【0038】
処理コア159は、実行ユニット142、レジスタファイル群145及びデコーダ144から構成される。処理コア159はまた、本発明の理解に不要な追加的回路(図示せず)を有する。実行ユニット142は、処理コア159により受信された命令を実行するのに利用される。典型的なプロセッサ命令を認識するのに加えて、実行ユニット142は、packedデータ形式に対する処理を実行するため、packed命令セット143の命令を認識することが可能である。packed命令セット143は、シャッフル処理をサポートする命令を有し、さらに他のpacked命令を有するようにしてもよい。実行ユニット142は、内部バスによりレジスタファイル145に接続される。レジスタファイル145は、データを含む情報を格納するため、処理コア159上の格納領域を表す。前述のように、packedデータを格納するのに用いられる格納領域は重要なものではないということが理解されるであろう。実行ユニット142は、デコーダ144に接続される。デコーダ144は、処理コア159により受信される命令を制御信号及び/またはマイクロコードエントリポイントに復号するのに利用される。上記制御信号及び/またはマイクロコードエントリポイントに応答して、実行ユニット142は、適切な処理を実行する。
【0039】
処理コア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を含むものであってもよい。
【0040】
データ処理システム140の一実施例は、シャッフル処理を含むSIMD処理を実行可能な処理コア159と、モバイル、ネットワーク及び/またはワイアレス通信を提供する。処理コア159は、ウォルシュ・アダマール変換、高速フーリエ変換(FFT)、離散コサイン変換(DCT)などの離散変換及びそれらの逆変換、色空間変換、映像符号化動き予測または映像復号化動き補償などの圧縮/解凍技術、及びPCM(Pulse Coded Modulation)などの変調/復調(MODEM)機能を含む各種音声、映像、画像処理及び通信アルゴリズムによりプログラムされてもよい。
【0041】
図1Cは、SIMDシャッフル処理を実行可能なデータ処理システムのさらなる他の実施例を示す。他の実施例によると、データ処理システム160は、メインプロセッサ166、SIMDコプロセッサ161、キャッシュメモリ167及び入出力システム168を有するようにしてもよい。入出力システム168は任意的に、ワイアレスインタフェース169に接続されてもよい。SIMDコプロセッサ161は、データシャッフルを含むSIMD処理を実行することが可能である。処理コア170は、1以上の処理技術において製造に適したものであり、十分詳細に機械可読媒体上に表すことにより、処理コア170を含むデータ処理システム160のすべてまたは一部の製造を容易にするのに適したものであってもよい。
【0042】
一実施例では、SIMコプロセッサ161は、実行ユニット162とレジスタファイル群164を有する。メインプロセッサ165の一実施例は、実行ユニット162による実行のため、SIMDシャッフル命令を含む命令セット163の命令を認識するためのデコーダ165を有する。他の実施例では、SIMDコプロセッサ161はまた、命令セット163の命令を復号するため、デコーダ165Bの少なくとも一部を有する。処理コア170はまた、本発明の理解には不要なさらなる回路(図示せず)を有する。
【0043】
処理に関して、メインプロセッサ166は、入出力システム168とキャッシュメモリ167とのやりとりを含む一般的なデータ処理を制御するデータ処理命令のストリームを実行する。SIMDコプロセッサ命令は、データ処理命令のストリームに埋め込まれる。メインプロセッサ166のデコーダ165は、付属のSIMDコプロセッサ161により実行されるべきタイプとして、上記SIMDコプロセッサ命令を認識する。従って、メインプロセッサ166は、これらのSIMDコプロセッサ命令(またはSIMDコプロセッサ命令を表す制御信号)を、それらが付属の何れかのSIMDコプロセッサにより受け取られるコプロセッサバス166を介し発行する。この場合、SIMDコプロセッサ161は、それに対する受信したSIMDコプロセッサ命令を受付及び実行するであろう。
【0044】
SIMDコプロセッサ命令による処理のため、データがワイアレスインタフェース169を介し受信される。例えば、音声通信が、デジタル信号形式により受信され、音声通信を表すデジタル音声サンプルを再生成するようSIMDコプロセッサ命令により処理されてもよい。他の例では、圧縮された音声及び/映像が、デジタルビットストリーム形式で受信され、デジタル音声サンプル及び/または動き映像フレームを再生成するようSIMDコプロセッサ命令により処理される。処理コア170の一実施例では、メインプロセッサ166とSIMDコプロセッサ161が、SIMDシャッフル命令を含む命令セット163の命令を認識するため、実行ユニット162、レジスタファイル群164及びデコーダ165からなる単一の処理コア170に一体化される。
【0045】
図2は、本発明によるシャッフル処理を実行するロジック回路を有する一実施例によるプロセッサ200のマイクロアーキテクチャのブロック図である。シャッフル処理はまた、上述の説明と同様に、packedデータシャッフル処理及びpackedシャッフル命令と呼ばれてもよい。シャッフル命令の一実施例では、当該命令は、あるバイト粒度によりpackedデータをシャッフルすることが可能である。この命令はまた、PSHUFBまたはpackedシャッフルバイトと呼ぶことも可能である。他の実施例では、シャッフル命令はまた、ワード、ダブルワード、クアドワードなどのサイズを有するデータ要素に対して処理するよう実現可能である。インオーダフロントエンド201は、実行されるマクロ命令をフェッチし、プロセッサパイプラインにおける以降の利用のためそれらを用意するプロセッサ200の一部である。本実施例のフロントエンド201は、複数のユニットを含む。命令プリフェッチャ226は、メモリからマクロ命令をフェッチし、それらを命令デコーダ228に供給し、次に命令デコーダ228がそれらをマシーンが実行方法を知っているマイクロ命令またはマイクロ処理(マイクロopまたはuopとも呼ばれる)と呼ばれるプリミティブに復号する。トレースキャッシュ230は、復号されたuopを抽出し、それらをプログラムオーダードシーケンスに構成するか、あるいは実行のためuopキュー234にトレースする。トレースキャッシュ230が複合マクロ命令に遭遇すると、マイクロコードROM232は、当該処理を完了させるのに必要なuopを提供する。
【0046】
多数のマクロ命令が1つのマイクロopに変換され、その他は完全な処理を完了させるため複数のマイクロopを必要とする。本実施例では、5以上のマイクロopがマクロ命令を完了させるのに必要とされる場合、デコーダ228は、マクロ命令を実行するのにマイクロコードROM232にアクセスする。一実施例では、packedシャッフル命令が命令デコーダ228における処理のため、少数のマイクロopに復号することが可能である。他の実施例では、packedデータシャッフルアルゴリズムの命令は、当該処理を実現するのにいくつかのマイクロopが必要な場合、マイクロコードROM232に格納可能である。トレースキャッシュ230は、マイクロコードROM232のシャッフルアルゴリズムのためのマイクロコードシーケンスを読み出すため、正しいマイクロ命令ポインタを決定するためのエントリポイントPLA(Programmble Logic Array)を参照する。マイクロコードROM232が現在のマクロ命令に対するマイクロopのシーケンス処理を終了した後、マシーンのフロントエンド201は、トレースキャッシュ230からマイクロopのフェッチを再開する。
【0047】
一部のSIMD及び他のマルチメディアタイプの命令は、複合処理とみなされる。ほとんどの浮動小数点関連命令は、複合命令である。また命令デコーダ228が複合マクロ命令に遭遇すると、マイクロコードROM232は、マクロ命令のマイクロコードシーケンスを抽出するため、適切な位置でアクセスされる。当該マクロ命令を実行するのに必要とされる各種マイクロopは、適切な整数及び浮動小数点実行ユニットにおける実行のため、アウトオブオーダ実行エンジン203に通信される。
【0048】
アウトオブオーダ実行エンジン203では、マイクロ命令が実行のため用意される。アウトオブオーダ実行ロジックは、パイプラインに進み、実行のスケジューリングがされたとき、パフォーマンスを最適化するようマイクロ命令のフローを平坦化及びリオーダするためのいくつかのバッファを有する。アロケータロジックは、各uopが実行に要するマシーンバッファとリソースを割当てる。レジスタリネーミングロジックは、ロジックレジスタをレジスタファイルのエントリにリネームする。アロケータはまた、メモリスケジューラ、高速スケジューラ202、低速/汎用浮動小数点スケジューラ204及びシンプル浮動小数点スケジューラ206の命令スケジューラの前に、メモリ処理の1つと非メモリ処理の1つの2つのuopキューの1つにおける各uopに対するエントリを割当てる。uopスケジューラ202、204及び206は、それらに従属する入力レジスタオペランドソースの準備及びそれの処理を完了させるのにuopが必要とする実行リソースの利用性に基づき、uopの実行が準備できた時点を判断する。本実施例の高速スケジューラ202は、メインクロックサイクルの各半分についてスケジューリング可能であり、その他のスケジューラは、メインプロセッサクロックサイクルごとに1回のみスケジューリングを行うことが可能である。スケジューラは、実行されるuopをスケジューリングするため、ディスパッチポートを調停する。
【0049】
レジスタファイル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ビット長のエントリを有する。
【0050】
実行ブロック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データオペランドに対して実行可能である。
【0051】
本実施例では、uopスケジューラ202、204及び206は、親ロードの実行終了前に従属する処理をディスパッチする。uopがプロセッサ200において投機的にスケジューリング及び実行されるとき、プロセッサ200はまた、メモリミスを処理するロジックを有する。データロードがデータキャッシュにおいてミスした場合、一時的に誤ったデータをスケジュールに残したパイプラインに従属した処理が存在し得る。リプレイ機構は、誤ったデータを利用した命令を追跡及び再実行する。従属した処理のみがリプレイされる必要があり、独立した処理は完了を許可される。プロセッサの一実施例のスケジューラ及びリプレイ機構はまた、シャッフル処理用の命令シーケンスを取得するよう構成される。
【0052】
ここでは、「レジスタ」という用語は、オペランドを特定するためのマクロ命令の一部として用いられるオンボードプロセッサ格納位置を参照するのに用いられる。言い換えると、ここで参照されるレジスタは、プロセッサの外部から可視的なものである(プログラマーの観点から)。しかしながら、一実施例のレジスタは、特定タイプの回路を意味するものとして限定されるべきではない。むしろ、一実施例のレジスタは、データの格納及び提供、及びここで説明される機能の実行が可能でありさえすればよい。ここで説明されるレジスタは、専用の物理的レジスタ、レジスリネーム処理を用いた動的割当された物理的レジスタ、専用及び動的割当物理的レジスタの組み合わせなど各種技術を利用して、プロセッサ内の回路により実現可能である。一実施例では、整数レジスタは、32ビット整数データを格納する。一実施例のレジスタファイルはまた、packedデータ用の8つのマルチメディアSIMDレジスタを有する。以下の説明のため、レジスタは、カリフォルニア州サンタクララのインテルコーポレイションのMMX技術に対応したマイクロプロセッサにおける64ビット長MMXTMレジスタ(一部の例では、「mm」レジスタとも呼ばれる)などのpackedデータを保持するよう構成されたデータレジスタであると理解される。整数と浮動小数点形式の両方で利用可能なこれらのMMXレジスタは、SIMD及びSSE命令を伴うpackedデータ要素により処理可能である。同様に、SSE2技術に関する128ビット長XMMレジスタは、そのようなpackedデータオペランドを保持するのに利用可能である。本実施例では、packedデータ及び整数データの格納において、レジスタはこれら2つのデータタイプを区別する必要はない。
【0053】
以下の図面の例では、いくつかのデータオペランドが説明される。簡単化のため、最初のソースデータセグメントは、Aからアルファベット順にラベル付けされ、Aは最下位アドレスにあり、Zは最上位アドレスにある。従って、Aはまずアドレス0にあり、Bはアドレス1にあり、Cはアドレス3にあるなどされる。理論的には、一実施例によるpackedバイトシャッフルと同様に、シャッフル処理は第1オペランドからのデータセグメントのシャッフル処理と、ソースデータ要素の1以上を第2オペランドのマスク群により指定されるパターンに再構成することを伴う。従って、シャッフルは、データ要素の一部またはすべてを所望の順序に回転または完全に再構成することが可能である。さらに、特定のデータ要素またはいくつかのデータ要素は、結果において重複または配信可能である。本発明によるシャッフル命令の実施例は、ゼロクリア機能を有し、各データ要素のマスクは、当該データ要素の位置を結果においてゼロにすることが可能である。
【0054】
図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以上の対応を有する。
【0055】
図3Aでは、データ要素312は、一実施例の一例となるシャッフルマスクの内容を記述するのに利用される。一実施例によるシャッフルマスク318は、「ゼロ設定フラグ(set to zero flag)」フィールド315、「予約(reserved)」フィールド316及び「選択ビット(selections bits)」フィールド317の3つの部分から構成される。「ゼロ設定フラグ」フィールド315は、現在のマスクにより指定される結果のデータ要素位置がゼロとされるべきか、または言い換えると、「0」の値と置換されるべきか示すためのものである。一実施例では、「ゼロ設定フラグ」フィールドは優勢であり、当該フィールド315が設定されている場合、マスク318の残りのフィールドは無視され、結果のデータ要素位置には「0」が充填される。「予約」フィールド316は、他の実施例では利用されないかもしれず、あるいは、以降または特別な使用のため確保された1以上のビットを有する。このシャッフルマスク318の「選択ビット」フィールド317は、packed結果の対応するデータ要素位置のデータソースを示すためのものである。
【0056】
packedデータシャッフル命令の一実施例では、1つのオペランドは一組のマスクから構成され、他のオペランドは一組のpackedデータ要素から構成される。何れのオペランドも同じサイズを有する。オペランドのデータ要素の個数に応じて、可変数の選択ビットがpacked結果の配置のため、第2のpackedデータオペランドから各データ要素を選択するのに必要とされる。例えば、packedバイトの128ビットソースオペランドでは、16のバイトデータ要素が選択に利用可能であるため、少なくとも4つの選択ビットが必要とされる。マスクの選択ビットにより示される値に基づき、ソースデータオペランドからの適切なデータ要素が、当該マスクの対応するデータ要素位置に配置される。例えば、データ要素312のマスク318は、第2最左データ要素位置に対応する。マスク318の選択ビット317が「X」の値を有する場合、ソースデータオペランドのデータ要素位置「X」からのデータ要素が、結果の第2最左データ要素位置にシャッフルされる。「ゼロ設定フラグ」フィールド315が設定されている場合、結果の第2最左データ要素位置は「0」と置換され、選択ビット317の指定は無視される。
【0057】
図3Bは、128ビット長packedオペランドとバイトサイズデータ要素により処理される一実施例のマスク328の構成を示す。本実施例では、「ゼロ設定」フィールド325はビット7から構成され、「選択ビット」フィールド327は、16の可能なデータ要素の選択が存在するため、ビット3〜0から構成される。ビット6〜4は本実施例では利用されず、「予約」フィールド326に配置される。他の実施例では、「選択ビット」フィールド327に用いられるビット数は、ソースデータオペランドに利用可能なデータ要素の可能な選択数に適合するように、必要に応じて増減することが可能である。
【0058】
図3Cは、バイトサイズデータ要素及び128ビット長packedオペランドによるが、複数のデータ要素ソースにより処理する他の実施例のマスク338の構成を示す。本実施例では、マスク338は、「ゼロ設定」フィールド335、「ソース(src)選択」フィールド336及び「選択」フィールド337から構成される。「ゼロ設定」フィールド335と「選択」フィールド337は、上記記載と同様に機能する。本実施例の「ソース選択」フィールド336は、どのデータソースから選択ビットにより指定されるデータオペランドが取得されるか示すためのものである。例えば、同一のマスク群が、複数のマルチメディアレジスタなどの複数のデータソースにより利用されてもよい。各ソースマルチメディアレジスタには値が割当てられ、「ソース選択」フィールド336の値は、これらソースレジスタの1つに指定される。「ソース選択」フィールド336の内容に応じて、選択されたデータ要素が、packed結果の対応するデータ要素位置の配置のため、適切なデータソースから選択される。
【0059】
図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個のデータ要素に対してパラレルに実行可能となる。
【0060】
一般に、データ要素は、同じ長さの他のデータ要素を有するオペランド(単一のレジスタまたは記憶位置)に格納される個々のデータである。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クワドワードデータ要素を有する。
【0061】
図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ビット、またはそれ以上の他のレジスタ長に拡張されてもよい。
【0062】
図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ビットソース及びデスティネーションオペランドを識別するのに利用されてもよい。
【0063】
図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により部分的に、かつ任意的なスケール・インデックス・ベース及びディスプレイスメントバイトにより指定されるレジスタ・ツー・レジスタ、メモリ・ツー・レジスタ、レジスタ・バイ・メモリ、レジスタ・バイ・レジスタ、レジスタ・バイ・イミディエート、レジスタ・ツー・メモリアドレッシングを可能にする。
【0064】
次に図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により符号化されてもよい。
【0065】
図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の対応するデータ要素位置の内容を特定するものである。
【0066】
第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クワドワード長データ要素を有するであろう。しかしながら、本発明の他の実施例は、他のサイズのデータオペランド及びデータセグメントにより処理可能である。本発明の実施例は、特定の長さのデータオペランド、データセグメントまたはシフトカウントに限定されず、各実現形態に適したサイズとすることが可能である。
【0067】
オペランド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個のデータセグメントから構成される。
【0068】
シャッフルロジック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最左データ要素位置にコピーする。
【0069】
本実施例のシャッフルロジック530は、シャッフル命令のゼロクリア機能をサポートしている。マスクオペランド510の左から4番目のデータ要素位置におけるシャッフルマスクは、0x8Fである。シャッフルロジック510は、「ゼロ設定」フィールドがマスクのビット8における「1」により示されるように設定されていると認識する。これに応答して、ゼロ設定指示は選択フィールドに優先し、シャッフルロジック510は、当該マスクの選択フィールドの16進数「F」を無視する。「0」が、結果540の左から4番目の対応するデータ要素位置に配置される。本実施例では、シャッフルロジック530は、各マスクに対して「ゼロ設定」及び選択フィールドを評価し、予約ビットやソース選択フィールド等のマスクの当該フィールド外に存在するその他のビットについては考慮しない。シャッフルマスク及びデータシャッフルの当該処理は、マスクオペランド510のマスク全体に対して繰り返される。一実施例では、これらのマスクのすべては、パラレルに処理される。他の実施例では、マスク及びデータ要素の一部が、一度に一緒に処理可能である。
【0070】
当該シャッフル命令の実施例では、オペランドのデータ要素は様々な手法により再構成可能である。さらに、あるデータ要素からのデータは、複数のデータ要素位置において繰り返すことが可能であるか、あるいは、すべての位置に配信することも可能である。例えば、第4マスクと第5マスクの両方が、0x08の16進数値を有する。この結果、データオペランド520のデータ要素位置0x8のデータIは、結果540の右側から4番目と5番目のデータ要素位置にシャッフルされる。ゼロ設定機能により、シャッフル命令の実施例は、結果540のデータ要素位置の何れかを「0」にすることが可能である。
【0071】
実現形態に応じて、各シャッフルマスクは、結果における1つのデータ要素位置の内容を指定するのに利用可能である。本例と同様に、各バイト長シャッフルマスクは、結果540のバイト長データ要素位置に対応する。他の実施例では、複数のマスクの組み合わせは、データ要素ブロックを一緒に指定するのに利用可能である。例えば、2バイト長マスクは、ワードワイド長データ要素を指定するのに利用可能である。シャッフルマスクは、バイト長に限定されるものではなく、実現形態に必要とされる他の任意のサイズとすることが可能である。同様に、データ要素及びデータ要素位置は、バイト以外の粒度を有することが可能である。
【0072】
図6は、本発明によるデータシャッフル処理を実行するロジック600の一実施例のブロック図である。本実施例の回路は、第2オペランドのシャッフルマスクの復号に基づき、第1ソースオペランドから正しい結果バイトを選択する多重構成から構成される。ここで、ソースデータオペランドは、上位のpackedデータ要素と下位のpackedデータ要素から構成される。本実施例の多重構成は、他のpacked命令を実現するのに用いられる他の多重構成より比較的シンプルなものである。この結果、本実施例の多重構成は、新たなクリティカルなタイミングパスを導入するものではない。本実施例の回路600は、シャッフルマスクブロック、ソースオペランドからの下位/上位packedデータ要素を保持するブロック、データ要素の最初の選択のための第1の複数の8:1mux、上位及び下位のデータ要素の選択のための他の複数の3:1mux、mux選択&ゼロロジック及び多数の制御信号を有する。簡単化のため、図6においては、限られた個数の8:1及び3:1muxが示され、ドットにより表される。しかしながら、それらの機能は、図示されたものと同様であり、以下の説明から理解することができる。
【0073】
本例のシャッフル処理中、一組のpackedデータ要素を有する第1オペランドと、一組のシャッフルマスクを有する第2オペランドの2つのオペランドが当該シャッフル処理回路600において受信される。シャッフルマスクは、シャッフルマスクブロック602に伝搬される。当該シャッフルマスク群は、各種選択信号(SELECT A606、SELECT B608、SELECT C610)及びゼロ設定信号(ZERO)611を生成するため、mux選択及びゼロロジックブロック604において復号される。これらの信号は、結果632を貫通するのにmuxの処理を制御するのに利用される。
【0074】
本例では、マスクオペランドとデータオペランドは共に、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つを出力するためのものである。
【0075】
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」にする。
【0076】
例えば、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データから構成されるデータブロックとなる。
【0077】
図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ビット長である。さらに、これらのデータブロックは、メモリまたはレジスタに配置することが可能である。一実施例では、マスクの構成は、例えば、フィルタリング処理や畳み込み処理を含む所望のデータ処理に基づく。
【0078】
図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の処理がパラレルに実行可能である。
【0079】
各データ要素シャッフルマスクが評価されると、指定されたデータ要素または「0」からの適切なデータが、当該シャッフルマスクの対応するデータ要素位置にシャッフルされる。例えば、最右シャッフルマスク717は、ソースデータオペランドの位置「0x0」からデータを指定するのに復号される「0x00」の値を有する。これに応答して、データ位置「0x0」からのデータAは、結果741の最右位置にコピーされる。同様に、右から2番目のシャッフルマスク716は、「0xD」に復号された「0x0D」の値を有する。従って、データ位置「0xD」からのデータNは、結果741の右から2番目の位置にコピーされる。
【0080】
結果741の左から4番目のデータ要素位置は、「0」である。これは、当該データ要素位置に対するシャッフルマスクにおける「0x8F」の値により生じる。本実施例では、シャッフルマスクバイトのビット7は、「ゼロ設定」または「ゼロクリア」標識である。当該フィールドが設定されると、結果における対応するデータ要素位置は、ソースデータオペランド721からのデータの代わりに、「0」の値により充填される。同様に、結果741の右から7番目の位置は、「0」の値を有する。これは、マスク701の当該データ要素位置に対する「0xF0」のシャッフルマスク値によるものである。ここで、シャッフルマスクのすべてのビットが実施例において利用されるとは限らないということに留意されたい。本実施例では、シャッフルマスクの下位ニブル、すなわち下位4ビットで、ソースデータオペランド721の可能な16個のデータ要素の何れかを選択するのに十分である。ビット7が「ゼロ設定」フィールドであるとき、他の3つのビットは使用されないままであり、実施例において予約または無視することが可能である。本実施例では、シャッフルマスクの下位ニブルに示されるように、「ゼロ設定」フィールドはデータ要素選択を制御及びオーバーライドする。これらの例の両方で、左から4番目のデータ要素位置と右から7番目の位置、「ゼロクリア」フラグがビット7において設定される「0x80」のシャッフルマスク値はまた、対応する結果となるデータ要素位置が「0」により充填されるのを可能にする。
【0081】
図7に示されるように、矢印はマスク701のシャッフルマスクごとのデータ要素のシャッフル処理を示す。シャッフルマスクに応じて、ソースデータ要素の1以上は結果741に現れないかもしれない。いくつかの例では、1以上の「0」がまた、結果741の様々なデータ要素位置に出現し得る。シャッフルマスクが1つのデータ要素またはデータ要素群を配信するよう構成される場合、これらデータ要素のデータは、結果における選ばれたパターンとして繰り返されてもよい。本発明の実施例は、何れか特定の構成またはシャッフルパターンに限定されるものではない。
【0082】
上述のように、ソースデータレジスタはまた、本実施例のデスティネーションデータストレージレジスタとして利用され、これにより、必要なレジスタの個数を減少させることができる。ソースデータ721がオーバーライドされるが、シャッフルマスク701は変更されず、以降の参照のため利用可能である。ソースデータストレージ装置内のオーバーライドされたデータは、メモリまたは他のレジスタからリロードすることが可能である。他の実施例では、複数のレジスタが、ソースデータストレージ装置として利用可能であり、各データは所望のようにデスティネーションデータストレージ装置内に構成される。
【0083】
図8は、本発明の他の実施例によるワード長データ要素に対するデータシャッフル処理を示す。本例の一般的説明は、図7と同様である。本実施例では、データ要素ワードは、マスクオペランド801のシャッフルマスクがバイトサイズであるため、データ要素バイトのペアとして処理される。従って、シャッフルマスクバイトのペアは、各データ要素ワード位置を規定するのに利用される。しかしながら他の実施例では、シャッフルマスクは、ワード粒度を有することが可能であり、結果におけるワードサイズのデータ要素位置を記述する。
【0084】
本例のマスクオペランド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」を占有する。
【0085】
packedシャッフル処理は、マスク801とデータ821により実行される。図8の矢印は、マスク801のシャッフルマスクごとのデータ要素のシャッフル処理を示す。各データ要素シャッフルマスクが評価されるとき、データオペランド821または「0」の指定されたデータ要素位置からの適当なデータが、当該シャッフルマスクに対する結果831の対応するデータ要素位置にシャッフルされる。本実施例では、ワードサイズデータ要素を指定するため、バイトサイズシャッフルマスクがペアで処理される。例えば、マスクオペランド801の2つの最左シャッフルマスク「0x03」802と「0x02」803は共に、結果831の最左ワード長データ要素位置832に対応する。シャッフル処理中、これら2つのデータバイト、または本ケースではデータB828であるデータ要素バイト位置0x03と0x02における1つのデータワードは、結果831の2つの最左バイトサイズデータ要素位置832に構成される。
【0086】
さらに、シャッフルマスクはまた、結果831の第3のワードサイズデータ要素位置834のシャッフルマスク「0x83」806と「0x82」807により示されるように、結果においてワードサイズデータ要素を「0」にするよう構成可能である。シャッフルマスク「0x83」806と「0x82」807は、それらの「ゼロ設定」フィールドセットを有する。2つのシャッフルマスクバイトが共にペアにされているが、異なるペアリングが、例えば、クワドワードとして4バイト、または、ダブルのクワドワードを形成するため8バイトを構成するよう実現可能である。同様に、当該ペアリングは、連続するシャッフルマスクまたは特定バイトに限定されるものではない。他の実施例では、ワードサイズシャッフルマスクが、ワードサイズデータ要素を指定するのに利用可能である。
【0087】
図9は、データをシャッフルするための方法の一実施例を示すフローチャート900である。Lの長さの値が、一般にデータブロック及びオペランドの幅を表すのに利用される。実施例に応じて、Lはデータセグメント数、ビット、」バイト、ワード等に関する長さを指定するのに利用可能である。ブロック910において、第1長さLのpackedデータオペランドが、シャッフル処理による利用のため受け取られる。ブロック920において、シャッフルパターンを指定するMの長さのシャッフルマスクの長さLが受け取られる。本例では、Lは128ビットであり、Mは8ビット、すなわち1バイトである。他の実施例では、LとMはまた、それぞれ256と16などの他の値とすることも可能である。ブロック930において、シャッフル処理が実行され、データオペランドからのデータ要素が、シャッフルパターンに従って結果にシャッフル構成される。
【0088】
本実施例のブロック930におけるシャッフルの詳細がさらに、各データ要素位置に対して行われるものに関して説明される。一実施例では、すべてのpacked結果データ要素位置のシャッフル処理は、パラレルに処理される。他の実施例では、マスクの一部が一度に一緒に処理される。ブロック932において、ゼロフラグが設定されているかチェックされる。このゼロフラグは、各シャッフルマスクの「ゼロ設定」または「ゼロクリア」フィールドを参照する。ゼロフラグがブロック932において設定されていると判断されると、当該シャッフルマスクに対応する結果のデータ要素位置のエントリが「0」に設定される。ゼロフラグがブロック932において設定されていないと検出されると、シャッフルマスクにより指定されるソースデータ要素からのデータは、当該シャッフルマスクに対応する結果のデスティネーションデータ要素位置に構成される。
【0089】
現在、整数命令を用いたテーブル検索は、多数の命令を必要とする。整数処理がSIMD命令により実現されるアルゴリズムに対するデータへのアクセスに利用される場合、さらに多数の命令が検索ごとに必要となる。しかし、packedバイトシャッフル命令の実施例を利用することによって、命令数と実行時間を劇的に低減することができる。例えば、テーブルサイズが16バイト以下である場合、1つの命令によるテーブル検索中に16データバイトにアクセス可能である。テーブルサイズが17〜32バイトの範囲内にある場合、11個のSIMD命令がテーブルデータを検索するのに利用可能である。テーブルサイズが33〜64バイトの範囲内にある場合、23個のSIMD命令が必要となる。
【0090】
検索テーブルの利用によるSIMD命令により実現できないデータ並列化によるいくつかのアプリケーションがある。映像圧縮方法H.26Lの量子化及びデブロッキングアルゴリズムは、128ビットレジスタに適合しない小さな検索テーブルを用いたアルゴリズムの一例である。いくつかのケースでは、これらのアルゴリズムにより利用される検索テーブルは、小さなものである。テーブルが1つのレジスタにおいて適合可能である場合、テーブル検索処理は、1つのpackedシャッフル命令により実現することが可能である。テーブルのメモリスペース要求が1つのレジスタのサイズを超える場合、packedシャッフル命令の一実施例は、異なるアルゴリズムを介して動作可能である。サイズ超過したテーブルを処理する方法の一実施例は、テーブルを各々がレジスタの要領に等しいセクションに分割し、シャッフル命令によりこれらのテーブルセクションのそれぞれにアクセスする。シャッフル命令は、同一のシャッフル制御シーケンスを用いてテーブルの各セクションにアクセスする。この結果、パラレルテーブル検索が、packedバイトシャッフル命令による場合に実現することが可能となり、これにより、アルゴリズムのパフォーマンスを向上させるため、SIMD命令の利用が可能となる。本発明の実施例は、パフォーマンスを向上させるのに利用可能であり、小さな検索テーブルを利用するあるアルゴリズムに必要なメモリアクセス数を低減することが可能となる。他の実施例は、SIMD命令を用いた複数の検索テーブル要素のアクセスを可能にする。本発明によるpackedバイトシャッフル命令は、小さな検索テーブルを用いたアルゴリズムのあまり効率的でない整数移入の代わりに、効率的なSIMD命令実現形態を可能にする。本発明の実施例は、1つのレジスタより大きなメモリスペースを必要とするテーブルからのデータへのアクセス方法を明示する。本例では、レジスタはテーブルの異なるセグメントを含む。
【0091】
図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テーブルからのものとすることも可能である。
【0092】
図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をもたらす。
【0093】
同一の組のマスク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をもたらす。
【0094】
テーブル選択を選択するためのビット数は、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テーブルを選択する。
【0095】
インデックス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をもたらす。
【0096】
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をもたらす。
【0097】
図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」としてエンプティのままにされる。
【0098】
図10Gにおいて、HIGH TABLE SELECT MASK1048及びTEMP RESULTANT B1042に対する同様のpacked AND処理が示される。このpacked AND処理は、マスク1048ごとに第2データセット1051から選択されたシャッフルデータ要素をフィルタリングする。図10Fにおいて説明されるpackedAND処理とは異なり、マスク1048は、第2データセットからもたらされるようなソース選択フィールドにより示されるデータが、SELECTED HIGH TABLE DATA1050にわたされるのを可能にし、その他のデータ要素位置がエンプティのままにされる。
【0099】
図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」である。
【0100】
本実施例のサイズ超過したテーブルを検索する方法は、一般に以下の処理によりまとめることができる。まず、テーブルデータをレジスタにコピーまたはロードする。各テーブルセクションからのテーブル値が、packedシャッフル処理によりアクセスされる。テーブルセクションを特定するソース選択フィールドは、シャッフルマスクから抽出される。どのテーブルセクションがシャッフルされたデータ要素の適切なソースであるか判断するためのテーブルセクション番号を有するソース選択フィールドに対するcompare−if−equal処理が実行される。このcompare−if−equal処理は、各テーブルセクションに対して所望のシャッフルされたデータ要素をさらにフィルタリングするためのマスクを提供する。適切なテーブル要素からの所望のデータ要素が、最終的なテーブル検索結果を形成するためマージされる。
【0101】
図11は、SIMD命令を用いてテーブル検索を実行する方法の一実施例を示すフローチャートである。ここで説明されたフローは一般に、図10A〜Hの方法に従うが、これに限定されるものではない。これらの処理のいくつかは、異なる順序または様々なタイプのSIMD命令を用いて実行可能である。ブロック1102において、シャッフルパターンを指定する一組のシャッフルマスクが受け取られる。これらのシャッフルマスクはまた、どのテーブルまたはソースから所望の結果を取得するためデータ要素をシャッフルすべきか示すためのソースフィールドを有する。ブロック1104において、テーブルまたは第1データセットの第1部分のデータ要素がロードされる。ブロック1106において、ブロック1102のシャッフルパターンに従って、第1部分データ要素がシャッフルされる。ブロック1108において、第2データセットまたはテーブルの第2部分のデータ要素がロードされる。ブロック1110において、第2部分データ要素は、ブロック1102のシャッフルパターンに従ってシャッフルされる。ブロック1112において、テーブル選択が、シャッフルマスクからフィルタリングされる。本実施例のテーブル選択は、データ要素がどこから生じるか示すソース選択フィールドに関する。ブロック1114において、テーブルの第1部分からシャッフルデータに対して、テーブル選択マスクが生成される。ブロック1116において、テーブルの第2部分からシャッフルデータに対して、テーブル選択マスクが生成される、これらのテーブル選択マスクは、適切なテーブルデータソースから特定のデータ要素位置に対する所望のシャッフルされたデータ要素をフィルタリングするためのものである。
【0102】
ブロック1118において、第1テーブル部分に対するブロック1114のテーブル選択マスクに従って、第1テーブル部分のシャッフルされたデータからデータ要素が選択される。ブロック1120において、第2テーブル部分に対するブロック1116のテーブル選択マスクに従って、第2テーブル部分のシャッフルされたデータからデータ要素が選択される。ブロック1118において第1テーブル部分及びブロック1120において第2テーブル部分から選択されたシャッフルされたデータ要素は、マージされたテーブルデータを取得するため、ブロック1122においてマージされる。一実施例のマージされたテーブルデータは、第1及び第2テーブルデータからのシャッフルされたデータ要素を含む。他の実施例では、マージされたテーブルデータは、3以上のテーブルソースまたは記憶領域から検索されたデータを有することが可能である。
【0103】
図12は、テーブル検索を実行する方法の他の実施例を示すフローチャートである。ブロック1202において、複数のデータ要素を有するテーブルがロードされる。ブロック1204において、当該テーブルが1つのレジスタに適合するか判断される。テーブルが1つのレジスタに適合する場合、ブロック1216において、テーブル検索がシャッフル処理により実行される。データが1つのレジスタに適合しない場合、ブロック1206において、テーブルの関連する各部分に対して、テーブル検索がシャッフル処理により実行される。テーブル部分またはデータソースを選択するビットまたはフィールドを取得するため、論理packed AND処理が実行される。ブロック1210において、「compare−if−equal」処理が、検索されるテーブルの関連する部分からテーブルデータを選択するためのマスクを生成する。ブロック1212において、テーブルセクションからデータアイテムを選択及び検索するため、論理AND処理が利用される。ブロック1214において、論理OR処理は、所望の検索データを取得するため、選択されたデータをマージする。
【0104】
ゼロクリア機能を用いて複数のレジスタ間のデータを再構成するためのアルゴリズムへのpackedシャッフル命令の一実施例が実現される。ミックス処理の目的は、結果におけるデータ位置がソースオペランドのもとの位置とは異なる選択された構成の1つのSIMDレジスタの2以上のSIMDレジスタの内容をマージするためのものである。選択されたデータ要素は、まず所望の結果位置に移動され、選択されていないデータ要素はゼロに設定される。選択されたデータ要素が1つのレジスタに対して移動された位置が、他のレジスタではゼロに設定される。この結果、結果レジスタの1つは、与えられたデータ要素位置に非ゼロのデータアイテムを含む。以下の一般的な命令シーケンスが、2つのオペランドからデータを合成するのに利用可能である。
【0105】
【表3】

オペランド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バイトサイズのデータ要素から構成される。しかしながら、他の実施例は、様々なサイズのデータ要素を有する他の長さのデータブロックを含むことが可能である。
【0106】
図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のパターンから構成される。
【0107】
図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」のパターンから構成される。
【0108】
図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になる。従って、複数のレジスタまたは記憶位置からのデータが、所望のパターンに再構成することが可能である。
【0109】
図14は、複数のレジスタの間でデータを再構成する方法の一実施例を示すフローチャートである。ブロック140において、データは第1レジスタまたは記憶位置からロードされる。ブロック1404において、第1のシャッフルマスクの組に基づき、第1レジスタデータがシャッフルされる。ブロック1406において、第2レジスタまたは記憶位置からデータがロードされる。ブロック1408において、この第2レジスタデータは、第2のシャッフルマスクの組に従ってシャッフルされる。ブロック1410において、第1及び第2のレジスタシャッフルからのシャッフルされたデータは、第1及び第2レジスタからのデータを有するインタリーブされたデータブロックに到着するよう論理ORによりブロック1410においてマージされる。
【0110】
図15A〜Kは、インタリーブされたデータを生成するため複数のレジスタの間でデータをシャッフルするアルゴリズムを示す。これは、平面カラーデータをインタリーブするアプリケーションの一例である。しばしば画像データは、個別のカラー平面において処理され、その後、これらの平面が表示のため以降でインタリーブされる。以下に説明されるアルゴリズムは、ビットマップ等の画像フォーマットにより利用されるような赤平面、緑平面及び青平面のインタリーブ処理を示す。多数の色空間及びインタリーブパターンが可能である。また、このアプローチは、他の色空間及びフォーマットに容易に拡張可能である、本例による実現形態は、しばしば赤(R)平面、緑(G)平面及び青(B)平面データがRGBフォーマットにインタリーブされる画像処理データフォーマット処理を利用する。本例は、本発明によるゼロクリア機能がメモリアクセスを大きく減少させる方法を示す。
【0111】
これらのソースからのデータは、インタリーブ形式に合成される。より詳細には、当該データは画素カラーデータに関する。例えば、各画素のカラーデータは、赤(R)、緑(G)及び青(B)ソースからの情報を含むことが可能である。色情報を合成することによって、赤/緑/青(RGB)データは、当該画素の所望の色を提供するよう評価可能である。ここで、赤データはオペランドDATA A1512に保持され、緑データはデータオペランドDATA B1514に保持され、青データはDATA C1516に保持される。この構成は、各色のデータがストリーミングデータと同様に個別に収集または一緒に格納されるグラフィックまたはメモリシステムに存在可能である。所望の画像を再生成または表示するのにこの情報を利用するため、画素データは、当該画素のすべてのデータがグループ化されるRGBパターンに構成される必要がある。
【0112】
本実施例では、所定のパターンを有する一組のマスクが、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においてデータ要素を個別にシャッフルする。
【0113】
ここで、本実現形態では、重複する各データ要素位置に対するシャッフルマスクは、2つのゼロ設定フィールドとデータ要素を指定する1つのシャッフルマスクを有する。例えば、3つのマスク1502、1504及び1056の最右データ要素位置を参照するに、シャッフルマスク値は、MASK A1502、MASK B1504及びMASK C1506に対して0x00、0x80及び0x80となる。従って、MASK A1502に対するシャッフルマスク0x00のみが、当該位置に対するデータを指定する。本実施例のマスクは、シャッフルされたデータがインタリーブされたRGBデータブロックを形成するのに容易にマージ可能となるようパターン処理される。
【0114】
図15Bは、DATA A1512、DATA B1514及びDATA C1516のインタリーブされるデータブロックを示す。本実施例では、各データセットは、16個の画素位置に対する色情報を有するデータエントリを有する。ここで、データ要素における各色レターを伴うサブスクリプトは、当該画素番号を表す。例えば、R0は画素0に対する赤色データであり、G15は画素15に対する緑色データである。図示される各データ要素における16進数は、当該データ要素位置の番号である。色データ(DATA A1512、DATA B1514、DATA C1516)は、データがシャッフル処理により上書きされず、他のロード処理なく再利用できないように、他のレジスタにコピーされてもよい。本実施例では、3つのマスク1502、1504及び1506を有する3つのパスが、画素データインタリーブ処理を完了させるのに必要とされる。他の実現形態及び他のデータ量では、パス及びシャッフル処理の回数は、必要に応じて可変とされる。
【0115】
図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タイプのグループ化が実現される。
【0116】
本実施例では、赤色データと緑色データの上記シャッフルされたデータが、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データを生成する。
【0117】
この時点で、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)の代わりに本実施例において必要とされるであろう。本実施例はまた、限られた個数のレジスタが利用可能であり、メモリアクセスが長いアーキテクチャにおいて適用可能である。
【0118】
多数のレジスタが利用可能な他の実施例では、シフト処理が不要となるように、レジスタの多数またはすべてのマスク群を保持することが、より効率的となり得る。さらに、多数のレジスタと実行ユニットを有するアーキテクチャでは、シャッフル処理のすべてがシフト処理の実行を待機する必要なく、パラレルに実行可能である。例えば、9つのシャッフルユニットと9つのマスク群を有するアウトオブオーダプロセッサは、9つのシャッフル処理をパラレルに実行することが可能である。上記実施例では、マスクが再適用される前にデータがシフトされる必要がある。
【0119】
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として示される。
【0120】
図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と同様の処理またはさらなる利用のため、所望の手法によりマージ及び再構成可能である。
【0121】
図16は、インタリーブされたデータを生成するため、複数のレジスタ間のデータをシャッフルする方法の一実施例を示すフローチャートである。例えば、本方法の実施例は、図15A〜Kに説明されるように、インタリーブされた画素データの生成に適用可能である。本実施例は3つのデータソースまたはデータ平面に関して説明されるが、2以上のデータ平面に関して他の実施例は処理可能である。これらのデータ平面は、1以上の画像フレームに対する色データを有することが可能である。ブロック1602において、第1、第2及び第3平面のフレームデータがロードされる。本例では、複数の画素のRGB色データが、異なる3つの平面からの個々の色として利用可能である。第1平面のデータは赤色に対するものであり、第2平面のデータは緑色に対するものであり、第3平面のデータは青色に対するものである。ブロック1604において、シャッフル制御パターンを有する一組のマスク(M1、M2及びM3)がロードされる。これらのシャッフル制御パターンは、色をインタリーブするため、データの配置及びシャッフルパターンを決定する。実現形態に応じて、任意数のシャッフルパターンが、所望のデータは位置を生成するため利用可能である。
【0122】
ブロック1606において、各データ平面に対して、適切な制御パターンが選択される。本実現形態では、色データが所望される順序及び現在実行中の繰り返しに基づき、シャッフルパターンが選択される。第1データセットである赤色からのフレームデータが、シャッフルされた赤色データを取得するため、ブロック1608において第1のシャッフル制御パターンによりシャッフルされる。第2のデータセットである緑色が、シャッフルされた緑色のデータを取得するため、第2のシャッフル制御パターンによりブロック1610においてシャッフルされる。ブロック1612において、第3のデータセットである青色が、シャッフルされた青色データを実現するため、第3シャッフル制御パターンによりシャッフルされる。これら3つのマスクと各自のシャッフル制御パターンは本実施例では互いに異なるが、各繰り返し中に複数のデータセットに対して、マスク及びそれのシャッフルパターンが利用可能である。さらに、いくつかのマスクは、他のものより頻繁に利用されてもよい。
【0123】
ブロック1614において、3つのデータセットに対するシャッフルされたデータブロック1608、1610及び1612が、当該パスのインタリーブされた結果を形成するためマージされる。例えば、第1パスの結果は、図15Gのインタリーブされたデータ1532と同様のものとすることが可能であり、各画素のRGBデータは一組としてグループ化される。ブロック1616において、シャッフリングに対してレジスタにロードされるフレームデータがさらにあるかチェックされる。ない場合には、ブロック1620において、インタリーブされる3つのデータ平面からのさらなるデータがないかチェックされる。ない場合には、本方法は終了する。ブロック1620において利用可能なさらなる平面データがあれば、当該プロセスはブロック1602に戻り、シャッフルリングのためのさらなるフレームデータがロードされる。
【0124】
ブロック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データを生成するため、異なるデータ平面において回転され続ける。
【0125】
本発明によるpackedシャッフル命令を用いたアルゴリズムの実施例は、現在のハードウェアリソースによりプロセッサ及びシステムパフォーマンスを向上させることが可能である。しかしながら、技術が向上し続けるに従い、本発明の実施例はより多くかつより高速のハードウェアリソースと組み合わされるとき、より効率的なロジック回路がパフォーマンス向上に対するさらに大きな影響を与えることが可能である。従って、バイト粒度とzeroクリアオプションを有するpackedシャッフル命令の効率的な実施例は、プロセッサの生成に対して異なるより大きな影響を有することが可能である。現在のプロセッサアーキテクチャにさらなるリソースを単に追加することだけでは、より良いパフォーマンス向上を保証することはできない。パラレルテーブル検索及びpackedシャッフル命令(PSHUFB)の一実施例と同様に、アプリケーションの効率性を維持することによって、より高いパフォーマンス向上が可能となり得る。
【0126】
上記例は説明を簡単化するため、128ビット長ハードウェア/レジスタ/オペランドに関して一般に説明されたが、packedシャッフル処理、パラレルテーブル検索及び複数レジスタデータ再構成を実行するため、他の実施例では64または128ビット長ハードウェア/レジスタ/オペランドが利用されてもよい。さらに、本発明の実施例はMMX/SSE/SSE2技術などの特定のハードウェアまたは技術タイプに限定されるものではなく、他のSIMD実現形態及び他のグラフィカルデータ操作技術により利用可能である。
【0127】
本明細書では、本発明はそれの特定の実施例を参照して説明された。しかしながら、添付された請求項に与えられるような本発明のより広い趣旨及び範囲から逸脱することなく、各種改良及び変更が可能であるということは明らかであろう。従って、明細書及び図面は、限定的なものではなく例示的なものとみなされるべきである。
【符号の説明】
【0128】
100 システム
102 プロセッサ
104 キャッシュメモリ
106 レジスタファイル
108 実行ユニット

【特許請求の範囲】
【請求項1】
L個のデータ要素を有する第1オペランドとL個の制御要素を有する第2オペランドとを受け取るステップと、
各制御要素に対して、該制御要素により指定される第1オペランドデータ要素からのデータを、それのゼロクリアフィールドが設定されていない場合、関連付けされた結果のデータ要素位置にシャッフルし、それのゼロクリアフィールドが設定されていない場合、前記関連付けされた結果のデータ要素位置にゼロを配置するステップと、
から構成されることを特徴とする方法。
【請求項2】
請求項1記載の方法であって、
前記L個の制御要素のそれぞれは、前記第2オペランドのある位置を占有し、結果の同様に配置されたデータ要素位置に関連付けされることを特徴とする方法。
【請求項3】
請求項2記載の方法であって、
前記L個のデータ要素のそれぞれは、前記第1オペランドのある位置を占有することを特徴とする方法。
【請求項4】
請求項3記載の方法であって、
前記制御要素は、データ要素位置番号により第1オペランドデータ要素を指定することを特徴とする方法。
【請求項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】
L個のデータ要素を有する第1オペランドとL個の制御要素を有する第2オペランドとを有するシャッフル命令を実行する実行ユニットから構成される装置であって、
前記シャッフル命令は、前記実行ユニットに、各制御要素に対して、それのゼロクリアフィールドが設定されているか判断し、真である場合には関連付けされた結果のデータ要素位置にゼロを配置し、そうでない場合には前記制御要素により指定される第1オペランドデータ要素からのデータを前記関連付けされた結果のデータ要素位置にシャッフルさせることを特徴とする装置。
【請求項13】
請求項12記載の装置であって、
前記L個の制御要素のそれぞれは、前記第2オペランドにおいて位置を占有し、結果における同様に配置されたデータ要素位置に関連付けされることを特徴とする装置。
【請求項14】
請求項13記載の装置であって、
各制御要素は、データ要素位置番号により第1オペランドデータ要素を指定することを特徴とする装置。
【請求項15】
請求項14記載の装置であって、
前記制御要素のそれぞれは、
該制御要素に係るデータ要素位置がゼロの値により充填されるべきか示すゼロクリアフィールドと、
データをシャッフルする第1オペランドデータ要素を示す選択フィールドと、
から構成されることを特徴とする装置。
【請求項16】
請求項15記載の装置であって、
前記制御要素のそれぞれはさらに、ソース選択フィールドから構成されることを特徴とする装置。
【請求項17】
請求項16記載の装置であって、
前記シャッフル命令はさらに、前記実行ニットに前記L個の制御要素に基づき充填されたL個のデータ要素位置を有する結果を生成させることを特徴とする装置。
【請求項18】
請求項12記載の装置であって、
前記データ要素のそれぞれは、1バイトのデータから構成され、
前記制御要素は、1バイト長である、
ことを特徴とする装置。
【請求項19】
請求項18記載の装置であって、
Lは8であり、前記第1オペランド、前記第2オペランド及び前記結果は、それぞれ64ビット長packedデータから構成されることを特徴とする装置。
【請求項20】
請求項18記載の装置であって、
Lは16であり、前記第1オペランド、前記第2オペランド及び前記結果は、それぞれ128ビット長packedデータから構成されることを特徴とする装置。
【請求項21】
L個のデータ要素を有する第1オペランドとL個の制御要素を有する第2オペランドとを受け取るステップと、
各制御要素に対して、該制御要素により指定される第1オペランドデータ要素からのデータを、それのゼロクリアフィールドが設定されていない場合、関連付けされた結果のデータ要素位置にシャッフルし、それのゼロクリアフィールドが設定されていない場合、前記関連付けされた結果のデータ要素位置にゼロを配置するステップと、
から構成される所定の機能を表すデータを格納する機械可読媒体から構成される物品。
【請求項22】
請求項21記載の物品であって、
前記機械可読媒体により格納されるデータは、製造時に1つの命令に応答して前記所定の機能を実行する集積回路構成を表すことを特徴とする物品。
【請求項23】
請求項22記載の物品であって、
前記所定の機能はさらに、前記L個の制御要素に従って充填されたL個のデータ要素位置を有する結果を生成するステップを有することを特徴とする物品。
【請求項24】
請求項23記載の物品であって、
前記L個の制御要素のそれぞれは、結果において同様に配置されたデータ要素位置に関連付けされることを特徴とする物品。
【請求項25】
請求項24記載の物品であって、
各制御要素は、データ要素位置番号により第1オペランドデータ要素を指定することを特徴とする物品。
【請求項26】
請求項25記載の物品であって、
前記データ要素のそれぞれは、1バイトのデータから構成されることを特徴とする物品。
【請求項27】
請求項26記載の物品であって、
前記制御要素のそれぞれは、
該制御要素に係るデータ要素位置がゼロの値により充填されるべきか示すゼロクリアフィールドと、
データをシャッフルする第1オペランドデータ要素を示す選択フィールドと、
から構成されることを特徴とする物品。
【請求項28】
請求項27記載の物品であって、
前記制御要素のそれぞれはさらに、ソース選択フィールドから構成されることを特徴とする物品。
【請求項29】
請求項21記載の物品であって、
前記機械可読媒体により格納されているデータは、マシーンにより実行される場合、前記マシーンに前記所定の機能を実行させるコンピュータ命令を表すことを特徴とする物品。
【請求項30】
L個のデータ要素を有する第1オペランドを受け取るステップと、
各マスクが前記第2オペランドにおけるある位置を占有し、結果における同様に配置されたデータ要素位置に関連付けされ、ゼロクリアフィールドを有するL個のマスクを有する第2オペランドを受け取るステップと、
各マスクに対して、それのゼロクリアフィールドが設定されているか判断し、真である場合には関連する結果のデータ要素位置にゼロを配置するステップと、
それのゼロクリアフィールドが設定されていない場合、前記マスクにより指定される第1オペランドデータ要素からのデータを前記関連する結果のデータ要素位置にシャッフルするステップと、
から構成されることを特徴とする方法。
【請求項31】
請求項30記載の方法であって、
前記L個のマスクのそれぞれは、前記第2オペランドにおけるある位置を占有し、前記結果における同様に配置されたデータ要素位置に関連付けされることを特徴とする方法。
【請求項32】
請求項31記載の方法であって、
前記L個のマスクのそれぞれは、
該制御要素に係るデータ要素位置がゼロの値により充填されるべきか示すゼロクリアフィールドと、
データをシャッフルする第1オペランドデータ要素を示す選択フィールドと、
から構成されることを特徴とする方法。
【請求項33】
請求項32記載の方法であって、
前記マスクのそれぞれはさらに、ソース選択フィールドから構成されることを特徴とする方法。
【請求項34】
請求項33記載の方法であって、
前記第1オペランド、前記第2オペランド及び前記結果のそれぞれは、64ビット長packedデータから構成されることを特徴とする方法。
【請求項35】
請求項33記載の方法であって、
前記第1オペランド、前記第2オペランド及び前記結果のそれぞれは、128ビット長packedデータから構成されることを特徴とする方法。
【請求項36】
L個のデータ要素を有する第1オペランドを受け取るステップと、
各シャッフルマスクが結果における同様に配置されたデータ要素位置に関連付けされたL個のシャッフルマスクを有する第2オペランドを受け取るステップと、
各シャッフルマスクに対して、それのゼロクリアフィールドが設定されているか判断し、真である場合には関連する結果のデータ要素位置にゼロを配置し、そうでない場合、前記シャッフルマスクにより指定される第1オペランドデータ要素からのデータを前記関連する結果のデータ要素位置にシャッフルするステップと、
から構成されることを特徴とする方法。
【請求項37】
請求項36記載の方法であって、
前記L個のシャッフルマスクのそれぞれは、
該制御要素に係るデータ要素位置がゼロの値により充填されるべきか示すゼロクリアフィールドと、
データをシャッフルする第1オペランドデータ要素を示す選択フィールドと、
から構成されることを特徴とする方法。
【請求項38】
請求項37記載の方法であって、
前記マスクのそれぞれはさらに、ソース選択フィールドから構成されることを特徴とする方法。
【請求項39】
複数のソースデータ要素を格納する第1記憶位置と、
各制御要素が結果のデータ要素位置に対応し、ゼロクリアフィールドと選択フィールドとを有する複数の制御要素を格納する第2記憶位置と、
前記第2記憶位置に接続され、前記制御要素の値に応答して、複数の選択信号と複数のゼロクリア信号とを生成する制御ロジックと、
前記第1記憶位置と前記複数の選択信号とに接続され、各マルチプレクサが特定の結果のデータ要素位置に対応する選択信号に応答して、前記特定の結果のデータ要素位置に対してデータ要素をシャッフルする複数の第1マルチプレクサと、
前記複数の第1マルチプレクサと前記複数のゼロクリア信号に接続され、各マルチプレクサが特定の結果のデータ要素位置に関連付けされ、それのゼロクリア信号がアクティブである場合にはゼロを出力し、または、前記特定の結果のデータ要素位置に対してシャッフルされたデータ要素を出力する複数の第2マルチプレクサと、
から構成されることを特徴とする装置。
【請求項40】
請求項39記載の装置であって、
前記複数のソースデータ要素は、第1packedデータオペランドであることを特徴とする装置。
【請求項41】
請求項40記載の装置であって、
前記複数の制御要素は、第2packedデータオペランドであることを特徴とする装置。
【請求項42】
請求項40記載の装置であって、
前記第1及び第2記憶位置は、SIMD(Single Instruction Multiple Data)レジスタであることを特徴とする装置。
【請求項43】
請求項42記載の装置であって、
前記第1packedオペランドは64ビット長であり、前記ソースデータ要素のそれぞれは1バイト長であり、
前記第2packedオペランドは64ビット長であり、前記制御要素のそれぞれは1バイト長である、
ことを特徴とする装置。
【請求項44】
請求項42記載の装置であって、
前記第1packedオペランドは128ビット長であり、前記ソースデータ要素のそれぞれは1バイト長であり、
前記第2packedオペランドは128ビット長であり、前記制御要素のそれぞれは1バイト長である、
ことを特徴とする装置。
【請求項45】
各シャッフルマスクが一意的な結果のデータ要素位置に関連付けされるL個のシャッフルマスクを受け取り、各結果のデータ要素位置に対して、選択信号とゼロ設定信号とを提供する制御ロジックと、
前記制御ロジックに接続され、各マルチプレクサもまた一意的な結果のデータ要素位置に関連付けされ、それの関連付けされたゼロクリア信号がアクティブである場合にはゼロを出力し、それの関連付けされたゼロクリア信号が非アクティブである場合には、ぞれの関連付けされた選択信号に基づきM個のデータ要素からシャッフルされたデータを出力するL個のマルチプレクサと、
から構成されることを特徴とする装置。
【請求項46】
請求項45記載の装置であって、さらに、
各データ要素位置がそれの関連付けされたマルチプレクサからの出力を保持するL個の一意的なデータ要素位置を有するレジスタを有することを特徴とする装置。
【請求項47】
請求項46記載の装置であって、
Lは16であり、Mは16であることを特徴とする装置。
【請求項48】
データ及び命令を格納するメモリと、
前記メモリにバスを介して接続され、シャッフル処理を実行可能なプロセッサと、
から構成されるシステムであって、
前記プロセッサは、
第1オペランドからのL個のデータ要素の少なくとも1つに対して、第2オペランドからのL個のシャッフル制御要素に基づきデータシャッフルを実行させる命令を前記メモリから受け取るバスユニットと、
前記バスユニットに接続され、前記命令を実行する実行ユニットと、
から構成され、
前記命令は前記実行ユニットに、各シャッフル制御要素に対して、それのゼロクリアフィールドが設定されていない場合には前記シャッフル制御要素により指定される第1オペランドデータ要素からのデータを関連付けされた結果のデータ要素位置にシャッフルさせ、それのゼロクリアフィールドが設定されていない場合には前記関連付けされた結果のデータ要素位置にゼロを配置させることを特徴とするシステム。
【請求項49】
請求項48記載のシステムであって、
各シャッフル制御要素は、
該シャッフル制御要素に係るデータ要素位置がゼロの値により充填されるべきか示すゼロクリアフィールドと、
データをシャッフルする第1オペランドデータ要素を示す選択フィールドと、
から構成されることを特徴とするシステム。
【請求項50】
請求項49記載のシステムであって、
各シャッフル制御要素はさらに、ソース選択フィールドから構成されることを特徴とするシステム。
【請求項51】
請求項48記載のシステムであって、
前記命令は、ゼロクリア機能を有するpackedバイトシャッフルであることを特徴とするシステム。
【請求項52】
請求項48記載のシステムであって、
各データ要素は1バイト長であり、
各シャッフルコマンド要素は1バイト長であり、
Lは8である、
ことを特徴とするシステム。
【請求項53】
請求項48記載のシステムであって、
前記第1オペランドは64ビット長であり、
前記第2オペランドは64ビット長である、
ことを特徴とするシステム。

【図1A】
image rotate

【図1B】
image rotate

【図1C】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4A】
image rotate

【図4B】
image rotate

【図4C】
image rotate

【図4D】
image rotate

【図4E】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10A】
image rotate

【図10B】
image rotate

【図10C】
image rotate

【図10D】
image rotate

【図10E】
image rotate

【図10F】
image rotate

【図10G】
image rotate

【図10H】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13A】
image rotate

【図13B】
image rotate

【図13C】
image rotate

【図14】
image rotate

【図15A】
image rotate

【図15B】
image rotate

【図15C】
image rotate

【図15D】
image rotate

【図15E】
image rotate

【図15F】
image rotate

【図15G】
image rotate

【図15H】
image rotate

【図15I】
image rotate

【図15J】
image rotate

【図15K】
image rotate

【図16】
image rotate


【公開番号】特開2010−282649(P2010−282649A)
【公開日】平成22年12月16日(2010.12.16)
【国際特許分類】
【出願番号】特願2010−180413(P2010−180413)
【出願日】平成22年8月11日(2010.8.11)
【分割の表示】特願2006−515370(P2006−515370)の分割
【原出願日】平成16年6月24日(2004.6.24)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Linux
2.Bluetooth
3.COMPACTFLASH
【出願人】(593096712)インテル コーポレイション (931)
【Fターム(参考)】