(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-04-30
(45)【発行日】2024-05-10
(54)【発明の名称】連鎖タイル演算を実施するためのシステムおよび方法
(51)【国際特許分類】
G06F 15/173 20060101AFI20240501BHJP
G06F 9/30 20180101ALI20240501BHJP
G06F 9/318 20180101ALI20240501BHJP
G06F 9/38 20180101ALI20240501BHJP
G06F 17/16 20060101ALI20240501BHJP
【FI】
G06F15/173 673
G06F9/30 310A
G06F9/318 A
G06F9/30 350A
G06F9/38 310J
G06F9/38 370A
G06F9/38 370X
G06F15/173 683C
G06F17/16 B
G06F17/16 H
【外国語出願】
(21)【出願番号】P 2019020233
(22)【出願日】2019-02-07
【審査請求日】2022-01-31
(32)【優先日】2018-03-30
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】クリストファー ジェイ. ヒューズ
(72)【発明者】
【氏名】アレクサンダー エフ. ハイネック
(72)【発明者】
【氏名】ロバート ヴァレンティン
(72)【発明者】
【氏名】ブレット トール
(72)【発明者】
【氏名】ジーザス コーバル
(72)【発明者】
【氏名】エルモウスタファ オウルド-アハメド-バル
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許出願公開第2016/0179551(US,A1)
【文献】特表2013-532855(JP,A)
【文献】特開2010-009102(JP,A)
【文献】米国特許出願公開第2002/0108026(US,A1)
【文献】米国特許出願公開第2011/0035568(US,A1)
【文献】米国特許出願公開第2016/0188483(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 15/173
G06F 9/30
G06F 9/318
G06F 9/38
G06F 17/16
(57)【特許請求の範囲】
【請求項1】
各々がそれぞれのソースタイルおよびデスティネーションタイルを指定するソースタイル指定子およびデスティネーションタイル指定子を有する複数の命令をフェッチするフェッチ回路と、
フェッチされた前記複数の命令を復号する復号回路と、
復号された前記複数の命令に応答して、
命令チェーンに属する復号された第1および第2の命令を識別することと、
復号された前記第1および第2の命令を実行する第1および第2の処理エンジン(PE)を有するSIMD経路を動的に選択し構成することと、
復号された前記第1の命令の前記デスティネーションタイル指定子
に対応する書き込みを行わないで、前記デスティネーションタイル指定子を使用せず、代わりに、復号された前記第2の命令を実行するために前記第2のPEによって使用されるように、復号された前記第1の命令の結果を前記第1のPEから前記第2のPEに送ることと
を行う実行回路と
を備え
、
前記実行回路がさらに、復号された前記第1の命令の前記デスティネーションタイル指定子を使用しない場合に前記第1の命令の指定された前記デスティネーションタイルのタイル構成内にダーティビットを設定し、前記ダーティビットが後続の命令によって読み取られた場合にフォルトを発生させる
プロセッサ。
【請求項2】
前記複数の命令が少なくとも2つの命令を有し、前記命令チェーンの各命令が、前記命令がチェーンの一部であることを前記実行回路に判定させるチェーン制御フィールドをさらに有し、
前記チェーン制御フィールドが、前記チェーン内の最後の命令をマークするために、チェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒント
の中から選択されたチェーン位置ヒントを示し、前記チェーン制御フィールドが前記実行回路に、前記チェーンの存在を判定して、前記命令チェーンを実行するように前記SIMD経路を動的に選択し構成することと、前記チェーン内の最後を除くすべての命令の前記デスティネーションタイル指定子を
使用しないことと、代わりに最後を除くすべての命令の結果を前記チェーン内の次の命令を実行する次のPEに送ることとを行わせ、
前記チェーン位置ヒントは、前記チェーン内の前記命令の相対位置を示すインデックスを指定する
請求項1に記載のプロセッサ。
【請求項3】
復号された前記第1および第2の命令が、異なるオペコードを指定して異なる第1および第2の算術演算を指定し、選択された前記第1および第2の処理エンジンが、それぞれ、前記第1の算術演算および前記第2の算術演算を専門に扱う限定された機能を有する、請求項1に記載のプロセッサ。
【請求項4】
前記命令チェーンの第1の命令がチェーン制御フィールドをさらに有し、前記チェーン制御フィールドが、前記第1の命令および1つまたは複数の後続の命令を前記命令チェーンの一部であると識別するチェーンヘッダを含む、請求項1に記載のプロセッサ。
【請求項5】
指定された前記ソースタイルおよびデスティネーションタイルが、各々M行N列の要素を有
する、請求項1から4のいずれか一項に記載のプロセッサ。
【請求項6】
前記実行回路がさらに、各命令のデスティネーションタイル指定子を
使用しなかった命令の記録を保持し、
前記使用しなかったことにより生じる問題が検出された場合に、記録された前記命令のうちの1つまたは複数をロールバックし再実行する、請求項1から4のいずれか一項に記載のプロセッサ。
【請求項7】
前記実行回路がさらに、復号された前記第1の命令の前記デスティネーションタイル指定子を
使用しないことの前に機械状態を保存し、その後、機械状態整合性チェックを実行して、復号された前記第1の命令の前記デスティネーションタイル指定子を
使用しないことによって生じたあらゆる不整合を検出する、請求項1から4のいずれか一項に記載のプロセッサ。
【請求項8】
前記複数の命令が少なくとも2つの命令を有し、前記実行回路が、前記複数の命令をバッファリングし、2つ以上の命令の間のデータ依存性を検出して、前記2つ以上の命令が前記命令チェーンの一部であると判定するバイナリトランスレータをさらに備え
、
前記データ依存性は、前記2つ以上の命令の一方の結果が前記2つ以上の命令の他方によって使用されることを示す、請求項1に記載のプロセッサ。
【請求項9】
前記フェッチ回路がさらに、前記複数の命令をフェッチする前にチェーン開始命令をフェッチし、前記チェーン開始命令が前記命令チェーン内の複数の命令を指定し、さらに少なくとも復号された前記第1の命令のターゲットを指定し、前記ターゲットが、復号された前記第1の命令の前記結果を送る先の前記命令チェーン内の前記複数の命令のうちの1つであ
り、前記チェーン開始命令は、命令チェーンが続くことを前記プロセッサに通知する、請求項1から4のいずれか一項に記載のプロセッサ。
【請求項10】
プロセッサによって実行される方法であって、前記方法は、
フェッチ回路を使用して、各々がそれぞれのソースタイルおよびデスティネーションタイルを指定するソースタイル指定子およびデスティネーションタイル指定子を有する複数の命令をフェッチするステップと、
復号回路を使用して、フェッチされた前記複数の命令を復号するステップと、
実行回路を使用して、
命令チェーンに属する復号された第1および第2の命令を識別することと、
復号された前記第1および第2の命令を実行する第1および第2の処理エンジン(PE)を有するSIMD経路を動的に選択し構成することと、
復号された前記第1の命令の前記デスティネーションタイル指定子
に対応する書き込みを行わないで、前記デスティネーションタイル指定子を使用せず、代わりに、復号された前記第2の命令を実行するために前記第2のPEによって使用されるように、復号された前記第1の命令の結果を前記第1のPEから前記第2のPEに送ることと
を行うように、復号された前記複数の命令を実行するステップと、
復号された前記第1の命令の前記デスティネーションタイル指定子を使用しない場合に前記第1の命令の指定された前記デスティネーションタイルのタイル構成内に前記実行回路によってダーティビットを設定し、前記ダーティビットを有する指定された前記デスティネーションタイルが後続の命令によって読み取られた場合にフォルトを発生させるステップと
を備える、方法。
【請求項11】
前記複数の命令が少なくとも2つの命令を有し、前記命令チェーンの各命令が、前記命令がチェーンの一部であることを前記実行回路に判定させるチェーン制御フィールドをさらに有し、
前記チェーン制御フィールドが、前記チェーン内の最後の命令をマークするために、チェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒント
の中から選択されたチェーン位置ヒントを示し、前記チェーン制御フィールドが、前記命令チェーンの存在を判定することと、前記命令チェーンを実行するように前記SIMD経路を動的に選択し構成することと、前記チェーン内の最後を除くすべての命令の宛先デスティネーションタイル指定子を
使用しないことと、代わりに最後を除くすべての命令の結果を前記チェーン内の次の命令を実行する次のPEに送ることとを前記実行回路に行わせ
、
前記チェーン位置ヒントは、前記チェーン内の前記命令の相対位置を示すインデックスを指定する
請求項
10に記載の方法。
【請求項12】
復号された前記第1および第2の命令が、異なるオペコードを指定して異なる第1および第2の算術演算を指定し、選択された前記第1および第2の処理エンジンが、それぞれ、前記第1の算術演算および前記第2の算術演算を専門に扱う限定された機能を有する、請求項
10に記載の方法。
【請求項13】
前記命令チェーンの第1の命令がチェーン制御フィールドをさらに有し、前記チェーン制御フィールドが、前記第1の命令および1つまたは複数の後続の命令を前記命令チェーンの一部であると識別するチェーンヘッダを含む、請求項
10に記載の方法。
【請求項14】
指定された前記ソースタイルおよびデスティネーションタイルが、各々M行N列の要素を有
する、請求項
10から
13のいずれか一項に記載の方法。
【請求項15】
前記実行回路がさらに、各命令のデスティネーションタイル指定子を
使用しなかった命令の記録を保持し、
前記使用しなかったことにより生じる問題が検出された場合に、記録された前記命令をロールバックし再実行する、請求項
10から
13のいずれか一項に記載の方法。
【請求項16】
前記実行回路がさらに、復号された前記第1の命令の前記デスティネーションタイル指定子を
使用しないことの前に機械状態を保存し、その後、機械状態整合性チェックを実行して、復号された前記第1の命令の前記デスティネーションタイル指定子を
使用しないことによって生じたあらゆる不整合を検出する、請求項
10から
13のいずれか一項に記載の方法。
【請求項17】
前記複数の命令が少なくとも2つの命令を有し、前記実行回路が、前記複数の命令をバッファリングし、2つ以上の命令の間のデータ依存性を検出して、前記2つ以上の命令が前記命令チェーンの一部であると判定するバイナリトランスレータをさらに備え
、
前記データ依存性は、前記2つ以上の命令の一方の結果が前記2つ以上の命令の他方によって使用されることを示す、請求項
10に記載の方法。
【請求項18】
前記複数の命令をフェッチする前にチェーン開始命令をフェッチするステップをさらに備え、前記チェーン開始命令が前記命令チェーン内の複数の命令を指定し、さらに少なくとも復号された前記第1の命令のターゲットを指定し、前記ターゲットが、復号された前記第1の命令の前記結果を送る先の前記命令チェーン内の前記複数の命令のうちの1つであ
り、前記チェーン開始命令は、命令チェーンが続くことを前記プロセッサに通知する、請求項
10から
13のいずれか一項に記載の方法。
【請求項19】
命令チェーンを実行するためのシステムであって、前記システムは、
メモリと、
プロセッサと
を備え、
前記プロセッサは、
各々がそれぞれのソースタイルおよびデスティネーションタイルを指定するソースタイル指定子およびデスティネーションタイル指定子を有する複数の命令をフェッチするフェッチ回路と、
フェッチされた前記複数の命令を復号する復号回路と、
復号された前記複数の命令に応答して、
命令チェーンに属する復号された第1および第2の命令を識別することと、
復号された前記第1および第2の命令を実行する第1および第2の処理エンジン(PE)を有するSIMD経路を動的に選択し構成することと、
復号された前記第1の命令の前記デスティネーションタイル指定子
に対応する書き込みを行わないで、前記デスティネーションタイル指定子を使用せず、代わりに、復号された前記第2の命令を実行するために前記第2のPEによって使用されるように、復号された前記第1の命令の結果を前記第1のPEから前記第2のPEに送ることと
を行う実行回路と
を有
し、
前記実行回路がさらに、復号された前記第1の命令の前記デスティネーションタイル指定子を使用しない場合に前記第1の命令の指定された前記デスティネーションタイルのタイル構成内にダーティビットを設定し、前記ダーティビットが後続の命令によって読み取られた場合にフォルトを発生させる
システム。
【請求項20】
前記複数の命令が少なくとも2つの命令を有し、前記命令チェーンの各命令が、前記命令がチェーンの一部であることを前記実行回路に判定させるチェーン制御フィールドをさらに有し、
前記チェーン制御フィールドが、前記チェーン内の最後の命令をマークするために、チェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒントのうちの1つを含むチェーン位置ヒントを示し、前記チェーン制御フィールドが、前記チェーンの存在を判定することと、前記命令チェーンを実行するように前記SIMD経路を動的に選択し構成することと、前記チェーン内の最後を除くすべての命令の前記デスティネーションタイル指定子を
使用しないことと、最後を除くすべての命令の結果を前記チェーン内の次の命令を実行する次のPEに送ることとを前記実行回路に行わせ、
前記チェーン位置ヒントは、前記チェーン内の前記命令の相対位置を示すインデックスを指定する
請求項
19に記載のシステム。
【請求項21】
復号された前記第1および第2の命令が、異なるオペコードを指定して異なる第1および第2の算術演算を指定し、選択された前記第1および第2の処理エンジンが、それぞれ、前記第1の算術演算および前記第2の算術演算を専門に扱う限定された機能を有する、請求項
19に記載のシステム。
【請求項22】
前記命令チェーンの第1の命令がチェーン制御フィールドをさらに有し、前記チェーン制御フィールドが、前記第1の命令および1つまたは複数の後続の命令を前記命令チェーンの一部であると識別するチェーンヘッダを含む、請求項
19に記載のシステム。
【請求項23】
前記フェッチ回路がさらに、前記複数の命令をフェッチする前にチェーン開始命令をフェッチし、前記チェーン開始命令が前記命令チェーン内の複数の命令を指定し、さらに少なくとも復号された前記第1の命令のターゲットを指定し、前記ターゲットが、復号された前記第1の命令の前記結果を送る先の前記命令チェーン内の前記複数の命令のうちの1つであ
り、前記チェーン開始命令は、命令チェーンが続くことを前記プロセッサに通知する、請求項
19から
22のいずれか一項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の分野は、一般に、コンピュータプロセッサアーキテクチャに関し、より詳細には、連鎖タイル演算を実施するためのシステムおよび方法に関する。
【背景技術】
【0002】
行列は、機械学習および他の大容量データ処理などの多くのコンピューティングタスクでますます重要になっている。
【図面の簡単な説明】
【0003】
本発明は、添付図面の図において限定ではなく例として示されており、それらの中で、同様の参照符号は同様の要素を示している。
【0004】
【
図1A】構成されたタイルの一実施形態を示す図である。
【0005】
【
図1B】構成されたタイルの一実施形態を示す図である。
【0006】
【
図2】行列ストレージのいくつかの例を示す図である。
【0007】
【
図3】タイル演算アクセラレータを利用するシステムの一実施形態を示す図である。
【0008】
【
図4】行列演算アクセラレータを使用してどのようにメモリが共有されるかの一実施形態を示す図である。
【
図5】行列演算アクセラレータを使用してどのようにメモリが共有されるかの別の実施形態を示す図である。
【0009】
【
図6】タイル(「TMMA」)を使用する行列乗累算演算の一実施形態を示す図である。
【0010】
【
図7】連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す図である。
【0011】
【
図8】連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す図である。
【0012】
【
図9】連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す図である。
【0013】
【
図10】連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す図である。
【0014】
【
図11】一実施形態による、乗算器への入力よりも大きい入力サイズをアキュムレータが使用する、2のべき乗サイズのSIMDの実装形態を示す図である。
【0015】
【
図12】行列演算回路を利用するシステムの一実施形態を示す図である。
【0016】
【
図13】タイルを使用する行列演算をサポートするプロセッサコアパイプラインの一実施形態を示す図である。
【0017】
【
図14】タイルを使用する行列演算をサポートするプロセッサコアパイプラインの一実施形態を示す図である。
【0018】
【
図15】行優先フォーマットおよび列優先フォーマットで表現された行列の一例を示す図である。
【0019】
【
図16】行列(タイル)の使用に関する一例を示す図である。
【0020】
【
図17】行列(タイル)の使用方法の一実施形態を示す図である。
【0021】
【
図18】一実施形態による、タイルの使用の構成用のサポートを示す図である。
【0022】
【
図19】サポートされるべき行列(タイル)の記述の一実施形態を示す図である。
【0023】
【0024】
【
図21A】最適化可能なタイル命令チェーンの例示的な実行を示すブロックフロー図である。
【0025】
【
図21B】いくつかの実施形態による、タイル命令チェーンの最適化された実行を示すブロックフロー図である。
【0026】
【
図22】一実施形態による、連鎖タイル命令に応答するプロセッサの実行フローを示すブロックフロー図である。
【0027】
【
図23】一実施形態による、連鎖タイル命令の実行のより詳細な説明を示す図である。
【0028】
【
図24A】一実施形態による、連鎖タイル命令を実行するプロセッサの一実施形態を説明する例示的な疑似コードの図である。
【0029】
【
図24B】いくつかの実施形態による、最適化されていないタイル命令チェーンを示す疑似コードの図である。
【0030】
【
図24C】いくつかの実施形態による、最適化されたタイル命令チェーンを実行するプロセッサ実行回路による実行フローを示す疑似コードの図である。
【0031】
図25A~
図25Dは、本発明の実施形態による、命令フォーマットを示すブロック図である。
【0032】
【
図25A】本発明の実施形態による、チェーンフレンドリ命令フォーマットを示すブロック図である。
【0033】
【
図25B】本発明の実施形態による、チェーン開始命令フォーマットを示すブロック図である。
【0034】
【
図25C】本発明の実施形態による、汎用ベクトルフレンドリ命令フォーマットおよびそのクラスA命令テンプレートを示すブロック図である。
【0035】
【
図25D】本発明の実施形態による、汎用ベクトルフレンドリ命令フォーマットおよびそのクラスB命令テンプレートを示すブロック図である。
【0036】
【
図26A】本発明の実施形態による、例示的な特殊ベクトルフレンドリ命令フォーマットを示すブロック図である。
【0037】
【
図26B】本発明の1つの実施形態による、フルオペコードフィールドを構成する特殊ベクトルフレンドリ命令フォーマットのフィールドを示すブロック図である。
【0038】
【
図26C】本発明の1つの実施形態による、レジスタインデックスフィールドを構成する特殊ベクトルフレンドリ命令フォーマットのフィールドを示すブロック図である。
【0039】
【
図26D】本発明の1つの実施形態による、拡大演算フィールドを構成する特殊ベクトルフレンドリ命令フォーマットのフィールドを示すブロック図である。
【0040】
【
図27】本発明の1つの実施形態による、レジスタアーキテクチャのブロック図である。
【0041】
【
図28A】本発明の実施形態による、例示的なインオーダパイプラインと、例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。
【0042】
【
図28B】本発明の実施形態による、プロセッサに含まれるべきインオーダアーキテクチャコアの例示的な実施形態と、例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。
【0043】
図29Aおよび
図29Bは、より具体的で例示的なインオーダコアアーキテクチャのブロック図であり、そのコアはチップ内の(同じタイプおよび/または異なるタイプの他のコアを含む)いくつかのロジックブロックのうちの1つである。
【0044】
【
図29A】本発明の実施形態による、オンダイ相互接続ネットワークへのその接続およびレベル2(L2)キャッシュのそのローカルサブセットを有するシングルプロセッサコアのブロック図である。
【0045】
【
図29B】本発明の実施形態による、
図29Aのプロセッサコアの一部の拡大図である。
【0046】
【
図30】本発明の実施形態による、2つ以上のコアを有する場合があり、統合型メモリコントローラを有する場合があり、統合型グラフィックを有する場合があるプロセッサのブロック図である。
【0047】
図31~
図34は、例示的なコンピュータアーキテクチャのブロック図である。
【0048】
【
図31】本発明の1つの実施形態による、システムのブロック図である。
【0049】
【
図32】本発明の一実施形態による、第1のより具体的で例示的なシステムのブロック図である。
【0050】
【
図33】本発明の一実施形態による、第2のより具体的で例示的なシステムのブロック図である。
【0051】
【
図34】本発明の一実施形態による、システムオンチップ(SoC)のブロック図である。
【0052】
【
図35】本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するソフトウェア命令コンバータの使用を対比するブロック図である。
【発明を実施するための形態】
【0053】
以下の説明では、多数の具体的な詳細が示されている。しかしながら、本発明の実施形態はこれらの具体的な詳細なしに実践されてもよいことを理解されたい。他の例では、この説明の理解を曖昧にしないために、よく知られた回路、構造、および技法は詳細に示されていない。
【0054】
本明細書における「1つの実施形態」、「一実施形態」、「例示的な一実施形態」などへの言及は、説明された実施形態が特定の特徴、構造、または特性を含む場合があることを示すが、あらゆる実施形態が必ずしも特定の特徴、構造、または特性を含むとは限らない場合ある。その上、そのようなフレーズは必ずしも同じ実施形態を参照しているとは限らない。さらに、特定の特徴、構造、または特性が一実施形態に関連して説明されるとき、明示的に説明されているか否かにかかわらず、他の実施形態に関連してそのような特徴、構造、または特性に影響を与えることは当業者の知識の範囲内であることが考えられる。
【0055】
主流をなす多くのプロセッサでは、行列を扱うことは困難であり、かつ/または命令集約的な作業である。たとえば、行列の行は、複数のパックドデータ(たとえば、SIMDまたはベクトル)レジスタに入れられ、次いで個々に処理される可能性がある。たとえば、2つの8×2行列の加算は、ロードを要求してもよく、データサイズに応じて4つのパックドデータレジスタに集めてもよい。次いで、各行列の1行目に対応するパックドデータレジスタについて1番目の加算が実行され、各行列の2行目に対応するパックドデータレジスタについて2番目の加算が実行される。次いで、得られたパックドデータレジスタがメモリに分散される。小規模行列の場合には、このシナリオは受け入れられるかもしれないが、大規模行列では受け入れられないことが多い。
【0056】
[I.高レベルの説明]
中央処理装置(CPU)、グラフィック処理装置(GPU)、およびアクセラレータなどのコンピュータハードウェアにおいて行列演算をサポートするメカニズムが本明細書で説明される。行列演算は、レジスタなどのメモリの1つまたは複数のパックド領域を表す2次元(2-D)データ構造を利用する。この説明全体を通して、これらの2-Dデータ構造はタイルと呼ばれる。行列はタイルよりも小さくてもよく(使用するのはタイル全体より小さい)、複数のタイルを利用してもよい(行列はどのタイルのサイズよりも大きい)ことに留意されたい。説明全体を通して、タイル言語は、行列に影響を与えるタイルを使用して実行される演算を示すために使用され、その行列がどのタイルよりも大きいか否かは、通常、関係がない。
【0057】
各タイルには、本明細書に詳述されるような様々な演算が作用してもよく、これらの演算は、限定はしないが、タイル乗算、タイル加算、タイル減算、タイル対角線、タイルゼロ、タイル転置、タイルドット積、タイルブロードキャスト、タイル行ブロードキャスト、タイル列ブロードキャスト、タイル乗算、タイル乗累算、タイル移動などを含む。さらに、スケールおよび/またはバイアスの使用などの演算子のサポートは、これらの演算と共に使用されてもよく、将来の非数値アプリケーション、たとえばOpenCLの「ローカルメモリ」、データの圧縮/解凍などのサポートにおいて使用されてもよい。
【0058】
ストレージ(メモリ(不揮発性および揮発性)、レジスタ、キャッシュなど)の一部は、様々な水平寸法および垂直寸法のタイルの中に配置される。たとえば、タイルは、水平寸法4(たとえば、4行の行列)および垂直寸法8(たとえば、8列の行列)を有してもよい。通常、水平寸法は要素サイズ(たとえば、2、4、8、16、32、64、128ビットなど)に関連する。複数のデータタイプ(単精度浮動小数点、倍精度浮動小数点、整数など)がサポートされてもよい。
【0059】
[A.構成されたタイルの例示的な使用]
いくつかの実施形態では、タイルパラメータを構成することができる。たとえば、所与のタイルはタイルオプションを提供するように構成されてもよい。例示的なタイルオプションには、タイルの行数、タイルの列数、タイルが有効であるかどうか、およびタイルが等しいサイズのタイルのペアで構成されるかどうかが含まれるが、それらに限定されない。
【0060】
図1Aは、構成されたタイルの一実施形態を示す。図示されたように、4kBのアプリケーションメモリ102が、4つの1kBのタイル、つまり、タイル0(104)、タイル1(106)、タイル2(108)、およびタイル3(110)を記憶している。この例では、4つのタイルはペアで構成されず、各々が行および列に配置された要素を有する。タイルt0(104)およびタイルt1(106)は、K行N列の4バイト要素(たとえば、単精度データ)を有し、Kは8に等しく、N=32である。タイルt2(108)およびタイルt3(110)は、K行N/2列の8バイト要素(たとえば、倍精度データ)を有する。倍精度オペランドは単精度の2倍の幅なので、この構成は、タイルオプションを提供するために使用される、少なくとも4kBの総記憶容量に少なくとも4つの名前を提供するパレットと一致する。動作時は、ロード演算およびストア演算を使用して、これらのタイルをメモリからロードし、メモリに記憶することができる。使用される命令符号化方式に応じて、利用可能なアプリケーションメモリの量、ならびに利用可能なタイルのサイズ、数、および構成は異なる。
【0061】
図1Bは、構成されたタイルの一実施形態を示す。図示されたように、4kBのアプリケーションメモリ122は、1kBタイルのペアを2つ記憶しており、第1のペアはタイルt4L(124)およびタイルt4R(126)であり、第2のペアはタイルt5L(128)およびタイルt5R(130)である。図示されたように、これらのタイルのペアは左タイルおよび右タイルに分割される。他の実施形態では、タイルのペアは偶数タイルおよび奇数タイルに分割される。この例では、4つのタイルは、各々行および列に配置された要素を有する。タイルt4L(124)およびタイルt4R(126)は、K行N列の4バイト要素(たとえば、単精度データ)を有し、Kは8に等しく、Nは32に等しい。タイルt5L128およびタイルt5R130は、K行N/2列の8バイト要素(たとえば、倍精度データ)を有する。倍精度オペランドは単精度の2倍の幅なので、この構成は、タイルオプションを提供するために使用される、少なくとも4kBの総記憶容量に少なくとも2つの名前を提供するパレットと一致する。
図1Aの4つのタイルは4つの名前を使用し、各々1kBのタイルを命名するが、
図1Bの2つのペアのタイルは2つの名前を使用してペアのタイルを指定することができる。いくつかの実施形態では、タイル命令は、ペアになったタイルの名前をオペランドとして受け入れる。動作時は、ロード演算およびストア演算を使用して、これらのタイルをメモリからロードし、メモリに記憶することができる。使用される命令符号化方式に応じて、利用可能なアプリケーションメモリの量、ならびに利用可能なタイルのサイズ、数、および構成は異なる。
【0062】
いくつかの実施形態では、タイルパラメータは定義可能である。たとえば、「パレット」はタイルオプションを提供するために使用される。例示的なオプションには、タイル名の数、ストレージの行内のバイト数、タイル内の行および列の数などが含まれが、それらに限定されない。たとえば、タイルの最大の「高さ」(行数)は、以下のように定義されてもよい。
【0063】
タイル最大行数=設計記憶容量/(パレット名の数*行当たりのバイト数)。
【0064】
そのため、固定された名前を使用しても、実装間で異なるストレージサイズを利用できるように、アプリケーションを書くことができる。
【0065】
タイルの構成は、タイル構成(「TILECONFIG」)命令を使用して行われ、選択されたパレットで特定のタイル使用が定義される。この宣言は、使用されるタイル名の数、名前(タイル)当たりの行および列の要求数、ならびにいくつかの実施形態では、各タイルの要求データタイプを含む。いくつかの実施形態では、TILECONFIG命令の実行中に整合性チェックが実行され、この命令がパレットエントリの制限に適合することが判定される。
【0066】
[B.例示的なタイルストレージタイプ]
図2は、行列ストレージのいくつかの例を示す。(A)では、タイルがメモリに記憶されている。図示されたように、各「行」は4つのパックドデータ要素で構成される。次の「行」を得るために、ストライド値が使用される。行はメモリに連続して記憶されてもよいことに留意されたい。ストライドメモリアクセスは、タイルストレージが基礎となるメモリ配列の行幅をマッピングしないときに、1つの行から次の行へのアクセスを可能にする。
【0067】
メモリからのタイルロードおよびメモリへのタイルストアは、通常、アプリケーションメモリからデータのパックド行へのストライドアクセスである。例示的なTILELOAD命令およびTILESTORE命令、またはロード演算命令におけるTILEオペランドとしてのアプリケーションメモリへの他の命令参照は、いくつかの実施形態では、(最大)2*行のページフォルト、マスクされていない浮動小数点例外、および/または命令ごとの割込みを扱うように再開可能である。
【0068】
(B)では、行列は、パックドデータレジスタ(単一命令複数データ(SIMD)レジスタまたはベクトルレジスタ)などの複数のレジスタで構成されるタイルに記憶される。この例では、タイルは3つの物理レジスタと重なっている。通常、連続するレジスタが使用されるが、そうである必要はない。
【0069】
(C)では、行列は、タイル命令で使用される融合多重累算(FMA)回路にとってアクセス可能な非レジスタストレージ内のタイルに記憶される。このストレージは、FMAの内部にあってもよく、それに隣接していてもよい。さらに、下記で説明されるいくつかの実施形態では、ストレージは、行全体またはタイル全体ではなくデータ要素用であってもよい。
【0070】
TMMAアーキテクチャ用のサポートパラメータはCPUIDを介して報告される。いくつかの実施形態では、情報のリストは最大の高さおよび最大SIMD寸法を含む。TMMAアーキテクチャを構成するには、タイルごとの寸法、タイルごとの要素サイズ、およびパレット識別子を指定する必要がある。この構成はTILECONFIG命令を実行することによって行われる。
【0071】
TILECONFIG命令が正常に実行されると、後続のTILE演算子が有効になる。TILERELEASEALL命令はタイル構成をクリアし、(次のTILECONFIG命令が実行されるまで)TILE演算を無効にする。いくつかの実施形態では、タイルを使用するコンテキスト切替えにおいてXSAVE、XSTOREなどが使用される。いくつかの実施形態では、2つのXCR0ビットがXSAVEにおいて使用され、1つのビットはTILECONFIFメタデータ用であり、もう1つのビットは実際のタイルペイロードデータに対応する。
【0072】
TILECONFIGは、タイル使用を構成するだけでなく、構成されたタイルと共にプログラムがコードの領域内にあることを示す状態変数も設定する。一実装形態は、既存のレジスタセットを使用しないことなどの、タイル領域と共に使用することができる他の命令に対する制限を列挙することができる。
【0073】
タイル領域を終了することは、通常、TILERELEASEALL命令を用いて行われる。この命令はパラメータを取らず、すべてのタイルをすばやく無効化し(データの保存または復元が不要になったことを示し)、タイル領域にあることに対応する内部状態をクリアする。
【0074】
いくつかの実施形態では、タイル演算は、タイル構成によって指定された寸法を超えたすべての行およびすべての列をゼロにする。たとえば、タイル演算は、各行が書き込まれると、(要素のサイズを考慮して)構成された列数を超えるデータをゼロにする。たとえば、64バイトの行および10行12列で構成されるタイルでは、FP32要素を書き込む演算が、最初の10行の各々に12*4バイトの出力/結果データを書き込み、各行の残りの4*4バイトをゼロにする。タイル演算は、構成された最初の10行の後のどの行も完全にゼロにする。64バイトの行を有する1Kタイルを使用すると、16行になるので、この例では最後の6行もゼロにされるはずである。
【0075】
いくつかの実施形態では、コンテキスト復元(たとえば、XRSTOR)は、データをロードするとき、タイル用に構成された行を超えるデータがゼロとして保持されることを強制する。有効な構成がない場合、すべての行がゼロにされる。タイルデータのXRSTORは、構成された列を超える列に不要なデータをロードする可能性がある。タイル構成に関連付けられた要素幅が存在しないので、構成された列数を超えてXRSTORがクリアすることは不可能なはずである。
【0076】
コンテキスト保存(たとえば、XSAVE)は、それをメモリに書き込むときにTILE記憶領域全体を公開する。XRSTORがタイルの右端に不要なデータをロードした場合、そのデータはXSAVEによって保存される。XSAVEは、タイルごとに指定された数を超える行にゼロを書き込む。
【0077】
いくつかの実施形態では、タイル命令は再開可能である。メモリにアクセスする演算は、ページフォルト後の再開を可能にする。浮動小数点演算を処理する計算命令は、マスクされていない浮動小数点例外も可能にし、例外のマスキングは制御レジスタおよび/またはステータスレジスタによって制御される。
【0078】
これらのイベント後の命令再開をサポートするために、これらの命令は下記に詳述されるスタートレジスタに情報を記憶する。
【0079】
[II.行列(タイル)演算システム]
[A.例示的なハードウェアサポート]
図3は、行列(タイル)演算アクセラレータを利用するシステムの一実施形態を示す。この図では、ホストプロセッサ/処理システム301は、コマンド311(たとえば、算術演算もしくは行列操作演算、またはロード演算およびストア演算などの行列操作演算)を行列演算アクセラレータ307に伝達する。しかしながら、これは説明の目的でのみこのように示されている。後で詳述されるように、この行列演算アクセラレータ307は処理コアの一部であってもよい。通常、タイル操作演算子命令であるコマンド311は、レジスタ-レジスタ(「reg-reg」)フォーマットまたはレジスタ-メモリ(「reg-mem」)フォーマットとしてタイルを参照する。TILESTORE、TILELOAD、TILECONFIGなどの他のコマンドは、タイルに対してデータ演算を実行しない。コマンドは、行列演算アクセラレータ307が処理するための復号された命令(たとえば、マイクロ演算)またはマクロ命令であってもよい。
【0080】
この例では、コヒーレントメモリインターフェース303は、ホストプロセッサ/処理システム301および行列演算アクセラレータ307に結合され、その結果、それらはメモリを共有することができる。
図4および
図5は、行列演算アクセラレータを使用してどのようにメモリが共有されるかについての異なる実施形態を示す。
図4に示されたように、ホストプロセッサ401および行列演算アクセラレータ回路405は、同じメモリ403を共有する。
図5は、ホストプロセッサ501および行列演算アクセラレータ505がメモリを共有しないが、互いのメモリにアクセスできる一実施形態を示す。たとえば、プロセッサ501は、タイルメモリ507にアクセスし、また自身のホストメモリ503を通常通り利用することができる。同様に、行列演算アクセラレータ505はホストメモリ503にアクセスすることができるが、より一般的にはタイルメモリ507を使用する。これらのメモリは異なるタイプのメモリであってもよいことに留意されたい。
【0081】
いくつかの実施形態では、行列演算アクセラレータ307は、データバッファ305に結合された複数のFMA309を含む(いくつかの実装形態では、これらのデータバッファ305のうちの1つまたは複数は図示されたようにグリッドのFMAに記憶される)。データバッファ305は、(たとえば、タイルロード命令またはタイルストア命令を使用して)メモリからロードされたタイルおよび/またはメモリに記憶されるべきタイルをバッファリングする。データバッファは、たとえば、複数のレジスタであってもよい。通常、これらのFMAは、タイルを読み書きすることができる連鎖FMAのグリッド309として配置される。この例では、行列演算アクセラレータ307は、タイルT0、T1、およびT2を使用して行列乗算演算を実行する。FMAグリッド309には、これらのタイルのうちの少なくとも1つが記憶される。いくつかの実施形態では、演算に含まれるすべてのタイルがFMAグリッド309に記憶される。他の実施形態では、サブセットのみがFMAグリッド309に記憶される。図示されたように、T1は収容され、T0およびT2は収容されない。A、B、およびCは、これらのタイルの行列を指し、その行列はタイルの全スペースを占めても占めなくてもよい、ことに留意されたい。
【0082】
図6は、タイル(「TMMA」)を使用する行列乗累算演算の一実施形態を示す。
【0083】
行列(タイルA601)内の行数は、計算のレイテンシを含むシリアル(連鎖)FMAの数と一致する。一実装形態は、より低い高さのグリッド上で自由に再循環するが、計算は同じままである。
【0084】
ソース/デスティネーションベクトルはN行のタイル(タイルC605)から来て、FMAのグリッド611は、タイルの行列乗算を実行する完全な命令をもたらすN個のベクトル-行列演算を実行する。タイルB603は他のベクトルソースであり、各段階でFMAに「ブロードキャスト」項を供給する。
【0085】
動作時は、いくつかの実施形態では、(タイルB603に記憶された)行列Bの要素は、FMAの矩形グリッドにわたって広がっている。(タイルA601に記憶された)行列Bは、FMAの矩形グリッドのカラム寸法と一致するように転置された行の要素を有する。グリッド内の各FMAにおいて、AとBの要素が乗算され、(図の上から)入ってくる被加数に加算され、出力合計がFMAの次の行(または最終出力)に渡される。
【0086】
単一ステップのレイテンシはK(行列Bの行の高さ)に比例し、従属TMMAは、通常、そのレイテンシを隠すのに十分なソース-デスティネーション行を(単一のタイル内またはタイル全体に)有する。一実装形態はまた、SIMD(パックドデータ要素)寸法M(行列Aの行の高さ)を時間ステップにわたって分割する場合があるが、これは単にKが乗算される定数を変えるだけである。プログラムがTMACCによって列挙された最大値より小さいKを指定するとき、一実装形態はこれを「マスキング」または「アーリーアウト」で自由に実装する。
【0087】
TMMA全体のレイテンシはN*Kに比例する。リピートレートはNに比例する。TMMA命令当たりのMACの数はN*K*Mである。
【0088】
図7は、連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す。具体的には、この図はデスティネーションの1つのパックドデータ要素位置の反復の実行回路を示す。この実施形態では、連鎖融合乗累算は符号付きソースを処理しており、アキュムレータは2倍の入力データサイズである。
【0089】
第1の符号付きソース(ソース1(701))および第2の符号付きソース(ソース2(703))は、各々4つのパックドデータ要素を有する。これらのパックドデータ要素の各々は、浮動小数点データなどの符号付きデータを記憶する。第3の符号付きソース(ソース3(709))は2つのパックドデータ要素を有し、それらの各々は符号付きデータを記憶する。第1および第2の符号付きソース701および703のサイズは、第3の符号付きソース(初期値または前の結果)709の半分のサイズである。たとえば、第1および第2の符号付きソース701および703は32ビットのパックドデータ要素(たとえば、単精度浮動小数点)を有する可能性があり、第3の符号付きソース709は64ビットのパックドデータ要素(たとえば、倍精度浮動小数点)を有する可能性がある。
【0090】
この図では、第1および第2の符号付きソース701および703の2つの最上位パックドデータ要素位置、ならびに第3の符号付きソース709の最上位パックドデータ要素位置のみが示されている。当然、他のパックドデータ要素位置も処理されるはずである。
【0091】
図示されたように、パックドデータ要素はペアで処理される。たとえば、第1および第2の符号付きソース701および703の最上位パックドデータ要素位置のデータは乗算器回路705を使用して乗算され、第1および第2の符号付きソース701および703の2番目の最上位パックドデータ要素位置からのデータは乗算器回路707を使用して乗算される。いくつかの実施形態では、これらの乗算器回路705および707は、他のパックドデータ要素位置に再利用される。他の実施形態では、パックドデータ要素が並列に処理されるように追加の乗算器回路が使用される。いくつかの文脈では、並列実行は、第3の符号付きソース709のサイズであるレーンを使用して行われる。各乗算の結果は、加算器回路711を使用して加算される。
【0092】
乗算の結果の加算の結果は、(異なる加算器713または同じ加算器711を使用して)符号付きソース3(709)の最上位パックドデータ要素位置からのデータに加算される。
【0093】
最後に、2番目の加算の結果は、第3の符号付きソース709から使用されたパックドデータ要素位置に対応するパックドデータ要素位置において符号付きデスティネーション715に記憶されるか、またはもしあれば次の反復に渡される。いくつかの実施形態では、対応するライトマスク(ビット)が設定されている場合には保存が生じ、設定されていない場合には保存が生じないように、ライトマスクがこのストレージに適用される。
【0094】
図8は、連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す。具体的には、この図はデスティネーションの1つのパックドデータ要素位置の反復の実行回路を示す。この実施形態では、連鎖融合乗累算は符号付きソースを処理しており、アキュムレータは2倍の入力データサイズである。
【0095】
第1の符号付きソース(ソース1(801))および第2の符号付きソース(ソース2(803))は、各々4つのパックドデータ要素を有する。これらのパックドデータ要素の各々は、整数データなどの符号付きデータを記憶する。第3の符号付きソース(ソース3(809))は2つのパックドデータ要素を有し、それらの各々は符号付きデータを記憶する。第1および第2の符号付きソース801および803のサイズは、第3の符号付きソース809の半分のサイズである。たとえば、第1および第2の符号付きソース801および803は32ビットのパックドデータ要素(たとえば、単精度浮動小数点)を有する可能性があり、第3の符号付きソース809は64ビットのパックドデータ要素(たとえば、倍精度浮動小数点)を有する可能性がある。
【0096】
この図では、第1および第2の符号付きソース801および803の2つの最上位パックドデータ要素位置、ならびに第3の符号付きソース809の最上位パックドデータ要素位置のみが示されている。当然、他のパックドデータ要素位置も処理されるはずである。
【0097】
図示されたように、パックドデータ要素はペアで処理される。たとえば、第1および第2の符号付きソース801および803の最上位パックドデータ要素位置のデータは乗算器回路805を使用して乗算され、第1および第2の符号付きソース801および803の2番目の最上位パックドデータ要素位置からのデータは乗算器回路807を使用して乗算される。いくつかの実施形態では、これらの乗算器回路805および807は、他のパックドデータ要素位置に再利用される。他の実施形態では、パックドデータ要素が並列に処理されるように追加の乗算器回路が使用される。いくつかの文脈では、並列実行は、第3の符号付きソース(初期値または前の反復結果)809のサイズであるレーンを使用して行われる。各乗算の結果は、加算/飽和回路813を使用して第3の符号付きソース809に加算される。
【0098】
加算/飽和(アキュムレータ)回路813は、加算が大きすぎる値をもたらすとき、オペランドの符号を保存する。具体的には、飽和評価は、多方向加算とデスティネーションへの書き込みまたは次の繰返しとの間の無限精度結果に対して行われる。アキュムレータ813が浮動小数点であり、入力項が整数であるとき、積の和および浮動小数点アキュムレータ入力値は、無限精度値(数百ビットの固定小数点数)に変換され、乗算結果と第3の入力の加算が実行され、実際のアキュムレータタイプへの丸めが1回実行される。
【0099】
符号なし飽和は、出力値がその要素幅に対して最大符号なし数(すべて1)に制限されることを意味する。符号付き飽和は、値がその要素幅に対して最小の負の数と最大の正の数との間にあるように制限されることを意味する(たとえば、バイトの場合、範囲は-128(=-2^7)から127(=2^7-1)までである)。
【0100】
加算および飽和検査の結果は、第3の符号付きソース809から使用されたパックドデータ要素位置に対応するパックドデータ要素位置において符号付き結果815に記憶されるか、またはもしあれば次の反復に渡される。いくつかの実施形態では、対応するライトマスク(ビット)が設定されている場合には保存が生じ、設定されていない場合には保存が生じないように、ライトマスクがこのストレージに適用される。
【0101】
図9は、連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す。具体的には、この図はデスティネーションの1つのパックドデータ要素位置の反復の実行回路を示す。この実施形態では、連鎖融合乗累算は符号付きソースおよび符号なしソースを処理しており、アキュムレータは4倍の入力データサイズである。
【0102】
第1の符号付きソース(ソース1(901))および第2の符号なしソース(ソース2(903))は、各々4つのパックドデータ要素を有する。これらのパックドデータ要素の各々は、浮動小数点データまたは整数データなどのデータを有する。第3の符号付きソース(初期値または結果915)は、符号付きデータを記憶するパックドデータ要素を有する。第1および第2の符号付きソース901および903のサイズは、第3の符号付きソース915の4分の1である。たとえば、第1および第2のソース901および903は16ビットのパックドデータ要素(たとえば、ワード)を有する可能性があり、第3の符号付きソース915は64ビットのパックドデータ要素(たとえば、倍精度浮動小数点または64ビット整数)を有する可能性がある。
【0103】
この図では、第1および第2のソース901および903の4つの最上位パックドデータ要素位置、ならびに第3の符号付きソース915の最上位パックドデータ要素位置が示されている。当然、他のパックドデータ要素位置も、もしあれば処理されるはずである。
【0104】
図示されたように、パックドデータ要素は四つ組で処理される。たとえば、第1および第2のソース901および903の最上位パックドデータ要素位置のデータは乗算器回路905を使用して乗算され、第1および第2のソース901および903の2番目の最上位パックドデータ要素位置からのデータは乗算器回路907を使用して乗算され、第1および第2のソース901および903の3番目の最上位パックドデータ要素位置からのデータは乗算器回路909を使用して乗算され、第1および第2のソース901および903の最下位パックドデータ要素位置からのデータは乗算器回路911を使用して乗算される。いくつかの実施形態では、第1のソース901の符号付きパックドデータ要素は符号拡張され、第2のソース903の符号なしパックドデータ要素は乗算より前にゼロ拡張される。
【0105】
いくつかの実施形態では、これらの乗算器回路905~911は他のパックドデータ要素位置に再利用される。他の実施形態では、パックドデータ要素が並列に処理されるように追加の乗算器回路が使用される。いくつかの文脈では、並列実行は、第3の符号付きソース915のサイズであるレーンを使用して行われる。各乗算の結果は、加算器回路911を使用して加算される。
【0106】
乗算の結果の加算の結果は、(異なる加算器913または同じ加算器911を使用して)符号付きソース3(915)の最上位パックドデータ要素位置からのデータに加算される。
【0107】
最後に、2番目の加算の結果919は、第3の符号付きソース915から使用されたパックドデータ要素位置に対応するパックドデータ要素位置において符号付きデスティネーションに記憶されるか、または次の反復に渡される。いくつかの実施形態では、対応するライトマスク(ビット)が設定されている場合には保存が生じ、設定されていない場合には保存が生じないように、ライトマスクがこのストレージに適用される。
【0108】
図10は、連鎖融合乗累算命令の反復の実行のサブセットの一実施形態を示す。具体的には、この図はデスティネーションの1つのパックドデータ要素位置の反復の実行回路を示す。この実施形態では、連鎖融合乗累算は符号付きソースおよび符号なしソースを処理しており、アキュムレータは4倍の入力データサイズである。
【0109】
第1の符号付きソース(符号付きソース1(1001))および第2の符号なしソース(符号なしソース2(1003))は、各々4つのパックドデータ要素を有する。これらのパックドデータ要素の各々は、浮動小数点データまたは整数データなどのデータを記憶する。第3の符号付きソース(初期値または前の結果1015)は、符号付きデータを記憶するパックドデータ要素を有する。符号付きソース1(1001)および符号なしソース2(1003)のサイズは、初期値または前の結果1015に接続された第3の符号付きソースの4分の1である。たとえば、符号付きソース1(1001)および符号なしソース2(1003)は16ビットのパックドデータ要素(たとえば、ワード)を有する可能性があり、初期値または前の結果1015は64ビットのパックドデータ要素(たとえば、倍精度浮動小数点または64ビット整数)を有する可能性がある。
【0110】
この図では、符号付きソース1(1001)および符号なしソース2(1003)の4つの最上位パックドデータ要素位置、ならびに初期値または前の結果1015の最上位パックドデータ要素位置が示されている。当然、他のパックドデータ要素位置も、もしあれば処理されるはずである。
【0111】
図示されたように、パックドデータ要素は四つ組で処理される。たとえば、符号付きソース1(1001)および符号なしソース2(1003)の最上位パックドデータ要素位置のデータは乗算器回路1005を使用して乗算され、符号付きソース1(1001)および符号なしソース2(1003)の2番目の最上位パックドデータ要素位置からのデータは乗算器回路1007を使用して乗算され、符号付きソース1(1001)および符号なしソース2(1003)の3番目の最上位パックドデータ要素位置からのデータは乗算器回路1009を使用して乗算され、符号付きソース1(1001)および符号なしソース2(1003)の最下位パックドデータ要素位置からのデータは乗算器回路1011を使用して乗算される。いくつかの実施形態では、符号付きソース1(1001)の符号付きパックドデータ要素は符号拡張され、符号なしソース2(1003)の符号なしパックドデータ要素は乗算より前にゼロ拡張される。
【0112】
いくつかの実施形態では、これらの乗算器回路1005~1011は他のパックドデータ要素位置に再利用される。他の実施形態では、パックドデータ要素が並列に処理されるように追加の乗算器回路が使用される。いくつかの文脈では、並列実行は、初期値または前の結果1015のサイズであるレーンを使用して行われる。乗算の結果の加算の結果は、加算/飽和回路1013を使用して、初期値または前の結果1015に接続された符号付きソース3の最上位パックドデータ要素位置からのデータに加算される。
【0113】
加算/飽和回路1013は、加算が符号付き飽和にとって大きすぎるかまたは小さすぎる値をもたらすとき、オペランドの符号を保存する。本明細書で使用するとき、加算/飽和回路1013はアキュムレータと呼ばれることがある。具体的には、飽和評価は、多方向加算とデスティネーションへの書き込みとの間の無限精度結果に対して行われる。加算/飽和回路1013が浮動小数点を使用し、入力項が整数であるとき、積の和および浮動小数点アキュムレータ入力値は、無限精度値(数百ビットの固定小数点数)に変換され、乗算結果と第3の入力の加算が実行され、実際のアキュムレータタイプへの丸めが1回実行される。
【0114】
加算および飽和検査の結果1019は、第3の符号付きソースから使用され、初期値もしくは前の結果1015に接続されたパックドデータ要素位置に対応するパックドデータ要素位置において符号付きデスティネーションに記憶されるか、または次の反復に渡される。いくつかの実施形態では、対応するライトマスク(ビット)が設定されている場合には保存が生じ、設定されていない場合には保存が生じないように、ライトマスクがこのストレージに適用される。
【0115】
図11は、一実施形態による、乗算器への入力よりも大きい入力サイズをアキュムレータが使用する、2のべき乗サイズのSIMDの実装形態を示す。(乗算器への)ソース値およびアキュムレータ値は、符号付きの値であっても符号なしの値であってもよいことに留意されたい。2倍の入力サイズを有するアキュムレータの(言い換えれば、アキュムレータの入力値がソースのパックドデータ要素サイズの2倍のサイズである)場合、表1101は様々な構成を示す。バイトサイズのソースの場合、アキュムレータはサイズが16ビットのワードまたは半精度浮動小数点(HPFP)の値を使用する。ワードサイズのソースの場合、アキュムレータはサイズが32ビットの32ビット整数または単精度浮動小数点(SPFP)の値を使用する。SPFPまたは32ビット整数のサイズのソースの場合、アキュムレータはサイズが64ビットの64ビット整数または倍精度浮動小数点(DPFP)の値を使用する。
【0116】
4倍の入力サイズを有するアキュムレータの(言い換えれば、アキュムレータの入力値がソースのパックドデータ要素サイズの4倍のサイズである)場合、表1103は様々な構成を示す。バイトサイズのソースの場合、アキュムレータはサイズが32ビットの32ビット整数または単精度浮動小数点(SPFP)の値を使用する。ワードサイズのソースの場合、いくつかの実施形態では、アキュムレータはサイズが64ビットの64ビット整数または倍精度浮動小数点(DPFP)の値を使用する。
【0117】
8倍の入力サイズを有するアキュムレータの(言い換えれば、アキュムレータの入力値がソースのパックドデータ要素サイズの8倍のサイズである)場合、表1105は1つの構成を示す。バイトサイズのソースの場合、アキュムレータは64ビット整数を使用する。
【0118】
先に示唆したように、行列演算回路はコアに含まれてもよく、外部アクセラレータであってもよい。
図12は、行列演算回路を利用するシステムの一実施形態を示す。この図では、複数のエンティティがリングインターコネクト1245と結合されている。
【0119】
複数のコア1201、1203、1205、および1207は、非タイルベースの命令サポートを提供する。いくつかの実施形態では、行列演算回路1251はコア1203内に設けられ、他の実施形態では、行列演算回路1211および1213はリングインターコネクト1245上でアクセス可能である。
【0120】
さらに、コアおよび/または行列演算回路の代わりに、メモリ1233および1231と通信するために、1つまたは複数のメモリコントローラ1223~1225が設けられる。
【0121】
図13は、タイルを使用する行列演算をサポートするプロセッサコアパイプラインの一実施形態を示す。分岐予測および復号回路1303は、命令ストレージ1301に記憶された命令から、命令の分岐予測、命令の復号、および/またはその両方を実行する。たとえば、本明細書に詳述されている命令は命令ストレージに記憶されてもよい。いくつかの実装形態では、別々の回路が分岐予測に使用され、いくつかの実施形態では、少なくともいくつかの命令が、マイクロコード1305を使用して、1つもしくは複数のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号に復号される。分岐予測および復号回路1303は、様々な異なるメカニズムを使用して実装されてもよい。適切なメカニズムの例には、参照テーブル、ハードウェア実装、プログラマブルロジック配列(PLA)、マイクロコード読み出し専用メモリ(ROM)などが含まれるが、それらに限定されない。
【0122】
分岐予測および復号回路1303は、いくつかの実施形態では、スケジューラ回路1309に結合されたリネーム/アロケータ回路1307に結合される。いくつかの実施形態では、これらの回路は、1)論理オペランド値を物理オペランド値(たとえば、いくつかの実施形態ではレジスタエイリアステーブル)にリネーミングすること、2)ステータスビットおよびフラグを復号された命令に割り当てること、ならびに3)(たとえば、いくつかの実施形態では予約ステーションを使用して)命令プールから実行回路上で実行するための復号された命令をスケジュールすることのうちの1つまたは複数を実行することにより、レジスタリネーミング、レジスタ割当て、および/またはスケジューリング機能を提供する。
【0123】
スケジューラ回路1309は、予約ステーション、中央命令ウィンドウなどを含む任意の数の様々なスケジューラを表す。スケジューラユニットのスケジューラ回路1309は、物理レジスタファイル1315に結合されるか、またはそれを含む。物理レジスタファイル1315の各々は1つまたは複数の物理レジスタファイルを表し、それらの異なるファイルは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(たとえば、実行されるべき次の命令のアドレスである命令ポインタ)、タイルなどの1つまたは複数の異なるデータタイプを記憶する。1つの実施形態では、物理レジスタファイル1315は、ベクトルレジスタ回路、ライトマスクレジスタ回路、およびスカラレジスタ回路を備える。これらのレジスタ回路は、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供することができる。物理レジスタファイル1315は、レジスタリネーミングおよびアウトオブオーダ実行が(たとえば、リオーダバッファおよびリタイアメントレジスタファイルを使用すること、将来ファイル、履歴バッファ、およびリタイアメントレジスタファイルを使用すること、レジスタマップおよびレジスタのプールを使用することなどで)実装され得る様々な方法を示すために、リタイアメント回路1317と重なっている。リタイアメント回路1317および物理レジスタファイル1315は、実行回路1311に結合される。
【0124】
レジスタリネーミングはアウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングはインオーダアーキテクチャで使用されてもよいことを理解されたい。図示されたプロセッサの実施形態はまた、別々の命令およびデータのキャッシュユニットならびに共有L2キャッシュユニットを含んでもよいが、代替の実施形態は、たとえば、レベル1(L1)内部キャッシュ、または複数レベルの内部キャッシュなどの、命令とデータの両方のための単一の内部キャッシュを有してもよい。いくつかの実施形態では、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュの組合せを含んでもよい。あるいは、キャッシュのすべてがコアおよび/またはプロセッサの外部にあってもよい。
【0125】
実行回路1311は、1つまたは複数の実行回路1321、1323、および1327のセット、ならびに1つまたは複数のメモリアクセス回路1325のセットを含む。実行回路1321、1323、および1327は、様々な演算(たとえば、シフト、加算、減算、乗算)を、様々なタイプのデータ(たとえば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行する。いくつかの実施形態は、特定の機能または機能のセットに専用のいくつかの実行ユニットを含んでもよいが、他の実施形態は、ただ1つの実行ユニットまたはすべてがすべての機能を実行する複数の実行ユニットを含んでもよい。スカラ回路1321はスカラ演算を実行し、ベクトル/SIMD回路1323はベクトル/SIMD演算を実行し、行列演算回路1327は本明細書に詳述されている行列(タイル)演算を実行する。
【0126】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプラインを実装することができる。1)命令フェッチ回路がフェッチおよび長さ復号段階を実行する。2)分岐および復号回路1303が復号段階を実行する。3)リネーム/アロケータ回路1307が割当て段階およびリネーミング段階を実行する。4)スケジューラ回路1309がスケジュール段階を実行する。5)(スケジューラ回路1309およびリネーム/アロケート回路1307に結合されるか、またはそれらに含まれる)物理レジスタファイルならびにメモリユニットがレジスタ読み取り/メモリ読み取り段階を実行し、実行回路1311が実行段階を実行する。6)メモリユニットおよび物理レジスタファイルユニットがライトバック/メモリ書き込み段階を実行する。7)様々なユニットが例外処理段階に関与してもよい。8)リタイアメントユニットおよび物理レジスタファイルユニットがコミット段階を実行する。
【0127】
コアは、本明細書で説明された命令を含む、1つまたは複数の命令セット(たとえば、(より新しいバージョンで追加されたいくつかの拡張を有する)x86命令セット、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM Holdingsの(NEONなどのオプションの追加の拡張を有する)ARM命令セット)をサポートすることができる。1つの実施形態では、コア1390は、パックドデータ命令セット拡張(たとえば、AVX1、AVX2)をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションによって使用される演算がパックドデータを使用して実行されることが可能になる。
【0128】
コアは、マルチスレッド化(演算またはスレッドの2つ以上の並列セットの実行)をサポートし、タイムスライスマルチスレッド化、(物理コアが同時にマルチスレッド化しているスレッドの各々に単一の物理コアが論理コアを提供する)同時マルチスレッド化、またはそれらの組合せ(たとえば、インテル(登録商標)ハイパースレッディングテクノロジなどにおけるタイムスライスフェッチおよび復号ならびにその後の同時マルチスレッド化)を含む様々な方法でサポートすることができる。
【0129】
図14は、タイルを使用する行列演算をサポートするプロセッサコアパイプラインの一実施形態を示す。分岐予測および復号回路1403は、命令ストレージ1401に記憶された命令から、命令の分岐予測、命令の復号、および/またはその両方を実行する。たとえば、本明細書に詳述されている命令は命令ストレージに記憶されてもよい。いくつかの実装形態では、別々の回路が分岐予測に使用され、いくつかの実施形態では、少なくともいくつかの命令が、マイクロコード1405を使用して、1つもしくは複数のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号に復号される。分岐予測および復号回路1403は、様々な異なるメカニズムを使用して実装されてもよい。適切なメカニズムの例には、参照テーブル、ハードウェア実装、プログラマブルロジック配列(PLA)、マイクロコード読み出し専用メモリ(ROM)などが含まれるが、それらに限定されない。
【0130】
分岐予測および復号回路1403は、いくつかの実施形態では、スケジューラ回路1409に結合されたリネーム/アロケータ回路1407に結合される。いくつかの実施形態では、これらの回路は、1)論理オペランド値を物理オペランド値(たとえば、いくつかの実施形態ではレジスタエイリアステーブル)にリネーミングすること、2)ステータスビットおよびフラグを復号された命令に割り当てること、ならびに3)(たとえば、いくつかの実施形態では予約ステーションを使用して)命令プールから実行回路上で実行するための復号された命令をスケジュールすることのうちの1つまたは複数を実行することにより、レジスタリネーミング、レジスタ割当て、および/またはスケジューリング機能を提供する。
【0131】
スケジューラ回路1409は、予約ステーション、中央命令ウィンドウなどを含む任意の数の様々なスケジューラを表す。スケジューラユニットのスケジューラ回路1409は、物理レジスタファイル1415に結合されるか、またはそれを含む。物理レジスタファイル1415の各々は1つまたは複数の物理レジスタファイルを表し、それらの異なるファイルは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(たとえば、実行されるべき次の命令のアドレスである命令ポインタ)、タイルなどの1つまたは複数の異なるデータタイプを記憶する。1つの実施形態では、物理レジスタファイル1415は、ベクトルレジスタ回路、ライトマスクレジスタ回路、およびスカラレジスタ回路を備える。これらのレジスタ回路は、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供することができる。物理レジスタファイル1415は、レジスタリネーミングおよびアウトオブオーダ実行が(たとえば、リオーダバッファおよびリタイアメントレジスタファイルを使用すること、将来ファイル、履歴バッファ、およびリタイアメントレジスタファイルを使用すること、レジスタマップおよびレジスタのプールを使用することなどで)実装され得る様々な方法を示すために、リタイアメント回路1417と重なっている。リタイアメント回路1417および物理レジスタファイル1415は、実行回路1411に結合される。
【0132】
レジスタリネーミングはアウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングはインオーダアーキテクチャで使用されてもよいことを理解されたい。図示されたプロセッサの実施形態はまた、別々の命令およびデータのキャッシュユニットならびに共有L2キャッシュユニットを含んでもよいが、代替の実施形態は、たとえば、レベル1(L1)内部キャッシュ、または複数レベルの内部キャッシュなどの、命令とデータの両方のための単一の内部キャッシュを有してもよい。いくつかの実施形態では、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュの組合せを含んでもよい。あるいは、キャッシュのすべてがコアおよび/またはプロセッサの外部にあってもよい。
【0133】
実行回路1411は、1つまたは複数の実行回路1427のセット、および1つまたは複数のメモリアクセス回路1425のセットを含む。実行回路1427は、本明細書に詳述されている行列(タイル)演算を実行する。
【0134】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプラインを実装することができる。1)命令フェッチ回路がフェッチおよび長さ復号段階を実行する。2)分岐および復号回路1403が復号段階を実行する。3)リネーム/アロケータ回路1407が割当て段階およびリネーミング段階を実行する。4)スケジューラ回路1409がスケジュール段階を実行する。5)(スケジューラ回路1409およびリネーム/アロケータ回路1407に結合されるか、またはそれらに含まれる)物理レジスタファイルならびにメモリユニットがレジスタ読み取り/メモリ読み取り段階を実行し、実行回路1411が実行段階を実行する。6)メモリユニットおよび物理レジスタファイルユニットがライトバック/メモリ書き込み段階を実行する。7)様々なユニットが例外処理段階に関与してもよい。8)リタイアメントユニットおよび物理レジスタファイルユニットがコミット段階を実行する。
【0135】
コアは、本明細書で説明された命令を含む、1つまたは複数の命令セット(たとえば、(より新しいバージョンで追加されたいくつかの拡張を有する)x86命令セット、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM Holdingsの(NEONなどのオプションの追加の拡張を有する)ARM命令セット)をサポートすることができる。1つの実施形態では、コア1490は、パックドデータ命令セット拡張(たとえば、AVX1、AVX2)をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションによって使用される演算がパックドデータを使用して実行されることが可能になる。
【0136】
コアは、マルチスレッド化(演算またはスレッドの2つ以上の並列セットの実行)をサポートし、タイムスライスマルチスレッド化、(物理コアが同時にマルチスレッド化しているスレッドの各々に単一の物理コアが論理コアを提供する)同時マルチスレッド化、またはそれらの組合せ(たとえば、インテル(登録商標)ハイパースレッディングテクノロジなどにおけるタイムスライスフェッチおよび復号ならびにその後の同時マルチスレッド化)を含む様々な方法でサポートすることができる。
【0137】
[B.レイアウト]
この説明全体を通して、データは行優先データレイアウトを使用して表現される。列優先ユーザは、自分の方向性に従って用語を解釈するべきである。
図15は、行優先フォーマットおよび列優先フォーマットで表現された行列の一例を示す。図示されたように、行列Aは2×3行列である。この行列が行優先フォーマットで記憶されると、行のデータ要素は連続している。この行列が列優先フォーマットで記憶されると、列のデータ要素は連続している。A
T*B
T=(BA)
Tであることは行列のよく知られた性質であり、上付き文字Tは転置を意味する。列優先データを行優先データとして読み取ると、行列は転置行列のように見える行列をもたらす。
【0138】
いくつかの実施形態では、行優先セマンティクスはハードウェアで利用され、列優先データはオペランド順序を行列の転置である結果と交換することであるが、その後のメモリからの列優先読み取りの場合、それは正しい非転置行列である。
【0139】
たとえば、乗算されるべき列優先行列が2つある場合、
【数1】
【0140】
入力行列は、以下のように線形メモリ(列優先)に記憶されるはずである。
【数2】
【0141】
それらの行列を2×3および3×2の寸法を有する行優先として読み取ると、それらは以下のように見えるはずである。
【数3】
【0142】
次数と行列の乗算を交換する。
【数4】
転置行列が出力された後、行優先順に記憶することできる。
【数5】
その後の列優先計算で使用され、それは正しい非転置行列である。
【数6】
【0143】
[III.例示的な使用]
図16は、行列(タイル)の使用に関する一例を示す。この例では、行列C1601は2つのタイルを含み、タイルA1603は1つのタイルを含み、タイルB1605は2つのタイルを含む。この図は、行列乗算を計算するアルゴリズムの内部ループの一例を示している。この例では、行列C1601からの2つの結果タイルtmm0およびtmm1は、中間結果を累積するために使用される。行列A1603からの1つのタイル(tmm2)は、行列B1605からの2つのタイルと乗算されるので、2回再利用される。矢印によって示された方向から新しいAタイルおよび2つの新しいBタイルをロードするポインタ。図示されていない外側のループは、Cタイル用のポインタを調整する。
【0144】
図示された例示的なコードは、タイル構成命令の使用を含み、タイル使用を構成し、タイルをロードし、タイルを処理するループを行い、メモリにタイルを記憶し、タイル使用を解放するために実行される。
【0145】
図17は、行列(タイル)の使用の一実施形態を示す。1701において、タイル使用が構成される。たとえば、タイル当たりの行数および列数の設定を含むタイル使用を構成するために、TILECONFIG命令が実行される。通常、1703において、少なくとも1つの行列(タイル)がメモリからロードされる。1705において、行列(タイル)を使用して少なくとも1つの行列(タイル)演算が実行される。1707において、少なくとも1つの行列(タイル)がメモリに記憶され、1709において、コンテキストの切替えを行うことができる。
【0146】
[IV.例示的な構成]
[A.タイル構成ハードウェアサポート]
【0147】
上述されたように、タイル使用は、通常、使用する前に構成される必要がある。たとえば、すべての行および列を完全に使用することは必要でないかもしれない。いくつかの実施形態では、これらの行および列を構成しないことが電力を節約するだけでなく、その構成は演算がエラーを発生させるかどうかを判定するために使用されてもよい。たとえば、形式(N×M)*(L*N)の行列乗算は、通常、MとLが同じでない場合機能しない。
【0148】
タイルを使用して行列を使用する前に、いくつかの実施形態では、タイルサポートが構成されるべきである。たとえば、タイル当たりの行数および列数、使用されるべきタイルなどが構成される。TILECONFIG命令は、(プロセッサコアの一部として、または外部デバイスとして)行列アクセラレータを使用するようにコンピュータを構成するサポートを提供するので、コンピュータ自体に対する改良である。具体的には、TILECONFIG命令を実行すると、構成がメモリから取り出され、行列アクセラレータ内の行列(タイル)設定に適用される。
【0149】
[i.タイル使用構成]
図18は、一実施形態による、タイルの使用の構成用のサポートを示す。メモリ1801はサポートされるべき行列(タイル)のタイル記述1803を含む。
【0150】
プロセッサ/コア1805の実行回路1811は、タイル記述1803のア態様をタイル構成1817に記憶する。タイル構成1817は、パレット用のどのタイルが構成されているか(各タイル内の行および列の数)、ならびに行列サポートが使用中であることのマーキングを詳述する。実行回路1811は、タイル構成1817によって指定されたタイルを使用するように構成される。実行回路1811はまた、タイル使用を示すために、機械状態レジスタ、モデル固有レジスタ(MSR)、または構成レジスタを含んでもよい。使用中の値および開始値などのさらなる値も設定される。タイル構成1817は、1つまたは複数のレジスタ1819を利用して、タイル使用および構成情報を記憶する。
【0151】
図19は、サポートされるべき行列(タイル)の記述の一実施形態を示す。これは、STTILECFG命令の実行時に記憶されるべき記述である。この例では、各フィールドは1バイトである。バイト[0]には、パレットID1901が記憶される。パレットIDは、パレットIDごとに、タイル内のバイト数、および構成によって定義されるようにこのIDに関連付けられるタイルの行当たりのバイト数を記憶するパレットテーブル1813をインデックス付けするために使用される。
【0152】
バイト1は「startRow」レジスタ1903に記憶されるべき値を記憶し、バイト2は「startP」レジスタ1905に記憶されるべき値を記憶する。これらのイベントの後の命令の再開をサポートするために、命令はこれらのレジスタに情報を記憶する。上述されたイベントなどのブレークイベント後の命令の再開をサポートするために、命令はこれらのレジスタに情報を記憶する。startRow値は、再開に使用されるべき行を示す。startP値は、ペアが使用されるときのストア演算のための行内の位置を示し、いくつかの実施形態では、(ペアの下位タイル内の)行の下半分または(ペアの上位タイル内の)行の上半分を示す。通常、行(列)の位置は必要ではない。
【0153】
TILECONFIGおよびSTTILECFGを除いて、行列(タイル)命令を正常に実行すると、startRowとstartPの両方がゼロに設定される。
【0154】
中断された行列(タイル)命令が再開されないときはいつでも、startRowおよびstartPの値をゼロにすることはソフトウェアの責任である。たとえば、マスクされていない浮動小数点例外ハンドラは、ソフトウェア内の演算を終了し、プログラムカウンタ値を別の命令、通常は次の命令に変更することを決定する場合がある。この場合、ソフトウェア例外ハンドラは、プログラムを再開する前に、オペレーティングシステムによってそれに提示された例外内のstartRow値およびstartP値をゼロにしなければならない。オペレーティングシステムは、その後、復元命令を使用してそれらの値を再ロードする。
【0155】
バイト3は、タイルのペア(タイル当たり1b)の指示1907を記憶する。
【0156】
バイト16~17は、タイル0の行数1913および列数1915を記憶し、バイト18~19は、タイル1の行数および列数を記憶する、などである。言い換えれば、各2バイトグループは、タイルの行数および列数を指定する。2バイトのグループがタイルパラメータを指定するために使用されない場合、それらは値ゼロをもつべきである。実装制限またはパレット制限よりも多くのタイルに対してタイルパラメータを指定すると、故障をもたらす。未構成のタイルは、0行0列の初期状態に設定される。
【0157】
最後に、メモリ内の構成は、通常、いくつかの連続するバイトのオールゼロなどの、末尾の描写で終わる。
【0158】
[ii.例示的なタイルおよびタイル構成ストレージ]
図20A~
図20Dはレジスタ1819の例を示す。
図20Aは複数のレジスタ1819を示す。図示されたように、各タイル(TMM0 2001…TMMN 2003)は別々のレジスタを有し、各レジスタはその特定のタイルの行および列のサイズを記憶する。StartP2011およびStartRow2013は別々のレジスタに記憶される。タイルが使用のために構成されていることを示すために、1つまたは複数のステータスレジスタ2015が設定される(たとえば、TILES_CONFIGURED=1)。
【0159】
図20Bは複数のレジスタ1819を示す。図示されたように、各タイルはその行および列のための別々のレジスタを有する。たとえば、TMM0行構成2021、TMM0列構成2023、StartP2011、およびStartRow2013は別々のレジスタに記憶される。タイルが使用のために構成されていることを示すために、1つまたは複数のステータスレジスタ2015が設定される(たとえば、TILES_CONFIGURED=1)。
【0160】
図20Cは単一のレジスタ1819を示す。図示されたように、このレジスタは、パックドデータレジスタとして単一のレジスタに記憶されたタイル構成(タイル当たりの行および列)2031、StartP2011、およびStartRow2013を記憶する。タイルが使用のために構成されていることを示すために、1つまたは複数のステータスレジスタ2015が設定される(たとえば、TILES_CONFIGURED=1)。
【0161】
図20Dは複数のレジスタ1819を示す。図示されたように、単一のレジスタはタイル構成(タイル当たりの行および列)2031を記憶する。StartP2011およびStartRow2013は別々のレジスタに記憶される。タイルが使用のために構成されていることを示すために、1つまたは複数のステータスレジスタ2015が設定される(たとえば、TILES_CONFIGURED=1)。
【0162】
それらが別々に示される場合、開始レジスタを単一のレジスタに結合することなどの、他の組合せも考えられる。
【0163】
[連鎖タイル演算]
開示された実施形態に従って実装された単一命令複数データ(SIMD)プロセッサコアは、SIMD実行を通して有意のデータ並列性を獲得する。しかしながら、SIMD機能ユニットの数またはSIMD機能ユニットの幅によってスループットが制限されるので、SIMD計算スループットに制限が存在することがある。SIMD機能ユニットは、本明細書では処理エンジン(PE)と呼ばれることがある。開示された実施形態は、SIMD実行において使用するための本明細書で説明されたTILESアーキテクチャを活用し、SIMD機能ユニットの数の増加、および各機能ユニットの幅の増大を可能にする。
【0164】
開示された実施形態は、配列内のタイルにアクセスする連鎖タイル演算の間でデータの再使用を可能にするために、TILESアーキテクチャを使用する多くのベクトル化可能命令にエネルギー効率および実行速度の向上をもたらす。本明細書で使用するとき、チェーンは、共通のソースおよびデスティネーションタイル指定子を有する一連の2つ以上の命令(マクロ演算および/またはマイクロ演算)である。本明細書で使用するとき、ソースタイル指定子は、処理されるべきソースタイルを取り出す位置を指定する命令に含まれる。デスティネーションタイル指定子は、命令の結果を書き込むデスティネーションタイルを指定する命令に含まれる。指定されたソースタイルおよびデスティネーションタイルは、メモリ、キャッシュ階層、スクラッチパッド、およびレジスタファイルのうちの任意の1つまたは複数に記憶されてもよい。
【0165】
タイル演算のチェーンの非限定的な例を説明するために、第1の命令は指定されたデスティネーションタイルに書き込まれるべき結果を生成することができるが、その結果は第2の命令の指定されたソースタイルとしても使用することができる。いくつかの実施形態によれば、第1の命令のデスティネーションタイル指定子は破棄され、第1の命令の結果は代わりに第2の命令を実行する処理エンジンに送られる。いくつかの他の実施形態では、第1の命令のデスティネーションタイル指定子は無視され、第1の命令の結果は代わりにチェーン内の後続の命令を実行する処理エンジンに送られる。いくつかの他の実施形態では、第1の命令のデスティネーションタイル指定子は矛盾し、第1の命令の結果は代わりにチェーン内の後続の命令を実行する処理エンジンに送られる。いくつかの他の実施形態では、第1の命令のデスティネーションタイル指定子は軽視され、第1の命令の結果は代わりにチェーン内の後続の命令を実行する処理エンジンに送られる。いくつかの他の実施形態では、第1の命令のデスティネーションタイル指定子は使われず、第1の命令の結果は代わりにチェーン内の後続の命令を実行する処理エンジンに送られる。いくつかの他の実施形態では、第1の命令のデスティネーションタイル指定子は拒絶され、第1の命令の結果は代わりにチェーン内の後続の命令を実行する処理エンジンに送られる。
【0166】
いくつかの実施形態では、第1の命令の結果は複数の後続の命令に送られる。いくつかの実施形態では、第2の命令は、チェーン内の複数の先行命令の結果を受け取る。
【0167】
命令チェーンはそれらの長さに制限はなく、多くの命令が連鎖されてもよい。命令チェーンは、少なくとも(最適化された命令チェーンの実行を示すプロセスフロー図を示す)
図21A~
図23、(効率的な連鎖タイル演算を実行するための最適化疑似コードを示す)
図24A、および(チェーン内の命令間の連係を指定するチェーン開始命令用の命令フォーマットを示す)
図25Bに関してさらに説明され図示される。
【0168】
命令チェーンを実行するときに複数の演算の間でデータの再使用を可能にすることによってプロセッサ効率を向上させるために、開示された実施形態は、第1の命令のデスティネーションタイル指定子を破棄し、最初に結果をメモリに書き戻さずに、代わりに第2の命令に直接第1の命令の結果を送ることを選ぶことによって効率を向上させる。そのような破棄は、チェーン内の複数の命令に対して実施することができるが、それに限定されない。
【0169】
少なくとも第1の命令の結果がストレージに書き戻されるのを第2の命令が待つ必要がないので、第1の命令のデスティネーションタイル指定子を無視することは性能を改善する。いくつかの実施形態では、命令チェーン内の命令は、破棄を実行するかどうかおよびどのように実行するかに関するヒントを実行回路に提供するチェーン制御フィールドを含む。いくつかの実施形態では、実行回路は、複数の命令間の依存関係を監視し、1つまたは複数のデスティネーションタイル指定子を破棄し、代わりに1つまたは複数の命令のうちの1つの結果を命令チェーン内の次の命令を実行する1つまたは複数のPEに送るかどうかおよびいつ送るかを判定する、バイナリトランスレータを含む。
【0170】
いくつかの実施形態では、実行回路は定期的な整合性チェックを実行して、その破棄によって引き起こされるあらゆる問題を特定する。いくつかの実施形態では、実行回路は、デスティネーションタイル指定子が破棄された命令の記録を保持し、その結果、SIMDプロセッサは、今回は破棄されずにそれらの記録された命令をロールバックし再実行することができる。
【0171】
開示された実施形態は、実行コアの選択を1つのタイプに制限することによってSIMD効率を向上させることを試みない。むしろ、いくつかの実施形態は、非対称処理エンジン(PE)の混合を利用し、いくつかは他よりも限定された機能を有し、少ない電力を利用する。いくつかの実施形態では、非対称処理エンジンの中からの処理エンジンの選択とともにSIMD実行経路は、実行時に動的に行われる。
【0172】
いくつかの開示された実施形態は、非対称処理エンジン(PE)の配列のパラダイムを利用する。いくつかの実施形態では、非対称配列内の各PEは、限られた数の演算しか実行できない算術論理装置(ALU)である。たとえば、非対称PEの配列は、いくつかのシフト専用のPE、いくつかの加算および減算専用のPE、いくつかのフォーマット変換専用のPE、いくつかの除算専用のPE、いくつかの乗算専用のPE、いくつかの単項演算専用のPE、いくつかの論理演算専用のPEなどを含んでもよいが、それらに限定されない。いくつかの実施形態では、少なくともいくつかのPEは、2つ以上のタイプの演算を実行することが可能である。動作時は、実行回路は、SIMD命令チェーン内の1組の命令を実行するように、1組のPEを動的に選択し構成する。要求される性能を提供される性能に一致させて、異なる演算を実行するために異なるPEを選択することができ、それにより、電力効率の高い実装形態がもたらされる。この非対称配列の1つの利点は、これによって、必要とされる処理能力と消費される電力との間の緊密な整合が可能になることであり、すなわち、必要とされるだけの処理能力が使用されることである。いくつかの実施形態では、1組のPEの1回だけのセットアップおよび構成を実行して、タイル演算チェーンの異なる部分を実行し、その構成が残りの行列要素に再使用されることを可能にすることによって、電力が節約される。本明細書で説明されたように、「タイル」は行列と呼ばれる場合があり、行列の特別なケースである。
【0173】
いくつかの実施形態では、PEの非対称配列は、SIMD処理経路内の複数のPEの間でデータを送るように動的に構成可能な相互接続を含む。動作時は、実行回路は、SIMD命令チェーンを実行するように1組のPEを選択し、それらの間でデータを転送するようにネットワークを動的にセットアップすることができる。この動的に構成可能な相互接続の1つの利点は、必ずしもすべてのPEを他のすべてのPEに接続するためのコストおよびダイ面積を負担することなく、幅広い1組のPEの間の接続を可能にすることである。
【0174】
このPEの非対称配列および動的に構成可能な相互接続の1つの利点は、中間結果がレジスタファイルに書き戻されるか、またはバイパスネットワークに出力される必要がなく、むしろ、1つのPEの結果をSIMD処理チェーン内の次のPEに送ることができることである。したがって、このハードウェアは、より高性能でよりエネルギー効率の高いSIMDプロセッサをもたらすことができる。
【0175】
[例示的な実行]
図21Aは、最適化可能なタイル命令チェーンの例示的な実行を示すブロックフロー図である。図示されたように、最適化されていない命令チェーン2100は、3つのソースタイルの関数として結果タイルを設定する演算の算術シーケンス、すなわち、結果=((A+B)*3)-C)を指定する。そのような命令チェーンはN回実行される可能性があり、毎回、M行K列の要素を有するタイルの各要素に記憶される結果を生成する。しかしながら、簡単にするために、かつ最適化を説明するために、命令のただ1つのインスタンス、すなわち1つのタイルを生成するループの1回の反復のみが示されている。
【0176】
本明細書で開示された実施形態に従って命令チェーンを最適化するために、複数の命令のデスティネーションタイル指定子のうちの1つまたは複数は破棄され、その命令の結果が代わりにチェーン内の後続の命令に送られる。いくつかの実施形態では、実行回路は、それらのデスティネーションタイル指定子を破棄した命令の記録を保持し、破棄から生じた問題が検出された場合、記録された複数の命令のうちの1つまたは複数を再実行することによって回復するようにロールバックする。
【0177】
いくつかの実施形態では、実行回路は、それらのデスティネーションタイル指定子を破棄した命令の記録を保持し、その結果、実行回路は、破棄することなく再び命令をロールバックし再実行することができる。いくつかの実施形態では、実行回路はさらに、破棄の前の機械状態を保存し、その後、機械状態整合性チェックを実行して、破棄によって生じたあらゆる不整合を検出する。いくつかの実施形態では、実行回路は、命令のデスティネーションタイル指定子をさらに破棄することで、そのタイルの構成内にダーティビットを設定し、ダーティタイルが後続の命令によって読み取られた場合に不整合を検出する。いくつかの実施形態における実行回路は、そのような不整合が検出された場合、フォルトを発生させ、いくつかの実施形態では、実行回路は1つまたは複数の命令をロールバックし再実行する。
【0178】
動作時は、図示されたように、命令チェーン2100は、各々がデスティネーションタイル指定子およびソースタイル指定子を有する一連の命令(たとえば、マイクロ演算)またはマクロ命令としてストレージからフェッチされる。通常、命令チェーン内の命令は、スクラッチパッド2102に記憶された中間タイルをソースおよびデスティネーションとして指定する。いくつかの実施形態では、命令チェーン内の命令は、レジスタファイル内、キャッシュ内、または他の何らかのメモリ構造内のソースタイルおよび/またはデスティネーションタイルを指定する。いくつかの実施形態では、スクラッチパッドは、実行回路に比較的近くに配置され、中間データ結果を記憶する、1つまたは複数のレジスタまたはラッチ、さらにはキャッシュメモリおよび他のスタティックメモリを含むメモリである。ある時点に、スクラッチパッド内のタイルはメモリにコミットされる。
【0179】
行列(タイル)A、B、およびCがすでにスクラッチパッド2102にロードされていると仮定すると、行列(タイル)A、B、およびCは、それぞれ、タイルA2104、タイルB2106、およびタイルC2108においてスクラッチパッド2102から取り出される。
【0180】
加算2110において、タイルAとタイルBが加算され、タイルE2112にある結果がスクラッチパッド2102内(またはレジスタファイル内、キャッシュ内、もしくは他の何らかのメモリ構造内)のタイルEに書き戻される。タイルE2112は、それが潜在的な最適化点であることを強調するために破線の境界で示されている。いくつかの実施形態では、本明細書で開示され、
図21Bに関して図示および説明されるように、実行回路は、加算2110で実行された命令のデスティネーションタイル指定子、タイルEを破棄し、代わりに2112での演算結果を、命令チェーン内の次の演算である乗算2114で実行されるように送る。
【0181】
乗算2114において、加算2110の結果すなわちタイルEは、加算2110の指定されたデスティネーションタイルが破棄されたかどうかに応じて、処理エンジンに送られて、スクラッチパッド2102からブロードキャストされた値(たとえば、3)2120と乗算され、タイルF2116にある結果は、スクラッチパッド2102内のタイルFに書き戻される。タイルF2116は、それが潜在的な最適化点であることを強調するために破線の境界で示されている。いくつかの実施形態では、本明細書で開示され、
図21Bに関して図示および説明されるように、実行回路は、乗算2114のデスティネーションタイル指定子であるタイルFを破棄し、代わりに乗算2114の結果を命令チェーン内の次の命令である減算2118に送る。
【0182】
演算減算2118において、乗算2114の結果すなわちタイルFは、乗算2114の指定されたデスティネーションタイルが破棄されたかどうかに応じて、そこからタイルC2108が減算されるべきソースとして処理エンジンに転送される。演算減算2118はチェーン内の最後の命令を表すので、最適化は利用可能ではなく、演算減算2118の結果であるタイルD2122は、2124においてスクラッチパッド2102内(またはレジスタファイル内、キャッシュ内、もしくは他の何らかのメモリ構造内)に戻して記憶される。
【0183】
図21Bは、最適化されたタイル命令チェーンの例示的な実行を示すブロックフロー図である。図示されたように、
図21Aの命令チェーン2100のような最適化された命令チェーン2150は、3つのソースタイルの関数として結果タイルを設定する演算の算術シーケンス、すなわち、結果=((A+B)*3)-C)を指定する。そのような命令チェーンはN回実行される可能性があり、毎回、M行K列の要素を有するタイルの各要素に記憶される結果を生成する。しかしながら、簡単にするために、かつ最適化を説明するために、命令のただ1つのインスタンス、すなわち1つのタイルを生成するループの1回の反復のみが示されている。
【0184】
いくつかの実施形態に従って命令チェーンを最適化するために、1つまたは複数の命令のデスティネーションタイル指定子は破棄され、それらの命令の結果が代わりにチェーン内の後続の命令に送られる。
【0185】
動作時は、図示されたように、命令チェーン2150は、各々が算術オペコードを指定し、デスティネーションタイル指定子および少なくとも1つのソースタイル指定子を有する一連の命令(たとえば、マイクロ演算)またはマクロ命令としてストレージからフェッチされる。通常、命令チェーン内の命令は、スクラッチパッド2152に記憶された中間タイルをソースタイルおよびデスティネーションタイルとして指定する。ある時点に、スクラッチパッド内のタイルはメモリにコミットされる。
【0186】
行列(タイル)A、B、およびCがすでにスクラッチパッド2152にロードされていると仮定すると、行列(タイル)A、B、およびCは、それぞれ、2154、2156、および2158においてスクラッチパッド2152から取り出される。
【0187】
2160において、タイルAおよびタイルBは、ソースタイルとしてタイルAおよびタイルBを指定し、デスティネーションタイルとしてタイルEを指定する命令に応答して加算される。動作時は、SIMDプロセッサは、同時にかつ並行して複数のベクトル要素に対して加算を実行する。実行回路は、2160においてデスティネーションタイル指定子を破棄し、代わりに加算の結果をチェーン内の次の命令である乗算2164に送ることによってフローを最適化する。動作時は、プロセッサは、複数のベクトル要素に対して同時にかつ並行して乗算2164を実行する。
【0188】
[破棄するかどうかおよびいつ破棄するかの判定]
本明細書で開示された実施形態によれば、演算加算2160の結果を演算乗算2164に再送することによってフローを最適化するように実行回路をトリガすることができる複数の方法がある。
【0189】
第1に、いくつかの実施形態では、実行回路は、一連の命令をバッファリングし、それらを実行時に動的に分析して命令間のデータ依存性を検出する、バイナリトランスレータを含む。バイナリトランスレータは、たとえば、実行された演算の結果がチェーン内の次の命令によって一度だけ使用され、二度と使用されないことを予測することができる。そのような予測に基づいて、実行回路は、スクラッチパッド内の指定されたデスティネーションタイルを破棄し、代わりにチェーン内の次の命令を実行する次の処理エンジンに結果を送ることを選ぶことができる。
【0190】
その上、いくつかの開示された実施形態では、加算2160命令はCHAIN_TILE_OPなどのチェーンフレンドリ命令フォーマットに従ってフォーマットされ、CHAIN_TILE_OPは、
図25Aに関して下記でさらに図示および説明されるように、算術演算、デスティネーションタイル、最大3つソースタイル、おそらく即値、およびチェーン制御フィールドを指定する。CHAIN_TILE_OP命令のフォーマットおよび開示された実施形態の他の命令フォーマットは、
図25C~
図25Dおよび
図26A~
図26Dに関してさらに図示および説明される。
【0191】
チェーンが存在するかどうかを判定し、それを最適化するさらなる方法が、限定されることなく開示される。いくつかの実施形態では、CHAIN_TILE_OPのチェーン制御フィールドは、開示された実施形態に従って最適化されるべきチェーンの一部または命令であるものとして、第1の命令および1つまたは複数の後続の命令を識別するヘッダを含む。いくつかの実施形態では、チェーン制御フィールドは、チェーン位置ヒントが、たとえばチェーン内の各命令をマークするチェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒントのうちの1つであることを示す。いくつかの実施形態では、チェーン内の各命令チェーン制御フィールドは、チェーン内の命令の相対位置を示すインデックスを指定する。
【0192】
さらに、いくつかの開示された実施形態では、チェーン開始命令は、
図25Bに関してさらに説明および図示されるように、実行回路に命令チェーンが続くことを認識させ、チェーンのいくつかの詳細を提供する。
【0193】
開示された実施形態によれば、実行回路は、最適化する命令チェーンが存在する判定に応答して、命令チェーンを実行するように処理エンジンのSIMD経路を動的に選択および構成し、チェーン内の最後の命令以外のすべての指定されたデスティネーションタイルを破棄し、最後の命令以外のすべての結果をチェーン内の次の命令を実行する次のPEに送る。したがって、図示されたように、実行回路はチェーンの存在を判定し、加算2160の結果を指定されたデスティネーションタイルであるタイルEから乗算2164を実行するPEに再送する。同様に、実行回路は、乗算2164の結果を指定されたデスティネーションタイルFからチェーン内の次の命令である減算2168を実行するPEに再送することによって、チェーンの処理を継続する。動作時は、SIMDプロセッサは、複数のタイル要素に対して加算2160、乗算2164、および減算2168を同時にかつ並行して実行する。減算2168の後にチェーン内にさらなる命令がない場合、実行回路は、2174においてスクラッチパッド2152に戻して記憶されるように、減算2168の結果を指定されたデスティネーションタイルD2172に送る。
【0194】
[処理エンジン(PE)の選択およびSIMD経路の構成]
連鎖タイル演算を実施するために、開示された実施形態は、連鎖数学演算を実行するように処理エンジンを選択する。いくつかの実施形態では、SIMDプロセッサは、処理エンジン(PE)の非対称配列を含む。そのような配列は、様々な異なるタイプの処理エンジンを有し、いくつかは他の処理エンジンよりも高い処理能力を有するが、より多くの電力またはダイ面積を消費する。
【0195】
いくつかの実施形態では、SIMDプロセッサは、実行されている数学演算に適合する処理エンジンを有する。たとえば、いくつかの処理エンジンは、いくつかの非限定的な例を挙げると、インクリメント、デクリメント、平方根、否定などの単項演算、またはサイン、コサイン、およびタンジェントなどの三角関数演算専用であってもよい。いくつかのPEは、いくつかの非限定的な例を挙げると、数学演算(たとえば、加算、減算、除算、乗算、モジュラなど)、および論理演算(たとえば、AND、OR、NAND、NOR、XOR、XNOR、CMPなど)などの二項演算専用であってもよい。いくつかの実施形態では、SIMDプロセッサは、連鎖タイル演算を実施する際に使用するための対称処理エンジンのプールを有する。
【0196】
動作時は、いくつかの実施形態によれば、実行回路は、連鎖タイル演算を実行するようにPEを選択し構成する。たとえば、
図21Bの実施形態では、実行回路は、複数のタイル要素を並列に処理するようにPEを選択する。いくつかの実施形態における実行回路は、処理能力をタイル処理要件に一致させて、最小数のPEを選択し構成しようと試みる。いくつかの実施形態では、タイルの複数の要素上で並列に演算するように、異なるPEまたは1組のPEが選択される。いくつかの実施形態では、命令チェーンの演算を実行するようにPEを選択するとき、実行回路は、演算のSIMDチェーンを実行する際に経路設定レイテンシを最小化するために、プロセッサのダイ上で互いに近接して配置されるPEを選択する。いくつかの実施形態では、命令チェーンの演算を実行するようにPEを選択するとき、実行回路は、ダイの様々な領域にわたって均等に広がるPEを選択し、ダイ領域にわたって均等に電力の利用を均衡させ広げる。
【0197】
いくつかの開示された実施形態は、非対称処理エンジン(PE)の配列のパラダイムを利用する。いくつかの実施形態では、非対称配列内の各PEは、限られた数の演算しか実行できない算術論理装置(ALU)である。たとえば、非対称PEの配列は、いくつかのシフト専用のPE、いくつかの加算および減算専用のPE、いくつかのフォーマット変換専用のPE、いくつかの除算専用のPE、いくつかの乗算専用のPE、いくつかの単項演算専用のPE、いくつかの論理演算専用のPEなどを含んでもよいが、それらに限定されない。いくつかの実施形態では、少なくともいくつかのPEは、2つ以上のタイプの演算を実行することが可能である。動作時は、実行回路は、SIMD命令チェーン内の1組の命令を実行するように、1組のPEを動的に選択し構成する。異なるPEが異なる演算を実行するために選択され、提供される性能に必要とされる性能に一致させることができ、それにより、電力効率の高い実装形態がもたらされる。この非対称配列の1つの利点は、これによって、必要とされる処理能力と消費される電力との間の緊密な整合が可能となることであり、すなわち、必要とされるだけの処理能力が使用されることである。いくつかの実施形態では、1組のPEの1回だけのセットアップおよび構成を実行して、タイル演算チェーンの異なる部分を実行し、その構成が残りの行列要素に再使用されることを可能にすることによって、電力が節約される。本明細書で説明されたように、「タイル」は行列と呼ばれる場合があり、行列の特別なケースである。
【0198】
[例示的なプロセッサ実行フロー]
図22は、一実施形態による、連鎖タイル命令に応答するプロセッサの実行フローを示すブロックフロー図である。2201において、プロセッサが、フェッチ回路を使用して、各々がそれぞれのソースタイルおよびデスティネーションタイルを指定するソースタイル指定子およびデスティネーションタイル指定子を有する複数の命令をフェッチする。2203において、プロセッサが、フェッチされた複数の命令をメモリにバッファリングする。動作2203は、フェッチされた複数の命令が他の場所にバッファリングされるか、または全くバッファリングされない限り、その破線の境界で示されたようにオプションである。2205において、プロセッサが、復号回路を使用して、フェッチされた複数の命令を復号する。2207において、プロセッサが、復号された複数の命令の実行をスケジュールする。動作2207は、それが異なる時間に行われるか、または全く行われなくてもよい限り、その破線の境界で示されたようにオプションである。2209において、プロセッサが、実行回路を使用して、以下のように復号された複数の命令を実行する。
【0199】
2211において、プロセッサの実行回路が、命令チェーンに属する復号された第1および第2の命令を識別する。「破棄するかどうかおよびいつ破棄するかの判定」と題するセクションは、プロセッサが命令チェーンに属する復号された第1および第2の命令を識別する様々な方法を説明する。1つの実施形態は、たとえば、
図25Bに関してさらに説明および図示されるように、2201において複数の命令をフェッチする前にプロセッサがチェーン開始命令をフェッチすることを必要とする。チェーン開始命令は、命令チェーンが続き、そのチェーンに関するいくつかの詳細を提供することを実行回路に通知する。
【0200】
2213において、プロセッサの実行回路が、復号された第1および第2の命令を実行する第1および第2の処理エンジン(PE)を有するSIMD経路を動的に選択し構成する。2215において、プロセッサの実行回路が、第1のPEから第2のPEへのネットワーク経路を動的に構成する。動作2215は、ネットワーク経路がすでに構成されていてもよい限り、その破線の境界で示されたようにオプションである。
【0201】
2217において、例示された実施形態によれば、プロセッサの実行回路が、復号された第1の命令のデスティネーションタイル指定子を破棄し、代わりに、復号された第2の命令を実行するために第2のPEによって使用されるように、復号された第1の命令の結果を第1のPEから第2のPEに送る。いくつかの他の実施形態では、第1の命令のデスティネーションタイル指定子は無視され、第1の命令の結果は代わりにチェーン内の後続の命令を実行する処理エンジンに送られる。いくつかの他の実施形態では、第1の命令のデスティネーションタイル指定子は矛盾し、第1の命令の結果は代わりにチェーン内の後続の命令を実行する処理エンジンに送られる。いくつかの他の実施形態では、第1の命令のデスティネーションタイル指定子は軽視され、第1の命令の結果は代わりにチェーン内の後続の命令を実行する処理エンジンに送られる。いくつかの他の実施形態では、第1の命令のデスティネーションタイル指定子は使われず、第1の命令の結果は代わりにチェーン内の後続の命令を実行する処理エンジンに送られる。いくつかの他の実施形態では、第1の命令のデスティネーションタイル指定子は拒絶され、第1の命令の結果は代わりにチェーン内の後続の命令を実行する処理エンジンに送られる。
【0202】
いくつかの実施形態では、実行回路は、それらのデスティネーションタイル指定子を破棄した命令の記録を保持し(
図22に示されず)、必要に応じて複数の命令の記録のうちの1つまたは複数をロールバックし再実行する。
【0203】
2219において、プロセッサが実行された命令の結果をコミットする。動作2219は、結果のライトバックが異なる時点で行われるか、または全く行われない限り、その破線の境界で示されたようにオプションである。
【0204】
図23は、一実施形態による、単一命令複数データ(SIMD)プロセッサによる連鎖タイル命令の実行を示すブロックフロー図である。通常、フロー2300は、少なくとも
図13、
図14、
図28A~
図28B、および
図29A~
図29Bに関して本明細書に詳述された実行回路などの実行回路によって実行される。
【0205】
2302において、プロセッサが、1組の命令がフェッチされるまで1つまたは複数の命令をフェッチし、復号し、バッファリングし、各命令はソースおよびデスティネーションの行列(タイル)を指定する。
【0206】
2304において、プロセッサがいくつかのエラー条件をテストし、そのいずれかが存在すると、2306において故障が発生する。図示されたように、2304においてテストされたエラー条件には、1)タイルがまだ構成されていないかどうか、2)デスティネーションおよび2つのソースのタイルが有効であるかどうか、3)2つのソースのいずれかがペアであるかどうか、ならびに4)様々な行数および列数のいずれかが範囲外にあることが含まれる。
【0207】
2304においてテストされた故障条件のどれも真でないとき、2308において、プロセッサは復号された第1および第2の命令が命令チェーンの一部であるかどうかを判定する。そうでない場合、プロセッサは2302に戻って、1組の命令がフェッチされるまで少なくとももう1つの命令をフェッチする。しかし、そうである場合、プロセッサは、2310において、復号された第1および第2の命令を実行する第1および第2の処理エンジン(PE)を含むSIMD実行経路を動的に選択し構成する。2312において、プロセッサが、復号された第1の命令のデスティネーションタイル指定子を破棄し、代わりに、復号された第2の命令を実行するときに第2のPEによって使用されるように、復号された第1の命令の結果を第1のPEから第2のPEに送る。2314において、プロセッサが、チェーンが完了したかどうかを判定する。そうでない場合、プロセッサは2302に戻って、1組の命令がフェッチされるまで少なくとももう1つの命令をフェッチする。しかし、そうである場合、フロー2300は終了する。
【0208】
[iv.例示的な疑似コード]
図24Aは、いくつかの実施形態による、プロセッサによって最適化されるべきSIMDコードループを示す例示的なネイティブコードである。図示されたように、ネイティブモード2402におけるSIMDループは、M×Nタイルのすべての要素に対して実行されるべき関数、すなわち、結果=((B+C)<<2)+kである。
【0209】
図24Bは、最適化されていないタイル命令チェーンを示す疑似コードである。そのような命令チェーンは、M×N回、たとえば、M行N列の要素を有するタイルの要素ごとに1回実行される可能性がある。しかしながら、簡単にするために、かつ最適化を説明するために、命令のただ1つのインスタンス、すなわち各ループ要素に対して実行されるSIMDコードの1回の反復のみが示されている。コメントがアスタリスクを含むSIMDコードループ2404内の命令は、本明細書で開示され、また
図24Cに関して図示および説明された実施形態に従って、最適化向けの候補を表す。
【0210】
図24Cは、いくつかの実施形態による、最適化されたタイル命令チェーンを実行するプロセッサ実行回路による実行フローを示す疑似コードである。図示されたように、疑似コード2406は
図24Bの最適化されていない疑似コードと同じであるが、アスタリスクでマークされた命令が取り除かれている。したがって、タイルAにBとCの合計を記憶する代わりに、実行回路は、指定されたデスティネーションタイル(A)を破棄し、代わりに命令を実行する処理エンジンに直接合計の結果を送る。
【0211】
図24Bおよび
図24Cの疑似コードは、コメントと変数名が含まれているため自己文書化している。
【0212】
[ii.例示的な命令フォーマット]
図25Aは、いくつかの実施形態による、チェーンフレンドリ命令用の例示的なフォーマットを示すブロック図である。図示されたように、CHAIN_TILE_OP命令2500は、オペコード2501、チェーン制御2502、デスティネーション2503、およびソース1(2504)を含むチェーンフレンドリ命令である。ソース2(2505)、ソース3(2506)、即値2507、ライトマスク2508、およびサイズ2509を含むいくつかのオプションのパラメータも示されている。
【0213】
オペコード2501は、タイルのすべての要素に対して実行されるべき算術タイル演算を指定する。指定された演算は、単項演算、二項演算(この場合、ソース2(2505)も指定されるべきである)、または三項演算(この場合、ソース2(2505)およびソース3(2506)が指定されるべきである)であってもよい。指定されるべき単項演算の例には、いくつかの非限定的な例を挙げると、インクリメント、デクリメント、平方根、否定、またはサイン、コサイン、およびタンジェントなどの三角関数演算が含まれる。指定されるべき二項演算の例には、いくつかの非限定的な例を挙げると、数学演算(たとえば、加算、減算、除算、乗算、モジュラスなど)、論理演算(たとえば、AND、OR、NAND、NOR、XOR、XNOR、CMPなど)、交換、しきい値、および下限を含む、いくつかの例が含まれるが、それらに限定されない。
【0214】
いくつかの実施形態では、チェーン制御2502は、少なくとも
図21Bに関して図示および説明されたように、開示された実施形態に従って最適化されるべきチェーンの一部または命令として、第1の命令および1つまたは複数の後続の命令を識別するヘッダである。いくつかの実施形態では、チェーン制御フィールドは、チェーン位置ヒントが、たとえばチェーン内の各命令をマークするチェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒントのうちの1つであることを示す。いくつかの実施形態では、チェーン内の各命令チェーン制御フィールドは、チェーン内の命令の相対位置を示すインデックスを指定する。
【0215】
デスティネーション2503、ソース1(2504)、ソース2(2505)、およびソース3(2506)は、デスティネーションタイルおよびソースタイルを指定するタイル指定子である。デスティネーション2503は、いくつかの実施形態では、連鎖タイル命令のデスティネーションを識別するデスティネーションタイル指定子である。いくつかの実施形態では、デスティネーション2503は、命令の結果のための2つ以上のデスティネーションを指定するデスティネーションタイル指定子である。
【0216】
即値2507は、命令内の即値の指定を可能にするものである。即値2507は、即値をサポートしない汎用ベクトルフレンドリフォーマットの一実装形態には存在せず、即値を使用しない命令には存在しないという意味で、その破線の境界によって示されるようにオプションである。
【0217】
ライトマスク2508は、その内容がデータ要素位置ごとに、デスティネーションタイル内のそのデータ要素位置が演算の結果を反映するものであるかどうかを制御する、(その破線の境界によって示された)オプションフィールドである。一部の命令はマージングライトマスクをサポートし、他の命令はマージングライトマスクとゼロイングライトマスクの両方をサポートする。マージすると、ベクトルマスクは、デスティネーションタイル内の任意の1組の要素が任意の演算の実行中に更新から保護されることを可能にし、別の実施形態では、対応するマスクビットが0を有するデスティネーションタイルの各要素の古い値を保存する。対照的に、ベクトルマスクをゼロにすると、デスティネーション内の任意の1組の要素が任意の演算の実行中にゼロにされることが可能になる。ライトマスクが指定されていない場合、すべてのデスティネーション要素はマスクされていないものとして扱われる。
【0218】
サイズ2509は、処理されているタイルデータ要素のサイズを示す(その破線の境界によって示された)オプションフィールドである。サイズ2509は、別個の命令オペランドとして示されているが、アスタリスクは、いくつかの実施形態では、それがオペコード、プレフィックス、またはサフィックスである、各タイル要素のサイズ-それぞれ、1バイト、2バイト、4バイト、または8バイトに対応する、「B」、「W」、「D」、および「Q」に含まれるべきことを示すために含まれる。いくつかの実施形態では、サイズ2509は、各タイル要素の精度レベル-それぞれ、半精度(2バイト)、単精度(4バイト)、倍精度(8バイト)、および4倍精度(16バイト)-に対応するプレフィックスまたはサフィックス、「H」、「S」、「D」、「Q」、および「E」などのオペコードに含まれる。
【0219】
図25Bは、いくつかの実施形態による、チェーン開始命令を示すブロック図である。図示されたように、チェーン開始命令2510は、オペコード2511、チェーン長2512、それぞれターゲット1~ターゲット8 2513A~2513Hを含むチェーンターゲット2513、オプションの二次チェーンターゲット2514、およびオプションのチェーン演算2515を含む。動作時は、いくつかの実施形態によれば、プロセッサは、命令チェーンの1組の命令をフェッチする前にチェーン開始命令をフェッチする。チェーン開始命令は、命令チェーンが続くことをプロセッサに通知し、命令チェーンに関する何らかの情報を提供して、命令チェーンを実行するために処理エンジンのSIMD経路のプロセッサの選択、構成、および経路設定を通知する。
【0220】
オペコード2511は、命令を実行するプロセッサに、その命令をチェーン開始命令として認識させ、命令の挙動をさらに指定するためにプレフィックスまたはサフィックスを含んでもよい。たとえば、オペコード2511は、命令がチェーンターゲット2513、二次チェーンターゲット2514、およびチェーン演算2515を指定するフィールドを含むことを指定するプレフィックスを含んでもよい。動作時は、プロセッサは、いくつかの実施形態によれば、チェーン開始命令2510に応答して、命令チェーンを実行するように処理エンジンのSIMD経路を選択し構成する。
【0221】
いくつかの実施形態におけるチェーン長2512は、命令チェーン内の命令の数を指定する即値または定数である。いくつかの実施形態では、チェーン長2512は、その内容が命令チェーン内の命令の数を指定する汎用レジスタを指定する。
【0222】
チェーンターゲット2513は、命令チェーン内の少なくとも最初の命令のターゲットを指定。図示されたように、チェーンターゲット2513は、8の長さを有する命令チェーン内の最初の7つの命令の各々についてターゲット2513A~2513Hを指定するものである(チェーン内の8つの命令の結果は、次の命令に送られるのではなく、指定されたデスティネーションに書き込まれる)。いくつかの実施形態では、チェーンターゲット2513フィールドは、チェーン内の命令の各々のターゲットを指定するためにビットに論理的に区分化された即値である。いくつかの実施形態では、チェーンターゲット2513は、ターゲット情報を含む汎用レジスタを指定する。いくつかの実施形態では、チェーンターゲット2513は、ターゲット情報を含むベクトルレジスタを指定する。いくつかの実施形態では、チェーンターゲット2513は、ターゲット情報が記憶されたモデル固有レジスタ(「MSR」)を指定する。他の実施形態では、チェーンターゲット2513は、ターゲット情報が記憶されたメモリ位置を指定する。
【0223】
いくつかの実施形態では、4バイトのチェーンターゲット2513フィールドは、命令チェーン内の最大8個の命令の各々に対するターゲットを指定するために4ビットニブルに区分化されてもよい。いくつかの実施形態では、各チェーンターゲット2513A~2513Hは、チェーン内のターゲット命令の絶対位置を指定する。図示されたように、(命令0の)ターゲット1 2513Aは命令1を指定し、ターゲット2 2513Bは命令4を指定し、ターゲット3 2513C、ターゲット4 2513Dは命令4を指定し、ターゲット5 2513Eは命令6を指定し、ターゲット6 2513Fは命令6を指定し、ターゲット7 2513Gは命令7を指定する。
【0224】
いくつかの実施形態では、ターゲット1~7、2513A~Gの各々は、結果を送る先のターゲット命令の相対オフセットを指定する。ターゲット2513A~Gの各々は、命令とそのターゲットとの間の距離を指定する2ビットまたは3ビットの値であり得る。たとえば、図示されたように、ターゲット1 2513Aからターゲット7 2513Gは、それぞれ1、3、2、1、2、1、1を指定する可能性がある。
【0225】
いくつかの実施形態では、二次チェーンターゲット2514はチェーンターゲット2513と同様にフォーマットされるが、命令チェーン内の各命令向けの第2のターゲットを指定する。チェーンターゲット2513と同様に、二次チェーンターゲット2514は、即値、汎用レジスタ、ベクトルレジスタ、モデル固有レジスタ、またはメモリ位置であり得る。二次チェーンターゲット2514は、その破線の境界によって示されるようにオプションである。
【0226】
いくつかの実施形態では、チェーン開始命令2510は、命令チェーンの各々によって実行されるべき演算を指定するチェーン演算2515を含む。動作時は、プロセッサは、チェーン演算2515フィールドを使用して、SIMD実行経路に沿った処理エンジンのその選択、構成、および経路設定を通知する。
【0227】
図25C~
図25Dは、いくつかの実施形態による、汎用ベクトルフレンドリ命令フォーマットおよびその命令テンプレートを示すブロック図である。CHAIN_TILE_OP命令用のフォーマットの一実施形態はCHAIN_TILE_OP(OP,tdest,tsrc1,tsrc2)であり、OPは実行されるべき算術演算を指定し、tsrc1およびtsrc2は加算されるべきソースを指定する。いくつかの実施形態では、tdestフィールドは(
図25C~
図25Dの2546などの)R/M値であり、tsrc1フィールドは、
図25C~
図25Dのレジスタインデックスフィールドである。いくつかの実施形態では、OPオペコードは、第1および第2の識別されたソースの各々が符号付きか符号なしかを示す、[U,S][U,S]プレフィックスまたはサフィックスなどのインジケータを含む。
【0228】
いくつかの実施形態では、命令の符号化は、メモリ内の複数のインデックス付きデスティネーション位置を間接的に識別する、スケールインデックスベース(SIB)タイプのメモリアドレス指定オペランドを含む。1つの実施形態では、SIBタイプのメモリオペランドは、ベースアドレスレジスタを識別する符号化を含んでもよい。ベースアドレスレジスタの内容は、メモリ内の特定のデスティネーション位置のアドレスがそこから計算されるメモリ内のベースアドレスを表すことができる。たとえば、ベースアドレスは、拡張ベクトル命令のための潜在的なデスティネーション位置のブロック内の最初の位置のアドレスであってもよい。1つの実施形態では、SIBタイプのメモリオペランドは、インデックスレジスタを識別する符号化を含んでもよい。インデックスレジスタの各要素は、ベースアドレスから、潜在的なデスティネーション位置のブロック内のそれぞれのデスティネーション位置のアドレスを計算するために使用可能なインデックスまたはオフセットの値を指定することができる。1つの実施形態では、SIBタイプのメモリオペランドは、それぞれのデスティネーションアドレスを計算するときに各インデックス値に適用されるべきスケーリングファクタを指定する符号化を含んでもよい。たとえば、4のスケーリングファクタ値がSIBタイプのメモリオペランド内で符号化される場合、インデックスレジスタの要素から取得された各インデックス値は4を乗算され、次いで、デスティネーションアドレスを計算するためにベースアドレスに加算されてもよい。
【0229】
1つの実施形態では、形式vm32{x,y,z}のSIBタイプのメモリオペランドは、SIBタイプのメモリアドレス指定を使用して指定されたメモリオペランドのベクトル配列を識別することができる。この例では、メモリアドレスの配列は、共通のベースレジスタ、一定のスケーリングファクタ、および各々が32ビットのインデックス値である個々の要素を含むベクタインデックスレジスタを使用して指定される。ベクトルインデックスレジスタは、128ビット(たとえば、XMM)レジスタ(vm32x)、256ビット(たとえば、YMM)レジスタ(vm32y)、または512ビット(たとえば、ZMM)レジスタ(vm32z)であってもよい。別の実施形態では、形式vm64{x,y,z}のSIBタイプのメモリオペランドは、SIBタイプのメモリアドレス指定を使用して指定されたメモリオペランドのベクトル配列を識別することができる。この例では、メモリアドレスの配列は、共通のベースレジスタ、一定のスケーリングファクタ、および各々が64ビットのインデックス値である個々の要素を含むベクタインデックスレジスタを使用して指定される。ベクトルインデックスレジスタは、128ビット(たとえば、XMM)レジスタ(vm64x)、256ビット(たとえば、YMM)レジスタ(vm64y)、または512ビット(たとえば、ZMM)レジスタ(vm64z)であってもよい。
【0230】
[V.詳細な例示的システム、プロセッサ、およびエミュレーション]
上述された命令を実行するハードウェア、ソフトウェアなどの例が本明細書で詳述される。たとえば、下記で説明されるものは、フェッチ、復号、スケジュール、実行、リタイアなどの様々なパイプライン段階を含む命令実行の態様を詳述する。
【0231】
[命令セット]
命令セットは1つまたは複数の命令フォーマットを含んでもよい。所与の命令フォーマットは、とりわけ、実行されるべき演算(たとえば、オペコード)およびその演算が実行されるべきオペランドを指定する様々なフィールド(たとえば、ビットの数、ビットの位置)、ならびに/または他のデータフィールド(たとえば、マスク)を定義することができる。いくつかの命令フォーマットは、命令テンプレート(またはサブフォーマット)の定義によってさらに分類される。たとえば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義され(含まれるフィールドは通常同じ順序であるが、含まれるフィールドが少ないため少なくともいくつかは異なるビット位置を有する)、かつ/または所与のフィールドが異なって解釈されるように定義されてもよい。したがって、ISAの各命令は、所与の命令フォーマット(および定義されている場合その命令フォーマットの命令テンプレートのうちの所与の1つ)を使用して表現され、演算およびオペランドを指定するためのフィールドを含む。たとえば、例示的なADD命令は、特定のオペコード、ならびにそのオペコードを指定するオペコードフィールドおよびオペランド(ソース1/デスティネーションおよびソース2)を選択するオペランドフィールドを含む命令フォーマットを有し、命令ストリーム内でこのADD命令が出現すると、特定のオペランドを選択するオペランドフィールド内に特定の内容が含まれる。高度ベクトル拡張(AVX)(AVX1およびAVX2)と呼ばれ、ベクトル拡張(VEX)コーディング方式を使用するSIMD拡張機能のセットがリリースおよび/または公開されている(たとえば、Intel(登録商標)64およびIA-32アーキテクチャ開発者マニュアル、2014年9月を参照されたく、インテル(登録商標)高度ベクトル拡張プログラミングリファレンス、2014年10月を参照されたい)。
【0232】
[例示的な命令フォーマット]
本明細書で説明された命令の実施形態は、異なるフォーマットで具現化されてもよい。さらに、例示的なシステム、アーキテクチャ、およびパイプラインが下記で詳述される。命令の実施形態は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行されてもよいが、詳述されたものに限定されない。
【0233】
[汎用ベクトルフレンドリ命令フォーマット]
ベクトルフレンドリ命令フォーマットは、ベクトル命令に適した命令フォーマットである(たとえば、ベクトル演算に固有のいくつかのフィールドが存在する)。ベクトル演算とスカラ演算の両方がベクトルフレンドリ命令フォーマットによってサポートされる実施形態が説明されているが、代替の実施形態は、ベクトルフレンドリ命令フォーマットのベクトル演算のみを使用する。
【0234】
図25C~
図25Dは、本発明の実施形態による、汎用ベクトルフレンドリ命令フォーマットおよびその命令テンプレートを示すブロック図である。
図25Cは、本発明の実施形態による汎用ベクトルフレンドリ命令フォーマットおよびそのクラスA命令テンプレートを示すブロック図であり、
図25Dは、本発明の実施形態による汎用ベクトルフレンドリ命令フォーマットおよびそのクラスB命令テンプレートを示すブロック図である。具体的には、クラスAおよびクラスBの命令テンプレート用の汎用ベクトルフレンドリ命令フォーマット2516が定義され、その両方は非メモリアクセス2519命令テンプレートおよびメモリアクセス2520命令テンプレートを含まない。ベクトルフレンドリ命令フォーマットの文脈における汎用という用語は、いかなる特定の命令セットにも結び付けられていない命令フォーマットを指す。
【0235】
ベクトルフレンドリ命令フォーマットが以下の、32ビット(4バイト)または64ビット(8バイト)のデータ要素幅(またはサイズ)を有する64バイトのベクトルオペランド長(またはサイズ)(したがって、64バイトのベクトルは、16個のダブルワードサイズの要素、または代替として、8個のクワッドワードサイズの要素のいずれかで構成される)、16ビット(2バイト)または8ビット(1バイト)のデータ要素幅(またはサイズ)を有する64バイトのベクトルオペランド長(またはサイズ)、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、または8ビット(1バイト)のデータ要素幅(またはサイズ)を有する32バイトのベクトルオペランド長(またはサイズ)、および32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、または8ビット(1バイト)のデータ要素幅(またはサイズ)を有する16バイトのベクトルオペランド長(またはサイズ)をサポートする本発明の実施形態が説明されるが、代替の実施形態は、より多い、より少ない、または異なるデータ要素幅(たとえば、128ビット(16バイト)のデータ要素幅)を有するより多い、より少ない、かつ/または異なるベクトルオペランドサイズ(たとえば、256バイトのベクトルオペランド)をサポートすることができる。
【0236】
図25CのクラスA命令テンプレートは以下を含む。1)非メモリアクセス2519命令テンプレート内に、非メモリアクセス、完全丸め制御タイプ演算2517命令テンプレート、および非メモリアクセス、データ変換タイプ演算2518命令テンプレートが示され、2)メモリアクセス2520命令テンプレート内に、メモリアクセス、一時的2525命令テンプレートおよびメモリアクセス、非一時的2530命令テンプレートが示されている。
図25DのクラスB命令テンプレートは以下を含む。1)非メモリアクセス2519命令テンプレート内に、非メモリアクセス、ライトマスク制御、部分丸め制御タイプ演算2522命令テンプレート、および非メモリアクセス、ライトマスク制御、vsizeタイプ演算2523命令テンプレートが示され、2)メモリアクセス2520命令テンプレート内に、メモリアクセス、ライトマスク制御2527命令テンプレートが示されている。
【0237】
汎用ベクトルフレンドリ命令フォーマット2516は、
図25C~
図25Dに示された順序で下記に列挙された以下のフィールドを含む。
【0238】
フォーマットフィールド2540-このフィールド内の特定の値(命令フォーマット識別子値)は、ベクトルフレンドリ命令フォーマット、したがって命令ストリーム内のベクトルフレンドリ命令フォーマット内の命令の出現を一意に識別する。そのため、このフィールドは、汎用ベクトルフレンドリ命令フォーマットのみを有する命令セットに必要ではないという意味で、オプションである。
【0239】
基本演算フィールド2542-その内容は異なる基本演算を識別する。
【0240】
レジスタインデックスフィールド2544-その内容は、直接またはアドレス生成を介して、ソースオペランドおよびデスティネーションオペランドの位置を、それらがレジスタ内またはメモリ内にあることを指定する。これらは、P×Q(たとえば、32×512、16×128、32×1024、64×1024)のレジスタファイルからN個のレジスタを選択するのに十分な数のビットを含む。1つの実施形態ではNは最大3つのソースレジスタおよび1つのデスティネーションレジスタであってもよいが、代替の実施形態は、より多いまたはより少ないソースレジスタおよびデスティネーションレジスタをサポートすることができる(たとえば、これらのソースのうちの1つがデスティネーションとしても機能する最大2つのソースをサポートすることができ、これらのソースのうちの1つがデスティネーションとしても機能する最大3つのソースをサポートすることができ、最大2つのソースおよび1つのデスティネーションをサポートすることができる)。
【0241】
修飾子フィールド2546-その内容は、メモリアクセスを指定する汎用ベクトル命令フォーマットの命令の出現を、メモリアクセスを指定しない命令と区別する、すなわち、非メモリアクセス2519命令テンプレートとメモリアクセス2520命令テンプレートとを区別する。メモリアクセス演算は、(場合によっては、レジスタ内の値を使用してソースアドレスおよび/またはデスティネーションアドレスを指定する)メモリ階層に対して読み取りおよび/または書き込みを行い、非メモリアクセス演算は行わない(たとえば、ソースおよびデスティネーションはレジスタである)。1つの実施形態では、このフィールドはまた、メモリアドレス計算を実行する3つの異なる方法の中から選択するが、代替の実施形態は、メモリアドレス計算を実行するより多い、より少ない、または異なる方法をサポートすることができる。
【0242】
拡張演算フィールド2550-その内容は、基本演算に加えて、様々な異なる演算のうちのどの演算が実行されるべきかを識別する。このフィールドはコンテキスト固有である。本発明の1つの実施形態では、このフィールドは、クラスフィールド2568、アルファフィールド2552、およびベータフィールド2554に分割される。拡張演算フィールド2550は、2つ、3つ、または4つの命令ではなく、単一の命令で共通の演算グループが実行されることを可能にする。
【0243】
スケールフィールド2560-その内容は、メモリアドレス生成用の(たとえば、2スケール*インデックス+ベースを使用するアドレス生成用の)インデックスフィールドの内容のスケーリングを可能にする。
【0244】
変位フィールド2562A-その内容は、メモリアドレス生成の一部として(たとえば、2スケール*インデックス+ベース+変位を使用するアドレス生成用に)使用される。
【0245】
変位係数フィールド2562B(変位係数フィールド2562Bの真上の変位フィールド2562Aの並置は、一方または他方が使用されることを示すことに留意されたい)-その内容は、アドレス生成の一部として使用され、それは、メモリアクセスのサイズ(N)によってスケーリングされるべき変位係数を指定する-Nは、(たとえば、2スケール*インデックス+ベース+スケーリングされた変位を使用するアドレス生成用の)メモリアクセスにおけるバイト数である。冗長な下位ビットは無視されるため、実効アドレスの計算に使用されるべき最終変位を生成するために、変位係数フィールドの内容はメモリオペランドの合計サイズ(N)と乗算される。Nの値は、(本明細書において後述される)フルオペコードフィールド2574およびデータ操作フィールド2554Cに基づいて、実行時にプロセッサハードウェアによって決定される。変位フィールド2562Aおよび変位係数フィールド2562Bは、それらが非メモリアクセス2519命令テンプレートに使用されないという意味でオプションであり、かつ/または異なる実施形態は、2つのうちの1つのみを実装するか、または2つとも実装しなくてもよい。
【0246】
データ要素幅フィールド2564-その内容は、(いくつかの実施形態ではすべての命令に、他の実施形態ではいくつかの命令のみに)複数のデータ要素幅のうちのどのデータ要素幅が使用されるべきかを識別する。このフィールドは、1つのデータ要素幅のみがサポートされている場合、かつ/またはオペコードのいくつかの態様を使用してデータ要素幅がサポートされている場合は必要でないという意味でオプションである。
【0247】
ライトマスクフィールド2570-その内容は、データ要素位置に基づいて、デスティネーションベクトルオペランド内のそのデータ要素位置が基本演算および拡張演算の結果を反映するかどうかを制御する。クラスA命令テンプレートはマージングライトマスクをサポートし、クラスB命令テンプレートはマージングライトマスクとゼロイングライトマスクの両方をサポートする。マージすると、ベクトルマスクは、デスティネーションタイル内の任意の1組の要素が(基本演算および拡張演算によって指定された)任意の演算の実行中に更新から保護されることを可能にし、他の1つの実施形態では、対応するマスクビットが0を有するデスティネーションの各要素の古い値を保存する。対照的に、ベクトルマスクをゼロにすると、デスティネーション内の任意の1組の要素が(基本演算および拡張演算によって指定された)任意の演算の実行中にゼロにされることが可能になり、1つの実施形態では、対応するマスクビットが0の値を有するときにデスティネーションの要素が0に設定される。この機能のサブセットは、実行されている演算のベクトル長(すなわち、修正される要素の、最初の要素から最後の要素までの範囲)を制御する能力であるが、修正される要素が連続している必要はない。したがって、ライトマスクフィールド2570は、ロード、ストア、算術、論理などを含む部分的なベクトル演算を可能にする。ライトマスクフィールド2570の内容が、使用されるべきライトマスクを含むいくつかのライトマスクレジスタのうちの1つを選択する(したがって、ライトマスクフィールド2570の内容が、実行されるべきそのマスキングを間接的に識別する)本発明の実施形態が説明されるが、代替の実施形態は、代わりにまたはさらに、ライトマスクフィールド2570の内容が実行されるべきマスキングを直接指定することを可能にする。
【0248】
即値フィールド2572-その内容は即値の指定を可能にする。このフィールドは、それが即値をサポートしない汎用ベクトルフレンドリフォーマットの一実装形態には存在せず、即値を使用しない命令には存在しないという意味で、オプションである。
【0249】
クラスフィールド2568-その内容は異なるクラスの命令を区別する。
図25C~
図25Dを参照して、このフィールドの内容はクラスAとクラスBの命令の間を選択する。
図25C~
図25Dでは、特定の値がフィールド内に存在することを示すために角丸四角形(たとえば、
図25C~
図25Dの、それぞれ、クラスフィールド2568に対するクラスA 2568AおよびクラスB 2568B)が使用されている。
【0250】
[クラスAの命令テンプレート]
クラスAの非メモリアクセス2519命令テンプレートの場合、アルファフィールド2552はRSフィールド2552Aとして解釈され、その内容は異なる拡張演算タイプのうちのどの拡張演算タイプが実行されるべきかを識別し(たとえば、丸め2552A.1およびデータ変換2552A.2は、それぞれ、非メモリアクセス、完全丸めタイプ演算2517および非メモリアクセス、データ変換タイプ演算2518の命令テンプレートに対して指定される)、ベータフィールド2554は、指定されたタイプの演算のどれを実行されるべきかを識別する。非メモリアクセス2519命令テンプレートには、スケールフィールド2560、変位フィールド2562A、および変位スケールフィールド2562Bは存在しない。
【0251】
[非メモリアクセス命令テンプレート-完全丸め制御タイプ演算]
非メモリアクセス完全丸め制御タイプ演算2517命令テンプレートでは、ベータフィールド2554は、その内容が静的な丸めを提供する丸め制御フィールド2554Aとして解釈される。本発明の説明された実施形態では、丸め制御フィールド2554Aは、全浮動小数点例外抑制(SAE)フィールド2556および丸め演算制御フィールド2558を含むが、代替の実施形態は、これら両方の概念を同じフィールドに符号化するか、またはこれらの概念/フィールドのうちの1つもしくは他のフィールドのみを有することができる(たとえば、丸め演算制御フィールド2558のみを有することができる)。
【0252】
SAEフィールド2556-その内容は、例外イベント報告を無効にするべきか否かを区別し、抑制が有効になっていることをSAEフィールド2556の内容が示すとき、所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも生成しない。
【0253】
丸め演算制御フィールド2558-その内容は、丸め演算のグループ(たとえば、切り上げ、切り捨て、ゼロへの丸め、および最近接丸め)のうちのどの丸め演算を実行するべきかを識別する。したがって、丸め演算制御フィールド2558は、命令に基づいて丸めモードを変更することを可能にする。プロセッサが丸めモードを指定するための制御レジスタを含む本発明の1つの実施形態では、丸め演算制御フィールド2558の内容はそのレジスタ値を無効にする。
【0254】
[非メモリアクセス命令テンプレート-データ変換タイプ演算]
非メモリアクセスデータ変換タイプ演算2518命令テンプレートでは、ベータフィールド2554はデータ変換フィールド2554Bとして解釈され、その内容は複数のデータ変換(たとえば、データ変換なし、スウィズル、ブロードキャスト)のうちのどのデータ変換が実行されるべきかを識別する。
【0255】
クラスAのメモリアクセス2520命令テンプレートの場合、アルファフィールド2552はエビクションヒントフィールド2552Bとして解釈され、その内容は、複数のエビクションヒントのうちのどのエビクションヒントが使用されるべきかを識別し(
図25Cでは、一時的2552B.1および非一時的2552B.2は、それぞれ、メモリアクセス、一時的2525命令テンプレートおよびメモリアクセス、非一時的2530命令テンプレートに対して指定され)、ベータフィールド2554はデータ操作フィールド2554Cとして解釈され、その内容は、(プリミティブとしても知られている)いくつかのデータ操作演算(たとえば、操作なし、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン)のうちのどのデータ操作演算が実行されるべきかを識別する。メモリアクセス2520命令テンプレートは、スケールフィールド2560、および場合によっては、変位フィールド2562Aまたは変位スケールフィールド2562Bを含む。
【0256】
ベクトルメモリ命令は、変換サポートを用いて、メモリからのベクタロードおよびメモリへのベクタストアを実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素ごとにメモリとの間でデータを転送し、実際に転送される要素は、ライトマスクとして選択されるベクトルマスクの内容によって規定される。
【0257】
[メモリアクセス命令テンプレート-一時的]
一時的データは、キャッシングから恩恵を受けるのに十分早く再利用される可能性が高いデータである。しかしながら、これはヒントであり、様々なプロセッサは、ヒントを完全に無視することを含む様々な方法でそれを実施することができる。
【0258】
[メモリアクセス命令テンプレート-非一時的]
非一時的データは、第1レベルキャッシュ内のキャッシングから恩恵を受けるのに十分早く再利用される可能性が低いデータであり、排除が優先されるべきである。しかしながら、これはヒントであり、様々なプロセッサは、ヒントを完全に無視することを含む様々な方法でそれを実施することができる。
【0259】
[クラスBの命令テンプレート]
クラスBの命令テンプレートの場合、アルファフィールド2552はライトマスク制御(Z)フィールド2552Cとして解釈され、その内容は、ライトマスクフィールド2570によって制御されるライトマスキングがマージングであるべきかゼロイングであるべきかを区別する。
【0260】
クラスBの非メモリアクセス2519命令テンプレートの場合、ベータフィールド2554の一部はRLフィールド2557Aとして解釈され、その内容は異なる拡張演算タイプのうちのどの拡張演算タイプが実行されるべきかを識別し(たとえば、丸め2557A.1およびベクトル長(VSIZE)2557A.2は、それぞれ、非メモリアクセス、ライトマスク制御、部分丸め制御タイプ演算2522命令テンプレートおよび非メモリアクセス、ライトマスク制御、VSIZEタイプ演算2523命令テンプレートに対して指定される)、ベータフィールド2554の残りは、指定されたタイプの演算のどれが実行されるべきかを識別する。非メモリアクセス2519命令テンプレートには、スケールフィールド2560、変位フィールド2562A、および変位スケールフィールド2562Bは存在しない。
【0261】
非メモリアクセス、ライトマスク制御、部分丸め制御タイプ演算2522命令テンプレートでは、ベータフィールド2554の残りは丸め演算制御フィールド2559Aとして解釈され、例外イベント報告は無効にされる(所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも生成しない)。
【0262】
丸め演算制御フィールド2559A-丸め演算制御フィールド2558と同じように、その内容は、丸め演算のグループ(たとえば、切り上げ、切り捨て、ゼロへの丸め、および最近接丸め)のうちのどの丸め演算を実行するべきかを識別する。したがって、丸め演算制御フィールド2559Aは、命令に基づいて丸めモードを変更することを可能にする。プロセッサが丸めモードを指定するための制御レジスタを含む本発明の1つの実施形態では、丸め演算制御フィールド2559Aの内容はそのレジスタ値を無効にする。
【0263】
非メモリアクセス、ライトマスク制御、VSIZEタイプ演算2523命令テンプレートでは、ベータフィールド2554の残りはベクトル長フィールド2559Bとして解釈され、その内容は、複数のデータベクトル長(たとえば、128、256、または512バイト)のうちのどのデータベクトル長が実行されるべきかを識別する。
【0264】
クラスBのメモリアクセス2520命令テンプレートの場合、ベータフィールド2554の一部はブロードキャストフィールド2557Bとして解釈され、その内容は、ブロードキャストタイプのデータ操作演算が実行されるべきか否かを区別し、ベータフィールド2554の残りはベクトル長フィールド2559Bとして解釈される。メモリアクセス2520命令テンプレートは、スケールフィールド2560、および場合によっては、変位フィールド2562Aまたは変位スケールフィールド2562Bを含む。
【0265】
汎用ベクトルフレンドリ命令フォーマット2516に関して、フォーマットフィールド2540、基本演算フィールド2542、およびデータ要素幅フィールド2564を含むフルオペコードフィールド2574が示されている。フルオペコードフィールド2574がこれらのフィールドのすべてを含む1つの実施形態が示されているが、フルオペコードフィールド2574はそれらのすべてをサポートしない実施形態においてこれらのフィールドのすべてより少ないフィールドを含む。フルオペコードフィールド2574は演算コード(オペコード)を提供する。
【0266】
拡張演算フィールド2550、データ要素幅フィールド2564、およびライトマスクフィールド2570は、これらの特徴が汎用ベクトルフレンドリ命令フォーマットにおいて命令ごとに指定されることを可能にする。
【0267】
ライトマスクフィールドおよびデータ要素幅フィールドの組合せは、それらが異なるデータ要素幅に基づいてマスクが適用されることを可能にするという点で、タイプ付き命令を作成する。
【0268】
クラスAおよびクラスB内で見出される様々な命令テンプレートは、様々な状況で有益である。本発明のいくつかの実施形態では、異なるプロセッサまたはプロセッサ内の異なるコアは、クラスAのみ、クラスBのみ、または両方のクラスをサポートすることができる。たとえば、汎用コンピューティング向けの高性能汎用アウトオブオーダコアは、クラスBのみをサポートすることができ、主としてグラフィックスおよび/または科学(スループット)コンピューティング向けのコアは、クラスAのみをサポートすることができ、両方向けのコアは両方をサポートすることができる(当然、両方のクラスからのテンプレートと命令の何らかの混合を有するが、両方のクラスからのすべてのテンプレートおよび命令を有するとは限らないコアは、本発明の範囲内にある)。また、単一のプロセッサが複数のコアを含んでもよく、それらのすべてが同じクラスをサポートするか、またはそれらの中の異なるコアが異なるクラスをサポートする。たとえば、別個のグラフィックスコアと汎用コアをもつプロセッサでは、主としてグラフィックスおよび/または科学コンピューティング向けの複数のグラフィックスコアのうちの1つがクラスAのみをサポートすることができ、汎用コアのうちの1つまたは複数が、クラスBのみをサポートする汎用コンピューティング向けのアウトオブオーダ実行およびレジスタリネーミングを有する高性能汎用コアであってもよい。別個のグラフィックコアをもたない別のプロセッサは、クラスAとクラスBの両方をサポートするもう1つの汎用のインオーダコアまたはアウトオブオーダコアを含んでもよい。当然、本発明の異なる実施形態では、1つのクラスからの特徴も他のクラスに実装されてもよい。高水準言語で書かれたプログラムは、1)実行用のターゲットプロセッサによってサポートされるクラスの命令のみを有する形式、または2)すべてのクラスの命令の異なる組合せを使用して書かれた代替ルーチンを有し、現在コードを実行しているプロセッサによってサポートされる命令に基づいて実行するようにルーチンを選択する制御フローコードを有する形式を含む、様々な異なる実行可能形式に入れられる(たとえば、ジャストインタイムコンパイルされるか、または静的コンパイルされる)はずである。
【0269】
[例示的な特殊ベクトルフレンドリ命令フォーマット]
図26Aは、本発明の実施形態による、例示的な特殊ベクトルフレンドリ命令フォーマットを示すブロック図である。
図26Aは、フィールドの位置、サイズ、解釈、および順序、ならびにそれらのフィールドのうちのいくつかの値を指定するという意味で特殊である、特殊ベクトルフレンドリ命令フォーマット2600を示す。特殊ベクトルフレンドリ命令フォーマット2600は、x86命令セットを拡張するために使用されてもよく、したがって、いくつかのフィールドは、既存のx86命令セットおよびその拡張(たとえば、AVX)で使用されるフィールドと同様または同じである。このフォーマットは、拡張を有する既存のx86命令セットのプレフィックス符号化フィールド、実オペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および即値フィールドと一致したままである。
図26Aのフィールドがマップされる
図25C~
図25Dのフィールドが示されている。
【0270】
本発明の実施形態は、説明の目的で汎用ベクトルフレンドリ命令フォーマット2516との関連で特殊ベクトルフレンドリ命令フォーマット2600を参照して説明されているが、本発明は、特許請求される場合を除き、特殊ベクトルフレンドリ命令フォーマット2600に限定されないことを理解されたい。たとえば、汎用ベクトルフレンドリ命令フォーマット2516は様々なフィールドに対して様々な可能なサイズを考察するが、特殊ベクトルフレンドリ命令フォーマット2600は特定のサイズのフィールドを有するものとして示されている。具体的な例として、データ要素幅フィールド2564は特殊ベクトルフレンドリ命令フォーマット2600では1ビットフィールドとして示されているが、本発明はそのように限定されない(すなわち、汎用ベクトルフレンドリ命令フォーマット2516はデータ要素幅フィールド2564の他のサイズを考察する)。
【0271】
特殊ベクトルフレンドリ命令フォーマット2600は、
図26Aに示された順序で下記に列挙された以下のフィールドを含む。
【0272】
EVEXプレフィックス(バイト0~3)2602-4バイト形式で符号化されている。
【0273】
フォーマットフィールド2540(EVEXバイト0、ビット[7:0])-最初のバイト(EVEXバイト0)はフォーマットフィールド2540であり、それは0×62(本発明の1つの実施形態においてベクトルフレンドリ命令フォーマットを識別するために使用される一意の値)を含む。
【0274】
2番目~4番目のバイト(EVEXバイト1~3)は、特定の機能を提供するいくつかのビットフィールドを含む。
【0275】
REXフィールド2605(EVEXバイト1、ビット[7-5])-EVEX.Rビットフィールド(EVEXバイト1、ビット[7]-R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]-X)、およびEVEX.Bビットフィールド(EVEXバイト1、ビット[5]-B)で構成される。EVEX.R、EVEX.X、およびEVEX.Bのビットフィールドは、対応するVEXビットフィールドと同じ機能を提供し、1の補数形式を使用して符号化される、すなわち、ZMM0は1111Bとして符号化され、ZMM15は0000Bとして符号化される。命令の他のフィールドは、当技術分野で知られているレジスタインデックスの下位3ビット(rrr、xxx、およびbbb)を符号化し、その結果、Rrrr、Xxxx、およびBbbbは、EVEX.R、EVEX.X、およびEVEX.Bを追加することによって形成されてもよい。
【0276】
REX'2610A-これはREX'フィールド2610の最初の部分であり、拡張された32個のレジスタセットの上位16個または下位16個のいずれかを符号化するために使用されるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]-R')である。本発明の1つの実施形態では、このビットは、下記に示される他のビットとともに、実オペコードバイトが62であるBOUND命令から(よく知られたx86 32ビットモードで)区別するためにビット反転フォーマットで記憶されるが、(後述される)MOD R/Mフィールドでは、MODフィールド内の11の値を受け入れず、本発明の代替の実施形態は、これおよび下記に示される他のビットを反転フォーマットで記憶しない。下位16個のレジスタを符号化するために1の値が使用される。言い換えれば、R'Rrrrは、他のフィールドからのEVEX.R'、EVEX.R、および他のRRRを結合することによって形成される。
【0277】
オペコードマップフィールド2615(EVEXバイト1、ビット[3:0]-mmmm)-その内容は暗黙の先行オペコードバイト(0F、0F38、または0F3)を符号化する。
【0278】
データ要素幅フィールド2564(EVEXバイト2、ビット[7]-W)-記号EVEX.Wによって表される。EVEX.Wは、データタイプ(32ビットデータ要素または64ビットデータ要素)の粒度(サイズ)を定義するために使用される。
【0279】
EVEX.vvvv2620(EVEXバイト2、ビット[6:3]-vvvv)-EVEX.vvvvの役割は以下を含んでもよい。1)EVEX.vvvvは、反転(1の補数)形式で指定された最初のソースレジスタオペランドを符号化し、2つ以上のソースオペランドを有する命令に有効である。2)EVEX.vvvvは、いくつかのベクトルシフトに対して1の補数形式で指定されるデスティネーションレジスタオペランドを符号化する。3)EVEX.vvvvはいかなるオペランドも符号化せず、フィールドは予約され、1111bを含むべきである。したがって、EVEX.vvvvフィールド2620は、反転(1の補数)形式で記憶された最初のソースレジスタ指定子の下位4ビットを符号化する。命令に応じて、指定子サイズを32個のレジスタに拡張するために、さらに異なるEVEXビットフィールドが使用される。
【0280】
EVEX.U2568クラスフィールド(EVEXバイト2、ビット[2]-U)-EVEX.U=0の場合、それはクラスAまたはEVEX.U0を示し、EVEX.U=1の場合、それはクラスBまたはEVEX.U1を示す。
【0281】
プレフィックス符号化フィールド2625(EVEXバイト2、ビット[1:0]-pp)-基本演算フィールドに追加のビットを提供する。EVEXプレフィックスフォーマットでレガシーSSE命令にサポートを提供することに加えて、これはSIMDプレフィックスを圧縮するという利点も有する(SIMDプレフィックスを表すために1バイトを必要とするのではなく、EVEXプレフィックスは2ビットのみを必要とする)。1つの実施形態では、レガシーフォーマットとEVEXプレフィックスフォーマットの両方でSIMDプレフィックス(66H、F2H、F3H)を使用するレガシーSSE命令をサポートするために、これらのレガシーSIMDプレフィックスはSIMDプレフィックス符号化フィールドに符号化され、実行時に、デコーダのPLAに提供される前に、レガシーSIMDプレフィックスに拡張される(そのため、PLAは、これらのレガシー命令のレガシーフォーマットとEVEXフォーマットの両方を修正なしに実行することができる)。より新しい命令は、オペコード拡張としてEVEXプレフィックス符号化フィールドの内容を直接使用することができるが、いくつかの実施形態は、整合性のために同様の方式で拡張するが、これらのレガシーSIMDプレフィックスによって異なる意味が指定されることを可能にする。代替の実施形態は、2ビットSIMDプレフィックス符号化をサポートするようにPLAを再設計することができ、したがって拡張を必要としない。
【0282】
アルファフィールド2552(EVEXバイト3、ビット[7]-EH、EVEX.EH、EVEX.rs、EVEX.RL、EVEX.ライトマスク制御、およびEVEX.Nとしても知られ、またαで示されている)-前述されたように、このフィールドはコンテキスト固有である。
【0283】
ベータフィールド2554(EVEXバイト3、ビット[6:4]-SSS、EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られ、またβββで示されている)-前述されたように、このフィールドはコンテキスト固有である。
【0284】
REX'2610B-これはREX'フィールド2610の残りであり、拡張された32個のレジスタセットの上位16個または下位16個のいずれかを符号化するために使用され得るEVEX.V'ビットフィールド(EVEXバイト3、ビット[3]-V')である。このビットはビット反転フォーマットで記憶される。下位16個のレジスタを符号化するために1の値が使用される。言い換えれば、V'VVVVはEVEX.V'とEVEX.vvvvを結合することによって形成される。
【0285】
ライトマスクフィールド2570(EVEXバイト3、ビット[2:0]-kkk)-その内容は、前述されたようにライトマスクレジスタ内のレジスタのインデックスを指定する。本発明の1つの実施形態では、固有値EVEX.kkk=000は、特定の命令に対してライトマスクが使用されないことを意味する特殊な挙動を有する(これは、すべてのものにハードワイヤリングされたライトマスクの使用を含む様々な方法またはマスキングハードウェアをバイパスするハードウェアで実施されてもよい)。
【0286】
リアルオペコードフィールド2630(バイト4)はオペコードバイトとしても知られる。オペコードの一部はこのフィールドで指定される。
【0287】
MOD R/Mフィールド2640(バイト5)は、MODフィールド2642、Regフィールド2644、およびR/Mフィールド2646を含む。前述されたように、MODフィールド2642の内容は、メモリアクセス演算と非メモリアクセス演算とを区別する。Regフィールド2644の役割は、2つの状況に要約することができる。デスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかを符号化するか、またはオペコード拡張として扱われ、いかなる命令オペランドを符号化するためにも使用されない。R/Mフィールド2646の役割は、以下の、メモリアドレスを参照する命令オペランドを符号化すること、またはデスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかを符号化することを含んでもよい。
【0288】
スケール、インデックス、ベース(SIB)バイト(バイト6)-前述されたように、スケールフィールド2560の内容はメモリアドレス生成に使用される。SIB.xxx2654およびSIB.bbb2656-これらのフィールドの内容は、レジスタインデックスXxxxおよびBbbbに関して以前に参照されている。
【0289】
変位フィールド2562A(バイト7~10)-MODフィールド2642が10を含むとき、バイト7~10は変位フィールド2562Aであり、それはレガシー32ビット変位(disp32)と同じように機能し、バイト粒度で機能する。
【0290】
変位係数フィールド2562B(バイト7)-MODフィールド2642が01を含むとき、バイト7は変位係数フィールド2562Bである。このフィールドの位置は、バイト粒度で機能するレガシーx86命令セットの8ビット変位(disp8)の位置と同じである。disp8は符号拡張されているので、-128バイトオフセットと127バイトオフセットとの間のアドレス指定しかできず、64バイトのキャッシュラインに関しては、disp8は、4つの本当に有用な値-128、-64、0、および64にのみ設定できる8ビットを使用し、より大きな範囲がしばしば必要とされるので、disp32が使用されるが、disp32は4バイトを必要とする。disp8およびdisp32と対照的に、変位係数フィールド2562Bはdisp8の再解釈であり、変位係数フィールド2562Bを使用するとき、実際の変位は、メモリオペランドアクセスのサイズ(N)と乗算された変位係数フィールドの内容によって決定される。このタイプの変位はdisp8*Nと呼ばれる。これにより、平均命令長(変位に使用される単一バイトであるが、はるかに広い範囲を有する)が短くなる。そのような圧縮された変位は、実効変位がメモリアクセスの粒度の倍数であるという仮定に基づいており、したがって、アドレスオフセットの冗長な下位ビットは符号化される必要がない。言い換えれば、変位係数フィールド2562Bは、レガシーx86命令セットの8ビット変位を置換する。したがって、変位係数フィールド2562Bは、disp8がdisp8*Nに多重定義されるという唯一の例外を除いて、x86命令セットの8ビット変位と同じ方法で符号化される(そのため、ModRM/SIB符号化規則における変更はない)。言い換えれば、符号化規則または符号化長に変更はないが、(バイト単位のアドレスオフセットを取得するためにメモリオペランドのサイズによって変位をスケーリングする必要がある)ハードウェアによる変位値の解釈のみに変更がある。即値フィールド2572は前述されたように動作する。
【0291】
[フルオペコードフィールド]
図26Bは、本発明の1つの実施形態による、フルオペコードフィールド2574を構成する特殊ベクトルフレンドリ命令フォーマット2600のフィールドを示すブロック図である。具体的には、フルオペコードフィールド2574は、フォーマットフィールド2540、基本演算フィールド2542、およびデータ要素幅(W)フィールド2564を含む。基本演算フィールド2542は、プレフィックス符号化フィールド2625、オペコードマップフィールド2615、およびリアルオペコードフィールド2630を含む。
【0292】
[レジスタインデックスフィールド]
図26Cは、本発明の1つの実施形態による、レジスタインデックスフィールド2544を構成する特殊ベクトルフレンドリ命令フォーマット2600のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド2544は、REXフィールド2605、REX'フィールド2610、MODR/M.regフィールド2644、MODR/M.r/mフィールド2646、VVVVフィールド2620、xxxフィールド2654、およびbbbフィールド2656を含む。
【0293】
[拡張演算フィールド]
図26Dは、本発明の1つの実施形態による、拡張演算フィールド2550を構成する特殊ベクトルフレンドリ命令フォーマット2600のフィールドを示すブロック図である。クラス(U)フィールド2568が0を含むとき、それは、EVEX.U0(クラスA 2568A)を意味し、1を含むとき、それはEVEX.U1(クラスB 2568B)を意味する。U=0であり、MODフィールド2642が(非メモリアクセス演算を意味する)11を含むとき、アルファフィールド2552(EVEXバイト3、ビット[7]-EH)はrsフィールド2552Aとして解釈される。rsフィールド2552Aが1(丸め2552A.1)を含むとき、ベータフィールド2554(EVEXバイト3、ビット[6:4]-SSS)は丸め制御フィールド2554Aとして解釈される。丸め制御フィールド2554Aは、1ビットのSAEフィールド2556および2ビットの丸め演算制御フィールド2558を含む。rsフィールド2552Aが0(データ変換2552A.2)を含むとき、ベータフィールド2554(EVEXバイト3、ビット[6:4]-SSS)は3ビットのデータ変換フィールド2554Bとして解釈される。U=0であり、MODフィールド2642が(メモリアクセス演算を意味する)00、01、または10を含むとき、アルファフィールド2552(EVEXバイト3、ビット[7]-EH)は、エビクションヒント(EH)フィールド2552Bとして解釈され、ベータフィールド2554(EVEXバイト3、ビット[6:4]-SSS)は、3ビットのデータ操作フィールド2554Cとして解釈される。
【0294】
U=1であるとき、アルファフィールド2552(EVEXバイト3、ビット[7]-EH)は、ライトマスク制御(Z)フィールド2552Cとして解釈される。U=1であり、MODフィールド2642が(非メモリアクセス演算を意味する)11を含むとき、ベータフィールド2554の一部(EVEXバイト3、ビット[4]-S0)はRLフィールド2557Aとして解釈され、1(丸め2557A.1)を含むとき、ベータフィールド2554の残り(EVEXバイト3、ビット[6-5]-S2-1)は丸め演算制御フィールド2559Aとして解釈され、RLフィールド2557Aが0(VSIZE2557.A2)を含むとき、ベータフィールド2554の残り(EVEXバイト3、ビット[6-5]-S2-1)はベクトル長フィールド2559B(EVEXバイト3、ビット[6-5]-L1-0)として解釈される。U=1であり、MODフィールド2642が(メモリアクセス演算を意味する)00、01、または10を含むとき、ベータフィールド2554(EVEXバイト3、ビット[6:4]-SSS)は、ベクトル長フィールド2559B(EVEXバイト3、ビット[6-5]-L1-0)およびブロードキャストフィールド2557B(EVEXバイト3、ビット[4]-B)として解釈される。
【0295】
[例示的なレジスタアーキテクチャ]
図27は、本発明の1つの実施形態による、レジスタアーキテクチャ2700のブロック図である。図示された実施形態では、512ビット幅の32個のベクトルレジスタ2710が存在し、これらのレジスタはzmm0からzmm31として参照される。下位16個のzmmレジスタの下位256ビットは、レジスタymm0~15と重なる。下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0~15と重なる。下記の表に示されたように、特殊ベクトルフレンドリ命令フォーマット2600は、これらの重なったレジスタファイルを処理する。
【表1】
【0296】
言い換えれば、ベクトル長フィールド2559Bは、最大長と1つまたは複数の他のより短い長さとの間で選択し、そのようなより短い長さの各々は先行する長さの半分の長さであり、ベクトル長フィールド2559Bのない命令テンプレートは最大ベクトル長を処理する。さらに、1つの実施形態では、特殊ベクトルフレンドリ命令フォーマット2600のクラスB命令テンプレートは、パックドまたはスカラの単精度/倍精度浮動小数点データおよびパックドまたはスカラの整数データを処理する。スカラ演算は、zmm/ymm/xmmレジスタ内の最下位データ要素位置で実行される演算であり、上位データ要素位置は、実施形態に応じて、命令前の位置と同じままか、またはゼロにされる。
【0297】
ライトマスクレジスタ2715-図示された実施形態では、各々が64ビットサイズの8つのライトマスクレジスタ(k0からk7)が存在する。代替の実施形態では、ライトマスクレジスタ2715は16ビットサイズである。前述されたように、本発明の1つの実施形態では、ベクトルマスクレジスタk0は、ライトマスクとして使用することはできず、通常k0を示す符号化がライトマスクに使用されると、0xFFFFのハードワイヤリングされたライトマスクが選択され、その命令用のライトマスキングが事実上無効になる。
【0298】
汎用レジスタ2725-図示された実施形態では、メモリオペランドをアドレス指定するために既存のx86アドレス指定モードとともに使用される16個の64ビット汎用レジスタが存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8からR15の名前で参照される。
【0299】
MMXパックド整数フラットレジスタファイル2750をエイリアスするスカラ浮動小数点スタックレジスタファイル(x87スタック)2745、つまり、図示された実施形態では、x87スタックは、x87命令セット拡張を使用する32/64/80ビット浮動小数点データに対してスカラ浮動小数点演算を実行するために使用される8要素スタックであり、MMXレジスタは、64ビットパックド整数データに対する演算を実行し、ならびにMMXレジスタとXMMレジスタとの間で実行されるいくつかの演算用のオペランドを保持するために使用される。
【0300】
本発明の代替の実施形態は、より広いまたはより狭いレジスタを使用してもよい。さらに、本発明の代替の実施形態は、より多い、より少ない、または異なるレジスタファイルおよびレジスタを使用してもよい。
【0301】
[例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ]
プロセッサコアは、異なる方法で、異なる目的のために、かつ異なるプロセッサにおいて実装されてもよい。たとえば、そのようなコアの実装形態には、1)汎用コンピューティング向けの汎用インオーダコア、2)汎用コンピューティング向けの高性能汎用アウトオブオーダコア、3)主としてグラフィックスおよび/または科学(スループット)コンピューティング向けの専用コアが含まれてもよい。様々なプロセッサの実装形態には、1)汎用コンピューティング向けの1つもしくは複数の汎用インオーダコアおよび/または汎用コンピューティング用の1つもしくは複数の汎用アウトオブオーダコアを含むCPU、ならびに2)主としてグラフィックスおよび/または科学(スループット)向けの1つまたは複数の専用コアを含むコプロセッサが含まれてもよい。そのような様々なプロセッサは様々なコンピュータシステムアーキテクチャをもたらし、そのようなコンピュータシステムアーキテクチャには、1)CPUとは別のチップ上のコプロセッサ、2)CPUと同じパッケージ内の別のダイ上のコプロセッサ、3)CPUと同じダイ上のコプロセッサ(この場合、そのようなコプロセッサは、統合グラフィックスおよび/もしくは科学(スループット)ロジックなどの専用ロジック、または専用コアと呼ばれることがある)、ならびに4)同じダイ上に(アプリケーションコアまたはアプリケーションプロセッサと呼ばれることもある)説明されたCPU、上述したコプロセッサ、および追加の機能を含んでもよいシステムオンチップが含まれてもよい。例示的なコアアーキテクチャが次に説明され、例示的なプロセッサおよびコンピュータアーキテクチャの説明が続く。
【0302】
[例示的なコアアーキテクチャ]
[インオーダコアおよびアウトオブオーダコアのブロック図]
図28Aは、本発明の実施形態による、例示的なインオーダパイプラインと、例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。
図28Bは、本発明の実施形態による、プロセッサに含まれるべきインオーダアーキテクチャコアの例示的な実施形態と、例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。
図28A~
図28Bの実線のボックスはインオーダパイプラインおよびインオーダコアを示し、破線のボックスのオプションの追加は、レジスタリネーミング、アウトオブオーダ発行/実行パイプラインおよびコアを示す。インオーダの態様がアウトオブオーダの態様のサブセットであると仮定して、アウトオブオーダの態様を説明する。
【0303】
図28Aでは、プロセッサパイプライン2800は、フェッチ段階2802と、長さ復号段階2804と、復号段階2806と、割当て段階2808と、リネーミング段階2810と、(ディスパッチまたは発行としても知られる)スケジューリング段階2812と、レジスタ読み取り/メモリ読み取り段階2814と、実行段階2816と、ライトバック/メモリ書き込み段階2818と、例外処理段階2822と、コミット段階2824とを含む。
【0304】
図28Bは、実行エンジンユニット2850に結合されたフロントエンドユニット2830を含むプロセッサコア2890を示し、両方ともメモリユニット2870に結合される。コア2890は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替のコアタイプであってもよい。さらに別の選択肢として、コア2890は、たとえば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理装置(GPGPU)コア、グラフィックスコアなどの専用コアであってもよい。
【0305】
フロントエンドユニット2830は、復号ユニット2840にフェッチされた命令2839を送信するように結合された命令フェッチユニット2838に結合された命令変換ルックアサイドバッファ(TLB)2836に結合された命令キャッシュユニット2834に結合された分岐予測ユニット2832を含む。復号ユニット2840(またはデコーダ)は命令を復号し、復号された1つまたは複数の命令2841、あるいは元の命令から復号されるか、またはそうでない場合、元の命令を反映するか、もしくは元の命令から導出された、マイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号を出力として生成することができる。復号ユニット2840は、様々な異なるメカニズムを使用して実装されてもよい。適切なメカニズムの例には、参照テーブル、ハードウェア実装、プログラマブルロジック配列(PLA)、マイクロコード読み出し専用メモリ(ROM)などが含まれるが、それらに限定されない。1つの実施形態では、コア2890は、いくつかのマクロ命令用のマイクロコードを(たとえば、復号ユニット2840内またはそうでない場合フロントエンドユニット2830内に)記憶するマイクロコードROMまたは他の媒体を含む。復号ユニット2840は、実行エンジンユニット2850内のリネーム/アロケータユニット2852に結合される。
【0306】
実行エンジンユニット2850は、リタイアメントユニット2854および1つまたは複数のスケジューラユニット2856のセットに結合されたリネーム/アロケータユニット2852を含む。スケジューラユニット2856は、予約ステーション、中央命令ウィンドウなどを含む、任意の数の様々なスケジューラを表す。スケジューラユニット2856は、物理レジスタファイルユニット2858に結合される。物理レジスタファイルユニット2858の各々は1つまたは複数の物理レジスタファイルを表し、それらの異なるファイルは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(たとえば、実行されるべき次の命令のアドレスである命令ポインタ)などの1つまたは複数の異なるデータタイプを記憶する。1つの実施形態では、物理レジスタファイルユニット2858は、ベクトルレジスタユニット、ライトマスクレジスタユニット、およびスカラレジスタユニットを備える。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供することができる。物理レジスタファイルユニット2858は、レジスタリネーミングおよびアウトオブオーダ実行が(たとえば、リオーダバッファおよびリタイアメントレジスタファイルを使用すること、将来ファイル、履歴バッファ、およびリタイアメントレジスタファイルを使用すること、レジスタマップおよびレジスタのプールを使用することなどで)実装され得る様々な方法を示すために、リタイアメントユニット2854と重なっている。リタイアメントユニット2854および物理レジスタファイルユニット2858は、実行クラスタ2860に結合される。実行クラスタ2860は、1つまたは複数の実行ユニット2862のセット、および1つまたは複数のメモリアクセスユニット2864のセットを含む。実行ユニット2862は、様々な演算(たとえば、シフト、加算、減算、乗算)を、様々なタイプのデータ(たとえば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行することができる。いくつかの実施形態は、特定の機能または機能のセットに専用のいくつかの実行ユニットを含んでもよいが、他の実施形態は、ただ1つの実行ユニットまたはすべてがすべての機能を実行する複数の実行ユニットを含んでもよい。スケジューラユニット2856、物理レジスタファイルユニット2858、および実行クラスタ2860は、いくつかの実施形態がいくつかのタイプのデータ/演算用の別々のパイプライン(スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、ならびに/または各々が独自のスケジューラユニット、物理レジスタファイルユニット、および/もしくは実行クラスタを有するメモリアクセスパイプライン-別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット2864を有するいくつかの実施形態が実装される)を作成するので、場合によっては複数であるように示されている。別々のパイプラインが使用される場合、これらのパイプラインのうちの1つまたは複数がアウトオブオーダ発行/実行であり、残りがインオーダであってもよいことも理解されたい。
【0307】
1組のメモリアクセスユニット2864は、レベル2(L2)キャッシュユニット2876に結合されたデータキャッシュユニット2874に結合されたデータTLBユニット2872を含むメモリユニット2870に結合される。例示的な一実施形態では、メモリアクセスユニット2864は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含んでもよく、それらの各々はメモリユニット2870内のデータTLBユニット2872に結合される。命令キャッシュユニット2834は、メモリユニット2870内のレベル2(L2)キャッシュユニット2876にさらに結合される。L2キャッシュユニット2876は、1つまたは複数の他のレベルのキャッシュ、および最終的にメインメモリに結合される。
【0308】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプライン2800を実装することができる。1)命令フェッチ2838がフェッチ段階2802および長さ復号段階2804を実行する。2)復号ユニット2840が復号段階2806を実行する。3)リネーム/アロケータユニット2852が割当て段階2808およびリネーミング段階2810を実行する。4)スケジューラユニット2856がスケジュール段階2812を実行する。5)物理レジスタファイルユニット2858およびメモリユニット2870がレジスタ読み取り/メモリ読み取り段階2814を実行し、実行クラスタ2860が実行段階2816を実行する。6)メモリユニット2870および物理レジスタファイルユニット2858がライトバック/メモリ書き込み段階2818を実行する。7)様々なユニットが例外処理段階2822に関与してもよい。8)リタイアメントユニット2854および物理レジスタファイルユニット2858がコミット段階2824を実行する。
【0309】
コア2890は、本明細書で説明された命令を含む、1つまたは複数の命令セット(たとえば、(より新しいバージョンで追加されたいくつかの拡張を有する)x86命令セット、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM Holdingsの(NEONなどのオプションの追加拡張を有する)ARM命令セット)をサポートすることができる。1つの実施形態では、コア2890は、パックドデータ命令セット拡張(たとえば、AVX1、AVX2)をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションによって使用される演算がパックドデータを使用して実行されることが可能になる。
【0310】
コアは、マルチスレッド化(演算またはスレッドの2つ以上の並列セットの実行)をサポートし、タイムスライスマルチスレッド化、(物理コアが同時にマルチスレッド化しているスレッドの各々に単一の物理コアが論理コアを提供する)同時マルチスレッド化、またはそれらの組合せ(たとえば、インテル(登録商標)ハイパースレッディングテクノロジなどにおけるタイムスライスフェッチおよび復号ならびにその後の同時マルチスレッド化)を含む様々な方法でサポートすることができる。
【0311】
レジスタリネーミングはアウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングはインオーダアーキテクチャで使用されてもよいことを理解されたい。図示されたプロセッサの実施形態はまた、別々の命令およびデータのキャッシュユニット2834/2874ならびに共有L2キャッシュユニット2876を含むが、代替の実施形態は、たとえば、レベル1(L1)内部キャッシュまたは複数レベルの内部キャッシュなどの、命令とデータの両方のための単一の内部キャッシュを有してもよい。いくつかの実施形態では、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュの組合せを含んでもよい。あるいは、キャッシュのすべてがコアおよび/またはプロセッサの外部にあってもよい。
【0312】
[特定の例示的なインオーダコアアーキテクチャ]
図29A~
図29Bは、より具体的で例示的なインオーダコアアーキテクチャのブロック図を示し、そのコアはチップ内の(同じタイプおよび/または異なるタイプの他のコアを含む)いくつかのロジックブロックのうちの1つである。ロジックブロックは、用途に応じて、高帯域幅相互接続ネットワーク(たとえば、リングネットワーク)を介していくつかの固定機能ロジック、メモリI/Oインターフェース、および他の必要なI/Oロジックと通信する。
【0313】
図29Aは、本発明の実施形態による、オンダイ相互接続ネットワーク2902へのその接続およびレベル2(L2)キャッシュ2904のそのローカルサブセットを有するシングルプロセッサコアのブロック図である。1つの実施形態では、命令デコーダ2900は、パックドデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ2906は、キャッシュメモリへの低レイテンシアクセスがスカラユニットおよびベクトルユニットに入ることを可能にする。1つの実施形態では(設計を簡易化するために)、スカラユニット2908およびベクトルユニット2910は、別々のレジスタセット(それぞれ、スカラレジスタ2912およびベクトルレジスタ2914)を使用し、それらの間で転送されたデータはメモリに書き込まれ、次いでレベル1(L1)キャッシュ2906から読み戻されるが、本発明の代替の実施形態は、異なる手法を使用する(たとえば、単一のレジスタセットを使用するか、またはデータが2つのレジスタファイル間で書き込みおよび読み戻しなしに転送されることを可能にする通信経路を含む)ことができる。
【0314】
L2キャッシュ2904のローカルサブセットは、プロセッサコア当たり1つの、別々のローカルサブセットに分割されたグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ2904のそれ自体のローカルサブセットへの直接アクセス経路を有する。プロセッサコアによって読み取られたデータは、そのL2キャッシュサブセット2904に記憶され、それら自体のローカルL2キャッシュサブセットにアクセスする他のプロセッサコアと並行して、迅速にアクセスすることができる。プロセッサコアによって書き込まれたデータは、それ自体のL2キャッシュサブセット2904に記憶され、必要な場合他のサブセットからフラッシュされる。リングネットワークは共有データについての整合性を保証する。リングネットワークは、プロセッサコア、L2キャッシュ、および他のロジックブロックなどのエージェントがチップ内で互いに通信することを可能にするように双方向である。各リングデータ経路は方向当たり1012ビット幅である。
【0315】
図29Bは、本発明の実施形態による、
図29Aのプロセッサコアの一部の拡大図である。
図29Bは、L1キャッシュ2906の一部であるL1データキャッシュ2906A、ならびにベクトルユニット2910およびベクトルレジスタ2914に関するさらなる詳細を含む。具体的には、ベクトルユニット2910は、整数、単精度浮動小数点、および倍精度浮動小数点の命令のうちの1つまたは複数を実行する16幅ベクトル処理装置(VPU)である(16幅ALU2928を参照)。VPUは、スウィズルユニット2920によるレジスタ入力のスウィズル、数値変換ユニット2922A~Bによる数値変換、およびメモリ入力上での複製ユニット2924による複製をサポートする。ライトマスクレジスタ2926は、結果として生じるベクトル書き込みの予測を可能にする。
【0316】
図30は、本発明の実施形態による、2つ以上のコアを有する場合があり、統合型メモリコントローラを有する場合があり、統合型グラフィックスを有する場合があるプロセッサ3000のブロック図である。
図30の実線のボックスは、シングルコア3002A、システムエージェント3010、1つまたは複数のバスコントローラユニット3016のセットを有するプロセッサ3000を示し、破線のボックスのオプション追加は、マルチコア3002A~N、システムエージェントユニット3010内の1つまたは複数の統合メモリコントローラユニット3014のセット、および専用ロジック3008を有する代替のプロセッサ3000を示す。
【0317】
したがって、プロセッサ3000の様々な実装形態は、1)(1つまたは複数のコアを含んでもよい)統合グラフィックスおよび/または科学(スループット)ロジックである専用ロジック3008、ならびに1つまたは複数の汎用コア(たとえば、汎用インオーダコア、汎用アウトオブオーダコア、それら2つの組合せ)であるコア3002A~Nを有するCPUと、2)主にグラフィックスおよび/または科学(スループット)向けの多数の専用コアであるコア3002A~Nを有するコプロセッサと、3)多数の汎用インオーダコアであるコア3002A~Nを有するコプロセッサとを含んでもよい。したがって、プロセッサ3000は、たとえば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU(汎用グラフィックス処理装置)、(30以上のコアを含む)高スループット多統合コア(MIC)コプロセッサ、組込み型プロセッサなどの、汎用プロセッサ、コプロセッサ、または専用プロセッサであってもよい。プロセッサは、1つまたは複数のチップ上に実装されてもよい。プロセッサ3000は、たとえば、BiCMOS、CMOS、またはNMOSなどのいくつかのプロセス技術のいずれかを使用して、1つもしくは複数の基板の一部であってもよく、かつ/またはそれらの上に実装されてもよい。
【0318】
メモリ階層は、コア内の1つまたは複数のレベルのキャッシュ、1つもしくは複数の共有キャッシュユニット3006のセット、および1組の統合メモリコントローラユニット3014に結合された外部メモリ(図示せず)を含む。1組の共有キャッシュユニット3006は、レベル2(L2)、レベル3(L3)、レベル4(L4)、もしくは他のレベルのキャッシュ、最終レベルキャッシュ(LLC)、および/またはそれらの組合せなどの、1つまたは複数の中間レベルキャッシュを含んでもよい。1つの実施形態では、リングベースの相互接続ユニット3012は、統合グラフィックスロジック3008(統合グラフィックスロジック3008は、本明細書では専用ロジックの一例であり、専用ロジックとも呼ばれる)、1組の共有キャッシュユニット3006、およびシステムエージェントユニット3010/統合メモリコントローラユニット3014と相互接続するが、代替の実施形態は、そのようなユニットを相互接続するための任意の数のよく知られた技法を使用することができる。1つの実施形態では、1つまたは複数のキャッシュユニット3006とコア3002A~Nとの間で整合性が維持される。
【0319】
いくつかの実施形態では、コア3002A~Nのうちの1つまたは複数は、マルチスレッド化することが可能である。システムエージェント3010は、コア3002A~Nを調整し動作させる構成要素を含む。システムエージェントユニット3010は、たとえば、電力制御ユニット(PCU)および表示ユニットを含んでもよい。PCUは、コア3002A~Nおよび統合グラフィックスロジック3008の電力状態を調整するために必要なロジックおよび構成要素であってもよく、それらを含んでもよい。表示ユニットは、1つまたは複数の外部接続ディスプレイを駆動するためのものである。
【0320】
コア3002A~Nは、アーキテクチャ命令セットに関して同種であっても異種であってもよい、すなわち、コア3002A~Nのうちの2つ以上が同じ命令セットを実行することが可能であってもよく、他のコアがその命令セットのサブセットまたは異なる命令セットのみを実行することが可能であってもよい。
【0321】
[例示的なコンピュータアーキテクチャ]
図31~
図34は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組込み型プロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスのための当該技術分野で知られた他のシステム設計およびシステム構成も適している。一般に、本明細書で開示されたプロセッサおよび/または他の実行ロジックを組み込むことが可能な多様なシステムまたは電子デバイスが一般的に適している。
【0322】
次に
図31を参照すると、本発明の1つの実施形態による、システム3100のブロック図が示されている。システム3100は、コントローラハブ3120に結合された1つまたは複数のプロセッサ3110、3115を含んでもよい。1つの実施形態では、コントローラハブ3120は、(別々のチップ上にあってもよい)グラフィックスメモリコントローラハブ(GMCH)3190および入力/出力ハブ(IOH)3150を含み、GMCH3190は、メモリ3140およびコプロセッサ3145に結合されたメモリおよびグラフィックスコントローラを含み、IOH3150は、入力/出力(I/O)デバイス3160をGMCH3190に結合する。あるいは、メモリおよびグラフィックスコントローラの一方または両方は、(本明細書で説明されたように)プロセッサ内で統合され、メモリ3140およびコプロセッサ3145は、IOH3150を有するシングルチップ内のプロセッサ3110およびコントローラハブ3120に直接結合される。
【0323】
追加のプロセッサ3115のオプションの特性は、破線で
図31に表記されている。各プロセッサ3110、3115は、本明細書で説明された処理コアのうちの1つまたは複数を含んでもよく、プロセッサ3000のいくつかのバージョンであってもよい。
【0324】
メモリ3140は、たとえば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、またはそれら2つの組合せであってもよい。少なくとも1つの実施形態の場合、コントローラハブ3120は、フロントサイドバス(FSB)などのマルチドロップバス、QuickPath Interconnect(QPI)などのポイントツーポイントインターフェース、または同様の接続3195を介してプロセッサ3110、3115と通信する。
【0325】
1つの実施形態では、コプロセッサ3145は、たとえば、高スループットMICプロセッサ、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組込み型プロセッサなどの専用プロセッサである。1つの実施形態では、コントローラハブ3120は、統合グラフィックスアクセラレータを含んでもよい。
【0326】
アーキテクチャ特性、マイクロアーキテクチャ特性、熱特性、電力消費特性などを含むメリットの一連のメトリックに関して、物理リソース3110、3115の間には様々な違いがあり得る。
【0327】
1つの実施形態では、プロセッサ3110は、一般的なタイプのデータ処理動作を制御する命令を実行する。命令内にコプロセッサ命令が組み込まれてもよい。プロセッサ3110は、これらのコプロセッサ命令を、付属コプロセッサ3145によって実行されるべきタイプの命令として認識する。それに応じて、プロセッサ3110は、コプロセッサバスまたは他の相互接続上でこれらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)をコプロセッサ3145に発行する。コプロセッサ3145は、受信されたコプロセッサ命令を受け入れて実行する。
【0328】
次に
図32を参照すると、本発明の一実施形態による、第1のより具体的で例示的なシステム3200のブロック図が示されている。
図32に示されたように、マルチプロセッサシステム3200はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続3250を介して結合された第1のプロセッサ3270および第2のプロセッサ3280を含む。プロセッサ3270および3280の各々は、プロセッサ3000の何らかのバージョンであってもよい。本発明の1つの実施形態では、プロセッサ3270および3280は、それぞれプロセッサ3110および3115であり、コプロセッサ3238はコプロセッサ3145である。別の実施形態では、プロセッサ3270および3280は、それぞれプロセッサ3110およびコプロセッサ3145である。
【0329】
それぞれ統合メモリコントローラ(IMC)ユニット3272および3282を含む、プロセッサ3270および3280が示されている。プロセッサ3270はまた、そのバスコントローラユニットの一部としてポイントツーポイント(P-P)インターフェース3276および3278を含み、同様に、第2のプロセッサ3280はP-Pインターフェース3286および3288を含む。プロセッサ3270、3280は、P-Pインターフェース回路3278、3288を使用して、ポイントツーポイント(P-P)インターフェース3250を介して情報を交換することができる。
図32に示されたように、IMC3272および3282は、プロセッサをそれぞれのメモリに、すなわち、それぞれのプロセッサにローカルに接続されたメインメモリの一部であってもよいメモリ3232およびメモリ3234に結合する。
【0330】
プロセッサ3270、3280は、各々、ポイントツーポイントインターフェース回路3276、3294、3286、3298を使用して、個別のP-Pインターフェース3252、3254を介してチップセット3290と情報を交換することができる。チップセット3290は、場合によっては、高性能インターフェース3292を介してコプロセッサ3238と情報を交換することができる。1つの実施形態では、コプロセッサ3238は、たとえば、高スループットMICプロセッサ、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組込み型プロセッサなどの専用プロセッサである。
【0331】
共有キャッシュ(図示せず)は、プロセッサ、またはP-P相互接続を介してプロセッサとすでに接続されている両方のプロセッサの外部のいずれかに含まれ、その結果、プロセッサが低電力モードに入れられた場合、いずれかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュに記憶されてもよい。
【0332】
チップセット3290は、インターフェース3296を介して第1のバス3216に結合されてもよい。1つの実施形態では、第1のバス3216は、周辺装置相互接続(PCI)バス、またはPCIエクスプレスバスもしくは別の第3世代I/O相互接続バスなどのバスであってもよいが、本発明の範囲はそのように限定されない。
【0333】
図32に示されたように、第1のバス3216を第2のバス3220に結合するバスブリッジ3218とともに、様々なI/Oデバイス3214が第1のバス3216に結合されてもよい。1つの実施形態では、コプロセッサ、高スループットMICプロセッサ、GPGPU、(たとえば、グラフィックスアクセラレータもしくはデジタル信号処理(DSP)ユニットなどの)アクセラレータ、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサなどの1つまたは複数の追加のプロセッサ3215が、第1のバス3216に結合される。1つの実施形態では、第2のバス3220は、ローピンカウント(LPC)バスであってもよい。1つの実施形態では、たとえば、キーボードおよび/またはマウス3222、通信デバイス3227、ならびに命令/コードおよびデータ3230を含む場合があるディスクドライブまたは他の大容量記憶装置などの記憶ユニット3228を含む、様々なデバイスが第2のバス3220に結合されてもよい。さらに、オーディオI/O3224が第2のバス3220に結合されてもよい。他のアーキテクチャも可能であることに留意されたい。たとえば、
図32のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバスまたは他のそのようなアーキテクチャを実装することができる。
【0334】
次に
図33を参照すると、本発明の一実施形態による、第2のより具体的で例示的なシステム3300のブロック図が示されている。
図32および
図33の同様の要素は同様の参照番号をもち、
図33の他の態様を曖昧にすることを回避するために、
図32のいくつかの態様は
図33から省略されている。
【0335】
図33は、プロセッサ3270、3280が、それぞれ統合メモリならびにI/O制御ロジック(「CL」)3272および3282を含んでもよいことを示す。したがって、CL3272、3282は、統合メモリコントローラユニットを含み、I/O制御ロジックを含む。
図33は、メモリ3232、3234がCL3272、3282に結合されることだけでなく、I/Oデバイス3314も制御ロジック3272、3282に結合されることを示す。レガシーI/Oデバイス3315はチップセット3290に結合される。
【0336】
次に
図34を参照すると、本発明の一実施形態による、SoC3400のブロック図が示されている。
図30の同様の要素は同様の参照番号をもつ。また、破線のボックスは、より高度なSoC上のオプション機能である。
図34では、相互接続ユニット3402は、キャッシュユニット3004A~Nを含む1つまたは複数のコア3002A~Nのセット、および共有キャッシュユニット3006を含むアプリケーションプロセッサ3410、システムエージェントユニット3010、バスコントローラユニット3016、統合メモリコントローラユニット3014、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、およびビデオプロセッサを含んでもよい1つまたは複数のコプロセッサ3420のセット、スタティックランダムアクセスメモリ(SRAM)ユニット3430、ダイレクトメモリアクセス(DMA)ユニット3432、ならびに1つまたは複数の外部ディスプレイに結合するための表示ユニット3440に結合される。1つの実施形態では、コプロセッサ3420は、たとえば、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、組込み型プロセッサなどの専用プロセッサを含む。
【0337】
本明細書で開示されたメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装手段の組合せに実装されてもよい。本発明の実施形態は、少なくとも1つのプロセッサと、(揮発性および不揮発性のメモリならびに/または記憶要素を含む)ストレージシステムと、少なくとも1つの入力デバイスと、少なくとも1つの出力デバイスとを備えるプログラマブルシステム上で実行される、コンピュータプログラムまたはプログラムコードとして実装されてもよい。
【0338】
図32に示されたコード3230などのプログラムコードは、本明細書で説明された機能を実行し、出力情報を生成するために、入力命令に適用されてもよい。出力情報は、既知の方式で1つまたは複数の出力デバイスに適用されてもよい。本出願の目的のために、処理システムは、たとえば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【0339】
プログラムコードは、処理システムと通信するために、高水準手続き型またはオブジェクト指向のプログラミング言語で実装されてもよい。プログラムコードはまた、必要な場合、アセンブリ言語または機械語で実装されてもよい。実際には、本明細書で説明されたメカニズムは、いかなる特定のプログラミング言語にも範囲が限定されない。いずれにせよ、言語はコンパイルまたは解釈された言語であってもよい。
【0340】
少なくとも1つの実施形態の1つまたは複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体に記憶された代表的な命令によって実装されてもよく、機械可読媒体は、機械によって読み取られると、機械に本明細書で説明された技法を実行するようにロジックを組み立てさせる。「IPコア」として知られるそのような表現は、有形の機械可読媒体に記憶され、実際にロジックまたはプロセッサを製造する製造機械にロードするために様々な顧客または製造施設に供給されてもよい。
【0341】
そのような機械可読記憶媒体には、ハードディスク、フロッピーディスク、光ディスク、コンパクトディスク読み出し専用メモリ(CD-ROM)、コンパクトディスクリライタブル(CD-RW)、および光磁気ディスクを含む任意の他のタイプのディスク、読み出し専用メモリ(ROM)などの半導体デバイス、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)などのランダムアクセスメモリ(RAM)、消去可能プログラム可能型読み出し専用メモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラム可能型読み出し専用メモリ(EEPROM)、相変化メモリ(PCM)、磁気カードもしくは光学式カード、または電子命令を記憶するのに適した任意の他のタイプの媒体などの記憶媒体を含む、機械またはデバイスによって製造または形成された物品の非一時的有形構成が含まれてもよいが、それらに限定されない。
【0342】
したがって、本発明の実施形態は、本明細書で説明された構造、回路、装置、プロセッサ、および/またはシステムの機能を定義する、ハードウェア記述言語(HDL)などの命令を含むか、または設計データを含む非一時的有形機械可読媒体も含む。そのような実施形態は、プログラム製品と呼ばれる場合もある。
【0343】
[(バイナリ変換、コードモーフィングなどを含む)エミュレーション]
場合によっては、命令をソース命令セットからターゲット命令セットに変換するために、命令コンバータが使用されてもよい。たとえば、命令コンバータは、命令をコアによって処理されるべき1つまたは複数の他の命令に、(たとえば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して)解釈し、変形させ、エミュレートし、または場合によっては変換することができる。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組合せに実装されてもよい。命令コンバータは、プロセッサ上にあっても、プロセッサ外にあっても、または部分的にプロセッサ上および部分的にプロセッサ外にあってもよい。
【0344】
図35は、本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するソフトウェア命令コンバータの使用を対比するブロック図である。図示された実施形態では、命令コンバータはソフトウェア命令コンバータであるが、代替として、命令コンバータはソフトウェア、ファームウェア、ハードウェア、またはそれらの様々な組合せに実装されてもよい。
図35は、少なくとも1つのx86命令セットコアをもつプロセッサ3516によってネイティブに実行され得るx86バイナリコード3506を生成するために、x86コンパイラ3504を使用して高水準言語3502のプログラムがコンパイルされ得ることを示す。少なくとも1つのx86命令セットコアをもつプロセッサ3516は、少なくとも1つのx86命令セットコアをもつインテルプロセッサと実質的に同じ結果を達成するために、(1)インテルx86命令セットコアの命令セットのかなりの部分、または(2)少なくとも1つのx86命令セットコアをもつインテルプロセッサ上で実行することを目的としたアプリケーションもしくは他のソフトウェアのオブジェクトコードバージョンを互換的に実行または場合によっては処理することにより、少なくとも1つのx86命令セットコアをもつインテルプロセッサと実質的に同じ機能を実行することができる任意のプロセッサを表す。x86コンパイラ3504は、追加のリンケージ処理をもつかまたはもたずに、少なくとも1つのx86命令セットコアをもつプロセッサ3516上で実行することができるx86バイナリコード3506(たとえば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、
図35は、少なくとも1つのx86命令セットコアをもたないプロセッサ3514(たとえば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行し、かつ/またはカリフォルニア州サニーベールのARM HoldingのARM命令セットを実行するコアをもつプロセッサ)によってネイティブに実行され得る代替の命令セットバイナリコード3510を生成するために、代替の命令セットコンパイラ3508を使用して高水準言語3502のプログラムがコンパイルされ得ることを示す。命令コンバータ3512は、x86バイナリコード3506を、x86命令セットコアをもたないプロセッサ3514によってネイティブに実行され得るコードに変換するために使用される。これを可能にする命令コンバータは作るのが難しいので、この変換されたコードは代替の命令セットバイナリコード3510と同じである可能性は低いが、変換されたコードは一般的な演算を遂行し、代替の命令セットからの命令で構成される。したがって、命令コンバータ3512は、エミュレーション、シミュレーション、または任意の他のプロセスを介して、x86命令セットプロセッサまたはコアをもたないプロセッサまたは他の電子デバイスがx86バイナリコード3506を実行することを可能にする、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せを表す。
【0345】
[さらなる例]
例1は、1組の命令がフェッチされるまで1つまたは複数の命令をフェッチするフェッチ回路であって、各命令がソースおよびデスティネーションタイルオペランドを指定する、フェッチ回路と、フェッチされた1組の命令を復号する復号回路と、復号された1組の命令に応答して、命令チェーンに属する復号された第1および第2の命令を識別することと、復号された第1および第2の命令を実行する第1および第2の処理エンジン(PE)を有するSIMD経路を動的に選択し構成することと、復号された第1の命令の指定されたデスティネーションを破棄し、代わりに、復号された第2の命令を実行するために第2のPEによって使用されるように、第1のPEからの復号された第1の命令の結果を送ることとを行う実行回路とを備える、例示的な単一命令複数データ(SIMD)プロセッサを提供する。
【0346】
例2は例1の例示的なプロセッサの実体を含み、1組の命令は少なくとも1つの命令を備え、命令チェーンの各々は、命令がチェーンの一部であることを実行回路に判定させるチェーン制御フィールドをさらに備え、チェーン制御フィールドの各々は、チェーン内の最後の命令をマークするために、チェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒントのうちの1つを備えるチェーン位置ヒントを示し、チェーン制御フィールドは、チェーンの存在を判定することと、命令チェーンを実行するようにSIMD経路を動的に選択し構成することと、チェーン内の最後を除くすべての命令の指定されたデスティネーションを破棄することと、最後を除くすべての命令の結果をチェーン内の次の命令を実行するPEに送ることとを実行回路に行わせる。
【0347】
例3は例1の例示的なプロセッサの実体を含み、復号された第1および第2の命令は、異なるオペコードを指定して異なる第1および第2の算術演算を指定し、選択された第1および第2の処理エンジンは、それぞれ、第1の算術演算および第2の算術演算を専門に扱う限定された機能を有する。
【0348】
例4は例2の例示的なプロセッサの実体を含み、命令チェーンの第1の命令はチェーン制御フィールドをさらに備え、チェーン制御フィールドは、チェーンまたは命令の一部であるように、第1の命令および1つまたは複数の後続の命令を識別するチェーンヘッダを備える。
【0349】
例5は例1の例示的なプロセッサの実体を含み、指定されたソースおよびデスティネーションの行列(タイル)は、各々M行N列の要素を備え、1行のみに有効な要素を含む。
【0350】
例6は例1の例示的なプロセッサの実体を含み、実行回路はさらに、指定されたデスティネーションを破棄した命令の記録を保持し、必要に応じて、記録された1組の命令をロールバックし再実行する。
【0351】
例7は例1の例示的なプロセッサの実体を含み、実行回路はさらに、破棄の前の機械状態を保存し、その後、機械状態整合性チェックを実行して、破棄によって生じたあらゆる不整合を検出する。
【0352】
例8は例1の例示的なプロセッサの実体を含み、1組の命令は少なくとも2つの命令を備え、実行回路は、1組の命令をバッファリングし、2つ以上の命令の間のデータ依存性を検出して、2つ以上の命令がチェーンの一部であることを判定するバイナリトランスレータをさらに備える。
【0353】
例9は例1の例示的なプロセッサの実体を含み、実行回路はさらに、破棄することに対してオペレーティングシステムに警告することを回避する。
【0354】
例10は例1の例示的なプロセッサの実体を含み、第1の命令のデスティネーションとして指定されたタイルは、タイル構成をさらに備え、実行回路はさらに、破棄の前にタイル構成内のダーティビットを設定し、ダーティタイルが後続の命令によって読み取られた場合にフォルトを発生させる。
【0355】
例11は、フェッチ回路を使用して、1組の命令を備える1つまたは複数の命令をフェッチするステップであって、各々がソースおよびデスティネーションの行列(タイル)を指定する、ステップと、復号回路を使用して、フェッチされた1組の命令を復号するステップと、実行回路を使用して、命令チェーンに属する復号された第1および第2の命令を識別することと、復号された第1および第2の命令を実行する第1および第2の処理エンジン(PE)を有するSIMD経路を動的に選択し構成することと、復号された第1の命令の指定されたデスティネーションを破棄し、代わりに、復号された第2の命令を実行するために第2のPEによって使用されるように、第1のPEからの復号された第1の命令の結果を送ることとを行うように、復号された1組の命令を実行するステップとを備える、単一命令複数データ(SIMD)プロセッサによって実行される例示的な方法を提供する。
【0356】
例12は例11の例示的な方法の実体を含み、1組の命令は少なくとも1つの命令を備え、命令チェーンの各々は、命令がチェーンの一部であることを実行回路に判定させるチェーン制御フィールドをさらに備え、チェーン制御フィールドの各々は、チェーン内の最後の命令をマークするために、チェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒントのうちの1つを備えるチェーン位置ヒントを示し、チェーン制御フィールドは、チェーンの存在を判定することと、命令チェーンを実行するようにSIMD経路を動的に選択し構成することと、チェーン内の最後を除くすべての命令の指定されたデスティネーションを破棄することと、最後を除くすべての命令の結果をチェーン内の次の命令を実行するPEに送ることとを実行回路に行わせる。
【0357】
例13は例11の例示的な方法の実体を含み、復号された第1および第2の命令は、異なるオペコードを指定して異なる第1および第2の算術演算を指定し、選択された第1および第2の処理エンジンは、それぞれ、第1の算術演算および第2の算術演算を専門に扱う限定された機能を有する。
【0358】
例14は例11の例示的な方法の実体を含み、命令チェーンの第1の命令はチェーン制御フィールドをさらに備え、チェーン制御フィールドは、チェーンまたは命令の一部であるように、第1の命令および1つまたは複数の後続の命令を識別するチェーンヘッダを備える。
【0359】
例15は例11の例示的な方法の実体を含み、指定されたソースおよびデスティネーションの行列(タイル)は、各々M行N列の要素を備え、1行のみに有効な要素を含む。
【0360】
例16は例11の例示的な方法の実体を含み、実行回路はさらに、指定されたデスティネーションを破棄した命令の記録を保持し、必要に応じて記録された命令のうちの1つまたは複数をロールバックし再実行する。
【0361】
例17は例11の例示的な方法の実体を含み、実行回路はさらに、破棄の前の機械状態を保存し、その後、機械状態整合性チェックを実行して、破棄によって生じたあらゆる不整合を検出する。
【0362】
例18は例11の例示的な方法の実体を含み、1組の命令は少なくとも2つの命令を備え、実行回路は、1組の命令をバッファリングし、2つ以上の命令の間のデータ依存性を検出して、2つ以上の命令がチェーンの一部であることを判定するバイナリトランスレータをさらに備える。
【0363】
例19は例11の例示的な方法の実体を含み、実行回路はさらに、破棄することに対してオペレーティングシステムに警告することを回避する。
【0364】
例20は例11の例示的な方法の実体を含み、第1の命令のデスティネーションとして指定されたタイルは、タイル構成をさらに備え、実行回路はさらに、破棄の前にタイル構成内のダーティビットを設定し、ダーティタイルが後続の命令によって読み取られた場合にフォルトを発生させる。
【0365】
例21は、1組の命令がフェッチされるまで1つまたは複数の命令をフェッチするための手段であって、各命令がソースおよびデスティネーションタイルオペランドを指定する、手段と、フェッチされた1組の命令を復号するための手段と、復号された1組の命令に応答して、命令チェーンに属する復号された第1および第2の命令を識別することと、復号された第1および第2の命令を実行する第1および第2の処理エンジン(PE)を有するSIMD経路を動的に選択し構成することと、復号された第1の命令の指定されたデスティネーションを破棄し、代わりに、復号された第2の命令を実行するために第2のPEによって使用されるように、第1のPEからの復号された第1の命令の結果を送ることとを実行するための手段とを備える、例示的な装置を提供する。
【0366】
例22は例21の例示的な装置の実体を含み、1組の命令は少なくとも1つの命令を備え、命令チェーンの各々は、命令がチェーンの一部であることを実行するための手段に判定させるチェーン制御フィールドをさらに備え、チェーン制御フィールドの各々は、チェーン内の最後の命令をマークするために、チェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒントのうちの1つを備えるチェーン位置ヒントを示し、チェーン制御フィールドは、チェーンの存在を判定することと、命令チェーンを実行するようにSIMD経路を動的に選択し構成することと、チェーン内の最後を除くすべての命令の指定されたデスティネーションを破棄することと、最後を除くすべての命令の結果をチェーン内の次の命令を実行するPEに送ることとを実行するための手段に行わせる。
【0367】
例23は例21の例示的な装置の実体を含み、復号された第1および第2の命令は、異なるオペコードを指定して異なる第1および第2の算術演算を指定し、選択された第1および第2の処理エンジンは、それぞれ、第1の算術演算および第2の算術演算を専門に扱う限定された機能を有する。
【0368】
例24は例22の例示的な装置の実体を含み、命令チェーンの第1の命令はチェーン制御フィールドをさらに備え、チェーン制御フィールドは、チェーンまたは命令の一部であるように、第1の命令および1つまたは複数の後続の命令を識別するチェーンヘッダを備える。
【0369】
例25は例21の例示的な装置の実体を含み、指定されたソースおよびデスティネーションの行列(タイル)は、各々M行N列の要素を備え、1行のみに有効な要素を含む。
【0370】
例26は例21の例示的な装置の実体を含み、実行するための手段はさらに、指定されたデスティネーションを破棄した命令の記録を保持し、必要に応じて、記録された1組の命令をロールバックし再実行する。
【0371】
例27は例21の例示的な装置の実体を含み、実行するための手段はさらに、破棄の前の機械状態を保存し、その後、機械状態整合性チェックを実行して、破棄によって生じたあらゆる不整合を検出する。
【0372】
例28は例21の例示的な装置の実体を含み、1組の命令は少なくとも2つの命令を備え、実行するための手段は、1組の命令をバッファリングし、2つ以上の命令の間のデータ依存性を検出して、2つ以上の命令がチェーンの一部であることを判定するバイナリトランスレータをさらに備える。
【0373】
例29は例21の例示的な装置の実体を含み、実行するための手段はさらに、破棄することに対してオペレーティングシステムに警告することを回避する。
【0374】
例30は例21の例示的な装置の実体を含み、第1の命令のデスティネーションとして指定されたタイルは、タイル構成をさらに備え、実行するための手段はさらに、破棄の前にタイル構成内のダーティビットを設定し、ダーティタイルが後続の命令によって読み取られた場合にフォルトを発生させる。
【0375】
例31は、単一命令複数データ(SIMD)プロセッサによってアクセスされると、フェッチ回路を使用して、1組の命令を備える1つまたは複数の命令をフェッチするステップであって、各々がソースおよびデスティネーションの行列(タイル)を指定する、ステップと、復号回路を使用して、フェッチされた1組の命令を復号するステップと、実行回路を使用して、命令チェーンに属する復号された第1および第2の命令を識別することと、復号された第1および第2の命令を実行する第1および第2の処理エンジン(PE)を有するSIMD経路を動的に選択し構成することと、復号された第1の命令の指定されたデスティネーションを破棄し、代わりに、復号された第2の命令を実行するために第2のPEによって使用されるように、第1のPEからの復号された第1の命令の結果を送ることとを行うように、復号された1組の命令を実行するステップとによってプロセッサに応答させる、命令を含む例示的な非一時的機械可読媒体を提供する。
【0376】
例32は例31の例示的な非一時的機械可読媒体の実体を含み、1組の命令は少なくとも1つの命令を備え、命令チェーンの各々は、命令がチェーンの一部であることを実行回路に判定させるチェーン制御フィールドをさらに備え、チェーン制御フィールドの各々は、チェーン内の最後の命令をマークするために、チェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒントのうちの1つを備えるチェーン位置ヒントを示し、チェーン制御フィールドは、チェーンの存在を判定することと、命令チェーンを実行するようにSIMD経路を動的に選択し構成することと、チェーン内の最後を除くすべての命令の指定されたデスティネーションを破棄することと、最後を除くすべての命令の結果をチェーン内の次の命令を実行するPEに送ることとを実行回路に行わせる。
【0377】
例33は例31の例示的な非一時的機械可読媒体の実体を含み、復号された第1および第2の命令は、異なるオペコードを指定して異なる第1および第2の算術演算を指定し、選択された第1および第2の処理エンジンは、それぞれ、第1の算術演算および第2の算術演算を専門に扱う限定された機能を有する。
【0378】
例34は例31の例示的な非一時的機械可読媒体の実体を含み、命令チェーンの第1の命令はチェーン制御フィールドをさらに備え、チェーン制御フィールドは、チェーンまたは命令の一部であるように、第1の命令および1つまたは複数の後続の命令を識別するチェーンヘッダを備える。
【0379】
例35は例31の例示的な非一時的機械可読媒体の実体を含み、指定されたソースおよびデスティネーションの行列(タイル)は、各々M行N列の要素を備え、1行のみに有効な要素を含む。
【0380】
例36は例31の例示的な非一時的機械可読媒体の実体を含み、プロセッサはさらに、指定されたデスティネーションを破棄した命令の記録を保持し、必要に応じて記録された命令のうちの1つまたは複数をロールバックし再実行することによって応答する。
【0381】
例37は例31の例示的な非一時的機械可読媒体の実体を含み、プロセッサはさらに、破棄の前の機械状態を保存し、その後、機械状態整合性チェックを実行して、破棄によって生じたあらゆる不整合を検出することによって応答する。
【0382】
例38は例31の例示的な非一時的機械可読媒体の実体を含み、1組の命令は少なくとも2つの命令を備え、プロセッサはさらに、1組の命令をバッファリングし、2つ以上の命令の間のデータ依存性を検出して、2つ以上の命令がチェーンの一部であることを判定するバイナリトランスレータを使用することによって応答する。
【0383】
例39は例31の例示的な非一時的機械可読媒体の実体を含み、プロセッサはさらに、破棄することに対してオペレーティングシステムに警告することを回避することによって応答する。
【0384】
例40は例31の例示的な非一時的機械可読媒体の実体を含み、第1の命令のデスティネーションとして指定されたタイルは、タイル構成をさらに備え、プロセッサはさらに、破棄の前にタイル構成内のダーティビットを設定し、ダーティタイルが後続の命令によって読み取られた場合に故障を発生させることによって応答する。
(項目1)
各々がそれぞれのソースタイルおよびデスティネーションタイルを指定するソースタイル指定子およびデスティネーションタイル指定子を有する複数の命令をフェッチするフェッチ回路と、
フェッチされた上記複数の命令を復号する復号回路と、
復号された上記複数の命令に応答して、
命令チェーンに属する復号された第1および第2の命令を識別することと、
復号された上記第1および第2の命令を実行する第1および第2の処理エンジン(PE)を有するSIMD経路を動的に選択し構成することと、
復号された上記第1の命令の上記デスティネーションタイル指定子を破棄し、代わりに、復号された上記第2の命令を実行するために上記第2のPEによって使用されるように、復号された上記第1の命令の結果を上記第1のPEから上記第2のPEに送ることと
を行う実行回路と
を備える、プロセッサ。
(項目2)
上記複数の命令が少なくとも2つの命令を有し、上記命令チェーンの各命令が、上記命令がチェーンの一部であることを上記実行回路に判定させるチェーン制御フィールドをさらに備え、
上記チェーン制御フィールドが、上記チェーン内の最後の命令をマークするために、チェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒントのうちの1つを備えるチェーン位置ヒントを示し、上記チェーン制御フィールドが、上記チェーンの存在を判定することと、上記命令チェーンを実行するように上記SIMD経路を動的に選択し構成することと、上記チェーン内の最後を除くすべての命令の上記デスティネーションタイル指定子を破棄することと、代わりに最後を除くすべての命令の結果を上記チェーン内の次の命令を実行する次のPEに送ることとを上記実行回路に行わせる、
項目1に記載のプロセッサ。
(項目3)
復号された上記第1および第2の命令が、異なるオペコードを指定して異なる第1および第2の算術演算を指定し、選択された上記第1および第2の処理エンジンが、それぞれ、上記第1の算術演算および上記第2の算術演算を専門に扱う限定された機能を有する、項目1に記載のプロセッサ。
(項目4)
上記命令チェーンの第1の命令がチェーン制御フィールドをさらに有し、上記チェーン制御フィールドが、上記第1の命令および1つまたは複数の後続の命令を上記命令チェーンの一部であると識別するチェーンヘッダを含む、項目1に記載のプロセッサ。
(項目5)
指定された上記ソースタイルおよびデスティネーションタイルが、各々M行N列の要素を有し、1行のみに有効な要素を含む、項目1に記載のプロセッサ。
(項目6)
上記実行回路がさらに、各命令のデスティネーションタイル指定子を破棄させた命令の記録を保持し、必要に応じて記録された上記命令のうちの1つまたは複数をロールバックし再実行する、項目1に記載のプロセッサ。
(項目7)
上記実行回路がさらに、復号された上記第1の命令の上記デスティネーションタイル指定子を破棄する前に機械状態を保存し、その後、機械状態整合性チェックを実行して、復号された上記第1の命令の上記デスティネーションタイル指定子を破棄することによって生じたあらゆる不整合を検出する、項目1に記載のプロセッサ。
(項目8)
上記複数の命令が少なくとも2つの命令を有し、上記実行回路が、上記複数の命令をバッファリングし、2つ以上の命令の間のデータ依存性を検出して、上記2つ以上の命令が上記チェーンの一部であると判定するバイナリトランスレータをさらに備える、項目1に記載のプロセッサ。
(項目9)
上記フェッチ回路がさらに、上記複数の命令をフェッチする前にチェーン開始命令をフェッチし、上記チェーン開始命令が上記命令チェーン内の複数の命令を指定し、さらに少なくとも復号された上記第1の命令のターゲットを指定し、上記ターゲットが、復号された上記第1の命令の上記結果を送る先の上記命令チェーン内の上記複数の命令のうちの1つである、項目1に記載のプロセッサ。
(項目10)
上記実行回路がさらに、復号された上記第1の命令の上記デスティネーションタイル指定子を破棄するときに上記第1の命令の指定された上記デスティネーションタイルのタイル構成内にダーティビットを設定し、上記ダーティタイルが後続の命令によって読み取られた場合に故障を発生させる、項目1に記載のプロセッサ。
(項目11)
プロセッサによって実行される方法であって、
フェッチ回路を使用して、各々がそれぞれのソースタイルおよびデスティネーションタイルを指定するソースタイル指定子およびデスティネーションタイル指定子を有する複数の命令をフェッチするステップと、
復号回路を使用して、フェッチされた上記複数の命令を復号するステップと、
実行回路を使用して、
命令チェーンに属する復号された第1および第2の命令を識別することと、
復号された上記第1および第2の命令を実行する第1および第2の処理エンジン(PE)を有するSIMD経路を動的に選択し構成することと、
復号された上記第1の命令の上記デスティネーションタイル指定子を破棄し、代わりに、復号された上記第2の命令を実行するために上記第2のPEによって使用されるように、復号された上記第1の命令の結果を上記第1のPEから上記第2のPEに送ることと
を行うように、復号された上記複数の命令を実行するステップと
を備える、方法。
(項目12)
上記複数の命令が少なくとも2つの命令を有し、上記命令チェーンの各命令が、上記命令がチェーンの一部であることを上記実行回路に判定させるチェーン制御フィールドをさらに有し、
上記チェーン制御フィールドが、上記チェーン内の最後の命令をマークするために、チェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒントのうちの1つを備えるチェーン位置ヒントを示し、上記チェーン制御フィールドが、上記命令チェーンの存在を判定することと、上記命令チェーンを実行するように上記SIMD経路を動的に選択し構成することと、上記チェーン内の最後を除くすべての命令のデスティネーションタイル指定子を破棄することと、代わりに最後を除くすべての命令の結果を上記チェーン内の次の命令を実行する次のPEに送ることとを上記実行回路に行わせる、
項目11に記載の方法。
(項目13)
復号された上記第1および第2の命令が、異なるオペコードを指定して異なる第1および第2の算術演算を指定し、選択された上記第1および第2の処理エンジンが、それぞれ、上記第1の算術演算および上記第2の算術演算を専門に扱う限定された機能を有する、項目11に記載の方法。
(項目14)
上記命令チェーンの第1の命令がチェーン制御フィールドをさらに有し、上記チェーン制御フィールドが、上記チェーンまたは命令の一部であるように、上記第1の命令および1つまたは複数の後続の命令を識別するチェーンヘッダを含む、項目11に記載の方法。
(項目15)
上記指定されたソースタイルおよびデスティネーションタイルが、各々M行N列の要素を有し、1行のみに有効な要素を含む、項目11に記載の方法。
(項目16)
上記実行回路がさらに、各命令のデスティネーションタイル指定子を破棄した命令の記録を保持し、必要に応じて記録された上記命令をロールバックし再実行する、項目11に記載の方法。
(項目17)
上記実行回路がさらに、復号された上記第1の命令の上記デスティネーションタイル指定子を破棄する前に機械状態を保存し、その後、機械状態整合性チェックを実行して、復号された上記第1の命令の上記デスティネーションタイル指定子を破棄することによって生じたあらゆる不整合を検出する、項目11に記載の方法。
(項目18)
上記複数の命令が少なくとも2つの命令を有し、上記実行回路が、上記複数の命令をバッファリングし、2つ以上の命令の間のデータ依存性を検出して、上記2つ以上の命令が上記チェーンの一部であることを判定するバイナリトランスレータをさらに備える、項目11に記載の方法。
(項目19)
上記複数の命令をフェッチする前にチェーン開始命令をフェッチするステップをさらに備え、上記チェーン開始命令が上記命令チェーン内の複数の命令を指定し、さらに少なくとも復号された上記第1の命令のターゲットを指定し、上記ターゲットが、復号された上記第1の命令の上記結果を送る先の上記命令チェーン内の上記複数の命令のうちの1つである、項目11に記載の方法。
(項目20)
復号された上記第1の命令の上記デスティネーションタイル指定子を破棄するときに上記第1の命令の指定された上記デスティネーションタイルのタイル構成内に上記実行回路によってダーティビットを設定するステップをさらに備え、上記ダーティビットセットを有する指定された上記デスティネーションタイルが後続の命令によって読み取られた場合に故障を発生させる、項目11に記載の方法。
(項目21)
命令チェーンを実行するためのシステムであって、上記システムは、
メモリと、
プロセッサと
を備え、
上記プロセッサは、
各々がそれぞれのソースタイルおよびデスティネーションタイルを指定するソースタイル指定子およびデスティネーションタイル指定子を有する複数の命令をフェッチするフェッチ回路と、
フェッチされた上記複数の命令を復号する復号回路と、
復号された上記複数の命令に応答して、
命令チェーンに属する復号された第1および第2の命令を識別することと、
復号された上記第1および第2の命令を実行する第1および第2の処理エンジン(PE)を有するSIMD経路を動的に選択し構成することと、
復号された上記第1の命令の上記デスティネーションタイル指定子を破棄し、代わりに、復号された上記第2の命令を実行するために上記第2のPEによって使用されるように、復号された上記第1の命令の結果を上記第1のPEから上記第2のPEに送ることとを行う実行回路と
を備える、システム。
(項目22)
上記複数の命令が少なくとも2つの命令を有し、上記命令チェーンの各命令が、上記命令がチェーンの一部であることを上記実行回路に判定させるチェーン制御フィールドをさらに有し、
上記チェーン制御フィールドが、上記チェーン内の最後の命令をマークするために、チェーン開始ヒント、チェーン中央ヒント、およびチェーン終了ヒントのうちの1つを含むチェーン位置ヒントを示し、上記チェーン制御フィールドが、上記チェーンの存在を判定することと、上記命令チェーンを実行するように上記SIMD経路を動的に選択し構成することと、上記チェーン内の最後を除くすべての命令の上記デスティネーションタイル指定子を破棄することと、最後を除くすべての命令の結果を上記チェーン内の次の命令を実行する次のPEに送ることとを上記実行回路に行わせる、
項目21に記載のシステム。
(項目23)
復号された上記第1および第2の命令が、異なるオペコードを指定して異なる第1および第2の算術演算を指定し、選択された上記第1および第2の処理エンジンが、それぞれ、上記第1の算術演算および上記第2の算術演算を専門に扱う限定された機能を有する、項目21に記載のシステム。
(項目24)
上記命令チェーンの第1の命令がチェーン制御フィールドをさらに有し、上記チェーン制御フィールドが、上記チェーンまたは命令の一部であるように、上記第1の命令および1つまたは複数の後続の命令を識別するチェーンヘッダを含む、項目21に記載のシステム。
(項目25)
上記フェッチ回路がさらに、上記複数の命令をフェッチする前にチェーン開始命令をフェッチし、上記チェーン開始命令が上記命令チェーン内の複数の命令を指定し、さらに少なくとも復号された上記第1の命令のターゲットを指定し、上記ターゲットが、復号された上記第1の命令の上記結果を送る先の上記命令チェーン内の上記複数の命令のうちの1つである、項目21に記載のシステム。