(57)【特許請求の範囲】
【請求項１】
複数の記憶域にある複数のデータ・エレメントにアクセスするＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）命令をデコードするデコーダ・ステージ、
前記デコーダに結合され、デコードされたＳＩＭＤ命令を受信し該デコードされたＳＩＭＤ命令に応答する１又は複数の演算実行部であって、
前記複数の記憶域のうちの１又は複数へのアクセスを与え、
フォルト又は例外が生じたかどうかを検出し、
前記ＳＩＭＤ命令の完了又はフォルト若しくは例外の検出のうちの早い方に応じて、保留中のトラップ又は中断を処理する、１又は複数の演算実行部、
を有するプロセッサ。
【請求項２】
前記１又は複数の演算実行部は、更に、
トラップ又は中断が生じたかどうかを検出し、
検出したトラップ又は中断を保留中のトラップ又は中断として記録する、
請求項１に記載のプロセッサ。
【請求項３】
トラップ又は中断が生じたかどうかの検出は、ブレークポイントの検出を含む、請求項２に記載のプロセッサ。
【請求項４】
前記１又は複数の演算実行部は、更に、
トラップ又は中断の前記処理に応答してフラグを設定する、
請求項１乃至３のいずれか一項に記載のプロセッサ。
【請求項５】
前記１又は複数の演算実行部は、更に、
前記フラグが設定されているときは、前記ＳＩＭＤ命令の完了又はフォルト若しくは例外の検出により保留中のブレークポイントを処理しない、
請求項４に記載のプロセッサ。
【請求項６】
前記フラグはEFLAG.RFである、請求項５に記載のプロセッサ。
【請求項７】
前記１又は複数の演算実行部は、更に、
前記複数のデータ・エレメントのうちの１又は複数を宛先レジスタに格納し、
マスク・レジスタ内の対応する状態エレメントをクリアする、
請求項１乃至３のいずれか一項に記載のプロセッサ。
【請求項８】
前記１又は複数の演算実行部は、更に、
前記複数のデータ・エレメントのうちの１又は複数をアドレス可能なメモリの前記複数の記憶域のうちの前記１又は複数に格納し、
マスク・レジスタ内の対応する状態エレメントをクリアする、
請求項１乃至３のいずれか一項に記載のプロセッサ。
【請求項９】
複数の記憶域にあるデータ・エレメントにアクセスするＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）命令をデコードするデコーダ・ステージ、
前記デコーダに結合され、デコードされたＳＩＭＤ命令を受信し該デコードされたＳＩＭＤ命令に応答する１又は複数の演算実行部であって、
前記複数の記憶域のうちの１又は複数へのアクセスを与え、
トラップ又は中断が生じたかどうかを検出し、
検出したトラップ又は中断を保留中のトラップ又は中断として記録し、
フォルト又は例外が生じたかどうかを検出し、
前記ＳＩＭＤ命令の完了又はフォルト若しくは例外の検出のうちの早い方に応じて、保留中のトラップ又は中断を処理する、１又は複数の演算実行部、
を有するプロセッサ。
【請求項１０】
トラップ又は中断が生じたかどうかの検出は、ブレークポイントが生じたかどうかの検出を含む、請求項９に記載のプロセッサ。
【請求項１１】
前記１又は複数の演算実行部は、更に、
トラップ又は中断の前記処理に応答してフラグを設定する、
請求項９に記載のプロセッサ。
【請求項１２】
前記フラグはEFLAG.RFである、請求項１１に記載のプロセッサ。
【請求項１３】
前記１又は複数の演算実行部は、更に、
前記データ・エレメントのうちの１又は複数を宛先レジスタに格納し、
マスク・レジスタ内の対応する状態エレメントをクリアする、
請求項９乃至１２のいずれか一項に記載のプロセッサ。
【請求項１４】
前記１又は複数の演算実行部は、更に、
前記データ・エレメントのうちの１又は複数をアドレス可能なメモリの前記複数の記憶域のうちの前記１又は複数に格納し、
マスク・レジスタ内の対応する状態エレメントをクリアする、
請求項９乃至１２のいずれか一項に記載のプロセッサ。
【請求項１５】
複数の記憶域にある複数のデータ・エレメントにアクセスするＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）命令をデコードするステップ、
１又は複数の演算実行部において、デコードされたＳＩＭＤ命令を受信するステップであって、該デコードされたＳＩＭＤ命令の受信に応答して、
前記複数の記憶域のうちの１又は複数へのアクセスを与え、
フォルト又は例外が生じたかどうかを検出し、
前記ＳＩＭＤ命令の完了又はフォルト若しくは例外の検出のうちの早い方に応じて、保留中のトラップ又は中断を処理する、ステップ、
を有する方法。
【請求項１６】
前記デコードされたＳＩＭＤ命令の受信に応答して、更に、前記１又は複数の演算実行部において、
トラップ又は中断が生じたかどうかを検出し、
検出したトラップ又は中断を保留中のトラップ又は中断として記録する、
請求項１５に記載の方法。
【請求項１７】
トラップ又は中断が生じたかどうかの検出は、ブレークポイントの検出を含む、請求項１６に記載の方法。
【請求項１８】
前記デコードされた命令の受信に応答して、更に、前記１又は複数の演算実行部において、
トラップ又は中断の前記処理に応答してフラグを設定する、
請求項１７に記載の方法。
【請求項１９】
前記デコードされたにおいて命令の受信に応答して、更に、前記１又は複数の演算実行部において、
前記フラグが設定されているときは、前記単一の命令の完了又はフォルト若しくは例外の検出により保留中のブレークポイントを処理しない、
請求項１８に記載の方法。
【請求項２０】
前記フラグはEFLAG.RFである、請求項１９に記載の方法。
【請求項２１】
前記デコードされた命令の受信に応答して、更に、前記１又は複数の演算実行部は、
前記データ・エレメントを宛先レジスタに格納し、
マスク・レジスタ内の対応する状態エレメントをクリアする、
請求項１９に記載の方法。
【請求項２２】
前記デコードされたＳＩＭＤ命令の受信に応答して、更に、前記１又は複数の演算実行部において、
前記複数のデータ・エレメントのうちの１又は複数をアドレス可能なメモリの前記複数の記憶域のうちの前記１又は複数に格納し、
マスク・レジスタ内の対応する状態エレメントをクリアする、
請求項１５乃至２０のいずれか一項に記載の方法。
【請求項２３】
複数の記憶域に結合されたメモリ制御部、
前記メモリ制御部に結合されたプロセッサ、
を有し、前記プロセッサは、
前記複数の記憶域にあるデータ・エレメントにアクセスするＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）命令をデコードするデコーダ・ステージ、
前記デコーダに結合され、デコードされたＳＩＭＤ命令を受信し該デコードされたＳＩＭＤ命令に応答する１又は複数の演算実行部であって、
前記複数の記憶域のうちの１又は複数へのアクセスを与え、
フォルト又は例外が生じたかどうかを検出し、
前記ＳＩＭＤ命令の完了又はフォルト若しくは例外の検出のうちの早い方に応じて、保留中のトラップ又は中断を処理する、１又は複数の演算実行部、
を有する、
システム。
【請求項２４】
前記１又は複数の演算実行部は、更に、
トラップ又は中断が生じたかどうかを検出し、
検出したトラップ又は中断を保留中のトラップ又は中断として記録する、
請求項２３に記載のシステム。
【請求項２５】
トラップ又は中断が生じたかどうかの検出は、ブレークポイントの検出を含む、請求項２４に記載のシステム。
【請求項２６】
前記１又は複数の演算実行部は、更に、
前記データ・エレメントのうちの１又は複数を宛先レジスタに格納し、
マスク・レジスタ内の対応する状態エレメントをクリアする、
請求項２３乃至２５のいずれか一項に記載のシステム。
【請求項２７】
前記１又は複数の演算実行部は、更に、
前記データ・エレメントのうちの１又は複数をアドレス可能なシステムメモリの前記複数の記憶域のうちの前記１又は複数に格納し、
マスク・レジスタ内の対応する状態エレメントをクリアする、
請求項２３乃至２５のいずれか一項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、プロセッサの分野に関する。
【背景技術】
【０００２】
マルチメディア・アプリケーション及び同様の特性を有する他のアプリケーションの効率を向上させるために、単一命令複数データ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ，Ｍｕｌｔｉｐｌｅ  Ｄａｔａ：ＳＩＭＤ）アーキテクチャがマイクロプロセッサ・システムで実施され、１つの命令で幾つかのオペランドを並列して操作することを可能にしている。特に、ＳＩＭＤアーキテクチャは、多くのデータ・エレメントを１つのレジスタ又は連続する記憶域に詰め込むことを利用している。ハードウェアを並列に実行すると、１つの命令により複数の処理が別個のデータ・エレメントに対して実行され、標準的には有意な性能の利益をもたらす。
【０００３】
ＳＭＩＤの性能向上は、不規則なメモリ・アクセス・パターンを含むアプリケーションでは達成するのが困難でありうる。例えば、連続する記憶域に格納されてもされなくてもよいデータ・エレメントの頻繁且つ無作為な更新を必要とするデータ・テーブルを格納するアプリケーションは、標準的に、ＳＩＭＤハードウェアを十分に利用するために、データの再配置を要求する。このデータの再配置は、大量のオーバーヘッドをもたらすので、ＳＩＭＤハードウェアにより達成される効率を制限してしまう。
【０００４】
ＳＩＭＤのベクトル幅は増大し（つまり、単一の処理が実行されるデータ・エレメントの数）、アプリケーション開発者（及び編集者）は不連続なメモリ記憶装置内に格納された再構成データ・エレメントに関連付けられたオーバーヘッドのためにＳＩＭＤハードウェアを十分に利用することが益々困難であると分かる。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明は、複数のデータ・エレメントの収集及び分散に関する。
【課題を解決するための手段】
【０００６】
本発明の１又は複数の実施形態の詳細は、添付の図面及び以下の説明に記載される。他の特徴、目的及び利点は、説明、図面、及び特許請求の範囲から明らかであろう。
【図面の簡単な説明】
【０００７】
【図１】コンピュータ・システムの概略図である。
【図２】コンピュータ・システムの概略図である。
【図３】プロセッサ・パイプラインのブロック図である。
【図４】システム内のデータ・フローの概略図である。
【図５】分散処理のデータ・フローの例を示す。
【図６】集中処理のデータ・フローの例を示す。
【図７】パッキング／パッキング解除のための、アドレス収集を支援する有限状態機械、及び読み込み／格納のためのマイクロコードを示す。
【図８】動的収集／分散機械のための実施の例のフロー図である。
【発明を実施するための形態】
【０００８】
収集及び分散処理は、ＳＩＭＤハードウェアによる使用のために格納されたデータ・エレメントを再配置する。収集処理は、データ・エレメントのセットをメモリから読み出し、標準的には単一のレジスタ又はキャッシュ・ラインにそれらを一緒にパッキングする。分散処理は、パッキングされたデータ構造内のデータ・エレメントを不連続の又はランダムな記憶域に分散させることにより逆処理を実行する。１又は複数のレベルのメモリへのアクセスに関連する遅延に加えて、例えば繰り返されるページ・フォルトによる収集又は分散処理中の割り込みは、一般に処理による如何なる進捗も該処理の始めに戻る前に廃棄されてしまうので、これらの処理に関連するオーバーヘッドを有意に増大しうる。本願明細書に組み込まれる米国特許出願番号２００９／０１７２３６４は、割り込みされるとき、処理の状態を保存する収集、分散及びプリフェッチの実施を開示している。従って、処理が再開されるとき、処理全体を繰り返すことが要求されない。
【０００９】
第１の態様によると、効率的なデータ転送処理は、プロセッサ装置により、複数のデータ・エレメントに対する第１の記憶域と第２の記憶域との間の転送処理を指定する単一の命令をデコードする段階、前記プロセッサ内の演算実行部による実行のために単一の命令を発行する段階、単一の命令の実行中に例外の発生を検出する段階、及び該例外に応答して、該例外を配信する前に、保留されているトラップ又は割り込みを例外ハンドラに配信する段階、により達成されうる。
【００１０】
以下の実施形態、実施例及び例の説明のために、説明用の用語が用いられる。このような特定の説明用の用語の定義は次の通りである。
【００１１】
コンピュータ・システム又はデータ処理装置若しくはシステムは、データにアクセスするための及び／又は通信のための如何なる種類の装置若しくはシステムも意味すると理解されてよい。例として、限定ではなく、次の１又は複数の如何なる組み合わせを有してもよい。ラップトップ・コンピュータ、ノート型コンピュータ、デスクトップ・コンピュータ、パーソナル・デジタル・アシスタント、ハンドヘルド・コンピュータ、個人用整理手帳、パームトップ・コンピュータ、ポケット・コンピュータ、携帯電話機／ファックス装置、ゲーム・コンピュータ、デジタル・タブレット装置、電子書籍、及びデジタル・ビデオ又はデジタル音声レコーダ／プレイヤ。
【００１２】
レジスタは、データを格納及び提供可能な如何なる装置であってもよい。データ・フォーマットに関するレジスタの更なる機能は、以下に説明される。レジスタは、必ずしもプロセッサと同じダイ又は同じパッケージに含まれない。
【００１３】
「処理する」、「計算する」、「算出する」、「決定する」等のような語は、コンピュータ若しくはコンピュータ・システム又は同様の電子計算装置を表す。コンピュータ若しくはコンピュータ・システム又は同様の電子計算装置は、該コンピュータ・システム内のレジスタ及び／又はメモリ内の電子のような物理量として提示されたデータを、コンピュータ・システムのメモリ又はレジスタ又は他の情報記憶装置、送信機又は表示装置等の中の物理量として同様に提示される他のデータへ操作及び／又は変換する。また、用語「複数の」は、本願明細書を通じて２以上の構成要素、装置、要素、パラメータ等を説明するために用いられうる。更に、用語「例外」及び「フォルト」は、現在の処理の保留を引き起こす事象を表すために道義的に用いられる。種類は、アドレス例外、データ例外、処理例外、オーバーフロー例外、保護例外、アンダーフロー例外を含む。
【００１４】
理解されるべき点は、本願明細書に開示された教示は種々の用途で用いられてもよいことである」。この点に限定されないが、本願明細書に開示された回路及び技術は、パーソナル・コンピュータ（ＰＣ）、無線装置又は無線局、ビデオ又はデジタル・ゲーム装置又はシステム、画像収集、処理、生成及び／又は視覚化システム又はディスプレイ、デジタル・ディスプレイ・システム、通信システム等のような多くの装置で用いられてもよい。
【００１５】
図１は、フロントサイド・バス及び／又はシステム・バスにより相互接続されたプロセッサ、メモリ及び入力／出力装置を有するシステムを示す。図２は、多数のポイント・ツー・ポイント・インタフェースにより相互接続されたプロセッサ、メモリ及び入力／出力装置を有するシステムを示す。他のプロセッサ・アーキテクチャが用いられてもよく、プロセッサ内で他のデータ通信技術が用いられてもよい。
【００１６】
図１を参照すると、システム１００は、複数のデータ・エレメントに対し第１及び第２の記憶域の間の転送処理（例えば、ｖｓｃａｔｔｅｒ、ｖｇａｔｈｅｒ、ｖｓｃａｔｔｅｒｐｆ、ｖｇａｔｈｅｒｐｆ）を実行するよう動作する２つのプロセッサ１４４、１６０を有する。明確化のため２つのみが示されるが、システム１００は２つより多くの又は１つのみのプロセッサを有してもよい。プロセッサ１４０、１６０は、データを収集又は分散するために設けられたレベル１（Ｌ１）キャッシュ１４２、１６２を有する。幾つかの実施形態では、プロセッサ１４０、１６０は、バックサイド・バスを介して対応するレベル２（Ｌ２）キャッシュに結合される。図１のシステムは、システム・バス１０６を介しバス・インタフェース１４４、１６４、１１２、１０８を介して接続された幾つかの機能ユニットを有する。一実施形態では、システム・バス１０６は、Ｉｎｔｅｌ（登録商標）社により製造されたＰｅｎｔｉｕｍ（登録商標）クラスのマイクロプロセッサと共に用いられるようなフロントサイド・バス（ＦＳＢ）であってもよい。他の実施形態は、他の相互接続が用いられてよい。
【００１７】
幾つかの実施では、他の構成要素が、第１の記憶域セットと第２の記憶域セットとの間の収集、分散及び／又はプリフェッチ処理を実行する。例えば、システム１００は、プロセッサ１４０、１６０に、システム・メモリ１１０へ及びシステム・メモリ１１０からデータを読み出し、書き込み、収集及び／又は分散を許可するメモリ制御部１３４を有する。幾つかの実施形態では、他の構成要素が、収集機能のような機能を実行し、他の内部及び外部メモリが用いられてもよい。他の実施形態は、フラッシュ・メモリを用いた基本入出力システム（Ｂａｓｉｃ  Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ：ＢＩＯＳ）の消去可能プログラマブル読み出し専用メモリ（Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ：ＥＰＲＯＭ）１３６を有する。メモリ制御部１３４は、バス・インタフェース１０８を有し、メモリ読み込み及び書き込みデータがシステム・バス１０６に結合された機能ユニットへ及びそれから伝達されるのを許可する。メモリ制御部１３４はまた、高性能グラフィック・インタフェース１３９を介して高性能グラフィック回路１３８に接続されてもよい。特定の実施形態では、高性能グラフィック・インタフェース１３９は、アドバンスト・グラフィック・ポートＡＧＰインタフェースであってもよい。メモリ制御部１３４は、システム・メモリ１１０から読み出したデータを、高性能グラフィック・インタフェース１３９を介して高性能グラフィック回路１３８に向けてもよい。
【００１８】
図２を参照すると、システム２００は、複数のプロセッサを有する。明確にするため、複数のプロセッサの内の２個のプロセッサ２７０、２８０のみが示される。プロセッサ２７０、２８０はそれぞれ、データを収集及び／又は分散するために、メモリ２０２、２０４に接続するローカル・メモリ・チャネル・ハブ（ＭＣＨ）２７２、２８２を有する。プロセッサ２７０、２８０は、ポイント・ツー・ポイント・インタフェース２５０を介し、ポイント・ツー・ポイント・インタフェース回路２７８、２８８を用いデータを交換する。プロセッサ２７０、２８０はそれぞれ、個々のポイント・ツー・ポイント・インタフェース２５２、２５４を介し、ポイント・ツー・ポイント・インタフェース回路２７６、２９４、２８６、２９８を用いチップセット２９０とデータを交換する。チップセット２９０はまた、高性能グラフィック・インタフェース２３８を介し、高性能グラフィック回路２９２とデータを交換してもよい。
【００１９】
図１で、バス・ブリッジ１３２は、システム・バス１０６とバス１１６との間のデータ交換を許可する。幾つかの実施形態では、バス・ブリッジ１３２は、業界標準アーキテクチャ（ＩＳＡ）バス又はＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスであってもよい。図２で、チップセット２９０は、バス・インタフェース２９６を介してバス２１６とデータを交換する。いずれのシステムでも、バス１１６、２１６上に種々の入力／出力装置１１４、２１４があってもよい（例えば、音声Ｉ／Ｏ１２４、２２４）。幾つかの実施形態では、別のバス・ブリッジ１１８、２１８が用いられ、バス１１６、２１６とバス１２０、２２０との間のデータ交換を許可してもよい。幾つかの実施形態では、バス１２０、２２０は、小型コンピュータ用周辺機器インタフェース（ＳＣＳＩ）バス、Ｉｎｔｅｇｒａｔｅｄ  Ｄｒｉｖｅ  Ｅｌｅｃｔｒｏｎｉｃｓ（ＩＤＥ）バス、又はＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）バスであってもよい。追加Ｉ／Ｏ装置が、バス２２０に接続されてもよい。これらは、例えば、マウスを含むキーボード及びカーソル制御装置１２２、２２２、モデム及びネットワーク・インタフェースを含む通信装置１２６、２２６、及びデータ記憶装置１２８、２２８を有してもよい。ソフトウェア・コード１３０、２３０は、データ記憶装置１２８、２２８に格納される。データ記憶装置１２８、２２８は、固定磁気ディスク、フロッピ・ディスク・ドライブ、光ディスク・ドライブ、光磁気ディスク・ドライブ、磁気テープ、又はフラッシュ・メモリを含む不揮発性メモリである。
【００２０】
図３を参照すると、プロセッサ・パイプライン３００は、図１又は２のプロセッサ又は他のプロセッサにより動作されてもよい。プロセッサ・パイプライン３００は、Ｏｕｔ−ｏｆ−Ｏｒｄｅｒ型パイプラインである。他のパイプライン構成要素又は機構が用いられてもよい。
【００２１】
レベル１（Ｌ１）キャッシュ・ステージ３０２は、命令及び／又はデータをレベル１（Ｌ１）キャッシュ（図１の１４２、１６２）に格納する。プリフェッチ／フェッチ・ステージ３０４は、レベル１（Ｌ１）キャッシュ又は別の場所から命令をフェッチ及び／又はプリフェッチする。命令バッファ・ステージ３０６は、１又は複数のバッファ内に命令を一時的に蓄える。命令分散ステージ３０８は、命令をパイプラインに発送する。デコード・ステージ３１０は、プログラムからプログラム・レベルの命令を取り出し、該プログラム命令から１又は複数の機械レベルの命令を生成する。レジスタ・リネーム・ステージ３１２は、実行する前に、論理レジスタを実際の物理レジスタにマッピングする。Ｏｕｔ−ｏｆ−Ｏｒｄｅｒ（ＯＯＯ）シーケンサ・ステージ３１４は、実行のために、ソース・レジスタ内の利用可能なデータに基づき、種々の機械命令をスケジューリングする。ソース・レジスタがデータを待っている命令は、該命令の実行を延期させてもよい。一方で、ソース・レジスタが利用可能なデータを有する他の命令は、順々に実行を進めてもよい。幾つかの実施形態では、これらの命令は、実行のために並列してスケジューリングされてもよい。
【００２２】
レジスタ・ファイル・ステージ３１６は、物理（例えばソース）レジスタを読み取る。演算実行部ステージ３１８は、１又は複数のユニット内に機械命令を入れる。アドバンスト・ロード・アドレス・テーブル（ＡＬＡＴ）ステージ３３０は、アドバンスト・ロード命令のようなテスト命令に対応する機械命令及び如何なる調停する格納命令を実行している間に、エントリを変更する。退避ステージ３２０は、機械状態を更新し、物理宛先レジスタに書き込む。
【００２３】
図３に示されるパイプライン・ステージは、単なる一例であり、種々のプロセッサ・パイプラインの実施形態において機能及び順序の両者が変更されてもよい。本願明細書に開示された実施形態で用いられるプロセッサは、パイプラインを用いる必要はない。
【００２４】
図４を参照すると、データは、図１及び２を参照して説明したシステム内に、例えばキャッシュ・メモリ４１６及び／又は外部メモリ４３５内に格納される。データは、（例えば、外部メモリ４３５内の）連続する場所４１８、４２０及び／又は不連続な若しくは隣接しない場所４２２、４２４から収集され及び／又はそれらへ分散される。
【００２５】
キャッシュ・メモリ４１６は標準的にプロセッサ（例えば、それぞれ図１、２のうちの一方を参照して説明されたプロセッサ１４６、１６０、２７０及び／又は２８０）の内部にあり、外部メモリ４３５は標準的にプロセッサの外部にある。しかしながら、種々の実施形態では、キャッシュ・メモリ４１６及び／又は外部メモリ４３５のそれぞれは、プロセッサの内部又は外部にあってもよい。外部メモリ４３５は、例えば２０２、２０４、１１０又は他のメモリを有し又はそれらに類似していてもよい。
【００２６】
収集処理は、（例えば、外部メモリ４３５内の）２以上の不連続な記憶域４２２及び４２４からデータを読み出し、該データを宛先レジスタ４１５のようなレジスタ・メモリに隣接して格納する。データの宛先レジスタ４１５への収集の状態は、マスク・レジスタ４１０に記録されるか又は書き込まれる。同様に、分散処理は、宛先レジスタ４１５のようなレジスタ・メモリからデータを読み出し、（例えば、外部メモリ４３５内の）２以上の不連続な記憶域４２２及び４２４に該データを格納する。データの宛先レジスタ４１５への分散の状態は、マスク・レジスタ４１０に記録されるか又は書き込まれる。
【００２７】
レジスタ・メモリ（例えば、宛先、マスク及び／又は他のレジスタ・メモリ）は、標準的にプロセッサ内の比較的小さい記憶空間であってもよい。レジスタ・メモリの内容は、プロセッサの他の記憶ユニット内に格納された内容よりも迅速にアクセスされる。宛先レジスタ４１５（例えば、ロード・レジスタ）は、カウンタ機械、ポインタ機械、ランダム・アクセス機械（ＲＡＭ）、ランダム・アクセス・プログラム内蔵機械（ＲＡＳＰ）又は他のメモリであてもよい。マスク・レジスタ４１０（例えば、シャドウ・レジスタ）は、「０」及び「１」のフラグ又は値を保持し、宛先レジスタ４１５の状態又は記憶容量をシャドウイング又はトラッキングするデータ・フィールド、エレメント又はプレースホルダを有する。
【００２８】
収集及び分散処理は、特に広範に分散されたデータ・エレメントを有するアプリケーションで、データ・エレメントにアクセスするために実施されてもよい。分散されたデータ・エレメントは、例えば宛先レジスタ４１５内の連続するように又は単一の場所に格納するために集められ、及び／又は２以上の不連続な記憶域に分散されてもよい。ある実施形態では、収集命令は、（例えば、キャッシュ・メモリ４１６及び／又は外部メモリ４３５内の）２以上の不連続な記憶域４２２及び４２４からの各データ・エレメントを、宛先レジスタ４１５へ読み出し、コピーし、複製し、転送し又は連続的に書き込む。また、分散命令に関してはこの逆である。このような収集処理は、データ・エレメントの「パッキング」及び／又は宛先レジスタ４１５の「パッキング」として表される。データ・エレメントを単一の場所（例えば宛先レジスタ４１５）にパッキングすることにより、プロセッサ（例えば、図１及び２）は、データを読み出し、処理し、監視し又はその他の場合には最小サイクル数（例えば、１サイクル）でデータに処理を実行するために同時に調和して及び／又は順々に集合的に使用する。
【００２９】
場合によっては、不連続記憶域へのアクセスの試みはそれぞれの処理の進捗を遅らせるので、収集及び／又は分散処理は割り込みされうる。いくつかの実施形態では、収集及び／又は分散処理の状態は保存される。従って、処理が再開されるとき、収集及び／又は分散処理全体を繰り返す必要がない。例えばマスク・レジスタ４１０に収集又は分散された及びされていないデータ・エレメントのレコードを格納することは、割り込みの時点から処理を継続することを可能にする。
【００３０】
収集処理は、２以上の連続又は不連続記憶域からの（例えば、１６個の）データ・エレメントのセットのそれぞれを、キャッシュ・メモリ４１６及び／又は外部メモリ４３５に収集してもよい（例えば、読み出す又はアクセスする）。収集処理は、キャッシュ・メモリ４１６内のキャッシュ・ラインへのポインタを入力として用いるか又は有する。データがキャッシュ・ラインの境界に跨って広がっているとき、又はキャッシュ・ライン・アドレスが提供されるとき、収集処理は、外部メモリ４３５からデータを読み出すが、これは比較的長時間を要しうる。データ・エレメント毎に、収集処理はキャッシュ・メモリに向けられる。そして、収集が不成功の場合、収集処理は外部メモリ４３５からのデータへのアクセスに進む。幾つかの実施形態では、処理は、キャッシュ・メモリ４１６をスキップし、外部メモリ４３５への直接アクセスに進む。
【００３１】
収集処理は、データ・エレメントを宛先レジスタ４１５（例えば、ロード・レジスタ）に格納又はパッキングする。宛先レジスタ４１５は、例えば単一の収集処理に用いられる複数の（例えば１６個の）別個のデータ・エレメントを有する。宛先レジスタ４１５内のデータ・エレメント又はベクトルは、データ・エレメントが読み出されたメモリからコピーされたデータ、及び／又はデータ・エレメントが読み出された記憶域へのポインタを有する。
【００３２】
収集処理は、外部メモリ４３５４３５にアクセスする前に、キャッシュ・メモリ４１６、ローカル・メモリ又はプロセッサ内部のメモリにアクセスして各データ・エレメントを読み出すか取り出す。データ・エレメントは、キャッシュ・メモリ４１６内に、メモリ・ページ又は他のメモリの単位で配置される。データ・エレメントは、メモリ内（例えば、連続記憶域４１８、４２０）、或いは不連続の又は隣接しない場所（例えば、不連続記憶域４２２、４２４）にパッキングされる。標準的に、収集処理は、２以上のデータ・エレメントが不連続な又は隣接しない記憶域４２２及び４２４に格納されているときに用いられる。データ・エレメントは、バイト（例えば、８ビット）、ワード（例えば、２バイト）、ダブル・ワード（例えば、３２ビット）、又は他の大きさ又はデータの単位であってもよい。
【００３３】
収集処理のレートは、収集されるエレメントのコヒーレンスのレベルに依存する。例えば、収集されるエレメントのコヒーレンスのレベルは、例えばキャッシュ・メモリ４１６内にデータ・エレメントが格納される異なるキャッシュ・ラインがどれだけ多くあるかの指標である。大きいコヒーレンスで格納された（例えば、キャッシュ・メモリ４１６内に少ないキャッシュ・ラインを用いて格納された）エレメントほど、少ない時間で又は少ない動作サイクルで収集されるか又は取り出される。例えば、全てのデータ・エレメントが完全にコヒーレントであるとき（例えば、同一のキャッシュ・ラインにあるとき）、収集処理は、単一の周期でデータを取り出す。しかしながら、収集されたエレメントは完全にコヒーレントでなくてもよい。例えば、エレメントは、幾つかの（例えば、２又は３個の）キャッシュ・ラインに広がってもよく、従って（例えば、レベル１（Ｌ１）又は中央演算処理装置（ＣＰＵ）の）キャッシュ・メモリ４１６への何回かの（例えば、２又は３回の）アクセスで収集されてもよい。
【００３４】
宛先レジスタ４１５は、ベクトル・レジスタ、ロード・レジスタ又は２以上の隣接しない記憶域からのアクセス又は収集されたデータを一時的に格納又はパッキングするための他のレジスタ・メモリであってもよい。例えば、データのセット（例えば１６個のベクトル）では、宛先レジスタ４１５は収集処理の宛先であってもよく、キャッシュ・メモリ４１６及び／又は外部メモリ４３５はソースであってもよい（例えば、連続４１８及び４２０、又は不連続４２２及び４２４であってもよい）。
【００３５】
図５は、収集命令がデータ・エレメントのセット（例えば、５１２ビットＳＩＭＤで最大１６個の３２ビット又は８個の６４ビット浮動小数点データ・エレメント）を条件付きでロードし、それらを宛先レジスタ５１５にパッキングする一実施形態を示す。エレメントは、汎用レジスタ５２５に渡された基準アドレス５２０、ｉｍｍｅｄｉａｔｅとして渡されたスケール５３０、ＳＩＭＤレジスタとして渡されたインデックス・レジスタ５１０（パッキングされたインデックスを保持している）、及び任意の変位（示されない）により指定される。データ・エレメントは、それらの対応するマスク・ビットが１の場合にのみロードされる。本実施形態のマスク・レジスタは、専用のマスク・レジスタである。代案として、マスク・レジスタはＳＩＭＤレジスタであってもよく、エレメントのマスク・ビットはマスク・レジスタからの対応するエレメントの符号ビットである。マスク・エレメントは、インデックス・エレメントと同一の大きさとして扱われる。エレメントのマスク・ビットが設定されていない場合、宛先レジスタ（ＳＩＭＤレジスタ）の対応するエレメントは変更されないままである。収集処理が完了すると、マスク・レジスタ全体は、収集命令の実行が例外により割り込まれない限り、該収集命令によりゼロに設定される。
【００３６】
一実施形態では、所定のデータ・セットを収集する収集処理が完了する前に終了されたとき、宛先レジスタ５１５は、既に集められたデータ（例えば、所定のデータ・セットのうちの一部のサブセット）を一時的に格納又は保護する。
【００３７】
以下の擬似コードは、本願明細書に記載された処理の例証的な例を有する。他の擬似コード、言語、処理、処理の順序、及び／又は数が用いられてもよい。
【００３８】
以下の擬似コードは、収集命令（例えば、「ｖｇａｔｈｅｒ」と記される）がどのように動作するかの例を示す。
【００３９】
【表１】
0005612061.tif 000002
図６は、分散命令が、ソースのＬＳＢからＭＳＢまでの如何なる重複する宛先記憶域への書き込みを指示しながら、ソースＳＩＭＤレジスタ６１５からのエレメントのセットを条件付きで格納する一実施形態を示す。宛先記憶域６１６、６１８、６２０及び６２２は、収集命令について上述したように指定される。エレメントは、それらの対応するマスク・ビットが１の場合にのみ格納される。マスク・レジスタ全体は、収集命令の実行が例外を引き起こさない限り、収集命令の実行によりゼロに設定される。この命令は、（まさに上述の収集命令のように）少なくとも１つのエレメントが既に分散されている場合に、例外によりサスペンドされうる。幾つかの実施では、重複する宛先の場所への書き込みのみが、（ソース・レジスタのＬＳＢからＭＳＢまで）互いに対して順序付けられることが保証される。重複は次のように決定される。各エレメントは、バイト大の場所のセットに対応する。［（インデックス×スケール）：（インデックス×スケール＋データ・エレメントの大きさ−１）］である。２つの異なるエレメントからの任意の２つの場所が同一である場合、エレメントは重複する。重複しない書き込みは、任意の順序で生じうる。幾つかの実施形態では、２以上の宛先の場所が完全に重複している場合、「先の」書き込みがスキップされてもよい。幾つかの実施形態では、エレメントは、（如何なる重複もない場合には）任意の順序で分散されてもよいが、フォルトは右から左への順に配信されなければならない。
【００４０】
以下の擬似コードは、分散命令（例えば、「ｖｓｃａｔｔｅｒ」と記される）がどのように動作するかの例を示す。
【００４１】
【表２】
0005612061.tif 000003
図４を再び参照すると、分散／収集プリフェッチ命令（例えば、ｖｓｃａｔｔｅｒｐｆ及びｖｇａｔｈｅｒｐｆ）は、ｖｇａｔｈｅｒ命令と同様に定められてもよい。しかし、データを宛先レジスタ４１５にロードする代わりに、データを有するキャッシュ・ラインがキャッシュ・メモリ４１６にプリフェッチされてもよい。一実施形態では、キャッシュ・ミスのペナルティを受けるのを回避するために、データは、収集又は分散される前に、最初にキャッシュ・メモリ４１６にプリフェッチされる。幾つかの実施形態では、命令は、データがどのレベルのキャッシュにプリフェッチされるべきかに関するヒントを得る。収集プリフェッチは、プリフェッチされているデータが次に読み取られる（書き込みとは対照的に）ヒントを伝えてもよい。分散プリフェッチは、プリフェッチされているデータが次に書き込まれるヒントを伝えてもよい。一実施形態では、収集及び／又は分散プリフェッチ命令は、マスク・レジスタを変更しない。前方への進捗を保証するため、本実施形態では、この命令は、例外でサスペンドせず、ページ・フォルトを配信しない。
【００４２】
収集及び／又は分散処理は、種々の理由で停止又は割り込まれうる。例えば、コンテキスト切り替え装置は、（例えば、２以上の複数のタスク間でプロセッサの状態又はコンテキストを変更するために）レジスタ・コンテキスト、タスク・コンテキスト、又は処理コンテキストを切り替えうる。別の実施形態では、１以上のより正確な例外が指定された処理を妨げるか又は遅延させるとき（例えば、オペレーティング・システム（ＯＳ）の許容ページ・フォルト又はキャッシュ・ページ・ミスの最大数又は限度にあたったとき）、及び／又は処理に割り当てられた時間が終了したとき、処理は停止又は割り込まれうる。更に別の実施形態では、収集／分散処理は、処理がより高い優先度の処理により置き換えられたとき、停止又は割り込まれうる。
【００４３】
収集及び／又は分散処理は、例えばシステム内の問題のある記憶域からデータを取り出そうとしてページ・フォルトを生じるとき、妨げられうる。ページ・フォルトのような幾つかのフォルト状態は、プログラムのフローがフォルトになっている命令を再開でき、同時に対応する命令セットの前方への進捗を保証するように、処理される。一実施形態では、メモリ・ページは、宛先レジスタ４１５と外部メモリ４３５、ハード・ドライブ若しくはディスクのような他のメモリとの間の転送の単位として用いられる固定長ブロックのキャッシュ・メモリ４１６を有する。ページ・フォルトは、収集又は分散処理がアドレス空間にマッピングされたメモリ・ページにアクセスしたが、物理的にロードできない若しくはキャッシュ・メモリ４１６内で利用可能でないとき、割り込み（例えば、又は例外）を有する。例えば、キャッシュ・メモリ４１６から収集されている各データ・エレメントは、ページ・フォルトを引き起こし、メモリ・ページの境界に渡る各エレメントは２つのページ・フォルトを引き起こしうる。
【００４４】
一実施形態では、システムは、例えばページ・フォルトに遭遇したような許容される例外の最大数（例えば、１６以上）にあたったとき、特定の処理を停止するか又は割り込む。例えば、ＯＳは、１つの処理に対して、キャッシュ及び／又はページ・ミス若しくはフォルトの限度を有してもよい。ＯＳは、ページ・フォルトを処理するために例外処理ソフトウェアを有してもよい。また、プロセッサは、ページ・フォルトを検出するためにメモリ管理ユニットを有してもよい。他の例外処理機構が用いられてもよい。
【００４５】
ページ・フォルトに遭遇したとき、システムは、ページ・フォルトを処理するために、収集及び／又は分散処理を処理の途中で停止してもよい。処理が繰り返されページ・フォルトに繰り返し遭遇したとき、処理により行われた進捗が廃棄された場合、収集／分散処理は少しも前へ進めない。
【００４６】
キャッシュ・メモリ４１６及び／又は外部メモリ４３５から収集されたデータを宛先レジスタ４１５に格納することは、完全な収集処理（例えば１６個全てのベクトルを収集すること）が完了前に割り込まれ、失敗又は終了した場合にデータを保護する。特に、データ・エレメントが例外を生成する場合、これらの命令は、例外を配信する前にエレメントのサブセットを更新する（つまり、収集処理ではマスク・レジスタ及び宛先レジスタ、又は分散処理ではメモリが、例外が配信される前に書き込まれたエレメントのサブセットを有する）。収集されているデータ・エレメントを宛先レジスタ４１５に格納することにより、割り込まれた又は停止された収集処理により以前に集められたデータは保護され、割り込みの前に処理が以前に終了した場所で収集処理が再開する。割り込まれた収集処理（例えば、収集された１以上のデータ・エレメントを有する）は、宛先レジスタ４１５に欠けている残りのエレメントを収集し始めてもよい。
【００４７】
収集命令の場合、同一のアーキテクチャのレジスタが入力と出力の両方として用いられる場合、出力レジスタが例外のときに部分的に更新されうるので、及びインデックスがデータ・エレメントと異なる大きさになりうるので、幾つかの入力状態は失われうる。幾つかの実施形態では、命令で指定されたインデックス及び／又はマスク・レジスタが宛先レジスタと同一の場合、収集命令はフォルトを配信し、命令の入力データが失われるのを防ぐ。
【００４８】
幾つかの実施形態では、データ・エレメントは、任意の順序でメモリから読み出されてもよい。一方で、フォルトは、宛先レジスタ４１５内のデータ・エレメントの順序に関しては、右から左へ（つまり、ＬＳＢからＭＳＢへ）の順で配信される。少なくとも１つのエレメントが既に収集されている場合（つまり、例外が、一番右のエレメント以外の、マスク・ビットのセットされているエレメントにより引き起こされた場合）、収集命令は例外によりサスペンドされうる。フォルトがエレメントにより引き起こされ、配信される場合、宛先レジスタ４１５のＬＳＢに近い全てのエレメントは、フォルトにならない場合に宛先レジスタ内に収集され、それらのマスク・ビットは更新される。宛先レジスタ４１５のＭＳＢに近いデータ・エレメントは、収集されてもされなくてもよい。所与のデータ・エレメントが複数のフォルトを引き起こす場合、それらは従来の順序で配信される。従って、収集処理が割り込まれるとき、宛先レジスタおよびマスク・レジスタは部分的に更新され、収集されたエレメントは宛先レジスタ内に置かれそれらのマスク・ビットはゼロに設定される。
【００４９】
幾つかのアプリケーションでは、特にソフトウェアをコーディング及び／又はデバッグしている間、データ中断点（ブレークポイント）は、変数の値が変化するときに又は変数が参照されるときに、プログラムの例外を止めるために用いられてもよい。収集又は分散命令がデータ中断点及び例外の両方を引き起こす場合、従来のアーキテクチャは例外を配信し、データ中断点は失われるだろう（何故なら、命令は、アーキテクチャの状態を部分的に更新し、中断点を引き起こしたロード／格納をやり直さないからである）。例外がある場合にもデータ中断点を確実に配信するために、例外が引き起こされたときにトラップが保留されている場合に、命令は（フォルトしているエレメントの直ぐ右の処理で）サスペンドされてもよい。これは、データ中断点がトラップとして扱われ、一方で例外がフォルトとして処理されるので、データ中断点が全て使用可能にされることを保証する。この仕組みでは、如何なるデータ中断点も失われず、前方への進捗が保証される（フォルト・ハンドラがフォルト状態をクリアすると仮定する）。この仕組みは、繰り返される文字列操作のために用いられる仕組みとは異なる。例えば、文字列操作は、トラップと例外の両方によりサスペンドされうる。トラップだけでは、これらの収集／分散命令をサスペンドしない（その代わり、如何なる例外も存在しない場合、殆どの他の命令と同様に、トラップは命令実行の終わりに配信される）。
【００５０】
幾つかの実施形態では、任意のトラップ又は割り込みが既に収集されたエレメントから保留している場合、それらは例外の代わりに配信されるだろう。この場合、フラグ・ビット、例えばＥＦＬＡＧ．ＲＦは１に設定されてよく、実行が続けられるとき命令中断点は再び引き起こされない。
【００５１】
幾つかの実施形態では、マスク・レジスタ４１０は、データ・エレメントの所定のセットの収集及び宛先レジスタ４１５のパッキングを監視及び／又は制御するために実施される。マスク・レジスタ４１０は、シャドウ・レジスタ、制御レジスタ、フラグ・レジスタ、汎用レジスタ、ＳＩＭＤレジスタ、又は他の適切なレジスタであってもよい。マスク・レジスタ４１０は、宛先レジスタ４１５に格納されたデータを示し、従って収集処理の完了を追跡するために用いられてもよい。一実施形態では、宛先レジスタ４１５内に格納されたデータ・エレメントとマスク・レジスタ４１０内に格納された対応する状態エレメントとの間に、１対１の対応が存在する。状態エレメント又は値は、フラグ、マーカ、タブ、指標、信号、及び／又は他の数、（例えば、対応する又は指し示されたレジスタ位置の）対応するデータ・エレメントが宛先レジスタ４１５内に格納されているか否かを示すビット及び／又はコード例えば、マスク・レジスタ４１０内の「１」は、対応するデータ・エレメントが宛先レジスタ４１５内に書き込まれなかったことを示してもよい。他の場合には「０」が用いられてもよい。他の数又はフラグが用いられてもよい。
【００５２】
一実施形態では、プロセッサは、１つの記憶域セットに対して単一の命令を用いて、収集及び／又は分散処理を一度呼び出してもよい。収集処理は、全てのデータ・エレメントが収集されるまで及び／又はレジスタ状態エレメントの合計値がゼロになるまで、実行又はランしてもよい。如何なる大きさの（例えば、任意の数の収集されたエレメント又は命令に対して）満たされた又はパッキングされた宛先レジスタ４１５も、（例えば、宛先レジスタ４１５の大きさに拘わらず）処理の完了後に空の又はゼロのマスク・レジスタ４１０を生じるので、マスク・レジスタ４１０は、如何なる大きさの宛先レジスタ４１５（例えば、如何なる数の収集されたエレメント）のパッキングを監視するために用いられてもよい。例えば、任意の数の「０」状態エレメントの累計は、常に０である。従って、マスク・レジスタ４１０は、種々の数のデータ・エレメントの宛先レジスタ４１５内へのパッキング又は収集を監視するために用いられてもよい。
【００５３】
幾つかの実施形態では、転送の完了を表すために、他のマスク値が用いられてもよい。例えば、代替の実施形態では、マスク・レジスタ４１０内の「１」は、対応するデータ・エレメントが宛先レジスタ４１５内に書き込まれたことを示してもよい。他の場合には、マスク・レジスタ４１５は対応するマスク位置に「０」を格納する。このような実施形態では、収集命令は、マスク・レジスタ４１０内の状態エレメントの値の合計が所定の閾、例えば収集されるべきデータ・エレメントの数に等しくなるまで実行してよい。該閾は収集命令毎に変化してもよい。幾つかの実施形態では、指定された処理は、マスク・レジスタ４１０内のマスク・エレメントに対する論理処理（例えば、ＡＮＤ又はＯＲ）が所定の値（例えば、「０」又は「１」）を生じるまで実行される。
【００５４】
一実施形態では、収集及び／又は分散命令は、フラグがマスク・レジスタ４１０がクリアされた、ゼロ又は他の所定値（例えば、収集命令に対して収集されるべきエレメントの数）になるまで、実行する。一実施形態では、処理が完了したとき、完了マスクが信号で伝えられるか又はフラグで知らせる。
【００５５】
一実施形態では、各処理サイクルで、収集命令は、異なるキャッシュ・ラインを（例えばＬ１）キャッシュ・メモリ４１６から読み出し、読み出したキャッシュ・ラインに対応する宛先レジスタ４１５内の最大数のエレメントを満たす。例えば、読み出したキャッシュ・ラインが収集されるべき１つのエレメントを有する場合、１つのエレメントは、宛先レジスタ４１５内に書き込まれ、マスク・レジスタ４１０内の対応する１つのビット状態エレメントが「０」に設定されてもよい。幾つかの実施形態では、デュアル又はマルチ・ポートキャッシュ・メモリ４１６及び／又は外部メモリ４３５が用いられるとき、プロセッサは、サイクル毎に１より多いデータ・エレメントを収集する。この場合には、データ・エレメントの所定のセットを収集する収集処理は、より少ないサイクル又は繰り返しで実行する。
【００５６】
効率的な収集処理は、マイクロコード及び／又はハードウェア機構の組み合わせを用いてシステム内で実施されてもよい。一実施形態では、プロセッサは、所定のデータ・セットが宛先ベクトル・レジスタ・メモリ４１５内に完全に収集されるまで、収集処理を続けてもよい。
【００５７】
本願明細書に開示された命令の実施に関与する計算の幾つかの特徴は、次を含む。（１）基準アドレス、インデックス、スケール及び変位を用いたアドレスの生成、（２）データ・エレメントのロード／格納、及び（３）データ・エレメントの宛先／ソース・レジスタからのパッキング／パッキング解除。一連の実施形態は、ソフトウェア・エミュレーション、既存のｕｏｐを用いたマイクロコード、新たなｕｏｐを用いたマイクロコード（つまり、命令の当該部分のための特別なハードウェア支援）及び有限状態機械（ＦＳＭ）を含むこれらのそれぞれに対して可能である。
【００５８】
図７を参照すると、パッキング／パッキング解除のための、アドレス収集を支援する有限状態機械、及び読み込み／格納のためのマイクロコードを有するこれらの計算を提供する一実施形態が示される。段階７１０で、インデックス・レジスタ及びマスク・レジスタ（及び分散ではソース・レジスタ）は、命令のために資源を割り当てこれらのレジスタのコピーを格納する収集／分散ＦＳＭへ送られる。示された実施形態のマスク・レジスタはＳＩＭＤレジスタであるが、マスクは、例えば専用マスク・レジスタ、汎用レジスタ等を含む他の記憶場所からＦＳＭへ提供されてもよい。段階７２０で、ＳＩＭＤ幅特有ロード／格納ｕｏｐのセットは、プロセッサにより実行される。これらの特有ロード／格納ｕｏｐに対し、アドレス生成ハードウェアは、汎用レジスタから基準アドレスを、（ロード／格納ｕｏｐ毎に１つのエレメントのインデックスを送信する）収集／分散ＦＳＭからインデックスを受信する。分散では、ＦＳＭはまた、格納ｕｏｐ毎にソース・レジスタからデータ・エレメントを送信する。収集では、メモリは、ロードｕｏｐ毎に、ハードウェアがＦＳＭへ送信するデータ・エレメントを返す。幾つかの実施形態では、分散処理のソースは、キャッシュ・ライン又は他の記憶場所である。また、ハードウェアは、スケール値及び幾つかの実施形態では変位値を、通常のロード／格納のために用いられるのと同一の機構を介して、アドレス生成ロジックに提供する。段階７３０で、ＦＳＭは、更新されたマスク値を、レジスタ・ファイルに書き戻す（また、収集では、ＦＳＭは宛先値も書き込む）。代替の実施形態は、３つの計算の全てを実行するために収集／分散ＦＳＭを用いてもよく、従ってロード／格納ｕｏｐを用いなくてもよい。
【００５９】
ロード／格納処理が通常のロード及び格納を用いて実行された場合、実装は、データ・エレメントと同じく多くのロード／格納を必要とするだろう。従って、実施は、全てのデータ・エレメントに渡るループ（例えば、ソフトウェア・ループ、マイクロコード・ループ又は状態機械の「ループ」）を有してもよく、又はループに依存しなくてもよい（例えば、マイクロコード内のＳＩＭＤ幅ロード／格納ｕｏｐのセット）。更に、幾つかの実施形態は、幾つかの又は全ての処理に対して同時に処理を実行するよう構成されてもよい。
【００６０】
幾つかの実施形態は、より良好な性能を提供すると予測されたものを動的に選択するための複数の実施及び機構を有してもよい。幾つかの実施では、性能は、収集／分散命令により作用されたキャッシュ・ラインの数に依存する。例えば、収集の１つの可能なマイクロコードの実施は、複数のエレメントのうちの１つが存在するキャッシュ・ラインをロードし該ラインにある全ての他のエレメントを抽出するｕｏｐについてのループを有する。このような実施は、エレメントが少ない数のキャッシュ・ラインに存在するときほど速い。この実施が多数のキャッシュ・ラインに作用する必要がある場合、一度に単に１つのデータ・エレメントをロードする（ループを有さない）単純な実施は、より速い。ループを有する実施は、ループｕｏｐからのオーバーヘッドを招く。従って、一実施形態は、良好に実行すると期待される実施を選択する予測と共に、両方の実施を有してもよい。
【００６１】
図８は、予測ビットを用いて、収集又は分散処理を実行するときにどの２つの実施が用いられるべきかを制御する一実施形態による収集／分散ＦＳＭの一例を示す。予測は、静的収集／分散命令毎に単一ビットを有するインデックス付けされた命令ポインタのテーブル（「ＩＰ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｐｏｉｎｔｅｒ）インデックス・テーブル」）である。一実施形態では、ビットは、Ｎサイクル毎に全てクリアされる。代替の実施形態では、実施内のロジック８４０は、どれだけ多くのキャッシュ・ラインが作用されるかを計数し、作用されたキャッシュ・ラインの数が閾より低い場合に該ロジックは対応するビットをクリアしてもよい。実施中、収集／分散が実行されるとき８１０、テーブル内のビットがクリアされた場合８２０、ハードウェアはループの実施を用いる８３０（その他の場合、ハードウェアは他の実施を用いる８４０）。ループの実施を用いるとき８３０、命令が特定の閾より多い数のキャッシュ・ラインに作用する場合８５０、ハードウェアは該命令のために予測ビットを設定する８６０。従って、ハードウェアは、次回に収集／分散命令が実行されるとき、ループのない実施を用いるよう選択するだろう。
【００６２】
実施形態は、プロセッサ又はコントローラにより実行されると本願明細書に記載された方法を実行する命令を有する又は格納された例えばメモリ、ディスク・ドライブ又はユニバーサル・シリアル・バス（ＵＳＢ）フラッシュ・メモリ、又は図１及び２に示された種々の記憶及びメモリ装置のようなコンピュータ可読媒体を有してもよい。
【００６３】
多数の実施形態、実施及び例が記載された。しかしながら、理解されるべき点は、本発明の精神及び範囲から逸脱することなく種々の変更が行われうることである。例えば、収集及び分散処理は、メモリとレジスタとの間とは対照的に、記憶域間（つまり、キャッシュ・ライン間、キャッシュ・レベル間、及び／又は内部メモリと外部メモリとの間）で実行されてもよい。更に、収集及び分散処理は、２以上のレジスタ間で実行されてもよい。従って、他の実施形態も本発明の範囲に包含される。
【符号の説明】
【００６４】
１０６  システム・バス
１１０  システム・メモリ
１１４  Ｉ／Ｏ装置
１２２  キーボード、マウス
１２４  音声Ｉ／Ｏ
１２６  通信装置
１２８  データ記憶装置
１３０  コード
１３２、１１８  バス・ブリッジ
１３４  メモリ制御部
１３８  高性能グラフィックス
１４０、１６０  プロセッサ
１４２、１６２  キャッシュ
１４４、１６４、１０８、１１２  バスＩ／Ｆ
２０２、２０４  メモリ
２１４  Ｉ／Ｏ装置
２１８  バス・ブリッジ
２２２  キーボード／マウス
２２４  音声Ｉ／Ｏ
２２６  通信装置
２２８  データ記憶装置
２３０  コード
２３８  高性能グラフィックス
２７０、２８０  プロセッサ
２７４、２８４  プロセッサ・コア
２９０  チップセット
４１０  マスク・レジスタ
４１６  キャッシュ・メモリ
４３５  外部メモリ
５１４  ソース／宛先レジスタ
【図１】
0005612061.tif 000004
【図２】
0005612061.tif 000005
【図３】
0005612061.tif 000006
【図４】
0005612061.tif 000007
【図５】
0005612061.tif 000008
【図６】
0005612061.tif 000009
【図７】
0005612061.tif 000010
【図８】
0005612061.tif 000011