IP Force 特許公報掲載プロジェクト 2022.1.31 β版

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

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

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-05
(45)【発行日】2024-11-13
(54)【発明の名称】行列演算の最適化メカニズム
(51)【国際特許分類】
   G06F 17/16 20060101AFI20241106BHJP
   G06N 3/10 20060101ALI20241106BHJP
【FI】
G06F17/16 C
G06N3/10
G06F17/16 B
【請求項の数】 21
【外国語出願】
(21)【出願番号】P 2020187255
(22)【出願日】2020-11-10
(65)【公開番号】P2021190066
(43)【公開日】2021-12-13
【審査請求日】2023-09-01
(31)【優先権主張番号】16/890,122
(32)【優先日】2020-06-02
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】ジョイディープ レイ
(72)【発明者】
【氏名】ファンウェン フ
(72)【発明者】
【氏名】ディラージ ディー. カラムカー
(72)【発明者】
【氏名】サシカンス アヴァンチャ
【審査官】坂東 博司
(56)【参考文献】
【文献】特開2008-077590(JP,A)
【文献】特表2017-520873(JP,A)
【文献】特開2018-132901(JP,A)
【文献】特開2008-003708(JP,A)
【文献】特開平6-110446(JP,A)
【文献】米国特許出願公開第2019/042202(US,A1)
【文献】米国特許第5095301(US,A)
【文献】米国特許第8539201(US,B2)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/16
G06N 3/10
(57)【特許請求の範囲】
【請求項1】
機械学習行列処理を容易にする装置であって、
行列データを格納するメモリと、
命令に含まれるメッセージ記述子を調べて、実行されるべき行列レイアウト操作演算のタイプを決定し、
取り出されるべき2次元(2D)メモリ面を定義する複数のパラメータを有する前記命令に含まれるメッセージヘッダを調べ、
前記複数のパラメータに基づいて前記メモリから前記行列データの1つまたは複数のブロックを取り出すための、命令を実行する1つまたは複数のプロセッサと、
複数のレジスタを含むレジスタファイルとを備え、
前記行列データの前記1つまたは複数のブロックは、前記複数のレジスタの第1のセット内に格納されている、装置。
【請求項2】
前記複数のパラメータは、メモリから取り出すブロックの量を示す配列長の属性を含む、請求項1に記載の装置。
【請求項3】
前記複数のパラメータは、前記1つまたは複数のブロックのそれぞれの幅、高さ、およびピッチを定義する属性をさらに含む、請求項2に記載の装置。
【請求項4】
前記メッセージ記述子は、転置演算を伴った2Dブロックの読み出しが実行されるべきであることを示す、請求項3に記載の装置。
【請求項5】
前記1つまたは複数のプロセッサは、前記行列データの前記1つまたは複数のブロックのそれぞれに対して転置演算を実行し、転置された前記行列データを前記複数のレジスタの前記第1のセットに格納する、請求項4に記載の装置。
【請求項6】
前記メッセージ記述子は、変換演算を伴った2Dブロックの読み出しが実行されるべきであることを示す、請求項3に記載の装置。
【請求項7】
前記1つまたは複数のプロセッサは、前記行列データの前記1つまたは複数のブロックのそれぞれに対して変換演算を実行し、変換された前記行列データの前記1つまたは複数のブロックを前記複数のレジスタの前記第1のセットに格納する、請求項6に記載の装置。
【請求項8】
前記メッセージ記述子は、転置および変換演算を伴った2Dブロックの読み出しが実行されるべきであることを示す、請求項3に記載の装置。
【請求項9】
機械学習行列処理を容易にする方法であって、
命令に含まれるメッセージ記述子を調べて、実行されるべき行列レイアウト操作演算のタイプを決定することと、
取り出されるべき2次元(2D)メモリ面を定義する複数のパラメータを有する前記命令に含まれるメッセージヘッダを調べることと、
前記複数のパラメータに基づいてメモリから行列データの1つまたは複数のブロックを取り出すことと、
前記行列データの前記1つまたは複数のブロックを、複数のレジスタの第1のセット内に格納することとを含む、方法。
【請求項10】
前記複数のパラメータは、メモリから取り出すブロックの量を示す配列長の属性を含む、請求項9に記載の方法。
【請求項11】
前記複数のパラメータは、前記1つまたは複数のブロックのそれぞれの幅、高さ、およびピッチを定義する属性をさらに含む、請求項10に記載の方法。
【請求項12】
前記メッセージ記述子は、転置演算を伴った2Dブロックの読み出しが実行されるべきであることを示す、請求項9に記載の方法。
【請求項13】
前記転置演算は、
前記行列データの前記1つまたは複数のブロックのそれぞれに対して転置演算を実行することと、
転置された前記行列データの前記1つまたは複数のブロックを前記複数のレジスタの前記第1のセットに格納することとを含む、請求項12に記載の方法。
【請求項14】
前記メッセージ記述子は、変換演算を伴った2Dブロックの読み出しが実行されるべきであることを示す、請求項11に記載の方法。
【請求項15】
前記変換演算は、前記行列データの前記1つまたは複数のブロックのそれぞれに対して変換演算を実行することと、
変換された前記行列データの前記1つまたは複数のブロックを前記複数のレジスタの前記第1のセットに格納することとを含む、請求項14に記載の方法。
【請求項16】
プログラムであって、コンピュータに、
命令に含まれるメッセージ記述子を調べて、実行されるべき行列レイアウト操作演算のタイプを決定させ、
取り出されるべき2次元(2D)メモリ面を定義する複数のパラメータを有する前記命令に含まれるメッセージヘッダを調べさせ、
前記複数のパラメータに基づいてメモリから行列データの1つまたは複数のブロックを取り出させ、
前記行列データの前記1つまたは複数のブロックを、複数のレジスタの第1のセット内に格納させる、プログラム。
【請求項17】
前記複数のパラメータは、メモリから取り出すブロックの量を示す配列長の属性を含む、請求項16に記載のプログラム。
【請求項18】
前記複数のパラメータは、前記1つまたは複数のブロックのそれぞれの幅、高さおよびピッチを定義する属性をさらに含む、請求項17に記載のプログラム。
【請求項19】
前記メッセージ記述子は、転置演算を伴った2Dブロックの読み出しが実行されるべきであることを示す、請求項18に記載のプログラム。
【請求項20】
前記メッセージ記述子は、変換演算を伴った2Dブロックの読み出しが実行されるべきであることを示す、請求項18に記載のプログラム。
【請求項21】
請求項16から20のいずれか一項に記載のプログラムを格納するコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
ディープラーニングアルゴリズムは、現在、音声/動画認識、動画要約など、様々な機械学習アプリケーションで実装されている。様々な形式のニューラルネットワーク(例えば、畳み込みニューラルネットワーク(CNN)、再帰型ニューラルネットワーク(RNN)、長短期記憶(LSTM)など)は、それらの高い並列性のため、このようなワークロードを実行するために適用される。機械学習アプリケーションは通常、かなりの割合のゼロを持つ行列乗算ワークロードを実装する(例えば、疎行列など)。
【0002】
ディープラーニング(または機械学習)のカーネルは、算術命令を実行する前に入力データのレイアウト操作を実行するために必要なリソースにより、しばしば計算利用率が低いことがある。たいていのフレームワーク(例えば、Tensorflowなど)は、機械学習演算で直接消費することができないデータレイアウト・フォーマットを標準化している。例えば、重み行列は、乗算を実行する前に転置される必要がある場合がある。しかし、ソフトウェアで転置演算(または変換演算などの他の演算)を実行すると、過剰な量のクロックサイクルを消費し、グラフィックス計算のパフォーマンスを低下させる。
【図面の簡単な説明】
【0003】
本実施形態の上述した特徴を詳細に理解できるように、上記の簡単に要約した実施形態のより具体的な説明は、実施形態を参照することによって得られるかもしれないが、そのうちのいくつかは、添付の図面に図示される。しかしながら、添付の図面は、典型的な実施形態のみを図示しており、したがって、その範囲を限定するものとみなされるべきではないことに留意されたい。
【0004】
図1】一実施形態に係る処理システムのブロック図である。
【0005】
図2A】本明細書に記載された実施形態によって提供されるコンピューティングシステムおよびグラフィックスプロセッサを示す。
図2B】本明細書に記載された実施形態によって提供されるコンピューティングシステムおよびグラフィックスプロセッサを示す。
図2C】本明細書に記載された実施形態によって提供されるコンピューティングシステムおよびグラフィックスプロセッサを示す。
図2D】本明細書に記載された実施形態によって提供されるコンピューティングシステムおよびグラフィックスプロセッサを示す。
【0006】
図3A】実施形態によって提供される追加のグラフィックスプロセッサおよび計算アクセラレータ・アーキテクチャのブロック図を示す。
図3B】実施形態によって提供される追加のグラフィックスプロセッサおよび計算アクセラレータ・アーキテクチャのブロック図を示す。
図3C】実施形態によって提供される追加のグラフィックスプロセッサおよび計算アクセラレータ・アーキテクチャのブロック図を示す。
【0007】
図4】いくつかの実施形態に従ったグラフィックスプロセッサのグラフィック処理エンジンのブロック図である。
【0008】
図5A】実施形態に係るグラフィックスプロセッサコアに採用される処理要素の配列を含むスレッド実行ロジックを示す。
図5B】実施形態に係るグラフィックスプロセッサコアに採用される処理要素の配列を含むスレッド実行ロジックを示す。
【0009】
図6】一実施形態に係る追加の実行ユニットを示す。
【0010】
図7】いくつかの実施形態に係るグラフィックスプロセッサの命令フォーマットを示すブロック図である。
【0011】
図8】別の実施形態に係るグラフィックスプロセッサのブロック図である。
【0012】
図9A】いくつかの実施形態に係るグラフィックスプロセッサのコマンドフォーマットおよびコマンドシーケンスを示す。
図9B】いくつかの実施形態に係るグラフィックスプロセッサのコマンドフォーマットおよびコマンドシーケンスを示す。
【0013】
図10】いくつかの実施形態に係るデータ処理システムのための例示的なグラフィック・ソフトウェア・アーキテクチャを示す。
【0014】
図11A】一実施形態に係る集積回路パッケージアセンブリを示す。
図11B】一実施形態に係る集積回路パッケージアセンブリを示す。
図11C】一実施形態に係る集積回路パッケージアセンブリを示す。
図11D】一実施形態に係る集積回路パッケージアセンブリを示す。
【0015】
図12】一実施形態に係る例示的なシステム・オン・チップ集積回路を示すブロック図である。
【0016】
図13A】追加の例示的なグラフィックスプロセッサを例示するブロック図である。
図13B】追加の例示的なグラフィックスプロセッサを例示するブロック図である。
【0017】
図14】実施形態に係る機械学習ソフトウェアスタックを示す。
【0018】
図15A】例示的なディープニューラルネットワークの層を示す。
図15B】例示的なディープニューラルネットワークの層を示す。
【0019】
図16】例示的な再帰型ニューラルネットワークを示す。
【0020】
図17】ディープニューラルネットワークの訓練と展開を示す。
【0021】
図18】分散学習を示すブロック図である。
【0022】
図19】実施形態に係るデータ処理システムのブロック図である。
【0023】
図20】行列演算の一実施形態を示す。
【0024】
図21】メッセージに関連付けられたデータブロックの一実施形態を示す。
【0025】
図22】ブロックメッセージの一実施形態を示す。
【0026】
図23A】2Dブロックの読み出し操作の実施形態を示すフロー図である。
図23B】2Dブロックの読み出し操作の実施形態を示すフロー図である。
【0027】
図24】メッセージに関連付けられたデータブロックの別の実施形態を示す。
【0028】
図25】レジスタファイルに格納されたデータブロックの一実施形態を示す。
【0029】
図26A】転置演算を伴った2Dブロックの読み出しの実施形態を示すフロー図である。
図26B】転置演算を伴った2Dブロックの読み出しの実施形態を示すフロー図である。
【0030】
図27A】レジスタファイルに格納されたデータブロックの他の実施形態を示す。
図27B】レジスタファイルに格納されたデータブロックの他の実施形態を示す。
【0031】
図28A】変換演算を伴った2Dブロックの読み出しの実施形態を示すフロー図である。
図28B】変換演算を伴った2Dブロックの読み出しの実施形態を示すフロー図である。
【0032】
図29】レジスタファイルに格納されたデータブロックのさらに別の実施形態を示している。
【0033】
図30】命令実行処理の一実施形態を示すフロー図である。
【発明を実施するための形態】
【0034】
実施形態では、機械学習行列計算を実行する前に行列レイアウト操作を実行する命令が開示されている。このような実施形態では、命令は、行列レイアウト操作を実行する前に、行列データをメモリから取り出すのに使用される2次元(2D)メモリ表面を定義する。さらなる実施形態では、命令は、メモリから行列データのブロックを取り出すために2Dメモリ表面を定義する複数のパラメータを含む。
システム概要
【0035】
図1は、一実施形態に係る処理システム100のブロック図である。システム100は、単一プロセッサのデスクトップシステム、マルチプロセッサのワークステーションシステム、または多数のプロセッサ102またはプロセッサコア107を有するサーバシステムで使用されてもよい。一実施形態では、システム100は、ローカルまたは広域ネットワークへの有線または無線接続を有するインターネット・オブ・シングス(IoT)デバイス内などのモバイルデバイス、ハンドヘルドデバイス、または組み込みデバイスで使用するためのシステム・オン・チップ(SoC)集積回路内に組み込まれた処理プラットフォームである。
【0036】
一実施形態では、システム100は、サーバベースのゲームプラットフォーム、ゲームおよびメディアコンソールを含むゲームコンソール、モバイルゲームコンソール、ハンドヘルドゲームコンソール、またはオンラインゲームコンソールを含むか、それらと結合するか、またはそれらの中に統合されることができる。いくつかの実施形態では、システム100は、携帯電話、スマートフォン、タブレットコンピューティングデバイス、または低い内部ストレージ容量を有するラップトップなどのモバイルインターネット接続デバイスの一部である。処理システム100はまた、スマートウォッチウェアラブルデバイスのようなウェアラブルデバイス;現実世界の視覚、音声、または触覚体験を補足するための視覚、音声、または触覚出力を提供するか、またはさもなければテキスト、音声、グラフィック、動画、ホログラフィック画像、または動画や触覚のフィードバックを提供するための拡張現実(AR)または仮想現実(VR)の特徴で強化されたスマートアイウェアまたは衣類;他の拡張現実(AR)デバイス;または他の仮想現実(VR)デバイスを含むか、それらと結合するか、またはそれらの中に統合され得る。いくつかの実施形態では、処理システム100は、テレビまたはセットトップボックス装置を備えるか、またはその一部である。一実施形態では、システム100は、バス、トラクタートレーラ、自動車、モータまたは電動サイクル、飛行機またはグライダ(またはそれらの任意の組み合わせ)などの自己運転車両を含むか、それらと結合するか、またはそれらの中に統合されてもよい。自己運転車両は、システム100を使用して、車両の周囲で感知された環境を処理し得る。
【0037】
いくつかの実施形態では、1つまたは複数のプロセッサ102は、実行されるとシステムまたはユーザソフトウェアのための操作を実行する命令を処理する1つまたは複数のプロセッサコア107をそれぞれ含む。いくつかの実施形態では、1つまたは複数のプロセッサコア107の少なくとも1つは、特定の命令セット109を処理するように構成されている。いくつかの実施形態では、命令セット109は、複合命令セットコンピューティング(CISC)、縮小命令セットコンピューティング(RISC)、または超長命令語(VLIW)を介したコンピューティングを促進してもよい。1つまたは複数のプロセッサコア107は、他の命令セットのエミュレーションを容易にするための命令を含み得る、別の命令セット109を処理してもよい。プロセッサコア107は、例えば、デジタルシグナルプロセッサ(DSP)などの他の処理デバイスを含んでもよい。
【0038】
いくつかの実施形態では、プロセッサ102は、キャッシュメモリ104を含む。アーキテクチャに応じて、プロセッサ102は、単一の内部キャッシュまたは複数のレベルの内部キャッシュを有することができる。いくつかの実施形態では、キャッシュメモリは、プロセッサ102の様々なコンポーネント間で共有される。いくつかの実施形態では、プロセッサ102はまた、外部キャッシュ(例えば、レベル3(L3)キャッシュまたはラストレベルキャッシュ(LLC))(図示せず)を使用し、この外部キャッシュは、既知のキャッシュコヒーレンシー技術を用いてプロセッサコア107間で共有されてもよい。レジスタファイル106は、プロセッサ102に追加的に含まれてもよく、異なるタイプのデータを格納するための異なるタイプのレジスタ(例えば、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、および命令ポインタレジスタ)を含んでもよい。レジスタによっては汎用レジスタであってもよく、一方他のレジスタはプロセッサ102の設計に固有のものであってもよい。
【0039】
いくつかの実施形態では、1つまたは複数のプロセッサ(複数可)102は、1つまたは複数のインタフェースバス(複数可)110と結合され、プロセッサ102とシステム100内の他のコンポーネントとの間でアドレス、データ、または制御信号などの通信信号を送信する。一実施形態では、インタフェースバス110は、ダイレクトメディアインタフェース(DMI)バスのバージョンなどのプロセッサバスとし得る。なお、プロセッサバスは、DMIバスに限定されず、1つまたは複数のペリフェラルコンポーネントインターコネクトバス(例えば、PCI、PCIエクスプレス)、メモリバス、または他のタイプのインタフェースバスを含み得る。一実施形態では、プロセッサ(複数可)102は、統合メモリコントローラ116およびプラットフォームコントローラハブ130を含む。統合メモリコントローラ116は、メモリデバイスとシステム100の他のコンポーネントとの間の通信を容易にし、一方プラットフォームコントローラハブ(PCH)130は、ローカルI/Oバスを介してI/Oデバイスへの接続を提供する。
【0040】
メモリデバイス120は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、相変化メモリデバイス、またはプロセスメモリとして機能するのに適した性能を有する他のいくつかのメモリデバイスとし得る。一実施形態では、メモリデバイス120は、システム100用のシステムメモリとして動作し、1つまたは複数のプロセッサ102がアプリケーションまたはプロセスを実行する際に使用するためのデータ122および命令121を格納することができる。メモリコントローラ116はまた、任意の外部グラフィックスプロセッサ118と結合し、このプロセッサは、グラフィックスおよびメディア操作を実行するために、プロセッサ102内の1つまたは複数のグラフィックスプロセッサ108と通信してしてもよい。いくつかの実施形態では、グラフィックス、メディア、および/または計算操作は、グラフィックス、メディア、または計算操作の特殊なセットを実行するように構成され得るコプロセッサであるアクセラレータ112によって支援されてもよい。例えば、一実施形態では、アクセラレータ112は、機械学習または計算操作を最適化するために使用される行列乗算アクセラレータである。一実施形態では、アクセラレータ112は、グラフィックスプロセッサ108と協働してレイトレーシング演算を実行するのに使用することができるレイトレーシングアクセラレータである。一実施形態では、外部アクセラレータ119が、アクセラレータ112の代わりにまたは協働して使用されてもよい。
【0041】
いくつかの実施形態では、ディスプレイデバイス111は、プロセッサ(複数可)102に接続することができる。ディスプレイデバイス111は、モバイル電子デバイスまたはラップトップデバイスのような内部ディスプレイデバイス、またはディスプレイインタフェース(例えば、DisplayPortなど)を介して接続された外部ディスプレイデバイスのうちの1つまたは複数とし得る。一実施形態では、ディスプレイデバイス111は、仮想現実(VR)アプリケーションまたは拡張現実(AR)アプリケーションで使用するための立体視ディスプレイデバイスなどのヘッドマウントディスプレイ(HMD)であり得る。
【0042】
いくつかの実施形態では、プラットフォームコントローラハブ130は、周辺機器を高速I/Oバスを介してメモリデバイス120およびプロセッサ102に接続可能にする。I/O周辺機器は、これらに限定されないが、オーディオコントローラ146、ネットワークコントローラ134、ファームウェアインタフェース128、無線トランシーバ126、タッチセンサ125、データ記憶装置124(例えば、不揮発性メモリ、揮発性メモリ、ハードディスクドライブ、フラッシュメモリ、NAND、3D NAND、3D XPointなど)を含む。データ記憶装置124は、ストレージインタフェース(例えば、SATA)を介して、またはペリフェラルコンポーネントインターコネクトバス(例えば、PCI、PCIエクスプレス)などのペリフェラルバスを介して接続することができる。タッチセンサ125は、タッチスクリーンセンサ、圧力センサ、または指紋センサを含むことができる。無線トランシーバ126は、Wi-Fiトランシーバ、Bluetooth(登録商標)トランシーバ、あるいは3G、4G、5GまたはLTE(Long Term Evolution:ロング・ターム・エヴォリューション)トランシーバなどのモバイルネットワークトランシーバとし得る。ファームウェアインタフェース128は、システムファームウェアとの通信を可能にし、例えば、ユニファイド・エクステンシブル・ファームウェア・インタフェース(UEFI)とし得る。ネットワークコントローラ134は、有線ネットワークへのネットワーク接続を可能にすることができる。いくつかの実施形態では、高性能ネットワークコントローラ(図示せず)はインタフェースバス110と結合する。一実施形態では、オーディオコントローラ146は、高精細のマルチチャンネル・オーディオコントローラである。一実施形態では、システム100は、レガシー(例えば、パーソナルシステム2(PS/2))デバイスをシステムに結合するための任意のレガシーI/Oコントローラ140を含む。プラットフォームコントローラハブ130はまた、キーボードおよびマウス143の組み合わせ、カメラ144、または他のUSB入力デバイスなどの入力デバイスを接続するための1つまたは複数のユニバーサルシリアルバス(USB)コントローラ142に接続することができる。
【0043】
図示されたシステム100は例示的なものであり限定的なものではなく、異なる構成の他のタイプのデータ処理システムも使用され得ることが理解されるであろう。例えば、メモリコントローラ116およびプラットフォームコントローラハブ130の一例は、外部グラフィックスプロセッサ118などの目立たない外部グラフィックスプロセッサに統合されてもよい。一実施形態では、プラットフォームコントローラハブ130および/またはメモリコントローラ116は、1つまたは複数のプロセッサ(複数可)102の外部であってもよい。例えば、システム100は、外部メモリコントローラ116およびプラットフォームコントローラハブ130を含むことができ、これらは、プロセッサ(複数可)102と通信しているシステムチップセット内のメモリコントローラハブおよびペリフェラルコントローラハブとして構成されてもよい。
【0044】
例えば、回路基板(「スレッド」)は、CPUやメモリなどのコンポーネントが設置されて使用することができ、熱性能を向上させるように設計される。いくつかの例では、プロセッサなどの処理コンポーネントはスレッドの上側に配置し、一方、DIMMなどのメモリに近いコンポーネントはスレッドの下側に配置される。この設計によってエアーフローが増強した結果として、コンポーネントは、一般的なシステムよりも高い周波数および電力レベルで動作し得るものであり、それによって性能が向上する。さらに、スレッドは、ラック内の電源ケーブルおよびデータ通信ケーブルと盲目的に嵌合するように構成されており、それにより迅速に取り外し、アップグレード、再インストール、および/または交換する能力が強化される。同様に、プロセッサ、アクセラレータ、メモリ、およびデータストレージドライブなどのスレッド上に配置された個々のコンポーネントは、互いに間隔が広がっているため、容易にアップグレードできるように構成されている。図示した実施形態では、コンポーネントは、その真正性を証明するためにハードウェア認証機能を追加的に含む。
【0045】
データセンターは、イーサネット(登録商標)やオムニパスを含む複数の他のネットワークアーキテクチャをサポートする単一のネットワークアーキテクチャ(「ファブリック」)を利用することができる。スレッドは光ファイバを介してスイッチに結合することができ、典型的なツイストペアケーブル(例えば、カテゴリ5、カテゴリ5e、カテゴリ6など)よりも高い帯域幅と低いレイテンシを提供する。高帯域幅、低いレイテンシの相互接続およびネットワークアーキテクチャのため、データセンターは、使用中に、物理的に離散化されたメモリ、アクセラレータ(例えば、GPU、グラフィックアクセラレータ、FPGA、ASIC、ニューラルネットワークおよび/または人工知能アクセラレータなど)、およびデータストレージドライブなどのリソースをプールし、それらを必要に応じて計算リソース(例えば、プロセッサ)に提供し得ることで、計算リソースがローカルであるかのようにプールされたリソースにアクセスすることを可能にする。
【0046】
電源または電力ソースは、システム100または本明細書に記載された任意のコンポーネントまたはシステムに電圧および/または電流を供給することができる。一例では、電源は、壁コンセントに差し込むためのAC-DC(交流を直流に変換する)アダプタを含む。そのようなAC電源は、再生可能エネルギー(例えば、太陽光発電)電源となり得る。一例では、電源は、外部AC-DCコンバータなどのDC電源を含む。一例では、電力ソースまたは電源は、充電フィールドに近接することにより充電するワイヤレス充電ハードウェアを含む。一例では、電力ソースは、内部バッテリ、交流電源、モーションベース電源、太陽電池電源、または燃料電池源を含むことができる。
【0047】
図2A~2Dは、本明細書に記載された実施形態によって提供されるコンピューティングシステムおよびグラフィックスプロセッサを示す。本明細書の任意の他の図面中の要素と同じ参照番号(または名称)を有する図2A~2D中の要素は、本明細書の他の箇所に記載されたものと同様の方法で動作または機能することができるが、これらに限定されるものではない。
【0048】
図2Aは、1つまたは複数のプロセッサコア202A~202N、統合メモリコントローラ214、および統合グラフィックスプロセッサ208を有するプロセッサ200の一実施形態のブロック図である。プロセッサ200は、破線で囲んだボックスで表される追加のコア202Nまで、およびそれを含む追加のコアを含むことができる。プロセッサコア202A~202Nの各々は、1つまたは複数の内部キャッシュユニット204A~204Nを含む。いくつかの実施形態では、各プロセッサコアはまた、1つまたは複数の共有キャッシュユニット206へのアクセスを有する。内部キャッシュユニット204A~204Nおよび共有キャッシュユニット206は、プロセッサ200内のキャッシュメモリ階層を表す。キャッシュメモリ階層は、各プロセッサコア内の少なくとも1つのレベルの命令およびデータキャッシュと、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他のレベルのキャッシュなどの、1つまたは複数のレベルの共有された中間レベルのキャッシュを含んでもよく、ここでは、外部メモリよりも前の最高レベルのキャッシュがLLCとして分類される。いくつかの実施形態では、キャッシュコヒーレンシロジックは、様々な共有キャッシュユニット206と204A~204Nとの間のコヒーレンシを維持する。
【0049】
いくつかの実施形態では、プロセッサ200はまた、1つまたは複数のバスコントローラユニット216とシステムエージェントコア210とからなるセットを含んでもよい。1つまたは複数のバスコントローラユニット216は、1つまたは複数のPCIまたはPCIエクスプレスバスなどの周辺バスのセットを管理する。システムエージェントコア210は、様々なプロセッサコンポーネントの管理機能を提供する。いくつかの実施形態では、システムエージェントコア210は、様々な外部メモリデバイス(図示せず)へのアクセスを管理するための1つまたは複数の統合メモリコントローラ214を含む。
【0050】
いくつかの実施形態では、プロセッサコア202A~202Nのうちの1つまたは複数は、同時マルチスレッド処理のサポートを含む。そのような実施形態では、システムエージェントコア210は、マルチスレッド処理中にプロセッサコア202A~202Nを整合および動作させるためのコンポーネントを含む。システムエージェントコア210は、プロセッサコア202A~202Nおよびグラフィックスプロセッサ208の電力状態を調整するロジックおよびコンポーネントを含む電力制御ユニット(PCU)を追加的に含んでもよい。
【0051】
いくつかの実施形態では、プロセッサ200は、グラフィックス処理操作を実行するためのグラフィックスプロセッサ208を追加的に含む。いくつかの実施形態では、グラフィックスプロセッサ208は、共有キャッシュユニット206のセット、および1つまたは複数の統合メモリコントローラ214を含むシステムエージェントコア210に結合する。いくつかの実施形態では、システムエージェントコア210はまた、1つまたは複数の結合されたディスプレイへのグラフィックスプロセッサの出力を駆動するためのディスプレイコントローラ211を含む。いくつかの実施形態では、ディスプレイコントローラ211はまた、少なくとも1つの相互接続を介してグラフィックスプロセッサと結合された別個のモジュールであってもよく、またはグラフィックスプロセッサ208内に統合されていてもよい。
【0052】
いくつかの実施形態では、リングベースの相互接続ユニット212を使用して、プロセッサ200の内部コンポーネント同士を結合する。なお、ポイントツーポイント相互接続、スイッチド相互接続、または当技術分野で周知の技術を含む他の技術などの代替の相互接続ユニットを使用してもよい。いくつかの実施形態では、グラフィックスプロセッサ208は、I/Oリンク213を介してリング相互接続212と結合する。
【0053】
例示的なI/Oリンク213は、様々なプロセッサコンポーネントと、eDRAMモジュールなどの高性能な組込みメモリモジュール218との間の通信を容易にするオンパッケージI/O相互接続を含む、複数の種類のI/O相互接続のうちの少なくとも1つを表す。いくつかの実施形態では、プロセッサコア202A~202Nおよびグラフィックスプロセッサ208の各々は、組込みメモリモジュール218を共有ラストレベルキャッシュとして使用することができる。
【0054】
いくつかの実施形態では、プロセッサコア202A~202Nは、同じ命令セットアーキテクチャを実行する均質なコアである。別の実施形態では、プロセッサコア202A~202Nは、命令セットアーキテクチャ(ISA)の点で異なっており、ここで、プロセッサコア202A~202Nのうちの1つまたは複数は、第1の命令セットを実行し、他のコアのうちの少なくとも1つは第1の命令セットのサブセットを実行するか、または異なる命令セットを実行する。一実施形態では、プロセッサコア202A~202Nは、マイクロアーキテクチャの点で異なっており、ここで、比較的高い消費電力を有する1つまたは複数のコアが、より低い消費電力を有する1つまたは複数のパワーコアと結合している。一実施形態では、プロセッサコア202A~202Nは、計算能力の点で異なっている。加えて、プロセッサ200は、他のコンポーネントに加えて、1つまたは複数のチップ上に、または図示されたコンポーネントを有するSoC集積回路として実装され得る。
【0055】
図2Bは、本明細書に記載されたいくつかの実施形態に係るグラフィックスプロセッサコア219のハードウェアロジックのブロック図である。本明細書の任意の他の図の要素と同じ参照番号(または名称)を有する図2B中の要素は、本明細書の他の箇所で説明されたものと同様の方法で動作または機能することができるが、これらに限定されない。グラフィックスプロセッサコア219は、コアスライスと呼ばれることもあり、モジュラーグラフィックスプロセッサ内の1つまたは複数のグラフィックスコアであってもよい。グラフィックスプロセッサコア219は、1つのグラフィックスコアスライスの例示的なものであり、本明細書に記載されるようなグラフィックスプロセッサは、目標電力および性能エンベロープに基づいて、複数のグラフィックスコアスライスを含み得る。各グラフィックスプロセッサコア219は、汎用および固定関数ロジックのモジュールブロックを含む、サブスライスとも呼ばれる複数のサブコア221A~221Fに結合された固定関数ブロック230を含むことができる。
【0056】
いくつかの実施形態では、固定関数ブロック230は、例えば、より低い性能および/またはより低い電力のグラフィックスプロセッサ実装において、グラフィックスプロセッサコア219内の全てのサブコアによって共有され得るジオメトリ/固定関数パイプライン231を含む。様々な実施形態では、ジオメトリ/固定関数パイプライン231は、3D固定関数パイプライン(例えば、後述する図3A図3Cおよび図4の3Dパイプライン312)、動画フロントエンドユニット、スレッドスポーナおよびスレッドディスパッチャ、ならびに統一リターンバッファ(例えば、後述する図4の統一リターンバッファ418)を管理する統一リターンバッファマネージャを含む。
【0057】
一実施形態では、固定関数ブロック230はまた、グラフィックスSoCインタフェース232、グラフィックスマイクロコントローラ233、およびメディアパイプライン234を含む。グラフィックスSoCインタフェース232は、グラフィックスプロセッサコア219と、システム・オン・チップ集積回路内の他のプロセッサコアとの間のインタフェースを提供する。グラフィックスマイクロコントローラ233は、スレッドディスパッチ、スケジューリング、およびプリエンプションを含むグラフィックスプロセッサコア219の様々な機能を管理するように構成可能なプログラマブル・サブプロセッサである。メディアパイプライン234(例えば、図3A図3Cおよび図4のメディアパイプライン316)は、画像データおよび動画データを含むマルチメディアデータのデコード、エンコード、前処理、および/または後処理を容易にするためのロジックを含む。メディアパイプライン234は、サブコア221~221F内の計算またはサンプリングロジックへの要求を介してメディア操作を実装する。
【0058】
一実施形態では、グラフィックスSoCインタフェース232は、グラフィックスプロセッサコア219が、共有された最終レベルのキャッシュメモリ、システムRAM、および/または組込みオンチップまたはオンパッケージDRAMなどのメモリ階層要素を含む、SoC内の汎用アプリケーションプロセッサコア(例えば、CPU)および/または他のコンポーネントと通信することを可能にする。グラフィックスSoCインタフェース232はまた、カメライメージングパイプラインなどのSoC内の固定関数デバイスとの通信を可能にすることもでき、またグラフィックスプロセッサコア219とSoC内のCPUとの間で共有されてもよいグローバルメモリアトミックの使用および/または実装を可能にする。グラフィックスSoCインタフェース232はまた、グラフィックスプロセッサコア219のための電力管理制御を実装することもでき、またグラフィックスプロセッサコア219のクロックドメインとSoC内の他のクロックドメインとの間のインタフェースを可能にする。一実施形態では、グラフィックスSoCインタフェース232は、グラフィックスプロセッサ内の1つまたは複数のグラフィックスコアのそれぞれにコマンドおよび命令を提供するように構成されたコマンドストリーマおよびグローバルスレッドディスパッチャからのコマンドバッファの受信を可能にする。コマンドおよび命令は、メディア操作が実行される場合にはメディアパイプライン234に、グラフィック処理操作が実行される場合にはジオメトリ・固定関数パイプライン(例えば、ジオメトリ・固定関数パイプライン231、ジオメトリ・固定関数パイプライン237)に、それぞれディスパッチされ得る。
【0059】
グラフィックスマイクロコントローラ233は、グラフィックスプロセッサコア219のための様々なスケジューリングおよび管理タスクを実行するように構成することができる。一実施形態では、グラフィックスマイクロコントローラ233は、サブコア221A~221Fにおける実行ユニット(EU)の配列222A~222F、224A~224F内の様々なグラフィックス並列エンジン上で、グラフィックスおよび/または計算のワークロードのスケジューリングを実行することができる。このスケジューリングモデルでは、グラフィックスプロセッサコア219を含むSoCのCPUコア上で実行するホストソフトウェアは、複数のグラフィックスプロセッサドアベルのうちの1つのワークロードを提出することができ、これにより、適切なグラフィックスエンジン上でスケジューリング操作が呼び出される。スケジューリング操作は、次に実行するワークロードを決定すること、ワークロードをコマンドストリーマに提出すること、エンジン上で実行されている既存のワークロードを先取りすること、ワークロードの進行状況を監視すること、ワークロードが完了したときにホストソフトウェアに通知することを含む。一実施形態では、グラフィックスマイクロコントローラ233はまた、グラフィックスプロセッサコア219のための低電力またはアイドル状態を容易にすることができ、システム上のオペレーティングシステムおよび/またはグラフィックスドライバソフトウェアから独立して、低電力状態遷移を越えてグラフィックスプロセッサコア219内のレジスタを保存および復元する能力を、グラフィックスプロセッサコア219に提供することができる。
【0060】
グラフィックスプロセッサコア219は、図示されたサブコア221A~221Fより大きくても少なくてもよく、最大でN個のモジュラーサブコアを有してもよい。N個のサブコアの各セットについて、グラフィックスプロセッサコア219は、共有機能ロジック235、共有および/またはキャッシュメモリ236、ジオメトリ/固定関数パイプライン237、および様々なグラフィックスおよび計算処理操作を加速させるための追加の固定関数ロジック238をも含むことができる。共有機能ロジック235は、グラフィックスプロセッサコア219内の各N個のサブコアによって共有され得る、図4の共有機能ロジック420に関連付けられたロジックユニット(例えば、サンプラー、算術、および/またはスレッド間通信ロジック)を含むことができる。共有および/またはキャッシュメモリ236は、グラフィックスプロセッサコア219内のN個のサブコア221A~221Fのセットについて最終レベルのキャッシュとすることができ、複数のサブコアによってアクセス可能な共有メモリとしても機能することができる。ジオメトリ/固定関数パイプライン237は、固定関数ブロック230内のジオメトリ/固定関数パイプライン231の代わりに含められることができ、同じまたは類似のロジックユニットを含むことができる。
【0061】
一実施形態では、グラフィックスプロセッサコア219は、グラフィックスプロセッサコア219によって使用するための様々な固定関数アクセラレーションロジックを含むことができる追加の固定関数ロジック238を含む。一実施形態では、追加の固定関数ロジック238は、位置のみのシェーディングで使用するための追加のジオメトリパイプラインを含む。位置のみのシェーディングにおいて、2つのジオメトリパイプライン、すなわちジオメトリ/固定関数パイプライン238および231内のフルジオメトリパイプラインと、追加の固定関数ロジック238内に含まれ得る追加のジオメトリパイプラインであるカリングパイプラインとが存在する。一実施形態では、カリングパイプラインは、フルジオメトリパイプラインの縮小バージョンである。フルパイプラインおよびカリングパイプラインは、同じアプリケーションの異なるインスタンスを実行することができ、各インスタンスが別のコンテキストを持っている。位置のみのシェーディングでは、廃棄された三角形の長いカリング実行を隠すことができ、いくつかのインスタンスでシェーディングをより早く完了させることができる。例えば、一実施形態では、追加の固定関数ロジック238内のカリングパイプラインロジックは、メインアプリケーションと並行して位置シェーダを実行することができ、カリングパイプラインは、フレームバッファへのピクセルのラスタライズおよびレンダリングを実行せずに、頂点の位置属性のみをフェッチしシェーディングするので、一般的に、フルパイプラインよりも高速に重要な結果を生成する。カリングパイプラインは、生成された重要な結果を使用して、三角形がカリングされているかどうかに関係なく、すべての三角形についての可視性情報を計算することができる。フルパイプライン(このインスタンスではリプレイパイプラインと呼ばれ得る)は、最終的にラスタライズフェーズに渡される可視な三角形だけをシェーディングするために、カリングされた三角形をスキップするために可視性情報を消費することができる。
【0062】
一実施形態では、追加の固定関数ロジック238は、機械学習訓練又は推論のための最適化を含む実装の為に、固定関数行列乗算ロジックなどの機械学習アクセラレーションロジックを含むこともできる。
【0063】
各グラフィックスサブコア221A~221F内には、グラフィックスパイプライン、メディアパイプライン、またはシェーダプログラムによる要求に応答して、グラフィックス、メディア、および計算操作を実行するために使用され得る実行リソースのセットが含まれている。グラフィックスサブコア221A~221Fは、複数のEU配列222A~222F、224A~224F、スレッドディスパッチおよびスレッド間通信(TD/IC)ロジック223A~223F、3D(例えば、テクスチャ)サンプラー225A~225F、メディアサンプラー206A~206F、シェーダプロセッサ227A~227F、および共有ローカルメモリ(SLM)228A~228Fを含む。EU配列222A~222Fおよび224A~224Fは、それぞれ複数の実行ユニットを含み、これらは、グラフィック、メディア、または計算シェーダープログラムを含むグラフィックス、メディア、または計算の操作のサービスにおいて浮動小数点および整数/固定小数点ロジック操作を実行できる汎用グラフィックス処理ユニットである。TD/ICロジック223A~223Fは、サブコア内の実行ユニットに対してローカルスレッドディスパッチやスレッド制御操作を行い、サブコアの実行ユニットで実行されるスレッド間の通信を容易にする。3Dサンプラー225A~225Fは、テクスチャまたは他の3Dグラフィックスに関連するデータをメモリに読み込むことができる。3Dサンプラーは、構成されたサンプル状態および所与のテクスチャに関連付けられたテクスチャフォーマットに基づいて、テクスチャデータを異なる方法で読み取ることができる。メディアサンプラー206A~206Fは、メディアデータに関連付けられたタイプおよびフォーマットに基づいて、同様の読み出し動作を実行することができる。一実施形態では、各グラフィックスサブコア221A~221Fは、統一された3Dおよびメディアサンプラーを交互に含むことができる。各サブコア221A~221F内の実行ユニット上で実行しているスレッドは、各サブコア内で共有ローカルメモリ228A~228Fを活用することで、スレッドグループ内で実行しているスレッドがオンチップメモリの共通プールを使用して実行することを可能にする。
【0064】
図2Cは、マルチコアグループ240A~240Nに配置されたグラフィックス処理リソースの専用セットを含むグラフィックス処理ユニット(GPU)239を示す。単一のマルチコアグループ240Aのみの詳細が提供されているが、他のマルチコアグループ240B~240Nは、同一または同様のグラフィックス処理リソースのセットを備えていてもよいことが理解されるであろう。
【0065】
図示されているように、マルチコアグループ240Aは、グラフィックスコア243のセット、テンソルコア244のセット、およびレイトレーシングコア245のセットを含んでもよい。スケジューラ/ディスパッチャ241は、様々なコア243、244、および245上で実行するために、グラフィックススレッドをスケジュールし、ディスパッチする。レジスタファイル242のセットは、グラフィックススレッドを実行する際にコア243、244および245によって使用されるオペランド値を格納する。これらは、例えば、整数値を格納するための整数レジスタ、浮動小数点値を格納するための浮動小数点レジスタ、パックされたデータ要素(整数および/または浮動小数点データ要素)を格納するためのベクトルレジスタ、およびテンソル/マトリックス値を格納するためのタイルレジスタを含んでもよい。一実施形態では、タイルレジスタは、ベクトルレジスタの組み合わされたセットとして実装される。
【0066】
1つまたは複数の組み合わされたレベル1(L1)のキャッシュおよび共有メモリユニット247は、テクスチャデータ、頂点データ、ピクセルデータ、レイデータ、バウンディングボリュームデータなどのグラフィックスデータを、各マルチコアグループ240A内に局所的に格納する。1つまたは複数のテクスチャユニット247を使用して、テクスチャマッピングおよびサンプリングなどのテクスチャリング操作を実行することもできる。マルチコアグループ240A~240Nの全てまたはサブセットによって共有されるレベル2(L2)のキャッシュ253は、複数の同時グラフィックススレッドのためのグラフィックスデータおよび/または命令を格納する。図示のように、L2のキャッシュ253は、複数のマルチコアグループ240A~240Nにわたって共有され得る。1つまたは複数のメモリコントローラ248は、GPU239を、システムメモリ(例えば、DRAM)および/または専用グラフィックスメモリ(例えば、GDDR6メモリ)であり得るメモリ249に結合する。
【0067】
入出力(I/O)回路250は、GPU239を、デジタルシグナルプロセッサ(DSP)、ネットワークコントローラ、またはユーザ入力デバイスなどの1つまたは複数のI/Oデバイス252に結合する。オンチップ相互接続を使用して、I/Oデバイス252をGPU239およびメモリ249に結合し得る。I/O回路250の1つまたは複数のI/Oメモリ管理ユニット(IOMMU)251は、I/Oデバイス252をシステムメモリ249に直接結合する。一実施形態では、IOMMU251は、ページテーブルの複数のセットを管理して、仮想アドレスをシステムメモリ249内の物理アドレスにマッピングする。この実施形態では、I/Oデバイス252、CPU(複数可)246、およびGPU(複数可)239は、同じ仮想アドレス空間を共有し得る。
【0068】
一実装では、IOMMU251は仮想化をサポートする。この場合、それは、ゲスト/グラフィックス仮想アドレスをゲスト/グラフィックス物理アドレスにマッピングするためのページテーブルの第1のセットと、ゲスト/グラフィックス物理アドレスをシステム/ホスト物理アドレスにマッピングするためのページテーブルの第2のセット(例えば、システムメモリ249内にて)を管理してもよい。第1および第2のセットのページテーブルのそれぞれのベースアドレスは、制御レジスタに格納され、コンテキストスイッチで(例えば、新しいコンテキストがページテーブルの関連するセットへのアクセスを提供されるように)スワップアウトされてもよい。図2Cには図示されていないが、コア243、244および245、ならびに/またはマルチコアグループ240A~240Nの各々は、ゲスト仮想からゲスト物理への変換、ゲスト物理からホスト物理への変換、およびゲスト仮想からホスト物理への変換をキャッシュするためのトランスレーション・ルックアサイド・バッファ(TLB)を含んでもよい。
【0069】
一実施形態では、CPU246、GPU239、およびI/Oデバイス252は、単一の半導体チップおよび/またはチップパッケージ上に統合されている。図示されたメモリ249は、同じチップ上に統合されてもよく、またはオフチップインタフェースを介してメモリコントローラ248に結合されてもよい。一実装では、メモリ249は、基礎となる原理がこの特定の実装に限定されないが、他の物理システム・レベルメモリと同じ仮想アドレス空間を共有するGDDR6メモリを含む。
【0070】
一実施形態では、テンソルコア244は、ディープラーニング操作を実行するために使用される基本的な計算操作である、行列演算を実行するために特別に設計された複数の実行ユニットを含む。例えば、同時行列乗算演算は、ニューラルネットワークの訓練および推論のために使用されてもよい。テンソルコア244は、単精度浮動小数点(例えば、32ビット)、半精度浮動小数点(例えば、16ビット)、整数ワード(16ビット)、バイト(8ビット)、およびハーフバイト(4ビット)を含む多様なオペランド精度を使用して行列処理を実行してもよい。一実施形態では、ニューラルネットワークの実装は、高品質の最終画像を構築するために、潜在的に複数のフレームから詳細を組み合わせて、各レンダリングされたシーンの特徴を抽出する。
【0071】
ディープラーニングの実装では、並列行列乗算ワークがテンソルコア244上での実行のためにスケジュールされてもよい。特に、ニューラルネットワークの訓練は、かなりの数の行列内積演算を必要とする。N×N×Nの行列乗算の内積の定式化を処理するために、テンソルコア244は、少なくともN個の内積処理要素を含んでもよい。行列乗算が開始される前に、1つの行列全体がタイルレジスタにロードされ、第2の行列の少なくとも1つの列がNサイクルに対してサイクルごとにロードされる。各サイクルでは、処理されるN個の内積が存在する。
【0072】
行列要素は、16ビットワード、8ビットバイト(例えば、INT8)、4ビットハーフバイト(例えば、INT4)を含む、特定の実装に応じて異なる精度で格納されてもよい。異なる精度モードは、異なるワークロード(例えば、バイトおよびハーフバイトへの量子化を許容可能な推論ワークロードなど)に対して最も効率的な精度が使用されることを保証するために、テンソルコア244に対して指定されてもよい。
【0073】
一実施形態では、レイトレーシングコア245は、リアルタイムレイトレーシングおよび非リアルタイムレイトレーシングの実装の両方のためのレイトレーシング操作を加速する。特に、レイトレーシングコア245は、バウンディングボリューム階層(BVH)を使用してレイトラバーサルを実行し、BVHボリューム内に囲まれたレイとプリミティブとの交差を識別するためのレイトラバーサル/交差回路を含む。レイトレーシングコア245はまた、(例えば、Zバッファまたは類似の配置を使用して)深度検査およびカリングを実行するための回路を含んでもよい。一実装では、レイトレーシングコア245は、本明細書に記載された画像デノイジング技術と協働して、トラバーサルおよび交差操作を実行し、その操作の少なくとも一部はテンソルコア244上で実行されてもよい。例えば、一実施形態では、テンソルコア244は、レイトレーシングコア245によって生成されたフレームのデノイジングを実行するためにディープラーニングニューラルネットワークを実装する。しかしながら、CPU(複数可)246、グラフィックスコア243、および/またはレイトレーシングコア245は、デノイジングおよび/またはディープラーニングアルゴリズムの全てまたは一部を実装してもよい。
【0074】
加えて、上述したように、GPU239がネットワークまたは高速相互接続を介して他のコンピューティングデバイスに結合されたコンピューティングデバイス内にある、デノイジングへの分散型アプローチが採用されてもよい。この実施形態では、相互接続されたコンピューティングデバイスは、ニューラルネットワーク学習/訓練データを共有して、システム全体が異なるタイプの画像フレームおよび/または異なるグラフィックスアプリケーションのためにデノイジングを実行することを学習する速度を向上する。
【0075】
一実施形態では、レイトレーシングコア245は、すべてのBVHのトラバーサルとレイプリミティブの交差を処理し、グラフィックスコア243がレイごとに何千もの命令で過負荷になることを無くしている。一実施形態では、各レイトレーシングコア245は、バウンディングボックステスト(例えば、トラバーサル操作のための)を実行するための特殊な回路の第1のセットと、レイ-トライアングル交差テスト(例えば、トラバーサルされたレイの交差)を実行するための特殊な回路の第2のセットとを含む。このように、一実施形態では、マルチコアグループ240Aは、単にレイプローブを起動することができ、レイトレーシングコア245は、独立してレイトラバーサルおよび交差を実行し、ヒットデータ(例えば、ヒット、ノーヒット、複数ヒットなど)をスレッドコンテキストに返す。他のコア243および244は、レイトレーシングコア245がトラバーサルおよび交差操作を実行する間、他のグラフィックスまたは計算ワークを実行するために解放される。
【0076】
一実施形態では、各レイトレーシングコア245は、BVHテスト操作を実行するためのトラバーサルユニットと、レイプリミティブ交差テストを実行する交差ユニットとを含む。交差ユニットは、「ヒット」、「ノーヒット」、または「マルチプルヒット」応答を生成し、それを適切なスレッドに提供する。トラバーサルおよび交差操作の間、他のコア(例えば、グラフィックスコア243およびテンソルコア244)の実行リソースは、他の形態のグラフィックスワークを実行するために解放される。
【0077】
以下に記載される1つの特定の実施形態では、ワークがグラフィックスコア243とレイトレーシングコア245との間に分散されるハイブリッドラスタライズ/レイトレーシングのアプローチが使用される。
【0078】
一実施形態では、レイトレーシングコア245(および/または他のコア243および244)は、DispatchRaysコマンドを含むMicrosoftのDirectX Ray Tracing(DXR)などのレイトレーシング命令セットのためのハードウェアサポートを含み、またレイ生成シェーダ、最近接ヒットシェーダ、任意のヒットシェーダ、およびミスシェーダを含み、これらが各オブジェクトのためのシェーダおよびテクスチャのユニークなセットの割り当てを可能にする。レイトレーシングコア245、グラフィックスコア243、およびテンソルコア244によってサポートされ得る別のレイトレーシングプラットフォームは、Vulkan 1.1.85である。なお、しかしながら、本発明の基礎となる原理は、任意の特定のレイトレーシングISAに限定されないことに留意されたい。
【0079】
一般的に、様々なコア245、244及び243は、レイ生成、最接近ヒット、任意のヒット、レイ・プリミティブ交差、プリミティブごとの階層的なバウンディングボックスの構築、ミス、ビジット、および例外のための命令/機能を含むレイトレーシング命令セットをサポートしてもよい。より具体的には、一実施形態では、以下の機能を実行するためのレイトレーシング命令を含む。
【0080】
レイ生成-レイ生成命令は、各ピクセル、サンプル、または他のユーザー定義のワーク割り当てに対して実行され得る。
【0081】
最接近ヒットーシーン内のプリミティブとレイの最も近い交点を位置付けるために、最接近ヒット命令が実行され得る。
【0082】
任意のヒットー任意のヒット命令は、シーン内のレイとプリミティブの間の複数の交点を識別し、新しい最接近の交点を識別する可能性がある。
【0083】
交差点-交差点命令は,レイープリミティブ交差テストを実行し、その結果を出力する。
【0084】
プリミティブごとの階層的なバウンディングボックスの構築-この命令は、所与のプリミティブまたはプリミティブのグループの周りに(例えば、新しいBVHまたは他の加速データ構造を構築する場合など)バウンディングボックスを構築する。
【0085】
ミス-レイがシーン内の全てのジオメトリ、またはシーンの指定された領域を逃していることを示す。
【0086】
ビジット-レイが通過する子のボリュームを示す。
【0087】
例外-様々なタイプの例外ハンドラ(例えば、様々なエラー状態のために呼び出された)を含む。
【0088】
図2Dは、本明細書に記載された実施形態に係る、グラフィックスプロセッサおよび/または計算アクセラレータとして構成され得る汎用グラフィックス処理ユニット(GPGPU)270のブロック図である。GPGPU270は、1つまたは複数のシステムおよび/またはメモリバスを介して、ホストプロセッサ(例えば、1つまたは複数のCPU(複数可)246)およびメモリ271および272と相互接続することができる。一実施形態では、メモリ271は、1つまたは複数のCPU(複数可)246と共有され得るシステムメモリであり、一方、メモリ272は、GPGPU270専用のデバイスメモリである。一実施形態では、GPGPU270およびデバイスメモリ272内のコンポーネントは、上記の1つまたは複数のCPU(複数可)246にアクセス可能なメモリアドレスにマッピングされてもよい。メモリ271および272へのアクセスは、メモリコントローラ268を介して促進されてもよい。一実施形態では、メモリコントローラ268は、内部ダイレクトメモリアクセス(DMA)コントローラ269を含むか、または、そうでなければDMAコントローラによって実行されるであろう操作を実行するためのロジックを含むことができる。
【0089】
GPGPU270は、L2キャッシュ253、L1キャッシュ254、命令キャッシュ255および共有メモリ256を含む複数のキャッシュメモリを含み、これらのうちの少なくとも一部はキャッシュメモリとして分割されてもよい。また、GPGPU270は、複数の計算ユニット260A~260Nを含む。各計算ユニット260A~260Nは、ベクトルレジスタ261、スカラレジスタ262、ベクトルロジックユニット263、およびスカラロジックユニット264のセットを含む。計算ユニット260A~260Nはまた、ローカル共有メモリ265およびプログラムカウンタ266を含むこともできる。計算ユニット260A~260Nは、定数キャッシュ267と結合することができ、このキャッシュ267は、一定のデータを格納するために使用することができ、この一定のデータは、GPGPU270上で実行されるカーネルまたはシェーダプログラムの実行中に変化しないデータである。一実施形態では、定数キャッシュ267はスカラデータキャッシュであり、キャッシュされたデータはスカラレジスタ262に直接フェッチすることができる。
【0090】
動作中、1つまたは複数のCPU(複数)246は、アクセス可能なアドレス空間にマッピングされたGPGPU270内のレジスタまたはメモリにコマンドを書き込むことができる。コマンドプロセッサ257は、レジスタまたはメモリからコマンドを読み出し、それらのコマンドがGPGPU270内でどのように処理されるかを決定することができる。次に、スレッドディスパッチャ258は、それらのコマンドを実行するために、計算ユニット260A~260Nにスレッドをディスパッチするために使用することができる。各計算ユニット260A~260Nは、他の計算ユニットとは独立してスレッドを実行することができる。加えて、各計算ユニット260A~260Nは、条件付き計算のために独立して構成することができ、計算結果を条件付きでメモリに出力することができる。コマンドプロセッサ257は、提出されたコマンドが完了したときに、1つまたは複数のCPU(複数可)246に割込をかけることができる。
【0091】
図3A~3Cは、本明細書に記載の実施形態によって提供される追加のグラフィックスプロセッサおよび計算アクセラレータアーキテクチャのブロック図を示す。本明細書の任意の他の図面中の要素と同じ参照番号(または名称)を有する図3A~3C中の要素は、本明細書の他の箇所に記載されたものと同様の任意の方法で動作または機能することができるが、これらに限定されるものではない。
【0092】
図3Aは、グラフィックスプロセッサ300のブロック図であり、これは、ディスクリートグラフィックス処理ユニットであってもよいし、また複数の処理コアまたはこれらに限定されるものではないがメモリデバイスやネットワークインタフェースなどの他の半導体装置と統合されるグラフィックスプロセッサであってもよい。いくつかの実施形態では、グラフィックスプロセッサは、メモリマッピングされたI/Oインタフェースを介して、グラフィックスプロセッサ上のレジスタと、プロセッサメモリに設置されたコマンドとに通信する。いくつかの実施形態では、グラフィックスプロセッサ300は、メモリにアクセスするためのメモリインタフェース314を含む。メモリインタフェース314は、ローカルメモリ、1つまたは複数の内部キャッシュ、1つまたは複数の共有外部キャッシュ、および/またはシステムメモリへのインタフェースであり得る。
【0093】
いくつかの実施形態では、グラフィックスプロセッサ300はまた、ディスプレイデバイス318へのデータのディスプレイ出力を駆動するためのディスプレイコントローラ302を含む。ディスプレイコントローラ302は、動画またはユーザインタフェース要素の複数の層の表示および構成用の1つまたは複数のオーバーレイ平面のためのハードウェアを含む。ディスプレイデバイス318は、内部または外部ディスプレイデバイスとし得る。一実施形態では、ディスプレイデバイス318は、仮想現実(VR)ディスプレイデバイスまたは拡張現実(AR)ディスプレイデバイスなどのヘッドマウントディスプレイデバイスである。いくつかの実施形態では、グラフィックスプロセッサ300は、1つまたは複数のメディアエンコーディングフォーマットに、またはこれらから、またはこれらの間で、メディアをエンコード、デコード、またはトランスコードするための動画コーデックエンジン306を含む。ここでこれらのメディアエンコーディングフォーマットには、これらに限られないが、MPEG-2などのMPEG(Moving Picture Experts Group)フォーマット、H.264/MPEG-4 AVC、H.265/HEVC、Alliance for Open Media (AOMedia) VP8、VP9および 米国映画テレビ技術者協会(SMPTE)421M/VC-1などのAVC(Advanced Video Coding)フォーマット、JPEG(Joint Photographic Experts Group)フォーマット、MJPEG(Motion JPEG)フォーマットなどがある。
【0094】
いくつかの実施形態では、グラフィックスプロセッサ300は、例えばビット境界ブロック転送を含む2次元(2D)用ラスタライズ操作を実行するためのブロック画像転送(BLIT)エンジン304を含む。しかし、一実施形態では、2Dグラフィックス操作は、グラフィックス処理エンジン(GPE)310の1つまたは複数のコンポーネントを使用して実行される。いくつかの実施形態では、GPE310は、3次元(3D)グラフィックス操作およびメディア操作を含むグラフィックス操作を実行するための計算エンジンである。
【0095】
いくつかの実施形態では、GPE310は、3Dプリミティブ形状(例えば、矩形、三角形など)に作用する処理機能を使用して3D画像およびシーンをレンダリングするなどの3D操作を実行するための3Dパイプライン312を含む。3Dパイプライン312は、要素内で様々なタスクを実行し、および/または3D/メディアサブシステム315に実行スレッドを作成するプログラム可能な固定関数要素を含む。3Dパイプライン312は、メディア操作を実行するのに使用することができるが、GPE310の実施形態は、動画後処理および画像処理などのメディア操作を実行するのに特別に使用されるメディアパイプライン316も含む。
【0096】
いくつかの実施形態では、メディアパイプライン316は、動画コーデックエンジン306の代わりにまたはそのために、動画デコード・アクセラレーション、動画デインターレース、動画エンコードアクセラレーションなどの1つまたは複数の特殊なメディア操作を実行するための固定関数またはプログラム可能なロジックユニットを含む。いくつかの実施形態では、メディアパイプライン316は、3D/メディアサブシステム315上で実行するためのスレッドを作成するためのスレッド作成ユニットを追加的に含む。作成されたスレッドは、3D/メディアサブシステム315に含まれる1つまたは複数のグラフィックス実行ユニット上でメディア操作のための計算を実行する。
【0097】
いくつかの実施形態では、3D/メディアサブシステム315は、3Dパイプライン312およびメディアパイプライン316によって作成されたスレッドを実行するためのロジックを含む。一実施形態では、パイプラインは、スレッド実行要求を3D/メディアサブシステム315に送信し、このシステムは、利用可能なスレッド実行リソースに様々な要求を仲裁してディスパッチするためのスレッドディスパッチロジックを含む。実行リソースは、3Dおよびメディアスレッドを処理するためのグラフィックス実行ユニットの配列を含む。いくつかの実施形態では、3D/メディアサブシステム315は、スレッド命令およびデータのための1つまたは複数の内部キャッシュを含む。いくつかの実施形態では、サブシステムはまた、スレッド間でデータを共有し、出力データを格納するために、レジスタおよびアドレス指定可能なメモリを含む共有メモリを含む。
【0098】
図3Bは、本明細書に記載の実施形態に従って、タイルアーキテクチャを有するグラフィックスプロセッサ320を示す。一実施形態では、グラフィックスプロセッサ320は、グラフィックスエンジンタイル310A~310D内に図3Aのグラフィックス処理エンジン310の複数のインスタンスを有するグラフィックス処理エンジンクラスタ322を含む。各グラフィックスエンジンタイル310A~310Dは、タイル相互接続323A~323Fのセットを介して相互接続することができる。各グラフィックスエンジンタイル310A~310Dはまた、メモリ相互接続325A~325Dを介してメモリモジュールまたはメモリデバイス326A~326Dにも接続することができる。メモリデバイス326A~326Dは、任意のグラフィックスメモリ技術を使用することができる。例えば、メモリデバイス326A~326Dは、グラフィックスダブルデータレート(GDDR)メモリであってもよい。一実施形態では、メモリデバイス326A~326Dは、それぞれのグラフィックスエンジンタイル310A~310Dとオンダイ可能な高帯域幅メモリ(HBM)モジュールである。一実施形態では、メモリデバイス326A~326Dは、それらのそれぞれのグラフィックスエンジンタイル310A~310Dの上に積層可能な積層型メモリデバイスである。一実施形態では、各グラフィックスエンジンタイル310A~310Dおよび関連メモリデバイス326A~326Dは、図11B~11Dにさらに詳細に示されるように、ベースダイまたはベース基板に接着された別個のチップレット上に存在する。
【0099】
グラフィックス処理エンジンクラスタ322は、オンチップまたはオンパッケージのファブリック相互接続324に接続することができる。ファブリック相互接続324は、グラフィックスエンジンタイル310A~310Dと、動画コーデックエンジン306および1つまたは複数のコピーエンジン304などのコンポーネントとの間の通信を可能にすることができる。コピーエンジン304は、メモリデバイス326A~326Dと、グラフィックスプロセッサ320の外部にあるメモリ(例えば、システムメモリ)との外部に、内部に、またはそれらの間にデータを移動させるために使用することができる。ファブリック相互接続324は、グラフィックスエンジンタイル310A~310Dを相互接続するために使用することもできる。グラフィックスプロセッサ320は、任意に、外部ディスプレイデバイス318との接続を可能にするためのディスプレイコントローラ302を含んでもよい。グラフィックスプロセッサは、グラフィックスまたは計算アクセラレータとして構成されてもよい。アクセラレータの構成では、ディスプレイコントローラ302及びディスプレイデバイス318は省略されてもよい。
【0100】
グラフィックスプロセッサ320は、ホストインタフェース328を介してホストシステムに接続することができる。ホストインタフェース328は、グラフィックスプロセッサ320、システムメモリ、および/または他のシステムコンポーネント間の通信を可能にすることができる。ホストインタフェース328は、例えば、PCIエクスプレスバスまたは別のタイプのホストシステムインタフェースとし得る。
【0101】
図3Cは、本明細書に記載された実施形態に係る計算アクセラレータ330を示す。計算アクセラレータ330は、図3Bのグラフィックスプロセッサ320に対してアーキテクチャの類似したものを含むことができ、計算アクセラレーションのために最適化されている。計算エンジンクラスタ332は、並列またはベクトルベースの汎用計算操作のために最適化された実行ロジックを含む計算エンジンタイル340A~340Dのセットを含むことができる。いくつかの実施形態では、計算エンジンタイル340A~340Dは、固定関数グラフィックス処理ロジックを含まないが、一実施形態では、計算エンジンタイル340A~340Dのうちの1つまたは複数は、メディアアクセラレーションを実行するロジックを含むことができる。計算エンジンタイル340A~340Dは、メモリ相互接続325A~325Dを介してメモリデバイス326A~326Dに接続することができる。メモリデバイス326A~326Dおよびメモリ相互接続325A~325Dは、グラフィックスプロセッサ320と同様の技術であってもよいし、異なっていてもよい。グラフィックス計算エンジンタイル340A~340Dは、タイル相互接続323A~323Fのセットを介して相互接続されていてもよく、ファブリック相互接続324と接続されていてもよく、および/または相互接続されていてもよい。一実施形態では、計算アクセラレータ330は、デバイス全体のキャッシュとして構成することができる大きなL3のキャッシュ336を含む。計算アクセラレータ330はまた、図3Bのグラフィックスプロセッサ320と同様の方法で、ホストインタフェース328を介してホストプロセッサおよびメモリに接続することができる。
グラフィック処理エンジン
【0102】
図4は、いくつかの実施形態に従ったグラフィックスプロセッサのグラフィック処理エンジン410のブロック図である。一実施形態では、グラフィックス処理エンジン(GPE)410は、図3AのGPE310のバージョンであり、図3Bのグラフィックスエンジンタイル310A~310Dを表してもよい。本明細書の任意の他の図中の要素と同じ参照番号(または名称)を有する図4中の要素は、本明細書の他の箇所で説明されたものと同様の任意の方法で動作または機能することができるが、これに限定されるものではない。例えば、図3Aには3Dパイプライン312およびメディアパイプライン316が図示されている。メディアパイプライン316は、GPE410のいくつかの実施形態では任意であり、GPE410内に明示的に含まれていなくてもよい。例えば、および少なくとも1つの実施形態では、別個のメディアおよび/または画像プロセッサがGPE410に結合されている。
【0103】
いくつかの実施形態では、GPE410は、3Dパイプライン312および/またはメディアパイプライン316にコマンドストリームを提供するコマンドストリーマ403と結合するか、またはそれを含む。いくつかの実施形態では、コマンドストリーマ403は、システムメモリ、または内部キャッシュメモリおよび共有キャッシュメモリのうちの1つまたは複数であり得るメモリと結合される。いくつかの実施形態では、コマンドストリーマ403は、メモリからコマンドを受信し、3Dパイプライン312および/またはメディアパイプライン316にコマンドを送信する。コマンドは、3Dパイプライン312およびメディアパイプライン316のためのコマンドを格納するリングバッファからフェッチされた指令である。一実施形態では、リングバッファは、複数のコマンドのバッチを格納するバッチコマンドバッファを追加的に含むことができる。3Dパイプライン312のためのコマンドはまた、これらに限られないが、3Dパイプライン312のための頂点およびジオメトリデータ、ならびに/またはメディアパイプライン316のための画像データおよびメモリオブジェクトなどのメモリに格納されたデータへの参照を含むこともできる。3Dパイプライン312およびメディアパイプライン316は、それぞれのパイプライン内のロジックを介して操作を実行することによって、またはグラフィックスコア配列414に1つまたは複数の実行スレッドをディスパッチすることによって、コマンドおよびデータを処理する。一実施形態では、グラフィックスコア配列414は、グラフィックスコアの1つまたは複数のブロック(例えば、グラフィックスコア(複数可)415A、グラフィックスコア(複数可)415B)を含み、各ブロックは、1つまたは複数のグラフィックスコアを含む。各グラフィックスコアは、グラフィックスおよび計算操作を実行するための汎用およびグラフィックス固有の実行ロジック、ならびに固定関数テクスチャ処理および/または機械学習および人工知能アクセラレーションロジックを含むグラフィックス実行リソースのセットを含む。
【0104】
様々な実施形態では、3Dパイプライン312は、命令を処理しかつ実行スレッドをグラフィックスコア配列414にディスパッチすることによって、頂点シェーダ、ジオメトリシェーダ、ピクセルシェーダ、フラグメントシェーダ、計算シェーダ、または他のシェーダのプログラムなどの1つまたは複数のシェーダプログラムを処理するための固定関数およびプログラム可能なロジックを含むことができる。グラフィックスコア配列414は、これらのシェーダプログラムの処理に使用するための実行リソースの統一されたブロックを提供する。グラフィックスコア配列414のグラフィックスコア(複数可)415A~414B内の多目的実行ロジック(例えば、実行ユニット)は、様々な3D APIシェーダ言語のサポートを含み、複数のシェーダに関連付けられた複数の同時実行スレッドを実行することができる。
【0105】
いくつかの実施形態では、グラフィックスコア配列414は、動画および/または画像処理などのメディア機能を実行するための実行ロジックを含む。一実施形態では、実行ユニットは、グラフィックス処理操作に加えて、並列汎用計算操作を実行するようにプログラム可能な汎用ロジックを含む。汎用ロジックは、図2Aのように、図1のプロセッサコア(複数可)107またはプロセッサコア202A~202N内の汎用ロジックと並列に、または連動して処理操作を実行することができる。
【0106】
グラフィックスコア配列414上で実行されるスレッドによって生成された出力データは、統一リターンバッファ(URB)418内のメモリにデータを出力することができる。URB418は、複数のスレッド用のデータを格納することができる。いくつかの実施形態では、URB418は、グラフィックスコア配列414上で実行する異なるスレッド間でデータを送信するために使用してもよい。いくつかの実施形態では、URB418は、グラフィックスコア配列上のスレッドと共有機能ロジック420内の固定関数ロジックとの間の同期に追加的に使用されてもよい。
【0107】
いくつかの実施形態では、グラフィックスコア配列414は、その配列がGPE410の目標電力および性能レベルに基づいて可変数の実行ユニットをそれぞれ有する可変数のグラフィックスコアを含むように、スケーラブルである。一実施形態では、実行リソースは、必要に応じて実行リソースを有効化または無効化し得るように動的にスケーラブルである。
【0108】
グラフィックスコア配列414は、グラフィックスコア配列内のグラフィックスコア間で共有される複数のリソースを含む共有機能ロジック420と結合する。共有機能ロジック420内の共有機能は、グラフィックスコア配列414に特殊な補助機能を提供するハードウェアロジックユニットである。様々な実施形態では、共有機能ロジック420は、これらに限定されないが、サンプラー421、数学ロジック422、およびスレッド間通信(ITC)423のロジックを含む。追加的に、いくつかの実施形態では、共有機能ロジック420内に1つまたは複数のキャッシュ(複数可)425を実装する。
【0109】
共有機能は、少なくとも、所与の特殊な機能に対する需要がグラフィックスコア配列414内に含めるには不十分な場合に実装される。その代わりに、その特殊な機能の単一のインスタンス化は、共有機能ロジック420内のスタンドアロンエンティティとして実装され、グラフィックスコア配列414内の実行リソース間で共有される。グラフィックスコア配列414の間で共有され、グラフィックスコア配列414内に含まれる機能の正確なセットは、実施形態によって異なる。いくつかの実施形態では、グラフィックスコア配列414によって広範囲に使用される共有機能ロジック420内の特定の共有機能は、グラフィックスコア配列414内の共有機能ロジック416内に含まれてもよい。様々な実施形態では、グラフィックスコア配列414内の共有機能ロジック416は、共有機能ロジック420内の一部または全てのロジックを含むことができる。一実施形態では、共有機能ロジック420内の全てのロジック要素は、グラフィックスコア配列414の共有機能ロジック416内で重複していてもよい。一実施形態では、共有機能ロジック420は、グラフィックスコア配列414内の共有機能ロジック416に有利に除外される。
実行ユニット
【0110】
図5Aおよび図5Bは、本明細書に記載の実施形態に係るグラフィックスプロセッサコアに採用される処理要素の配列を含むスレッド実行ロジック500を示す。本明細書の任意の他の図中の要素と同じ参照番号(または名称)を有する図5Aおよび5B中の要素は、本明細書の他の箇所で説明されたものと同様の任意の方法で動作または機能することができるが、これに限定されるものではない。図5Aおよび5Bは、図2Bの各サブコア221A~221Fで図示されたハードウェアロジックを代表するかもしれないスレッド実行ロジック500の概要を示す。図5Aは、汎用グラフィックスプロセッサ内の実行ユニットを代表するものであり、図5Bは、計算アクセラレータ内で使用され得る実行ユニットを代表するものである。
【0111】
図5Aに示されているように、いくつかの実施形態では、スレッド実行ロジック500は、シェーダプロセッサ502、スレッドディスパッチャ504、命令キャッシュ506、複数の実行ユニット508A~508Nを含むスケーラブル実行ユニット配列、サンプラー510、共有ローカルメモリ511、データキャッシュ512、およびデータポート514を含む。一実施形態では、スケーラブル実行ユニット配列は、ワークロードの計算要求に基づいて、1つまたは複数の実行ユニット(例えば、508Nー1及び508Nを通して、実行ユニット508A、508B、508C、および508Dのいずれか)を有効化または無効化することにより、動的にスケーリングすることができる。一実施形態では、含まれるコンポーネントは、各コンポーネントに関連する相互接続ファブリックを介して相互接続される。いくつかの実施形態では、スレッド実行ロジック500は、命令キャッシュ506、データポート514、サンプラー510、および実行ユニット508A~508Nのうちの1つまたは複数を介して、システムメモリまたはキャッシュメモリなどのメモリへの1つまたは複数の接続を含む。いくつかの実施形態では、各実行ユニット(例えば、508A)は、各スレッドについて複数のデータ要素を並列に処理しながら、複数の同時ハードウェアスレッドを実行することが可能なスタンドアロンのプログラム可能な汎用計算ユニットである。様々な実施形態では、実行ユニット508A~508Nの配列は、任意の数の個々の実行ユニットを含むようにスケーラブルである。
【0112】
いくつかの実施形態では、実行ユニット508A~508Nは、主にシェーダプログラムを実行するために使用される。シェーダプロセッサ502は、様々なシェーダプログラムを処理し、スレッドディスパッチャ504を介してシェーダプログラムに関連付けられた実行スレッドをディスパッチすることができる。一実施形態では、スレッドディスパッチャは、グラフィックスパイプラインおよびメディアパイプラインからのスレッド開始要求を仲裁し、実行ユニット508A~508Nの1つまたは複数の実行ユニット上で要求されたスレッドをインスタンス化するためのロジックを含む。例えば、ジオメトリパイプラインは、頂点、テッセレーション、またはジオメトリシェーダを、処理用のスレッド実行ロジックにディスパッチすることができる。いくつかの実施形態では、スレッドディスパッチャ504は、実行シェーダプログラムからの実行時スレッド作成要求を処理することもできる。
【0113】
いくつかの実施形態では、実行ユニット508A~508Nは、グラフィックスライブラリ(例えば、Direct 3DおよびOpenGL)からのシェーダプログラムが最小限の変換で実行されるように、多くの標準的な3Dグラフィックスシェーダ命令のためのネイティブサポートを含む命令セットをサポートする。実行ユニットは、頂点およびジオメトリ処理(例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ)、ピクセル処理(例えば、ピクセルシェーダ、フラグメントシェーダ)、および汎用処理(例えば、計算およびメディアシェーダ)をサポートする。実行ユニット508A~508Nは、それぞれマルチイシュー用のシングルインストラクション・マルチプルデータ(SIMD)の実行が可能であり、マルチスレッド動作により、より高いレイテンシのメモリアクセスにもかかわらず効率的な実行環境を可能にしている。各実行ユニット内の各ハードウェアスレッドは、専用の高帯域幅レジスタファイルとそれに関連する独立したスレッド・ステートとを有する。実行は、整数、単精度および倍精度の浮動小数点演算、SIMD分岐能、ロジック演算、超越演算、その他の雑多な演算を可能とするパイプラインに対してクロックごとのマルチイシューである。メモリまたは共有機能の1つからのデータを待っている間、実行ユニット508A~508N内の依存性ロジックは、要求されたデータが返されるまで待機スレッドをスリープ状態にする。待機スレッドがスリープしている間、ハードウェアリソースは他のスレッドの処理に当ててもよい。例えば、頂点シェーダの操作に関連付けられた遅延の間、実行ユニットは、ピクセルシェーダ、フラグメントシェーダ、または異なる頂点シェーダを含む別のタイプのシェーダプログラムのための操作を実行することができる。様々な実施形態では、SIMDの使用の代替として、またはSIMDの使用に加えて、SIMT(Single Instruction Multiple Thread)の使用による実行を適用することができる。SIMDコアまたは操作への参照は、SIMTにも適用することができ、またはSIMTと組み合わせてSIMDにも適用することができる。
【0114】
実行ユニット508A~508Nの各実行ユニットは、データ要素の配列上で動作する。データ要素の数は、「実行サイズ」、つまり命令のチャネル数である。実行チャネルは、命令内のデータ要素のアクセス、マスキング、およびフロー制御のための倫理的な実行単位である。チャネルの数は、特定のグラフィックスプロセッサのための物理的な算術ロジックユニット(ALU)または浮動小数点ユニット(FPU)の数とは独立していてもよい。いくつかの実施形態では、実行ユニット508A~508Nは、整数および浮動小数点データ型をサポートする。
【0115】
実行ユニットの命令セットは、SIMD命令を含む。各種データ要素は、パックされたデータ型としてレジスタに格納することができ、実行ユニットは、要素のデータサイズに基づいて各種要素を処理する。例えば、256ビット幅のベクトルで動作する場合、256ビットのベクトルはレジスタに格納され、実行ユニットは、4個の別個の54ビットのパックされたデータ要素(クアッドワード(QW)サイズのデータ要素)、8個の別個の32ビットのパックされたデータ要素(ダブルワード(DW)サイズのデータ要素)、16個の別個の16ビットのパックされたデータ要素(ワード(W)サイズのデータ要素)、または32個の別個の8ビットのデータ要素(バイト(B)サイズのデータ要素)としてベクトル上で動作する。ただし、異なるベクトル幅とレジスタサイズは可能です。
【0116】
一実施形態では、1つまたは複数の実行ユニットは、融合実行ユニット509A~509Nに組み込まれることができ、これら融合実行ユニットは、当該融合された実行ユニットEUに共通のスレッド制御ロジック(507A~507N)を有する。複数のEUを1つのEUグループに融合させることができる。融合されたEUグループ内の各EUは、別個のSIMDハードウェアスレッドを実行するように構成することができる。融合されたEUグループ内のEUの数は、実施形態に応じて変化し得る。さらに、これらに限定されないが、SIMD8、SIMD16、およびSIMD32を含む様々な幅のSIMDは、EUごとに実行され得る。各融合グラフィックス実行ユニット509A~509Nは、少なくとも2つの実行ユニットを含む。例えば、融合実行ユニット509Aは、第1のEU508Aと、第2のEU508Bと、第1のEU508Aと第2のEU508Bとに共通するスレッド制御ロジック507Aとを含む。スレッド制御ロジック507Aは、融合グラフィック実行ユニット509Aで実行されるスレッドを制御し、融合実行ユニット509A~509N内の各EUが共通の命令ポインタレジスタを用いて実行することを可能にする。
【0117】
1つまたは複数の内部命令キャッシュ(例えば、506)は、実行ユニットのためのスレッド命令をキャッシュするために、スレッド実行ロジック500に含まれる。いくつかの実施形態では、スレッド実行中にスレッドデータをキャッシュするために、1つまたは複数のデータキャッシュ(例えば、512)が含まれる。実行ロジック500上で実行されるスレッドは、共有ローカルメモリ511に明示的に管理されたデータを格納することもできる。いくつかの実施形態では、3D操作のためのテクスチャサンプリングおよびメディア操作のためのメディアサンプリングを提供するために、サンプラー510が含まれる。いくつかの実施形態では、サンプラー510は、サンプリングされたデータを実行ユニットに提供する前に、サンプリングプロセス中にテクスチャまたはメディアデータを処理するための特殊なテクスチャまたはメディアサンプリング機能を含む。
【0118】
実行中、グラフィックスパイプラインおよびメディアパイプラインは、スレッド作成およびディスパッチロジックを介してスレッド実行ロジック500にスレッド開始要求を送信する。ジオメトリオブジェクトのグループが処理されてピクセルデータにラスタライズされると、シェーダプロセッサ502内のピクセルプロセッサロジック(例えば、ピクセルシェーダロジック、フラグメントシェーダロジックなど)が呼び出されて、出力情報をさらに計算し、出力表面(例えば、カラーバッファ、デプスバッファ、ステンシルバッファなど)に結果が書き込まれるようにする。いくつかの実施形態では、ピクセルシェーダまたはフラグメントシェーダは、ラスタライズされたオブジェクトを横切って補間されるべき様々な頂点属性の値を計算する。いくつかの実施形態では、シェーダプロセッサ502内のピクセルプロセッサロジックは、次に、アプリケーションプログラミングインタフェース(API)により提供されたピクセルまたはフラグメントシェーダプログラムを実行する。シェーダプログラムを実行するために、シェーダプロセッサ502は、スレッドディスパッチャ504を介して実行ユニット(例えば、508A)にスレッドをディスパッチする。いくつかの実施形態では、シェーダプロセッサ502は、サンプラー510内のテクスチャサンプリングロジックを使用して、メモリに格納されたテクスチャマップ内のテクスチャデータにアクセスする。テクスチャデータおよび入力されたジオメトリデータに対する算術演算は、各ジオメトリフラグメントに対してピクセルカラーデータを計算するか、またはさらなる処理から1つまたは複数のピクセルを廃棄する。
【0119】
いくつかの実施形態では、データポート514は、スレッド実行ロジック500がグラフィックスプロセッサの出力パイプライン上での更なる処理のためのメモリーに、処理データを出力するためのメモリアクセス機構を提供する。いくつかの実施形態では、データポート514は、データポートを介したメモリアクセスのためのデータをキャッシュするために1つまたは複数のキャッシュメモリ(例えば、データキャッシュ512)を含むか、またはそれに結合する。
【0120】
一実施形態では、実行ロジック500はまた、レイトレーシング加速機能を提供することができるレイトレーサ505をも含むことができる。レイトレーサ505は、レイ生成のための命令/機能を含むレイトレーシングの命令セットをサポートすることができる。レイトレーシングの命令セットは、図2Cのレイトレーシングコア245によってサポートされたレイトレーシング命令セットと類似していてもよいし、異なっていてもよい。
【0121】
図5Bは、実施形態に係る実行ユニット508の例示的な内部の詳細を示している。グラフィックス実行ユニット508は、命令フェッチユニット537、一般レジスタファイル配列(GRF)524、アーキテクチャレジスタファイル配列(ARF)526、スレッドアービタ522、送信ユニット530、分岐ユニット532、SIMD浮動小数点ユニット(FPU)のセット534、および一実施形態では、専用の整数SIMD ALUのセット535を含むことができる。GRF524およびARF526は、グラフィックス実行ユニット508においてアクティブであり得る各同時ハードウェアスレッドに関連付けられた一般的なレジスタファイルおよびアーキテクチャレジスタファイルのセットを含む。一実施形態では、スレッドごとにアーキテクチャの状態はARF526に維持され、一方スレッド実行中に使用されるデータはGRF524に格納される。各スレッドの命令ポインタを含む各スレッドの実行状態は、ARF526内のスレッド固有レジスタに保持され得る。
【0122】
一実施形態では、グラフィックス実行ユニット508は、SMT(Simultaneous Multi-Threading)とIMT(Fine-grained Interleaved Multi-Threading)との組み合わせであるアーキテクチャを有する。このアーキテクチャは、複数の同時スレッドを実行するために使用されるロジックにわたって実行ユニットのリソースが分割される場合に、実行ユニットごとの目標同時スレッド数およびレジスタ数に基づいて設計時に微調整可能なモジュール構成を有する。また、グラフィックス実行ユニット508により実行され得る論理的なスレッドの数は、ハードウェアスレッドの数に限定されず、複数の論理的なスレッドは、各ハードウェアスレッドを割り当てることができる。
【0123】
一実施形態では、グラフィックス実行ユニット508は、それぞれが異なる命令となり得る複数の命令を共同発行することができる。グラフィックス実行ユニットスレッド508のスレッドアービタ522は、実行のためにこれら命令を送信ユニット530、分岐ユニット532、またはSIMD FPU(複数可)534のいずれかにディスパッチすることができる。各実行スレッドは、GRF524内の128個の汎用レジスタにアクセスすることができ、ここで、各レジスタは、32ビットデータ要素のSIMD8要素ベクトルとしてアクセス可能な32バイトを格納することができる。一実施形態では、各実行ユニットスレッドは、GRF524内で4Kバイトにアクセスするが、実施形態はそのようには限定されず、他の実施形態においては、より大きいまたはより少ないレジスタリソースが提供されてもよい。一実施形態では、グラフィックス実行ユニット508は、実行ユニットあたりのスレッド数も実施形態に応じて異なることができるが、独立して計算演算を実行することができる7つのハードウェアスレッドに分割されている。例えば、一実施形態では、最大16個のハードウェアスレッドがサポートされる。7つのスレッドが4Kバイトにアクセスし得る実施形態では、GRF 524は合計28Kバイトを格納することができる。16個のスレッドが4Kバイトにアクセスし得る場合、GRF 524は合計64Kバイトを格納することができる。柔軟なアドレス指定のモードでは、レジスタを一緒にアドレス指定して、効果的に広いレジスタを構築したり、またはストライド矩形のブロックデータ構造を表現したりすることができる。
【0124】
一実施形態では、メモリ操作、サンプラー操作、および他のより長い遅延のシステム通信は、メッセージ通過送信ユニット530によって実行される「送信」命令を介してディスパッチされる。一実施形態では、分岐命令は、専用の分岐ユニット532にディスパッチされて、SIMDの発散および最終的な収束を容易にする。
【0125】
一実施形態では、グラフィックス実行ユニット508は、浮動小数点演算を実行するための1つまたは複数のSIMD浮動小数点ユニット(FPU(s))534を含む。一実施形態では、FPU(s)534はまた、整数演算をサポートする。一実施形態では、FPU(複数可)534は、最大M個の32ビット浮動小数点(または整数)演算をSIMD実行することができ、または最大2M個の16ビット整数演算または16ビット浮動小数点演算をSIMD実行することができる。一実施形態では、FPU(複数可)の少なくとも1つは、高スループットの超越数学関数および54ビットの倍精度浮動小数点をサポートするための拡張数学能力を提供する。いくつかの実施形態では、8ビット整数SIMD ALU535のセットも存在し、機械学習計算に関連付けられる演算を実行するために特に最適化されていてもよい。
【0126】
一実施形態では、グラフィックス実行ユニット508の複数インスタンスの配列は、グラフィックスサブコアグルーピング(例えば、サブスライス)でインスタンス化することができる。スケーラビリティのために、プロダクトアーキテクトは、サブコアグルーピングごとの実行ユニットの正確な数を選択することができる。一実施形態では、実行ユニット508は、複数の実行チャネルにわたって命令を実行することができる。さらなる実施形態では、グラフィックス実行ユニット508上で実行される各スレッドは、異なるチャネル上で実行される。
【0127】
図6は、一実施形態に係る追加の実行ユニット600を示す。実行ユニット600は、例えば図3Cのような計算エンジンタイル340A~340Dで使用するための計算最適化された実行ユニットであってもよいが、これに限定されるものではない。実行ユニット600の変形は、図3Bのようなグラフィックスエンジンタイル310A~310Dに使用されてもよい。一実施形態では、実行ユニット600は、スレッド制御ユニット601、スレッド状態ユニット602、命令フェッチ/プリフェッチユニット603、および命令デコードユニット604を含む。実行ユニット600は、追加的に実行ユニット内のハードウェアスレッドに割り当てることができるレジスタを格納するレジスタファイル606を含む。実行ユニット600は、追加的に送信ユニット607および分岐ユニット608を含む。一実施形態では、送信ユニット607および分岐ユニット608は、図5Bのグラフィックス実行ユニット508の送信ユニット530および分岐ユニット532と同様に動作することができる。
【0128】
実行ユニット600はまた、複数の異なるタイプの機能ユニットを含む計算ユニット610を含む。一実施形態では、計算ユニット610は、算術ロジックユニットの配列を含むALUユニット611を含む。ALUユニット611は、64ビット、32ビット、および16ビットの整数演算および浮動小数点演算を実行するように構成され得る。整数演算および浮動小数点演算は、同時に実行されてもよい。計算ユニット610はまた、シストリック配列612、および数学ユニット613を含んでもよい。シストリック配列612は、ベクトルまたは他のデータ並列演算をシストリック的に実行するために使用することができるデータ処理ユニットの幅Wおよび深さDのネットワークを含む。一実施形態では、シストリック配列612は、行列内積演算などの行列演算を実行するように構成され得る。一実施形態では、シストリック配列612は、16ビット浮動小数点演算、ならびに8ビットおよび4ビット整数演算をサポートする。一実施形態では、収縮期配列612は、機械学習動作を加速するように構成することができる。そのような実施形態では、シストリック配列612は、bfloat16ビット浮動小数点フォーマットをサポートするように構成することができる。一実施形態では、算術演算の特定のサブセットをその後のALUユニット611よりも効率的かつ低消費電力で実行するために、数学ユニット613を含めることができる。数学ユニット613は、他の実施形態によって提供されるグラフィックス処理エンジンの共有機能ロジック(例えば、図4の共有機能ロジック420の数学ロジック422)に見出され得る数学ロジックの変形を含むことができる。一実施形態では、数学ユニット613は、32ビットおよび64ビット浮動小数点演算を実行するように構成することができる。
【0129】
スレッド制御ユニット601は、実行ユニット内のスレッドの実行を制御するためのロジックを含む。スレッド制御ユニット601は、実行ユニット600内のスレッドの実行を開始、停止、および先取りするためのスレッド仲裁ロジックを含むことができる。スレッド状態ユニット602は、実行ユニット600上で実行するように割り当てられたスレッドのためのスレッド状態を格納するのに使用することができる。実行ユニット600内にスレッド状態を格納することにより、それらのスレッドがブロックまたはアイドル状態になったときに、スレッドの迅速な先取りが可能になる。命令フェッチ/プリフェッチユニット603は、より上位の実行ロジックの命令キャッシュ(例えば、図5Aに示すような命令キャッシュ506)から命令をフェッチすることができる。命令フェッチ/プリフェッチユニット603はまた、現在実行中のスレッドの分析に基づいて、命令キャッシュにロードされる命令のためのプリフェッチ要求を発行することもできる。命令デコードユニット604は、計算ユニットによって実行される命令をデコードするために使用することができる。一実施形態では、命令デコードユニット604は、複雑な命令をマイクロ操作構成にデコードするために二次デコーダとして使用することができる。
【0130】
実行ユニット600は、追加的に実行ユニット600上で実行するハードウェアスレッドにより使用することができるレジスタファイル606を含む。レジスタファイル606内のレジスタは、実行ユニット600の計算ユニット610内で複数の同時スレッドを実行するために使用されるロジックにわたって分割することができる。グラフィックス実行ユニット600によって実行され得る論理的なスレッドの数は、ハードウェアスレッドの数に限定されず、複数の論理的なスレッドを各ハードウェアスレッドに割り当てることができる。レジスタファイル606のサイズは、サポートされたハードウェアスレッドの数に基づいて複数の実施形態にわたり変更することができる。一実施形態では、レジスタのリネームは、ハードウェアスレッドにレジスタを動的に割り当てるために使用されてもよい。
【0131】
図7は、いくつかの実施形態に係るグラフィックスプロセッサ命令フォーマット700を図示するブロック図である。1つまたは複数の実施形態では、グラフィックスプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線で囲まれたボックスは、実行ユニットの命令に一般的に含まれるコンポーネントを示し、一方、破線は、任意であるかまたは命令のサブセットにのみ含まれるコンポーネントを含む。いくつかの実施形態では、記載かつ図示された命令フォーマット700は、一旦命令が処理されると命令デコードから生じるマイクロ演算とは対照的に、実行ユニットに供給された命令であるという点で、マクロ命令である。
【0132】
いくつかの実施形態では、グラフィックスプロセッサ実行ユニットは、128ビット命令フォーマット710での命令をネイティブサポートする。選択された命令、命令オプション、およびオペランドの数に基づいて、64ビット圧縮命令フォーマット730がいくつかの命令に利用可能である。128ビットのネイティブ命令フォーマット710は、全ての命令オプションへのアクセスを提供し、一方、いくつかのオプションおよび操作は、64ビットのフォーマット730では制限される。64ビットのフォーマット730で利用可能なネイティブ命令は、実施形態によって異なる。いくつかの実施形態では、命令は、インデックスフィールド713内のインデックス値のセットを使用して部分的に圧縮される。実行ユニットハードウェアは、インデックス値に基づいて圧縮テーブルのセットを参照し、この圧縮テーブルの出力を使用して、128ビットの命令フォーマット710のネイティブ命令を再構成する。他のサイズおよびフォーマットの命令を使用することができる。
【0133】
各フォーマットについて、命令オペコード712は、実行ユニットが実行する操作を定義する。実行ユニットは、各オペランドの複数のデータ要素にわたって各命令を並列に実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャ要素またはピクチャ要素を表す各カラーチャネルにわたって同時に加算操作を実行する。デフォルトでは、実行ユニットは、オペランドの全てのデータチャネルにわたって各命令を実行する。いくつかの実施形態では、命令制御フィールド714は、チャネル選択(例えば、述語)およびデータチャネル順序(例えば、スイズル)などの特定の実行オプションに対する制御を可能にする。128ビットの命令フォーマット710の命令の場合、exec・サイズフィールド716は、並列に実行されるデータチャネルの数を制限する。いくつかの実施形態では、exec・サイズフィールド716は、64ビットのコンパクト命令フォーマット730で使用するのに入手できない。
【0134】
いくつかの実行ユニットの命令は、2つのソースオペランド、src0 720およびsrc1 722、ならびに1つのデスティネーション718を含む最大3つのオペランドを有する。いくつかの実施形態では、実行ユニットが2つのデスティネーション命令をサポートし、これらデスティネーションのうちの1つが暗示される。データ操作命令は、第3のソースオペランド(例えば、SRC2 724)を有することができ、ここで、命令オペコード712は、ソースオペランドの数を決定する。命令の最後のソースオペランドは、命令と共に渡された即時(例えば、ハードコード化された)値とし得る。
【0135】
いくつかの実施形態では、128ビットの命令フォーマット710は、例えば、直接レジスタアドレス指定モードまたは間接レジスタアドレス指定モードが使用されるかどうかを指定するアクセス/アドレスモードフィールド726を含む。直接レジスタアドレス指定モードが使用される場合、1つまたは複数のオペランドのレジスタアドレスは、命令内のビットによって直接提供される。
【0136】
いくつかの実施形態では、128ビットの命令フォーマット710は、命令のためのアドレスモードおよび/またはアクセスモードを指定するアクセス/アドレスモードフィールド726を含む。一実施形態では、アクセスモードは、命令のためのデータアクセスアライメントを定義するために使用される。いくつかの実施形態では、16バイトのアライメントされたアクセスモードおよび1バイトのアライメントされたアクセスモードを含むアクセスモードをサポートし、ここで、アクセスモードのバイトアライメントが命令オペランドのアクセスアライメントを決定する。例えば、第1のモードでは、命令は、ソースおよびデスティネーションオペランドに対してバイトでアライメントされたアドレス指定を使用し、第2のモードでは、命令は、全てのソースおよびデスティネーションオペランドに対して16バイトでアライメントされたアドレス指定を使用することができる。
【0137】
一実施形態では、アクセス/アドレスモードフィールド726のアドレスモード部分は、命令が直接アドレス指定または間接アドレス指定を使用するかを決定する。直接レジスタアドレス指定モードが使用される場合、命令内のビットは、1つまたは複数のオペランドのレジスタアドレスを直接提供する。間接レジスタアドレス指定モードが使用される場合、1つまたは複数のオペランドのレジスタアドレスは、命令内のアドレスレジスタ値とアドレス即時フィールドに基づいて計算されてもよい。
【0138】
いくつかの実施形態では、命令は、オプコードデコード740を単純化するために、命令オプコード712のビットフィールドに基づいてグループ化される。8ビットのオペコードの場合、ビット4、5、および6は、実行ユニットがオペコードのタイプを決定することを可能にする。図示された精度のあるオプコードグループ化は、単なる例示にすぎない。いくつかの実施形態では、移動および論理オペコードグループ742は、データ移動および論理命令(例えば、移動(move)、比較(cmp))を含む。いくつかの実施形態では、移動および論理オペコードグループ742は、5つの最上位ビット(MSB)を共有しており、ここで、移動(move)命令は0000xxxxbの形式であり、論理命令は0001xxxxbの形式である。フロー制御命令群744(例えば、コール、ジャンプ(jmp))は、0010xxxxbの形式の命令(例えば、0x20)を含む。雑多な命令群746は、0011xxxxb(例えば、0x30)の形式の同期命令(例えば、Wait、send)を含む命令の組み合わせを含む。並列算術命令群748は、0100xxxxb(例えば、0x40)の形式のコンポーネントに関する算術命令(例えば、加算、乗算(mul))を含む。並列算術グループ748は、データチャネルにわたって並列に算術演算を実行する。ベクトル算術グループ750は、0101xxxxb(例えば、0x50)の形式の演算命令(例えば、dp4)を含む。ベクトル算術グループは、ベクトルオペランド上での内積計算などの算術を実行する。一実施形態では、図示されたオペコードデコード740は、実行ユニットのどの部分がデコードされた命令を実行するために使用されるかを決定するのに使用されることができる。例えば、いくつかの命令は、シストリック配列によって実行されるシストリック命令として指定され得る。レイトレーシング命令(図示せず)などの他の命令は、実行ロジックのスライスまたはパーティション内のレイトレーシングコアまたはレイトレーシングロジックにルーティングすることができる。
グラフィックスパイプライン
【0139】
図8は、グラフィックスプロセッサ800の別の実施形態のブロック図である。本明細書の任意の他の図中の要素と同じ参照番号(または名称)を有する図8中の要素は、本明細書の他の箇所で説明されたものと同様の任意の方法で動作または機能することができるが、これに限定されるものではない。
【0140】
いくつかの実施形態では、グラフィックスプロセッサ800は、ジオメトリパイプライン820、メディアパイプライン830、表示エンジン840、スレッド実行ロジック850、およびレンダリング出力パイプライン870を含む。いくつかの実施形態では、グラフィックスプロセッサ800は、1つまたは複数の汎用処理コアを含むマルチコア処理システム内のグラフィックスプロセッサである。グラフィックスプロセッサは、1つまたは複数の制御レジスタ(図示せず)へのレジスタ書き込みによって、またはリング相互接続802を介してグラフィックスプロセッサ800に発行されたコマンドを介して制御される。いくつかの実施形態では、リング相互接続802は、他のグラフィックスプロセッサまたは汎用プロセッサなどの他の処理コンポーネントにグラフィックスプロセッサ800を結合する。リング相互接続802からのコマンドは、コマンドストリーマ803によって解釈され、このコマンドストリーマ803は、ジオメトリパイプライン820またはメディアパイプライン830の個々のコンポーネントに命令を供給する。
【0141】
いくつかの実施形態では、コマンドストリーマ803は、メモリから頂点データを読み出し、コマンドストリーマ803によって提供される頂点処理コマンドを実行する頂点フェッチャ805の動作を指示する。いくつかの実施形態では、頂点フェッチャ805は、頂点データを頂点シェーダ807に提供し、各頂点に対して座標空間変換および照明操作を実行する。いくつかの実施形態では、頂点フェッチャ805および頂点シェーダ807は、スレッドディスパッチャ831を介して実行ユニット852a~852bに実行スレッドをディスパッチすることにより、頂点処理命令を実行する。
【0142】
いくつかの実施形態では、実行ユニット852Aおよび852Bは、グラフィックスおよびメディア操作を実行するための命令セットを有するベクトルプロセッサの配列である。いくつかの実施形態では、実行ユニット852Aおよび852Bは、各配列に固有の、または配列間で共有される付属のL1のキャッシュ851を有する。キャッシュは、データキャッシュ、命令キャッシュ、または異なるパーティションにデータおよび命令を含むように分割された単一のキャッシュとして構成することができる。
【0143】
いくつかの実施形態では、ジオメトリパイプライン820は、3Dオブジェクトのハードウェアアクセラレーションされたテッセレーションを実行するためのテッセレーションコンポーネントを含む。いくつかの実施形態では、プログラム可能なハルシェーダ811は、テッセレーション操作を構成する。プログラム可能なドメインシェーダ817は、テッセレーション出力のバックエンド評価を提供する。テッセレータ813は、ハルシェーダ811の方向に動作し、ジオメトリパイプライン820への入力として提供される粗い幾何学モデルに基づいて、詳細な幾何学オブジェクトのセットを生成するための特別な目的のロジックを含む。いくつかの実施形態では、テッセレーションが使用されない場合、テッセレーションコンポーネント(例えば、ハルシェーダ811、テッセレータ813、およびドメインシェーダ817)をバイパスすることができる。
【0144】
いくつかの実施形態では、完全なジオメトリオブジェクトは、実行ユニット852Aおよび852Bにディスパッチされた1つまたは複数のスレッドを介してジオメトリシェーダ819によって処理されることができるか、またはクリッパー829に直接進むことができる。いくつかの実施形態では、ジオメトリシェーダは、グラフィックスパイプラインの前の段階のような頂点または頂点のパッチではなく、むしろジオメトリオブジェクト全体に対して動作する。テッセレーションが無効化されている場合、ジオメトリシェーダ819は、頂点シェーダ807からの入力を受信する。いくつかの実施形態では、ジオメトリシェーダ819は、テッセレーションユニットが無効化されている場合にジオメトリテッセレーションを実行するように、ジオメトリシェーダプログラムによってプログラム可能である。
【0145】
ラスタライズの前に、クリッパー829が頂点データを処理する。クリッパー829は、固定関数クリッパーか、あるいはクリッピングおよびジオメトリシェーダー機能を有するプログラム可能なリッパーであってもよい。いくつかの実施形態では、レンダリング出力パイプライン870内のラスタライザおよび深度テストコンポーネント873は、ピクセルシェーダをディスパッチして、ジオメトリオブジェクトをピクセル単位の表現に変換する。いくつかの実施形態では、ピクセルシェーダロジックは、スレッド実行ロジック850に含まれる。いくつかの実施形態では、アプリケーションは、ラスタライザおよび深度テストコンポーネント873をバイパスして、ストリーム出力ユニット823を介してラスタライズされていない頂点データにアクセスすることができる。
【0146】
グラフィックスプロセッサ800は、相互接続バス、相互接続ファブリック、またはプロセッサの主要コンポーネント間でデータおよびメッセージの受け渡しを可能にするいくつかの他の相互接続機構を有する。いくつかの実施形態では、実行ユニット852Aおよび852Bならびに関連するロジックユニット(例えば、L1キャッシュ851、サンプラー854、テクスチャキャッシュ858など)は、メモリアクセスを実行し、かつプロセッサのレンダリング出力パイプラインのコンポーネントと通信するために、データポート856を介して相互接続する。いくつかの実施形態では、サンプラー854、キャッシュ851および858、ならびに実行ユニット852Aおよび852Bは、それぞれ別個のメモリアクセスパスを有する。一実施形態では、テクスチャキャッシュ858はまた、サンプラーキャッシュとしても構成することができる。
【0147】
いくつかの実施形態では、レンダリング出力パイプライン870は、頂点ベースのオブジェクトを関連するピクセルベースの表現に変換するラスタライザおよび深度テストコンポーネント873を含む。いくつかの実施形態では、ラスタライザロジックは、固定関数三角形およびラインラスタライゼーションを実行するためのウィンドウア(windower)/マスカ(masker)ユニットを含む。いくつかの実施形態では、関連するレンダーキャッシュ878およびデプスキャッシュ879も利用可能である。ピクセル操作コンポーネント877は、データ上でピクセルベースの操作を実行するが、いくつかのインスタンスでは、2D操作(例えば、ブレンドを伴うビットブロック画像転送)に関連付けられたピクセル操作は、2Dエンジン841によって実行されるか、またはオーバーレイ表示平面を使用してディスプレイコントローラ843によって表示時に代用される。いくつかの実施形態では、共有されたL3のキャッシュ875がすべてのグラフィックスコンポーネントに利用可能であり、メインシステムメモリを使用せずにデータの共有を可能にする。
【0148】
いくつかの実施形態では、グラフィックスプロセッサメディアパイプライン830は、メディアエンジン837および動画フロントエンド834を含む。いくつかの実施形態では、動画フロントエンド834は、コマンドストリーマ803からパイプラインコマンドを受信する。いくつかの実施形態では、メディアパイプライン830は、別個のコマンドストリーマを含む。いくつかの実施形態では、動画フロントエンド834は、メディアエンジン837にコマンドを送信する前に、メディアコマンドを処理する。いくつかの実施形態では、メディアエンジン837は、スレッドディスパッチャ831を介してスレッド実行ロジック850にディスパッチするためのスレッドを作成するためのスレッド作成機能を含む。
【0149】
いくつかの実施形態では、グラフィックスプロセッサ800は、ディスプレイエンジン840を含む。いくつかの実施形態では、ディスプレイエンジン840は、グラフィックスプロセッサ800の外部にあり、リング相互接続802、またはいくつかの他の相互接続バスまたはファブリックを介してグラフィックスプロセッサと結合する。いくつかの実施形態では、ディスプレイエンジン840は、2Dエンジン841およびディスプレイコントローラ843を含む。いくつかの実施形態では、ディスプレイエンジン840は、3Dパイプラインとは独立して動作可能な特別な目的のロジックを含む。いくつかの実施形態では、ディスプレイコントローラ843は、ディスプレイデバイス(図示せず)と結合し、これは、ラップトップコンピュータのようなシステム統合ディスプレイデバイスであってもよいし、ディスプレイデバイスコネクタを介して取り付けられた外部ディスプレイデバイスであってもよい。
【0150】
いくつかの実施形態では、ジオメトリパイプライン820およびメディアパイプライン830は、複数のグラフィックスおよびメディアプログラミングインタフェースに基づいて操作を実行するように構成可能であり、任意の1つのアプリケーションプログラミングインタフェース(API)に固有ではない。いくつかの実施形態では、グラフィックスプロセッサ用のドライバソフトウェアは、特定のグラフィックスまたはメディアライブラリに固有のAPIの呼び出しを、グラフィックスプロセッサによって処理できるコマンドに変換する。いくつかの実施形態では、サポートは、クロノス・グループ(Khronos Group)からオープングラフィックスライブラリ(OpenGL)、オープンコンピューティング言語(OpenCL)、および/またはヴァルカングラフィックスアンドコンピュート(Vulkan graphics and compute)APIの全てに提供される。いくつかの実施形態では、サポートは、マイクロソフトコーポレーションのDirect3Dライブラリにも提供され得る。いくつかの実施形態では、これらのライブラリの組み合わせがサポートされていてもよい。また、オープンソースコンピュータビジョンライブラリ(OpenCV)のサポートも提供され得る。互換性のある3Dパイプラインを有する将来のAPIも、将来のAPIのパイプラインからグラフィックスプロセッサのパイプラインへのマッピングが可能であれば、サポートされるであろう。
グラフィックスパイプラインプログラミング
【0151】
図9Aは、いくつかの実施形態に係るグラフィックスプロセッサコマンドフォーマット900を図示するブロック図である。図9Bは、一実施形態に係るグラフィックスプロセッサコマンドシーケンス910を図示するブロック図である。図9A中の実線で囲まれたボックスは、グラフィックスコマンドに一般的に含まれるコンポーネントを示し、一方、破線は、任意であるかまたはグラフィックスコマンドのサブセットにのみ含まれるコンポーネントを含む。図9Aの例示的なグラフィックスプロセッサのコマンドフォーマット900は、クライアント902を識別するためのデータフィールド、コマンド操作コード(オペコード)904、およびコマンドのためのデータ906を含む。サブオペコード905およびコマンドサイズ908もまた、いくつかのコマンドに含まれる。
【0152】
いくつかの実施形態では、クライアント902は、コマンドデータを処理するグラフィックスデバイスのクライアントユニットを指定する。いくつかの実施形態では、グラフィックスプロセッサのコマンドパーサは、各コマンドのクライアントフィールドを調べて、コマンドのさらなる処理を条件とし、コマンドデータを適切なクライアントユニットにルーティングする。いくつかの実施形態では、グラフィックスプロセッサのクライアントユニットは、メモリインタフェースユニット、レンダリングユニット、2Dユニット、3Dユニット、およびメディアユニットを含む。各クライアントユニットは、コマンドを処理する対応する処理パイプラインを有する。一旦コマンドがクライアントユニットによって受信されると、クライアントユニットは、実行すべき操作を決定するために、オペコード904と、存在する場合にはサブオペコード905を読み取る。クライアントユニットは、データフィールド906内の情報を使用してコマンドを実行する。いくつかのコマンドについては、明示的なコマンドサイズ908は、コマンドのサイズを指定することが期待される。いくつかの実施形態では、コマンドパーサは、コマンドオペコードに基づいて、コマンドの少なくとも一部のサイズを自動的に決定する。いくつかの実施形態では、コマンドは、ダブルワードの倍数を介して整列される。他のコマンドフォーマットを使用することができる。
【0153】
図9Bのフロー図は、例示的なグラフィックスプロセッサコマンドシーケンス910を示す。いくつかの実施形態では、グラフィックスプロセッサの一実施形態を特徴とするデータ処理システムのソフトウェアまたはファームウェアは、示されたコマンドシーケンスのバージョンを使用して、グラフィックス操作のセットのセットアップ、実行、および終了を行う。実施形態がこれらの特定のコマンドまたはこのコマンドシーケンスに限定されるものではないので、コマンドシーケンスのサンプルは、例示の目的のためだけに示され、説明されている。さらに、これらのコマンドは、グラフィックスプロセッサが少なくとも部分的に一致してコマンドシーケンスを処理するように、コマンドシーケンスのコマンドのバッチとして発行されてもよい。
【0154】
いくつかの実施形態では、グラフィックスプロセッサのコマンドシーケンス910は、任意のアクティブなグラフィックスパイプラインがパイプラインのための現在保留中のコマンドを完了させるために、パイプラインフラッシュコマンド912から開始されてもよい。いくつかの実施形態では、3Dパイプライン922とメディアパイプライン924は同時に動作しない。パイプラインフラッシュは、アクティブなグラフィックスパイプラインが現在保留中の任意のコマンドを完了させるように実行される。パイプラインフラッシュに応答して、グラフィックスプロセッサのコマンドパーサは、アクティブな描画エンジンが保留中の操作を完了し、関連するリードキャッシュが無効になるまで、コマンド処理を一時停止する。任意には、「ダーティ」とマークされたレンダーキャッシュ内の任意のデータがメモリにフラッシュされることができる。いくつかの実施形態では、パイプラインフラッシュコマンド912は、パイプライン同期のために、またはグラフィックスプロセッサを低電力状態にする前に使用することができる。
【0155】
いくつかの実施形態では、パイプライン選択コマンド913は、コマンドシーケンスがグラフィックスプロセッサにパイプライン間を明示的に切り替えように要求する場合に使用される。いくつかの実施形態では、パイプライン選択コマンド913は、コンテキストが両方のパイプラインのためのコマンドを発行する予定ではない限り、パイプラインのコマンドを発行する前に実行コンテキスト内で一度だけ要求される。いくつかの実施形態では、パイプライン選択コマンド913を介したパイプライン切り替えの直前に、パイプラインフラッシュコマンド912が要求される。
【0156】
いくつかの実施形態では、パイプライン制御コマンド914は、演算のためのグラフィックスパイプラインを構成し、3Dパイプライン922およびメディアパイプライン924をプログラムするために使用される。いくつかの実施形態では、パイプライン制御コマンド914は、アクティブなパイプラインのためのパイプライン状態を構成する。一実施形態では、パイプライン制御コマンド914は、パイプライン同期のために使用され、コマンドのバッチを処理する前に、アクティブパイプライン内の1つまたは複数のキャッシュメモリからデータをクリアするために使用される。
【0157】
いくつかの実施形態では、リターンバッファ状態コマンド916は、それぞれのパイプラインがデータを書き込むためのリターンバッファのセットを構成するために使用される。いくつかのパイプライン操作は、処理中に操作が中間データを書き込む1つまたは複数のリターンバッファの割り当て、選択、または構成を必要とする。いくつかの実施形態では、グラフィックスプロセッサはまた、出力データを格納し、クロススレッド通信を実行するために、1つまたは複数のリターンバッファをも使用する。いくつかの実施形態では、リターンバッファ状態コマンド916は、パイプライン操作のセットに使用するリターンバッファのサイズおよび数を選択することを含む。
【0158】
コマンドシーケンスの残りのコマンドは、操作のためのアクティブなパイプラインに基づいて異なる。パイプライン決定920に基づいて、コマンドシーケンスは、3Dパイプライン状態930で始まる3Dパイプライン922、またはメディアパイプライン状態940で始まるメディアパイプライン924に合わせて調整される。
【0159】
3Dパイプライン状態930を構成するためのコマンドは、頂点バッファ状態、頂点要素状態、一定の色状態、深度バッファ状態、および3Dプリミティブコマンドが処理される前に構成されるべき他の状態変数のための3D状態設定コマンドを含む。これらのコマンドの値は、使用中の特定の3D APIに基づいて少なくとも部分的に決定される。いくつかの実施形態では、3Dパイプライン状態930のコマンドはまた、これら特定のパイプライン要素が使用されない場合に、選択的に特定のパイプライン要素を無効にするか、またはバイパスすることができる。
【0160】
いくつかの実施形態では、3Dプリミティブ932コマンドを使用して、3Dパイプラインによって処理される3Dプリミティブを提出する。3Dプリミティブ932コマンドを介してグラフィックスプロセッサに渡されるコマンドおよび関連するパラメータは、グラフィックスパイプライン内の頂点フェッチ機能に転送される。頂点フェッチ機能は、3Dプリミティブ932のコマンドデータを使用して頂点データ構造を生成する。頂点データ構造は、1つまたは複数のリターンバッファに格納される。いくつかの実施形態では、3Dプリミティブ932のコマンドは、頂点シェーダを介して3Dプリミティブ上で頂点演算を実行するために使用される。頂点シェーダを処理するために、3Dパイプライン922は、シェーダ実行スレッドをグラフィックスプロセッサ実行ユニットにディスパッチする。
【0161】
いくつかの実施形態では、3Dパイプライン922は、実行934のコマンドまたはイベントを介してトリガされる。いくつかの実施形態では、レジスタの書き込みは、コマンドの実行をトリガする。いくつかの実施形態では、実行は、コマンドシーケンスにおける「go」または「kick」コマンドを介してトリガされる。一実施形態では、コマンドの実行は、パイプライン同期コマンドを使用してトリガされ、グラフィックスパイプラインを介してコマンドシーケンスをフラッシュする。3Dパイプラインは、3Dプリミティブのためのジオメトリ処理を実行する。一旦操作が完了すると、その結果として得られるジオメトリオブジェクトがラスタライズされ、ピクセルエンジンはその結果として得られるピクセルを着色する。ピクセルのシェーディングやピクセルのバックエンド操作を制御するための追加コマンドも、これらの操作のために含まれていてもよい。
【0162】
いくつかの実施形態では、グラフィックスプロセッサのコマンドシーケンス910は、メディア操作を実行する際にメディアパイプライン924のパスに従う。一般に、メディアパイプライン924のための特定の使用およびプログラミングの態様は、実行されるメディアまたは計算操作に依存する。特定のメディアデコード操作は、メディアデコード中にメディアパイプラインにオフロードされてもよい。いくつかの実施形態では、メディアパイプラインをバイパスすることもでき、メディアデコードは、1つまたは複数の汎用処理コアによって提供されるリソースを使用して、全体的または部分的に実行することができる。一実施形態では、メディアパイプラインはまた、汎用グラフィックスプロセッサユニット(GPGPU)操作のための要素を含み、ここで、グラフィックスプロセッサは、グラフィックスプリミティブのレンダリングに明示的に関連しない計算シェーダプログラムを使用してSIMDベクトル操作を実行するために使用される。
【0163】
いくつかの実施形態では、メディアパイプライン924は、3Dパイプライン922と同様の方法で構成される。メディアパイプライン状態940を構成するためのコマンドのセットは、ディスパッチされるか、あるいはメディアオブジェクトコマンド942の前のキューに入るコマンドに配置される。いくつかの実施形態では、メディアパイプライン状態940を構成するためのコマンドは、メディアオブジェクトを処理するために使用されるメディアパイプラインの要素を構成するデータを含む。これは、エンコードまたはデコードフォーマットなどのメディアパイプライン内の動画デコードおよび動画エンコードロジックを構成するためのデータを含む。いくつかの実施形態では、メディアパイプライン状態940に対するコマンドは、状態設定のバッチを含む「間接的な」状態要素に1つまたは複数のポインタを使用することをサポートする。
【0164】
いくつかの実施形態では、メディアオブジェクトコマンド942は、メディアパイプラインによる処理対象のメディアオブジェクトへのポインタを供給する。メディアオブジェクトは、処理されるべき動画データを含むメモリバッファを含む。いくつかの実施形態では、メディアオブジェクトのコマンド942を発行する前に、全てのメディアパイプラインの状態が有効でなければならない。一旦パイプラインの状態が構成されかつメディアオブジェクトコマンド942がキューに入れられると、メディアパイプライン924は、実行コマンド944または同等の実行イベント(例えば、レジスタ書き込み)を介してトリガされる。次いで、メディアパイプライン924からの出力は、3Dパイプライン922またはメディアパイプライン924によって提供される操作によって後処理されてもよい。いくつかの実施形態では、GPGPUの操作は、メディア操作と同様の方法で構成かつ実行される。グラフィック・ソフトウェア・アーキテクチャ
【0165】
図10は、いくつかの実施形態に係るデータ処理システム1000のための例示的なグラフィック・ソフトウェア・アーキテクチャを示す。いくつかの実施形態では、ソフトウェア・アーキテクチャは、3Dグラフィックスアプリケーション1010、オペレーティングシステム1020、および少なくとも1つのプロセッサ1030を含む。いくつかの実施形態では、プロセッサ1030は、グラフィックスプロセッサ1032および1つまたは複数の汎用プロセッサコア1034を含む。グラフィックスアプリケーション1010およびオペレーティングシステム1020は、それぞれデータ処理システムのシステムメモリ1050内で実行される。
【0166】
いくつかの実施形態では、3Dグラフィックスアプリケーション1010は、シェーダ命令1012を含む1つまたは複数のシェーダプログラムを含む。シェーダ言語命令は、Direct3Dの高水準シェーダ言語(HLSL)またはOpenGLシェーダ言語(GLSL)などの高水準シェーダ言語によるものであってもよい。また、アプリケーションは、汎用プロセッサコア1034により実行するのに好適な機械言語による複数の実行可能命令1014をも含む。また、アプリケーションは、頂点データによって定義された複数のグラフィックスオブジェクト1016も含む。
【0167】
いくつかの実施形態では、オペレーティングシステム1020は、マイクロソフトコーポレーションから利用可能なマイクロソフト(登録商標)ウィンドウズ(登録商標)オペレーティングシステム、プロプライエタリUNIX(登録商標)様式のオペレーティングシステム、またはLinux(登録商標)カーネルの変形を用いるオープンソースUNIX(登録商標)様式のオペレーティングシステムであってもよい。オペレーティングシステム1020は、Direct3D API、OpenGL API、またはVulkan APIなどのグラフィックスAPI1022をサポートすることができる。Direct3D APIが使用される場合、オペレーティングシステム1020は、フロントエンドのシェーダコンパイラ1024を使用して、HLSL内の任意のシェーダ命令1012を低水準のシェーダ言語にコンパイルする。コンパイルは、ジャストインタイム(JIT)コンパイルであってもよいし、あるいはアプリケーションがシェーダのプリコンパイルを実行することができる。いくつかの実施形態では、高水準のシェーダは、3Dグラフィックスアプリケーション1010のコンパイル中に低水準のシェーダにコンパイルされる。いくつかの実施形態では、シェーダ命令1012は、Vulkan APIによって使用される標準ポータブル中間表現(SPIR)のバージョンなどの中間形式で提供される。
【0168】
いくつかの実施形態では、ユーザモードグラフィックスドライバ1026は、シェーダ命令1012をハードウェア固有の表現に変換するためのバックエンドシェーダコンパイラ1027を含む。OpenGL APIが使用されている場合、GLSL高レベル言語のシェーダ命令1012は、コンパイルのためにユーザモードグラフィックスドライバ1026に渡される。いくつかの実施形態では、ユーザモードグラフィックスドライバ1026は、オペレーティングシステムカーネルモード機能1028を使用して、カーネルモードグラフィックスドライバ1029と通信する。いくつかの実施形態では、カーネルモードグラフィックスドライバ1029は、グラフィックスプロセッサ1032と通信して、コマンドおよび命令をディスパッチする。
IPコアの実装
【0169】
少なくとも1つの実施形態の1つまたは複数の態様は、プロセッサなどの集積回路内のロジックを表すおよび/または定義する機械可読媒体に格納された代表的なコードによって実装されてもよい。例えば、機械可読媒体は、プロセッサ内の様々なロジックを表す命令を含んでもよい。命令は、機械によって読み取られると、機械が本明細書に記載された技術を実行するロジックを製造させ得る。「IPコア」として知られるこのような表現は、集積回路の構造を説明するハードウェアモデルとして、有形の機械可読媒体に格納し得る、集積回路用の再利用可能なロジック単位である。ハードウェアモデルは、様々な顧客または製造施設に供給されてもよく、それら顧客や製造施設は、集積回路を製造する製造装置にハードウェアモデルをロードする。集積回路は、当該回路が本明細書に記載された実施形態のいずれかに関連して記載された動作を実行するように製造されてもよい。
【0170】
図11Aは、一実施形態に係る操作を実行するための集積回路を製造するのに使用されてもよいIPコア開発システム1100を図示するブロック図である。IPコア開発システム1100を使用して、より大きな設計に組み込むことができるモジュール式の再利用可能な設計を生成し得るか、あるいは集積回路全体(例えば、SOC集積回路)を構築し得る。設計設備1130は、高レベルのプログラミング言語(例えば、C/C++)でIPコア設計のソフトウェアシミュレーション1110を生成することができる。ソフトウェアシミュレーション1110は、シミュレーションモデル1112を使用して、IPコアの動作を設計、テスト、および検証するために使用することができる。シミュレーションモデル1112は、機能シミュレーション、動作シミュレーション、および/またはタイミングシミュレーションを含んでもよい。次に、レジスタ転送レベル(RTL)のデザイン1115は、シミュレーションモデル1112から作成または合成されることができる。RTLデザイン1115は、ハードウェアレジスタ間のデジタル信号の流れをモデル化し、モデル化されたデジタル信号を使用して実行される関連ロジックを含む、集積回路の動作の抽象化である。RTLデザイン1115に加えて、論理レベルまたはトランジスタレベルでの下位レベルのデザインも作成、設計、または合成されてもよい。したがって、初期設計およびシミュレーションの特定の詳細は変化してもよい。
【0171】
さらに、RTLデザイン1115またはそれに同等なものは、ハードウェア記述言語(HDL)または物理デザインデータのいくつかの他の表現であってもよいハードウェアモデル1120に、設計設備によって合成されてもよい。HDLは、IPコア設計を検証するために、さらにシミュレーションまたはテストされてもよい。IPコア設計は、不揮発性メモリ1140(例えば、ハードディスク、フラッシュメモリ、または任意の不揮発性記憶媒体)を使用して、サードパーティの製造施設1165に引き渡すために格納することができる。あるいは、IPコア設計は、有線接続1150または無線接続1160を介して(例えば、インターネットを介して)送信されてもよい。ついで、製造施設1165は、IPコア設計に少なくとも部分的に基づいて集積回路を製造してもよい。製造された集積回路は、本明細書に記載された少なくとも1つの実施形態に従った動作を実行するように構成することができる。
【0172】
図11Bは、本明細書に記載されたいくつかの実施形態に係る集積回路パッケージアセンブリ1170の断面側面図を示す。集積回路パッケージアセンブリ1170は、本明細書に記載されるような1つまたは複数のプロセッサまたはアクセラレータデバイスの実装を図示している。パッケージアセンブリ1170は、基板1180に接続された複数のハードウェアのロジック1172および1174のユニットを含む。ロジック1172および1174は、構成可能なロジックハードウェアまたは固定機能ロジックハードウェアで少なくとも部分的に実装されてもよく、本明細書に記載されたプロセッサコア(複数可)、グラフィックスプロセッサ(複数可)、または他のアクセラレータデバイスのいずれかの1つまたは複数の部分を含むことができる。ロジック1172および1174の各単位は、半導体ダイ内に実装され、相互接続構造1173を介して基板1180と結合することができる。相互接続構造1173は、ロジック1172および1174と基板1180との間で電気信号をルーティングするように構成されてもよく、例えば、これらに限定されないが、段差または柱などの相互接続を含むことができる。いくつかの実施形態では、相互接続構造1173は、例えば、ロジック1172および1174の動作に関連付けられる入力/出力(I/O)信号および/または電力または接地信号などの電気信号をルーティングするように構成されてもよい。いくつかの実施形態では、基板1180は、エポキシ系の積層基板である。他の実施形態では、基板1180は、他の好適なタイプの基板を含んでもよい。パッケージアセンブリ1170は、パッケージ相互接続1183を介して他の電気デバイスに接続することができる。パッケージ相互接続1183は、マザーボード、他のチップセット、またはマルチチップモジュールなどの他の電気デバイスに電気信号をルーティングするために、基板1180の表面に結合され得る。
【0173】
いくつかの実施形態では、ロジック1172および1174のユニットは、ロジック1172および1174の間で電気信号をルーティングするように構成されたブリッジ1182と電気的に結合されている。ブリッジ1182は、電気信号のルートを提供する密な相互接続構造であってもよい。ブリッジ1182は、ガラスまたは適切な半導体材料で構成されたブリッジ基板を含んでもよい。電気的ルーティング機能は、ロジック1172および1174間のチップ間接続を提供するために、ブリッジ基板上に形成可能である。
【0174】
ロジック1172および1174の2つのユニットならびにブリッジ1182は図示されているが、本明細書に記載された実施形態は、1つまたは複数のダイ上のより多くのまたはより少ないロジックユニットを含んでもよい。ロジックが単一のダイに含まれる場合、ブリッジ1182は除外されてもよいので、1つまたは複数のダイは、ゼロまたはそれ以上のブリッジによって接続されてもよい。代替的に、複数のダイまたはロジックユニットは、1つまたは複数のブリッジによって接続されることができる。加えて、複数のロジックユニット、ダイ、およびブリッジは、三次元構成を含む他の可能な構成で一緒に接続することができる。
【0175】
図11Cは、基板1180(例えば、ベースダイ)に接続されたハードウェアロジックチップレットの複数のユニットを含むパッケージアセンブリ1190を示す。本明細書に記載されるようなグラフィックス処理ユニット、並列プロセッサ、および/または計算アクセラレータは、個別に製造される多様なシリコンチップレットから構成することができる。このコンテキストでは、チップレットは、他のチップレットと合わせてより大きなパッケージに組み立てることができる別個のロジックユニットを含む、少なくとも部分的にパッケージ化された集積回路である。異なるIPコアロジックを持つ多様なチップレットのセットを単一のデバイスに組み立てることができる。加えて、アクティブインターポーザ技術を使用して、チップレットをベースダイまたはベースチップレットに統合することができる。本明細書に記載された概念は、GPU内の異なる形態のIPの異なる形式間の相互接続および通信を可能にする。IPコアは、異なるプロセス技術を使用して製造され、製造中に構成することができる、これにより、特にいくつかのフレーバーIPを有する大規模なSoCにて複数のIPを同じ製造プロセスに収束させるという複雑さを回避することができる。複数のプロセス技術の使用を可能にすることで、市場投入までの時間を改善し、複数の製品のSKUを作成する費用対効果の高い方法が提供される。さらに、分解されたIPは独立してパワーゲーティングされやすく、所与のワークロードで使用されていないコンポーネントの電源をオフにして、全体的な消費電力を削減することができる。
【0176】
ハードウェアロジックチップレットは、特別な目的のハードウェアロジックチップレット1172、ロジックまたはI/Oチップレット1174、および/またはメモリチップレット1175を含むことができる。ハードウェアロジックチプレット1172およびロジックまたはI/Oチプレット1174は、少なくとも部分的に構成可能なロジックまたは固定機能ロジックハードウェアで実装され得、本明細書に記載されたプロセッサコア(複数可)、グラフィックスプロセッサ(複数可)、並列プロセッサ、または他のアクセラレータデバイスのいずれかの1つまたは複数の部分を含むことができる。メモリチップレット1175は、DRAM(例えば、GDDR、HBM)メモリまたはキャッシュ(SRAM)メモリであり得る。
【0177】
各チップレットは、別個の半導体ダイとして製造され、相互接続構造1173を介して基板1180に結合されることができる。相互接続構造1173は、様々なチップレットと基板1180内のロジックとの間で電気信号をルーティングするように構成されていてもよい。相互接続構造1173は、これらに限られないが、バンプまたは柱などの相互接続を含むことができる。いくつかの実施形態では、相互接続構造1173は、例えば、ロジック、I/Oおよびメモリチップレットの動作に関連付けられる、入力/出力(I/O)信号、ならびに/あるいは電源またはグランド信号などの電気信号をルーティングするように構成されてもよい。
【0178】
いくつかの実施形態では、基板1180は、エポキシ系の積層基板である。他の実施形態では、基板1180は、他の好適なタイプの基板を含んでもよい。パッケージアセンブリ1190は、パッケージ相互接続1183を介して他の電気デバイスに接続することができる。パッケージ相互接続1183は、マザーボード、他のチップセット、またはマルチチップモジュールなどの他の電気デバイスに電気信号をルーティングするために、基板1180の表面に結合されてもよい。
【0179】
いくつかの実施形態では、ロジックまたはI/Oチップレット1174およびメモリチップレット1175は、ロジックまたはI/Oチップレット1174とメモリチップレット1175との間で電気信号をルーティングするように構成されたブリッジ1187を介して電気的に結合され得る。ブリッジ1187は、電気信号のルートを提供する密な相互接続構造であってもよい。ブリッジ1187は、ガラスまたは適切な半導体材料で構成されたブリッジ基板を含んでもよい。電気的ルーティング機能は、ロジックまたはI/Oチップレット1174とメモリチップレット1175との間のチップ間接続を提供するためにブリッジ基板上に形成することができる。ブリッジ1187は、シリコンブリッジまたはインターコネクトブリッジと呼ばれてもよい。例えば、いくつかの実施形態では、ブリッジ1187は、エンベデッド・マルチダイ・インターコネクト・ブリッジ(EMIB)である。いくつかの実施形態では、ブリッジ1187は、単に1つのチップレットから別のチップレットへの直接接続であってもよい。
【0180】
基板1180は、I/O1191、キャッシュメモリ1192、および他のハードウェアロジック1193のためのハードウェアコンポーネントを含むことができる。ファブリック1185を基板1180内に埋め込んで、基板1180内の様々なロジックチップレットとロジック1191および1193との間の通信を可能にする。一実施形態では、I/O1191、ファブリック1185、キャッシュ、ブリッジ、および他のハードウェアロジック1193は、基板1180の上に積層されたベースダイに統合されることができる。
【0181】
様々な実施形態では、パッケージアセンブリ1190は、ファブリック1185または1つまたは複数のブリッジ1187によって相互接続されている、より少ない数またはより多い数のコンポーネントおよびチップレットを含むことができる。パッケージアセンブリ1190内のチップレットは、3Dまたは2.5Dの配列で配置されてもよい。一般に、ブリッジ構造1187は、例えば、ロジックまたはI/Oチップレットとメモリチップレットとの間のポイント間の相互接続を容易にするために使用されてもよい。ファブリック1185は、様々なロジックおよび/またはI/Oチップレット(例えば、チップレット1172、1174、1191および1193)を他のロジックおよび/またはI/Oチップレットと相互接続するために使用することができる。一実施形態では、基板内のキャッシュメモリ1192は、パッケージアセンブリ1190のためのグローバルキャッシュ、分散グローバルキャッシュの一部、またはファブリック1185のための専用キャッシュとして機能することができる。
【0182】
図11Dは、一実施形態に係る交換可能なチップレット1195を含むパッケージアセンブリ1194を示す。交換可能なチップレット1195は、1つまたは複数のベースチップレット1196および1198上の標準化されたスロットに組み立てることができる。ベースチップレット1196および1198は、ブリッジ相互接続1197を介して結合することができ、この相互接続は本明細書に記載された他のブリッジ相互接続と同様とすることができ、例えば、EMIBであり得る。メモリチップレットはまた、ブリッジ相互接続を介してロジックまたはI/Oチップレットにも接続することができる。I/Oチップレットおよびロジックチップレットは、相互接続ファブリックを介して通信することができる。ベースチップレットは、それぞれ、ロジックまたはI/Oまたはメモリ/キャッシュのいずれかのための標準化されたフォーマットの1つまたは複数のスロットをサポートすることができる。
【0183】
一実施形態では、SRAMおよび電力送達回路は、ベースチップレット1196および1198のうちの1つまたは複数のベースチップレットに製造することができ、これらベースチップレットは、当該ベースチップレットの上に積層される交換可能なチップレット1195とは異なるプロセス技術を使用して製造することができる。例えば、ベースチップレット1196および1198は、より大きなプロセス技術を用いて製造することができ、一方、交換可能なチップレットは、より小さなプロセス技術を用いて製造することができる。交換可能なチップレット1195のうちの1つまたは複数は、メモリ(例えば、DRAM)チップレットであってもよい。パッケージアセンブリ1194を使用する製品のために目標とする電力、および/または性能に基づいて、パッケージアセンブリ1194のために異なるメモリ密度を選択することができる。加えて、異なるタイプや数の機能ユニットを有するロジックチップレットを、電力、および/または製品の目標とする性能に基づいて、組立時に選択することができる。加えて、異なるタイプのIPロジックコアを含むチップレットを交換可能なチップレットスロットに挿入することができ、これにより異なる技術のIPブロックを混合して適合させることができるハイブリッドプロセッサ設計を可能にする。
例示的なシステム・オン・チップ集積回路
【0184】
図12図13A、および図13Bは、本明細書に記載された様々な実施形態によれば、1つまたは複数のIPコアを使用して製造し得る例示的な集積回路および関連するグラフィックスプロセッサを図示している。図示されたものに加えて、追加のグラフィックスプロセッサ/コア、周辺インタフェースコントローラ、または汎用プロセッサコアを含む、他のロジックおよび回路が含まれてもよい。
【0185】
図12は、一実施形態に係る1つまたは複数のIPコアを用いて製造され得る、例示的なシステム・オン・チップ集積回路1200を示すブロック図である。例示的な集積回路1200は、少なくとも1つのグラフィックスプロセッサ1210にて1つまたは複数のアプリケーションプロセッサ1205(例えば、CPU)を含み、加えて画像プロセッサ1215および/または動画プロセッサ1220を含んでもよく、これらのいずれかは、同一または複数の異なる設計設備からのモジュラーIPコアであってもよい。集積回路1200は、USBコントローラ1225、UARTコントローラ1230、SPI/SDIOコントローラ1235、およびIS/ICコントローラ1240を含む周辺機器またはバスロジックを含む。加えて、集積回路は、高精細マルチメディアインタフェース(HDMI(登録商標))コントローラ1250およびモバイル産業プロセッサインタフェース(MIPI)のディスプレイインタフェース1255のうちの1つまたは複数に結合されたディスプレイデバイス1245を含むことができる。ストレージは、フラッシュメモリおよびフラッシュメモリコントローラを含むフラッシュメモリサブシステム1260によって提供されてもよい。メモリインタフェースは、SDRAMまたはSRAMメモリデバイスへのアクセスのためのメモリコントローラ1265を介して提供されてもよい。集積回路の一部は、さらに組込みセキュリティエンジン1270を含む。
【0186】
図13Aおよび13Bは、本明細書に記載された実施形態に係る、SoC内で使用するための例示的なグラフィックスプロセッサを図示するブロック図である。図13Aは、一実施形態に係る、1つまたは複数のIPコアを用いて製造され得るシステム・オン・チップ集積回路の例示的なグラフィックスプロセッサ1310を図示している。図13Bは、一実施形態に係る、1つまたは複数のIPコアを用いて製造され得るシステム・オン・チップ集積回路の追加の例示的なグラフィックスプロセッサ1340を図示している。図13Aのグラフィックスプロセッサ1310は、低消費電力のグラフィックスプロセッサコアの一例である。図13Bのグラフィックスプロセッサ1340は、より高性能なグラフィックスプロセッサコアの一例である。グラフィックスプロセッサ1310および1340の各々は、図12のグラフィックスプロセッサ1210の変形とし得る。
【0187】
図13Aに示すように、グラフィックスプロセッサ1310は、頂点プロセッサ1305と、1つまたは複数のフラグメントプロセッサ(複数可)1315A~1315N(例えば、1315N-1および1315Nを介した、1315A、1315B、1315C、および1315D)とを含む。1つまたは複数のフラグメントプロセッサ(複数可)1315A~1315Nは、フラグメントまたはピクセルのシェーダプログラムのフラグメント(例えば、ピクセル)シェーディング操作を実行するとともに、グラフィックスプロセッサ1310は、頂点プロセッサ1305が頂点シェーダプログラムのための操作を実行するよう最適化されるように、別個のロジックを介して異なるシェーダプログラムを実行することができる。頂点プロセッサ1305は、3Dグラフィックスパイプラインの頂点処理段階を実行し、プリミティブおよび頂点データを生成する。フラグメントプロセッサ(複数)1315A~1315Nは、頂点プロセッサ1305によって生成されたプリミティブおよび頂点データを使用して、ディスプレイデバイスに表示されたフレームバッファを生成する。一実施形態では、フラグメントプロセッサ(複数可)1315A~1315Nは、OpenGL APIで提供されるようなフラグメントシェーダプログラムを実行するように最適化されており、これは、Direct 3D APIで提供されるようなピクセルシェーダプログラムと同様の操作を実行するのに使用されてもよい。
【0188】
グラフィックスプロセッサ1310は、加えて、1つまたは複数のメモリ管理ユニット(MMU)1320Aおよび1320B、キャッシュ(複数可)1325Aおよび1325B、ならびに回路相互接続1330Aおよび1330Bを含む。前記1つまたは複数のMMU(複数可)1320Aおよび1320Bは、1つまたは複数のキャッシュ(複数可)1325Aおよび1325Bに格納された頂点または画像/テクスチャデータに加えて、メモリに格納された頂点または画像/テクスチャデータを参照してもよい頂点プロセッサ1305および/またはフラグメントプロセッサ(複数可)1315A~1315Nを含むグラフィックスプロセッサ1310に対して、仮想アドレスから物理アドレスへのマッピングを提供する。一実施形態では、1つまたは複数のMMU(複数可)1320A~1320Bは、各プロセッサ1205~1220が共有または統一された仮想メモリシステムに参加できるように、図12の1つまたは複数のアプリケーションプロセッサ(複数可)1205、画像プロセッサ1215、および/または動画プロセッサ1220に関連付けられた1つまたは複数のMMUを含む、システム内の他のMMUと同期していてもよい。1つまたは複数の回路相互接続(複数可)1330Aおよび1330Bは、実施形態によれば、グラフィックスプロセッサ1310が、SoCの内部バスを介してまたは直接接続を介して、SoC内の他のIPコアとインタフェースすることを可能にする。
【0189】
図13Bに示すように、グラフィックスプロセッサ1340は、図13Aのグラフィックスプロセッサ1310の1つまたは複数のMMU(複数可)1320Aおよび1320B、キャッシュ(複数可)1325Aおよび1325B、および回路相互接続(複数可)1330Aおよび1330Bを含む。グラフィックスプロセッサ1340は、1つまたは複数のシェーダコア(複数可)1355A~1355N(例えば、1355N-1、および1355Nを通して1455A、1355B、1355C、1355D、1355Eおよび1355F、)を含み、これは統一されたシェーダコアアーキテクチャを提供するものであり、このアーキテクチャでは、単一のコアまたはタイプあるいはコアが、頂点シェーダ、フラグメントシェーダ、および/または計算シェーダを実装するためのシェーダプログラムコードを含む、すべてのタイプのプログラム可能なシェーダコードを実行することができる。既存のシェーダコアの正確な数は、実施形態および実装によって異なることが可能である。加えて、グラフィックスプロセッサ1340は、実行スレッドを1つまたは複数のシェーダコア1355A~1355Nにディスパッチするスレッドディスパッチャとして機能するコア間タスクマネージャ1345と、タイルベースレンダリングのためのタイリング操作を加速するタイリングユニット1358とを含み、そこでシーンのレンダリング操作は、例えばシーン内のローカル空間コヒーレンスを活用したり、内部キャッシュの使用を最適化するために、画像空間に細分化される。
機械学習の概要
【0190】
機械学習アルゴリズムは、データセットに基づいて学習することができるアルゴリズムである。機械学習アルゴリズムの実施形態は、データセット内の高レベルの抽象化をモデル化するように設計することができる。例えば、画像認識アルゴリズムは、所与の入力がいくつかのカテゴリのうちのどのカテゴリに属するかを決定するために使用することができ、回帰アルゴリズムは、入力が与えられると数値を出力することができ、パターン認識アルゴリズムは、変換されたテキストを生成したり、あるいはテキストから音声および/または音声認識を実行するために使用することができる。
【0191】
例示的なタイプの機械学習アルゴリズムは、ニューラルネットワークである。ニューラルネットワークには多くのタイプがあり、ニューラルネットワークの単純なタイプはフィードフォワードネットワークである。フィードフォワードネットワークは、ノードが層状に配置された非巡回グラフとして実装されてもよい。典型的には、フィードフォワードネットワークのトポロジーは、少なくとも1つの隠れ層によって分離された入力層および出力層を含む。隠れ層は、入力層によって受信された入力を、出力層において出力を生成するのに有用な表現に変換する。ネットワークのノードはエッジを介して隣接する層のノードに全結合されているが、各層内のノード間にはエッジは存在しない。フィードフォワードネットワークの入力層のノードで受信されたデータは、各層を接続するエッジのそれぞれに関連付けられた係数(「重み」)に基づいて、ネットワーク内の各連続する層のノードの状態を計算する活性化関数を介して、出力層のノードに伝搬される(すなわち、「フィードフォワード」される)。実行されるアルゴリズムによって表現される特定のモデルに応じて、ニューラルネットワークアルゴリズムからの出力は、様々な形態をとることができる。
【0192】
機械学習アルゴリズムを特定の問題のモデル化に使用することができる以前に、このアルゴリズムは訓練データセットを使用して訓練される。ニューラルネットワークを訓練することは、ネットワークのトポロジーを選択することと、ネットワークによってモデル化された問題を表す訓練データのセットを使用することと、ネットワークモデルが訓練データセットの全てのインスタンスに対して最小のエラーで実行されるまで重みを調整することとを含む。例えば、ニューラルネットワークの教師付き学習訓練プロセスの間、訓練データセットのインスタンスを表す入力に応答してネットワークによって生成された出力が、そのインスタンスの「正しい」とラベル付けされた出力と比較され、出力とラベル付けされた出力との間の差を表す誤差信号が計算され、誤差信号がネットワークの層を介して後方に伝搬される際に接続に関連付けられた重みがその誤差を最小化するように調整される。ネットワークは、訓練データセットのインスタンスから生成された各出力の誤差が最小化されたときに「訓練された」とみなされる。
【0193】
機械学習アルゴリズムの精度は、アルゴリズムを訓練するために使用されるデータセットの品質によって大きく影響を受ける可能性がある。訓練処理は計算量が多く、従来の汎用プロセッサ上ではかなりの時間を必要とする場合がある。したがって、多くのタイプの機械学習アルゴリズムの訓練には、並列処理ハードウェアが使用される。これは、ニューラルネットワークの係数を調整する際に実行される計算が並列実装に自然に役立つため、ニューラルネットワークの訓練を最適化するのに特に有用である。具体的には、多くの機械学習アルゴリズムやソフトウェアアプリケーションは、汎用グラフィックス処理デバイス内の並列処理ハードウェアを活用するように適合される。
【0194】
図14は、機械学習ソフトウェアスタック1400の一般化された図である。機械学習アプリケーション1402は、訓練データセットを使用してニューラルネットワークを訓練するように構成されるか、あるいは訓練されたディープニューラルネットワークを使用して機械知能を実装するように構成されることができる。機械学習アプリケーション1402は、ニューラルネットワークのための訓練および推論機能、および/または展開前にニューラルネットワークを訓練するために使用することができる特殊なソフトウェアを含むことができる。機械学習アプリケーション1402は、これらに限られないが、画像認識、マッピングおよび定位、自律的ナビゲーション、音声合成、医療画像化、または言語翻訳を含む任意のタイプの機械知能を実装することができる。
【0195】
機械学習アプリケーション1402のためのハードウェアアクセラレーションは、機械学習フレームワーク1404を介して有効にすることができる。機械学習フレームワーク1404は、機械学習プリミティブのライブラリを提供することができる。機械学習プリミティブは、機械学習アルゴリズムによって一般的に実行される基本的な操作である。機械学習フレームワーク1404がなければ、機械学習アルゴリズムの開発者は、機械学習アルゴリズムに関連付けられる主な計算ロジックを作成かつ最適化し、その後、新しい並列プロセッサが開発されるにつれて計算ロジックを再最適化することを要求されるであろう。代わりに、機械学習アプリケーションは、機械学習フレームワーク1404によって提供されるプリミティブを使用して必要な計算を実行するように構成することができる。例示的なプリミティブは、畳み込みニューラルネットワーク(CNN)を訓練している間に実行される計算操作であるテンソル畳み込み、活性化関数、およびプーリングを含む。機械学習フレームワーク1404はまた、行列演算およびベクトル演算などの多くの機械学習アルゴリズムによって実行される基本的な線形代数サブプログラムを実装するためのプリミティブを提供することができる。
【0196】
機械学習フレームワーク1404は、機械学習アプリケーション1402から受信した入力データを処理し、計算フレームワーク1406に適切な入力を生成することができる。計算フレームワーク1406は、機械学習フレームワーク1404がGPGPUハードウェア1410のアーキテクチャに関する深い知識を有することを機械学習フレームワーク1404に要求することなく、機械学習フレームワーク1404がGPGPUハードウェア1410を介してハードウェアアクセラレーションを十分活用することを可能にするように、GPGPUドライバ1408に提供される基礎的な命令を抽象化することができる。 加えて、計算フレームワーク1406は、機械学習フレームワーク1404がGPGPUのハードウェア1410の様々なタイプおよび世代にわたって、ハードウェアアクセラレーションを可能にすることができる。
機械学習ニューラルネットワーク実装
【0197】
本明細書に記載された実施形態によって提供されるコンピューティングアーキテクチャは、機械学習のためのニューラルネットワークの訓練および展開に特に適したタイプの並列処理を実行するように構成することができる。ニューラルネットワークは、グラフ関係を有する関数のネットワークとして一般化することができる。当該技術分野で知られているように、機械学習で使用されるニューラルネットワークの実装には、様々なタイプがある。1つの例示的なタイプのニューラルネットワークは、先に説明したように、フィードフォワードネットワークである。
【0198】
第2の例示的なタイプのニューラルネットワークは、畳み込みニューラルネットワーク(CNN)である。CNNは、画像データのような既知のグリッド状のトポロジーを持つデータを処理するための特殊なフィードフォワードニューラルネットワークである。したがって、CNNは、計算ビジョンや画像認識のアプリケーションに一般的に用いられるが、音声処理や言語処理などの他のタイプのパターン認識にも用いられ得る。CNNの入力層のノードは、「フィルタ」のセット(網膜に見られる受容野に触発された特徴検出器)に編成され、各フィルタのセットの出力は、ネットワークの連続する層のノードに伝搬される。CNNの計算には、各フィルタに畳み込みの数学的操作を適用してそのフィルタの出力を生成することが含まれる。畳み込みは、2つの元の関数のうちの1つの修正版である第3の関数を生成するために2つの関数によって実行される数学的操作の特殊な種である。畳み込みネットワークの用語では、畳み込みに対する第1の関数を入力と呼ぶことができ、第2の関数を畳み込みカーネルと呼ぶことができる。出力は、特徴マップと呼ばれてもよい。例えば、畳み込み層への入力は、入力画像の様々な色成分を定義するデータの多次元配列とすることができる。畳み込みカーネルは、パラメータの多次元配列とすることができ、ここで、パラメータは、ニューラルネットワークのための訓練プロセスによって適合される。
【0199】
再帰型ニューラルネットワーク(RNN)は、層間のフィードバック接続を含むフィードフォワーニューラルネットワークのファミリーである。RNNは、ニューラルネットワークの異なる部分にわたってパラメータデータを共有することで、逐次的にデータのモデリングを可能にする。RNNのアーキテクチャは、サイクルを含む。サイクルは、RNNからの出力データの少なくとも一部が、シーケンス内の後続の入力を処理するためのフィードバックとして使用されるので、将来の時点での変数の現在値のそれ自身の値への影響を表している。この特徴は、言語データが構成されることが可能な変数の性質のために、RNNを特に言語処理に有用なものとする。
【0200】
以下の図は、例示的なフィードフォワード、CNN、およびRNNネットワークを提示しており、同様に、それぞれのタイプのネットワークを訓練かつ展開するための一般的な処理を記載している。これらの記述は、本明細書に記載された任意の特定の実施形態について例示的でかつ非限定的であり、図示された概念は、一般的にディープニューラルネットワークおよび機械学習技術に適用することができることが理解されるであろう。
【0201】
上述した例示的なニューラルネットワークを用いてディープラーニングを行うことができる。ディープラーニングとは、ディープニューラルネットワークを用いた機械学習である。ディープラーニングで使用されるディープラーニングニューラルネットワークは、単一の隠れ層のみを含む浅いニューラルネットワークとは対照的に、複数の隠れ層からなる人工的なニューラルネットワークである。ディープニューラルネットワークは、一般的に訓練のための計算量が多くなる。ただし、ネットワークの隠れ層を追加することで、多段階パターン認識が可能となり、その結果、浅い機械学習技術に比して出力エラーが少なくなる。
【0202】
ディープラーニングで使用されるディープニューラルネットワークは、典型的には、モデルに提供される特徴表現に基づいて操作(例えば、物体分類、音声認識など)を実行することができる数学モデルを表すバックエンドネットワークに結合された特徴認識を実行するためのフロントエンドネットワークを含む。ディープラーニングでは、モデルに対して手作業による特徴工学を行う必要なく、機械学習を行うことを可能とする。代わりに、ディープニューラルネットワークは、入力データ内の統計的構造または相関関係に基づいて特徴を学習することができる。学習された特徴は、検出された特徴を出力にマッピングすることができる数学モデルに提供することができる。ネットワークで使用される数学モデルは、一般に、実行される特定のタスクに特化されており、異なるモデルが異なるタスクを実行するために使用される。
【0203】
一旦ニューラルネットワークが構造化されると、学習モデルは、ネットワークに適用され、特定のタスクを実行するようにネットワークを訓練することができる。学習モデルは、ネットワークの出力誤差を減らすためにモデル内の重みの調整方法を記載している。誤差のバックプロパゲーションは、ニューラルネットワークを訓練するために使用される一般的な方法である。入力ベクトルは、処理のためにネットワークに提示される。ネットワークの出力は、損失関数を使用して所望の出力と比較され、出力層の各ニューロンについて誤差値が計算される。次いで、誤差値は、各ニューロンが元の出力への貢献度を大まかに表す関連誤差値をとるまで後方に伝搬される。次に、ネットワークは、ニューラルネットワークの重みを更新するために、確率的勾配降下アルゴリズムなどのアルゴリズムを使用して、これらのエラーから学習することができる。
【0204】
図15Aおよび15Bは、例示的な畳み込みニューラルネットワークを図示する。図15Aは、CNN内の様々な層を示す。図15Aに示すように、画像処理をモデル化するのに使用される例示的なCNNは、入力画像の赤、緑、および青(RGB)成分を記述する入力1502を受け取ることができる。入力1502は、複数の畳み込み層(例えば、第1の畳み込み層1504、第2の畳み込み層1506)によって処理することができる。複数の畳み込み層からの出力は、任意に、全結合された層のセット1508によって処理されてもよい。全結合された層のニューロンは、フィードフォワードネットワークについて先に説明したように、前の層のすべての活性化に全結合されている。全結合された層1508からの出力は、ネットワークからの出力結果を生成するために使用することができる。全結合された層1508内の活性化は、畳み込みの代わりに行列乗算を用いて計算することができる。全てのCNNの実装が全結合された層1508を活用するわけではない。例えば、いくつかの実装では、第2の畳み込み層1506は、CNNの出力を生成することができる。
【0205】
畳み込み層は、全結合された層1508に見られる従来のニューラルネットワークの構成とは異なり、疎結合されている。従来のニューラルネットワーク層は、すべての出力ユニットが各入力ユニットと相互作用するように、全結合されている。しかし、畳み込み層は、図示されているように、フィールドの畳み込みの出力が(フィールド内の各ノードのそれぞれの状態値の代わりに)後続の層のノードに入力されるので、疎結合である。畳み込み層に関連するケーネルは、畳み込み演算を実行するが、その出力は次の層に送出される。畳み込み層内で行われる次元削減は、CNNが大きな画像を処理するようにスケーリングすることを可能にする一つの態様である。
【0206】
図15Bは、CNNの畳み込み層内の例示的な計算段階を図示する。CNNの畳み込み層1512への入力は、畳み込み層1514の3つの段階で処理されることができる。この3つの段階は、畳み込み段階1516、検出器段階1518、およびプーリング段階1520を含むことができる。次いで、畳み込み層1514は、次の畳み込み層にデータを出力することができる。ネットワークの最終的な畳み込み層は、出力特徴マップデータを生成するか、または全結合された層に入力を提供して、例えば、CNNへの入力に対する分類値を生成することができる。
【0207】
畳み込み段階1516では、いくつかの畳み込みを並列に実行して、線形活性化のセットを生成する。畳み込み段階1516は、アフィン変換を含むことができ、この変換は線形変換に並進を加えたものとして指定できる任意の変換である。アフィン変換は、回転、並進、スケーリング、およびこれらの変換の組み合わせを含む。畳み込み段階は、入力の特定の領域に結合された関数(例えば、ニューロン)の出力を計算し、これは、ニューロンに関連付けられた局所領域として決定することができる。ニューロンは、ニューロンの重みと、ニューロンが接続されているローカル入力内の領域との間の内積を計算する。畳み込み段階1516からの出力は、畳み込み層1514の連続する段階によって処理される線形活性化のセットを定義する。
【0208】
線形活性化は、検出器段階1518によって処理することができる。検出器段階1518では、各線形活性化が非線形活性化関数によって処理される。非線形活性化関数は、畳み込み層の受容野に影響を与えることなく、ネットワーク全体の非線形特性を増加させる。いくつかのタイプの非線形活性化関数を使用してもよい。特定の一つのタイプの非線形活性化関数は、整流線形単位(ReLU)であり、これは、活性化がゼロで閾値を持つように、f(x)=max(0,x)として定義された活性化関数を使用する。
【0209】
プーリング段階1520は、第2の畳み込み層1506の出力を、近傍の出力の要約統計量に置き換えるプーリング関数を使用する。プーリング関数は、入力への小さな並進がプールされた出力を変更しないように、ニューラルネットワークに並進不変性を導入するのに用いることができる。局所並進への不変性は、入力データ中の特徴の存在が特徴の正確な位置よりも重要であるシナリオにおいて有用であり得る。プーリング段階1520の間に、最大プーリング、平均プーリング、およびl2-ノルムプーリングを含む様々なタイプのプーリング関数を使用することができる。加えて、いくつかのCNNの実装は、プーリング段階を含まない。代わりに、そのような実装は、前の畳み込み段階に対して、増加したストライドを有する追加の畳み込み段階で代用している。
【0210】
次いで、畳み込み層1514からの出力は、次の層1522によって処理することができる。次の層1522は、追加の畳み込み層、または全結合された複数の層1508のうちの1つであり得る。例えば、図15Aの第1の畳み込み層1504は、第2の畳み込み層1506に出力することができ、一方、第2の畳み込み層は、全結合された層1508の第1の層に出力することができる。
【0211】
図16は、例示的な再帰型ニューラルネットワークを示す。再帰型ニューラルネットワーク(RNN)では、ネットワークの前の状態がネットワークの現在の状態の出力に影響を与える。RNNは、様々な機能を使って様々な方法で構築することができる。RNNの使用は、一般的に、数学モデルを使用して、先行する入力のシーケンスに基づいて将来を予測することを中心に展開される。例えば、前のワードシーケンスを与えられると次のワードを予測するために、RNNを用いて統計的言語モデリングを実行してもよい。図示されたRNN1600は、入力ベクトルを受け取る入力層1602と、再帰機能を実装するための隠れ層1604と、前の状態の「記憶」を可能にするためのフィードバック機構1605と、結果を出力するための出力層1606とを有するものとして説明することができる。RNN1600は、タイムステップに基づいて動作する。所与の時間ステップにおけるRNNの状態は、フィードバック機構1605を介して前回の時間ステップに基づいて影響を受ける。所与の時間ステップについて、隠れ層1604の状態は、前回の状態と現在の時間ステップでの入力とによって定義される。第1の時間ステップにおける初期入力(x)は、隠れ層1604によって処理することができる。第2の入力(x)は、初期入力(x)の処理中に決定された状態情報を使用して、隠れ層1604によって処理することができる。所与の状態は、UおよびWがパラメータ行列としたときに、s=(Ux+Wst-1)として計算できる。関数fは一般に、双曲線正接関数(Tanh)や整流関数f(x)=max(0、x)の変形などの非線形性である。しかしながら、隠れ層1604で使用される特定の数学関数は、RNN1600の特定の実装の詳細によって変化し得る。
【0212】
上述の基本的なCNNとRNNネットワークに加えて、それらのネットワークの変形も可能としえる。RNNの1つの変形例では、長・短期メモリ(LSTM)RNNである。LSTM RNNは、より長い言語シーケンスを処理するために必要とされるかもしれない長期依存性を学習することができる。CNNの変形として、畳み込み型ディープビリーフネットワークがあり、これはCNNに似た構造を持ち、ディープビリーフネットワークに似た方法で訓練される。ディープビリーフネットワーク(DBN)は、確率的(ランダム)な変数からなる複数の層で構成される生成的ニューラルネットワークである。DBNは、貪欲な教師なし学習を用いて層ごとに訓練させることができる。次いで、学習されたDBNの重みは、ニューラルネットワークのための最適な重みの初期セットを決定することによって、事前訓練ニューラルネットワークを提供するために使用することができる。
【0213】
図17は、ディープニューラルネットワークの訓練と展開を示している。一旦所与のネットワークがタスクのために構造化されると、ニューラルネットワークは、訓練データセット1702を用いて訓練される。訓練プロセスのハードウェア加速を可能にするために、様々な訓練フレームワークが開発されている。例えば、図14の機械学習フレームワーク1404は、訓練フレームワーク1704として構成されてもよい。訓練フレームワーク1704は、訓練されていないニューラルネットワーク1706にフックすることができ、訓練されたニューラルネットワーク1708を生成するために、本明細書に記載された並列処理リソースを使用して、訓練されていないニューラルネットを訓練可能にする。訓練プロセスを開始するには、初期重みをランダムに選択するか、ディープビリーフネットワークを用いて事前訓練を行ってもよい。その後、訓練サイクルは、教師付きまたは教師なしのいずれかの方法で実行される。
【0214】
教師付き学習は、訓練データセット1702が入力に対する所望の出力とを対にした入力を含む場合や、訓練データセットが既知の出力を有する入力を含み、ニューラルネットワークの出力が手動で等級付けされる場合など、訓練が媒介操作として実行される学習方法である。ネットワークは入力を処理し、結果として得られた出力を期待されるまたは希望される出力のセットと比較する。その後、エラーはシステムを介して後方に伝搬される。訓練フレームワーク1704は、未訓練ニューラルネットワーク1706を制御する重みを調整することができる。訓練フレームワーク1704は、訓練されていないニューラルネットワーク1706が、既知の入力データに基づいて正解を生成するのに適したモデルに向かってどれだけ収束しているかを監視するためのツールを提供することができる。訓練プロセスは、ニューラルネットワークによって生成された出力を洗練するためにネットワークの重みが調整されるように繰り返し行われる。訓練プロセスは、ニューラルネットワークが訓練されたニューラルネットワーク1708に関連付けられた統計的に所望の精度に達するまで継続することができる。その後、訓練されたニューラルネットワーク1708は、新しいデータ812の入力に基づいて推論結果814を生成するために、任意の数の機械学習操作を実装するために展開され得る。
【0215】
教師なし学習とは、ネットワークがラベルの付いていないデータを使って自己で訓練を試みる学習方法である。したがって、教師なし学習では、訓練データセット1702は、関連する出力データなしの入力データを含むことになる。訓練されていないニューラルネットワーク1706は、ラベル付けされていない入力内のグループ化を学習することができ、個々の入力がデータセット全体にどのように関連しているかを決定することができる。教師なし訓練は、自己組織化マップを生成するために使用することができ、これは、データの次元性を低減するのに有用な操作を実行することができる訓練されたニューラルネットワーク1708の一種である。教師なし訓練は、異常検出を実行するためにも使用することができ、これによりデータの正常なパターンから逸脱する入力データセット内のデータ点を識別することを可能にする。
【0216】
教師付きおよび教師なしの訓練のバリエーションも採用され得る。半教師付き学習は、訓練データセット1702において同じ分ファブリックのラベル付きデータとラベルなしデータとが混在する技術である。インクリメンタル学習は、教師付き学習の一変形であり、入力データがモデルをさらに訓練するために継続的に使用される。インクリメンタル学習によって、訓練されたニューラルネットワーク1708が、初期訓練中にネットワーク内に植え付けられた知識を忘れることなく、新しいデータ1712に適合することを可能にする。
【0217】
教師付きや教師なしにかかわらず、特にディープニューラルネットワークの訓練プロセスは、単一の計算ノードにとって計算量が多すぎる場合がある。単一の計算ノードを使用する代わりに、計算ノードの分散ネットワークを使用して訓練プロセスを高速化することができる。
【0218】
図18は、分散学習を図示するブロック図である。分散学習は、複数の分散計算ノードを使用してニューラルネットワークの教師付きまたは教師なし学習を実行する訓練モデルである。分散計算ノードは、それぞれ1つまたは複数のホストプロセッサと、1つまたは複数の汎用処理ノードとを含むことができる。図示されているように、分散学習は、モデル並列化1802、データ並列化1804、またはモデル並列化とデータ並列化1804の組み合わせで行うことができる。
【0219】
モデル並列化1802では、分散システム内の異なる計算ノードが、単一ネットワークの異なる部分の訓練計算を実行することができる。例えば、ニューラルネットワークの各層は、分散システムの異なる処理ノードによって訓練させることができる。 モデル並列化の利点には、特に大規模なモデルにスケーリングできる能力が含まれる。ニューラルネットワークの異なる層に関連付けられた計算を分割することで、すべての層の重みが単一の計算ノードのメモリに収まらないような、非常に大規模なニューラルネットワークの訓練を可能にする。いくつかのインスタンスでは、モデルの並列化は、大規模なニューラルネットワークの教師なしの訓練を実行する際に特に有用である。
【0220】
データ並列化1804では、分散ネットワークの異なるノードはモデルの完全なインスタンスを持ち、各ノードはデータの異なる部分を受信する。そして、異なるノードからの結果が結合される。データ並列化への異なるアプローチが可能であるが、データ並列化訓練アプローチの全ては、結果を組み合わせて各ノード間でモデルパラメータを同期させる技術を必要とする。データを組み合わせるための例示的なアプローチには、パラメータ平均化と更新ベースのデータ並列が含まれる。パラメータ平均化は、訓練データのサブセットについて各ノードを訓練し、グローバルパラメータ(例えば、重み、バイアスなど)を各ノードからのパラメータの平均値に設定する。パラメータ平均化は、パラメータデータを維持する中央パラメータサーバを使用する。更新ベースのデータ並列化は、パラメータをノードからパラメータサーバに転送する代わりに、モデルの更新が転送されることを除いて、パラメータ平均化に類似している。加えて、更新ベースのデータ並列化は、更新が圧縮されノード間で転送される分散化方法で実行されることができる。
【0221】
モデルとデータの複合並列化1806は、例えば、各計算ノードが複数のGPUを含む分散システムで実装することができる。各ノードは、各ノード内に個別のGPUを有するモデルの完全なインスタンスを持つことができ、これらGPUは、モデルのさまざまな部分を訓練するために使用される。
【0222】
分散訓練は、単一のマシン上での訓練と比してオーバーヘッドが増加する。しかしながら、本明細書に記載の並列プロセッサおよびGPGPUは、それぞれ、高帯域幅のGPU-GPU間のデータ転送や加速されたリモートデータ同期化を可能にする技術を含む、分散訓練のオーバーヘッドを低減するための様々な技術を実装することができる。
例示的な機械学習アプリケーション
【0223】
機械学習は、これらに限られないが、コンピュータビジョン、自律運転およびナビゲーション、音声認識、言語処理を含む様々な技術的問題の解決に適用することができる。コンピュータビジョンは、従来より、機械学習の応用のための最も活発な研究分野の一つである。コンピュータビジョンの応用は、顔認識などの人間の視覚能力を再現することから、視覚能力の新しいカテゴリーを作り出すことまで多岐にわたる。例えば、コンピュータビジョンの応用は、動画中に見られる物体にトリガされる振動から音波を認識するように構成することも可能である。並列プロセッサで加速された機械学習は、従来よりもはるかに大きな訓練データセットを使用してコンピュータビジョンアプリケーションを訓練することを可能にし、推論システムが低消費電力の並列プロセッサを使用して展開されることを可能にする。
【0224】
並列プロセッサによる加速機械学習は、車線および道路標識認識、障害物回避、ナビゲーション、および運転制御を含む自律運転の応用がある。加速機械学習技術は、特定の訓練入力に対する適切な応答を定義するデータセットに基づいて運転モデルを訓練するために使用することができる。本明細書に記載の並列プロセッサは、自律運転ソリューションに使用される、ますます複雑化するニューラルネットワークの迅速な訓練を可能にし、自律走行車両への統合に適したモバイルプラットフォームにおける低消費電力の推論プロセッサの展開を可能にする。
【0225】
並列プロセッサで加速されたディープニューラルネットワークにより、機械学習による自動音声認識(ASR)へのアプローチが可能になっている。ASRには、入力された音響シーケンスが与えられた場合に最も確率の高い言語シーケンスを計算する関数の生成が含まれる。ディープニューラルネットワークを用いた加速機械学習により、従来ASRに使用されていた隠れマルコフモデル(HMM)やガウス混合モデル(GMM)を置き換えることが可能になった。
【0226】
並列プロセッサによる加速機械学習は、自然言語処理の加速化にも利用できる。自動学習手順は、統計的推論アルゴリズムを活用して、誤った入力または不慣れな入力に対して頑健なモデルを生成することができる。例示的な自然言語プロセッサの応用には、人間の言語間の自動機械翻訳が含まれる。
【0227】
機械学習に使用される並列処理プラットフォームは、訓練プラットフォームと展開プラットフォームとに分けることができる。訓練プラットフォームは、一般的に高度に並列化されており、マルチGPUシングルノード訓練やマルチノード・マルチGPU訓練を加速化するための最適化を含むとともに、展開された機械学習(例えば、推論など)プラットフォームは、一般的に、カメラ、自律ロボット、自律走行車などの製品での使用に適した低消費電力の並列プロセッサを含む。
行列アクセラレーションロジックを備えたGPGPU
【0228】
図19は、一実施形態に係るデータ処理システム1900のブロック図である。データ処理システム1900は、プロセッサ1902と、統一メモリ1910と、機械学習アクセラレーションロジックを含むGPGPU1920とを有する異種処理システムである。 プロセッサ1902およびGPGPU1920は、本明細書で説明したプロセッサおよびGPGPU/並列プロセッサのいずれとすることができる。プロセッサ1902は、システムメモリ1912に格納されたコンパイラ1915に対する命令を実行することができる。コンパイラ1915は、ソースコード1914Aをコンパイルコード1914Bにコンパイルするためにプロセッサ1902上で実行する。コンパイルされたコード1914Bは、プロセッサ1902によって実行され得る命令および/またはGPGPU1920によって実行され得る命令を含むことができる。コンパイル中、コンパイラ1915は、コンパイルされたコード1914Bに存在するデータ並列性のレベルに関するヒント、および/またはコンパイルされたコード1914Bに基づいてディスパッチされるべきスレッドに関連付けられるデータローカリティに関するヒントを含むメタデータを挿入するための操作を実行することができる。コンパイラ1915は、そのような操作を実行するために必要な情報を含むことができるか、あるいはその操作は、ランタイムライブラリ1916の支援を受けて実行されることができる。ランタイムライブラリ1916は、ソースコード1914Aのコンパイルにおいてコンパイラ1915を支援することができ、またGPGPU1920上でのコンパイルされた命令の実行を容易にするためにコンパイルされたコード1914Bと実行時にリンクされる命令をも含むことができる。
【0229】
統一メモリ1910は、プロセッサ1902およびGPGPU1920によってアクセスされ得る統一アドレス空間を表す。統一メモリは、GPGPUメモリ1918と、システムメモリ1912とを含むことができる。GPGPUメモリ1918は、GPGPU1920のアドレスペース内のメモリであり、システムメモリ1912の一部または全部を含むことができる。一実施形態では、GPGPUメモリ1918はまた、GPGPU1920によって排他的に使用されるため専用の任意のメモリの少なくとも一部を含むことができる。一実施形態では、システムメモリ1912に格納されたコンパイルされたコード1914Bは、GPGPU1920によるアクセスのためにGPGPUメモリ1918にマッピングされ得る。
【0230】
GPGPU1920は、複数の計算ブロック1924A~1924Nを含み、これらは、本明細書に記載された様々な計算ユニットまたは実行要素のうちの1つまたは複数を含むことができる。一実施形態では、GPGPU1920は、行列演算のサブセット(例えば、内積など)を加速するように設計された1つまたは複数の特殊関数計算ユニットを含むことができる行列アクセラレータ1923をさらに含む。GPGPU1920はまた、これらには限らないが、レジスタ1925のセット、電力および性能モジュール1926、およびキャッシュ1927を含む、計算ブロック1924A~1924Nおよび行列アクセラレータ1923によって共有可能なリソースのセットを含むこともできる。一実施形態では、レジスタ1925は、直接アクセス可能なレジスタおよび間接的にアクセス可能なレジスタを含み、ここで間接的にアクセス可能なレジスタは、行列アクセラレータ1923によって使用されるように最適化される。電力およびパフォーマンスモジュール1926は、計算ブロック1924A~1924N内の電力ゲートアイドルコンポーネントに電力を供給するために、計算ブロック1924A~1924Nのための電力供給およびクロック周波数を調整するように構成することができる。様々な実施形態では、キャッシュ1927は、命令キャッシュおよび/または下位レベルのデータキャッシュを含むことができる。
【0231】
GPGPU1920は、行列アクセラレータ1923および/または計算ブロック1924A~1924N内の計算要素によって統一メモリ1910からアクセスされたデータをキャッシュするために使用することができるL3のデータキャッシュ1930をさらに含むことができる。一実施形態では、L3データキャッシュ1930は、計算ブロック1924A~1924N内の計算要素および行列アクセラレータ1923によって共有可能な共有ローカルメモリ1932を含む。
【0232】
一実施形態では、GPGPU1920は、フェッチおよびデコードユニット1921およびスケジューラコントローラ1922などの命令ハンドリングロジックを含む。フェッチおよびデコードユニット1921は、1つまたは複数の計算ブロック1924A~1924Nまたは行列アクセラレータ1923によって実行されるための命令をフェッチおよびデコードするためのフェッチユニットおよびデコードユニットを含む。命令は、スケジューラコントローラ1922を介して、計算ブロック1924A~1924Nまたは行列アクセラレータ内の適切な機能ユニットにスケジューリングすることができる。一実施形態では、スケジューラコントローラ1922は、高度なスケジューリング操作を実行するように構成可能なASICである。一実施形態では、スケジューラコントローラ1922は、ファームウェア・モジュールからロードされたスケジューラ命令を実行することができるマイクロコントローラまたは命令あたりの低エネルギーな処理コアである。
【0233】
一実施形態では、計算ブロック1924A~1924Nによって実行されるいくつかの機能は、行列アクセラレータ1923に直接スケジュールされるか、またはオフロードされることができる。様々な実施形態では、行列アクセラレータ1923は、3Dグラフィックスまたは計算シェーダプログラムによって使用される乗算および加算演算および内積演算などの行列計算操作を効率的に実行するように構成された処理要素ロジックを含む。一実施形態では、行列アクセラレータ1923は、機械学習フレームワークによって使用される操作を加速するように構成することができる。一実施形態では、行列アクセラレータ1923は、並列行列乗算および/または加算演算の特定のセットを実行するように明示的に構成されたアプリケーション固有の集積回路である。一実施形態では、行列アクセラレータ1923は、ワークロード間で更新可能な固定関数ロジックを提供するフィールドプログラマブルゲート配列(FPGA)である。行列アクセラレータ1923によって実行され得る行列演算のセットは、計算ブロック1924A~1924Nによって実行され得る操作に対して制限されてもよい。しかしながら、行列アクセラレータ1923は、計算ブロック1924A~1924Nと比較して著しく高いスループットでこれらの演算を実行することができる。
【0234】
図20は、一実施形態によれば、命令パイプライン2000によって実行される行列演算2005の一実施形態を示す。命令パイプライン2000は、これに限られないが、内積演算などの行列演算2005を実行するように構成することができる。2つのベクトルの内積は、ベクトルの対応する成分の積の和に等しいスカラ値である。内積は、以下の式(1)のように算出することができる。
【数1】
【0235】
内積は、畳み込みニューラルネットワーク(CNN)の畳み込み演算で使用することができる。図19は、内積演算を含む行列演算2005を用いた2次元(2D)の畳み込みを示す。2D畳み込みが図示されているが、N次元の畳み込みは、N次元フィルタを使用してN次元ボリューム上で実行することができる。受容野タイル2002は、入力ボリュームバッファ2004内の入力ボリュームの一部をハイライトする。入力ボリュームバッファは、メモリ2030に格納することができる。行列内積演算2005は、受容野タイル2002内のデータと畳み込みフィルタとの間で実行し、出力バッファ2006内のデータ点を生成することができ、これもまたメモリ2030に記憶することができる。メモリ2030は、システムメモリ1912、GPGPUメモリ1918、または図19のような1つまたは複数のキャッシュメモリ1927および1930を含む、本明細書に記載されたメモリのいずれであってもよい。
【0236】
出力バッファ2006内のデータ点の組み合わせは、畳み込み演算によって生成された活性化マップを表す。活性化マップ内の各点は、入力ボリュームバッファ2004を通して受容野タイルをスライドさせることによって生成される。活性化マップデータは、出力活性化値を決定するために活性化関数に入力することができる。一実施形態では、入力ボリュームバッファ2004の畳み込みは、高レベルな行列演算1705としてフレームワーク内で定義することができる。高レベル行列演算は、基本的な線形代数サブプログラム(BLAS)演算などのプリミティブ演算を介して実行することができる。命令パイプライン2000によって実行されるハードウェア命令を介して、プリミティブ演算を加速化することができる。
【0237】
ハードウェア命令を加速するために使用される命令パイプライン2000は、ハードウェア命令をフェッチおよびデコードすることができる命令フェッチおよびデコードユニット1921と、計算ブロック1924A~1924Nおよび/または行列アクセラレータ1923内の1つまたは複数の実行ユニットにデコードされた命令をスケジューリングすることができるスケジューラコントローラ1922とを含むことができる。一実施形態では、ハードウェア命令は、計算ブロック1924A~1924Nにスケジューリングされ、行列アクセラレータ1923にオフロードされることができる。マトリックス演算2005を実行するための1つまたは複数のハードウェア命令および関連データは、メモリ2030に格納することができる。ハードウェア命令の出力もまた、メモリ2030に格納することができる。
【0238】
一実施形態では、マトリックスアクセラレータ1923は、統合された内積ロジック2008(DPロジック)を使用して行列演算2005を実行するための1つまたは複数のハードウェア命令を実行することができる。内積ロジック2008は、内積演算を実行するように構成可能なプログラム可能かつ固定関数なハードウェアの組み合わせを含むことができる。計算ブロック1924A~1924N内の機能ユニットも内積演算を実行するように構成することもできるが、内積ロジック2008は、計算ブロック1924A~1924Nと比較して著しく高いスループットで内積演算の限定されたサブセットを実行するように構成することができる。
【0239】
残差ニューラルネットワーク(ResNet)-50のようなCNNの行列乗算演算の処理中には、複数層をまたいで活性化行列にかなりの割合のスパース性(例えば、ゼロ値)が存在する。実際、場合によっては、スパース性は99.9%にも達することがある。このような疎行列の割合が高いと、冗長なメモリアクセスや計算のバイパスを含む処理の最適化の機会が得られる。したがって、不要な処理を節約することで、エネルギー消費量を削減し得る。
【0240】
上述したように、計算操作の前に行列レイアウト操作(例えば、変換及び転置演算)を実行しなければならないことは、GPU性能を低下させる。一実施形態によれば、ディープラーニングカーネルを最適化するためのブロック命令が提供される。このような実施形態では、命令は、実行されると、図5Aおよび図5Bを参照して上述したGRF537などのGRFから行列タイルを読み出して、そのタイルをGRFにロードすることにより、移動命令を排除する。さらなる実施形態では、命令は、2次元(2D)メモリ面を定義するユーザ定義のメッセージパラメータを含む。このように、この命令により、ソフトウェアがマルチプラットフォームの機械学習およびディープラーニングフレームワークによって定義された標準化された入力データレイアウトを実装可能とし、グラフィックスハードウェアで行列操作(例えば、変換および転置演算)を実行可能とする。
【0241】
一実施形態によれば、受信された命令は、ブロック開始位置(x,y)、幅、高さ、および配列長さarray_lengthを定義する2D表面パラメータを含むメッセージヘッダペイロードを含む。さらなる実施形態では、2D命令は、以下の特徴を有する。
a.メッセージヘッダを介して供給される2D表面パラメータ。2D表面パラメータには、サーフェスのベースアドレス、高さ、幅(バイト単位)、およびピッチ(バイト単位)が含まれる。表面の幅、ピッチ、高さは、24ビット符号なし整数である。
b.4ビット、8ビット、16ビット、32ビット、64ビットなどのサイズのメッセージアクセス要素
c.メッセージブロックパラメータは、開始(x、y)、高さ、および幅(例えば、幅は#要素で表される)でブロックを指定し、ここで、xとyの形式はS32(32ビット符号付き整数)である。
d.アウトバウンドの場合、読み出しの戻り値は0となる。書き込みがドロップされる。このように、行列の外側のタイルは、ページフォルトを引き起こすことなく読み取られ得る。
【0242】
一実施形態では、受信した命令は、メッセージタイプを示すメッセージ記述子も含む。このような実施形態では、メッセージ記述子は、複数の操作のうちのどれが実行されるべきかを識別する。さらなる実施形態では、メッセージ記述子は、実行され得る各タイプの操作に関連付けられたビットを含む。例えば、第1のビットは、転置演算を伴った2Dブロックの読み出しが実行されることを示してもよく、第2のビットは、変換演算を伴った2Dブロックの読み出しが実行されることを示してもよい。さらなる実施形態では、メッセージは、どちらのビットも設定されていないと判定された場合に、2Dブロックリードメッセージとして扱われる。他の実施形態では、動作タイプを示すために、異なるタイプのビット符号化が実装されてもよい。
2Dブロックの読み出し
【0243】
一実施形態によれば、メモリから読み出す1つまたは複数のブロックを指定するために、2Dブロックの読み出しメッセージを含む命令が実装される。このような実施形態では、メッセージパラメータに含まれる配列長(またはarray_len)の属性は、メモリから読み出されるブロックの量を示す。さらなる実施形態では、ブロックは、メモリ内で水平方向に構成され、戻りGRFは逐次的(例えば、左端のブロックから始まり、左から右に増分する)である。
【0244】
図21は、16×32Bのブロックサイズblock_size、および2つの配列ary_len(例えば、メモリから読み出される2つのブロック)を含むパラメータを有するメッセージに関連付けられたデータブロックの一実施形態を示している。図21に示すように、開始GRF番号は、メッセージ内で0として特定される。ブロックサイズは16x32Bなので、各ブロックメッセージ(またはブロック)は8個のGRFを返す。したがって、第2ブロックのGRF番号は8から始まる。また、第2のブロックのレイアウトは、第1のブロックの右側に連続している(例えば、メモリアドレスが左から右に増加する)。
【0245】
さらなる実施形態では、Nの配列array_lenを有する単一の2Dブロックは、論理的には、N個の1の配列array_lenを有する別個のブロックと等価であり、ブロック[n](x、y)、幅、高さ、およびgrf_numは、図22に示すように計算される。線形メモリで完全なキャッシュライン要求が確実に生成されるように、複数のブロックがサポートされる。単一のブロックは、スレッドで使用されるタイルサイズと一致する。したがって、いくつかの実施形態では、タイル幅はキャッシュライン全体を満たさない場合がある。
【0246】
さらなる実施形態では、2Dブロック読み出し操作は、表1に指定されているように、d8、d16、d32、およびd64データサイズをサポートする。しかしながら、他の実施形態は、異なるデータおよびブロックサイズを特徴とし得る。さらに別の実施形態では、要素サイズelement_size(バイト)*max block_size最大ブロックサイズの積は、通常、メモリ効率を最大化するために、GPUメモリ要求の粒度(例えば、この例では64B)と一致する。
【表1】
【0247】
図23Aは、2Dブロック読み出し操作の一実施形態を示す流れ図である。処理ブロック2310では、メッセージヘッダが読み取られて、ブロックパラメータが決定される。したがって、タイルの開始位置(x.y)、ブロックの幅および高さ、並びに配列の長さが決定される。処理ブロック2320では、データのブロックは、パラメータに基づいてメモリから取り出される(またはフェッチされる)。図24は、32x32Bのブロックサイズblock_sizeと2の配列array_lenを含むパラメータを持つメッセージに関連付けられたデータブロックの一実施形態を示す。処理ブロック2330では、ブロックデータはGRFバッファに格納される。図25は、GRFバッファに格納されたデータブロックの一実施形態を示す。図25に示すように、RnBmは、GRFバッファ(例えば、grf0~grf31で)に格納されたメモリブロックのRow-nのByte-mを表している。図23Bは、2Dブロック読み出し操作のための疑似コードの一実施形態を示す。
転置を伴った2Dブロックの読み出し
【0248】
一実施形態によれば、転置メッセージを伴った2Dブロックの読み出しを含む命令は、メモリから読み取る複数のブロックを指定し、ブロック上で行列転置を実行するために実装される。行列の転置は、行列を対角線上で反転した結果として生じる転置行列を生成する演算子である(例えば、行列の行と列のインデックスを切り替える)。一実施形態では、メモリから読み出されたブロックデータの行は、GRFバッファに列として格納される前に転置される。さらなる実施形態では、転置は、1の配列array_lenのみをサポートし得る。これは、1つの大きなブロックを垂直に分割し、複数の小さなブロックを作成しても、転置メッセージのGRFレイアウトを変化させないためである。しかしながら、他の実施形態では、異なる配列長がサポートされ得る。
【0249】
一実施形態では、GRFデータ(例えば、ブロック列ごと)は、2バイトの次の累乗までに概数化される。つまり、ブロックの高さは、転置後の列あたりのGRFピッチが2バイトの累乗になるように適切に概数化される。例えば、ブロックの高さが7で、要素サイズが2Bの場合、ブロックの高さは8に概数化され、転置後のGRFピッチは8*2B=16バイトになる。一実施形態では、切り上げによるパディングされたGRFバイトは0になる。このような実施形態では、このメッセージから返され得るGRFの最大数は32である。
【0250】
図26Aは、2Dブロックの読み出しおよび転置演算の一実施形態を示すフロー図である。処理ブロック2610では、上述したように、ブロックパラメータを決定するためにメッセージヘッダが読み取られる。処理ブロック2620では、パラメータに基づいてデータのブロックがメモリからフェッチされる。処理ブロック2630では、メモリから読み出されたブロックデータの各行が転置される。処理ブロック2640では、転置されたデータは、GRFバッファに格納される。
【0251】
図27Aは、GRFバッファに格納されたデータブロックの一実施形態を示す。図27Aに示すように、データブロックは、1バイトの要素サイズ、32×64のブロックサイズ、および配列array_len=1を有する。図27Bは、2バイトの要素サイズ(例えば、d16)、32×16ブロックのブロックサイズ、配列array_len=1を有するGRFバッファに格納されたデータブロックの別の実施形態を示す。図26Bは、転置演算を伴った2Dブロック読み出しのための疑似コードの一実施形態を示す。
変換を伴った2Dブロック読み出し
【0252】
一実施形態によれば、変換メッセージを伴った2Dブロックの読み出しを含むメッセージは、メモリから読み出す複数のブロックを指定し、ブロック上で行列変換を実行するために実装される。そのような実施形態では、列からのn個の要素が取り出され(例えば、ここでn=4B/要素サイズelement_size)、同じGRFバッファ内にバック・トゥ・バックで格納されるように、ベクトルニューラルネットワーク命令(VNNI)変換が実行される。したがって、8b intの場合、要素の数は4であり、F16/Bf16の場合、要素の数は2です。
【0253】
図28Aは、2Dブロック読み出しおよび変換命令の実行中に実行されるプロセスの一実施形態を示す流れ図である。処理ブロック2810では、上述したように、メッセージヘッダが読み込まれ、ブロックパラメータを決定する。処理ブロック2820では、データのブロックは、パラメータに基づいてメモリからフェッチされる。処理ブロック2830では、メモリから読み出されたブロックデータの各行が変換される。処理ブロック2840では、変換されたデータは、GRFバッファに格納される。
【0254】
図29は、GRFバッファに格納されたデータブロックの一実施形態を示す。図29に示すように、データブロックは、1バイトの要素サイズ、16のブロックサイズ、および配列array_len=4を有する。図28Bは、変換演算を伴った2Dブロックの読み出し用の疑似コードの一実施形態を示す図である。
【0255】
一実施形態によれば、命令は、転置および変換演算を伴った2Dブロックの読み出しを含む。この実施形態では、転置および変換演算を伴った2Dブロックの読み出しは、4B転置(またはDワード)と同じ機能を含む。このように、転置および変換演算が実行されるべきとき(例えば、行列アクセラレータ1923によって)はいつでも、転置メッセージを伴った2Dブロックの読み出しが命令に含まれる。
【0256】
上述したように、命令に含まれるメッセージ記述子は、メッセージのタイプを示すように実装されている。したがって、メッセージ表示は、実行によってなされるべき操作のタイプを決定する前に調べられる。図30は、命令実行処理の一実施形態を示すフロー図である。処理ブロック3010では、命令が受信される。処理ブロック3020では、命令はデコードされる。処理ブロック3030では、命令に含まれるメッセージ記述子は、実行されるべき行列操作演算のタイプを決定するために調べられる。処理ブロック3040では、メッセージヘッダ内のパラメータに基づいて、メッセージ記述子に示されたレイアウト操作(例えば、2Dブロック読み出し、転置を伴った2Dブロック読み出し、変換を伴った2Dブロック読み出し等)が実行される。その後、行列乗算演算が実行されてもよい。
【0257】
実施形態は、親基板を使用して相互接続された1つまたは複数のマイクロチップまたは集積回路、ハードワイヤードロジック、メモリデバイスによって記憶されかつマイクロプロセッサによって実行されるソフトウェア、ファームウェア、特定用途向け集積回路(ASIC)、および/またはフィールドプログラマブルゲート配列(FPGA)のいずれかまたはその組み合わせとして実装されてもよい。「ロジック」という用語は、例示的には、ソフトウェアまたはハードウェア、および/またはソフトウェアとハードウェアの組み合わせを含み得る。
【0258】
実施形態は、例えば、コンピュータプログラム製品として提供されてもよく、この製品は、コンピュータ、コンピュータのネットワーク、または他の電子デバイスのような1つまたは複数の機械によって実行されると、1つまたは複数の機械が本明細書に記載された実施形態に従って演算を実行する結果となり得る、機械実行可能な命令をその上に格納した1つまたは複数の機械可読媒体を含んでもよい。機械可読媒体には、これらに限られないが、フロッピーディスク、光ディスク、CD-ROM(Compact Disc-Read Only Memories)、光磁気ディスク、ROM、RAM、EPROM(Erasable Programmable Read Only Memory)、EEPROM(Electrically Erasable Programmable Read Only Memory)、磁気カードまたは光カード、フラッシュメモリ、または機械実行可能な命令を格納するのに適した他のタイプの媒体/機械可読媒体が含まれ得る。
【0259】
さらに、実施形態は、コンピュータプログラム製品としてダウンロードされてもよく、ここで、プログラムは、通信リンク(例えば、モデムおよび/またはネットワーク接続)を介して、搬送波または他の伝搬媒体に具現化されたおよび/または変調された1つまたは複数のデータ信号を介して、リモートコンピュータ(例えば、サーバ)から要求するコンピュータ(例えば、クライアント)に転送されてもよい。
【0260】
以下の項目および/または例は、さらなる実施形態または実施例に関連する。実施例中の特定事項は、1つまたは複数の実施形態においてどこでも使用され得る。異なる実施形態または実施例の様々な特徴は、様々な異なる用途に適合するように、いくつかの特徴が含まれるとともに、他の特徴が除外されて、多様に組み合わせられてもよい。実施例は、方法や、方法の行為を実行するための手段、機械によって実行された場合に機械にその方法の行為を実行させる命令を含む少なくとも1つの機械可読媒体、または本明細書に記載された実施形態および実施例に係るハイブリッド通信を容易にするための装置またはシステムなどの主題を含むことができる。
【0261】
いくつかの実施形態は、実施例1に関わり、これは、機械学習行列処理を容易にする装置であって、行列データを格納するメモリと、命令に含まれるメッセージ記述子を調べて実行されるべき行列レイアウト操作演算のタイプを決定し、取り出されるべき2次元(2D)メモリ面を定義する複数のパラメータを有する命令に含まれるメッセージヘッダを調べ、複数のパラメータに基づいて上記メモリから行列データの1つまたは複数のブロックを取り出すための、命令を実行する1つまたは複数のプロセッサと、複数のレジスタを含むレジスタファイルとを備え、行列データの1つまたは複数のブロックは、複数のレジスタの第1のセット内に格納されている。
【0262】
実施例2は、実施例1の主題を含み、複数のパラメータは、メモリから取り出すブロックの量を示す配列長の属性を含んでいる。
【0263】
実施例3は、実施例1および実施例2の主題を含み、複数のパラメータは、1つまたは複数のブロックのそれぞれの幅、高さ、およびピッチを定義する属性をさらに含む。
【0264】
実施例4は、実施例1~3の主題を含み、メッセージ記述子は、転置演算を伴った2Dブロックの読み出しが実行されるべきであることを示す。
【0265】
実施例5は、実施例1~4の主題を含み、1つまたは複数のプロセッサは、行列データの1つまたは複数のブロックのそれぞれに対して転置演算を実行し、転置された行列をレジスタの第1のセットに格納する。
【0266】
実施例6は、実施例1~5の主題を含み、メッセージ記述子は、変換演算を伴った2Dブロックの読み出しが実行されるべきであることを示す。
【0267】
実施例7は、実施例1~6の主題を含み、1つまたは複数のプロセッサは、行列データの1つまたは複数のブロックのそれぞれに対して変換演算を実行し、変換された行列をレジスタの第1のセットに格納する。
【0268】
実施例8は、実施例1~7の主題を含み、メッセージ記述子は、転置および変換演算を伴った2Dブロックの読み出しが実行されるべきであることを示す。
【0269】
いくつかの実施形態は、実施例9に関わり、機械学習行列処理を容易にする方法であって、命令に含まれるメッセージ記述子を調べて、実行されるべき行列レイアウト操作演算のタイプを決定することと、取り出されるべき2次元(2D)メモリ面を定義する複数のパラメータを有する命令に含まれるメッセージヘッダを調べることと、複数のパラメータに基づいてメモリから行列データの1つまたは複数のブロックを取り出すことと、行列データの1つまたは複数のブロックを、複数のレジスタの第1のセット内に格納することとを含む。
【0270】
実施例10は、実施例9の主題を含み、複数のパラメータは、メモリから取り出すブロックの量を示す配列長の属性を含む。
【0271】
実施例11は、実施例9および実施例10の主題を含み、複数のパラメータは、1つまたは複数のブロックのそれぞれの幅、高さ、およびピッチを定義する属性をさらに含む。
【0272】
実施例12は、実施例9~11の主題を含み、メッセージ記述子は、転置演算を伴った2Dブロックの読み出しが実行されるべきであることを示す。
【0273】
実施例13は、実施例9~12の主題を含み、転置演算は、行列データの1つまたは複数のブロックのそれぞれに対して転置演算を実行し、転置された行列をレジスタの第1のセットに格納することを含む。
【0274】
実施例14は、実施例9~13の主題を含み、メッセージ記述子は、変換演算を伴った2Dブロックの読み出しが実行されるべきであることを示す。
【0275】
実施例15は、実施例9~14の主題を含み、変換演算は、行列データの1つまたは複数のブロックのそれぞれに対して変換演算を実行することと、変換された行列をレジスタの第1のセットに格納することとを含む。
【0276】
いくつかの実施形態は、実施例16に関わり、これは命令が格納されている少なくとも1つの非一時的なコンピュータ可読媒体であって、1つまたは複数のプロセッサによって実行されると、プロセッサに、命令に含まれるメッセージ記述子を調べて、実行されるべき行列レイアウト操作演算のタイプを決定させ、取り出されるべき2次元(2D)メモリ面を定義する複数のパラメータを有する上記命令に含まれるメッセージヘッダを調べさせ、複数のパラメータに基づいてメモリから行列データの1つまたは複数のブロックを取り出させ、行列データの上記1つまたは複数のブロックを、複数のレジスタの第1のセット内に格納させる。
【0277】
実施例17は、実施例16の主題を含み、複数のパラメータは、メモリから取り出すブロックの量を示す配列長の属性を含む。
【0278】
実施例18は、実施例16および実施例17の主題を含み、複数のパラメータは、1つまたは複数のブロックのそれぞれの幅、高さおよびピッチを定義する属性をさらに含む。
【0279】
実施例19は、実施例16~18の主題を含み、メッセージ記述子は、転置演算を伴った2Dブロックの読み出しが実行されるべきであることを示す。
【0280】
実施例20は、実施例16~19の主題を含み、メッセージ記述子は、変換演算を伴った2Dブロックの読み出しが実行されるべきであることを示す。
【0281】
前述の説明および図面は、制限的な意味ではなく、例示的な意味で把握されるものである。当業者は、添付の特許請求の範囲に記載される本発明のより広い精神および範囲から逸脱することなく、本明細書に記載の実施形態に様々な変形および変更を加え得ることを理解するであろう。
他の可能な項目
(項目1) 機械学習行列処理を容易にする装置であって、
行列データを格納するメモリと、
命令に含まれるメッセージ記述子を調べて、実行されるべき行列レイアウト操作演算のタイプを決定し、
取り出されるべき2次元(2D)メモリ面を定義する複数のパラメータを有する上記命令に含まれるメッセージヘッダを調べ、
上記複数のパラメータに基づいて上記メモリから行列データの1つまたは複数のブロックを取り出すための、命令を実行する1つまたは複数のプロセッサと、
複数のレジスタを含むレジスタファイルとを備え、
上記行列データの上記1つまたは複数のブロックは、上記複数のレジスタの第1のセット内に格納されている、装置。
(項目2) 上記複数のパラメータは、メモリから取り出すブロックの量を示す配列長の属性を含む、項目1に記載の装置。
(項目3) 上記複数のパラメータは、上記1つまたは複数のブロックのそれぞれの幅、高さ、およびピッチを定義する属性をさらに含む、項目2に記載の装置。
(項目4) 上記メッセージ記述子は、転置演算を伴った2Dブロックの読み出しが実行されるべきであることを示す、項目3に記載の装置。
(項目5) 上記1つまたは複数のプロセッサは、上記行列データの上記1つまたは複数のブロックのそれぞれに対して転置演算を実行し、上記転置された行列を上記レジスタの上記第1のセットに格納する、項目4に記載の装置。
(項目6) 上記メッセージ記述子は、変換演算を伴った2Dブロックの読み出しが実行されるべきであることを示す、項目3に記載の装置。
(項目7) 上記1つまたは複数のプロセッサは、上記行列データの上記1つまたは複数のブロックのそれぞれに対して変換演算を実行し、上記変換された行列を上記レジスタの上記第1のセットに格納する、項目6に記載の装置。
(項目8) 上記メッセージ記述子は、転置および変換演算を伴った2Dブロックの読み出しが実行されるべきであることを示す、項目3に記載の装置。
(項目9) 機械学習行列処理を容易にする方法であって、 命令に含まれるメッセージ記述子を調べて、実行されるべき行列レイアウト操作演算のタイプを決定することと、
取り出されるべき2次元(2D)メモリ面を定義する複数のパラメータを有する上記命令に含まれるメッセージヘッダを調べることと、
上記複数のパラメータに基づいて上記メモリから行列データの1つまたは複数のブロックを取り出すことと、
上記行列データの上記1つまたは複数のブロックを、上記複数のレジスタの第1のセット内に格納することとを含む、方法。
(項目10) 上記複数のパラメータは、メモリから取り出すブロックの量を示す配列長の属性を含む、項目9に記載の方法。
(項目11) 上記複数のパラメータは、上記1つまたは複数のブロックのそれぞれの幅、高さ、およびピッチを定義する属性をさらに含む、項目10に記載の方法。
(項目12) 上記メッセージ記述子は、転置演算を伴った2Dブロックの読み出しが実行されるべきであることを示す、項目9に記載の方法。
(項目13) 上記転置演算は、
上記行列データの上記1つまたは複数のブロックのそれぞれに対して転置演算を実行することと、
上記転置された行列を上記レジスタの上記第1のセットに格納することとを含む、項目12に記載の方法。
(項目14) 上記メッセージ記述子は、変換演算を伴った2Dブロックの読み出しが実行されるべきであることを示す、項目11に記載の方法。
(項目15) 上記変換演算は、
上記行列データの上記1つまたは複数のブロックのそれぞれに対して変換演算を実行することと、
上記変換された行列を上記レジスタの上記第1のセットに格納することとを含む、項目14に記載の方法。
(項目16) 命令が格納されている少なくとも1つの非一時的なコンピュータ可読媒体であって、1つまたは複数のプロセッサによって実行されると、上記プロセッサに、
命令に含まれるメッセージ記述子を調べて、実行されるべき行列レイアウト操作演算のタイプを決定させ、
取り出されるべき2次元(2D)メモリ面を定義する複数のパラメータを有する上記命令に含まれるメッセージヘッダを調べさせ、
上記複数のパラメータに基づいてメモリから行列データの1つまたは複数のブロックを取り出させ、
上記行列データの上記1つまたは複数のブロックを、複数のレジスタの第1のセット内に格納させる、コンピュータ可読媒体。
(項目17) 上記複数のパラメータは、メモリから取り出すブロックの量を示す配列長の属性を含む、項目16に記載のコンピュータ可読媒体。
(項目18) 上記複数のパラメータは、上記1つまたは複数のブロックのそれぞれの幅、高さおよびピッチを定義する属性をさらに含む、項目17に記載のコンピュータ可読媒体。
(項目19) 上記メッセージ記述子は、転置演算を伴った2Dブロックの読み出しが実行されるべきであることを示す、項目18に記載のコンピュータ可読媒体。
(項目20) 上記メッセージ記述子は、変換演算を伴った2Dブロックの読み出しが実行されるべきであることを示す、項目18に記載のコンピュータ可読媒体。
図1
図2A
図2B
図2C
図2D
図3A
図3B
図3C
図4
図5A
図5B
図6
図7
図8
図9A
図9B
図10
図11A
図11B
図11C
図11D
図12
図13A
図13B
図14
図15A
図15B
図16
図17
図18
図19
図20
図21
図22
図23A
図23B
図24
図25
図26A
図26B
図27A
図27B
図28A
図28B
図29
図30