(57)【要約】      （修正有）【課題】連鎖タイル演算を実施するためのタイル演算アクセラレータを提供する。【解決手段】プロセッサは、各命令がソースおよびデスティネーションタイルオペランドを指定する、１つまたは複数の命令をフェッチするフェッチ回路と、フェッチされた命令を復号する復号回路と、復号された命令に応答する実行回路と、を含む。実行回路は、復号された命令に応答して、命令チェーンに属する復号された第１および第２の命令を識別し、復号された第１および第２の命令を実行する第１および第２の処理エンジン（ＰＥ）を有するＳＩＭＤ経路を動的に選択・構成し、復号された第１の命令の指定されたデスティネーションを破棄し、代わりに、復号された第２の命令を実行するために、第２のＰＥによって使用されるべき第１のＰＥからの復号された第１の命令の結果を送る。【選択図】図２２
2019197531.tif 000002
【特許請求の範囲】
【請求項１】
各々がそれぞれのソースタイルおよびデスティネーションタイルを指定するソースタイル指定子およびデスティネーションタイル指定子を有する複数の命令をフェッチするフェッチ回路と、
フェッチされた前記複数の命令を復号する復号回路と、
復号された前記複数の命令に応答して、
命令チェーンに属する復号された第１および第２の命令を識別することと、
復号された前記第１および第２の命令を実行する第１および第２の処理エンジン（ＰＥ）を有するＳＩＭＤ経路を動的に選択し構成することと、
復号された前記第１の命令の前記デスティネーションタイル指定子を破棄し、代わりに、復号された前記第２の命令を実行するために前記第２のＰＥによって使用されるように、復号された前記第１の命令の結果を前記第１のＰＥから前記第２のＰＥに送ることと
を行う実行回路と
を備える、プロセッサ。
【請求項２】
前記複数の命令が少なくとも２つの命令を有し、前記命令チェーンの各命令が、前記命令がチェーンの一部であることを前記実行回路に判定させるチェーン制御フィールドをさらに有し、
前記チェーン制御フィールドが、前記チェーン内の最後の命令をマークするために、チェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒントで構成されるグループから選択されたチェーン位置ヒントを示し、前記チェーン制御フィールドが前記実行回路に、前記チェーンの存在を判定して、前記命令チェーンを実行するように前記ＳＩＭＤ経路を動的に選択し構成することと、前記チェーン内の最後を除くすべての命令の前記デスティネーションタイル指定子を破棄することと、代わりに最後を除くすべての命令の結果を前記チェーン内の次の命令を実行する次のＰＥに送ることとを行わせる、
請求項１に記載のプロセッサ。
【請求項３】
復号された前記第１および第２の命令が、異なるオペコードを指定して異なる第１および第２の算術演算を指定し、選択された前記第１および第２の処理エンジンが、それぞれ、前記第１の算術演算および前記第２の算術演算を専門に扱う限定された機能を有する、請求項１に記載のプロセッサ。
【請求項４】
前記命令チェーンの第１の命令がチェーン制御フィールドをさらに有し、前記チェーン制御フィールドが、前記第１の命令および１つまたは複数の後続の命令を前記命令チェーンの一部であると識別するチェーンヘッダを含む、請求項１に記載のプロセッサ。
【請求項５】
指定された前記ソースタイルおよびデスティネーションタイルが、各々Ｍ行Ｎ列の要素を有し、１行のみに有効な要素を含む、請求項１から４のいずれか一項に記載のプロセッサ。
【請求項６】
前記実行回路がさらに、各命令のデスティネーションタイル指定子を破棄させた命令の記録を保持し、必要に応じて記録された前記命令のうちの１つまたは複数をロールバックし再実行する、請求項１から４のいずれか一項に記載のプロセッサ。
【請求項７】
前記実行回路がさらに、復号された前記第１の命令の前記デスティネーションタイル指定子を破棄する前に機械状態を保存し、その後、機械状態整合性チェックを実行して、復号された前記第１の命令の前記デスティネーションタイル指定子を破棄することによって生じたあらゆる不整合を検出する、請求項１から４のいずれか一項に記載のプロセッサ。
【請求項８】
前記複数の命令が少なくとも２つの命令を有し、前記実行回路が、前記複数の命令をバッファリングし、２つ以上の命令の間のデータ依存性を検出して、前記２つ以上の命令が前記命令チェーンの一部であると判定するバイナリトランスレータをさらに備える、請求項１に記載のプロセッサ。
【請求項９】
前記フェッチ回路がさらに、前記複数の命令をフェッチする前にチェーン開始命令をフェッチし、前記チェーン開始命令が前記命令チェーン内の複数の命令を指定し、さらに少なくとも復号された前記第１の命令のターゲットを指定し、前記ターゲットが、復号された前記第１の命令の前記結果を送る先の前記命令チェーン内の前記複数の命令のうちの１つである、請求項１から４のいずれか一項に記載のプロセッサ。
【請求項１０】
前記実行回路がさらに、復号された前記第１の命令の前記デスティネーションタイル指定子を破棄するときに前記第１の命令の指定された前記デスティネーションタイルのタイル構成内にダーティビットを設定し、前記ダーティビットが後続の命令によって読み取られた場合に故障を発生させる、請求項１から４のいずれか一項に記載のプロセッサ。
【請求項１１】
プロセッサによって実行される方法であって、前記方法は、
フェッチ回路を使用して、各々がそれぞれのソースタイルおよびデスティネーションタイルを指定するソースタイル指定子およびデスティネーションタイル指定子を有する複数の命令をフェッチするステップと、
復号回路を使用して、フェッチされた前記複数の命令を復号するステップと、
実行回路を使用して、
命令チェーンに属する復号された第１および第２の命令を識別することと、
復号された前記第１および第２の命令を実行する第１および第２の処理エンジン（ＰＥ）を有するＳＩＭＤ経路を動的に選択し構成することと、
復号された前記第１の命令の前記デスティネーションタイル指定子を破棄し、代わりに、復号された前記第２の命令を実行するために前記第２のＰＥによって使用されるように、復号された前記第１の命令の結果を前記第１のＰＥから前記第２のＰＥに送ることと
を行うように、復号された前記複数の命令を実行するステップと
を備える、方法。
【請求項１２】
前記複数の命令が少なくとも２つの命令を有し、前記命令チェーンの各命令が、前記命令がチェーンの一部であることを前記実行回路に判定させるチェーン制御フィールドをさらに有し、
前記チェーン制御フィールドが、前記チェーン内の最後の命令をマークするために、チェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒントで構成されるグループから選択されたチェーン位置ヒントを示し、前記チェーン制御フィールドが、前記命令チェーンの存在を判定することと、前記命令チェーンを実行するように前記ＳＩＭＤ経路を動的に選択し構成することと、前記チェーン内の最後を除くすべての命令の宛先デスティネーションタイル指定子を破棄することと、代わりに最後を除くすべての命令の結果を前記チェーン内の次の命令を実行する次のＰＥに送ることとを前記実行回路に行わせる、
請求項１１に記載の方法。
【請求項１３】
復号された前記第１および第２の命令が、異なるオペコードを指定して異なる第１および第２の算術演算を指定し、選択された前記第１および第２の処理エンジンが、それぞれ、前記第１の算術演算および前記第２の算術演算を専門に扱う限定された機能を有する、請求項１１に記載の方法。
【請求項１４】
前記命令チェーンの第１の命令がチェーン制御フィールドをさらに有し、前記チェーン制御フィールドが、前記第１の命令および１つまたは複数の後続の命令を前記命令チェーンの一部であると識別するチェーンヘッダを含む、請求項１１に記載の方法。
【請求項１５】
指定された前記ソースタイルおよびデスティネーションタイルが、各々Ｍ行Ｎ列の要素を有し、１行のみに有効な要素を含む、請求項１１から１４のいずれか一項に記載の方法。
【請求項１６】
前記実行回路がさらに、各命令のデスティネーションタイル指定子を破棄した命令の記録を保持し、必要に応じて記録された前記命令をロールバックし再実行する、請求項１１から１４のいずれか一項に記載の方法。
【請求項１７】
前記実行回路がさらに、復号された前記第１の命令の前記デスティネーションタイル指定子を破棄する前に機械状態を保存し、その後、機械状態整合性チェックを実行して、復号された前記第１の命令の前記デスティネーションタイル指定子を破棄することによって生じたあらゆる不整合を検出する、請求項１１から１４のいずれか一項に記載の方法。
【請求項１８】
前記複数の命令が少なくとも２つの命令を有し、前記実行回路が、前記複数の命令をバッファリングし、２つ以上の命令の間のデータ依存性を検出して、前記２つ以上の命令が前記命令チェーンの一部であると判定するバイナリトランスレータをさらに備える、請求項１１に記載の方法。
【請求項１９】
前記複数の命令をフェッチする前にチェーン開始命令をフェッチするステップをさらに備え、前記チェーン開始命令が前記命令チェーン内の複数の命令を指定し、さらに少なくとも復号された前記第１の命令のターゲットを指定し、前記ターゲットが、復号された前記第１の命令の前記結果を送る先の前記命令チェーン内の前記複数の命令のうちの１つである、請求項１１から１４のいずれか一項に記載の方法。
【請求項２０】
復号された前記第１の命令の前記デスティネーションタイル指定子を破棄するときに前記第１の命令の指定された前記デスティネーションタイルのタイル構成内に前記実行回路によってダーティビットを設定するステップをさらに備え、前記ダーティビットを有する指定された前記デスティネーションタイルが後続の命令によって読み取られた場合に故障を発生させる、請求項１１から１４のいずれか一項に記載の方法。
【請求項２１】
命令チェーンを実行するためのシステムであって、前記システムは、
メモリと、
プロセッサと
を備え、
前記プロセッサは、
各々がそれぞれのソースタイルおよびデスティネーションタイルを指定するソースタイル指定子およびデスティネーションタイル指定子を有する複数の命令をフェッチするフェッチ回路と、
フェッチされた前記複数の命令を復号する復号回路と、
復号された前記複数の命令に応答して、
命令チェーンに属する復号された第１および第２の命令を識別することと、
復号された前記第１および第２の命令を実行する第１および第２の処理エンジン（ＰＥ）を有するＳＩＭＤ経路を動的に選択し構成することと、
復号された前記第１の命令の前記デスティネーションタイル指定子を破棄し、代わりに、復号された前記第２の命令を実行するために前記第２のＰＥによって使用されるように、復号された前記第１の命令の結果を前記第１のＰＥから前記第２のＰＥに送ることと
を行う実行回路と
を有する、システム。
【請求項２２】
前記複数の命令が少なくとも２つの命令を有し、前記命令チェーンの各命令が、前記命令がチェーンの一部であることを前記実行回路に判定させるチェーン制御フィールドをさらに有し、
前記チェーン制御フィールドが、前記チェーン内の最後の命令をマークするために、チェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒントのうちの１つを含むチェーン位置ヒントを示し、前記チェーン制御フィールドが、前記チェーンの存在を判定することと、前記命令チェーンを実行するように前記ＳＩＭＤ経路を動的に選択し構成することと、前記チェーン内の最後を除くすべての命令の前記デスティネーションタイル指定子を破棄することと、最後を除くすべての命令の結果を前記チェーン内の次の命令を実行する次のＰＥに送ることとを前記実行回路に行わせる、
請求項２１に記載のシステム。
【請求項２３】
復号された前記第１および第２の命令が、異なるオペコードを指定して異なる第１および第２の算術演算を指定し、選択された前記第１および第２の処理エンジンが、それぞれ、前記第１の算術演算および前記第２の算術演算を専門に扱う限定された機能を有する、請求項２１に記載のシステム。
【請求項２４】
前記命令チェーンの第１の命令がチェーン制御フィールドをさらに有し、前記チェーン制御フィールドが、前記第１の命令および１つまたは複数の後続の命令を前記命令チェーンの一部であると識別するチェーンヘッダを含む、請求項２１に記載のシステム。
【請求項２５】
前記フェッチ回路がさらに、前記複数の命令をフェッチする前にチェーン開始命令をフェッチし、前記チェーン開始命令が前記命令チェーン内の複数の命令を指定し、さらに少なくとも復号された前記第１の命令のターゲットを指定し、前記ターゲットが、復号された前記第１の命令の前記結果を送る先の前記命令チェーン内の前記複数の命令のうちの１つである、請求項２１から２４のいずれか一項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野は、一般に、コンピュータプロセッサアーキテクチャに関し、より詳細には、連鎖タイル演算を実施するためのシステムおよび方法に関する。
【背景技術】
【０００２】
行列は、機械学習および他の大容量データ処理などの多くのコンピューティングタスクでますます重要になっている。
【図面の簡単な説明】
【０００３】
本発明は、添付図面の図において限定ではなく例として示されており、それらの中で、同様の参照符号は同様の要素を示している。
【０００４】
【図１Ａ】構成されたタイルの一実施形態を示す図である。
【０００５】
【図１Ｂ】構成されたタイルの一実施形態を示す図である。
【０００６】
【図２】行列ストレージのいくつかの例を示す図である。
【０００７】
【図３】タイル演算アクセラレータを利用するシステムの一実施形態を示す図である。
【０００８】
【図４】行列演算アクセラレータを使用してどのようにメモリが共有されるかの一実施形態を示す図である。
【図５】行列演算アクセラレータを使用してどのようにメモリが共有されるかの別の実施形態を示す図である。
【０００９】
【図６】タイル（「ＴＭＭＡ」）を使用する行列乗累算演算の一実施形態を示す図である。
【００１０】
【図７】連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す図である。
【００１１】
【図８】連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す図である。
【００１２】
【図９】連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す図である。
【００１３】
【図１０】連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す図である。
【００１４】
【図１１】一実施形態による、乗算器への入力よりも大きい入力サイズをアキュムレータが使用する、２のべき乗サイズのＳＩＭＤの実装形態を示す図である。
【００１５】
【図１２】行列演算回路を利用するシステムの一実施形態を示す図である。
【００１６】
【図１３】タイルを使用する行列演算をサポートするプロセッサコアパイプラインの一実施形態を示す図である。
【００１７】
【図１４】タイルを使用する行列演算をサポートするプロセッサコアパイプラインの一実施形態を示す図である。
【００１８】
【図１５】行優先フォーマットおよび列優先フォーマットで表現された行列の一例を示す図である。
【００１９】
【図１６】行列（タイル）の使用に関する一例を示す図である。
【００２０】
【図１７】行列（タイル）の使用方法の一実施形態を示す図である。
【００２１】
【図１８】一実施形態による、タイルの使用の構成用のサポートを示す図である。
【００２２】
【図１９】サポートされるべき行列（タイル）の記述の一実施形態を示す図である。
【００２３】
【図２０Ａ】レジスタの例を示す図である。
【図２０Ｂ】レジスタの例を示す図である。
【図２０Ｃ】レジスタの例を示す図である。
【図２０Ｄ】レジスタの例を示す図である。
【００２４】
【図２１Ａ】最適化可能なタイル命令チェーンの例示的な実行を示すブロックフロー図である。
【００２５】
【図２１Ｂ】いくつかの実施形態による、タイル命令チェーンの最適化された実行を示すブロックフロー図である。
【００２６】
【図２２】一実施形態による、連鎖タイル命令に応答するプロセッサの実行フローを示すブロックフロー図である。
【００２７】
【図２３】一実施形態による、連鎖タイル命令の実行のより詳細な説明を示す図である。
【００２８】
【図２４Ａ】一実施形態による、連鎖タイル命令を実行するプロセッサの一実施形態を説明する例示的な疑似コードの図である。
【００２９】
【図２４Ｂ】いくつかの実施形態による、最適化されていないタイル命令チェーンを示す疑似コードの図である。
【００３０】
【図２４Ｃ】いくつかの実施形態による、最適化されたタイル命令チェーンを実行するプロセッサ実行回路による実行フローを示す疑似コードの図である。
【００３１】
図２５Ａ〜図２５Ｄは、本発明の実施形態による、命令フォーマットを示すブロック図である。
【００３２】
【図２５Ａ】本発明の実施形態による、チェーンフレンドリ命令フォーマットを示すブロック図である。
【００３３】
【図２５Ｂ】本発明の実施形態による、チェーン開始命令フォーマットを示すブロック図である。
【００３４】
【図２５Ｃ】本発明の実施形態による、汎用ベクトルフレンドリ命令フォーマットおよびそのクラスＡ命令テンプレートを示すブロック図である。
【００３５】
【図２５Ｄ】本発明の実施形態による、汎用ベクトルフレンドリ命令フォーマットおよびそのクラスＢ命令テンプレートを示すブロック図である。
【００３６】
【図２６Ａ】本発明の実施形態による、例示的な特殊ベクトルフレンドリ命令フォーマットを示すブロック図である。
【００３７】
【図２６Ｂ】本発明の１つの実施形態による、フルオペコードフィールドを構成する特殊ベクトルフレンドリ命令フォーマットのフィールドを示すブロック図である。
【００３８】
【図２６Ｃ】本発明の１つの実施形態による、レジスタインデックスフィールドを構成する特殊ベクトルフレンドリ命令フォーマットのフィールドを示すブロック図である。
【００３９】
【図２６Ｄ】本発明の１つの実施形態による、拡大演算フィールドを構成する特殊ベクトルフレンドリ命令フォーマットのフィールドを示すブロック図である。
【００４０】
【図２７】本発明の１つの実施形態による、レジスタアーキテクチャのブロック図である。
【００４１】
【図２８Ａ】本発明の実施形態による、例示的なインオーダパイプラインと、例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。
【００４２】
【図２８Ｂ】本発明の実施形態による、プロセッサに含まれるべきインオーダアーキテクチャコアの例示的な実施形態と、例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。
【００４３】
図２９Ａおよび図２９Ｂは、より具体的で例示的なインオーダコアアーキテクチャのブロック図であり、そのコアはチップ内の（同じタイプおよび／または異なるタイプの他のコアを含む）いくつかのロジックブロックのうちの１つである。
【００４４】
【図２９Ａ】本発明の実施形態による、オンダイ相互接続ネットワークへのその接続およびレベル２（Ｌ２）キャッシュのそのローカルサブセットを有するシングルプロセッサコアのブロック図である。
【００４５】
【図２９Ｂ】本発明の実施形態による、図２９Ａのプロセッサコアの一部の拡大図である。
【００４６】
【図３０】本発明の実施形態による、２つ以上のコアを有する場合があり、統合型メモリコントローラを有する場合があり、統合型グラフィックを有する場合があるプロセッサのブロック図である。
【００４７】
図３１〜図３４は、例示的なコンピュータアーキテクチャのブロック図である。
【００４８】
【図３１】本発明の１つの実施形態による、システムのブロック図である。
【００４９】
【図３２】本発明の一実施形態による、第１のより具体的で例示的なシステムのブロック図である。
【００５０】
【図３３】本発明の一実施形態による、第２のより具体的で例示的なシステムのブロック図である。
【００５１】
【図３４】本発明の一実施形態による、システムオンチップ（ＳｏＣ）のブロック図である。
【００５２】
【図３５】本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するソフトウェア命令コンバータの使用を対比するブロック図である。
【発明を実施するための形態】
【００５３】
以下の説明では、多数の具体的な詳細が示されている。しかしながら、本発明の実施形態はこれらの具体的な詳細なしに実践されてもよいことを理解されたい。他の例では、この説明の理解を曖昧にしないために、よく知られた回路、構造、および技法は詳細に示されていない。
【００５４】
本明細書における「１つの実施形態」、「一実施形態」、「例示的な一実施形態」などへの言及は、説明された実施形態が特定の特徴、構造、または特性を含む場合があることを示すが、あらゆる実施形態が必ずしも特定の特徴、構造、または特性を含むとは限らない場合ある。その上、そのようなフレーズは必ずしも同じ実施形態を参照しているとは限らない。さらに、特定の特徴、構造、または特性が一実施形態に関連して説明されるとき、明示的に説明されているか否かにかかわらず、他の実施形態に関連してそのような特徴、構造、または特性に影響を与えることは当業者の知識の範囲内であることが考えられる。
【００５５】
主流をなす多くのプロセッサでは、行列を扱うことは困難であり、かつ／または命令集約的な作業である。たとえば、行列の行は、複数のパックドデータ（たとえば、ＳＩＭＤまたはベクトル）レジスタに入れられ、次いで個々に処理される可能性がある。たとえば、２つの８×２行列の加算は、ロードを要求してもよく、データサイズに応じて４つのパックドデータレジスタに集めてもよい。次いで、各行列の１行目に対応するパックドデータレジスタについて１番目の加算が実行され、各行列の２行目に対応するパックドデータレジスタについて２番目の加算が実行される。次いで、得られたパックドデータレジスタがメモリに分散される。小規模行列の場合には、このシナリオは受け入れられるかもしれないが、大規模行列では受け入れられないことが多い。
【００５６】
［Ｉ．高レベルの説明］
中央処理装置（ＣＰＵ）、グラフィック処理装置（ＧＰＵ）、およびアクセラレータなどのコンピュータハードウェアにおいて行列演算をサポートするメカニズムが本明細書で説明される。行列演算は、レジスタなどのメモリの１つまたは複数のパックド領域を表す２次元（２−Ｄ）データ構造を利用する。この説明全体を通して、これらの２−Ｄデータ構造はタイルと呼ばれる。行列はタイルよりも小さくてもよく（使用するのはタイル全体より小さい）、複数のタイルを利用してもよい（行列はどのタイルのサイズよりも大きい）ことに留意されたい。説明全体を通して、タイル言語は、行列に影響を与えるタイルを使用して実行される演算を示すために使用され、その行列がどのタイルよりも大きいか否かは、通常、関係がない。
【００５７】
各タイルには、本明細書に詳述されるような様々な演算が作用してもよく、これらの演算は、限定はしないが、タイル乗算、タイル加算、タイル減算、タイル対角線、タイルゼロ、タイル転置、タイルドット積、タイルブロードキャスト、タイル行ブロードキャスト、タイル列ブロードキャスト、タイル乗算、タイル乗累算、タイル移動などを含む。さらに、スケールおよび／またはバイアスの使用などの演算子のサポートは、これらの演算と共に使用されてもよく、将来の非数値アプリケーション、たとえばＯｐｅｎＣＬの「ローカルメモリ」、データの圧縮／解凍などのサポートにおいて使用されてもよい。
【００５８】
ストレージ（メモリ（不揮発性および揮発性）、レジスタ、キャッシュなど）の一部は、様々な水平寸法および垂直寸法のタイルの中に配置される。たとえば、タイルは、水平寸法４（たとえば、４行の行列）および垂直寸法８（たとえば、８列の行列）を有してもよい。通常、水平寸法は要素サイズ（たとえば、２、４、８、１６、３２、６４、１２８ビットなど）に関連する。複数のデータタイプ（単精度浮動小数点、倍精度浮動小数点、整数など）がサポートされてもよい。
【００５９】
［Ａ．構成されたタイルの例示的な使用］
いくつかの実施形態では、タイルパラメータを構成することができる。たとえば、所与のタイルはタイルオプションを提供するように構成されてもよい。例示的なタイルオプションには、タイルの行数、タイルの列数、タイルが有効であるかどうか、およびタイルが等しいサイズのタイルのペアで構成されるかどうかが含まれるが、それらに限定されない。
【００６０】
図１Ａは、構成されたタイルの一実施形態を示す。図示されたように、４ｋＢのアプリケーションメモリ１０２が、４つの１ｋＢのタイル、つまり、タイル０（１０４）、タイル１（１０６）、タイル２（１０８）、およびタイル３（１１０）を記憶している。この例では、４つのタイルはペアで構成されず、各々が行および列に配置された要素を有する。タイルｔ０（１０４）およびタイルｔ１（１０６）は、Ｋ行Ｎ列の４バイト要素（たとえば、単精度データ）を有し、Ｋは８に等しく、Ｎ＝３２である。タイルｔ２（１０８）およびタイルｔ３（１１０）は、Ｋ行Ｎ／２列の８バイト要素（たとえば、倍精度データ）を有する。倍精度オペランドは単精度の２倍の幅なので、この構成は、タイルオプションを提供するために使用される、少なくとも４ｋＢの総記憶容量に少なくとも４つの名前を提供するパレットと一致する。動作時は、ロード演算およびストア演算を使用して、これらのタイルをメモリからロードし、メモリに記憶することができる。使用される命令符号化方式に応じて、利用可能なアプリケーションメモリの量、ならびに利用可能なタイルのサイズ、数、および構成は異なる。
【００６１】
図１Ｂは、構成されたタイルの一実施形態を示す。図示されたように、４ｋＢのアプリケーションメモリ１２２は、１ｋＢタイルのペアを２つ記憶しており、第１のペアはタイルｔ４Ｌ（１２４）およびタイルｔ４Ｒ（１２６）であり、第２のペアはタイルｔ５Ｌ（１２８）およびタイルｔ５Ｒ（１３０）である。図示されたように、これらのタイルのペアは左タイルおよび右タイルに分割される。他の実施形態では、タイルのペアは偶数タイルおよび奇数タイルに分割される。この例では、４つのタイルは、各々行および列に配置された要素を有する。タイルｔ４Ｌ（１２４）およびタイルｔ４Ｒ（１２６）は、Ｋ行Ｎ列の４バイト要素（たとえば、単精度データ）を有し、Ｋは８に等しく、Ｎは３２に等しい。タイルｔ５Ｌ１２８およびタイルｔ５Ｒ１３０は、Ｋ行Ｎ／２列の８バイト要素（たとえば、倍精度データ）を有する。倍精度オペランドは単精度の２倍の幅なので、この構成は、タイルオプションを提供するために使用される、少なくとも４ｋＢの総記憶容量に少なくとも２つの名前を提供するパレットと一致する。図１Ａの４つのタイルは４つの名前を使用し、各々１ｋＢのタイルを命名するが、図１Ｂの２つのペアのタイルは２つの名前を使用してペアのタイルを指定することができる。いくつかの実施形態では、タイル命令は、ペアになったタイルの名前をオペランドとして受け入れる。動作時は、ロード演算およびストア演算を使用して、これらのタイルをメモリからロードし、メモリに記憶することができる。使用される命令符号化方式に応じて、利用可能なアプリケーションメモリの量、ならびに利用可能なタイルのサイズ、数、および構成は異なる。
【００６２】
いくつかの実施形態では、タイルパラメータは定義可能である。たとえば、「パレット」はタイルオプションを提供するために使用される。例示的なオプションには、タイル名の数、ストレージの行内のバイト数、タイル内の行および列の数などが含まれが、それらに限定されない。たとえば、タイルの最大の「高さ」（行数）は、以下のように定義されてもよい。
【００６３】
タイル最大行数＝設計記憶容量／（パレット名の数＊行当たりのバイト数）。
【００６４】
そのため、固定された名前を使用しても、実装間で異なるストレージサイズを利用できるように、アプリケーションを書くことができる。
【００６５】
タイルの構成は、タイル構成（「ＴＩＬＥＣＯＮＦＩＧ」）命令を使用して行われ、選択されたパレットで特定のタイル使用が定義される。この宣言は、使用されるタイル名の数、名前（タイル）当たりの行および列の要求数、ならびにいくつかの実施形態では、各タイルの要求データタイプを含む。いくつかの実施形態では、ＴＩＬＥＣＯＮＦＩＧ命令の実行中に整合性チェックが実行され、この命令がパレットエントリの制限に適合することが判定される。
【００６６】
［Ｂ．例示的なタイルストレージタイプ］
図２は、行列ストレージのいくつかの例を示す。（Ａ）では、タイルがメモリに記憶されている。図示されたように、各「行」は４つのパックドデータ要素で構成される。次の「行」を得るために、ストライド値が使用される。行はメモリに連続して記憶されてもよいことに留意されたい。ストライドメモリアクセスは、タイルストレージが基礎となるメモリ配列の行幅をマッピングしないときに、１つの行から次の行へのアクセスを可能にする。
【００６７】
メモリからのタイルロードおよびメモリへのタイルストアは、通常、アプリケーションメモリからデータのパックド行へのストライドアクセスである。例示的なＴＩＬＥＬＯＡＤ命令およびＴＩＬＥＳＴＯＲＥ命令、またはロード演算命令におけるＴＩＬＥオペランドとしてのアプリケーションメモリへの他の命令参照は、いくつかの実施形態では、（最大）２＊行のページフォルト、マスクされていない浮動小数点例外、および／または命令ごとの割込みを扱うように再開可能である。
【００６８】
（Ｂ）では、行列は、パックドデータレジスタ（単一命令複数データ（ＳＩＭＤ）レジスタまたはベクトルレジスタ）などの複数のレジスタで構成されるタイルに記憶される。この例では、タイルは３つの物理レジスタと重なっている。通常、連続するレジスタが使用されるが、そうである必要はない。
【００６９】
（Ｃ）では、行列は、タイル命令で使用される融合多重累算（ＦＭＡ）回路にとってアクセス可能な非レジスタストレージ内のタイルに記憶される。このストレージは、ＦＭＡの内部にあってもよく、それに隣接していてもよい。さらに、下記で説明されるいくつかの実施形態では、ストレージは、行全体またはタイル全体ではなくデータ要素用であってもよい。
【００７０】
ＴＭＭＡアーキテクチャ用のサポートパラメータはＣＰＵＩＤを介して報告される。いくつかの実施形態では、情報のリストは最大の高さおよび最大ＳＩＭＤ寸法を含む。ＴＭＭＡアーキテクチャを構成するには、タイルごとの寸法、タイルごとの要素サイズ、およびパレット識別子を指定する必要がある。この構成はＴＩＬＥＣＯＮＦＩＧ命令を実行することによって行われる。
【００７１】
ＴＩＬＥＣＯＮＦＩＧ命令が正常に実行されると、後続のＴＩＬＥ演算子が有効になる。ＴＩＬＥＲＥＬＥＡＳＥＡＬＬ命令はタイル構成をクリアし、（次のＴＩＬＥＣＯＮＦＩＧ命令が実行されるまで）ＴＩＬＥ演算を無効にする。いくつかの実施形態では、タイルを使用するコンテキスト切替えにおいてＸＳＡＶＥ、ＸＳＴＯＲＥなどが使用される。いくつかの実施形態では、２つのＸＣＲ０ビットがＸＳＡＶＥにおいて使用され、１つのビットはＴＩＬＥＣＯＮＦＩＦメタデータ用であり、もう１つのビットは実際のタイルペイロードデータに対応する。
【００７２】
ＴＩＬＥＣＯＮＦＩＧは、タイル使用を構成するだけでなく、構成されたタイルと共にプログラムがコードの領域内にあることを示す状態変数も設定する。一実装形態は、既存のレジスタセットを使用しないことなどの、タイル領域と共に使用することができる他の命令に対する制限を列挙することができる。
【００７３】
タイル領域を終了することは、通常、ＴＩＬＥＲＥＬＥＡＳＥＡＬＬ命令を用いて行われる。この命令はパラメータを取らず、すべてのタイルをすばやく無効化し（データの保存または復元が不要になったことを示し）、タイル領域にあることに対応する内部状態をクリアする。
【００７４】
いくつかの実施形態では、タイル演算は、タイル構成によって指定された寸法を超えたすべての行およびすべての列をゼロにする。たとえば、タイル演算は、各行が書き込まれると、（要素のサイズを考慮して）構成された列数を超えるデータをゼロにする。たとえば、６４バイトの行および１０行１２列で構成されるタイルでは、ＦＰ３２要素を書き込む演算が、最初の１０行の各々に１２＊４バイトの出力／結果データを書き込み、各行の残りの４＊４バイトをゼロにする。タイル演算は、構成された最初の１０行の後のどの行も完全にゼロにする。６４バイトの行を有する１Ｋタイルを使用すると、１６行になるので、この例では最後の６行もゼロにされるはずである。
【００７５】
いくつかの実施形態では、コンテキスト復元（たとえば、ＸＲＳＴＯＲ）は、データをロードするとき、タイル用に構成された行を超えるデータがゼロとして保持されることを強制する。有効な構成がない場合、すべての行がゼロにされる。タイルデータのＸＲＳＴＯＲは、構成された列を超える列に不要なデータをロードする可能性がある。タイル構成に関連付けられた要素幅が存在しないので、構成された列数を超えてＸＲＳＴＯＲがクリアすることは不可能なはずである。
【００７６】
コンテキスト保存（たとえば、ＸＳＡＶＥ）は、それをメモリに書き込むときにＴＩＬＥ記憶領域全体を公開する。ＸＲＳＴＯＲがタイルの右端に不要なデータをロードした場合、そのデータはＸＳＡＶＥによって保存される。ＸＳＡＶＥは、タイルごとに指定された数を超える行にゼロを書き込む。
【００７７】
いくつかの実施形態では、タイル命令は再開可能である。メモリにアクセスする演算は、ページフォルト後の再開を可能にする。浮動小数点演算を処理する計算命令は、マスクされていない浮動小数点例外も可能にし、例外のマスキングは制御レジスタおよび／またはステータスレジスタによって制御される。
【００７８】
これらのイベント後の命令再開をサポートするために、これらの命令は下記に詳述されるスタートレジスタに情報を記憶する。
【００７９】
［ＩＩ．行列（タイル）演算システム］
［Ａ．例示的なハードウェアサポート］
図３は、行列（タイル）演算アクセラレータを利用するシステムの一実施形態を示す。この図では、ホストプロセッサ／処理システム３０１は、コマンド３１１（たとえば、算術演算もしくは行列操作演算、またはロード演算およびストア演算などの行列操作演算）を行列演算アクセラレータ３０７に伝達する。しかしながら、これは説明の目的でのみこのように示されている。後で詳述されるように、この行列演算アクセラレータ３０７は処理コアの一部であってもよい。通常、タイル操作演算子命令であるコマンド３１１は、レジスタ−レジスタ（「ｒｅｇ−ｒｅｇ」）フォーマットまたはレジスタ−メモリ（「ｒｅｇ−ｍｅｍ」）フォーマットとしてタイルを参照する。ＴＩＬＥＳＴＯＲＥ、ＴＩＬＥＬＯＡＤ、ＴＩＬＥＣＯＮＦＩＧなどの他のコマンドは、タイルに対してデータ演算を実行しない。コマンドは、行列演算アクセラレータ３０７が処理するための復号された命令（たとえば、マイクロ演算）またはマクロ命令であってもよい。
【００８０】
この例では、コヒーレントメモリインターフェース３０３は、ホストプロセッサ／処理システム３０１および行列演算アクセラレータ３０７に結合され、その結果、それらはメモリを共有することができる。図４および図５は、行列演算アクセラレータを使用してどのようにメモリが共有されるかについての異なる実施形態を示す。図４に示されたように、ホストプロセッサ４０１および行列演算アクセラレータ回路４０５は、同じメモリ４０３を共有する。図５は、ホストプロセッサ５０１および行列演算アクセラレータ５０５がメモリを共有しないが、互いのメモリにアクセスできる一実施形態を示す。たとえば、プロセッサ５０１は、タイルメモリ５０７にアクセスし、また自身のホストメモリ５０３を通常通り利用することができる。同様に、行列演算アクセラレータ５０５はホストメモリ５０３にアクセスすることができるが、より一般的にはタイルメモリ５０７を使用する。これらのメモリは異なるタイプのメモリであってもよいことに留意されたい。
【００８１】
いくつかの実施形態では、行列演算アクセラレータ３０７は、データバッファ３０５に結合された複数のＦＭＡ３０９を含む（いくつかの実装形態では、これらのデータバッファ３０５のうちの１つまたは複数は図示されたようにグリッドのＦＭＡに記憶される）。データバッファ３０５は、（たとえば、タイルロード命令またはタイルストア命令を使用して）メモリからロードされたタイルおよび／またはメモリに記憶されるべきタイルをバッファリングする。データバッファは、たとえば、複数のレジスタであってもよい。通常、これらのＦＭＡは、タイルを読み書きすることができる連鎖ＦＭＡのグリッド３０９として配置される。この例では、行列演算アクセラレータ３０７は、タイルＴ０、Ｔ１、およびＴ２を使用して行列乗算演算を実行する。ＦＭＡグリッド３０９には、これらのタイルのうちの少なくとも１つが記憶される。いくつかの実施形態では、演算に含まれるすべてのタイルがＦＭＡグリッド３０９に記憶される。他の実施形態では、サブセットのみがＦＭＡグリッド３０９に記憶される。図示されたように、Ｔ１は収容され、Ｔ０およびＴ２は収容されない。Ａ、Ｂ、およびＣは、これらのタイルの行列を指し、その行列はタイルの全スペースを占めても占めなくてもよい、ことに留意されたい。
【００８２】
図６は、タイル（「ＴＭＭＡ」）を使用する行列乗累算演算の一実施形態を示す。
【００８３】
行列（タイルＡ６０１）内の行数は、計算のレイテンシを含むシリアル（連鎖）ＦＭＡの数と一致する。一実装形態は、より低い高さのグリッド上で自由に再循環するが、計算は同じままである。
【００８４】
ソース／デスティネーションベクトルはＮ行のタイル（タイルＣ６０５）から来て、ＦＭＡのグリッド６１１は、タイルの行列乗算を実行する完全な命令をもたらすＮ個のベクトル−行列演算を実行する。タイルＢ６０３は他のベクトルソースであり、各段階でＦＭＡに「ブロードキャスト」項を供給する。
【００８５】
動作時は、いくつかの実施形態では、（タイルＢ６０３に記憶された）行列Ｂの要素は、ＦＭＡの矩形グリッドにわたって広がっている。（タイルＡ６０１に記憶された）行列Ｂは、ＦＭＡの矩形グリッドのカラム寸法と一致するように転置された行の要素を有する。グリッド内の各ＦＭＡにおいて、ＡとＢの要素が乗算され、（図の上から）入ってくる被加数に加算され、出力合計がＦＭＡの次の行（または最終出力）に渡される。
【００８６】
単一ステップのレイテンシはＫ（行列Ｂの行の高さ）に比例し、従属ＴＭＭＡは、通常、そのレイテンシを隠すのに十分なソース−デスティネーション行を（単一のタイル内またはタイル全体に）有する。一実装形態はまた、ＳＩＭＤ（パックドデータ要素）寸法Ｍ（行列Ａの行の高さ）を時間ステップにわたって分割する場合があるが、これは単にＫが乗算される定数を変えるだけである。プログラムがＴＭＡＣＣによって列挙された最大値より小さいＫを指定するとき、一実装形態はこれを「マスキング」または「アーリーアウト」で自由に実装する。
【００８７】
ＴＭＭＡ全体のレイテンシはＮ＊Ｋに比例する。リピートレートはＮに比例する。ＴＭＭＡ命令当たりのＭＡＣの数はＮ＊Ｋ＊Ｍである。
【００８８】
図７は、連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す。具体的には、この図はデスティネーションの１つのパックドデータ要素位置の反復の実行回路を示す。この実施形態では、連鎖融合乗累算は符号付きソースを処理しており、アキュムレータは２倍の入力データサイズである。
【００８９】
第１の符号付きソース（ソース１（７０１））および第２の符号付きソース（ソース２（７０３））は、各々４つのパックドデータ要素を有する。これらのパックドデータ要素の各々は、浮動小数点データなどの符号付きデータを記憶する。第３の符号付きソース（ソース３（７０９））は２つのパックドデータ要素を有し、それらの各々は符号付きデータを記憶する。第１および第２の符号付きソース７０１および７０３のサイズは、第３の符号付きソース（初期値または前の結果）７０９の半分のサイズである。たとえば、第１および第２の符号付きソース７０１および７０３は３２ビットのパックドデータ要素（たとえば、単精度浮動小数点）を有する可能性があり、第３の符号付きソース７０９は６４ビットのパックドデータ要素（たとえば、倍精度浮動小数点）を有する可能性がある。
【００９０】
この図では、第１および第２の符号付きソース７０１および７０３の２つの最上位パックドデータ要素位置、ならびに第３の符号付きソース７０９の最上位パックドデータ要素位置のみが示されている。当然、他のパックドデータ要素位置も処理されるはずである。
【００９１】
図示されたように、パックドデータ要素はペアで処理される。たとえば、第１および第２の符号付きソース７０１および７０３の最上位パックドデータ要素位置のデータは乗算器回路７０５を使用して乗算され、第１および第２の符号付きソース７０１および７０３の２番目の最上位パックドデータ要素位置からのデータは乗算器回路７０７を使用して乗算される。いくつかの実施形態では、これらの乗算器回路７０５および７０７は、他のパックドデータ要素位置に再利用される。他の実施形態では、パックドデータ要素が並列に処理されるように追加の乗算器回路が使用される。いくつかの文脈では、並列実行は、第３の符号付きソース７０９のサイズであるレーンを使用して行われる。各乗算の結果は、加算器回路７１１を使用して加算される。
【００９２】
乗算の結果の加算の結果は、（異なる加算器７１３または同じ加算器７１１を使用して）符号付きソース３（７０９）の最上位パックドデータ要素位置からのデータに加算される。
【００９３】
最後に、２番目の加算の結果は、第３の符号付きソース７０９から使用されたパックドデータ要素位置に対応するパックドデータ要素位置において符号付きデスティネーション７１５に記憶されるか、またはもしあれば次の反復に渡される。いくつかの実施形態では、対応するライトマスク（ビット）が設定されている場合には保存が生じ、設定されていない場合には保存が生じないように、ライトマスクがこのストレージに適用される。
【００９４】
図８は、連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す。具体的には、この図はデスティネーションの１つのパックドデータ要素位置の反復の実行回路を示す。この実施形態では、連鎖融合乗累算は符号付きソースを処理しており、アキュムレータは２倍の入力データサイズである。
【００９５】
第１の符号付きソース（ソース１（８０１））および第２の符号付きソース（ソース２（８０３））は、各々４つのパックドデータ要素を有する。これらのパックドデータ要素の各々は、整数データなどの符号付きデータを記憶する。第３の符号付きソース（ソース３（８０９））は２つのパックドデータ要素を有し、それらの各々は符号付きデータを記憶する。第１および第２の符号付きソース８０１および８０３のサイズは、第３の符号付きソース８０９の半分のサイズである。たとえば、第１および第２の符号付きソース８０１および８０３は３２ビットのパックドデータ要素（たとえば、単精度浮動小数点）を有する可能性があり、第３の符号付きソース８０９は６４ビットのパックドデータ要素（たとえば、倍精度浮動小数点）を有する可能性がある。
【００９６】
この図では、第１および第２の符号付きソース８０１および８０３の２つの最上位パックドデータ要素位置、ならびに第３の符号付きソース８０９の最上位パックドデータ要素位置のみが示されている。当然、他のパックドデータ要素位置も処理されるはずである。
【００９７】
図示されたように、パックドデータ要素はペアで処理される。たとえば、第１および第２の符号付きソース８０１および８０３の最上位パックドデータ要素位置のデータは乗算器回路８０５を使用して乗算され、第１および第２の符号付きソース８０１および８０３の２番目の最上位パックドデータ要素位置からのデータは乗算器回路８０７を使用して乗算される。いくつかの実施形態では、これらの乗算器回路８０５および８０７は、他のパックドデータ要素位置に再利用される。他の実施形態では、パックドデータ要素が並列に処理されるように追加の乗算器回路が使用される。いくつかの文脈では、並列実行は、第３の符号付きソース（初期値または前の反復結果）８０９のサイズであるレーンを使用して行われる。各乗算の結果は、加算／飽和回路８１３を使用して第３の符号付きソース８０９に加算される。
【００９８】
加算／飽和（アキュムレータ）回路８１３は、加算が大きすぎる値をもたらすとき、オペランドの符号を保存する。具体的には、飽和評価は、多方向加算とデスティネーションへの書き込みまたは次の繰返しとの間の無限精度結果に対して行われる。アキュムレータ８１３が浮動小数点であり、入力項が整数であるとき、積の和および浮動小数点アキュムレータ入力値は、無限精度値（数百ビットの固定小数点数）に変換され、乗算結果と第３の入力の加算が実行され、実際のアキュムレータタイプへの丸めが１回実行される。
【００９９】
符号なし飽和は、出力値がその要素幅に対して最大符号なし数（すべて１）に制限されることを意味する。符号付き飽和は、値がその要素幅に対して最小の負の数と最大の正の数との間にあるように制限されることを意味する（たとえば、バイトの場合、範囲は−１２８（＝−２＾７）から１２７（＝２＾７−１）までである）。
【０１００】
加算および飽和検査の結果は、第３の符号付きソース８０９から使用されたパックドデータ要素位置に対応するパックドデータ要素位置において符号付き結果８１５に記憶されるか、またはもしあれば次の反復に渡される。いくつかの実施形態では、対応するライトマスク（ビット）が設定されている場合には保存が生じ、設定されていない場合には保存が生じないように、ライトマスクがこのストレージに適用される。
【０１０１】
図９は、連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す。具体的には、この図はデスティネーションの１つのパックドデータ要素位置の反復の実行回路を示す。この実施形態では、連鎖融合乗累算は符号付きソースおよび符号なしソースを処理しており、アキュムレータは４倍の入力データサイズである。
【０１０２】
第１の符号付きソース（ソース１（９０１））および第２の符号なしソース（ソース２（９０３））は、各々４つのパックドデータ要素を有する。これらのパックドデータ要素の各々は、浮動小数点データまたは整数データなどのデータを有する。第３の符号付きソース（初期値または結果９１５）は、符号付きデータを記憶するパックドデータ要素を有する。第１および第２の符号付きソース９０１および９０３のサイズは、第３の符号付きソース９１５の４分の１である。たとえば、第１および第２のソース９０１および９０３は１６ビットのパックドデータ要素（たとえば、ワード）を有する可能性があり、第３の符号付きソース９１５は６４ビットのパックドデータ要素（たとえば、倍精度浮動小数点または６４ビット整数）を有する可能性がある。
【０１０３】
この図では、第１および第２のソース９０１および９０３の４つの最上位パックドデータ要素位置、ならびに第３の符号付きソース９１５の最上位パックドデータ要素位置が示されている。当然、他のパックドデータ要素位置も、もしあれば処理されるはずである。
【０１０４】
図示されたように、パックドデータ要素は四つ組で処理される。たとえば、第１および第２のソース９０１および９０３の最上位パックドデータ要素位置のデータは乗算器回路９０５を使用して乗算され、第１および第２のソース９０１および９０３の２番目の最上位パックドデータ要素位置からのデータは乗算器回路９０７を使用して乗算され、第１および第２のソース９０１および９０３の３番目の最上位パックドデータ要素位置からのデータは乗算器回路９０９を使用して乗算され、第１および第２のソース９０１および９０３の最下位パックドデータ要素位置からのデータは乗算器回路９１１を使用して乗算される。いくつかの実施形態では、第１のソース９０１の符号付きパックドデータ要素は符号拡張され、第２のソース９０３の符号なしパックドデータ要素は乗算より前にゼロ拡張される。
【０１０５】
いくつかの実施形態では、これらの乗算器回路９０５〜９１１は他のパックドデータ要素位置に再利用される。他の実施形態では、パックドデータ要素が並列に処理されるように追加の乗算器回路が使用される。いくつかの文脈では、並列実行は、第３の符号付きソース９１５のサイズであるレーンを使用して行われる。各乗算の結果は、加算器回路９１１を使用して加算される。
【０１０６】
乗算の結果の加算の結果は、（異なる加算器９１３または同じ加算器９１１を使用して）符号付きソース３（９１５）の最上位パックドデータ要素位置からのデータに加算される。
【０１０７】
最後に、２番目の加算の結果９１９は、第３の符号付きソース９１５から使用されたパックドデータ要素位置に対応するパックドデータ要素位置において符号付きデスティネーションに記憶されるか、または次の反復に渡される。いくつかの実施形態では、対応するライトマスク（ビット）が設定されている場合には保存が生じ、設定されていない場合には保存が生じないように、ライトマスクがこのストレージに適用される。
【０１０８】
図１０は、連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す。具体的には、この図はデスティネーションの１つのパックドデータ要素位置の反復の実行回路を示す。この実施形態では、連鎖融合乗累算は符号付きソースおよび符号なしソースを処理しており、アキュムレータは４倍の入力データサイズである。
【０１０９】
第１の符号付きソース（符号付きソース１（１００１））および第２の符号なしソース（符号なしソース２（１００３））は、各々４つのパックドデータ要素を有する。これらのパックドデータ要素の各々は、浮動小数点データまたは整数データなどのデータを記憶する。第３の符号付きソース（初期値または前の結果１０１５）は、符号付きデータを記憶するパックドデータ要素を有する。符号付きソース１（１００１）および符号なしソース２（１００３）のサイズは、初期値または前の結果１０１５に接続された第３の符号付きソースの４分の１である。たとえば、符号付きソース１（１００１）および符号なしソース２（１００３）は１６ビットのパックドデータ要素（たとえば、ワード）を有する可能性があり、初期値または前の結果１０１５は６４ビットのパックドデータ要素（たとえば、倍精度浮動小数点または６４ビット整数）を有する可能性がある。
【０１１０】
この図では、符号付きソース１（１００１）および符号なしソース２（１００３）の４つの最上位パックドデータ要素位置、ならびに初期値または前の結果１０１５の最上位パックドデータ要素位置が示されている。当然、他のパックドデータ要素位置も、もしあれば処理されるはずである。
【０１１１】
図示されたように、パックドデータ要素は四つ組で処理される。たとえば、符号付きソース１（１００１）および符号なしソース２（１００３）の最上位パックドデータ要素位置のデータは乗算器回路１００５を使用して乗算され、符号付きソース１（１００１）および符号なしソース２（１００３）の２番目の最上位パックドデータ要素位置からのデータは乗算器回路１００７を使用して乗算され、符号付きソース１（１００１）および符号なしソース２（１００３）の３番目の最上位パックドデータ要素位置からのデータは乗算器回路１００９を使用して乗算され、符号付きソース１（１００１）および符号なしソース２（１００３）の最下位パックドデータ要素位置からのデータは乗算器回路１０１１を使用して乗算される。いくつかの実施形態では、符号付きソース１（１００１）の符号付きパックドデータ要素は符号拡張され、符号なしソース２（１００３）の符号なしパックドデータ要素は乗算より前にゼロ拡張される。
【０１１２】
いくつかの実施形態では、これらの乗算器回路１００５〜１０１１は他のパックドデータ要素位置に再利用される。他の実施形態では、パックドデータ要素が並列に処理されるように追加の乗算器回路が使用される。いくつかの文脈では、並列実行は、初期値または前の結果１０１５のサイズであるレーンを使用して行われる。乗算の結果の加算の結果は、加算／飽和回路１０１３を使用して、初期値または前の結果１０１５に接続された符号付きソース３の最上位パックドデータ要素位置からのデータに加算される。
【０１１３】
加算／飽和回路１０１３は、加算が符号付き飽和にとって大きすぎるかまたは小さすぎる値をもたらすとき、オペランドの符号を保存する。本明細書で使用するとき、加算／飽和回路１０１３はアキュムレータと呼ばれることがある。具体的には、飽和評価は、多方向加算とデスティネーションへの書き込みとの間の無限精度結果に対して行われる。加算／飽和回路１０１３が浮動小数点を使用し、入力項が整数であるとき、積の和および浮動小数点アキュムレータ入力値は、無限精度値（数百ビットの固定小数点数）に変換され、乗算結果と第３の入力の加算が実行され、実際のアキュムレータタイプへの丸めが１回実行される。
【０１１４】
加算および飽和検査の結果１０１９は、第３の符号付きソースから使用され、初期値もしくは前の結果１０１５に接続されたパックドデータ要素位置に対応するパックドデータ要素位置において符号付きデスティネーションに記憶されるか、または次の反復に渡される。いくつかの実施形態では、対応するライトマスク（ビット）が設定されている場合には保存が生じ、設定されていない場合には保存が生じないように、ライトマスクがこのストレージに適用される。
【０１１５】
図１１は、一実施形態による、乗算器への入力よりも大きい入力サイズをアキュムレータが使用する、２のべき乗サイズのＳＩＭＤの実装形態を示す。（乗算器への）ソース値およびアキュムレータ値は、符号付きの値であっても符号なしの値であってもよいことに留意されたい。２倍の入力サイズを有するアキュムレータの（言い換えれば、アキュムレータの入力値がソースのパックドデータ要素サイズの２倍のサイズである）場合、表１１０１は様々な構成を示す。バイトサイズのソースの場合、アキュムレータはサイズが１６ビットのワードまたは半精度浮動小数点（ＨＰＦＰ）の値を使用する。ワードサイズのソースの場合、アキュムレータはサイズが３２ビットの３２ビット整数または単精度浮動小数点（ＳＰＦＰ）の値を使用する。ＳＰＦＰまたは３２ビット整数のサイズのソースの場合、アキュムレータはサイズが６４ビットの６４ビット整数または倍精度浮動小数点（ＤＰＦＰ）の値を使用する。
【０１１６】
４倍の入力サイズを有するアキュムレータの（言い換えれば、アキュムレータの入力値がソースのパックドデータ要素サイズの４倍のサイズである）場合、表１１０３は様々な構成を示す。バイトサイズのソースの場合、アキュムレータはサイズが３２ビットの３２ビット整数または単精度浮動小数点（ＳＰＦＰ）の値を使用する。ワードサイズのソースの場合、いくつかの実施形態では、アキュムレータはサイズが６４ビットの６４ビット整数または倍精度浮動小数点（ＤＰＦＰ）の値を使用する。
【０１１７】
８倍の入力サイズを有するアキュムレータの（言い換えれば、アキュムレータの入力値がソースのパックドデータ要素サイズの８倍のサイズである）場合、表１１０５は１つの構成を示す。バイトサイズのソースの場合、アキュムレータは６４ビット整数を使用する。
【０１１８】
先に示唆したように、行列演算回路はコアに含まれてもよく、外部アクセラレータであってもよい。図１２は、行列演算回路を利用するシステムの一実施形態を示す。この図では、複数のエンティティがリングインターコネクト１２４５と結合されている。
【０１１９】
複数のコア１２０１、１２０３、１２０５、および１２０７は、非タイルベースの命令サポートを提供する。いくつかの実施形態では、行列演算回路１２５１はコア１２０３内に設けられ、他の実施形態では、行列演算回路１２１１および１２１３はリングインターコネクト１２４５上でアクセス可能である。
【０１２０】
さらに、コアおよび／または行列演算回路の代わりに、メモリ１２３３および１２３１と通信するために、１つまたは複数のメモリコントローラ１２２３〜１２２５が設けられる。
【０１２１】
図１３は、タイルを使用する行列演算をサポートするプロセッサコアパイプラインの一実施形態を示す。分岐予測および復号回路１３０３は、命令ストレージ１３０１に記憶された命令から、命令の分岐予測、命令の復号、および／またはその両方を実行する。たとえば、本明細書に詳述されている命令は命令ストレージに記憶されてもよい。いくつかの実装形態では、別々の回路が分岐予測に使用され、いくつかの実施形態では、少なくともいくつかの命令が、マイクロコード１３０５を使用して、１つもしくは複数のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号に復号される。分岐予測および復号回路１３０３は、様々な異なるメカニズムを使用して実装されてもよい。適切なメカニズムの例には、参照テーブル、ハードウェア実装、プログラマブルロジック配列（ＰＬＡ）、マイクロコード読み出し専用メモリ（ＲＯＭ）などが含まれるが、それらに限定されない。
【０１２２】
分岐予測および復号回路１３０３は、いくつかの実施形態では、スケジューラ回路１３０９に結合されたリネーム／アロケータ回路１３０７に結合される。いくつかの実施形態では、これらの回路は、１）論理オペランド値を物理オペランド値（たとえば、いくつかの実施形態ではレジスタエイリアステーブル）にリネーミングすること、２）ステータスビットおよびフラグを復号された命令に割り当てること、ならびに３）（たとえば、いくつかの実施形態では予約ステーションを使用して）命令プールから実行回路上で実行するための復号された命令をスケジュールすることのうちの１つまたは複数を実行することにより、レジスタリネーミング、レジスタ割当て、および／またはスケジューリング機能を提供する。
【０１２３】
スケジューラ回路１３０９は、予約ステーション、中央命令ウィンドウなどを含む任意の数の様々なスケジューラを表す。スケジューラユニットのスケジューラ回路１３０９は、物理レジスタファイル１３１５に結合されるか、またはそれを含む。物理レジスタファイル１３１５の各々は１つまたは複数の物理レジスタファイルを表し、それらの異なるファイルは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（たとえば、実行されるべき次の命令のアドレスである命令ポインタ）、タイルなどの１つまたは複数の異なるデータタイプを記憶する。１つの実施形態では、物理レジスタファイル１３１５は、ベクトルレジスタ回路、ライトマスクレジスタ回路、およびスカラレジスタ回路を備える。これらのレジスタ回路は、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供することができる。物理レジスタファイル１３１５は、レジスタリネーミングおよびアウトオブオーダ実行が（たとえば、リオーダバッファおよびリタイアメントレジスタファイルを使用すること、将来ファイル、履歴バッファ、およびリタイアメントレジスタファイルを使用すること、レジスタマップおよびレジスタのプールを使用することなどで）実装され得る様々な方法を示すために、リタイアメント回路１３１７と重なっている。リタイアメント回路１３１７および物理レジスタファイル１３１５は、実行回路１３１１に結合される。
【０１２４】
レジスタリネーミングはアウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングはインオーダアーキテクチャで使用されてもよいことを理解されたい。図示されたプロセッサの実施形態はまた、別々の命令およびデータのキャッシュユニットならびに共有Ｌ２キャッシュユニットを含んでもよいが、代替の実施形態は、たとえば、レベル１（Ｌ１）内部キャッシュ、または複数レベルの内部キャッシュなどの、命令とデータの両方のための単一の内部キャッシュを有してもよい。いくつかの実施形態では、システムは、内部キャッシュと、コアおよび／またはプロセッサの外部にある外部キャッシュの組合せを含んでもよい。あるいは、キャッシュのすべてがコアおよび／またはプロセッサの外部にあってもよい。
【０１２５】
実行回路１３１１は、１つまたは複数の実行回路１３２１、１３２３、および１３２７のセット、ならびに１つまたは複数のメモリアクセス回路１３２５のセットを含む。実行回路１３２１、１３２３、および１３２７は、様々な演算（たとえば、シフト、加算、減算、乗算）を、様々なタイプのデータ（たとえば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して実行する。いくつかの実施形態は、特定の機能または機能のセットに専用のいくつかの実行ユニットを含んでもよいが、他の実施形態は、ただ１つの実行ユニットまたはすべてがすべての機能を実行する複数の実行ユニットを含んでもよい。スカラ回路１３２１はスカラ演算を実行し、ベクトル／ＳＩＭＤ回路１３２３はベクトル／ＳＩＭＤ演算を実行し、行列演算回路１３２７は本明細書に詳述されている行列（タイル）演算を実行する。
【０１２６】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、以下のようにパイプラインを実装することができる。１）命令フェッチ回路がフェッチおよび長さ復号段階を実行する。２）分岐および復号回路１３０３が復号段階を実行する。３）リネーム／アロケータ回路１３０７が割当て段階およびリネーミング段階を実行する。４）スケジューラ回路１３０９がスケジュール段階を実行する。５）（スケジューラ回路１３０９およびリネーム／アロケート回路１３０７に結合されるか、またはそれらに含まれる）物理レジスタファイルならびにメモリユニットがレジスタ読み取り／メモリ読み取り段階を実行し、実行回路１３１１が実行段階を実行する。６）メモリユニットおよび物理レジスタファイルユニットがライトバック／メモリ書き込み段階を実行する。７）様々なユニットが例外処理段階に関与してもよい。８）リタイアメントユニットおよび物理レジスタファイルユニットがコミット段階を実行する。
【０１２７】
コアは、本明細書で説明された命令を含む、１つまたは複数の命令セット（たとえば、（より新しいバージョンで追加されたいくつかの拡張を有する）ｘ８６命令セット、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭ  Ｈｏｌｄｉｎｇｓの（ＮＥＯＮなどのオプションの追加の拡張を有する）ＡＲＭ命令セット）をサポートすることができる。１つの実施形態では、コア１３９０は、パックドデータ命令セット拡張（たとえば、ＡＶＸ１、ＡＶＸ２）をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションによって使用される演算がパックドデータを使用して実行されることが可能になる。
【０１２８】
コアは、マルチスレッド化（演算またはスレッドの２つ以上の並列セットの実行）をサポートし、タイムスライスマルチスレッド化、（物理コアが同時にマルチスレッド化しているスレッドの各々に単一の物理コアが論理コアを提供する）同時マルチスレッド化、またはそれらの組合せ（たとえば、インテル（登録商標）ハイパースレッディングテクノロジなどにおけるタイムスライスフェッチおよび復号ならびにその後の同時マルチスレッド化）を含む様々な方法でサポートすることができる。
【０１２９】
図１４は、タイルを使用する行列演算をサポートするプロセッサコアパイプラインの一実施形態を示す。分岐予測および復号回路１４０３は、命令ストレージ１４０１に記憶された命令から、命令の分岐予測、命令の復号、および／またはその両方を実行する。たとえば、本明細書に詳述されている命令は命令ストレージに記憶されてもよい。いくつかの実装形態では、別々の回路が分岐予測に使用され、いくつかの実施形態では、少なくともいくつかの命令が、マイクロコード１４０５を使用して、１つもしくは複数のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号に復号される。分岐予測および復号回路１４０３は、様々な異なるメカニズムを使用して実装されてもよい。適切なメカニズムの例には、参照テーブル、ハードウェア実装、プログラマブルロジック配列（ＰＬＡ）、マイクロコード読み出し専用メモリ（ＲＯＭ）などが含まれるが、それらに限定されない。
【０１３０】
分岐予測および復号回路１４０３は、いくつかの実施形態では、スケジューラ回路１４０９に結合されたリネーム／アロケータ回路１４０７に結合される。いくつかの実施形態では、これらの回路は、１）論理オペランド値を物理オペランド値（たとえば、いくつかの実施形態ではレジスタエイリアステーブル）にリネーミングすること、２）ステータスビットおよびフラグを復号された命令に割り当てること、ならびに３）（たとえば、いくつかの実施形態では予約ステーションを使用して）命令プールから実行回路上で実行するための復号された命令をスケジュールすることのうちの１つまたは複数を実行することにより、レジスタリネーミング、レジスタ割当て、および／またはスケジューリング機能を提供する。
【０１３１】
スケジューラ回路１４０９は、予約ステーション、中央命令ウィンドウなどを含む任意の数の様々なスケジューラを表す。スケジューラユニットのスケジューラ回路１４０９は、物理レジスタファイル１４１５に結合されるか、またはそれを含む。物理レジスタファイル１４１５の各々は１つまたは複数の物理レジスタファイルを表し、それらの異なるファイルは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（たとえば、実行されるべき次の命令のアドレスである命令ポインタ）、タイルなどの１つまたは複数の異なるデータタイプを記憶する。１つの実施形態では、物理レジスタファイル１４１５は、ベクトルレジスタ回路、ライトマスクレジスタ回路、およびスカラレジスタ回路を備える。これらのレジスタ回路は、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供することができる。物理レジスタファイル１４１５は、レジスタリネーミングおよびアウトオブオーダ実行が（たとえば、リオーダバッファおよびリタイアメントレジスタファイルを使用すること、将来ファイル、履歴バッファ、およびリタイアメントレジスタファイルを使用すること、レジスタマップおよびレジスタのプールを使用することなどで）実装され得る様々な方法を示すために、リタイアメント回路１４１７と重なっている。リタイアメント回路１４１７および物理レジスタファイル１４１５は、実行回路１４１１に結合される。
【０１３２】
レジスタリネーミングはアウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングはインオーダアーキテクチャで使用されてもよいことを理解されたい。図示されたプロセッサの実施形態はまた、別々の命令およびデータのキャッシュユニットならびに共有Ｌ２キャッシュユニットを含んでもよいが、代替の実施形態は、たとえば、レベル１（Ｌ１）内部キャッシュ、または複数レベルの内部キャッシュなどの、命令とデータの両方のための単一の内部キャッシュを有してもよい。いくつかの実施形態では、システムは、内部キャッシュと、コアおよび／またはプロセッサの外部にある外部キャッシュの組合せを含んでもよい。あるいは、キャッシュのすべてがコアおよび／またはプロセッサの外部にあってもよい。
【０１３３】
実行回路１４１１は、１つまたは複数の実行回路１４２７のセット、および１つまたは複数のメモリアクセス回路１４２５のセットを含む。実行回路１４２７は、本明細書に詳述されている行列（タイル）演算を実行する。
【０１３４】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、以下のようにパイプラインを実装することができる。１）命令フェッチ回路がフェッチおよび長さ復号段階を実行する。２）分岐および復号回路１４０３が復号段階を実行する。３）リネーム／アロケータ回路１４０７が割当て段階およびリネーミング段階を実行する。４）スケジューラ回路１４０９がスケジュール段階を実行する。５）（スケジューラ回路１４０９およびリネーム／アロケータ回路１４０７に結合されるか、またはそれらに含まれる）物理レジスタファイルならびにメモリユニットがレジスタ読み取り／メモリ読み取り段階を実行し、実行回路１４１１が実行段階を実行する。６）メモリユニットおよび物理レジスタファイルユニットがライトバック／メモリ書き込み段階を実行する。７）様々なユニットが例外処理段階に関与してもよい。８）リタイアメントユニットおよび物理レジスタファイルユニットがコミット段階を実行する。
【０１３５】
コアは、本明細書で説明された命令を含む、１つまたは複数の命令セット（たとえば、（より新しいバージョンで追加されたいくつかの拡張を有する）ｘ８６命令セット、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭ  Ｈｏｌｄｉｎｇｓの（ＮＥＯＮなどのオプションの追加の拡張を有する）ＡＲＭ命令セット）をサポートすることができる。１つの実施形態では、コア１４９０は、パックドデータ命令セット拡張（たとえば、ＡＶＸ１、ＡＶＸ２）をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションによって使用される演算がパックドデータを使用して実行されることが可能になる。
【０１３６】
コアは、マルチスレッド化（演算またはスレッドの２つ以上の並列セットの実行）をサポートし、タイムスライスマルチスレッド化、（物理コアが同時にマルチスレッド化しているスレッドの各々に単一の物理コアが論理コアを提供する）同時マルチスレッド化、またはそれらの組合せ（たとえば、インテル（登録商標）ハイパースレッディングテクノロジなどにおけるタイムスライスフェッチおよび復号ならびにその後の同時マルチスレッド化）を含む様々な方法でサポートすることができる。
【０１３７】
［Ｂ．レイアウト］
この説明全体を通して、データは行優先データレイアウトを使用して表現される。列優先ユーザは、自分の方向性に従って用語を解釈するべきである。図１５は、行優先フォーマットおよび列優先フォーマットで表現された行列の一例を示す。図示されたように、行列Ａは２×３行列である。この行列が行優先フォーマットで記憶されると、行のデータ要素は連続している。この行列が列優先フォーマットで記憶されると、列のデータ要素は連続している。ＡＴ＊ＢＴ＝（ＢＡ）Ｔであることは行列のよく知られた性質であり、上付き文字Ｔは転置を意味する。列優先データを行優先データとして読み取ると、行列は転置行列のように見える行列をもたらす。
【０１３８】
いくつかの実施形態では、行優先セマンティクスはハードウェアで利用され、列優先データはオペランド順序を行列の転置である結果と交換することであるが、その後のメモリからの列優先読み取りの場合、それは正しい非転置行列である。
【０１３９】
たとえば、乗算されるべき列優先行列が２つある場合、
【数１】
2019197531.tif 000003
【０１４０】
入力行列は、以下のように線形メモリ（列優先）に記憶されるはずである。
【数２】
2019197531.tif 000004
【０１４１】
それらの行列を２×３および３×２の寸法を有する行優先として読み取ると、それらは以下のように見えるはずである。
【数３】
2019197531.tif 000005
【０１４２】
次数と行列の乗算を交換する。
【数４】
2019197531.tif 000006
転置行列が出力された後、行優先順に記憶することできる。
【数５】
2019197531.tif 000007
その後の列優先計算で使用され、それは正しい非転置行列である。
【数６】
2019197531.tif 000008
【０１４３】
［ＩＩＩ．例示的な使用］
図１６は、行列（タイル）の使用に関する一例を示す。この例では、行列Ｃ１６０１は２つのタイルを含み、タイルＡ１６０３は１つのタイルを含み、タイルＢ１６０５は２つのタイルを含む。この図は、行列乗算を計算するアルゴリズムの内部ループの一例を示している。この例では、行列Ｃ１６０１からの２つの結果タイルｔｍｍ０およびｔｍｍ１は、中間結果を累積するために使用される。行列Ａ１６０３からの１つのタイル（ｔｍｍ２）は、行列Ｂ１６０５からの２つのタイルと乗算されるので、２回再利用される。矢印によって示された方向から新しいＡタイルおよび２つの新しいＢタイルをロードするポインタ。図示されていない外側のループは、Ｃタイル用のポインタを調整する。
【０１４４】
図示された例示的なコードは、タイル構成命令の使用を含み、タイル使用を構成し、タイルをロードし、タイルを処理するループを行い、メモリにタイルを記憶し、タイル使用を解放するために実行される。
【０１４５】
図１７は、行列（タイル）の使用の一実施形態を示す。１７０１において、タイル使用が構成される。たとえば、タイル当たりの行数および列数の設定を含むタイル使用を構成するために、ＴＩＬＥＣＯＮＦＩＧ命令が実行される。通常、１７０３において、少なくとも１つの行列（タイル）がメモリからロードされる。１７０５において、行列（タイル）を使用して少なくとも１つの行列（タイル）演算が実行される。１７０７において、少なくとも１つの行列（タイル）がメモリに記憶され、１７０９において、コンテキストの切替えを行うことができる。
【０１４６】
［ＩＶ．例示的な構成］
［Ａ．タイル構成ハードウェアサポート］
【０１４７】
上述されたように、タイル使用は、通常、使用する前に構成される必要がある。たとえば、すべての行および列を完全に使用することは必要でないかもしれない。いくつかの実施形態では、これらの行および列を構成しないことが電力を節約するだけでなく、その構成は演算がエラーを発生させるかどうかを判定するために使用されてもよい。たとえば、形式（Ｎ×Ｍ）＊（Ｌ＊Ｎ）の行列乗算は、通常、ＭとＬが同じでない場合機能しない。
【０１４８】
タイルを使用して行列を使用する前に、いくつかの実施形態では、タイルサポートが構成されるべきである。たとえば、タイル当たりの行数および列数、使用されるべきタイルなどが構成される。ＴＩＬＥＣＯＮＦＩＧ命令は、（プロセッサコアの一部として、または外部デバイスとして）行列アクセラレータを使用するようにコンピュータを構成するサポートを提供するので、コンピュータ自体に対する改良である。具体的には、ＴＩＬＥＣＯＮＦＩＧ命令を実行すると、構成がメモリから取り出され、行列アクセラレータ内の行列（タイル）設定に適用される。
【０１４９】
［ｉ．タイル使用構成］
図１８は、一実施形態による、タイルの使用の構成用のサポートを示す。メモリ１８０１はサポートされるべき行列（タイル）のタイル記述１８０３を含む。
【０１５０】
プロセッサ／コア１８０５の実行回路１８１１は、タイル記述１８０３のア態様をタイル構成１８１７に記憶する。タイル構成１８１７は、パレット用のどのタイルが構成されているか（各タイル内の行および列の数）、ならびに行列サポートが使用中であることのマーキングを詳述する。実行回路１８１１は、タイル構成１８１７によって指定されたタイルを使用するように構成される。実行回路１８１１はまた、タイル使用を示すために、機械状態レジスタ、モデル固有レジスタ（ＭＳＲ）、または構成レジスタを含んでもよい。使用中の値および開始値などのさらなる値も設定される。タイル構成１８１７は、１つまたは複数のレジスタ１８１９を利用して、タイル使用および構成情報を記憶する。
【０１５１】
図１９は、サポートされるべき行列（タイル）の記述の一実施形態を示す。これは、ＳＴＴＩＬＥＣＦＧ命令の実行時に記憶されるべき記述である。この例では、各フィールドは１バイトである。バイト［０］には、パレットＩＤ１９０１が記憶される。パレットＩＤは、パレットＩＤごとに、タイル内のバイト数、および構成によって定義されるようにこのＩＤに関連付けられるタイルの行当たりのバイト数を記憶するパレットテーブル１８１３をインデックス付けするために使用される。
【０１５２】
バイト１は「ｓｔａｒｔＲｏｗ」レジスタ１９０３に記憶されるべき値を記憶し、バイト２は「ｓｔａｒｔＰ」レジスタ１９０５に記憶されるべき値を記憶する。これらのイベントの後の命令の再開をサポートするために、命令はこれらのレジスタに情報を記憶する。上述されたイベントなどのブレークイベント後の命令の再開をサポートするために、命令はこれらのレジスタに情報を記憶する。ｓｔａｒｔＲｏｗ値は、再開に使用されるべき行を示す。ｓｔａｒｔＰ値は、ペアが使用されるときのストア演算のための行内の位置を示し、いくつかの実施形態では、（ペアの下位タイル内の）行の下半分または（ペアの上位タイル内の）行の上半分を示す。通常、行（列）の位置は必要ではない。
【０１５３】
ＴＩＬＥＣＯＮＦＩＧおよびＳＴＴＩＬＥＣＦＧを除いて、行列（タイル）命令を正常に実行すると、ｓｔａｒｔＲｏｗとｓｔａｒｔＰの両方がゼロに設定される。
【０１５４】
中断された行列（タイル）命令が再開されないときはいつでも、ｓｔａｒｔＲｏｗおよびｓｔａｒｔＰの値をゼロにすることはソフトウェアの責任である。たとえば、マスクされていない浮動小数点例外ハンドラは、ソフトウェア内の演算を終了し、プログラムカウンタ値を別の命令、通常は次の命令に変更することを決定する場合がある。この場合、ソフトウェア例外ハンドラは、プログラムを再開する前に、オペレーティングシステムによってそれに提示された例外内のｓｔａｒｔＲｏｗ値およびｓｔａｒｔＰ値をゼロにしなければならない。オペレーティングシステムは、その後、復元命令を使用してそれらの値を再ロードする。
【０１５５】
バイト３は、タイルのペア（タイル当たり１ｂ）の指示１９０７を記憶する。
【０１５６】
バイト１６〜１７は、タイル０の行数１９１３および列数１９１５を記憶し、バイト１８〜１９は、タイル１の行数および列数を記憶する、などである。言い換えれば、各２バイトグループは、タイルの行数および列数を指定する。２バイトのグループがタイルパラメータを指定するために使用されない場合、それらは値ゼロをもつべきである。実装制限またはパレット制限よりも多くのタイルに対してタイルパラメータを指定すると、故障をもたらす。未構成のタイルは、０行０列の初期状態に設定される。
【０１５７】
最後に、メモリ内の構成は、通常、いくつかの連続するバイトのオールゼロなどの、末尾の描写で終わる。
【０１５８】
［ｉｉ．例示的なタイルおよびタイル構成ストレージ］
図２０Ａ〜図２０Ｄはレジスタ１８１９の例を示す。図２０Ａは複数のレジスタ１８１９を示す。図示されたように、各タイル（ＴＭＭ０  ２００１…ＴＭＭＮ  ２００３）は別々のレジスタを有し、各レジスタはその特定のタイルの行および列のサイズを記憶する。ＳｔａｒｔＰ２０１１およびＳｔａｒｔＲｏｗ２０１３は別々のレジスタに記憶される。タイルが使用のために構成されていることを示すために、１つまたは複数のステータスレジスタ２０１５が設定される（たとえば、ＴＩＬＥＳ＿ＣＯＮＦＩＧＵＲＥＤ＝１）。
【０１５９】
図２０Ｂは複数のレジスタ１８１９を示す。図示されたように、各タイルはその行および列のための別々のレジスタを有する。たとえば、ＴＭＭ０行構成２０２１、ＴＭＭ０列構成２０２３、ＳｔａｒｔＰ２０１１、およびＳｔａｒｔＲｏｗ２０１３は別々のレジスタに記憶される。タイルが使用のために構成されていることを示すために、１つまたは複数のステータスレジスタ２０１５が設定される（たとえば、ＴＩＬＥＳ＿ＣＯＮＦＩＧＵＲＥＤ＝１）。
【０１６０】
図２０Ｃは単一のレジスタ１８１９を示す。図示されたように、このレジスタは、パックドデータレジスタとして単一のレジスタに記憶されたタイル構成（タイル当たりの行および列）２０３１、ＳｔａｒｔＰ２０１１、およびＳｔａｒｔＲｏｗ２０１３を記憶する。タイルが使用のために構成されていることを示すために、１つまたは複数のステータスレジスタ２０１５が設定される（たとえば、ＴＩＬＥＳ＿ＣＯＮＦＩＧＵＲＥＤ＝１）。
【０１６１】
図２０Ｄは複数のレジスタ１８１９を示す。図示されたように、単一のレジスタはタイル構成（タイル当たりの行および列）２０３１を記憶する。ＳｔａｒｔＰ２０１１およびＳｔａｒｔＲｏｗ２０１３は別々のレジスタに記憶される。タイルが使用のために構成されていることを示すために、１つまたは複数のステータスレジスタ２０１５が設定される（たとえば、ＴＩＬＥＳ＿ＣＯＮＦＩＧＵＲＥＤ＝１）。
【０１６２】
それらが別々に示される場合、開始レジスタを単一のレジスタに結合することなどの、他の組合せも考えられる。
【０１６３】
［連鎖タイル演算］
開示された実施形態に従って実装された単一命令複数データ（ＳＩＭＤ）プロセッサコアは、ＳＩＭＤ実行を通して有意のデータ並列性を獲得する。しかしながら、ＳＩＭＤ機能ユニットの数またはＳＩＭＤ機能ユニットの幅によってスループットが制限されるので、ＳＩＭＤ計算スループットに制限が存在することがある。ＳＩＭＤ機能ユニットは、本明細書では処理エンジン（ＰＥ）と呼ばれることがある。開示された実施形態は、ＳＩＭＤ実行において使用するための本明細書で説明されたＴＩＬＥＳアーキテクチャを活用し、ＳＩＭＤ機能ユニットの数の増加、および各機能ユニットの幅の増大を可能にする。
【０１６４】
開示された実施形態は、配列内のタイルにアクセスする連鎖タイル演算の間でデータの再使用を可能にするために、ＴＩＬＥＳアーキテクチャを使用する多くのベクトル化可能命令にエネルギー効率および実行速度の向上をもたらす。本明細書で使用するとき、チェーンは、共通のソースおよびデスティネーションタイル指定子を有する一連の２つ以上の命令（マクロ演算および／またはマイクロ演算）である。本明細書で使用するとき、ソースタイル指定子は、処理されるべきソースタイルを取り出す位置を指定する命令に含まれる。デスティネーションタイル指定子は、命令の結果を書き込むデスティネーションタイルを指定する命令に含まれる。指定されたソースタイルおよびデスティネーションタイルは、メモリ、キャッシュ階層、スクラッチパッド、およびレジスタファイルのうちの任意の１つまたは複数に記憶されてもよい。
【０１６５】
タイル演算のチェーンの非限定的な例を説明するために、第１の命令は指定されたデスティネーションタイルに書き込まれるべき結果を生成することができるが、その結果は第２の命令の指定されたソースタイルとしても使用することができる。いくつかの実施形態によれば、第１の命令のデスティネーションタイル指定子は破棄され、第１の命令の結果は代わりに第２の命令を実行する処理エンジンに送られる。いくつかの他の実施形態では、第１の命令のデスティネーションタイル指定子は無視され、第１の命令の結果は代わりにチェーン内の後続の命令を実行する処理エンジンに送られる。いくつかの他の実施形態では、第１の命令のデスティネーションタイル指定子は矛盾し、第１の命令の結果は代わりにチェーン内の後続の命令を実行する処理エンジンに送られる。いくつかの他の実施形態では、第１の命令のデスティネーションタイル指定子は軽視され、第１の命令の結果は代わりにチェーン内の後続の命令を実行する処理エンジンに送られる。いくつかの他の実施形態では、第１の命令のデスティネーションタイル指定子は使われず、第１の命令の結果は代わりにチェーン内の後続の命令を実行する処理エンジンに送られる。いくつかの他の実施形態では、第１の命令のデスティネーションタイル指定子は拒絶され、第１の命令の結果は代わりにチェーン内の後続の命令を実行する処理エンジンに送られる。
【０１６６】
いくつかの実施形態では、第１の命令の結果は複数の後続の命令に送られる。いくつかの実施形態では、第２の命令は、チェーン内の複数の先行命令の結果を受け取る。
【０１６７】
命令チェーンはそれらの長さに制限はなく、多くの命令が連鎖されてもよい。命令チェーンは、少なくとも（最適化された命令チェーンの実行を示すプロセスフロー図を示す）図２１Ａ〜図２３、（効率的な連鎖タイル演算を実行するための最適化疑似コードを示す）図２４Ａ、および（チェーン内の命令間の連係を指定するチェーン開始命令用の命令フォーマットを示す）図２５Ｂに関してさらに説明され図示される。
【０１６８】
命令チェーンを実行するときに複数の演算の間でデータの再使用を可能にすることによってプロセッサ効率を向上させるために、開示された実施形態は、第１の命令のデスティネーションタイル指定子を破棄し、最初に結果をメモリに書き戻さずに、代わりに第２の命令に直接第１の命令の結果を送ることを選ぶことによって効率を向上させる。そのような破棄は、チェーン内の複数の命令に対して実施することができるが、それに限定されない。
【０１６９】
少なくとも第１の命令の結果がストレージに書き戻されるのを第２の命令が待つ必要がないので、第１の命令のデスティネーションタイル指定子を無視することは性能を改善する。いくつかの実施形態では、命令チェーン内の命令は、破棄を実行するかどうかおよびどのように実行するかに関するヒントを実行回路に提供するチェーン制御フィールドを含む。いくつかの実施形態では、実行回路は、複数の命令間の依存関係を監視し、１つまたは複数のデスティネーションタイル指定子を破棄し、代わりに１つまたは複数の命令のうちの１つの結果を命令チェーン内の次の命令を実行する１つまたは複数のＰＥに送るかどうかおよびいつ送るかを判定する、バイナリトランスレータを含む。
【０１７０】
いくつかの実施形態では、実行回路は定期的な整合性チェックを実行して、その破棄によって引き起こされるあらゆる問題を特定する。いくつかの実施形態では、実行回路は、デスティネーションタイル指定子が破棄された命令の記録を保持し、その結果、ＳＩＭＤプロセッサは、今回は破棄されずにそれらの記録された命令をロールバックし再実行することができる。
【０１７１】
開示された実施形態は、実行コアの選択を１つのタイプに制限することによってＳＩＭＤ効率を向上させることを試みない。むしろ、いくつかの実施形態は、非対称処理エンジン（ＰＥ）の混合を利用し、いくつかは他よりも限定された機能を有し、少ない電力を利用する。いくつかの実施形態では、非対称処理エンジンの中からの処理エンジンの選択とともにＳＩＭＤ実行経路は、実行時に動的に行われる。
【０１７２】
いくつかの開示された実施形態は、非対称処理エンジン（ＰＥ）の配列のパラダイムを利用する。いくつかの実施形態では、非対称配列内の各ＰＥは、限られた数の演算しか実行できない算術論理装置（ＡＬＵ）である。たとえば、非対称ＰＥの配列は、いくつかのシフト専用のＰＥ、いくつかの加算および減算専用のＰＥ、いくつかのフォーマット変換専用のＰＥ、いくつかの除算専用のＰＥ、いくつかの乗算専用のＰＥ、いくつかの単項演算専用のＰＥ、いくつかの論理演算専用のＰＥなどを含んでもよいが、それらに限定されない。いくつかの実施形態では、少なくともいくつかのＰＥは、２つ以上のタイプの演算を実行することが可能である。動作時は、実行回路は、ＳＩＭＤ命令チェーン内の１組の命令を実行するように、１組のＰＥを動的に選択し構成する。要求される性能を提供される性能に一致させて、異なる演算を実行するために異なるＰＥを選択することができ、それにより、電力効率の高い実装形態がもたらされる。この非対称配列の１つの利点は、これによって、必要とされる処理能力と消費される電力との間の緊密な整合が可能になることであり、すなわち、必要とされるだけの処理能力が使用されることである。いくつかの実施形態では、１組のＰＥの１回だけのセットアップおよび構成を実行して、タイル演算チェーンの異なる部分を実行し、その構成が残りの行列要素に再使用されることを可能にすることによって、電力が節約される。本明細書で説明されたように、「タイル」は行列と呼ばれる場合があり、行列の特別なケースである。
【０１７３】
いくつかの実施形態では、ＰＥの非対称配列は、ＳＩＭＤ処理経路内の複数のＰＥの間でデータを送るように動的に構成可能な相互接続を含む。動作時は、実行回路は、ＳＩＭＤ命令チェーンを実行するように１組のＰＥを選択し、それらの間でデータを転送するようにネットワークを動的にセットアップすることができる。この動的に構成可能な相互接続の１つの利点は、必ずしもすべてのＰＥを他のすべてのＰＥに接続するためのコストおよびダイ面積を負担することなく、幅広い１組のＰＥの間の接続を可能にすることである。
【０１７４】
このＰＥの非対称配列および動的に構成可能な相互接続の１つの利点は、中間結果がレジスタファイルに書き戻されるか、またはバイパスネットワークに出力される必要がなく、むしろ、１つのＰＥの結果をＳＩＭＤ処理チェーン内の次のＰＥに送ることができることである。したがって、このハードウェアは、より高性能でよりエネルギー効率の高いＳＩＭＤプロセッサをもたらすことができる。
【０１７５】
［例示的な実行］
図２１Ａは、最適化可能なタイル命令チェーンの例示的な実行を示すブロックフロー図である。図示されたように、最適化されていない命令チェーン２１００は、３つのソースタイルの関数として結果タイルを設定する演算の算術シーケンス、すなわち、結果＝（（Ａ＋Ｂ）＊３）−Ｃ）を指定する。そのような命令チェーンはＮ回実行される可能性があり、毎回、Ｍ行Ｋ列の要素を有するタイルの各要素に記憶される結果を生成する。しかしながら、簡単にするために、かつ最適化を説明するために、命令のただ１つのインスタンス、すなわち１つのタイルを生成するループの１回の反復のみが示されている。
【０１７６】
本明細書で開示された実施形態に従って命令チェーンを最適化するために、複数の命令のデスティネーションタイル指定子のうちの１つまたは複数は破棄され、その命令の結果が代わりにチェーン内の後続の命令に送られる。いくつかの実施形態では、実行回路は、それらのデスティネーションタイル指定子を破棄した命令の記録を保持し、破棄から生じた問題が検出された場合、記録された複数の命令のうちの１つまたは複数を再実行することによって回復するようにロールバックする。
【０１７７】
いくつかの実施形態では、実行回路は、それらのデスティネーションタイル指定子を破棄した命令の記録を保持し、その結果、実行回路は、破棄することなく再び命令をロールバックし再実行することができる。いくつかの実施形態では、実行回路はさらに、破棄の前の機械状態を保存し、その後、機械状態整合性チェックを実行して、破棄によって生じたあらゆる不整合を検出する。いくつかの実施形態では、実行回路は、命令のデスティネーションタイル指定子をさらに破棄することで、そのタイルの構成内にダーティビットを設定し、ダーティタイルが後続の命令によって読み取られた場合に不整合を検出する。いくつかの実施形態における実行回路は、そのような不整合が検出された場合、故障を発生させ、いくつかの実施形態では、実行回路は１つまたは複数の命令をロールバックし再実行する。
【０１７８】
動作時は、図示されたように、命令チェーン２１００は、各々がデスティネーションタイル指定子およびソースタイル指定子を有する一連の命令（たとえば、マイクロ演算）またはマクロ命令としてストレージからフェッチされる。通常、命令チェーン内の命令は、スクラッチパッド２１０２に記憶された中間タイルをソースおよびデスティネーションとして指定する。いくつかの実施形態では、命令チェーン内の命令は、レジスタファイル内、キャッシュ内、または他の何らかのメモリ構造内のソースタイルおよび／またはデスティネーションタイルを指定する。いくつかの実施形態では、スクラッチパッドは、実行回路に比較的近くに配置され、中間データ結果を記憶する、１つまたは複数のレジスタまたはラッチ、さらにはキャッシュメモリおよび他のスタティックメモリを含むメモリである。ある時点に、スクラッチパッド内のタイルはメモリにコミットされる。
【０１７９】
行列（タイル）Ａ、Ｂ、およびＣがすでにスクラッチパッド２１０２にロードされていると仮定すると、行列（タイル）Ａ、Ｂ、およびＣは、それぞれ、タイルＡ２１０４、タイルＢ２１０６、およびタイルＣ２１０８においてスクラッチパッド２１０２から取り出される。
【０１８０】
加算２１１０において、タイルＡとタイルＢが加算され、タイルＥ２１１２にある結果がスクラッチパッド２１０２内（またはレジスタファイル内、キャッシュ内、もしくは他の何らかのメモリ構造内）のタイルＥに書き戻される。タイルＥ２１１２は、それが潜在的な最適化点であることを強調するために破線の境界で示されている。いくつかの実施形態では、本明細書で開示され、図２１Ｂに関して図示および説明されるように、実行回路は、加算２１１０で実行された命令のデスティネーションタイル指定子、タイルＥを破棄し、代わりに２１１２での演算結果を、命令チェーン内の次の演算である乗算２１１４で実行されるように送る。
【０１８１】
乗算２１１４において、加算２１１０の結果すなわちタイルＥは、加算２１１０の指定されたデスティネーションタイルが破棄されたかどうかに応じて、処理エンジンに送られて、スクラッチパッド２１０２からブロードキャストされた値（たとえば、３）２１２０と乗算され、タイルＦ２１１６にある結果は、スクラッチパッド２１０２内のタイルＦに書き戻される。タイルＦ２１１６は、それが潜在的な最適化点であることを強調するために破線の境界で示されている。いくつかの実施形態では、本明細書で開示され、図２１Ｂに関して図示および説明されるように、実行回路は、乗算２１１４のデスティネーションタイル指定子であるタイルＦを破棄し、代わりに乗算２１１４の結果を命令チェーン内の次の命令である減算２１１８に送る。
【０１８２】
演算減算２１１８において、乗算２１１４の結果すなわちタイルＦは、乗算２１１４の指定されたデスティネーションタイルが破棄されたかどうかに応じて、そこからタイルＣ２１０８が減算されるべきソースとして処理エンジンに転送される。演算減算２１１８はチェーン内の最後の命令を表すので、最適化は利用可能ではなく、演算減算２１１８の結果であるタイルＤ２１２２は、２１２４においてスクラッチパッド２１０２内（またはレジスタファイル内、キャッシュ内、もしくは他の何らかのメモリ構造内）に戻して記憶される。
【０１８３】
図２１Ｂは、最適化されたタイル命令チェーンの例示的な実行を示すブロックフロー図である。図示されたように、図２１Ａの命令チェーン２１００のような最適化された命令チェーン２１５０は、３つのソースタイルの関数として結果タイルを設定する演算の算術シーケンス、すなわち、結果＝（（Ａ＋Ｂ）＊３）−Ｃ）を指定する。そのような命令チェーンはＮ回実行される可能性があり、毎回、Ｍ行Ｋ列の要素を有するタイルの各要素に記憶される結果を生成する。しかしながら、簡単にするために、かつ最適化を説明するために、命令のただ１つのインスタンス、すなわち１つのタイルを生成するループの１回の反復のみが示されている。
【０１８４】
いくつかの実施形態に従って命令チェーンを最適化するために、１つまたは複数の命令のデスティネーションタイル指定子は破棄され、それらの命令の結果が代わりにチェーン内の後続の命令に送られる。
【０１８５】
動作時は、図示されたように、命令チェーン２１５０は、各々が算術オペコードを指定し、デスティネーションタイル指定子および少なくとも１つのソースタイル指定子を有する一連の命令（たとえば、マイクロ演算）またはマクロ命令としてストレージからフェッチされる。通常、命令チェーン内の命令は、スクラッチパッド２１５２に記憶された中間タイルをソースタイルおよびデスティネーションタイルとして指定する。ある時点に、スクラッチパッド内のタイルはメモリにコミットされる。
【０１８６】
行列（タイル）Ａ、Ｂ、およびＣがすでにスクラッチパッド２１５２にロードされていると仮定すると、行列（タイル）Ａ、Ｂ、およびＣは、それぞれ、２１５４、２１５６、および２１５８においてスクラッチパッド２１５２から取り出される。
【０１８７】
２１６０において、タイルＡおよびタイルＢは、ソースタイルとしてタイルＡおよびタイルＢを指定し、デスティネーションタイルとしてタイルＥを指定する命令に応答して加算される。動作時は、ＳＩＭＤプロセッサは、同時にかつ並行して複数のベクトル要素に対して加算を実行する。実行回路は、２１６０においてデスティネーションタイル指定子を破棄し、代わりに加算の結果をチェーン内の次の命令である乗算２１６４に送ることによってフローを最適化する。動作時は、プロセッサは、複数のベクトル要素に対して同時にかつ並行して乗算２１６４を実行する。
【０１８８】
［破棄するかどうかおよびいつ破棄するかの判定］
本明細書で開示された実施形態によれば、演算加算２１６０の結果を演算乗算２１６４に再送することによってフローを最適化するように実行回路をトリガすることができる複数の方法がある。
【０１８９】
第１に、いくつかの実施形態では、実行回路は、一連の命令をバッファリングし、それらを実行時に動的に分析して命令間のデータ依存性を検出する、バイナリトランスレータを含む。バイナリトランスレータは、たとえば、実行された演算の結果がチェーン内の次の命令によって一度だけ使用され、二度と使用されないことを予測することができる。そのような予測に基づいて、実行回路は、スクラッチパッド内の指定されたデスティネーションタイルを破棄し、代わりにチェーン内の次の命令を実行する次の処理エンジンに結果を送ることを選ぶことができる。
【０１９０】
その上、いくつかの開示された実施形態では、加算２１６０命令はＣＨＡＩＮ＿ＴＩＬＥ＿ＯＰなどのチェーンフレンドリ命令フォーマットに従ってフォーマットされ、ＣＨＡＩＮ＿ＴＩＬＥ＿ＯＰは、図２５Ａに関して下記でさらに図示および説明されるように、算術演算、デスティネーションタイル、最大３つソースタイル、おそらく即値、およびチェーン制御フィールドを指定する。ＣＨＡＩＮ＿ＴＩＬＥ＿ＯＰ命令のフォーマットおよび開示された実施形態の他の命令フォーマットは、図２５Ｃ〜図２５Ｄおよび図２６Ａ〜図２６Ｄに関してさらに図示および説明される。
【０１９１】
チェーンが存在するかどうかを判定し、それを最適化するさらなる方法が、限定されることなく開示される。いくつかの実施形態では、ＣＨＡＩＮ＿ＴＩＬＥ＿ＯＰのチェーン制御フィールドは、開示された実施形態に従って最適化されるべきチェーンの一部または命令であるものとして、第１の命令および１つまたは複数の後続の命令を識別するヘッダを含む。いくつかの実施形態では、チェーン制御フィールドは、チェーン位置ヒントが、たとえばチェーン内の各命令をマークするチェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒントのうちの１つであることを示す。いくつかの実施形態では、チェーン内の各命令チェーン制御フィールドは、チェーン内の命令の相対位置を示すインデックスを指定する。
【０１９２】
さらに、いくつかの開示された実施形態では、チェーン開始命令は、図２５Ｂに関してさらに説明および図示されるように、実行回路に命令チェーンが続くことを認識させ、チェーンのいくつかの詳細を提供する。
【０１９３】
開示された実施形態によれば、実行回路は、最適化する命令チェーンが存在する判定に応答して、命令チェーンを実行するように処理エンジンのＳＩＭＤ経路を動的に選択および構成し、チェーン内の最後の命令以外のすべての指定されたデスティネーションタイルを破棄し、最後の命令以外のすべての結果をチェーン内の次の命令を実行する次のＰＥに送る。したがって、図示されたように、実行回路はチェーンの存在を判定し、加算２１６０の結果を指定されたデスティネーションタイルであるタイルＥから乗算２１６４を実行するＰＥに再送する。同様に、実行回路は、乗算２１６４の結果を指定されたデスティネーションタイルＦからチェーン内の次の命令である減算２１６８を実行するＰＥに再送することによって、チェーンの処理を継続する。動作時は、ＳＩＭＤプロセッサは、複数のタイル要素に対して加算２１６０、乗算２１６４、および減算２１６８を同時にかつ並行して実行する。減算２１６８の後にチェーン内にさらなる命令がない場合、実行回路は、２１７４においてスクラッチパッド２１５２に戻して記憶されるように、減算２１６８の結果を指定されたデスティネーションタイルＤ２１７２に送る。
【０１９４】
［処理エンジン（ＰＥ）の選択およびＳＩＭＤ経路の構成］
連鎖タイル演算を実施するために、開示された実施形態は、連鎖数学演算を実行するように処理エンジンを選択する。いくつかの実施形態では、ＳＩＭＤプロセッサは、処理エンジン（ＰＥ）の非対称配列を含む。そのような配列は、様々な異なるタイプの処理エンジンを有し、いくつかは他の処理エンジンよりも高い処理能力を有するが、より多くの電力またはダイ面積を消費する。
【０１９５】
いくつかの実施形態では、ＳＩＭＤプロセッサは、実行されている数学演算に適合する処理エンジンを有する。たとえば、いくつかの処理エンジンは、いくつかの非限定的な例を挙げると、インクリメント、デクリメント、平方根、否定などの単項演算、またはサイン、コサイン、およびタンジェントなどの三角関数演算専用であってもよい。いくつかのＰＥは、いくつかの非限定的な例を挙げると、数学演算（たとえば、加算、減算、除算、乗算、モジュラなど）、および論理演算（たとえば、ＡＮＤ、ＯＲ、ＮＡＮＤ、ＮＯＲ、ＸＯＲ、ＸＮＯＲ、ＣＭＰなど）などの二項演算専用であってもよい。いくつかの実施形態では、ＳＩＭＤプロセッサは、連鎖タイル演算を実施する際に使用するための対称処理エンジンのプールを有する。
【０１９６】
動作時は、いくつかの実施形態によれば、実行回路は、連鎖タイル演算を実行するようにＰＥを選択し構成する。たとえば、図２１Ｂの実施形態では、実行回路は、複数のタイル要素を並列に処理するようにＰＥを選択する。いくつかの実施形態における実行回路は、処理能力をタイル処理要件に一致させて、最小数のＰＥを選択し構成しようと試みる。いくつかの実施形態では、タイルの複数の要素上で並列に演算するように、異なるＰＥまたは１組のＰＥが選択される。いくつかの実施形態では、命令チェーンの演算を実行するようにＰＥを選択するとき、実行回路は、演算のＳＩＭＤチェーンを実行する際に経路設定レイテンシを最小化するために、プロセッサのダイ上で互いに近接して配置されるＰＥを選択する。いくつかの実施形態では、命令チェーンの演算を実行するようにＰＥを選択するとき、実行回路は、ダイの様々な領域にわたって均等に広がるＰＥを選択し、ダイ領域にわたって均等に電力の利用を均衡させ広げる。
【０１９７】
いくつかの開示された実施形態は、非対称処理エンジン（ＰＥ）の配列のパラダイムを利用する。いくつかの実施形態では、非対称配列内の各ＰＥは、限られた数の演算しか実行できない算術論理装置（ＡＬＵ）である。たとえば、非対称ＰＥの配列は、いくつかのシフト専用のＰＥ、いくつかの加算および減算専用のＰＥ、いくつかのフォーマット変換専用のＰＥ、いくつかの除算専用のＰＥ、いくつかの乗算専用のＰＥ、いくつかの単項演算専用のＰＥ、いくつかの論理演算専用のＰＥなどを含んでもよいが、それらに限定されない。いくつかの実施形態では、少なくともいくつかのＰＥは、２つ以上のタイプの演算を実行することが可能である。動作時は、実行回路は、ＳＩＭＤ命令チェーン内の１組の命令を実行するように、１組のＰＥを動的に選択し構成する。異なるＰＥが異なる演算を実行するために選択され、提供される性能に必要とされる性能に一致させることができ、それにより、電力効率の高い実装形態がもたらされる。この非対称配列の１つの利点は、これによって、必要とされる処理能力と消費される電力との間の緊密な整合が可能となることであり、すなわち、必要とされるだけの処理能力が使用されることである。いくつかの実施形態では、１組のＰＥの１回だけのセットアップおよび構成を実行して、タイル演算チェーンの異なる部分を実行し、その構成が残りの行列要素に再使用されることを可能にすることによって、電力が節約される。本明細書で説明されたように、「タイル」は行列と呼ばれる場合があり、行列の特別なケースである。
【０１９８】
［例示的なプロセッサ実行フロー］
図２２は、一実施形態による、連鎖タイル命令に応答するプロセッサの実行フローを示すブロックフロー図である。２２０１において、プロセッサが、フェッチ回路を使用して、各々がそれぞれのソースタイルおよびデスティネーションタイルを指定するソースタイル指定子およびデスティネーションタイル指定子を有する複数の命令をフェッチする。２２０３において、プロセッサが、フェッチされた複数の命令をメモリにバッファリングする。動作２２０３は、フェッチされた複数の命令が他の場所にバッファリングされるか、または全くバッファリングされない限り、その破線の境界で示されたようにオプションである。２２０５において、プロセッサが、復号回路を使用して、フェッチされた複数の命令を復号する。２２０７において、プロセッサが、復号された複数の命令の実行をスケジュールする。動作２２０７は、それが異なる時間に行われるか、または全く行われなくてもよい限り、その破線の境界で示されたようにオプションである。２２０９において、プロセッサが、実行回路を使用して、以下のように復号された複数の命令を実行する。
【０１９９】
２２１１において、プロセッサの実行回路が、命令チェーンに属する復号された第１および第２の命令を識別する。「破棄するかどうかおよびいつ破棄するかの判定」と題するセクションは、プロセッサが命令チェーンに属する復号された第１および第２の命令を識別する様々な方法を説明する。１つの実施形態は、たとえば、図２５Ｂに関してさらに説明および図示されるように、２２０１において複数の命令をフェッチする前にプロセッサがチェーン開始命令をフェッチすることを必要とする。チェーン開始命令は、命令チェーンが続き、そのチェーンに関するいくつかの詳細を提供することを実行回路に通知する。
【０２００】
２２１３において、プロセッサの実行回路が、復号された第１および第２の命令を実行する第１および第２の処理エンジン（ＰＥ）を有するＳＩＭＤ経路を動的に選択し構成する。２２１５において、プロセッサの実行回路が、第１のＰＥから第２のＰＥへのネットワーク経路を動的に構成する。動作２２１５は、ネットワーク経路がすでに構成されていてもよい限り、その破線の境界で示されたようにオプションである。
【０２０１】
２２１７において、例示された実施形態によれば、プロセッサの実行回路が、復号された第１の命令のデスティネーションタイル指定子を破棄し、代わりに、復号された第２の命令を実行するために第２のＰＥによって使用されるように、復号された第１の命令の結果を第１のＰＥから第２のＰＥに送る。いくつかの他の実施形態では、第１の命令のデスティネーションタイル指定子は無視され、第１の命令の結果は代わりにチェーン内の後続の命令を実行する処理エンジンに送られる。いくつかの他の実施形態では、第１の命令のデスティネーションタイル指定子は矛盾し、第１の命令の結果は代わりにチェーン内の後続の命令を実行する処理エンジンに送られる。いくつかの他の実施形態では、第１の命令のデスティネーションタイル指定子は軽視され、第１の命令の結果は代わりにチェーン内の後続の命令を実行する処理エンジンに送られる。いくつかの他の実施形態では、第１の命令のデスティネーションタイル指定子は使われず、第１の命令の結果は代わりにチェーン内の後続の命令を実行する処理エンジンに送られる。いくつかの他の実施形態では、第１の命令のデスティネーションタイル指定子は拒絶され、第１の命令の結果は代わりにチェーン内の後続の命令を実行する処理エンジンに送られる。
【０２０２】
いくつかの実施形態では、実行回路は、それらのデスティネーションタイル指定子を破棄した命令の記録を保持し（図２２に示されず）、必要に応じて複数の命令の記録のうちの１つまたは複数をロールバックし再実行する。
【０２０３】
２２１９において、プロセッサが実行された命令の結果をコミットする。動作２２１９は、結果のライトバックが異なる時点で行われるか、または全く行われない限り、その破線の境界で示されたようにオプションである。
【０２０４】
図２３は、一実施形態による、単一命令複数データ（ＳＩＭＤ）プロセッサによる連鎖タイル命令の実行を示すブロックフロー図である。通常、フロー２３００は、少なくとも図１３、図１４、図２８Ａ〜図２８Ｂ、および図２９Ａ〜図２９Ｂに関して本明細書に詳述された実行回路などの実行回路によって実行される。
【０２０５】
２３０２において、プロセッサが、１組の命令がフェッチされるまで１つまたは複数の命令をフェッチし、復号し、バッファリングし、各命令はソースおよびデスティネーションの行列（タイル）を指定する。
【０２０６】
２３０４において、プロセッサがいくつかのエラー条件をテストし、そのいずれかが存在すると、２３０６において故障が発生する。図示されたように、２３０４においてテストされたエラー条件には、１）タイルがまだ構成されていないかどうか、２）デスティネーションおよび２つのソースのタイルが有効であるかどうか、３）２つのソースのいずれかがペアであるかどうか、ならびに４）様々な行数および列数のいずれかが範囲外にあることが含まれる。
【０２０７】
２３０４においてテストされた故障条件のどれも真でないとき、２３０８において、プロセッサは復号された第１および第２の命令が命令チェーンの一部であるかどうかを判定する。そうでない場合、プロセッサは２３０２に戻って、１組の命令がフェッチされるまで少なくとももう１つの命令をフェッチする。しかし、そうである場合、プロセッサは、２３１０において、復号された第１および第２の命令を実行する第１および第２の処理エンジン（ＰＥ）を含むＳＩＭＤ実行経路を動的に選択し構成する。２３１２において、プロセッサが、復号された第１の命令のデスティネーションタイル指定子を破棄し、代わりに、復号された第２の命令を実行するときに第２のＰＥによって使用されるように、復号された第１の命令の結果を第１のＰＥから第２のＰＥに送る。２３１４において、プロセッサが、チェーンが完了したかどうかを判定する。そうでない場合、プロセッサは２３０２に戻って、１組の命令がフェッチされるまで少なくとももう１つの命令をフェッチする。しかし、そうである場合、フロー２３００は終了する。
【０２０８】
［ｉｖ．例示的な疑似コード］
図２４Ａは、いくつかの実施形態による、プロセッサによって最適化されるべきＳＩＭＤコードループを示す例示的なネイティブコードである。図示されたように、ネイティブモード２４０２におけるＳＩＭＤループは、Ｍ×Ｎタイルのすべての要素に対して実行されるべき関数、すなわち、結果＝（（Ｂ＋Ｃ）＜＜２）＋ｋである。
【０２０９】
図２４Ｂは、最適化されていないタイル命令チェーンを示す疑似コードである。そのような命令チェーンは、Ｍ×Ｎ回、たとえば、Ｍ行Ｎ列の要素を有するタイルの要素ごとに１回実行される可能性がある。しかしながら、簡単にするために、かつ最適化を説明するために、命令のただ１つのインスタンス、すなわち各ループ要素に対して実行されるＳＩＭＤコードの１回の反復のみが示されている。コメントがアスタリスクを含むＳＩＭＤコードループ２４０４内の命令は、本明細書で開示され、また図２４Ｃに関して図示および説明された実施形態に従って、最適化向けの候補を表す。
【０２１０】
図２４Ｃは、いくつかの実施形態による、最適化されたタイル命令チェーンを実行するプロセッサ実行回路による実行フローを示す疑似コードである。図示されたように、疑似コード２４０６は図２４Ｂの最適化されていない疑似コードと同じであるが、アスタリスクでマークされた命令が取り除かれている。したがって、タイルＡにＢとＣの合計を記憶する代わりに、実行回路は、指定されたデスティネーションタイル（Ａ）を破棄し、代わりに命令を実行する処理エンジンに直接合計の結果を送る。
【０２１１】
図２４Ｂおよび図２４Ｃの疑似コードは、コメントと変数名が含まれているため自己文書化している。
【０２１２】
［ｉｉ．例示的な命令フォーマット］
図２５Ａは、いくつかの実施形態による、チェーンフレンドリ命令用の例示的なフォーマットを示すブロック図である。図示されたように、ＣＨＡＩＮ＿ＴＩＬＥ＿ＯＰ命令２５００は、オペコード２５０１、チェーン制御２５０２、デスティネーション２５０３、およびソース１（２５０４）を含むチェーンフレンドリ命令である。ソース２（２５０５）、ソース３（２５０６）、即値２５０７、ライトマスク２５０８、およびサイズ２５０９を含むいくつかのオプションのパラメータも示されている。
【０２１３】
オペコード２５０１は、タイルのすべての要素に対して実行されるべき算術タイル演算を指定する。指定された演算は、単項演算、二項演算（この場合、ソース２（２５０５）も指定されるべきである）、または三項演算（この場合、ソース２（２５０５）およびソース３（２５０６）が指定されるべきである）であってもよい。指定されるべき単項演算の例には、いくつかの非限定的な例を挙げると、インクリメント、デクリメント、平方根、否定、またはサイン、コサイン、およびタンジェントなどの三角関数演算が含まれる。指定されるべき二項演算の例には、いくつかの非限定的な例を挙げると、数学演算（たとえば、加算、減算、除算、乗算、モジュラスなど）、論理演算（たとえば、ＡＮＤ、ＯＲ、ＮＡＮＤ、ＮＯＲ、ＸＯＲ、ＸＮＯＲ、ＣＭＰなど）、交換、しきい値、および下限を含む、いくつかの例が含まれるが、それらに限定されない。
【０２１４】
いくつかの実施形態では、チェーン制御２５０２は、少なくとも図２１Ｂに関して図示および説明されたように、開示された実施形態に従って最適化されるべきチェーンの一部または命令として、第１の命令および１つまたは複数の後続の命令を識別するヘッダである。いくつかの実施形態では、チェーン制御フィールドは、チェーン位置ヒントが、たとえばチェーン内の各命令をマークするチェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒントのうちの１つであることを示す。いくつかの実施形態では、チェーン内の各命令チェーン制御フィールドは、チェーン内の命令の相対位置を示すインデックスを指定する。
【０２１５】
デスティネーション２５０３、ソース１（２５０４）、ソース２（２５０５）、およびソース３（２５０６）は、デスティネーションタイルおよびソースタイルを指定するタイル指定子である。デスティネーション２５０３は、いくつかの実施形態では、連鎖タイル命令のデスティネーションを識別するデスティネーションタイル指定子である。いくつかの実施形態では、デスティネーション２５０３は、命令の結果のための２つ以上のデスティネーションを指定するデスティネーションタイル指定子である。
【０２１６】
即値２５０７は、命令内の即値の指定を可能にするものである。即値２５０７は、即値をサポートしない汎用ベクトルフレンドリフォーマットの一実装形態には存在せず、即値を使用しない命令には存在しないという意味で、その破線の境界によって示されるようにオプションである。
【０２１７】
ライトマスク２５０８は、その内容がデータ要素位置ごとに、デスティネーションタイル内のそのデータ要素位置が演算の結果を反映するものであるかどうかを制御する、（その破線の境界によって示された）オプションフィールドである。一部の命令はマージングライトマスクをサポートし、他の命令はマージングライトマスクとゼロイングライトマスクの両方をサポートする。マージすると、ベクトルマスクは、デスティネーションタイル内の任意の１組の要素が任意の演算の実行中に更新から保護されることを可能にし、別の実施形態では、対応するマスクビットが０を有するデスティネーションタイルの各要素の古い値を保存する。対照的に、ベクトルマスクをゼロにすると、デスティネーション内の任意の１組の要素が任意の演算の実行中にゼロにされることが可能になる。ライトマスクが指定されていない場合、すべてのデスティネーション要素はマスクされていないものとして扱われる。
【０２１８】
サイズ２５０９は、処理されているタイルデータ要素のサイズを示す（その破線の境界によって示された）オプションフィールドである。サイズ２５０９は、別個の命令オペランドとして示されているが、アスタリスクは、いくつかの実施形態では、それがオペコード、プレフィックス、またはサフィックスである、各タイル要素のサイズ−それぞれ、１バイト、２バイト、４バイト、または８バイトに対応する、「Ｂ」、「Ｗ」、「Ｄ」、および「Ｑ」に含まれるべきことを示すために含まれる。いくつかの実施形態では、サイズ２５０９は、各タイル要素の精度レベル−それぞれ、半精度（２バイト）、単精度（４バイト）、倍精度（８バイト）、および４倍精度（１６バイト）−に対応するプレフィックスまたはサフィックス、「Ｈ」、「Ｓ」、「Ｄ」、「Ｑ」、および「Ｅ」などのオペコードに含まれる。
【０２１９】
図２５Ｂは、いくつかの実施形態による、チェーン開始命令を示すブロック図である。図示されたように、チェーン開始命令２５１０は、オペコード２５１１、チェーン長２５１２、それぞれターゲット１〜ターゲット８  ２５１３Ａ〜２５１３Ｈを含むチェーンターゲット２５１３、オプションの二次チェーンターゲット２５１４、およびオプションのチェーン演算２５１５を含む。動作時は、いくつかの実施形態によれば、プロセッサは、命令チェーンの１組の命令をフェッチする前にチェーン開始命令をフェッチする。チェーン開始命令は、命令チェーンが続くことをプロセッサに通知し、命令チェーンに関する何らかの情報を提供して、命令チェーンを実行するために処理エンジンのＳＩＭＤ経路のプロセッサの選択、構成、および経路設定を通知する。
【０２２０】
オペコード２５１１は、命令を実行するプロセッサに、その命令をチェーン開始命令として認識させ、命令の挙動をさらに指定するためにプレフィックスまたはサフィックスを含んでもよい。たとえば、オペコード２５１１は、命令がチェーンターゲット２５１３、二次チェーンターゲット２５１４、およびチェーン演算２５１５を指定するフィールドを含むことを指定するプレフィックスを含んでもよい。動作時は、プロセッサは、いくつかの実施形態によれば、チェーン開始命令２５１０に応答して、命令チェーンを実行するように処理エンジンのＳＩＭＤ経路を選択し構成する。
【０２２１】
いくつかの実施形態におけるチェーン長２５１２は、命令チェーン内の命令の数を指定する即値または定数である。いくつかの実施形態では、チェーン長２５１２は、その内容が命令チェーン内の命令の数を指定する汎用レジスタを指定する。
【０２２２】
チェーンターゲット２５１３は、命令チェーン内の少なくとも最初の命令のターゲットを指定。図示されたように、チェーンターゲット２５１３は、８の長さを有する命令チェーン内の最初の７つの命令の各々についてターゲット２５１３Ａ〜２５１３Ｈを指定するものである（チェーン内の８つの命令の結果は、次の命令に送られるのではなく、指定されたデスティネーションに書き込まれる）。いくつかの実施形態では、チェーンターゲット２５１３フィールドは、チェーン内の命令の各々のターゲットを指定するためにビットに論理的に区分化された即値である。いくつかの実施形態では、チェーンターゲット２５１３は、ターゲット情報を含む汎用レジスタを指定する。いくつかの実施形態では、チェーンターゲット２５１３は、ターゲット情報を含むベクトルレジスタを指定する。いくつかの実施形態では、チェーンターゲット２５１３は、ターゲット情報が記憶されたモデル固有レジスタ（「ＭＳＲ」）を指定する。他の実施形態では、チェーンターゲット２５１３は、ターゲット情報が記憶されたメモリ位置を指定する。
【０２２３】
いくつかの実施形態では、４バイトのチェーンターゲット２５１３フィールドは、命令チェーン内の最大８個の命令の各々に対するターゲットを指定するために４ビットニブルに区分化されてもよい。いくつかの実施形態では、各チェーンターゲット２５１３Ａ〜２５１３Ｈは、チェーン内のターゲット命令の絶対位置を指定する。図示されたように、（命令０の）ターゲット１  ２５１３Ａは命令１を指定し、ターゲット２  ２５１３Ｂは命令４を指定し、ターゲット３  ２５１３Ｃ、ターゲット４  ２５１３Ｄは命令４を指定し、ターゲット５  ２５１３Ｅは命令６を指定し、ターゲット６  ２５１３Ｆは命令６を指定し、ターゲット７  ２５１３Ｇは命令７を指定する。
【０２２４】
いくつかの実施形態では、ターゲット１〜７、２５１３Ａ〜Ｇの各々は、結果を送る先のターゲット命令の相対オフセットを指定する。ターゲット２５１３Ａ〜Ｇの各々は、命令とそのターゲットとの間の距離を指定する２ビットまたは３ビットの値であり得る。たとえば、図示されたように、ターゲット１  ２５１３Ａからターゲット７  ２５１３Ｇは、それぞれ１、３、２、１、２、１、１を指定する可能性がある。
【０２２５】
いくつかの実施形態では、二次チェーンターゲット２５１４はチェーンターゲット２５１３と同様にフォーマットされるが、命令チェーン内の各命令向けの第２のターゲットを指定する。チェーンターゲット２５１３と同様に、二次チェーンターゲット２５１４は、即値、汎用レジスタ、ベクトルレジスタ、モデル固有レジスタ、またはメモリ位置であり得る。二次チェーンターゲット２５１４は、その破線の境界によって示されるようにオプションである。
【０２２６】
いくつかの実施形態では、チェーン開始命令２５１０は、命令チェーンの各々によって実行されるべき演算を指定するチェーン演算２５１５を含む。動作時は、プロセッサは、チェーン演算２５１５フィールドを使用して、ＳＩＭＤ実行経路に沿った処理エンジンのその選択、構成、および経路設定を通知する。
【０２２７】
図２５Ｃ〜図２５Ｄは、いくつかの実施形態による、汎用ベクトルフレンドリ命令フォーマットおよびその命令テンプレートを示すブロック図である。ＣＨＡＩＮ＿ＴＩＬＥ＿ＯＰ命令用のフォーマットの一実施形態はＣＨＡＩＮ＿ＴＩＬＥ＿ＯＰ（ＯＰ，ｔｄｅｓｔ，ｔｓｒｃ１，ｔｓｒｃ２）であり、ＯＰは実行されるべき算術演算を指定し、ｔｓｒｃ１およびｔｓｒｃ２は加算されるべきソースを指定する。いくつかの実施形態では、ｔｄｅｓｔフィールドは（図２５Ｃ〜図２５Ｄの２５４６などの）Ｒ／Ｍ値であり、ｔｓｒｃ１フィールドは、図２５Ｃ〜図２５Ｄのレジスタインデックスフィールドである。いくつかの実施形態では、ＯＰオペコードは、第１および第２の識別されたソースの各々が符号付きか符号なしかを示す、［Ｕ，Ｓ］［Ｕ，Ｓ］プレフィックスまたはサフィックスなどのインジケータを含む。
【０２２８】
いくつかの実施形態では、命令の符号化は、メモリ内の複数のインデックス付きデスティネーション位置を間接的に識別する、スケールインデックスベース（ＳＩＢ）タイプのメモリアドレス指定オペランドを含む。１つの実施形態では、ＳＩＢタイプのメモリオペランドは、ベースアドレスレジスタを識別する符号化を含んでもよい。ベースアドレスレジスタの内容は、メモリ内の特定のデスティネーション位置のアドレスがそこから計算されるメモリ内のベースアドレスを表すことができる。たとえば、ベースアドレスは、拡張ベクトル命令のための潜在的なデスティネーション位置のブロック内の最初の位置のアドレスであってもよい。１つの実施形態では、ＳＩＢタイプのメモリオペランドは、インデックスレジスタを識別する符号化を含んでもよい。インデックスレジスタの各要素は、ベースアドレスから、潜在的なデスティネーション位置のブロック内のそれぞれのデスティネーション位置のアドレスを計算するために使用可能なインデックスまたはオフセットの値を指定することができる。１つの実施形態では、ＳＩＢタイプのメモリオペランドは、それぞれのデスティネーションアドレスを計算するときに各インデックス値に適用されるべきスケーリングファクタを指定する符号化を含んでもよい。たとえば、４のスケーリングファクタ値がＳＩＢタイプのメモリオペランド内で符号化される場合、インデックスレジスタの要素から取得された各インデックス値は４を乗算され、次いで、デスティネーションアドレスを計算するためにベースアドレスに加算されてもよい。
【０２２９】
１つの実施形態では、形式ｖｍ３２｛ｘ，ｙ，ｚ｝のＳＩＢタイプのメモリオペランドは、ＳＩＢタイプのメモリアドレス指定を使用して指定されたメモリオペランドのベクトル配列を識別することができる。この例では、メモリアドレスの配列は、共通のベースレジスタ、一定のスケーリングファクタ、および各々が３２ビットのインデックス値である個々の要素を含むベクタインデックスレジスタを使用して指定される。ベクトルインデックスレジスタは、１２８ビット（たとえば、ＸＭＭ）レジスタ（ｖｍ３２ｘ）、２５６ビット（たとえば、ＹＭＭ）レジスタ（ｖｍ３２ｙ）、または５１２ビット（たとえば、ＺＭＭ）レジスタ（ｖｍ３２ｚ）であってもよい。別の実施形態では、形式ｖｍ６４｛ｘ，ｙ，ｚ｝のＳＩＢタイプのメモリオペランドは、ＳＩＢタイプのメモリアドレス指定を使用して指定されたメモリオペランドのベクトル配列を識別することができる。この例では、メモリアドレスの配列は、共通のベースレジスタ、一定のスケーリングファクタ、および各々が６４ビットのインデックス値である個々の要素を含むベクタインデックスレジスタを使用して指定される。ベクトルインデックスレジスタは、１２８ビット（たとえば、ＸＭＭ）レジスタ（ｖｍ６４ｘ）、２５６ビット（たとえば、ＹＭＭ）レジスタ（ｖｍ６４ｙ）、または５１２ビット（たとえば、ＺＭＭ）レジスタ（ｖｍ６４ｚ）であってもよい。
【０２３０】
［Ｖ．詳細な例示的システム、プロセッサ、およびエミュレーション］
上述された命令を実行するハードウェア、ソフトウェアなどの例が本明細書で詳述される。たとえば、下記で説明されるものは、フェッチ、復号、スケジュール、実行、リタイアなどの様々なパイプライン段階を含む命令実行の態様を詳述する。
【０２３１】
［命令セット］
命令セットは１つまたは複数の命令フォーマットを含んでもよい。所与の命令フォーマットは、とりわけ、実行されるべき演算（たとえば、オペコード）およびその演算が実行されるべきオペランドを指定する様々なフィールド（たとえば、ビットの数、ビットの位置）、ならびに／または他のデータフィールド（たとえば、マスク）を定義することができる。いくつかの命令フォーマットは、命令テンプレート（またはサブフォーマット）の定義によってさらに分類される。たとえば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義され（含まれるフィールドは通常同じ順序であるが、含まれるフィールドが少ないため少なくともいくつかは異なるビット位置を有する）、かつ／または所与のフィールドが異なって解釈されるように定義されてもよい。したがって、ＩＳＡの各命令は、所与の命令フォーマット（および定義されている場合その命令フォーマットの命令テンプレートのうちの所与の１つ）を使用して表現され、演算およびオペランドを指定するためのフィールドを含む。たとえば、例示的なＡＤＤ命令は、特定のオペコード、ならびにそのオペコードを指定するオペコードフィールドおよびオペランド（ソース１／デスティネーションおよびソース２）を選択するオペランドフィールドを含む命令フォーマットを有し、命令ストリーム内でこのＡＤＤ命令が出現すると、特定のオペランドを選択するオペランドフィールド内に特定の内容が含まれる。高度ベクトル拡張（ＡＶＸ）（ＡＶＸ１およびＡＶＸ２）と呼ばれ、ベクトル拡張（ＶＥＸ）コーディング方式を使用するＳＩＭＤ拡張機能のセットがリリースおよび／または公開されている（たとえば、Ｉｎｔｅｌ（登録商標）６４およびＩＡ−３２アーキテクチャ開発者マニュアル、２０１４年９月を参照されたく、インテル（登録商標）高度ベクトル拡張プログラミングリファレンス、２０１４年１０月を参照されたい）。
【０２３２】
［例示的な命令フォーマット］
本明細書で説明された命令の実施形態は、異なるフォーマットで具現化されてもよい。さらに、例示的なシステム、アーキテクチャ、およびパイプラインが下記で詳述される。命令の実施形態は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行されてもよいが、詳述されたものに限定されない。
【０２３３】
［汎用ベクトルフレンドリ命令フォーマット］
ベクトルフレンドリ命令フォーマットは、ベクトル命令に適した命令フォーマットである（たとえば、ベクトル演算に固有のいくつかのフィールドが存在する）。ベクトル演算とスカラ演算の両方がベクトルフレンドリ命令フォーマットによってサポートされる実施形態が説明されているが、代替の実施形態は、ベクトルフレンドリ命令フォーマットのベクトル演算のみを使用する。
【０２３４】
図２５Ｃ〜図２５Ｄは、本発明の実施形態による、汎用ベクトルフレンドリ命令フォーマットおよびその命令テンプレートを示すブロック図である。図２５Ｃは、本発明の実施形態による汎用ベクトルフレンドリ命令フォーマットおよびそのクラスＡ命令テンプレートを示すブロック図であり、図２５Ｄは、本発明の実施形態による汎用ベクトルフレンドリ命令フォーマットおよびそのクラスＢ命令テンプレートを示すブロック図である。具体的には、クラスＡおよびクラスＢの命令テンプレート用の汎用ベクトルフレンドリ命令フォーマット２５１６が定義され、その両方は非メモリアクセス２５１９命令テンプレートおよびメモリアクセス２５２０命令テンプレートを含まない。ベクトルフレンドリ命令フォーマットの文脈における汎用という用語は、いかなる特定の命令セットにも結び付けられていない命令フォーマットを指す。
【０２３５】
ベクトルフレンドリ命令フォーマットが以下の、３２ビット（４バイト）または６４ビット（８バイト）のデータ要素幅（またはサイズ）を有する６４バイトのベクトルオペランド長（またはサイズ）（したがって、６４バイトのベクトルは、１６個のダブルワードサイズの要素、または代替として、８個のクワッドワードサイズの要素のいずれかで構成される）、１６ビット（２バイト）または８ビット（１バイト）のデータ要素幅（またはサイズ）を有する６４バイトのベクトルオペランド長（またはサイズ）、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、または８ビット（１バイト）のデータ要素幅（またはサイズ）を有する３２バイトのベクトルオペランド長（またはサイズ）、および３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、または８ビット（１バイト）のデータ要素幅（またはサイズ）を有する１６バイトのベクトルオペランド長（またはサイズ）をサポートする本発明の実施形態が説明されるが、代替の実施形態は、より多い、より少ない、または異なるデータ要素幅（たとえば、１２８ビット（１６バイト）のデータ要素幅）を有するより多い、より少ない、かつ／または異なるベクトルオペランドサイズ（たとえば、２５６バイトのベクトルオペランド）をサポートすることができる。
【０２３６】
図２５ＣのクラスＡ命令テンプレートは以下を含む。１）非メモリアクセス２５１９命令テンプレート内に、非メモリアクセス、完全丸め制御タイプ演算２５１７命令テンプレート、および非メモリアクセス、データ変換タイプ演算２５１８命令テンプレートが示され、２）メモリアクセス２５２０命令テンプレート内に、メモリアクセス、一時的２５２５命令テンプレートおよびメモリアクセス、非一時的２５３０命令テンプレートが示されている。図２５ＤのクラスＢ命令テンプレートは以下を含む。１）非メモリアクセス２５１９命令テンプレート内に、非メモリアクセス、ライトマスク制御、部分丸め制御タイプ演算２５２２命令テンプレート、および非メモリアクセス、ライトマスク制御、ｖｓｉｚｅタイプ演算２５２３命令テンプレートが示され、２）メモリアクセス２５２０命令テンプレート内に、メモリアクセス、ライトマスク制御２５２７命令テンプレートが示されている。
【０２３７】
汎用ベクトルフレンドリ命令フォーマット２５１６は、図２５Ｃ〜図２５Ｄに示された順序で下記に列挙された以下のフィールドを含む。
【０２３８】
フォーマットフィールド２５４０−このフィールド内の特定の値（命令フォーマット識別子値）は、ベクトルフレンドリ命令フォーマット、したがって命令ストリーム内のベクトルフレンドリ命令フォーマット内の命令の出現を一意に識別する。そのため、このフィールドは、汎用ベクトルフレンドリ命令フォーマットのみを有する命令セットに必要ではないという意味で、オプションである。
【０２３９】
基本演算フィールド２５４２−その内容は異なる基本演算を識別する。
【０２４０】
レジスタインデックスフィールド２５４４−その内容は、直接またはアドレス生成を介して、ソースオペランドおよびデスティネーションオペランドの位置を、それらがレジスタ内またはメモリ内にあることを指定する。これらは、Ｐ×Ｑ（たとえば、３２×５１２、１６×１２８、３２×１０２４、６４×１０２４）のレジスタファイルからＮ個のレジスタを選択するのに十分な数のビットを含む。１つの実施形態ではＮは最大３つのソースレジスタおよび１つのデスティネーションレジスタであってもよいが、代替の実施形態は、より多いまたはより少ないソースレジスタおよびデスティネーションレジスタをサポートすることができる（たとえば、これらのソースのうちの１つがデスティネーションとしても機能する最大２つのソースをサポートすることができ、これらのソースのうちの１つがデスティネーションとしても機能する最大３つのソースをサポートすることができ、最大２つのソースおよび１つのデスティネーションをサポートすることができる）。
【０２４１】
修飾子フィールド２５４６−その内容は、メモリアクセスを指定する汎用ベクトル命令フォーマットの命令の出現を、メモリアクセスを指定しない命令と区別する、すなわち、非メモリアクセス２５１９命令テンプレートとメモリアクセス２５２０命令テンプレートとを区別する。メモリアクセス演算は、（場合によっては、レジスタ内の値を使用してソースアドレスおよび／またはデスティネーションアドレスを指定する）メモリ階層に対して読み取りおよび／または書き込みを行い、非メモリアクセス演算は行わない（たとえば、ソースおよびデスティネーションはレジスタである）。１つの実施形態では、このフィールドはまた、メモリアドレス計算を実行する３つの異なる方法の中から選択するが、代替の実施形態は、メモリアドレス計算を実行するより多い、より少ない、または異なる方法をサポートすることができる。
【０２４２】
拡張演算フィールド２５５０−その内容は、基本演算に加えて、様々な異なる演算のうちのどの演算が実行されるべきかを識別する。このフィールドはコンテキスト固有である。本発明の１つの実施形態では、このフィールドは、クラスフィールド２５６８、アルファフィールド２５５２、およびベータフィールド２５５４に分割される。拡張演算フィールド２５５０は、２つ、３つ、または４つの命令ではなく、単一の命令で共通の演算グループが実行されることを可能にする。
【０２４３】
スケールフィールド２５６０−その内容は、メモリアドレス生成用の（たとえば、２スケール＊インデックス＋ベースを使用するアドレス生成用の）インデックスフィールドの内容のスケーリングを可能にする。
【０２４４】
変位フィールド２５６２Ａ−その内容は、メモリアドレス生成の一部として（たとえば、２スケール＊インデックス＋ベース＋変位を使用するアドレス生成用に）使用される。
【０２４５】
変位係数フィールド２５６２Ｂ（変位係数フィールド２５６２Ｂの真上の変位フィールド２５６２Ａの並置は、一方または他方が使用されることを示すことに留意されたい）−その内容は、アドレス生成の一部として使用され、それは、メモリアクセスのサイズ（Ｎ）によってスケーリングされるべき変位係数を指定する−Ｎは、（たとえば、２スケール＊インデックス＋ベース＋スケーリングされた変位を使用するアドレス生成用の）メモリアクセスにおけるバイト数である。冗長な下位ビットは無視されるため、実効アドレスの計算に使用されるべき最終変位を生成するために、変位係数フィールドの内容はメモリオペランドの合計サイズ（Ｎ）と乗算される。Ｎの値は、（本明細書において後述される）フルオペコードフィールド２５７４およびデータ操作フィールド２５５４Ｃに基づいて、実行時にプロセッサハードウェアによって決定される。変位フィールド２５６２Ａおよび変位係数フィールド２５６２Ｂは、それらが非メモリアクセス２５１９命令テンプレートに使用されないという意味でオプションであり、かつ／または異なる実施形態は、２つのうちの１つのみを実装するか、または２つとも実装しなくてもよい。
【０２４６】
データ要素幅フィールド２５６４−その内容は、（いくつかの実施形態ではすべての命令に、他の実施形態ではいくつかの命令のみに）複数のデータ要素幅のうちのどのデータ要素幅が使用されるべきかを識別する。このフィールドは、１つのデータ要素幅のみがサポートされている場合、かつ／またはオペコードのいくつかの態様を使用してデータ要素幅がサポートされている場合は必要でないという意味でオプションである。
【０２４７】
ライトマスクフィールド２５７０−その内容は、データ要素位置に基づいて、デスティネーションベクトルオペランド内のそのデータ要素位置が基本演算および拡張演算の結果を反映するかどうかを制御する。クラスＡ命令テンプレートはマージングライトマスクをサポートし、クラスＢ命令テンプレートはマージングライトマスクとゼロイングライトマスクの両方をサポートする。マージすると、ベクトルマスクは、デスティネーションタイル内の任意の１組の要素が（基本演算および拡張演算によって指定された）任意の演算の実行中に更新から保護されることを可能にし、他の１つの実施形態では、対応するマスクビットが０を有するデスティネーションの各要素の古い値を保存する。対照的に、ベクトルマスクをゼロにすると、デスティネーション内の任意の１組の要素が（基本演算および拡張演算によって指定された）任意の演算の実行中にゼロにされることが可能になり、１つの実施形態では、対応するマスクビットが０の値を有するときにデスティネーションの要素が０に設定される。この機能のサブセットは、実行されている演算のベクトル長（すなわち、修正される要素の、最初の要素から最後の要素までの範囲）を制御する能力であるが、修正される要素が連続している必要はない。したがって、ライトマスクフィールド２５７０は、ロード、ストア、算術、論理などを含む部分的なベクトル演算を可能にする。ライトマスクフィールド２５７０の内容が、使用されるべきライトマスクを含むいくつかのライトマスクレジスタのうちの１つを選択する（したがって、ライトマスクフィールド２５７０の内容が、実行されるべきそのマスキングを間接的に識別する）本発明の実施形態が説明されるが、代替の実施形態は、代わりにまたはさらに、ライトマスクフィールド２５７０の内容が実行されるべきマスキングを直接指定することを可能にする。
【０２４８】
即値フィールド２５７２−その内容は即値の指定を可能にする。このフィールドは、それが即値をサポートしない汎用ベクトルフレンドリフォーマットの一実装形態には存在せず、即値を使用しない命令には存在しないという意味で、オプションである。
【０２４９】
クラスフィールド２５６８−その内容は異なるクラスの命令を区別する。図２５Ｃ〜図２５Ｄを参照して、このフィールドの内容はクラスＡとクラスＢの命令の間を選択する。図２５Ｃ〜図２５Ｄでは、特定の値がフィールド内に存在することを示すために角丸四角形（たとえば、図２５Ｃ〜図２５Ｄの、それぞれ、クラスフィールド２５６８に対するクラスＡ  ２５６８ＡおよびクラスＢ  ２５６８Ｂ）が使用されている。
【０２５０】
［クラスＡの命令テンプレート］
クラスＡの非メモリアクセス２５１９命令テンプレートの場合、アルファフィールド２５５２はＲＳフィールド２５５２Ａとして解釈され、その内容は異なる拡張演算タイプのうちのどの拡張演算タイプが実行されるべきかを識別し（たとえば、丸め２５５２Ａ．１およびデータ変換２５５２Ａ．２は、それぞれ、非メモリアクセス、完全丸めタイプ演算２５１７および非メモリアクセス、データ変換タイプ演算２５１８の命令テンプレートに対して指定される）、ベータフィールド２５５４は、指定されたタイプの演算のどれを実行されるべきかを識別する。非メモリアクセス２５１９命令テンプレートには、スケールフィールド２５６０、変位フィールド２５６２Ａ、および変位スケールフィールド２５６２Ｂは存在しない。
【０２５１】
［非メモリアクセス命令テンプレート−完全丸め制御タイプ演算］
非メモリアクセス完全丸め制御タイプ演算２５１７命令テンプレートでは、ベータフィールド２５５４は、その内容が静的な丸めを提供する丸め制御フィールド２５５４Ａとして解釈される。本発明の説明された実施形態では、丸め制御フィールド２５５４Ａは、全浮動小数点例外抑制（ＳＡＥ）フィールド２５５６および丸め演算制御フィールド２５５８を含むが、代替の実施形態は、これら両方の概念を同じフィールドに符号化するか、またはこれらの概念／フィールドのうちの１つもしくは他のフィールドのみを有することができる（たとえば、丸め演算制御フィールド２５５８のみを有することができる）。
【０２５２】
ＳＡＥフィールド２５５６−その内容は、例外イベント報告を無効にするべきか否かを区別し、抑制が有効になっていることをＳＡＥフィールド２５５６の内容が示すとき、所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも生成しない。
【０２５３】
丸め演算制御フィールド２５５８−その内容は、丸め演算のグループ（たとえば、切り上げ、切り捨て、ゼロへの丸め、および最近接丸め）のうちのどの丸め演算を実行するべきかを識別する。したがって、丸め演算制御フィールド２５５８は、命令に基づいて丸めモードを変更することを可能にする。プロセッサが丸めモードを指定するための制御レジスタを含む本発明の１つの実施形態では、丸め演算制御フィールド２５５８の内容はそのレジスタ値を無効にする。
【０２５４】
［非メモリアクセス命令テンプレート−データ変換タイプ演算］
非メモリアクセスデータ変換タイプ演算２５１８命令テンプレートでは、ベータフィールド２５５４はデータ変換フィールド２５５４Ｂとして解釈され、その内容は複数のデータ変換（たとえば、データ変換なし、スウィズル、ブロードキャスト）のうちのどのデータ変換が実行されるべきかを識別する。
【０２５５】
クラスＡのメモリアクセス２５２０命令テンプレートの場合、アルファフィールド２５５２はエビクションヒントフィールド２５５２Ｂとして解釈され、その内容は、複数のエビクションヒントのうちのどのエビクションヒントが使用されるべきかを識別し（図２５Ｃでは、一時的２５５２Ｂ．１および非一時的２５５２Ｂ．２は、それぞれ、メモリアクセス、一時的２５２５命令テンプレートおよびメモリアクセス、非一時的２５３０命令テンプレートに対して指定され）、ベータフィールド２５５４はデータ操作フィールド２５５４Ｃとして解釈され、その内容は、（プリミティブとしても知られている）いくつかのデータ操作演算（たとえば、操作なし、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン）のうちのどのデータ操作演算が実行されるべきかを識別する。メモリアクセス２５２０命令テンプレートは、スケールフィールド２５６０、および場合によっては、変位フィールド２５６２Ａまたは変位スケールフィールド２５６２Ｂを含む。
【０２５６】
ベクトルメモリ命令は、変換サポートを用いて、メモリからのベクタロードおよびメモリへのベクタストアを実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素ごとにメモリとの間でデータを転送し、実際に転送される要素は、ライトマスクとして選択されるベクトルマスクの内容によって規定される。
【０２５７】
［メモリアクセス命令テンプレート−一時的］
一時的データは、キャッシングから恩恵を受けるのに十分早く再利用される可能性が高いデータである。しかしながら、これはヒントであり、様々なプロセッサは、ヒントを完全に無視することを含む様々な方法でそれを実施することができる。
【０２５８】
［メモリアクセス命令テンプレート−非一時的］
非一時的データは、第１レベルキャッシュ内のキャッシングから恩恵を受けるのに十分早く再利用される可能性が低いデータであり、排除が優先されるべきである。しかしながら、これはヒントであり、様々なプロセッサは、ヒントを完全に無視することを含む様々な方法でそれを実施することができる。
【０２５９】
［クラスＢの命令テンプレート］
クラスＢの命令テンプレートの場合、アルファフィールド２５５２はライトマスク制御（Ｚ）フィールド２５５２Ｃとして解釈され、その内容は、ライトマスクフィールド２５７０によって制御されるライトマスキングがマージングであるべきかゼロイングであるべきかを区別する。
【０２６０】
クラスＢの非メモリアクセス２５１９命令テンプレートの場合、ベータフィールド２５５４の一部はＲＬフィールド２５５７Ａとして解釈され、その内容は異なる拡張演算タイプのうちのどの拡張演算タイプが実行されるべきかを識別し（たとえば、丸め２５５７Ａ．１およびベクトル長（ＶＳＩＺＥ）２５５７Ａ．２は、それぞれ、非メモリアクセス、ライトマスク制御、部分丸め制御タイプ演算２５２２命令テンプレートおよび非メモリアクセス、ライトマスク制御、ＶＳＩＺＥタイプ演算２５２３命令テンプレートに対して指定される）、ベータフィールド２５５４の残りは、指定されたタイプの演算のどれが実行されるべきかを識別する。非メモリアクセス２５１９命令テンプレートには、スケールフィールド２５６０、変位フィールド２５６２Ａ、および変位スケールフィールド２５６２Ｂは存在しない。
【０２６１】
非メモリアクセス、ライトマスク制御、部分丸め制御タイプ演算２５２２命令テンプレートでは、ベータフィールド２５５４の残りは丸め演算制御フィールド２５５９Ａとして解釈され、例外イベント報告は無効にされる（所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも生成しない）。
【０２６２】
丸め演算制御フィールド２５５９Ａ−丸め演算制御フィールド２５５８と同じように、その内容は、丸め演算のグループ（たとえば、切り上げ、切り捨て、ゼロへの丸め、および最近接丸め）のうちのどの丸め演算を実行するべきかを識別する。したがって、丸め演算制御フィールド２５５９Ａは、命令に基づいて丸めモードを変更することを可能にする。プロセッサが丸めモードを指定するための制御レジスタを含む本発明の１つの実施形態では、丸め演算制御フィールド２５５９Ａの内容はそのレジスタ値を無効にする。
【０２６３】
非メモリアクセス、ライトマスク制御、ＶＳＩＺＥタイプ演算２５２３命令テンプレートでは、ベータフィールド２５５４の残りはベクトル長フィールド２５５９Ｂとして解釈され、その内容は、複数のデータベクトル長（たとえば、１２８、２５６、または５１２バイト）のうちのどのデータベクトル長が実行されるべきかを識別する。
【０２６４】
クラスＢのメモリアクセス２５２０命令テンプレートの場合、ベータフィールド２５５４の一部はブロードキャストフィールド２５５７Ｂとして解釈され、その内容は、ブロードキャストタイプのデータ操作演算が実行されるべきか否かを区別し、ベータフィールド２５５４の残りはベクトル長フィールド２５５９Ｂとして解釈される。メモリアクセス２５２０命令テンプレートは、スケールフィールド２５６０、および場合によっては、変位フィールド２５６２Ａまたは変位スケールフィールド２５６２Ｂを含む。
【０２６５】
汎用ベクトルフレンドリ命令フォーマット２５１６に関して、フォーマットフィールド２５４０、基本演算フィールド２５４２、およびデータ要素幅フィールド２５６４を含むフルオペコードフィールド２５７４が示されている。フルオペコードフィールド２５７４がこれらのフィールドのすべてを含む１つの実施形態が示されているが、フルオペコードフィールド２５７４はそれらのすべてをサポートしない実施形態においてこれらのフィールドのすべてより少ないフィールドを含む。フルオペコードフィールド２５７４は演算コード（オペコード）を提供する。
【０２６６】
拡張演算フィールド２５５０、データ要素幅フィールド２５６４、およびライトマスクフィールド２５７０は、これらの特徴が汎用ベクトルフレンドリ命令フォーマットにおいて命令ごとに指定されることを可能にする。
【０２６７】
ライトマスクフィールドおよびデータ要素幅フィールドの組合せは、それらが異なるデータ要素幅に基づいてマスクが適用されることを可能にするという点で、タイプ付き命令を作成する。
【０２６８】
クラスＡおよびクラスＢ内で見出される様々な命令テンプレートは、様々な状況で有益である。本発明のいくつかの実施形態では、異なるプロセッサまたはプロセッサ内の異なるコアは、クラスＡのみ、クラスＢのみ、または両方のクラスをサポートすることができる。たとえば、汎用コンピューティング向けの高性能汎用アウトオブオーダコアは、クラスＢのみをサポートすることができ、主としてグラフィックスおよび／または科学（スループット）コンピューティング向けのコアは、クラスＡのみをサポートすることができ、両方向けのコアは両方をサポートすることができる（当然、両方のクラスからのテンプレートと命令の何らかの混合を有するが、両方のクラスからのすべてのテンプレートおよび命令を有するとは限らないコアは、本発明の範囲内にある）。また、単一のプロセッサが複数のコアを含んでもよく、それらのすべてが同じクラスをサポートするか、またはそれらの中の異なるコアが異なるクラスをサポートする。たとえば、別個のグラフィックスコアと汎用コアをもつプロセッサでは、主としてグラフィックスおよび／または科学コンピューティング向けの複数のグラフィックスコアのうちの１つがクラスＡのみをサポートすることができ、汎用コアのうちの１つまたは複数が、クラスＢのみをサポートする汎用コンピューティング向けのアウトオブオーダ実行およびレジスタリネーミングを有する高性能汎用コアであってもよい。別個のグラフィックコアをもたない別のプロセッサは、クラスＡとクラスＢの両方をサポートするもう１つの汎用のインオーダコアまたはアウトオブオーダコアを含んでもよい。当然、本発明の異なる実施形態では、１つのクラスからの特徴も他のクラスに実装されてもよい。高水準言語で書かれたプログラムは、１）実行用のターゲットプロセッサによってサポートされるクラスの命令のみを有する形式、または２）すべてのクラスの命令の異なる組合せを使用して書かれた代替ルーチンを有し、現在コードを実行しているプロセッサによってサポートされる命令に基づいて実行するようにルーチンを選択する制御フローコードを有する形式を含む、様々な異なる実行可能形式に入れられる（たとえば、ジャストインタイムコンパイルされるか、または静的コンパイルされる）はずである。
【０２６９】
［例示的な特殊ベクトルフレンドリ命令フォーマット］
図２６Ａは、本発明の実施形態による、例示的な特殊ベクトルフレンドリ命令フォーマットを示すブロック図である。図２６Ａは、フィールドの位置、サイズ、解釈、および順序、ならびにそれらのフィールドのうちのいくつかの値を指定するという意味で特殊である、特殊ベクトルフレンドリ命令フォーマット２６００を示す。特殊ベクトルフレンドリ命令フォーマット２６００は、ｘ８６命令セットを拡張するために使用されてもよく、したがって、いくつかのフィールドは、既存のｘ８６命令セットおよびその拡張（たとえば、ＡＶＸ）で使用されるフィールドと同様または同じである。このフォーマットは、拡張を有する既存のｘ８６命令セットのプレフィックス符号化フィールド、実オペコードバイトフィールド、ＭＯＤ  Ｒ／Ｍフィールド、ＳＩＢフィールド、変位フィールド、および即値フィールドと一致したままである。図２６Ａのフィールドがマップされる図２５Ｃ〜図２５Ｄのフィールドが示されている。
【０２７０】
本発明の実施形態は、説明の目的で汎用ベクトルフレンドリ命令フォーマット２５１６との関連で特殊ベクトルフレンドリ命令フォーマット２６００を参照して説明されているが、本発明は、特許請求される場合を除き、特殊ベクトルフレンドリ命令フォーマット２６００に限定されないことを理解されたい。たとえば、汎用ベクトルフレンドリ命令フォーマット２５１６は様々なフィールドに対して様々な可能なサイズを考察するが、特殊ベクトルフレンドリ命令フォーマット２６００は特定のサイズのフィールドを有するものとして示されている。具体的な例として、データ要素幅フィールド２５６４は特殊ベクトルフレンドリ命令フォーマット２６００では１ビットフィールドとして示されているが、本発明はそのように限定されない（すなわち、汎用ベクトルフレンドリ命令フォーマット２５１６はデータ要素幅フィールド２５６４の他のサイズを考察する）。
【０２７１】
特殊ベクトルフレンドリ命令フォーマット２６００は、図２６Ａに示された順序で下記に列挙された以下のフィールドを含む。
【０２７２】
ＥＶＥＸプレフィックス（バイト０〜３）２６０２−４バイト形式で符号化されている。
【０２７３】
フォーマットフィールド２５４０（ＥＶＥＸバイト０、ビット［７：０］）−最初のバイト（ＥＶＥＸバイト０）はフォーマットフィールド２５４０であり、それは０×６２（本発明の１つの実施形態においてベクトルフレンドリ命令フォーマットを識別するために使用される一意の値）を含む。
【０２７４】
２番目〜４番目のバイト（ＥＶＥＸバイト１〜３）は、特定の機能を提供するいくつかのビットフィールドを含む。
【０２７５】
ＲＥＸフィールド２６０５（ＥＶＥＸバイト１、ビット［７−５］）−ＥＶＥＸ．Ｒビットフィールド（ＥＶＥＸバイト１、ビット［７］−Ｒ）、ＥＶＥＸ．Ｘビットフィールド（ＥＶＥＸバイト１、ビット［６］−Ｘ）、およびＥＶＥＸ．Ｂビットフィールド（ＥＶＥＸバイト１、ビット［５］−Ｂ）で構成される。ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、およびＥＶＥＸ．Ｂのビットフィールドは、対応するＶＥＸビットフィールドと同じ機能を提供し、１の補数形式を使用して符号化される、すなわち、ＺＭＭ０は１１１１Ｂとして符号化され、ＺＭＭ１５は００００Ｂとして符号化される。命令の他のフィールドは、当技術分野で知られているレジスタインデックスの下位３ビット（ｒｒｒ、ｘｘｘ、およびｂｂｂ）を符号化し、その結果、Ｒｒｒｒ、Ｘｘｘｘ、およびＢｂｂｂは、ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、およびＥＶＥＸ．Ｂを追加することによって形成されてもよい。
【０２７６】
ＲＥＸ'２６１０Ａ−これはＲＥＸ'フィールド２６１０の最初の部分であり、拡張された３２個のレジスタセットの上位１６個または下位１６個のいずれかを符号化するために使用されるＥＶＥＸ．Ｒ'ビットフィールド（ＥＶＥＸバイト１、ビット［４］−Ｒ'）である。本発明の１つの実施形態では、このビットは、下記に示される他のビットとともに、実オペコードバイトが６２であるＢＯＵＮＤ命令から（よく知られたｘ８６  ３２ビットモードで）区別するためにビット反転フォーマットで記憶されるが、（後述される）ＭＯＤ  Ｒ／Ｍフィールドでは、ＭＯＤフィールド内の１１の値を受け入れず、本発明の代替の実施形態は、これおよび下記に示される他のビットを反転フォーマットで記憶しない。下位１６個のレジスタを符号化するために１の値が使用される。言い換えれば、Ｒ'Ｒｒｒｒは、他のフィールドからのＥＶＥＸ．Ｒ'、ＥＶＥＸ．Ｒ、および他のＲＲＲを結合することによって形成される。
【０２７７】
オペコードマップフィールド２６１５（ＥＶＥＸバイト１、ビット［３：０］−ｍｍｍｍ）−その内容は暗黙の先行オペコードバイト（０Ｆ、０Ｆ３８、または０Ｆ３）を符号化する。
【０２７８】
データ要素幅フィールド２５６４（ＥＶＥＸバイト２、ビット［７］−Ｗ）−記号ＥＶＥＸ．Ｗによって表される。ＥＶＥＸ．Ｗは、データタイプ（３２ビットデータ要素または６４ビットデータ要素）の粒度（サイズ）を定義するために使用される。
【０２７９】
ＥＶＥＸ．ｖｖｖｖ２６２０（ＥＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）−ＥＶＥＸ．ｖｖｖｖの役割は以下を含んでもよい。１）ＥＶＥＸ．ｖｖｖｖは、反転（１の補数）形式で指定された最初のソースレジスタオペランドを符号化し、２つ以上のソースオペランドを有する命令に有効である。２）ＥＶＥＸ．ｖｖｖｖは、いくつかのベクトルシフトに対して１の補数形式で指定されるデスティネーションレジスタオペランドを符号化する。３）ＥＶＥＸ．ｖｖｖｖはいかなるオペランドも符号化せず、フィールドは予約され、１１１１ｂを含むべきである。したがって、ＥＶＥＸ．ｖｖｖｖフィールド２６２０は、反転（１の補数）形式で記憶された最初のソースレジスタ指定子の下位４ビットを符号化する。命令に応じて、指定子サイズを３２個のレジスタに拡張するために、さらに異なるＥＶＥＸビットフィールドが使用される。
【０２８０】
ＥＶＥＸ．Ｕ２５６８クラスフィールド（ＥＶＥＸバイト２、ビット［２］−Ｕ）−ＥＶＥＸ．Ｕ＝０の場合、それはクラスＡまたはＥＶＥＸ．Ｕ０を示し、ＥＶＥＸ．Ｕ＝１の場合、それはクラスＢまたはＥＶＥＸ．Ｕ１を示す。
【０２８１】
プレフィックス符号化フィールド２６２５（ＥＶＥＸバイト２、ビット［１：０］−ｐｐ）−基本演算フィールドに追加のビットを提供する。ＥＶＥＸプレフィックスフォーマットでレガシーＳＳＥ命令にサポートを提供することに加えて、これはＳＩＭＤプレフィックスを圧縮するという利点も有する（ＳＩＭＤプレフィックスを表すために１バイトを必要とするのではなく、ＥＶＥＸプレフィックスは２ビットのみを必要とする）。１つの実施形態では、レガシーフォーマットとＥＶＥＸプレフィックスフォーマットの両方でＳＩＭＤプレフィックス（６６Ｈ、Ｆ２Ｈ、Ｆ３Ｈ）を使用するレガシーＳＳＥ命令をサポートするために、これらのレガシーＳＩＭＤプレフィックスはＳＩＭＤプレフィックス符号化フィールドに符号化され、実行時に、デコーダのＰＬＡに提供される前に、レガシーＳＩＭＤプレフィックスに拡張される（そのため、ＰＬＡは、これらのレガシー命令のレガシーフォーマットとＥＶＥＸフォーマットの両方を修正なしに実行することができる）。より新しい命令は、オペコード拡張としてＥＶＥＸプレフィックス符号化フィールドの内容を直接使用することができるが、いくつかの実施形態は、整合性のために同様の方式で拡張するが、これらのレガシーＳＩＭＤプレフィックスによって異なる意味が指定されることを可能にする。代替の実施形態は、２ビットＳＩＭＤプレフィックス符号化をサポートするようにＰＬＡを再設計することができ、したがって拡張を必要としない。
【０２８２】
アルファフィールド２５５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ、ＥＶＥＸ．ＥＨ、ＥＶＥＸ．ｒｓ、ＥＶＥＸ．ＲＬ、ＥＶＥＸ．ライトマスク制御、およびＥＶＥＸ．Ｎとしても知られ、またαで示されている）−前述されたように、このフィールドはコンテキスト固有である。
【０２８３】
ベータフィールド２５５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ、ＥＶＥＸ．ｓ２−０、ＥＶＥＸ．ｒ２−０、ＥＶＥＸ．ｒｒ１、ＥＶＥＸ．ＬＬ０、ＥＶＥＸ．ＬＬＢとしても知られ、またβββで示されている）−前述されたように、このフィールドはコンテキスト固有である。
【０２８４】
ＲＥＸ'２６１０Ｂ−これはＲＥＸ'フィールド２６１０の残りであり、拡張された３２個のレジスタセットの上位１６個または下位１６個のいずれかを符号化するために使用され得るＥＶＥＸ．Ｖ'ビットフィールド（ＥＶＥＸバイト３、ビット［３］−Ｖ'）である。このビットはビット反転フォーマットで記憶される。下位１６個のレジスタを符号化するために１の値が使用される。言い換えれば、Ｖ'ＶＶＶＶはＥＶＥＸ．Ｖ'とＥＶＥＸ．ｖｖｖｖを結合することによって形成される。
【０２８５】
ライトマスクフィールド２５７０（ＥＶＥＸバイト３、ビット［２：０］−ｋｋｋ）−その内容は、前述されたようにライトマスクレジスタ内のレジスタのインデックスを指定する。本発明の１つの実施形態では、固有値ＥＶＥＸ．ｋｋｋ＝０００は、特定の命令に対してライトマスクが使用されないことを意味する特殊な挙動を有する（これは、すべてのものにハードワイヤリングされたライトマスクの使用を含む様々な方法またはマスキングハードウェアをバイパスするハードウェアで実施されてもよい）。
【０２８６】
リアルオペコードフィールド２６３０（バイト４）はオペコードバイトとしても知られる。オペコードの一部はこのフィールドで指定される。
【０２８７】
ＭＯＤ  Ｒ／Ｍフィールド２６４０（バイト５）は、ＭＯＤフィールド２６４２、Ｒｅｇフィールド２６４４、およびＲ／Ｍフィールド２６４６を含む。前述されたように、ＭＯＤフィールド２６４２の内容は、メモリアクセス演算と非メモリアクセス演算とを区別する。Ｒｅｇフィールド２６４４の役割は、２つの状況に要約することができる。デスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかを符号化するか、またはオペコード拡張として扱われ、いかなる命令オペランドを符号化するためにも使用されない。Ｒ／Ｍフィールド２６４６の役割は、以下の、メモリアドレスを参照する命令オペランドを符号化すること、またはデスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかを符号化することを含んでもよい。
【０２８８】
スケール、インデックス、ベース（ＳＩＢ）バイト（バイト６）−前述されたように、スケールフィールド２５６０の内容はメモリアドレス生成に使用される。ＳＩＢ．ｘｘｘ２６５４およびＳＩＢ．ｂｂｂ２６５６−これらのフィールドの内容は、レジスタインデックスＸｘｘｘおよびＢｂｂｂに関して以前に参照されている。
【０２８９】
変位フィールド２５６２Ａ（バイト７〜１０）−ＭＯＤフィールド２６４２が１０を含むとき、バイト７〜１０は変位フィールド２５６２Ａであり、それはレガシー３２ビット変位（ｄｉｓｐ３２）と同じように機能し、バイト粒度で機能する。
【０２９０】
変位係数フィールド２５６２Ｂ（バイト７）−ＭＯＤフィールド２６４２が０１を含むとき、バイト７は変位係数フィールド２５６２Ｂである。このフィールドの位置は、バイト粒度で機能するレガシーｘ８６命令セットの８ビット変位（ｄｉｓｐ８）の位置と同じである。ｄｉｓｐ８は符号拡張されているので、−１２８バイトオフセットと１２７バイトオフセットとの間のアドレス指定しかできず、６４バイトのキャッシュラインに関しては、ｄｉｓｐ８は、４つの本当に有用な値−１２８、−６４、０、および６４にのみ設定できる８ビットを使用し、より大きな範囲がしばしば必要とされるので、ｄｉｓｐ３２が使用されるが、ｄｉｓｐ３２は４バイトを必要とする。ｄｉｓｐ８およびｄｉｓｐ３２と対照的に、変位係数フィールド２５６２Ｂはｄｉｓｐ８の再解釈であり、変位係数フィールド２５６２Ｂを使用するとき、実際の変位は、メモリオペランドアクセスのサイズ（Ｎ）と乗算された変位係数フィールドの内容によって決定される。このタイプの変位はｄｉｓｐ８＊Ｎと呼ばれる。これにより、平均命令長（変位に使用される単一バイトであるが、はるかに広い範囲を有する）が短くなる。そのような圧縮された変位は、実効変位がメモリアクセスの粒度の倍数であるという仮定に基づいており、したがって、アドレスオフセットの冗長な下位ビットは符号化される必要がない。言い換えれば、変位係数フィールド２５６２Ｂは、レガシーｘ８６命令セットの８ビット変位を置換する。したがって、変位係数フィールド２５６２Ｂは、ｄｉｓｐ８がｄｉｓｐ８＊Ｎに多重定義されるという唯一の例外を除いて、ｘ８６命令セットの８ビット変位と同じ方法で符号化される（そのため、ＭｏｄＲＭ／ＳＩＢ符号化規則における変更はない）。言い換えれば、符号化規則または符号化長に変更はないが、（バイト単位のアドレスオフセットを取得するためにメモリオペランドのサイズによって変位をスケーリングする必要がある）ハードウェアによる変位値の解釈のみに変更がある。即値フィールド２５７２は前述されたように動作する。
【０２９１】
［フルオペコードフィールド］
図２６Ｂは、本発明の１つの実施形態による、フルオペコードフィールド２５７４を構成する特殊ベクトルフレンドリ命令フォーマット２６００のフィールドを示すブロック図である。具体的には、フルオペコードフィールド２５７４は、フォーマットフィールド２５４０、基本演算フィールド２５４２、およびデータ要素幅（Ｗ）フィールド２５６４を含む。基本演算フィールド２５４２は、プレフィックス符号化フィールド２６２５、オペコードマップフィールド２６１５、およびリアルオペコードフィールド２６３０を含む。
【０２９２】
［レジスタインデックスフィールド］
図２６Ｃは、本発明の１つの実施形態による、レジスタインデックスフィールド２５４４を構成する特殊ベクトルフレンドリ命令フォーマット２６００のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド２５４４は、ＲＥＸフィールド２６０５、ＲＥＸ'フィールド２６１０、ＭＯＤＲ／Ｍ．ｒｅｇフィールド２６４４、ＭＯＤＲ／Ｍ．ｒ／ｍフィールド２６４６、ＶＶＶＶフィールド２６２０、ｘｘｘフィールド２６５４、およびｂｂｂフィールド２６５６を含む。
【０２９３】
［拡張演算フィールド］
図２６Ｄは、本発明の１つの実施形態による、拡張演算フィールド２５５０を構成する特殊ベクトルフレンドリ命令フォーマット２６００のフィールドを示すブロック図である。クラス（Ｕ）フィールド２５６８が０を含むとき、それは、ＥＶＥＸ．Ｕ０（クラスＡ  ２５６８Ａ）を意味し、１を含むとき、それはＥＶＥＸ．Ｕ１（クラスＢ  ２５６８Ｂ）を意味する。Ｕ＝０であり、ＭＯＤフィールド２６４２が（非メモリアクセス演算を意味する）１１を含むとき、アルファフィールド２５５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）はｒｓフィールド２５５２Ａとして解釈される。ｒｓフィールド２５５２Ａが１（丸め２５５２Ａ．１）を含むとき、ベータフィールド２５５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は丸め制御フィールド２５５４Ａとして解釈される。丸め制御フィールド２５５４Ａは、１ビットのＳＡＥフィールド２５５６および２ビットの丸め演算制御フィールド２５５８を含む。ｒｓフィールド２５５２Ａが０（データ変換２５５２Ａ．２）を含むとき、ベータフィールド２５５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は３ビットのデータ変換フィールド２５５４Ｂとして解釈される。Ｕ＝０であり、ＭＯＤフィールド２６４２が（メモリアクセス演算を意味する）００、０１、または１０を含むとき、アルファフィールド２５５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、エビクションヒント（ＥＨ）フィールド２５５２Ｂとして解釈され、ベータフィールド２５５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットのデータ操作フィールド２５５４Ｃとして解釈される。
【０２９４】
Ｕ＝１であるとき、アルファフィールド２５５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、ライトマスク制御（Ｚ）フィールド２５５２Ｃとして解釈される。Ｕ＝１であり、ＭＯＤフィールド２６４２が（非メモリアクセス演算を意味する）１１を含むとき、ベータフィールド２５５４の一部（ＥＶＥＸバイト３、ビット［４］−Ｓ０）はＲＬフィールド２５５７Ａとして解釈され、１（丸め２５５７Ａ．１）を含むとき、ベータフィールド２５５４の残り（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）は丸め演算制御フィールド２５５９Ａとして解釈され、ＲＬフィールド２５５７Ａが０（ＶＳＩＺＥ２５５７．Ａ２）を含むとき、ベータフィールド２５５４の残り（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）はベクトル長フィールド２５５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）として解釈される。Ｕ＝１であり、ＭＯＤフィールド２６４２が（メモリアクセス演算を意味する）００、０１、または１０を含むとき、ベータフィールド２５５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、ベクトル長フィールド２５５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）およびブロードキャストフィールド２５５７Ｂ（ＥＶＥＸバイト３、ビット［４］−Ｂ）として解釈される。
【０２９５】
［例示的なレジスタアーキテクチャ］
図２７は、本発明の１つの実施形態による、レジスタアーキテクチャ２７００のブロック図である。図示された実施形態では、５１２ビット幅の３２個のベクトルレジスタ２７１０が存在し、これらのレジスタはｚｍｍ０からｚｍｍ３１として参照される。下位１６個のｚｍｍレジスタの下位２５６ビットは、レジスタｙｍｍ０〜１５と重なる。下位１６個のｚｍｍレジスタの下位１２８ビット（ｙｍｍレジスタの下位１２８ビット）は、レジスタｘｍｍ０〜１５と重なる。下記の表に示されたように、特殊ベクトルフレンドリ命令フォーマット２６００は、これらの重なったレジスタファイルを処理する。
【表１】
2019197531.tif 000009
【０２９６】
言い換えれば、ベクトル長フィールド２５５９Ｂは、最大長と１つまたは複数の他のより短い長さとの間で選択し、そのようなより短い長さの各々は先行する長さの半分の長さであり、ベクトル長フィールド２５５９Ｂのない命令テンプレートは最大ベクトル長を処理する。さらに、１つの実施形態では、特殊ベクトルフレンドリ命令フォーマット２６００のクラスＢ命令テンプレートは、パックドまたはスカラの単精度／倍精度浮動小数点データおよびパックドまたはスカラの整数データを処理する。スカラ演算は、ｚｍｍ／ｙｍｍ／ｘｍｍレジスタ内の最下位データ要素位置で実行される演算であり、上位データ要素位置は、実施形態に応じて、命令前の位置と同じままか、またはゼロにされる。
【０２９７】
ライトマスクレジスタ２７１５−図示された実施形態では、各々が６４ビットサイズの８つのライトマスクレジスタ（ｋ０からｋ７）が存在する。代替の実施形態では、ライトマスクレジスタ２７１５は１６ビットサイズである。前述されたように、本発明の１つの実施形態では、ベクトルマスクレジスタｋ０は、ライトマスクとして使用することはできず、通常ｋ０を示す符号化がライトマスクに使用されると、０ｘＦＦＦＦのハードワイヤリングされたライトマスクが選択され、その命令用のライトマスキングが事実上無効になる。
【０２９８】
汎用レジスタ２７２５−図示された実施形態では、メモリオペランドをアドレス指定するために既存のｘ８６アドレス指定モードとともに使用される１６個の６４ビット汎用レジスタが存在する。これらのレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ、およびＲ８からＲ１５の名前で参照される。
【０２９９】
ＭＭＸパックド整数フラットレジスタファイル２７５０をエイリアスするスカラ浮動小数点スタックレジスタファイル（ｘ８７スタック）２７４５、つまり、図示された実施形態では、ｘ８７スタックは、ｘ８７命令セット拡張を使用する３２／６４／８０ビット浮動小数点データに対してスカラ浮動小数点演算を実行するために使用される８要素スタックであり、ＭＭＸレジスタは、６４ビットパックド整数データに対する演算を実行し、ならびにＭＭＸレジスタとＸＭＭレジスタとの間で実行されるいくつかの演算用のオペランドを保持するために使用される。
【０３００】
本発明の代替の実施形態は、より広いまたはより狭いレジスタを使用してもよい。さらに、本発明の代替の実施形態は、より多い、より少ない、または異なるレジスタファイルおよびレジスタを使用してもよい。
【０３０１】
［例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ］
プロセッサコアは、異なる方法で、異なる目的のために、かつ異なるプロセッサにおいて実装されてもよい。たとえば、そのようなコアの実装形態には、１）汎用コンピューティング向けの汎用インオーダコア、２）汎用コンピューティング向けの高性能汎用アウトオブオーダコア、３）主としてグラフィックスおよび／または科学（スループット）コンピューティング向けの専用コアが含まれてもよい。様々なプロセッサの実装形態には、１）汎用コンピューティング向けの１つもしくは複数の汎用インオーダコアおよび／または汎用コンピューティング用の１つもしくは複数の汎用アウトオブオーダコアを含むＣＰＵ、ならびに２）主としてグラフィックスおよび／または科学（スループット）向けの１つまたは複数の専用コアを含むコプロセッサが含まれてもよい。そのような様々なプロセッサは様々なコンピュータシステムアーキテクチャをもたらし、そのようなコンピュータシステムアーキテクチャには、１）ＣＰＵとは別のチップ上のコプロセッサ、２）ＣＰＵと同じパッケージ内の別のダイ上のコプロセッサ、３）ＣＰＵと同じダイ上のコプロセッサ（この場合、そのようなコプロセッサは、統合グラフィックスおよび／もしくは科学（スループット）ロジックなどの専用ロジック、または専用コアと呼ばれることがある）、ならびに４）同じダイ上に（アプリケーションコアまたはアプリケーションプロセッサと呼ばれることもある）説明されたＣＰＵ、上述したコプロセッサ、および追加の機能を含んでもよいシステムオンチップが含まれてもよい。例示的なコアアーキテクチャが次に説明され、例示的なプロセッサおよびコンピュータアーキテクチャの説明が続く。
【０３０２】
［例示的なコアアーキテクチャ］
［インオーダコアおよびアウトオブオーダコアのブロック図］
図２８Ａは、本発明の実施形態による、例示的なインオーダパイプラインと、例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。図２８Ｂは、本発明の実施形態による、プロセッサに含まれるべきインオーダアーキテクチャコアの例示的な実施形態と、例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。図２８Ａ〜図２８Ｂの実線のボックスはインオーダパイプラインおよびインオーダコアを示し、破線のボックスのオプションの追加は、レジスタリネーミング、アウトオブオーダ発行／実行パイプラインおよびコアを示す。インオーダの態様がアウトオブオーダの態様のサブセットであると仮定して、アウトオブオーダの態様を説明する。
【０３０３】
図２８Ａでは、プロセッサパイプライン２８００は、フェッチ段階２８０２と、長さ復号段階２８０４と、復号段階２８０６と、割当て段階２８０８と、リネーミング段階２８１０と、（ディスパッチまたは発行としても知られる）スケジューリング段階２８１２と、レジスタ読み取り／メモリ読み取り段階２８１４と、実行段階２８１６と、ライトバック／メモリ書き込み段階２８１８と、例外処理段階２８２２と、コミット段階２８２４とを含む。
【０３０４】
図２８Ｂは、実行エンジンユニット２８５０に結合されたフロントエンドユニット２８３０を含むプロセッサコア２８９０を示し、両方ともメモリユニット２８７０に結合される。コア２８９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、またはハイブリッドもしくは代替のコアタイプであってもよい。さらに別の選択肢として、コア２８９０は、たとえば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理装置（ＧＰＧＰＵ）コア、グラフィックスコアなどの専用コアであってもよい。
【０３０５】
フロントエンドユニット２８３０は、復号ユニット２８４０にフェッチされた命令２８３９を送信するように結合された命令フェッチユニット２８３８に結合された命令変換ルックアサイドバッファ（ＴＬＢ）２８３６に結合された命令キャッシュユニット２８３４に結合された分岐予測ユニット２８３２を含む。復号ユニット２８４０（またはデコーダ）は命令を復号し、復号された１つまたは複数の命令２８４１、あるいは元の命令から復号されるか、またはそうでない場合、元の命令を反映するか、もしくは元の命令から導出された、マイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号を出力として生成することができる。復号ユニット２８４０は、様々な異なるメカニズムを使用して実装されてもよい。適切なメカニズムの例には、参照テーブル、ハードウェア実装、プログラマブルロジック配列（ＰＬＡ）、マイクロコード読み出し専用メモリ（ＲＯＭ）などが含まれるが、それらに限定されない。１つの実施形態では、コア２８９０は、いくつかのマクロ命令用のマイクロコードを（たとえば、復号ユニット２８４０内またはそうでない場合フロントエンドユニット２８３０内に）記憶するマイクロコードＲＯＭまたは他の媒体を含む。復号ユニット２８４０は、実行エンジンユニット２８５０内のリネーム／アロケータユニット２８５２に結合される。
【０３０６】
実行エンジンユニット２８５０は、リタイアメントユニット２８５４および１つまたは複数のスケジューラユニット２８５６のセットに結合されたリネーム／アロケータユニット２８５２を含む。スケジューラユニット２８５６は、予約ステーション、中央命令ウィンドウなどを含む、任意の数の様々なスケジューラを表す。スケジューラユニット２８５６は、物理レジスタファイルユニット２８５８に結合される。物理レジスタファイルユニット２８５８の各々は１つまたは複数の物理レジスタファイルを表し、それらの異なるファイルは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（たとえば、実行されるべき次の命令のアドレスである命令ポインタ）などの１つまたは複数の異なるデータタイプを記憶する。１つの実施形態では、物理レジスタファイルユニット２８５８は、ベクトルレジスタユニット、ライトマスクレジスタユニット、およびスカラレジスタユニットを備える。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供することができる。物理レジスタファイルユニット２８５８は、レジスタリネーミングおよびアウトオブオーダ実行が（たとえば、リオーダバッファおよびリタイアメントレジスタファイルを使用すること、将来ファイル、履歴バッファ、およびリタイアメントレジスタファイルを使用すること、レジスタマップおよびレジスタのプールを使用することなどで）実装され得る様々な方法を示すために、リタイアメントユニット２８５４と重なっている。リタイアメントユニット２８５４および物理レジスタファイルユニット２８５８は、実行クラスタ２８６０に結合される。実行クラスタ２８６０は、１つまたは複数の実行ユニット２８６２のセット、および１つまたは複数のメモリアクセスユニット２８６４のセットを含む。実行ユニット２８６２は、様々な演算（たとえば、シフト、加算、減算、乗算）を、様々なタイプのデータ（たとえば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して実行することができる。いくつかの実施形態は、特定の機能または機能のセットに専用のいくつかの実行ユニットを含んでもよいが、他の実施形態は、ただ１つの実行ユニットまたはすべてがすべての機能を実行する複数の実行ユニットを含んでもよい。スケジューラユニット２８５６、物理レジスタファイルユニット２８５８、および実行クラスタ２８６０は、いくつかの実施形態がいくつかのタイプのデータ／演算用の別々のパイプライン（スカラ整数パイプライン、スカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、ならびに／または各々が独自のスケジューラユニット、物理レジスタファイルユニット、および／もしくは実行クラスタを有するメモリアクセスパイプライン−別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット２８６４を有するいくつかの実施形態が実装される）を作成するので、場合によっては複数であるように示されている。別々のパイプラインが使用される場合、これらのパイプラインのうちの１つまたは複数がアウトオブオーダ発行／実行であり、残りがインオーダであってもよいことも理解されたい。
【０３０７】
１組のメモリアクセスユニット２８６４は、レベル２（Ｌ２）キャッシュユニット２８７６に結合されたデータキャッシュユニット２８７４に結合されたデータＴＬＢユニット２８７２を含むメモリユニット２８７０に結合される。例示的な一実施形態では、メモリアクセスユニット２８６４は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含んでもよく、それらの各々はメモリユニット２８７０内のデータＴＬＢユニット２８７２に結合される。命令キャッシュユニット２８３４は、メモリユニット２８７０内のレベル２（Ｌ２）キャッシュユニット２８７６にさらに結合される。Ｌ２キャッシュユニット２８７６は、１つまたは複数の他のレベルのキャッシュ、および最終的にメインメモリに結合される。
【０３０８】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、以下のようにパイプライン２８００を実装することができる。１）命令フェッチ２８３８がフェッチ段階２８０２および長さ復号段階２８０４を実行する。２）復号ユニット２８４０が復号段階２８０６を実行する。３）リネーム／アロケータユニット２８５２が割当て段階２８０８およびリネーミング段階２８１０を実行する。４）スケジューラユニット２８５６がスケジュール段階２８１２を実行する。５）物理レジスタファイルユニット２８５８およびメモリユニット２８７０がレジスタ読み取り／メモリ読み取り段階２８１４を実行し、実行クラスタ２８６０が実行段階２８１６を実行する。６）メモリユニット２８７０および物理レジスタファイルユニット２８５８がライトバック／メモリ書き込み段階２８１８を実行する。７）様々なユニットが例外処理段階２８２２に関与してもよい。８）リタイアメントユニット２８５４および物理レジスタファイルユニット２８５８がコミット段階２８２４を実行する。
【０３０９】
コア２８９０は、本明細書で説明された命令を含む、１つまたは複数の命令セット（たとえば、（より新しいバージョンで追加されたいくつかの拡張を有する）ｘ８６命令セット、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭ  Ｈｏｌｄｉｎｇｓの（ＮＥＯＮなどのオプションの追加拡張を有する）ＡＲＭ命令セット）をサポートすることができる。１つの実施形態では、コア２８９０は、パックドデータ命令セット拡張（たとえば、ＡＶＸ１、ＡＶＸ２）をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションによって使用される演算がパックドデータを使用して実行されることが可能になる。
【０３１０】
コアは、マルチスレッド化（演算またはスレッドの２つ以上の並列セットの実行）をサポートし、タイムスライスマルチスレッド化、（物理コアが同時にマルチスレッド化しているスレッドの各々に単一の物理コアが論理コアを提供する）同時マルチスレッド化、またはそれらの組合せ（たとえば、インテル（登録商標）ハイパースレッディングテクノロジなどにおけるタイムスライスフェッチおよび復号ならびにその後の同時マルチスレッド化）を含む様々な方法でサポートすることができる。
【０３１１】
レジスタリネーミングはアウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングはインオーダアーキテクチャで使用されてもよいことを理解されたい。図示されたプロセッサの実施形態はまた、別々の命令およびデータのキャッシュユニット２８３４／２８７４ならびに共有Ｌ２キャッシュユニット２８７６を含むが、代替の実施形態は、たとえば、レベル１（Ｌ１）内部キャッシュまたは複数レベルの内部キャッシュなどの、命令とデータの両方のための単一の内部キャッシュを有してもよい。いくつかの実施形態では、システムは、内部キャッシュと、コアおよび／またはプロセッサの外部にある外部キャッシュの組合せを含んでもよい。あるいは、キャッシュのすべてがコアおよび／またはプロセッサの外部にあってもよい。
【０３１２】
［特定の例示的なインオーダコアアーキテクチャ］
図２９Ａ〜図２９Ｂは、より具体的で例示的なインオーダコアアーキテクチャのブロック図を示し、そのコアはチップ内の（同じタイプおよび／または異なるタイプの他のコアを含む）いくつかのロジックブロックのうちの１つである。ロジックブロックは、用途に応じて、高帯域幅相互接続ネットワーク（たとえば、リングネットワーク）を介していくつかの固定機能ロジック、メモリＩ／Ｏインターフェース、および他の必要なＩ／Ｏロジックと通信する。
【０３１３】
図２９Ａは、本発明の実施形態による、オンダイ相互接続ネットワーク２９０２へのその接続およびレベル２（Ｌ２）キャッシュ２９０４のそのローカルサブセットを有するシングルプロセッサコアのブロック図である。１つの実施形態では、命令デコーダ２９００は、パックドデータ命令セット拡張を有するｘ８６命令セットをサポートする。Ｌ１キャッシュ２９０６は、キャッシュメモリへの低レイテンシアクセスがスカラユニットおよびベクトルユニットに入ることを可能にする。１つの実施形態では（設計を簡易化するために）、スカラユニット２９０８およびベクトルユニット２９１０は、別々のレジスタセット（それぞれ、スカラレジスタ２９１２およびベクトルレジスタ２９１４）を使用し、それらの間で転送されたデータはメモリに書き込まれ、次いでレベル１（Ｌ１）キャッシュ２９０６から読み戻されるが、本発明の代替の実施形態は、異なる手法を使用する（たとえば、単一のレジスタセットを使用するか、またはデータが２つのレジスタファイル間で書き込みおよび読み戻しなしに転送されることを可能にする通信経路を含む）ことができる。
【０３１４】
Ｌ２キャッシュ２９０４のローカルサブセットは、プロセッサコア当たり１つの、別々のローカルサブセットに分割されたグローバルＬ２キャッシュの一部である。各プロセッサコアは、Ｌ２キャッシュ２９０４のそれ自体のローカルサブセットへの直接アクセス経路を有する。プロセッサコアによって読み取られたデータは、そのＬ２キャッシュサブセット２９０４に記憶され、それら自体のローカルＬ２キャッシュサブセットにアクセスする他のプロセッサコアと並行して、迅速にアクセスすることができる。プロセッサコアによって書き込まれたデータは、それ自体のＬ２キャッシュサブセット２９０４に記憶され、必要な場合他のサブセットからフラッシュされる。リングネットワークは共有データについての整合性を保証する。リングネットワークは、プロセッサコア、Ｌ２キャッシュ、および他のロジックブロックなどのエージェントがチップ内で互いに通信することを可能にするように双方向である。各リングデータ経路は方向当たり１０１２ビット幅である。
【０３１５】
図２９Ｂは、本発明の実施形態による、図２９Ａのプロセッサコアの一部の拡大図である。図２９Ｂは、Ｌ１キャッシュ２９０６の一部であるＬ１データキャッシュ２９０６Ａ、ならびにベクトルユニット２９１０およびベクトルレジスタ２９１４に関するさらなる詳細を含む。具体的には、ベクトルユニット２９１０は、整数、単精度浮動小数点、および倍精度浮動小数点の命令のうちの１つまたは複数を実行する１６幅ベクトル処理装置（ＶＰＵ）である（１６幅ＡＬＵ２９２８を参照）。ＶＰＵは、スウィズルユニット２９２０によるレジスタ入力のスウィズル、数値変換ユニット２９２２Ａ〜Ｂによる数値変換、およびメモリ入力上での複製ユニット２９２４による複製をサポートする。ライトマスクレジスタ２９２６は、結果として生じるベクトル書き込みの予測を可能にする。
【０３１６】
図３０は、本発明の実施形態による、２つ以上のコアを有する場合があり、統合型メモリコントローラを有する場合があり、統合型グラフィックスを有する場合があるプロセッサ３０００のブロック図である。図３０の実線のボックスは、シングルコア３００２Ａ、システムエージェント３０１０、１つまたは複数のバスコントローラユニット３０１６のセットを有するプロセッサ３０００を示し、破線のボックスのオプション追加は、マルチコア３００２Ａ〜Ｎ、システムエージェントユニット３０１０内の１つまたは複数の統合メモリコントローラユニット３０１４のセット、および専用ロジック３００８を有する代替のプロセッサ３０００を示す。
【０３１７】
したがって、プロセッサ３０００の様々な実装形態は、１）（１つまたは複数のコアを含んでもよい）統合グラフィックスおよび／または科学（スループット）ロジックである専用ロジック３００８、ならびに１つまたは複数の汎用コア（たとえば、汎用インオーダコア、汎用アウトオブオーダコア、それら２つの組合せ）であるコア３００２Ａ〜Ｎを有するＣＰＵと、２）主にグラフィックスおよび／または科学（スループット）向けの多数の専用コアであるコア３００２Ａ〜Ｎを有するコプロセッサと、３）多数の汎用インオーダコアであるコア３００２Ａ〜Ｎを有するコプロセッサとを含んでもよい。したがって、プロセッサ３０００は、たとえば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理装置）、（３０以上のコアを含む）高スループット多統合コア（ＭＩＣ）コプロセッサ、組込み型プロセッサなどの、汎用プロセッサ、コプロセッサ、または専用プロセッサであってもよい。プロセッサは、１つまたは複数のチップ上に実装されてもよい。プロセッサ３０００は、たとえば、ＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳなどのいくつかのプロセス技術のいずれかを使用して、１つもしくは複数の基板の一部であってもよく、かつ／またはそれらの上に実装されてもよい。
【０３１８】
メモリ階層は、コア内の１つまたは複数のレベルのキャッシュ、１つもしくは複数の共有キャッシュユニット３００６のセット、および１組の統合メモリコントローラユニット３０１４に結合された外部メモリ（図示せず）を含む。１組の共有キャッシュユニット３００６は、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、もしくは他のレベルのキャッシュ、最終レベルキャッシュ（ＬＬＣ）、および／またはそれらの組合せなどの、１つまたは複数の中間レベルキャッシュを含んでもよい。１つの実施形態では、リングベースの相互接続ユニット３０１２は、統合グラフィックスロジック３００８（統合グラフィックスロジック３００８は、本明細書では専用ロジックの一例であり、専用ロジックとも呼ばれる）、１組の共有キャッシュユニット３００６、およびシステムエージェントユニット３０１０／統合メモリコントローラユニット３０１４と相互接続するが、代替の実施形態は、そのようなユニットを相互接続するための任意の数のよく知られた技法を使用することができる。１つの実施形態では、１つまたは複数のキャッシュユニット３００６とコア３００２Ａ〜Ｎとの間で整合性が維持される。
【０３１９】
いくつかの実施形態では、コア３００２Ａ〜Ｎのうちの１つまたは複数は、マルチスレッド化することが可能である。システムエージェント３０１０は、コア３００２Ａ〜Ｎを調整し動作させる構成要素を含む。システムエージェントユニット３０１０は、たとえば、電力制御ユニット（ＰＣＵ）および表示ユニットを含んでもよい。ＰＣＵは、コア３００２Ａ〜Ｎおよび統合グラフィックスロジック３００８の電力状態を調整するために必要なロジックおよび構成要素であってもよく、それらを含んでもよい。表示ユニットは、１つまたは複数の外部接続ディスプレイを駆動するためのものである。
【０３２０】
コア３００２Ａ〜Ｎは、アーキテクチャ命令セットに関して同種であっても異種であってもよい、すなわち、コア３００２Ａ〜Ｎのうちの２つ以上が同じ命令セットを実行することが可能であってもよく、他のコアがその命令セットのサブセットまたは異なる命令セットのみを実行することが可能であってもよい。
【０３２１】
［例示的なコンピュータアーキテクチャ］
図３１〜図３４は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組込み型プロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスのための当該技術分野で知られた他のシステム設計およびシステム構成も適している。一般に、本明細書で開示されたプロセッサおよび／または他の実行ロジックを組み込むことが可能な多様なシステムまたは電子デバイスが一般的に適している。
【０３２２】
次に図３１を参照すると、本発明の１つの実施形態による、システム３１００のブロック図が示されている。システム３１００は、コントローラハブ３１２０に結合された１つまたは複数のプロセッサ３１１０、３１１５を含んでもよい。１つの実施形態では、コントローラハブ３１２０は、（別々のチップ上にあってもよい）グラフィックスメモリコントローラハブ（ＧＭＣＨ）３１９０および入力／出力ハブ（ＩＯＨ）３１５０を含み、ＧＭＣＨ３１９０は、メモリ３１４０およびコプロセッサ３１４５に結合されたメモリおよびグラフィックスコントローラを含み、ＩＯＨ３１５０は、入力／出力（Ｉ／Ｏ）デバイス３１６０をＧＭＣＨ３１９０に結合する。あるいは、メモリおよびグラフィックスコントローラの一方または両方は、（本明細書で説明されたように）プロセッサ内で統合され、メモリ３１４０およびコプロセッサ３１４５は、ＩＯＨ３１５０を有するシングルチップ内のプロセッサ３１１０およびコントローラハブ３１２０に直接結合される。
【０３２３】
追加のプロセッサ３１１５のオプションの特性は、破線で図３１に表記されている。各プロセッサ３１１０、３１１５は、本明細書で説明された処理コアのうちの１つまたは複数を含んでもよく、プロセッサ３０００のいくつかのバージョンであってもよい。
【０３２４】
メモリ３１４０は、たとえば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、またはそれら２つの組合せであってもよい。少なくとも１つの実施形態の場合、コントローラハブ３１２０は、フロントサイドバス（ＦＳＢ）などのマルチドロップバス、ＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＱＰＩ）などのポイントツーポイントインターフェース、または同様の接続３１９５を介してプロセッサ３１１０、３１１５と通信する。
【０３２５】
１つの実施形態では、コプロセッサ３１４５は、たとえば、高スループットＭＩＣプロセッサ、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組込み型プロセッサなどの専用プロセッサである。１つの実施形態では、コントローラハブ３１２０は、統合グラフィックスアクセラレータを含んでもよい。
【０３２６】
アーキテクチャ特性、マイクロアーキテクチャ特性、熱特性、電力消費特性などを含むメリットの一連のメトリックに関して、物理リソース３１１０、３１１５の間には様々な違いがあり得る。
【０３２７】
１つの実施形態では、プロセッサ３１１０は、一般的なタイプのデータ処理動作を制御する命令を実行する。命令内にコプロセッサ命令が組み込まれてもよい。プロセッサ３１１０は、これらのコプロセッサ命令を、付属コプロセッサ３１４５によって実行されるべきタイプの命令として認識する。それに応じて、プロセッサ３１１０は、コプロセッサバスまたは他の相互接続上でこれらのコプロセッサ命令（またはコプロセッサ命令を表す制御信号）をコプロセッサ３１４５に発行する。コプロセッサ３１４５は、受信されたコプロセッサ命令を受け入れて実行する。
【０３２８】
次に図３２を参照すると、本発明の一実施形態による、第１のより具体的で例示的なシステム３２００のブロック図が示されている。図３２に示されたように、マルチプロセッサシステム３２００はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続３２５０を介して結合された第１のプロセッサ３２７０および第２のプロセッサ３２８０を含む。プロセッサ３２７０および３２８０の各々は、プロセッサ３０００の何らかのバージョンであってもよい。本発明の１つの実施形態では、プロセッサ３２７０および３２８０は、それぞれプロセッサ３１１０および３１１５であり、コプロセッサ３２３８はコプロセッサ３１４５である。別の実施形態では、プロセッサ３２７０および３２８０は、それぞれプロセッサ３１１０およびコプロセッサ３１４５である。
【０３２９】
それぞれ統合メモリコントローラ（ＩＭＣ）ユニット３２７２および３２８２を含む、プロセッサ３２７０および３２８０が示されている。プロセッサ３２７０はまた、そのバスコントローラユニットの一部としてポイントツーポイント（Ｐ−Ｐ）インターフェース３２７６および３２７８を含み、同様に、第２のプロセッサ３２８０はＰ−Ｐインターフェース３２８６および３２８８を含む。プロセッサ３２７０、３２８０は、Ｐ−Ｐインターフェース回路３２７８、３２８８を使用して、ポイントツーポイント（Ｐ−Ｐ）インターフェース３２５０を介して情報を交換することができる。図３２に示されたように、ＩＭＣ３２７２および３２８２は、プロセッサをそれぞれのメモリに、すなわち、それぞれのプロセッサにローカルに接続されたメインメモリの一部であってもよいメモリ３２３２およびメモリ３２３４に結合する。
【０３３０】
プロセッサ３２７０、３２８０は、各々、ポイントツーポイントインターフェース回路３２７６、３２９４、３２８６、３２９８を使用して、個別のＰ−Ｐインターフェース３２５２、３２５４を介してチップセット３２９０と情報を交換することができる。チップセット３２９０は、場合によっては、高性能インターフェース３２９２を介してコプロセッサ３２３８と情報を交換することができる。１つの実施形態では、コプロセッサ３２３８は、たとえば、高スループットＭＩＣプロセッサ、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組込み型プロセッサなどの専用プロセッサである。
【０３３１】
共有キャッシュ（図示せず）は、プロセッサ、またはＰ−Ｐ相互接続を介してプロセッサとすでに接続されている両方のプロセッサの外部のいずれかに含まれ、その結果、プロセッサが低電力モードに入れられた場合、いずれかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュに記憶されてもよい。
【０３３２】
チップセット３２９０は、インターフェース３２９６を介して第１のバス３２１６に結合されてもよい。１つの実施形態では、第１のバス３２１６は、周辺装置相互接続（ＰＣＩ）バス、またはＰＣＩエクスプレスバスもしくは別の第３世代Ｉ／Ｏ相互接続バスなどのバスであってもよいが、本発明の範囲はそのように限定されない。
【０３３３】
図３２に示されたように、第１のバス３２１６を第２のバス３２２０に結合するバスブリッジ３２１８とともに、様々なＩ／Ｏデバイス３２１４が第１のバス３２１６に結合されてもよい。１つの実施形態では、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵ、（たとえば、グラフィックスアクセラレータもしくはデジタル信号処理（ＤＳＰ）ユニットなどの）アクセラレータ、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサなどの１つまたは複数の追加のプロセッサ３２１５が、第１のバス３２１６に結合される。１つの実施形態では、第２のバス３２２０は、ローピンカウント（ＬＰＣ）バスであってもよい。１つの実施形態では、たとえば、キーボードおよび／またはマウス３２２２、通信デバイス３２２７、ならびに命令／コードおよびデータ３２３０を含む場合があるディスクドライブまたは他の大容量記憶装置などの記憶ユニット３２２８を含む、様々なデバイスが第２のバス３２２０に結合されてもよい。さらに、オーディオＩ／Ｏ３２２４が第２のバス３２２０に結合されてもよい。他のアーキテクチャも可能であることに留意されたい。たとえば、図３２のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバスまたは他のそのようなアーキテクチャを実装することができる。
【０３３４】
次に図３３を参照すると、本発明の一実施形態による、第２のより具体的で例示的なシステム３３００のブロック図が示されている。図３２および図３３の同様の要素は同様の参照番号をもち、図３３の他の態様を曖昧にすることを回避するために、図３２のいくつかの態様は図３３から省略されている。
【０３３５】
図３３は、プロセッサ３２７０、３２８０が、それぞれ統合メモリならびにＩ／Ｏ制御ロジック（「ＣＬ」）３２７２および３２８２を含んでもよいことを示す。したがって、ＣＬ３２７２、３２８２は、統合メモリコントローラユニットを含み、Ｉ／Ｏ制御ロジックを含む。図３３は、メモリ３２３２、３２３４がＣＬ３２７２、３２８２に結合されることだけでなく、Ｉ／Ｏデバイス３３１４も制御ロジック３２７２、３２８２に結合されることを示す。レガシーＩ／Ｏデバイス３３１５はチップセット３２９０に結合される。
【０３３６】
次に図３４を参照すると、本発明の一実施形態による、ＳｏＣ３４００のブロック図が示されている。図３０の同様の要素は同様の参照番号をもつ。また、破線のボックスは、より高度なＳｏＣ上のオプション機能である。図３４では、相互接続ユニット３４０２は、キャッシュユニット３００４Ａ〜Ｎを含む１つまたは複数のコア３００２Ａ〜Ｎのセット、および共有キャッシュユニット３００６を含むアプリケーションプロセッサ３４１０、システムエージェントユニット３０１０、バスコントローラユニット３０１６、統合メモリコントローラユニット３０１４、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、およびビデオプロセッサを含んでもよい１つまたは複数のコプロセッサ３４２０のセット、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット３４３０、ダイレクトメモリアクセス（ＤＭＡ）ユニット３４３２、ならびに１つまたは複数の外部ディスプレイに結合するための表示ユニット３４４０に結合される。１つの実施形態では、コプロセッサ３４２０は、たとえば、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、組込み型プロセッサなどの専用プロセッサを含む。
【０３３７】
本明細書で開示されたメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装手段の組合せに実装されてもよい。本発明の実施形態は、少なくとも１つのプロセッサと、（揮発性および不揮発性のメモリならびに／または記憶要素を含む）ストレージシステムと、少なくとも１つの入力デバイスと、少なくとも１つの出力デバイスとを備えるプログラマブルシステム上で実行される、コンピュータプログラムまたはプログラムコードとして実装されてもよい。
【０３３８】
図３２に示されたコード３２３０などのプログラムコードは、本明細書で説明された機能を実行し、出力情報を生成するために、入力命令に適用されてもよい。出力情報は、既知の方式で１つまたは複数の出力デバイスに適用されてもよい。本出願の目的のために、処理システムは、たとえば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【０３３９】
プログラムコードは、処理システムと通信するために、高水準手続き型またはオブジェクト指向のプログラミング言語で実装されてもよい。プログラムコードはまた、必要な場合、アセンブリ言語または機械語で実装されてもよい。実際には、本明細書で説明されたメカニズムは、いかなる特定のプログラミング言語にも範囲が限定されない。いずれにせよ、言語はコンパイルまたは解釈された言語であってもよい。
【０３４０】
少なくとも１つの実施形態の１つまたは複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体に記憶された代表的な命令によって実装されてもよく、機械可読媒体は、機械によって読み取られると、機械に本明細書で説明された技法を実行するようにロジックを組み立てさせる。「ＩＰコア」として知られるそのような表現は、有形の機械可読媒体に記憶され、実際にロジックまたはプロセッサを製造する製造機械にロードするために様々な顧客または製造施設に供給されてもよい。
【０３４１】
そのような機械可読記憶媒体には、ハードディスク、フロッピーディスク、光ディスク、コンパクトディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ−ＲＷ）、および光磁気ディスクを含む任意の他のタイプのディスク、読み出し専用メモリ（ＲＯＭ）などの半導体デバイス、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、消去可能プログラム可能型読み出し専用メモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラム可能型読み出し専用メモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）、磁気カードもしくは光学式カード、または電子命令を記憶するのに適した任意の他のタイプの媒体などの記憶媒体を含む、機械またはデバイスによって製造または形成された物品の非一時的有形構成が含まれてもよいが、それらに限定されない。
【０３４２】
したがって、本発明の実施形態は、本明細書で説明された構造、回路、装置、プロセッサ、および／またはシステムの機能を定義する、ハードウェア記述言語（ＨＤＬ）などの命令を含むか、または設計データを含む非一時的有形機械可読媒体も含む。そのような実施形態は、プログラム製品と呼ばれる場合もある。
【０３４３】
［（バイナリ変換、コードモーフィングなどを含む）エミュレーション］
場合によっては、命令をソース命令セットからターゲット命令セットに変換するために、命令コンバータが使用されてもよい。たとえば、命令コンバータは、命令をコアによって処理されるべき１つまたは複数の他の命令に、（たとえば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して）解釈し、変形させ、エミュレートし、または場合によっては変換することができる。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組合せに実装されてもよい。命令コンバータは、プロセッサ上にあっても、プロセッサ外にあっても、または部分的にプロセッサ上および部分的にプロセッサ外にあってもよい。
【０３４４】
図３５は、本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するソフトウェア命令コンバータの使用を対比するブロック図である。図示された実施形態では、命令コンバータはソフトウェア命令コンバータであるが、代替として、命令コンバータはソフトウェア、ファームウェア、ハードウェア、またはそれらの様々な組合せに実装されてもよい。図３５は、少なくとも１つのｘ８６命令セットコアをもつプロセッサ３５１６によってネイティブに実行され得るｘ８６バイナリコード３５０６を生成するために、ｘ８６コンパイラ３５０４を使用して高水準言語３５０２のプログラムがコンパイルされ得ることを示す。少なくとも１つのｘ８６命令セットコアをもつプロセッサ３５１６は、少なくとも１つのｘ８６命令セットコアをもつインテルプロセッサと実質的に同じ結果を達成するために、（１）インテルｘ８６命令セットコアの命令セットのかなりの部分、または（２）少なくとも１つのｘ８６命令セットコアをもつインテルプロセッサ上で実行することを目的としたアプリケーションもしくは他のソフトウェアのオブジェクトコードバージョンを互換的に実行または場合によっては処理することにより、少なくとも１つのｘ８６命令セットコアをもつインテルプロセッサと実質的に同じ機能を実行することができる任意のプロセッサを表す。ｘ８６コンパイラ３５０４は、追加のリンケージ処理をもつかまたはもたずに、少なくとも１つのｘ８６命令セットコアをもつプロセッサ３５１６上で実行することができるｘ８６バイナリコード３５０６（たとえば、オブジェクトコード）を生成するように動作可能なコンパイラを表す。同様に、図３５は、少なくとも１つのｘ８６命令セットコアをもたないプロセッサ３５１４（たとえば、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セットを実行し、かつ／またはカリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇのＡＲＭ命令セットを実行するコアをもつプロセッサ）によってネイティブに実行され得る代替の命令セットバイナリコード３５１０を生成するために、代替の命令セットコンパイラ３５０８を使用して高水準言語３５０２のプログラムがコンパイルされ得ることを示す。命令コンバータ３５１２は、ｘ８６バイナリコード３５０６を、ｘ８６命令セットコアをもたないプロセッサ３５１４によってネイティブに実行され得るコードに変換するために使用される。これを可能にする命令コンバータは作るのが難しいので、この変換されたコードは代替の命令セットバイナリコード３５１０と同じである可能性は低いが、変換されたコードは一般的な演算を遂行し、代替の命令セットからの命令で構成される。したがって、命令コンバータ３５１２は、エミュレーション、シミュレーション、または任意の他のプロセスを介して、ｘ８６命令セットプロセッサまたはコアをもたないプロセッサまたは他の電子デバイスがｘ８６バイナリコード３５０６を実行することを可能にする、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せを表す。
【０３４５】
［さらなる例］
例１は、１組の命令がフェッチされるまで１つまたは複数の命令をフェッチするフェッチ回路であって、各命令がソースおよびデスティネーションタイルオペランドを指定する、フェッチ回路と、フェッチされた１組の命令を復号する復号回路と、復号された１組の命令に応答して、命令チェーンに属する復号された第１および第２の命令を識別することと、復号された第１および第２の命令を実行する第１および第２の処理エンジン（ＰＥ）を有するＳＩＭＤ経路を動的に選択し構成することと、復号された第１の命令の指定されたデスティネーションを破棄し、代わりに、復号された第２の命令を実行するために第２のＰＥによって使用されるように、第１のＰＥからの復号された第１の命令の結果を送ることとを行う実行回路とを備える、例示的な単一命令複数データ（ＳＩＭＤ）プロセッサを提供する。
【０３４６】
例２は例１の例示的なプロセッサの実体を含み、１組の命令は少なくとも１つの命令を備え、命令チェーンの各々は、命令がチェーンの一部であることを実行回路に判定させるチェーン制御フィールドをさらに備え、チェーン制御フィールドの各々は、チェーン内の最後の命令をマークするために、チェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒントのうちの１つを備えるチェーン位置ヒントを示し、チェーン制御フィールドは、チェーンの存在を判定することと、命令チェーンを実行するようにＳＩＭＤ経路を動的に選択し構成することと、チェーン内の最後を除くすべての命令の指定されたデスティネーションを破棄することと、最後を除くすべての命令の結果をチェーン内の次の命令を実行するＰＥに送ることとを実行回路に行わせる。
【０３４７】
例３は例１の例示的なプロセッサの実体を含み、復号された第１および第２の命令は、異なるオペコードを指定して異なる第１および第２の算術演算を指定し、選択された第１および第２の処理エンジンは、それぞれ、第１の算術演算および第２の算術演算を専門に扱う限定された機能を有する。
【０３４８】
例４は例２の例示的なプロセッサの実体を含み、命令チェーンの第１の命令はチェーン制御フィールドをさらに備え、チェーン制御フィールドは、チェーンまたは命令の一部であるように、第１の命令および１つまたは複数の後続の命令を識別するチェーンヘッダを備える。
【０３４９】
例５は例１の例示的なプロセッサの実体を含み、指定されたソースおよびデスティネーションの行列（タイル）は、各々Ｍ行Ｎ列の要素を備え、１行のみに有効な要素を含む。
【０３５０】
例６は例１の例示的なプロセッサの実体を含み、実行回路はさらに、指定されたデスティネーションを破棄した命令の記録を保持し、必要に応じて、記録された１組の命令をロールバックし再実行する。
【０３５１】
例７は例１の例示的なプロセッサの実体を含み、実行回路はさらに、破棄の前の機械状態を保存し、その後、機械状態整合性チェックを実行して、破棄によって生じたあらゆる不整合を検出する。
【０３５２】
例８は例１の例示的なプロセッサの実体を含み、１組の命令は少なくとも２つの命令を備え、実行回路は、１組の命令をバッファリングし、２つ以上の命令の間のデータ依存性を検出して、２つ以上の命令がチェーンの一部であることを判定するバイナリトランスレータをさらに備える。
【０３５３】
例９は例１の例示的なプロセッサの実体を含み、実行回路はさらに、破棄することに対してオペレーティングシステムに警告することを回避する。
【０３５４】
例１０は例１の例示的なプロセッサの実体を含み、第１の命令のデスティネーションとして指定されたタイルは、タイル構成をさらに備え、実行回路はさらに、破棄の前にタイル構成内のダーティビットを設定し、ダーティタイルが後続の命令によって読み取られた場合に故障を発生させる。
【０３５５】
例１１は、フェッチ回路を使用して、１組の命令を備える１つまたは複数の命令をフェッチするステップであって、各々がソースおよびデスティネーションの行列（タイル）を指定する、ステップと、復号回路を使用して、フェッチされた１組の命令を復号するステップと、実行回路を使用して、命令チェーンに属する復号された第１および第２の命令を識別することと、復号された第１および第２の命令を実行する第１および第２の処理エンジン（ＰＥ）を有するＳＩＭＤ経路を動的に選択し構成することと、復号された第１の命令の指定されたデスティネーションを破棄し、代わりに、復号された第２の命令を実行するために第２のＰＥによって使用されるように、第１のＰＥからの復号された第１の命令の結果を送ることとを行うように、復号された１組の命令を実行するステップとを備える、単一命令複数データ（ＳＩＭＤ）プロセッサによって実行される例示的な方法を提供する。
【０３５６】
例１２は例１１の例示的な方法の実体を含み、１組の命令は少なくとも１つの命令を備え、命令チェーンの各々は、命令がチェーンの一部であることを実行回路に判定させるチェーン制御フィールドをさらに備え、チェーン制御フィールドの各々は、チェーン内の最後の命令をマークするために、チェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒントのうちの１つを備えるチェーン位置ヒントを示し、チェーン制御フィールドは、チェーンの存在を判定することと、命令チェーンを実行するようにＳＩＭＤ経路を動的に選択し構成することと、チェーン内の最後を除くすべての命令の指定されたデスティネーションを破棄することと、最後を除くすべての命令の結果をチェーン内の次の命令を実行するＰＥに送ることとを実行回路に行わせる。
【０３５７】
例１３は例１１の例示的な方法の実体を含み、復号された第１および第２の命令は、異なるオペコードを指定して異なる第１および第２の算術演算を指定し、選択された第１および第２の処理エンジンは、それぞれ、第１の算術演算および第２の算術演算を専門に扱う限定された機能を有する。
【０３５８】
例１４は例１１の例示的な方法の実体を含み、命令チェーンの第１の命令はチェーン制御フィールドをさらに備え、チェーン制御フィールドは、チェーンまたは命令の一部であるように、第１の命令および１つまたは複数の後続の命令を識別するチェーンヘッダを備える。
【０３５９】
例１５は例１１の例示的な方法の実体を含み、指定されたソースおよびデスティネーションの行列（タイル）は、各々Ｍ行Ｎ列の要素を備え、１行のみに有効な要素を含む。
【０３６０】
例１６は例１１の例示的な方法の実体を含み、実行回路はさらに、指定されたデスティネーションを破棄した命令の記録を保持し、必要に応じて記録された命令のうちの１つまたは複数をロールバックし再実行する。
【０３６１】
例１７は例１１の例示的な方法の実体を含み、実行回路はさらに、破棄の前の機械状態を保存し、その後、機械状態整合性チェックを実行して、破棄によって生じたあらゆる不整合を検出する。
【０３６２】
例１８は例１１の例示的な方法の実体を含み、１組の命令は少なくとも２つの命令を備え、実行回路は、１組の命令をバッファリングし、２つ以上の命令の間のデータ依存性を検出して、２つ以上の命令がチェーンの一部であることを判定するバイナリトランスレータをさらに備える。
【０３６３】
例１９は例１１の例示的な方法の実体を含み、実行回路はさらに、破棄することに対してオペレーティングシステムに警告することを回避する。
【０３６４】
例２０は例１１の例示的な方法の実体を含み、第１の命令のデスティネーションとして指定されたタイルは、タイル構成をさらに備え、実行回路はさらに、破棄の前にタイル構成内のダーティビットを設定し、ダーティタイルが後続の命令によって読み取られた場合に故障を発生させる。
【０３６５】
例２１は、１組の命令がフェッチされるまで１つまたは複数の命令をフェッチするための手段であって、各命令がソースおよびデスティネーションタイルオペランドを指定する、手段と、フェッチされた１組の命令を復号するための手段と、復号された１組の命令に応答して、命令チェーンに属する復号された第１および第２の命令を識別することと、復号された第１および第２の命令を実行する第１および第２の処理エンジン（ＰＥ）を有するＳＩＭＤ経路を動的に選択し構成することと、復号された第１の命令の指定されたデスティネーションを破棄し、代わりに、復号された第２の命令を実行するために第２のＰＥによって使用されるように、第１のＰＥからの復号された第１の命令の結果を送ることとを実行するための手段とを備える、例示的な装置を提供する。
【０３６６】
例２２は例２１の例示的な装置の実体を含み、１組の命令は少なくとも１つの命令を備え、命令チェーンの各々は、命令がチェーンの一部であることを実行するための手段に判定させるチェーン制御フィールドをさらに備え、チェーン制御フィールドの各々は、チェーン内の最後の命令をマークするために、チェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒントのうちの１つを備えるチェーン位置ヒントを示し、チェーン制御フィールドは、チェーンの存在を判定することと、命令チェーンを実行するようにＳＩＭＤ経路を動的に選択し構成することと、チェーン内の最後を除くすべての命令の指定されたデスティネーションを破棄することと、最後を除くすべての命令の結果をチェーン内の次の命令を実行するＰＥに送ることとを実行するための手段に行わせる。
【０３６７】
例２３は例２１の例示的な装置の実体を含み、復号された第１および第２の命令は、異なるオペコードを指定して異なる第１および第２の算術演算を指定し、選択された第１および第２の処理エンジンは、それぞれ、第１の算術演算および第２の算術演算を専門に扱う限定された機能を有する。
【０３６８】
例２４は例２２の例示的な装置の実体を含み、命令チェーンの第１の命令はチェーン制御フィールドをさらに備え、チェーン制御フィールドは、チェーンまたは命令の一部であるように、第１の命令および１つまたは複数の後続の命令を識別するチェーンヘッダを備える。
【０３６９】
例２５は例２１の例示的な装置の実体を含み、指定されたソースおよびデスティネーションの行列（タイル）は、各々Ｍ行Ｎ列の要素を備え、１行のみに有効な要素を含む。
【０３７０】
例２６は例２１の例示的な装置の実体を含み、実行するための手段はさらに、指定されたデスティネーションを破棄した命令の記録を保持し、必要に応じて、記録された１組の命令をロールバックし再実行する。
【０３７１】
例２７は例２１の例示的な装置の実体を含み、実行するための手段はさらに、破棄の前の機械状態を保存し、その後、機械状態整合性チェックを実行して、破棄によって生じたあらゆる不整合を検出する。
【０３７２】
例２８は例２１の例示的な装置の実体を含み、１組の命令は少なくとも２つの命令を備え、実行するための手段は、１組の命令をバッファリングし、２つ以上の命令の間のデータ依存性を検出して、２つ以上の命令がチェーンの一部であることを判定するバイナリトランスレータをさらに備える。
【０３７３】
例２９は例２１の例示的な装置の実体を含み、実行するための手段はさらに、破棄することに対してオペレーティングシステムに警告することを回避する。
【０３７４】
例３０は例２１の例示的な装置の実体を含み、第１の命令のデスティネーションとして指定されたタイルは、タイル構成をさらに備え、実行するための手段はさらに、破棄の前にタイル構成内のダーティビットを設定し、ダーティタイルが後続の命令によって読み取られた場合に故障を発生させる。
【０３７５】
例３１は、単一命令複数データ（ＳＩＭＤ）プロセッサによってアクセスされると、フェッチ回路を使用して、１組の命令を備える１つまたは複数の命令をフェッチするステップであって、各々がソースおよびデスティネーションの行列（タイル）を指定する、ステップと、復号回路を使用して、フェッチされた１組の命令を復号するステップと、実行回路を使用して、命令チェーンに属する復号された第１および第２の命令を識別することと、復号された第１および第２の命令を実行する第１および第２の処理エンジン（ＰＥ）を有するＳＩＭＤ経路を動的に選択し構成することと、復号された第１の命令の指定されたデスティネーションを破棄し、代わりに、復号された第２の命令を実行するために第２のＰＥによって使用されるように、第１のＰＥからの復号された第１の命令の結果を送ることとを行うように、復号された１組の命令を実行するステップとによってプロセッサに応答させる、命令を含む例示的な非一時的機械可読媒体を提供する。
【０３７６】
例３２は例３１の例示的な非一時的機械可読媒体の実体を含み、１組の命令は少なくとも１つの命令を備え、命令チェーンの各々は、命令がチェーンの一部であることを実行回路に判定させるチェーン制御フィールドをさらに備え、チェーン制御フィールドの各々は、チェーン内の最後の命令をマークするために、チェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒントのうちの１つを備えるチェーン位置ヒントを示し、チェーン制御フィールドは、チェーンの存在を判定することと、命令チェーンを実行するようにＳＩＭＤ経路を動的に選択し構成することと、チェーン内の最後を除くすべての命令の指定されたデスティネーションを破棄することと、最後を除くすべての命令の結果をチェーン内の次の命令を実行するＰＥに送ることとを実行回路に行わせる。
【０３７７】
例３３は例３１の例示的な非一時的機械可読媒体の実体を含み、復号された第１および第２の命令は、異なるオペコードを指定して異なる第１および第２の算術演算を指定し、選択された第１および第２の処理エンジンは、それぞれ、第１の算術演算および第２の算術演算を専門に扱う限定された機能を有する。
【０３７８】
例３４は例３１の例示的な非一時的機械可読媒体の実体を含み、命令チェーンの第１の命令はチェーン制御フィールドをさらに備え、チェーン制御フィールドは、チェーンまたは命令の一部であるように、第１の命令および１つまたは複数の後続の命令を識別するチェーンヘッダを備える。
【０３７９】
例３５は例３１の例示的な非一時的機械可読媒体の実体を含み、指定されたソースおよびデスティネーションの行列（タイル）は、各々Ｍ行Ｎ列の要素を備え、１行のみに有効な要素を含む。
【０３８０】
例３６は例３１の例示的な非一時的機械可読媒体の実体を含み、プロセッサはさらに、指定されたデスティネーションを破棄した命令の記録を保持し、必要に応じて記録された命令のうちの１つまたは複数をロールバックし再実行することによって応答する。
【０３８１】
例３７は例３１の例示的な非一時的機械可読媒体の実体を含み、プロセッサはさらに、破棄の前の機械状態を保存し、その後、機械状態整合性チェックを実行して、破棄によって生じたあらゆる不整合を検出することによって応答する。
【０３８２】
例３８は例３１の例示的な非一時的機械可読媒体の実体を含み、１組の命令は少なくとも２つの命令を備え、プロセッサはさらに、１組の命令をバッファリングし、２つ以上の命令の間のデータ依存性を検出して、２つ以上の命令がチェーンの一部であることを判定するバイナリトランスレータを使用することによって応答する。
【０３８３】
例３９は例３１の例示的な非一時的機械可読媒体の実体を含み、プロセッサはさらに、破棄することに対してオペレーティングシステムに警告することを回避することによって応答する。
【０３８４】
例４０は例３１の例示的な非一時的機械可読媒体の実体を含み、第１の命令のデスティネーションとして指定されたタイルは、タイル構成をさらに備え、プロセッサはさらに、破棄の前にタイル構成内のダーティビットを設定し、ダーティタイルが後続の命令によって読み取られた場合に故障を発生させることによって応答する。
（項目１）
各々がそれぞれのソースタイルおよびデスティネーションタイルを指定するソースタイル指定子およびデスティネーションタイル指定子を有する複数の命令をフェッチするフェッチ回路と、
フェッチされた上記複数の命令を復号する復号回路と、
復号された上記複数の命令に応答して、
命令チェーンに属する復号された第１および第２の命令を識別することと、
復号された上記第１および第２の命令を実行する第１および第２の処理エンジン（ＰＥ）を有するＳＩＭＤ経路を動的に選択し構成することと、
復号された上記第１の命令の上記デスティネーションタイル指定子を破棄し、代わりに、復号された上記第２の命令を実行するために上記第２のＰＥによって使用されるように、復号された上記第１の命令の結果を上記第１のＰＥから上記第２のＰＥに送ることと
を行う実行回路と
を備える、プロセッサ。
（項目２）
上記複数の命令が少なくとも２つの命令を有し、上記命令チェーンの各命令が、上記命令がチェーンの一部であることを上記実行回路に判定させるチェーン制御フィールドをさらに備え、
上記チェーン制御フィールドが、上記チェーン内の最後の命令をマークするために、チェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒントのうちの１つを備えるチェーン位置ヒントを示し、上記チェーン制御フィールドが、上記チェーンの存在を判定することと、上記命令チェーンを実行するように上記ＳＩＭＤ経路を動的に選択し構成することと、上記チェーン内の最後を除くすべての命令の上記デスティネーションタイル指定子を破棄することと、代わりに最後を除くすべての命令の結果を上記チェーン内の次の命令を実行する次のＰＥに送ることとを上記実行回路に行わせる、
項目１に記載のプロセッサ。
（項目３）
復号された上記第１および第２の命令が、異なるオペコードを指定して異なる第１および第２の算術演算を指定し、選択された上記第１および第２の処理エンジンが、それぞれ、上記第１の算術演算および上記第２の算術演算を専門に扱う限定された機能を有する、項目１に記載のプロセッサ。
（項目４）
上記命令チェーンの第１の命令がチェーン制御フィールドをさらに有し、上記チェーン制御フィールドが、上記第１の命令および１つまたは複数の後続の命令を上記命令チェーンの一部であると識別するチェーンヘッダを含む、項目１に記載のプロセッサ。
（項目５）
指定された上記ソースタイルおよびデスティネーションタイルが、各々Ｍ行Ｎ列の要素を有し、１行のみに有効な要素を含む、項目１に記載のプロセッサ。
（項目６）
上記実行回路がさらに、各命令のデスティネーションタイル指定子を破棄させた命令の記録を保持し、必要に応じて記録された上記命令のうちの１つまたは複数をロールバックし再実行する、項目１に記載のプロセッサ。
（項目７）
上記実行回路がさらに、復号された上記第１の命令の上記デスティネーションタイル指定子を破棄する前に機械状態を保存し、その後、機械状態整合性チェックを実行して、復号された上記第１の命令の上記デスティネーションタイル指定子を破棄することによって生じたあらゆる不整合を検出する、項目１に記載のプロセッサ。
（項目８）
上記複数の命令が少なくとも２つの命令を有し、上記実行回路が、上記複数の命令をバッファリングし、２つ以上の命令の間のデータ依存性を検出して、上記２つ以上の命令が上記チェーンの一部であると判定するバイナリトランスレータをさらに備える、項目１に記載のプロセッサ。
（項目９）
上記フェッチ回路がさらに、上記複数の命令をフェッチする前にチェーン開始命令をフェッチし、上記チェーン開始命令が上記命令チェーン内の複数の命令を指定し、さらに少なくとも復号された上記第１の命令のターゲットを指定し、上記ターゲットが、復号された上記第１の命令の上記結果を送る先の上記命令チェーン内の上記複数の命令のうちの１つである、項目１に記載のプロセッサ。
（項目１０）
上記実行回路がさらに、復号された上記第１の命令の上記デスティネーションタイル指定子を破棄するときに上記第１の命令の指定された上記デスティネーションタイルのタイル構成内にダーティビットを設定し、上記ダーティタイルが後続の命令によって読み取られた場合に故障を発生させる、項目１に記載のプロセッサ。
（項目１１）
プロセッサによって実行される方法であって、
フェッチ回路を使用して、各々がそれぞれのソースタイルおよびデスティネーションタイルを指定するソースタイル指定子およびデスティネーションタイル指定子を有する複数の命令をフェッチするステップと、
復号回路を使用して、フェッチされた上記複数の命令を復号するステップと、
実行回路を使用して、
命令チェーンに属する復号された第１および第２の命令を識別することと、
復号された上記第１および第２の命令を実行する第１および第２の処理エンジン（ＰＥ）を有するＳＩＭＤ経路を動的に選択し構成することと、
復号された上記第１の命令の上記デスティネーションタイル指定子を破棄し、代わりに、復号された上記第２の命令を実行するために上記第２のＰＥによって使用されるように、復号された上記第１の命令の結果を上記第１のＰＥから上記第２のＰＥに送ることと
を行うように、復号された上記複数の命令を実行するステップと
を備える、方法。
（項目１２）
上記複数の命令が少なくとも２つの命令を有し、上記命令チェーンの各命令が、上記命令がチェーンの一部であることを上記実行回路に判定させるチェーン制御フィールドをさらに有し、
上記チェーン制御フィールドが、上記チェーン内の最後の命令をマークするために、チェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒントのうちの１つを備えるチェーン位置ヒントを示し、上記チェーン制御フィールドが、上記命令チェーンの存在を判定することと、上記命令チェーンを実行するように上記ＳＩＭＤ経路を動的に選択し構成することと、上記チェーン内の最後を除くすべての命令のデスティネーションタイル指定子を破棄することと、代わりに最後を除くすべての命令の結果を上記チェーン内の次の命令を実行する次のＰＥに送ることとを上記実行回路に行わせる、
項目１１に記載の方法。
（項目１３）
復号された上記第１および第２の命令が、異なるオペコードを指定して異なる第１および第２の算術演算を指定し、選択された上記第１および第２の処理エンジンが、それぞれ、上記第１の算術演算および上記第２の算術演算を専門に扱う限定された機能を有する、項目１１に記載の方法。
（項目１４）
上記命令チェーンの第１の命令がチェーン制御フィールドをさらに有し、上記チェーン制御フィールドが、上記チェーンまたは命令の一部であるように、上記第１の命令および１つまたは複数の後続の命令を識別するチェーンヘッダを含む、項目１１に記載の方法。
（項目１５）
上記指定されたソースタイルおよびデスティネーションタイルが、各々Ｍ行Ｎ列の要素を有し、１行のみに有効な要素を含む、項目１１に記載の方法。
（項目１６）
上記実行回路がさらに、各命令のデスティネーションタイル指定子を破棄した命令の記録を保持し、必要に応じて記録された上記命令をロールバックし再実行する、項目１１に記載の方法。
（項目１７）
上記実行回路がさらに、復号された上記第１の命令の上記デスティネーションタイル指定子を破棄する前に機械状態を保存し、その後、機械状態整合性チェックを実行して、復号された上記第１の命令の上記デスティネーションタイル指定子を破棄することによって生じたあらゆる不整合を検出する、項目１１に記載の方法。
（項目１８）
上記複数の命令が少なくとも２つの命令を有し、上記実行回路が、上記複数の命令をバッファリングし、２つ以上の命令の間のデータ依存性を検出して、上記２つ以上の命令が上記チェーンの一部であることを判定するバイナリトランスレータをさらに備える、項目１１に記載の方法。
（項目１９）
上記複数の命令をフェッチする前にチェーン開始命令をフェッチするステップをさらに備え、上記チェーン開始命令が上記命令チェーン内の複数の命令を指定し、さらに少なくとも復号された上記第１の命令のターゲットを指定し、上記ターゲットが、復号された上記第１の命令の上記結果を送る先の上記命令チェーン内の上記複数の命令のうちの１つである、項目１１に記載の方法。
（項目２０）
復号された上記第１の命令の上記デスティネーションタイル指定子を破棄するときに上記第１の命令の指定された上記デスティネーションタイルのタイル構成内に上記実行回路によってダーティビットを設定するステップをさらに備え、上記ダーティビットセットを有する指定された上記デスティネーションタイルが後続の命令によって読み取られた場合に故障を発生させる、項目１１に記載の方法。
（項目２１）
命令チェーンを実行するためのシステムであって、上記システムは、
メモリと、
プロセッサと
を備え、
上記プロセッサは、
各々がそれぞれのソースタイルおよびデスティネーションタイルを指定するソースタイル指定子およびデスティネーションタイル指定子を有する複数の命令をフェッチするフェッチ回路と、
フェッチされた上記複数の命令を復号する復号回路と、
復号された上記複数の命令に応答して、
命令チェーンに属する復号された第１および第２の命令を識別することと、
復号された上記第１および第２の命令を実行する第１および第２の処理エンジン（ＰＥ）を有するＳＩＭＤ経路を動的に選択し構成することと、
復号された上記第１の命令の上記デスティネーションタイル指定子を破棄し、代わりに、復号された上記第２の命令を実行するために上記第２のＰＥによって使用されるように、復号された上記第１の命令の結果を上記第１のＰＥから上記第２のＰＥに送ることとを行う実行回路と
を備える、システム。
（項目２２）
上記複数の命令が少なくとも２つの命令を有し、上記命令チェーンの各命令が、上記命令がチェーンの一部であることを上記実行回路に判定させるチェーン制御フィールドをさらに有し、
上記チェーン制御フィールドが、上記チェーン内の最後の命令をマークするために、チェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒントのうちの１つを含むチェーン位置ヒントを示し、上記チェーン制御フィールドが、上記チェーンの存在を判定することと、上記命令チェーンを実行するように上記ＳＩＭＤ経路を動的に選択し構成することと、上記チェーン内の最後を除くすべての命令の上記デスティネーションタイル指定子を破棄することと、最後を除くすべての命令の結果を上記チェーン内の次の命令を実行する次のＰＥに送ることとを上記実行回路に行わせる、
項目２１に記載のシステム。
（項目２３）
復号された上記第１および第２の命令が、異なるオペコードを指定して異なる第１および第２の算術演算を指定し、選択された上記第１および第２の処理エンジンが、それぞれ、上記第１の算術演算および上記第２の算術演算を専門に扱う限定された機能を有する、項目２１に記載のシステム。
（項目２４）
上記命令チェーンの第１の命令がチェーン制御フィールドをさらに有し、上記チェーン制御フィールドが、上記チェーンまたは命令の一部であるように、上記第１の命令および１つまたは複数の後続の命令を識別するチェーンヘッダを含む、項目２１に記載のシステム。
（項目２５）
上記フェッチ回路がさらに、上記複数の命令をフェッチする前にチェーン開始命令をフェッチし、上記チェーン開始命令が上記命令チェーン内の複数の命令を指定し、さらに少なくとも復号された上記第１の命令のターゲットを指定し、上記ターゲットが、復号された上記第１の命令の上記結果を送る先の上記命令チェーン内の上記複数の命令のうちの１つである、項目２１に記載のシステム。
【図１Ａ】
2019197531.tif 000010
【図１Ｂ】
2019197531.tif 000011
【図２】
2019197531.tif 000012
【図３】
2019197531.tif 000013
【図４】
2019197531.tif 000014
【図５】
2019197531.tif 000015
【図６】
2019197531.tif 000016
【図７】
2019197531.tif 000017
【図８】
2019197531.tif 000018
【図９】
2019197531.tif 000019
【図１０】
2019197531.tif 000020
【図１１】
2019197531.tif 000021
【図１２】
2019197531.tif 000022
【図１３】
2019197531.tif 000023
【図１４】
2019197531.tif 000024
【図１５】
2019197531.tif 000025
【図１６】
2019197531.tif 000026
【図１７】
2019197531.tif 000027
【図１８】
2019197531.tif 000028
【図１９】
2019197531.tif 000029
【図２０Ａ】
2019197531.tif 000030
【図２０Ｂ】
2019197531.tif 000031
【図２０Ｃ】
2019197531.tif 000032
【図２０Ｄ】
2019197531.tif 000033
【図２１Ａ】
2019197531.tif 000034
【図２１Ｂ】
2019197531.tif 000035
【図２２】
2019197531.tif 000036
【図２３】
2019197531.tif 000037
【図２４Ａ】
2019197531.tif 000038
【図２４Ｂ】
2019197531.tif 000039
【図２４Ｃ】
2019197531.tif 000040
【図２５Ａ】
2019197531.tif 000041
【図２５Ｂ】
2019197531.tif 000042
【図２５Ｃ】
2019197531.tif 000043
【図２５Ｄ】
2019197531.tif 000044
【図２６Ａ】
2019197531.tif 000045
【図２６Ｂ】
2019197531.tif 000046
【図２６Ｃ】
2019197531.tif 000047
【図２６Ｄ】
2019197531.tif 000048
【図２７】
2019197531.tif 000049
【図２８Ａ】
2019197531.tif 000050
【図２８Ｂ】
2019197531.tif 000051
【図２９Ａ】
2019197531.tif 000052
【図２９Ｂ】
2019197531.tif 000053
【図３０】
2019197531.tif 000054
【図３１】
2019197531.tif 000055
【図３２】
2019197531.tif 000056
【図３３】
2019197531.tif 000057
【図３４】
2019197531.tif 000058
【図３５】
2019197531.tif 000059
【外国語明細書】
2019197531000001.pdf