以下の説明は、プロセッサ、コンピュータシステム、もしくは他の処理装置内に、またはこれらに関連してSIMDベクトルパックドタプル相互比較機能を提供する命令および処理ロジックを開示する。本明細書において、SIMDベクトルパックドタプル相互比較機能を提供する命令およびロジックが開示されている。いくつかの実施形態は、可変の複数のデータフィールドを含む第1および第2のレジスタを有するプロセッサを備え、データフィールドの各々は、第1のデータタイプの要素を格納する。プロセッサは、いくつかの実施形態においてベクトルパックドタプル相互比較のためのSIMD命令を実行し、この命令は、第1のレジスタのタプルにおけるデータフィールドの一部のデータフィールド毎に、その対応する要素を、第2のレジスタのタプルにおけるデータフィールドの対応する部分の全ての要素と比較し、対応する比較に応じて、対応する第1のレジスタ部分のマスクされない各要素に対応するビットマスクにおいて、第2のレジスタ部分の各要素に対応するマスクビットをセットする。いくつかの実施形態におけるパックドタプルは各々、2個、4個、または8個の要素を備え得る。また、いくつかの実施形態において、ビットマスクは、デスティネーションレジスタに格納される前に、第3のレジスタのデータフィールドにおける対応する要素によりシフトされ得る。比較タイプは、命令により指定された即値オペランドにより示され得る。いくつかの実施形態において、第3のレジスタは、デスティネーションレジスタと同一のレジスタであってもよい。
比較される要素、例えばインデックスが比較結果を表すのに必要とされるマスクと同じサイズである場合(例えば、256ビットレジスタにおける16個の16ビット要素)、全ての要素を相互比較する命令の実行が適切であり得る。しかし、比較結果を表すのに利用可能なビットより比較する要素の方が多い場合、代替的な解決法が必要とされる場合がある。本明細書に開示されるSIMDベクトルパックドタプル比較命令は、SIMDベクトルアドレス競合検出機能、および効率的なSIMDアドレス競合解決のために競合マスクを生成するべく組み合わされた結果を提供する、可変サイズの要素およびメモリオフセットのための代替的な解決法として用いられ得ることが理解されよう。SIMDベクトルパックドタプル比較命令は、(例えば、様々な異なる比較オペレーションのうちのいずれか1つが有用である得る場合に)より汎用に適用することが可能であり、面積および電力の観点では全要素を相互比較する命令と比べてあまり実装コストを必要としないことが理解されよう。
以下の説明において、本発明の実施形態のより完全な理解を提供するべく、処理ロジック、プロセッサタイプ、マイクロアーキテクチャ条件、イベント、有効化メカニズム等、様々な具体的詳細が記載される。しかし、当業者には、本発明がそのような具体的詳細を用いずに実施され得ることが理解されよう。更に、本発明の実施形態を不要なまでに不明瞭にすることを避けるべく、いくつかの周知の構造、回路等は、詳細に示されていない。
以下の実施形態はプロセッサを参照して説明されるが、他の実施形態が他のタイプの集積回路およびロジックデバイスに適用可能である。本発明の実施形態における類似の技術および教示が、より高いパイプラインスループットおよび向上した性能から利益を得ることができる他のタイプの回路または半導体デバイスに適用され得る。本発明の実施形態についての教示は、データ操作を実行するいずれのプロセッサまたは機械にも適用可能である。しかし、本発明は、512ビット、256ビット、128ビット、64ビット、32ビット、もしくは16ビットのデータオペレーションを実行するプロセッサもしくは機械に限定されず、データの操作もしくは管理が実行されるいずれのプロセッサもしくは機械にも適用され得る。更に、以下の説明は例を提供し、添付の図面は、例示目的で様々な例を示す。しかし、これらの例は、本発明の実施形態における考えられる全ての実装についての網羅的一覧を提供するのではなく、本発明の実施形態における例を提供することを専ら意図しているので、限定的な意味に解釈されるべきではない。
以下の例は、実行ユニットおよび論理回路の文脈における命令の処理および分配を説明するが、本発明の他の実施形態は、機械可読有形媒体上に格納されたデータおよび/または命令として実現され得、これらは、機械により実行されると、当該機械に本発明の少なくとも一実施形態に即した機能を実行させる。一実施形態において、本発明の実施形態に関連する機能は、機械実行可能な命令の形で実施される。命令でプログラミングされた汎用または専用プロセッサに、本発明の段階を実行させるために、命令は用いられ得る。本発明の実施形態は、コンピュータプログラム製品またはソフトウェアとして提供され得、これらは、本発明の実施形態による1または複数のオペレーションを実行するようにコンピュータ(または他の電子デバイス)をプログラミングするために用いられ得る命令を格納した機械またはコンピュータ可読媒体を含み得る。あるいは、本発明の実施形態における段階は、段階を実行するための固定機能ロジックを含む特定ハードウェアコンポーネントにより、またはプログラミングされたコンピュータコンポーネントおよび固定機能ハードウェアコンポーネントの任意の組み合わせにより実行され得る。
本発明の実施形態を実行するロジックをプログラミングするために用いられる命令は、DRAM、キャッシュ、フラッシュメモリ、または他のストレージ等のシステムのメモリ内に格納され得る。更に、命令は、ネットワークを介して、または他のコンピュータ可読媒体により配信され得る。従って、機械可読媒体は、機械(例えば、コンピュータ)により可読な形式で情報を格納または送信するためのいずれのメカニズムも含み得るが、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスク、リードオンリメモリ(CD‐ROM)、および光磁気ディスク、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、磁気カードもしくは光カード、フラッシュメモリ、またはインターネットを介した電気信号、光信号、音響信号、または他の形式の伝搬信号(例えば、伝送波、赤外線信号、デジタル信号等)による情報の送信において用いられる有形機械可読ストレージに限定されない。従って、コンピュータ可読媒体は、機械(例えば、コンピュータ)により可読な形式で電子命令または情報を格納または送信するのに好適な任意のタイプの有形機械可読媒体を含む。
設計は、形成からシミュレーション、製造へと至る様々な段階を経る場合がある。設計を表すデータは、いくつかの態様で設計を表し得る。まず、シミュレーションで有用なように、ハードウェアは、ハードウェア記述言語、または別の機能記述言語を用いて表され得る。更に、ロジックおよび/またはトランジスタゲートを用いる回路レベルモデルは、設計工程のいくつかの段階において製造され得る。更に、いくつかの段階では、大部分の設計が、ハードウェアモデルで様々なデバイスの物理的配置を表すデータのレベルに到達する。従来の半導体製造技術が用いられる場合、ハードウェアモデルを表すデータは、集積回路を製造するのに用いられるマスクの異なるマスク層に、様々な機能の存在または不存在を指定するデータであり得る。設計の任意の表現において、データは、機械可読媒体に任意の形式で格納され得る。メモリ、または、ディスク等の磁気もしくは光ストレージは、変調された光または電気の波を介して送信される情報を、またはそうでなければそのような情報を送信するために生成された情報を格納する機械可読媒体であってもよい。コードまたは設計を示し、または搬送する電気的な搬送波が送信される場合、その電気信号のコピー、バッファリング処理、または再送信が実行される程度において、新しいコピーが作成される。従って、通信プロバイダまたはネットワークプロバイダは、本発明の実施形態における技術を実施する搬送波にエンコードされた情報等の物品を少なくとも一時的に有形機械可読媒体上に格納し得る。
最新のプロセッサにおいて、いくつかの異なる実行ユニットが用いられ、様々なコードおよび命令を処理して実行する。全ての命令が同等に作成されるわけではない。いくつかは完了するのにより迅速であるが、他のものは完了するためにいくつかのクロックサイクルを取り得るからである。命令のスループットが高速である程、プロセッサの全体的な性能は良くなる。従って、できるだけ速く、できるだけ多くの命令を実行させることは有益であろう。しかし、より大きな複雑性を有し、実行時間およびプロセッサリソースの観点からより多くのことを必要とする一定の命令が存在する。例えば、浮動小数点命令、ロード/ストアオペレーション、データムーブ等がある。
インターネット、テキスト、およびマルチメディアアプリケーションにおいてはより多くのコンピュータシステムが用いられるので、追加のプロセッサのサポートが経時的に導入されている。一実施形態において、命令セットは、データタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込みおよび例外処理、ならびに外部入出力(I/O)を含む1または複数のコンピュータアーキテクチャに関連付けられ得る。
一実施形態において、命令セットアーキテクチャ(ISA)は、1または複数のマイクロアーキテクチャにより実装され得、これらのマイクロアーキテクチャは、1または複数の命令セットを実装するために用いられるプロセッサロジックおよび回路を含む。従って、異なるマイクロアーキテクチャを用いるプロセッサが、共通の命令セットのうちの少なくとも一部を共有し得る。例えば、Intel(登録商標)Pentium(登録商標)4プロセッサ、Intel(登録商標)Core(登録商標)プロセッサ、およびカリフォルニア州サニーベールにあるAdvanced Micro Devices,Inc.のプロセッサは、(より新しいバージョンを追加されたいくつかの拡張を伴う)ほぼ同一のバージョンのx86命令セットを実装するが、異なる内部設計を有する。同様に、ARM Holdings,Ltd.、MIPS等の他のプロセッサ開発会社、またはそれらのラインセンシもしくは採用者により設計されたプロセッサは、共通の命令セットのうちの少なくとも一部を共有し得るが、異なるプロセッサ設計を含む場合がある。例えば、ISAの同一のレジスタアーキテクチャは、専用の物理レジスタ、レジスタリネームメカニズム(例えば、レジスタエイリアステーブル(RAT)、リオーダバッファ(ROB)およびリタイアメントレジスタファイルを用いる)を用いる1または複数の動的に割り当てられた物理レジスタ)を含む、新しいか、または周知の技術を用いる異なるマイクロアーキテクチャに異なる態様で実装され得る。一実施形態において、レジスタは、1または複数のレジスタ、レジスタアーキテクチャ、レジスタファイル、またはソフトウェアプログラマによりアドレス指定可能であり得るか、またはそうでない場合がある他のレジスタセットを含み得る。
一実施形態において、命令は、1または複数の命令フォーマットを含み得る。一実施形態において、命令フォーマットは、とりわけ、実行されるべきオペレーションおよび当該オペレーションが実行されるオペランドを指定する様々なフィールド(ビットの数、ビットの位置等)を示し得る。いくつかの命令フォーマットは、命令テンプレート(またはサブフォーマット)により更に分割定義され得る。例えば、所与の命令フォーマットの命令テンプレートは、異なるサブセットの命令フォーマットのフィールドを有するものと定義され得、および/または異なるように解釈される所与のフィールドを有するものと定義され得る。一実施形態において、命令は、命令フォーマット(定義されている場合、当該命令フォーマットの命令テンプレートのうちの所与のものの形で)を用いて表され、オペレーション、および当該オペレーションが演算を行うオペランドを指定し、または示す。
サイエンティフィックアプリケーション、財務アプリケーション、自動ベクトル化汎用アプリケーション、RMS(認識、マイニング、および合成)アプリケーション、および視覚アプリケーション、ならびにマルチメディアアプリケーション(例えば、2D/3Dグラフィックス、画像処理、動画圧縮/解凍、音声認識アルゴリズム、および音声操作)は、多数のデータアイテムに対して実行される同一のオペレーションを必要とする場合がある。一実施形態において、単一命令多重データ(SIMD)は、プロセッサに複数のデータ要素に対するオペレーションを実行させる命令タイプを指す。SIMD技術は、レジスタ内のビットをいくつかの固定サイズのデータ要素または可変サイズのデータ要素に論理的に分割し得るプロセッサにおいて用いられ得、これらのデータ要素の各々は、別個の値を表す。例えば、一実施形態において、64ビットのレジスタにおけるビットは、4個の別個の16ビットデータ要素を含むソースオペランドとして編成され得、これらのデータ要素の各々は、別個の16ビットの値を表す。このタイプのデータは、「パックド」データタイプまたは「ベクトル」データタイプと称される場合があり、このデータタイプのオペランドは、パックドデータオペランドまたはベクトルオペランドと称される。一実施形態において、パックドデータアイテムまたはベクトルは、単一のレジスタ内に格納されたパックドデータ要素のシーケンスであってもよく、パックドデータオペランドまたはベクトルオペランドは、SIMD命令(または「パックドデータ命令」もしくは「ベクトル命令」)のソースオペランドもしくはデスティネーションオペランドであってもよい。一実施形態において、SIMD命令は、同一または異なる数のデータ要素を有し、同一または異なるデータ要素の順序の、同一または異なるサイズのデスティネーションベクトルオペランド(結果ベクトルオペランドとも称される)を生成するために、2つのソースベクトルオペランドに対して実行される単一のベクトルオペレーションを指定する。
x86、MMX(登録商標)、ストリーミングSIMD拡張(SSE)、SSE2、SSE3、SSE4.1、およびSSE4.2の命令を含む命令セットを有するIntel(登録商標)Core(登録商標)プロセッサ、ベクトル浮動小数点(VFP)および/またはNEONの命令を含む命令セットを有するARM Cortex(登録商標)ファミリのプロセッサ等のARMプロセッサ、ならびに中国科学院計算技術研究所(ICT)により開発された龍芯(Loongson)ファミリのプロセッサ等のMIPSプロセッサにより使用されるもの等、SIMD技術は、アプリケーション性能における著しい向上を可能にした(Core(登録商標)およびMMX(登録商標)は、カリフォルニア州サンタクララにあるIntel(登録商標)Corporationの登録商標または商標である)。
一実施形態において、デスティネーションおよびソースのレジスタ/データは、対応するデータまたはオペレーションのソースおよびデスティネーションを表す一般的な用語である。いくつかの実施形態において、これらは、示されるもの以外の名前もしくは機能を有するレジスタ、メモリ、または他のストレージ領域により実装され得る。例えば、一実施形態において、「DEST1」は一時的ストレージレジスタまたは他のストレージ領域であり得るが、「SRC1」および「SRC2」は、第1および第2のソースストレージレジスタまたは他のストレージ領域であり得る、等である。他の実施形態において、SRCおよびDESTストレージ領域のうちの2またはそれより多くは、同じストレージ領域(例えば、SIMDレジスタ)内の異なるデータストレージ要素に対応し得る。一実施形態において、ソースレジスタのうちの1つは、例えば、第1および第2のソースデータに対して実行されるオペレーションの結果を、デスティネーションレジスタとして機能する2つのソースレジスタのうちの1つにライトバックすることにより、デスティネーションレジスタとしても機能し得る。
図1Aは、本発明の一実施形態による、命令を実行する実行ユニットを含むプロセッサと共に形成された例示的なコンピュータシステムのブロック図である。システム100は、プロセッサ102のようなコンポーネントを含み、本明細書において説明される実施形態等、本発明によるロジックを含む実行ユニットを利用してデータを処理するためのアルゴリズムを実行する。システム100は、カリフォルニア州サンタクララにあるIntel(登録商標)Corporationから入手可能なPentium(登録商標)III、Pentium(登録商標)4、Xeon(登録商標)、Itanium(登録商標)、XScale(登録商標)、および/またはStrongARM(登録商標)マイクロプロセッサに基づいた処理システムを表すが、(他のマイクロプロセッサ、エンジニアリングワークステーション、セットトップボックス等を有するPCを含む)他のシステムも用いられ得る。一実施形態において、例示的なシステム100は、ワシントン州レドモンドにあるマイクロソフトコーポレーションから入手可能なウィンドウズ(登録商標)オペレーティングシステムのあるバージョンを実行し得るが、他のオペレーティングシステム(例えば、UNIX(登録商標)およびLinux(登録商標))、エンベデッドソフトウェア、および/またはグラフィカルユーザインタフェースも用いられ得る。従って、本発明の実施形態は、ハードウェア回路およびソフトウェアのいずれの特定の組み合わせにも限定されない。
実施形態は、コンピュータシステムに限定されない。本発明の代替的な実施形態は、ハンドヘルドデバイス等の他のデバイスおよびエンベデッドアプリケーションにおいて用いられ得る。ハンドヘルドデバイスのいくつかの例としては、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、携帯情報端末(PDA)、およびハンドヘルドPCが挙げられる。エンベデッドアプリケーションとしては、マイクロコントローラ、デジタル信号プロセッサ(DSP)、システムオンチップ、ネットワークコンピュータ(NetPC)、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク(WAN)スイッチ、または少なくとも一実施形態による1または複数の命令を実行し得るその他のシステムが挙げられ得る。
図1Aは、本発明の一実施形態による、少なくとも1つの命令を実行するアルゴリズムを実行するための1または複数の実行ユニット108を含むプロセッサ102と共に形成されたコンピュータシステム100のブロック図である。一実施形態は、シングルプロセッサのデスクトップシステムまたはサーバシステムの文脈で説明され得るが、代替的な実施形態は、マルチプロセッサシステムに含まれ得る。システム100は、「ハブ」システムアーキテクチャの一例である。コンピュータシステム100は、データ信号を処理するプロセッサ102を含む。プロセッサ102は、例えば、複合命令セットコンピュータ(CISC)マイクロプロセッサ、縮小命令セットコンピューティング(RISC)マイクロプロセッサ、超長命令語(VLIW)マイクロプロセッサ、命令セットの組み合わせを実装するプロセッサ、またはデジタル信号プロセッサ等のその他のプロセッサデバイスであり得る。プロセッサ102は、システム100におけるプロセッサ102と他のコンポーネントとの間でデータ信号を送信し得るプロセッサバス110に結合される。システム100の要素は、当業者に周知の従来の機能を実行する。
一実施形態において、プロセッサ102は、レベル1(L1)内部キャッシュメモリ104を含む。アーキテクチャに応じて、プロセッサ102は、単一の内部キャッシュまたは複数のレベルの内部キャッシュを有し得る。あるいは、別の実施形態において、キャッシュメモリは、プロセッサ102の外部に存在し得る。他の実施形態は、具体的な実装および必要性に応じて、内部キャッシュおよび外部キャッシュの両方の組み合わせも含み得る。レジスタファイル106は、整数レジスタ、浮動小数点レジスタ、状態レジスタ、および命令ポインタレジスタを含む様々なレジスタ内に異なるタイプのデータを格納し得る。
整数および浮動小数点オペレーションを実行するためのロジックを含む実行ユニット108も、プロセッサ102内に存在する。プロセッサ102は、特定のマクロ命令のためのマイクロコードを格納するマイクロコード(μコード)ROMも含む。一実施形態においては、実行ユニット108は、パックド命令セット109を処理するロジックを含む。命令を実行する関連回路と共に、汎用プロセッサ102の命令セットにパックド命令セット109を含むことにより、多くのマルチメディアアプリケーションにより用いられるオペレーションは、汎用プロセッサ102におけるパックドデータを用いて実行され得る。従って、多くのマルチメディアアプリケーションは、パックドデータに対するオペレーションを実行するためにプロセッサデータバスの全幅を用いることによってより効率的に加速および実行され得る。これにより、1データ要素に対して1または複数のオペレーションを一度に実行するべく、プロセッサデータバスにわたってより小さい単位のデータを転送する必要性を省き得る。
実行ユニット108の代替的な実施形態は、マイクロコントローラ、エンベデッドプロセッサ、グラフィックスデバイス、DSP、および他のタイプの論理回路においても用いられ得る。システム100は、メモリ120を含む。メモリ120は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、または他のメモリデバイスであり得る。メモリ120は、プロセッサ102により実行され得るデータ信号により表される命令および/またはデータを格納し得る。
システムロジックチップ116は、プロセッサバス110およびメモリ120に結合される。例示される実施形態におけるシステムロジックチップ116は、メモリコントローラハブ(MCH)である。プロセッサ102は、プロセッサバス110を介してMCH116と通信し得る。MCH116は、命令およびデータの格納、ならびにグラフィックスコマンド、データ、およびテクスチャの格納用のメモリ120に高帯域幅のメモリパス118を提供する。MCH116は、システム100におけるプロセッサ102と、メモリ120と、他のコンポーネントとの間にデータ信号を宛て、プロセッサバス110と、メモリ120と、システムI/O122との間でデータ信号をブリッジする。いくつかの実施形態において、システムロジックチップ116は、グラフィックスコントローラ112に結合するためのグラフィックスポートを提供し得る。MCH116は、メモリインタフェース118を介してメモリ120に結合される。グラフィックスカード112は、アクセラレーテッドグラフィックスポート(AGP)相互接続114を介してMCH116に結合される。
システム100は、MCH116をI/Oコントローラハブ(ICH)130に結合するためにプロプライエタリハブインタフェースバス122を用いる。ICH130は、ローカルI/Oバスを介していくつかのI/Oデバイスに直接接続を提供する。ローカルI/Oバスは、周辺機器をメモリ120、チップセット、およびプロセッサ102に接続するための高速I/Oバスである。いくつかの例は、オーディオコントローラ、ファームウェアハブ(フラッシュBIOS)128、無線トランシーバ126、データストレージ124、ユーザ入力・キーボードインタフェースを含むレガシI/Oコントローラ、ユニバーサルシリアルバス(USB)等のシリアル拡張ポート、およびネットワークコントローラ134である。データストレージデバイス124は、ハードディスクドライブ、フロッピー(登録商標)ディスクドライブ、CD‐ROMデバイス、フラッシュメモリデバイス、または他の大容量ストレージデバイスを備え得る。
システムの別の実施形態においては、一実施形態による命令は、システムオンチップと共に用いられ得る。システムオンチップの一実施形態は、プロセッサおよびメモリを備える。1つのそのようなシステムのためのメモリは、フラッシュメモリである。フラッシュメモリは、プロセッサおよび他のシステムコンポーネントと同じダイ上に配置され得る。更に、メモリコントローラまたはグラフィックスコントローラ等、他のロジックブロックも、システムオンチップ上に配置され得る。
図1Bは、本発明の一実施形態の原理を実装するデータ処理システム140を示す。当業者には、本発明の実施形態の範囲を逸脱することなく、本明細書に説明される実施形態が代替的な処理システムと共に用いられ得ることが容易に理解されよう。
コンピュータシステム140は、一実施形態による少なくとも1つの命令を実行することができるプロセッシングコア159を備える。一実施形態においては、プロセッシングコア159は、CISC、RISC、またはVLIWタイプのアーキテクチャを含むが、これらに限定されない任意のタイプのアーキテクチャの処理ユニットを表す。また、プロセッシングコア159は、1または複数の処理技術における製造に好適であり得、機械可読媒体上に十分詳細に表されることにより当該製造を容易にするのに好適であり得る。
プロセッシングコア159は、実行ユニット142、レジスタファイル145のセット、およびデコーダ144を備える。プロセッシングコア159は、本発明の実施形態の理解には必須でない追加の回路(図示せず)も含む。実行ユニット142は、プロセッシングコア159により受信された命令を実行するために用いられる。典型的なプロセッサ命令を実行することに加えて、実行ユニット142は、パックドデータフォーマットに対するオペレーションを実行するためのパックド命令セット143の命令を実行し得る。パックド命令セット143は、本発明の実施形態を実行するための命令および他のパックド命令を含む。実行ユニット142は、内部バスによりレジスタファイル145に結合される。レジスタファイル145は、データを含む情報を格納するためのプロセッシングコア159上のストレージ領域を表す。上述のように、パックドデータを格納するために用いられるストレージ領域は、重要ではないことが理解される。実行ユニット142は、デコーダ144に結合される。デコーダ144は、プロセッシングコア159により受信された命令を、制御信号および/またはマイクロコードエントリポイントにデコードするために用いられる。これらの制御信号および/またはマイクロコードエントリポイントに応答して、実行ユニット142は、適切なオペレーションを実行する。一実施形態において、デコーダは、命令のオペコードを解釈するために用いられ、これにより、どのオペレーションが命令内に示された対応データに対して実行されるべきかを示す。
プロセッシングコア159は、様々な他のシステムデバイスと通信するためのバス141に結合される。そのようなシステムデバイスとしては、例えば、シンクロナスダイナミックランダムアクセスメモリ(SDRAM)制御器146、スタティックランダムアクセスメモリ(SRAM)制御器147、バーストフラッシュメモリインタフェース148、PCメモリカード国際協会(PCMCIA)/コンパクトフラッシュ(登録商標)(CF)カード制御器149、液晶ディスプレイ(LCD)制御器150、ダイレクトメモリアクセス(DMA)コントローラ151、および代替的なバスマスタインタフェース152が挙げられ得るが、これらに限定されない。一実施形態において、データ処理システム140は、I/Oバス153を介して様々なI/Oデバイスと通信するためのI/Oブリッジ154も備え得る。そのようなI/Oデバイスとしては、例えば、ユニバーサルアシンクロナスレシーバ/トランスミッタ(UART)155、ユニバーサルシリアルバス(USB)156、Bluetooth(登録商標)無線UART157、およびI/O拡張インタフェース158が挙げられ得るが、これらに限定されない。
データ処理システム140の一実施形態は、モバイル、ネットワーク、および/または無線の通信、ならびにテキスト文字列比較オペレーションを含むSIMDオペレーションを実行することができるプロセッシングコア159を提供する。プロセッシングコア159は、ウォルシュアダマール変換、高速フーリエ変換(FFT)、離散コサイン変換(DCT)等の離散変換、およびそれらの各逆変換、色空間変換、動画エンコード動き推定、または動画デコード動き補償等の圧縮/解凍技術、ならびにパルス符号化変調(PCM)等の変調/復調(MODEM)機能を含む様々なオーディオ、動画、画像、および通信のアルゴリズムでプログラミングされ得る。
図1Cは、SIMDベクトルパックドタプル相互比較機能を提供する命令を実行することができるデータ処理システムの代替的な別の実施形態を示す。代替的な一実施形態によれば、データ処理システム160は、メインプロセッサ166、SIMDコプロセッサ161、キャッシュメモリ167、および入出力システム168を含み得る。任意選択で、入出力システム168は、無線インタフェース169に結合され得る。SIMDコプロセッサ161は、一実施形態による命令を含むオペレーションを実行することができる。プロセッシングコア170は、1または複数の処理技術における製造に好適であり得、機械可読媒体上に十分詳細に表されることにより、プロセッシングコア170を含むデータ処理システム160の全てまたは一部の製造を容易にするのに好適であり得る。
一実施形態においては、SIMDコプロセッサ161は、実行ユニット162およびレジスタファイル164のセットを備える。メインプロセッサ166の一実施形態は、実行ユニット162による実行のために一実施形態による命令を含む命令セット163の命令を認識するデコーダ165を備える。代替的な実施形態において、SIMDコプロセッサ161は、命令セット163の命令をデコードするデコーダ165Bの少なくとも一部も備える。プロセッシングコア170は、本発明の実施形態の理解には必須でない追加の回路(図示せず)も含む。
オペレーションにおいて、メインプロセッサ166は、キャッシュメモリ167および入出力システム168とのインタラクションを含む一般的なタイプのデータ処理オペレーションを制御するデータ処理命令のストリームを実行する。SIMDコプロセッサ命令は、データ処理命令のストリーム内に埋め込まれる。メインプロセッサ166のデコーダ165は、これらのSIMDコプロセッサ命令を、取り付けられたSIMDコプロセッサ161により実行されるべきタイプとして認識する。従って、メインプロセッサ166は、コプロセッサバス171上でこれらのSIMDコプロセッサ命令(またはSIMDコプロセッサ命令を表す制御信号)を発行し、命令は、取り付けられた任意のSIMDコプロセッサによりコプロセッサバス171から受信される。この場合、SIMDコプロセッサ161は、そのための受信済みの任意のSIMDコプロセッサ命令を受け取って実行する。
データは、SIMDコプロセッサ命令により処理するために無線インタフェース169を介して受信され得る。一例においては、音声通信は、デジタル信号の形式で受信され得、デジタル信号は、SIMDコプロセッサ命令により処理され、音声通信を表すデジタルオーディオサンプルを再生成し得る。別の例において、圧縮した音声および/または動画は、デジタルビットストリームの形式で受信され得、デジタルビットストリームは、SIMDコプロセッサ命令により処理され、デジタルオーディオサンプルおよび/または動画フレームを再生成し得る。プロセッシングコア170の一実施形態において、メインプロセッサ166、およびSIMDコプロセッサ161は、単一のプロセッシングコア170に統合される。単一のプロセッシングコア170は、実行ユニット162、レジスタファイル164のセット、および一実施形態による命令を含む命令セット163の命令を認識するデコーダ165を備える。
図2は、本発明の一実施形態による命令を実行する論理回路を含むプロセッサ200のためのマイクロアーキテクチャのブロック図である。いくつかの実施形態において、一実施形態による命令は、バイト、ワード、ダブルワード、クワッドワード等のサイズ、ならびに単精度および倍精度の整数および浮動小数点のデータタイプのようなデータタイプを有するデータ要素に対して演算を行うように実装され得る。一実施形態において、インオーダフロントエンド201は、実行されるべき命令をフェッチし、それらをプロセッサパイプラインにおいて後に用いるために用意するプロセッサ200の一部である。フロントエンド201は、いくつかのユニットを含み得る。一実施形態において、命令プリフェッチャ226は、メモリから命令をフェッチし、それらを命令デコーダ228へフィードし、命令デコーダ228はそれらをデコードまたは解釈する。例えば、一実施形態において、デコーダは、機械が実行し得る「マイクロ命令」または「マイクロオペレーション」(マイクロオプまたはμオプとも呼ばれる)と呼ばれる1または複数のオペレーションに、受信済み命令をデコードする。他の実施形態において、デコーダは、命令をパースして、一実施形態によるオペレーションを実行するマイクロアーキテクチャにより用いられるオペコードおよび対応するデータ、ならびに制御フィールドにする。一実施形態において、トレースキャッシュ230は、デコード済みのμオプを受け取り、それらをプログラムで順序付けられたシーケンスにアセンブルし、または実行するためにμオプキュー234においてトレースする。トレースキャッシュ230が複合命令を受け取ると、マイクロコードROM232は、オペレーションを完了するのに必要とされるμオプを提供する。
いくつかの命令は、単一のマイクロオプに変換されるが、他のものは、オペレーション全体を完了するのにいくつかのマイクロオプを必要とする。一実施形態において、命令を完了するべく、5以上のマイクロオプが必要とされる場合、デコーダ228は、マイクロコードROM232にアクセスして命令を実行する。一実施形態において、命令は、命令デコーダ228において処理するための少数のマイクロオプにデコードされ得る。別の実施形態において、オペレーションを実現するのにいくつかのマイクロオプが必要とされる場合、命令は、マイクロコードROM232内に格納され得る。トレースキャッシュ230は、マイクロコードROM232から一実施形態による1または複数の命令を完了するマイクロコードシーケンスを読み出すための適切なマイクロ命令ポインタを決定するエントリポイントプログラマブルロジックアレイ(PLA)を参照する。マイクロコードROM232が命令のためのマイクロオプを配列し終えた後、機械のフロントエンド201は、トレースキャッシュ230からマイクロオプのフェッチを再開する。
アウトオブオーダ実行エンジン203において、実行のために命令が用意される。アウトオブオーダ実行ロジックは、命令フローがパイプラインを下って、実行をスケジューリングされるときに性能を最適化するべく、命令フローを円滑にして並べ替えるためのいくつかのバッファを有する。アロケータロジックは、実行するために、各μオプが必要とするマシンバッファおよびリソースを割り当てる。レジスタリネームロジックは、ロジックレジスタをレジスタファイルにおけるエントリにリネームする。また、アロケータは命令スケジューラ、すなわちメモリスケジューラ、高速スケジューラ202、低速/一般浮動小数点スケジューラ204、および簡易浮動小数点スケジューラ206の前に、μオプ毎に2つのμオプキューのうちの1つのエントリを割り当てる。μオプオプキューの1つはメモリオペレーションに関するものであり、もう1つは非メモリオペレーションに関するものである。μオプがそのオペレーションを完了するのに必要とする依存先の入力レジスタオペランドソースの準備ができたことおよび実行リソースの利用可能性に基づいて、μオプスケジューラ202、204、206は、μオプがいつ実行する準備ができるかを判断する。一実施形態の高速スケジューラ202は、メインクロックサイクルの半分毎にスケジューリングし得るが、他のスケジューラは、メインプロセッサのクロックサイクル毎に1回のみスケジューリングし得る。スケジューラは、μオプの実行をスケジューリングするためにディスパッチポートを調整する。
レジスタファイル208、210は、スケジューラ202、204、206と、実行ブロック211の実行ユニット212、214、216、218、220、222、224との間にある。整数および浮動小数点のオペレーションのために各々、別個のレジスタファイル208、210が存在する。また、一実施形態の各レジスタファイル208、210は、レジスタファイルにまだ書き込まれていない完了したばかりの結果を、新しい依存性μオプへとバイパスし、または転送し得るバイパスネットワークを含む。また、整数レジスタファイル208および浮動小数点レジスタファイル210は、他方とデータを通信することができる。一実施形態においては、整数レジスタファイル208は、2つの別個のレジスタファイルに分割され、1つのレジスタファイルは、データの下位の32ビット用であり、第2のレジスタファイルは、データの上位の32ビット用である。一実施形態の浮動小数点レジスタファイル210は、128ビット幅のエントリを有する。典型的には、浮動小数点命令は、64ビット〜128ビット幅のオペランドを有するからである。
実行ブロック211は、実行ユニット212、214、216、218、220、222、224を含み、命令がここで実際に実行される。このセクションは、マイクロ命令が実行する必要がある整数および浮動小数点のデータオペランド値を格納するレジスタファイル208、210を含む。一実施形態のプロセッサ200は、いくつかの実行ユニット、すなわち、アドレス生成ユニット(AGU)212、AGU214、高速ALU216、高速ALU218、低速ALU220、浮動小数点ALU222、浮動小数点移動ユニット224から構成される。一実施形態において、浮動小数点実行ブロック222、224は、浮動小数点、MMX、SIMD、およびSSE、または他のオペレーションを実行する。一実施形態の浮動小数点ALU222は、除算、平方根、および剰余のマイクロオプを実行する64ビットx64ビットの浮動小数点除算器を含む。本発明の実施形態において、浮動小数点値を含む命令は、浮動小数点ハードウェアにより処理され得る。一実施形態において、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ビット幅のパックドデータオペランドに対して演算を行い得る。
一実施形態において、μオプスケジューラ202、204、206は、親のロードが実行を終了する前に依存性オペレーションをディスパッチする。μオプはプロセッサ200において投機的にスケジューリングされ、実行されるので、プロセッサ200は、メモリミスを処理するロジックも含む。データロードがデータキャッシュ内でミスを起こした場合、一時的に誤ったデータを伴ってスケジューラを離れた依存性オペレーションがパイプライン内でインフライトであり得る。リプレイメカニズムは、誤ったデータを用いる命令を追跡し、再実行する。依存性オペレーションのみが再生される必要があり、非依存性オペレーションは、完了することが可能である。プロセッサの一実施形態におけるスケジューラおよびリプレイメカニズムは、SIMDベクトルパックドタプル相互比較機能を提供する命令をキャッチするようにも設計される。
「レジスタ」という用語は、オペランドを識別する命令の一部として用いられるオンボードプロセッサのストレージ位置を指し得る。換言すれば、レジスタは、プロセッサの(プログラマの視点から)外部から利用可能なものであってもよい。しかし、実施形態のレジスタは、特定のタイプの回路にその意味が限定されるべきではない。むしろ、実施形態のレジスタは、データを格納および提供し、本明細書に説明されている機能を実行することができる。本明細書において説明されるレジスタは、専用物理レジスタ、レジスタリネームを用いて動的に割り当てられた物理レジスタ、専用レジスタおよび動的に割り当てられた物理レジスタ等の組み合わせのような任意の数の異なる技術を用いて、回路によりプロセッサ内に実装され得る。一実施形態において、整数レジスタは、32ビットの整数データを格納する。一実施形態のレジスタファイルは、パックドデータ用の8個のマルチメディアSIMDレジスタも含む。後述のように、レジスタは、カリフォルニア州サンタクララにあるIntel(登録商標)CorporationのMMX技術で有効にされるマイクロプロセッサ内の64ビット幅のMMX(商標)レジスタ(いくつかの例において「mm」レジスタとも称される)等、パックドデータを保持するように設計されるデータレジスタとして理解される。これらのMMXレジスタは、整数および浮動小数点の両方の形式で利用可能であり、SIMD命令およびSSE命令を伴うパックドデータ要素で演算を行い得る。同様に、SSE2、SSE3、SSE4、またはそれ以降(汎用的に「SSEx」と称される)の技術に関連する128ビット幅のXMMレジスタも、そのようなパックドデータオペランドを保持するために用いられ得る。一実施形態において、パックドデータおよび整数データを格納するときに、レジスタは、2つのデータタイプを区別する必要はない。一実施形態において、整数および浮動小数点は、同一のレジスタファイルか、または異なるレジスタファイルに含まれる。更に、一実施形態において、浮動小数点データおよび整数データは、異なるレジスタか、または同一のレジスタに格納され得る。
以下の図における例において、いくつかのデータオペランドが説明される。図3Aは、本発明の一実施形態によるマルチメディアレジスタにおける様々なパックドデータタイプ表現を示す。図3Aは、128ビット幅のオペランドのパックドバイト310、パックドワード320、およびパックドダブルワード(dword)330のデータタイプを示す。本例におけるパックドバイトフォーマット310は128ビット長であり、16個のパックドバイトデータ要素を含む。ここでは、バイトは8ビットのデータとして定義される。各バイトデータ要素についての情報は、バイト0についてはビット7〜ビット0に格納され、バイト1についてはビット15〜ビット8に格納され、バイト2についてはビット23〜ビット16に格納され、最後にバイト15についてはビット120〜ビット127に格納される。従って、全ての利用可能なビットがレジスタにおいて用いられる。このストレージ構成は、プロセッサのストレージ効率を高める。同様に、ここでは16個のデータ要素にアクセスするので、1つのオペレーションが16個のデータ要素に対して並列に実行され得る。
一般には、データ要素は、同じ長さの他のデータ要素と共に単一のレジスタまたはメモリ位置に格納される個々のデータである。SSEx技術に関連するパックドデータシーケンスにおいては、XMMレジスタに格納されるデータ要素の数は、個々のデータ要素のビット長により分割された128ビットである。同様に、MMXおよびSSE技術に関連するパックドデータシーケンスにおいては、MMXレジスタに格納されるデータ要素の数は、個々のデータ要素のビット長により分割された64ビットである。図3Aに示されるデータタイプは、128ビット長であるが、本発明の実施形態は、64ビット幅、256ビット幅、512ビット幅、または他のサイズのオペランドでも演算を行い得る。本例のパックドワードフォーマット320は、128ビット長であり、8個のパックドワードデータ要素を含む。各パックドワードは、16ビットの情報を含む。図3Aのパックドダブルワードフォーマット330は、128ビット長であり、4個のパックドダブルワードデータ要素を含む。各パックドダブルワードデータ要素は、32ビットの情報を含む。パックドクワッドワードは、128ビット長であり、2個のパックドクワッドワードデータ要素を含む。
図3Bは、代替的なレジスタ内データストレージフォーマットを示す。各パックドデータは、2以上の非依存性データ要素を含み得る。3つのパックドデータフォーマットが示されている。すなわち、パックドハーフ341、パックドシングル342、およびパックドダブル343である。パックドハーフ341、パックドシングル342、およびパックドダブル343の一実施形態は、固定小数点データ要素を含む。代替的な実施形態において、パックドハーフ341、パックドシングル342、およびパックドダブル343のうちの1または複数は、浮動小数点データ要素を含み得る。パックドハーフ341の代替的な一実施形態は、8個の16ビットデータ要素を含む128ビット長である。パックドシングル342の一実施形態は、128ビット長であり、4個の32ビットデータ要素を含む。パックドダブル343の一実施形態は、128ビット長であり、2個の64ビットデータ要素を含む。そのようなパックドデータフォーマットが他のレジスタ長、例えば、96ビット、160ビット、192ビット、224ビット、256ビット、512ビット、またはそれより大きい長さに更に拡張され得ることが理解されよう。
図3Cは、本発明の一実施形態によるマルチメディアレジスタにおける様々な符号付きおよび符号なしのパックドデータタイプ表現を示す。符号なしパックドバイト表現344は、SIMDレジスタにおける符号なしパックドバイトの格納を示す。各バイトデータ要素についての情報は、バイト0についてはビット7〜ビット0に格納され、バイト1についてはビット15〜ビット8に格納され、バイト2についてはビット23〜ビット16に格納される等であり、最後にバイト15についてはビット120〜ビット127に格納される。従って、全ての利用可能なビットがレジスタにおいて用いられる。このストレージ構成は、プロセッサのストレージ効率を高め得る。同様に、ここでは16個のデータ要素にアクセスするので、1つのオペレーションが16個のデータ要素に対して並列に実行され得る。符号付きパックドバイト表現345は、符号付きパックドバイトの格納を示す。各バイトデータ要素の8番目のビットは、符号インジケータであることに留意されたい。符号なしパックドワード表現346は、ワード7〜ワード0がどのようにしてSIMDレジスタに格納されるかを示す。符号付きパックドワード表現347は、符号なしパックドワードのレジスタ内表現346に類似する。各ワードデータ要素の16番目のビットは、符号インジケータであることに留意されたい。符号なしパックドダブルワード表現348は、ダブルワードデータ要素がどのようにして格納されるかを示す。符号付きパックドダブルワード表現349は、符号なしパックドダブルワードのレジスタ内表現348に類似する。必要な符号ビットは、各ダブルワードデータ要素の32番目のビットであることに留意されたい。
図3Dは、カリフォルニア州サンタクララにあるIntel(登録商標)Corporationのワールドワイドウェブ(www)のintel.com/products/processor/manuals/から入手可能である「Intel(登録商標)64 and IA−32 Intel Architecture Software Developer's Manual Combined Volumes 2A and 2B:Instruction Set Reference A−Z」において説明されるタイプのオペコードフォーマットと一致する、32またはそれより多くのビット、およびレジスタ/メモリオペランドアドレス指定モードを有するオペレーションエンコード(オペコード)フォーマット360の一実施形態の図示である。一実施形態において、命令は、フィールド361および362のうちの1または複数によりエンコードされ得る。最大で2つのソースオペランド識別子364および365を含む、1命令当たり最大で2つのオペランド位置が識別され得る。一実施形態において、デスティネーションオペランド識別子366は、ソースオペランド識別子364と同一であるが、他の実施形態においてこれらは異なる。代替的な実施形態において、デスティネーションオペランド識別子366は、ソースオペランド識別子365と同一であるが、他の実施形態においてこれらは異なる。一実施形態において、ソースオペランド識別子364および365により識別されたソースオペランドのうちの1つは、命令の結果により上書きされるが、他の実施形態において、識別子364は、ソースレジスタ要素に対応し、識別子365は、デスティネーションレジスタ要素に対応する。一実施形態において、オペランド識別子364および365は、32ビットまたは64ビットのソースオペランドおよびデスティネーションオペランドを識別するために用いられ得る。
図3Eは、40個またはそれより多いビットを有する他の代替的なオペレーションエンコード(オペコード)フォーマット370の図示である。オペコードフォーマット370は、オペコードフォーマット360と一致し、任意選択のプレフィックスバイト378を含む。一実施形態による命令は、フィールド378、371、および372のうちの1または複数によりエンコードされ得る。1命令当たり最大で2つのオペランド位置が、ソースオペランド識別子374および375、ならびにプレフィックスバイト378により識別され得る。一実施形態において、プレフィックスバイト378は、32ビットまたは64ビットのソースオペランドおよびデスティネーションオペランドを識別するために用いられ得る。一実施形態において、デスティネーションオペランド識別子376は、ソースオペランド識別子374と同一であるが、他の実施形態においてこれらは異なる。代替的な実施形態において、デスティネーションオペランド識別子376は、ソースオペランド識別子375と同一であるが、他の実施形態においてこれらは異なる。一実施形態において、命令は、オペランド識別子374および375により識別されたオペランドのうちの1または複数に対して演算を行い、オペランド識別子374および375により識別された1または複数のオペランドは、命令の結果により上書きされるが、他の実施形態において、識別子374および375により識別されたオペランドは、別のレジスタにおける別のデータ要素に書き込まれる。オペコードフォーマット360および370は、MODフィールド363および373、ならびに任意選択のスケール・インデックス・ベースバイトおよび変位バイトよって部分的に指定されたレジスタからレジスタへのアドレス指定、メモリからレジスタへのアドレス指定、メモリによるレジスタのアドレス指定、レジスタによるレジスタのアドレス指定、即値によるレジスタのアドレス指定、レジスタからメモリへのアドレス指定を可能にする。
次に図3Fを参照すると、いくつかの代替的な実施形態において、64ビット(または128ビット、または256ビット、または512ビット、またはそれより大きいもの)の単一命令多重データ(SIMD)算術演算が、コプロセッサデータ処理(CDP)命令により実行され得る。オペレーションエンコード(オペコード)フォーマット380は、CDPオペコードフィールド382および389を有するそのような1つのCDP命令を図示する。代替的な実施形態におけるこのタイプのCDP命令オペレーションは、フィールド383、384、387、および388のうちの1または複数によりエンコードされ得る。最大で2つのソースオペランド識別子385および390、ならびに1つのデスティネーションオペランド識別子386を含む、1命令当たり最大で3つのオペランド位置が識別され得る。コプロセッサの一実施形態は、8ビット、16ビット、32ビット、および64ビットの値に対して演算を行い得る。一実施形態において、命令は整数データ要素に対して実行される。いくつかの実施形態において、命令は、条件フィールド381を用いて、条件付きで実行され得る。いくつかの実施形態においては、ソースデータサイズは、フィールド383によりエンコードされ得る。いくつかの実施形態において、ゼロ(Z)、負(N)、キャリー(C)、およびオーバーフロー(V)の検出は、SIMDフィールドに対して行われ得る。いくつかの命令において、飽和のタイプは、フィールド384によりエンコードされ得る。
次に図3Gを参照すると、カリフォルニア州サンタクララにあるIntel(登録商標)Corp.のワールドワイドウェブ(www)のintel.com/products/processor/manuals/から入手可能な「Intel(登録商標)Advanced Vector Extensions Programming Reference」に説明されるオペコードフォーマットのタイプと一致する別の実施形態によるSIMDベクトルパックドタプル相互比較機能を提供する、他の代替的なオペレーションエンコード(オペコード)フォーマット397の図示である。
元のx86命令セットは、様々なフォーマットのアドレスシラブルおよび即値オペランドが追加のバイトに含まれ、その存在が第1の「オペコード」バイトから分かる1バイトのオペコードを提供した。更に、オペコードに対する修飾子(命令の前に配置されなければならないのでプレフィックスと呼ばれた)として予約された特定のバイト値が存在した。(これらの特別なプレフィックス値を含む)元のパレットの256個のオペコードバイトが使い尽くされると、単一のバイトは、エスケープとして新しいセットの256個のオペコード専用となった。ベクトル命令(例えば、SIMD)が加えられると、より多くのオペコードに対する必要性が生じ、たとえプレフィックスを用いることによって拡張されても、「2バイト」のオペコードマップも不十分となった。このため、新しい命令が追加のマップに加えられ、このマップは、2バイトおよび任意選択のプレフィックスを識別子として用いる。
更に、64ビットモードで追加のレジスタを容易なものとするべく、プレフィックスとオペコード(およびオペコードを決定するのに必要な任意のエスケープバイト)との間に追加のプレフィックスが用いられ得る(「REX」と呼ばれる)。一実施形態において、REXは、64ビットモードで追加のレジスタの使用を示す4個の「ペイロードビットを有し得る。他の実施形態において、REXは、4ビットより少ないか、またはそれより大きなビットを有し得る。(概ねフォーマット360および/またはフォーマット370と一致する)少なくとも1つの命令セットの一般的なフォーマットが以下に汎用的に示されている。 [prefixes] [rex] escape [escape2] opcode modrm(等.)
オペコードフォーマット397は、オペコードフォーマット370と一致し、(一実施形態において16進数のC4で開始する)任意選択のVEXプレフィックスバイト391を備え、他の最も一般に用いられる命令プレフィックスバイトおよびエスケープコードを置き換える。例えば、以下は、2つのフィールドを用いて命令をエンコードする実施形態を示し、これは、第2のエスケープコードが元の命令中に存在する場合、またはREXフィールドにおける追加のビット(例えば、XBフィールドおよびWフィールド)が用いられる必要がある場合に用いられ得る。以下に示される実施形態において、レガシエスケープは、新しいエスケープ値により表され、レガシプレフィックスは、「ペイロード」バイトの一部として完全に圧縮され、レガシプレフィックスは、回収され、将来の拡張に利用可能であり、第2のエスケープコードは、フューチャマップまたは機能空間が利用可能な「マップ」フィールドにおいて圧縮され、新しい機能(例えば、大きくしたベクトル長および追加のソースレジスタ指定子)が追加される。
一実施形態による命令は、フィールド391および392のうちの1または複数によりエンコードされ得る。1命令当たり最大で4つのオペランド位置が、ソースオペランド識別子374および375と組み合わせ、任意選択のスケール・インデックス・ベース(SIB)識別子393、任意選択の変位識別子394、および任意選択の即値バイト395と組み合わせてフィールド391により識別され得る。一実施形態において、VEXプレフィックスバイト391は、32ビットもしくは64ビットのソースオペランドおよびデスティネーションオペランド、ならびに/または128ビットもしくは256ビットのSIMDレジスタオペランドまたはメモリオペランドを識別するために用いられ得る。一実施形態において、オペコードフォーマット397により提供される機能は、オペコードフォーマット370で冗長であり得るが、他の実施形態においてこれらは異なる。オペコードフォーマット370および397は、MODフィールド373、ならびに任意選択の(SIB)識別子393、任意選択の変位識別子394、および任意選択の即値バイト395により部分的に指定されたレジスタからレジスタへのアドレス指定、メモリからレジスタへのアドレス指定、メモリによるレジスタのアドレス指定、レジスタによるレジスタのアドレス指定、即値によるレジスタのアドレス指定、レジスタからメモリへのアドレス指定を可能にする。
次に図3Hを参照すると、別の実施形態によるSIMDベクトルパックドタプル相互比較機能を提供する他の代替的なオペレーションエンコード(オペコード)フォーマット398の図示である。オペコードフォーマット398は、オペコードフォーマット370および397と一致し、(一実施形態において16進数の62個で開始する)任意選択のEVEXプレフィックスバイト396を備え、他の最も一般に用いられる命令プレフィックスバイトおよびエスケープコードを置き換え、追加の機能を提供する。一実施形態による命令は、フィールド396および392のうちの1または複数によりエンコードされ得る。1命令当たり最大で4つのオペランド位置および1つのマスクが、ソースオペランド識別子374および375と組み合わせ、任意選択のスケール・インデックス・ベース(SIB)識別子393、任意選択の変位識別子394、および任意選択の即値バイト395と組み合わせてフィールド396により識別され得る。一実施形態において、EVEXプレフィックスバイト396は、32ビットもしくは64ビットのソースオペランドおよびデスティネーションオペランド、ならびに/または128ビット、256ビット、もしくは512ビットのSIMDレジスタオペランドまたはメモリオペランドを識別するために用いられ得る。一実施形態において、オペコードフォーマット398により提供される機能は、オペコードフォーマット370または397で冗長であり得るが、他の実施形態においてこれらは異なる。オペコードフォーマット398は、MODフィールド373、ならびに任意選択の(SIB)識別子393、任意選択の変位識別子394、および任意選択の即値バイト395により部分的に指定された、マスクを用いるレジスタからレジスタへのアドレス指定、メモリからレジスタへのアドレス指定、メモリによるレジスタのアドレス指定、レジスタによるレジスタのアドレス指定、即値によるレジスタのアドレス指定、レジスタからメモリへのアドレス指定を可能にする。(概ねフォーマット360および/またはフォーマット370と一致する)少なくとも1つの命令セットの一般的なフォーマットが以下に汎用的に示されている。
evex1 RXBmmmmm WvvvLpp evex4 opcode modrm[sib][disp][imm]
一実施形態において、EVEXフォーマット398に従ってエンコードされた命令は、例えば、ユーザ構成可能マスクレジスタ等の追加の新しい機能、または追加のオペランド、または128ビット、256ビット、もしくは512ビットのベクトルレジスタ、もしくはより高位レジスタからの選択等と共に用いるSIMDベクトルパックドタプル相互比較機能を提供するために用いられ得る追加の「ペイロード」ビットを有し得る。
例えば、マスクを用いないSIMDベクトルパックドタプル相互比較機能を提供するVEXフォーマット397が用いられ得る場合、明示的なユーザ構成可能マスクを用いるSIMDベクトルパックドタプル相互比較機能を提供するEVEXフォーマット398が用いられ得る。更に、128ビットまたは256ビットのベクトルレジスタにSIMDベクトルパックドタプル相互比較機能を提供するVEXフォーマット397が用いられ得る場合、128ビット、256ビット、512ビット、またはそれより大きい(またはより小さい)ベクトルレジスタにSIMDベクトルパックドタプル相互比較機能を提供するEVEXフォーマット398が用いられ得る。
効率的なベクトルアドレス競合解決のためのSIMDベクトルパックドタプル相互比較機能を提供する例示的な命令は、以下の例により示される。
比較される要素、例えばインデックスが比較結果を表すのに必要とされるマスクと同じサイズである場合(例えば、256ビットレジスタにおける16個の16ビット要素)、全ての要素を相互比較する命令の実行が適切であり得る。しかし、比較結果を表すのに利用可能なビットより比較する要素の方が多い場合、代替的な解決法が必要とされる場合がある。SIMDベクトルパックドタプル比較命令は、上記の例におけるように、SIMDベクトルアドレス競合検出機能、および効率的なSIMDアドレス競合解決のために競合マスクを生成するべく組み合わされた結果を提供する、可変サイズの要素およびメモリオフセットのための代替的な解決法として用いられ得ることが理解されよう。
例は、可変の複数のデータフィールドを含む第1および第2のレジスタを有するプロセッサを備え、データフィールドの各々は、第1のデータタイプの要素を格納する。いくつかの実施形態におけるプロセッサは、ベクトルパックドタプル(例えば、ダブル、クワドラプル、またはオクタプル)相互比較のためのSIMD命令を実行し、この命令は、第1のレジスタのタプルを構成するデータフィールドの一部におけるデータフィールド毎に、その対応する要素を、第2のレジスタにおけるタプル(またはメモリにおけるベクトル)のデータフィールドの対応する部分の全ての要素と比較し、対応する比較に応じて、対応する第1のレジスタ部分のマスクされない各要素に対応するビットマスクにおいて、第2のベクトル部分の各要素に対応するマスクビットをセットする。パックドタプルは各々、2個、4個、または8個の要素を備え得、これらの要素は、符号付きまたは符号なしのバックトバイト(8ビット)、ワード(16ビット)、ダブルワード(32ビット)、またはクワッドワード(64ビット)であってもよい。また、いくつかの実施形態において、任意の比較ビットマスクは、別のソース/デスティネーションレジスタに格納される前は、当該ソース/デスティネーションレジスタのデータフィールドにおける対応する要素によりシフトされた状態のままであり得る。通常、比較タイプは、命令によって指定された即値オペランドにより(例えば、equal、less‐than、less‐than or equal、always false、not equal、not less−than、not less‐than or equal、およびalways trueのうちの1つとして)示され得る。また、以下に(例えば、図14Aに関連して)より詳細に説明されるSIMD置換制御を提供するべく、SIMDベクトル先行ゼロカウント命令が可変サイズの要素および競合マスクと共に用いられ得ることが理解されよう。これによりメモリを介して依存性計算を実行することなく、レジスタにおける効率的なSIMDアドレス競合解決を可能にする。従って、本明細書に開示される命令は、特にギャザー・変更・スキャターアプリケーションにおいて効率的なSIMDアドレス競合解決を提供する。
図4Aは、本発明の少なくとも一実施形態による、インオーダパイプライン、およびレジスタリネームステージ、アウトオブオーダ発行/実行パイプラインを示すブロック図である。図4Bは、本発明の少なくとも一実施形態による、プロセッサに含まれるインオーダアーキテクチャコア、およびレジスタリネームロジック、アウトオブオーダ発行/実行ロジックを示すブロック図である。図4Aにおける実線ボックスは、インオーダパイプラインを示すが、破線ボックスは、レジスタリネーム、アウトオブオーダ発行/実行パイプラインを示す。同様に、図4Bにおける実線ボックスは、インオーダアーキテクチャロジックを示すが、破線ボックスは、レジスタリネームロジックおよびアウトオブオーダ発行/実行ロジックを示す。
図4Aにおいて、プロセッサパイプライン400は、フェッチステージ402、長さデコードステージ404、デコードステージ406、アロケーションステージ408、リネームステージ410、スケジューリング(ディスパッチもしくは発行としても知られる)ステージ412、レジスタ読み出し/メモリ読み出しステージ414、実行ステージ416、ライトバック/メモリライトステージ418、例外処理ステージ422、およびコミットステージ424を含む。
図4Bにおいて、矢印は、2またはそれより多くのユニットの間の結合を示し、矢印の方向は、それらのユニット間のデータフローの方向を示す。図4Bは、実行エンジンユニット450に結合されたフロントエンドユニット430を含むプロセッサコア490を示し、これら両方はメモリユニット470に結合されている。
コア490は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替的なコアタイプであり得る。なおも別の選択肢として、コア490は、例えば、ネットワークコアもしくは通信コア、圧縮エンジン、グラフィックスコア等のような専用コアであってもよい。
フロントエンドユニット430は、命令キャッシュユニット434に結合された分岐予測ユニット432を含み、命令キャッシュユニット434は、命令トランスレーションルックアサイドバッファ(TLB)436に結合され、TLB436は、命令フェッチユニット438に結合され、命令フェッチユニット438は、デコードユニット440に結合される。デコードユニット(もしくはデコーダ)は、命令をデコードして、出力として1または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または元の命令からデコードされ、もしくは別の方法で元の命令を反映し、もしくは元の命令から派生した他の制御信号を生成し得る。デコーダは、様々な異なるメカニズムを用いて実装され得る。好適なメカニズムの例としては、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)等が挙げられるが、これらに限定されない。命令キャッシュユニット434は、メモリユニット470におけるレベル2(L2)キャッシュユニット476に更に結合される。デコードユニット440は、実行エンジンユニット450におけるリネーム/アロケータユニット452に結合される。
実行エンジンユニット450は、リタイアメントユニット454に結合されたリネーム/アロケータユニット452と、1または複数のスケジューラユニット456のセットとを含む。スケジューラユニット456は、リザベーションステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット456は、物理レジスタファイルユニット458に結合される。物理レジスタファイルユニット458の各々は、1または複数の物理レジスタファイルを表し、これらの異なるものが、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点等、状態(例えば、実行されるべき次の命令のアドレスである命令ポインタ)等のような1または複数の異なるデータタイプを格納する。(例えば、リオーダバッファおよびリタイアメントレジスタファイルを用い、フューチャーファイル、履歴バッファ、およびリタイアメントレジスタファイルを用い、レジスタマップおよびレジスタのプールを用いる等して)レジスタリネームおよびアウトオブオーダ実行が実装され得る様々な態様を示すべく、物理レジスタファイルユニット458は、リタイアメントユニット454と重ね合わされている。一般に、アーキテクチャレジスタは、プロセッサの外部またはプログラマの視点から可視である。レジスタは、いずれの既知の特定タイプの回路にも限定されない。様々な異なるタイプのレジスタは、本明細書に説明されるようにデータを格納して提供することができる限り、好適である。好適なレジスタの例としては、専用の物理レジスタ、レジスタリネームを用いて動的に割り当てられた物理レジスタ、専用および動的に割り当てられた物理レジスタの組み合わせ等が挙げられるが、これらに限定されない。リタイアメントユニット454および物理レジスタファイルユニット458は、実行クラスタ460に結合される。実行クラスタ460は、1または複数の実行ユニット462のセット、および1または複数のメモリアクセスユニット464のセットを含む。実行ユニット462は、様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して様々なオペレーション(例えば、シフト、加算、減算、乗算)を実行し得る。いくつかの実施形態は、特定の関数または関数のセットに専用のいくつかの実行ユニットを含み得るが、他の実施形態は、1つの実行ユニットのみ、または全てがあらゆる関数を実行する複数の実行ユニットを含み得る。スケジューラユニット456、物理レジスタファイルユニット458、および実行クラスタ460は、場合によっては複数のものとして示される。なぜなら、ある実施形態は、一定のタイプのデータ/オペレーションのための別個のパイプライン(例えば、各々が自身のスケジューラユニット、物理レジスタファイルユニット、および/または実行クラスタを有し、別個のメモリアクセスパイプラインの場合に、このパイプラインの実行クラスタのみがメモリアクセスユニット464を有する一定の実施形態が実装される)スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプラインを生成するからである。また、別個のパイプラインが用いられる場合に、これらのパイプラインのうちの1または複数は、アウトオブオーダ発行/実行であり、残りはインオーダであり得ることを理解されたい。
メモリアクセスユニット464のセットは、メモリユニット470に結合される。メモリユニット470は、データキャッシュユニット474に結合されたデータTLBユニット472を含み、データキャッシュユニット474は、レベル2(L2)キャッシュユニット476に結合される。例示的な一実施形態において、メモリアクセスユニット464は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含み得、これらの各々は、メモリユニット470内のデータTLBユニット472に結合される。L2キャッシュユニット476は、1または複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
例として、例示的なレジスタリネーム、アウトオブオーダ発行/実行コアアーキテクチャは、パイプライン400を以下のように実装し得る。1)命令フェッチ438は、フェッチステージ402および長さデコードステージ404を実行する。2)デコードユニット440はデコードステージ406を実行する。3)リネーム/アロケータユニット452は、アロケーションステージ408およびリネームステージ410を実行する。4)スケジューラユニット456は、スケジューリングステージ412を実行する。5)物理レジスタファイルユニット458およびメモリユニット470は、レジスタ読み出し/メモリ読み出しステージ414を実行し、実行クラスタ460は、実行ステージ416を実行する。6)メモリユニット470および物理レジスタファイルユニット458は、ライトバック/メモリライトステージ418を実行する。7)様々なユニットは、例外処理ステージ422に関与してもよい。8)リタイアメントユニット454および物理レジスタファイルユニット458は、コミットステージ424を実行する。
コア490は、1または複数の命令セット(例えば、x86命令セット(より新しいバージョンを追加された、いくつかの拡張を伴う)、カリフォルニア州サニーベールにあるMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールにあるARM HoldingsのARM命令セット(NEON等の任意選択の追加拡張を伴う)をサポートし得る。
コアは、(オペレーションまたはスレッドの2またはそれより多い並列セットを実行する)マルチスレッディングをサポートし得、時分割マルチスレッディング、同時マルチスレッディング(物理コアが同時にマルチスレッディングするスレッドの各々のための論理コアを、単一の物理コアが提供する)、またはこれらの組み合わせ(例えば、時分割フェッチおよびデコードを行い、その後にIntel(登録商標)ハイパースレッディング技術等の同時マルチスレッディングを行う)を含む様々な態様でこれを実行し得ることを理解されたい。
レジスタリネームは、アウトオブオーダ実行の文脈で説明されているが、レジスタリネームは、インオーダアーキテクチャにおいて用いられ得ることを理解されたい。プロセッサの示される実施形態は、別個の命令およびデータキャッシュユニット434/474、ならびに共有L2キャッシュユニット476も含むが、代替的な実施形態は、例えば、レベル1(L1)内部キャッシュまたは複数のレベルの内部キャッシュ等の命令およびデータの両方に対する単一の内部キャッシュを有し得る。いくつかの実施形態において、システムは、内部キャッシュ、ならびにコアおよび/またはプロセッサの外部にある外部キャッシュの組み合わせを含み得る。あるいは、キャッシュの全てがコアおよび/またはプロセッサの外部にあってもよい。
図5は、本発明の実施形態による統合メモリコントローラおよびグラフィックスを用いるシングルコアプロセッサおよびマルチコアプロセッサ500のブロック図である。図5の実線ボックスは、シングルコア502A、システムエージェント510、1または複数のバスコントローラユニット516のセットを有するプロセッサ500を示すが、破線ボックスの任意選択の追加は、複数のコア502A〜N、システムエージェントユニット510における1または複数の統合メモリコントローラユニット514のセット、および統合グラフィックスロジック508を有する代替的なプロセッサ500を示す。
メモリ階層は、コア内の1または複数のレベルのキャッシュ、1セットまたは1もしくは複数の共有キャッシュユニット506、および統合メモリコントローラユニット514のセットに結合された外部メモリ(図示せず)を含む。共有キャッシュユニット506のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)等の1または複数の中間レベルのキャッシュ、または他のレベルのキャッシュ、ラストレベルキャッシュ(LLC)、および/またはこれらの組み合わせを含み得る。一実施形態において、リングベースの相互接続ユニット512は、統合グラフィックスロジック508、共有キャッシュユニット506のセット、およびシステムエージェントユニット510を相互接続し、代替的な実施形態は、そのようなユニットを相互接続するための任意の数の周知の技術を用い得る。
いくつかの実施形態において、コア502A〜Nのうちの1または複数は、マルチスレッディングすることができる。システムエージェント510は、コア502A〜Nを調整および動作させるそれらのコンポーネントを含む。システムエージェントユニット510は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含み得る。PCUは、コア502A〜Nおよび統合グラフィックスロジック508の電力状態を調整するのに必要とされるロジックおよびコンポーネントであるか、またはこれらを含み得る。ディスプレイユニットは、1または複数の外部接続ディスプレイを駆動するためのものである。
コア502A〜Nは、アーキテクチャおよび/または命令セットの観点からは同種または異種であり得る。例えば、コア502A〜Nのうちのいくつかは、インオーダであり得るが、他のものは、アウトオブオーダであり得る。別の例として、コア502A〜Nのうちの2またはそれより多いものは、同一の命令セットを実行することができる場合があるが、他のものは、当該命令セットのサブセットのみまたは異なる命令セットを実行することができる場合がある。
プロセッサは、Core(商標)i3、i5、i7、2DuoおよびQuad、Xeon(商標)、Itanium(商標)、XScale(商標)、またはStrongARM(商標)プロセッサ等の汎用プロセッサであってもよく、これらは、カリフォルニア州サンタクララにあるIntel(登録商標)Corporationから入手可能である。あるいは、プロセッサは、ARM Holdings,Ltd、MIPS等のような別の会社のものであってもよい。プロセッサは、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、コプロセッサ、エンベデッドプロセッサ等の専用プロセッサであってもよい。プロセッサは、1または複数のチップ上に実装されてもよい。プロセッサ500は、1または複数の基板の一部であってもよく、および/または、例えば、BiCMOS、CMOSもしくはNMOS等、任意の数の処理技術を用いて1または複数の基板上に実装されてもよい。
図6〜図8は、プロセッサ500を含むのに好適な例示的システムであるが、図9は、コア502のうちの1または複数を含み得る例示的なシステムオンチップ(SoC)である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスの技術分野で既知の他のシステム設計および構成も好適である。一般に、本明細書において開示されるプロセッサおよび/または他の実行ロジックを組み込むことができる多種多様なシステムまたは電子デバイスが、概ね好適である。
ここで図6を参照すると、本発明の一実施形態によるシステム600のブロック図が示されている。システム600は、1または複数のプロセッサ610、615を含み得、これらは、グラフィックスメモリコントローラハブ(GMCH)620に結合される。追加のプロセッサ615の任意選択の性質は、図6において破線で示される。
各プロセッサ610、615は、プロセッサ500のいくつかのバージョンであってもよい。しかし、統合グラフィックスロジックおよび集積メモリ制御ユニットがプロセッサ610、615内に存在する可能性は低いことに留意されたい。図6は、GMCH620が例えば、ダイナミックランダムアクセスメモリ(DRAM)であり得るメモリ640に結合され得ることを示す。DRAMは、少なくとも一実施形態において不揮発性キャッシュに関連付けられ得る。
GMCH620は、チップセット、またはチップセットの一部であり得る。GMCH620は、プロセッサ610、615と通信してプロセッサ610、615とメモリ640との間のインタラクションを制御し得る。GMCH620は、プロセッサ610、615とシステム600の他の要素との間でアクセラレーティッドバスインタフェースとしても動作し得る。少なくとも一実施形態において、GMCH620は、フロントサイドバス(FSB)695等のマルチドロップバスを介してプロセッサ610、615と通信する。
更に、GMCH620は、ディスプレイ645(フラットパネルディスプレイ等)に結合される。GMCH620は、統合グラフィックスアクセラレータを含み得る。GMCH620は、様々な周辺デバイスをシステム600に結合するために用いられ得る入出力(I/O)コントローラハブ(ICH)650に更に結合される。例えば、図6の実施形態において、外部グラフィックスデバイス660が示され、これは、別の周辺デバイス670と共にICH650に結合された別個のグラフィックスデバイスであり得る。
あるいは、更なるまたは異なるプロセッサは、システム600内にも存在し得る。例えば、追加のプロセッサ615は、プロセッサ610と同一の追加のプロセッサ、プロセッサ610とは異種もしくは非対称な追加のプロセッサ、アクセラレータ(例えば、グラフィックスアクセラレータもしくはデジタル信号処理(DSP)ユニット)、フィールドプログラマブルゲートアレイ、またはその他のプロセッサを含み得る。物理リソース610と物理リソース615との間には、アーキテクチャ、マイクロアーキテクチャ、熱、電力消費の特性等を含む幅広い価値基準に関して様々な違いが存在し得る。これらの違いは、プロセッサ610、615間の非対称性および異種性として実質的に現れ得る。少なくとも一実施形態において、様々なプロセッサ610、615は、同一のダイパッケージに存在する場合がある。
ここで図7を参照すると、本発明の実施形態による第2のシステム700のブロック図が示されている。図7に示されるように、マルチプロセッサシステム700はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続750を介して結合される第1のプロセッサ770および第2のプロセッサ780を含む。プロセッサ770および780の各々は、プロセッサ610、615のうちの1または複数としてのプロセッサ500のいくつかのバージョンであり得る。
2つのプロセッサ770、780のみが示されているが、本発明の範囲はそのようには限定されないことを理解されたい。他の実施形態において、1または複数の追加のプロセッサは、所与のプロセッサ内に存在し得る。
統合メモリコントローラユニット772および782を各々含むプロセッサ770および780が示される。プロセッサ770は、そのバスコントローラユニットの一部としてポイントツーポイント(P‐P)インタフェース776および778も含む。同様に、第2のプロセッサ780は、P‐Pインタフェース786および788を含む。プロセッサ770、780は、P‐Pインタフェース回路778、788を用いて、ポイントツーポイント(P‐P)インタフェース750を介して情報を交換し得る。図7に示されるように、IMC772および782は、プロセッサを各メモリ、すなわち、各プロセッサにローカルに取り付けられたメインメモリの一部であり得るメモリ732およびメモリ734に結合する。
プロセッサ770、780は各々、ポイントツーポイントインタフェース回路776、794、786、798を用い、個々のP‐Pインタフェース752、754を介してチップセット790と情報を交換し得る。また、チップセット790は、高性能グラフィックスインタフェース739を介して高性能グラフィックス回路738と情報を交換し得る。
共有キャッシュ(図示せず)は、どちらかのプロセッサに含まれ、または両方のプロセッサの外部にあり得るが、プロセッサが低電力モードにされると、どちらかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得るように、P‐P相互接続を介してプロセッサとなおも接続され得る。
チップセット790は、インタフェース796を介して第1のバス716に結合され得る。一実施形態において、第1のバス716は、周辺構成要素相互接続(PCI)バス、またはPCI Expressバス等のバス、または別の第3世代I/O相互接続バスであり得るが、本発明の範囲はそのように限定されない。
図7に示されるように、様々なI/Oデバイス714が、第1のバス716を第2のバス720に結合するバスブリッジ718と共に、第1のバス716に結合され得る。一実施形態において、第2のバス720は、低ピンカウント(LPC)バスであり得る。様々なデバイスは、一実施形態において、例えば、キーボードおよび/またはマウス722、通信デバイス727、ならびに命令/コードおよびデータ730を含み得るディスクドライブもしくは他の大容量ストレージデバイス等のストレージユニット728を含む第2のバス720に結合され得る。更に、オーディオI/O724は、第2のバス720に結合され得る。他のアーキテクチャが可能であることに留意されたい。例えば、図7のポイントツーポイントアーキテクチャに代えて、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装し得る。
ここで図8を参照すると、本発明の実施形態による第3のシステム800のブロック図が示されている。図7および図8の同一の要素は、同一の参照番号を有し、図8の他の態様を不明瞭にするのを避けるべく、図7の特定の態様は、図8から省略されている。
図8は、プロセッサ870、880が統合メモリおよびI/O制御ロジック(「CL」)872および882を各々含み得ることを示す。少なくとも一実施形態において、CL872、882は、図5および7に関連して上記されたもの等の統合メモリコントローラユニットを含み得る。更に、CL872、882は、I/O制御ロジックも含み得る。図8は、メモリ832、834がCL872、882に結合されていることのみならず、I/Oデバイス814も制御ロジック872、882に結合されていることを示す。レガシI/Oデバイス815は、チップセット890に結合される。
ここで図9を参照すると、本発明の実施形態によるSoC900のブロック図が示されている。図5における類似の要素は、同一の参照番号を有する。また、破線ボックスは、より高度なSoCの任意選択の特徴である。図9において、相互接続ユニット902は、1または複数のコア502A〜Nのセットおよび共有キャッシュユニット506を含むアプリケーションプロセッサ910と、システムエージェントユニット510と、バスコントローラユニット516と、統合メモリコントローラユニット514と、統合グラフィックスロジック508、静止画および/または動画カメラ機能を提供するための画像プロセッサ924、ハードウェアオーディオアクセラレーションを提供するためのオーディオプロセッサ926、ならびに動画のエンコード/デコード加速を提供するためのビデオプロセッサ928を含み得る1または複数のメディアプロセッサ920のセットと、スタティックランダムアクセスメモリ(SRAM)ユニット930と、ダイレクトメモリアクセス(DMA)ユニット932と、1または複数の外部ディスプレイに結合するためのディスプレイユニット940とに結合される。
図10は、一実施形態による少なくとも1つの命令を実行し得る中央処理装置(CPU)およびグラフィックス処理ユニット(GPU)を含むプロセッサを示す。一実施形態において、少なくとも一実施形態によるオペレーションを実行するための命令は、CPUにより実行され得るであろう。別の実施形態において、命令は、GPUにより実行され得るであろう。なおも別の実施形態において、命令は、GPUおよびCPUによって実行されるオペレーションの組み合わせにより実行され得る。例えば、一実施形態において、一実施形態による命令は、GPUに対する実行のために受信およびデコードされ得る。しかし、デコード済みの命令における1または複数のオペレーションは、CPUにより実行され得、結果は、命令の最終的リタイヤメントのためにGPUに戻され得る。逆に、いくつかの実施形態において、CPUは、プライマリプロセッサとして動作し得、GPUは、コプロセッサとして動作し得る。
いくつかの実施形態において、高並列スループットプロセッサから利益を得る命令は、GPUにより実行され得るが、ディープパイプライン化アーキテクチャから利益を得るプロセッサの性能から利益を得る命令は、CPUにより実行され得る。例えば、グラフィックス、サイエンティフィックアプリケーション、財務アプリケーション、および他の並列ワークロードは、GPUの性能から利益を得て、これに応じて実行され得るが、オペレーティングシステムカーネルまたはアプリケーションコード等のよりシーケンシャルなアプリケーションは、CPUにより好適であり得る。
図10において、プロセッサ1000は、CPU1005と、GPU1010と、画像プロセッサ1015と、ビデオプロセッサ1020と、USBコントローラ1025と、UARTコントローラ1030と、SPI/SDIOコントローラ1035と、ディスプレイデバイス1040と、高解像度マルチメディアインタフェース(HDMI(登録商標))コントローラ1045と、MIPIコントローラ1050と、フラッシュメモリコントローラ1055と、デュアルデータレート(DDR)コントローラ1060と、セキュリティエンジン1065と、I2S/I2C(集積回路間サウンド/集積回路間)インタフェース1070とを含む。より多くのCPUまたはGPU、および他の周辺機器インタフェースコントローラを含む、他のロジックおよび回路が図10のプロセッサに含まれ得る。
少なくとも一実施形態の1または複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体上に格納された代表的なデータによって実装され得、これらのデータは、機械により読み出されると、当該機械に本明細書に説明される技術を実行させるロジックを作成させる。「IPコア」として知られるそのような表現は、有形機械可読媒体(「テープ」)上に格納され、様々な顧客または製造施設に供給されて、ロジックまたはプロセッサを実際に作製する製造機械に読み込まれ得る。例えば、ARM Holdings,Ltdにより開発されたCortex(商標)ファミリのプロセッサ等のIPコア、および中国科学院計算技術研究所(ICT)により開発された龍芯(Loongson)IPコアは、テキサスインスツルメンツ、クアルコム、アップル、またはサムスン等の様々な顧客またはライセンシにライセンス供与または販売され、これらの顧客またはライセンシにより製造されたプロセッサに実装され得る。
図11は、一実施形態によるIPコアの開発を例示するブロック図を示す。ストレージ1130は、シミュレーションソフトウェア1120、および/またはハードウェアもしくはソフトウェアモデル1110を含む。一実施形態において、IPコア設計を表すデータは、メモリ1140(例えば、ハードディスク)、有線接続(例えば、インターネット)1150、または無線接続1160を介してストレージ1130に提供され得る。次に、シミュレーションツールおよびモデルにより生成されたIPコア情報は、製造施設に送信され得、IPコアは、少なくとも一実施形態による少なくとも1つの命令を実行するべく第三者により製造され得る。
いくつかの実施形態において、1または複数の命令は、第1のタイプまたはアーキテクチャ(例えば、x86)に対応し得、異なるタイプまたはアーキテクチャ(例えば、ARM)のプロセッサ上で変換またはエミュレートされ得る。従って、一実施形態による命令は、ARM、x86、MIPS、GPU、または他のプロセッサタイプもしくはアーキテクチャを含む、任意のプロセッサもしくはプロセッサタイプにおいて実行され得る。
図12は、一実施形態に従って第1のタイプの命令が異なるタイプのプロセッサによりどのようにエミュレートされるかを示す。図12において、プログラム1205は、一実施形態による命令と同一または実質的に同一の機能を実行し得るいくつかの命令を含む。しかし、プログラム1205の命令は、プロセッサ1215と異なるか、またはこれと非互換性のタイプおよび/またはフォーマットである場合があり、これは、プログラム1205における命令タイプがプロセッサ1215によりネイティブに実行することができない場合があることを意味する。しかし、エミュレーションロジック1210の支援により、プログラム1205の命令は、プロセッサ1215によりネイティブに実行することができる命令に変換される。一実施形態において、エミュレーションロジックは、ハードウェアの形で実施される。別の実施形態において、エミュレーションロジックは、プログラム1205における命令タイプを、プロセッサ1215によりネイティブに実行可能なタイプに変換するソフトウェアを含む有形機械可読媒体の形で実施される。他の実施形態において、エミュレーションロジックは、固定機能またはプログラミング可能なハードウェアと、有形機械可読媒体上に格納されたプログラムとの組み合わせである。一実施形態において、プロセッサは、エミュレーションロジックを含むが、他の実施形態において、エミュレーションロジックは、プロセッサの外部に存在し、第三者により提供される。一実施形態において、プロセッサは、プロセッサ内に含まれ、またはこれに関連付けられたマイクロコードまたはファームウェアを実行することにより、ソフトウェアを含む有形機械可読媒体の形で実施されるエミュレーションロジックを読み込むことができる。
図13は、本発明の実施形態による、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令コンバータの使用を対比するブロック図である。図示された実施形態において、命令コンバータは、ソフトウェア命令コンバータであるが、代替的に、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装され得る。図13は、x86コンパイラ1304を用いてコンパイルされ、少なくとも1つのx86命令セットコア1316を有するプロセッサによりネイティブに実行され得るx86バイナリコード1306を生成し得る高水準言語1302のプログラムを示す。少なくとも1つのx86命令セットコア1316を有するプロセッサは、(1)Intel(登録商標)x86命令セットコアの命令セットの実質的部分、または(2)少なくとも1つのx86命令セットコアを有するIntel(登録商標)プロセッサと実質的に同一の結果を実現するべく、少なくとも1つのx86命令セットコアを有するIntel(登録商標)プロセッサ上で起動することを目的とするアプリケーションもしくは他のソフトウェアのオブジェクトコードバージョンを互換的に実行し、もしくは別の方法で処理することにより、少なくとも1つのx86命令セットコアを有するIntel(登録商標)プロセッサと実質的に同一の機能を実行し得る任意のプロセッサを表す。x86コンパイラ1304は、追加の連携処理を用いるか、または用いることなく少なくとも1つのx86命令セットコア1316を有するプロセッサ上で実行され得るx86バイナリコード1306(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図13は、代替的な命令セットコンパイラ1308を用いてコンパイルされ、少なくとも1つのx86命令セットコア1314を有しないプロセッサ(例えば、カリフォルニア州サニーベールにあるMIPS TechnologiesのMIPS命令セットを実行し、および/またはカリフォルニア州サニーベールにあるARM HoldingsのARM命令セットを実行するコアを有するプロセッサ)によりネイティブに実行され得る代替的な命令セットバイナリコード1310を生成し得る高水準言語1302のプログラムを示す。命令コンバータ1312は、x86バイナリコード1306を、x86命令セットコア1314を有しないプロセッサによりネイティブに実行され得るコードに変換するために用いられる。この変換済みコードは、代替的な命令セットバイナリコード1310と同じである可能性が高くない。なぜなら、これができる命令コンバータは、作成するのが困難だからである。しかし、変換済みコードは、一般的なオペレーションを実現し、代替的な命令セットの命令から構成される。従って、命令コンバータ1312は、エミュレーション、シミュレーション、またはその他の処理により、x86命令セットのプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスがx86バイナリコード1306を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
図14Aは、効率的なベクトルアドレス競合解決のために置換制御を生成するSIMDベクトル先行ゼロカウント命令を用いる処理1401の例の一実施形態におけるフロー図を示す。本明細書に開示される処理1401および他の処理は、汎用機械もしくは専用機械、またはこれら両方の組み合わせにより実行可能な専用のハードウェアもしくはソフトウェアもしくはファームウェアのオペレーションコードを備え得る処理ブロックによって実行される。
処理1401の処理ブロック1410において、インデックスのセットは、例えば、7、2、7、1、および7の値に初期化される。オフセットインデックスの数およびオフセットインデックスの値は、例示的であることが意図され、本発明の実施形態を限定するものではないことが理解されよう。具体的には、レジスタにおけるオフセットインデックスの数は、特定のアプリケーションおよび/またはインデックスに対応するデータ要素のサイズで判断され得る。オフセットインデックスの例示的な値は、単に依存性競合の解決を例示することを意図する。処理ブロック1415において、残りの要素マスク(Elements_Left_Mask)は、全て(例えば、5個)1にセットされる。処理ブロック1420において、依存性マスクは、一致する全てのオフセットインデックスを反映するように処理1405(図18に関連して以下により詳細に説明される)の技術に応じてセットされ得る。次に、処理ブロック1425において、オーダマスクのセットが初期化される。処理ブロック1430において、競合マスク(Conflict_Mask)は、依存性マスクと他のマスクとの間のビット単位のANDを実行することにより計算される。
次に処理ブロック1439に進み、競合マスクに対してベクトルパックド先行ゼロカウント命令VPLZCNTを用いて、競合マスクのデータフィールド毎にゼロにセットされた隣接する最上位ビットの数をカウントし、各カウントを、先行ゼロカウントの対応するデータフィールドに値として格納することにより、先行ゼロカウントが計算される。処理ブロック1440において、最大カウントは、全て4に初期化される。これは、示される例において競合マスクを表すために用いられるビットの数より1だけ小さい値である。処理ブロック1445において、置換インデックスのセットは、SIMDパックド減算PSUBを実行することにより計算され、競合マスクを表すために用いられるビットの数より1だけ小さい対応する最大カウント値から、各先行ゼロカウントの値を減算し、最大カウントから先行ゼロカウントを引いた対応する差を生成する。以前の計算に依存しないオフセットインデックスに対応する位置が−1の置換インデックスを有し、これも有益に用いられ得ることが理解されよう。
処理ブロック1450において、データは、オフセットインデックス、および(任意選択で)全て1である残りの要素マスクに応じてメモリからギャザーされる。次に処理ブロック1455において、残りの要素マスクは、パックド比較not equal命令PCMPNEQを用い、置換インデックスを全ての−1と有益に比較して再計算される。処理ブロック1460において、残りの要素マスクがゼロ(0)であるか否かが判断される。そうである場合、処理ブロック1465において、オフセットインデックスを用いて、データがメモリにスキャターされ、SIMDデータのこのセットの処理は、処理ブロック1499において終了する。
そうでなければ、処理ブロック1470において、データは、SIMDベクトルパックド置換VPERMを実行し、処理されずに残された要素のみを有益に更新するために、置換インデックスおよび残りの要素マスクを完了マスクとして使用することにより、置換される。処理ブロック1475において、必要とされる計算は、残りの要素マスクを完了マスクとして用いて処理するデータ要素の左側に対して実行される。次に、前の技術的処理1406において、競合した要素のセットは、残りの要素マスクを処理ブロック1480における全ての要素にブロードキャストすることにより初期化される。次に、競合マスクのセットは、前の競合マスクおよび新たに競合した要素に対してベクトルパックドAND命令を用いて再計算される。次に、新しい残りの要素マスクは、パックド比較not equal命令PCMPNEQを用い、各競合マスクを全てのゼロと比較して計算される。次に、処理は、処理ブロック1460において新しい残りの要素マスクのテストを開始して再度繰り返される。本明細書に説明されるように、SIMDベクトル先行ゼロカウント命令は、SIMD置換制御を提供するために可変サイズの要素および競合マスクと共に有益に用いられ、それによりメモリを介して依存性計算を実行することなくレジスタにおける効率的なSIMDアドレス競合解決を可能にし得ることが理解されよう。
図14Bは、効率的なベクトルアドレス競合解決にSIMDベクトルアドレス競合マスクを用いる例の一実施形態におけるフロー図を示す。処理1402の処理ブロック1410において、オフセットインデックスのセットは、例えば、7、2、7、1、および7の値に初期化される。やはり、オフセットインデックスの数およびオフセットインデックスの値は、例示的であることが意図され、本発明の実施形態を限定するものではないことが理解されよう。具体的には、レジスタにおけるオフセットインデックスの数は、特定のアプリケーションおよび/またはインデックスに対応するデータ要素のサイズで判断され得る。オフセットインデックスの例示的な値は、単に依存性競合の解決を例示することを意図する。処理ブロック1415において、残りの要素マスクは、全て(例えば、5個が)1にセットされる。処理ブロック1420において、依存性マスクは、一致する全てのオフセットインデックスを含むように処理1405(図18に関連して以下により詳細に説明される)の技術に応じてセットされ得る。次に、処理ブロック1425において、オーダマスクのセットが初期化される。処理ブロック1430において、競合マスクは、依存性マスクと他のマスクとの間のビット単位のANDを実行することにより計算される。
処理ブロック1450において、データは、オフセットインデックス、および(任意選択で)全て1である残りの要素マスクに応じてメモリからギャザーされる。次に処理1406において、競合した要素のセットは、残りの要素マスクを処理ブロック1480における全ての要素にブロードキャストすることにより初期化される。処理ブロック1485において、競合マスクのセットは、前の競合マスクおよび新たに競合した要素に対してベクトルパックドAND命令を用いて再計算される。次に、新しい残りの要素マスクは、処理ブロック1490においてパックド比較not equal命令PCMPNEQを用い、各競合マスクを全てのゼロと比較して、計算される。処理ブロック1462において、残りの要素マスクは、did these maskを形成するためにネゲートされ、データ要素は、処理ブロック1466においてオフセットインデックスに応じてメモリにスキャターされる。処理ブロック1460において、残りの要素マスクがゼロ(0)であるか否かが判断される。処理においてそうである場合、SIMDデータのこのセットは、処理ブロック1499において終了する。そうでなければ、プロセスは、処理1402の処理ブロック1450から開始して再度繰り返される。
図15Aは、SIMDベクトルパックドタプル相互比較機能を提供する命令を実行するプロセッサにおける処理1501の一実施形態のフロー図を示す。パックドタプルは各々、2個、4個、または8個の要素を備え得る。いくつかの実施形態において、比較タイプは、命令によって指定された即値オペランドにより(例えば、equal、less‐than、less‐than or equal、false、not equal、not less−than、not less‐than or equal、およびtrueのうちの1つとして)示され得る。処理ブロック1510において、第1のデータタイプの要素は、ベクトルレジスタにおける複数のn個のデータフィールドの各々に格納される。処理ブロック1520において、第1のデータタイプの要素は、第2のベクトルのn個のデータフィールドの各々に格納される。処理ブロック1530において、ベクトルパックドタプル相互比較のためのSIMD命令は、プロセッサにおいてデコードされる。ベクトルパックドタプル相互比較のためのSIMD命令に応答して、プロセスは、処理1503において処理ブロック1540に進む。
処理ブロック1540において、ベクトルレジスタにおける次のタプルが処理のために選択される。処理ブロック1550において、タプルにおける次の要素は、第2のベクトルの複数のn個のデータフィールドにおける対応するタプルの各要素と比較される。処理ブロック1560において、第2のベクトルの各タプル要素に対応するマスクビットは、対応する比較に応じて、処理のために選択されたベクトルレジスタタプルの同時に比較される要素に対応する次のビットマスクにおいてセットされる。いくつかの実施形態において、ベクトルレジスタの要素に対応する全てのビットマスクは、ベクトルレジスタにおける対応する要素の最下位ビットと位置合わせされたデスティネーションレジスタに格納され得る。これに代えて、いくつかの代替的な実施形態においては、ベクトルレジスタの要素に対応するビットマスクは、ソース/デスティネーションレジスタの対応する要素に格納されたシフトカウントに応じて再度位置合わせされたソース/デスティネーションレジスタに格納され得る。処理ブロック1570において、処理のために現在選択されているタプルに関する全ての比較が終了したか否かが判断される。そうでない場合、処理ために現在選択されているタプルの各データフィールドが終了するまで、プロセスは、処理ブロック1550から開始するように再度繰り返される。いくつかの実施形態において、ベクトルレジスタのデータフィールドは、暗黙的にマスクされず、それらの各々が相互比較されることを必要とする場合がある。いくつかの代替的な実施形態において、ベクトルレジスタのデータフィールドは、(例えば、命令により指定されたマスクレジスタにおいて)明示的にマスクされるか、またはマスクされず、マスクされないデータフィールドにおける要素のみが相互比較されることを必要とする場合がある。現在選択されたタプルについて必要とされる全ての比較が終了した時点で、プロセスは、処理ブロック1580に進み、ベクトルレジスタにおけるn個の全てのデータフィールドの処理が終了したか否かについて判断される。そうでない場合、プロセスは、ベクトルレジスタにおける別のタプルが処理のために選択される処理ブロック1540から開始して再度繰り返される。そうでなければ、プロセスは、処理ブロック1590において終了する。
SIMDベクトルパックドタプル相互比較命令は、本明細書に説明される実施形態におけるように、効率的なSIMDアドレス競合解決のためにSIMDベクトルアドレス競合検出機能を提供し、競合マスクを生成する可変サイズの要素およびメモリオフセットに用いられ得ることが理解されよう。また、特に、メモリを介して依存性計算を実行することなく、レジスタにおけるアドレス競合解決を可能にする特定のギャザー・変更・スキャターアプリケーションにおいて効率的なSIMDアドレス競合解決のためにSIMD置換制御を提供するべく、本明細書に説明される実施形態におけるように、SIMDベクトル先行ゼロカウント命令を組み合わせてSIMDベクトルパックドタプル相互比較命令が用いられ得ることが理解されよう。
図15Bは、効率的なベクトルアドレス競合解決にSIMDベクトルアドレス競合マスクを用いる処理1502の一実施形態におけるフロー図を示す。処理ブロック1505において、一致するオフセットを保持するか否かを判断するべく、第1のレジスタまたはメモリベクトルソースの各要素におけるオフセットは、ベクトルソースの各下位要素におけるオフセットと比較される。処理ブロック1515において、第1のベクトルデスティネーションにおけるマスクに対応する要素のオフセットに一致するオフセットを保持する第1のベクトルソースにおける下位要素に対応する任意のマスクビットは、(例えば、処理1801に示されるように)1にセットされる。デスティネーションレジスタにおける任意の他のビットは、(例えば、処理1405に示されるように)処理ブロック1525において第2の値(例えば、0)にセットされる。
処理ブロック1535において、第1のデスティネーションレジスタに格納されたマスクの各々の値は、下位要素の計算に依存する要素のマスクを生成するべく、別のベクトルにおける具体的な値(例えば、ゼロ)の対応するコピーと比較される。処理ブロック1545において、処理する準備ができた要素を検出して完了マスクを生成するべく、下位要素に対する不完全な計算に依存する要素のマスクが用いられる。処理ブロック1555において、SIMD計算は、完了マスクを用いてデータに対して実行される。次に、処理ブロック1565において、下位要素に対する不完全な計算に依存する要素のマスクが更新される。処理ブロック1575において、全ての要素の処理が終了したか否かが判断され、そうである場合、これらの要素の処理は、処理ブロック1595において終了する。そうでなければ、プロセスは、処理ブロック1545から開始して再度繰り返される。また、示されるように、処理1502は、処理された要素がメモリに格納される必要があることを前提としないが、任意のそのような格納、またはメモリへのスキャターは、処理1502の更なる後続のイテレーションと共に、本発明の代替的な実施形態に応じて実行され得ることが理解されよう。
図16は、効率的なベクトルアドレス競合解決のために置換制御を生成するのに有用なSIMDベクトル先行ゼロカウント機能を提供する命令を実行するための装置1601の従来技術の実施形態を示す。装置1601の実施形態は、パイプライン400(例えば、実行ステージ416)の一部、またはSIMDベクトル先行ゼロカウント機能を提供する命令を実行するためのコア490(例えば、実行ユニット462)の一部であり得る。装置1601の実施形態は、効率的なベクトルアドレス競合解決を可能にし得るSIMDベクトル先行ゼロカウントのための命令をデコードするデコードステージ(例えば、デコード406)またはデコーダ(例えば、デコードユニット440)に結合され得る。1または複数の実行ユニット(例えば、実行装置1601)は、デコード済みの命令に応答して、メモリベクトルオペランドもしくはベクトルレジスタ1610もしくは1620におけるデータフィールドの各々の複数のビットを読み出し、メモリベクトルオペランドもしくはベクトルレジスタ1610もしくは1620のデータフィールド毎に、ゼロにセットされた隣接する最上位ビットの数をカウントし、当該カウントを、SIMDデスティネーションレジスタ1650もしくは1660の対応するデータフィールドに値として格納する。
例えば、装置1601の実施形態は、可変の複数のn個の可変サイズのデータ要素の値を格納する可変の複数のn個の可変サイズのデータフィールドを備えるベクトルレジスタ(例えば、物理レジスタファイルユニット458)と結合され得る。SIMDベクトル先行ゼロカウント機能を提供する命令の実施形態は、メモリベクトルオペランドまたはベクトルレジスタ、例えば1610または1620のデータフィールド毎にSIMD先行ゼロカウントを実行し、当該カウントを、SIMDデスティネーションレジスタ、例えば1650または1660における指定サイズの対応するデータフィールドに値として格納するためのベクトル先行ゼロカウントオペレーションおよびデータフィールドサイズを指定する。
例えば、SIMDベクトル先行ゼロカウント機能を提供する命令を実行するための装置1601の一実施形態は、メモリベクトルオペランドまたはベクトルレジスタ1620における第1のサイズ(例えば、16ビットまたは32ビット)のデータフィールドの各々の複数のビットを読み出し、先行ゼロカウント回路1603の先行ゼロカウンタ1630〜1637においてゼロにセットされた隣接する最上位ビットの数をカウントして、次に、当該カウントを、SIMDデスティネーションレジスタ1660における同一の指定サイズの対応するデータフィールドに値として格納する。SIMDベクトル先行ゼロカウントを提供する命令を実行するための装置1601の別の実施形態は、メモリベクトルオペランドまたはベクトルレジスタ1610における第2のサイズ(例えば、32ビットまたは64ビット)のデータフィールドの各々の複数のビットを読み出し、奇数の先行ゼロカウンタ1631〜1637からゼロにセットされた隣接する最上位ビットのカウントを選択するか、または先行ゼロカウント組み合わせ回路1604の選択的な加算器回路1640〜1643において、偶数の先行ゼロカウンタ1630〜1636からのカウントに値mを各々加算し、次に、組み合わされたカウントを、SIMDデスティネーションレジスタ1650における指定サイズの対応するデータフィールドに値として格納する。SIMDベクトル先行ゼロカウントを提供する命令を実行するための装置1601の代替的な実施形態は、図16に示されるように、第1のデータフィールドサイズのSIMDベクトル先行ゼロカウントおよび第2のデータフィールドサイズのSIMDベクトル先行ゼロカウントの両方を実行することができる場合があり、または様々な指定データフィールドサイズに対するSIMDベクトル先行ゼロカウントを実行するために変更され得ることが理解されよう。本明細書に説明される実施形態におけるように、SIMDベクトル先行ゼロカウント命令は、SIMD置換制御を提供するために可変サイズの要素および競合マスクと共に用いられ、それによりメモリを介して依存性計算を実行することなくレジスタにおけるより効率的なSIMDアドレス競合解決を可能にし得る。従って、本明細書に開示されるSIMDベクトル先行ゼロカウント命令およびロジックは、例えば、図14Aに関連して説明されるように、特に特定のギャザー・変更・スキャターアプリケーションにおける効率的なSIMDアドレス競合解決を提供する。
比較される要素、例えばインデックスが比較結果を表すのに必要とされるマスクと同じサイズである場合(例えば、256ビットレジスタにおける16個の16ビット要素)、全ての要素を相互比較する命令の実行が適切であり得る。しかし、比較結果を表すのに利用可能なビットより比較する要素の方が多い場合、代替的な解決法が必要とされる場合がある。本明細書に開示されるSIMDベクトルパックドタプル比較命令は、SIMDベクトルアドレス競合検出機能、および効率的なSIMDアドレス競合解決のために競合マスクを生成するべく組み合わされた結果を提供する、可変サイズの要素およびメモリオフセットのための代替的な解決法として用いられ得ることが理解されよう。SIMDベクトルパックドタプル比較命令は、(例えば、様々な異なる比較オペレーションのうちのいずれか1つが有用である得る場合に)より汎用に適用することが可能であり、面積および電力の観点では全要素を相互比較する命令と比べてあまり実装コストを必要としない場合があることが理解されよう。
図17Aは、SIMDベクトルパックドダブル相互比較機能を提供する例示的な命令1701の一実施形態を示す。いくつかの実施形態において、命令1701のエンコードは、専用機械または汎用処理機械により実行するために、機能的な記述的資料を記録するいくつかの機械可読媒体上に記録され得る。いくつかの実施形態において、命令1701のエンコードは、第1の複数のデータフィールド(例えば、n個のデータフィールド)を備える第1のベクトルレジスタ1710を指定し得、第1の複数のデータフィールドは、第1の部分に分割され、各々の第1の部分は、第2の複数のデータフィールド(例えば、2個のデータフィールド)を有し、各データフィールドは、マスクされるか、またはマスクされないかのいずれかである。いくつかの実施形態において、第1のベクトルレジスタ1710のデータフィールドは、暗黙的にマスクされず、それらの各々が比較されることを必要とする場合がある。いくつかの代替的な実施形態において、第1のベクトルレジスタ1710のデータフィールドは、(例えば、命令1701により指定されたマスクレジスタにおいて)明示的にマスクされるか、またはマスクされず、マスクされないデータフィールドにおける要素のみが比較されることを必要とする場合がある。命令1701は、第1の複数のデータフィールドに対応する第3の複数のデータフィールドを表す第2のベクトルレジスタ1720またはメモリストレージのセットも指定し得、第3の複数のデータフィールドは、第2の部分に分割され、各々の第2の部分も当該第3の複数のデータフィールド(例えば、2個のデータフィールド)を有する。いくつかの実施形態において、パックド要素は、符号付きパックドバイトまたは符号なしのバックトバイト(8ビット)、ワード(16ビット)、ダブルワード(32ビット)、またはクワッドワード(64ビット)であってもよい。命令1701は、特定のタイプの比較(例えば、greater−than or equal,>)をエンコードする即値バイトオペランド1731と、対応する第1の部分に分割され、各々の対応する第1の部分は、第2の複数のデータフィールド(例えば、2個のデータフィールド)を有する対応する第1の複数のデータフィールド(例えば、n個のデータフィールド)を備えるデスティネーションベクトルレジスタ1771も指定し得る。いくつかの実施形態において、比較タイプは、即値オペランド1731によってequal、less‐than、less‐than or equal、always false、not equal、not less−than、not less‐than or equal、およびalways trueのうちの1つとして示され得る。
第1のベクトルレジスタ1710における第1の複数のn個のデータフィールドの第1の部分(例えば、2個のタプル)のデータフィールドに格納された要素毎に、命令1701は、当該要素を、第2のベクトルレジスタ1720またはメモリストレージのセットの当該第3の複数のn個のデータフィールドを表す対応する部分(例えば、2個のタプル)の各要素と比較する。デスティネーションベクトルレジスタ1771において、命令1701は、対応する比較に応じて対応する第1のレジスタ1710部分のマスクされない各要素に対応するビットマスクにおいて、第2のベクトル1720部分の各要素に対応するマスクビットをセットし、デスティネーションレジスタにおける任意の他の(例えば、ビットマスクにおいて上位の)ビットをゼロの値にセットする。いくつかの実施形態において、第1のベクトルレジスタ1710の要素に対応する全てのビットマスクは、第1のベクトルレジスタ1710における対応する要素の最下位ビットと位置合わせされたデスティネーションベクトルレジスタ1771に格納され得る。これに代えて、いくつかの代替的な実施形態においては、第1のベクトルレジスタ1710の要素に対応するビットマスクは、ソース/デスティネーションベクトルレジスタ1771の対応する要素に格納されたシフトカウントに応じて再度位置合わせされたソース/デスティネーションベクトルレジスタ1771に格納され得る。
図17Bは、SIMDベクトルパックドクワドラプル相互比較機能を提供する命令1702の代替的な実施形態を示す。また、いくつかの実施形態において、命令1702のエンコードは、専用機械または汎用処理機械により実行するために、機能的な記述的資料を記録するいくつかの機械可読媒体上に記録され得る。いくつかの実施形態において、命令1702のエンコードは、第1の複数のデータフィールド(例えば、n個のデータフィールド)を備える第1のベクトルレジスタ1710を指定し得、第1の複数のデータフィールドは、第1の部分に分割され、各々の第1の部分は、第2の複数のデータフィールド(例えば、4個のデータフィールド)を有し、各データフィールドは、マスクされるか、またはマスクされないかのいずれかである。いくつかの実施形態において、第1のベクトルレジスタ1710のデータフィールドは、暗黙的にマスクされず、それらの各々が比較されることを必要とする場合がある。いくつかの代替的な実施形態において、第1のベクトルレジスタ1710のデータフィールドは、(例えば、命令1702により指定されたマスクレジスタにおいて)明示的にマスクされるか、またはマスクされず、マスクされないデータフィールドにおける要素のみが比較されることを必要とする場合がある。命令1702は、第1の複数のデータフィールドに対応する第3の複数のデータフィールドを表す第2のベクトルレジスタ1720またはメモリストレージのセットも指定し得、第3の複数のデータフィールドは、第2の部分に分割され、各々の第2の部分も当該第3の複数のデータフィールド(例えば、4個のデータフィールド)を有する。いくつかの実施形態において、パックド要素は、符号付きパックドバイトまたは符号なしのバックトバイト(8ビット)、ワード(16ビット)、ダブルワード(32ビット)、またはクワッドワード(64ビット)であってもよい。命令1702は、特定のタイプの比較(例えば、less−than,<)をエンコードする即値バイトオペランド1732と、対応する第1の部分に分割され、各々の対応する第1の部分は、第2の複数のデータフィールド(例えば、4個のデータフィールド)を有する対応する第1の複数のデータフィールド(例えば、n個のデータフィールド)を備えるデスティネーションベクトルレジスタ1772も指定し得る。いくつかの実施形態において、比較タイプは、即値オペランド1732によってequal、less‐than、less‐than or equal、always false、not equal、not less−than、not less‐than or equal、およびalways trueのうちの1つとして示され得る。
第1のベクトルレジスタ1710における第1の複数のn個のデータフィールドの第1の部分(例えば、4個のタプル)のデータフィールドに格納された要素毎に、命令1702は、当該要素を、第2のベクトルレジスタ1720またはメモリストレージのセットの当該第3の複数のn個のデータフィールドを表す対応する部分(例えば、4個のタプル)の各要素と比較する。デスティネーションベクトルレジスタ1772において、命令1702は、対応する比較に応じて対応する第1のレジスタ1710部分のマスクされない各要素に対応するビットマスクにおいて、第2のベクトル1720部分の各要素に対応するマスクビットをセットし、デスティネーションレジスタにおける任意の他の(例えば、ビットマスクにおいて上位の)ビットをゼロの値にセットする。いくつかの実施形態において、第1のベクトルレジスタ1710の要素に対応する全てのビットマスクは、第1のベクトルレジスタ1710における対応する要素の最下位ビットと位置合わせされたデスティネーションベクトルレジスタ1772に格納され得る。これに代えて、いくつかの代替的な実施形態においては、第1のベクトルレジスタ1710の要素に対応するビットマスクは、ソース/デスティネーションベクトルレジスタ1772の対応する要素に格納されたシフトカウントに応じて再度位置合わせされたソース/デスティネーションベクトルレジスタ1772に格納され得る。
図17Cは、SIMDベクトルパックドオクタプル相互比較機能を提供する命令1703の別の代替的な実施形態を示す。また、いくつかの実施形態において、命令1703のエンコードは、専用機械または汎用処理機械により実行するために、機能的な記述的資料を記録するいくつかの機械可読媒体上に記録され得る。いくつかの実施形態において、命令1703のエンコードは、第1の複数のデータフィールド(例えば、n個のデータフィールド)を備える第1のベクトルレジスタ1710を指定し得、第1の複数のデータフィールドは、第1の部分に分割され、各々の第1の部分は、第2の複数のデータフィールド(例えば、8個のデータフィールド)を有し、各データフィールドは、マスクされるか、またはマスクされないかのいずれかである。いくつかの実施形態において、第1のベクトルレジスタ1710のデータフィールドは、暗黙的にマスクされず、それらの各々が比較されることを必要とする場合がある。いくつかの代替的な実施形態において、第1のベクトルレジスタ1710のデータフィールドは、(例えば、命令1703により指定されたマスクレジスタにおいて)明示的にマスクされるか、またはマスクされず、マスクされないデータフィールドにおける要素のみが比較されることを必要とする場合がある。命令1703は、第1の複数のデータフィールドに対応する第3の複数のデータフィールドを表す第2のベクトルレジスタ1720またはメモリストレージのセットも指定し得、第3の複数のデータフィールドは、第2の部分に分割され、各々の第2の部分も当該第3の複数のデータフィールド(例えば、8個のデータフィールド)を有する。いくつかの実施形態において、パックド要素は、符号付きパックドバイトまたは符号なしのバックトバイト(8ビット)、ワード(16ビット)、ダブルワード(32ビット)、またはクワッドワード(64ビット)であってもよい。命令1703は、特定のタイプの比較(例えば、equal,=)をエンコードする即値バイトオペランド1733と、対応する第1の部分に分割され、各々の対応する第1の部分は、第2の複数のデータフィールド(例えば、8個のデータフィールド)を有する対応する第1の複数のデータフィールド(例えば、n個のデータフィールド)を備えるデスティネーションベクトルレジスタ1773も指定し得る。いくつかの実施形態において、比較タイプは、即値オペランド1733によってequal、less‐than、less‐than or equal、always false、not equal、not less−than、not less‐than or equal、およびalways trueのうちの1つとして示され得る。
第1のベクトルレジスタ1710における第1の複数のn個のデータフィールドの第1の部分(例えば、8個のタプル)のデータフィールドに格納された要素毎に、命令1703は、当該要素を、第2のベクトルレジスタ1720またはメモリストレージのセットの当該第3の複数のn個のデータフィールドを表す対応する部分(例えば、8個のタプル)の各要素と比較する。デスティネーションベクトルレジスタ1773において、命令1703は、対応する比較に応じて対応する第1のレジスタ1710部分のマスクされない各要素に対応するビットマスクにおいて、第2のベクトル1720部分の各要素に対応するマスクビットをセットし、デスティネーションレジスタにおける任意の他の(例えば、ビットマスクにおいて上位の)ビットをゼロの値にセットする。いくつかの実施形態において、第1のベクトルレジスタ1710の要素に対応する全てのビットマスクは、第1のベクトルレジスタ1710における対応する要素の最下位ビットと位置合わせされたデスティネーションベクトルレジスタ1773に格納され得る。これに代えて、いくつかの代替的な実施形態においては、第1のベクトルレジスタ1710の要素に対応するビットマスクは、ソース/デスティネーションベクトルレジスタ1773の対応する要素に格納されたシフトカウントに応じて再度位置合わせされたソース/デスティネーションベクトルレジスタ1773に格納され得る。
図18は、効率的なベクトルアドレス競合解決のためにアドレス競合マスク(例えば1420等)を生成するSIMDベクトルパックドタプル相互比較機能を提供する命令の結果を組み合わせる例示的な方法1801の実施形態を示す。第1のベクトルパックドダブル相互比較1802においては、第1のデータタイプの要素は、ベクトルレジスタ1810のn個のデータフィールドの各々に格納される。第1のデータタイプの要素は、ベクトル1820のn個のデータフィールドの各々にも格納され、ベクトル1820を表すベクトルレジスタまたはメモリストレージのセットに格納されてもよい。プロセッサにおいて、ベクトルパックドダブル相互比較1802のためのSIMD命令がデコードされる。
ベクトルパックドダブル相互比較1802のためのSIMD命令に応答して、ベクトルレジスタ1810におけるn個のデータフィールドの各部分(例えば2個のタプル)のデータフィールドに格納された要素毎に、命令1802は、当該要素を、ベクトル1820のn個のデータフィールドを表すベクトルレジスタまたはメモリストレージのセットの対応する部分(例えば2個のタプル)における各要素と比較する。デスティネーションベクトルレジスタ1830において、命令1802は、(例えば、等価性について)実行された対応する比較に応じて、対応するレジスタ1810部分のマスクされない各要素に対応するビットマスクにおいて、ベクトル1820部分の各要素に対応するマスクビットをセットし、デスティネーションレジスタにおける任意の他の(例えば、ビットマスクにおける上位の)ビットをゼロの値にセットする。いくつかの実施形態において、ベクトルレジスタ1810の要素に対応する全てのビットマスクはまず、第1のベクトルレジスタ1810における対応する要素の最下位ビットと位置合わせされたデスティネーションベクトルレジスタ1830に格納され得、次にパックドシフト1812は、別個のSIMD命令に応じて実行され得る。これに代えて、いくつかの代替的な実施形態においては、第1のベクトルレジスタ1810の要素に対応するビットマスクは、ソース/デスティネーションベクトルレジスタ1830の対応する要素に格納されたシフトカウントに応じて再度位置合わせされたソース/デスティネーションベクトルレジスタ1830に格納され得る。
第2のベクトルパックドダブル相互比較1803においては、第1のデータタイプの要素は、ベクトルレジスタ1815のn個のデータフィールドの各々に格納される。第1のデータタイプの要素は、ベクトル1825のn個のデータフィールドの各々にも格納され、ベクトル1825を表すベクトルレジスタまたはメモリストレージのセットに格納されてもよい。ベクトルパックドダブル相互比較1803のための第2のSIMD命令がデコードされる。ベクトルパックドダブル相互比較1803のための第2のSIMD命令に応答して、ベクトルレジスタ1815におけるn個のデータフィールドの各部分(例えば2個のタプル)のデータフィールドに格納された要素毎に、命令1803は、当該要素を、ベクトル1825のn個のデータフィールドを表すベクトルレジスタまたはメモリストレージのセットの対応する部分(例えば2個のタプル)における各要素と比較する。デスティネーションベクトルレジスタ1835において、命令1803は、(例えば、等価性について)実行された対応する比較に応じて、対応するレジスタ1815部分のマスクされない各要素に対応するビットマスクにおいて、ベクトル1825部分の各要素に対応するマスクビットをセットし、デスティネーションレジスタにおける任意の他の(例えば、ビットマスクにおける上位の)ビットをゼロの値にセットする。いくつかの実施形態において、ベクトルレジスタ1815の要素に対応する全てのビットマスクはまず、第1のベクトルレジスタ1815における対応する要素の最下位ビットと位置合わせされたデスティネーションベクトルレジスタ1835に格納され得、次にパックドシフト1813は、別個のSIMD命令に応じて実行され得る。これに代えて、いくつかの代替的な実施形態においては、第1のベクトルレジスタ1815の要素に対応するビットマスクは、ソース/デスティネーションベクトルレジスタ1835の対応する要素にも格納されたシフトカウントに応じて再度位置合わせされたソース/デスティネーションベクトルレジスタ1835に格納され得る。次に、ベクトル置換は、一時的結果ベクトルレジスタ1845を生成するべく、置換ベクトル1840および別個のSIMDベクトル置換命令に応じて、ベクトルレジスタ1835のビットマスク要素に対して実行され得る。
第3のベクトルパックドダブル相互比較1804においては、第1のデータタイプの要素は、ベクトル1850のn個のデータフィールドの各々に格納され、ベクトル1850を表すベクトルレジスタまたはメモリストレージのセットに格納されてもよい。ベクトルパックドダブル相互比較1804のための第3のSIMD命令がデコードされる。ベクトルパックドダブル相互比較1804のための第3のSIMD命令に応答して、ベクトルレジスタ1815におけるn個のデータフィールドの各部分(例えば2個のタプル)のデータフィールドに格納された要素毎に、命令1804は、当該要素を、ベクトル1850のn個のデータフィールドを表すベクトルレジスタまたはメモリストレージのセットの対応する部分(例えば2個のタプル)における各要素と比較する。デスティネーションベクトルレジスタ1860において、命令1804は、(例えば、等価性について)実行された対応する比較に応じて、対応するレジスタ1815部分のマスクされない各要素に対応するビットマスクにおいて、ベクトル1850部分の各要素に対応するマスクビットをセットし、デスティネーションレジスタにおける任意の他の(例えば、ビットマスクにおける上位の)ビットをゼロの値にセットする。いくつかの実施形態において、ベクトルレジスタ1815の要素に対応する全てのビットマスクはまず、ベクトルレジスタ1815における対応する要素の最下位ビットと位置合わせされたデスティネーションベクトルレジスタ1860に格納され得、次にパックドシフト1814は、別個のSIMD命令に応じて実行され得る。これに代えて、いくつかの代替的な実施形態においては、第1のベクトルレジスタ1815の要素に対応するビットマスクは、ソース/デスティネーションベクトルレジスタ1860の対応する要素にも格納されたシフトカウントに応じて再度位置合わせされたソース/デスティネーションベクトルレジスタ1860に格納され得る。
ベクトルレジスタ1815の要素に対応するソース/デスティネーションベクトルレジスタ1860に格納されたビットマスクは、第2の一時的結果ベクトルレジスタ1870を生成するべく、(例えば、別個のSIMDベクトルパックド加算命令に応じて)一時的結果ベクトルレジスタ1845に格納されたビットマスクと各々、組み合わされる。ベクトルレジスタ1815の要素に対応するソース/デスティネーションベクトルレジスタ1835に格納されたビットマスクは、第3の一時的結果ベクトルレジスタ1880を生成するべく、(例えば、もう1つの別個のSIMDベクトルパックド加算命令に応じて)第2の一時的結果ベクトルレジスタ1870に格納されたビットマスクと各々、組み合わされる。ベクトルレジスタ1810の要素に対応するソース/デスティネーションベクトルレジスタ1830に格納されたビットマスクは、ベクトルレジスタ1810の要素に対応するアドレス競合マスク(例えば、1420等)を有する結果ベクトルレジスタ1890を生成するべく、(例えば、もう1つの別個のSIMDベクトルパックド加算命令に応じて)第3の一時的結果ベクトルレジスタ1880に格納されたビットマスクと各々、組み合わされる。
本明細書に開示されるSIMDベクトルパックドタプル比較命令は、SIMDベクトルアドレス競合検出機能、および効率的なSIMDアドレス競合解決のために競合マスクを生成するべく組み合わされた結果を提供する、可変サイズの要素およびメモリオフセットのための代替的な解決法として用いられ得ることが理解されよう。SIMDベクトルパックドタプル比較命令は、(例えば、様々な異なる比較オペレーションのうちのいずれか1つが有用である得る場合に)より汎用に適用することが可能であり、面積および電力の観点では全要素を相互比較する命令と比べてあまり実装コストを必要としないことが理解されよう。
図19Aは、SIMDベクトルパックドタプル相互比較機能を提供する命令を実行するための装置1901の実施形態を示す。装置1901の実施形態は、パイプライン400(例えば、実行ステージ416)の一部、またはSIMDベクトルパックドタプル相互比較機能を提供する命令を実行するためのコア490(例えば、実行ユニット462)の一部であり得る。装置1901のいくつかの実施形態は、制御ロジック1940およびコンパレータアレイ1942を有するパックドタプル比較装置1903を備え、シフタ1950、1951、1952、および1953等を有するシフト装置1905を任意選択で備える。装置1901の実施形態は、効率的なベクトルアドレス競合解決を可能にし得るSIMDベクトルパックドタプル相互比較のための命令をデコードするデコードステージ(例えば、デコード406)またはデコーダ(例えば、デコードユニット440)に結合され得る。1または複数の実行ユニット(例えば、実行装置1901)は、デコード済みの命令に応答して、ベクトルレジスタ1910におけるn個のデータフィールドの各部分(例えば、2個のタプル)のデータフィールドに格納された要素毎に、当該要素を、ベクトル1920のn個のデータフィールドを表すベクトルレジスタまたはメモリストレージのセットの対応する部分(例えば、2個のタプル)の各要素と比較する。装置1901の実施形態は、可変の複数のn個の可変サイズのデータ要素の値を格納する可変の複数のn個の可変サイズのデータフィールドを備えるベクトルレジスタ(例えば、物理レジスタファイルユニット458)に結合され得る。デスティネーションベクトルレジスタ1970において、装置1901は、実行された対応する比較(例えば、即値オペランド1930により指定される)に応じて、対応するレジスタ1910部分のマスクされない各要素に対応するビットマスクにおいて、ベクトル1920部分の各要素に対応するマスクビットをセットし、デスティネーションレジスタにおける任意の他の(例えば、ビットマスクにおける上位の)ビットをゼロの値にセットする。いくつかの実施形態において、ベクトルレジスタ1910の要素に対応する全てのビットマスクは、ベクトルレジスタ1910における対応する要素の最下位ビットと位置合わせされたデスティネーションベクトルレジスタ1970に格納され得る。いくつかの代替的な実施形態において、第1のベクトルレジスタ1910の要素に対応するビットマスクは、ソース/デスティネーションベクトルレジスタ1970の対応する要素に格納されたシフトカウントに応じて(例えば、シフト装置1905により)再度位置合わせされたソース/デスティネーションベクトルレジスタ1970に任意選択で格納され得る。
図19Bは、SIMDベクトルパックドタプル相互比較機能を提供する命令を実行するための装置1902の代替的な実施形態を示す。装置1902の実施形態は、パイプライン400(例えば、実行ステージ416)の一部、またはSIMDベクトルパックドタプル相互比較機能を提供する命令を実行するためのコア490(例えば、実行ユニット462)の一部であり得る。装置1902のいくつかの実施形態は、制御ロジック1940およびコンパレータアレイ1944を有するパックドタプル比較装置1904を備え、シフタ1960、1961、1962、および1963等を有するシフト装置1906を任意選択で備える。装置1902の実施形態は、効率的なベクトルアドレス競合解決を可能にし得るSIMDベクトルパックドタプル相互比較のための命令をデコードするデコードステージ(例えば、デコード406)またはデコーダ(例えば、デコードユニット440)に結合され得る。1または複数の実行ユニット(例えば、実行装置1902)は、デコード済みの命令に応答して、ベクトルレジスタ1910におけるn個のデータフィールドの各部分(例えば、4個のタプル)のデータフィールドに格納された要素毎に、当該要素を、ベクトル1920のn個のデータフィールドを表すベクトルレジスタまたはメモリストレージのセットの対応する部分(例えば、4個のタプル)の各要素と比較する。装置1902の実施形態は、可変の複数のn個の可変サイズのデータ要素の値を格納する可変の複数のn個の可変サイズのデータフィールドを備えるベクトルレジスタ(例えば、物理レジスタファイルユニット458)に結合され得る。デスティネーションベクトルレジスタ1970において、装置1902は、実行された対応する比較(例えば、即値オペランド1930により指定される)に応じて、対応するレジスタ1910部分のマスクされない各要素に対応するビットマスクにおいて、ベクトル1920部分の各要素に対応するマスクビットをセットし、デスティネーションレジスタにおける任意の他の(例えば、ビットマスクにおける上位の)ビットをゼロの値にセットする。いくつかの実施形態において、ベクトルレジスタ1910の要素に対応する全てのビットマスクは、ベクトルレジスタ1910における対応する要素の最下位ビットと位置合わせされたデスティネーションベクトルレジスタ1970に格納され得る。いくつかの代替的な実施形態において、第1のベクトルレジスタ1910の要素に対応するビットマスクは、ソース/デスティネーションベクトルレジスタ1970の対応する要素に格納されたシフトカウントに応じて(例えば、シフト装置1906により)再度位置合わせされたソース/デスティネーションベクトルレジスタ1970に任意選択で格納され得る。
SIMDベクトルパックドタプル比較命令を用いると、符号付きまたは符号なしのバックトバイト(8ビット)、ワード(16ビット)、ダブルワード(32ビット)またはクワッドワード(64ビット)を含む可変の複数のn個の可変サイズのデータ要素を可能にする。SIMDベクトルパックドタプル比較命令は、(例えば、様々な異なる比較オペレーションのうちのいずれか1つが有用である得る場合に)ベクトル競合命令より汎用に適用することが可能であり、面積および電力の観点では全要素を相互比較する命令と比べてあまり実装コストを必要としないことが理解されよう。
本明細書に開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組み合わせで実装され得る。本発明の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性および不揮発性メモリ、ならびに/またはストレージ要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを有するプログラミング可能なシステム上で実行するコンピュータプログラムまたはプログラムコードとして実装され得る。
プログラムコードは、本明細書に説明される機能を実行して出力情報を生成するべく、命令の入力に適用され得る。出力情報は、既知の様式で1または複数の出力デバイスに適用され得る。本願の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
プログラムコードは、高水準手続き型プログラミング言語またはオブジェクト指向プログラミング言語で実装され、処理システムと通信し得る。所望であれば、プログラムコードは、アセンブリ言語または機械言語でも実装され得る。実際には、本明細書に説明されるメカニズムは、範囲においていずれの特定のプログラミング言語にも限定されない。いずれの場合においても、言語は、コンパイル型言語またはインタープリタ型言語であってもよい。
少なくとも一実施形態の1または複数の態様は、プロセッサ内の様々なロジックを表す、機械可読媒体上に格納された代表的命令により実装され得、命令は、機械により読み出されると、当該機械に本明細書に説明される技術を実行するためのロジックを生成させる。「IPコア」として知られるそのような表現は、有形機械可読媒体上に格納され、様々な顧客または製造施設に供給されて、ロジックまたはプロセッサを実際に作製する製造機械に読み込まれ得る。
そのような機械可読ストレージ媒体としては、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD‐ROM)、書き換え可能コンパクトディスク(CD‐RW)、および光磁気ディスク等の任意の他のタイプのディスク、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)等の半導体デバイス、磁気カードもしくは光カード、または電子命令を格納するのに好適な任意の他のタイプの媒体を含むストレージ媒体を含む、機械またはデバイスにより製造または形成される、非一時的で有形な構成の物品が挙げられ得るが、これらに限定されない。
従って、本発明の実施形態は、命令を含み、または本明細書に説明される構造体、回路、装置、プロセッサ、および/またはシステム機能を定義するハードウェア記述言語(HDL)等の設計データを含む非一時的有形機械可読媒体も含む。そのような実施形態は、プログラム製品と称され得る。
いくつかの場合に、命令コンバータは、ソース命令セットからターゲット命令セットへと命令を変換するべく用いられ得る。例えば、命令コンバータは、(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて)命令を、コアにより処理されるべき1または複数の他の命令に翻訳し、モーフィングし、エミュレートし、または別の方法で変換し得る。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装され得る。命令コンバータは、プロセッサにあり、プロセッサから離れ、またはプロセッサ上の一部であり、プロセッサから離れた一部であり得る。
このように、少なくとも一実施形態による1または複数の命令を実行するための技術が開示される。添付の図面において、特定の例示的な実施形態が説明され、示されているが、そのような実施形態は、広い発明を単に例示するものであってこれを限定するものではなく、本開示を研究すれば、当業者であれば様々な他の変更形態に想到し得るので、本発明は、示され、説明される具体的な構造および構成に限定されないことを理解されたい。成長が急激で、更なる進歩が容易には予見されない本技術のような技術分野において、開示される実施形態は、本開示の原理または添付の特許請求の範囲を逸脱することなく、技術的進歩を可能にすることによって容易なものにする構成および詳細に容易に変更可能であり得る。