(57)【要約】      （修正有）【課題】性能及び命令スループットを向上させ、使用電力を低減させることができるベクトル圧縮及びローテート機能を提供する。【解決手段】ベクトルソースオペランドと、マスクレジスタと、ベクトルデスティネーションオペランドと、ベクトルデスティネーションオフセットとを指定する命令に呼応して、マスクを読み出し、対応するマスキングされていないベクトルエレメントを、ベクトルソースからベクトルデスティネーションの隣接する連続した位置に、ベクトルデスティネーションオフセット位置からコピーする。【選択図】図１Ｃ
2014089699.tif 000002
【特許請求の範囲】
【請求項１】
それぞれがベクトル内のエレメント位置に対応する第１の複数のデータフィールドを有するマスクレジスタと、
ベクトルソースオペランドと、前記マスクレジスタと、ベクトルデスティネーションオペランドと、ベクトルデスティネーションオフセットとを指定する第１の命令をデコードするデコードステージと、
１以上の実行ユニットと
を備え、
デコードされた前記第１の命令に呼応して、前記１以上の実行ユニットは、
前記マスクレジスタの前記第１の複数のデータフィールドの値を読み出し、
第１の値を持つ、前記マスクレジスタの前記第１の複数のデータフィールドのそれぞれについて、前記ベクトルソースオペランドから、対応するベクトルエレメントを、前記ベクトルデスティネーションオフセットの位置から始まる、前記ベクトルデスティネーションの隣接する連続したエレメント位置にコピーする、プロセッサ。
【請求項２】
前記ベクトルソースオペランドからの前記対応するベクトルエレメントは、前記ベクトルデスティネーションのエレメント位置の総数を法とする、前記隣接する連続したエレメント位置にコピーされる、請求項１に記載のプロセッサ。
【請求項３】
前記第１の命令は、ベクトル圧縮及びローテート命令である、請求項２に記載のプロセッサ。
【請求項４】
前記対応するベクトルエレメントの、前記ベクトルデスティネーションオフセットの位置からの、隣接する連続したエレメント位置へのコピーは、最上位のベクトルデスティネーションエレメント位置が満たされるまでしか行われない、請求項１から３のいずれか一項に記載のプロセッサ。
【請求項５】
前記第１の命令は、ベクトル圧縮、フィル及びローテート命令である、請求項４に記載のプロセッサ。
【請求項６】
前記第１の値は１である、請求項１から５のいずれか一項に記載のプロセッサ。
【請求項７】
前記ベクトルソースオペランドから、対応するベクトルエレメントをそれぞれ、前記ベクトルデスティネーションの隣接する連続したエレメント位置にコピーする際に、前記マスクレジスタの対応するデータフィールドの値が、前記第１の値から第２の値に変更される、請求項１から６のいずれか一項に記載のプロセッサ。
【請求項８】
前記第２の値はゼロである、請求項７に記載のプロセッサ。
【請求項９】
前記ベクトルデスティネーションオペランドにコピーされるデータエレメントは３２ビットのデータエレメントである、請求項１から８のいずれか一項に記載のプロセッサ。
【請求項１０】
前記ベクトルデスティネーションオペランドにコピーされるデータエレメントは、６４ビットのデータエレメントである、請求項１から８のいずれか一項に記載のプロセッサ。
【請求項１１】
前記ベクトルデスティネーションオペランドは、１２８ビットのベクトルレジスタである、請求項１から１０のいずれか一項に記載のプロセッサ。
【請求項１２】
前記ベクトルデスティネーションオペランドは、２５６ビットのベクトルレジスタである、請求項１から１０のいずれか一項に記載のプロセッサ。
【請求項１３】
前記ベクトルデスティネーションオペランドは、５１２ビットのベクトルレジスタである、請求項１から１０のいずれか一項に記載のプロセッサ。
【請求項１４】
プロセッサにより実行されると、前記プロセッサに、
マスクレジスタの第１の複数のデータフィールドの値を読み出す手順と、
第１の値を持つ、前記マスクレジスタの前記第１の複数のデータフィールドのそれぞれについて、ベクトルソースオペランドから、対応するベクトルエレメントを、ベクトルデスティネーションオフセットの位置から始まる、前記ベクトルデスティネーションの隣接する連続したエレメント位置にコピーする手順と
を実行させる、プログラム。
【請求項１５】
前記ベクトルソースオペランドからの前記対応するベクトルエレメントは、前記ベクトルデスティネーションのエレメント位置の総数を法とする、隣接する連続したエレメント位置にコピーされる、請求項１４に記載のプログラム。
【請求項１６】
前記対応するベクトルエレメントの、前記ベクトルソースオペランドからの、前記ベクトルデスティネーションオフセットの位置から始まる、前記ベクトルデスティネーションの隣接する連続したエレメント位置へのコピーは、最上位のベクトルデスティネーションエレメント位置が満たされるまでしか行われない、請求項１４または１５に記載のプログラム。
【請求項１７】
前記ベクトルソースオペランドから、前記ベクトルデスティネーションの隣接する連続したエレメント位置にコピーされる対応するベクトルエレメントそれぞれについて、前記マスクレジスタの対応するデータフィールドの値を、前記第１の値から第２の値に変更する手順を前記プロセッサにさらに実行させる、請求項１６に記載のプログラム。
【請求項１８】
前記ベクトルデスティネーションに格納されるデータエレメントは３２ビットのデータエレメントである、請求項１４から１７のいずれか一項に記載のプログラム。
【請求項１９】
前記ベクトルデスティネーションに格納されるデータエレメントは、６４ビットのデータエレメントである、請求項１４から１７のいずれか一項に記載のプログラム。
【請求項２０】
前記ベクトルデスティネーションは、１２８ビットのベクトルレジスタである、請求項１４から１９のいずれか一項に記載のプログラム。
【請求項２１】
前記ベクトルデスティネーションは、２５６ビットのベクトルレジスタである、請求項１４から１９のいずれか一項に記載のプログラム。
【請求項２２】
前記ベクトルデスティネーションは、５１２ビットのベクトルレジスタである、請求項１４から１９のいずれか一項に記載のプログラム。
【請求項２３】
ベクトルソースオペランドと、マスクレジスタと、ベクトルデスティネーションオペランドと、ベクトルデスティネーションオフセットとを特定する第１の単一命令複数データ命令（第１のＳＩＭＤ命令）をデコードするデコードステージと、
１以上の実行ユニットと
を備え、
デコードされた前記第１のＳＩＭＤ命令に呼応して、前記１以上の実行ユニットは、
前記マスクレジスタの第１の複数のデータフィールドの値を読み出し、
第１の値を持つ、前記マスクレジスタの前記第１の複数のデータフィールドのそれぞれについて、前記ベクトルソースからの対応するベクトルエレメントを、前記ベクトルデスティネーションオフセットの位置から始まる、前記ベクトルデスティネーションのエレメント位置の総数を法とする、前記ベクトルデスティネーションの隣接する連続したエレメント位置にコピーする、プロセッサ。
【請求項２４】
前記ベクトルデスティネーションは、１２８ビットのベクトルレジスタである、請求項２３に記載のプロセッサ。
【請求項２５】
前記ベクトルデスティネーションは、２５６ビットのベクトルレジスタである、請求項２３に記載のプロセッサ。
【請求項２６】
前記ベクトルデスティネーションは、５１２ビットのベクトルレジスタである、請求項２３に記載のプロセッサ。
【請求項２７】
ベクトルソースオペランドと、マスクレジスタと、ベクトルデスティネーションオペランドと、ベクトルデスティネーションオフセットとを指定する第１の単一命令複数データ命令（第１のＳＩＭＤ命令）をデコードするデコードステージと、
１以上の実行ユニットと
を備え、
デコードされた前記第１のＳＩＭＤ命令に呼応して、前記１以上の実行ユニットは、
前記マスクレジスタの第１の複数のデータフィールドの値を読み出し、
マスキングされていない値を持つ、前記マスクレジスタの前記第１の複数のデータフィールドのそれぞれについて、前記ベクトルソースから、対応するベクトルエレメントを、前記ベクトルデスティネーションオフセットの位置から始まる、前記ベクトルデスティネーションの隣接する連続したエレメント位置に、最上位のベクトルデスティネーションエレメント位置が満たされるまでに限りコピーする、プロセッサ。
【請求項２８】
デコードされた前記第１のＳＩＭＤ命令に呼応して、前記１以上の実行ユニットは、
前記ベクトルソースから、前記ベクトルデスティネーションの隣接する連続したエレメント位置にコピーされた対応するベクトルエレメントそれぞれについて、前記マスクレジスタの対応するデータフィールドの値を、前記マスキングされていない値から、マスキングされている値に変更する、請求項２７に記載のプロセッサ。
【請求項２９】
前記マスキングされている値はゼロである、請求項２８に記載のプロセッサ。
【請求項３０】
メモリと、
複数のプロセッサと
を備え、
前記複数のプロセッサのそれぞれは、
ベクトルソースオペランドと、マスクレジスタと、ベクトルデスティネーションオペランドと、ベクトルデスティネーションオフセットとを指定する第１の単一命令複数データ命令（第１のＳＩＭＤ命令）をデコードするデコードステージと、
１以上の実行ユニットと
を備え、
デコードされた前記第１のＳＩＭＤ命令に呼応して、前記１以上の実行ユニットは、
前記マスクレジスタの第１の複数のデータフィールドの値を読み出し、
マスキングされていない値を持つ、前記マスクレジスタの前記第１の複数のデータフィールドのそれぞれについて、前記ベクトルソースからの対応するベクトルエレメントを、前記ベクトルデスティネーションオフセットの位置から始まる、前記ベクトルデスティネーションの隣接する連続したエレメント位置にコピーする、処理システム。
【請求項３１】
前記ベクトルソースからの前記対応するベクトルエレメントは、前記ベクトルデスティネーションのエレメント位置の総数を法とする、隣接する連続したエレメント位置にコピーされる、請求項３０に記載の処理システム。
【請求項３２】
前記第１のＳＩＭＤ命令に呼応して、前記１以上の実行ユニットはさらに、
前記ベクトルソースからコピーされたベクトルエレメントに対応していないベクトルデスティネーションエレメントそれぞれについて、前記ベクトルデスティネーションエレメントの値をゼロにする、請求項３０または３１に記載の処理システム。
【請求項３３】
前記ベクトルソースからの前記対応するベクトルエレメントは、前記ベクトルデスティネーションオフセットの位置から始まる隣接する連続したエレメント位置に、最上位のベクトルデスティネーションエレメント位置が満たされるまでに限りコピーされる、請求項３０から３２のいずれか一項に記載の処理システム。
【請求項３４】
デコードされた前記第１のＳＩＭＤ命令に呼応して、前記１以上の実行ユニットはさらに、
前記ベクトルソースから、前記ベクトルデスティネーションの隣接する連続したエレメント位置にコピーされた対応するベクトルエレメントそれぞれについて、前記マスクレジスタの対応するデータフィールドの値を、前記マスキングされていない値から、マスキングされている値に変更する、請求項３３に記載の処理システム。
【請求項３５】
前記マスキングされている値はゼロである、請求項３４に記載の処理システム。
【請求項３６】
前記ベクトルデスティネーションに格納されるデータエレメントは３２ビットのデータエレメントである、請求項３０から３５のいずれか一項に記載の処理システム。
【請求項３７】
前記ベクトルデスティネーションに格納されるデータエレメントは６４ビットのデータエレメントである、請求項３０から３６のいずれか一項に記載の処理システム。
【請求項３８】
前記ベクトルデスティネーションは１２８ビットのデータレジスタである、請求項３０から３７のいずれか一項に記載の処理システム。
【請求項３９】
前記ベクトルデスティネーションは２５６ビットのデータレジスタである、請求項３０から３７のいずれか一項に記載の処理システム。
【請求項４０】
前記ベクトルデスティネーションは５１２ビットのデータレジスタである、請求項３０から３７のいずれか一項に記載の処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、プロセッサその他の処理論理に実行されると、論理的、数学的、その他の関数演算を実行する処理論理、マイクロプロセッサ、及び、関連する命令セットアーキテクチャに関する。特に、本開示は、ベクトル圧縮及びローテート機能を提供する命令及び論理に関する。
【背景技術】
【０００２】
現代のプロセッサは、計算集約型ではあるが、様々なデータ記憶デバイス（たとえば、単一命令複数データ（ＳＩＭＤ）ベクトルレジスタ）を利用した効率的な実装によって実現可能な、ハイレベルな並列データを提供する演算を提供する命令を含んでいる場合が多い。ベクトル処理をサポートするために、中央処理装置（ＣＰＵ）は並列ハードウェアを提供する。ベクトルは、複数の連続したデータエレメントを保持するデータ構造である。サイズがＭのベクトルレジスタは、サイズがＯのＮ個のベクトルエレメントを含むことができる（Ｎ＝Ｍ／Ｏ）。たとえば６４バイトのベクトルレジスタは、（ａ）各エレメントが１バイトを占有しているデータアイテムを保持する、６４個のベクトルエレメント、（ｂ）それぞれが２バイト（または１つの「ワード」）を占有するデータアイテムを保持する、３２個のベクトルエレメント、（ｃ）それぞれが４バイト（または１つの「ダブルワード」）を占有するデータアイテムを保持する、１６個のベクトルエレメント、（ｄ）それぞれが８バイト（または１つの「クワッドワード」）を占有するデータアイテムを保持する８個のベクトルエレメントに分割することができる。
【０００３】
アプリケーションまたはソフトウェアコードのベクトル化は、アプリケーションに、たとえば幅の広いベクトルアーキテクチャ等の特定のシステムまたは命令セットアーキテクチャでコンパイル、インストール、及び／または実行を行わせることを含んでよい。
【０００４】
コンピュータ産業は、アーキテクチャの効率及び計算技術（たとえばベクトル化、同時マルチスレッド、予測等）をテストするために、様々なプログラミングベンチマークを開発した。これらベンチマークの１つに、ＳＰＥＣ（標準性能評価法人（Standard Performance Evaluation Corporation））から入手可能なものがある。ＳＰＥＣのベンチマークは、プロセッサ及びプラットフォームアーキテクチャの性能を「基準に従って評価する（"benchmark"）」ために幅広く利用されている。ＳＰＥＣベンチマークを構成するプログラムは、産業の専門家によって、コンピュータの性能を高めるための新たなコンパイル及び計算技術を発見する試みのために、紹介、分析されている。ＳＰＥＣベンチマークスイートの一環として（ＣＰＵ２００６と称される）、システムのプロセッサ、メモリのサブシステム及びコンパイラを協調させるために選択される、整数及び浮動小数点の、ＣＰＵ集約型のベンチマークが含まれている。ＣＰＵ２００６は、４４４.ＮＡＭＤと称されるプログラムを含んでおり、これは、イリノイ大学Ｕｒｂａｎａ−Ｃｈａｍｐａｉｇｎ校の、理論、計算生物物理学グループのＪｉｍ  Ｐｈｉｌｌｉｐｓ氏によって開発された大型の生体分子システムのシミュレーションと並列しているプログラムである、ＮＡＭＤのデータ配置及び内部ループから導出される。ＮＡＭＤのランタイムの殆ど全体が、小さな関数セットの原子間相互作用の計算に費やされる。このセットは、コードの塊から分離され、ＣＰＵ２００６のコンパクトなベンチマークを形成する。計算コアは、幅広い機械アーキテクチャで良好な性能を達成するが、プラットフォーム固有の最適化は含まない。
【０００５】
ＮＡＭＤプログラムは、２００２年の、並列スケーラビリティのゴードンベル賞を受賞しているが、直列性能も同様に重要である。たとえばベンチマークの殆ど全ての並列部分をベクトル化すると、ベクトル化できない、直列の部分が、通常は、ベンチマークのランタイムのうちさらに重要な部分を表す。この状況は、高度な並列スケーラビリティをもつ計算集約型のプログラムの一般例として典型的である。ベクトル化を利用して殆どの並列部分を加速化した後で、プログラムのベクトル化できない、直列の部分の性能を向上させようとする際の、性能を制限する問題及びボトルネックが残存している。
【０００６】
今日まで、これら性能を制限する問題及びボトルネックを解決する可能性のある解決法は適切に模索されていない。
【０００７】
本発明は、添付図面によって制限ではなく、例示として図示される。
【図面の簡単な説明】
【０００８】
【図１Ａ】ベクトル圧縮及びローテート機能を提供する命令を実行するシステムの一実施形態のブロック図である。
【図１Ｂ】ベクトル圧縮及びローテート機能を提供する命令を実行するシステムの別の一実施形態のブロック図である。
【図１Ｃ】ベクトル圧縮及びローテート機能を提供する命令を実行するシステムの別の一実施形態のブロック図である。
【図２】ベクトル圧縮及びローテート機能を提供する命令を実行するプロセッサの一実施形態のブロック図である。
【図３Ａ】一実施形態におけるパッキングされたデータタイプを示す。
【図３Ｂ】一実施形態におけるパッキングされたデータタイプを示す。
【図３Ｃ】一実施形態におけるパッキングされたデータタイプを示す。
【図３Ｄ】一実施形態におけるベクトル圧縮及びローテート機能を提供する命令エンコードを示す。
【図３Ｅ】別の一実施形態におけるベクトル圧縮及びローテート機能を提供する命令エンコードを示す。
【図３Ｆ】別の一実施形態におけるベクトル圧縮及びローテート機能を提供する命令エンコードを示す。
【図３Ｇ】別の一実施形態におけるベクトル圧縮及びローテート機能を提供する命令エンコードを示す。
【図３Ｈ】別の一実施形態におけるベクトル圧縮及びローテート機能を提供する命令エンコードを示す。
【図４Ａ】ベクトル圧縮及びローテート機能を提供する命令を実行するプロセッサマイクロアーキテクチャの一実施形態のエレメントを示す。
【図４Ｂ】ベクトル圧縮及びローテート機能を提供する命令を実行するプロセッサマイクロアーキテクチャの一実施形態のエレメントを示す。
【図５】ベクトル圧縮及びローテート機能を提供する命令を実行するプロセッサの一実施形態のブロック図である。
【図６】ベクトル圧縮及びローテート機能を提供する命令を実行するコンピュータシステムの一実施形態のブロック図である。
【図７】ベクトル圧縮及びローテート機能を提供する命令を実行するコンピュータシステムの別の一実施形態のブロック図である。
【図８】ベクトル圧縮及びローテート機能を提供する命令を実行するコンピュータシステムの別の一実施形態のブロック図である。
【図９】ベクトル圧縮及びローテート機能を提供する命令を実行するシステムオンチップの一実施形態のブロック図である。
【図１０】ベクトル圧縮及びローテート機能を提供する命令を実行するプロセッサの一実施形態のブロック図である。
【図１１】ベクトル圧縮及びローテート機能を提供するＩＰコア開発システムの一実施形態のブロック図である。
【図１２】ベクトル圧縮及びローテート機能を提供するアーキテクチャエミュレーションシステムの一実施形態を示す。
【図１３】ベクトル圧縮及びローテート機能を提供する命令を変換するシステムの一実施形態を示す。
【図１４Ａ】ベクトル圧縮及びローテート機能を提供する命令の一実施形態のフロー図を示す。
【図１４Ｂ】ベクトル圧縮及びローテート機能を提供する命令の別の一実施形態のフロー図を示す。
【図１５Ａ】ベクトル圧縮及びローテート機能を提供する命令を利用するプロセスの一実施形態のフロー図を示す。
【図１５Ｂ】ベクトル圧縮及びローテート機能を提供する命令を利用するプロセスの別の一実施形態のフロー図を示す。
【図１６Ａ】ベクトル圧縮及びローテート機能を提供するプロセスの一実施形態のフロー図を示す。
【図１６Ｂ】ベクトル圧縮及びローテート機能を提供するプロセスの別の一実施形態のフロー図を示す。
【図１７】ベクトル圧縮及びローテート機能を提供するプロセスの別の一実施形態のフロー図を示す。
【図１８】ベンチマークアプリケーションに、ベクトル圧縮及びローテート機能を提供するプロセスの一実施形態のフロー図を示す。
【図１９Ａ】ベンチマークアプリケーションに、ベクトル圧縮及びローテート機能を提供するプロセスの一実施形態のフロー図を示す。
【図１９Ｂ】ベンチマークアプリケーションに、ベクトル圧縮及びローテート機能を提供するプロセスの別の一実施形態のフロー図を示す。
【発明を実施するための形態】
【０００９】
以下の記載では、ベクトル圧縮及びローテート機能をプロセッサ、コンピュータシステム、その他の処理装置内で、またはこれらに関連して提供する命令及び処理論理を開示する。
【００１０】
ここでは、ベクトル圧縮及びローテート機能を提供する命令及び論理を開示する。一部の実施形態では、ベクトルソース、マスク、ベクトルデスティネーション、及びデスティネーションオフセットを指定する命令に呼応して、マスクを読み出し、対応するマスキングされていないベクトルエレメントを、ベクトルソースから、ベクトルデスティネーションオフセットの位置から始まる、ベクトルデスティネーションの隣接する連続した位置にコピーする。別の実施形態では、ベクトルソースからエレメントがコピーされないベクトルデスティネーションのゼロエレメントが開示される。一部の実施形態では、ベクトルソースからのマスキングされていないベクトルエレメントは、ベクトルデスティネーションのエレメント位置の総数を法とする、隣接する連続したエレメント位置にコピーされる。一部の別の実施形態では、コピーは、ベクトルデスティネーションが満杯になると終了する。マスキングされていないベクトルエレメントを、ベクトルソースから、ベクトルデスティネーションの隣接する連続したエレメント位置にコピーする際に、マスクの対応するフィールドの値も、マスキングされた値に変更されてよい。したがって、マスク値は、進捗状況及び／または完了を追跡するために利用することができ、満杯になったデスティネーションをメモリに格納した後で命令を再実行することができる。次いで、命令を、修正されたマスクとゼロのベクトルデスティネーションオフセットとを利用して再実行して、ベクトル圧縮及びローテート命令の実行がまだ必要なエレメントのみを圧縮して、命令のスループットを向上させることができる。
【００１１】
ＳＩＭＤ圧縮及びローテート命令は、そうしなければ簡単にはベクトル化されないアプリケーション（たとえばＳＰＥＣベンチマークスイートの４４４．ＮＡＭＤの内部ループ等）にベクトル圧縮機能を提供するために利用できることが知られており、こうすることにより、外部メモリへの高価な連続した格納数を低減させ、性能及び命令スループットを向上させ、使用電力を低減させることができる。
【００１２】
以下の記載では、処理論理、処理タイプ、マイクロアーキテクチャ条件、イベント、イネーブルメカニズム等の数多くの具体的な詳細を述べて、本発明の実施形態の完全な理解を提供する。しかし、当業者であれば本発明を、これら具体的な詳細なしに実行可能であることを理解する。加えて、公知の構造、回路等は詳細に示すのを避けて、本発明の実施形態を不当にあいまいにしないようにしている場合もあることも理解されたい。
【００１３】
以下の記載は、プロセッサに関して記載されるが、他の実施形態は任意の他の種類の集積回路及び論理デバイスに利用可能である。本発明の実施形態の同様の技術及び教示は、パイプラインスループットを向上させ性能を高めることで利益を享受しうる他のタイプの回路または半導体デバイスにも応用可能である。本発明の実施形態の教示は、データ操作を実行するいずれのプロセッサまたは機械にも応用可能である。しかし本発明は、５１２ビット、２５６ビット、１２８ビット、６４ビット、３２ビット、または１６ビットのデータオペレーションを実行するプロセッサまたは機械に限定されず、データの操作及び管理を実行するいずれのプロセッサ及び機械に対しても応用することができる。加えて、以下の記載は例示を提供しており、添付図面は図示の目的から様々な例を提示する。しかし、これらの例は、単に本発明の実施形態の例を提供する意図をもつのであって、本発明の実施形態について可能性のあるすべての実施形態の網羅的なリストを提供する意図はないので、限定的にとらえられるべきではない。
【００１４】
以下の例は、実行ユニット及び論理回路のコンテキストから、命令処理及び配信について記載しているが、本発明の他の実施形態は、機械により実行されると、機械に本発明の少なくとも１つの実施形態に従った機能を実行させることができる、機械可読有形媒体に格納されているデータまたは命令によって実行されてもよい。一実施形態では、本発明の実施形態に関する機能は、機械実行可能な命令によって実現される。命令は、命令をプログラミングされた汎用または専用プロセッサに、本発明の各ステージを実行させる。本発明の実施形態は、コンピュータ（またはその他の電子デバイス）を、本発明の実施形態の１以上のオペレーションを実行させるようにプログラミングするために利用されてよい命令が格納された機械またはコンピュータ可読媒体を含んでよいコンピュータプログラムプロダクトまたはソフトウェアとして提供されてよい。または、本発明の実施形態の各ステージが、各ステージを実行するための固定関数(fixed-function)論理を含む具体的なハードウェアコンポーネントにより実行されてもよいし、プログラミングされたコンピュータコンポーネントと固定関数ハードウェアコンポーネントの任意の組み合わせにより実行されてもよい。
【００１５】
本発明の実施形態を実施するための論理をプログラミングするために利用される命令は、システムのメモリ（たとえばＤＲＡＭ、キャッシュ、フラッシュメモリ、その他のストレージ）に格納されてもよい。さらに命令は、他のコンピュータ可読媒体によってまたはネットワーク経由で配信されてよい。したがって、機械可読媒体は、機械（たとえばコンピュータ）が可読な形態の命令を格納または送信する任意のメカニズムを含んでよく、フロッピー（登録商標）ディスク、光ディスク、ＣＤ、ＣＤ−ＲＯＭ，光磁気ディスク、ＲＯＭ、ＲＡＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気カードまたは光カード、フラッシュメモリ、または有形の、機械可読記憶媒体（電気、光、音響その他の形態の伝播信号（たとえば搬送波、赤外線信号、デジタル信号等）によってインターネット経由で情報を送信するために利用される）に限定はされない。したがって、コンピュータ可読媒体は、機械が可読な形態で電子命令または情報を格納または送信するのに適した任意のタイプの有形の機械可読媒体を含む。
【００１６】
設計は、作成、シミュレーション、製造といった様々なステージを経ることができる。設計を表すデータは、複数の方法で設計を表すことができる。まず、シミュレーションに適しているが、ハードウェアを、ハードウェア記述言語あるいは別の機能記述言語を利用して表すことができる。加えて、論理及び／またはトランジスタゲートを持つ回路レベルのモデルを設計プロセスのあるステージで生成することができる。さらに、殆どの設計は、あるステージで、ハードウェアモデルの様々なデバイスの物理的配置を表すレベルのデータに到達する。従来の半導体製造技術を利用するケースでは、ハードウェアモデルを表すデータは、集積回路を製造するために利用されるマスクのための様々なマスクレイヤの様々な特徴の存在または不在を示すデータであってよい。設計のいずれの表現においても、データは、機械可読媒体の任意の形態で格納されてもよい。ディスク等のメモリまたは磁気もしくは光ストレージは、情報の送信のために変調された、または生成された光波または電気波で送信される情報を格納するための機械可読媒体であってよい。コードまたは設計を搬送するまたは示す電気搬送波が送信される場合、電気信号のコピー、バッファリング、または再送信に関しては、新たなコピーを作成する。したがって通信プロバイダまたはネットワークプロバイダは、少なくとも一時的に、本発明の実施形態の技術を利用して、搬送波に符号化された情報等の物品を有形の機械可読媒体に格納してよい。
【００１７】
現代のプロセッサでは、複数の異なる実行ユニットを利用して、様々なコード及び命令が処理、実行される。これら命令の全てが、同じように生成されているわけではない、というのも、これらのうち早く完了するものもあるが、完了させるために多数のクロックサイクルを必要とするものもあるからである。命令のスループットが速いほど、プロセッサの性能全体もよくなる。したがって、なるべく命令を高速で実行させるとよい。しかし、命令の中には、複雑性が高く、多くの実行時間及びプロセッサリソースが必要となるものもある。たとえば浮動小数点命令、ロード／格納演算、データの移動等がこれに相当する。
【００１８】
より多くのコンピュータシステムがインターネット、テキスト及びマルチメディアアプリケーションで利用されるようになるにつれ、さらなるプロセッサのサポートが導入されてきた。一実施形態では、命令セットは、１以上のコンピュータアーキテクチャ（たとえば、データタイプ、命令、レジスタアーキテクチャ、アドレスモード、メモリアーキテクチャ、割り込み及び例外の処理、外部入出力（Ｉ／Ｏ））と関連付けられてよい。
【００１９】
一実施形態では、命令セットアーキテクチャ（ＩＳＡ）は、１以上の命令セットを実装するために利用されるプロセッサ論理及び回路を含む１以上のマイクロアーキテクチャにより実装されてよい。したがい、異なるマイクロアーキテクチャをもつプロセッサは、共通の命令セットの少なくとも一部を共有してよい。たとえばＩｎｔｅｌ（登録商標）Ｐｅｎｔｉｕｍ（登録商標）４プロセッサ、Ｉｎｔｅｌ（登録商標）Ｃｏｒｅ（登録商標）プロセッサ、及び、カリフォルニア州のＳｙｎｎｙｖａｌｅのＡｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ社製のプロセッサなどが、ｘ８６命令セットに略等しいバージョンを実装している（新しいバージョンでは拡張部も加えられている）が、内部設計は異なっている。同様に、他の開発業者（たとえばＡＲＭ  Ｈｏｌｄｉｎｇｓ  ，ＬＴＤ．，ＭＩＰＳ）または彼らのライセンシーまたは採用会社（adopter）が、共通の命令セットの少なくとも一部ではあるが、プロセッサの設計は異ならせて、共有している、という事例がある。たとえばＩＳＡの同じレジスタアーキテクチャを、新たな、または公知の技術を利用して（たとえば、専用物理レジスタ、レジスタリネームメカニズム（たとえばＲｅｇｉｓｔｅｒ  Ａｌｉａｓ  Ｔａｂｌｅ（ＲＡＴ）、Ｒｅｏｒｄｅｒ  Ｂｕｆｆｅｒ（ＲＯＢ）、及び退避レジスタファイル）を利用する１以上の動的割り当てされた物理レジスタ）異なるマイクロアーキテクチャで異なる方法で実装することができる。一実施形態では、レジスタは１以上のレジスタ、レジスタアーキテクチャ、レジスタファイル、その他、ソフトウェアプログラムによりアクセス可能であってもなくてもよい他のレジスタセットを含んでよい。
【００２０】
一実施形態では、命令は、１以上の命令フォーマットを含んでよい。一実施形態では、命令フォーマットは、特に実行するオペレーション及びオペレーションを実行するオペランドを指定する様々なフィールド（ビット数、ビット位置等）を示すことができる。命令フォーマットの一部は、さらに、命令テンプレート（またはサブフォーマット）により破壊定義（broken defined）されてもよい。たとえば、ある命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義されていてもよいし、及び／または、異なる割り込みを行われたフィールドを有するように定義されていてもよい。一実施形態では、命令は、命令フォーマットを利用して（さらに、定義されている場合には命令フォーマットの命令テンプレートの一定のフォーマットで）表され、オペレーション及びオペレーションが行われるオペランドを示したり、指定したりする。
【００２１】
科学的な、金融関係の、自動ベクトル化汎用ＲＭＳ（認識、マイニング、及び合成：recognition, mining, and synthesis）及び視覚的及びマルチメディアアプリケーション（たとえば２Ｄ／３Ｄグラフィック、画像処理、ビデオ圧縮／伸張、音声認識アルゴリズム及び音声操作）において、多数のデータアイテムに対して同じオペレーションが行われる必要があるだろう。一実施形態では、単一命令複数データ（ＳＩＭＤ）が、プロセッサに複数のデータエレメントにオペレーションを行わせるタイプの命令のことを指す。ＳＩＭＤ技術は、レジスタのビットを複数の固定サイズまたは可変サイズのデータエレメントに分割することができるプロセッサで利用することができる（各データエレメントは、別の値を表している）。たとえば一実施形態では、６４ビットレジスタのビットは、４つの別個の１６ビットのデータエレメント（これらそれぞれは、別々の１６ビットの値を表している）を含むソースオペランドとして組織化されていてよい。このタイプのデータは、「パッキングされた」データタイプまたは「ベクトル」データタイプと称されてよく、このタイプのデータのオペランドは、パッキングされたデータオペランドまたはベクトルオペランドと称される。一実施形態では、パッキングされたデータアイテムまたはベクトルは、１つのレジスタに格納されている一連のパッキングされたデータエレメントであり、パッキングされたデータオペランドまたはベクトルオペランドは、ＳＩＭＤ命令のソースまたはデスティネーションオペランド（または、「パッキングされたデータ命令」または「ベクトル命令」）であってよい。一実施形態では、ＳＩＭＤ命令は、２つのソースベクトルオペランドに対して実行すべき１つのベクトルオペレーションを指定して、同じまたは異なるサイズであり、同じまたは異なる数のデータエレメントであり、同じまたは異なるデータエレメントの順序を持つ、デスティネーションベクトルオペランドを生成する（結果ベクトルオペランドと称される場合もある）。
【００２２】
ｘ８６、ＭＭＸ（登録商標）、ストリーミングＳＩＭＤ拡張（ＳＳＥ）、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４．１、及びＳＳＥ４．２命令を含む命令セットをもつＩｎｔｅｌ（登録商標）Ｃｏｒｅ（登録商標）ロセッサ、ベクトル浮動小数点（ＶＦＰ）及び／またはＮＥＯＮ命令を含む命令セットをもつＡＲＭ  Ｃｏｒｔｅｘ（登録商標）プロセッサファミリー等のＡＲＭプロセッサ、及び、中国科学アカデミーのＩＣＴ（Institute of Computing Technology）が開発したＬｏｏｎｇｓｏｎプロセッサファミリー等のＭＩＰＳプロセッサ等によって利用されているものに代表されるＳＩＭＤ技術は、アプリケーション性能を顕著に向上させた（Ｃｏｒｅ（登録商標）及びＭＭＸ（登録商標）は、カリフォルニア州サンタクララのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ社の登録商標または商標である）。
【００２３】
一実施形態では、デスティネーション及びソースレジスタ／データは、対応するデータまたはオペレーションのソース及びデスティネーションを表す一般名称である。一部の実施形態では、これらは、レジスタ、メモリ、記述されるものと異なる命令または機能をもっているその他の格納領域で実装されてもよい。たとえば一実施形態では、「ＤＥＳＴ１」は、一時的な格納レジスタその他の格納領域であってよく、一方で、「ＳＲＣ１」「ＳＲＣ２」は、第１及び第２のソース格納レジスタ、その他の格納領域であってもよい、等である。他の実施形態では、ＳＲＣ及びＤＥＳＴ格納領域の２以上が、同じ格納領域（たとえばＳＩＭＤレジスタ）内の異なるデータ格納エレメントに対応していてよい。一実施形態では、ソースレジスタの１つが、たとえばあるデスティネーションレジスタにサービス提供している２つのソースレジスタのいずれかへの第１及び第２のソースデータに対してオペレーションを実行した結果を書き戻すことで、デスティネーションレジスタとして動作してもよい。
【００２４】
図１Ａは、本発明の一実施形態における、命令を実行するための実行ユニットを含むプロセッサで構成されるコンピュータシステムの一例のブロック図である。システム１００は、この実施形態で記載されている実施形態等の本発明におけるデータを処理するアルゴリズムを実行するための論理を含む実行ユニットを利用するコンポーネント（たとえばプロセッサ１０２）を含む。システム１００は、カリフォルニア州のサンタクララのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎから入手可能なＰＥＮＴＩＵＭ（登録商標）ＩＩＩ，ＰＥＮＴＩＵＭ（登録商標）４、Ｘｅｏｎ（登録商標）、Ｉｔａｎｉｕｍ（登録商標）、ＸＳｃａｌｅ（登録商標）、及び／またはＳｔｒｏｎｇ  ＡＲＭ（登録商標）マイクロプロセッサに基づくプロセッサシステムを表しているが、他のシステム（他のマイクロプロセッサ、エンジニアリングワークステーション、セットトップボックス等を含む）を利用することもできる。一実施形態では、サンプルのシステム１００は、ワシントン州のＲｅｄｍｏｎｄのＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎから入手可能なＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムのあるバージョンを実行してよいが、他のオペレーティングシステム（ＵＮＩＸ（登録商標）及びＬｉｎｕｘ（登録商標））、エンベデッドソフトウェア、及び／または、グラフィックユーザインタフェースを利用してもよい。したがって本発明の実施形態は、ハードウェア回路及びソフトウェアの特定の組み合わせに限定はされない。
【００２５】
実施形態はコンピュータシステムに限定はされない。本発明の別の実施形態は、ハンドヘルドデバイス及びエンベデッドアプリケーション等の他のデバイスで利用することができる。ハンドヘルドデバイスの一部の例には、携帯電話器、インターネットプロトコルデバイス、デジタルカメラ、情報携帯端末（ＰＤＡ）、及びハンドヘルドＰＣが含まれる。エンベデッドアプリケーションは、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、システムオンチップ、ネットワークコンピュータ（ＮｅｔＰＣ）、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク（ＷＡＮ）スイッチ、または少なくとも１つの実施形態の１以上の命令を実行することができる１以上の他のシステムを含んでよい。
【００２６】
図１Ａは、本発明の一実施形態における少なくとも１つの命令を実行するアルゴリズムを実行する１以上の実行ユニット１０８を含むプロセッサ１０２で構成されたコンピュータシステム１００のブロック図である。一実施形態は、シングルプロセッサデスクトップまたはサーバシステムのコンテキストで記載されてよいが、別の実施形態は、マルチプロセッサシステムに含めることもできる。システム１００は、「ハブ」システムアーキテクチャの一例である。コンピュータシステム１００は、データ信号を処理するプロセッサ１０２を含む。プロセッサ１０２は、ＣＩＳＣ（複合命令セットコンピュータ：complex instruction set computer）マイクロプロセッサ、ＲＩＳＣ（低減命令セット計算：reduced instruction set computing）マイクロプロセッサ、ＶＬＩＷ（超長命令語：Very Long Instruction Word）マイクロプロセッサ、命令セットの組み合わせを実装するプロセッサ、または任意の他のプロセッサデバイス（たとえばデジタル信号プロセッサなど）を含む。プロセッサ１０２は、プロセッサ１０２とシステム１００の他のコンポーネントとの間でデータ信号を伝達することができるプロセッサバス１１０に連結されている。システム１００の各エレメントは、当業者であればよくわかっている銘々の従来の機能を果たす。
【００２７】
一実施形態では、プロセッサ１０２は、レベル１（Ｌ１）内部キャッシュメモリ１０４を含む。アーキテクチャによって、プロセッサ１０２は、１つの内部キャッシュまたは複数レベルの内部キャッシュを有してよい。または、別の実施形態では、キャッシュメモリがプロセッサ１０２の外部に存在していてもよい。他の実施形態としてさらに、特定の実装及び需要に応じて、内部キャッシュ及び外部キャッシュ両方の組み合わせを含んでもよい。レジスタファイル１０６は、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、及び命令ポインタレジスタを含む様々なレジスタに様々なタイプのデータを格納することができる。
【００２８】
整数及び浮動小数点演算を実行する論理を含む実行ユニット１０８も、プロセッサ１０２に存在している。プロセッサ１０２はさらに、一定のマクロ命令のためのマイクロコードを格納するマイクロコード（μコード）ＲＯＭを含んでいる。一実施形態では、実行ユニット１０８は、パッキング命令セット１０９を処理する論理を含む。パッキングされた命令セット１０９を、命令を実行する関連回路とともに、汎用プロセッサ１０２の命令セット内に含むことで、多くのマルチメディアアプリケーションが利用するオペレーションを、汎用プロセッサ１０２にパッキングされているデータを利用して実行することができる。したがって、パッキングされたデータのオペレーションを実行するためにプロセッサデータバスの全幅を利用することで、多くのマルチメディアアプリケーションを加速化してより効率的に実行することができる。これにより、１つのデータエレメントについて一度に１以上のオペレーションを実行するために、プロセッサのデータバスで、いくつも小さな単位のデータを送信する必要性がなくなる。
【００２９】
実行ユニット１０８の別の実施形態はマイクロコントローラ、エンベデッドプロセッサ、グラフィックデバイス、ＤＳＰ、その他のタイプの論理回路でも利用することができる。システム１００は、メモリ１２０を含む。メモリ１２０は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）デバイス、スタティックランダムアクセスメモリ（ＳＲＡＭ）デバイス、フラッシュメモリデバイス、その他のメモリデバイスであってよい。メモリ１２０は、プロセッサ１０２によって実行可能なデータ信号により表される命令及び／またはデータを格納してよい。
【００３０】
システム論理チップ１１６は、プロセッサバス１１０及びメモリ１２０に連結されている。図示されている実施形態ではシステム論理チップ１１６はメモリコントローラハブ（ＭＣＨ）である。プロセッサ１０２は、プロセッサバス１１０を介してＭＣＨ１１６と通信することができる。ＭＣＨ１１６は、命令及びデータの格納、及び、グラフィックコマンド、データ、テクスチャの格納のために、メモリ１２０に広帯域メモリ経路１１８を提供する。ＭＣＨ１１６は、データ信号をプロセッサ１０２、メモリ１２０、及びシステム１００の他のコンポーネントの間に方向づけ、データ信号をプロセッサバス１１０、メモリ１２０、及びシステムＩ／Ｏ１２２の間でブリッジする。一部の実施形態では、システム論理チップ１１６は、グラフィックコントローラ１１２に連結するためのグラフィックポートを提供することができる。ＭＣＨ１１６は、メモリインタフェース１１８を介してメモリ１２０に連結されている。グラフィックカード１１２は、アクセラレーテッドグラフィックポート（ＡＧＰ）インターコネクト１１４経由でＭＣＨ１１６に連結されている。
【００３１】
システム１００は、ＭＣＨ１１６をＩ／Ｏコントローラハブ（ＩＣＨ）１３０に連結するために、所有権をもつハブインタフェースバス１２２を利用する。ＩＣＨ１３０は、ローカルＩ／Ｏバスを介して一部のＩ／Ｏデバイスに直接接続を提供する。ローカルＩ／Ｏバスは、周辺機器をメモリ１２０、チップセット、及びプロセッサ１０２に接続するための高速Ｉ／Ｏバスである。いくつかの例に、オーディオコントローラ、ファームウェアハブ（フラッシュＢＩＯＳ）１２８、無線トランシーバ１２６、データストレージ１２４、ユーザ入力及びキーボードインタフェースを含むレガシーＩ／Ｏコントローラ、ユニバーサルシリアルバス（ＵＳＢ）等のシリアル拡張ポート、及びネットワークコントローラ１３４が含まれる。データ格納デバイス１２４は、ハードディスクドライブ、フロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭデバイス、フラッシュメモリデバイス、その他の大容量記憶デバイスを含んでよい。  システムの他の実施形態としては、一実施形態の命令をシステムオンチップ（a system on a chip）で利用することができる。システムオンチップの一実施形態は、プロセッサとメモリとを含む。あるシステムのメモリはフラッシュメモリである。フラッシュメモリは、プロセッサ及びその他のシステムコンポーネントと同じダイに位置させることができる。加えて、メモリコントローラまたはグラフィックコントローラ等の他の論理ブロックもシステムオンチップに配置してよい。
【００３２】
図１Ｂは、本発明の一実施形態の原理を実装するデータ処理システム１４０を示す。当業者であれば、ここに記載される実施形態を、本発明の実施形態の範囲を逸脱せずに別の処理システムで利用することも可能であることを理解するだろう。
【００３３】
コンピュータシステム１４０は、一実施形態における少なくとも１つの命令を実行することのできる処理コア１５９を含む。一実施形態では、処理コア１５９は、任意のタイプのアーキテクチャ（ＣＩＳＣ，ＲＩＳＣ，またはＶＬＩＷタイプのアーキテクチャが含まれるがこれらに限定はされない）の処理ユニットを表していてよい。処理コア１５９は、さらに、１以上の処理技術での製造に適したものであってよく、十分な詳細を機械可読媒体に提示することで、その製造に適したものであってよい。
【００３４】
処理コア１５９は、実行ユニット１４２、レジスタファイルセット１４５、及び、デコーダ１４４を含む。処理コア１５９はさらに、本発明の実施形態を理解するためには必要のないさらなる回路(不図示)を含む。実行ユニット１４２は、処理コア１５９が受信する命令を実行するために利用される。通常のプロセッサ命令の実行に加えて、実行ユニット１４２は、パッキングされたデータフォーマットにオペレーションを実行するために、パッキングされた命令セット１４３の命令を実行することができる。パッキングされた命令セット１４３は、本発明の実施形態及び他のパッキングされた命令を実行するための命令を含む。実行ユニット１４２は、内部バスによってレジスタファイル１４５に連結されている。レジスタファイル１４５は、情報（データを含む）を格納するための処理コア１５９上の格納領域を表す。前に述べたように、パッキングされたデータを格納するために利用される格納領域は重要ではない。実行ユニット１４２は、レジスタファイル１４４に連結されている。デコーダ１４４は、プロセッサコア１５９が受信する命令を、制御信号及び／またはマイクロコードエントリポイントにデコードするために利用される。これら制御信号及び／またはマイクロコードエントリポイントに呼応して、実行ユニット１４２は、適切なオペレーションを実行する。一実施形態では、デコーダは、命令のオペコードを解釈するために利用され、これは、どのオペレーションを、命令内に示されている対応するデータに行うべきかを示す。
【００３５】
処理コア１５９は、様々な他のシステムデバイスと通信するためにバス１４１に連結されており、様々な他のシステムデバイスには、これらに限定はされないが、シンクロノス・ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）制御１４６、ＳＲＡＭ制御１４７、バーストフラッシュメモリインタフェース１４８、ＰＣＭＣＩＡ（personal computer memory card international association）／コンパクトフラッシュ（登録商標）（ＣＦ）カード制御１４９、液晶ディスプレイ（ＬＣＤ）制御１５０、直接メモリアクセス（ＤＭＡ）コントローラ１５１、及び、別のバスマスターインタフェース１５２が含まれてよい。一実施形態では、データ処理システム１４０は、さらに、様々なＩ／ＯデバイスとＩ／Ｏバス１５３経由で通信するためのＩ／Ｏブリッジ１５４を含んでよい。これらＩ／Ｏデバイスには、これらに限定はされないが、ＵＡＲＴ（汎用非同期送受信回路：universal asynchronous receiver/transmitter）１５５、ＵＳＢ１５６、Ｂｌｕｅｔｏｏｔｈ（登録商標）無線ＵＡＲＴ１５７及びＩ／Ｏ拡張インタフェース１５８を含んでよい。
【００３６】
データ処理システム１４０の一実施形態は、モバイル、ネットワーク及び／または無線型の通信を提供し、プロセッサコア１５９は、テキストストリング比較演算を含むＳＩＭＤ演算を実行することができる。処理コア１５９は、様々なオーディオ、ビデオ、撮像及び通信アルゴリズム（Ｗａｌｓｈ―Ｈａｄａｍａｒｄ変換、高速フーリエ変換（ＦＦＴ）、離散コサイン変換（ＤＣＴ）を含む離散変換、及びこれらそれぞれの逆変換、色空間変換、ビデオエンコードにおける動き推定（video encode motion estimation）またはビデオデコードにおける動き補償（video decode motion compensation）等の圧縮／伸張技術、及びパルス符号変調（ＰＣＭ）等の変調／復調（ＭＯＤＥＭ）機能を含む）でプログラミングされてよい。
【００３７】
図１Ｃは、ベクトル圧縮及びローテート機能を提供する命令を実行することのできるデータ処理システムの別の一実施形態を示す。１つの別の実施形態では、データ処理システム１６０は、メインプロセッサ１６６、ＳＩＭＤコプロセッサ１６１、キャッシュメモリ１６７、及び入出力システム１６８を含んでよい。入出力システム１６８は、無線インタフェース１６９に連結されていてもよい。ＳＩＭＤコプロセッサ１６１は、一実施形態における命令を含むオペレーションを実行することができる。処理コア１７０は、１以上の処理技術での製造に適したものであってよく、十分な詳細を機械可読媒体に提示することで、プロセッサコア１７０を含むデータ処理システム１６０の全てまたは一部を製造するために適したものであってよい。
【００３８】
一実施形態では、ＳＩＭＤコプロセッサ１６１は、実行ユニット１６２とレジスタファイルセット１６４とを含む。メインプロセッサ１６６の一実施形態は、実行ユニット１６２が実行する一実施形態における命令を含む命令セット１６３の命令を認識するデコーダ１６５を含む。別の実施形態では、ＳＩＭＤコプロセッサ１６１は、さらに、命令セット１６３の命令をデコードするデコーダ１６５Ｂの少なくとも一部を含んでいる。処理コア１７０は、さらに、本発明の実施形態の理解には不要なさらなる回路（不図示）を含んでいる。
【００３９】
動作において、メインプロセッサ１６６は、キャッシュメモリ１６７及び入出力システム１６８との交信を含む一般的なタイプのデータ処理オペレーションを制御するデータ処理命令ストリームを実行する。データ処理命令ストリームには、ＳＩＭＤコプロセッサ命令が埋め込まれている。メインプロセッサ１６６のデコーダ１６５は、これらＳＩＭＤコプロセッサ命令を、取り付けられているＳＩＭＤコプロセッサ１６１が実行すべきタイプであると認識する。したがい、メインプロセッサ１６６は、これらＳＩＭＤコプロセッサ命令（または、ＳＩＭＤコプロセッサ命令を表す制御信号）をコプロセッサバス１７１に発行して、ここから、任意の取り付けられているＳＩＭＤコプロセッサによって受信される。このケースでは、ＳＩＭＤコプロセッサ１６１は、自身を宛先として受信されたＳＩＭＤコプロセッサ命令を受け付けて実行する。
【００４０】
データは、ＳＩＭＤコプロセッサ命令による処理を受けるために無線インタフェース１６９経由で受信される。一例では、音声通信が、デジタル信号の形態で受信されてよく、これは、ＳＩＭＤコプロセッサ命令による処理を受けて、音声通信を表すデジタルオーディオサンプルを再生する(regenerate)。別の例としては、圧縮されたオーディオ及び／またはビデオがデジタルビットストリームの形態で受信されてよく、これは、ＳＩＭＤコプロセッサ命令の処理を受けることで、デジタルオーディオサンプル及び／または動きビデオフレームを再生することができる。処理コア１７０の一実施形態では、メインプロセッサ１６６及びＳＩＭＤコプロセッサ１６１が、実行ユニット１６２、レジスタファイルセット１６４、及びデコーダ１６５を含む１つの処理コア１７０に統合されて、一実施形態における命令を含む命令セット１６３の命令を認識する。
【００４１】
図２は、本発明の一実施形態における命令を実行する論理回路を含むプロセッサ２００のマイクロアーキテクチャのブロック図である。一部の実施形態では、一実施形態における命令が、バイト、ワード、ダブルワード、クワッドワード等のサイズを有するデータエレンメントで動作するよう実装可能である。一実施形態では、インオーダフロントエンド２０１が、実行される命令をフェッチして、これらが後で、プロセッサパイプラインで利用されるように準備するプロセッサ２００の一部である。フロントエンド２０１は、いくつかのユニットを含んでよい。一実施形態では、命令プリフェッチャ２２６が、メモリから命令をフェッチして、命令デコーダ２２８に供給して、デコーダ２２８が、これらをデコードして解釈する。たとえば一実施形態では、デコーダは、受信した命令を、機械が実行可能な「マイクロ命令」または「マイクロオペレーション」と称される１以上のオペレーションにデコードする。他の実施形態では、デコーダは、命令を、マイクロアーキテクチャが利用するオペコード及び対応するデータ及び制御フィールドにパースして、一実施形態のオペレーションを実行する。一実施形態では、トレースキャッシュ２３０が、デコードされたμｏｐをとり、μｏｐキュー２３４に、プログラムが順序付けたシーケンスまたはトレースにアセンブルして、実行に備えさせる。トレースキャッシュ２３０が複合命令に遭遇すると、マイクロコードＲＯＭ２３２は、オペレーションを完了させるために必要なμｏｐを提供する。
【００４２】
一部の命令は１つのマイクロオペレーション（micro-op）に変換され、他の命令は、オペレーション全体を完了させるためにマイクロオペレーションをいくつか必要とする。一実施形態では、４を超える数のマイクロオペレーションが１つの命令を完了させるために必要な場合には、デコーダ２２８は、マイクロコードＲＯＭ２３２にアクセスして、命令を行う。一実施形態では、命令は、命令デコーダ２２８で処理されるための少数のマイクロオペレーションにデコードすることができる。別の実施形態では、あるオペレーションを達成するために複数のマイクロオペレーションが必要となる場合には、マイクロコードＲＯＭ２３２内に命令を格納する必要がある。トレースキャッシュ２３０は、マイクロコードＲＯＭ２３２から、一実施形態における１以上の命令を完了させるためにマイクロコードシーケンスを読み出すための正確なマイクロ命令ポインタを決定するエントリポイントのプログラマブル論理アレイ（ＰＬＡ）のことである。マイクロコードＲＯＭ２３２が、１つの命令のマイクロオペレーションの順序づけ（sequencing）を完了すると、機械のフロントエンド２０１は、トレースキャッシュ２３０からマイクロオペレーションのフェッチを再開する。
【００４３】
アウトオブオーダ実行エンジン２０３は、命令が実行のために準備されるところである。アウトオブオーダ実行論理は、パイプラインを流れ、実行のためにスケジューリングされる間に、性能を最適化するために命令フローを平滑化してリオーダするための複数のバッファを有している。アロケータ論理は、各μｏｐが実行するために必要とする機械バッファとリソースとを割り当てる。レジスタリネーム論理は、論理レジスタを、レジスタファイルのエントリにリネームする。アロケータはさらに、命令スケジューラ、メモリスケジューラ、高速スケジューラ２０２、遅い／一般的な浮動小数点スケジューラ２０４、及び単純な浮動小数点スケジューラ２０６の前にある、２つのμｏｐキュー（１つがメモリオペレーション用、１つが非メモリオペレーション用）の１つに各μｏｐのエントリを割り当てる。μｏｐスケジューラ２０２、２０４、２０６は、μｏｐが実行準備完了するときを、依存している入力レジスタオペランドソースの準備ができているか、及びμｏｐが自身のオペレーションを完了させるために必要とする実行リソースが利用可能か、に基づいて判断する。一実施形態の高速スケジューラ２０２は、主要なクロックサイクルの各半分でスケジューリングすることができ、他のスケジューラは、主要なプロセッサクロックサイクル１つについて一度だけスケジューリングすることができる。スケジューラは、実行のためにμｏｐをスケジュールするために、ディスパッチポートの問題を解決する。
【００４４】
実行ブロック２１１で、レジスタファイル２０８、２１０は、スケジューラ２０２、２０４、２０６、及び、実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４の間にある。整数演算及び浮動小数点演算それぞれについて別個のレジスタファイル２０８、２１０が存在している。一実施形態の各レジスタファイル２０８、２１０は、新たな依存μｏｐへのレジスタファイルに書き込みがまだ行われていない、今完了したばかりの結果をバイパスしたり、転送したりするバイパスネットワークも含む。整数レジスタファイル２０８及び浮動小数点レジスタファイル２１０はさらに、互いにデータを通信することができる。一実施形態では、整数レジスタファイル２０８は、２つのレジスタファイルに分割され、１つのレジスタファイルがデータの下位３２ビット用であり、第２のレジスタファイルが、データの上位３２ビット用である。一実施形態の浮動小数点レジスタファイル２１０は、浮動小数点命令が通常６４から１２８ビット幅であるために、１２８ビット幅のエントリを有している。
【００４５】
実行ブロック２１１は、命令が実際に実行される実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４を含む。このセクションは、マイクロ命令が実行する必要のある整数及び浮動小数点データオペランド値を格納するレジスタファイル２０８、２１０を含む。一実施形態のプロセッサ２００は、複数の実行ユニットを含む（つまり、アドレス生成ユニット（ＡＧＵ）２１２、ＡＧＵ２１４、高速ＡＬＵ２１６、高速ＡＬＵ２１８、低速ＡＬＵ２２０、浮動小数点ＡＬＵ２２２、浮動小数点移動ユニット２２４）。一実施形態では、浮動小数点実行ブロック２２２、２２４が、浮動小数点ＭＭＸ、ＳＩＭＤ、及びＳＳＥ、またはその他のオペレーションを実行する。一実施形態の浮動小数点ＡＬＵ２２２は、除算、平方根、及び剰余のマイクロオペレーション（remainder micro-ops）を実行するための６４ビット×６４ビットの浮動小数点の除算器（divider）を含む。本発明の実施形態では、浮動小数点の値に関する命令は、浮動小数点ハードウェアで処理されてよい。一実施形態では、ＡＬＵ演算は、高速ＡＬＵ実行ユニット２１６、２１８に進む。一実施形態の高速ＡＬＵ２１６、２１８は、１クロックサイクルの半分の有効レイテンシーで高速演算を実施することができる。一実施形態では、最も複雑な整数演算は低速ＡＬＵ２２０で処理されるが、これは低速ＡＬＵ２２０が、乗算器、シフト、フラグ論理、及び分岐処理といったレイテンシーの長いタイプの演算のための整数実行ハードウェアを含んでいるからである。メモリロード／ストア演算は、ＡＧＵ２１２、２１４が実行する。一実施形態では、整数ＡＬＵ２１６、２１８、２２０は、６４ビットのデータオペランドに整数演算を実行するコンテキストで説明される。別の実施形態では、ＡＬＵ２１６、２１８、２２０は、１６、３２、１２８、２５６等を含む様々なデータビットをサポートするように実装されてよい。同様に、浮動小数点ユニット２２２、２２４は、様々な幅のビットを有するオペランドの範囲をサポートするよう実装されてよい。一実施形態では、浮動小数点ユニット２２２、２２４は、ＳＩＭＤ及びマルチメディア命令との関連で、１２８ビット幅のパッキングされたデータオペランドに作用してよい。
【００４６】
一実施形態では、μｏｐスケジューラ２０２、２０４、２０６は、親のロードが実行完了する前に、依存する演算をディスパッチする。μｏｐはプロセッサ２００で投機的にスケジューリングされ実行されるので、プロセッサ２００は、メモリミスを処理する論理を含む。データロードがデータキャッシュでミスすると、一時的に不正確なデータでスケジューラを出た、依存しているオペレーションがパイプライン内にあることになる。リプレイメカニズムは、不正確なデータを利用する命令を追跡して実行する。依存しているオペレーションのみがリプレイされ、独立しているオペレーションは完了させられる。プロセッサの一実施形態のスケジューラ及びリプレイメカニズムは、さらに、ベクトル圧縮及びローテート機能を提供する命令をキャッチするように設計されている。
【００４７】
「レジスタ」という用語は、オペランドを指定する命令の一部として利用されるオンボードのプロセッサ格納位置のことを指してよい。言い換えると、レジスタは、プロセッサの外部から（プログラマの観点から）利用可能なもののことであってよい。しかし一実施形態のレジスタの意味は、特定のタイプの回路に限定されるべきではない。一実施形態のレジスタは、データを格納、提供して、ここに記載する機能を実行することができる。ここに記載するレジスタは、任意の数の異なる技術（たとえば、専用物理レジスタ、レジスタリネームを利用して動的に割り当てられた物理レジスタ、専用及び動的に割り当てられた物理レジスタの組み合わせ）を利用してプロセッサ内の回路によって実装することができる。一実施形態では、整数レジスタは、３２ビットの整数データを格納する。一実施形態のレジスタファイルは、８つのマルチメディアＳＩＭＤレジスタをパッキングされたデータ用に含んでいる。後述する説明においては、レジスタは、カリフォルニア州サンタクララのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ社製の、ＭＭＸ技術でイネーブルされたマイクロプロセッサの６４ビット幅のＭＭＸ（登録商標）レジスタ（一部の例では「ｍｍ」レジスタと称されることもある）等のパッキングされたデータを保持するよう設計されているデータレジスタとして理解される。これらＭＭＸレジスタは、整数及び浮動小数点形態両方で利用可能であり、ＳＩＭＤ及びＳＳＥ命令を伴うパッキングされたデータエレメントを利用して動作するこことができる。同様に、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４、またはこれを超える（一般的に「ＳＳＥｘ」と称される）技術に関する１２８ビット幅のＸＭＭレジスタも、これらパッキングされたデータオペランドを保持するために利用することができる。一実施形態では、パッキングされたデータ及び整数データを格納するときに、レジスタは、２つのデータのタイプを区別する必要がない。一実施形態では、整数及び浮動小数点が、同じレジスタファイルまたは別のレジスタファイルに含まれる。さらに一実施形態では、浮動小数点及び整数データが、異なるレジスタに格納されても同じレジスタに格納されてもよい。
【００４８】
以下の図面の例では、複数のデータオペランドを説明する。図３Ａは、本発明の一実施形態におけるマルチメディアレジスタの様々なパッキングされているデータタイプの表現を示す。図３Ａは、１２８ビット幅のオペランドについて、パッキングされたバイト３１０、パッキングされたワード３２０、及びパッキングされたダブルワード（ｄｗｏｒｄ）３３０のデータタイプを示す。この例のパッキングされたバイトフォーマット３１０は、１２８ビット長であり、１６個のパッキングされたバイトデータエレメントを含む。１バイトは、ここでは８ビットのデータと定義される。各バイトデータエレメントの情報を、バイト０についてビット７からビット０に格納して、バイト１についてビット１５からビット８に格納して、バイト２についてビット２３からビット１６に格納して、終に、バイト１５についてビット１２０からビット１２７に格納する。したがい、全ての利用可能なビットがレジスタで利用される。この格納配置は、プロセッサの格納効率を向上させる。また、１６個のデータエレメントにアクセスする場合、１つのオペレーションを１６個のデータエレメントに並列実行することができる。
【００４９】
一般的には、データエレメントは、同じ長さの他のデータエレメントとともに、１つのレジスタまたはメモリ位置に格納された個々のデータである。ＳＳＥｘ技術に関するパッキングされたデータシーケンスでは、ＸＭＭレジスタに格納されているデータエレメント数は、１２８ビットを、個々のデータエレメントのビット長で除算して得られる。同様に、ＭＭＸ及びＳＳＥ技術に関するパッキングされたデータシーケンスでは、ＭＭＸレジスタに格納されているデータエレメント数は、６４ビットを、個々のデータエレメントのビット長で除算して得られる。図３Ａに示すデータタイプは１２８ビット長であるが、本発明の実施形態は、６４ビット幅でも、１２８ビット幅でも、５１２ビット幅でも、その他のサイズのオペランドであっても動作可能である。この例のパッキングされたワードフォーマット３２０は、１２８ビット長であり、８つのパッキングされたワードデータエレメントを含んでいる。各パッキングされたワードは、１６ビットの情報を含んでいる。図３Ａのパッキングされたダブルワードフォーマット３３０は、１２８ビット長であり、４つのパッキングされたダブルワードのデータエレメントを含んでいる。各パッキングされたダブルワードは、３２ビットの情報を含んでいる。パッキングされたクワッドワードは１２８ビット長であり、２つのパッキングされたクワッドワードデータエレメントを含んでいる。
【００５０】
図３Ｂは、別のレジスタ内の（in-register）データ格納フォーマットを示している。各パッキングされたデータは、１を超える数の独立したデータエレメントを含むことができる。３つのパッキングされたデータフォーマットが図示されている（つまりパッキングされたハーフ３４１、パッキングされたシングル３４２、及びパッキングされたダブル３４３）。パッキングされたハーフ３４１、パッキングされたシングル３４２、及びパッキングされたダブル３４３の一実施形態は、固定小数点（fixed-point）のデータエレメントを含んでいる。別の実施形態では、パッキングされたハーフ３４１、パッキングされたシングル３４２、及びパッキングされたダブル３４３の１以上が、浮動小数点のデータエレメントを含んでいてよい。パッキングされたハーフ３４１の別の実施形態は、１２８ビット長であり、８つの１６ビットのデータエレメントを含む。パッキングされたシングル３４２の一実施形態は、１２８ビット長であり、４つの３２ビットのデータエレメントを含む。パッキングされたダブル３４３の一実施形態は、１２８ビット長であり、２つの６４ビットのデータエレメントを含む。パッキングされたデータフォーマットは、さらに、他のレジスタ長に拡張することもできる点を理解されたい（たとえば、９６ビット、１６０ビット、１９２ビット、２２４ビット、２５６ビット、５１２ビットまたはそれ以上）。
【００５１】
図３Ｃは、本発明の一実施形態のマルチメディアレジスタの様々な符号付き及び符号なしのパッキングされたデータタイプの表現を示す。符号なしのパッキングされたバイト表現３４４は、ＳＩＭＤレジスタの符号なしのパッキングされたバイトの格納例を示す。各バイトデータエレメントの情報が、バイト０のビット７からビット０、バイト１のビット１５からビット８、バイト２のビット２３からビット１６、そして最後に、バイト１５の１２０ビットから１２７ビットに格納されている。したがってすべての利用可能なビットがレジスタで利用されている。この格納配置は、プロセッサの格納効率を高めることができる。また、１６個のデータエレメントにアクセスすることを考えたとき、１つのオペレーションを、１６個のデータエレメントに並列に実行することができる。符号付きのパッキングされているバイト表現３４５は、符号付きのパッキングされたバイトの格納を示している。各バイトデータエレメントの８つめのビットが符号インジケータである。符号なしのパッキングされているワードの表現３４６は、ワード７からワード０がＳＩＭＤレジスタにどのように格納されるかを示している。符号付きのパッキングされているワードの表現３４７は、符号なしのパッキングされているワードのレジスタ内表現３４６に類似している。各ワードデータエレメントの１６個目のビットは符号インジケータである。符号なしのパッキングされているダブルワード表現３４８は、ダブルワードデータエレメントをどのように格納するかを示している。符号付きのパッキングされたダブルワード表現３４９は、符号なしのパッキングされているダブルワードのレジスタ内の表現３４８に類似している。必要な符号ビットは、各ダブルワードデータエレメントの３２ビットである。
【００５２】
図３Ｄは、３２以上のビットを持ち、ワールドワイドウェブｗｗｗのintel.com/products/processor/manuals/から入手可能な、カリフォルニア州サンタクララのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ社から利用可能な、"Intel(R)64 and IA-32 Intel Architecture Software Developer's Manual Combined Volumes 2A and 2B: Instruction Set Reference A-Z"に記載されているタイプのオペコードフォーマットに対応するレジスタ／メモリオペランドアドレスモードを持つ、オペレーションエンコード（オペコード）フォーマット３６０の一実施形態を示す。一実施形態では、命令が１以上のフィールド３６１及び３６２でエンコードされてよい。１つの命令について２までのオペランド位置を指定することができる（最大で２つのソースオペランド識別子３６４及び３６５を含む）。一実施形態では、デスティネーションオペランド識別子３６６が、ソースオペランド識別子３６４と等しく、他の実施形態ではこれらが異なっている。別の実施形態では、デスティネーションオペランド識別子３６６が、ソースオペランド識別子３６５と等しく、他の実施形態ではこれらが異なっている。一実施形態では、ソースオペランド識別子３６４及び３６５が指定するソースオペランドの１つが、命令の結果、上書きされ、他の実施形態では、識別子３６４が、ソースレジスタエレメントに対応しており、識別子３６５が、デスティネーションレジスタエレメントに対応している。一実施形態では、オペランド識別子３６４及び３６５が、３２ビットまたは６４ビットのソース及びデスティネーションオペランドを特定するために利用されてよい。
【００５３】
図３Ｅは、４０以上のビットを有する別のオペレーションエンコード(オペコード)フォーマットを示す。オペコードフォーマット３７０は、オペコードフォーマット３６０に対応しており、随意でプレフィックスバイト３７８を含んでいる。一実施形態の命令は、フィールド３７８、３７１、及び３７２の１以上によってエンコードされてよい。一実施形態では、ソースオペランド識別子３７４、３７５、及び、プレフィックスバイト３７８により、１つの命令につき最大２つまでのオペランド位置が特定されてよい。一実施形態では、プレフィックスバイト３７８が、３２ビットまたは６４ビットのソース及びデスティネーションオペランドを特定するために利用されてよい。一実施形態では、デスティネーションオペランド識別子３７６が、ソースオペランド識別子３７４と同じであり、他の実施形態では、これらが異なっている。別の実施形態では、デスティネーションオペランド識別子３７６が、ソースオペランド識別子３７５と同じであり、他の実施形態では、これらが異なっている。一実施形態では、命令は、オペランド識別子３７４及び３７５が特定するオペランドの１以上に作用して、オペランド識別子３７４及び３７５が特定する１以上のオペランドが、命令の結果、上書きされて、他の実施形態では、識別子３７４及び３７５が特定するオペランドが、別のレジスタの別のデータエレメントに書きこまれる。オペコードフォーマット３６０及び３７０は、レジスタからレジスタへ、メモリからレジスタへ、メモリによってレジスタへ、レジスタによってレジスタへ、即値によってレジスタへ、レジスタからメモリへのアドレス指定を、一部にＭＯＤフィールド３６３及び３７３によって指定して、随意でスケール−インデックス−ベース及び変位バイト（scale-index-base and displacement bytes）で指定する。
【００５４】
図３Ｆを見ると、一部の他の実施形態では、６４ビット（または１２８ビット、または２５６ビット、または、５１２ビット以上）のＳＩＭＤ算術演算をコプロセッサデータ処理（ＣＤＰ）命令により実行されてよい。オペレーションエンコード（オペコード）フォーマット３８０は、ＣＤＰオペコードフィールド３８２及び３８９を有する１つのＣＤＰ命令を示している。別の実施形態において、このタイプのＣＤＰ命令では、オペレーションが１以上のフィールド３８３、３８４、３８７、及び３８８でエンコードされてよい。１つの命令について３つまでのオペランド位置を特定することができる（２つまでのソースオペランド識別子３８５及び３９０及び１つのデスティネーションオペランド識別子３８６を含む）。コプロセッサの一実施形態は、８、１６、３２、及び６４ビットの値に動作することができる。一実施形態では、命令を整数データエレメントに実行する。一部の実施形態では、命令が、条件フィールド３８１を利用して、条件付きで実行されてよい。一部の実施形態では、ソースデータサイズを、フィールド３８３によってエンコードしてよい。一部の実施形態では、ＳＩＭＤフィールドに、ゼロ（Ｚ）、負（Ｎ）、繰り上げ（Ｃ）、及び、オーバフロー（Ｖ）の検出を行ってよい。一部の命令について、この種類の飽和をフィールド３８４によってエンコードしてよい。
【００５５】
次に図３Ｇを参照すると、図３Ｇは、ワールドワイドウェブｗｗｗのintel.com/products/processor/manuals/から入手可能な、カリフォルニア州サンタクララのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ社から利用可能な、"Intel(R) Advanced Vector Extensions Programming Reference"に記載されているタイプのオペコードフォーマットに対応する、別の実施形態のベクトル圧縮及びローテート機能を提供する別のオペレーションエンコード（オペコード）フォーマット３９７を示している。
【００５６】
元のｘ８６命令セットは、存在が第１の「オペコード」バイトから分かっている、さらなるバイトに含まれているアドレスシラブル及び即値オペランドの様々なフォーマットをもつ１バイトのオペコードのために提供されたものである。加えて、オペコードに対する修飾子としてリザーブされていた一定のバイト値が存在している（命令の前に配置される必要があったことから、プレフィックスと称される）。２５６オペコードバイトの元のパレット（これら特別なプレフィックス値を含む）が枯渇すると、１バイトが新たなセットの２５６オペコードへのエスケープ（escape）として専用となった。ベクトル命令（たとえばＳＩＭＤ）が追加されると、より多くのオペコードに対する要求ができて、プレフィックスを利用して拡張しても、「２つのバイト」のオペコードマップも不十分となった。この目的のために、２バイトに、随意でプレフィックスを識別子として追加した追加マップに、新たな命令を追加した。
【００５７】
加えて、６４ビットモードのさらなるレジスタを促進するために、プレフィックスとオペコードとの間に（及び、オペコードを決定するために必要な任意のエスケープバイトとの間に）さらなるプレフィックスを利用することができる（「ＲＥＸ」と称する）。一実施形態では、ＲＥＸは４つの「ペイロード」ビットを有し、６４ビットモードのさらなるレジスタの利用を示す。他の実施形態では、４ビットより少ないまたは多い数であってよい。少なくとも１つの命令セットの一般的なフォーマット（これはフォーマット３６０及び／またはフォーマット３７０に概して対応している）が、以下のように大まかに示されている。
【００５８】
[prefixes] [rex] escape [escape2] opcode modrm (etc.)
【００５９】
オペコードフォーマット３９７は、オペコードフォーマット３７０に対応しており、随意でＶＥＸプレフィックスバイト３９１を含み（これは一実施形態ではＣ４ｈｅｘから始まる）、他の殆どの共通利用されているレガシー命令プレフィックスバイト及びエスケープコードを置き換える。たとえば以下の例では、１つの命令をエンコードするために２つのフィールドを利用する一実施形態が示されており、第２のエスケープコードが元の命令に存在している場合、または、ＲＥＸフィールドの剰余ビット（たとえばＸＢ及びＷフィールド）を利用する必要がある場合に利用可能である。後述する実施形態では、レガシーエスケープは、新たなエスケープ値で表され、レガシープレフィックスは、「ペイロード」バイトの一部として完全に圧縮され、レガシープレフィックスは、将来拡張する必要が出たときには取戻し（reclaimed）、利用することができ、第２のエスケープコードは「マップ」フィールドで圧縮され、将来のマッピングまたはフィーチャのスペースが利用可能となった場合、新たなフィーチャを追加する（たとえば、ベクトル長を増加して、さらなるソースレジスタ指定子を利用する）。
【数１】
2014089699.tif 000003
【００６０】
一実施形態の一命令は、１以上のフィールド３９１及び３９２でエンコードされてよい。１つの命令について４つまでのオペランド位置を、ソースオペランド識別子３７４及び３７５の組み合わせ、及び、随意でスケール−インデックス−ベース（ＳＩＢ：scale-index-base）識別子３９３、随意の変位識別子３９４、及び随意の即値バイト３９５の組み合わせで、フィールド３９１によって特定してよい。一実施形態では、ＶＥＸプレフィックスバイト３９１を利用して、３２ビットまたは６４ビットのソース及びデスティネーションオペランド及び／または１２８ビットまたは２５６ビットのＳＩＭＤレジスタまたはメモリオペランドを特定することができる。一実施形態では、オペコードフォーマット３９７が提供する機能が、オペコードフォーマット３７０と重複しており、他の実施形態では、これらが異なっている。オペコードフォーマット３７０及び３９７は、レジスタからレジスタへ、メモリからレジスタへ、メモリによってレジスタへ、レジスタによってレジスタへ、即値によってレジスタへ、レジスタからメモリへのアドレス指定が、一部にＭＯＤフィールド３７３及び随意で（ＳＩＢ）識別子３９３、随意で変位識別子３９４、及び随意で即値バイト３９５により指定される。
【００６１】
次に、図３Ｈを参照すると、別の実施形態のベクトル圧縮及びローテート機能を提供するための、別のオペレーションエンコード（オペコード）フォーマット３９８を示す。オペコードフォーマット３９８は、オペコードフォーマット３７０及び３９７に対応し、随意でＥＶＥＸプリフィックスバイト３９６を含み（一実施形態では６２ｈｅｘから始まる）、殆どの他の共通に利用されているレガシー命令プレフィックスバイト及びエスケープコードを置き換え、さらなる機能を提供する。一実施形態の命令は、１以上のフィールド３９６及び３９２によりエンコードされてよい。命令１つについて４までのオペランド位置とマスクとを、フィールド３９６で、ソースオペランド識別子３７４及び３７５の組み合わせ並びに随意でスケール−インデックス−ベース（ＳＩＢ：scale-index-base）識別子３９３の組み合わせ、随意の変位識別子３９４及び随意の即値バイト３９５で、特定してよい。一実施形態では、ＥＶＥＸプリフィックスバイト３９６を利用して、３２ビットまたは６４ビットのソース及びデスティネーションオペランド、及び／または、１２８ビット、２５６ビット、または５１２ビットのＳＩＭＤレジスタまたはメモリオペランドを特定してよい。一実施形態では、オペコードフォーマット３９８が提供する機能は、オペコードフォーマット３７０または３９７と重複しており、他の実施形態ではこれらが異なっている。オペコードフォーマット３９８は、マスクで、レジスタからレジスタへ、メモリからレジスタへ、メモリによってレジスタへ、レジスタによってレジスタへ、即値によってレジスタへ、レジスタからメモリへのアドレス指定が、一部にＭＯＤフィールド３７３及び随意で（ＳＩＢ）識別子３９３、随意で変位識別子３９４、及び随意で即値バイト３９５により指定される。少なくとも１つの命令セット（一般的にはフォーマット３６０及び／または３７０に対応している）の汎用フォーマットは、以下で概略する。
【００６２】
＜evex1 RXBmmmmm WvvvLpp evex4 opcode modrm [sib] [disp] [imm]＞
一実施形態では、ＥＶＥＸフォーマット３９８によりエンコードされた命令は、追加の「ペイロード」ビットを有してよいが、この追加の「ペイロード」は、ベクトル圧縮及びローテート機能に、たとえばユーザ設定可能なマスクレジスタ、追加のオペランド、または、１２８ビット、２５６ビット、または５１２ビットのベクトルレジスタまたはこれ以上のレジスタを選択肢、などの追加の新たな特徴を提供するために利用することができる。
【００６３】
たとえば、ＶＥＸフォーマット３９７が、ベクトル圧縮及びローテート機能に黙示的なマスクを提供するために利用されてよい場合、ＥＶＥＸフォーマット３９８は、ベクトル圧縮及びローテート機能に、明示的なユーザ設定可能マスクを与えるために利用されてよい。加えて、ＶＥＸフォーマット３９７が、ベクトル圧縮およびローテート機能を１２８ビットまたは２５６ビットのベクトルレジスタに提供するために利用されてよい場合、ＥＶＥＸフォーマット３９８は、ベクトル圧縮及びローテート機能を１２８ビット、２５６ビット、５１２ビットまたはこれより大きな（または小さな）ベクトルレジスタに提供するために利用されてよい。
【００６４】
ベクトル圧縮及びローテート機能を提供するための命令の例を、以下に例示する。
【表１】
2014089699.tif 000004
【００６５】
ＳＩＭＤ圧縮及びローテート命令は、上述した例にある通り、ベクトル圧縮機能を、さもなくば簡単にベクトル化できないアプリケーション（たとえば、ＳＰＥＣベンチマークスイートの４４４.ＮＡＭＤの内部ループのようなベンチマーク）に提供するために利用されることで、外部メモリへの高価な連続した格納数を低減させ、性能及び命令スループットを向上させ、使用電力を低減させることができる。
【００６６】
図４Ａは、本発明の少なくとも１つの実施形態における、インオーダパイプライン及びレジスタリネームステージ、アウトオブオーダ発行／実行論理を示すブロック図である。図４Ｂは、本発明の少なくとも１つの実施形態におけるプロセッサに含まれるべき、インオーダアーキテクチャコアおよびレジスタリネーム論理、アウトオブオーダ発行論理を示すブロック図である。図４Ａの実線のボックスは、インオーダパイプラインを示し、破線のボックスは、レジスタのリネーム、アウトオブオーダ発行／実行パイプラインを示す。同様に、図４Ｂの実線のボックスは、インオーダアーキテクチャ論理を示し、破線のボックスは、レジスタリネーム論理及びアウトオブオーダ発行／実行論理を示す。
【００６７】
図４Ａでは、プロセッサパイプライン４００が、フェッチステージ４０２、長さデコードステージ４０４、デコードステージ４０６、割り当てステージ４０８、リネームステージ４１０、スケジュール（ディスパッチまたは発行としても知られている）ステージ４１２、レジスタ読み取り／メモリ読み出しステージ４１４、実行ステージ４１６、書き戻し／メモリ書き込みステージ４１８、例外処理ステージ４２２、及びコミットステージ４２４を含む。
【００６８】
図４Ｂでは、矢印が、２以上のユニットの間の連結を示し、矢印の方向が、これらユニット間のデータフローの方向を示す。図４Ｂは、実行エンジンユニット４５０に連結されているフロントエンドユニット４３０を含むプロセッサコア４９０を示しており、４３０も４５０もメモリユニット４７０に連結されている。
【００６９】
コア４９０は、ＲＩＳＣコア、ＣＩＳＣコア、ＶＬＩＷコア、または、コアのハイブリッドもしくは別のタイプのコアであってよい。また別の選択肢として、コア４９０は、専用コア（たとえばネットワークまたは通信コア、圧縮エンジン、グラフィックスコア等）であってよい。
【００７０】
フロントエンドユニット４３０は、命令キャッシュユニット４３４に連結されている分岐予測ユニット４３２を含み、これは命令変換ルックアサイドバッファ（ＴＬＢ）４３６に連結されており、これがまた命令フェッチユニット４３８に連結されており、これがまたデコードユニット４４０に連結されている。デコードユニットまたはデコーダは、命令をデコードして、１以上のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、その他の命令、またはその他の制御信号を生成してよい（これらは、元の命令からデコードされたり、元の命令を反映していたり、元の命令から導出されていたりする）。デコーダは、様々な異なるメカニズムを利用して実装されてよい。適切なメカニズムの例には、これらに限定はされないが、ルックアップテーブル、ハードウェア実装、プログラマブル論理アレイ（ＰＬＡ）、マイクロコード読み取り専用メモリ（ＲＯＭ）等が含まれる。命令キャッシュユニット４３４は、さらに、メモリユニット４７０のレベル２（Ｌ２）キャッシュユニット４７６に連結されている。デコードユニット４４０は、実行エンジンユニット４５０のリネーム／割り当てユニット４５２に連結されている。
【００７１】
実行エンジンユニット４５０は、１以上のスケジューラユニット４５６及び退避ユニット４５４に連結されているリネーム／割り当てユニット４５２を含む。スケジューラユニット４５６は、任意の数の異なるスケジューラを表しており、これには、予約ステーション、中央命令ウィンドウ等が含まれる。スケジューラユニット４５６は、物理レジスタファイルユニット４５８に連結されている。物理レジスタファイルユニット４５８はそれぞれ、１以上の物理レジスタファイルを表しており、これらはそれぞれが、１以上の異なるデータタイプ（たとえばスカラー整数、スカラー浮動小数点、パッキングされた整数、パッキングされた浮動小数点、ベクトル整数、ベクトル浮動小数点等）、ステータス（たとえば、次に実行する命令のアドレスである命令ポインタ）などを格納する。退避ユニット４５４が物理レジスタファイルユニット４５８に重複しており、レジスタリネーム及びアウトオブオーダ実行を実装することができる様々な方法（たとえば、リオーダバッファ及び退避レジスタファイルを利用して、将来のファイル、履歴バッファ、及び退避レジスタファイルを利用して、レジスタマップ及びレジスタのプールを利用して、など）を示している。概して、アーキテクチャレジスタは、プロセッサの外から、またはプログラマから見ることができる。レジスタは、具体的な回路のタイプに限定されない。ここで記載するデータを格納及び提供可能であれば、様々な異なるタイプのレジスタが利用可能である。適切なレジスタの例には、これらに限定はされないが、専用物理レジスタ、レジスタリネームを利用する、動的に割り当てられた物理レジスタ、専用物理レジスタと動的に割り当てられた物理レジスタとの組み合わせなどが含まれる。退避ユニット４５４及び物理レジスタファイルユニット４５８は、実行クラスタ４６０に連結されている。実行クラスタ４６０は、１以上の実行ユニット４６２及び１以上のメモリアクセスユニット４６４を含む。実行ユニット４６２は、様々な演算（たとえばシフト、加算、減算、乗算等）を、様々なタイプのデータ（たとえばスカラー浮動小数点、パッキングされた整数、パッキングされた浮動小数点、ベクトル整数、ベクトル浮動小数点等）に行うことができる。一部の実施形態は、具体的な関数または関数群に専用の複数の実行ユニットを含んでいるが、他の実施形態は、１つの実行ユニットだけを含んだり、全てが全ての関数を実行するまたは複数の実行ユニットを含んだりしてもよい。スケジューラ４５６、物理レジスタファイルユニット４５８、及び実行クラスタ４６０は、一定の実施形態では一定のタイプのデータ／オペレーションについて別々のパイプラインを生成するために（たとえばスカラー整数パイプライン、スカラー浮動小数点／パッキングされた整数／パッキングされた浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、及び／または、それぞれが銘々のスケジューラユニット、物理レジスタファイルユニット、及び／実行クラスタを有するメモリアクセスパイプライン、並びに、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット４６４を有する一定の実施形態を実装する）、複数形で示されている。別個のパイプラインを利用する場合には、これらのパイプラインの１以上がアウトオブオーダ発行／実行であり、残りがインオーダであってよい。
【００７２】
メモリアクセスユニット４６４群は、メモリユニット４７０に連結されており、これが、レベル２（Ｌ２）キャッシュユニット４７６に連結されているデータキャッシュユニット４７４に連結されているデータＴＬＢユニット４７２を含む。一実施形態では、メモリアクセスユニット４６４は、ロードユニット、ストアアドレスユニット、ストアデータユニットを含み、これらそれぞれが、メモリユニット４７０のデータＴＬＢユニット４７２に連結されている。Ｌ２キャッシュユニット４７６は、１以上の他のレベルのキャッシュに連結されており、最終的にはメインメモリに連結されている。
【００７３】
例であるが、例に挙げているレジスタリネーム、アウトオブオーダ発行／実行コアアーキテクチャは、以下のようにしてパイプライン４００を実装してよい。１）命令フェッチ４３８が、フェッチ及び長さデコードステージ４０２及び４０４を実行し、２）デコードユニット４４０が、デコードステージ４０６を実行し、３）リネーム／割り当てユニット４５２が、割り当てステージ４０８及びリネームステージ４１０を実行し、４）スケジューラユニット４５６が、スケジュールステージ４１２を実行し、５）物理レジスタファイルユニット４５８及びメモリユニット４７０が、レジスタ読み取り／メモリ読み取りステージ４１４を実行し、実行クラスタ４６０が、書き戻し／メモリ書き込みステージ４１８を実行し、７）様々なユニットが例外処理ステージ４２２に関与し、８)退避ユニット４５４及び物理レジスタファイルユニット４５８が、コミットステージ４２４を実行する。
【００７４】
コア４９０は、１以上の命令セット（たとえばｘ８６命令セット（新たなバージョンを追加された一部の拡張部を含む））、カリフォルニア州ＳｙｎｎｙｖａｌｅのＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ社のＭＩＰＳ命令セット、カリフォルニア州ＳｙｎｎｙｖａｌｅのＡＲＭ  Ｈｏｌｄｉｎｇｓ社のＡＲＭ命令セット（随意でＮＥＯＮ等の追加の拡張部を含む）をサポートしていてよい。
【００７５】
コアはマルチスレッド（２以上の並列のオペレーションまたはスレッドのセット）をサポートしていてよく、タイムスライスマルチスレッド、同時マルチスレッド（１つの物理コアが、物理コアが同時にマルチスレッド処理している各スレッドに論理コアを提供する）、またはこれらの組み合わせを含んでよい（たとえば、Ｉｎｔｅｌ（登録商標）Ｈｙｐｅｒｔｈｒｅａｄｉｎｇ技術のような、タイムスライスフェッチ及びデコード、並びにこの後に同時マルチスレッド）様々な方法で行われてよい。
【００７６】
レジスタリネームは、アウトオブオーダ実行のコンテキストで説明されるが、レジスタリネームは、インオーダアーキテクチャで利用することもできる点を理解されたい。図示したプロセッサの実施形態はさらに、別の命令及びデータキャッシュユニット４３４／４７４及び共有Ｌ２キャッシュユニット４７６を含むが、別の実施形態では、命令及びデータ両方について１つの内部キャッシュが含まれてよい（たとえばレベル１（Ｌ１）内部キャッシュまたはマルチレベルの内部キャッシュ）。一部の実施形態では、システムは、内部キャッシュと、コア及び／またはプロセッサの外部の外部キャッシュとの組み合わせを含んでよい。または、キャッシュ全てがコア及び／またはプロセッサの外部にあってもよい。
【００７７】
図５は、本発明の実施形態の、統合されたメモリコントローラ及びグラフィックスをもつシングルコアプロセッサ及びマルチコアプロセッサ５００を示す。図５の実線のボックスは、シングルコア５０２Ａ、システムエージェント５１０、１以上のバスコントローラユニット５１６を持つプロセッサ５００を示しており、随意に追加されている破線のボックスは、複数のコア５０２Ａ−Ｎ、システムエージェントユニット５１０に統合された１以上のメモリコントローラユニット５１４、及び統合されたグラフィックス論理５０８を持つ別のプロセッサ５００を示す。
【００７８】
メモリ階層は、コア内の１以上のレベルのキャッシュ、１以上の共有キャッシュユニット５０６、統合されたメモリコントローラユニット５１４に連結されている外部メモリ（不図示）を含む。共有キャッシュユニット群５０６は、１以上の中間レベルキャッシュ（たとえばレベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４））、またはその他のレベルのキャッシュ、最終レベルのキャッシュ（ＬＬＣ）、及び／またはこれらの組み合わせを含んでよい。一実施形態では、リングベースのインターコネクトユニット５１２が、統合されたグラフィックス論理５０８、共有キャッシュユニット群５０６、及びシステムエージェントユニット５１０を相互接続するが、別の実施形態では、これらユニットを相互接続するために任意の数の公知の技術を利用してもよい。
【００７９】
一部の実施形態では、コア５０２Ａ−Ｎの１以上はマルチスレッド処理を行うことができる。システムエージェント５１０は、コア５０２Ａ−Ｎを調整して動作させるコンポーネントを含む。システムエージェントユニット５１０は、たとえば電力制御ユニット（ＰＣＵ）及び表示ユニットを含んでよい。ＰＣＵは、コア５０２Ａ−Ｎ及び統合されたグラフィック論理５０８の電力状態を調整するために必要な論理及びコンポーネントであってよい、またはこれらを含んでよい。表示ユニットは、１以上の外部接続されたディスプレイを駆動するためのものである。
【００８０】
コア５０２Ａ−Ｎは、アーキテクチャ及び／または命令セットの観点から同質または異質であってよい。たとえばコア５０２Ａ−Ｎの一部が、インオーダであり、他がアウトオブオーダであってよい。別の例として、コア５０２Ａ−Ｎの２以上が、同じ命令セットを実行可能であってよく、他が、その命令セットのサブセットまたは異なる命令セットを実行可能であってよい。
【００８１】
プロセッサは、汎用プロセッサ（たとえばコア（登録商標）ｉ３、ｉ５、ｉ７、２Ｄｕｏ、Ｑｕａｄ、Ｘｅｏｎ（登録商標）、Ｉｔａｎｉｕｍ（登録商標）、ＸＳｃａｌｅ（登録商標）、またはＳｔｒｏｎｇＡＲＭ（登録商標）プロセッサ等）であってよく、これらはカリフォルニア州のサンタクララのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ社から利用可能であってよい。またはプロセッサは、ＡＲＭ  Ｈｏｌｄｉｎｇｓ，Ｌｔｄ、ＭＩＰＳ社等の別の会社から入手可能であってもよい。プロセッサは、たとえば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、コプロセッサ、エンベデッドプロセッサ等の専用プロセッサであってよい。プロセッサは、１以上のチップ上に実装されてよい。プロセッサ５００は、複数の処理技術（たとえばＢｉＣＭＯＳ、ＣＭＯＳ，またはＮＭＯＳ）のいずれかを利用する、１以上の基板上の一部であっても、及び／または、１以上の基板上に実装されていてもよい。
【００８２】
図６から図８は、プロセッサ５００を含むのに適したシステム例であり、図９は、コア５０２の１以上を含んでよいチップ（ＳｏＣ）の上のシステムの例である。当技術分野で知られている、ラップトップ、デスクトップ、ハンドヘルドＰＣ、情報携帯端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、可搬型メディアプレーヤ、ハンドヘルドデバイス、及びその他の様々な電子デバイスで知られている他のシステム設計及び構成もまた適している。一般的には、ここで開示したプロセッサ及び／または他の実行論理を含むことのできる莫大な数の様々なシステム及び電子デバイスが適している。
【００８３】
図６を参照すると、本発明の一実施形態におけるシステム６００のブロック図が示されている。システム６００は、１以上のプロセッサ６１０、６１５を含み、これらが、グラフィックスメモリコントローラハブ（ＧＭＣＨ）６２０に連結されている。さらなるプロセッサ６１５が性質的に必須ではないということは、図６の破線に示されている。
【００８４】
各プロセッサ６１０、６１５は、プロセッサ５００のあるバージョンである。しかし、統合されたグラフィック論理及び統合されたメモリ制御ユニットがプロセッサ６１０、６１５に存在していてよい。図６は、ＧＭＣＨ６２０が、たとえばＤＲＡＭであってよいメモリ６４０に連結されていてよいことを示している。ＤＲＡＭは、少なくとも１つの実施形態では、不揮発性キャッシュに関連付けられていてよい。
【００８５】
ＧＭＣＨ６２０は、チップセット、またはチップセットの一部であってよい。ＧＭＣＨ６２０は、プロセッサ６１０、６１５と通信してよく、プロセッサ６１０、６１５、及びメモリ６４０の間の交信を制御してよい。ＧＭＣＨ６２０は、さらに、プロセッサ６１０、６１５とシステム６００の他のエレメントとの間のアクセラレーテッドバスインタフェースとして機能してよい。少なくとも１つの実施形態では、ＧＭＣＨ６２０が、マルチドロップバス（たとえばフロントサイドバス（ＦＳＢ）６９５）を介してプロセッサ６１０、６１５と通信する。
【００８６】
さらにＧＭＣＨ６２０は、ディスプレイ６４５（たとえばフラットパネルディスプレイ）に連結されている。ＧＭＣＨ６２０は、統合されたグラフィックスアクセラレータを含んでよい。ＧＭＣＨ６２０は、さらに、入出力（Ｉ／Ｏ）コントローラハブ（ＩＣＨ）６５０に連結されており、これは、システム６００に様々な周辺デバイスを連結するために利用されてよい。図６の実施形態には、外部グラフィックスデバイス６６０が例示されており、これは、ＩＣＨ６５０に、別の周辺デバイス６７０とともに連結されている別個のグラフィックスデバイスであってよい。
【００８７】
または、追加のまたは別のプロセッサが、システム６００に存在してもよい。たとえば追加のプロセッサ６１５は、プロセッサ６１０と同じ追加のプロセッサ、プロセッサ６１０とは異質の、または非対称の追加のプロセッサ、アクセラレータ（たとえばグラフィックスアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニット等）、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサを含んでよい。アーキテクチャ、マイクロアーキテクチャ、熱、電力消費特性を含む様々な測定基準の利点において、物理リソース６１０、６１５の間には様々な差があってよい。これらの差により、プロセッサ６１０、６１５の間で非対称性及び異質性が生じる。少なくとも１つの実施形態では、様々なプロセッサ６１０、６１５が、同じダイパッケージに存在していてよい。
【００８８】
図７を参照すると、本発明の一実施形態の第２のシステム７００のブロック図が示されている。図７に示すように、マルチプロセッサシステム７００は、ポイントツーポイントインターコネクトシステムであり、ポイントツーポイントインターコネクト７５０を介して連結されている第１のプロセッサ７７０と第２のプロセッサ７８０を含む。プロセッサ７７０及び７８０のそれぞれは、プロセッサ６１０、６１５の１以上同様に、プロセッサ５００のあるバージョンであってよい。
【００８９】
２つのプロセッサ７７０、７８０のみが示されているが、本発明の範囲はこれに限定されない。他の実施形態では、１以上のさらなるプロセッサが１つのプロセッサ内に存在していてもよい。
【００９０】
プロセッサ７７０、７８０は、それぞれ統合されたメモリコントローラユニット７７２、７８２をそれぞれ含むものとして示されている。プロセッサ７７０は、さらに、バスコントローラユニットのポイントツーポイント（Ｐ−Ｐ）インタフェース７７６、７７８を含み、同様に、第２のプロセッサ７８０も、Ｐ−Ｐインタフェース７８６、７８８を含む。プロセッサ７７０、７８０は、ポイントツーポイント（Ｐ−Ｐ）インタフェース７５０を介してＰ−Ｐインタフェース回路７７８、７８８を利用して情報を交換する。図７に示すように、ＩＭＣ７７２及び７８２は、プロセッサを、それぞれのメモリ（つまりメモリ７３２、メモリ７３４）に連結するが、これらメモリは、それぞれのプロセッサにローカルに取り付けられているメインメモリの一部であってよい。
【００９１】
プロセッサ７７０、７８０はそれぞれ、ポイントツーポイントインタフェース回路７７６、７９４、７８６、７９８を利用して個々にＰ−Ｐインタフェース７５２、７５４を介してチップセット７９０と情報を交換してよい。チップセット７９０は、さらに、高性能グラフィックスインタフェース７３９を介して高性能グラフィックス回路７３８と情報を交換してよい。
【００９２】
共有キャッシュ（不図示）は、いずれかのプロセッサの内部または両方のプロセッサの外部に含まれてよく、且つ、Ｐ−Ｐインターコネクト経由でプロセッサと接続されており、いずれかのプロセッサまたは両方のプロセッサのローカルキャッシュ情報が、プロセッサが低電力モードにある場合には、共有キャッシュに格納されてよい。
【００９３】
チップセット７９０は、インタフェース７９６を介して第１のバス７１６に連結されてよい。一実施形態では、第１のバス７１６が、周辺コンポーネントインターコネクト（ＰＣＩ）バス、または、ＰＣＩ  Ｅｘｐｒｅｓｓバスまたは別の第三世代Ｉ／Ｏインターコネクトバス等のバスであってよいが、本発明の範囲はこれに限定はされない。
【００９４】
図７に示すように、様々なＩ／Ｏデバイス７１４が、第１のバス７１６を第２のバス７２０に連結するバスブリッジ７１８とともに、第１のバス７１６に連結されていてよい。一実施形態では、第２のバス７２０が、低ピンカウント（ＬＰＣ）バスであってよい。一実施形態では、様々なデバイス（たとえば、キーボード及び／またはマウス７２２、通信デバイス７２７及び格納ユニット７２８（たとえば命令／コード及びデータ７３０を含みうるディスクドライブまたは他の大容量記憶デバイス））が第２のバス７２０に連結されていてよい。さらに、オーディオＩ／Ｏ７２４が第２のバス７２０に連結されていてよい。他のアーキテクチャも可能である。たとえば、図７のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他の同様のアーキテクチャを実装してよい。
【００９５】
図８を参照すると、本発明の一実施形態の第３のシステム８００のブロック図が示されている。図７及び図8のエレメントと同様のエレメントには、同様の参照番号が付されており、図８の他の側面を曖昧にしないために、図７の一定の側面を図８からは省いている。
【００９６】
図８は、プロセッサ８７０、８８０が、それぞれ統合されたメモリ及びＩ／Ｏ制御論理（「ＣＬ」）８７２、８８２を含んでよいことを示している。少なくとも１つの実施形態では、ＣＬ８７２、８８２は、図５及び図７を参照して上述したような統合されたメモリコントローラユニットを含んでよい。加えて、ＣＬ８７２、８８２は、さらにＩ／Ｏ制御論理を含んでよい。図８は、メモリ８３２、８３４がＣＬ８７２、８８２に連結されていることを示しているばかりでなく、Ｉ／Ｏデバイス８１４も制御論理８７２、８８２に連結されていることも示している。レガシーＩ／Ｏデバイス８１５がチップセット８９０に連結されている。
【００９７】
図９を参照すると、本発明の一実施形態のＳｏＣ９００のブロック図が示されている。図５と同様のエレメントは、同様の参照番号を付されている。さらに、破線のボックスはより高度なＳｏＣの随意の特徴を示す。図９では、インターコネクトユニット９０２が、１以上のコア５０２Ａ−Ｎ及び共有キャッシュユニット５０６を含むアプリケーションプロセッサ９１０、システムエージェントユニット５１０、バスコントローラユニット５１６、統合されたメモリコントローラユニット５１４、統合されたグラフィックス論理５０８を含んでよい１以上のメディアプロセッサ９２０、静止画及び／または動画カメラ機能を提供する画像プロセッサ９２４、ハードウェアオーディオアクセラレーションを提供するオーディオプロセッサ９２６、ビデオエンコード／デコードアクセラレーションを提供するビデオプロセッサ９２８、ＳＲＡＭユニット９３０、ＤＭＡ（直接メモリアクセス）ユニット９３２、及び、１以上の外部ディスプレイを連結させる表示ユニット９４０に連結されている。
【００９８】
図１０は、中央処理装置（ＣＰＵ）及びグラフィックス処理ユニット（ＧＰＵ）を含むプロセッサを示しており、このプロセッサは、一実施形態による少なくとも１つの命令を実行してよい。一実施形態では、少なくとも１つの実施形態による演算を実行する命令がＣＰＵにより実行されてよい。別の実施形態では、命令はＧＰＵにより実行されてよい。また別の実施形態では、命令は、ＧＰＵとＣＰＵとによる演算の組み合わせによって実行されてもよい。一実施形態では、一実施形態の命令がＧＰＵで受信され、実行のためにデコードされてよい。しかし、デコードされた命令内の１以上の演算がＣＰＵにより実行されて、結果がＧＰＵに戻されて、命令の最終的な退避が行われてもよい。逆に一部の実施形態では、ＣＰＵが一次プロセッサとして機能して、ＧＰＵがコプロセッサとして機能してもよい。
【００９９】
一部の実施形態では、高度な並列性及びスループットをもつプロセッサで実行されるほうが利点がある命令がＧＰＵにより実行され、深いパイプラインのアーキテクチャとすることで利点があるプロセッサの性能から利点が得られる命令が、ＣＰＵにより実行される。たとえばグラフィックス、科学的な用途、金融の用途、その他の並列ワークロードは、ＧＰＵの性能からの利点のほうが大きいので、ＧＰＵで実行されてよく、オペレーティングシステムのカーネルまたはアプリケーションコード等のより連続したアプリケーションは、ＣＰＵでの実行に適している。
【０１００】
図１０では、プロセッサ１０００は、ＣＰＵ１００５、ＧＰＵ１０１０、画像プロセッサ１０１５、ビデオプロセッサ１０２０、ＵＳＢコントローラ１０２５、ＵＡＲＴコントローラ１０３０、ＳＰＩ／ＳＤＩＯコントローラ１０３５、表示デバイス１０４０、高精細マルチメディアインタフェース（ＨＤＭＩ（登録商標））コントローラ１０４５、ＭＩＰＩコントローラ１０５０、フラッシュメモリコントローラ１０５５、ＤＤＲ（dual data rate）コントローラ１０６０、セキュリティエンジン１０６５、Ｉ２Ｓ／Ｉ２Ｃ（Integrated Interchip Sound/Inter-Integrated Circuit）インタフェース１０７０を含む。他の論理及び回路（より多くのＣＰＵまたはＧＰＵ及び他の周辺インタフェースコントローラ）が図１０のプロセッサに含まれてもよい。
【０１０１】
少なくとも１つの実施形態の１以上の側面が、プロセッサ内の様々な論理を表す機械可読媒体に格納されている代表データにより実装されてもよく、これは機械により読み出されると、機械に、ここで記載する技術を実行する論理を製造させることができる。これらの表現は、「ＩＰコア」として知られており、有形の機械可読媒体（「テープ」）に格納され、様々な顧客または製造施設に送られ、実際に論理またはプロセッサを作成する製造機械に搭載されてよい。たとえばＩＰコア（一例は、ＡＲＭ  Ｈｏｌｄｉｎｇｓ，Ｌｔｄが開発したＣｏｒｔｅｘ（登録商標）ファミリーのプロセッサ、及び、中国科学アカデミーのＩＣＴ（Institute of Computing Technology）が開発したＬｏｏｎｇｓｏｎ  ＩＰコア）が、Ｔｅｘａｓ  Ｉｎｓｔｒｕｍｅｎｔｓ，  Ｑｕａｌｃｏｍｍ，Ａｐｐｌｅ、またはＳａｍｓｕｎｇ等の様々な顧客またはライセンシーにライセンス供与または販売され、これら顧客またはライセンシーにより製造されるプロセッサに実装されてよい。
【０１０２】
図１１は、一実施形態のＩＰコアの開発を示すブロック図である。格納媒体１１３０は、シミュレーションソフトウェア１１２０及び／またはハードウェアまたはソフトウェアモデル１１１０を含む。一実施形態では、ＩＰコア設計を表すデータは、メモリ１１４０（たとえばハードディスク）、有線接続（たとえばインターネット）１１５０、または無線接続１１６０を介して、格納媒体１１３０に提供されてよい。シミュレーションツール及びモデルが生成するＩＰコア情報は、製造施設に送られてよく、そこで、第三者が少なくとも１つの実施形態の少なくとも１つの命令を実行するように製造されてよい。
【０１０３】
一部の実施形態では、１以上の命令が、第１のタイプまたはアーキテクチャ（たとえばｘ８６）に対応していてよく、異なるタイプまたはアーキテクチャ（たとえばＡＲＭ）のプロセッサで変換、エミュレーションされてよい。したがって、一実施形態の命令は、ＡＲＭ、ｘ８６、ＭＩＰＳ、ＧＰＵ、その他のプロセッサのタイプまたはアーキテクチャを含む任意のプロセッサまたはプロセッサのタイプで実行することができる。
【０１０４】
図１２は、第１のタイプの命令が、一実施形態の異なるタイプのプロセッサによりエミュレーションされる様子を示す。図１２では、プログラム１２０５が、一実施形態の命令と同じまたは実質的に同じ機能を実行することができるいくつかの命令を含んでいる。しかしプログラム１２０５の命令は、プロセッサ１２１５と異なる、またはプロセッサ１２１５に互換性を有さないタイプ及び／またはフォーマットであってよく、これは、プログラム１２０５の命令のタイプが、プロセッサ１２１５によりネーティブに実行できない可能性があることを示している。しかしエミュレーション論理１２１０の助けを受けて、プログラム１２０５の命令を、プロセッサ１２１５がネーティブに実行可能な命令に変換することができる。一実施形態では、エミュレーション論理は、ハードウェアに実装されていてよい。別の実施形態では、エミュレーション論理は、プログラム１２０５の命令のタイプを、プロセッサ１２１５がネーティブに実行可能なタイプに変換するソフトウェアを含む有形の機械可読媒体に実装されてよい。他の実施形態では、エミュレーション論理は、有形の機械可読媒体に格納されている固定関数（fixed function）またはプログラム可能ハードウェアの組み合わせである。一実施形態では、プロセッサがエミュレーション論理を含み、他の実施形態では、エミュレーション論理は、プロセッサの外部に存在しており、第三者が提供するものであってもよい。一実施形態では、プロセッサは、プロセッサに含まれる、または、プロセッサに関連付けられているマイクロコードまたはファームウェアを実行することで、ソフトウェアを含む有形の機械可読媒体に実装されているエミュレーション論理を搭載可能である。
【０１０５】
図１３は、本発明の実施形態において、ソフトウェア命令変換器を利用して、ソース命令セットのバイナリ命令を、対象命令セットのバイナリ命令に変換する例を示すブロック図である。この実施形態では、命令変換器は、ソフトウェア命令変換器だが、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装されてもよい。図１３は、ハイレベル言語１３０２のプログラムが、ｘ８６コンピあら１３０４によりコンパイルされて、少なくともｘ８６命令セットコア１３１６をもつプロセッサでネーティブに実行することができるｘ８６バイナリコード１３０６を生成する。少なくとも１つのｘ８６命令セットコア１３１６を持つプロセッサは、（１）Ｉｎｔｅｌ  ｘ８６命令セットコアの命令セットの実質的な部分、または（２）少なくともｘ８６命令セットコアをもつＩｎｔｅｌプロセッサで実行することを目的としたアプリケーションまたはその他のソフトウェアのオブジェクトコードバージョンを互換的に実行または処理することで、少なくとも１つのｘ８６命令セットコアをもつＩｎｔｅｌプロセッサと実質的に同じ機能を果たし、少なくともｘ８６命令セットコアをもつＩｎｔｅｌプロセッサと実質的に同じ結果を達成する任意のプロセッサのことを表している。ｘ８６コンパイラ１３０４は、さらなるリンク処理を行っても行わなくても、少なくとも１つのｘ８６命令セットコア１３１６をもつプロセッサで実行可能なｘ８６バイナリコード１３０６（たとえばオブジェクトコード）を生成することができるコンパイラのことを表す。同様に、図１３は、ハイレベル言語１３０２のプログラムが、別の命令セットコンパイラ１３０８を利用してコンパイルされて、少なくとも１つのｘ８６命令セットコア１３１４がないプロセッサ（たとえば、カリフォルニア州ＳｕｎｎｙｖａｌｅのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セットを実行する、及び／または、カリフォルニア州ＳｕｎｎｙｖａｌｅのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セットを実行するＭＩＰＳ命令セットを実行するコアをもつプロセッサ）によりネーティブに実行することができる別の命令セットバイナリコード１３１０を生成してよい。命令変換器１３１２は、ｘ８６バイナリコード１３０６を、ｘ８６命令セットコア１３１４のないプロセッサによりネーティブに実行可能なコードに変換するために利用される。この変換されたコードは、これが可能な命令変換器は作成が難しいので、別の命令セットバイナリコード１３１０と同じである可能性が少ないが、変換されたコードは、汎用的なオペレーションを遂行し、別の命令セットの命令から構成されるだろう。したがい、命令変換器１３１２は、エミュレーション、シミュレーション、またはその他のプロセスによって、ｘ８６命令セットプロセッサまたはコアのないプロセッサまたはその他の電子デバイスにｘ８６バイナリコード１３０６を実行させるソフトウェア、ファームウェア、ハードウェア、またはこれらの命令を表す。
【０１０６】
図１４Ａは、ベクトル圧縮及びローテート機能を提供する命令１４０１の一実施形態のフロー図を示す。命令１４０１の実施形態は、ベクトルソースオペランド１４２０、マスクレジスタ１４１０、ベクトルデスティネーションオペランド１４４０、及びベクトルデスティネーションオフセット１４３０を特定してよい。マスクレジスタ１４１０は、複数のデータフィールドを含んでよく、マスクレジスタ１４１０の複数のデータフィールドのそれぞれは、ベクトルのエレメント位置に対応している(ベクトルソースオペランド１４２０)。一部の実施形態では、デコードステージ（たとえば４０６）が、命令１４０１をデコードしてよく、デコードされた命令１４０１に呼応して、１以上の実行ユニット（たとえば４５０）が、マスクレジスタ１４１０の複数のデータフィールドの値を読み出し、マスキングされていない値（たとえば１）をもつマスクレジスタ１４１０の複数のデータフィールドのそれぞれについて、ベクトルソースオペランド１４２０からの対応するベクトルエレメントを、ベクトルデスティネーションオフセット１４３０位置から（たとえばエレメント位置４）始まる、ベクトルデスティネーション１４４０の隣接する連続したエレメント位置にコピーする。一部の実施形態では、ベクトルソースオペランド１４２０からの対応するベクトルエレメントが、ベクトルデスティネーション１４４０のエレメント位置の総数（たとえば８）を法とする、隣接する連続したエレメント位置にコピーする（たとえば、ｘ８６プロセッサの２５６ビットのＹｍｍレジスタの８つの３２ビットのエレメント位置）。
【０１０７】
ベクトルデスティネーション１４４０は、２つの６４ビットエレメント位置のみ、または１６個の３２ビットエレメント位置、または３２個の１６ビットのビットエレメント位置を有してよいことがわかるだろう。
【０１０８】
図１４Ｂは、ベクトル圧縮及びローテート機能を提供する命令１４０２の別の実施形態のフロー図を示す。命令１４０２の実施形態は、ベクトルソースオペランド１４２０、マスク１４１０、ベクトルデスティネーションオペランド１４４０、及び、ベクトルデスティネーションオフセット１４３０を特定してよい。マスク１４１０も複数のデータフィールドを含んでよく、マスクレジスタ１４１０の複数のデータフィールドのそれぞれは、ベクトルのエレメント位置に対応している(ベクトルソースオペランド１４２０)。一部の実施形態では、デコードステージ（たとえば４０６）が、命令１４０２をデコードしてよく、デコードされた命令１４０２に呼応して、１以上の実行ユニット（たとえば４５０）が、マスクレジスタ１４１０の複数のデータフィールドの値を読み出し、マスキングされていない値（たとえば１）をもつマスクレジスタ１４１０の複数のデータフィールドのそれぞれについて、ベクトルソースオペランド１４２０からの対応するベクトルエレメントを、ベクトルデスティネーション１４４０の隣接する連続したエレメント位置に、ベクトルデスティネーションオフセット１４３０位置から（たとえばエレメント位置４）コピーする。一部の実施形態では、ベクトルソースオペランド１４２０からの対応するベクトルエレメントが、ベクトルデスティネーションオフセット１４３０位置から始まる、隣接する連続したエレメント位置に、最上位のベクトルデスティネーション１４４０エレメント位置が満たされるまでに限り、コピーされる。
【０１０９】
一部の実施形態では、各対応するベクトルエレメントをベクトルソースオペランド１４２０からベクトルデスティネーション１４４０の隣接する連像するエレメント位置にコピーすると、マスクレジスタ１４１０の対応するデータフィールドの値を、マスキングされていない値からマスキングされた値に変更する（たとえば、この例ではマスクレジスタ１４１０に上位のビット（most bit）のみを変更しないで残す）。この実施形態でも、ローテート機能は、修正されたマスクで、オフセットをゼロとして、命令を再度実行することで提供されることがわかるだろう。
【０１１０】
図１５Ａは、命令を利用してベクトル圧縮及びローテート機能を提供するプロセス１５０１の一実施形態のフロー図を示す。ここに示すプロセス１５０１及びその他のプロセスは、汎用機械、専用機械、またはこれらの組み合わせによって実行可能な専用ハードウェアまたはソフトウェアまたはファームウェアオペレーションコードを含んでよい処理ブロックによって実行される。
【０１１１】
プロセス１５０１では、ベクトル１５１０の各エレメントの最上位の値ｖを、ベクトルＢ[３：０]（たとえばベクトルレジスタ１５１５のもの）の各エレメントと比較して、Ｂのエレメントが最上位の値未満かを判断して、マスク（マスク０  １５２０）を生成して、結果を格納する。マスクの、マスキングされていない値に設定されているビット数のカウントを、カウント１５３０に格納する。ベクトルＡ[３：０]のエレメントを、マスク０  １５２０のマスキングされていない設定に従って圧縮して、ベクトルレジスタ１５７５の、初期オフセットＲ０１５３５から（初期値はゼロである）格納する。カウント１５３０の値を、オフセットの値Ｒ０  １５３５に追加して、オフセットＲ１  １５４５を生成する。
【０１１２】
次に、同様に、ベクトルＴｏｐＶａｌのエレメントである最上位の値ｖ（たとえばベクトルレジスタ１５５０のもの）を、ベクトルＢ[７：４]（たとえばベクトルレジスタ１５５５のもの）の各エレメントに比較して、Ｂのエレメントが最上位の値未満かを判断して、別のマスクを生成して（たとえば、マスク１  １５６０）、結果を格納する。ベクトルＡ[７：４]のエレメントを、マスク１  １５６０のマスキングされていない設定に従って圧縮して、ベクトルレジスタ１５８５の、オフセットＲ１  １５４５から格納する。
【０１１３】
一部の実施形態では、ベクトルエレメントＡ[７：４]を、ベクトルソース１５６５から、ベクトルデスティネーション１５８５のエレメント位置の総数を法とする、隣接する連続したエレメント位置に、ベクトルデスティネーションオフセット１５４５位置から、圧縮される。カウント１５３０は、全て１のマスク１５４０を左にシフトさせ、マスク１５７０を生成するために利用され、マスク１５７０は、ベクトルレジスタ１５７５及びベクトルレジスタ１５８５の、圧縮されている結果を、ベクトルレジスタ１５９０内に組み込むために利用される（たとえば、下にずらすマスクオペレーション（move under mask operation）を利用して）。
【０１１４】
ベクトルレジスタ１５９０は、次にメモリに格納され、別の繰り返し（不図示）を、Ｒ１  １４４５の初期オフセットに、マスキングされていない値に設定されたマスク１５６０のビット数を足して、ベクトルデスティネーション１５８５のエレメント位置の総数（この例では１の新しい初期オフセット）を差し引いた値から始めてよい。
【０１１５】
図１５Ｂは、ベクトル圧縮及びローテート機能を提供する命令を利用するプロセス１５０２の別の実施形態のフロー図を示す。プロセス１５０２では、ベクトルＴｏｐＶａｌ（ベクトルレジスタ１５１０などの）の各エレメントの最上位の値ｖを、ベクトルＢ[７：４]の各エレメントに比較して、Ｂのエレメントが最上位の値ｖ未満か判断して、マスク（たとえばマスク０  １５２０）を生成して、結果を格納する。マスクの、マスキングされていない値に設定されているビット数のカウントを、カウント１５３０に格納する。ベクトルＡ [７：４]のエレメントを、マスク０  １５２０のマスキングされていない設定に従って圧縮して、ベクトルレジスタ１５９０の、初期オフセットＲ０１５３５から（初期値はゼロである）格納する。カウント１５３０の値を、オフセットの値Ｒ０  １５３５に追加して、オフセットＲ１  １５４５を生成する。
【０１１６】
次に、同様に、ベクトルＴｏｐＶａｌのエレメントである最上位の値ｖ（たとえばベクトルレジスタ１５５０のもの）を、ベクトルＢ[７：４]（たとえばベクトルレジスタ１５５５のもの）の各エレメントに比較して、Ｂのエレメントが最上位の値未満かを判断して、別のマスクを生成して（たとえば、マスク１  １５６０）、結果を格納する。ベクトルＡ[７：４]のエレメントを、マスク１  １５６０のマスキングされていない設定に従って圧縮して、ベクトルレジスタ１５９０の、オフセットＲ１  １５４５から格納する。
【０１１７】
一部の実施形態では、ベクトルエレメントＡ[７：４]を、ベクトルソース１５６５から、ベクトルデスティネーションオフセット１５４５位置から始まる、隣接する連続したエレメント位置に、最上位のベクトルデスティネーション１５９０エレメント位置が満たされるまでに限り、コピーされる。一部の実施形態では、各対応するベクトルエレメントをベクトルソースオペランド１５６５からベクトルデスティネーション１５９０の隣接する連像するエレメント位置にコピーすると、マスクレジスタ１５６０の対応するデータフィールドの値を、マスキングされていない値からマスキングされた値に変更する（たとえば、この例ではマスクレジスタ１５６０に最上位のビットのみを変更しないで残す）。この実施形態では、ローテート機能は、修正されたマスクで、オフセットをゼロとして、命令を再度実行することで提供されることがわかるだろう。
【０１１８】
図１６Ａは、ベクトル圧縮及びローテート機能を提供するプロセス１６０１の一実施形態のフロー図を示す。プロセス１６０１及びここで説明するその他のプロセスは、汎用機械、専用機械、またはこれらの組み合わせによって実行可能な専用ハードウェアまたはソフトウェアまたはファームウェアオペレーションコードを含んでよい処理ブロックによって実行される。
【０１１９】
プロセス１６０１の処理ブロック１６１０では、圧縮ローテート命令がデコードされる。処理ブロック１６１５では、内部変数ｉをゼロ（０）に設定して、内部変数ｊをゼロ（０）に設定する。処理ブロック１６３０では、マスクレジスタの第１の複数のデータフィールドの値を読み出して、各データフィールドマスク[ｉ]について、データフィールドの値が１に設定されているかを判断する。いずれの別の値を利用しても、マスク[ｉ]のマスキングされていない値を表すことができる（ゼロ（０）または負の値（−１）などを含む）。データフィールドで、マスク[ｉ]が１に設定されていないと判断されると、処理は処理ブロック１６５５に進み、内部変数ｉを増分させる。さもなくば、１の値を持つマスクレジスタの各データフィールドについて、処理ブロック１６４５で、（１）ベクトルソースの対応するｉ番目のベクトルエレメントを、ベクトルデスティネーションオフセットの位置rotateから始まるベクトルデスティネーションＤｅｓｔの隣接する連続したエレメント位置に、ベクトルデスティネーションＤｅｓｔのエレメント位置の総数ｌｅｎｇｔｈを法とする内部変数ｊを足した位置から、コピー、格納する。次いで処理ブロック１６５０で、内部変数ｊを増分して、処理ブロック１６５５で、内部変数ｉを増分する。処理ブロック１６６０では、圧縮ローテート命令の実行が完了しているかを判断する。判断結果が否定的であれば、処理１６０１を処理ブロック１６３０から繰り返す。判断結果が肯定的であった場合には、処理は処理ブロック１６６５で終了する。
【０１２０】
プロセス１６０１及びここで説明する他のプロセスは、繰り返しのプロセスとして例示されたが、連続して説明された処理ブロックは、様々な実施形態で、適宜、異なる順序で実行したり、同時に実行したり、並列実行したりすることも可能である点を理解されたい。
【０１２１】
別の実施形態では、ベクトルデスティネーションが満杯になるとコピーを停止してもよい。マスキングされていないベクトルエレメントを、ベクトルソースからベクトルデスティネーションＤｅｓｔの隣接する連続したエレメント位置にコピーすると、マスクの対応するフィールドの値を、マスキングされている値に変更することもできる。したがって、マスク値は、進捗状況及び／または完了を追跡するために利用することができ、満杯になったデスティネーションをメモリに格納した後で命令を再実行することができる。次いで、命令を、修正されたマスクとゼロのベクトルデスティネーションオフセットとを利用して再実行して、ベクトル圧縮及びローテート命令の実行がまだ必要なエレメントのみを圧縮して、命令のスループットを向上させることができる。
【０１２２】
図１６Ｂは、ベクトル圧縮及びローテート機能を提供するプロセス１６０２の別の実施形態のフロー図である。プロセス１６０２の処理ブロック１６１０で、圧縮ローテート命令をデコードする。処理ブロック１６１５で、内部変数ｉをゼロ（０）に設定して、内部変数ｊをゼロ（０）に設定する。処理ブロック１６３０で、マスクレジスタの第１の第１の複数のデータフィールドの値を読み出して、各データフィールドのマスク[ｉ]について、データフィールドの値が１に設定されているかを判断する。ここでも、別のいずれかの値を利用しても、マスク[ｉ]のマスキングされていない値を表すことができる（ゼロ（０）または負の値（−１）などを含む）。データフィールドで、マスク[ｉ]が１に設定されていないと判断されると、処理は処理ブロック１６５５に進み、内部変数ｉを増分させる。さもなくば、処理ブロック１６３５で、オフセットの値ｒｏｔａｔｅに、内部変数ｊを足したものが、ベクトルデスティネーションＤｅｓｔのエレメント位置の総数ｌｅｎｇｔｈ未満であるかを判断する。判断結果が否定的であった場合には、処理は処理ブロック１６５５に進み、内部変数ｉを増分する。
【０１２３】
判断結果が肯定的であった場合には、処理ブロック１６４０で、データフィールドのマスク[ｉ]をゼロ（０）に設定する。処理ブロック１６４６で、マスクレジスタの、１の値をもつ各データフィールドについて、ベクトルソースからの対応するｉ番目のベクトルエレメントを、ベクトルデスティネーションオフセットの位置ｒｏｔａｔｅに、内部変数Ｊを足し合わせた位置から始まる、ベクトルデスティネーションＤｅｓｔの、隣接する連続したエレメント位置に、ベクトルデスティネーションＤｅｓｔの最上位のエレメントが満たされるまでコピー、格納する。処理ブロック１６５０で内部変数ｊを増分して、処理ブロック１６５５で、内部変数ｉを増分する。処理ブロック１６６０で、圧縮ローテート命令の実行が完了したか判断する。判断結果が否定的であれば、処理１６０２を処理ブロック１６３０から繰り返す。判断結果が肯定的であった場合には、処理は処理ブロック１６６５で終了する。
【０１２４】
図１７は、ベクトル圧縮及びローテート機能を提供するプロセス１７０１の別の一実施形態のフロー図を示す。プロセス１７０１の処理ブロック１７１０で、圧縮ローテート命令をデコードする。処理ブロック１７１５で、内部変数ｉがゼロ（０）に設定され、内部変数ｊがゼロ（０）に設定される。処理ブロック１７２０で、ベクトルデスティネーションＤｅｓｔをゼロにするかを判断する。適用すると判断された場合には、ベクトルデスティネーションＤｅｓｔのすべてのエレメント位置にゼロを格納する。別の実施形態では、ゼロのエレメントは、ベクトルデスティネーション位置のみに格納して、ここにはベクトルソースからのエレメントをコピーしない。ベクトルデスティネーションＤｅｓｔをゼロにしないと判断された場合には、処理は直接処理ブロック１７３０に進む。
【０１２５】
処理ブロック１７３０では、マスクレジスタの第１の複数のデータフィールドの値を読み出て、各データフィールドのマスク[ｉ]について、データフィールドの値が１に設定されているかを判断する。別のいずれの値を利用しても、マスク[ｉ]のマスキングされていない値を表すことができる（ゼロ（０）または負の値（−１）などを含む）。データフィールドで、マスク[ｉ]が１に設定されていないと判断されると、処理は処理ブロック１７４５に進み、内部変数ｉを増分する。さもなくば、１の値を持つマスクレジスタの各データフィールドについて、処理ブロック１７３５で、（１）ベクトルソースの対応するｉ番目のベクトルエレメントを、ベクトルデスティネーションＤｅｓｔの隣接する連続したエレメント位置に、ベクトルデスティネーションオフセットの位置rotateに、ベクトルデスティネーションＤｅｓｔのエレメント位置の総数ｌｅｎｇｔｈを法とする内部変数ｊを足した位置から、コピー、格納する。次いで処理ブロック１７４０で、内部変数ｊを増分して、処理ブロック１７４５で、内部変数ｉを増分する。処理ブロック１７５０では、圧縮ローテート命令の実行が完了しているかを判断する。判断結果が否定的であれば、処理１７０１を処理ブロック１７３０から繰り返す。判断結果が肯定的であった場合には、処理は処理ブロック１７５５で終了する。
【０１２６】
プロセス１６０１及び１７０１は、そうしなければ簡単にはベクトル化されないアプリケーション（たとえばＳＰＥＣベンチマークスイートの４４４．ＮＡＭＤの内部ループ等のベンチマークアプリケーション）にベクトル圧縮機能を提供するために利用されることで、外部メモリへの高価な連続した格納数を低減させ、性能を向上させ、使用電力を低減させることができる
【０１２７】
図１８は、ベンチマークアプリケーションに、ベクトル圧縮及びローテート機能を提供するプロセスの一実施形態のフロー図を示す。プロセス１８０１の処理ブロック１８１０で、変数ｉをゼロ（０）に設定して、最後のｉを、最後からベクトルレジスタのｌｅｎｇｔｈを差し引いた値に設定する。処理ブロック１８１５で、ベクトルＴｏｐＶａｌ[ｌｅｎｇｔｈ：０]（たとえばベクトルレジスタ１５１０）の各エレメントの最上位の値ｖを、ベクトルＢ[ｌｅｎｇｔｈ＋ｉ：ｉ]の各エレメントと比較して、Ｂのエレメントが最上位の値ｖ未満であるかを判断して、マスクを生成して（たとえばマスクレジスタ１５２０に）、結果を格納する。処理ブロック１８２０で、マスクの、マスキングされていない値に設定されているビット数のカウントを、カウントに格納する。処理ブロック１８３０で、カウントがゼロを超える値かを判断する。ゼロを超える値ではない場合、処理は処理ブロック１８７０に進み、値ｌｅｎｇｔｈを、ｉに追加する。
【０１２８】
ゼロを超える値である場合には、処理は処理ブロック１８３５に向かい、ベクトルＡ[ｌｅｎｇｔｈ＋ｉ：ｉ]を、ベクトルレジスタＤｅｓｔＡ[ｌｅｎｇｔｈ：０]に搭載する。処理は次二位処理ブロック１８４５に向かい、ＤｅｓｔＡ[ｌｅｎｇｔｈ：０]を、マスクに設定されたマスキングされていないフィールドに従ってメモリポインタオペランドが示すメモリ位置から始まる、メモリの隣接する連続したエレメント位置に、パッキングして、格納する。処理ブロック１８６０で、メモリポインタをｃｏｕｎｔ分増分する（つまり、ベクトルエレメントが８バイト長である場合には、メモリポインタの値を、８にｃｏｕｎｔの値を乗算した値分増分する）。次に、処理は処理ブロック１８７０に進み、ｌｅｎｇｔｈの値をｉに追加する。そして処理ブロック１８７５で、ｉが最後のｉより大きいかを判断する。判断結果が肯定的である場合には、プロセスを完了させるために処理すべきエレメントの数が少しであることになり、処理ブロック１８８０となる。判断結果が否定的である場合には、処理は処理ブロック１８１５から繰り返す。
【０１２９】
図１９Ａは、ベンチマークアプリケーションに、ベクトル圧縮及びローテート機能を提供するプロセスの一実施形態のフロー図を示す。プロセス１９０２の処理ブロック１９１１で、変数ｉをゼロ（０）に設定して、オフセットをゼロ（０）に設定して、最後のｉを、最後から、ベクトルレジスタのｌｅｎｇｔｈ分差し引いた値に設定する。処理ブロック１９１５で、ベクトルＴｏｐＶａｌ[ｌｅｎｇｔｈ：０] （たとえばベクトルレジスタ１５１０）の各エレメントの最上位の値ｖを、ベクトルＢ[ｌｅｎｇｔｈ＋ｉ：ｉ]の各エレメントに比較して、Ｂのエレメントが、最上位の値ｖ未満であるかを判断して、マスク(マスク１５２０など)を生成して、結果を格納する。処理ブロック１９２０で、マスクの、マスキングされていない値に設定されているビット数のカウントをｃｏｕｎｔに格納する。処理ブロック１９２６で、ベクトルＡ[ｌｅｎｇｔｈ＋ｉ：ｉ]のエレメントを、マスクのマスキングされていない設定に従って圧縮フィルして（compress filled）、ＤｅｓｔＡ[ｌｅｎｇｔｈ：ｏｆｆｓｅｔ]に格納する。そしてプロセス１９３１で、ｃｏｕｎｔの値をｏｆｆｓｅｔの値に追加する。
【０１３０】
処理ブロック１９４１で、ｏｆｆｓｅｔが長さｌｅｎｇｔｈ（つまり、ＤｅｓｔＡを保持するベクトルレジスタのエレメント数）より大きくなったかを判断する。大きくなっていない場合には、処理は処理ブロック１９７０に進み、ｌｅｎｇｔｈの値をｉに追加する。さもなくば、処理は、処理ブロック１９４５に進み、ＤｅｓｔＡ[ｌｅｎｇｔｈ：０]をメモリポインタに格納する。処理ブロック１９５１で、ｌｅｎｇｔｈの値をｏｆｆｓｅｔの値から差し引く。処理ブロック１９５６で、ベクトルＡ[ｌｅｎｇｔｈ＋ｉ：ｉ]のエレメントを、更新されたマスクのマスキングされていない設定に従って圧縮フィルして、ＤｅｓｔＡ[ｌｅｎｇｔｈ：０]に格納する。処理ブロック１９６０で、メモリポンタをｌｅｎｇｔｈ分増分する（つまり、ベクトルエレメントが、４バイト長である場合には、メモリポインタの値をｌｅｎｇｔｈの値の４倍増分させる）。次に処理は処理ブロック１９７０に進み、値ｌｅｎｇｔｈをｉに追加する。そして処理ブロック１９７５で、ｉが最後のｉを超える値かを判断する。判断結果が肯定的である場合には、プロセスを完了させるために処理すべきエレメントの数が少しであることになり、処理ブロック１９８０となる。判断結果が否定的である場合には、処理は処理ブロック１９１５から繰り返す。
【０１３１】
上述したように、別の実施形態では、ベクトルデスティネーションが満杯になった場合にはコピーが停止されてよい。ベクトルソースからベクトルデスティネーションＤｅｓｔの隣接する連続したエレメント位置に、マスキングされていないベクトルエレメントをコピーした場合には、マスクの対応するフィールドの値も、マスキングされた値に変更してよい。したがいマスク値は、進捗状況及び／または完了を追跡するために利用することができ、満杯になったデスティネーションをメモリに格納した後で命令を再実行することができる。次いで、命令を、修正されたマスクとゼロのベクトルデスティネーションオフセットとを利用して再実行して、ベクトル圧縮及びローテート命令の実行がまだ必要なエレメントのみを圧縮する。
【０１３２】
図１９Ｂは、ベンチマークアプリケーションに、ベクトル圧縮及びローテート機能を提供するプロセス１９０２の別の一実施形態のフロー図を示す。プロセス１９０２の処理ブロック１９１１で、変数ｉをゼロ（０）に設定して、オフセットをゼロ（０）に設定して、最後のｉを、最後から、ベクトルレジスタのｌｅｎｇｔｈ分差し引いた値に設定する。処理ブロック１９１５で、ベクトルＴｏｐＶａｌ[ｌｅｎｇｔｈ：０] （たとえばベクトルレジスタ１５１０）の各エレメントの最上位の値ｖを、ベクトルＢ[ｌｅｎｇｔｈ＋ｉ：ｉ]の各エレメントに比較して、Ｂのエレメントが、最上位の値ｖ未満であるかを判断して、マスク(マスク１５２０など)を生成して、結果を格納する。処理ブロック１９２０で、マスクの、マスキングされていない値に設定されているビット数のカウントをｃｏｕｎｔに格納する。処理ブロック１９２６で、ベクトルＡ[ｌｅｎｇｔｈ＋ｉ：ｉ]のエレメントを、マスクのマスキングされていない設定に従って圧縮フィルして（compress filled）、ＤｅｓｔＡ[ｌｅｎｇｔｈ：ｏｆｆｓｅｔ]に格納する。そしてプロセス１９３１で、ｃｏｕｎｔの値をｏｆｆｓｅｔの値に追加する。
【０１３３】
処理ブロック１９４１で、ｏｆｆｓｅｔが長さｌｅｎｇｔｈを超えているかを判断する（つまり、ＤｅｓｔＡを保持するベクトルレジスタのエレメント数）。超えていない場合には、処理は処理ブロック１９７０に進み、ｌｅｎｇｔｈの値をｉに追加する。さもなくば、処理は、処理ブロック１９４５に進み、ＤｅｓｔＡ[ｌｅｎｇｔｈ：０]をメモリポインタに格納する。処理ブロック１９５１で、ｌｅｎｇｔｈの値をｏｆｆｓｅｔの値から差し引く。処理ブロック１９５６で、ベクトルＡ[ｌｅｎｇｔｈ＋ｉ：ｉ]のエレメントを、更新されたマスクのマスキングされていない設定に従って圧縮フィルして、ＤｅｓｔＡ[ｌｅｎｇｔｈ：０]に格納する。処理ブロック１９６０で、メモリポンタをｌｅｎｇｔｈ分増分する（つまり、ベクトルエレメントが、４バイト長である場合には、メモリポインタの値をｌｅｎｇｔｈの値の４倍増分させる）。次に処理は処理ブロック１９７０に進み、値ｌｅｎｇｔｈをｉに追加する。そして処理ブロック１９７５で、ｉが最後のｉを超える値かを判断する。判断結果が肯定的である場合には、プロセスを完了させるために処理すべきエレメントの数が少しであることになり、処理ブロック１９８０となる。判断結果が否定的である場合には、処理は処理ブロック１９１５から繰り返す。
【０１３４】
本発明の実施形態は、そうしなければ簡単にはベクトル化されないアプリケーション（たとえばＳＰＥＣベンチマークスイートの４４４．ＮＡＭＤの内部ループ等のベンチマークアプリケーション）にベクトル圧縮機能を提供するために利用されることで、外部メモリへの高価な連続した格納数を低減させ、性能を向上させ、使用電力を低減させることができる、ＳＩＭＤベクトル圧縮及びローテート命令に関する。一部の実施形態では、マスク値は、進捗状況及び／または完了を追跡するために利用することができ、満杯になったデスティネーションをメモリに格納した後で、修正されたマスクとゼロのオフセットとを利用して再実行して、まだベクトル圧縮及びローテート命令による圧縮が必要なエレメントのみを圧縮することができる。別の実施形態では、ベクトルデスティネーションのゼロのエレメントには、ベクトルソースからエレメントをコピーしない。
【０１３５】
ここで説明するメカニズムは、ハードウェア、ソフトウェア、ファームウェア、またはこれらの実装例の組み合わせで実装することができる。本発明の実施形態は、少なくとも１つのプロセッサ、記憶システム（揮発性及び不揮発性メモリ及び／または記憶エレメントを含む）、少なくとも１つの入力デバイス、及び、少なとも１つの出力デバイスを含むプログラム可能なシステムで実行されるコンピュータプログラムまたはプログラムコードとして実装されてよい。
【０１３６】
プログラムコードを入力命令に適用して、ここで記載する機能を実行して、出力情報を生成してよい。出力情報は、公知の方法で１以上の出力デバイスに適用してよい。本願においては、処理システムが、プロセッサ（たとえばデジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサ）有する任意のシステムを含む。
【０１３７】
プログラムコードは、高レベルプロシージャまたはオブジェクト指向プログラミング言語に実装されて、処理システムと通信してよい。プログラムコードはさらに、望ましい場合にはアセンブリまたは機械言語で実装されてよい。実際、ここに記載するメカニズムは、特定のプログラミング言語に限定はされない。いずれにしても、言語はコンパイルされた言語、またはインタープリタ型言語であってよい。
【０１３８】
少なくとも１つの実施形態の１以上の側面が、プロセッサ内の様々な論理を表す機械可読媒体に格納されている代表命令により実装されてもよく、これは機械により読み出されると、機械に、ここで記載する技術を実行する論理を製造させることができる。これらの表現は、「ＩＰコア」として知られており、有形の機械可読媒体（「テープ」）に格納され、様々な顧客または製造施設に送られ、実際に論理またはプロセッサを作成する製造機械に搭載されてよい。
【０１３９】
機械可読格納媒体は、限定ではないが、機械またはデバイスにより製造または構成される、非一時的、有形の構成の物品を含んでよい（これには、ハードディス等の記憶媒体、任意の他のタイプのディスクが含まれ、これらには、フロッピー（登録商標）ディスク、光学ディスク、ＣＤ−ＲＯＭ、ＣＤ−ＲＷ，及び光磁気ディスク、半導体デバイス（たとえばＲＯＭ、ＤＲＡＭ、ＳＲＡＭ等のＲＡＭ、ＥＰＲＯＭ、フラッシュメモリ、ＥＥＰＲＯＭ、磁気カードまたは光カード）、または任意の他のタイプの、電子命令を格納するのに適した媒体が含まれる。
【０１４０】
したがい、本発明の実施形態は、命令を含んだり、ここで記載する構造、回路、装置、プロセッサ、及び／またはシステムの特徴部を定義する設計データ（たとえばハードウェア記述言語（ＨＤＬ））を含んだりする非一時的、有形の機械可読媒体も含む。一部の実施形態は、プログラムプロダクトとも称される。
【０１４１】
場合によって、命令変換器は、命令を、ソース命令セットから対象命令セットに変換する。たとえば、命令変換器は、たとえば静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を利用する変換、変形（morph）、エミュレートすることもできるし、または、コアが処理する１以上の他の命令に命令を変換することもできる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装されてよい。命令変換器は、プロセッサにあっても、プロセッサ外にあっても、一部がプロセッサにあって一部がプロセッサ外にあってもよい。
【０１４２】
少なくとも１つの実施形態による１以上の命令を実行する技術を開示してきた。一部の実施形態は、添付図面に示されているが、これら実施形態は広義の発明の例示であり、広義の発明を限定するものではない。また、本開示を読んだ当業者には様々な他の変形例が自明であることから、本発明は、示され説明される具体的な構成及び構造に限定はされない。成長が速く、将来の進歩を簡単に予測できない技術分野においては、開示する実施形態は、本開示の原理または添付請求項の範囲から逸脱せずに、構造及び詳細について容易に修正することができる。
【図１Ａ】
2014089699.tif 000005
【図１Ｂ】
2014089699.tif 000006
【図１Ｃ】
2014089699.tif 000007
【図２】
2014089699.tif 000008
【図３Ａ】
2014089699.tif 000009
【図３Ｂ】
2014089699.tif 000010
【図３Ｃ】
2014089699.tif 000011
【図３Ｄ】
2014089699.tif 000012
【図３Ｅ】
2014089699.tif 000013
【図３Ｆ】
2014089699.tif 000014
【図３Ｇ】
2014089699.tif 000015
【図３Ｈ】
2014089699.tif 000016
【図４Ａ】
2014089699.tif 000017
【図４Ｂ】
2014089699.tif 000018
【図５】
2014089699.tif 000019
【図６】
2014089699.tif 000020
【図７】
2014089699.tif 000021
【図８】
2014089699.tif 000022
【図９】
2014089699.tif 000023
【図１０】
2014089699.tif 000024
【図１１】
2014089699.tif 000025
【図１２】
2014089699.tif 000026
【図１３】
2014089699.tif 000027
【図１４Ａ】
2014089699.tif 000028
【図１４Ｂ】
2014089699.tif 000029
【図１５Ａ】
2014089699.tif 000030
【図１５Ｂ】
2014089699.tif 000031
【図１６Ａ】
2014089699.tif 000032
【図１６Ｂ】
2014089699.tif 000033
【図１７】
2014089699.tif 000034
【図１８】
2014089699.tif 000035
【図１９Ａ】
2014089699.tif 000036
【図１９Ｂ】
2014089699.tif 000037
【外国語明細書】
2014089699000001.pdf