(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-01-08
(45)【発行日】2025-01-17
(54)【発明の名称】行列演算アクセラレータの命令のための装置、方法、及びシステム
(51)【国際特許分類】
G06F 17/16 20060101AFI20250109BHJP
【FI】
G06F17/16 M
【外国語出願】
(21)【出願番号】P 2020103403
(22)【出願日】2020-06-15
【審査請求日】2023-06-12
(32)【優先日】2019-09-27
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】カムレシュ アール.ピレイ
(72)【発明者】
【氏名】クリストファー ジェイ.ヒューズ
(72)【発明者】
【氏名】アレキサンダー ハイネック
【審査官】三坂 敏夫
(56)【参考文献】
【文献】米国特許出願公開第2019/0129719(US,A1)
【文献】米国特許出願公開第2019/0102196(US,A1)
【文献】米国特許出願公開第2019/0042216(US,A1)
【文献】特開平04-043461(JP,A)
【文献】米国特許出願公開第2018/0004510(US,A1)
【文献】米国特許第08924455(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/00-17/18
(57)【特許請求の範囲】
【請求項1】
融合積和回路の2次元グリッドを有する行列演算アクセラレータ回路と、
前記行列演算アクセラレータ回路に結合される少なくとも1つの第1入力2次元行列を表す第1の複数のレジスタと、
前記行列演算アクセラレータ回路に結合される少なくとも1つの第2入力2次元行列を表す第2の複数のレジスタと、
前記行列演算アクセラレータ回路に結合されるコアの復号器であって、単一の命令を、復号された単一の命令へと復号し、前記単一の命令が結果として得られるストレージを識別するフィールドを有する、復号器と、
前記復号された単一の命令を実行する前記コアの実行回路と
を備え、
前記コアの実行回路が、前記行列演算アクセラレータ回路を、前記2次元グリッドの融合積和回路の第1の適切なサブセットのそれぞれについての各出力が下流の前記2次元グリッドの融合積和回路の第2の適切なサブセットのそれぞれについての各入力へと送信されると、前記少なくとも1つの第1入力2次元行列及び前記少なくとも1つの第2入力2次元行列からの出力値を形成し、かつ前記結果として得られるストレージに前記出力値を格納する第1のモードから、前記2次元グリッドの融合積和回路の前記第1の適切なサブセットのそれぞれについての前記各出力が、前記少なくとも1つの第1入力2次元行列及び前記少なくとも1つの第2入力2次元行列の第1のサブセットからの第1の出力値を形成し、かつ前記結果として得られるストレージに前記第1の出力値を格納し、前記2次元グリッドの融合積和回路の前記第2の適切なサブセットのそれぞれについての各出力が、前記少なくとも1つの第1入力2次元行列及び前記少なくとも1つの第2入力2次元行列の第2のサブセットからの第2の出力値を形成し、かつ前記結果として得られるストレージに前記第2の出力値を格納する第2のモードへとスイッチする、装置。
【請求項2】
前記行列演算アクセラレータ回路が、第2のフィールドが第1の値である場合には前記第1のモードで実行し、前記第2のフィールドが第2の値である場合には前記第2のモードで実行することを示す前記第2のフィールドを、前記単一の命令が有する、請求項1に記載の装置。
【請求項3】
前記第2のフィールドは、前記単一の命令の即値である、請求項2に記載の装置。
【請求項4】
前記結果として得られるストレージが、前記復号された単一の命令を実行することで形成される少なくとも1つの出力2次元行列を表す第3の複数のレジスタである、請求項1から3の何れか一項に記載の装置。
【請求項5】
前記復号された単一の命令を実行することが、
前記第1のモードでは、前記第3の複数のレジスタに最初に格納される少なくとも1つの第3入力2次元行列を表す前記第3の複数のレジスタからの値を前記出力値に加算して、更新された出力値を形成し、前記更新された出力値を前記出力値に代えて、前記結果として得られるストレージに格納することであり、
前記第2のモードでは、前記第3の複数のレジスタに最初に格納される前記少なくとも1つの第3入力2次元行列からの値を前記第1の出力値及び前記第2の出力値に加算して、更新された第1の出力値及び更新された第2の出力値を形成し、前記更新された第1の出力値及び前記更新された第2の出力値を、前記第1の出力値及び前記第2の出力値に代えて、前記結果として得られるストレージに格納することである、請求項4に記載の装置。
【請求項6】
前記復号された単一の命令を実行することが、
前記第1のモードでは、第3の複数のレジスタに最初に格納される少なくとも1つの第3入力2次元行列からの値を前記出力値に加算して、更新された出力値を形成し、前記更新された出力値を前記出力値に代えて、前記結果として得られるストレージに格納することであり、
前記第2のモードでは、前記第3の複数のレジスタに最初に格納される前記少なくとも1つの第3入力2次元行列からの値を前記第1の出力値及び前記第2の出力値に加算して、更新された第1の出力値及び更新された第2の出力値を形成し、前記更新された第1の出力値及び前記更新された第2の出力値を、前記第1の出力値及び前記第2の出力値に代えて、前記結果として得られるストレージに格納することである、請求項1に記載の装置。
【請求項7】
前記結果として得られるストレージは、前記復号された単一の命令を実行することで形成される複数の出力2次元行列を表す第3の複数のレジスタである、請求項1から6の何れか一項に記載の装置。
【請求項8】
前記融合積和回路の第1の適切なサブセットは、前記融合積和回路の2次元グリッドにおける行または列の1つであり、
前記融合積和回路の第2の適切なサブセットは、前記融合積和回路の2次元グリッドにおける前記行または前記列の他方の前記1つである、請求項1から7の何れか一項に記載の装置。
【請求項9】
プロセッサコアの復号器で単一の命令を復号された単一の命令に復号する段階であって、前記プロセッサコアが融合積和回路の2次元グリッドを有する行列演算アクセラレータ回路に結合され、前記行列演算アクセラレータ回路が少なくとも1つの第1入力2次元行列を表す第1の複数のレジスタ及び少なくとも1つの第2入力2次元行列を表す第2の複数のレジスタに結合され、前記単一の命令が結果として得られるストレージを識別するフィールドを有する、段階と、
前記復号された単一の命令を前記プロセッサコアの実行回路で実行する段階と
を備え、
前記実行する段階が、前記行列演算アクセラレータ回路を、前記2次元グリッドの融合積和回路の第1の適切なサブセットのそれぞれについての各出力が下流の前記2次元グリッドの融合積和回路の第2の適切なサブセットのそれぞれについての各入力へと送信されると、前記少なくとも1つの第1入力2次元行列及び前記少なくとも1つの第2入力2次元行列からの出力値を形成し、かつ前記結果として得られるストレージに前記出力値を格納する第1のモードから、前記2次元グリッドの融合積和回路の前記第1の適切なサブセットのそれぞれについての前記各出力が、前記少なくとも1つの第1入力2次元行列及び前記少なくとも1つの第2入力2次元行列の第1のサブセットからの第1の出力値を形成し、かつ前記結果として得られるストレージに前記第1の出力値を格納し、前記2次元グリッドの融合積和回路の前記第2の適切なサブセットのそれぞれについての各出力が、前記少なくとも1つの第1入力2次元行列及び前記少なくとも1つの第2入力2次元行列の第2のサブセットからの第2の出力値を形成し、かつ前記結果として得られるストレージに前記第2の出力値を格納する第2のモードへとスイッチする、方法。
【請求項10】
前記行列演算アクセラレータ回路が、第2のフィールドが第1の値である場合には前記第1のモードで実行し、前記第2のフィールドが第2の値である場合には前記第2のモードで実行することを示す前記第2のフィールドを、前記単一の命令が有する、請求項9に記載の方法。
【請求項11】
前記第2のフィールドは、前記単一の命令の即値である、請求項10に記載の方法。
【請求項12】
前記結果として得られるストレージが、前記復号された単一の命令を実行することで形成される少なくとも1つの出力2次元行列を表す第3の複数のレジスタである、請求項9から11の何れか一項に記載の方法。
【請求項13】
前記復号された単一の命令を実行する段階が、
前記第1のモードでは、前記第3の複数のレジスタに最初に格納される少なくとも1つの第3入力2次元行列を表す前記第3の複数のレジスタからの値を前記出力値に加算して、更新された出力値を形成し、前記更新された出力値を前記出力値に代えて、前記結果として得られるストレージに格納することであり、
前記第2のモードでは、前記第3の複数のレジスタに最初に格納される前記少なくとも1つの第3入力2次元行列からの値を前記第1の出力値及び前記第2の出力値に加算して、更新された第1の出力値及び更新された第2の出力値を形成し、前記更新された第1の出力値及び前記更新された第2の出力値を、前記第1の出力値及び前記第2の出力値に代えて、前記結果として得られるストレージに格納することである、請求項12に記載の方法。
【請求項14】
前記復号された単一の命令を実行する段階が、
前記第1のモードでは、第3の複数のレジスタに最初に格納される少なくとも1つの第3入力2次元行列からの値を前記出力値に加算して、更新された出力値を形成し、前記更新された出力値を前記出力値に代えて、前記結果として得られるストレージに格納することであり、
前記第2のモードでは、前記第3の複数のレジスタに最初に格納される前記少なくとも1つの第3入力2次元行列からの値を前記第1の出力値及び前記第2の出力値に加算して、更新された第1の出力値及び更新された第2の出力値を形成し、前記更新された第1の出力値及び前記更新された第2の出力値を、前記第1の出力値及び前記第2の出力値に代えて、前記結果として得られるストレージに格納することである、請求項9に記載の方法。
【請求項15】
前記結果として得られるストレージは、前記復号された単一の命令を実行することで形成される複数の出力2次元行列を表す第3の複数のレジスタである、請求項9から14の何れか一項に記載の方法。
【請求項16】
前記融合積和回路の第1の適切なサブセットは、前記融合積和回路の2次元グリッドにおける行または列の1つであり、
前記融合積和回路の第2の適切なサブセットは、前記融合積和回路の2次元グリッドにおける前記行または前記列の他方の前記1つである、請求項9から15の何れか一項に記載の方法。
【請求項17】
命令を備えるプログラムであって、機械に実行された場合に前記機械に方法を実行させ、前記方法が、
プロセッサコアの復号器で単一の命令を復号された単一の命令に復号する段階であって、前記プロセッサコアが融合積和回路の2次元グリッドを有する行列演算アクセラレータ回路に結合され、前記行列演算アクセラレータ回路が少なくとも1つの第1入力2次元行列を表す第1の複数のレジスタ及び少なくとも1つの第2入力2次元行列を表す第2の複数のレジスタに結合され、前記単一の命令が結果として得られるストレージを識別するフィールドを有する、段階と、
前記復号された単一の命令を前記プロセッサコアの実行回路で実行する段階と
を備え、
前記実行する段階が、前記行列演算アクセラレータ回路を、前記2次元グリッドの融合積和回路の第1の適切なサブセットのそれぞれについての各出力が下流の前記2次元グリッドの融合積和回路の第2の適切なサブセットのそれぞれについての各入力へと送信されると、前記少なくとも1つの第1入力2次元行列及び前記少なくとも1つの第2入力2次元行列からの出力値を形成し、かつ前記結果として得られるストレージに前記出力値を格納する第1のモードから、前記2次元グリッドの融合積和回路の前記第1の適切なサブセットのそれぞれについての前記各出力が、前記少なくとも1つの第1入力2次元行列及び前記少なくとも1つの第2入力2次元行列の第1のサブセットからの第1の出力値を形成し、かつ前記結果として得られるストレージに前記第1の出力値を格納し、前記2次元グリッドの融合積和回路の前記第2の適切なサブセットのそれぞれについての各出力が、前記少なくとも1つの第1入力2次元行列及び前記少なくとも1つの第2入力2次元行列の第2のサブセットからの第2の出力値を形成し、かつ前記結果として得られるストレージに前記第2の出力値を格納する第2のモードへとスイッチする、プログラム。
【請求項18】
前記行列演算アクセラレータ回路が、第2のフィールドが第1の値である場合には前記第1のモードで実行し、前記第2のフィールドが第2の値である場合には前記第2のモードで実行することを示す前記第2のフィールドを、前記単一の命令が有する、請求項17に記載のプログラム。
【請求項19】
前記第2のフィールドは、前記単一の命令の即値である、請求項18に記載のプログラム。
【請求項20】
前記結果として得られるストレージが、前記復号された単一の命令を実行することで形成される少なくとも1つの出力2次元行列を表す第3の複数のレジスタである、請求項17から19の何れか一項に記載のプログラム。
【請求項21】
前記復号された単一の命令を実行する段階が、
前記第1のモードでは、前記第3の複数のレジスタに最初に格納される少なくとも1つの第3入力2次元行列を表す前記第3の複数のレジスタからの値を前記出力値に加算して、更新された出力値を形成し、前記更新された出力値を前記出力値に代えて、前記結果として得られるストレージに格納することであり、
前記第2のモードでは、前記第3の複数のレジスタに最初に格納される前記少なくとも1つの第3入力2次元行列からの値を前記第1の出力値及び前記第2の出力値に加算して、更新された第1の出力値及び更新された第2の出力値を形成し、前記更新された第1の出力値及び前記更新された第2の出力値を、前記第1の出力値及び前記第2の出力値に代えて、前記結果として得られるストレージに格納することである、請求項20に記載のプログラム。
【請求項22】
前記復号された単一の命令を実行する段階が、
前記第1のモードでは、第3の複数のレジスタに最初に格納される少なくとも1つの第3入力2次元行列からの値を前記出力値に加算して、更新された出力値を形成し、前記更新された出力値を前記出力値に代えて、前記結果として得られるストレージに格納することであり、
前記第2のモードでは、前記第3の複数のレジスタに最初に格納される前記少なくとも1つの第3入力2次元行列からの値を前記第1の出力値及び前記第2の出力値に加算して、更新された第1の出力値及び更新された第2の出力値を形成し、前記更新された第1の出力値及び前記更新された第2の出力値を、前記第1の出力値及び前記第2の出力値に代えて、前記結果として得られるストレージに格納することである、請求項17に記載のプログラム。
【請求項23】
前記結果として得られるストレージは、前記復号された単一の命令を実行することで形成される複数の出力2次元行列を表す第3の複数のレジスタである、請求項17から22の何れか一項に記載のプログラム。
【請求項24】
前記融合積和回路の第1の適切なサブセットは、前記融合積和回路の2次元グリッドにおける行または列の1つであり、
前記融合積和回路の第2の適切なサブセットは、前記融合積和回路の2次元グリッドにおける前記行または前記列の他方の前記1つである、請求項17から23の何れか一項に記載のプログラム。
【請求項25】
請求項17から24の何れか一項に記載のプログラムを格納するコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、概してコンピュータプロセッサアーキテクチャに関し、より詳細には、行列演算アクセラレータ回路を使用して、行列演算を実行するための命令を実行するための、装置、システム及び方法に関する。
【背景技術】
【0002】
プロセッサまたはプロセッサのセットは、例えば命令セットアーキテクチャ(ISA)等の命令セットからの命令を実行する。命令セットは、プログラミングに関するコンピュータアーキテクチャの一部であり、概して、ネイティブデータ型、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込み及び例外処理、並びに外部入出力(I/O)を含む。ここでの命令という用語は、マクロ命令、例えばプロセッサを実行するために提供される命令、あるいは、マイクロ命令、例えば、プロセッサのデコーダがマクロ命令を復号することから得られる命令、を意味してよいことに留意されたい。
【図面の簡単な説明】
【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】
【
図21】処理エレメント回路の2次元グリッドを備える行列演算アクセラレータ回路の実施形態を示す。
【0025】
【
図22】いくつかの実施形態に係る行列演算を加速するためのTILEPARTIALDOTPRODUCT命令の使用を示すブロック図である。
【0026】
【
図23】本開示の複数の実施形態に係るTILEPARTIALDOTPRODUCT命令を処理する方法2300を示す。
【0027】
【
図24】第1のモード及び第2のモードの間をスイッチする設定スイッチの行を含む処理エレメント回路の2次元グリッドを備える、行列演算アクセラレータ回路の実施形態を示す。
【0028】
【0029】
【
図26】複数のモードの間をスイッチする設定スイッチの複数の行を含む処理エレメント回路の2次元グリッドを備える、行列演算アクセラレータ回路の実施形態を示す。
【0030】
【
図27A】本開示の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びそのクラスA命令テンプレートを示すブロック図である。
【0031】
【
図27B】本開示の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びそのクラスB命令テンプレートを示すブロック図である。
【0032】
【
図28A】本開示の複数の実施形態に係る
図27Aおよび
図27Bにおける汎用ベクトル向け命令フォーマットのためのフィールドを示すブロック図である。
【0033】
【
図28B】本開示の一実施形態に係るフルオペコードフィールドを形成する
図28Aにおける特定ベクトル向け命令フォーマットのフィールドを示すブロック図である。
【0034】
【
図28C】本開示の一実施形態に係るレジスタインデックスフィールドを形成する
図28Aにおける特定ベクトル向け命令フォーマットのフィールドを示すブロック図である。
【0035】
【
図28D】本開示の一実施形態に係る拡張オペレーションフィールド2750を形成する
図28Aにおける特定ベクトル向け命令フォーマットのフィールドを示すブロック図である。
【0036】
【
図29】本開示の一実施形態に係るレジスタアーキテクチャのブロック図である。
【0037】
【
図30A】本開示の実施形態に係る、例示的インオーダパイプライン及び例示的レジスタリネーミング・アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。
【0038】
【
図30B】本開示の複数の実施形態に係るプロセッサに含まれるべきインオーダアーキテクチャコアの例示的実施形態及び例示的レジスタリネーミング・アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。
【0039】
【
図31A】本開示の複数の実施形態に係る単一のプロセッサコアのブロック図を、オンダイ相互接続ネットワークへのその接続及び二次(L2)キャッシュのそのローカルサブセットと共に示す。
【0040】
【
図31B】本開示の複数の実施形態に係る
図31Aのプロセッサコアの一部の拡大図である。
【0041】
【
図32】本開示の複数の実施形態に係るプロセッサのブロック図であって、1つより多くのコアを有してよく、統合メモリコントローラを有してよく、統合グラフィックを有してよい。
【0042】
【
図33】本開示の一実施形態に係るシステムのブロック図である。
【0043】
【
図34】本開示の実施形態に係るより具体的な例示的システムのブロック図である。
【0044】
【
図35】示されるのは、本開示の実施形態に係る第2のより具体的な例示的システムのブロック図である。
【0045】
【
図36】示されるのは、本開示の実施形態に係るシステムオンチップ(SoC)のブロック図である。
【0046】
【
図37】ソース命令セットにおけるバイナリ命令を、本開示の複数の実施形態に係るターゲット命令セットにおけるバイナリ命令へ変換するソフトウェア命令コンバータの使用を対比したブロック図である。
【発明を実施するための形態】
【0047】
以下の説明では、多数の具体的な詳細が示される。しかしながら、複数の実施形態が、これらの具体的な詳細なく実施可能であることが理解される。本願の説明の理解を曖昧にしないために、他の複数の例において、周知の回路、構造および技術は、詳細には示されない。
【0048】
本明細書における「一実施形態」「実施形態」「例示的実施形態」等の記載は、その説明されている実施形態が、特定の特徴、構造または特性を含んでよいことを示すが、全ての実施形態が必ずしも、特定の特徴、構造または特性を含まなくてもよい。さらに、これらの語句は、必ずしも同じ実施形態を参照しているわけではない。さらに、ある実施形態に関連して特定の特徴、構造または特性が説明されている場合に、当業者の知識の範囲内で、明示的に説明されているか否かに関わらず、他の実施形態に関連して、そのような特徴、構造または特性を用いる傾向があると考えられる。
【0049】
行列は、例えば機械学習および他のバルクデータ処理の多くのコンピューティングタスクにおいて、ますます重要になる可能性がある。深層学習は、機械学習アルゴリズムのクラスである。ディープニューラルネットワーク等の深層学習アーキテクチャは、コンピュータビジョン、会話認識、自然言語処理、オーディオ認識、ソーシャルネットワークフィルタリング、機械翻訳、生物情報科学、薬物設計を含む分野に適用されてよい。
【0050】
深層学習のために用いられる2つのツールである推論とトレーニングは、低い正確性の算術を用いてよい。深層学習のアルゴリズムおよび計算のスループットを最大化することは、深層学習プロセッサに関する必要性、例えば、データセンターでそれらの深層学習を実行する人や物のニーズを満たすことを支援できる可能性がある。
【0051】
行列-行列乗算(別名、GEMMまたは汎用行列乗算)は、特定のプロセッサにおいて、計算が大変な演算である。行列乗算(例えば、GEMM)のための特別なハードウェアは、深層学習等の所定のアプリケーションのピーク計算(及びエネルギー効率)を改善するための良い選択肢である。深層学習を含むこれらのアプリケーションのうちのいくつかは、出力要素が十分なビットを有する限り(例えば、入力より多い)、正確さを失うことなく比較的少ないビットで入力データ要素に作用することができる。
【0052】
特定のプロセッサにおいて行列処理は、難しい及び/又は集約タスクの命令である。例えば、行列の行は、複数のパックドデータ(例えばSIMDまたはベクトル)レジスタに置かれ、次に個々に演算され得る。例えば、2つの8×2行列(例えば、行と列)の加算には、データサイズに応じた4つのパックドデータレジスタへのロード(load)または集積(gather)が要求されうる。次に、各行列の第1行に対応するパックドデータレジスタについて第1加算が実行され、各行列の第2行に対応するパックドデータレジスタについて第2加算が実行される。次に、結果パックドデータレジスタがメモリへ分散バック(scattered back)される。小さな行列であればこのシナリオが容認されるが、より大きな行列には、しばしば、容認できない。
説明
【0053】
本明細書では、中央処理ユニット(CPU)、グラフィック処理ユニット(GPU)およびアクセラレータ等のコンピュータハードウェアでの行列演算をサポートするためのメカニズムが説明される。行列演算では、レジスタ等のメモリの1または複数のパックド領域を表す2次元(2-D)データ構造を用いる。本説明の全体にわたり、これらの2-Dデータ構造は、タイルと称される。なお、行列は、タイルより小さくてよく(1つのタイルの全てより小さい部分を使用)、または、複数のタイルを用いてもよい(行列が、任意の1つのタイルのサイズよりも大きい)。本説明の全体にわたり、行列(タイル)という語句は、1つの行列に影響する複数のタイルを使用して演算が実行されることを示すために用いられ、行列が任意の1つのタイルよりも大きいか否かは、典型的には関連がない。
【0054】
各タイルは、本明細書で詳述されるように、異なる演算によって作用してよく、これらの演算は、行列(タイル)乗算、タイル加算、タイル減算、タイル対角、タイルゼロ、タイル変換、タイルドット積、タイルブロードキャスト、タイル行ブロードキャスト、タイル列ブロードキャスト、タイル乗算、タイル積和、タイルムーブ、等を含んでよいが、それらの演算に限定されるものではない。加えて、スケール及び/又はバイアスの使用等の演算子のサポートは、これらの演算と共に、または、例えばOpenCL「ローカルメモリ」、データ圧縮/圧縮解除等の将来の非数値アプリケーションのサポートによって、用いられてよい。また本明細書では、行列演算(例えば、TILEPARTIALDOTPRODUCT)命令を実行するための命令が説明される。
【0055】
ストレージ(例えば、メモリ(不揮発性/揮発性)、レジスタ、キャッシュ等)の一部が、異なる水平方向及び垂直方向の次元のタイルに配置される。例えば、1つのタイルが、4の水平次元(例えば、行列の4行)と、8の垂直次元(例えば、行列の8列)とを有してよい。典型的には、水平次元は、要素サイズ(例えば、2-, 4-, 8-, 16-, 32-, 64-, 128-ビット等)に関連する。複数のデータ型(単精度浮動小数点、倍精度浮動小数点、整数、等)がサポートされてよい。
構成されたタイルの使用例
【0056】
いくつかの実施形態において、タイルパラメータが構成されてよい。例えば、所与のタイルは、複数のタイルオプションを提供するように構成されてよい。例示的タイルオプションとして、これに限定されるものではないが、タイルの行の数、タイルの列の数、タイルが有効であるか否か、タイルが等サイズのタイルのペアから成るか否か、を含む。
【0057】
図1Aは、構成されたタイルの実施形態を示す。示されるように、アプリケーションメモリ102の4kBが、これに、4つの1kBタイトル、即ち、タイルt0 104、タイルt1 106、タイルt2 108、およびタイルt3 110を格納する。本例では、4つのタイルはペアを構成せず、それぞれが、行及び列に配置された要素を有する。タイルt0 104およびタイルt1 106は、4バイト要素(例えば、単精度データ)のK行・N列を有し、Kは8に等しく、N=32である。タイルt2 108およびタイルt3 110は、8バイト要素(例えば、倍精度データ)のK行・N/2列を有する。倍精度のオペランドは、単精度の2倍幅であるため、この構成は、タイルオプションを提供するために用いられるパレットと整合し、少なくとも4つのネームに少なくとも4KBの総ストレージを供給する。演算時にタイルは、ロード・ストアオペレーションを用いて、メモリから読み込まれ、メモリへ格納される。用いられる命令エンコードスキームに応じて、利用可能なタイルのサイズ、数、及び構成、並びに、利用可能なアプリケーションメモリの量が変化する。
【0058】
図1Bは、構成されたタイルの実施形態を示す。示されるように、アプリケーションメモリ122の4kBが、1kBタイトルの2つのペア、即ち、タイルt4L 124及びタイルt4R 126の第1ペア、並びに、タイルt5L 128及びタイルt5R 130の第2ペアを格納する。示されるように、タイルのペアは、左タイルおよび右タイルに分割される。他の実施形態では、タイルのペアは、偶数タイルおよび奇数タイルに分割される。本例では、4つのタイルのそれぞれが、行及び列に配置された要素を有する。タイルt4L 124及びタイルt4R 126は、4バイト要素(例えば、単精度浮動小数点データ)のK行・N列を有し、Kは8に等しく、Nは32に等しい。タイルt5L 128及びタイルt5R 130は、8バイト要素(例えば、倍精度浮動小数点データ)のK行・N/2列を有する。倍精度のオペランドは、単精度の2倍幅であるため、この構成は、タイルオプションを提供するために用いられるパレットと整合し、少なくとも2のネームに少なくとも4KBの総ストレージを供給する。
図1Aの4つのタイルは、4つのネームを使用し、それぞれが1kBタイルであり、他方、
図1Bの2つのタイルのペアは、ペアタイルを指定するのに2つのネームを使用することができる。いくつかの実施形態において、タイル命令は、オペランドとして、ペアタイルの名称を受け入れる。演算時に、タイルは、ロード・ストアオペレーションを用いて、メモリから読み込まれ、メモリへ格納される。用いられる命令エンコードスキームに応じて、利用可能なタイルのサイズ、数、および構成、並びに、利用可能なアプリケーションメモリの量が変化する。
【0059】
いくつかの実施形態において、タイルパラメータが定義可能である。例えば、「パレット」が、タイルオプションを提供するために用いられる。例示的な選択肢として、これに限定されるものではないが、タイルネーム数、ストレージの行におけるバイト数、タイル中の行及び列の数、等を含む。例えば、タイルの最大「高さ」(行の数)は、以下のように定義されてよい。
【0060】
タイル最大行=設計ストレージ/(パレットネーム数×行毎のバイト数)
【0061】
このように、ネームの固定使用法が実装にわたって異なるストレージサイズを利用できるように、アプリケーションを書き込むことが可能となる。
【0062】
タイルの構成は、タイル設定(TILECONFIG)命令を使用して行われ、特定のタイル使用は、選択されたパレットで定義される。この宣言には、使用されるべきタイルネーム数、ネーム(タイル)毎の要求された行及び列の数を含み、いくつかの実施形態においては、各タイルの要求されたデータ型を含む。いくつかの実施形態において、整合性チェックがTILECONFIG命令の実行中に実行されて、パレットエントリの制約に適合することを判断する。
例示的タイルのストレージ型
【0063】
図2は、マトリクス記憶装置のいくつかの例を示す。(A)では、メモリに1つのタイルが格納される。示されるように、各行が4つのパックドデータ要素から成る。次の「行」を取得するべく、ストライド値が用いられる。なお、複数の行が、メモリに連続して格納されてよい。ストライドメモリアクセスでは、タイルストレージが基となるメモリアレイの行幅をマップしない場合、次に、1つの行から次の行へのアクセスが可能である。
【0064】
メモリからのタイルのロードおよびメモリへのタイル格納は、典型的には、アプリケーションメモリからパックされたデータ行へストライドアクセスされる。例示的TILELOAD及びTILESTORE命令、または、load-op命令におけるタイルオペランドとしてアプリケーションメモリを参照する他の命令は、いくつかの実施形態においては、ページフォルトの2×行(まで)、マスクされない浮動小数点例外、及び/又は命令毎の割り込み、を処理すべくリスタート可能である。
【0065】
(B)では、行列は、パックドデータレジスタ(単一の命令、複数のデータ(SIMD)またはベクトルレジスタ)等の複数のレジスタで構成される1つのタイルに格納される。本例では、タイルが、3つの物理レジスタにオーバーレイされる。典型的には連続するレジスタが用いられる。しかしながら、この場合にはこれは必要ではない。
【0066】
(C)では、行列は、タイル演算で用いられる融合積和(FMA)回路にアクセス可能な、非レジスタストレージにおけるタイルに格納される。このストレージは、FMA内にあるか、または、それに隣接してよい。加えて、以下に記載いくつかの実施形態において、ストレージは、データ要素に対するものであって、行またはタイルの全体に対するものでなくてもよい。
【0067】
TMAAアーキテクチャでサポートされるパラメータは、CPUIDを介して報告される。いくつかの実施形態において、情報のリストは、最大高さと最大SIMD次元とを含む。TMAAアーキテクチャの設定には、各タイルの次元、各タイルの要素サイズ、及び、パレット識別子を指定する必要がある。この設定は、TILECONFIG命令を実行することで行われる。
【0068】
TILECONFIG命令の実行が成功すると、後続のタイル演算子が可能となる。TILERELEASEALL命令は、タイル設定をクリアし、タイル演算を無効化する(次のTILECONFIG命令が実行するまで)。いくつかの実施形態において、XSAVE、XSTORE等が、タイルを使用したコンテキスト切り替えで用いられる。いくつかの実施形態において、XSAVEにおいて2つのXCR0ビットが用いられる。1つはTILECONFIGメタデータのためであり、1ビットは実際のタイルペイロードデータに対応する。
【0069】
TILECONFIGは、タイル使用を設定するだけでなくまた、そのプログラムが、設定されたタイルと共にコード領域にあることを示す状態変数をセットする。ある実装では、既存のレジスタセット等を使用しない等、タイル領域と共に用いることのできる他の命令に対する制約を列挙してよい。
【0070】
タイル領域から抜け出る(exit)には、典型的には、TILERELEASEALL命令が行われる。何らパラメータを受け取ることなく、迅速に全タイルを無効化し(データのいかなる保存や復元も、もはや必要ではないことを示す)、タイル領域にあることに対応する内部状態をクリアする。
【0071】
いくつかの実施形態においてタイル演算は、タイル設定によって指定された次元を超える任意の行および任意の列をゼロとする。例えば、タイル演算は、各行が書き込まれる際に、設定された列の数(要素サイズを考慮して)を超えるデータをゼロとする。例えば、64バイトの行と、10行12列で構成されるタイルの場合、FP32要素を書き込む演算は、出力/結果データと共に12*4バイトを最初の10行のそれぞれに書き込み、各行において残りの4*4バイトをゼロにするであろう。タイル演算では、最初の10個の設定された行の後の全ての行もまた完全にゼロとなる。64バイトの行を有する1Kのタイルを使用する場合には16行であろうから、本例においては、最後の6行もまたゼロ書き込みされるであろう。
【0072】
いくつかの実施形態において、データを読み込む場合、context restore命令(例えば、XRSTOR)は、タイルに対して設定された行を超えるデータがゼロとして維持されることを強制する。有効な設定が無い場合、全ての行がゼロ書き込みされる。タイルデータについてのXRSTORは、それらの設定を超える列における不要なデータをロードできる。タイル設定に関連付けられた要素幅が無いので、XRSTORは、設定された列の数を超えてクリア可能とすべきではない。
【0073】
メモリに書き込む場合に、コンテキストセーブ(例えば、XSAVE)は、タイルストレージのエリア全体を示す。XRSTORが、ガベージデータをタイルの右端部へ読み込んでいた場合には、そのデータはXSAVEによって保存されることとなる。XSAVEは、各タイルに指定された数を超えて行に対してゼロを書き込むこととなる。
【0074】
いくつかの実施形態において、タイル命令はリスタート可能である。メモリにアクセスするオペレーションでは、ページフォルト後のリスタートを許容する。浮動小数点演算に対処する計算命令では、制御および/またはステータスレジスタによって制御される例外のマスキングしつつ、マスクされない浮動小数点例外が、また可能である。
【0075】
これらのイベント後のリスタート命令をサポートすべく、命令が、以下に詳述するスタートレジスタに情報を格納する。
行列(タイル)演算システム
例示的ハードウェアサポート
【0076】
図3は、行列(タイル)演算アクセラレータを用いるシステムの実施形態を示す。本例示において、ホストプロセッサ/処理システム301は、コマンド311(例えば、算術または行列操作演算やロード・ストアオペレーション等の行列操作演算)を、行列演算アクセラレータ307に通信する。しかしながら、この態様は、説明の目的だけのために示されているに過ぎない。後に詳述されるように、このアクセラレータ307は、処理コアの一部であってよい。典型的には、タイル操作演算子命令であるコマンド311は、レジスタ-レジスタ(reg‐reg)またはレジスタ-メモリ(reg‐mem)形式としてタイルを参照することとなる。例えば、TILESTORE、TILELOAD、TILECONFIG等の他のコマンドは、タイルにデータ演算を実行しない。コマンドは、アクセラレータ307が処理するための、復号された命令(例えば、micro-ops)または、マクロ命令であり得る。
【0077】
本例において、コヒーレントメモリインタフェース303が、ホストプロセッサ/処理システム301および行列演算アクセラレータ307に結合され、これによりメモリを共有する。
図4および
図5は、行列演算アクセラレータを使用してどのようにメモリが共有されるかの異なる実施形態を示す。
図4に示されるように、ホストプロセッサ401および行列演算アクセラレータ回路405は、同じメモリ403を共有する。
図5は、ホストプロセッサ501および行列演算アクセラレータ505がメモリを共有せずに、他のメモリにそれぞれアクセスすることのできる実施形態を示す。例えば、プロセッサ501は、通常通り、タイルメモリ507にアクセスし、そのホストメモリ503を用いることが可能である。同様に、行列演算アクセラレータ505は、ホストメモリ503にアクセスすることができ、より典型的には、それ自身のメモリ507を使用する。これらのメモリは、異なる型のメモリであって良いことに留意されたい。
【0078】
いくつかの実施形態において、タイルは、物理レジスタ上のオーバーレイを使用してサポートされる。例えば、タイルは、実装に応じて、16の1024ビットレジスタ、32の512ビットレジスタ等を利用してよい。いくつかの実施形態において行列演算は、レジスタ等のメモリの1または複数のパックド領域を表す2次元(2-D)でデータ構造を用いる。本説明の全体にわたって、これらの2-Dデータ構造は、タイルまたはタイルレジスタと称される。
【0079】
いくつかの実施形態において、行列演算アクセラレータ307は、データバッファ305に結合された複数のFMA309を含む(いくつかの実装では、これらの複数のバッファ305のうちの1つ又は複数は、示されるようにグリッドのFMAに格納される)。データバッファ305は、メモリに格納されるべきメモリおよび/またはタイルから読み込まれるタイルをバッファする(例えば、tileloadまたはtilestore命令を使用して)。データバッファは、例えば、複数のレジスタであってよい。典型的には、これらのFMAは、チェーンとなったFMA309のグリッドとして配置され、タイルへの読み取りおよび書き込みが可能である。本例において、行列演算アクセラレータ307は、タイルT0、T1、T2を使用して行列乗算演算を実行する。少なくとも1つのタイルが、FMAグリッド309に収容される。いくつかの実施形態においては、演算における全タイルがFMAグリッド309に格納される。他の実施形態では、1つのサブセットのみが、FMAグリッド309に格納される。示されるように、T1が収容され、T0およびT2はそうではない。なお、A、B、及びCは、これらのタイルの行列を意味し、タイルの全体の空間を占有してよく、しなくてもよい。
【0080】
図6は、タイル(TMMA)を使用した行列積和演算の実施形態を示す。
【0081】
行列(タイルA601)の行の数は、特定の実施形態での計算のレイテンシを備えるシリアル(チェーン)FMAの数と一致する。実装では、より小さな高さのグリッドで自由に再循環できるが、計算は同じままである。
【0082】
ソース/デスティネーションベクトルは、N行のタイル(タイルC605)に由来し、FMA611のグリッドは、Nベクトル行列演算を実行し、タイルの行列乗算を実行する完全な命令をもたらす。タイルB603は、他のベクトルソースであり、各ステージのFMAに、「ブロードキャスト」期間を提供する。
【0083】
いくつかの実施形態において、演算時に、行列Bの要素(タイルB603に格納される)は、FMAの長方形グリッドにわたって分散される。行列B(タイルA601に格納される)は、FMAの長方形グリッドの列次元に適合すべく、行要素に複数の変換されたその要素を有する。グリッド内の各FMAで、A及びBの要素が乗算され、入ってくる被加数(図の上部から)へ加算され、出ていく合計が、FMAの次の行(または最終的な出力)へ渡される。
【0084】
単一の段階のレイテンシは、K(行列Bの行高さ)に比例し、従属するTMMAは、典型的には、レイテンシを隠すのに十分なソースデスティネーション行を有する(単一のタイルまたはタイルにわたってのいずれか)。実装ではまた、SIMD(パックドデータ要素)次元M(行列Aの行高さ)を時間段階にわたって分割してよいが、これは、Kに乗算される定数を単に変更するだけである。プログラムが、TMMAにより列挙された最大値より小さいKを指定する場合、実装では、これを「マスキング」または「アーリーアウト」と共に自由に実装する。
【0085】
TMMA全体のレイテンシは、N*Kに比例する。リピート率はNに比例する。TMMA命令毎のMAC数は、N*K*Mである。
【0086】
図7は、チェーン融合積和命令のイテレーション実行のサブセットの実施形態を示す。特に、デスティネーションについての1つのパックドデータ要素位置のイテレーションに関する実行回路を示す。本実施形態では、チェーン融合積和が、符号付きソースに作用し、アキュムレータは2×入力データサイズである。
【0087】
第1符号付きソース(ソース1 701)および第2符号付きソース(ソース2 703)のそれぞれが、4つのパックドデータ要素を有する。これらのパックドデータ要素のそれぞれが、浮動小数点データ等の符号付きデータを格納する。第3符号付きソース(ソース3 709)は、2つのパックドデータ要素を有し、それぞれが符号付きデータを格納する。第1符号付きソース701および第2符号付きソース703のサイズは、第3符号付きソース709(初期値または以前の結果)の半分である。例えば、第1符号付きソース701および第2符号付きソース703は、32ビットパックドデータ要素(例えば、単精度浮動小数点)を有してよく、その一方で、第3符号付きソース709は、64ビットパックドデータ要素(例えば、倍精度浮動小数点)を有してよい。
【0088】
本例示において、第1符号付きソース701および第2符号付きソース703の2つの最上位パックドデータ要素位置および第3符号付きソース709の最上位パックドデータ要素位置のみが示される。勿論、他のパックドデータ要素位置もまた処理されるであろう。
【0089】
示されるように、パックドデータ要素はペアで処理される。例えば、第1符号付きソース701および第2符号付きソース703の最上位パックドデータ要素位置のデータが、乗算器回路705を使用して乗算され、第1符号付きソース701および第2符号付きソース703の上位2番目のパックドデータ要素位置からのデータが、乗算器回路707を使用して乗算される。いくつかの実施形態において、これらの乗算器回路705および707は、他のパックドデータ要素位置に対して再使用される。他の実施形態では、追加の乗算器回路が用いられ、これにより、パックドデータ要素が並列処理される。いくつかのコンテキストでは、並列実行は第3符号付きソース709のサイズであるレーンを使用して行われる。複数の乗算のそれぞれの結果が、加算回路711を使用して加算される。
【0090】
乗算結果を加算した結果は、符号付きソース3 709の最上位パックドデータ要素位置からのデータに加算される(異なる加算器713または同じ加算器711を使用する)。
【0091】
最終的に、第2の加算の結果は、第3符号付きソース709から使用されたパックドデータ要素位置に対応するパックドデータ要素位置における符号付きデスティネーション715へ格納されるか、またもしあれば次のイタレーションへと渡されるか、のいずれかである。いくつかの実施形態において、書き込みマスクがこのストレージに適用され、これにより、対応する書き込みマスク(ビット)が設定されている場合には格納が発生し、未設定の場合には格納は発生しない。
【0092】
図8は、チェーン融合積和命令のイテレーション実行のサブセットの実施形態を示す。特にこれは、デスティネーションについての1つのパックドデータ要素位置のイテレーションに関する実行回路を示す。本実施形態では、チェーン融合積和が、符号付きソースに作用し、アキュムレータは2×入力データサイズである。
【0093】
第1符号付きソース(ソース1 801)および第2符号付きソース(ソース2 803)のそれぞれが、4つのパックドデータ要素を有する。これらのパックドデータ要素のそれぞれが、整数データ等の符号付きデータを格納する。第3符号付きソース(ソース3 809)は、2つのパックドデータ要素を有し、それぞれが符号付きデータを格納する。第1符号付きソース801および第2符号付きソース803のサイズは、第3符号付きソース809の半分である。例えば、第1符号付きソース801および第2符号付きソース803は、32ビットパックドデータ要素(例えば、単精度浮動小数点)を有してよく、第3符号付きソース809は、64ビットパックドデータ要素(例えば、倍精度浮動小数点)を有してよい。
【0094】
本例示において、第1符号付きソース801および第2符号付きソース803の2つの最上位パックドデータ要素位置および第3符号付きソース809の最上位パックドデータ要素位置のみが示される。勿論、他のパックドデータ要素位置もまた処理されるであろう。
【0095】
示されるように、パックドデータ要素はペアで処理される。例えば、第1符号付きソース801および第2符号付きソース803の最上位パックドデータ要素位置のデータが、乗算器回路805を使用して乗算され、第1符号付きソース801および第2符号付きソース803の上位2番目のパックドデータ要素位置からのデータが、乗算器回路807を使用して乗算される。いくつかの実施形態において、これらの乗算器回路805および807は、他のパックドデータ要素位置に対して再使用される。他の実施形態では、追加の乗算器回路が用いられ、これにより、パックドデータ要素が並列処理される。いくつかのコンテキストでは、並列実行は第3符号付きソース809(初期値または以前のイテレーションの結果)のサイズであるレーンを使用して行われる。複数の乗算のそれぞれの結果が、加算/飽和回路813を使用して、第3符号付きソース809へ加算される。
【0096】
加算/飽和(アキュムレータ)回路813は、加算結果が値として過度に大きい場合、オペランドの符号を保存する。特に、飽和評価は、多方向加算とデスティネーションまたは次のイタレーションへの書き込みとの間の無限精度結果において生じる。アキュムレータ813が浮動小数点であり、入力項が整数の場合、積の合計と浮動小数点アキュムレータ入力値とが無限精度値に変換され(数百ビットの固定小数点)、乗算結果と第3入力との加算が実行され、実際のアキュムレータ型への単一丸めが実行される。
【0097】
符号なし飽和とは、出力値が、その要素幅(全て1)に対する最大の符号なし数に限定されることを意味する。符号付き飽和とは、値が、その要素幅の最小の負の数と最大の正の数との間の範囲にあることに限定されることを意味する(例えば、バイトでは、範囲は-128(=-2^7)から127(2^7-1))。
【0098】
加算および飽和チェックの結果は、第3符号付きソース809から使用されたパックドデータ要素位置に対応するパックドデータ要素位置における符号付き結果815へ格納されるか、または、もしあれば次のイタレーションへと渡される。いくつかの実施形態において、書き込みマスクがこのストレージに適用され、これにより、対応する書き込みマスク(ビット)が設定されている場合には格納が発生し、未設定の場合には格納は発生しない。
【0099】
図9は、チェーン融合積和命令のイテレーション実行のサブセットの実施形態を示す。特に、デスティネーションについての1つのパックドデータ要素位置のイテレーションに関する実行回路を示す。本実施形態では、チェーン融合積和が、符号付きソースおよび符号なしソースに作用し、アキュムレータは4×入力データサイズである。
【0100】
第1符号付きソース(ソース1 901)および第2符号なしソース(ソース2 903)のそれぞれが、4つのパックドデータ要素を有する。これらのパックドデータ要素のそれぞれが、浮動小数点データや整数データ等の符号付きデータを有する。第3符号付きソース(初期値または結果915)は、符号付きデータを格納するパックドデータ要素を有する。第1ソース901および第2ソース903のサイズは、第3符号付きソース915の4分の1である。例えば、第1ソース901および第2ソース903は、16ビットパックドデータ要素(例えば、ワード)を有してよく、第3符号付きソース915は、64ビットパックドデータ要素(例えば、倍精度浮動小数点または64ビット整数)を有してよい。
【0101】
本例示において、第1ソース901および第2ソース903の4つの最上位パックドデータ要素位置および第3符号付きソース915の最上位パックドデータ要素位置が示される。勿論、もしあれば、他のパックドデータ要素位置もまた処理されるであろう。
【0102】
示されるように、パックドデータ要素は四つ組で処理される。例えば、第1ソース901および第2ソース903の最上位パックドデータ要素位置のデータが、乗算器回路905を使用して乗算され、第1ソース901および第2ソース903の上位2番目のパックドデータ要素位置からのデータが、乗算器回路907を使用して乗算され、第1ソース901および第2ソース903の上位3番目のパックドデータ要素位置からのデータが、乗算器回路909を使用して乗算され、第1ソース901および第2ソース903の最下位パックドデータ要素位置からのデータが、乗算器回路911を使用して乗算される。いくつかの実施形態において、第1ソース901の符号付きパックドデータ要素とは、拡張された符号であり、第2ソース903の符号なしパックドデータ要素とは、乗算前に拡張されるゼロである。
【0103】
いくつかの実施形態において、これらの乗算器回路905-911は、他のパックドデータ要素位置に対して再使用される。他の実施形態では、追加の乗算器回路が用いられ、これにより、パックドデータ要素が並列処理される。いくつかのコンテキストでは、並列実行は第3符号付きソース915のサイズであるレーンを使用して行われる。複数の乗算のそれぞれの結果が、加算回路913を使用して加算される。
【0104】
乗算結果を加算した結果は、符号付きソース3 915の最上位パックドデータ要素位置からのデータに加算される(異なる加算器917または同じ加算器913を使用する)。
【0105】
最終的に、第2の加算の結果919は、第3符号付きソース915から使用されたパックドデータ要素位置に対応するパックドデータ要素位置における符号付きデスティネーションへ格納されるか、または次のイタレーションへと渡されるかのいずれかである。いくつかの実施形態において、書き込みマスクがこのストレージに適用され、これにより、対応する書き込みマスク(ビット)が設定されている場合には格納が発生し、未設定の場合には格納は発生しない。
【0106】
図10は、チェーン融合積和命令のイテレーション実行のサブセットの実施形態を示す。特に、デスティネーションについての1つのパックドデータ要素位置のイテレーションに関する実行回路を示す。本実施形態では、チェーン融合積和が、符号付きソースおよび符号なしソースに作用し、アキュムレータは4×入力データサイズである。
【0107】
第1符号付きソース1001および第2符号なしソース1003のそれぞれが、4つのパックドデータ要素を有する。これらのパックドデータ要素のそれぞれが、浮動小数点データや整数データ等のデータを格納する。第3符号付きソース1015(初期または以前の結果)は、符号付きデータを格納するパックドデータ要素を有する。第1および第2ソースのサイズは、第3符号付きソース1015の4分の1である(初期または以前の結果)。例えば、第1および第2ソースは、16ビットパックドデータ要素(例えば、ワード)を有してよく、第3符号付きソース1015(初期または以前の結果)は、64ビットパックドデータ要素(例えば、倍精度浮動小数点または64ビット整数)を有してよい。
【0108】
本例示において、第1符号付きソース1001および第2符号なしソース1003の4つの最上位パックドデータ要素位置および第3符号付きソース1015の最上位パックドデータ要素位置が示される。勿論、もしあれば、他のパックドデータ要素位置もまた処理されるであろう。
【0109】
示されるように、パックドデータ要素は四つ組で処理される。例えば、第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の符号なしパックドデータ要素とは、乗算前に拡張されるゼロである。
【0110】
いくつかの実施形態において、これらの乗算器回路1005-1011は、他のパックドデータ要素位置に対して再使用される。他の実施形態では、追加の乗算器回路が用いられ、これにより、パックドデータ要素が並列処理される。いくつかのコンテキストでは、並列実行は第3符号付きソース1015(初期または以前の結果)のサイズであるレーンを使用して行われる。乗算結果を加算した結果は、加算/飽和回路1013を使用して、第3符号付きソース1015(初期または以前の結果)の最上位パックドデータ要素位置からのデータに加算される。
【0111】
加算/飽和(アキュムレータ)回路1013は、加算結果が符号付き飽和に対して値として過度に大きいかまたは過度に小さい場合に、オペランドの符号を保存する。特に、飽和評価は、多方向加算とデスティネーションへの書き込みとの間の無限精度結果において生じる。アキュムレータ1013が浮動小数点であり、入力項が整数の場合、積の合計と浮動小数点アキュムレータ入力値とが無限精度値に変換され(数百ビットの固定小数点)、乗算結果と第3入力との加算が実行され、実際のアキュムレータ型への単一丸めが実行される。
【0112】
加算および飽和チェックの結果1019は、第3符号付きソース1015(初期または以前の結果)から使用されたパックドデータ要素位置に対応するパックドデータ要素位置における符号付きデスティネーションへ格納されるか、または次のイタレーションへと渡される。いくつかの実施形態において、書き込みマスクがこのストレージに適用され、これにより、対応する書き込みマスク(ビット)が設定されている場合には格納が発生し、未設定の場合には格納は発生しない。
【0113】
図11は、2のべき乗サイズのSIMD実装を示しており、アキュムレータが、本実施形態に係る乗算器への入力よりも大きな入力サイズを使用する。(乗算器への)ソースおよびアキュムレータ値は、符号付きまたは符号なしの値であって良いことに留意されたい。2×入力サイズを有するアキュムレータ(換言すると、アキュムレータ入力値は、ソースにおけるパックドデータ要素サイズの2倍である)について、表1101は異なる構成を示す。バイトサイズソースに対して、アキュムレータは、ワードまたは16ビットサイズの半精度浮動小数点(HPFP)値を使用する。ワードサイズソースに対して、アキュムレータは、32ビット整数または32ビットサイズの単精度浮動小数点(SPFP)値を使用する。SPFPまたは32ビット整数サイズソースに対して、アキュムレータは、64ビット整数または64ビットサイズの倍精度浮動小数点(DPFP)値を使用する。
【0114】
4×入力サイズを有するアキュムレータ(換言すると、アキュムレータ入力値は、ソースにおけるパックドデータ要素サイズの4倍である)について、表1103は異なる構成を示す。バイトサイズソースに対して、アキュムレータは、32ビット整数または32ビットサイズの単精度浮動小数点(SPFP)値を使用する。いくつかの実施形態において、ワードサイズソースに対して、アキュムレータは、64ビット整数または64ビットサイズの倍精度浮動小数点(DPFP)値を使用する。
【0115】
8×入力サイズを有するアキュムレータ(換言すると、アキュムレータ入力値は、ソースにおけるパックドデータ要素サイズの8倍である)について、表1105は、1つの構成を示す。バイトサイズソースに対して、アキュムレータは、64ビット整数を使用する。
【0116】
以前に示唆したように、行列演算回路は、コアに、または外部アクセラレータとして、含まれてよい。
図12は、行列演算回路を用いるシステムの実施形態を示す。本例示において、複数のエンティティが、リング相互接続1245に結合される。
【0117】
複数のコアである、コア0 1201、コア1 1203、コア2 1205およびコアN 1207は、非タイルベース命令のサポートを提供する。いくつかの実施形態において、行列演算回路1251がコア1203に設けられ、他の実施形態では、行列演算回路1211および1213が、リング相互接続1245上でアクセス可能である。
【0118】
加えて、1つ又は複数のメモリコントローラ1223-1225が設けられ、複数のコアおよび/または行列演算回路のために、メモリ1233および1231と通信する。
【0119】
図13は、タイルを使用する行列演算をサポートするプロセッサコアパイプラインの実施形態を示す。分岐予測復号回路1303は、命令ストレージ1301に格納された命令から、命令の分岐予測、命令の復号、および/または、両方を実行する。例えば、本明細書で詳述される命令は、命令ストレージに格納されてよい。いくつかの実装において、個別の回路が分岐予測のために用いられ、いくつかの実施形態において、少なくともいくつかの命令が、マイクロコード1305を使用して、1または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号に復号される。分岐予測復号回路1303は、様々な異なるメカニズムを使用して実装されてよい。適切なメカニズムの例としては、これに限定されるものではないが、ルックアップテーブル、ハードウェア実装、プログラム可能ロジックアレイ(PLA)、マイクロコード読み取り専用メモリ(ROM)等を含む。
【0120】
分岐予測復号回路1303は、いくつかの実施形態においてスケジューラ回路1309に結合されるアロケート/リネーム1307回路に結合される。いくつかの実施形態において、これらの回路は、1)論理オペランド値を物理オペランド値へリネーミングすること(例えば、いくつかの実施形態におけるレジスタエイリアステーブル)、2)状態ビットとフラグを復号された命令に割り当てること、および、3)命令プールから実行回路で実行するための復号された命令をスケジューリングすること(例えば、いくつかの実施形態において、リザベーションステーションを使用)、のうちの1つ又は複数を実行することによって、レジスタリネーミング、レジスタアロケーション、および/またはスケジューリング機能を提供する。
【0121】
スケジューラ回路1309は、リザベーションステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表してよい。スケジューラ回路1309は、物理レジスタファイル1315に結合されるか、または物理レジスタファイル1315を含む。物理レジスタファイル1315のそれぞれは、1または複数の物理レジスタファイルを表し、それらの異なるファイルは、例えば、スカラ整数、スカラ浮動小数点、パックされた整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行されるべき次の命令のアドレスである命令ポインタ)、タイル、その他、等の、1または複数の異なるデータ型を格納する。一実施形態において、物理レジスタファイル1315は、ベクトルレジスタ回路、書き込みマスクレジスタ回路およびスカラレジスタ回路を備える。これらのレジスタ回路は、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタおよび汎用レジスタを提供してよい。物理レジスタファイル1315は、レジスタリネーミングおよびアウトオブオーダ実行が(例えば、リオーダバッファおよびリタイアメントレジスタファイルを使用する、将来のファイル、履歴バッファおよびリタイアメントレジスタファイルを使用する、レジスタマップとレジスタプールを使用する、その他)実装されてよい様々な態様を示すように、リタイアメント回路1317に重ねられている。リタイアメント回路1317および物理レジスタファイル1315は、実行回路1311に結合される。
【0122】
レジスタリネーミングが、アウトオブオーダ実行の文脈で説明されるが、レジスタリネーミングは、インオーダーアーキテクチャで用いられてよいことを理解されたい。図示されたプロセッサの実施形態は、別個の命令およびデータキャッシュユニットと、共有L2キャッシュユニットとを含んでもよいが、代替的な実施形態は、例えば一次(L1)内部キャッシュ、またはマルチレベル内部キャッシュ等の、命令およびデータの両方に対して1つの内部キャッシュを有してよい。いくつかの実施形態において、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュと、の組み合わせを含んでよい。代替的に、キャッシュの全てが、コアおよび/またはプロセッサの外部にあってもよい。
【0123】
実行回路1311は、1または複数の実行回路のセットであって、スカラ回路1321、ベクトル/SIMD回路1323、および、行列演算回路1327、並びに、キャッシュ1313にアクセスするメモリアクセス回路1325を含む。実行回路は、様々な演算を実行し(例えば、シフト、加算、減算、乗算)、様々なデータ型(例えば、スカラ浮動小数点、パックされた整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点)で動作しうる。いくつかの実施形態は、特定の機能または一連の機能に専用の複数の実行ユニットを含んでよいが、他の実施形態は、全ての機能を全て実行する1つだけの実行ユニットまたは複数の実行ユニットを含んでよい。スカラ回路1321は、スカラ演算を実行し、ベクトル/SIMD回路1323は、ベクトル/SIMD演算を実行し、行列演算回路1327は、本明細書で詳述される行列(タイル)演算を実行する。
【0124】
例として、例示的レジスタリネーミングアウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプラインを実装してよい。
1)命令フェッチ回路が、フェッチおよび長さ復号ステージステージを実行する。
2)分岐復号回路1303が、復号ステージを実行する。
3)アロケート/リネーム1307回路が、割り当てステージおよびリネーミングステージを実行する。
4)スケジューラ回路1309が、スケジュールステージを実行する。
5)(複数の)物理レジスタファイル(スケジューラ回路1309、アロケート/リネーム1307回路およびメモリユニットに、結合されまたは含まれる)が、レジスタ読み出し/メモリ読み出しステージを実行し、実行回路1311が実行ステージを実行する。
6)メモリユニットおよび(複数の)物理レジスタファイルユニットが、書き戻し/メモリ書き込みステージを実行する。
7)様々なユニットが、例外処理ステージに関与してよい。
8)リタイアメントユニットおよび(複数の)物理レジスタファイルユニットが、コミットステージを実行する。
【0125】
コアは、1つ又は複数の命令セット(例えば、x86命令セット(より新しいバージョンで追加されたいくつかの拡張付き)、カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セット、カリフォルニア州サニーベールのARMホールディングスのARM命令セット(NEON等のオプションの追加拡張付き))をサポートしてよく、本明細書で説明される(複数の)命令を含む。一実施形態において、コア1390は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、これによって、多くのマルチメディアアプリケーションによって用いられる演算が、パックドデータを使用して実行されることを可能にする。
【0126】
コアは、マルチスレッディング(2または2より多い並行するオペレーションまたはスレッドのセットを実行)をサポートしてよく、時分割マルチスレッディング、同時マルチスレッディング(1つの物理コアが、物理コアが同時マルチスレッディングを実行する各スレッドに対する論理コアを提供する)、またはその組み合わせ(例えば、インテルハイパースレッディングテクノロジー等の、時分割フェッチ・復号、およびその後の同時マルチスレッディング)を含む様々な方法でそのように動作してよいことを理解されたい。
【0127】
図14は、タイルを使用する行列演算をサポートするプロセッサコアパイプラインの実施形態を示す。分岐予測復号回路1403は、命令ストレージ1401に格納された命令から、命令の分岐予測、命令の復号、および/または、両方を実行する。例えば、本明細書で詳述される命令は、命令ストレージに格納されてよい。いくつかの実装において、個別の回路が分岐予測のために用いられ、いくつかの実施形態において、少なくともいくつかの命令が、マイクロコード1405を使用して、1または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号に復号される。分岐予測復号回路1403は、様々な異なるメカニズムを使用して実装されてよい。適切なメカニズムの例としては、これに限定されるものではないが、ルックアップテーブル、ハードウェア実装、プログラム可能ロジックアレイ(PLA)、マイクロコード読み取り専用メモリ(ROM)等を含む。
【0128】
分岐予測復号回路1403は、いくつかの実施形態においてスケジューラ回路1409に結合されるアロケート/リネーム1407回路、に結合される。いくつかの実施形態においてこれらの回路は、1)論理オペランド値を物理オペランド値へリネーミングすること(例えば、いくつかの実施形態におけるレジスタエイリアステーブル)、2)状態ビットとフラグを復号された命令に割り当てること、3)命令プールから実行回路で実行するための復号された命令をスケジューリングすること(例えば、いくつかの実施形態において、リザベーションステーションを使用)のうちの1つ又は複数を実行することによって、レジスタリネーミング、レジスタアロケーション、および/またはスケジューリング機能を提供する。
【0129】
スケジューラ回路1409は、任意の数の異なるスケジューラを表してよく、リザベーションステーション、中央命令ウィンドウ等を含む。(複数の)スケジューラユニット、スケジューラ回路1409は、物理レジスタファイル1415に結合されるか、または物理レジスタファイル1415を含む。物理レジスタファイル1415のそれぞれは、1または複数の物理レジスタファイルを表し、それらの異なるファイルは、例えば、スカラ整数、スカラ浮動小数点、パックされた整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行されるべき次の命令のアドレスである命令ポインタ)、タイル、その他、等の、1または複数の異なるデータ型を格納する。一実施形態において、物理レジスタファイル1415は、ベクトルレジスタ回路、書き込みマスクレジスタ回路およびスカラレジスタ回路を備える。これらのレジスタ回路は、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタおよび汎用レジスタを提供してよい。物理レジスタファイル1415は、リタイアメント回路1417によって重ねられており、レジスタリネーミングおよびアウトオブオーダ実行が実装されてよい様々な態様を示す(例えば、リオーダバッファおよびリタイアメントレジスタファイルを使用する、将来のファイル、履歴バッファおよびリタイアメントレジスタファイルを使用する、レジスタマップとレジスタプールを使用する、その他)。リタイアメント回路1417および物理レジスタファイル1415は、実行回路1411に結合される。
【0130】
レジスタリネーミングが、アウトオブオーダ実行との関連で説明されるが、レジスタリネーミングは、インオーダーアーキテクチャで用いられてよいことを理解されたい。図示されたプロセッサの実施形態は、別個の命令およびデータキャッシュユニットと、共有L2キャッシュユニットとを含んでよく、代替的な実施形態では、例えば一次(L1)内部キャッシュ、またはマルチレベル内部キャッシュ等の、命令およびデータの両方に対して1つの内部キャッシュを有してよい。いくつかの実施形態において、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュと、の組み合わせを含んでよい。代わりに、キャッシュの全てが、コアおよび/またはプロセッサの外部にあってもよい。
【0131】
実行回路1411は、1または複数の実行回路1427のセットと、キャッシュ1413にアクセスする1または複数のメモリアクセス回路1425のセットを含む。実行回路1427は、本明細書で詳述される行列(タイル)演算を実行する。
【0132】
例として、例示的レジスタリネーミングアウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプラインを実装してよい。
1)命令フェッチ回路が、フェッチおよび長さ復号ステージステージを実行する。
2)分岐復号回路1403が、復号ステージを実行する。
3)アロケート/リネーム1407回路が、割り当てステージおよびリネーミングステージを実行する。
4)スケジューラ回路1409が、スケジュールステージを実行する。
5)(複数の)物理レジスタファイル(スケジューラ回路1409、アロケート/リネーム1407回路およびメモリユニットに、結合されまたは含まれる)が、レジスタ読み出し/メモリ読み出しステージを実行し、実行回路1411が実行ステージを実行する。
6)メモリユニットおよび(複数の)物理レジスタファイルユニットが、書き戻し/メモリ書き込みステージを実行する。
7)様々なユニットが、例外処理ステージには関与してよい。
8)リタイアメントユニットおよび(複数の)物理レジスタファイルユニットが、コミットステージを実行する。
【0133】
コアは、1つ又は複数の命令セット(例えば、x86命令セット(より新しいバージョンで追加されたいくつかの拡張付き)、カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セット、カリフォルニア州サニーベールのARMホールディングスのARM命令セット(NEON等のオプションの追加拡張付き))をサポートしてよく、本明細書で説明される(複数の)命令を含む。一実施形態において、コア1490は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、これによって、多くのマルチメディアアプリケーションによって用いられる演算が、パックドデータを使用して実行されることを可能にする。
【0134】
コアが、マルチスレッディング(2または2より多い並行するオペレーションまたはスレッドのセットを実行)をサポートしてよく、時分割マルチスレッディング、同時マルチスレッディング(1つの物理コアが、物理コアが同時マルチスレッディングを実行する各スレッドに対する論理コアを提供する)、またはその組み合わせ(例えば、インテルハイパースレッディングテクノロジー等の、時分割フェッチ・復号、およびその後の同時マルチスレッディング)を含む様々な方法でそのように動作してよいこと、を理解されたい。
レイアウト
【0135】
本説明の全体にわたり、データは、行優先データレイアウトを使用して表される。列優先ユーザは、これらの方向に従って、項を変換すべきである。
図15は、行優先形式及び列優先形式で表される行列の一例を示す。示されるように、行列Aは、2×3行列である。この行列が行優先形式で格納される場合、1つの行における複数のデータ要素が連続する。この行列が列優先形式で格納される場合、1つの列における複数のデータ要素が連続する。行列の特性としてA
T*B
T=(BA)
Tは周知であり、上付き文字Tは変換を意味する。列優先データを行優先データとして読み出すと、その行列は、変換行列と同様の結果となる。
【0136】
いくつかの実施形態において、行優先セマンティクスが、ハードウェアで用いられ、列優先データは、オペランド順序を行列が変換された結果とスワップするが、メモリからの後続の列優先読み取りに対しては、これは正確な非変換行列である。
【0137】
例えば、2つの列優先行列の乗算は、以下となる。
ab gik ag+bh ai+bj ak+bl
cd*hjl=cg+dh ci+dj ck+dl
ef eg+fh ei+fj ek+fl
(3x2) (2x3) (3x3)
【0138】
入力行列は、線形メモリ(列優先)に、
acebdf
及び
ghijkl
として格納されるであろう。
【0139】
それらの行列を行優先として次元2×3および3×2で読み出すと、以下のようになるであろう。
ace 及びgh
bdf ij
kl
【0140】
順序をスワップして行列乗算をすると、
gh ace ag+bh cg+dh eg+fh
ij *bdf = ai+bj ci+dj ei+fj
kl ak+bl ck+dl ek+fl
【0141】
変換行列が出力され、次に、行優先の順序で格納される。
ag+bh cg+dh eg+fh ai+bj ci+dj ei+fj ak+bl ck+dl ek+fl
【0142】
そして、後続の列優先の計算で用いられ、正確な非変換行列となる。
ag+bh ai+bj ak+bl
cg+dh ci+dj ck+dl
eg+fh ei+fj ek+fl
使用例
【0143】
図16は、複数の行列(タイル)の使用法の一例を示す。本例では、行列C1601が、2つのタイルを含み、行列A1603が1つのタイルを含み、行列B1605が2つのタイルを含む。この図では、行列乗算を計算するためのアルゴリズムの内部ループの一例を示す。本例では、行列C1601の2つの結果タイルであるtmm0およびtmmm1が、中間結果の累算のために用いられる。行列A1603の1つのタイル(tmm2)は、行列B1605の2つのタイルと乗算されるため、2回再利用される。ポインタは、矢印によって示される方向から、新しいA行列(タイル)と2つの新しいB行列(タイル)をロードする。不図示の外部ループは、Cタイルに対するポインタを調整する。
【0144】
示される例示的コードは、タイル設定命令の使用法を含み、タイル使用を構成し、複数のタイルをロードし、それらのタイルをループ処理し、それらのタイルをメモリ格納し、そしてタイル使用を解放すべく実行される。
【0145】
図17は、複数の行列(タイル)の使用法に関する方法の実施形態を示す。1701で、タイル使用が設定される。例えば、TILECONFIG命令が実行され、タイル毎に行及び列の数を設定する段階を含んだタイル使用が構成される。1703において、典型的には、少なくとも1つの行列(タイル)がメモリから読み込まれる。1705において、少なくとも1つの行列(タイル)の演算が、複数の行列(タイル)を使用して実行される。1707において、少なくとも1つの行列(タイル)が、メモリへ吐き出され、1709においてコンテキストスイッチを行うことができる。
例示的構成
タイル設定ハードウェアサポート
【0146】
上記で記載したように、典型的には、タイル使用は使用前に設定される必要がある。例えば、全ての行及び列が完全に用いられる必要がない場合がある。いくつかの実施形態においては、電力を抑えるべくこれらの行及び列を設定しないのみならず、ある演算がエラーを生成するかどうかを判断するために、設定が用いられてよい。例えば、(N×M)*(L×N)形の行列乗算は、典型的には、MおよびLが同じでないと機能しない。
【0147】
タイルを使用した行列を使用する前に、いくつかの実施形態においては、タイルサポートが設定されねばならない。例えば、タイル毎にいくつの行及び列があるか、使用されるべきいくつのタイルがあるか、等が設定される。行列アクセラレータを使用すべくコンピュータを構成するためのサポートを提供するので(プロセッサコアの一部または外部デバイスとしてのいずれか)、TILECONFIG命令は、コンピュータそれ自体への改善である。特に、TILECONFIG命令を実行すると、メモリから設定が取得され、行列アクセラレータ内の行列(タイル)の設定に適用される。
タイル使用設定
【0148】
図18は、一実施形態に係るタイル使用法の設定のためのサポートを示す。メモリ1801は、サポート対象の行列(タイル)のタイル記述1803を含む。
【0149】
プロセッサ/コア1805の命令実行リソース1811は、タイル記述1803の態様をタイル構成1817に格納する。タイル構成1817は、どのタイルがパレットに設定されているか(各タイルの行及び列の数)と行列サポートが使用されているマークとを詳述するパレットテーブル1813を含む。特に、命令実行リソース1811は、タイル構成1817によって指定されるように、タイルを使用するよう構成される。命令実行リソース1811は、タイル使用を示すマシン固有のレジスタや設定レジスタを含んでもよい。使用中の値や開始値等の追加の値もまた設定される。タイル構成1817は、(複数の)レジスタ1819を用いて、タイル使用および構成情報を格納する。
【0150】
図19は、サポート対象の複数の行列(タイル)の記述についての実施形態を示す。これは、STTILECFG命令の実行に際して格納されるべき記述である。本例では、各フィールドは、バイトである。バイト[0]において、パレットID1901が格納される。パレットIDは、パレットテーブル1813にインデックスを付けるために用いられ、当該テーブルは、パレットID毎に、タイル内のバイト数と、上記設定により定義されたこのIDに関連づけられているタイルの行毎のバイトとを格納する。
【0151】
バイト1は、"startRow"レジスタ1903に格納すべき値を格納し、バイト2は、レジスタであるstartP1905に格納すべき値を格納する。これらのイベント後のリスタート命令をサポートするために、命令はこれらのレジスタに情報を格納する。上記で詳述したようにブレークイベント後のリスタート命令をサポートするために、命令はそれらのレジスタに情報を格納する。startRow値は、その行がリスタートのために用いられるべきことを示す。startP値は、ペアが用いられる場合のストアオペレーションの行内の位置を示し、いくつかの実施形態においては、行の下位半分(ペアの下位タイル)または行の上位半分(ペアの上位タイル)を示す。概して、行(列)の位置は、必要とされない。
【0152】
TILECONFIGおよびSTTILECFGを例外として、行列(タイル)命令が成功裡に実行すると、startRowおよびstartPの両方をゼロに設定することとなる。
【0153】
割り込まれた行列(タイル)命令がリスタートしない場合は常に、startRow値およびstartP値をゼロにするのはソフトウェアの責任である。例えば、マスクされない浮動小数点例外ハンドラは、ソフトウェアでの操作を終了することを決定し、プログラムカウンタ値を別の命令、通常は次の命令、に変更してよい。この場合、ソフトウェア例外ハンドラは、プログラムを再開する前に、オペレーティングシステムによって提示された例外のstartRow値およびstartP値を、ゼロにしなければならない。オペレーティングシステムは、その後、restore命令を使用して、それらの値を成功裡にリロードすることとなる。
【0154】
バイト3は、タイル1907のペアの指標(タイル毎に1B)を格納する。
【0155】
バイト16-17は、タイル0の行1913および列1915の数を格納し、バイト18-19は、タイル1の行及び列の数、等を格納するといった具体である。換言すると、各2バイトグループが、1つのタイルの行及び列の数を指定する。2バイトのグループが、タイルパラメータの指定に用いられない場合、それらはゼロ値を有するべきである。実装制限またはパレット制限よりも多くのタイルのタイルパラメータを指定すると、結果はエラーとなる。未設定タイルは、0行0列の初期状態に設定される。
【0156】
最終的に、メモリ内の構成は、典型的には、いくつかの連続するバイトが全てゼロである等の終了描写で終了する。
例示的タイルおよびタイル構成ストレージ
【0157】
図20A~
図20Dは、(複数の)レジスタ1819の例を示す。
図20Aは、複数のレジスタ1819を示す。示されるように、各タイル(TMM02001・・・TMMN2003)は、別個のレジスタを有し、各レジスタはその特定のタイルの行と列のサイズを格納している。 StartP2011およびStartRow2013は、別個のレジスタに格納される。1または複数の状態レジスタ2015は、タイルが使用されるように構成されることを示すように設定される(例えば、TILES_CONFIGURED=1)。
【0158】
図20Bは、複数のレジスタ1819を示す。示されるように、各タイルは、その行及び列に別個のレジスタを有する。例えば、TMM0行構成2021、TMM0列構成2023、StartP2011およびStartRow2013は、別個のレジスタに格納される。1または複数の状態レジスタ2015は、タイルが使用されるように構成されることを示すように設定される(例えば、TILES_CONFIGURED=1)。
【0159】
図20Cは、単一のレジスタ1819を示す。示されるように、このレジスタは、タイル構成(タイル毎の行及び列)2031を格納し、StartP2011およびStartRow2013は、パックドデータレジスタとして単一のレジスタに格納される。1または複数の状態レジスタ2015は、タイルが使用されるように構成されることを示すように設定される(例えば、TILES_CONFIGURED=1)。
【0160】
図20Dは、複数のレジスタ1819を示す。示されるように、単一のレジスタは、タイル構成(タイル毎の行及び列)2031を格納する。StartPおよびStartRowは、別個のレジスタ2011および2013に格納される。1または複数の状態レジスタ2015は、タイルが使用されるように構成されることを示すように設定される(例えば、TILES_CONFIGURED=1)。
【0161】
例えば、スタートレジスタを単一のレジスタへ組み合わせて、それらを別個に表示させる等の他の組み合わせが検討される。
設定可能なシストリックアレイ
【0162】
上で言及したように、汎用行列乗算(別名、GEMM)のためのハードウェアは、深層学習等の所定のアプリケーションのピーク計算(及びエネルギー効率)を改善するための良い選択肢である。ディープニューラルネットワーク(DNN)に基づくアプリケーションについての膨大な計算要求は、多数の(例えば、数百)処理エレメント、例えば、融合乗算加算(FMA)回路を使用するハードウェア(例えば、アクセラレータ)の使用をもたらしうる。しかしながら、アクセラレータ(例えばDNN)は、密な行列乗算での非常に規則的なデータフローパターンに対して、最適化されうる。特定の実施形態では、アクセラレータは、シストリックアレイ実装を使用して、性能と面積/電力効率を最大化する。シストリックアレイは、非常に規則的なデータフローに最適化された密な2次元アレイを含んでよい。
【0163】
しかしながら、実行のいくつかの一部は、規則的なデータフローへ完全にはマップされないので、それらのデータフローへと完全にはマップされない演算(例えば問題)と、それ故にそれらのデータフローに対して最適化されたハードウェアとは、例えばシストリックアレイ内の処理エレメント(例えば、演算ロジックユニット(ALU)回路)の著しく低い利用率につながりうる。一実施形態において、特定の行列乗算は、ハードウェアアレイ、例えば、小さい問題サイズに起因して生じる、またはアレイサイズの倍数ではない行列の境界の周りで生じる乗算、を十分には活用していない。
【0164】
特定の実施形態において、固定の行列サイズに最適化されたアクセラレータは、低い利用率という問題に見舞われる。例えば、行列の幅が36で、シストリックアレイの幅が32(例えば、行列演算アクセラレータ回路)のワークロードを検討する。アレイにゼロがパディングされている場合(または、タイル全体が再構成されている)、ハードウェアは、最初のパスにおける32要素幅である全幅タイルを処理し、そして、次のパスで4要素幅のみのタイルを処理する。故に、全体的な効率は56.25%である(平均32/32=100%、4/32=12.5%)。特定の実施形態において、ベクトルアクセラレータ(例えば、行列演算アクセラレータ回路とは別個のベクトルスタック)への値の移動は高価でありピーク計算は、シストリックアレイ(例えば、行列演算アクセラレータ回路)よりはるかに小さい。
【0165】
本明細書の特定の実施形態は、複数の同時でより小さな行列乗算とハードウェアを駆動する新たな命令とをサポートする設定可能なシストリックアレイ(例えば、行列演算アクセラレータ回路)である。特定のハードウェアにおいて、命令の復号および実行は、設定可能なシストリックアレイハードウェア(例えば行列演算アクセラレータ回路)に、C=A*B+Cの計算を行わせる。ここで、A、B、及びCはそれぞれ2次元行列であり、Cの各要素について、ハードウェアは、入力行列Aの1行と、行列Bの1列とのドット積を計算する。本明細書の特定の実施形態は、A及びB(例えば並びにC)入力を受け取る新たな命令(およびシストリックアレイにおけるハードウェアサポート)であり、上記の入力は、共に「接着」された複数の行列からそれぞれ構成され、複数の出力行列を生成する。
【0166】
この解決策の利点は、ハードウェアをより柔軟であることを可能とし、故に、他の解決策よりも多くの条件下で最大の利用率が得られる。例えば、1つのアレイにおける処理エレメント(例えば、ALU回路)の数が、32×32サイズであり、A行列が幅16高さ32の場合、ハードウェアは、ユーザが効率的に、そのような2つのA行列を共に「接着」して、32×32のA´を取得し、これによりアレイを完全に利用することを可能にする。
【0167】
深層学習および他のアプリケーションの場合、本明細書の実施形態は、シストリックアレイにおける複数の小さな行列に同時に作用すべく単一の命令の実行を可能とし、これにより処理エレメント(例えば、ALU回路)の利用率が高まる。さらに、本明細書の実施形態は、大きな行列演算に、高性能/面積/電力税を支払うことなく、この機能を提供する。
【0168】
行列の異なるサイズのそれぞれに対してアクセラレータを設計することは、特定の実施形態においては非実用的である。シストリックアレイ実装は、固定サイズ入力および/または出力行列に対して、処理エレメントの密な2次元グリッド(例えば、FMA回路)を使用してよい。従って、レジスタを再構成する(例えば、1次元でのみ特定の量だけで効率を向上させる)か、または行列をゼロでパディングしてそれらをアレイのサイズに適合させることのいずれかにより提供される、固定サイズより小さい行列サイズの場合とは対照的に、本明細書の実施形態では、複数の小さな行列で同時に演算する(例えば、共に処理される)ハードウェア(および1つの命令または複数の命令)を用いる。本明細書の特定の実施形態では、行列演算アクセラレータ回路を提供し、ベクトルスタック(例えば、データキャッシュユニットDCUを介したインテルAVXスタック)への/からの移動がなされるデータ値(例えば入力)、および/または、データ値(例えば入力)のゼロパディングを用いない。
【0169】
特定の実施形態において、行列演算アクセラレータ回路は、入力として、複数の(例えば2または3)(例えば、それぞれが2次元の)行列A(M×K次元であって、M及びKは整数)、行列B(K×N次元であって、K及びNは整数)、および、行列C(M×N次元であって、M及びNは整数)を受け取り、次に各要素に演算を実行し(例えば、融合乗算加算)、行列として格納される結果を生成する(例えば、M×N次元の行列Cへと戻され、M及びNは整数である)。一実施形態において、M,K,Nは16より小さいか等しい。特定の実施形態では、行列演算アクセラレータ回路が以下の演算を実行する。
【0170】
【0171】
図21は、処理エレメント回路2106-1~2106-4の2次元グリッドを備える行列演算アクセラレータ回路2100の実施形態を示す。特定の実施形態において、データストレージ2102(例えばレジスタファイル)は、複数のレジスタを有し、レジスタは、例えば、第1入力2次元行列(A)、第2入力2次元行列(B)および第3入力2次元行列(C)(および、例えば、結果ストレージ)を表すレジスタのそれぞれのセットを含む。一実施形態において、出力2次元行列の結果は、第3入力2次元行列(C)を形成するレジスタに格納され、例えば、それらが行列演算アクセラレータ回路2100によって用いられた後、入力2次元行列(C)の値を上書きする。示された行列演算アクセラレータ回路2100は、複数のルーティング回路2104-1~2104-4を含み、(例えば、行列Aおよび行列Bからの)入力値を、実行されるべき演算に従って処理エレメントへとルーティングする。
【0172】
本明細書の図は、全てのデータ通信結合(例えば接続)を示さなくてもよいことに注意されたい。当業者であれば、これが図中の特定の詳細を曖昧にしないためであることを理解する。図中の双方向矢印は、双方向通信を必要としなくてもよく、例えば、一方向通信を示してよい(例えば、そのコンポーネントまたはデバイスへの/からの)ことに注意されたい。通信経路のいずれ又は全ての組み合わせが、本明細書の特定の実施形態において用いられてよい。単一ラインが、内部に複数経路、例えば、複数のチャネルを含んでよい。例えば、ライン2110は、複数経路(例えば、X個、Xは任意の正の整数)、例えば、行列Aからの値に対する1つの経路と、行列Bからの値に対する1つの経路とを含んでよい。
【0173】
(例えば、その演算を引き起こすための命令を復号し実行することにより)演算の実行要求があると、特定の実施形態では、行列演算アクセラレータ回路2100は、行列Aおよび行列Bからの値を、各ルーティング回路へ送信する。例えば、演算は、行列Aに行列Bを乗算し、次に、各結果に行列Cからの対応する値を加算することであってよい。一実施形態において、第1ルーティング回路2104-1は、第1値A[0][0]を行列A[行][列]から受信し(行インデックス0および列インデックス0からの値)、その値を、それぞれの処理エレメント2106-1へ、処理エレメント2106-1のそれぞれの第1入力および行列Bの第1行からの複数値のセットへの行へとブロードキャストし、これらの複数の値を、処理エレメント2106-1の各第2入力へ送信する(例えば、これにより、処理エレメント2112がB[0][0]からの値を受信し、処理エレメント2114がB[0][1]からの値を受信する等)。一実施形態において、処理エレメント2112は、その出力2116に、A[0][0]*B[0][0]の乗算の結果を提供し、処理エレメント2114は、その出力2118に、A[0][0]*B[0][1]の乗算の結果を提供する。複数の出力(例えば、出力2116および2118)が、ルーティング回路2 2104-2へ送信される。
【0174】
一実施形態において、第2ルーティング回路2104-2は、第2の値A[0][1]を行列A[行][列]から受信し(行インデックス0および列インデックス1からの値)、その値を、それぞれの処理エレメント2106-2へ、処理エレメント2106-2のそれぞれの第1入力および行列Bの第2行からの複数値のセットへの行へとブロードキャストし、これらの複数の値を、処理エレメント2106-1(例えば、これにより、処理エレメント2122がB[1][0]からの値を受信し、処理エレメント2124がB[1][1]からの値を受信する等)の各第2入力および処理エレメント2106-1の上記行の複数の出力からの各出力へ送信する。一実施形態において、処理エレメント2122は、その出力2126に、出力2116(A[0][0]*B[0][0])へ加算したA[0][1]*B[1][0]の乗算の結果を提供し、処理エレメント2124は、その出力2128に、出力2118(A[0][0]*B[0][1])へ加算したA[0][1]*B[1][1]の乗算の結果を提供する。特定の実施形態において、この融合乗算加算演算は、処理エレメント2106-3~処理エレメント2106-4の各行によって継続され、処理エレメント2106-4からの出力2130および出力2132を生成する。なお、4は、処理エレメント(及び、例えば各行列A、B、及びCの行及び列)の例示的な行の数であって、任意の複数の行であり得ることに注意されたい。行列演算アクセラレータ回路2100に対する処理エレメントの行の終わりに達すると、バイアス加算回路2108は、入力2134(例えば、並列入力ポート)の行列Cからの各要素(例えば、行列Cの第1行からの各要素)を加算し、出力2136(例えば、並列出力ポートのセット)を経由して結果を行列Cの各要素(例えば、行列Cの第1行の各要素位置)に格納する。例えば、行列Cの第1行からの第1要素は出力2130からの結果へ加算され、その結果は行列Cの第1行の第1要素位置へ戻して格納され、行列Cの第1行からの第2要素は出力2132からの結果へ加算され、その結果は行列Cの第1行の第2要素位置へ戻して格納される。これが行列Aの各行に対して反復され、行列A*行列Bの全体の乗算を生成する(そして、例えば、行列Cからのバイアスを各結果に加算する)。
【0175】
従って、回路の特定の実施形態では、処理エレメント(PE)(例えば、FMAユニット)の2次元(2D)アレイを、例えばいくつかの入力及び出力バッファとローカル制御論理回路と共に使用する。一実施形態において、各PEは、その入力のいくつかをレジスタファイル等のデータストアから取得し、他の入力は他のPEから取得し、PEの最後の行は、その出力をデータストアへ送り返す。故に、PEはこれらの実施形態において、パイプラインを形成する。ユーザは、概して、データ要素の大きなセット(例えば、PEよりも多くのデータ要素)に対して一連の演算を実行することを意図する場合がある。そこで、要素をアレイの上部に入力してパイプラインを開始し、データをパイプラインを通じて下向きに流してよい(適切ならば、追加入力をパイプラインの様々な段階で提供する)。
【0176】
一実施形態において、処理エレメントの各インスタンスは、融合積和(FMA)回路であり、乗算器回路(例えば、第1入力a、第2入力bを受け取り、結果出力を生成する)と加算回路(例えば、乗算器回路からの結果出力を第1入力として第3入力cと共に加算して結果を生成する)とを含む。
【0177】
本明細書の特定の実施形態は、A及びB(例えば並びにC)入力を受け取る新たな命令(およびシストリックアレイにおけるハードウェアサポート)であり、上記の入力は、共に「接着」された複数の行列からそれぞれ構成され、単一の行列A、単一の行列B及び単一の行列Cだけに動作する代わりに、複数の出力行列を生成する。FMA回路の2次元内のデータフローのために用いられる制御を単純化ために、本明細書の特定の実施形態は、融合積和演算の制御を修正することなく、複数の行列のドット積演算の制御を提供する。
【0178】
図22は、いくつかの実施形態に係る行列演算を加速するためのTILEPARTIALDOTPRODUCT命令2201の使用を示すブロック図である。命令2201は、(行列A*行列B)+行列Cの演算を、行列演算アクセラレータ回路2220によって実行させる。行列演算アクセラレータ回路2220は、
図24の行列演算アクセラレータ回路2400または
図26の行列演算アクセラレータ回路2600のインスタンスであってよい。
【0179】
単一の行列A、単一の行列B、単一の行列Cでのみ動作する代わりに、命令2201(および、
図24の行列演算アクセラレータ回路2400および
図26の行列演算アクセラレータ回路2600)は、複数の入力行列で同時の演算が可能である。例えば、本明細書の実施形態は(例えば、データを再配置することで)Aタイルを複数の行列Aと共にサイドバイサイドでフェッチしてよい(例えば、行列A2222は、同じA行列からのデータの第1行A1とデータの第2行A2とを含み、その一方で、A1´およびA2´は、それぞれ、別のA行列からのデータの第1行およびデータの第2行である)。アプリケーションに応じて、本明細書の実施形態は、同じB行列を複製するかまたは複数のB行列を繋ぎ合わせるかのいずれかによって、Bタイルを形成できる(例えば、
図22に示されるように、異なるB行列からの第1行B1データおよび第1行B´データで)。他の実施形態において、B行列は複製されてよく、これにより、例えば、B1´=B1となる。特定の実施形態において、ハードウェアは、複数のC行列(例えば、
図22に示されるように)へのアクセスをサポートする。一実施形態において、別の命令(例えば、ソフトウェアで示される)は、異なる複数の行列からタイルAを生成し、異なる複数のB行列または複製された1つのB行列のいずれかからBタイルを生成し、異なる複数のC行列または複製されたC行列のいずれかからCタイルを形成する(例えば、C1´=C1、C2´=C2、および/またはC1=C2)。
【0180】
故に、命令2201の特定の実施形態は、復号および実行がされた場合、共に「接着」された複数の行列からそれぞれ構成されたA&B入力に対して正確に作用し、各C値を加算した後に複数の出力行列を生成する。
【0181】
従って、1つの演算モードでは、行列演算アクセラレータ回路は、更新されたC1=(A1*B1+A1´*B2´+・・・)+C1を生成する。しかしながら、AおよびA´が共に入力される異なる行列である場合、特定の実施形態において、これは所望の演算ではない。代わりに、別の演算モードでは、行列演算アクセラレータ回路は、出力要素毎に、例えば更新されたC1=A1*B1+C1に、より少ない演算を実行する。これは、第2のモードでは第1のモードよりもより多くの出力要素があることを意味する。結果として得られる、更新されたC行列は、共に接着された複数の出力行列にパックされてよく(例えば、
図22の更新された行列C2226に示されるように)、または、複数の独立した宛先(デスティネーション)を有してよい。
【0182】
命令形式の例としてTILEPARTIALDOT PRODUCT(または"タイルの部分的な 'N'ドット積"のTPNDP)のニーモニックを有し、Nは、共に論理的に接着される異なる行列の数である。例えば、2つのA行列が1つのAタイルに入力される場合(そして、例えば同じく2つのB行列が1つのBタイルに入力される場合)、命令は、TP2DPと称されてよい。命令は、TPNDPtsrcdest、tsrc1, tsrc2の形式を有してよく、第1のフィールド"tsrcdest"はタイルソース/デスティネーション(例えばタイル2226)を識別し、第2のフィールド"tsrc1"は第2タイルソース(例えばタイル2222)を識別し、第3フィールド"tsrc2"は第3タイルソース(例えばタイル2224)を識別する。一実施形態において(例えば、大きな出力タイルを有し)、出力タイルのサイズは、黙示的である。複数の出力タイルを有する実施形態において、出力タイルの数はNである(Nは任意の正の整数)。特定のタイルレジスタは連続的であってよく、tsrcdestから開始する(例えば、tmm0およびtmmm1であってtmm0が特定でありN=2)か、または複数のレジスタのグループを選択すべく他の指定を用いてよい。特定の実施形態では、共に接着された所与の異なるサイズの行列を処理するために新たな命令を用いる。例えば、行列演算アクセラレータ回路は、共に接着された4つの行列を処理可能だが、共に接着された2つの行列の入力のみが提供された場合(それらのうちの1つは他方の3倍の大きさ)、要素の4分の1は1つの行列から、4分の3は別の行列からとなり、これはオペコード(例えばT1AND3DP)において、または命令(例えば、TPDP tsrcdest, tsrc1, tsrc2, imm8)に渡される即値を介して、指定されてよい。即値の可能なエンコードが以下に記載される。
【0183】
図22は、いくつかの実施形態に係る、行列ドット積演算を加速するためのTILEPARTIALDOTPRODUCT命令2201の使用を示すブロック図である。示されるように、命令2201は、オペコード2202を含み(例えば、TILETRANSFORM)、これは、本開示に従って行列にドット積を実行するプロセッサを示す。特に、特定の実施形態では、オペコードに応答して、プロセッサは、単一の入力タイルに格納された複数の行列のそれぞれに、各演算を実行する。例えば、ソース位置1 2206は1または複数のA行列を格納し、ソース位置2 2208は1または複数のB行列を格納し、ソース位置3 2204は1または複数のC行列を格納する。任意選択で命令は、入力または出力行列のうちの1つ又は複数のM2210(例えば行の数)およびK2212(例えば列の数)を示すフィールド(例えば、オペランドまたはオペコード)を含んでよい。共に"接着"された行列のサイズおよび/または数は、いくつかの方法のうちの1つ又は複数で特定されてよく、TILEPARTIALDOTPRODUCT命令のオペランドとして、指定されたオペコードの接尾辞または接頭辞として、命令と共に提供された即値2214の一部として、命令(例えば、TILECONFIG)の発行前にソフトウェアでプログラムされた制御レジスタの一部として、または、アーキテクチャのデフォルト値としても指定されてよい。特定の実施形態では、M及びKは、それぞれ、無制限の範囲の整数値から選択されてよい。
【0184】
命令2201は、さらに、宛先行列(例えば、タイル)位置2204を指定する。指定された各行列位置は、メモリ位置、ベクトルレジスタの集合およびタイルレジスタの集合のいずれかにおいて、であってよい。ここで、指定ソース2206、2208、2210および宛先行列2216は、それぞれ、複数の要素を含む。一実施形態において、要素は、64ビットまたは32ビットである。
【0185】
また、TILEPARTIALDOTPRODUCT命令2201を実行するためのシステム2200が示される。システムは、1または複数のA行列を格納するソース位置1 2222、1または複数のB行列を格納するソース位置2224、1または複数のC行列を格納するソース位置3 2226、行列演算アクセラレータ回路2220、および指定された宛先行列(タイル)2226を含む。
【0186】
これらの行列演算を実行する代替の劣ったアプローチが存在するかもしれないが、開示されたTILEPARTIALDOTPRODUCT命令を実行する実施形態の電力と性能向上は、実現されない。いくつかの他のアプローチでは、ソフトウェアが、データを、ベクトル/SIMDレジスタにロードし、ベクトル命令を使用して変換を実行し、再フォーマットされたデータをメモリへ書き込み、次に、再フォーマットされたデータを2D/ベクトル/タイルレジスタにロードする。しかし、ベクトル命令で形式の移行を行うと低速になる場合があり、複雑なソフトウェアチューニングを要求し、キャッシュ内により多くの空間が必要な場合がある。
【0187】
図23は、本開示の複数の実施形態に係るTILEPARTIALDOTPRODUCT命令を処理する方法2300を示す。方法2300は、フェッチ回路を使用して、オペコード、ソースタイルの位置および宛先タイルを指定するフィールドを有する形式を備えた命令をフェッチすることを含み、オペコードは、プロセッサが、ドット積演算を単一のソースタイル内の複数の行列における各行列のデータの適切なサブセットに実行することを示し、更に、フェッチされた命令2303を復号回路を使用して復号すること、復号された行列命令2305の実行をスケジューリングすること、データの適切なサブセットにドット積演算を実行し、かつ、結果を宛先タイル2307に保存することにより、実行回路を使用して復号された命令に応答すること、そして、実行された命令2309の結果にコミットすることを備える。一実施形態において、命令は、行列演算アクセラレータ回路を、第1のモード(例えば、各入力タイル/レジスタの各セットにおける単一の行列のみを有する)と第2のモード(例えば、入力タイルの少なくとも1つ/レジスタの各セットにおける複数の行列を有する)との間でスイッチする。
【0188】
特定の実施形態では、
図21の行列演算アクセラレータ回路2100と同様に演算が始まり、パイプラインを開始するためにデータ値がアレイの先頭に入力され、パイプラインを通って連続した結果が少しずつ転送される(例えば、適切ならば、追加の入力をパイプラインの様々な段階で提供する)。例えば、ルーティングチャネルを通して、データが1つのPEから次のPEへ下向きに流れる。行列演算アクセラレータ回路にコンフィギュアビリティを提供するために、本明細書の特定の実施形態では、設定スイッチを規則的な間隔で行列演算アクセラレータ回路に追加する(例えば、
図23における複数のPEの第4行の後の設定スイッチ2438)。特定の実施形態では、設定スイッチは、複数のデマルチプレクサおよび複数のマルチプレクサのペアである。一実施形態において、設定スイッチがオンされる場合、デマルチプレクサは前のPEからの結果出力に初期値Cを加算した後、Cバッファに書き込み、次のPEに向けたマルチプレクサは、前のPEの出力を転送する代わりに、ゼロを転送する。故に、本明細書の特定の実施形態は、ドット積のチェーンを中断して、新たなチェーンを開始する。一実施形態において、設定スイッチがオフされると、完全な行列演算アクセラレータ回路は、Cへの1つの出力ステージを有する単一のパイプラインのように振る舞う。これにより、例えば、入力データ値がパイプラインの先頭に挿入された場合(例えば、処理エレメント2406-1)、それらがオンにされた設定スイッチに到達するまで、結果が流れる(例えば、図示された方向で下向きに)。このステージで、パイプラインは、特定の実施形態では、対応するC要素へ値を加算した後、中断して値をバッファに書き込み、そして例えば、パイプラインにおける次のステージは、前のPEの出力値がゼロであったかのように読み込まれる。従って、新たなパイプラインの始まりと考えることができる。
【0189】
特定の実施形態において、設定スイッチは1つ又は複数の命令により制御される。例えば、第1の命令は全ての設定スイッチをオフし(例えば、各タイル乗算内の単一の行列)、第2の命令は、複数の設定スイッチの1または複数の行をオンする(例えば、各タイル内の複数の行列)。例えば、論理的に共に接着された(例えば上で記載のTP2DP)2つの均等なサイズの行列を処理するための命令(例えば、タイルA、B、及びCのそれぞれにおける2つの均等なサイズの行列)は、PEアレイの中央で設定スイッチの行をオンして、タイルA、B、及びCに格納された第1の行列セットに対してA*B+Cを実行し、タイルA、B、及びCに格納された第2の行列セットに対してA´*B´+C´を実行する。
【0190】
図24は、第1のモード及び第2のモードの間をスイッチする設定スイッチ(例えば、ルーティング回路及び設定スイッチ)の行を含む処理エレメント回路2406-1~2406-5の2次元グリッドを備える、行列演算アクセラレータ回路2400の実施形態を示す。一実施形態において、復号および実行命令は、行列演算アクセラレータ回路2400を、第1のモード(例えば、各入力タイル/レジスタの各セットにおける単一の行列のみを有する)から第2のモード(例えば、入力タイルの少なくとも1つ/レジスタの各セットにおける複数の行列を有する)へと、または第2のモードから第1のモードへとスイッチする。
【0191】
特定の実施形態において、データストレージ2402(例えば、レジスタファイル)は、複数のレジスタを有し、レジスタは、例えば、少なくとも1つの(例えば複数の)第1入力2次元行列(A)、少なくとも1つの(例えば複数の)第2入力2次元行列(B)および少なくとも1つの(例えば複数の)第3入力2次元行列(C)(および、例えば、結果ストレージ)を表すレジスタのそれぞれのセットを含む。一実施形態において、出力2次元行列の結果は、少なくとも1つの第3入力2次元行列(C)を形成するレジスタに格納され、例えば、それらが行列演算アクセラレータ回路2400によって用いられた後、入力2次元行列(C)の値を上書きする。
【0192】
一実施形態において、第1のモードの場合、第1の複数のレジスタに格納された値は、単一の入力2次元行列Aを表し、第2の複数のレジスタに格納された値は、単一の入力2次元行列Bを表し(および、例えば、第3の複数のレジスタに格納された値は、単一の入力2次元行列Cを表す)、第2のモードの場合、第1の複数のレジスタに格納された値は、複数の入力2次元行列A及びA´を表し、第2の複数のレジスタに格納された値は、複数の入力2次元行列B及びB´を表し(および、例えば、第3の複数のレジスタに格納された値は、複数の入力2次元行列C及びC´を表す)。
【0193】
示された行列演算アクセラレータ回路2400は、複数のルーティング回路2402-1~2402-4を含み、(例えば、行列A及びA´並びに行列B及びB´からの)入力値を、実行されるべき演算に従って処理エレメントへとルーティングする。
【0194】
本明細書の図は、全てのデータ通信結合(例えば接続)を示さなくてもよいことに注意されたい。当業者であれば、これが図中の特定の詳細を曖昧にしないためであることを理解する。図中の双方向矢印は、双方向通信を必要としなくてもよく、例えば、一方向通信を示してよい(例えば、そのコンポーネントまたはデバイスへの/からの)ことに注意されたい。通信経路のいずれ又は全ての組み合わせが、本明細書の特定の実施形態において用いられてよい。単一ラインが、内部に複数経路、例えば、複数のチャネルを含んでよい。例えば、ライン2410は、複数経路(例えば、X個、Xは任意の正の整数)、例えば、行列Aからの値に対する1つの経路と、行列Bからの値に対する1つの経路とを含んでよい。
【0195】
(例えば、その演算を引き起こすための命令を復号し実行することにより)演算の実行要求があると、特定の実施形態では、行列演算アクセラレータ回路2400は、タイルAおよびタイルBからの値を、各ルーティング回路へ送信する。例えば、演算は、第1のモードの場合、タイルAからの行列AにタイルBからの行列Bを乗算し、次に、タイルCからの行列Cに対応する値へ各結果を加算することであってよく、第2のモードの場合、タイルAからの行列AにタイルBからの行列Bを乗算し、次に、タイルCからの行列Cに対応する値へ各結果を加算し、そして、タイルAからの行列A´にタイルBからの行列B´を乗算し、次に、タイルCからの行列C´に対応する値へ各結果を加算することであってよい。
【0196】
一実施形態において、第1ルーティング回路2404-1は、第1値A[0][0]を行列A[行][列]から受信し(行インデックス0および列インデックス0からの値)、その値を、それぞれの処理エレメント2406-1へ、処理エレメント2406-1のそれぞれの第1入力および行列Bの第1行からの複数値のセットへの行へとブロードキャストし、それらの複数の値を、処理エレメント2406-1のそれぞれ(例えば、これにより、処理エレメント2412がB[0][0]からの値を受信し、処理エレメント2414がB[0][1]からの値を受信する等)の各第2入力へ送信する。一実施形態において、処理エレメント2412は、その出力2416に、A[0][0]*B[0][0]の乗算の結果を提供し、処理エレメント2414は、その出力2418に、A[0][0]*B[0][1]の乗算の結果を提供する。複数の出力(例えば、出力2416および2418)が、ルーティング回路2 2404-2へ送信される。
【0197】
一実施形態において、第2ルーティング回路2404-2は、第2の値A[0][1]を行列A[行][列]から受信し(行インデックス0および列インデックス1からの値)、その値を、それぞれの処理エレメント2406-2へ、処理エレメント2406-2のそれぞれの第1入力および行列Bの第2行からの複数値のセットへの行へとブロードキャストし、それらの複数の値を、処理エレメント2406-1(例えば、これにより、処理エレメント2422がB[1][0]からの値を受信し、処理エレメント2424がB[1][1]からの値を受信する等)の各第2入力および処理エレメント2406-1の上記行の複数の出力からの各出力へ送信する。一実施形態において、処理エレメント2422は、その出力2426に、出力2416(A[0][0]*B[0][0])へ加算したA[0][1]*B[1][0]の乗算の結果を提供し、処理エレメント2424は、その出力2428に、出力2418(A[0][0]*B[0][1])へ加算したA[0][1]*B[1][1]の乗算の結果を提供する。特定の実施形態において、この融合乗算加算演算は、処理エレメント2406-3~処理エレメント2406-4の各行によって継続され、処理エレメント2406-4からの出力2430および出力2432を生成する。
図21の行列演算アクセラレータ回路2100と比較すると、
図24の行列演算アクセラレータ回路2400は、設定スイッチを有するルーティング回路2438を含む。設定スイッチ2438は、
図25の設定スイッチ2500の複数インスタンス(例えば並列)であってよい。
【0198】
特定の実施形態において、第1のモードでは、設定スイッチ2438は、処理エレメント2406-5の第5行の結果へと加算されるべく、処理エレメント2406-4の第4行からの結果(例えば、出力2430及び出力2432)を、処理エレメント2406-5の次の行に渡す(例えば、PE2454への入力としての出力2430及びPE2456への入力としての出力2432)。 処理エレメント2406-5について示される5行に対して、設定スイッチを有するルーティング回路2438は、第1のモードにおいて、入力2442についての値A[0][4]を行列A[行][列]から受信し(行インデックス0および列インデックス4からの値)、その値を、それぞれの処理エレメント2406-5へ、処理エレメント2406-5のそれぞれの第1入力および行列Bの第4行からの入力2444に対する複数値のセットへの行へとブロードキャストし、それらの複数の値を、処理エレメント2406-5(例えば、これにより、処理エレメント2454の入力2450がB[4][0]からの値を受信し、処理エレメント2456の入力2452がB[4][1]からの値を受信する等)の各第2入力へ送信する。第1のモードの一実施形態において、処理エレメント2454は、その出力2458に、乗算A[0][0]*B[0][0]+A[0][1]*B[1][0]+A[0][2]*B[2][0]+A[0][3]*B[3][0]+A[0][4]*B[4][0]の結果を提供し、処理エレメント2456は、その出力2460に、乗算A[0][0]*B[0][1]+A[0][1]*B[1][1]+A[0][2]*B[2][1]+A[0][3]*B[3][1]+A[0][4]*B[4][1]の結果を提供する。行列演算アクセラレータ回路2400に対する処理エレメントの行の終わりに達すると、バイアス加算回路2462は、入力2434(例えば、並列入力ポート)の行列Cからの各要素(例えば、行列Cの第1行からの各要素)を加算し、出力2436(例えば、並列出力ポートのセット)を経由して結果を行列Cの各要素(例えば、行列Cの第1行の各要素位置)に格納する。例えば、行列Cの第1行からの第1要素は出力2458からの結果へ加算され、その結果は行列Cの第1行の第1要素位置へ戻して格納され、行列Cの第1行からの第2要素は出力2460からの結果へ加算され、その結果は行列Cの第1行の第2要素位置へ戻して格納される。これが行列Aの各行に対して反復され、行列A*行列Bの全体の乗算を生成する(そして、例えば、行列Cからのバイアスを各結果に加算する)。従って、第1のモードにおける特定の実施形態において、(例えば、行列演算アクセラレータ回路のレジスタの適切なサブセットであるタイルと共に)各タイル内の単一の行列に演算を行う場合に、バイアス加算回路2440は用いられない。
【0199】
第2のモードでの特定の実施形態において(例えば、タイルAが行列Aおよび行列A´を含み、タイルBが行列Bおよび行列B´を含み、タイルCが行列Cおよび行列C´を含む)、設定スイッチ2438は、処理エレメント2406-5の第5行の結果へと加算されるべく、処理エレメント2406-4の第4行からの結果(例えば、出力2430および出力2432)を、処理エレメント2406-5の次の行には渡さない(例えば、出力2430はPE2454への入力ではなく、出力2432はPE2456への入力ではない)。第2のモードでは(例えば、行列Aが4列幅であるような例において)、設定スイッチを有するルーティング回路2438は、処理エレメント2406-4の第4行からの結果値(例えば、出力2430と出力2432)をバイアス加算回路2440へ送信する。
【0200】
第2のモードの特定の実施形態において第4行2406-4からの第1の処理エレメントは、その出力2430に、乗算A[0][0]*B[0][0]+A[0][1]*B[1][0]+A[0][2]*B[2][0]+A[0][3]*B[3][0]の結果を提供し、第4行2406-4からの第2の処理エレメント2456は、その出力2432に、乗算A[0][0]*B[0][1]+A[0][1]*B[1][1]+A[0][2]*B[2][1]+A[0][3]*B[3][1]の結果を提供する。複数の行列(例えば、行列A、B、及びC)の第1のサブセットの行の終わりに達すると、バイアス加算回路2440は、入力2446(例えば、並列入力ポート)の行列Cからの各要素(例えば、行列Cの第1行からの各要素)を加算し、出力2448(例えば、並列出力ポートのセット)を経由して結果を行列Cの各要素(例えば、行列Cの第1行の各要素位置)に格納する。例えば、行列Cの第1行からの第1要素は出力2430からの結果へ加算され、その結果は行列Cの第1行の第1要素位置へ戻して格納され、行列Cの第1行からの第2要素は出力2432からの結果へ加算され、その結果は行列Cの第1行の第2要素位置へ戻して格納される。
【0201】
第2のモードの特定の実施形態において、設定スイッチを有するルーティング回路2438は、第2のモードにおいて、行列A´[行][列](第2行列A´の値が、行インデックス0および列インデックス0)からの入力2442において、行列A´から値A´[0][0]を受信し(行列AからA[0][4]は受信せず)、その値を、それぞれの処理エレメント2406-5へ、処理エレメント2406-5のそれぞれの第1入力および行列B´の第1行(行列Bの第4行ではない)からの入力2444における複数値のセットへの行へとブロードキャストし、これらの複数の値を、処理エレメント2406-5の各第2入力へ送信する(例えば、これにより、処理エレメント2454の入力2450がB´[0][0]からの値を受信し、処理エレメント2456の入力2452が、B´[0][1]からの値を受信する等)が、出力2430はPE2454への入力ではなく、出力2432はPE2456への入力ではない。
【0202】
第2のモードの特定の実施形態において、処理エレメント2454は、その出力2458、A´[0][0]*B´[0][0]の乗算の結果を提供し、処理エレメント2456は、その出力2460に、A´[0][0]*B´[0][1]の乗算の結果を提供する。行列演算アクセラレータ回路2400に対する処理エレメントの行の終わりに達すると、バイアス加算回路2462は、入力2434(例えば、並列入力ポート)の行列C´(行列Cではない)からの各要素(例えば、行列Cの第1行からの各要素)を加算し、出力2436(例えば、並列出力ポートのセット)を経由して結果を行列C´の各要素(例えば、行列C´の第1行の各要素位置)に格納する。例えば、行列C´の第1行からの第1要素は出力2458からの結果へ加算され、その結果は行列C´の第1行の第1要素位置へ戻して格納され、行列C´の第1行からの第2要素は出力2460からの結果へ加算され、その結果は行列Cの第1行の第2要素位置へ戻して格納される。これが(i)行列Aの各行に対して反復され、行列A*行列Bの全体の乗算を生成し(そして、例えば、行列Cからのバイアスを各結果に加算する)、そして(ii)行列A´の各行に対して反復され、行列A´*行列B´の全体の乗算を生成する(そして、例えば、行列C´からのバイアスを各結果に加算する)。第2のモードにおける特定の実施形態において、(例えば、行列演算アクセラレータ回路のレジスタの適切なサブセットであるタイルと共に)各タイル内の複数の行列に演算を行う場合には、バイアス加算回路2440が用いられる。なお、5は、処理エレメント(及び、例えば、処理対象である各行列A、B、及びCの行及び列の最大数)の例示的行数であって、任意の複数の行であり得ることに注意されたい。
【0203】
図25は、設定スイッチ2500の実施形態を示す。示される回路2502は、設定スイッチ2500およびバイアス加算回路2504を含む。示される設定スイッチ2500は、第1の処理エレメント2506(例えば上流)および第2の処理エレメント2508(例えば下流)の間で結合される。例えば、第1の処理エレメント2506は、
図24の処理エレメント2430であってよく、第2の処理エレメントは
図24の処理エレメント2454であってよい。
【0204】
示される実施形態において、第1の処理エレメント2506は、前のPE(例えば、前の行のPE)からデータを供給する(例えば結果)第1入力2516、タイルA(例えば、内部に格納されている行列Aおよび/または行列A´)からデータを供給する第2入力2510、および、タイルB(例えば、内部に格納されている行列Bおよび/または行列B´)からデータを供給する第3入力2512を含む。一実施形態において、第1の処理エレメント2506は、第2入力2510から供給されたタイルAからの要素を、第3入力2512から供給されたタイルBからの要素と乗算して、中間結果を生成し、次に、その中間結果を第1入力2516からのデータ要素に加算して、結果を生成する。一実施形態において、その結果が、次に、設定スイッチ2500、例えば、デマルチプレクサ2520の入力ポートに渡される。
【0205】
特定の実施形態において、第1の制御値(例えば0)が設定スイッチ入力2526に送信されると、(i)第1の処理エレメント2506からの結果が、デマルチプレクサ2520の入力ポートからパス2528へ結合された出力ポート、そしてマルチプレクサ2522の第1の入力ポートへと導かれ、(ii)その結果は、マルチプレクサ2522の出力ポートから、第2の処理エレメント2508の第1の入力ポート2532へと送信される。示される実施形態において、第2の処理エレメントは、前のPE2506(例えば第1のモードにおいて)からのデータ(例えば結果)、またはソース2524からの0(例えば第2のモードにおいて)を供給する第1入力2532、タイルA(例えば、内部に格納されている行列Aおよび/または行列A´)からデータを供給する第2入力2510、および、タイルB(例えば、内部に格納されている行列Bおよび/または行列B´)からデータを供給する第3入力データ2512、を含む。一実施形態において、第2の処理エレメント2508は、第2入力2510から供給されたタイルAからの要素を、第3入力2512から供給されたタイルBからの要素と乗算して、中間結果を生成し、次に、その中間結果を第1入力2532から供給されたPE2506からの結果に加算して、結果を生成する。一実施形態において、その結果は、次に、出力2518を介して下流、例えば、別の処理エレメントの入力ポートに渡される。
【0206】
特定の実施形態において、第2の制御値(例えば1)が設定スイッチ入力2526に送信されると、(i)第1の処理エレメント2506からの結果が、デマルチプレクサ2520の入力ポートからパス2530へ結合された出力ポート、そしてバイアス加算回路2504へと導かれ、(ii)ソース2524からの0は、マルチプレクサ2522の出力ポートから、第2の処理エレメント2508の第1の入力ポート2532へと送信される。示される実施形態において、第2の処理エレメントは、前のPE2506(例えば第1のモードにおいて)からのデータ(例えば結果)、またはソース2524からの0(例えば第2のモードにおいて)を供給する第1入力2532、タイルA(例えば、内部に格納されている行列Aおよび/または行列A´)からデータを供給する第2入力2510、および、タイルB(例えば、内部に格納されている行列Bおよび/または行列B´)からデータを供給する第3入力データ2512、を含む。一実施形態において、第2の処理エレメント2508は、第2入力2510から供給されたタイルAからの要素を、第3入力2512から供給されたタイルBからの要素と乗算して、中間結果を生成し、次に、その中間結果を、第1入力2532から供給されたソース2524からの0に加算して、結果を生成する(例えば、ドット積チェーンは、行列Aに代えて新たしい行列A´に対してブレークされる)。一実施形態において、その結果は、次に、出力2518を介して下流、例えば、別の処理エレメントの入力ポートに渡される。一実施形態において、バイアス加算回路2504は、ポート2514からの各要素をタイルCへ供給し各要素をパス2530からの結果に加算し、更新された結果を、ポート2514を介してタイルCの各要素位置へ戻して格納する。特定の実施形態において、回路2502のそれぞれのインスタンスは、本明細書に記載されるように複数のモードをサポートする上流および下流のPEのそれぞれのペアの間で提供される。
【0207】
図26は、複数のモードの間をスイッチする設定スイッチ2606-1~2606-7の複数の行を含む処理エレメントの2次元グリッドを備える、行列演算アクセラレータ回路2602の実施形態を示す。特定の実施形態において、各回路ブロック2604-1~2604-8は、
図25の回路ブロック2470の実例(インスタンス)である。示される実施形態において、回路ブロック2604-1~2604-7は、設定スイッチを有するルーティング回路2606-1~2606-7(例えば、
図24を参照して記載されたように)のそれぞれのインスタンスに結合され、それらは次に、バイアス加算回路(例えば、
図24を参照して記載されたように)のそれぞれのインスタンスに結合され、回路ブロック2604-8は、バイアス加算回路2608-8に結合される。
図26は、設定スイッチの複数の適切なサブセット(例えば行)が制御のために含まれてよいことを示しており、第1のモードでは、結果データは、行列演算アクセラレータ回路2602を通じたパイプライン処理を続け、異なるモードでは、結果データは、データのパイプライン処理を停止するように処理エレメントから導かれ、例えば、その結果データを、バイアス加算回路のそれぞれのインスタンスへ導き、その結果データと共にタイルCでのそれぞれの値を更新する。
【0208】
モード選択の(複数の)制御値は、復号および実行命令(例えば、本明細書に記載された部分的等ドット積命令)によって提供されてよい。一実施形態において、命令は、設定スイッチに対する制御を明示的にエンコードするための即値を含む。即値(例えば、設定パラメータ)は、符号化値であり、以下の表は、設定スイッチのそれぞれのセット(例えば行)、例えば、設定スイッチの7つの行を有するアレイに対して、どのようにして復号され、オンまたはオフするようにプログラムされるかを示してよい。アプリケーションが同じアレイに対して複数の設定スイッチをオンすることを望む場合には、異なるエンコードが用いられてよい。命令は、出力タイルの数または出力タイルのサイズを運ぶ場合があり、あるいは、ハードウェアは、オンされた設定スイッチの数からこれを推測してよい。
表:設定値の例(表1-2は、表1-1の続き)
【表1-1】
【表1-2】
【0209】
上記で用いられてよい例示的アーキテクチャ、システム等が以下で詳述される。
【0210】
開示される技術の少なくともいくつかの実施形態は、以下の例を考慮して説明される。
例1 融合積和回路の2次元グリッドを有する行列演算アクセラレータ回路と、
上記行列演算アクセラレータ回路に結合される少なくとも1つの第1入力2次元行列を表す第1の複数のレジスタと、
上記行列演算アクセラレータ回路に結合される少なくとも1つの第2入力2次元行列を表す第2の複数のレジスタと、
上記行列演算アクセラレータ回路に結合されるコアの復号器であって、単一の命令を、復号された単一の命令へと復号し、上記単一の命令が結果として得られるストレージを識別するフィールドを有する、復号器と、
上記復号された単一の命令を実行する上記コアの実行回路と
を備え、
上記コアの実行回路が、上記行列演算アクセラレータ回路を、上記2次元グリッドの融合積和回路の第1の適切なサブセットのそれぞれについての各出力が下流の上記2次元グリッドの融合積和回路の第2の適切なサブセットのそれぞれについての各入力へと送信されると、上記少なくとも1つの第1入力2次元行列及び上記少なくとも1つの第2入力2次元行列からの出力値を形成し、かつ上記結果として得られるストレージに上記出力値を格納する第1のモードから、上記2次元グリッドの融合積和回路の上記第1の適切なサブセットのそれぞれについての上記各出力が、上記少なくとも1つの第1入力2次元行列及び上記少なくとも1つの第2入力2次元行列の第1のサブセットからの第1の出力値を形成し、かつ上記結果として得られるストレージに上記第1の出力値を格納し、上記2次元グリッドの融合積和回路の上記第2の適切なサブセットのそれぞれについての各出力が、上記少なくとも1つの第1入力2次元行列及び上記少なくとも1つの第2入力2次元行列の第2のサブセットからの第2の出力値を形成し、かつ上記結果として得られるストレージに上記第2の出力値を格納する第2のモードへとスイッチする、装置。
2.上記行列演算アクセラレータ回路が、上記第2のフィールドが第1の値である場合には上記第1のモードで実行し、上記第2のフィールドが第2の値である場合には上記第2のモードで実行することを示す第2のフィールドを、上記単一の命令が有する、例1に記載の装置。
3.上記第2のフィールドは、上記単一の命令の即値である、例2に記載の装置。
4.上記結果として得られるストレージが、上記復号された単一の命令を実行することで形成される少なくとも1つの出力2次元行列を表す第3の複数のレジスタである、例1に記載の装置。
5.上記復号された単一の命令を実行することが、
上記第1のモードでは、上記第3の複数のレジスタに最初に格納される少なくとも1つの第3入力2次元行列を表す上記第3の複数のレジスタからの値を上記出力値に加算して、更新された出力値を形成し、上記更新された出力値を上記出力値に代えて、上記結果として得られるストレージに格納することであり、
上記第2のモードでは、上記第3の複数のレジスタに最初に格納される上記少なくとも1つの第3入力2次元行列からの値を上記第1の出力値及び上記第2の出力値に加算して、更新された第1の出力値及び更新された第2の出力値を形成し、上記更新された第1の出力値及び上記更新された第2の出力値を、上記第1の出力値及び上記第2の出力値に代えて、上記結果として得られるストレージに格納することである、例4に記載の装置。
6.上記復号された単一の命令を実行することが、
上記第1のモードでは、第3の複数のレジスタに最初に格納される少なくとも1つの第3入力2次元行列からの値を上記出力値に加算して、更新された出力値を形成し、上記更新された出力値を上記出力値に代えて、上記結果として得られるストレージに格納することであり、
上記第2のモードでは、上記第3の複数のレジスタに最初に格納される上記少なくとも1つの第3入力2次元行列からの値を上記第1の出力値及び上記第2の出力値に加算して、更新された第1の出力値及び更新された第2の出力値を形成し、上記更新された第1の出力値及び上記更新された第2の出力値を、上記第1の出力値及び上記第2の出力値に代えて、上記結果として得られるストレージに格納することである、例1に記載の装置。
7.上記結果として得られるストレージは、上記復号された単一の命令を実行することで形成される複数の出力2次元行列を表す第3の複数のレジスタである、例1に記載の装置。
8.上記融合積和回路の第1の適切なサブセットは、上記融合積和回路の2次元グリッドにおける行または列の1つであり、
上記融合積和回路の第2の適切なサブセットは、上記融合積和回路の2次元グリッドにおける上記行または上記列の他方の上記1つである、例1に記載の装置。
例9 プロセッサコアの復号器で単一の命令を復号された単一の命令に復号する段階であって、上記プロセッサコアが融合積和回路の2次元グリッドを有する行列演算アクセラレータ回路に結合され、上記行列演算アクセラレータ回路が少なくとも1つの第1入力2次元行列を表す第1の複数のレジスタ及び少なくとも1つの第2入力2次元行列を表す第2の複数のレジスタに結合され、上記単一の命令が結果として得られるストレージを識別するフィールドを有する、段階と、
上記復号された単一の命令を上記プロセッサコアの実行回路で実行する段階と
を備え、
上記実行する段階が、上記行列演算アクセラレータ回路を、上記2次元グリッドの融合積和回路の第1の適切なサブセットのそれぞれについての各出力が下流の上記2次元グリッドの融合積和回路の第2の適切なサブセットのそれぞれについての各入力へと送信されると、上記少なくとも1つの第1入力2次元行列及び上記少なくとも1つの第2入力2次元行列からの出力値を形成し、かつ上記結果として得られるストレージに上記出力値を格納する第1のモードから、上記2次元グリッドの融合積和回路の上記第1の適切なサブセットのそれぞれについての上記各出力が、上記少なくとも1つの第1入力2次元行列及び上記少なくとも1つの第2入力2次元行列の第1のサブセットからの第1の出力値を形成し、かつ上記結果として得られるストレージに上記第1の出力値を格納し、上記2次元グリッドの融合積和回路の上記第2の適切なサブセットのそれぞれについての各出力が、上記少なくとも1つの第1入力2次元行列及び上記少なくとも1つの第2入力2次元行列の第2のサブセットからの第2の出力値を形成し、かつ上記結果として得られるストレージに上記第2の出力値を格納する第2のモードへとスイッチする、方法。
10.上記行列演算アクセラレータ回路が、上記第2のフィールドが第1の値である場合には上記第1のモードで実行し、上記第2のフィールドが第2の値である場合には上記第2のモードで実行することを示す第2のフィールドを、上記単一の命令が有する、例9に記載の方法。
11.上記第2のフィールドは、上記単一の命令の即値である、例10に記載の方法。
12.上記結果として得られるストレージが、上記復号された単一の命令を実行することで形成される少なくとも1つの出力2次元行列を表す第3の複数のレジスタである、例9に記載の方法。
13.上記復号された単一の命令を実行する段階が、
上記第1のモードでは、上記第3の複数のレジスタに最初に格納される少なくとも1つの第3入力2次元行列を表す上記第3の複数のレジスタからの値を上記出力値に加算して、更新された出力値を形成し、上記更新された出力値を上記出力値に代えて、上記結果として得られるストレージに格納することであり、
上記第2のモードでは、上記第3の複数のレジスタに最初に格納される上記少なくとも1つの第3入力2次元行列からの値を上記第1の出力値及び上記第2の出力値に加算して、更新された第1の出力値及び更新された第2の出力値を形成し、上記更新された第1の出力値及び上記更新された第2の出力値を、上記第1の出力値及び上記第2の出力値に代えて、上記結果として得られるストレージに格納することである、例12に記載の方法。
14.上記復号された単一の命令を実行する段階が、
上記第1のモードでは、第3の複数のレジスタに最初に格納される少なくとも1つの第3入力2次元行列からの値を上記出力値に加算して、更新された出力値を形成し、上記更新された出力値を上記出力値に代えて、上記結果として得られるストレージに格納することであり、
上記第2のモードでは、上記第3の複数のレジスタに最初に格納される上記少なくとも1つの第3入力2次元行列からの値を上記第1の出力値及び上記第2の出力値に加算して、更新された第1の出力値及び更新された第2の出力値を形成し、上記更新された第1の出力値及び上記更新された第2の出力値を、上記第1の出力値及び上記第2の出力値に代えて、上記結果として得られるストレージに格納することである、例9に記載の方法。
15.上記結果として得られるストレージは、上記復号された単一の命令を実行することで形成される複数の出力2次元行列を表す第3の複数のレジスタである、例9に記載の方法。
16.上記融合積和回路の第1の適切なサブセットは、上記融合積和回路の2次元グリッドにおける行または列の1つであり、
上記融合積和回路の第2の適切なサブセットは、上記融合積和回路の2次元グリッドにおける上記行または上記列の他方の上記1つである、例9に記載の方法。
例17 コードを格納する非一時的機械読み出し可能媒体であって、機械に実行された場合に上記機械に方法を実行させ、上記方法が、
プロセッサコアの復号器で単一の命令を復号された単一の命令に復号する段階であって、上記プロセッサコアが融合積和回路の2次元グリッドを有する行列演算アクセラレータ回路に結合され、上記行列演算アクセラレータ回路が少なくとも1つの第1入力2次元行列を表す第1の複数のレジスタ及び少なくとも1つの第2入力2次元行列を表す第2の複数のレジスタに結合され、上記単一の命令が結果として得られるストレージを識別するフィールドを有する、段階と、
上記復号された単一の命令を上記プロセッサコアの実行回路で実行する段階と
を備え、
上記実行する段階が、上記行列演算アクセラレータ回路を、上記2次元グリッドの融合積和回路の第1の適切なサブセットのそれぞれについての各出力が下流の上記2次元グリッドの融合積和回路の第2の適切なサブセットのそれぞれについての各入力へと送信されると、上記少なくとも1つの第1入力2次元行列及び上記少なくとも1つの第2入力2次元行列からの出力値を形成し、かつ上記結果として得られるストレージに上記出力値を格納する第1のモードから、上記2次元グリッドの融合積和回路の上記第1の適切なサブセットのそれぞれについての上記各出力が、上記少なくとも1つの第1入力2次元行列及び上記少なくとも1つの第2入力2次元行列の第1のサブセットからの第1の出力値を形成し、かつ上記結果として得られるストレージに上記第1の出力値を格納し、上記2次元グリッドの融合積和回路の上記第2の適切なサブセットのそれぞれについての各出力が、上記少なくとも1つの第1入力2次元行列及び上記少なくとも1つの第2入力2次元行列の第2のサブセットからの第2の出力値を形成し、かつ上記結果として得られるストレージに上記第2の出力値を格納する第2のモードへとスイッチする、非一時的機械読み出し可能媒体。
18.上記行列演算アクセラレータ回路が、上記第2のフィールドが第1の値である場合には上記第1のモードで実行し、上記第2のフィールドが第2の値である場合には上記第2のモードで実行することを示す第2のフィールドを、上記単一の命令が有する、例17に記載の非一時的機械読み出し可能媒体。
19.上記第2のフィールドは、上記単一の命令の即値である、例18に記載の非一時的機械読み出し可能媒体。
20.上記結果として得られるストレージが、上記復号された単一の命令を実行することで形成される少なくとも1つの出力2次元行列を表す第3の複数のレジスタである、例17に記載の非一時的機械読み出し可能媒体。
21.上記復号された単一の命令を実行する段階が、
上記第1のモードでは、上記第3の複数のレジスタに最初に格納される少なくとも1つの第3入力2次元行列を表す上記第3の複数のレジスタからの値を上記出力値に加算して、更新された出力値を形成し、上記更新された出力値を上記出力値に代えて、上記結果として得られるストレージに格納することであり、
上記第2のモードでは、上記第3の複数のレジスタに最初に格納される上記少なくとも1つの第3入力2次元行列からの値を上記第1の出力値及び上記第2の出力値に加算して、更新された第1の出力値及び更新された第2の出力値を形成し、上記更新された第1の出力値及び上記更新された第2の出力値を、上記第1の出力値及び上記第2の出力値に代えて、上記結果として得られるストレージに格納することである、例20に記載の非一時的機械読み出し可能媒体。
22.上記復号された単一の命令を実行する段階が、
上記第1のモードでは、第3の複数のレジスタに最初に格納される少なくとも1つの第3入力2次元行列からの値を上記出力値に加算して、更新された出力値を形成し、上記更新された出力値を上記出力値に代えて、上記結果として得られるストレージに格納することであり、
上記第2のモードでは、上記第3の複数のレジスタに最初に格納される上記少なくとも1つの第3入力2次元行列からの値を上記第1の出力値及び上記第2の出力値に加算して、更新された第1の出力値及び更新された第2の出力値を形成し、上記更新された第1の出力値及び上記更新された第2の出力値を、上記第1の出力値及び上記第2の出力値に代えて、上記結果として得られるストレージに格納することである、例17に記載の非一時的機械読み出し可能媒体。
23.上記結果として得られるストレージは、上記復号された単一の命令を実行することで形成される複数の出力2次元行列を表す第3の複数のレジスタである、例17に記載の非一時的機械読み出し可能媒体。
24.上記融合積和回路の第1の適切なサブセットは、上記融合積和回路の2次元グリッドにおける行または列の1つであり、
上記融合積和回路の第2の適切なサブセットは、上記融合積和回路の2次元グリッドにおける上記行または上記列の他方の上記1つである、例17に記載の非一時的機械読み出し可能媒体。
【0211】
さらに他の実施形態において、装置は、ハードウェアプロセッサにより実行された場合に、ハードウェアプロセッサに、本明細書に開示される任意の方法を実行させるコードを格納するデータストレージデバイスを備える。装置は、詳細な説明で説明された通りであってよい。方法は、詳細な説明で説明された通りであってよい。
詳細な例示的システム、プロセッサ及びエミュレーション
【0212】
上述の命令を実行するためのハードウェア、ソフトウェア等の例が、本明細書で詳述される。例えば、後述されるのは、例えば、フェッチ、復号、スケジューリング、実行、リタイア等の様々なパイプライン段階を含む命令実行の態様としての詳細である。
命令セット
【0213】
命令セットは、1または複数の命令の形式を含んでよい。所与の命令形式(フォーマット)は、とりわけ、実行対象の演算(例えばオペコード)および当該演算が行われる対象となるオペランド、および/または他のデータフィールド(例えばマスク)を指定する様々なフィールド(例えばビットの数、ビットの位置)を定義してよい。いくつかの命令形式は、命令テンプレート(またはサブフォーマット)の定義付けによってさらに細分化される。例えば、所与の命令形式の命令テンプレートは、当該命令形式のフィールドの種々のサブセットを有するものとして定義されてよく(含まれるフィールドは通常同じ順序であるが、少なくともいくつかは、含まれるフィールドの数がより少ないために異なるビット位置を有する)、および/または、異なって解釈される所与のフィールドを有するものとして定義されてよい。よって、ISAの各命令は、所与の命令形式を使用して(また、定義されている場合には、当該命令形式の命令テンプレートのうちの1つにおいて)表現され、演算およびオペランドを指定するためのフィールドを含む。例えば、例示的ADD命令は、特定のオペコードと、当該オペコードを指定するためのオペコードフィールドおよびオペランド(ソース1/宛先およびソース2)を選択するためのオペランドフィールドを含む命令形式とを有する。命令ストリーム内でのこのADD命令の発生は、特定のオペランドを選択するオペランドフィールド内に特定の内容を有することになる。次世代ベクトル拡張(AVX)(AVX1及びAVX2)と称され、ベクトル拡張(VEX)符号化スキームを用いるSIMD拡張のセットが、リリース及び/又は公開されている(例えば、2018年11月発行のインテル(登録商標)64及びIA-32アーキテクチャソフトウェアデベロッパーズマニュアル及び2018年10月発行のインテル(登録商標)アーキテクチャ命令セット拡張プログラミングリファレンスを参照)。
例示的命令形式
【0214】
本明細書に説明される命令の実施形態は、異なる形式で具現化されてよい。加えて、例示的システム、アーキテクチャ、およびパイプラインが以下に詳述される。命令の実施形態は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行されてもよいが、詳述されたものに限定されるものではない。
汎用ベクトル向け命令フォーマット
【0215】
ベクトル向け命令形式は、ベクトル命令に適した命令形式である(例えば、ベクトル演算に固有の特定のフィールドがある)。ベクトル及びスカラ演算の両方がベクトル向け命令形式を通じてサポートされる実施形態が説明されるが、代替的な実施形態は、ベクトル向け命令形式を通じてサポートされるベクトル演算のみを使用する。
【0216】
図27A-
図27Bは、本開示の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びこれらの命令テンプレートを示すブロック図である。
図27Aは、本開示の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びそのクラスA命令テンプレートを示すブロック図であり、
図27Bは、本開示の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びそのクラスB命令テンプレートを示すブロック図である。具体的には、クラスA及びクラスB命令テンプレート用の汎用ベクトル向け命令フォーマット2700が定義され、その両方は非メモリアクセス2705命令テンプレートおよびメモリアクセス2720命令テンプレートを含む。ベクトル向け命令形式との関連で汎用という用語は、特定の命令セットに結び付けられていない命令形式を指す。
【0217】
本開示の実施形態では、ベクトル向け命令形式が、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バイトのベクトルオペランド)をサポートしてよい。
【0218】
図27AのクラスA命令テンプレートは、以下を含む。1)非メモリアクセス2705命令テンプレートには、非メモリアクセス、フルラウンド制御タイプオペレーション2710命令テンプレートおよび非メモリアクセス、データ変換タイプオペレーション2715命令テンプレートが示されており、2)メモリアクセス2720命令テンプレート内には、メモリアクセス、一時的2725命令テンプレートおよびメモリアクセス、非一時的2730命令テンプレートが示されている。
図27BのクラスB命令テンプレートは、以下を含む。1)非メモリアクセス2705命令テンプレート内には、非メモリアクセス、書き込みマスク制御、部分ラウンド制御タイプオペレーション2712命令テンプレートおよび非メモリアクセス、書き込みマスク制御、vsizeタイプオペレーション2717命令テンプレートが示されており、2)メモリアクセス2720命令テンプレート内には、メモリアクセス、書き込みマスク制御2727命令テンプレートが示されている。
【0219】
汎用ベクトル向け命令フォーマット2700は、
図27A-
図27Bに示される順序で下記に列挙される以下のフィールドを含む。
【0220】
フォーマットフィールド2740-このフィールド内の特定値(命令形式識別子の値)は、ベクトル向け命令形式、したがって命令ストリーム内のベクトル向け命令形式内の命令の出現を一意に識別する。このように、このフィールドは、汎用ベクトル向け命令フォーマットのみを有する命令セットに必要とされないという意味で任意である。
【0221】
基本オペレーションフィールド2742:その内容は、異なる基本演算を区別する。
【0222】
レジスタインデックスフィールド2744-その内容は、直接またはアドレス生成を通じて、ソースオペランド及びデスティネーションオペランドの位置を、それらがレジスタ内またはメモリ内にあることを指定する。これらは、P×Q(例えば、32×512、16×128、32×1024、64×1024)のレジスタファイルからN個のレジスタを選択するのに十分なビットの数を含む。一実施形態において、Nは最大3つのソースおよび1つのデスティネーションレジスタであり得るが、代替的な実施形態は、より多くの又はより少ないソースおよびデスティネーションレジスタをサポートしてよく(例えば、最大2つのソースをサポートし、これらのソースのうちの1つがデスティネーションとしても動作してもよく、最大3つのソースをサポートして、これらのソースのうちの1つがデスティネーションとしても動作してもよく、最大2つのソースおよび1つのデスティネーションをサポートしてよい)。
【0223】
修飾子フィールド2746-その内容は、メモリアクセスを指定する汎用ベクトル命令形式の複数の命令の発生を、メモリアクセスを指定しない命令と区別する、すなわち、非メモリアクセス2705命令テンプレートとメモリアクセス2720命令テンプレートとの間を区別する。メモリアクセス演算は、(いくつかの場合、レジスタ内の値を使用してソースアドレスおよび/またはデスティネーションアドレスを指定する)メモリ階層に対して読み取りおよび/または書き込みを行い、非メモリアクセス演算は行わない(例えば、ソース及びデスティネーションはレジスタである)。一実施形態において、このフィールドはまた、メモリアドレス計算を実行する3つの異なる方法の中から選択するが、代替的な実施形態は、メモリアドレス計算を実行するより多い、より少ない、または異なる方法をサポートしてよい。
【0224】
拡張オペレーションフィールド2750-その内容は、基本演算に加えて、様々な異なる演算のうちのどの演算が実行されるべきかを区別する。このフィールドは、コンテキストに特有のものである。本開示の一実施形態において、このフィールドは、クラスフィールド2768、アルファフィールド2752及びベータフィールド2754に分割される。拡張オペレーションフィールド2750は、2、3または4個の命令ではなく、単一の命令の中で共通の演算グループが実行されることを可能にする。
【0225】
スケールフィールド2760-その内容は、メモリアドレス生成のためにインデックスフィールドの内容のスケーリングを可能にする(例えば、2[スケール]*[インデックス]+[基本]を使用するアドレス生成のため)。
【0226】
変位フィールド2762A-その内容は、メモリアドレス生成の一部として(例えば、2[スケール]*[インデックス]+[ベース]+[変位]を使用するアドレス生成用に)使用される。
【0227】
変位係数フィールド2762B(変位係数フィールド2762Bの真上の変位フィールド2762Aの並置は、一方または他方が使用されることを示すことに留意されたい)-その内容は、アドレス生成の一部として使用され、それは、メモリアクセスのサイズ(N)によってスケーリングされるべき変位係数を指定する-Nは、(例えば、2[スケール]*[インデックス]+[ベース]+[スケーリングされた変位]を使用するアドレス生成用の)メモリアクセスにおけるバイト数である。冗長下位ビットは無視されるため、実効アドレスの計算に用いられるべき最終変位を生成するために、変位係数フィールドの内容はメモリオペランドの合計サイズ(N)と乗算される。Nの値は、(本明細書において後述される)フルオペコードフィールド2774およびデータ操作フィールド2754Cに基づいて、実行時にプロセッサハードウェアによって決定される。変位フィールド2762Aおよび変位係数フィールド2762Bは、それらが非メモリアクセス2705命令テンプレートには用いられない、および/または、異なる実施形態がそれら2つのうちの一方のみを実装してよい、またはいずれも実装しなくてよいという意味で任意的である。
【0228】
データ要素幅フィールド2764-その内容は、(いくつかの実施形態においては、全ての命令に、他の実施形態ではいくつかの命令のみに)複数のデータ要素幅のうちのどのデータ要素幅が使用されるべきかを区別する。このフィールドは、1つのデータ要素幅のみがサポートされる場合、および/またはオペコードの何らかの態様を使用してデータ要素幅がサポートされる場合には必要とされないという意味で任意選択的である。
【0229】
書き込みマスクフィールド2770-その内容は、データ要素位置毎に、デスティネーションベクトルオペランド内のそのデータ要素位置が基本演算および拡張演算の結果を反映するか否かを制御する。クラスA命令テンプレートがマージング-書き込みマスキングをサポートする一方で、クラスB命令テンプレートはマージング-書き込みマスキングおよびゼロ書き込みマスクの両方をサポートする。マージする場合、ベクトルマスクは、(基本演算及び拡張演算により指定される)任意の演算の実行中に、デスティネーション内の任意の組の要素を更新されないように保護することを可能にするが、他の一実施形態では、対応するマスクビットが0を有する場合には、デスティネーションの各要素の古い値を保持する。対照的に、ゼロ書き込みする場合、ベクトルマスクは、(基本演算及び拡張演算により指定される)任意の演算の実行中に、デスティネーション内の任意の組の要素がゼロ書き込みされることを可能にするが、一実施形態において、対応するマスクビットが0値を有する場合、デスティネーションの要素が0に設定される。この機能のサブセットは、実行されている演算のベクトル長(すなわち、修正される要素の、最初の要素から最後の要素までの範囲)を制御する能力であるが、修正される要素が連続している必要はない。従って、書き込みマスクフィールド2770は、ロード、格納、算術、論理等を含む部分的なベクトル演算を可能にする。書き込みマスクフィールド2770の内容が用いられる書き込みマスクを含む多数の書き込みマスクレジスタのうちの1つを選択する(従って、書き込みマスクフィールド2770の内容は、実行対象のそのマスキングを間接的に識別する)本開示の複数の実施形態が説明される一方、代替的な実施形態では、代わりに又は追加的に、マスク書き込フィールド2770の内容が実行されるマスキングを直接指定することを可能にする。
【0230】
即値フィールド2772-その内容は即値の指定を可能にする。このフィールドは即値をサポートしない汎用ベクトル向け形式の実装には存在しない、および、このフィールドは即値を使用しない命令内には存在しないという意味において、このフィールドは、任意的なものである。
【0231】
クラスフィールド2768-その内容は、異なるクラスの命令の間で区別する。
図27A-
図27Bを参照すると、このフィールドの内容はクラスA及びクラスB命令の間の選択を行う。
図27A-
図27Bにおいて、角の丸い四角形を用いて、特定値がフィールド(例えば、
図27A-
図27Bにおける、クラスフィールド2768のそれぞれクラスA2768AおよびクラスB2768B)に存在することを示す。
命令テンプレートクラスA
【0232】
クラスAの非メモリアクセス2705命令テンプレートの場合、アルファフィールド2752はRSフィールド2752Aと解釈され、その内容は、異なる拡張オペレーションタイプのうちどれが実行されるべきかを区別し(例えば、ラウンド2752A.1およびデータ変換2752A.2が非メモリアクセス、ラウンドタイプオペレーション2710および非メモリアクセス、データ変換タイプオペレーション2715命令テンプレートに対してそれぞれ指定される)、その一方でベータフィールド2754は、指定される型の演算のどれが実行されるべきかを区別する。非メモリアクセス2705命令テンプレートには、スケールフィールド2760、変位フィールド2762A、および変位スケールフィールド2762Bは存在しない。
非メモリアクセス命令テンプレート-フルラウンド制御型オペレーション
【0233】
非メモリアクセス、フルラウンド制御タイプオペレーション2710命令テンプレートでは、ベータフィールド2754はラウンド制御フィールド2754Aと解釈され、その内容は静的な丸めを提供する。説明される本開示の複数の実施形態において、ラウンド制御フィールド2754Aは、全浮動小数点例外抑制(SAE)フィールド2756及びラウンドオペレーション制御フィールド2758を含み、代替的な実施形態では、これらの概念の両方を同じフィールドにエンコードすることをサポートしてよく、又は、これらの概念/フィールドの一方又は他方のみを有してよい(例えば、ラウンドオペレーション制御フィールド2758のみを有してよい)。
【0234】
SAEフィールド2756-その内容は、例外イベント報告を無効化すべきか否かを区別する。SAEフィールド2756の内容が、抑制が有効化されたことを示す場合、所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも発生させない。
【0235】
ラウンドオペレーション制御フィールド2758-その内容は、丸め演算のグループ(例えば、切り上げ、切り捨て、ゼロへの丸め、および最近接丸め)のうちのいずれの丸め演算を実行するべきかを区別する。故に、ラウンドオペレーション制御フィールド2758は、命令単位で、ラウンドモードの変更を可能にする。プロセッサが複数のラウンドモードを指定するための制御レジスタを含む本開示の一実施形態において、ラウンドオペレーション制御フィールド2750の内容は、当該レジスタ値にオーバライドする。
メモリアクセス命令テンプレート-データ変換型オペレーション
【0236】
非メモリアクセスデータ変換タイプオペレーション2715の命令テンプレートでは、ベータフィールド2754はデータ変換フィールド2754Bとし解釈され、その内容は、多数のデータ変換のいずれが実行されるべきかを区別する(例えば、データ変換なし、スウィズル、ブロードキャスト)。
【0237】
クラスAのメモリアクセス2720命令テンプレートの場合、アルファフィールド2752はエビクションヒントフィールド2752Bと解釈され、その内容は、エビクションヒントのうちいずれが使用されるべきかを区別し(
図27Aでは、メモリアクセス、一時的2725命令テンプレートおよびメモリアクセス、非一時的2730命令テンプレートのために一時的2752B.1および非一時的2752B.2がそれぞれ指定される)、その一方でベータフィールド2754はデータ操作フィールド2754Cと解釈され、その内容は、多数のデータ操作演算(プリミティブとしても知られる)のうちいずれが実行されるべきかを区別する(例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン)。メモリアクセス2720命令テンプレートは、スケールフィールド2760、および場合によっては、変位フィールド2762Aまたは変位スケールフィールド2762Bを含む。
【0238】
ベクトルメモリ命令は、変換サポートを使用して、メモリからのベクトルロードおよびメモリへのベクトルストアを実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、実際に転送される要素を書き込みマスクとして選択されたベクトルマスクの内容によって指示して、データ要素ごとにメモリとの間でデータを転送する。
メモリアクセス命令テンプレート-一時的
【0239】
一時的データは、キャッシュの恩恵を受けるのに十分なほど速やかに再使用される可能性が高いデータである。しかしながら、これは示唆であり、異なるプロセッサは、この示唆を完全に無視することを含め、それを異なる態様方法で実装してよい。
メモリアクセス命令テンプレート-非一時的
【0240】
非一時的データは、一次レベルキャッシュでのキャッシュの恩恵を受けるのに十分なほど速やかに再使用される可能性が低いデータであり、エビクションの優先権が与えられるべきである。しかしながら、これは示唆であり、異なるプロセッサは、この示唆を完全に無視することを含め、それを異なる態様方法で実装してよい。
クラスBの命令テンプレート
【0241】
クラスBの命令テンプレートの場合、アルファフィールド2752は書き込みマスク制御(Z)フィールド2752Cと解釈されるべきであり、その内容は、書き込みマスクフィールド2770によって制御された書き込みマスキングがマージングであるべきかゼロ書き込みであるべきか否かを区別する。
【0242】
クラスBの非メモリアクセス2705命令テンプレートの場合、ベータフィールド2754の一部はRLフィールド2757Aとして解釈されるべきであり、その内容は、異なる拡張オペレーションタイプのうちどれが実行されるべきかを区別し(例えば、ラウンド2757A.1およびベクトル長(VSIZE)2757A.2は、非メモリアクセス、書き込みマスク制御、部分ラウンド制御タイプオペレーション2712命令テンプレートおよび非メモリアクセス、書き込みマスク制御、VSIZEタイプオペレーション2717命令テンプレートに対してそれぞれ指定される)、その一方でベータフィールド2754の残りは、指定される型の演算のどれが実行されるべきかを区別する。非メモリアクセス2705命令テンプレートには、スケールフィールド2760、変位フィールド2762A、および変位スケールフィールド2762Bは存在しない。
【0243】
非メモリアクセス、書き込みマスク制御、部分ラウンド制御タイプオペレーション2710命令テンプレートでは、ベータフィールド2754の残りはラウンドオペレーションフィールド2759Aと解釈され、例外イベント報告は無効化される(所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも発生させない)。
【0244】
ラウンドオペレーション制御フィールド2759A-ラウンドオペレーション制御フィールド2758と同様に、その内容は、丸め演算グループのうちどれを実行すべきかを区別する(例えば、切り上げ、切り捨て、ゼロへの丸め、および最近接丸め)。従って、ラウンドオペレーション制御フィールド2759Aは、命令単位で、ラウンドモードの変更を可能にする。プロセッサが複数のラウンドモードを指定するための制御レジスタを含む本開示の一実施形態において、ラウンドオペレーション制御フィールド2750の内容は、当該レジスタ値にオーバライドする。
【0245】
非メモリアクセス・書き込みマスク制御・VSIZEタイプオペレーション2717命令テンプレートでは、ベータフィールド2754の残りはベクトル長フィールド2759Bと解釈され、その内容は、多数のデータベクトル長のいずれが実行されるべきかを区別する(例えば、128バイト、256バイト、又は512バイト)。
【0246】
クラスBのメモリアクセス2720命令テンプレートの場合、ベータフィールド2754の一部はブロードキャストフィールド2757Bと解釈され、その内容は、ブロードキャストタイプのデータ操作演算が実行されるべきか否かを区別し、ベータフィールド2754の残りはベクトル長フィールド2759Bとして解釈される。メモリアクセス2720命令テンプレートは、スケールフィールド2760、および場合によっては、変位フィールド2762Aまたは変位スケールフィールド2762Bを含む。
【0247】
汎用ベクトル向け命令フォーマット2700に関して、フォーマットフィールド2740、基本オペレーションフィールド2742、およびデータ要素幅フィールド2764を含むフルオペコードフィールド2774が示されている。一実施形態は、フルオペコードフィールド2774がこれらのフィールドのうち全てを含むように示されているものの、これらのフィールドの全てをサポートしない実施形態においては、フルオペコードフィールド2774は、これらのフィールドの全てより小さい数を含む。フルオペコードフィールド2774は、演算コード(オペコード)を提供する。
【0248】
拡張オペレーションフィールド2750、データ要素幅フィールド2764、および書き込みマスクフィールド2770は、これらの特徴が汎用ベクトル向け命令フォーマットにおいて命令単位で指定されることを可能にする。
【0249】
書き込みマスクフィールドおよびデータ要素幅フィールドの組み合わせは、異なるデータ要素幅に基づいてマスクを適用可能とるという点で、型付き命令を形成する。
【0250】
クラスAおよびクラスB内で見出される様々な命令テンプレートは、異なる状況で有益である。本開示の複数の実施形態のいくつかにおいて、複数の異なるプロセッサ又はプロセッサ内の複数の異なるコアは、クラスAのみ、クラスBのみ、又は両方のクラスをサポートしてよい。例えば、汎用コンピューティング向けの高性能汎用アウトオブオーダコアは、クラスBのみをサポートしてよく、主にグラフィック及び/又は科学的(スループット)コンピューティング向けのコアは、クラスAのみをサポートしてよく、両方向けのコアは、両方をサポートしてよい(勿論、コアは、両方のクラスからの複数のテンプレート及び命令のいくつかの組み合わせを有するが、両方のクラスからの複数のテンプレート及び命令の全てが本開示の範囲内にある訳ではない)。また、単一のプロセッサが複数のコアを含んでよく、それらの全てが同じクラスをサポートするか、またはそれらの中の異なるコアが異なるクラスをサポートする。例えば、別個のグラフィックコアと汎用コアをもつプロセッサでは、主にグラフィックおよび/または科学コンピューティング向けの複数のグラフィックコアのうちの1つがクラスAのみをサポートしてよく、汎用コアのうちの1つ又は複数が、クラスBのみをサポートする汎用コンピューティング向けのアウトオブオーダ実行およびレジスタリネーミングを有する高性能汎用コアであってもよい。別個のグラフィックコアをもたない別のプロセッサは、クラスAおよびクラスBの両方をサポートする1つのより汎用のインオーダコアまたはアウトオブオーダコアを含んでよい。勿論、1つのクラスからの複数の機能は、また、本開示の複数の異なる実施形態における他のクラスで実装されてもよい。高水準言語で書かれたプログラムは、1)実行のためにターゲットプロセッサによってサポートされるクラスの命令のみを有する形式、または2)全てのクラスの命令の異なる組み合わせを使用して書かれた代替的ルーチンを有し、現在コードを実行しているプロセッサによってサポートされる命令に基づいて実行すべきルーチンを選択する制御フローコードを有する形式を含む、様々な異なる実行可能な形式に変換される(例えば、ジャストインタイムコンパイルまたは静的コンパイル)。
例示的特定ベクトル向け命令フォーマット
【0251】
図28は、本開示の複数の実施形態に係る例示的特定ベクトル向け命令フォーマットを示すブロック図である。
図28は、特定ベクトル向け命令フォーマット2800を示し、位置、サイズ、解釈およびフィールド順序、並びにそれらのフィールドのいくつかに対する値を指定するという意味において特定的である。特定ベクトル向け命令フォーマット2800は、x86命令セットを拡張するために用いられてよく、従って、いくつかのフィールドは、既存のx86命令セットおよびその拡張(例えば、AVX)で使用されるフィールドと同様または同じである。この形式は、拡張を有する既存のx86命令セットのプレフィックスエンコーディングフィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および即値フィールドと一致したままである。
図27のフィールドが
図28のどのフィールドにマップされるかが図示されている。
【0252】
本開示の複数の実施形態は、例示目的のため、汎用ベクトル向け命令フォーマット2700との関連で特定ベクトル向け命令フォーマット2800を参照して説明されるが、本開示は、特許請求の範囲に記載されたものを除いて、特定ベクトル向け命令フォーマット2800に限定されるものではないことを理解されたい。例えば、汎用ベクトル向け命令フォーマット2700は、様々なフィールドについて様々な可能なサイズを想定しており、一方で特定ベクトル向け命令フォーマット2800は、特定のサイズのフィールドを有するものとして示されている。具体的な例を用いて、データ要素幅フィールド2764は、特定ベクトル向け命令フォーマット2800において、1ビットフィールドとして示されているが、本開示は、そこまで限定されることはない(すなわち、汎用ベクトル向け命令フォーマット2700は、他のサイズのデータ要素幅フィールド2764を検討する)。
【0253】
汎用ベクトル向け命令フォーマット2700は、
図28Aに示される順序で下記に列挙される以下のフィールドを含む。
【0254】
EVEXプレフィクス(バイト0-3)2802は、4バイト形式にエンコードされる。
【0255】
フォーマットフィールド2740(EVEXバイト0、ビット[7:0])-第1のバイト(EVEXバイト0)は、フォーマットフィールド2740であり、それは、0x62(本開示の一実施形態において、ベクトル向け命令形式を区別するために用いられる固有値)を含む。
【0256】
第2~第4バイト(EVEXバイト1-3)は、具体的な能力を提供する多数のビットフィールドを含む。
【0257】
REXフィールド2805(EVEXバイト1、ビット[7‐5])-これはEVEX.Rビットフィールド(EVEXバイト1、ビット[7]‐R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]‐X)および2757BEXバイト1、ビット[5]‐B)から成る。EVEX.R、EVEX.X及びEVEX.Bビットフィールドは、対応するVEXビットフィールドと同じ機能を提供し、これらは、1の補数形式を使用してエンコードされる、すなわち、ZMM0は、1111Bとしてエンコードされ、ZMM15は、0000Bとしてエンコードされる。命令の他のフィールドは、当該技術分野において知られているように、レジスタインデックスの下位3ビット(rrr、xxx及びbbb)をエンコードし、これにより、EVEX.R、EVEX.X及びEVEX.Bを加算することにより、Rrrr、Xxxx及びBbbbが形成され得る。
【0258】
REX'フィールド2710-これは、REX'フィールド2710の第1の部分であり、拡張32レジスタセットの上位16または下位16のいずれかをエンコードするために用いられるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]-R')である。本開示の一実施形態において、このビットは、リアルオペコードバイトが62であるBOUND命令と(周知のx86 32ビットモードにおいて)区別するために、以下に示されるような他のものと共にビット反転形式に格納されるが、MOD R/Mフィールド(後述)では、MODフィールド内の値11を受け入れない。本開示の複数の代替的な実施形態では、このビット及び以下に示される他のビットを反転形式に格納しない。下位16個のレジスタをエンコードするために1の値が使用される。換言すると、R'Rrrrは、EVEX.R'、EVEX.R、および他のフィールドの他のRRRを組み合わせることにより形成される。
【0259】
オペコードマップフィールド2815(EVEXバイト1、ビット[3:0]-mmmm)-その内容は、暗示された先頭オペコードバイト(0F、0F38又は0F3)をエンコードする。
【0260】
データ要素幅フィールド2764(EVEXバイト2、ビット[7]-W)-記号EVEX.Wという表記によって表される。EVEX.Wは、データタイプの粒度(サイズ)(32ビットデータ要素又は64ビットデータ要素のいずれか)を定義するために用いられる。
【0261】
EVEX.vvvv2820(EVEXバイト2、ビット[6:3]-vvvv)-EVEX.vvvvの役割は以下を含んでよい。1)EVEX.vvvvは、反転(1の補数)形式で指定された第1のソースレジスタオペランドを符号化し、2つ以上のソースオペランドを有する命令に有効である。2)EVEX.vvvvは、特定のベクトルシフトに対して1の補数形式で指定されるデスティネーションレジスタオペランドを符号化する。3)EVEX.vvvvはいかなるオペランドも符号化せず、フィールドは予約され、1111bを含むべきである。従って、EVEX.vvvvフィールド2820は、反転(1の補数)形式で格納された最初のソースレジスタ指定子の下位4ビットを符号化する。命令に応じて、追加の異なるEVEXビットフィールドが使用され、指定子サイズを32個のレジスタに拡張する。
【0262】
EVEX.U2768のクラスフィールド(EVEXバイト2、ビット[2]-U)-EVEX.U=0である場合、クラスA又はEVEX.U0を示し、EVEX.U=1である場合、クラスB又はEVEX.U1を示す。
【0263】
プレフィクスエンコードフィールド2825(EVEXバイト2、ビット[1:0]-pp)-基本オペレーションフィールドに追加のビットを提供する。EVEXプレフィクス形式でレガシSSE命令にサポートを提供することに加えて、これはSIMDプレフィクスを圧縮するという利点も有する(SIMDプレフィクスを表すために1バイトを必要とするのではなく、EVEXプレフィクスは2ビットのみを必要とする)。一実施形態において、レガシ形式およびEVEXプレフィクス形式の両方におい、SIMDプレフィクス(66H、F2H、F3H)を使用するレガシSSE命令をサポートすべく、これらのレガシSIMDプレフィクスは、SIMDプレフィクスエンコーディングフィールドにエンコードされ、復号回路のPLAに提供される前に、ランタイムにレガシSIMDプレフィクスに拡張される(よって、PLAは、変更なしで、これらのレガシ命令のレガシフォーマットおよびEVEXフォーマットの両方を実行可能である)。より新たな命令は、EVEXプレフィクスエンコードフィールドの内容をオペコード拡張として直接的に用いることができるであろうが、特定の実施形態は、整合性のために同様に拡張を行うが、これらのレガシSIMDプレフィクスが異なる意味を指定することを可能とする。代替的な実施形態は、2ビットSIMDプレフィクスエンコーディングをサポートし、従って、拡張を必要としないようにPLAを再設計することができる。
【0264】
アルファフィールド2752(EVEXバイト3、ビット[7]-EH、EVEX.EH、EVEX.rs、EVEX.RL、EVEX.書き込みマスク制御、及びEVEX.Nとしても知られ、αでも示される):前述されたように、このフィールドはコンテキスト固有である。
【0265】
ベータフィールド2754(EVEXバイト3、ビット[6:4]-SSS、EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られ、βββでも示される):前述されたように、このフィールドはコンテキスト固有である。
【0266】
REX'フィールド2710:これは、REX'フィールドの残りであり、拡張32レジスタセットの上位16または下位16のいずれかをエンコードするのに用いられ得るEVEX.V'ビットフィールド(EVEXバイト3、ビット[3]―V')である。このビットはビット反転形式で格納される。下位16個のレジスタをエンコードするために1の値が使用される。換言すると、EVEX.V'、EVEX.vvvvを組み合わせることにより、V'VVVVが形成される。
【0267】
書き込みマスクフィールド2770(EVEXバイト3、ビット[2:0]―kkk):その内容は、前述されたように、書き込みマスクレジスタにおけるレジスタのインデックスを指定する。本開示の一実施形態において、特定値EVEX.kkk=000は、特定の命令に用いられる書き込みマスクが存在しないことを示唆する特別な動作を有する(これは、すべてのものに対してハードウェアに組み込まれる書き込みマスク、又は、マスキングハードウェアをバイパスするハードウェアの使用を含む様々な方法で実装されてよい)。
【0268】
リアルオペコードフィールド2830(バイト4)はオペコードバイトとしても知られる。オペコードの一部はこのフィールドで指定される。
【0269】
MOD R/Mフィールド2840(バイト5)は、MODフィールド2842、Regフィールド2844、およびR/Mフィールド2846を含む。前述されたように、MODフィールド2842の内容は、メモリアクセス演算と非メモリアクセス演算とを区別する。Regフィールド2844の役割は、デスティネーションレジスタオペランド又はソースレジスタオペランドのいずれかをエンコードする、またはオペコード拡張として扱われ、いずれの命令オペランドをエンコードするのにも用いられないという2つの状況に要約することができる。R/Mフィールド2846の役割は、メモリアドレスを参照する命令オペランドをエンコードすること、デスティネーションレジスタオペランド又はソースレジスタオペランドとのいずれかをエンコードすることを含んでよい。
【0270】
スケール、インデックス、ベース(SIB)バイト(バイト6):前述されたように、スケールフィールド2750の内容は、メモリアドレス生成のために用いられる。SIB.xxx2854およびSIB.bbb 2856-これらのフィールドの内容は、レジスタインデックスXxxxおよびBbbbに関して記載済みである。
【0271】
変位フィールド2762A(バイト7~10)-MODフィールド2842が10を含む場合、バイト7~10は変位フィールド2762Aであり、それはレガシー32ビット変位(disp32)と同じように機能し、バイト粒度で機能する。
【0272】
変位係数フィールド2762B(バイト7)-MODフィールド2842が01を含む場合、バイト7は変位係数フィールド2762Bである。このフィールドの位置は、バイト粒度で機能するレガシx86命令セットの8ビット変位(disp8)の位置と同じである。disp8は符号拡張されているので、-128バイトオフセットと127バイトオフセットとの間のアドレス指定しかできず、64バイトのキャッシュラインに関しては、disp8は、4つの本当に有用な値-128、-64、0、および64にのみ設定できる8ビットを使用し、より大きな範囲がしばしば必要とされるので、disp32が使用されるが、disp32は4バイトを必要とする。disp8およびdisp32と対照的に、変位係数フィールド2762Bはdisp8の再解釈であり、変位係数フィールド2762Bを使用する場合に、実際の変位は、メモリオペランドアクセスのサイズ(N)と乗算された変位係数フィールドの内容によって決定される。このタイプの変位は、disp8×Nと称される。これにより、平均命令長(変位に使用される単一バイトであるが、はるかに広い範囲を有する)が短くなる。そのような圧縮された変位は、有効な変位がメモリアクセスの粒度の倍数であるという前提に基づいており、従って、アドレスオフセットの冗長下位ビットはエンコードの必要がない。換言すると、変位係数フィールド2762Bが、レガシx86命令セットの8ビット変位と置き換わる。従って、位係数フィールド2762Bは、disp8がdisp8×Nに多重定義されるという唯一の例外を除いて、x86命令セットの8ビット変位と同じ方法で符号化される(そのため、ModRM/SIB符号化ルールにおける変更はない)。換言すると、エンコードルールまたはエンコード長に変更はなく、ハードウェアによる変位値の解釈のみに変更がある(バイト単位のアドレスオフセットを得るには、メモリオペランドのサイズによって変位をスケールする必要がある)。即値フィールド2772は、前述されたように機能する。
フルオペコードフィールド
【0273】
図28Bは、本開示の一実施形態に係るフルオペコードフィールド2774を形成する特定ベクトル向け命令フォーマット2800のフィールドを示すブロック図である。具体的には、フルオペコードフィールド2774は、形式2740、基本オペレーションフィールド2742およびデータ要素幅(W)フィールド2764を含む。基本オペレーションフィールド2742は、プレフィクスエンコーディングフィールド2825、オペコードマップフィールド2815およびリアルオペコードフィールド2830を含む。
レジスタインデックスフィールド
【0274】
図28Cは、本開示の一実施形態に係るレジスタインデックスフィールド2744を形成する特定ベクトル向け命令フォーマット2800を示すブロック図である。具体的には、レジスタインデックスフィールド2744は、REXフィールド2805、REX'フィールド2810、MODR/M.regフィールド2844、MODR/M.r/mフィールド2846、VVVVフィールド2820、xxxフィールド2854、およびbbbフィールド2856を含む。
拡張オペレーションフィールド
【0275】
図28Dは、本開示の一実施形態に係る拡張オペレーションフィールド2750を形成する特定ベクトル向け命令フォーマット2800のフィールドを示すブロック図である。クラス(U)フィールド2768が0を含む場合、それは、EVEX.U0(クラスA 2768A)を意味し、1を含む場合、それはEVEX.U1(クラスB 2768B)を意味する。U=0、かつMODフィールド2842が(非メモリアクセス演算を意味する)11を含む場合、アルファフィールド2752(EVEXバイト3、ビット[7]-EH)はRSフィールド2752Aと解釈される。RSフィールド2752Aが1を含む場合(ラウンド2752A.1)、ベータフィールド2754(EVEXバイト3、ビット[6:4]―SSS)はラウンド制御フィールド2754Aと解釈される。ラウンド制御フィールド2754Aは、1ビットのSAEフィールド2756および2ビットのラウンドオペレーションフィールド2758を含む。RSフィールド2752Aが0を含む場合(データ変換2752A.2)、ベータフィールド2754(EVEXバイト3、ビット[6:4]‐SSS)は3ビットのデータ変換フィールド2754Bと解釈される。U=0、かつMODフィールド2842が00、01または10を含む場合(メモリアクセス演算を意味)、アルファフィールド2752(EVEXバイト3、ビット[7]‐EH)は、エビクションヒント(EH)フィールド2752Bと解釈され、ベータフィールド2754(EVEXバイト3、ビット[6:4]‐SSS)は3ビットのデータ操作フィールド2754Cと解釈される。
【0276】
U=1の場合、アルファフィールド2752(EVEXバイト3、ビット[7]-EH)は書き込みマスク制御(Z)フィールド2752Cと解釈される。U=1、かつMODフィールド2842が11を含む(非メモリアクセス演算を表す)場合、ベータフィールド2754の一部(EVEXバイト3、ビット[4]―S0)は、RLフィールド2757Aと解釈される。これが1を含む場合(ラウンド2757A.1)、ベータフィールド2754の残り(EVEXバイト3、ビット[6‐5]―S2-1)は、ラウンドオペレーションフィールド2759Aと解釈され、一方でRLフィールド2757Aが0を含む場合(VSIZE 2757.A2)、ベータフィールド2754の残り(EVEXバイト3、ビット[6‐5]―S2-1)は、ベクトル長フィールド2759B(EVEXバイト3、ビット[6‐5]‐L1-0)と解釈される。U=1、かつMODフィールド2842が(メモリアクセス演算を意味する)00、01、または10を含む場合、ベータフィールド2754(EVEXバイト3、ビット[6:4]-SSS)は、ベクトル長フィールド2759B(EVEXバイト3、ビット[6-5]-L1-0)およびブロードキャストフィールド2757B(EVEXバイト3、ビット[4]-B)と解釈される。
例示的レジスタアーキテクチャ
【0277】
図29は、本開示の一実施形態に係るレジスタアーキテクチャ2900のブロック図である。図示される実施形態には、512ビット幅の32個のベクトルレジスタ2910がある。これらのレジスタは、zmm0からzmm31と参照符号が付されている。下位16個のzmmレジスタの下位256ビットは、レジスタymm0~ymm16に重なっている。下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0~15に重なっている。特定ベクトル向け命令フォーマット2800は、これらの重なったレジスタファイルに対し、以下の表に示されるように動作する。
【表2】
【0278】
換言すると、ベクトル長フィールド2759Bは、最大長と1つ又は複数の他のより短い長さとの間で選択し、そのようなより短い長さの各々は先行する長さの半分の長さであり、ベクトル長フィールド2759Bのない命令テンプレートは最大ベクトル長に作用する。さらに一実施形態において、特定ベクトル向け命令フォーマット2800のクラスB命令テンプレートは、パック型又はスカラ型単/倍精度浮動小数点データ、およびパック型又はスカラ型整数データに対して作用する。スカラ演算とは、zmm/ymm/xmmレジスタ内の最下位のデータ要素の位置で実行される演算である。実施形態に応じて、より上位のデータ要素の位置は、命令前と同じに保持されるか、ゼロ書き込みされるかのいずれかである。
【0279】
図示の実施形態の書き込みマスクレジスタ2915では、各々64ビットのサイズの8個の書き込みマスクレジスタ(k0からk7)がある。代替的な実施形態において、書き込みマスクレジスタ2915は16ビットのサイズである。前述されたように、本開示の一実施形態において、ベクトルマスクレジスタk0は、書き込みマスクとして用いられることができず、通常k0を示すエンコードが書き込みマスクに用いられる場合、0xFFFFのハードウェアに組み込まれる書き込みマスクを選択することで、その命令に対する書き込みマスキングを効率的に無効にする。
【0280】
図示の実施形態の汎用レジスタ2925では、メモリオペランドをアドレス指定するために既存のx86アドレス指定モードと共に使用される16個の64ビット汎用レジスタがある。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8からR15の名称で参照される。
【0281】
MMXパック整数フラットレジスタファイル2950がエイリアスされる、スカラ浮動小数点スタックレジスタファイル(x87スタック)2945-図示される実施形態では、x87スタックは、x87命令セット拡張子を使用して32/64/80ビット浮動小数点データに対してスカラ浮動小数点演算を実行するために使用される8要素スタックである。一方、MMXレジスタは、64ビットのパックされた整数データに対して演算を実行するため、ならびにMMXレジスタとXMMレジスタとの間で実行されるいくつかの演算のためにオペランドを保持するために、使用される。
【0282】
本開示の複数の代替的な実施形態では、より広い又はより狭いレジスタを用いてよい。さらに、本開示の複数の代替的な実施形態は、より多くの、より少ない、又は異なる複数のレジスタファイル及び複数のレジスタを用いてよい。
例示的コアアーキテクチャ、プロセッサ、及びコンピュータアーキテクチャ
【0283】
プロセッサコアは、異なる態様で、異なる目的のために、異なるプロセッサに実装されてよい。例えば、そのようなコアの実装は、1)汎用コンピューティング向けの汎用インオーダコア、2)汎用コンピューティング向けの高性能汎用アウトオブオーダコア、3)主にグラフィックおよび/または科学(スループット)コンピューティング向けの専用コアを含んでよい。異なるプロセッサの実装は、1)汎用コンピューティング向けの1または複数の汎用インオーダコアおよび/または汎用コンピューティング向けの1または複数の汎用アウトオブオーダコアを含むCPU)、および2)主にグラフィックおよび/または科学(スループット)向けの1または複数の専用コアを含むコプロセッサを含んでよい。そのような異なるプロセッサは、1)CPUとは別個のチップ上のコプロセッサ、2)CPUと同じパッケージ内の別個のダイ上のコプロセッサ、3)CPUと同じダイ上のコプロセッサ(この場合、そのようなコプロセッサは、統合グラフィックおよび/または科学(スループット)ロジック等の専用ロジックまたは専用コアと称される場合がある)、および4)上記CPU(アプリケーションコアまたはアプリケーションプロセッサと称される場合がある)、上述のコプロセッサおよび追加の機能を同じダイ上に含み得るシステムオンチップを含み得る、異なるコンピュータシステムアーキテクチャをもたらす。例示的コアアーキテクチャが次に説明され、例示的プロセッサおよびコンピュータアーキテクチャの説明が続く。
例示的コアアーキテクチャ
インオーダアウトオブオーダコアブロック図
【0284】
図30Aは、本開示の実施形態に係る、例示的インオーダパイプライン及び例示的レジスタリネーミング・アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。
図30Bは、本開示の複数の実施形態に係るプロセッサに含まれるべきインオーダアーキテクチャコアの例示的実施形態及び例示的レジスタリネーミング・アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。
図30A-
図30Bにおける実線のボックスは、インオーダパイプラインおよびインオーダコアを示し、一方で、任意に追加された破線のボックスは、レジスタリネーミング、アウトオブオーダ発行/実行パイプラインおよびコアを示す。インオーダの態様はアウトオブオーダ態様のサブセットであると仮定して、アウトオブオーダ態様が説明される。
【0285】
図30Aでは、プロセッサパイプライン3000は、フェッチステージ3002、長さ復号ステージ3004、復号ステージ3006、割り当てステージ3008、リネーミングステージ3010、スケジューリング(ディスパッチまたは発行としても知られる)ステージ3012、レジスタ読み出し/メモリ読み出しステージ3014、実行ステージ3016、書き戻し/メモリ書き込みステージ3018、例外処理ステージ3022、およびコミットステージ3024を含む。
【0286】
図30Bは、実行エンジンユニット3050に結合されるフロントエンドユニット3030を含むプロセッサコア3090を示し、両方がメモリユニット3070に結合される。コア3090は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替的なコアタイプであってよい。さらに別の選択肢として、コア3090は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティング画像処理ユニット(GPGPU)コア、グラフィックコア等の専用コアであってよい。
【0287】
フロントエンドユニット3030は、命令キャッシュユニット3034に結合された分岐予測ユニット3032を含み、命令キャッシュユニット3034は、命令トランスレーションルックアサイドバッファ(TLB)3036に結合され、TLB3036は、命令フェッチユニット3038に結合され、命令フェッチユニット3038は、復号ユニット3040に結合される。復号ユニット3040(例えば、復号回路)は、複数の命令(例えばマクロ命令)を復号し、1または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は元の命令から復号され、又は他の方法でこれを反映し、又はこれから派生した他の制御信号を、出力として生成してよい。復号ユニット3040は、様々な異なるメカニズムを使用して実装されてよい。適切なメカニズムの例としては、これに限定されるものではないが、ルックアップテーブル、ハードウェア実装、プログラム可能ロジックアレイ(PLA)、マイクロコード読み取り専用メモリ(ROM)等を含む。一実施形態において、コア3090は、マイクロコードROM、又は、特定のマクロ命令に対するマイクロコードを格納する(例えば、復号ユニット3040における、そうでなければ、フロントエンドユニット3030内の)他の媒体を含む。復号ユニット3040は、実行エンジンユニット3050におけるリネーム/アロケータユニット3052に結合される。
【0288】
実行エンジンユニット3050は、リタイアメントユニット3054に結合されたリネーム/アロケータユニット3052と、1または複数のスケジューラユニット3056のセットとを含む。スケジューラユニット3056は、任意の数の異なるスケジューラを表してよく、リザベーションステーション、中央命令ウィンドウ等を含む。スケジューラユニット3056は、物理レジスタファイル3058に結合される。物理レジスタファイルユニット3058のそれぞれは、1または複数の物理レジスタファイルを表し、それらの異なるファイルは、スカラ整数、スカラ浮動小数点、パックされた整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行されるべき次の命令のアドレスである命令ポインタ)、タイル、その他、等の、1または複数の異なるデータ型を格納する。一実施形態において、物理レジスタファイルユニット3058は、ベクトルレジスタユニット、書き込みマスクレジスタユニットおよびスカラレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタおよび汎用レジスタを提供してよい。物理レジスタファイルユニット3058は、レジスタリネーミングおよびアウトオブオーダ実行が実装され得る様々な態様を示すように(例えば、リオーダバッファおよびリタイアメントレジスタファイルを使用する、将来のファイル、履歴バッファおよびリタイアメントレジスタファイルを使用する、レジスタマップとレジスタプールを使用する、その他)、リタイアメントユニット3054に重ねられている。リタイアメントユニット3054及び物理レジスタファイルユニット3058は、実行クラスタ3060に結合される。実行クラスタ3060は、1つ又は複数の実行ユニット3062のセット(例えば、実行回路)及び1つ又は複数のメモリアクセスユニット3064のセットを含む。実行ユニット3062は、様々な演算を実行してよく(例えば、シフト、加算、減算、乗算)、様々なデータ型(例えば、スカラ浮動小数点、パックされた整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点)で動作しうる。いくつかの実施形態では、特定の機能または一連の機能に専用の複数の実行ユニットを含んでよいが、他の実施形態では、全機能を実行する1つだけの実行ユニットまたは複数の実行ユニットを含んでよい。スケジューラユニット3056、物理レジスタファイルユニット3058、および実行クラスタ3060は、特定の実施形態がいくつかのデータ型/演算用の別個のパイプライン(スカラ整数パイプライン、スカラ浮動小数点/パックされた整数/パック型浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び/又は各々が独自のスケジューラユニット、物理レジスタファイルユニット、及び/又は実行クラスタを有するメモリアクセスパイプライン-別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット3064を有する特定の実施形態が実装される)を形成するので、場合によっては複数であるように示されている。別個のパイプラインが使用される場合、これらのパイプラインのうちの1つ又は複数がアウトオブオーダ発行/実行であり、残りがインオーダであってもよいことも理解されたい。
【0289】
メモリアクセスユニット3064のセットは、メモリユニット3070に結合され、メモリユニット3070には、二次(L2)キャッシュユニット3076に結合されたデータキャッシュユニット3074に結合されたデータTLBユニット3072が含まれる。例示的一実施形態において、メモリアクセスユニット3064は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含んでよく、これらの各々は、メモリユニット3070内のデータTLBユニット3072に結合される。命令キャッシュユニット3034は、メモリユニット3070内の二次(L2)キャッシュユニット3076にさらに結合される。L2キャッシュユニット3076は、1つ又は複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
【0290】
例として、例示的レジスタリネーミングアウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプライン3000を実装してよい。
1)命令フェッチ3038が、フェッチおよび長さ復号ステージステージ3002及び3004を実行する。
2)復号ユニット3040が、復号ステージ3006を実行する。
3)リネーム/アロケータユニット3052が、割り当てステージ3008およびリネーミングステージ3010を実行する。
4)スケジューラユニット3056が、スケジュールステージ3012を実行する。
5)(複数の)物理レジスタファイルユニット3058およびメモリユニット3070が、レジスタ読み出し/メモリ読み出しステージ3014を実行し、実行クラスタ3060が実行ステージ3016を実行する、
6)メモリユニット3070および(複数の)物理レジスタファイルユニット3058が、書き戻し/メモリ書き込みステージ3018を実行する。
7)様々なユニットが、例外処理ステージ3022に関与してよい。
8)リタイアメントユニット3054および(複数の)物理レジスタファイルユニット3058が、コミットステージ3024を実行する。
【0291】
コア3090は、1つ又は複数の命令セット(例えば、x86命令セット(より新しいバージョンで追加されたいくつかの拡張付き)、カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セット、カリフォルニア州サニーベールのARMホールディングスのARM命令セット(NEON等のオプションの追加拡張付き))をサポートしてよく、本明細書で説明される(複数の)命令を含む。一実施形態において、コア3090は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、これによって、多くのマルチメディアアプリケーションによって用いられる演算が、パックドデータを使用して実行されることを可能にする。
【0292】
コアは、マルチスレッディング(2または2より多い並行するオペレーションまたはスレッドのセット)をサポートしてよく、時分割マルチスレッディング、同時マルチスレッディング(1つの物理コアが、物理コアが同時マルチスレッディングを実行する各スレッドに対する論理コアを提供する)、またはその組み合わせ(例えば、インテルハイパースレッディング・テクノロジー等の、時分割フェッチ・復号、およびその後の同時マルチスレッディング)を含む様々な方法でそのように動作してよいことを理解されたい。
【0293】
レジスタリネーミングが、アウトオブオーダ実行との関連で説明されるが、レジスタリネーミングは、インオーダーアーキテクチャで用いられてよいことを理解されたい。図示されたプロセッサの実施形態は、別個の命令およびデータキャッシュユニットと3034/3074と、共有L2キャッシュユニット3076とを含んでもよく、代替的な実施形態では、例えば一次(L1)内部キャッシュ、またはマルチレベル内部キャッシュ等の、命令およびデータの両方に対して1つの内部キャッシュを有してよい。いくつかの実施形態において、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュと、の組み合わせを含んでよい。代わりに、キャッシュの全てが、コアおよび/またはプロセッサの外部にあってもよい。
具体的な例示的インオーダコアアーキテクチャ
【0294】
図31A-
図31Bは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示す。当該コアは、チップ内のいくつかの論理ブロック(同じタイプおよび/または異なる型の他のコアを含む)のうちの1つであってよい。論理ブロックは、高帯域幅相互接続ネットワーク(例えば、リングネットワーク)を通じて、アプリケーションに応じて、いくつかの固定機能ロジック、メモリI/Oインタフェース及び他の必要なI/O論理と通信する。
【0295】
図31Aは、本開示の複数の実施形態に係る単一のプロセッサコアのブロック図を、オンダイ相互接続ネットワーク3102へのその接続及び二次(L2)キャッシュ3104のそのローカルサブセットと共に示す。一実施形態において、命令デコードユニット3100は、パックドデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ3106は、スカラ及びベクトルユニットへのキャッシュメモリに対する低レイテンシアクセスを可能にする。一実施形態において、(設計の単純化のために)スカラユニット3108及びベクトルユニット3110は、別個のレジスタセット(それぞれ、スカラレジスタ3112及びベクトルレジスタ3114)を用い、これらの間で転送されるデータは、一次(L1)キャッシュ3106のメモリに書き込まれてから再読み出しされるが、本開示の複数の代替的な実施形態は、異なるアプローチ(例えば、単一のレジスタセットを使用する、又は書き込み及び再読み出しを行うことなく、2つのレジスタファイル間におけるデータ転送を可能とする通信経路を含む)を使用してよい。
【0296】
L2キャッシュ3104のローカルサブセットは、プロセッサコア毎に1つの、別個のローカルサブセットに分割されたグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ3104それ自身のローカルサブセットへの直接アクセスパスを有する。プロセッサコアにより読み取られるデータは、そのL2キャッシュサブセット3104に格納され、他のプロセッサコアがそれら自身のローカルL2キャッシュサブセットにアクセスすることと並列に、迅速にアクセスされることができる。プロセッサコアによって書き込まれたデータは、それ自体のL2キャッシュサブセット3104に格納され、必要な場合他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは、プロセッサコア、L2キャッシュ、および他の論理ブロック等のエージェントがチップ内で互いに通信することを可能にするように双方向である。各リングデータパスは、一方向当たり1012ビット幅である。
【0297】
図31Bは、本開示の複数の実施形態に係る
図31Aのプロセッサコアの一部の拡大図である。
図31Bは、L1キャッシュ3104のL1データキャッシュ3106Aの一部、並びにベクトルユニット3110およびベクトルレジスタ3114に関するさらなる詳細を含む。具体的には、ベクトルユニット3110は、16幅ベクトル処理ユニット(VPU)(16幅ALU3128を参照)であり、整数命令、単精度浮動命令および倍精度浮動命令のうちの1つ又は複数を実行する。VPUは、スウィズルユニット3120によるレジスタ入力のスウィズル、数値変換ユニット3122A~Bによる数値変換、およびメモリ入力上での複製ユニット3124による複製をサポートする。書き込みマスクレジスタ3126は、結果として生じるベクトル書き込みのプレディケートを可能にする。
【0298】
図32は、本開示の複数の実施形態に係るプロセッサ3200のブロック図であって、1つより多くのコアを有してよく、統合メモリコントローラを有してよく、統合グラフィックを有してよい。
図32の実線のボックスは、単一のコア3202A、システムエージェント3210、1つ又は複数のバスコントローラユニット3216のセットを有するプロセッサ3200を示し、破線のボックスのオプション追加は、複数のコア3202A~N、システムエージェントユニット3210内の1つ又は複数の統合メモリコントローラユニット3214のセット、および専用ロジック3208を有する代替的なプロセッサ3200を示す。
【0299】
従って、プロセッサ3200の様々な実装形態は、1)(1つ又は複数のコアを含んでよい)統合グラフィックおよび/または科学(スループット)ロジックである専用ロジック3208、ならびに1つ又は複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、それら2つの組み合せ)であるコア3202A~Nを有するCPUと、2)主にグラフィックおよび/または科学(スループット)向けの多数の専用コアであるコア3202A~Nを有するコプロセッサと、3)多数の汎用インオーダコアであるコア3202A~Nを有するコプロセッサとを含んでよい。従って、プロセッサ3200は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU(汎用画像処理ユニット)、(30以上のコアを含む)高スループット多集積コア(MIC)コプロセッサ、組み込みプロセッサ等の、汎用プロセッサ、コプロセッサ、または専用プロセッサであってよい。プロセッサは、1つ又は複数のチップに実装されてよい。プロセッサ3200は、例えば、BiCMOS、CMOS、またはNMOS等の多くのプロセス技術のいずれかを使用した1つ又は複数の基板の一部であってよく、および/またはその基板上に実装されてよい。
【0300】
メモリ階層には、コア内の1つ又は複数のレベルのキャッシュ、1つ又は複数の共有キャッシュユニット3206またはそのセット、及び、統合メモリコントローラユニット3214のセットに結合された外部メモリ(不図示)が含まれる。共有キャッシュユニット3206のセットは、二次(L2)、三次(L3)、四次(L4)、または他のレベルのキャッシュ等の1または複数の中間レベルキャッシュ、ラストレベルキャッシュ(LLC)および/またはそれらの組み合わせを含んでよい。一実施形態において、リングベースの相互接続ユニット3212は、統合グラフィックロジック3208、共有キャッシュユニット3206のセット、およびシステムエージェントユニット3210/統合メモリコントローラユニット3214を相互接続するが、代替実施形態は、このようなユニットを相互接続するための任意の数の周知の技術を用いてよい。一実施形態において、1つ又は複数のキャッシュユニット3206及びコア3202A-Nの間のコヒーレンシが維持される。
【0301】
いくつかの実施形態においてにおいて、コア3202A-Nのうちの1つ又は複数は、マルチスレッディングが可能である。システムエージェント3210は、コア3202A-N]を調整し動作させるそれらのコンポーネント含む。システムエージェントユニット3210は、例えば、電力制御ユニット(PCU)と、ディスプレイユニットとを含んでよい。PCUは、コア3202A-N及び統合グラフィックロジック3208の電力状態を調整するのに必要な論理及び構成コンポーネントとすることができるか又はそれらを含むことができる。ディスプレイユニットは、1または複数の外部接続されたディスプレイを駆動するためのものである。
【0302】
コア3202A-Nは、アーキテクチャ命令セットに関して同種であっても異種であってもよく、すなわち、コア3202A-Nのうちの2つ以上は、同じ命令セットを実行できてもよく、一方で、他のものは、その命令セットのうちの1つのサブセットのみ、または異なる命令セットを実行することができてもよい。
例示的コンピュータアーキテクチャ
【0303】
図33-
図36は、例示的コンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルドデバイス、および様々なその他の電子装置の当該分野での公知のその他のシステム設計および構成もまた適している。概して、本明細書において開示されるプロセッサおよび/または他の実行ロジックを組み込むことが可能な多種多様なシステムまたは電子デバイスは、概して適している。
【0304】
ここで
図33を参照すると、本開示の一実施形態に係るシステム3300のブロック図が示される。システム3300は、コントローラハブ3320に結合される1つ又は複数のプロセッサ3310、3315を含んでよい。一実施形態において、コントローラハブ3320は、グラフィックメモリコントローラハブ(GMCH)3390および入力/出力ハブ(IOH)3350(別個のチップ上に存在してよい)を含む。GMCH3390は、メモリ3340およびコプロセッサ3345が結合されたメモリ及びグラフィックコントローラを含む。IOH3350は、入力/出力(I/O)デバイス3360をGMCH3390に結合する。代わりに、メモリ及びグラフィックコントローラの一方又は両方は、(本明細書において説明されるように)プロセッサ内で集積され、メモリ3340及びコプロセッサ3345は、プロセッサ3310と、IOH3350を有する単一のチップ内のコントローラハブ3320とに直接結合される。メモリ3340は、例えば、実行された場合に、本開示の任意の方法をプロセッサに実行させるためのコードを格納する行列加速コード3340A、を含んでよい。
【0305】
追加のプロセッサ3315の任意選択的な性質が、
図33において破線で示される。各プロセッサ3310、3315は、本明細書において説明される処理コアのうちの1つ又は複数を含んでよく、プロセッサ3200のいくつかのバージョンであってよい。
【0306】
メモリ3340は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、またはそれら2つの組み合せであってもよい。少なくとも1つの実施形態では、コントローラハブ3320は、プロセッサ3310、3315と、フロントサイドバス(FSB)等のマルチドロップバス、クイックパスインタコネクト(QPI)等のポイントツーポイントインタフェースまたは同様の接続3395を介して通信する。
【0307】
一実施形態において、コプロセッサ3345は、例えば、高スループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU、組み込みプロセッサ等の専用プロセッサである。一実施形態において、コントローラハブ3320は、統合グラフィックアクセラレータを含んでよい。
【0308】
物理リソース3310と3315との間には、アーキテクチャ特性、マイクロアーキテクチャ特性、熱的特性、電力消費特性等を含む広範な価値基準の観点から様々な差異が存在し得る。
【0309】
一実施形態において、プロセッサ3310は、一般的なタイプのデータ処理オペレーションを制御する命令を実行する。命令内にコプロセッサ命令が組み込まれてもよい。プロセッサ3310は、これらのコプロセッサ命令を、付属のコプロセッサ3345により実行されるべきタイプであるとして認識する。従って、プロセッサ3310は、コプロセッサ3345に対して、コプロセッサバス又は他の相互接続上にこれらのコプロセッサ命令(又は、コプロセッサ命令を表す制御信号)を発行する。コプロセッサ3345は、受信したコプロセッサ命令を受け取って実行する。
【0310】
ここで
図34を参照すると、本開示の実施形態に係る第1のより具体的な例示的システム3400のブロック図が示される。
図34に示されるように、マルチプロセッサシステム3400は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続3450を介して結合される第1のプロセッサ3470および第2のプロセッサ3480を含む各プロセッサ3470および3480は、プロセッサ3200のいくつかのバージョンであってよい。本開示の一実施形態において、プロセッサ3470および3480は、それぞれプロセッサ3310および3315であり、コプロセッサ3438はコプロセッサ3345である。他の実施形態において、プロセッサ3470および3480は、それぞれ、プロセッサ3310、コプロセッサ3345である。
【0311】
プロセッサ3470および3480はそれぞれ、統合メモリコントローラ(IMC)ユニット3472および統合メモリコントローラ(IMC)ユニット3482を含むものとして示されている。プロセッサ3470は、そのバスコントローラユニットの一部として、ポイントツーポイント(P―P)インタフェース3476及び3478も含み、同様に、第2プロセッサ3480はP-Pインタフェース3486及び3488を含む。プロセッサ3470、3480は、P―Pインタフェース回路3478、3488を使用して、ポイントツーポイント(P―P)インタフェース3450を介して情報を交換し得る。
図34に示されるように、IMC3472および3482は、プロセッサを各メモリ、すなわち、各プロセッサにローカルに取り付けられたメインメモリの一部であり得るメモリ3432およびメモリ3434に結合する。
【0312】
プロセッサ3470、3480はそれぞれ、個々のP-Pインタフェース3452、3454を介し、ポイントツーポイントインタフェース回路3476、3494、3486、3498を使用して、チップセット3490と情報を交換してよい。チップセット3490は、高性能インタフェース3439を介して、コプロセッサ3438と任意選択的に情報を交換してよい。一実施形態において、コプロセッサ3438は、例えば、高スループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU、組み込みプロセッサ等のような専用プロセッサである。
【0313】
共有キャッシュ(不図示)は、プロセッサに含まれるか、または両方のプロセッサの外部にある、のいずれかであるが、P‐P相互接続を介してプロセッサと接続されていてよく、これにより、プロセッサが低電力モードになった場合、いずれかのまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得る。
【0314】
チップセット3490は、インタフェース3496を介して第1のバス3416に結合されてよい。一実施形態において、第1のバス3416は、ペリフェラルコンポーネントインタコネクト(PCI)バス、もしくはPCIエクスプレスバス又は他の第3世代I/O相互接続バス等のバスであってよいが、本開示の範囲はこれらのバスに限定されるものではない。
【0315】
図34に示されるように、様々なI/Oデバイス3414が、第1のバス3416を第2のバス3420に結合するバスブリッジ3418と共に、第1のバス3416に結合されてよい。一実施形態において、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックアクセラレータまたはデジタル信号処理(DSP)ユニット等)、フィールドプログラマブルゲートアレイ、またはその他のプロセッサ等、1または複数の追加のプロセッサ3415が第1のバス3416に結合される。一実施形態において、第2のバス3420はローピンカウント(LPC)バスであってよい。一実施形態において、例えば、キーボードおよび/またはマウス3422、通信デバイス3427、および命令/コードおよびデータ3430を含んでよいディスクドライブまたは他の大容量ストレージデバイス等のストレージユニット3428を含む様々なデバイスが、第2のバス3420に結合されてよい。さらに、オーディオI/O3424が、第2のバス3420に結合されてよい。なお、他のアーキテクチャも可能である。例えば、
図34のポイントツーポイントアーキテクチャに代わりに、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してよい。
【0316】
ここで
図35を参照すると、本開示の実施形態に係る第2のより具体的な例示的システム3500のブロック図が示される。
図34および
図35の同様の要素には同様の参照番号を有し、
図35の他の態様を曖昧にすることを回避するために、
図34の特定の態様は
図35から省略されている。
【0317】
図35は、プロセッサ3470、3480が、それぞれ統合メモリ及びI/O制御ロジック(「CL」)3472、3482を含んでよいことを示す。従って、CL3472、3482は、統合メモリコントローラユニットを含み、I/O制御ロジックを含む。
図35は、メモリ3432、3434のみが制御ロジック3472、3482に結合されるのではなく、複数のI/Oデバイス3514もCL3472、3482に結合されることを示す。レガシI/Oデバイス3515は、チップセット3490に結合される。
【0318】
ここで
図36を参照すると、本開示の実施形態に係るSoC3600のブロック図が示される。
図32と同様の要素には同様の参照番号を有する。また、破線のボックスは、より高度なSoCにおける任意の機能である。
図36において、相互接続ユニット3602は、1または複数のコア3202A~Nおよび共有キャッシュユニット3206のセットを含むアプリケーションプロセッサ3610と、システムエージェントユニット3210と、バスコントローラユニット3216と、統合メモリコントローラユニット3214と、統合グラフィックロジック、イメージプロセッサ、オーディオプロセッサおよびビデオプロセッサを含み得るセットあるいは1または複数のコプロセッサ3620と、スタティックランダムアクセスメモリ(SRAM)ユニット3630と、ダイレクトメモリアクセス(DMA)ユニット3632と、1または複数の外部ディスプレイに結合するためのディスプレイユニット3640とに結合される。一実施形態において、コプロセッサ3620は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、組み込みプロセッサ等のような、専用プロセッサを含む。
【0319】
本明細書に開示される(例えば、複数のメカニズムの)実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はこのような複数の実装アプローチの組み合わせで実装されてよい。本開示の複数の実施形態は、少なくとも1つのプロセッサと、(揮発性メモリおよび不揮発性メモリおよび/またはストレージ要素を含む)ストレージシステムと、少なくとも1つの入力デバイスと、少なくとも1つの出力デバイスとを備えるプログラマブルシステムで実行されるコンピュータプログラムまたはプログラムコードとして実装されてよい。
【0320】
図34に示されたコード3430等のプログラムコードは、本明細書で説明された機能を実行し、出力情報を生成するために、入力命令に適用されてよい。出力情報は、公知の様態で1または複数の出力デバイスに適用されてよい。本適用における複数の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)またはマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
【0321】
プログラムコードは、処理システムと通信するために高水準の手順型又はオブジェクト指向プログラミング言語として実装されてよい。プログラムコードはまた、必要な場合、アセンブリ又は機械言語で実装されてもよい。実際に、本明細書に説明されるメカニズムは、いかなる特定のプログラミング言語にも範囲を限定されるものではない。いずれの場合であっても、言語は、コンパイラ型又はインタプリタ型言語であってよい。
【0322】
少なくとも1つの実施形態の1つ又は複数の態様では、プロセッサ内の様々な論理を表す機械可読媒体に格納される代表的な命令により実装されてよく、これは、機械により読み出される場合、本明細書で説明される技術を実行させる論理を機械に構築させる。「IPコア」として知られるそのような表現は、有形の機械可読媒体上に格納され、論理又はプロセッサを実際に作る製造機械にロードするために、様々な顧客又は製造施設に供給されてよい。
【0323】
そのような機械可読記録媒体は、例えば、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD-ROM)、コンパクトディスクリライタブル(CD-RW)及び磁気-光ディスク、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、例えばダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)、磁気又は光カード又は電子命令を格納するのに適したその他のタイプの媒体等の半導体デバイスを含む任意のその他のタイプのディスク等の記憶媒体を含む、マシン又はデバイスにより製造又は形成される非一時的な有形の構成をした物品を限定することなく含んでよい。
【0324】
従って、本開示の複数の実施形態はまた、命令を含む又は設計データ、例えば、本明細書で説明される構造、回路、装置、プロセッサ及び/又はシステムの機能を定義するハードウェア記述言語(HDL)を含む非一時的な有形の機械可読媒体を含む。そのような実施形態は、また、プログラム製品と称され得る。
エミュレーション(バイナリ変換、コードモーフィング等を含む)
【0325】
いくつかの場合において、ソース命令セットからターゲット命令セットに命令を変換するために、命令コンバータが用いられてよい。例えば、命令コンバータは、命令を、コアにより処理される1つ又は複数の他の命令に、(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して)翻訳、モーフィング、エミュレート又は他の方法で、変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装されてよい。命令コンバータは、プロセッサ上、プロセッサ外、又は、プロセッサ上の一部及びプロセッサ外の一部にあってよい。
【0326】
図37は、ソース命令セットにおけるバイナリ命令を、本開示の複数の実施形態に係るターゲット命令セットにおけるバイナリ命令へ変換するソフトウェア命令コンバータの使用を対比したブロック図である。例示された実施形態では、命令コンバータはソフトウェア命令コンバータであるが、代替的に、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア又はそれらの様々な組み合わせで実装されてよい。
図37は、高水準言語3702でのプログラムが、少なくとも1つのx86命令セットコアを有するプロセッサ3716によりネイティブで実行されることができるx86バイナリコード3706を生成するようにx86コンパイラ3704を使用してコンパイルされることができることを示す。少なくとも1つのx86命令セットコアを有するプロセッサ3716は、少なくとも1つのx86命令セットコアを有するインテル社製プロセッサと実質的に同じ結果を実現すべく、(1)インテルx86命令セットコアの命令セットの大部分、もしくは(2)少なくとも1つのx86命令セットコアを有するインテル社製プロセッサ上で動作することをターゲットとしたアプリケーション又は他のソフトウェアのオブジェクトコードバージョンを互換的に実行するか、又は他の方法で処理することによって、少なくとも1つのx86命令セットコアを有するインテル社製プロセッサと実質的に同じ機能を実行可能な任意のプロセッサを表す。x86コンパイラ3704は、追加のリンク処理があってもなくても、少なくとも1つのx86命令セットコアを搭載するプロセッサ3716上で実行され得るx86バイナリコード3706(例えば、オブジェクトコード)を生成するよう動作可能なコンパイラを表す。同様に、
図37は、少なくとも1つのx86命令セットコアを有さないプロセッサ3714(例えば、カリフォルニア州サニーベールのMIPSテクノロジーズ社のMIPS命令セットを実行する、及び/又はカリフォルニア州サニーベールのARMホールディングス社のARM命令セットを実行するコアを有するプロセッサ)によってネイティブで実行されることができる代替的な命令セットバイナリコード3710を生成するために、高水準言語3702のプログラムが、代替的な命令セットコンパイラ3708を使用してコンパイルされることができることを示す。命令コンバータ3712は、x86バイナリコード3706を、x86命令セットコアを有さないプロセッサ3714によりネイティブで実行されることができるコードに変換するために用いられる。この変換されたコードは、代替的な命令セットバイナリコード3710と同じである可能性が低い。なぜなら、この変換が可能な命令コンバータは作成が困難だからである。しかしながら、変換されたコードは、一般的なオペレーションを実現し、代替的な命令セットからの命令で構成される。故に、命令コンバータ3712は、ソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせを表わし、それらは、エミュレーション、シミュレーションまたは任意の他の処理を介して、x86命令セットプロセッサまたはコアを有さないプロセッサまたは他の電子デバイスが、x86バイナリコード3706を実行可能にする。
【0327】
他の可能な項目
[項目1]
融合積和回路の2次元グリッドを有する行列演算アクセラレータ回路と、
上記行列演算アクセラレータ回路に結合される少なくとも1つの第1入力2次元行列を表す第1の複数のレジスタと、
上記行列演算アクセラレータ回路に結合される少なくとも1つの第2入力2次元行列を表す第2の複数のレジスタと、
上記行列演算アクセラレータ回路に結合されるコアの復号器であって、単一の命令を、復号された単一の命令へと復号し、上記単一の命令が結果として得られるストレージを識別するフィールドを有する、復号器と、
上記復号された単一の命令を実行する上記コアの実行回路と
を備え、
上記コアの実行回路が、上記行列演算アクセラレータ回路を、上記2次元グリッドの融合積和回路の第1の適切なサブセットのそれぞれについての各出力が下流の上記2次元グリッドの融合積和回路の第2の適切なサブセットのそれぞれについての各入力へと送信されると、上記少なくとも1つの第1入力2次元行列及び上記少なくとも1つの第2入力2次元行列からの出力値を形成し、かつ上記結果として得られるストレージに上記出力値を格納する第1のモードから、上記2次元グリッドの融合積和回路の上記第1の適切なサブセットのそれぞれについての上記各出力が、上記少なくとも1つの第1入力2次元行列及び上記少なくとも1つの第2入力2次元行列の第1のサブセットからの第1の出力値を形成し、かつ上記結果として得られるストレージに上記第1の出力値を格納し、上記2次元グリッドの融合積和回路の上記第2の適切なサブセットのそれぞれについての各出力が、上記少なくとも1つの第1入力2次元行列及び上記少なくとも1つの第2入力2次元行列の第2のサブセットからの第2の出力値を形成し、かつ上記結果として得られるストレージに上記第2の出力値を格納する第2のモードへとスイッチする、装置。
[項目2]
上記行列演算アクセラレータ回路が、上記第2のフィールドが第1の値である場合には上記第1のモードで実行し、上記第2のフィールドが第2の値である場合には上記第2のモードで実行することを示す第2のフィールドを、上記単一の命令が有する、項目1に記載の装置。
[項目3]
上記第2のフィールドは、上記単一の命令の即値である、項目2に記載の装置。
[項目4]
上記結果として得られるストレージが、上記復号された単一の命令を実行することで形成される少なくとも1つの出力2次元行列を表す第3の複数のレジスタである、項目1に記載の装置。
[項目5]
上記復号された単一の命令を実行することが、
上記第1のモードでは、上記第3の複数のレジスタに最初に格納される少なくとも1つの第3入力2次元行列を表す上記第3の複数のレジスタからの値を上記出力値に加算して、更新された出力値を形成し、上記更新された出力値を上記出力値に代えて、上記結果として得られるストレージに格納することであり、
上記第2のモードでは、上記第3の複数のレジスタに最初に格納される上記少なくとも1つの第3入力2次元行列からの値を上記第1の出力値及び上記第2の出力値に加算して、更新された第1の出力値及び更新された第2の出力値を形成し、上記更新された第1の出力値及び上記更新された第2の出力値を、上記第1の出力値及び上記第2の出力値に代えて、上記結果として得られるストレージに格納することである、項目4に記載の装置。
[項目6]
上記復号された単一の命令を実行することが、
上記第1のモードでは、第3の複数のレジスタに最初に格納される少なくとも1つの第3入力2次元行列からの値を上記出力値に加算して、更新された出力値を形成し、上記更新された出力値を上記出力値に代えて、上記結果として得られるストレージに格納することであり、
上記第2のモードでは、上記第3の複数のレジスタに最初に格納される上記少なくとも1つの第3入力2次元行列からの値を上記第1の出力値及び上記第2の出力値に加算して、更新された第1の出力値及び更新された第2の出力値を形成し、上記更新された第1の出力値及び上記更新された第2の出力値を、上記第1の出力値及び上記第2の出力値に代えて、上記結果として得られるストレージに格納することである、項目1に記載の装置。
[項目7]
上記結果として得られるストレージは、上記復号された単一の命令を実行することで形成される複数の出力2次元行列を表す第3の複数のレジスタである、項目1に記載の装置。
[項目8]
上記融合積和回路の第1の適切なサブセットは、上記融合積和回路の2次元グリッドにおける行または列の1つであり、
上記融合積和回路の第2の適切なサブセットは、上記融合積和回路の2次元グリッドにおける上記行または上記列の他方の上記1つである、項目1に記載の装置。
[項目9]
プロセッサコアの復号器で単一の命令を復号された単一の命令に復号する段階であって、上記プロセッサコアが融合積和回路の2次元グリッドを有する行列演算アクセラレータ回路に結合され、上記行列演算アクセラレータ回路が少なくとも1つの第1入力2次元行列を表す第1の複数のレジスタ及び少なくとも1つの第2入力2次元行列を表す第2の複数のレジスタに結合され、上記単一の命令が結果として得られるストレージを識別するフィールドを有する、段階と、
上記復号された単一の命令を上記プロセッサコアの実行回路で実行する段階と
を備え、
上記実行する段階が、上記行列演算アクセラレータ回路を、上記2次元グリッドの融合積和回路の第1の適切なサブセットのそれぞれについての各出力が下流の上記2次元グリッドの融合積和回路の第2の適切なサブセットのそれぞれについての各入力へと送信されると、上記少なくとも1つの第1入力2次元行列及び上記少なくとも1つの第2入力2次元行列からの出力値を形成し、かつ上記結果として得られるストレージに上記出力値を格納する第1のモードから、上記2次元グリッドの融合積和回路の上記第1の適切なサブセットのそれぞれについての上記各出力が、上記少なくとも1つの第1入力2次元行列及び上記少なくとも1つの第2入力2次元行列の第1のサブセットからの第1の出力値を形成し、かつ上記結果として得られるストレージに上記第1の出力値を格納し、上記2次元グリッドの融合積和回路の上記第2の適切なサブセットのそれぞれについての各出力が、上記少なくとも1つの第1入力2次元行列及び上記少なくとも1つの第2入力2次元行列の第2のサブセットからの第2の出力値を形成し、かつ上記結果として得られるストレージに上記第2の出力値を格納する第2のモードへとスイッチする、方法。
[項目10]
上記行列演算アクセラレータ回路が、上記第2のフィールドが第1の値である場合には上記第1のモードで実行し、上記第2のフィールドが第2の値である場合には上記第2のモードで実行することを示す第2のフィールドを、上記単一の命令が有する、項目9に記載の方法。
[項目11]
上記第2のフィールドは、上記単一の命令の即値である、項目10に記載の方法。
[項目12]
上記結果として得られるストレージが、上記復号された単一の命令を実行することで形成される少なくとも1つの出力2次元行列を表す第3の複数のレジスタである、項目9に記載の方法。
[項目13]
上記復号された単一の命令を実行する段階が、
上記第1のモードでは、上記第3の複数のレジスタに最初に格納される少なくとも1つの第3入力2次元行列を表す上記第3の複数のレジスタからの値を上記出力値に加算して、更新された出力値を形成し、上記更新された出力値を上記出力値に代えて、上記結果として得られるストレージに格納することであり、
上記第2のモードでは、上記第3の複数のレジスタに最初に格納される上記少なくとも1つの第3入力2次元行列からの値を上記第1の出力値及び上記第2の出力値に加算して、更新された第1の出力値及び更新された第2の出力値を形成し、上記更新された第1の出力値及び上記更新された第2の出力値を、上記第1の出力値及び上記第2の出力値に代えて、上記結果として得られるストレージに格納することである、項目12に記載の方法。
[項目14]
上記復号された単一の命令を実行する段階が、
上記第1のモードでは、第3の複数のレジスタに最初に格納される少なくとも1つの第3入力2次元行列からの値を上記出力値に加算して、更新された出力値を形成し、上記更新された出力値を上記出力値に代えて、上記結果として得られるストレージに格納することであり、
上記第2のモードでは、上記第3の複数のレジスタに最初に格納される上記少なくとも1つの第3入力2次元行列からの値を上記第1の出力値及び上記第2の出力値に加算して、更新された第1の出力値及び更新された第2の出力値を形成し、上記更新された第1の出力値及び上記更新された第2の出力値を、上記第1の出力値及び上記第2の出力値に代えて、上記結果として得られるストレージに格納することである、項目9に記載の方法。
[項目15]
上記結果として得られるストレージは、上記復号された単一の命令を実行することで形成される複数の出力2次元行列を表す第3の複数のレジスタである、項目9に記載の方法。
[項目16]
上記融合積和回路の第1の適切なサブセットは、上記融合積和回路の2次元グリッドにおける行または列の1つであり、
上記融合積和回路の第2の適切なサブセットは、上記融合積和回路の2次元グリッドにおける上記行または上記列の他方の上記1つである、項目9に記載の方法。
[項目17]
コードを格納する非一時的機械読み出し可能媒体であって、機械に実行された場合に上記機械に方法を実行させ、上記方法が、
プロセッサコアの復号器で単一の命令を復号された単一の命令に復号する段階であって、上記プロセッサコアが融合積和回路の2次元グリッドを有する行列演算アクセラレータ回路に結合され、上記行列演算アクセラレータ回路が少なくとも1つの第1入力2次元行列を表す第1の複数のレジスタ及び少なくとも1つの第2入力2次元行列を表す第2の複数のレジスタに結合され、上記単一の命令が結果として得られるストレージを識別するフィールドを有する、段階と、
上記復号された単一の命令を上記プロセッサコアの実行回路で実行する段階と
を備え、
上記実行する段階が、上記行列演算アクセラレータ回路を、上記2次元グリッドの融合積和回路の第1の適切なサブセットのそれぞれについての各出力が下流の上記2次元グリッドの融合積和回路の第2の適切なサブセットのそれぞれについての各入力へと送信されると、上記少なくとも1つの第1入力2次元行列及び上記少なくとも1つの第2入力2次元行列からの出力値を形成し、かつ上記結果として得られるストレージに上記出力値を格納する第1のモードから、上記2次元グリッドの融合積和回路の上記第1の適切なサブセットのそれぞれについての上記各出力が、上記少なくとも1つの第1入力2次元行列及び上記少なくとも1つの第2入力2次元行列の第1のサブセットからの第1の出力値を形成し、かつ上記結果として得られるストレージに上記第1の出力値を格納し、上記2次元グリッドの融合積和回路の上記第2の適切なサブセットのそれぞれについての各出力が、上記少なくとも1つの第1入力2次元行列及び上記少なくとも1つの第2入力2次元行列の第2のサブセットからの第2の出力値を形成し、かつ上記結果として得られるストレージに上記第2の出力値を格納する第2のモードへとスイッチする、非一時的機械読み出し可能媒体。
[項目18]
上記行列演算アクセラレータ回路が、上記第2のフィールドが第1の値である場合には上記第1のモードで実行し、上記第2のフィールドが第2の値である場合には上記第2のモードで実行することを示す第2のフィールドを、上記単一の命令が有する、項目17に記載の非一時的機械読み出し可能媒体。
[項目19]
上記第2のフィールドは、上記単一の命令の即値である、項目18に記載の非一時的機械読み出し可能媒体。
[項目20]
上記結果として得られるストレージが、上記復号された単一の命令を実行することで形成される少なくとも1つの出力2次元行列を表す第3の複数のレジスタである、項目17に記載の非一時的機械読み出し可能媒体。
[項目21]
上記復号された単一の命令を実行する段階が、
上記第1のモードでは、上記第3の複数のレジスタに最初に格納される少なくとも1つの第3入力2次元行列を表す上記第3の複数のレジスタからの値を上記出力値に加算して、更新された出力値を形成し、上記更新された出力値を上記出力値に代えて、上記結果として得られるストレージに格納することであり、
上記第2のモードでは、上記第3の複数のレジスタに最初に格納される上記少なくとも1つの第3入力2次元行列からの値を上記第1の出力値及び上記第2の出力値に加算して、更新された第1の出力値及び更新された第2の出力値を形成し、上記更新された第1の出力値及び上記更新された第2の出力値を、上記第1の出力値及び上記第2の出力値に代えて、上記結果として得られるストレージに格納することである、項目20に記載の非一時的機械読み出し可能媒体。
[項目22]
上記復号された単一の命令を実行する段階が、
上記第1のモードでは、第3の複数のレジスタに最初に格納される少なくとも1つの第3入力2次元行列からの値を上記出力値に加算して、更新された出力値を形成し、上記更新された出力値を上記出力値に代えて、上記結果として得られるストレージに格納することであり、
上記第2のモードでは、上記第3の複数のレジスタに最初に格納される上記少なくとも1つの第3入力2次元行列からの値を上記第1の出力及び上記第2の出力に加算して、更新された第1の出力値及び更新された第2の出力値を形成し、上記更新された第1の出力値及び上記更新された第2の出力値を、上記第1の出力値及び上記第2の出力値に代えて、上記結果として得られるストレージに格納することである、項目17に記載の非一時的機械読み出し可能媒体。
[項目23]
上記結果として得られるストレージは、上記復号された単一の命令を実行することで形成される複数の出力2次元行列を表す第3の複数のレジスタである、項目17に記載の非一時的機械読み出し可能媒体。
[項目24]
上記融合積和回路の第1の適切なサブセットは、上記融合積和回路の2次元グリッドにおける行または列の1つであり、
上記融合積和回路の第2の適切なサブセットは、上記融合積和回路の2次元グリッドにおける上記行または上記列の他方の上記1つである、項目17に記載の非一時的機械読み出し可能媒体。