特許第5739961号(P5739961)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インテル・コーポレーションの特許一覧

特許5739961ベクトル圧縮及びローテート機能を提供する命令及び論理
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5739961
(24)【登録日】2015年5月1日
(45)【発行日】2015年6月24日
(54)【発明の名称】ベクトル圧縮及びローテート機能を提供する命令及び論理
(51)【国際特許分類】
   G06F 17/16 20060101AFI20150604BHJP
   G06F 9/315 20060101ALI20150604BHJP
   G06F 9/30 20060101ALI20150604BHJP
【FI】
   G06F17/16 J
   G06F17/16 E
   G06F17/16 D
   G06F9/30 340D
   G06F9/30 310A
【請求項の数】36
【外国語出願】
【全頁数】48
(21)【出願番号】特願2013-199971(P2013-199971)
(22)【出願日】2013年9月26日
(65)【公開番号】特開2014-89699(P2014-89699A)
(43)【公開日】2014年5月15日
【審査請求日】2013年9月27日
(31)【優先権主張番号】13/664,401
(32)【優先日】2012年10月30日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】龍華国際特許業務法人
(72)【発明者】
【氏名】ウリエル、タル
(72)【発明者】
【氏名】オウルド−アハムド−ヴァル、エルモウスタファ
(72)【発明者】
【氏名】バレンタイン、ロバート
【審査官】 篠塚 隆
(56)【参考文献】
【文献】 特開平1−284972(JP,A)
【文献】 特開平2−190968(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F9/30
9/305−9/308
9/315−9/34
9/35−9/355
9/40−9/42
17/00−17/18
(57)【特許請求の範囲】
【請求項1】
それぞれがベクトル内のエレメント位置に対応する第1の複数のデータフィールドを有するマスクレジスタと、
ベクトルソースオペランドと、前記マスクレジスタと、ベクトルデスティネーションオペランドと、ベクトルデスティネーションオフセットとを指定する第1の命令をデコードするデコードステージと、
1以上の実行ユニットと
を備え、
デコードされた前記第1の命令に呼応して、前記1以上の実行ユニットは、
前記マスクレジスタの前記第1の複数のデータフィールドの値を読み出し、
第1の値を持つ、前記マスクレジスタの前記第1の複数のデータフィールドのそれぞれについて、前記ベクトルソースオペランドから、対応するベクトルエレメントを、前記ベクトルデスティネーションオフセットの位置から始まる、前記ベクトルデスティネーションの隣接する連続したエレメント位置にコピーし、
前記ベクトルソースオペランドから、対応するベクトルエレメントをそれぞれ、前記ベクトルデスティネーションの隣接する連続したエレメント位置にコピーする際に、前記マスクレジスタの対応するデータフィールドの値が、前記第1の値から第2の値に変更される、プロセッサ。
【請求項2】
前記ベクトルソースオペランドからの前記対応するベクトルエレメントは、前記ベクトルデスティネーションのエレメント位置の総数を法とする、前記隣接する連続したエレメント位置にコピーされる、請求項1に記載のプロセッサ。
【請求項3】
前記第1の命令は、ベクトル圧縮及びローテート命令である、請求項2に記載のプロセッサ。
【請求項4】
前記対応するベクトルエレメントの、前記ベクトルソースオペランドからの、隣接する連続したエレメント位置へのコピーは、最上位のベクトルデスティネーションエレメント位置が満たされるまでしか行われない、請求項1から3のいずれか一項に記載のプロセッサ。
【請求項5】
前記第1の命令は、ベクトル圧縮、フィル及びローテート命令である、請求項4に記載のプロセッサ。
【請求項6】
前記第1の値は1である、請求項1から5のいずれか一項に記載のプロセッサ。
【請求項7】
前記第2の値はゼロである、請求項1から6のいずれか一項に記載のプロセッサ。
【請求項8】
前記ベクトルデスティネーションオペランドにコピーされるデータエレメントは32ビットのデータエレメントである、請求項1からのいずれか一項に記載のプロセッサ。
【請求項9】
前記ベクトルデスティネーションオペランドにコピーされるデータエレメントは、64ビットのデータエレメントである、請求項1からのいずれか一項に記載のプロセッサ。
【請求項10】
前記ベクトルデスティネーションオペランドは、128ビットのベクトルレジスタである、請求項1からのいずれか一項に記載のプロセッサ。
【請求項11】
前記ベクトルデスティネーションオペランドは、256ビットのベクトルレジスタである、請求項1からのいずれか一項に記載のプロセッサ。
【請求項12】
前記ベクトルデスティネーションオペランドは、512ビットのベクトルレジスタである、請求項1からのいずれか一項に記載のプロセッサ。
【請求項13】
プロセッサにより実行されると、前記プロセッサに、
マスクレジスタの第1の複数のデータフィールドの値を読み出す手順と、
第1の値を持つ、前記マスクレジスタの前記第1の複数のデータフィールドのそれぞれについて、ベクトルソースオペランドから、対応するベクトルエレメントを、ベクトルデスティネーションオフセットの位置から始まる、前記ベクトルデスティネーションの隣接する連続したエレメント位置にコピーする手順と、
前記ベクトルソースオペランドから、前記ベクトルデスティネーションの隣接する連続したエレメント位置にコピーされる対応するベクトルエレメントそれぞれについて、前記マスクレジスタの対応するデータフィールドの値を、前記第1の値から第2の値に変更する手順と
を実行させる、プログラム。
【請求項14】
前記ベクトルソースオペランドからの前記対応するベクトルエレメントは、前記ベクトルデスティネーションのエレメント位置の総数を法とする、隣接する連続したエレメント位置にコピーされる、請求項13に記載のプログラム。
【請求項15】
前記対応するベクトルエレメントの、前記ベクトルソースオペランドからの、前記ベクトルデスティネーションオフセットの位置から始まる、前記ベクトルデスティネーションの隣接する連続したエレメント位置へのコピーは、最上位のベクトルデスティネーションエレメント位置が満たされるまでしか行われない、請求項13または14に記載のプログラム。
【請求項16】
前記ベクトルデスティネーションに格納されるデータエレメントは32ビットのデータエレメントである、請求項13から15のいずれか一項に記載のプログラム。
【請求項17】
前記ベクトルデスティネーションに格納されるデータエレメントは、64ビットのデータエレメントである、請求項13から15のいずれか一項に記載のプログラム。
【請求項18】
前記ベクトルデスティネーションは、128ビットのベクトルレジスタである、請求項13から17のいずれか一項に記載のプログラム。
【請求項19】
前記ベクトルデスティネーションは、256ビットのベクトルレジスタである、請求項13から17のいずれか一項に記載のプログラム。
【請求項20】
前記ベクトルデスティネーションは、512ビットのベクトルレジスタである、請求項13から17のいずれか一項に記載のプログラム。
【請求項21】
ベクトルソースオペランドと、マスクレジスタと、ベクトルデスティネーションオペランドと、ベクトルデスティネーションオフセットとを特定する第1の単一命令複数データ命令(第1のSIMD命令)をデコードするデコードステージと、
1以上の実行ユニットと
を備え、
デコードされた前記第1のSIMD命令に呼応して、前記1以上の実行ユニットは、
前記マスクレジスタの第1の複数のデータフィールドの値を読み出し、
第1の値を持つ、前記マスクレジスタの前記第1の複数のデータフィールドのそれぞれについて、前記ベクトルソースからの対応するベクトルエレメントを、前記ベクトルデスティネーションオフセットの位置から始まる、前記ベクトルデスティネーションのエレメント位置の総数を法とする、前記ベクトルデスティネーションの隣接する連続したエレメント位置にコピーし、
前記ベクトルソースオペランドから、前記ベクトルデスティネーションの隣接する連続したエレメント位置にコピーされる対応するベクトルエレメントそれぞれについて、前記マスクレジスタの対応するデータフィールドの値を、前記第1の値から第2の値に変更する、プロセッサ。
【請求項22】
前記ベクトルデスティネーションは、128ビットのベクトルレジスタである、請求項21に記載のプロセッサ。
【請求項23】
前記ベクトルデスティネーションは、256ビットのベクトルレジスタである、請求項21に記載のプロセッサ。
【請求項24】
前記ベクトルデスティネーションは、512ビットのベクトルレジスタである、請求項21に記載のプロセッサ。
【請求項25】
ベクトルソースオペランドと、マスクレジスタと、ベクトルデスティネーションオペランドと、ベクトルデスティネーションオフセットとを指定する第1の単一命令複数データ命令(第1のSIMD命令)をデコードするデコードステージと、
1以上の実行ユニットと
を備え、
デコードされた前記第1のSIMD命令に呼応して、前記1以上の実行ユニットは、
前記マスクレジスタの第1の複数のデータフィールドの値を読み出し、
マスキングされていない値を持つ、前記マスクレジスタの前記第1の複数のデータフィールドのそれぞれについて、前記ベクトルソースから、対応するベクトルエレメントを、前記ベクトルデスティネーションオフセットの位置から始まる、前記ベクトルデスティネーションの隣接する連続したエレメント位置に、最上位のベクトルデスティネーションエレメント位置が満たされるまでに限りコピーし、
前記ベクトルソースから、前記ベクトルデスティネーションの隣接する連続したエレメント位置にコピーされた対応するベクトルエレメントそれぞれについて、前記マスクレジスタの対応するデータフィールドの値を、前記マスキングされていない値から、マスキングされている値に変更する、プロセッサ。
【請求項26】
前記マスキングされている値はゼロである、請求項25に記載のプロセッサ。
【請求項27】
メモリと、
複数のプロセッサと
を備え、
前記複数のプロセッサのそれぞれは、
ベクトルソースオペランドと、マスクレジスタと、ベクトルデスティネーションオペランドと、ベクトルデスティネーションオフセットとを指定する第1の単一命令複数データ命令(第1のSIMD命令)をデコードするデコードステージと、
1以上の実行ユニットと
を備え、
デコードされた前記第1のSIMD命令に呼応して、前記1以上の実行ユニットは、
前記マスクレジスタの第1の複数のデータフィールドの値を読み出し、
マスキングされていない値を持つ、前記マスクレジスタの前記第1の複数のデータフィールドのそれぞれについて、前記ベクトルソースからの対応するベクトルエレメントを、前記ベクトルデスティネーションオフセットの位置から始まる、前記ベクトルデスティネーションの隣接する連続したエレメント位置にコピーし、
前記ベクトルソースから、前記ベクトルデスティネーションの隣接する連続したエレメント位置にコピーされた対応するベクトルエレメントそれぞれについて、前記マスクレジスタの対応するデータフィールドの値を、前記マスキングされていない値から、マスキングされている値に変更する、処理システム。
【請求項28】
前記ベクトルソースからの前記対応するベクトルエレメントは、前記ベクトルデスティネーションのエレメント位置の総数を法とする、隣接する連続したエレメント位置にコピーされる、請求項27に記載の処理システム。
【請求項29】
前記第1のSIMD命令に呼応して、前記1以上の実行ユニットはさらに、
前記ベクトルソースからコピーされたベクトルエレメントに対応していないベクトルデスティネーションエレメントそれぞれについて、前記ベクトルデスティネーションエレメントの値をゼロにする、請求項27または28に記載の処理システム。
【請求項30】
前記ベクトルソースからの前記対応するベクトルエレメントは、前記ベクトルデスティネーションオフセットの位置から始まる隣接する連続したエレメント位置に、最上位のベクトルデスティネーションエレメント位置が満たされるまでに限りコピーされる、請求項27から29のいずれか一項に記載の処理システム。
【請求項31】
前記マスキングされている値はゼロである、請求項27から30のいずれか一項に記載の処理システム。
【請求項32】
前記ベクトルデスティネーションに格納されるデータエレメントは32ビットのデータエレメントである、請求項27から31のいずれか一項に記載の処理システム。
【請求項33】
前記ベクトルデスティネーションに格納されるデータエレメントは64ビットのデータエレメントである、請求項27から31のいずれか一項に記載の処理システム。
【請求項34】
前記ベクトルデスティネーションは128ビットのベクトルレジスタである、請求項27から33のいずれか一項に記載の処理システム。
【請求項35】
前記ベクトルデスティネーションは256ビットのベクトルレジスタである、請求項27から33のいずれか一項に記載の処理システム。
【請求項36】
前記ベクトルデスティネーションは512ビットのベクトルレジスタである、請求項27から33のいずれか一項に記載の処理システム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、プロセッサその他の処理論理に実行されると、論理的、数学的、その他の関数演算を実行する処理論理、マイクロプロセッサ、及び、関連する命令セットアーキテクチャに関する。特に、本開示は、ベクトル圧縮及びローテート機能を提供する命令及び論理に関する。
【背景技術】
【0002】
現代のプロセッサは、計算集約型ではあるが、様々なデータ記憶デバイス(たとえば、単一命令複数データ(SIMD)ベクトルレジスタ)を利用した効率的な実装によって実現可能な、ハイレベルな並列データを提供する演算を提供する命令を含んでいる場合が多い。ベクトル処理をサポートするために、中央処理装置(CPU)は並列ハードウェアを提供する。ベクトルは、複数の連続したデータエレメントを保持するデータ構造である。サイズがMのベクトルレジスタは、サイズがOのN個のベクトルエレメントを含むことができる(N=M/O)。たとえば64バイトのベクトルレジスタは、(a)各エレメントが1バイトを占有しているデータアイテムを保持する、64個のベクトルエレメント、(b)それぞれが2バイト(または1つの「ワード」)を占有するデータアイテムを保持する、32個のベクトルエレメント、(c)それぞれが4バイト(または1つの「ダブルワード」)を占有するデータアイテムを保持する、16個のベクトルエレメント、(d)それぞれが8バイト(または1つの「クワッドワード」)を占有するデータアイテムを保持する8個のベクトルエレメントに分割することができる。
【0003】
アプリケーションまたはソフトウェアコードのベクトル化は、アプリケーションに、たとえば幅の広いベクトルアーキテクチャ等の特定のシステムまたは命令セットアーキテクチャでコンパイル、インストール、及び/または実行を行わせることを含んでよい。
【0004】
コンピュータ産業は、アーキテクチャの効率及び計算技術(たとえばベクトル化、同時マルチスレッド、予測等)をテストするために、様々なプログラミングベンチマークを開発した。これらベンチマークの1つに、SPEC(標準性能評価法人(Standard Performance Evaluation Corporation))から入手可能なものがある。SPECのベンチマークは、プロセッサ及びプラットフォームアーキテクチャの性能を「基準に従って評価する("benchmark")」ために幅広く利用されている。SPECベンチマークを構成するプログラムは、産業の専門家によって、コンピュータの性能を高めるための新たなコンパイル及び計算技術を発見する試みのために、紹介、分析されている。SPECベンチマークスイートの一環として(CPU2006と称される)、システムのプロセッサ、メモリのサブシステム及びコンパイラを協調させるために選択される、整数及び浮動小数点の、CPU集約型のベンチマークが含まれている。CPU2006は、444.NAMDと称されるプログラムを含んでおり、これは、イリノイ大学Urbana−Champaign校の、理論、計算生物物理学グループのJim Phillips氏によって開発された大型の生体分子システムのシミュレーションと並列しているプログラムである、NAMDのデータ配置及び内部ループから導出される。NAMDのランタイムの殆ど全体が、小さな関数セットの原子間相互作用の計算に費やされる。このセットは、コードの塊から分離され、CPU2006のコンパクトなベンチマークを形成する。計算コアは、幅広い機械アーキテクチャで良好な性能を達成するが、プラットフォーム固有の最適化は含まない。
【0005】
NAMDプログラムは、2002年の、並列スケーラビリティのゴードンベル賞を受賞しているが、直列性能も同様に重要である。たとえばベンチマークの殆ど全ての並列部分をベクトル化すると、ベクトル化できない、直列の部分が、通常は、ベンチマークのランタイムのうちさらに重要な部分を表す。この状況は、高度な並列スケーラビリティをもつ計算集約型のプログラムの一般例として典型的である。ベクトル化を利用して殆どの並列部分を加速化した後で、プログラムのベクトル化できない、直列の部分の性能を向上させようとする際の、性能を制限する問題及びボトルネックが残存している。
【0006】
今日まで、これら性能を制限する問題及びボトルネックを解決する可能性のある解決法は適切に模索されていない。
【0007】
本発明は、添付図面によって制限ではなく、例示として図示される。
【図面の簡単な説明】
【0008】
図1A】ベクトル圧縮及びローテート機能を提供する命令を実行するシステムの一実施形態のブロック図である。
図1B】ベクトル圧縮及びローテート機能を提供する命令を実行するシステムの別の一実施形態のブロック図である。
図1C】ベクトル圧縮及びローテート機能を提供する命令を実行するシステムの別の一実施形態のブロック図である。
図2】ベクトル圧縮及びローテート機能を提供する命令を実行するプロセッサの一実施形態のブロック図である。
図3A】一実施形態におけるパッキングされたデータタイプを示す。
図3B】一実施形態におけるパッキングされたデータタイプを示す。
図3C】一実施形態におけるパッキングされたデータタイプを示す。
図3D】一実施形態におけるベクトル圧縮及びローテート機能を提供する命令エンコードを示す。
図3E】別の一実施形態におけるベクトル圧縮及びローテート機能を提供する命令エンコードを示す。
図3F】別の一実施形態におけるベクトル圧縮及びローテート機能を提供する命令エンコードを示す。
図3G】別の一実施形態におけるベクトル圧縮及びローテート機能を提供する命令エンコードを示す。
図3H】別の一実施形態におけるベクトル圧縮及びローテート機能を提供する命令エンコードを示す。
図4A】ベクトル圧縮及びローテート機能を提供する命令を実行するプロセッサマイクロアーキテクチャの一実施形態のエレメントを示す。
図4B】ベクトル圧縮及びローテート機能を提供する命令を実行するプロセッサマイクロアーキテクチャの一実施形態のエレメントを示す。
図5】ベクトル圧縮及びローテート機能を提供する命令を実行するプロセッサの一実施形態のブロック図である。
図6】ベクトル圧縮及びローテート機能を提供する命令を実行するコンピュータシステムの一実施形態のブロック図である。
図7】ベクトル圧縮及びローテート機能を提供する命令を実行するコンピュータシステムの別の一実施形態のブロック図である。
図8】ベクトル圧縮及びローテート機能を提供する命令を実行するコンピュータシステムの別の一実施形態のブロック図である。
図9】ベクトル圧縮及びローテート機能を提供する命令を実行するシステムオンチップの一実施形態のブロック図である。
図10】ベクトル圧縮及びローテート機能を提供する命令を実行するプロセッサの一実施形態のブロック図である。
図11】ベクトル圧縮及びローテート機能を提供するIPコア開発システムの一実施形態のブロック図である。
図12】ベクトル圧縮及びローテート機能を提供するアーキテクチャエミュレーションシステムの一実施形態を示す。
図13】ベクトル圧縮及びローテート機能を提供する命令を変換するシステムの一実施形態を示す。
図14A】ベクトル圧縮及びローテート機能を提供する命令の一実施形態のフロー図を示す。
図14B】ベクトル圧縮及びローテート機能を提供する命令の別の一実施形態のフロー図を示す。
図15A】ベクトル圧縮及びローテート機能を提供する命令を利用するプロセスの一実施形態のフロー図を示す。
図15B】ベクトル圧縮及びローテート機能を提供する命令を利用するプロセスの別の一実施形態のフロー図を示す。
図16A】ベクトル圧縮及びローテート機能を提供するプロセスの一実施形態のフロー図を示す。
図16B】ベクトル圧縮及びローテート機能を提供するプロセスの別の一実施形態のフロー図を示す。
図17】ベクトル圧縮及びローテート機能を提供するプロセスの別の一実施形態のフロー図を示す。
図18】ベンチマークアプリケーションに、ベクトル圧縮及びローテート機能を提供するプロセスの一実施形態のフロー図を示す。
図19A】ベンチマークアプリケーションに、ベクトル圧縮及びローテート機能を提供するプロセスの一実施形態のフロー図を示す。
図19B】ベンチマークアプリケーションに、ベクトル圧縮及びローテート機能を提供するプロセスの別の一実施形態のフロー図を示す。
【発明を実施するための形態】
【0009】
以下の記載では、ベクトル圧縮及びローテート機能をプロセッサ、コンピュータシステム、その他の処理装置内で、またはこれらに関連して提供する命令及び処理論理を開示する。
【0010】
ここでは、ベクトル圧縮及びローテート機能を提供する命令及び論理を開示する。一部の実施形態では、ベクトルソース、マスク、ベクトルデスティネーション、及びデスティネーションオフセットを指定する命令に呼応して、マスクを読み出し、対応するマスキングされていないベクトルエレメントを、ベクトルソースから、ベクトルデスティネーションオフセットの位置から始まる、ベクトルデスティネーションの隣接する連続した位置にコピーする。別の実施形態では、ベクトルソースからエレメントがコピーされないベクトルデスティネーションのゼロエレメントが開示される。一部の実施形態では、ベクトルソースからのマスキングされていないベクトルエレメントは、ベクトルデスティネーションのエレメント位置の総数を法とする、隣接する連続したエレメント位置にコピーされる。一部の別の実施形態では、コピーは、ベクトルデスティネーションが満杯になると終了する。マスキングされていないベクトルエレメントを、ベクトルソースから、ベクトルデスティネーションの隣接する連続したエレメント位置にコピーする際に、マスクの対応するフィールドの値も、マスキングされた値に変更されてよい。したがって、マスク値は、進捗状況及び/または完了を追跡するために利用することができ、満杯になったデスティネーションをメモリに格納した後で命令を再実行することができる。次いで、命令を、修正されたマスクとゼロのベクトルデスティネーションオフセットとを利用して再実行して、ベクトル圧縮及びローテート命令の実行がまだ必要なエレメントのみを圧縮して、命令のスループットを向上させることができる。
【0011】
SIMD圧縮及びローテート命令は、そうしなければ簡単にはベクトル化されないアプリケーション(たとえばSPECベンチマークスイートの444.NAMDの内部ループ等)にベクトル圧縮機能を提供するために利用できることが知られており、こうすることにより、外部メモリへの高価な連続した格納数を低減させ、性能及び命令スループットを向上させ、使用電力を低減させることができる。
【0012】
以下の記載では、処理論理、処理タイプ、マイクロアーキテクチャ条件、イベント、イネーブルメカニズム等の数多くの具体的な詳細を述べて、本発明の実施形態の完全な理解を提供する。しかし、当業者であれば本発明を、これら具体的な詳細なしに実行可能であることを理解する。加えて、公知の構造、回路等は詳細に示すのを避けて、本発明の実施形態を不当にあいまいにしないようにしている場合もあることも理解されたい。
【0013】
以下の記載は、プロセッサに関して記載されるが、他の実施形態は任意の他の種類の集積回路及び論理デバイスに利用可能である。本発明の実施形態の同様の技術及び教示は、パイプラインスループットを向上させ性能を高めることで利益を享受しうる他のタイプの回路または半導体デバイスにも応用可能である。本発明の実施形態の教示は、データ操作を実行するいずれのプロセッサまたは機械にも応用可能である。しかし本発明は、512ビット、256ビット、128ビット、64ビット、32ビット、または16ビットのデータオペレーションを実行するプロセッサまたは機械に限定されず、データの操作及び管理を実行するいずれのプロセッサ及び機械に対しても応用することができる。加えて、以下の記載は例示を提供しており、添付図面は図示の目的から様々な例を提示する。しかし、これらの例は、単に本発明の実施形態の例を提供する意図をもつのであって、本発明の実施形態について可能性のあるすべての実施形態の網羅的なリストを提供する意図はないので、限定的にとらえられるべきではない。
【0014】
以下の例は、実行ユニット及び論理回路のコンテキストから、命令処理及び配信について記載しているが、本発明の他の実施形態は、機械により実行されると、機械に本発明の少なくとも1つの実施形態に従った機能を実行させることができる、機械可読有形媒体に格納されているデータまたは命令によって実行されてもよい。一実施形態では、本発明の実施形態に関する機能は、機械実行可能な命令によって実現される。命令は、命令をプログラミングされた汎用または専用プロセッサに、本発明の各ステージを実行させる。本発明の実施形態は、コンピュータ(またはその他の電子デバイス)を、本発明の実施形態の1以上のオペレーションを実行させるようにプログラミングするために利用されてよい命令が格納された機械またはコンピュータ可読媒体を含んでよいコンピュータプログラムプロダクトまたはソフトウェアとして提供されてよい。または、本発明の実施形態の各ステージが、各ステージを実行するための固定関数(fixed-function)論理を含む具体的なハードウェアコンポーネントにより実行されてもよいし、プログラミングされたコンピュータコンポーネントと固定関数ハードウェアコンポーネントの任意の組み合わせにより実行されてもよい。
【0015】
本発明の実施形態を実施するための論理をプログラミングするために利用される命令は、システムのメモリ(たとえばDRAM、キャッシュ、フラッシュメモリ、その他のストレージ)に格納されてもよい。さらに命令は、他のコンピュータ可読媒体によってまたはネットワーク経由で配信されてよい。したがって、機械可読媒体は、機械(たとえばコンピュータ)が可読な形態の命令を格納または送信する任意のメカニズムを含んでよく、フロッピー(登録商標)ディスク、光ディスク、CD、CD−ROM,光磁気ディスク、ROM、RAM、EPROM、EEPROM、磁気カードまたは光カード、フラッシュメモリ、または有形の、機械可読記憶媒体(電気、光、音響その他の形態の伝播信号(たとえば搬送波、赤外線信号、デジタル信号等)によってインターネット経由で情報を送信するために利用される)に限定はされない。したがって、コンピュータ可読媒体は、機械が可読な形態で電子命令または情報を格納または送信するのに適した任意のタイプの有形の機械可読媒体を含む。
【0016】
設計は、作成、シミュレーション、製造といった様々なステージを経ることができる。設計を表すデータは、複数の方法で設計を表すことができる。まず、シミュレーションに適しているが、ハードウェアを、ハードウェア記述言語あるいは別の機能記述言語を利用して表すことができる。加えて、論理及び/またはトランジスタゲートを持つ回路レベルのモデルを設計プロセスのあるステージで生成することができる。さらに、殆どの設計は、あるステージで、ハードウェアモデルの様々なデバイスの物理的配置を表すレベルのデータに到達する。従来の半導体製造技術を利用するケースでは、ハードウェアモデルを表すデータは、集積回路を製造するために利用されるマスクのための様々なマスクレイヤの様々な特徴の存在または不在を示すデータであってよい。設計のいずれの表現においても、データは、機械可読媒体の任意の形態で格納されてもよい。ディスク等のメモリまたは磁気もしくは光ストレージは、情報の送信のために変調された、または生成された光波または電気波で送信される情報を格納するための機械可読媒体であってよい。コードまたは設計を搬送するまたは示す電気搬送波が送信される場合、電気信号のコピー、バッファリング、または再送信に関しては、新たなコピーを作成する。したがって通信プロバイダまたはネットワークプロバイダは、少なくとも一時的に、本発明の実施形態の技術を利用して、搬送波に符号化された情報等の物品を有形の機械可読媒体に格納してよい。
【0017】
現代のプロセッサでは、複数の異なる実行ユニットを利用して、様々なコード及び命令が処理、実行される。これら命令の全てが、同じように生成されているわけではない、というのも、これらのうち早く完了するものもあるが、完了させるために多数のクロックサイクルを必要とするものもあるからである。命令のスループットが速いほど、プロセッサの性能全体もよくなる。したがって、なるべく命令を高速で実行させるとよい。しかし、命令の中には、複雑性が高く、多くの実行時間及びプロセッサリソースが必要となるものもある。たとえば浮動小数点命令、ロード/格納演算、データの移動等がこれに相当する。
【0018】
より多くのコンピュータシステムがインターネット、テキスト及びマルチメディアアプリケーションで利用されるようになるにつれ、さらなるプロセッサのサポートが導入されてきた。一実施形態では、命令セットは、1以上のコンピュータアーキテクチャ(たとえば、データタイプ、命令、レジスタアーキテクチャ、アドレスモード、メモリアーキテクチャ、割り込み及び例外の処理、外部入出力(I/O))と関連付けられてよい。
【0019】
一実施形態では、命令セットアーキテクチャ(ISA)は、1以上の命令セットを実装するために利用されるプロセッサ論理及び回路を含む1以上のマイクロアーキテクチャにより実装されてよい。したがい、異なるマイクロアーキテクチャをもつプロセッサは、共通の命令セットの少なくとも一部を共有してよい。たとえばIntel(登録商標)Pentium(登録商標)4プロセッサ、Intel(登録商標)Core(登録商標)プロセッサ、及び、カリフォルニア州のSynnyvaleのAdvanced Micro Devices社製のプロセッサなどが、x86命令セットに略等しいバージョンを実装している(新しいバージョンでは拡張部も加えられている)が、内部設計は異なっている。同様に、他の開発業者(たとえばARM Holdings ,LTD.,MIPS)または彼らのライセンシーまたは採用会社(adopter)が、共通の命令セットの少なくとも一部ではあるが、プロセッサの設計は異ならせて、共有している、という事例がある。たとえばISAの同じレジスタアーキテクチャを、新たな、または公知の技術を利用して(たとえば、専用物理レジスタ、レジスタリネームメカニズム(たとえばRegister Alias Table(RAT)、Reorder Buffer(ROB)、及び退避レジスタファイル)を利用する1以上の動的割り当てされた物理レジスタ)異なるマイクロアーキテクチャで異なる方法で実装することができる。一実施形態では、レジスタは1以上のレジスタ、レジスタアーキテクチャ、レジスタファイル、その他、ソフトウェアプログラムによりアクセス可能であってもなくてもよい他のレジスタセットを含んでよい。
【0020】
一実施形態では、命令は、1以上の命令フォーマットを含んでよい。一実施形態では、命令フォーマットは、特に実行するオペレーション及びオペレーションを実行するオペランドを指定する様々なフィールド(ビット数、ビット位置等)を示すことができる。命令フォーマットの一部は、さらに、命令テンプレート(またはサブフォーマット)により破壊定義(broken defined)されてもよい。たとえば、ある命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義されていてもよいし、及び/または、異なる割り込みを行われたフィールドを有するように定義されていてもよい。一実施形態では、命令は、命令フォーマットを利用して(さらに、定義されている場合には命令フォーマットの命令テンプレートの一定のフォーマットで)表され、オペレーション及びオペレーションが行われるオペランドを示したり、指定したりする。
【0021】
科学的な、金融関係の、自動ベクトル化汎用RMS(認識、マイニング、及び合成:recognition, mining, and synthesis)及び視覚的及びマルチメディアアプリケーション(たとえば2D/3Dグラフィック、画像処理、ビデオ圧縮/伸張、音声認識アルゴリズム及び音声操作)において、多数のデータアイテムに対して同じオペレーションが行われる必要があるだろう。一実施形態では、単一命令複数データ(SIMD)が、プロセッサに複数のデータエレメントにオペレーションを行わせるタイプの命令のことを指す。SIMD技術は、レジスタのビットを複数の固定サイズまたは可変サイズのデータエレメントに分割することができるプロセッサで利用することができる(各データエレメントは、別の値を表している)。たとえば一実施形態では、64ビットレジスタのビットは、4つの別個の16ビットのデータエレメント(これらそれぞれは、別々の16ビットの値を表している)を含むソースオペランドとして組織化されていてよい。このタイプのデータは、「パッキングされた」データタイプまたは「ベクトル」データタイプと称されてよく、このタイプのデータのオペランドは、パッキングされたデータオペランドまたはベクトルオペランドと称される。一実施形態では、パッキングされたデータアイテムまたはベクトルは、1つのレジスタに格納されている一連のパッキングされたデータエレメントであり、パッキングされたデータオペランドまたはベクトルオペランドは、SIMD命令のソースまたはデスティネーションオペランド(または、「パッキングされたデータ命令」または「ベクトル命令」)であってよい。一実施形態では、SIMD命令は、2つのソースベクトルオペランドに対して実行すべき1つのベクトルオペレーションを指定して、同じまたは異なるサイズであり、同じまたは異なる数のデータエレメントであり、同じまたは異なるデータエレメントの順序を持つ、デスティネーションベクトルオペランドを生成する(結果ベクトルオペランドと称される場合もある)。
【0022】
x86、MMX(登録商標)、ストリーミングSIMD拡張(SSE)、SSE2、SSE3、SSE4.1、及びSSE4.2命令を含む命令セットをもつIntel(登録商標)Core(登録商標)ロセッサ、ベクトル浮動小数点(VFP)及び/またはNEON命令を含む命令セットをもつARM Cortex(登録商標)プロセッサファミリー等のARMプロセッサ、及び、中国科学アカデミーのICT(Institute of Computing Technology)が開発したLoongsonプロセッサファミリー等のMIPSプロセッサ等によって利用されているものに代表されるSIMD技術は、アプリケーション性能を顕著に向上させた(Core(登録商標)及びMMX(登録商標)は、カリフォルニア州サンタクララのIntel Corporation社の登録商標または商標である)。
【0023】
一実施形態では、デスティネーション及びソースレジスタ/データは、対応するデータまたはオペレーションのソース及びデスティネーションを表す一般名称である。一部の実施形態では、これらは、レジスタ、メモリ、記述されるものと異なる命令または機能をもっているその他の格納領域で実装されてもよい。たとえば一実施形態では、「DEST1」は、一時的な格納レジスタその他の格納領域であってよく、一方で、「SRC1」「SRC2」は、第1及び第2のソース格納レジスタ、その他の格納領域であってもよい、等である。他の実施形態では、SRC及びDEST格納領域の2以上が、同じ格納領域(たとえばSIMDレジスタ)内の異なるデータ格納エレメントに対応していてよい。一実施形態では、ソースレジスタの1つが、たとえばあるデスティネーションレジスタにサービス提供している2つのソースレジスタのいずれかへの第1及び第2のソースデータに対してオペレーションを実行した結果を書き戻すことで、デスティネーションレジスタとして動作してもよい。
【0024】
図1Aは、本発明の一実施形態における、命令を実行するための実行ユニットを含むプロセッサで構成されるコンピュータシステムの一例のブロック図である。システム100は、この実施形態で記載されている実施形態等の本発明におけるデータを処理するアルゴリズムを実行するための論理を含む実行ユニットを利用するコンポーネント(たとえばプロセッサ102)を含む。システム100は、カリフォルニア州のサンタクララのIntel Corporationから入手可能なPENTIUM(登録商標)III,PENTIUM(登録商標)4、Xeon(登録商標)、Itanium(登録商標)、XScale(登録商標)、及び/またはStrong ARM(登録商標)マイクロプロセッサに基づくプロセッサシステムを表しているが、他のシステム(他のマイクロプロセッサ、エンジニアリングワークステーション、セットトップボックス等を含む)を利用することもできる。一実施形態では、サンプルのシステム100は、ワシントン州のRedmondのMicrosoft Corporationから入手可能なWindows(登録商標)オペレーティングシステムのあるバージョンを実行してよいが、他のオペレーティングシステム(UNIX(登録商標)及びLinux(登録商標))、エンベデッドソフトウェア、及び/または、グラフィックユーザインタフェースを利用してもよい。したがって本発明の実施形態は、ハードウェア回路及びソフトウェアの特定の組み合わせに限定はされない。
【0025】
実施形態はコンピュータシステムに限定はされない。本発明の別の実施形態は、ハンドヘルドデバイス及びエンベデッドアプリケーション等の他のデバイスで利用することができる。ハンドヘルドデバイスの一部の例には、携帯電話器、インターネットプロトコルデバイス、デジタルカメラ、情報携帯端末(PDA)、及びハンドヘルドPCが含まれる。エンベデッドアプリケーションは、マイクロコントローラ、デジタル信号プロセッサ(DSP)、システムオンチップ、ネットワークコンピュータ(NetPC)、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク(WAN)スイッチ、または少なくとも1つの実施形態の1以上の命令を実行することができる1以上の他のシステムを含んでよい。
【0026】
図1Aは、本発明の一実施形態における少なくとも1つの命令を実行するアルゴリズムを実行する1以上の実行ユニット108を含むプロセッサ102で構成されたコンピュータシステム100のブロック図である。一実施形態は、シングルプロセッサデスクトップまたはサーバシステムのコンテキストで記載されてよいが、別の実施形態は、マルチプロセッサシステムに含めることもできる。システム100は、「ハブ」システムアーキテクチャの一例である。コンピュータシステム100は、データ信号を処理するプロセッサ102を含む。プロセッサ102は、CISC(複合命令セットコンピュータ:complex instruction set computer)マイクロプロセッサ、RISC(低減命令セット計算:reduced instruction set computing)マイクロプロセッサ、VLIW(超長命令語:Very Long Instruction Word)マイクロプロセッサ、命令セットの組み合わせを実装するプロセッサ、または任意の他のプロセッサデバイス(たとえばデジタル信号プロセッサなど)を含む。プロセッサ102は、プロセッサ102とシステム100の他のコンポーネントとの間でデータ信号を伝達することができるプロセッサバス110に連結されている。システム100の各エレメントは、当業者であればよくわかっている銘々の従来の機能を果たす。
【0027】
一実施形態では、プロセッサ102は、レベル1(L1)内部キャッシュメモリ104を含む。アーキテクチャによって、プロセッサ102は、1つの内部キャッシュまたは複数レベルの内部キャッシュを有してよい。または、別の実施形態では、キャッシュメモリがプロセッサ102の外部に存在していてもよい。他の実施形態としてさらに、特定の実装及び需要に応じて、内部キャッシュ及び外部キャッシュ両方の組み合わせを含んでもよい。レジスタファイル106は、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、及び命令ポインタレジスタを含む様々なレジスタに様々なタイプのデータを格納することができる。
【0028】
整数及び浮動小数点演算を実行する論理を含む実行ユニット108も、プロセッサ102に存在している。プロセッサ102はさらに、一定のマクロ命令のためのマイクロコードを格納するマイクロコード(μコード)ROMを含んでいる。一実施形態では、実行ユニット108は、パッキング命令セット109を処理する論理を含む。パッキングされた命令セット109を、命令を実行する関連回路とともに、汎用プロセッサ102の命令セット内に含むことで、多くのマルチメディアアプリケーションが利用するオペレーションを、汎用プロセッサ102にパッキングされているデータを利用して実行することができる。したがって、パッキングされたデータのオペレーションを実行するためにプロセッサデータバスの全幅を利用することで、多くのマルチメディアアプリケーションを加速化してより効率的に実行することができる。これにより、1つのデータエレメントについて一度に1以上のオペレーションを実行するために、プロセッサのデータバスで、いくつも小さな単位のデータを送信する必要性がなくなる。
【0029】
実行ユニット108の別の実施形態はマイクロコントローラ、エンベデッドプロセッサ、グラフィックデバイス、DSP、その他のタイプの論理回路でも利用することができる。システム100は、メモリ120を含む。メモリ120は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、その他のメモリデバイスであってよい。メモリ120は、プロセッサ102によって実行可能なデータ信号により表される命令及び/またはデータを格納してよい。
【0030】
システム論理チップ116は、プロセッサバス110及びメモリ120に連結されている。図示されている実施形態ではシステム論理チップ116はメモリコントローラハブ(MCH)である。プロセッサ102は、プロセッサバス110を介してMCH116と通信することができる。MCH116は、命令及びデータの格納、及び、グラフィックコマンド、データ、テクスチャの格納のために、メモリ120に広帯域メモリ経路118を提供する。MCH116は、データ信号をプロセッサ102、メモリ120、及びシステム100の他のコンポーネントの間に方向づけ、データ信号をプロセッサバス110、メモリ120、及びシステムI/O122の間でブリッジする。一部の実施形態では、システム論理チップ116は、グラフィックコントローラ112に連結するためのグラフィックポートを提供することができる。MCH116は、メモリインタフェース118を介してメモリ120に連結されている。グラフィックカード112は、アクセラレーテッドグラフィックポート(AGP)インターコネクト114経由でMCH116に連結されている。
【0031】
システム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デバイス、フラッシュメモリデバイス、その他の大容量記憶デバイスを含んでよい。 システムの他の実施形態としては、一実施形態の命令をシステムオンチップ(a system on a chip)で利用することができる。システムオンチップの一実施形態は、プロセッサとメモリとを含む。あるシステムのメモリはフラッシュメモリである。フラッシュメモリは、プロセッサ及びその他のシステムコンポーネントと同じダイに位置させることができる。加えて、メモリコントローラまたはグラフィックコントローラ等の他の論理ブロックもシステムオンチップに配置してよい。
【0032】
図1Bは、本発明の一実施形態の原理を実装するデータ処理システム140を示す。当業者であれば、ここに記載される実施形態を、本発明の実施形態の範囲を逸脱せずに別の処理システムで利用することも可能であることを理解するだろう。
【0033】
コンピュータシステム140は、一実施形態における少なくとも1つの命令を実行することのできる処理コア159を含む。一実施形態では、処理コア159は、任意のタイプのアーキテクチャ(CISC,RISC,またはVLIWタイプのアーキテクチャが含まれるがこれらに限定はされない)の処理ユニットを表していてよい。処理コア159は、さらに、1以上の処理技術での製造に適したものであってよく、十分な詳細を機械可読媒体に提示することで、その製造に適したものであってよい。
【0034】
処理コア159は、実行ユニット142、レジスタファイルセット145、及び、デコーダ144を含む。処理コア159はさらに、本発明の実施形態を理解するためには必要のないさらなる回路(不図示)を含む。実行ユニット142は、処理コア159が受信する命令を実行するために利用される。通常のプロセッサ命令の実行に加えて、実行ユニット142は、パッキングされたデータフォーマットにオペレーションを実行するために、パッキングされた命令セット143の命令を実行することができる。パッキングされた命令セット143は、本発明の実施形態及び他のパッキングされた命令を実行するための命令を含む。実行ユニット142は、内部バスによってレジスタファイル145に連結されている。レジスタファイル145は、情報(データを含む)を格納するための処理コア159上の格納領域を表す。前に述べたように、パッキングされたデータを格納するために利用される格納領域は重要ではない。実行ユニット142は、レジスタファイル144に連結されている。デコーダ144は、プロセッサコア159が受信する命令を、制御信号及び/またはマイクロコードエントリポイントにデコードするために利用される。これら制御信号及び/またはマイクロコードエントリポイントに呼応して、実行ユニット142は、適切なオペレーションを実行する。一実施形態では、デコーダは、命令のオペコードを解釈するために利用され、これは、どのオペレーションを、命令内に示されている対応するデータに行うべきかを示す。
【0035】
処理コア159は、様々な他のシステムデバイスと通信するためにバス141に連結されており、様々な他のシステムデバイスには、これらに限定はされないが、シンクロノス・ダイナミックランダムアクセスメモリ(SDRAM)制御146、SRAM制御147、バーストフラッシュメモリインタフェース148、PCMCIA(personal computer memory card international association)/コンパクトフラッシュ(登録商標)(CF)カード制御149、液晶ディスプレイ(LCD)制御150、直接メモリアクセス(DMA)コントローラ151、及び、別のバスマスターインタフェース152が含まれてよい。一実施形態では、データ処理システム140は、さらに、様々なI/OデバイスとI/Oバス153経由で通信するためのI/Oブリッジ154を含んでよい。これらI/Oデバイスには、これらに限定はされないが、UART(汎用非同期送受信回路:universal asynchronous receiver/transmitter)155、USB156、Bluetooth(登録商標)無線UART157及びI/O拡張インタフェース158を含んでよい。
【0036】
データ処理システム140の一実施形態は、モバイル、ネットワーク及び/または無線型の通信を提供し、プロセッサコア159は、テキストストリング比較演算を含むSIMD演算を実行することができる。処理コア159は、様々なオーディオ、ビデオ、撮像及び通信アルゴリズム(Walsh―Hadamard変換、高速フーリエ変換(FFT)、離散コサイン変換(DCT)を含む離散変換、及びこれらそれぞれの逆変換、色空間変換、ビデオエンコードにおける動き推定(video encode motion estimation)またはビデオデコードにおける動き補償(video decode motion compensation)等の圧縮/伸張技術、及びパルス符号変調(PCM)等の変調/復調(MODEM)機能を含む)でプログラミングされてよい。
【0037】
図1Cは、ベクトル圧縮及びローテート機能を提供する命令を実行することのできるデータ処理システムの別の一実施形態を示す。1つの別の実施形態では、データ処理システム160は、メインプロセッサ166、SIMDコプロセッサ161、キャッシュメモリ167、及び入出力システム168を含んでよい。入出力システム168は、無線インタフェース169に連結されていてもよい。SIMDコプロセッサ161は、一実施形態における命令を含むオペレーションを実行することができる。処理コア170は、1以上の処理技術での製造に適したものであってよく、十分な詳細を機械可読媒体に提示することで、プロセッサコア170を含むデータ処理システム160の全てまたは一部を製造するために適したものであってよい。
【0038】
一実施形態では、SIMDコプロセッサ161は、実行ユニット162とレジスタファイルセット164とを含む。メインプロセッサ166の一実施形態は、実行ユニット162が実行する一実施形態における命令を含む命令セット163の命令を認識するデコーダ165を含む。別の実施形態では、SIMDコプロセッサ161は、さらに、命令セット163の命令をデコードするデコーダ165Bの少なくとも一部を含んでいる。処理コア170は、さらに、本発明の実施形態の理解には不要なさらなる回路(不図示)を含んでいる。
【0039】
動作において、メインプロセッサ166は、キャッシュメモリ167及び入出力システム168との交信を含む一般的なタイプのデータ処理オペレーションを制御するデータ処理命令ストリームを実行する。データ処理命令ストリームには、SIMDコプロセッサ命令が埋め込まれている。メインプロセッサ166のデコーダ165は、これらSIMDコプロセッサ命令を、取り付けられているSIMDコプロセッサ161が実行すべきタイプであると認識する。したがい、メインプロセッサ166は、これらSIMDコプロセッサ命令(または、SIMDコプロセッサ命令を表す制御信号)をコプロセッサバス171に発行して、ここから、任意の取り付けられているSIMDコプロセッサによって受信される。このケースでは、SIMDコプロセッサ161は、自身を宛先として受信されたSIMDコプロセッサ命令を受け付けて実行する。
【0040】
データは、SIMDコプロセッサ命令による処理を受けるために無線インタフェース169経由で受信される。一例では、音声通信が、デジタル信号の形態で受信されてよく、これは、SIMDコプロセッサ命令による処理を受けて、音声通信を表すデジタルオーディオサンプルを再生する(regenerate)。別の例としては、圧縮されたオーディオ及び/またはビデオがデジタルビットストリームの形態で受信されてよく、これは、SIMDコプロセッサ命令の処理を受けることで、デジタルオーディオサンプル及び/または動きビデオフレームを再生することができる。処理コア170の一実施形態では、メインプロセッサ166及びSIMDコプロセッサ161が、実行ユニット162、レジスタファイルセット164、及びデコーダ165を含む1つの処理コア170に統合されて、一実施形態における命令を含む命令セット163の命令を認識する。
【0041】
図2は、本発明の一実施形態における命令を実行する論理回路を含むプロセッサ200のマイクロアーキテクチャのブロック図である。一部の実施形態では、一実施形態における命令が、バイト、ワード、ダブルワード、クワッドワード等のサイズを有するデータエレンメントで動作するよう実装可能である。一実施形態では、インオーダフロントエンド201が、実行される命令をフェッチして、これらが後で、プロセッサパイプラインで利用されるように準備するプロセッサ200の一部である。フロントエンド201は、いくつかのユニットを含んでよい。一実施形態では、命令プリフェッチャ226が、メモリから命令をフェッチして、命令デコーダ228に供給して、デコーダ228が、これらをデコードして解釈する。たとえば一実施形態では、デコーダは、受信した命令を、機械が実行可能な「マイクロ命令」または「マイクロオペレーション」と称される1以上のオペレーションにデコードする。他の実施形態では、デコーダは、命令を、マイクロアーキテクチャが利用するオペコード及び対応するデータ及び制御フィールドにパースして、一実施形態のオペレーションを実行する。一実施形態では、トレースキャッシュ230が、デコードされたμopをとり、μopキュー234に、プログラムが順序付けたシーケンスまたはトレースにアセンブルして、実行に備えさせる。トレースキャッシュ230が複合命令に遭遇すると、マイクロコードROM232は、オペレーションを完了させるために必要なμopを提供する。
【0042】
一部の命令は1つのマイクロオペレーション(micro-op)に変換され、他の命令は、オペレーション全体を完了させるためにマイクロオペレーションをいくつか必要とする。一実施形態では、4を超える数のマイクロオペレーションが1つの命令を完了させるために必要な場合には、デコーダ228は、マイクロコードROM232にアクセスして、命令を行う。一実施形態では、命令は、命令デコーダ228で処理されるための少数のマイクロオペレーションにデコードすることができる。別の実施形態では、あるオペレーションを達成するために複数のマイクロオペレーションが必要となる場合には、マイクロコードROM232内に命令を格納する必要がある。トレースキャッシュ230は、マイクロコードROM232から、一実施形態における1以上の命令を完了させるためにマイクロコードシーケンスを読み出すための正確なマイクロ命令ポインタを決定するエントリポイントのプログラマブル論理アレイ(PLA)のことである。マイクロコードROM232が、1つの命令のマイクロオペレーションの順序づけ(sequencing)を完了すると、機械のフロントエンド201は、トレースキャッシュ230からマイクロオペレーションのフェッチを再開する。
【0043】
アウトオブオーダ実行エンジン203は、命令が実行のために準備されるところである。アウトオブオーダ実行論理は、パイプラインを流れ、実行のためにスケジューリングされる間に、性能を最適化するために命令フローを平滑化してリオーダするための複数のバッファを有している。アロケータ論理は、各μopが実行するために必要とする機械バッファとリソースとを割り当てる。レジスタリネーム論理は、論理レジスタを、レジスタファイルのエントリにリネームする。アロケータはさらに、命令スケジューラ、メモリスケジューラ、高速スケジューラ202、遅い/一般的な浮動小数点スケジューラ204、及び単純な浮動小数点スケジューラ206の前にある、2つのμopキュー(1つがメモリオペレーション用、1つが非メモリオペレーション用)の1つに各μopのエントリを割り当てる。μopスケジューラ202、204、206は、μopが実行準備完了するときを、依存している入力レジスタオペランドソースの準備ができているか、及びμopが自身のオペレーションを完了させるために必要とする実行リソースが利用可能か、に基づいて判断する。一実施形態の高速スケジューラ202は、主要なクロックサイクルの各半分でスケジューリングすることができ、他のスケジューラは、主要なプロセッサクロックサイクル1つについて一度だけスケジューリングすることができる。スケジューラは、実行のためにμopをスケジュールするために、ディスパッチポートの問題を解決する。
【0044】
実行ブロック211で、レジスタファイル208、210は、スケジューラ202、204、206、及び、実行ユニット212、214、216、218、220、222、224の間にある。整数演算及び浮動小数点演算それぞれについて別個のレジスタファイル208、210が存在している。一実施形態の各レジスタファイル208、210は、新たな依存μopへのレジスタファイルに書き込みがまだ行われていない、今完了したばかりの結果をバイパスしたり、転送したりするバイパスネットワークも含む。整数レジスタファイル208及び浮動小数点レジスタファイル210はさらに、互いにデータを通信することができる。一実施形態では、整数レジスタファイル208は、2つのレジスタファイルに分割され、1つのレジスタファイルがデータの下位32ビット用であり、第2のレジスタファイルが、データの上位32ビット用である。一実施形態の浮動小数点レジスタファイル210は、浮動小数点命令が通常64から128ビット幅であるために、128ビット幅のエントリを有している。
【0045】
実行ブロック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は、除算、平方根、及び剰余のマイクロオペレーション(remainder micro-ops)を実行するための64ビット×64ビットの浮動小数点の除算器(divider)を含む。本発明の実施形態では、浮動小数点の値に関する命令は、浮動小数点ハードウェアで処理されてよい。一実施形態では、ALU演算は、高速ALU実行ユニット216、218に進む。一実施形態の高速ALU216、218は、1クロックサイクルの半分の有効レイテンシーで高速演算を実施することができる。一実施形態では、最も複雑な整数演算は低速ALU220で処理されるが、これは低速ALU220が、乗算器、シフト、フラグ論理、及び分岐処理といったレイテンシーの長いタイプの演算のための整数実行ハードウェアを含んでいるからである。メモリロード/ストア演算は、AGU212、214が実行する。一実施形態では、整数ALU216、218、220は、64ビットのデータオペランドに整数演算を実行するコンテキストで説明される。別の実施形態では、ALU216、218、220は、16、32、128、256等を含む様々なデータビットをサポートするように実装されてよい。同様に、浮動小数点ユニット222、224は、様々な幅のビットを有するオペランドの範囲をサポートするよう実装されてよい。一実施形態では、浮動小数点ユニット222、224は、SIMD及びマルチメディア命令との関連で、128ビット幅のパッキングされたデータオペランドに作用してよい。
【0046】
一実施形態では、μopスケジューラ202、204、206は、親のロードが実行完了する前に、依存する演算をディスパッチする。μopはプロセッサ200で投機的にスケジューリングされ実行されるので、プロセッサ200は、メモリミスを処理する論理を含む。データロードがデータキャッシュでミスすると、一時的に不正確なデータでスケジューラを出た、依存しているオペレーションがパイプライン内にあることになる。リプレイメカニズムは、不正確なデータを利用する命令を追跡して実行する。依存しているオペレーションのみがリプレイされ、独立しているオペレーションは完了させられる。プロセッサの一実施形態のスケジューラ及びリプレイメカニズムは、さらに、ベクトル圧縮及びローテート機能を提供する命令をキャッチするように設計されている。
【0047】
「レジスタ」という用語は、オペランドを指定する命令の一部として利用されるオンボードのプロセッサ格納位置のことを指してよい。言い換えると、レジスタは、プロセッサの外部から(プログラマの観点から)利用可能なもののことであってよい。しかし一実施形態のレジスタの意味は、特定のタイプの回路に限定されるべきではない。一実施形態のレジスタは、データを格納、提供して、ここに記載する機能を実行することができる。ここに記載するレジスタは、任意の数の異なる技術(たとえば、専用物理レジスタ、レジスタリネームを利用して動的に割り当てられた物理レジスタ、専用及び動的に割り当てられた物理レジスタの組み合わせ)を利用してプロセッサ内の回路によって実装することができる。一実施形態では、整数レジスタは、32ビットの整数データを格納する。一実施形態のレジスタファイルは、8つのマルチメディアSIMDレジスタをパッキングされたデータ用に含んでいる。後述する説明においては、レジスタは、カリフォルニア州サンタクララのIntel Corporation社製の、MMX技術でイネーブルされたマイクロプロセッサの64ビット幅のMMX(登録商標)レジスタ(一部の例では「mm」レジスタと称されることもある)等のパッキングされたデータを保持するよう設計されているデータレジスタとして理解される。これらMMXレジスタは、整数及び浮動小数点形態両方で利用可能であり、SIMD及びSSE命令を伴うパッキングされたデータエレメントを利用して動作するこことができる。同様に、SSE2、SSE3、SSE4、またはこれを超える(一般的に「SSEx」と称される)技術に関する128ビット幅のXMMレジスタも、これらパッキングされたデータオペランドを保持するために利用することができる。一実施形態では、パッキングされたデータ及び整数データを格納するときに、レジスタは、2つのデータのタイプを区別する必要がない。一実施形態では、整数及び浮動小数点が、同じレジスタファイルまたは別のレジスタファイルに含まれる。さらに一実施形態では、浮動小数点及び整数データが、異なるレジスタに格納されても同じレジスタに格納されてもよい。
【0048】
以下の図面の例では、複数のデータオペランドを説明する。図3Aは、本発明の一実施形態におけるマルチメディアレジスタの様々なパッキングされているデータタイプの表現を示す。図3Aは、128ビット幅のオペランドについて、パッキングされたバイト310、パッキングされたワード320、及びパッキングされたダブルワード(dword)330のデータタイプを示す。この例のパッキングされたバイトフォーマット310は、128ビット長であり、16個のパッキングされたバイトデータエレメントを含む。1バイトは、ここでは8ビットのデータと定義される。各バイトデータエレメントの情報を、バイト0についてビット7からビット0に格納して、バイト1についてビット15からビット8に格納して、バイト2についてビット23からビット16に格納して、終に、バイト15についてビット120からビット127に格納する。したがい、全ての利用可能なビットがレジスタで利用される。この格納配置は、プロセッサの格納効率を向上させる。また、16個のデータエレメントにアクセスする場合、1つのオペレーションを16個のデータエレメントに並列実行することができる。
【0049】
一般的には、データエレメントは、同じ長さの他のデータエレメントとともに、1つのレジスタまたはメモリ位置に格納された個々のデータである。SSEx技術に関するパッキングされたデータシーケンスでは、XMMレジスタに格納されているデータエレメント数は、128ビットを、個々のデータエレメントのビット長で除算して得られる。同様に、MMX及びSSE技術に関するパッキングされたデータシーケンスでは、MMXレジスタに格納されているデータエレメント数は、64ビットを、個々のデータエレメントのビット長で除算して得られる。図3Aに示すデータタイプは128ビット長であるが、本発明の実施形態は、64ビット幅でも、128ビット幅でも、512ビット幅でも、その他のサイズのオペランドであっても動作可能である。この例のパッキングされたワードフォーマット320は、128ビット長であり、8つのパッキングされたワードデータエレメントを含んでいる。各パッキングされたワードは、16ビットの情報を含んでいる。図3Aのパッキングされたダブルワードフォーマット330は、128ビット長であり、4つのパッキングされたダブルワードのデータエレメントを含んでいる。各パッキングされたダブルワードは、32ビットの情報を含んでいる。パッキングされたクワッドワードは128ビット長であり、2つのパッキングされたクワッドワードデータエレメントを含んでいる。
【0050】
図3Bは、別のレジスタ内の(in-register)データ格納フォーマットを示している。各パッキングされたデータは、1を超える数の独立したデータエレメントを含むことができる。3つのパッキングされたデータフォーマットが図示されている(つまりパッキングされたハーフ341、パッキングされたシングル342、及びパッキングされたダブル343)。パッキングされたハーフ341、パッキングされたシングル342、及びパッキングされたダブル343の一実施形態は、固定小数点(fixed-point)のデータエレメントを含んでいる。別の実施形態では、パッキングされたハーフ341、パッキングされたシングル342、及びパッキングされたダブル343の1以上が、浮動小数点のデータエレメントを含んでいてよい。パッキングされたハーフ341の別の実施形態は、128ビット長であり、8つの16ビットのデータエレメントを含む。パッキングされたシングル342の一実施形態は、128ビット長であり、4つの32ビットのデータエレメントを含む。パッキングされたダブル343の一実施形態は、128ビット長であり、2つの64ビットのデータエレメントを含む。パッキングされたデータフォーマットは、さらに、他のレジスタ長に拡張することもできる点を理解されたい(たとえば、96ビット、160ビット、192ビット、224ビット、256ビット、512ビットまたはそれ以上)。
【0051】
図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ビットである。
【0052】
図3Dは、32以上のビットを持ち、ワールドワイドウェブwwwのintel.com/products/processor/manuals/から入手可能な、カリフォルニア州サンタクララのIntel Corporation社から利用可能な、"Intel(R)64 and IA-32 Intel Architecture Software Developer's Manual Combined Volumes 2A and 2B: Instruction Set Reference A-Z"に記載されているタイプのオペコードフォーマットに対応するレジスタ/メモリオペランドアドレスモードを持つ、オペレーションエンコード(オペコード)フォーマット360の一実施形態を示す。一実施形態では、命令が1以上のフィールド361及び362でエンコードされてよい。1つの命令について2までのオペランド位置を指定することができる(最大で2つのソースオペランド識別子364及び365を含む)。一実施形態では、デスティネーションオペランド識別子366が、ソースオペランド識別子364と等しく、他の実施形態ではこれらが異なっている。別の実施形態では、デスティネーションオペランド識別子366が、ソースオペランド識別子365と等しく、他の実施形態ではこれらが異なっている。一実施形態では、ソースオペランド識別子364及び365が指定するソースオペランドの1つが、命令の結果、上書きされ、他の実施形態では、識別子364が、ソースレジスタエレメントに対応しており、識別子365が、デスティネーションレジスタエレメントに対応している。一実施形態では、オペランド識別子364及び365が、32ビットまたは64ビットのソース及びデスティネーションオペランドを特定するために利用されてよい。
【0053】
図3Eは、40以上のビットを有する別のオペレーションエンコード(オペコード)フォーマットを示す。オペコードフォーマット370は、オペコードフォーマット360に対応しており、随意でプレフィックスバイト378を含んでいる。一実施形態の命令は、フィールド378、371、及び372の1以上によってエンコードされてよい。一実施形態では、ソースオペランド識別子374、375、及び、プレフィックスバイト378により、1つの命令につき最大2つまでのオペランド位置が特定されてよい。一実施形態では、プレフィックスバイト378が、32ビットまたは64ビットのソース及びデスティネーションオペランドを特定するために利用されてよい。一実施形態では、デスティネーションオペランド識別子376が、ソースオペランド識別子374と同じであり、他の実施形態では、これらが異なっている。別の実施形態では、デスティネーションオペランド識別子376が、ソースオペランド識別子375と同じであり、他の実施形態では、これらが異なっている。一実施形態では、命令は、オペランド識別子374及び375が特定するオペランドの1以上に作用して、オペランド識別子374及び375が特定する1以上のオペランドが、命令の結果、上書きされて、他の実施形態では、識別子374及び375が特定するオペランドが、別のレジスタの別のデータエレメントに書きこまれる。オペコードフォーマット360及び370は、レジスタからレジスタへ、メモリからレジスタへ、メモリによってレジスタへ、レジスタによってレジスタへ、即値によってレジスタへ、レジスタからメモリへのアドレス指定を、一部にMODフィールド363及び373によって指定して、随意でスケール−インデックス−ベース及び変位バイト(scale-index-base and displacement bytes)で指定する。
【0054】
図3Fを見ると、一部の他の実施形態では、64ビット(または128ビット、または256ビット、または、512ビット以上)のSIMD算術演算をコプロセッサデータ処理(CDP)命令により実行されてよい。オペレーションエンコード(オペコード)フォーマット380は、CDPオペコードフィールド382及び389を有する1つのCDP命令を示している。別の実施形態において、このタイプのCDP命令では、オペレーションが1以上のフィールド383、384、387、及び388でエンコードされてよい。1つの命令について3つまでのオペランド位置を特定することができる(2つまでのソースオペランド識別子385及び390及び1つのデスティネーションオペランド識別子386を含む)。コプロセッサの一実施形態は、8、16、32、及び64ビットの値に動作することができる。一実施形態では、命令を整数データエレメントに実行する。一部の実施形態では、命令が、条件フィールド381を利用して、条件付きで実行されてよい。一部の実施形態では、ソースデータサイズを、フィールド383によってエンコードしてよい。一部の実施形態では、SIMDフィールドに、ゼロ(Z)、負(N)、繰り上げ(C)、及び、オーバフロー(V)の検出を行ってよい。一部の命令について、この種類の飽和をフィールド384によってエンコードしてよい。
【0055】
次に図3Gを参照すると、図3Gは、ワールドワイドウェブwwwのintel.com/products/processor/manuals/から入手可能な、カリフォルニア州サンタクララのIntel Corporation社から利用可能な、"Intel(R) Advanced Vector Extensions Programming Reference"に記載されているタイプのオペコードフォーマットに対応する、別の実施形態のベクトル圧縮及びローテート機能を提供する別のオペレーションエンコード(オペコード)フォーマット397を示している。
【0056】
元のx86命令セットは、存在が第1の「オペコード」バイトから分かっている、さらなるバイトに含まれているアドレスシラブル及び即値オペランドの様々なフォーマットをもつ1バイトのオペコードのために提供されたものである。加えて、オペコードに対する修飾子としてリザーブされていた一定のバイト値が存在している(命令の前に配置される必要があったことから、プレフィックスと称される)。256オペコードバイトの元のパレット(これら特別なプレフィックス値を含む)が枯渇すると、1バイトが新たなセットの256オペコードへのエスケープ(escape)として専用となった。ベクトル命令(たとえばSIMD)が追加されると、より多くのオペコードに対する要求ができて、プレフィックスを利用して拡張しても、「2つのバイト」のオペコードマップも不十分となった。この目的のために、2バイトに、随意でプレフィックスを識別子として追加した追加マップに、新たな命令を追加した。
【0057】
加えて、64ビットモードのさらなるレジスタを促進するために、プレフィックスとオペコードとの間に(及び、オペコードを決定するために必要な任意のエスケープバイトとの間に)さらなるプレフィックスを利用することができる(「REX」と称する)。一実施形態では、REXは4つの「ペイロード」ビットを有し、64ビットモードのさらなるレジスタの利用を示す。他の実施形態では、4ビットより少ないまたは多い数であってよい。少なくとも1つの命令セットの一般的なフォーマット(これはフォーマット360及び/またはフォーマット370に概して対応している)が、以下のように大まかに示されている。
【0058】
[prefixes] [rex] escape [escape2] opcode modrm (etc.)
【0059】
オペコードフォーマット397は、オペコードフォーマット370に対応しており、随意でVEXプレフィックスバイト391を含み(これは一実施形態ではC4hexから始まる)、他の殆どの共通利用されているレガシー命令プレフィックスバイト及びエスケープコードを置き換える。たとえば以下の例では、1つの命令をエンコードするために2つのフィールドを利用する一実施形態が示されており、第2のエスケープコードが元の命令に存在している場合、または、REXフィールドの剰余ビット(たとえばXB及びWフィールド)を利用する必要がある場合に利用可能である。後述する実施形態では、レガシーエスケープは、新たなエスケープ値で表され、レガシープレフィックスは、「ペイロード」バイトの一部として完全に圧縮され、レガシープレフィックスは、将来拡張する必要が出たときには取戻し(reclaimed)、利用することができ、第2のエスケープコードは「マップ」フィールドで圧縮され、将来のマッピングまたはフィーチャのスペースが利用可能となった場合、新たなフィーチャを追加する(たとえば、ベクトル長を増加して、さらなるソースレジスタ指定子を利用する)。
【数1】
【0060】
一実施形態の一命令は、1以上のフィールド391及び392でエンコードされてよい。1つの命令について4つまでのオペランド位置を、ソースオペランド識別子374及び375の組み合わせ、及び、随意でスケール−インデックス−ベース(SIB:scale-index-base)識別子393、随意の変位識別子394、及び随意の即値バイト395の組み合わせで、フィールド391によって特定してよい。一実施形態では、VEXプレフィックスバイト391を利用して、32ビットまたは64ビットのソース及びデスティネーションオペランド及び/または128ビットまたは256ビットのSIMDレジスタまたはメモリオペランドを特定することができる。一実施形態では、オペコードフォーマット397が提供する機能が、オペコードフォーマット370と重複しており、他の実施形態では、これらが異なっている。オペコードフォーマット370及び397は、レジスタからレジスタへ、メモリからレジスタへ、メモリによってレジスタへ、レジスタによってレジスタへ、即値によってレジスタへ、レジスタからメモリへのアドレス指定が、一部にMODフィールド373及び随意で(SIB)識別子393、随意で変位識別子394、及び随意で即値バイト395により指定される。
【0061】
次に、図3Hを参照すると、別の実施形態のベクトル圧縮及びローテート機能を提供するための、別のオペレーションエンコード(オペコード)フォーマット398を示す。オペコードフォーマット398は、オペコードフォーマット370及び397に対応し、随意でEVEXプリフィックスバイト396を含み(一実施形態では62hexから始まる)、殆どの他の共通に利用されているレガシー命令プレフィックスバイト及びエスケープコードを置き換え、さらなる機能を提供する。一実施形態の命令は、1以上のフィールド396及び392によりエンコードされてよい。命令1つについて4までのオペランド位置とマスクとを、フィールド396で、ソースオペランド識別子374及び375の組み合わせ並びに随意でスケール−インデックス−ベース(SIB:scale-index-base)識別子393の組み合わせ、随意の変位識別子394及び随意の即値バイト395で、特定してよい。一実施形態では、EVEXプリフィックスバイト396を利用して、32ビットまたは64ビットのソース及びデスティネーションオペランド、及び/または、128ビット、256ビット、または512ビットのSIMDレジスタまたはメモリオペランドを特定してよい。一実施形態では、オペコードフォーマット398が提供する機能は、オペコードフォーマット370または397と重複しており、他の実施形態ではこれらが異なっている。オペコードフォーマット398は、マスクで、レジスタからレジスタへ、メモリからレジスタへ、メモリによってレジスタへ、レジスタによってレジスタへ、即値によってレジスタへ、レジスタからメモリへのアドレス指定が、一部にMODフィールド373及び随意で(SIB)識別子393、随意で変位識別子394、及び随意で即値バイト395により指定される。少なくとも1つの命令セット(一般的にはフォーマット360及び/または370に対応している)の汎用フォーマットは、以下で概略する。
【0062】
<evex1 RXBmmmmm WvvvLpp evex4 opcode modrm [sib] [disp] [imm]>
一実施形態では、EVEXフォーマット398によりエンコードされた命令は、追加の「ペイロード」ビットを有してよいが、この追加の「ペイロード」は、ベクトル圧縮及びローテート機能に、たとえばユーザ設定可能なマスクレジスタ、追加のオペランド、または、128ビット、256ビット、または512ビットのベクトルレジスタまたはこれ以上のレジスタを選択肢、などの追加の新たな特徴を提供するために利用することができる。
【0063】
たとえば、VEXフォーマット397が、ベクトル圧縮及びローテート機能に黙示的なマスクを提供するために利用されてよい場合、EVEXフォーマット398は、ベクトル圧縮及びローテート機能に、明示的なユーザ設定可能マスクを与えるために利用されてよい。加えて、VEXフォーマット397が、ベクトル圧縮およびローテート機能を128ビットまたは256ビットのベクトルレジスタに提供するために利用されてよい場合、EVEXフォーマット398は、ベクトル圧縮及びローテート機能を128ビット、256ビット、512ビットまたはこれより大きな(または小さな)ベクトルレジスタに提供するために利用されてよい。
【0064】
ベクトル圧縮及びローテート機能を提供するための命令の例を、以下に例示する。
【表1】
【0065】
SIMD圧縮及びローテート命令は、上述した例にある通り、ベクトル圧縮機能を、さもなくば簡単にベクトル化できないアプリケーション(たとえば、SPECベンチマークスイートの444.NAMDの内部ループのようなベンチマーク)に提供するために利用されることで、外部メモリへの高価な連続した格納数を低減させ、性能及び命令スループットを向上させ、使用電力を低減させることができる。
【0066】
図4Aは、本発明の少なくとも1つの実施形態における、インオーダパイプライン及びレジスタリネームステージ、アウトオブオーダ発行/実行論理を示すブロック図である。図4Bは、本発明の少なくとも1つの実施形態におけるプロセッサに含まれるべき、インオーダアーキテクチャコアおよびレジスタリネーム論理、アウトオブオーダ発行論理を示すブロック図である。図4Aの実線のボックスは、インオーダパイプラインを示し、破線のボックスは、レジスタのリネーム、アウトオブオーダ発行/実行パイプラインを示す。同様に、図4Bの実線のボックスは、インオーダアーキテクチャ論理を示し、破線のボックスは、レジスタリネーム論理及びアウトオブオーダ発行/実行論理を示す。
【0067】
図4Aでは、プロセッサパイプライン400が、フェッチステージ402、長さデコードステージ404、デコードステージ406、割り当てステージ408、リネームステージ410、スケジュール(ディスパッチまたは発行としても知られている)ステージ412、レジスタ読み取り/メモリ読み出しステージ414、実行ステージ416、書き戻し/メモリ書き込みステージ418、例外処理ステージ422、及びコミットステージ424を含む。
【0068】
図4Bでは、矢印が、2以上のユニットの間の連結を示し、矢印の方向が、これらユニット間のデータフローの方向を示す。図4Bは、実行エンジンユニット450に連結されているフロントエンドユニット430を含むプロセッサコア490を示しており、430も450もメモリユニット470に連結されている。
【0069】
コア490は、RISCコア、CISCコア、VLIWコア、または、コアのハイブリッドもしくは別のタイプのコアであってよい。また別の選択肢として、コア490は、専用コア(たとえばネットワークまたは通信コア、圧縮エンジン、グラフィックスコア等)であってよい。
【0070】
フロントエンドユニット430は、命令キャッシュユニット434に連結されている分岐予測ユニット432を含み、これは命令変換ルックアサイドバッファ(TLB)436に連結されており、これがまた命令フェッチユニット438に連結されており、これがまたデコードユニット440に連結されている。デコードユニットまたはデコーダは、命令をデコードして、1以上のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、その他の命令、またはその他の制御信号を生成してよい(これらは、元の命令からデコードされたり、元の命令を反映していたり、元の命令から導出されていたりする)。デコーダは、様々な異なるメカニズムを利用して実装されてよい。適切なメカニズムの例には、これらに限定はされないが、ルックアップテーブル、ハードウェア実装、プログラマブル論理アレイ(PLA)、マイクロコード読み取り専用メモリ(ROM)等が含まれる。命令キャッシュユニット434は、さらに、メモリユニット470のレベル2(L2)キャッシュユニット476に連結されている。デコードユニット440は、実行エンジンユニット450のリネーム/割り当てユニット452に連結されている。
【0071】
実行エンジンユニット450は、1以上のスケジューラユニット456及び退避ユニット454に連結されているリネーム/割り当てユニット452を含む。スケジューラユニット456は、任意の数の異なるスケジューラを表しており、これには、予約ステーション、中央命令ウィンドウ等が含まれる。スケジューラユニット456は、物理レジスタファイルユニット458に連結されている。物理レジスタファイルユニット458はそれぞれ、1以上の物理レジスタファイルを表しており、これらはそれぞれが、1以上の異なるデータタイプ(たとえばスカラー整数、スカラー浮動小数点、パッキングされた整数、パッキングされた浮動小数点、ベクトル整数、ベクトル浮動小数点等)、ステータス(たとえば、次に実行する命令のアドレスである命令ポインタ)などを格納する。退避ユニット454が物理レジスタファイルユニット458に重複しており、レジスタリネーム及びアウトオブオーダ実行を実装することができる様々な方法(たとえば、リオーダバッファ及び退避レジスタファイルを利用して、将来のファイル、履歴バッファ、及び退避レジスタファイルを利用して、レジスタマップ及びレジスタのプールを利用して、など)を示している。概して、アーキテクチャレジスタは、プロセッサの外から、またはプログラマから見ることができる。レジスタは、具体的な回路のタイプに限定されない。ここで記載するデータを格納及び提供可能であれば、様々な異なるタイプのレジスタが利用可能である。適切なレジスタの例には、これらに限定はされないが、専用物理レジスタ、レジスタリネームを利用する、動的に割り当てられた物理レジスタ、専用物理レジスタと動的に割り当てられた物理レジスタとの組み合わせなどが含まれる。退避ユニット454及び物理レジスタファイルユニット458は、実行クラスタ460に連結されている。実行クラスタ460は、1以上の実行ユニット462及び1以上のメモリアクセスユニット464を含む。実行ユニット462は、様々な演算(たとえばシフト、加算、減算、乗算等)を、様々なタイプのデータ(たとえばスカラー浮動小数点、パッキングされた整数、パッキングされた浮動小数点、ベクトル整数、ベクトル浮動小数点等)に行うことができる。一部の実施形態は、具体的な関数または関数群に専用の複数の実行ユニットを含んでいるが、他の実施形態は、1つの実行ユニットだけを含んだり、全てが全ての関数を実行するまたは複数の実行ユニットを含んだりしてもよい。スケジューラ456、物理レジスタファイルユニット458、及び実行クラスタ460は、一定の実施形態では一定のタイプのデータ/オペレーションについて別々のパイプラインを生成するために(たとえばスカラー整数パイプライン、スカラー浮動小数点/パッキングされた整数/パッキングされた浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び/または、それぞれが銘々のスケジューラユニット、物理レジスタファイルユニット、及び/実行クラスタを有するメモリアクセスパイプライン、並びに、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット464を有する一定の実施形態を実装する)、複数形で示されている。別個のパイプラインを利用する場合には、これらのパイプラインの1以上がアウトオブオーダ発行/実行であり、残りがインオーダであってよい。
【0072】
メモリアクセスユニット464群は、メモリユニット470に連結されており、これが、レベル2(L2)キャッシュユニット476に連結されているデータキャッシュユニット474に連結されているデータTLBユニット472を含む。一実施形態では、メモリアクセスユニット464は、ロードユニット、ストアアドレスユニット、ストアデータユニットを含み、これらそれぞれが、メモリユニット470のデータTLBユニット472に連結されている。L2キャッシュユニット476は、1以上の他のレベルのキャッシュに連結されており、最終的にはメインメモリに連結されている。
【0073】
例であるが、例に挙げているレジスタリネーム、アウトオブオーダ発行/実行コアアーキテクチャは、以下のようにしてパイプライン400を実装してよい。1)命令フェッチ438が、フェッチ及び長さデコードステージ402及び404を実行し、2)デコードユニット440が、デコードステージ406を実行し、3)リネーム/割り当てユニット452が、割り当てステージ408及びリネームステージ410を実行し、4)スケジューラユニット456が、スケジュールステージ412を実行し、5)物理レジスタファイルユニット458及びメモリユニット470が、レジスタ読み取り/メモリ読み取りステージ414を実行し、実行クラスタ460が、書き戻し/メモリ書き込みステージ418を実行し、7)様々なユニットが例外処理ステージ422に関与し、8)退避ユニット454及び物理レジスタファイルユニット458が、コミットステージ424を実行する。
【0074】
コア490は、1以上の命令セット(たとえばx86命令セット(新たなバージョンを追加された一部の拡張部を含む))、カリフォルニア州SynnyvaleのMIPS Technologies社のMIPS命令セット、カリフォルニア州SynnyvaleのARM Holdings社のARM命令セット(随意でNEON等の追加の拡張部を含む)をサポートしていてよい。
【0075】
コアはマルチスレッド(2以上の並列のオペレーションまたはスレッドのセット)をサポートしていてよく、タイムスライスマルチスレッド、同時マルチスレッド(1つの物理コアが、物理コアが同時にマルチスレッド処理している各スレッドに論理コアを提供する)、またはこれらの組み合わせを含んでよい(たとえば、Intel(登録商標)Hyperthreading技術のような、タイムスライスフェッチ及びデコード、並びにこの後に同時マルチスレッド)様々な方法で行われてよい。
【0076】
レジスタリネームは、アウトオブオーダ実行のコンテキストで説明されるが、レジスタリネームは、インオーダアーキテクチャで利用することもできる点を理解されたい。図示したプロセッサの実施形態はさらに、別の命令及びデータキャッシュユニット434/474及び共有L2キャッシュユニット476を含むが、別の実施形態では、命令及びデータ両方について1つの内部キャッシュが含まれてよい(たとえばレベル1(L1)内部キャッシュまたはマルチレベルの内部キャッシュ)。一部の実施形態では、システムは、内部キャッシュと、コア及び/またはプロセッサの外部の外部キャッシュとの組み合わせを含んでよい。または、キャッシュ全てがコア及び/またはプロセッサの外部にあってもよい。
【0077】
図5は、本発明の実施形態の、統合されたメモリコントローラ及びグラフィックスをもつシングルコアプロセッサ及びマルチコアプロセッサ500を示す。図5の実線のボックスは、シングルコア502A、システムエージェント510、1以上のバスコントローラユニット516を持つプロセッサ500を示しており、随意に追加されている破線のボックスは、複数のコア502A−N、システムエージェントユニット510に統合された1以上のメモリコントローラユニット514、及び統合されたグラフィックス論理508を持つ別のプロセッサ500を示す。
【0078】
メモリ階層は、コア内の1以上のレベルのキャッシュ、1以上の共有キャッシュユニット506、統合されたメモリコントローラユニット514に連結されている外部メモリ(不図示)を含む。共有キャッシュユニット群506は、1以上の中間レベルキャッシュ(たとえばレベル2(L2)、レベル3(L3)、レベル4(L4))、またはその他のレベルのキャッシュ、最終レベルのキャッシュ(LLC)、及び/またはこれらの組み合わせを含んでよい。一実施形態では、リングベースのインターコネクトユニット512が、統合されたグラフィックス論理508、共有キャッシュユニット群506、及びシステムエージェントユニット510を相互接続するが、別の実施形態では、これらユニットを相互接続するために任意の数の公知の技術を利用してもよい。
【0079】
一部の実施形態では、コア502A−Nの1以上はマルチスレッド処理を行うことができる。システムエージェント510は、コア502A−Nを調整して動作させるコンポーネントを含む。システムエージェントユニット510は、たとえば電力制御ユニット(PCU)及び表示ユニットを含んでよい。PCUは、コア502A−N及び統合されたグラフィック論理508の電力状態を調整するために必要な論理及びコンポーネントであってよい、またはこれらを含んでよい。表示ユニットは、1以上の外部接続されたディスプレイを駆動するためのものである。
【0080】
コア502A−Nは、アーキテクチャ及び/または命令セットの観点から同質または異質であってよい。たとえばコア502A−Nの一部が、インオーダであり、他がアウトオブオーダであってよい。別の例として、コア502A−Nの2以上が、同じ命令セットを実行可能であってよく、他が、その命令セットのサブセットまたは異なる命令セットを実行可能であってよい。
【0081】
プロセッサは、汎用プロセッサ(たとえばコア(登録商標)i3、i5、i7、2Duo、Quad、Xeon(登録商標)、Itanium(登録商標)、XScale(登録商標)、またはStrongARM(登録商標)プロセッサ等)であってよく、これらはカリフォルニア州のサンタクララのIntel Corporation社から利用可能であってよい。またはプロセッサは、ARM Holdings,Ltd、MIPS社等の別の会社から入手可能であってもよい。プロセッサは、たとえば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、コプロセッサ、エンベデッドプロセッサ等の専用プロセッサであってよい。プロセッサは、1以上のチップ上に実装されてよい。プロセッサ500は、複数の処理技術(たとえばBiCMOS、CMOS,またはNMOS)のいずれかを利用する、1以上の基板上の一部であっても、及び/または、1以上の基板上に実装されていてもよい。
【0082】
図6から図8は、プロセッサ500を含むのに適したシステム例であり、図9は、コア502の1以上を含んでよいチップ(SoC)の上のシステムの例である。当技術分野で知られている、ラップトップ、デスクトップ、ハンドヘルドPC、情報携帯端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、可搬型メディアプレーヤ、ハンドヘルドデバイス、及びその他の様々な電子デバイスで知られている他のシステム設計及び構成もまた適している。一般的には、ここで開示したプロセッサ及び/または他の実行論理を含むことのできる莫大な数の様々なシステム及び電子デバイスが適している。
【0083】
図6を参照すると、本発明の一実施形態におけるシステム600のブロック図が示されている。システム600は、1以上のプロセッサ610、615を含み、これらが、グラフィックスメモリコントローラハブ(GMCH)620に連結されている。さらなるプロセッサ615が性質的に必須ではないということは、図6の破線に示されている。
【0084】
各プロセッサ610、615は、プロセッサ500のあるバージョンである。しかし、統合されたグラフィック論理及び統合されたメモリ制御ユニットがプロセッサ610、615に存在していてよい。図6は、GMCH620が、たとえばDRAMであってよいメモリ640に連結されていてよいことを示している。DRAMは、少なくとも1つの実施形態では、不揮発性キャッシュに関連付けられていてよい。
【0085】
GMCH620は、チップセット、またはチップセットの一部であってよい。GMCH620は、プロセッサ610、615と通信してよく、プロセッサ610、615、及びメモリ640の間の交信を制御してよい。GMCH620は、さらに、プロセッサ610、615とシステム600の他のエレメントとの間のアクセラレーテッドバスインタフェースとして機能してよい。少なくとも1つの実施形態では、GMCH620が、マルチドロップバス(たとえばフロントサイドバス(FSB)695)を介してプロセッサ610、615と通信する。
【0086】
さらにGMCH620は、ディスプレイ645(たとえばフラットパネルディスプレイ)に連結されている。GMCH620は、統合されたグラフィックスアクセラレータを含んでよい。GMCH620は、さらに、入出力(I/O)コントローラハブ(ICH)650に連結されており、これは、システム600に様々な周辺デバイスを連結するために利用されてよい。図6の実施形態には、外部グラフィックスデバイス660が例示されており、これは、ICH650に、別の周辺デバイス670とともに連結されている別個のグラフィックスデバイスであってよい。
【0087】
または、追加のまたは別のプロセッサが、システム600に存在してもよい。たとえば追加のプロセッサ615は、プロセッサ610と同じ追加のプロセッサ、プロセッサ610とは異質の、または非対称の追加のプロセッサ、アクセラレータ(たとえばグラフィックスアクセラレータまたはデジタル信号処理(DSP)ユニット等)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサを含んでよい。アーキテクチャ、マイクロアーキテクチャ、熱、電力消費特性を含む様々な測定基準の利点において、物理リソース610、615の間には様々な差があってよい。これらの差により、プロセッサ610、615の間で非対称性及び異質性が生じる。少なくとも1つの実施形態では、様々なプロセッサ610、615が、同じダイパッケージに存在していてよい。
【0088】
図7を参照すると、本発明の一実施形態の第2のシステム700のブロック図が示されている。図7に示すように、マルチプロセッサシステム700は、ポイントツーポイントインターコネクトシステムであり、ポイントツーポイントインターコネクト750を介して連結されている第1のプロセッサ770と第2のプロセッサ780を含む。プロセッサ770及び780のそれぞれは、プロセッサ610、615の1以上同様に、プロセッサ500のあるバージョンであってよい。
【0089】
2つのプロセッサ770、780のみが示されているが、本発明の範囲はこれに限定されない。他の実施形態では、1以上のさらなるプロセッサが1つのプロセッサ内に存在していてもよい。
【0090】
プロセッサ770、780は、それぞれ統合されたメモリコントローラユニット772、782をそれぞれ含むものとして示されている。プロセッサ770は、さらに、バスコントローラユニットのポイントツーポイント(P−P)インタフェース776、778を含み、同様に、第2のプロセッサ780も、P−Pインタフェース786、788を含む。プロセッサ770、780は、ポイントツーポイント(P−P)インタフェース750を介してP−Pインタフェース回路778、788を利用して情報を交換する。図7に示すように、IMC772及び782は、プロセッサを、それぞれのメモリ(つまりメモリ732、メモリ734)に連結するが、これらメモリは、それぞれのプロセッサにローカルに取り付けられているメインメモリの一部であってよい。
【0091】
プロセッサ770、780はそれぞれ、ポイントツーポイントインタフェース回路776、794、786、798を利用して個々にP−Pインタフェース752、754を介してチップセット790と情報を交換してよい。チップセット790は、さらに、高性能グラフィックスインタフェース739を介して高性能グラフィックス回路738と情報を交換してよい。
【0092】
共有キャッシュ(不図示)は、いずれかのプロセッサの内部または両方のプロセッサの外部に含まれてよく、且つ、P−Pインターコネクト経由でプロセッサと接続されており、いずれかのプロセッサまたは両方のプロセッサのローカルキャッシュ情報が、プロセッサが低電力モードにある場合には、共有キャッシュに格納されてよい。
【0093】
チップセット790は、インタフェース796を介して第1のバス716に連結されてよい。一実施形態では、第1のバス716が、周辺コンポーネントインターコネクト(PCI)バス、または、PCI Expressバスまたは別の第三世代I/Oインターコネクトバス等のバスであってよいが、本発明の範囲はこれに限定はされない。
【0094】
図7に示すように、様々なI/Oデバイス714が、第1のバス716を第2のバス720に連結するバスブリッジ718とともに、第1のバス716に連結されていてよい。一実施形態では、第2のバス720が、低ピンカウント(LPC)バスであってよい。一実施形態では、様々なデバイス(たとえば、キーボード及び/またはマウス722、通信デバイス727及び格納ユニット728(たとえば命令/コード及びデータ730を含みうるディスクドライブまたは他の大容量記憶デバイス))が第2のバス720に連結されていてよい。さらに、オーディオI/O724が第2のバス720に連結されていてよい。他のアーキテクチャも可能である。たとえば、図7のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他の同様のアーキテクチャを実装してよい。
【0095】
図8を参照すると、本発明の一実施形態の第3のシステム800のブロック図が示されている。図7及び図8のエレメントと同様のエレメントには、同様の参照番号が付されており、図8の他の側面を曖昧にしないために、図7の一定の側面を図8からは省いている。
【0096】
図8は、プロセッサ870、880が、それぞれ統合されたメモリ及びI/O制御論理(「CL」)872、882を含んでよいことを示している。少なくとも1つの実施形態では、CL872、882は、図5及び図7を参照して上述したような統合されたメモリコントローラユニットを含んでよい。加えて、CL872、882は、さらにI/O制御論理を含んでよい。図8は、メモリ832、834がCL872、882に連結されていることを示しているばかりでなく、I/Oデバイス814も制御論理872、882に連結されていることも示している。レガシーI/Oデバイス815がチップセット890に連結されている。
【0097】
図9を参照すると、本発明の一実施形態のSoC900のブロック図が示されている。図5と同様のエレメントは、同様の参照番号を付されている。さらに、破線のボックスはより高度なSoCの随意の特徴を示す。図9では、インターコネクトユニット902が、1以上のコア502A−N及び共有キャッシュユニット506を含むアプリケーションプロセッサ910、システムエージェントユニット510、バスコントローラユニット516、統合されたメモリコントローラユニット514、統合されたグラフィックス論理508を含んでよい1以上のメディアプロセッサ920、静止画及び/または動画カメラ機能を提供する画像プロセッサ924、ハードウェアオーディオアクセラレーションを提供するオーディオプロセッサ926、ビデオエンコード/デコードアクセラレーションを提供するビデオプロセッサ928、SRAMユニット930、DMA(直接メモリアクセス)ユニット932、及び、1以上の外部ディスプレイを連結させる表示ユニット940に連結されている。
【0098】
図10は、中央処理装置(CPU)及びグラフィックス処理ユニット(GPU)を含むプロセッサを示しており、このプロセッサは、一実施形態による少なくとも1つの命令を実行してよい。一実施形態では、少なくとも1つの実施形態による演算を実行する命令がCPUにより実行されてよい。別の実施形態では、命令はGPUにより実行されてよい。また別の実施形態では、命令は、GPUとCPUとによる演算の組み合わせによって実行されてもよい。一実施形態では、一実施形態の命令がGPUで受信され、実行のためにデコードされてよい。しかし、デコードされた命令内の1以上の演算がCPUにより実行されて、結果がGPUに戻されて、命令の最終的な退避が行われてもよい。逆に一部の実施形態では、CPUが一次プロセッサとして機能して、GPUがコプロセッサとして機能してもよい。
【0099】
一部の実施形態では、高度な並列性及びスループットをもつプロセッサで実行されるほうが利点がある命令がGPUにより実行され、深いパイプラインのアーキテクチャとすることで利点があるプロセッサの性能から利点が得られる命令が、CPUにより実行される。たとえばグラフィックス、科学的な用途、金融の用途、その他の並列ワークロードは、GPUの性能からの利点のほうが大きいので、GPUで実行されてよく、オペレーティングシステムのカーネルまたはアプリケーションコード等のより連続したアプリケーションは、CPUでの実行に適している。
【0100】
図10では、プロセッサ1000は、CPU1005、GPU1010、画像プロセッサ1015、ビデオプロセッサ1020、USBコントローラ1025、UARTコントローラ1030、SPI/SDIOコントローラ1035、表示デバイス1040、高精細マルチメディアインタフェース(HDMI(登録商標))コントローラ1045、MIPIコントローラ1050、フラッシュメモリコントローラ1055、DDR(dual data rate)コントローラ1060、セキュリティエンジン1065、IS/IC(Integrated Interchip Sound/Inter-Integrated Circuit)インタフェース1070を含む。他の論理及び回路(より多くのCPUまたはGPU及び他の周辺インタフェースコントローラ)が図10のプロセッサに含まれてもよい。
【0101】
少なくとも1つの実施形態の1以上の側面が、プロセッサ内の様々な論理を表す機械可読媒体に格納されている代表データにより実装されてもよく、これは機械により読み出されると、機械に、ここで記載する技術を実行する論理を製造させることができる。これらの表現は、「IPコア」として知られており、有形の機械可読媒体(「テープ」)に格納され、様々な顧客または製造施設に送られ、実際に論理またはプロセッサを作成する製造機械に搭載されてよい。たとえばIPコア(一例は、ARM Holdings,Ltdが開発したCortex(登録商標)ファミリーのプロセッサ、及び、中国科学アカデミーのICT(Institute of Computing Technology)が開発したLoongson IPコア)が、Texas Instruments, Qualcomm,Apple、またはSamsung等の様々な顧客またはライセンシーにライセンス供与または販売され、これら顧客またはライセンシーにより製造されるプロセッサに実装されてよい。
【0102】
図11は、一実施形態のIPコアの開発を示すブロック図である。格納媒体1130は、シミュレーションソフトウェア1120及び/またはハードウェアまたはソフトウェアモデル1110を含む。一実施形態では、IPコア設計を表すデータは、メモリ1140(たとえばハードディスク)、有線接続(たとえばインターネット)1150、または無線接続1160を介して、格納媒体1130に提供されてよい。シミュレーションツール及びモデルが生成するIPコア情報は、製造施設に送られてよく、そこで、第三者が少なくとも1つの実施形態の少なくとも1つの命令を実行するように製造されてよい。
【0103】
一部の実施形態では、1以上の命令が、第1のタイプまたはアーキテクチャ(たとえばx86)に対応していてよく、異なるタイプまたはアーキテクチャ(たとえばARM)のプロセッサで変換、エミュレーションされてよい。したがって、一実施形態の命令は、ARM、x86、MIPS、GPU、その他のプロセッサのタイプまたはアーキテクチャを含む任意のプロセッサまたはプロセッサのタイプで実行することができる。
【0104】
図12は、第1のタイプの命令が、一実施形態の異なるタイプのプロセッサによりエミュレーションされる様子を示す。図12では、プログラム1205が、一実施形態の命令と同じまたは実質的に同じ機能を実行することができるいくつかの命令を含んでいる。しかしプログラム1205の命令は、プロセッサ1215と異なる、またはプロセッサ1215に互換性を有さないタイプ及び/またはフォーマットであってよく、これは、プログラム1205の命令のタイプが、プロセッサ1215によりネーティブに実行できない可能性があることを示している。しかしエミュレーション論理1210の助けを受けて、プログラム1205の命令を、プロセッサ1215がネーティブに実行可能な命令に変換することができる。一実施形態では、エミュレーション論理は、ハードウェアに実装されていてよい。別の実施形態では、エミュレーション論理は、プログラム1205の命令のタイプを、プロセッサ1215がネーティブに実行可能なタイプに変換するソフトウェアを含む有形の機械可読媒体に実装されてよい。他の実施形態では、エミュレーション論理は、有形の機械可読媒体に格納されている固定関数(fixed function)またはプログラム可能ハードウェアの組み合わせである。一実施形態では、プロセッサがエミュレーション論理を含み、他の実施形態では、エミュレーション論理は、プロセッサの外部に存在しており、第三者が提供するものであってもよい。一実施形態では、プロセッサは、プロセッサに含まれる、または、プロセッサに関連付けられているマイクロコードまたはファームウェアを実行することで、ソフトウェアを含む有形の機械可読媒体に実装されているエミュレーション論理を搭載可能である。
【0105】
図13は、本発明の実施形態において、ソフトウェア命令変換器を利用して、ソース命令セットのバイナリ命令を、対象命令セットのバイナリ命令に変換する例を示すブロック図である。この実施形態では、命令変換器は、ソフトウェア命令変換器だが、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装されてもよい。図13は、ハイレベル言語1302のプログラムが、x86コンピあら1304によりコンパイルされて、少なくともx86命令セットコア1316をもつプロセッサでネーティブに実行することができるx86バイナリコード1306を生成する。少なくとも1つのx86命令セットコア1316を持つプロセッサは、(1)Intel x86命令セットコアの命令セットの実質的な部分、または(2)少なくともx86命令セットコアをもつIntelプロセッサで実行することを目的としたアプリケーションまたはその他のソフトウェアのオブジェクトコードバージョンを互換的に実行または処理することで、少なくとも1つのx86命令セットコアをもつIntelプロセッサと実質的に同じ機能を果たし、少なくともx86命令セットコアをもつIntelプロセッサと実質的に同じ結果を達成する任意のプロセッサのことを表している。x86コンパイラ1304は、さらなるリンク処理を行っても行わなくても、少なくとも1つのx86命令セットコア1316をもつプロセッサで実行可能なx86バイナリコード1306(たとえばオブジェクトコード)を生成することができるコンパイラのことを表す。同様に、図13は、ハイレベル言語1302のプログラムが、別の命令セットコンパイラ1308を利用してコンパイルされて、少なくとも1つのx86命令セットコア1314がないプロセッサ(たとえば、カリフォルニア州SunnyvaleのMIPS TechnologiesのMIPS命令セットを実行する、及び/または、カリフォルニア州SunnyvaleのARM HoldingsのARM命令セットを実行するMIPS命令セットを実行するコアをもつプロセッサ)によりネーティブに実行することができる別の命令セットバイナリコード1310を生成してよい。命令変換器1312は、x86バイナリコード1306を、x86命令セットコア1314のないプロセッサによりネーティブに実行可能なコードに変換するために利用される。この変換されたコードは、これが可能な命令変換器は作成が難しいので、別の命令セットバイナリコード1310と同じである可能性が少ないが、変換されたコードは、汎用的なオペレーションを遂行し、別の命令セットの命令から構成されるだろう。したがい、命令変換器1312は、エミュレーション、シミュレーション、またはその他のプロセスによって、x86命令セットプロセッサまたはコアのないプロセッサまたはその他の電子デバイスにx86バイナリコード1306を実行させるソフトウェア、ファームウェア、ハードウェア、またはこれらの命令を表す。
【0106】
図14Aは、ベクトル圧縮及びローテート機能を提供する命令1401の一実施形態のフロー図を示す。命令1401の実施形態は、ベクトルソースオペランド1420、マスクレジスタ1410、ベクトルデスティネーションオペランド1440、及びベクトルデスティネーションオフセット1430を特定してよい。マスクレジスタ1410は、複数のデータフィールドを含んでよく、マスクレジスタ1410の複数のデータフィールドのそれぞれは、ベクトルのエレメント位置に対応している(ベクトルソースオペランド1420)。一部の実施形態では、デコードステージ(たとえば406)が、命令1401をデコードしてよく、デコードされた命令1401に呼応して、1以上の実行ユニット(たとえば450)が、マスクレジスタ1410の複数のデータフィールドの値を読み出し、マスキングされていない値(たとえば1)をもつマスクレジスタ1410の複数のデータフィールドのそれぞれについて、ベクトルソースオペランド1420からの対応するベクトルエレメントを、ベクトルデスティネーションオフセット1430位置から(たとえばエレメント位置4)始まる、ベクトルデスティネーション1440の隣接する連続したエレメント位置にコピーする。一部の実施形態では、ベクトルソースオペランド1420からの対応するベクトルエレメントが、ベクトルデスティネーション1440のエレメント位置の総数(たとえば8)を法とする、隣接する連続したエレメント位置にコピーする(たとえば、x86プロセッサの256ビットのYmmレジスタの8つの32ビットのエレメント位置)。
【0107】
ベクトルデスティネーション1440は、2つの64ビットエレメント位置のみ、または16個の32ビットエレメント位置、または32個の16ビットのビットエレメント位置を有してよいことがわかるだろう。
【0108】
図14Bは、ベクトル圧縮及びローテート機能を提供する命令1402の別の実施形態のフロー図を示す。命令1402の実施形態は、ベクトルソースオペランド1420、マスク1410、ベクトルデスティネーションオペランド1440、及び、ベクトルデスティネーションオフセット1430を特定してよい。マスク1410も複数のデータフィールドを含んでよく、マスクレジスタ1410の複数のデータフィールドのそれぞれは、ベクトルのエレメント位置に対応している(ベクトルソースオペランド1420)。一部の実施形態では、デコードステージ(たとえば406)が、命令1402をデコードしてよく、デコードされた命令1402に呼応して、1以上の実行ユニット(たとえば450)が、マスクレジスタ1410の複数のデータフィールドの値を読み出し、マスキングされていない値(たとえば1)をもつマスクレジスタ1410の複数のデータフィールドのそれぞれについて、ベクトルソースオペランド1420からの対応するベクトルエレメントを、ベクトルデスティネーション1440の隣接する連続したエレメント位置に、ベクトルデスティネーションオフセット1430位置から(たとえばエレメント位置4)コピーする。一部の実施形態では、ベクトルソースオペランド1420からの対応するベクトルエレメントが、ベクトルデスティネーションオフセット1430位置から始まる、隣接する連続したエレメント位置に、最上位のベクトルデスティネーション1440エレメント位置が満たされるまでに限り、コピーされる。
【0109】
一部の実施形態では、各対応するベクトルエレメントをベクトルソースオペランド1420からベクトルデスティネーション1440の隣接する連像するエレメント位置にコピーすると、マスクレジスタ1410の対応するデータフィールドの値を、マスキングされていない値からマスキングされた値に変更する(たとえば、この例ではマスクレジスタ1410に上位のビット(most bit)のみを変更しないで残す)。この実施形態でも、ローテート機能は、修正されたマスクで、オフセットをゼロとして、命令を再度実行することで提供されることがわかるだろう。
【0110】
図15Aは、命令を利用してベクトル圧縮及びローテート機能を提供するプロセス1501の一実施形態のフロー図を示す。ここに示すプロセス1501及びその他のプロセスは、汎用機械、専用機械、またはこれらの組み合わせによって実行可能な専用ハードウェアまたはソフトウェアまたはファームウェアオペレーションコードを含んでよい処理ブロックによって実行される。
【0111】
プロセス1501では、ベクトル1510の各エレメントの最上位の値vを、ベクトルB[3:0](たとえばベクトルレジスタ1515のもの)の各エレメントと比較して、Bのエレメントが最上位の値未満かを判断して、マスク(マスク0 1520)を生成して、結果を格納する。マスクの、マスキングされていない値に設定されているビット数のカウントを、カウント1530に格納する。ベクトルA[3:0]のエレメントを、マスク0 1520のマスキングされていない設定に従って圧縮して、ベクトルレジスタ1575の、初期オフセットR01535から(初期値はゼロである)格納する。カウント1530の値を、オフセットの値R0 1535に追加して、オフセットR1 1545を生成する。
【0112】
次に、同様に、ベクトルTopValのエレメントである最上位の値v(たとえばベクトルレジスタ1550のもの)を、ベクトルB[7:4](たとえばベクトルレジスタ1555のもの)の各エレメントに比較して、Bのエレメントが最上位の値未満かを判断して、別のマスクを生成して(たとえば、マスク1 1560)、結果を格納する。ベクトルA[7:4]のエレメントを、マスク1 1560のマスキングされていない設定に従って圧縮して、ベクトルレジスタ1585の、オフセットR1 1545から格納する。
【0113】
一部の実施形態では、ベクトルエレメントA[7:4]を、ベクトルソース1565から、ベクトルデスティネーション1585のエレメント位置の総数を法とする、隣接する連続したエレメント位置に、ベクトルデスティネーションオフセット1545位置から、圧縮される。カウント1530は、全て1のマスク1540を左にシフトさせ、マスク1570を生成するために利用され、マスク1570は、ベクトルレジスタ1575及びベクトルレジスタ1585の、圧縮されている結果を、ベクトルレジスタ1590内に組み込むために利用される(たとえば、下にずらすマスクオペレーション(move under mask operation)を利用して)。
【0114】
ベクトルレジスタ1590は、次にメモリに格納され、別の繰り返し(不図示)を、R1 1445の初期オフセットに、マスキングされていない値に設定されたマスク1560のビット数を足して、ベクトルデスティネーション1585のエレメント位置の総数(この例では1の新しい初期オフセット)を差し引いた値から始めてよい。
【0115】
図15Bは、ベクトル圧縮及びローテート機能を提供する命令を利用するプロセス1502の別の実施形態のフロー図を示す。プロセス1502では、ベクトルTopVal(ベクトルレジスタ1510などの)の各エレメントの最上位の値vを、ベクトルB[7:4]の各エレメントに比較して、Bのエレメントが最上位の値v未満か判断して、マスク(たとえばマスク0 1520)を生成して、結果を格納する。マスクの、マスキングされていない値に設定されているビット数のカウントを、カウント1530に格納する。ベクトルA [7:4]のエレメントを、マスク0 1520のマスキングされていない設定に従って圧縮して、ベクトルレジスタ1590の、初期オフセットR01535から(初期値はゼロである)格納する。カウント1530の値を、オフセットの値R0 1535に追加して、オフセットR1 1545を生成する。
【0116】
次に、同様に、ベクトルTopValのエレメントである最上位の値v(たとえばベクトルレジスタ1550のもの)を、ベクトルB[7:4](たとえばベクトルレジスタ1555のもの)の各エレメントに比較して、Bのエレメントが最上位の値未満かを判断して、別のマスクを生成して(たとえば、マスク1 1560)、結果を格納する。ベクトルA[7:4]のエレメントを、マスク1 1560のマスキングされていない設定に従って圧縮して、ベクトルレジスタ1590の、オフセットR1 1545から格納する。
【0117】
一部の実施形態では、ベクトルエレメントA[7:4]を、ベクトルソース1565から、ベクトルデスティネーションオフセット1545位置から始まる、隣接する連続したエレメント位置に、最上位のベクトルデスティネーション1590エレメント位置が満たされるまでに限り、コピーされる。一部の実施形態では、各対応するベクトルエレメントをベクトルソースオペランド1565からベクトルデスティネーション1590の隣接する連像するエレメント位置にコピーすると、マスクレジスタ1560の対応するデータフィールドの値を、マスキングされていない値からマスキングされた値に変更する(たとえば、この例ではマスクレジスタ1560に最上位のビットのみを変更しないで残す)。この実施形態では、ローテート機能は、修正されたマスクで、オフセットをゼロとして、命令を再度実行することで提供されることがわかるだろう。
【0118】
図16Aは、ベクトル圧縮及びローテート機能を提供するプロセス1601の一実施形態のフロー図を示す。プロセス1601及びここで説明するその他のプロセスは、汎用機械、専用機械、またはこれらの組み合わせによって実行可能な専用ハードウェアまたはソフトウェアまたはファームウェアオペレーションコードを含んでよい処理ブロックによって実行される。
【0119】
プロセス1601の処理ブロック1610では、圧縮ローテート命令がデコードされる。処理ブロック1615では、内部変数iをゼロ(0)に設定して、内部変数jをゼロ(0)に設定する。処理ブロック1630では、マスクレジスタの第1の複数のデータフィールドの値を読み出して、各データフィールドマスク[i]について、データフィールドの値が1に設定されているかを判断する。いずれの別の値を利用しても、マスク[i]のマスキングされていない値を表すことができる(ゼロ(0)または負の値(−1)などを含む)。データフィールドで、マスク[i]が1に設定されていないと判断されると、処理は処理ブロック1655に進み、内部変数iを増分させる。さもなくば、1の値を持つマスクレジスタの各データフィールドについて、処理ブロック1645で、(1)ベクトルソースの対応するi番目のベクトルエレメントを、ベクトルデスティネーションオフセットの位置rotateから始まるベクトルデスティネーションDestの隣接する連続したエレメント位置に、ベクトルデスティネーションDestのエレメント位置の総数lengthを法とする内部変数jを足した位置から、コピー、格納する。次いで処理ブロック1650で、内部変数jを増分して、処理ブロック1655で、内部変数iを増分する。処理ブロック1660では、圧縮ローテート命令の実行が完了しているかを判断する。判断結果が否定的であれば、処理1601を処理ブロック1630から繰り返す。判断結果が肯定的であった場合には、処理は処理ブロック1665で終了する。
【0120】
プロセス1601及びここで説明する他のプロセスは、繰り返しのプロセスとして例示されたが、連続して説明された処理ブロックは、様々な実施形態で、適宜、異なる順序で実行したり、同時に実行したり、並列実行したりすることも可能である点を理解されたい。
【0121】
別の実施形態では、ベクトルデスティネーションが満杯になるとコピーを停止してもよい。マスキングされていないベクトルエレメントを、ベクトルソースからベクトルデスティネーションDestの隣接する連続したエレメント位置にコピーすると、マスクの対応するフィールドの値を、マスキングされている値に変更することもできる。したがって、マスク値は、進捗状況及び/または完了を追跡するために利用することができ、満杯になったデスティネーションをメモリに格納した後で命令を再実行することができる。次いで、命令を、修正されたマスクとゼロのベクトルデスティネーションオフセットとを利用して再実行して、ベクトル圧縮及びローテート命令の実行がまだ必要なエレメントのみを圧縮して、命令のスループットを向上させることができる。
【0122】
図16Bは、ベクトル圧縮及びローテート機能を提供するプロセス1602の別の実施形態のフロー図である。プロセス1602の処理ブロック1610で、圧縮ローテート命令をデコードする。処理ブロック1615で、内部変数iをゼロ(0)に設定して、内部変数jをゼロ(0)に設定する。処理ブロック1630で、マスクレジスタの第1の第1の複数のデータフィールドの値を読み出して、各データフィールドのマスク[i]について、データフィールドの値が1に設定されているかを判断する。ここでも、別のいずれかの値を利用しても、マスク[i]のマスキングされていない値を表すことができる(ゼロ(0)または負の値(−1)などを含む)。データフィールドで、マスク[i]が1に設定されていないと判断されると、処理は処理ブロック1655に進み、内部変数iを増分させる。さもなくば、処理ブロック1635で、オフセットの値rotateに、内部変数jを足したものが、ベクトルデスティネーションDestのエレメント位置の総数length未満であるかを判断する。判断結果が否定的であった場合には、処理は処理ブロック1655に進み、内部変数iを増分する。
【0123】
判断結果が肯定的であった場合には、処理ブロック1640で、データフィールドのマスク[i]をゼロ(0)に設定する。処理ブロック1646で、マスクレジスタの、1の値をもつ各データフィールドについて、ベクトルソースからの対応するi番目のベクトルエレメントを、ベクトルデスティネーションオフセットの位置rotateに、内部変数Jを足し合わせた位置から始まる、ベクトルデスティネーションDestの、隣接する連続したエレメント位置に、ベクトルデスティネーションDestの最上位のエレメントが満たされるまでコピー、格納する。処理ブロック1650で内部変数jを増分して、処理ブロック1655で、内部変数iを増分する。処理ブロック1660で、圧縮ローテート命令の実行が完了したか判断する。判断結果が否定的であれば、処理1602を処理ブロック1630から繰り返す。判断結果が肯定的であった場合には、処理は処理ブロック1665で終了する。
【0124】
図17は、ベクトル圧縮及びローテート機能を提供するプロセス1701の別の一実施形態のフロー図を示す。プロセス1701の処理ブロック1710で、圧縮ローテート命令をデコードする。処理ブロック1715で、内部変数iがゼロ(0)に設定され、内部変数jがゼロ(0)に設定される。処理ブロック1720で、ベクトルデスティネーションDestをゼロにするかを判断する。適用すると判断された場合には、ベクトルデスティネーションDestのすべてのエレメント位置にゼロを格納する。別の実施形態では、ゼロのエレメントは、ベクトルデスティネーション位置のみに格納して、ここにはベクトルソースからのエレメントをコピーしない。ベクトルデスティネーションDestをゼロにしないと判断された場合には、処理は直接処理ブロック1730に進む。
【0125】
処理ブロック1730では、マスクレジスタの第1の複数のデータフィールドの値を読み出て、各データフィールドのマスク[i]について、データフィールドの値が1に設定されているかを判断する。別のいずれの値を利用しても、マスク[i]のマスキングされていない値を表すことができる(ゼロ(0)または負の値(−1)などを含む)。データフィールドで、マスク[i]が1に設定されていないと判断されると、処理は処理ブロック1745に進み、内部変数iを増分する。さもなくば、1の値を持つマスクレジスタの各データフィールドについて、処理ブロック1735で、(1)ベクトルソースの対応するi番目のベクトルエレメントを、ベクトルデスティネーションDestの隣接する連続したエレメント位置に、ベクトルデスティネーションオフセットの位置rotateに、ベクトルデスティネーションDestのエレメント位置の総数lengthを法とする内部変数jを足した位置から、コピー、格納する。次いで処理ブロック1740で、内部変数jを増分して、処理ブロック1745で、内部変数iを増分する。処理ブロック1750では、圧縮ローテート命令の実行が完了しているかを判断する。判断結果が否定的であれば、処理1701を処理ブロック1730から繰り返す。判断結果が肯定的であった場合には、処理は処理ブロック1755で終了する。
【0126】
プロセス1601及び1701は、そうしなければ簡単にはベクトル化されないアプリケーション(たとえばSPECベンチマークスイートの444.NAMDの内部ループ等のベンチマークアプリケーション)にベクトル圧縮機能を提供するために利用されることで、外部メモリへの高価な連続した格納数を低減させ、性能を向上させ、使用電力を低減させることができる
【0127】
図18は、ベンチマークアプリケーションに、ベクトル圧縮及びローテート機能を提供するプロセスの一実施形態のフロー図を示す。プロセス1801の処理ブロック1810で、変数iをゼロ(0)に設定して、最後のiを、最後からベクトルレジスタのlengthを差し引いた値に設定する。処理ブロック1815で、ベクトルTopVal[length:0](たとえばベクトルレジスタ1510)の各エレメントの最上位の値vを、ベクトルB[length+i:i]の各エレメントと比較して、Bのエレメントが最上位の値v未満であるかを判断して、マスクを生成して(たとえばマスクレジスタ1520に)、結果を格納する。処理ブロック1820で、マスクの、マスキングされていない値に設定されているビット数のカウントを、カウントに格納する。処理ブロック1830で、カウントがゼロを超える値かを判断する。ゼロを超える値ではない場合、処理は処理ブロック1870に進み、値lengthを、iに追加する。
【0128】
ゼロを超える値である場合には、処理は処理ブロック1835に向かい、ベクトルA[length+i:i]を、ベクトルレジスタDestA[length:0]に搭載する。処理は次二位処理ブロック1845に向かい、DestA[length:0]を、マスクに設定されたマスキングされていないフィールドに従ってメモリポインタオペランドが示すメモリ位置から始まる、メモリの隣接する連続したエレメント位置に、パッキングして、格納する。処理ブロック1860で、メモリポインタをcount分増分する(つまり、ベクトルエレメントが8バイト長である場合には、メモリポインタの値を、8にcountの値を乗算した値分増分する)。次に、処理は処理ブロック1870に進み、lengthの値をiに追加する。そして処理ブロック1875で、iが最後のiより大きいかを判断する。判断結果が肯定的である場合には、プロセスを完了させるために処理すべきエレメントの数が少しであることになり、処理ブロック1880となる。判断結果が否定的である場合には、処理は処理ブロック1815から繰り返す。
【0129】
図19Aは、ベンチマークアプリケーションに、ベクトル圧縮及びローテート機能を提供するプロセスの一実施形態のフロー図を示す。プロセス1902の処理ブロック1911で、変数iをゼロ(0)に設定して、オフセットをゼロ(0)に設定して、最後のiを、最後から、ベクトルレジスタのlength分差し引いた値に設定する。処理ブロック1915で、ベクトルTopVal[length:0] (たとえばベクトルレジスタ1510)の各エレメントの最上位の値vを、ベクトルB[length+i:i]の各エレメントに比較して、Bのエレメントが、最上位の値v未満であるかを判断して、マスク(マスク1520など)を生成して、結果を格納する。処理ブロック1920で、マスクの、マスキングされていない値に設定されているビット数のカウントをcountに格納する。処理ブロック1926で、ベクトルA[length+i:i]のエレメントを、マスクのマスキングされていない設定に従って圧縮フィルして(compress filled)、DestA[length:offset]に格納する。そしてプロセス1931で、countの値をoffsetの値に追加する。
【0130】
処理ブロック1941で、offsetが長さlength(つまり、DestAを保持するベクトルレジスタのエレメント数)より大きくなったかを判断する。大きくなっていない場合には、処理は処理ブロック1970に進み、lengthの値をiに追加する。さもなくば、処理は、処理ブロック1945に進み、DestA[length:0]をメモリポインタに格納する。処理ブロック1951で、lengthの値をoffsetの値から差し引く。処理ブロック1956で、ベクトルA[length+i:i]のエレメントを、更新されたマスクのマスキングされていない設定に従って圧縮フィルして、DestA[length:0]に格納する。処理ブロック1960で、メモリポンタをlength分増分する(つまり、ベクトルエレメントが、4バイト長である場合には、メモリポインタの値をlengthの値の4倍増分させる)。次に処理は処理ブロック1970に進み、値lengthをiに追加する。そして処理ブロック1975で、iが最後のiを超える値かを判断する。判断結果が肯定的である場合には、プロセスを完了させるために処理すべきエレメントの数が少しであることになり、処理ブロック1980となる。判断結果が否定的である場合には、処理は処理ブロック1915から繰り返す。
【0131】
上述したように、別の実施形態では、ベクトルデスティネーションが満杯になった場合にはコピーが停止されてよい。ベクトルソースからベクトルデスティネーションDestの隣接する連続したエレメント位置に、マスキングされていないベクトルエレメントをコピーした場合には、マスクの対応するフィールドの値も、マスキングされた値に変更してよい。したがいマスク値は、進捗状況及び/または完了を追跡するために利用することができ、満杯になったデスティネーションをメモリに格納した後で命令を再実行することができる。次いで、命令を、修正されたマスクとゼロのベクトルデスティネーションオフセットとを利用して再実行して、ベクトル圧縮及びローテート命令の実行がまだ必要なエレメントのみを圧縮する。
【0132】
図19Bは、ベンチマークアプリケーションに、ベクトル圧縮及びローテート機能を提供するプロセス1902の別の一実施形態のフロー図を示す。プロセス1902の処理ブロック1911で、変数iをゼロ(0)に設定して、オフセットをゼロ(0)に設定して、最後のiを、最後から、ベクトルレジスタのlength分差し引いた値に設定する。処理ブロック1915で、ベクトルTopVal[length:0] (たとえばベクトルレジスタ1510)の各エレメントの最上位の値vを、ベクトルB[length+i:i]の各エレメントに比較して、Bのエレメントが、最上位の値v未満であるかを判断して、マスク(マスク1520など)を生成して、結果を格納する。処理ブロック1920で、マスクの、マスキングされていない値に設定されているビット数のカウントをcountに格納する。処理ブロック1926で、ベクトルA[length+i:i]のエレメントを、マスクのマスキングされていない設定に従って圧縮フィルして(compress filled)、DestA[length:offset]に格納する。そしてプロセス1931で、countの値をoffsetの値に追加する。
【0133】
処理ブロック1941で、offsetが長さlengthを超えているかを判断する(つまり、DestAを保持するベクトルレジスタのエレメント数)。超えていない場合には、処理は処理ブロック1970に進み、lengthの値をiに追加する。さもなくば、処理は、処理ブロック1945に進み、DestA[length:0]をメモリポインタに格納する。処理ブロック1951で、lengthの値をoffsetの値から差し引く。処理ブロック1956で、ベクトルA[length+i:i]のエレメントを、更新されたマスクのマスキングされていない設定に従って圧縮フィルして、DestA[length:0]に格納する。処理ブロック1960で、メモリポンタをlength分増分する(つまり、ベクトルエレメントが、4バイト長である場合には、メモリポインタの値をlengthの値の4倍増分させる)。次に処理は処理ブロック1970に進み、値lengthをiに追加する。そして処理ブロック1975で、iが最後のiを超える値かを判断する。判断結果が肯定的である場合には、プロセスを完了させるために処理すべきエレメントの数が少しであることになり、処理ブロック1980となる。判断結果が否定的である場合には、処理は処理ブロック1915から繰り返す。
【0134】
本発明の実施形態は、そうしなければ簡単にはベクトル化されないアプリケーション(たとえばSPECベンチマークスイートの444.NAMDの内部ループ等のベンチマークアプリケーション)にベクトル圧縮機能を提供するために利用されることで、外部メモリへの高価な連続した格納数を低減させ、性能を向上させ、使用電力を低減させることができる、SIMDベクトル圧縮及びローテート命令に関する。一部の実施形態では、マスク値は、進捗状況及び/または完了を追跡するために利用することができ、満杯になったデスティネーションをメモリに格納した後で、修正されたマスクとゼロのオフセットとを利用して再実行して、まだベクトル圧縮及びローテート命令による圧縮が必要なエレメントのみを圧縮することができる。別の実施形態では、ベクトルデスティネーションのゼロのエレメントには、ベクトルソースからエレメントをコピーしない。
【0135】
ここで説明するメカニズムは、ハードウェア、ソフトウェア、ファームウェア、またはこれらの実装例の組み合わせで実装することができる。本発明の実施形態は、少なくとも1つのプロセッサ、記憶システム(揮発性及び不揮発性メモリ及び/または記憶エレメントを含む)、少なくとも1つの入力デバイス、及び、少なとも1つの出力デバイスを含むプログラム可能なシステムで実行されるコンピュータプログラムまたはプログラムコードとして実装されてよい。
【0136】
プログラムコードを入力命令に適用して、ここで記載する機能を実行して、出力情報を生成してよい。出力情報は、公知の方法で1以上の出力デバイスに適用してよい。本願においては、処理システムが、プロセッサ(たとえばデジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサ)有する任意のシステムを含む。
【0137】
プログラムコードは、高レベルプロシージャまたはオブジェクト指向プログラミング言語に実装されて、処理システムと通信してよい。プログラムコードはさらに、望ましい場合にはアセンブリまたは機械言語で実装されてよい。実際、ここに記載するメカニズムは、特定のプログラミング言語に限定はされない。いずれにしても、言語はコンパイルされた言語、またはインタープリタ型言語であってよい。
【0138】
少なくとも1つの実施形態の1以上の側面が、プロセッサ内の様々な論理を表す機械可読媒体に格納されている代表命令により実装されてもよく、これは機械により読み出されると、機械に、ここで記載する技術を実行する論理を製造させることができる。これらの表現は、「IPコア」として知られており、有形の機械可読媒体(「テープ」)に格納され、様々な顧客または製造施設に送られ、実際に論理またはプロセッサを作成する製造機械に搭載されてよい。
【0139】
機械可読格納媒体は、限定ではないが、機械またはデバイスにより製造または構成される、非一時的、有形の構成の物品を含んでよい(これには、ハードディス等の記憶媒体、任意の他のタイプのディスクが含まれ、これらには、フロッピー(登録商標)ディスク、光学ディスク、CD−ROM、CD−RW,及び光磁気ディスク、半導体デバイス(たとえばROM、DRAM、SRAM等のRAM、EPROM、フラッシュメモリ、EEPROM、磁気カードまたは光カード)、または任意の他のタイプの、電子命令を格納するのに適した媒体が含まれる。
【0140】
したがい、本発明の実施形態は、命令を含んだり、ここで記載する構造、回路、装置、プロセッサ、及び/またはシステムの特徴部を定義する設計データ(たとえばハードウェア記述言語(HDL))を含んだりする非一時的、有形の機械可読媒体も含む。一部の実施形態は、プログラムプロダクトとも称される。
【0141】
場合によって、命令変換器は、命令を、ソース命令セットから対象命令セットに変換する。たとえば、命令変換器は、たとえば静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を利用する変換、変形(morph)、エミュレートすることもできるし、または、コアが処理する1以上の他の命令に命令を変換することもできる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装されてよい。命令変換器は、プロセッサにあっても、プロセッサ外にあっても、一部がプロセッサにあって一部がプロセッサ外にあってもよい。
【0142】
少なくとも1つの実施形態による1以上の命令を実行する技術を開示してきた。一部の実施形態は、添付図面に示されているが、これら実施形態は広義の発明の例示であり、広義の発明を限定するものではない。また、本開示を読んだ当業者には様々な他の変形例が自明であることから、本発明は、示され説明される具体的な構成及び構造に限定はされない。成長が速く、将来の進歩を簡単に予測できない技術分野においては、開示する実施形態は、本開示の原理または添付請求項の範囲から逸脱せずに、構造及び詳細について容易に修正することができる。
図1A
図1B
図1C
図2
図3A
図3B
図3C
図3D
図3E
図3F
図3G
図3H
図4A
図4B
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14A
図14B
図15A
図15B
図16A
図16B
図17
図18
図19A
図19B