(57)【特許請求の範囲】
【請求項１】
複数のベクトルレジスタと、
前記複数のベクトルレジスタに結合された実行回路とを備え、
各ベクトルレジスタは、複数のレーンに分割され、各レーンは、３以上の同一の数のデータ要素を格納し、
前記実行回路は、前記ベクトルレジスタの１つであるソースオペランドと、前記ベクトルレジスタの１つであるデスティネーションオペランドと、リダクション演算子を示すベクトルリダクション命令を受信した際に、
前記ソースオペランドの各レーン内の２つの前記データ要素に、前記リダクション演算子を適用して、リダクション演算の結果を、前記デスティネーションオペランドの対応するレーン内の１つのデータ要素の位置に格納し、
前記ソースオペランドの各レーン内の、前記リダクション演算子を適用されない、１または複数の残存データ要素を、前記デスティネーションオペランドの対応するレーン内のシフトしたデータ要素の位置に格納することにより、
前記ソースオペランドに格納された複数の前記データ要素のアレイに対して縮小処理を行った結果を、前記デスティネーションオペランドに格納することを実現する、装置。
【請求項２】
前記ベクトルリダクション命令に応答する前記実行回路は、各レーンにおける最上位の位置にゼロを挿入する、請求項１に記載の装置。
【請求項３】
前記リダクション演算子は、加算、減算、または乗算を含む、請求項１または２に記載の装置。
【請求項４】
前記リダクション演算子が適用される各レーン内の２つのデータ要素は、各レーンにおける、最下位の位置のデータ要素と、前記最下位の位置の前記データ要素に隣接するデータ要素である、請求項１から３のいずれか１項に記載の装置。
【請求項５】
前記ベクトルリダクション命令に応答する前記実行回路は、各レーンにおいて前記１または複数の残存データ要素のそれぞれの位置を１つ右側にシフトさせる、請求項１から４のいずれか１項に記載の装置。
【請求項６】
前記実行回路は、前記ベクトルリダクション命令を用いないリダクションコードを、前記ベクトルリダクション命令を用いる翻訳済みリダクションコードに変換し、前記リダクションコードおよび前記翻訳済みリダクションコードは、前記複数のレーン全体で複数のデータ要素の前記アレイに適用される複数のリダクション演算の同一のシーケンスを指定し、同一の結果を生成する、請求項１から５のいずれか１項に記載の装置。
【請求項７】
前記複数のデータ要素のそれぞれは、倍精度浮動小数点数、単精度浮動小数点数、または半精度浮動小数点数である、請求項１から６のいずれか１項に記載の装置。
【請求項８】
ベクトルレジスタのうちの１つであるソースオペランドと、前記ベクトルレジスタのうちの１つであるデスティネーションオペランドと、リダクション演算子とを示すベクトルリダクション命令であって、前記ベクトルレジスタのそれぞれは、複数のレーンに分割され、各レーンは、３以上の同一の数のデータ要素を格納するものである、前記ベクトルリダクション命令を受信したときに、前記ソースオペランドに格納された複数の前記データ要素のアレイに対して縮小処理を行った結果を、前記デスティネーションオペランドに格納することを実現するために、
前記ベクトルリダクション命令を受信すると、
前記ソースオペランドの各レーン内の２つのデータ要素に、前記リダクション演算子を適用して、リダクション演算の結果を、前記デスティネーションオペランドの対応するレーン内の１つのデータ要素の位置に格納する段階と、
前記ソースオペランドの各レーン内の、前記リダクション演算子を適用されない、１または複数の残存データ要素を、前記デスティネーションオペランドの対応するレーン内のシフトしたデータ要素の位置に格納する段階を備える方法。
【請求項９】
前記ベクトルリダクション命令に応答して、各レーンにおける最上位の位置にゼロを挿入する段階を更に備える、請求項８に記載の方法。
【請求項１０】
前記リダクション演算子は、加算、減算、または乗算を含む、請求項８または９に記載の方法。
【請求項１１】
前記リダクション演算子が適用される各レーン内の２つのデータ要素は、各レーンにおける、最下位の位置のデータ要素と、前記最下位の位置の前記データ要素に隣接するデータ要素である、請求項８から１０のいずれか１項に記載の方法。
【請求項１２】
前記ソースオペランドの各レーン内の、前記リダクション演算子を適用されない、１または複数の残存データ要素は、それぞれ、１つ右側にシフトされてから、前記デスティネーションオペランドの対応するレーンに格納されるものである、請求項８から１１のいずれか１項に記載の方法。
【請求項１３】
前記ベクトルリダクション命令を用いないリダクションコードを、前記ベクトルリダクション命令を用いる翻訳済みリダクションコードに変換する段階を更に備え、
前記リダクションコードおよび前記翻訳済みリダクションコードは、前記複数のレーン全体で複数のデータ要素の前記アレイに適用される複数のリダクション演算の同一のシーケンスを指定し、同一の結果を生成する、請求項８から１２のいずれか１項に記載の方法。
【請求項１４】
前記複数のデータ要素のそれぞれは、倍精度浮動小数点数、単精度浮動小数点数、または半精度浮動小数点数である、請求項８から１３のいずれか１項に記載の方法。
【請求項１５】
メモリと、
前記メモリに結合されたプロセッサとを備え、
前記プロセッサは、
複数のベクトルレジスタと、
前記複数のベクトルレジスタに結合された実行回路とを有し、
各ベクトルレジスタは、複数のレーンに分割され、各レーンは、３以上の同一の数のデータ要素を格納し、
前記実行回路は、前記ベクトルレジスタの１つであるソースオペランドと、前記ベクトルレジスタの１つであるデスティネーションオペランドと、リダクション演算子とを示すベクトルリダクション命令を受信した際に、
前記ソースオペランドの各レーン内の２つの前記データ要素に、前記リダクション演算子を適用して、リダクション演算の結果を、前記デスティネーションオペランドの対応するレーン内の１つのデータ要素の位置に格納し、
前記ソースオペランドの各レーン内の、前記リダクション演算子を適用されない、１または複数の残存データ要素を、前記デスティネーションオペランドの対応するレーン内のシフトしたデータ要素の位置に格納することにより、
前記ソースオペランドに格納された複数の前記データ要素のアレイに対して縮小処理を行った結果を、前記デスティネーションオペランドに格納することを実現する、システム。
【請求項１６】
前記ベクトルリダクション命令に応答する前記実行回路は、各レーンにおける最上位の位置にゼロを挿入する、請求項１５に記載のシステム。
【請求項１７】
前記リダクション演算子は、加算、減算、または乗算を含む、請求項１５または１６に記載のシステム。
【請求項１８】
前記リダクション演算子が適用される各レーン内の２つのデータ要素は、各レーンにおける、最下位の位置のデータ要素と、前記最下位の位置の前記データ要素に隣接するデータ要素である、請求項１５から１７のいずれか１項に記載のシステム。
【請求項１９】
前記ベクトルリダクション命令に応答する前記実行回路は、各レーンにおいて前記１または複数の残存データ要素のそれぞれの位置を１つ右側にシフトさせる、請求項１５から１８のいずれか１項に記載のシステム。
【請求項２０】
前記実行回路は、前記ベクトルリダクション命令を用いないリダクションコードを、前記ベクトルリダクション命令を用いる翻訳済みリダクションコードに変換し、
前記リダクションコードおよび前記翻訳済みリダクションコードは、前記複数のレーン全体で複数のデータ要素の前記アレイに適用される複数のリダクション演算の同一のシーケンスを指定し、同一の結果を生成する、請求項１５から１９のいずれか１項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、プロセッサまたは他の処理ロジックにより実行されると、複数の論理、数学、または機能演算を実行する処理ロジック、複数のマイクロプロセッサ、および関連する命令セットアーキテクチャの分野に関する。
【背景技術】
【０００２】
命令セットまたは命令セットアーキテクチャ（ＩＳＡ）は、プログラミングに関係するコンピューターアーキテクチャの一部であり、複数のネイティブデータタイプ、命令、レジスタアーキテクチャ、アドレスモード、メモリアーキテクチャ、割り込みおよび例外処理、ならびに外部の入力および出力（Ｉ／Ｏ）を含み得る。一般に、命令という用語は、本明細書において、実行のためのプロセッサ（または命令を、プロセッサにより処理される１または複数の他の命令に翻訳（例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを用いる）、モーフィング、エミュレート、または変換する命令変換器）に提供される複数の命令であるマクロ命令を指し、複数のマクロ命令をデコードするプロセッサのデコーダの結果であるマイクロ命令またはマイクロオペレーション（ｍｉｃｒｏ−ｏｐ）とは異なる。
【０００３】
ＩＳＡは、命令セットを実装するプロセッサの内部設計であるマイクロアーキテクチャとは区別される。異なるマイクロアーキテクチャを有する複数のプロセッサは、共通の命令セットを共有し得る。例えば、Ｉｎｔｅｌ（登録商標）Ｃｏｒｅ（商標）プロセッサおよびカルフォルニア州サニーベールのアドバンスイトマイクロデバイセズ株式会社のプロセッサは、ほぼ同一のバージョンのｘ８６命令セット（複数のより新しいバージョンについてはいくつかの拡張が追加されている）を実装するが、異なる複数の内部設計を有する。例えば、ＩＳＡの同一のレジスタアーキテクチャは、複数の専用物理レジスタ、レジスタリネーミングメカニズム等を用いる１または複数の動的に割り当てられた物理レジスタ等を含む周知の技術を用いて、異なる様式で異なるマイクロアーキテクチャ内に実装され得る。
【０００４】
現在の多くのＩＳＡは、単一命令マルチデータ（ＳＩＭＤ）演算をサポートする。１つのデータ要素または１ペアのデータ要素のみで動作するスカラ命令に代えて、ベクトル命令（パックデータ命令またはＳＩＭＤ命令とも呼ばれる）は、複数のデータ要素または複数のペアのデータ要素で同時に、または並列して動作し得る。プロセッサは、ベクトル命令に応答する並列実行ハードウェアを有し、複数の演算を同時に、または並列して実行することができる。
【０００５】
複数のＳＩＭＤ演算は、１つの演算の１つのレジスタまたはメモリ位置にパックされた複数のデータ要素で動作する。これらのデータ要素は、パックデータまたはベクトルデータと呼ばれる。複数のベクトル要素のそれぞれは、別々に、または他から独立して操作され得る分離した個別のデータ要素（例えば、ピクセル色等）を表し得る。
【０００６】
いくつかのシナリオにおいて、ソースコードは、複数のデータ要素のアレイにリダクション演算を実行するための特定の順序を指定してよい。リダクション演算の一例は、加算であり、アレイに含まれるデータ要素の全てを加算し、以下のシリアルソースコードにおいて指定される演算等、単一の和を生成する。
【０００７】
ｆｌｏａｔ  ＊ａ；
ｆｌｏａｔ  ｓｕｍ＝０．０；
ｆｏｒ（ｉｎｔ  ｉ＝０；ｉ＜１００ｘ１０２４；＋＋ｉ）｛
ｓｕｍ＋＝ａ［ｉ］；
｝
【０００８】
上記のソースコードは、昇順で複数のアレイ要素を合計することにより、アレイにリダクション演算を実行する。複数の浮動小数点データ要素については、データ要素が加算される順序に対する変更により、最終的な和を変更し得るが、変更はわずかであり得る。高精度の算術を必要とする科学的計算においては、わずかな変更であっても容認できない場合がある。従って、複数のデータ要素が操作される順序を維持し、ソースコードにより指定された正確な丸め動作を保存する必要がある。しかし、上記のようなシリアル計算は、時間がかかる。複数の浮動小数点計算が再度命令され得る場合、合計は、４つの部分和を累計することにより実現することができ、次に４つの部分和は、ループの外部で加算されるであろう。この場合、ループ本体は、４つの単精度値を一度に読み込み、
ｍｏｖｕｐｓ（％［ａ］，％［ｉ］，４），ｘｍｍ０／／ｌｏａｄ  １６Ｂ
ａｄｄｐｓ  ｘｍｍ０，［ｓｕｍ］
を含む。
【０００９】
上記のアセンブリコードは、パックデータの加算（ベクトル加算とも呼ばれる）「ａｄｄｐｓ」を用い、これは、ベクトルレジスタ（ｘｍｍ０）のコンテンツを累計して合計する。アセンブリコードは、ベクトル演算の使用においてはシリアルソースコードよりも効率的である。しかし、アセンブリコードは、シリアルソースコードにおけるようにはリダクション演算の順序を保存せず、シリアルソースコードとは異なる結果を生成することがある。
【図面の簡単な説明】
【００１０】
実施形態は例として図示され、添付の図面に限定されない。
【図１】一実施形態による複数のベクトルレジスタを含む命令処理装置のブロック図である。
【図２】一実施形態によるレジスタアーキテクチャのブロック図である。
【図３Ａ】一実施形態による、複数の単精度値に対するベクトルリダクション演算の一例を図示する。
【図３Ｂ】一実施形態による、複数の倍精度値に対するベクトルリダクション演算の一例を図示する。
【図４Ａ】一実施形態による、ベクトルリダクション命令を用いないコードを、複数のベクトルリダクション命令を用いる翻訳済みコードに変換する一例を図示する。
【図４Ｂ】一実施形態による、ベクトルリダクション命令を用いないコードを、複数のベクトルリダクション命令を用いる翻訳済みコードに変換する別の例を図示する。
【図５Ａ】一実施形態による、複数のベクトルリダクション命令を実行するコンピュータシステムの複数の要素を図示する。
【図５Ｂ】一実施形態による、ベクトルリダクション命令に応答して実行される複数の演算を図示するフロー図である。
【図６】一実施形態による、ソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令変換器の使用を図示するブロック図である。
【図７Ａ】一実施形態による、インオーダおよびアウトオブオーダパイプラインのブロック図である。
【図７Ｂ】一実施形態による、インオーダおよびアウトオブオーダコアのブロック図である。
【図８Ａ】一実施形態による、より具体的な例示的インオーダコアアーキテクチャのブロック図である。
【図８Ｂ】一実施形態による、より具体的な例示的インオーダコアアーキテクチャのブロック図である。
【図９】一実施形態によるプロセッサのブロック図である。
【図１０】一実施形態によるシステムのブロック図である。
【図１１】一実施形態による第２のシステムのブロック図である。
【図１２】本発明による第３のシステムのブロック図である。
【図１３】一実施形態による、システムオンチップ（ＳｏＣ）のブロック図である。
【発明を実施するための形態】
【００１１】
以下の説明において、様々な具体的詳細が記載される。しかし、本発明の複数の実施形態は、これらの具体的な詳細を用いずに実施され得ることを理解されたい。他の複数の例において、複数の周知の回路、構造、および技術は、本明細書の理解を不明瞭にしないようにするべく、詳細に示していない。本明細書において説明される複数の実施形態は、複数のリダクション演算を高速化するベクトルリダクション命令を提供する。複数のリダクション演算は、付加的なリダクション、乗法リダクション、または減法リダクションであり得る。複数のベクトルリダクション命令は、６４ビットの倍精度浮動小数点数、３２ビットの単精度浮動小数点数、１６ビットの半精度浮動小数点数等、プロセッサによる処理され得るあらゆる数値データフォーマット、または他の複数の数値データフォーマットの任意のサイズによる複数のデータ要素のアレイに適用され得る。リダクション演算を実行する所定の順序を考慮して、複数のベクトルリダクション命令は、プロセッサが複数のベクトル演算（パックデータ演算とも呼ばれる）を用いて効率性を改善するべく、所与の所定順序でリダクション演算を実行するように構成され得る。いくつかの実施形態において、複数のベクトルリダクション命令は、高水準言語のシリアル化コードをコンパイルしてバイナリまたは他の中間フォーマットのベクトルコードにするコンパイラにより生成され得る。いくつかの実施形態において、ベクトルリダクション命令は、より短いベクトル幅のベクトルコードをより広いベクトル幅の別のベクトルコードに、または複数の新しいリダクション命令を利用しないベクトルコードからそれらの新しいリダクション命令を利用する別のベクトルコードに翻訳もしくは変換するバイナリトランスレーション／変換器システムにより生成され得る。いくつかの他の実施形態において、複数のベクトルリダクション命令は、コンピュータプログラマによりプログラムに書き込まれてもよい。
【００１２】
一実施形態において、複数のベクトルリダクション命令は、複数の異なる算術演算および複数の異なる数値データフォーマット（例えば、単精度、倍精度、半精度等）のためにＶＡＤＤＲＥＤＵＣＥＰＳ、ＶＭＵＬＴＲＥＤＵＣＥＰＳ、ＶＳＵＢＲＥＤＵＣＥＰＳ、ならびにそれらの変形を含む。接頭辞「Ｖ」は、複数のベクトル演算を示す。「ＡＤＤ」、「ＭＵＬＴ」、および「ＳＵＢ」は、加算、乗算、および減算をそれぞれ示す。接尾辞「Ｐ」は、複数のパック演算（すなわち、ベクトル演算）を示し、接尾辞「Ｓ」は、複数の単精度データ要素を示す。他の複数の実施形態において、複数の異なる表記が、同一または類似の命令に用いられ得る。論述を単純化すれば、以下の説明では、別途具体的に記載されない限り、「ベクトルリダクション命令」という用語を用いることにより、これらのリダクション命令およびそれらの変形の全てを表し得る。一実施形態において、これらのベクトルリダクション命令により、プロセッサは、複数のデータ要素のアレイ上で算術演算（例えば、加算、減算、乗算等）を実行し、アレイにおける複数のデータ要素をシャッフルする。複数のベクトルリダクション命令は、１または複数のベクトルレジスタをオペランドとして用い、ソースオペランドとして機能するベクトルレジスタは、複数のデータ要素のアレイを用いて読み込まれる。各ベクトルリダクション命令は、複数のデータ要素上で動作し得る。複数のデータ要素のうちいくつかは、数学的に操作され（例えば、加算、減算、乗算等）、複数のデータ要素のうちいくつかは、シャッフルされる（例えば、アレイにおける異なる位置にシフトされる）。複数のベクトルリダクション命令は、複数のリダクション演算を高速化しつつ、複数の演算の同一の順序を保存し、複数の演算の所与の順序を指定するシリアルソースコードまたは別のソースコードと同一の結果を生成することができる。
【００１３】
図１は、複数の新しいリダクション命令を含む、複数の命令を実行するように動作可能な回路を含む、実行ユニット１４０を有する命令処理装置１１５の実施形態のブロック図である。いくつかの実施形態において、命令処理装置１１５は、プロセッサ、マルチコアプロセッサのプロセッサコア、または電子システムにおける処理要素であり得る。
【００１４】
デコーダ１３０は、複数のより高いレベルの機械命令またはマクロ命令の形態で複数の到来する命令を受信し、デコードして複数のより低いレベルのマイクロオペレーション、マイクロコードエントリーポイント、マイクロ命令、または他のより低レベルの命令もしくは制御信号を生成し、これらは、元のより高いレベルの命令を反映し、および／またはこれから導出される。複数のより低レベルの命令または制御信号は、より低いレベル（例えば、回路レベルまたはハードウェアレベル）の複数の演算を介してより高いレベルの命令の演算を実装し得る。デコーダ１３０は、様々な異なるメカニズムを用いて実装され得る。好適なメカニズムの例としては、マイクロコード、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、当技術分野において既知のデコーダを実装するべく用いられる他のメカニズム等が挙げられるが、これらに限定されない。
【００１５】
デコーダ１３０は、キャッシュ１１０、メモリ１２０、または他の複数のリソースのために複数の到来する命令を受信し得る。複数のデコード済み命令は、実行ユニット１４０に送信される。実行ユニット１４０は、デコーダ１３０から１または複数のマイクロオペレーション、マイクロコードエントリーポイント、マイクロ命令、他の命令、または他の制御信号を受信し、これらは、複数の受信済み命令を反映し、またはこれらから導出され得る。実行ユニット１４０は、レジスタファイル１７０、キャッシュ１１０、および／またはメモリ１２０からのデータ入力を受信し、レジスタファイル１７０、キャッシュ１１０、および／またはメモリ１２０へのデータ出力を生成する。
【００１６】
一実施形態において、レジスタファイル１７０は、複数のアーキテクチャレジスタを含み、複数のアーキテクチャレジスタもレジスタと呼ばれる。別途指定され、または明らかである場合を除き、アーキテクチャレジスタ、レジスタファイル、およびレジスタという文言は、ソフトウェアおよび／またはプログラマに可視（例えば、ソフトウェアに可視）の複数のレジスタ、および／または複数のオペランドを識別するべく複数のマクロ命令により指定される複数のレジスタを指すものとして本明細書中で用いられる。これらのレジスタは、所与のマイクロアーキテクチャ（例えば、一時的レジスタ、リオーダバッファ、リタイアメントレジスタ等）における他の複数の非アーキテクチャレジスタに対比される
【００１７】
説明を不明瞭にするのを避けるべく、比較的単純な命令処理装置１１５が示され、説明される。他の実施形態は、２以上の実行ユニットを有し得ることを理解されたい。例えば、装置１１５は、例えば、算術ユニット、算術ロジックユニット（ＡＬＵ）、整数ユニット、浮動小数点ユニット等の複数の異なるタイプの実行ユニットを含み得る。命令処理装置または複数のプロセッサのなおも他の複数の実施形態は、複数のコア、論理プロセッサ、または実行エンジンを有し得る。命令処理装置１１５のいくつかの実施形態は、図７Ａ〜１３に関連して後に提供される。
【００１８】
一実施形態によれば、レジスタファイル１７０は、１セットのベクトルレジスタ１７５を含み、これは、複数のベクトルリダクション命令のオペランドを格納するべく使用され得る。各ベクトルレジスタ１７５は、５１２ビット、２５６ビット、または１２８ビット幅（すなわち、６４バイト、３２バイト、または１６バイト幅）であり得、または異なるベクトル幅が用いられてもよい。
【００１９】
図２は、本明細書において説明される複数の命令をサポートする基礎的レジスタアーキテクチャ２００の一実施形態を図示する。レジスタアーキテクチャ２００は、ｘ８６、ＭＭＸ（商標）、ストリーミングＳＩＭＤ拡張（ＳＳＥ）、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４．１、およびＳＳＥ４．２命令、ならびにアドバンストベクトルエクステンション（ＡＶＸ）（ＡＶＸ１、ＡＶＸ２、およびＡＶＸ３）と呼ばれる追加のセットのＳＩＭＤ拡張を含む命令セットを実装するＩｎｔｅｌ（登録商標）Ｃｏｒｅ（商標）プロセッサに基づく。しかし、複数の異なるレジスタの長さ、異なるレジスタのタイプ、および／または異なる数のレジスタをサポートする異なるレジスタアーキテクチャを使用し得ることを理解されたい。
【００２０】
図示される実施形態において、５１２ビット幅の３２のベクトルレジスタ２１０が存在する。これらのレジスタは、ｚｍｍ０〜ｚｍｍ３１と呼ばれる。より低い１６のｚｍｍレジスタの下位の２５６ビットは、複数のレジスタｙｍｍ０―１５上にオーバーレイされる。より低い１６のｚｍｍレジスタの下位の１２８ビット（複数のｘｍｍレジスタの下位の１２８ビット）は、複数のレジスタｘｍｍ０―１５上にオーバーレイされる。図示される実施形態において、８つのマスクレジスタ２２０（ｋ０〜ｋ７）が存在し、それぞれは、６４ビットの長さである。代替的な実施形態において、複数のマスクレジスタ２２０は、１６ビット幅である。
【００２１】
図示される一実施形態において、レジスタアーキテクチャ２００は、１６の６４ビット汎用（ＧＰ）レジスタ２３０を更に含む。一実施形態において、これらは、既存のｘ８６アドレスモードと共に用いられ、複数のメモリオペランドをアドレス指定する。また、本実施形態は、複数のＲＦＬＡＧＳレジスタ２６０、ＲＩＰレジスタ２７０、およびＭＸＣＳＲレジスタ２８０を図示する。
【００２２】
また、本実施形態は、ＭＭＸパック整数フラットレジスタファイル２５０がエイリアスされるスカラ浮動小数点（ＦＰ）スタックレジスタファイル（ｘ８７スタック）２４０を図示する。図示される実施形態において、ｘ８７スタックは、ｘ８７命令セット拡張を用いて、３２／６４／８０ビットの浮動小数点データに複数のスカラ浮動小数点演算を実行するべく用いられる８要素のスタックであるが、複数のＭＭＸレジスタは、６４ビットのパック整数データに複数の演算を実行し、ならびにＭＭＸレジスタとｘｍｍレジスタとの間で実行されるいくつかの演算のオペランドを保持するべく用いられる。
【００２３】
本発明の代替的な実施形態は、より広いか、またはより狭いレジスタを使用し得る。
【００２４】
更に、本発明の複数の代替的実施形態は、より多いかより少ない、または異なるレジスタファイルおよびレジスタを使用し得る。
【００２５】
図３Ａおよび３Ｂは、ＶＡＤＤＲＥＤＵＣＥＰＳ命令（単精度について）およびＶＡＤＤＲＥＤＵＣＥＰＤ命令（倍精度について）にそれぞれに応答してプロセッサ（例えば、命令処理装置１１５）により実行される複数のリダクション演算の例を図示するダイアグラムである。半精度のバージョンは、同様に定義され得る。複数の例は、複数のリダクション演算のために加算を用いるが、代替の複数の実施形態において、加算演算子は、複数の数のシーケンスを単一の数に縮小させることができる任意の算術演算子により置換されてもよく、複数の演算が実行される順序は、その単一の数の値を変更し得る。
【００２６】
図２のｚｍｍレジスタ等、この例における各ベクトルレジスタ３１０、３２０、３３０および３４０は、６４バイト幅で示される。各ベクトルレジスタは、４つのレーンに分割され、各レーン（１６バイト）は、４つの単精度浮動小数点数等、同一の数の複数のデータ要素を格納する。代替の複数の実施形態において、複数のベクトルレジスタは、１６バイト幅（例えば、図２のｘｍｍレジスタ）、３２バイト幅（例えば、図２のｘｍｍレジスタ）、または異なるベクトル幅であり得、異なる数のレーンに分割され得る。
【００２７】
図３Ａの例において、ソースベクトルレジスタ３１０は、１６の単精度データ要素Ａ０〜Ａ１５を用いて４つのレーンに読み込まれる。ＶＡＤＤＲＥＤＵＣＥＰＳ命令により、プロセッサは、各レーン内で同様に動作し、複数の単精度値に関する付加的なリダクション演算を実行する。付加的なリダクション演算は、各レーンにおける２つの右端の値（すなわち、２つの最下位の値）を加算し、他の値は、レーン境界を交差することなく同一レーンにおいて位置を１つ右側にシフトさせる。ゼロを各レーンにおける左端（すなわち、最上位の）位置に挿入する。ソースベクトルレジスタ３１０の複数の値にこの演算を１回適用する結果を、図３Ａのデスティネーションベクトルレジスタ３２０に示す。一実施形態において、デスティネーションベクトルレジスタ３２０は、ソースベクトルレジスタ３１０と同一のレジスタであってもよい。代替の複数の実施形態において、レジスタ３１０および３２０は、異なるレジスタであってもよい。
【００２８】
図３Ｂの例は、ソースベクトルレジスタ３３０における複数の倍精度値のデータ要素アレイにプロセッサにより実行されるＶＡＤＤＲＥＤＵＣＥＰＤ命令を示す。ソースベクトルレジスタ３３０は、ソースベクトルレジスタ３１０と同一の幅を有し、従って、８つの倍精度値（図３Ａの１６の単精度値ではなく）を格納し得る。ＶＡＤＤＲＥＤＵＣＥＰＤ命令を１回適用する結果を、デスティネーションベクトルレジスタ３４０に示し、デスティネーションベクトルレジスタ３４０は、ソースベクトルレジスタ３３０と同一のレジスタであるか、または異なるレジスタであり得る。
【００２９】
より形式的には、命令ＶＡＤＤＲＥＤＵＣＥＰＳ  ＳＲＣ、ＤＳＴは、以下のように実行する。
ＤＳＴ［３１：０］＝ＳＲＣ［３１：０］＋ＳＲＣ［６３：３２］
ＤＳＴ［６３：３２］＝ＳＲＣ［９５：６４］
ＤＳＴ［９５：６４］＝ＳＲＣ［１２７：９６］
ＤＳＴ［１２７：９６］＝０
ＤＳＴ［１５９：１２８］＝ＳＲＣ［１５９：１２８］＋ＳＲＣ［１９１：１６０］
ＤＳＴ［１９１：１６０］＝ＳＲＣ［２２３：１９２］
ＤＳＴ［２２３：１９２］＝ＳＲＣ［２５５：２２４］
ＤＳＴ［２５５：２２４］＝０
ＤＳＴ［２８７：２５６］＝ＳＲＣ［２８７：２５６］＋ＳＲＣ［３１９：２８８］
ＤＳＴ［３１９：２８８］＝ＳＲＣ［３５１：３２０］
ＤＳＴ［３５１：３２０］＝ＳＲＣ［３８３：３５２］
ＤＳＴ［３８３：３５２］＝０
ＤＳＴ［４１５：３８４］＝ＳＲＣ［４１５：３８４］＋ＳＲＣ［４４７：４１６］
ＤＳＴ［４４７：４１６］＝ＳＲＣ［４７９：４４８］
ＤＳＴ［４７９：４４８］＝ＳＲＣ［５１１：４８０］
ＤＳＴ［５１１：４８０］＝０
倍精度バージョンＶＡＤＤＲＥＤＵＣＥＰＤ  ＳＲＣ、ＤＳＴは、以下のように実行する。
ＤＳＴ［６３：０］＝ＳＲＣ［６３：０］＋ＳＲＣ［１２７：６４］
ＤＳＴ［１２７：６４］＝０
ＤＳＴ［１９１：１２８］＝ＳＲＣ［１９１：１２８］＋ＳＲＣ［２５５：１９２］
ＤＳＴ［２５５：１９２］＝０
ＤＳＴ［３１９：２５６］＝ＳＲＣ［３１９：２５６］＋ＳＲＣ］［３８３：３２０］
ＤＳＴ［３８３：３２０］＝０
ＤＳＴ［４４７：３８４］＝ＳＲＣ［４４７：３８４］＋ＳＲＣ［５１１：４４８］
ＤＳＴ［５１１：４４８］＝０
【００３０】
減算、乗算、または他の複数の算術演算のための相似のリダクション演算も定義され得る。更に、ＡＶＸ３結合マスキングまたはゼロイングマスキングは、最終デスティネーションレジスタを書き込む場合に適用され得る。一実施形態において、複数のＫマスクレジスタ２２０（図２）は、最終デスティネーションレジスタに書き込まれた結果を修正するべく使用され得る。マスクレジスタが指定されない場合、（前の段落に説明したように）デスティネーションレジスタ全体が書き込まれる。結合マスキングが適用される代替的な一実施形態において、デスティネーションレジスタに複数の指定位置の元のコンテンツを保存するマスクレジスタが指定され得る。結合マスキングを用いて、最終値がデスティネーションレジスタに書き込まれる前に、前の段落で算出された結果は、デスティネーションレジスタの既存のコンテンツと結合される。ゼロマスキングが適用される代替的な一実施形態において、マスクは、ゼロになるべきデスティネーションレジスタにおける複数の位置を指定するマスクレジスタにおいて供給される。
【００３１】
図４Ａは、複数のアレイ位置の昇順で単精度データ要素のアレイに付加的なリダクション演算を実行するアセンブリコードの一例を示す。アセンブリコードは、（ａ）ＶＡＤＤＲＥＤＵＣＥＰＳ命令を用いないＡＶＸ３コード、（ｂ）ＳＳＥコード、および（ｃ）ＶＡＤＤＲＥＤＵＣＥＰＳ命令を用いるＡＶＸ３コードのシナリオを示す。（ａ）と（ｃ）との間および（ｂ）と（ｃ）との間の矢印は、（ａ）および（ｂ）におけるアセンブリコードが、例えば、コンパイラまたはコードトランスレータ／変換器を起動するコンピュータシステム、またはプログラマにより（ｃ）におけるコードに翻訳または変換され得ることを示す。（ａ）および（ｃ）におけるＡＶＸ３コードは、一度に１６の単精度データ要素を読み込み得るが、（ｂ）におけるＳＳＥコードは、一度に４つの要素のみを読み込むことができることに留意されたい。従って、ＳＳＥコードは、ＡＶＸ３コードの１ループにおけるのと同一の数の複数の要素を処理するには、４回ループする必要がある。リダクション演算のシリアル化した性質に起因して、（ａ）および（ｃ）におけるＡＶＸ３コードは、まず、６４バイトのｚｍｍレジスタから４つの要素を抽出して、それぞれ１６バイトのｘｍｍ０〜ｘｍｍ３レジスタにする必要がある。コードにおいて、「ＡＤＤＳＳ」は、ベクトルレジスタｘｍｍにおける最下位の要素を和に加算するべく使用されるスカラ加算命令であり、「ＡＤＤＰＳ」は、並列加算を実行するべく使用されるパックデータ加算命令である。「ＭＯＶＳＨＤＵＰ」および「ＭＯＶＨＬＰＳ」等の命令は、後のスカラ加算のためにｘｍｍにおける要素を最下位の位置にシャッフルするべく使用される様々なシャッフル命令である。加算の総数は、（ａ）、（ｂ）、および（ｃ）におけるコードのそれぞれについて同一である。そのため、元のコードの浮動小数点の四捨五入動作を保存する要求を考慮して１６のシリアル加算を実行する必要性を避けることができない。それにも関わらず、（ｃ）におけるＡＶＸ３コードは、他の２つのバージョンよりも効率的である。（ｃ）におけるＶＡＤＤＲＥＤＵＣＥＰＳ命令は、加算演算およびシャッフル演算の双方を含み、ＭＯＶＳＨＤＵＰ命令および、（ａ）および（ｂ）の双方において存在するＭＯＶＨＬＰＳ命令等、１６の要素のリダクションループ内でのレーン間抽出に対する必要性を取り除くからである。
【００３２】
図４Ｂは、複数の単精度データ要素のアレイに付加的なリダクション演算を実行するアセンブリコードの更なる例を示し、（ａ）におけるＳＳＥコードは、４つのレーンのそれぞれにおける４つの部分和を用いてリダクションを実行するべく生成され、次に、４つの部分和は、ループ本体に従って単一の値に合計される。
【００３３】
アセンブリコードは、（ａ）ＳＳＥコードおよび（ｂ）ＶＡＤＤＲＥＤＵＣＥＰＳ命令を用いるＡＶＸ３コードのシナリオを示す。コンパイラまたはバイナリトランスレーション／変換器システムは、（ａ）において、複数のより広いベクトルレジスタ（それぞれは、１６の単精度データ要素を収容する）を利用してＡＶＸ３コードに変換することにより計算を加速するべく使用されるが、元のＳＳＥコード（各ベクトルレジスタに４つの単精度データ要素を有する）の正確な浮動小数点の丸め動作を保存することができる。（ｂ）において示されるＡＶＸ３コードは、ＳＳＥバージョン（すなわち、（ａ）における％［ｓｕｍ］）に存在する４つの部分和を、ｚｍｍレジスタ（すなわち％［ｚｓｕｍ］）の各レーンの最下位の要素中に配置する。ループ本体に従って、４つの部分和要素自体は、単一の値に合計される。（ｂ）のＡＶＸ３コードにおいて、％［ｉｎｄｉｃｅｓ］は、複数のデータ要素の置換パターンを決定する定数を含む。この置換は、４つのレーンのそれぞれの最下位の要素を最下位のレーンの４つの隣接要素に、また各レーンの最上位の要素を最上位のレーンの４つの隣接要素に移動させる。つまり、％［ｉｎｄｉｃｅｓ］は、３２ビットの整数Ｆ，Ｂ，７，３，Ｅ，Ａ，６，２，Ｄ，９，５，１，Ｃ，８，４，０を含み、複数のデータ要素を（ａ）におけるコードと同一の順序で操作することを可能にする。（ｂ）におけるループ本体は、必要な４つの加算に加えて、１つの追加の命令のみ（置換命令ＶＰＥＲＭＰＳ）を含むことに留意されたい。
【００３４】
図５Ａは、一実施形態によるコンピュータシステム５００の複数の要素を図示する。コンピュータシステム５００は、ソフトウェアを格納するメインメモリ５５０を含み、ソフトウェアをサポートする複数のハードウェア要素も含む。ソフトウェアは、アプリケーションソフトウェア５６０（複数のコードブロック５６１を含む）およびＯＳ５３０を含み得る。他のシステムおよびユーザレベルのソフトウェアは、示されない。一実施形態において、複数のコードブロック５６１は、コンパイラ５２０を用いてコンパイルされ、コンパイラ５２０は、メインメモリ５５０または異なるシステムのメモリ内に存在してもよい。コンパイラ５２０は、静的コンパイラまたは実行時コンパイラであり得る。いくつかの実施形態において、複数のコードブロック５６１は、ＯＳ５３０上で起動するその他のソフトウェア内に存在してもよい。一実施形態において、複数のコードブロック５６１は、ＯＳ５３０または他のシステムソフトウェアの一部であってもよい。一実施形態において、複数のコードブロック５６１は、上記のベクトルリダクション命令を含む。
【００３５】
システム５００は、１または複数のプロセッサ５４０等、複数のハードウェア要素を更に含む。複数のプロセッサ５４０のうち１または複数は、複数の５８０を含み得る。一実施形態において、各プロセッサコア５８０は、ハイパースレッディング技術による同時マルチスレッディング（ＳＭＴ）等のマルチスレッディングをサポートする。各プロセッサコア５８０は、複数のベクトルリダクション命令を実行する実行回路５８５を含む。また、各プロセッサコア５８０は、ベクトルリダクション命令に関連して使用するために複数のベクトルレジスタを含む。一実施形態において、プロセッサ５４０は、図１の命令処理装置１１５であり、実行回路５８５は、図１の実行ユニット１４０である。
【００３６】
図５Ｂは、一実施形態による、ベクトルリダクション命令を実行する方法５１０のブロックフロー図である。方法５１０は、プロセッサ（より詳細には、例えば、図５Ａの実行回路５８５）により、ベクトルリダクション命令の受信を開始する。ベクトルリダクション命令は、ソースオペランドに格納された複数のデータ要素を含むアレイを、リダクション演算子を用いてデスティネーションオペランド内の結果へと縮小させる（ブロック５１１）。ソースオペランドおよびデスティネーションオペランドのそれぞれは、１セットのベクトルレジスタのうちの１つであり、各ベクトルレジスタは、複数のレーンに分割され、各レーンは、同一の数の複数のデータ要素を格納する。リダクション演算子は、加算、減算、乗算、または他の算術演算子であり得る。各データ要素は、倍精度の浮動小数点数、単精度小数点数、半精度小数点数、または複数の他の数値データフォーマットであり得る。ベクトルリダクション命令に応答して、プロセッサは、各レーンにおける複数のデータ要素のうち２つにリダクション演算子を適用し（ブロック５１２）、複数のデータ要素のうち少なくとも１つが各レーンに残存する場合に、１または複数の残存データ要素をシフトさせる（ブロック５１３）。また、プロセッサは、各レーンにおける最上位の位置にゼロを挿入してもよい（ブロック５１４）。一実施形態において、プロセッサは、上記のベクトルリダクション命令のいずれも有しないリダクションコードを、ベクトルリダクション命令のうち１または複数を有する翻訳済みリダクションコードに変換することができ、リダクションコードおよび翻訳済みリダクションコードは、複数のレーン全体で複数のデータ要素のアレイに適用される複数のリダクション演算の同一のシーケンスを指定し、同一の結果を生成する。
【００３７】
様々な実施形態において、図５Ｂの方法は、汎用プロセッサ、特定用途用プロセッサ（例えば、グラフィクスプロセッサもしくはデジタル信号プロセッサ）、または別のタイプのデジタルロジックデバイスもしくは命令処理装置により実行され得る。いくつかの実施形態において、図５Ｂの方法は、図５Ａの実行回路５８５、図１の命令処理装置１１５、または図７Ａ〜１３において示す実施形態等の類似のプロセッサ、装置、もしくはシステムにより実行され得る。更に、図５Ａの実行回路５８５、図１の命令処理装置１１５、ならびに図７Ａ〜１３に示すプロセッサ、装置、またはシステムは、図５Ｂの方法によるものと同一、類似、または異なるいずれかの演算および方法の複数の実施形態を実行し得る。
【００３８】
いくつかの実施形態において、図１の命令処理装置１１５は、ソース命令セットからターゲット命令セットに命令を変換する命令変換器と共に動作し得る。例えば、命令変換器は、命令を、コアにより処理される１または複数の他の命令に翻訳（例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを用いて）、モーフィング、エミュレート、または変換し得る。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装され得る。命令変換器は、プロセッサ上、プロセッサから離れて、または部分的にプロセッサ上にあり、部分的にプロセッサから離れていてもよい。
【００３９】
図６は、本発明の複数の実施形態による、ソフトウェア命令変換器の使用を対比するブロック図である。図示する実施形態において、命令変換器は、ソフトウェア命令変換器であるが、別法では、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装されてもよい。図６は、ｘ８６コンパイラ６０４を用いてコンパイルされ、少なくとも１つのｘ８６命令セットコアを有するプロセッサ６１６によりネイティブに実行され得るｘ８６バイナリコード６０６を生成し得る、高水準言語６０２のプログラムを示す。少なくとも１つのｘ８６命令セットコアを有するプロセッサ６１６は、少なくとも１つのｘ８６命令セットコアを有するインテル製プロセッサと実質的に同一の結果を実現するべく、（１）インテルｘ８６命令セットコアの命令セットの実質的部分、または（２）少なくとも１つのｘ８６命令セットコアを有するインテル製プロセッサ上で起動することを目的とする複数のオブジェクトコードバージョンのアプリケーションまたは他のソフトウェアを互換的に実行または処理することにより、少なくとも１つのｘ８６命令セットコアを有するインテル製プロセッサと実質的に同一の関数を実行し得るいずれのプロセッサも表す。ｘ８６コンパイラ６０４は、更なる連携処理を用い、または用いずに、少なくとも１つのｘ８６命令セットコア６１６を有するプロセッサ上で実行され得る、ｘ８６バイナリコード６０６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラを表す。
【００４０】
同様に、図６は、代替的な命令セットコンパイラ６０８を用いてコンパイルされ、少なくとも１つのｘ８６命令セットコアを有しないプロセッサ６１４（例えば、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｙのＭＩＰＳ命令セットを実行し、および／またはカリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇのＡＲＭ命令セットを実行するコアを有するプロセッサ）によりネイティブに実行され得る、代替的な命令セットバイナリコード６１０を生成し得る、高水準言語６０２のプログラムを示す。命令変換器６１２は、ｘ８６バイナリコード６０６を、ｘ８６命令セットコアを有しないプロセッサ６１４によりネイティブに実行され得るコードに変換するべく使用される。この変換済みコードは、代替的な命令セットバイナリコード６１０と同一である可能性が高くない。これを行うことができる命令変換器を作製することが困難であるためである。しかし、変換済みコードは、一般的な演算を成し遂げ、代替的な命令セットの複数の命令からなるであろう。従って、命令変換器６１２は、エミュレーション、シミュレーション、またはその他の処理により、ｘ８６命令セットのプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスが、ｘ８６バイナリコード６０６を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
【００４１】
例示的な複数のコアアーキテクチャ
インオーダおよびアウトオブオーダコアブロック図
図７Ａは、本発明の複数の実施形態による、例示的なインオーダパイプライン、および例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの双方を図示するブロック図である。図７Ｂは、本発明の複数の実施形態による、インオーダアーキテクチャコアの例示的な一実施形態、およびプロセッサに含まれる例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの双方を図示するブロック図である。図７Ａおよび７Ｂにおける実線で囲まれた複数のボックスは、インオーダパイプラインおよびインオーダコアを図示するが、複数の点線ボックスの任意選択の追加は、レジスタリネーミング、アウトオブオーダ発行／実行パイプライン、およびコアを図示する。インオーダ態様がアウトオブオーダ態様のサブセットであることを考慮して、アウトオブオーダ態様は、説明される。
【００４２】
図７Ａにおいて、プロセッサパイプライン７００は、フェッチ段７０２、長さデコード段７０４、デコード段７０６、割り当て段７０８、リネーム段７１０、スケジューリング（発送または発行としても知られる）段７１２、レジスタ読み出し／メモリ読み出し段７１４、実行段７１６、ライトバック／メモリ書込み段７１８、例外処理段７２２、およびコミット段７２４を含む。
【００４３】
図７Ｂは、実行エンジンユニット７５０に結合されたフロントエンドユニット７３０を含むプロセッサコア７９０を示し、双方がメモリユニット７７０に結合される。コア７９０は、縮小命令セットコンピューテイング（ＲＩＳＣ）コア、複合命令セットコンピューテイング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、またはハイブリッドもしくは代替的コアタイプであってもよい。なおも別の選択肢としては、コア７９０は、例えば、ネットワークもしくは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューテインググラフィクス処理ユニット（ＧＰＧＰＵ）コア、グラフィックスコア等の専用コアであってもよい。
【００４４】
フロントエンドユニット７３０は、命令キャッシュユニット７３４に結合された分岐予測ユニット７３２を含み、分岐予測ユニット７３２は、命令翻訳ルックアサイドバッファ（ＴＬＢ）７３６に結合され、命令翻訳ルックアサイドバッファ７３６は、命令フェッチユニット７３８に結合され、命令フェッチユニット７３８は、デコードユニット７４０に結合される。デコードユニット７４０（またはデコーダ）は、複数の命令をデコードし、出力として、１または複数のマイクロオペレーション、マイクロコードエントリーポイント、マイクロ命令、他の命令、または他の制御信号を生成することができ、これらは、元の命令からデコードされ、または、元の命令を反映し、あるいは元の命令から導出される。デコードユニット７４０は、様々な異なるメカニズムを用いて実装され得る。好適なメカニズムの例としては、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）等が挙げられるが、これらに限定されない。一実施形態において、コア７９０は、特定のマクロ命令（例えば、デコードユニット７４０またはフロントエンドユニット７３０内の）のためのマイクロコードを格納するマイクロコードＲＯＭまたは他の媒体を含む。デコードユニット７４０は、実行エンジンユニット７５０内のリネーム／アロケータユニット７５２に結合される。
【００４５】
実行エンジンユニット７５０は、リタイアメントユニット７５４および１または複数のスケジューラユニット７５６のセットに結合されたリネーム／アロケータユニット７５２を含む。スケジューラユニット７５６は、任意の数の異なるスケジューラを表し、複数の予約局、中央命令ウィンドウ等を含む。スケジューラユニット７５６は、物理レジスタファイルユニット７５８に結合される。物理レジスタファイルユニット７５８のそれぞれは、１または複数の物理レジスタファイルを表し、その異なるものが、スカラ整数、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、状態（例えば、実行される次の命令のアドレスである命令ポインタ）等、１または複数の異なるデータタイプを格納する。一実施形態において、物理レジスタファイルユニット７５８は、ベクトルレジスタユニット、ライトマスクマスクレジスタユニット、およびスカラレジスタユニットを備える。これらのレジスタユニットは、複数のアーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供し得る。物理レジスタファイルユニット７５８は、リタイアメントユニット７５４と重複しており、レジスタリネーミングおよびアウトオブオーダ実行が実装され得る（例えば、リオーダバッファおよびリタイアメントレジスタファイルを用い、将来のファイル、履歴バッファ、およびリタイアメントレジスタファイルを用い、複数のレジスタマップおよび複数のレジスタのプールを用いる等して）様々な様式を図示するリタイアメントユニット７５４および物理レジスタファイルユニット７５８は、実行クラスタ７６０に結合される。実行クラスタ７６０は、１または複数の実行ユニット７６２のセットおよび１または複数のメモリアクセスユニット７６４のセットを含む。複数の実行ユニット７６２は、様々な演算（例えば、シフト、加算、減算、乗算）を様々なタイプのデータ（例えば、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点）に実行し得る。いくつかの実施形態は、複数の具体的関数または複数のセットの関数に専用のいくつかの実行ユニットを含んでもよいが、他の複数の実施形態は、１つのみの実行ユニットまたは複数の実行ユニットを含んでもよく、これらは全て、あらゆる関数を実行する。スケジューラユニット７５６、物理レジスタファイルユニット７５８、および実行クラスタ７６０は、場合によっては複数であるものとして示される。特定の複数の実施形態が、複数の特定のタイプのデータ／演算（例えば、スカラ整数パイプライン、スカラ浮動小数点／パック整数／パック浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／またはメモリアクセスパイプライン。これらは、それぞれが自身のスケジューラユニット、物理レジスタファイルユニット、および／または実行クラスタを有し、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみが、メモリアクセスユニット７６４を有する特定の実施形態が実装される）用に別個の複数のパイプラインを作成するからである。また、別個の複数のパイプラインが使用される場合、これらのパイプラインのうち１または複数は、アウトオブオーダ発行／実行であり、レストインオーダであってもよいことを理解されたい。
【００４６】
メモリアクセスユニット７６４のセットは、メモリユニット７７０に結合され、メモリユニット７７０は、データキャッシュユニット７７４に結合されたデータＴＬＢユニット７７２を含み、データＴＬＢユニット７７２は、レベル２（Ｌ２）キャッシュユニット７７６に結合される。例示的な一実施形態において、複数のメモリアクセスユニット７６４は、読み込みユニット、格納アドレスユニット、および格納データユニットを含んでもよく、それらのそれぞれが、メモリユニット７７０におけるデータＴＬＢユニット７７２に結合される。命令キャッシュユニット７３４は、メモリユニット７７０におけるレベル２（Ｌ２）キャッシュユニット７７６に更に結合される。Ｌ２キャッシュユニット７７６は、１または複数の他のレベルのキャッシュに、そして最終的にはメインメモリに結合される。
【００４７】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、次のようにパイプライン７００を実装することができる。１）命令フェッチ７３８は、フェッチおよび長さデコード段７０２および７０４を実行する。２）デコードユニット７４０は、デコード段７０６を実行する。３）リネーム／アロケータユニット７５２は、割り当て段７０８およびリネーム段７１０を実行する。４）スケジューラユニット７５６は、スケジュール段７１２を実行する。５）物理レジスタファイルユニット７５８およびメモリユニット７７０は、レジスタ読み出し／メモリ読み出し段７１４を実行する。実行クラスタ７６０は、実行段７１６を実行する。６）メモリユニット７７０および物理レジスタファイルユニット７５８は、ライトバック／メモリ書込み段７１８を実行する。７）様々なユニットは、例外処理段７２２に含まれ得る。８）リタイアメントユニット７５４および物理レジスタファイルユニット７５８は、コミット段７２４を実行する。
【００４８】
コア７９０は、本明細書において説明される命令を含む、１または複数の命令セット（例えば、ｘ８６命令セット（複数のより新しいバージョンについてはいくつかの拡張が追加されている）、カルフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｙのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇのＡＲＭ命令セット（ＮＥＯＮ等の任意選択の追加の拡張））をサポートすることができる。一実施形態において、コア７９０は、パックデータ命令セット拡張（例えば、ＳＳＥ、ＡＶＸ１、ＡＶＸ２等）をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションにより用いられる複数の演算が、パックデータを用いて実行されることを可能にする。
【００４９】
コアは、マルチスレッディング（２またはそれ以上の並列なセットの演算またはスレッドを実行する）をサポートすることができ、タイムスライスされたマルチスレッディング、同時マルチスレッディング（１つの物理コアが、物理コアが同時にマルチスレッディングしている複数のスレッドのそれぞれに対して論理コアを提供する）、またはこれらの組み合わせ（例えば、タイムスライスされたフェッチングおよびデコード、ならびにインテル（登録商標）ハイパースレッディング技術等、その後の同時マルチスレッディング）を含む様々な方法でサポートをすることができることを理解されたい。
【００５０】
レジスタリネーミングは、アウトオブオーダ実行の文脈で説明されるが、レジスタリネーミングは、インオーダアーキテクチャにおいて用いられ得ることを理解されたい。また、プロセッサの図示される実施形態は、別個の命令および複数のデータキャッシュユニット７３４／７７４、ならびに共有Ｌ２キャッシュユニット７７６を含むが、代替的な複数の実施形態は、例えば、レベル１（ＬＩ）内部キャッシュまたは複数のレベルの内部キャッシュ等、複数の命令およびデータの双方に対して１つの内部キャッシュを有してもよい。いくつかの実施形態において、システムは、内部キャッシュ、およびコアおよび／またはプロセッサの外部にある外部キャッシュの組み合わせを含んでもよい。あるいは、キャッシュの全ては、コアおよび／またはプロセッサの外部にあってもよい。
【００５１】
具体的な例示的インオーダコアアーキテクチャ
図８Ａ〜図８Ｂは、より具体的な例示的インオーダコアアーキテクチャのブロック図を図示し、そのコアは、チップにおいて、いくつかのロジックブロック（同一のタイプおよび／または異なるタイプの他の複数のコアを含む）のうちの１つであろう。複数のロジックブロックは、用途に応じて、いくつかの固定関数ロジック、メモリＩ／Ｏインターフェース、および他の必要なＩ／Ｏロジックを用いる高帯域幅の相互接続ネットワーク（例えば、リングネットワーク）を介して通信する。
【００５２】
図８Ａは、本発明の複数の実施形態による、オンダイ相互接続ネットワーク８０２への接続を伴い、レベル２（Ｌ２）キャッシュ８０４のローカルサブセットを有する、単一のプロセッサコアのブロック図である。一実施形態において、命令デコーダ８００は、パックデータ命令セット拡張を用いるｘ８６命令セットをサポートする。ＬＩキャッシュ８０６は、キャッシュメモリに低いレイテンシでアクセスし、スカラユニットおよびベクトルユニットへと至ることを可能にする。一実施形態において（設計を単純化するべく）、スカラユニット８０８およびベクトルユニット８１０は、複数の別個のレジスタセット（それぞれ、スカラレジスタ８１２およびベクトルレジスタ８１４）を用い、それらの間で転送されるデータは、メモリに書き込まれた後、レベル１（ＬＩ）キャッシュ８０６からリードバックされ、本発明の代替的な実施形態は、異なるアプローチ（例えば、単一のレジスタセットを用い、またはデータが、ライトバックおよびリードバックされることなく２つのレジスタファイル間で転送されることを可能にする通信パスを含む）を用い得る。
【００５３】
Ｌ２キャッシュ８０４のローカルサブセットは、複数の別個のローカルサブセットに分割され、プロセッサコア毎に１つのグローバルＬ２キャッシュの一部である。各プロセッサコアは、Ｌ２キャッシュ８０４の自身のローカルサブセットへの直接的アクセス経路を有する。プロセッサコアにより読み込まれるデータは、Ｌ２キャッシュサブセット８０４内に格納され、自身のローカルＬ２キャッシュサブセットにアクセスする他の複数のプロセッサコアと並列して迅速にアクセスされ得る。プロセッサコアにより書き込まれるデータは、自身のＬ２キャッシュサブセット８０４内に格納され、必要な場合に、他の複数のサブセットからフラッシュされる。リングネットワークは、共有データのためにコヒーレンシを確実にする。リングネットワークは、双方向であり、プロセッサコア、Ｌ２キャッシュ、および他のロジックブロック等のエージェントがチップ内で互いに通信することを可能にする。
【００５４】
図８Ｂは、本発明の複数の実施形態による、図８Ａのプロセッサコアの一部の拡大図である。図８Ｂは、ＬＩキャッシュ８０４のＬＩデータキャッシュ８０６Ａ部分、ならびにベクトルユニット８１０および複数のベクトルレジスタ８１４に関する更なる詳細を含む。具体的には、ベクトルユニット８１０は、１６ｗｉｄｅのベクトル処理ユニット（ＶＰＵ）（１６ｗｉｄｅＡのＬＵ８２８を参照されたい）であり、整数、単精度浮動、および倍精度浮動の命令のうち１または複数を実行する。ＶＰＵは、スウィズルユニット８２０、数値変換ユニット８２２Ａ〜Ｂを用いる数値変換、およびメモリ入力に基づく複製ユニット８２４を用いた複製を用いてレジスタ入力をスウィズルすることをサポートする。ライトマスクレジスタ８２６は、生じるベクトル書き込みを断定することを可能にする。
【００５５】
集積メモリコントローラおよびグラフィックスを用いるプロセッサ
図９は、プロセッサ９００のブロック図であり、プロセッサ９００は、本発明の複数の実施形態による２以上のコア、集積メモリコントローラ、集積グラフィックスを有し得る。図９の実線で囲まれた複数のボックスは、シングルコア９０２Ａ、システムエージェント９１０、１または複数のバスコントローラーユニットのセット９１６を有するプロセッサ９００を図示するが、複数の点線ボックスの任意選択の加算は、複数のコア９０２Ａ―Ｎ、システムエージェントユニット９１０内の１または複数の集積メモリコントローラユニットのセット９１４、および特定用途用ロジック９０８を有する代替的なプロセッサ９００を図示する。
【００５６】
従って、プロセッサ９００の異なる複数の実装形態としては、１）集積グラフィックスおよび／もしくは科学的（スループット）ロジック（１または複数のコアを含み得る）である特定用途用ロジック９０８、および１または複数の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコア、これら２つの組み合わせ）である複数のコア９０２Ａ―Ｎを有するＣＰＵ、２）主にグラフィックス用および／または科学的（スループット）ロジック用の多数の専用コアであるコア９０２Ａ―Ｎを有するコプロセッサ、３）多数の汎用インオーダコアである複数のコア９０２Ａ―Ｎを有するコプロセッサが挙げられ得る。従って、プロセッサ９００は、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ（汎用グラフィクス処理ユニット）、高スループット多集積コア（ＭＩＣ）コプロセッサ（３０またはそれ以上のコアを含む）、組込みプロセッサ等の汎用プロセッサ、コプロセッサ、または特定用途用プロセッサであってもよい。プロセッサは、１または複数のチップ上に実装されてもよい。プロセッサ９００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳ等、いくつかの処理技術のいずれかを用いる１または複数の基板の一部であってもよく、および／またはその上に実装されてもよい。
【００５７】
メモリヒエラルキーは、複数のコア内の１または複数のレベルのキャッシュ、１セット、または１もしくは複数の共有キャッシュユニット９０６、および複数の集積メモリコントローラユニットのセット９１４に結合された外部メモリ（図示せず）を含む。複数の共有キャッシュユニットのセット９０６は、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、または他の複数のレベルのキャッシュ、ラストレベルキャッシュ（ＬＬＣ）、および／またはこれらの複数の組み合わせ等、１または複数の中間レベルのキャッシュを含み得る。一実施形態において、リングベースの相互接続ユニット９１２は、統合グラフィックスロジック９０８、複数の共有キャッシュユニットのセット９０６、およびシステムエージェントユニット９１０／集積メモリコントローラユニット９１４を相互接続し、代替的な複数の実施形態は、そのような複数のユニットを相互接続する任意の数の周知の技術を使用し得る。一実施形態において、コヒーレンシは、１または複数のキャッシュユニット９０６と複数のコア９０２―Ａ―Ｎとの間で維持される。
【００５８】
いくつかの実施形態において、コア９０２Ａ―Ｎのうち１または複数は、マルチスレッディングが可能である。システムエージェント９１０は、複数のコア９０２Ａ―Ｎを調整および操作するそれらの構成要素を含む。システムエージェントユニット９１０は、例えば、電力制御ユニット（ＰＣＵ）およびディスプレイユニットを含んでもよい。ＰＣＵは、複数のコア９０２Ａ―Ｎおよび統合グラフィックスロジック９０８の電力状態を調整するのに必要とされるロジックおよび複数のコンポーネントであるか、またはこれらを含んでもよい。ディスプレイユニットは、１または複数の外部接続ディスプレイを駆動するためのものである。
【００５９】
複数のコア９０２Ａ―Ｎは、アーキテクチャ命令セットの観点からは同種または異種であり得る。つまり、複数のコア９０２Ａ―Ｎのうち２またはそれ以上は、同一の命令セットを実行することができるが、他のものは、その命令セットのサブセットまたは異なる命令セットのみを実行することができる場合がある
【００６０】
例示的な複数のコンピューターアーキテクチャ
図１０〜１３は、例示的な複数のコンピューターアーキテクチャのブロック図である。当技術分野で既知のラップトップ、デスクトップ、ハンドヘルド型ＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルド型デバイス、および他の様々な電子デバイスのための他の複数のシステム設計および構成も好適である。一般的に、本明細書において開示されるプロセッサおよび／または他の実行ロジックを組み込むことが可能な多種多様なシステムまたは電子デバイスは、概ね好適である。
【００６１】
ここで図１０を参照すると、本発明の一実施形態によるシステム１０００のブロック図が示されている。システム１０００は、１または複数のプロセッサ１０１０、１０１５を含み、１または複数のプロセッサ１０１０、１０１５は、コントローラハブ１０２０に結合され得る。一実施形態において、コントローラハブ１０２０は、グラフィックスメモリコントローラハブ（ＧＭＣＨ）１０９０および入力／出力ハブ（ＩＯＨ）１０５０（これは、別個のチップ上にあってもよい）を含む。ＧＭＣＨ１０９０は、メモリ１０４０およびコプロセッサ１０４５が結合されるメモリコントローラおよび複数のグラフィクスコントローラを含む。ＩＯＨ１０５０は、複数の入力／出力（Ｉ／Ｏ）デバイス１０６０をＧＭＣＨ１０９０に結合する。あるいは、メモリおよび複数のグラフィクスコントローラのうち１つまたは双方は、（本明細書において説明されるように）プロセッサ内に統合され、メモリ１０４０およびコプロセッサ１０４５は、プロセッサ１０１０、およびＩＯＨ１０５０を有するシングルチップにおけるコントローラハブ１０２０に直に結合される。
【００６２】
追加の複数のプロセッサ１０１５の任意選択の性質は、図１０において、破線で示される。各プロセッサ１０１０、１０１５は、本明細書において説明される複数のプロセッサコアのうち１または複数を含んでもよく、プロセッサ９００のいくつかのバージョンであってもよい。
【００６３】
メモリ１０４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、位相変化メモリ（ＰＣＭ）、またはこれら２つの組み合わせであってもよい。少なくとも１つの実施形態については、コントローラハブ１０２０は、フロントサイドバス（ＦＳＢ）等のマルチドロップバス、クイックパスインターコネクト（ＱＰＩ）等のポイントツーポイントインターフェース、または類似の接続１０９５を介して、プロセッサ１０１０、１０１５と通信する。
【００６４】
一実施形態において、コプロセッサ１０４５は、例えば、ハイスループットＭＩＣプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組込みプロセッサ等の特定用途用プロセッサである。一実施形態において、コントローラハブ１０２０は、集積グラフィックスアクセラレータを含んでもよい。
【００６５】
アーキテクチャ、マイクロアーキテクチャ、熱、電力消費の特性等、性能の測定基準の範囲の観点において、物理リソース１０１０、１０１５の間には、様々な差異が存在し得る。
【００６６】
一実施形態において、プロセッサ１０１０は、一般的なタイプのデータ処理演算を制御する複数の命令を実行する。複数のコプロセッサ命令は、複数の命令中に埋め込まれてもよい。プロセッサ１０１０は、付加コプロセッサ１０４５により実行されるべきタイプとして、これらのコプロセッサ命令を認識する。従って、プロセッサ１０１０は、コプロセッサバスまたは他の相互接続に関するこれらのコプロセッサ命令（または、複数のコプロセッサ命令を表す制御信号）を、コプロセッサ１０４５に発行する。コプロセッサ１０４５は、複数の受信済みコプロセッサ命令を承諾し、実行する。
【００６７】
ここで図１１を参照すると、本発明の一実施形態による、第１のより具体的な例示的システム１１００のブロック図が示される。図１１に示されるように、マルチプロセッサシステム１１００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続１１５０を介して結合される第１のプロセッサ１１７０および第２のプロセッサ１１８０を含む。プロセッサ１１７０および１１８０のそれぞれは、プロセッサ９００のいくつかのバージョンであってもよい。本発明の一実施形態において、プロセッサ１１７０および１１８０は、それぞれ、プロセッサ１０１０および１０１５であるが、コプロセッサ１１３８は、コプロセッサ１０４５である。別の実施形態において、プロセッサ１１７０および１１８０は、それぞれ、プロセッサ１０１０およびコプロセッサ１０４５である。
【００６８】
集積メモリコントローラ（ＩＭＣ）ユニット１１７２および１１８２をそれぞれ含むプロセッサ１１７０および１１８０が示される。また、プロセッサ１１７０は、バスコントローラーユニットの一部として、ポイントツーポイント（Ｐ―Ｐ）インターフェース１１７６および１１７８を含む。同様に、第２のプロセッサ１１８０は、Ｐ―Ｐインターフェース１１８６および１１８８を含む。プロセッサ１１７０、１１８０は、Ｐ―Ｐインターフェース回路１１７８、１１８８を用いて、ポイントツーポイント（Ｐ―Ｐ）インターフェース１１５０を介して情報を交換することができる。図１１において示されるように、ＩＭＣ１１７２および１１８２は、各メモリ、つまり、メモリ１１３２およびメモリ１１３４に複数のプロセッサを結合し、メモリ１１３２およびメモリ１１３４は、各プロセッサにローカルに付加されたメインメモリの一部になり得る。
【００６９】
プロセッサ１１７０、１１８０はそれぞれ、ポイントツーポイントインターフェース回路１１７６、１１９４、１１８６、１１９８を用いて、個々のＰ−Ｐインターフェース１１５２、１１５４を介してチップセット１１９０と情報を交換し得る。チップセット１１９０は、任意選択で、高性能インターフェース１１３９を介してコプロセッサ１１３８と情報を交換し得る。一実施形態において、コプロセッサ１１３８は、例えば、ハイスループットＭＩＣプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組込みプロセッサ等の特定用途用プロセッサである。
【００７０】
共有キャッシュ（図示せず）は、いずれかのプロセッサ内または双方のプロセッサの外側に含まれてもよいが、プロセッサが低電力モードに置かれる場合に、いずれかのプロセッサまたは双方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納され得るように、Ｐ−Ｐ相互接続を介して複数のプロセッサと接続される。
【００７１】
チップセット１１９０は、インターフェース１１９６を介して第１のバス１１１６に結合され得る。一実施形態において、第１のバス１１１６は、周辺装置相互接続（ＰＣＩ）バス、またはＰＣＩエクスプレスバスもしくは別の第３世代Ｉ／Ｏ相互接続バス等のバスであってもよいが、本発明の範囲は、そのようには限定されない。
【００７２】
図１１において示されるように、様々なＩ／Ｏデバイス１１１４は、第１のバス１１１６を第２のバス１１２０に結合するバスブリッジ１１１８と共に、第１のバス１１１６に結合され得る。一実施形態において、コプロセッサ、ハイスループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィックスアクセラレータ、またはデジタル信号処理（ＤＳＰ）ユニット等）、フィールドプログラマブルゲートアレイ、またはその他のプロセッサ等、１または複数の追加のプロセッサ１１１５は、第１のバス１１１６に結合される。一実施形態において、第２のバス１１２０は、ローピンカウント（ＬＰＣ）バスであってもよい。様々なデバイスは、一実施形態において、例えば、キーボードおよび／もしくはマウス１１２２、複数の通信デバイス１１２７、および複数の命令／コードおよびデータ１１３０を含み得るディスクドライブもしくは他の大容量ストレージデバイス等のストレージユニット１１２８を含む、第２のバス１１２０に結合され得る。更に、音声Ｉ／Ｏ１１２４は、第２のバス１１２０に結合され得る。他の複数のアーキテクチャが可能であることに留意されたい。例えば、図１１のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してもよい。
【００７３】
ここで図１２を参照すると、本発明の一実施形態による、第２のより具体的な例示的システム１２００のブロック図が示される。図１１および１２の同様の要素は、同様の参照番号を有し、図１１の特定の複数の態様は、図１２の他の複数の態様を不明瞭にするのを避けるべく、図１２から省略されている。
【００７４】
図１２は、プロセッサ１１７０、１１８０が集積メモリおよびＩ／Ｏ制御ロジック（「ＣＬ」）１１７２および１１８２をそれぞれ含み得ることを図示する。従って、ＣＬ１１７２、１１８２は、複数の集積メモリコントローラユニットを含み、Ｉ／Ｏ制御ロジックを含む。図１２は、メモリ１１３２、１１３４がＣＬ１１７２、１１８２に結合されるのみならず、複数のＩ／Ｏデバイス１２１４も制御ロジック１１７２、１１８２に結合されることも図示する。レガシーＩ／Ｏデバイス１２１５は、チップセット１１９０に結合される。
【００７５】
ここで図１３を参照すると、本発明の一実施形態によるＳｏＣ１３００のブロック図が示される。図９の同様の要素は、同様の参照番号を有する。また、複数の点線ボックスは、より高度のＳｏＣに基づく複数の任意選択の特徴である。図１３において、相互接続ユニット１３０２は、１セットの１または複数のコア２０２Ａ―Ｎおよび共有キャッシュユニット９０６を含むアプリケーションプロセッサ１３１０、システムエージェントユニット９１０、バスコントローラーユニット９１６、集積メモリコントローラユニット９１４、統合グラフィックスロジック、画像プロセッサ、音声プロセッサ、およびビデオプロセッサを含み得る１セットまたは１もしくは複数のコプロセッサ１３２０、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット１３３０、直接メモリアクセス（ＤＭＡ）ユニット１３３２、および１または複数の外部ディスプレイに結合するためのディスプレイユニット１３４０に結合される。一実施形態において、コプロセッサ１３２０は、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、ハイスループットＭＩＣプロセッサ、組込みプロセッサ等の特定用途用プロセッサを含む。
【００７６】
本明細書において開示される複数のメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような複数の実装アプローチの組み合わせで実装されてもよい。本発明の複数の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性および不揮発性メモリ、ならびに／または複数の記憶要素を含む）、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを備える複数のプログラマブルシステムで実行する複数のコンピュータプログラムもしくはプログラムコードとして実装されてもよい。
【００７７】
図１１において図示されるコード１１３０等のプログラムコードは、本明細書において説明される複数の関数を実行し、出力情報を生成する複数の入力命令に適用され得る。出力情報は、既知の様式で、１または複数の出力デバイスに適用され得る。本願において、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路、（ＡＳＩＣ）、またはマイクロプロセッサ等、プロセッサを有するいずれのシステムも含む。
【００７８】
プログラムコードは、処理システムと通信するべく、高水準手順型またはオブジェクト指向プログラミング言語で実装されてもよい。また、プログラムコードは、所望であれば、アセンブリ言語または機械言語で実装されてもよい。実際に、本明細書において説明される複数のメカニズムは、範囲において、いずれの特定プログラミング言語にも限定されない。いずれの場合においても、言語は、コンパイラ型言語またはインタプリタ型言語であってもよい。
【００７９】
少なくとも１つの実施形態の１または複数の態様は、プロセッサ内の様々なロジックを表し、機械により読み込まれると、機械に本明細書において説明される複数の技術を実行するロジックを作成させることができる機械可読媒体に格納された当該ロジックを表現する複数の命令により実装される。「ＩＰコア」として既知のそのような表現は、有形の機械可読媒体に格納され、様々な顧客または製造設備に供給され、ロジックまたはプロセッサを実際に製造する複数の製造機械に読み込まれ得る。
【００８０】
そのような機械可読記憶媒体は、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ―ＲＯＭ）、再書き込み可能コンパクトディスク（ＣＤ―ＲＷ）、および磁気光ディスクを含むその他のタイプのディスク、リードオンリメモリ（ＲＯＭ）等の半導体デバイス、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）等のランダムアクセスメモリ（ＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、位相変化メモリ（ＰＣＭ）、磁気もしくは光カード、または複数の電子命令を格納するのに好適なその他のタイプの媒体等の記憶媒体を含む、機械またはデバイスにより製造または形成される、非一時的で有形な複数の構成の物品を含み得るが、これらに限定されない。
【００８１】
従って、本発明の複数の実施形態は、本明細書において説明される複数の構造、回路、装置、プロセッサ、および／またはシステム特徴を規定するハードウェア記述言語（ＨＤＬ）等の複数の命令または設計データを含む非一時的で有形の機械可読媒体も含む。また、そのような複数の実施形態は、プログラム製品と呼ばれ得る。
【００８２】
特定の例示的な複数の実施形態が添付の図面に記載され、示されているが、そのような複数の実施形態は、広範な発明を図示するのみであって、これらに限定するものではなく、本本発明は、本開示を検討すれば、様々な他の変更形態が当業者に想到し得るので、示され、記載される複数の具体的構造および構成に限定されるものではないことを理解されたい。成長が急速であり、更に、発展が容易に予測できない、本技術のような技術領域において、開示される複数の実施形態は、本開示の原理または特許請求の範囲から逸脱することなく、技術的発展を可能にすることにより促進される構成および詳細において容易に変更可能であり得る。
本実施形態の例を下記の各項目として示す。
［項目１］
複数のベクトルレジスタと、
前記複数のベクトルレジスタに結合された実行回路とを備え、
各ベクトルレジスタは、複数のレーンに分割され、各レーンは、同一の数の複数のデータ要素を格納し、
前記実行回路は、
ベクトルリダクション命令を受信し、ソースオペランドに格納された前記複数のデータ要素のアレイを、リダクション演算子を用いてデスティネーションオペランド内の結果に縮小させ、
前記ベクトルリダクション命令に応答して、前記リダクション演算子を各レーンにおける前記複数のデータ要素のうちの２つに適用し、
前記複数のデータ要素のうち少なくとも１つが各レーンに残存する場合に、１または複数の残存データ要素をシフトさせ、
前記ソースオペランドおよび前記デスティネーションオペランドのそれぞれは、前記複数のベクトルレジスタのうちの１つである、装置。
［項目２］
前記ベクトルリダクション命令に応答する前記実行回路は、各レーンにおける最上位の位置にゼロを挿入する、項目１に記載の装置。
［項目３］
前記リダクション演算子は、加算、減算、または乗算を含む、項目１または２に記載の装置。
［項目４］
前記実行回路は、各レーンにおける複数の最下位のデータ要素のうち２つに前記リダクション演算子を適用する、項目１から３のいずれか１項に記載の装置。
［項目５］
前記ベクトルリダクション命令に応答する前記実行回路は、各レーンにおいて前記１または複数の残存データ要素のそれぞれの位置を１つ右側にシフトさせる、項目１から４のいずれか１項に記載の装置。
［項目６］
前記実行回路は、前記ベクトルリダクション命令を用いないリダクションコードを、前記ベクトルリダクション命令を用いる翻訳済みリダクションコードに変換し、前記リダクションコードおよび前記翻訳済みリダクションコードは、前記複数のレーン全体で複数のデータ要素の前記アレイに適用される複数のリダクション演算の同一のシーケンスを指定し、同一の結果を生成する、項目１から５のいずれか１項に記載の装置。
［項目７］
前記複数のデータ要素のそれぞれは、倍精度浮動小数点数、単精度浮動小数点数、または半精度浮動小数点数である、項目１から６のいずれか１項に記載の装置。
［項目８］
ベクトルリダクション命令を受信し、ソースオペランドに格納された複数のデータ要素のアレイを、リダクション演算子を用いてデスティネーションオペランド内の結果に縮小させる段階と、
前記ベクトルリダクション命令に応答して、前記リダクション演算子を各レーンにおける前記複数のデータ要素のうち２つに適用する段階と、
前記複数のデータ要素のうち少なくとも１つが各レーンに残存する場合に、１または複数の残存データ要素をシフトさせる段階とを備え、
前記ソースオペランドおよび前記デスティネーションオペランドのそれぞれは、複数のベクトルレジスタのうちの１つであり、各ベクトルレジスタは、複数のレーンに分割され、各レーンは、同一の数の複数のデータ要素を格納する、方法。
［項目９］
前記ベクトルリダクション命令に応答して、各レーンにおける最上位の位置にゼロを挿入する段階を更に備える、項目８に記載の方法。
［項目１０］
前記リダクション演算子は、加算、減算、または乗算を含む、項目８または９に記載の方法。
［項目１１］
前記リダクション演算子を適用する段階は、各レーンにおける複数の最下位のデータ要素のうち２つに前記リダクション演算子を適用することを更に有する、項目８から１０のいずれか１項に記載の方法。
［項目１２］
複数の位置をシフトさせる段階は、各レーンにおいて前記１または複数の残存データ要素のそれぞれの位置を１つ右側にシフトさせる段階を更に有する、項目８から１１のいずれか１項に記載の方法。
［項目１３］
前記ベクトルリダクション命令を用いないリダクションコードを、前記ベクトルリダクション命令を用いる翻訳済みリダクションコードに変換する段階を更に備え、
前記リダクションコードおよび前記翻訳済みリダクションコードは、前記複数のレーン全体で複数のデータ要素の前記アレイに適用される複数のリダクション演算の同一のシーケンスを指定し、同一の結果を生成する、項目８から１２のいずれか１項に記載の方法。
［項目１４］
前記複数のデータ要素のそれぞれは、倍精度浮動小数点数、単精度浮動小数点数、または半精度浮動小数点数である、項目８から１３のいずれか１項に記載の方法。
［項目１５］
メモリと、
前記メモリに結合されたプロセッサとを備え、
前記プロセッサは、
複数のベクトルレジスタと、
前記複数のベクトルレジスタに結合された実行回路とを有し、
各ベクトルレジスタは、複数のレーンに分割され、各レーンは、同一の数の複数のデータ要素を格納し、
前記実行回路は、
ベクトルリダクション命令を受信し、ソースオペランドに格納された前記複数のデータ要素のアレイを、リダクション演算子を用いてデスティネーションオペランド内の結果に縮小し、
前記ベクトルリダクション命令に応答して、前記リダクション演算子を各レーンにおける前記複数のデータ要素のうち２つに適用し、
前記複数のデータ要素のうち少なくとも１つが各レーンに残存する場合に、１または複数の残存データ要素をシフトさせ、
前記ソースオペランドおよび前記デスティネーションオペランドのそれぞれは、前記複数のベクトルレジスタのうちの１つである、システム。
［項目１６］
前記ベクトルリダクション命令に応答する前記実行回路は、各レーンにおける最上位の位置にゼロを挿入する、項目１５に記載のシステム。
［項目１７］
前記リダクション演算子は、加算、減算、または乗算を含む、項目１５または１６に記載のシステム。
［項目１８］
前記実行回路は、各レーンにおける複数の最下位のデータ要素のうち２つに前記リダクション演算子を適用する、項目１５から１７のいずれか１項に記載のシステム。
［項目１９］
前記ベクトルリダクション命令に応答する前記実行回路は、各レーンにおいて前記１または複数の残存データ要素のそれぞれの位置を１つ右側にシフトさせる、項目１５から１８のいずれか１項に記載のシステム。
［項目２０］
前記実行回路は、前記ベクトルリダクション命令を用いないリダクションコードを、前記ベクトルリダクション命令を用いる翻訳済みリダクションコードに変換し、
前記リダクションコードおよび前記翻訳済みリダクションコードは、前記複数のレーン全体で複数のデータ要素の前記アレイに適用される複数のリダクション演算の同一のシーケンスを指定し、同一の結果を生成する、項目１５から１９のいずれか１項に記載のシステム。
【図１】
0006025986.tif 000002
【図２】
0006025986.tif 000003
【図３Ａ】
0006025986.tif 000004
【図３Ｂ】
0006025986.tif 000005
【図４Ａ】
0006025986.tif 000006
【図４Ｂ】
0006025986.tif 000007
【図５Ａ】
0006025986.tif 000008
【図５Ｂ】
0006025986.tif 000009
【図６】
0006025986.tif 000010
【図７Ａ】
0006025986.tif 000011
【図７Ｂ】
0006025986.tif 000012
【図８Ａ】
0006025986.tif 000013
【図８Ｂ】
0006025986.tif 000014
【図９】
0006025986.tif 000015
【図１０】
0006025986.tif 000016
【図１１】
0006025986.tif 000017
【図１２】
0006025986.tif 000018
【図１３】
0006025986.tif 000019