(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-04-25
(45)【発行日】2025-05-08
(54)【発明の名称】スパース行列最適化機構
(51)【国際特許分類】
G06F 17/16 20060101AFI20250428BHJP
G06F 9/38 20180101ALI20250428BHJP
G06F 9/302 20180101ALI20250428BHJP
G06N 3/063 20230101ALI20250428BHJP
【FI】
G06F17/16 P
G06F9/38 370C
G06F9/302 A
G06N3/063
【外国語出願】
(21)【出願番号】P 2020159658
(22)【出願日】2020-09-24
【審査請求日】2023-09-21
(32)【優先日】2019-12-11
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】593096712
【氏名又は名称】インテル コーポレイション
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】ナミタ シャルマ
(72)【発明者】
【氏名】スプラティム パル
(72)【発明者】
【氏名】ビジュ ピー. サイモン
(72)【発明者】
【氏名】トヴィナケレ ディー. ヴィヴェク
【審査官】田中 幸雄
(56)【参考文献】
【文献】米国特許出願公開第2017/0168990(US,A1)
【文献】米国特許出願公開第2019/0324746(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/16
G06F 9/38
G06F 9/302
G06N 3/063
(57)【特許請求の範囲】
【請求項1】
行列処理を容易にする装置であって、
入力行列データを受け取り、該入力行列データを複数のサブブロックに変換し、
各々が前記複数のサブブロックのうちの1つに関連付けられる、複数のサブブロックビットを有するビットマップデータを取り出し、前記複数のサブブロックの
うちの第1ブロック
内の隣接するサブブロックに関連付けられるサブブロックビットを検査して
、処理されるべきタイルサイズを決定し、前記第1ブロック
内の各サブブロックが
、すべてゼロであるスパースデータを含む
ことを前記サブブロックビットが示すと判断すると
、第1タイルサイズを選択し、前記第1タイルサイズに基づいて出力行列データを生成する、行列アクセラレータを備える、
装置。
【請求項2】
前記第1タイルサイズは、前記第1ブロックのサイズを備える、
請求項1に記載の装置。
【請求項3】
前記行列アクセラレータは、前記第1ブロック内の少なくとも1つのサブブロックがスパースデータを含まないと判断すると、第2タイルサイズを選択する、
請求項
1に記載の装置。
【請求項4】
前記第2タイルサイズは、サブブロックのサイズを備える、
請求項3に記載の装置。
【請求項5】
行列処理を容易にする
ために、グラフィクスプロセッサによって実行される方法であって、
入力行列データを受け取るステップと;
前記入力行列データを複数のサブブロックに変換するステップと;
各々が前記複数のサブブロックのうちの1つに関連付けられる、複数のサブブロックビットを有するビットマップデータを取り出すステップと;
前記
複数のサブブロックの
うちの第1ブロック
内の隣接するサブブロックに関連付けられるサブブロックビットを検査して
、処理されるべきタイルサイズを決定するステップと;
前記第1ブロック
内の各サブブロックが
、すべてゼロであるスパースデータを含む
ことを前記サブブロックビットが示すと判断すると、第1タイルサイズを選択するステップと;
前記第1タイルサイズに基づいて出力行列データを生成するステップと;
を含む、方法。
【請求項6】
前記第1タイルサイズは、前記第1ブロックのサイズを備える、
請求項
5に記載の方法。
【請求項7】
前記第1ブロック内の少なくとも1つのサブブロックがスパースデータを含まないと判断すると、第2タイルサイズを選択するステップ
、
を
更に含む、請求項
5に記載の方法。
【請求項8】
前記第2タイルサイズは、サブブロックのサイズを備える、
請求項7に記載の方法。
【請求項9】
グラフィクスプロセッサであって、
入力行列データを受け取り、該入力行列データを複数のサブブロックに変換し、
各々が前記複数のサブブロックのうちの1つに関連付けられる、複数のサブブロックビットを有するビットマップデータを取り出し、前記複数のサブブロックの
うちの第1ブロック
内の隣接するサブブロックに関連付けられるサブブロックビットを検査して
、処理されるべきタイルサイズを決定し、前記第1ブロック
内の各サブブロックが
、すべてゼロであるスパースデータを含む
ことを前記サブブロックビットが示すと判断すると
、第1タイルサイズを選択する
、行列アクセラレータと;
前記第1タイルサイズに基づいて出力行列データを生成するシストリックパイプラインと;
を備える、グラフィクスプロセッサ。
【請求項10】
前記第1タイルサイズは、前記第1ブロックのサイズを備える、
請求項
9に記載のグラフィクスプロセッサ。
【請求項11】
前記行列アクセラレータは、前記第1ブロック内の少なくとも1つのサブブロックがスパースデータを含まないと判断すると、第2タイルサイズを選択する、
請求項
9に記載のグラフィクスプロセッサ。
【請求項12】
前記第2タイルサイズは、サブブロックのサイズを備える、
請求項11に記載のグラフィクスプロセッサ。
【請求項13】
前記行列アクセラレータは、前記
複数のサブブロックの
うちの第2ブロックを検査して、前記第2ブロックがスパースデータを含むかどうか判断し、前記第2ブロックがスパースデータを含まないと判断すると、第2タイルサイズを選択し、前記第2タイルサイズに基づいて出力行列データを生成する、
請求項
9に記載のグラフィクスプロセッサ。
【発明の詳細な説明】
【背景技術】
【0001】
ニューラルネットワークを、非巡回グラフ内で接続されるニューロンの集合としてモデル化することができる。ニューラルネットワークは、入力(単一ベクトル)を受け取り、一連の隠れ層を通してその入力を変換することができる。各隠れ層は、ニューロンのセットで構成され、各ニューロンは、前の層内のすべてのニューロンに完全に接続され、単一層内のニューロンは完全に独立に機能し、いずれの接続も共有しない。畳み込みニューラルネットワーク(CNN:convolutional neural network)は、標準のニューラルネットワークと同様である。各ニューロンは、いくつかの入力を受け取り、ドット積を実行し、任意に非線形性に従う。しかしながら、CNNは、入力画像データを処理するよう明示的に調整される。生の画像データ入力に基づいて、ネットワークは、入力データのための分類スコアを出力する。
【0002】
ニューラルネットワーク処理を実行するよう構成される並列データ処理システムは、グラフィクスプロセッサを含むことができる。グラフィクスプロセッサは、例えば線形補間、テセレーション(tessellation)、ラスタライゼーション、テクスチャマッピング、深度テスト等のような特定のオペレーションをグラフィクスデータに対して実行するように構成され得る。グラフィクスプロセッサの一部をプログラム可能にすることができ、そのようなプロセッサが、頂点及びフラグメントデータを処理するための広範なオペレーションをサポートすることを可能にする。グラフィクスプロセッサ内の完全にプログラム可能な実行ユニットを利用して、様々な並列処理オペレーションを実行することができる。しかしながら、スループットを最大にするために、グラフィクスプロセッサは、特別な固定機能論理(fixed function)ユニットを使用していくつかのオペレーションを実行することがある。
【図面の簡単な説明】
【0003】
本実施形態の上記特徴を詳細に理解することができるように、添付の図面にその一部が図示される実施形態を参照することにより、簡潔に上記で要約された実施形態の更なる具体的な説明がなされ得る。しかしながら、添付の図面は、単に典型的な実施形態を例示するものにすぎず、したがって、その範囲を限定するものとして見なされるべきではないことに留意されたい。
【0004】
【
図1】一実施形態による処理システムのブロック図である。
【0005】
【
図2A】本明細書で説明される実施形態によって提供されるコンピューティングシステム及びグラフィクスプロセッサを示す図である。
【
図2B】本明細書で説明される実施形態によって提供されるコンピューティングシステム及びグラフィクスプロセッサを示す図である。
【
図2C】本明細書で説明される実施形態によって提供されるコンピューティングシステム及びグラフィクスプロセッサを示す図である。
【
図2D】本明細書で説明される実施形態によって提供されるコンピューティングシステム及びグラフィクスプロセッサを示す図である。
【0006】
【
図3A】実施形態によって提供される、追加のグラフィクスプロセッサ及び計算アクセラレータアーキテクチャのブロック図である。
【
図3B】実施形態によって提供される、追加のグラフィクスプロセッサ及び計算アクセラレータアーキテクチャのブロック図である。
【
図3C】実施形態によって提供される、追加のグラフィクスプロセッサ及び計算アクセラレータアーキテクチャのブロック図である。
【0007】
【
図4】いくつかの実施形態によるグラフィクスプロセッサのグラフィクス処理エンジンのブロック図である。
【0008】
【
図5A】実施形態による、グラフィクスプロセッサコア内で用いられる処理要素のアレイを含むスレッド実行ロジック500を示す図である。
【
図5B】実施形態による、グラフィクスプロセッサコア内で用いられる処理要素のアレイを含むスレッド実行ロジック500を示す図である。
【0009】
【
図6】一実施形態による追加の実行ユニット600を示す図である。
【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】
【0022】
【
図19】一実施形態によるデータ処理システムのブロック図である。
【0023】
【
図20】一実施形態による、命令パイプラインによって実行される行列演算を示す図である。
【0024】
【
図21】タイル化された行列データの一実施形態を示す図である。
【0025】
【
図22A】サブブロックの実施形態を示す図である。
【
図22B】サブブロックの実施形態を示す図である。
【
図22C】サブブロックの実施形態を示す図である。
【0026】
【
図23A】シストリックパイプライン(systolic pipeline)の実施形態を示す図である。
【
図23B】シストリックパイプラインの実施形態を示す図である。
【0027】
【
図24】タイル最適化(tiling optimization)を実行するための一実施形態を示すフロー図である。
【発明を実施するための形態】
【0028】
実施形態において、行列アクセラレータは、受け取った行列データを検査し、データのスパース性に基づいて処理タイルサイズを最適化する。
【0029】
システム概要
図1は、一実施形態による処理システム100のブロック図である。システム100は、単一のプロセッサデスクトップシステム、マルチプロセッサワークステーションシステム、あるいは多数のプロセッサ102又はプロセッサコア107を有するサーバシステムで使用されてよい。一実施形態において、システム100は、ローカル又はワイドエリアネットワークへの有線又は無線接続性を有するモノのインターネット(IoT)デバイス内のように、モバイル、ハンドヘルド又は組込みデバイスで使用するためにシステムオンチップ(SoC)集積回路内に組み込まれる処理プラットフォームである。
【0030】
一実施形態において、システム100は、サーバベースのゲーミングプラットフォーム;ゲーム及びメディアコンソールを含むゲームコンソール;モバイルゲーミングコンソール、ハンドヘルドゲームコンソール又はオンラインゲームコンソール;を含むか、これらと結合することができ、あるいはこれらの中に一体化されることができる。いくつかの実施形態において、システム100は、携帯電話、スマートフォン、タブレットコンピューティングデバイス、あるいは内部ストレージ容量が少ないラップトップのようなモバイルインターネット接続型デバイスの一部である。処理システム100はまた、スマートウォッチウェアラブルデバイスのようなウェアラブルデバイス;視覚、オーディオ又は触覚出力を補助現実世界の視覚、オーディオ又は触覚経験に提供するか、あるいはテキスト、オーディオ、グラフィクス、ビデオ、ホログラフィック画像若しくはビデオ又は触覚フィードバックを他の方法で提供するために、拡張現実(AR)又は仮想現実(VR)機能で強化されるスマートアイウェア又は衣類;他の拡張現実(AR)デバイス;又は他の仮想現実(VR)デバイス;を含むか、これらと結合することができ、あるいはこれらの中に一体化されることもできる。いくつかの実施形態において、処理システム100は、テレビジョン又はセットトップボックスデバイスを含むか、これらの一部である。一実施形態において、システム100は、バス、トラクタートレイラー、車、モータ又は電動自転車(electric power cycle)、飛行機又はグラインダー(又はこれらの任意の組合せ)のような、自己駆動型の乗り物を含むか、これらと結合することができ、あるいはこれらの中に一体化されることができる。自己駆動型の乗り物はシステム100を使用して、該乗り物の周囲で感知される環境を処理し得る。
【0031】
いくつかの実施形態において、1つ以上のプロセッサ102は各々、実行されると、システム又はユーザソフトウェアのためにオペレーションを実行する命令を処理する、1つ以上のプロセッサコア107を含む。いくつかの実施形態において、1つ以上のプロセッサコア107のうちの少なくとも1つは、特定の命令セット109を処理するように構成される。いくつかの実施形態において、命令セット109は、CISC(Complex Instruction Set Computing)、RISC(Reduced Instruction Set Computing)又はVLIW(Very Long Instruction Word)による計算を容易にし得る。1つ以上のプロセッサコア107は、他の命令セットのエミュレーションを容易にする命令を含み得る、異なる命令セット109を処理し得る。プロセッサコア107は、デジタル信号プロセッサ(DSP)等の他の処理デバイスも含んでよい。
【0032】
いくつかの実施形態において、プロセッサ102はキャッシュメモリ104を含む。アーキテクチャに応じて、プロセッサ102は、単一の内部コア又は複数のレベルの内部キャッシュを有することができる。いくつかの実施形態において、キャッシュメモリは、プロセッサ102の様々な構成要素の間で共有される。いくつかの実施形態において、プロセッサ102は、外部キャッシュ(例えばレベル3(L3)キャッシュ又は最終レベルキャッシュ(LLC))(図示せず)も使用する。外部キャッシュは、既知のコヒーレンシ技術を使用して、プロセッサコア107の間で共有されてよい。加えて、レジスタファイル106をプロセッサ102内に含むことができ、レジスタファイル106は、いくつかのタイプのデータを格納するために異なるタイプのレジスタを含んでよい(例えば整数レジスタ、浮動小数点レジスタ、ステータスレジスタ及び命令ポインタレジスタ)。いくつかのレジスタは汎用レジスタであってよいが、他のレジスタは、プロセッサ102の設計に固有のものであってよい。
【0033】
いくつかの実施形態において、1つ以上のプロセッサ102は、1つ以上のインタフェースバス110に結合され、アドレス、データ又は制御信号のような通信信号をプロセッサ102とシステム100内の他の構成要素との間で伝送する。インタフェースバス110は、一実施形態では、DMI(Direct Media Interface)バスのバージョンのようなプロセッサバスとすることができる。しかしながら、プロセッサバスは、DMIバスに限定されず、1つ以上の周辺構成要素相互接続バス(例えばPCI、PCIエクスプレス)、メモリバス又は他のタイプのインタフェースバスを含んでよい。一実施形態において、プロセッサ102は、一体型のメモリコントローラ116及びプラットフォームコントローラハブ130を含む。メモリコントローラ116は、メモリデバイスと、システム100の他の構成要素との間の通信を促進するが、プラットフォームコントローラハブ(PCH)130は、ローカルI/Oバスを介してI/Oデバイスへの接続を提供する。
【0034】
メモリデバイス120は、動的ランダムアクセスメモリ(DRAM)デバイス、静的ランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、相変化メモリデバイス又はプロセスメモリとして機能する適切な性能を有する何らかの他のメモリデバイスとすることができる。一実施形態において、メモリデバイス120はシステム100のためのシステムメモリとして動作して、1つ以上のプロセッサ102がアプリケーション又はプロセスを実行するときに使用するために、データ122及び命令121を格納することができる。メモリコントローラ116は、オプションの外部グラフィクスプロセッサ118とも結合する。外部グラフィクスプロセッサ118は、プロセッサ102内のグラフィクスプロセッサ108と通信して、グラフィクス及びメディアオペレーション(media operations)を実行してよい。いくつかの実施形態において、グラフィクス、メディア及び/又は計算オペレーション(compute operations)は、アクセラレータ112によって手助けされることがある。アクセラレータ112は、グラフィクス、メディア又は計算オペレーションの特別なセットを実行するように構成され得るコプロセッサである。例えば一実施形態では、アクセラレータ112は、機械学習又は計算オペレーションを最適化するために使用される行列乗算アクセラレータである。一実施形態では、アクセラレータ112は、グラフィクスプロセッサ108と共同してレイトレーシング(ray-tracing)オペレーションを実行するために使用され得る、レイトレーシングアクセラレータである。一実施形態において、外部アクセラレータ119は、アクセラレータ112の代わりに又はアクセラレータ112と共同で使用されてよい。
【0035】
いくつかの実施形態において、ディスプレイデバイス111はプロセッサ102に接続することができる。ディスプレイデバイス111は、モバイル電子デバイス又はラップトップデバイス内のような内部ディスプレイデバイス、あるいはディスプレイインタフェース(例えばディスプレイポート等)を介して取り付けられる外部ディスプレイデバイスのうちの1つ以上とすることができる。一実施形態において、ディスプレイデバイス111は、仮想現実(VR)アプリケーション又は拡張現実(AR)アプリケーションで使用するための立体視ディスプレイデバイスのような、ヘッドマウントディスプレイ(HMD)とすることができる。
【0036】
いくつかの実施形態において、プラットフォームコントローラハブ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(unified extensible firmware interface)とすることができる。ネットワークコントローラ134は、有線ネットワークへのネットワーク接続を可能にすることができる。いくつかの実施形態において、高性能ネットワークコントローラ(図示せず)はインタフェースバス110と結合する。オーディオコントローラ146は、一実施形態では、マルチチャネル高精細オーディオコントローラである。一実施形態では、システム100は、レガシー(例えばパーソナルシステム2(PS/2))デバイスを当該システムに結合するためのオプションのレガシーI/Oコントローラ140を含む。プラットフォームコントローラハブ130は、1つ以上のユニバーサルシリアルバス(USB)コントローラ142に接続して、キーボードとマウス143の組合せ、カメラ144又は他のUSB入力デバイスのような入力デバイスを接続することもできる。
【0037】
図示されるシステム100は例示であって、限定ではなく、異なるように構成される他のタイプのデータ処理システムも使用されてよいことが認識されよう。例えばメモリコントローラ116及びプラットフォームコントローラハブ130の例は、外部グラフィクスプロセッサ118のような目立たない外部グラフィクスプロセッサに一体化されてよい。一実施形態において、プラットフォームコントローラハブ130及び/又はメモリコントローラ116は、1つ以上のプロセッサ102の外部にあってよい。例えばシステム100は、外部メモリコントローラ116及びプラットフォームコントローラハブ130を含むことができる。プラットフォームコントローラハブ130は、プロセッサ102と通信するシステムチップセット内のメモリコントローラハブ及び周辺コントローラハブとして構成されてよい。
【0038】
例えばCPU、メモリ及び他の構成要素がその上に配置され、熱性能を高めるように設計される、回路基板(「スレッド(sled)」)を使用することができる。いくつかの例では、プロセッサ等の処理構成要素がスレッドの上側に配置され、一方、DIMM等のニアメモリ(near memory)が、スレッドの下側に配置される。この設計によって提供される強化された気流の結果として、構成要素は、典型的なシステムよりもより高い周波数及び電力レベルで動作してよく、それにより性能を向上させる。さらに、スレッドは、ラック内の電力及びデータ通信ケーブルと盲目的に(blindly)かみ合うように構成され、それにより、迅速に取り除かれ、アップグレードされ、再インストールされ、かつ/又は置換されるそれらの能力を高めることができる。同様に、プロセッサ、アクセラレータ、メモリ及びデータストレージのように、スレッド上に配置される個々の構成要素は、相互からの間隔が増加することに起因して、容易にアップグレードされるように構成される。例示の実施形態において、構成要素は更に、それらの信頼性を証明するハードウェア証明機能を含む。
【0039】
データセンタは、イーサネット(登録商標)及びオムニパス(Omni-Path)を含む複数の他のネットワークアーキテクチャをサポートする、単一のネットワークアーキテクチャ(「ファブリック」)を利用することができる。スレッドは、典型的なツイステッドペアケーブル(例えばカテゴリ5、カテゴリ5e、カテゴリ6等)よりもより高い帯域幅及びより低いレイテンシを提供するオプションのファイバを介して、スイッチに結合され得る。高帯域幅、低レイテンシ相互接続及びネットワークアーキテクチャに起因して、データセンタは使用中に、メモリ、アクセラレータ(例えばGPU、グラフィクス、アクセラレータ、FPGA、ASIC、ニューラルネットワーク及び/又は人工知能アクセラレータ等)及び物理的に分解(disaggregated)されるデータストレージデバイス等のリソースをプールし、必要に応じて、それらを計算リソース(例えばプロセッサ)に提供してよく、計算リソースが、プールされたリソースに、それらがローカルであるかのようにアクセスすることを可能にする。
【0040】
電源又は電力リソースは、システム100、あるいは本明細書で説明される任意の構成要素又はシステムに電圧及び/又は電流を提供することができる。一例において、電源は、コンセントにプラグインするAC-DC(交流-直流)アダプタを含む。そのようなAC電力は、再生可能エネルギ(例えばソーラー電力)電源とすることができる。一例において、電源は、外部AC-DCコンバータのようなDC電源を含む。一例では、電源又は電力供給源は、充電場(charging field)への近接により充電する非接触充電ハードウェアを含む。一例において、電源は、内部バッテリ、交流電流源、動きベースの電源、ソーラー電源又は燃料電池ソースを含むことができる。
【0041】
図2A~
図2Dは、本明細書で説明される実施形態によって提供されるコンピューティングシステム及びグラフィクスプロセッサを図示している。本明細書におけるいずれかの他の図面の要素と同じ参照番号(又は名称)を有する
図2A~
図2Dの要素は、本明細書の他の箇所で説明されるものと同様の方法で動作又は機能することができるが、そのように限定されない。
【0042】
図2Aは、1つ以上のプロセッサコア202A~202N、一体型のメモリコントローラ214及び一体型のグラフィクスプロセッサ208を有するプロセッサ200の実施形態のブロック図である。プロセッサ200は、破線のボックスによって表される追加のコア202Nまで含む、追加のコアを含むことができる。プロセッサコア202A~202Nの各々は、1つ以上の内部キャッシュユニット204A~204Nを含む。いくつかの実施形態において、各プロセッサコアは、1つ以上の共有キャッシュユニット206へのアクセスも有する。内部キャッシュユニット204A~204N及び共有キャッシュユニット206は、プロセッサ200内のキャッシュメモリ階層を表す。キャッシュメモリ階層は、各プロセッサコア内の命令及びデータキャッシュの少なくとも1つのレベルと、外部メモリの前の最高レベルのキャッシュがLLCと分類される場合に、レベル2(L2)、レベル3(L3)、レベル4(L4)又はキャッシュの他のレベルのような共有中間レベルキャッシュ(shared mid-level cache)の1つ以上のレベルを含んでよい。いくつかの実施形態において、キャッシュコヒーレンシロジックは、様々なキャッシュユニット206と204A~204Nとの間のコヒーレンシを維持する。
【0043】
いくつかの実施形態において、プロセッサ200は、1つ以上のバスコントローラユニット216のセット及びシステムエージェントコア210も含んでよい。1つ以上のバスコントローラユニット216は、1つ以上のPCI又はPCIエクスプレスバスのような周辺バスのセットを管理する。システムエージェントコア210は、様々なプロセッサ構成要素のための管理機能を提供する。いくつかの実施形態において、システムエージェントコア210は、1つ以上の一体型のメモリコントローラ214を含み、様々な外部メモリデバイス(図示せず)へのアクセスを管理する。
【0044】
いくつかの実施形態において、プロセッサコア202A~202Nのうちの1つ以上は、同時マルチスレッドのためのサポートを含む。そのような実施形態において、システムエージェントコア210は、マルチスレッド化処理の間にコア202A~202Nを調整及び動作させるための構成要素を含む。システムエージェントコア210は、電力コントロールユニット(PCU)を更に含んでよく、電力コントロールユニット(PCU)は、プロセッサコア202A~202N及びグラフィクスプロセッサ208の電力状態を調節するロジック及び構成要素を含む。
【0045】
いくつかの実施形態において、プロセッサ200は、グラフィクス処理オペレーションを実行するグラフィクスプロセッサ208を更に含む。いくつかの実施形態において、グラフィクスプロセッサ208は、共有キャッシュユニット206のセットと、1つ以上の一体型のメモリコントローラ214を含むシステムエージェントコア210に結合する。いくつかの実施形態において、システムエージェントコア210は、1つ以上の結合されたディスプレイに対するグラフィクスプロセッサ出力を駆動するディスプレイコントローラ211も含む。いくつかの実施形態において、ディスプレイコントローラ211は、少なくとも1つの相互接続を介してグラフィクスプロセッサと結合される別個のモジュールであってもよく、あるいはグラフィクスプロセッサ208内に一体化されてもよい。
【0046】
いくつかの実施形態において、リングベースの相互接続ユニット212を使用してプロセッサ200の内部構成要素を結合する。しかしながら、ポイントツーポイント相互接続、スイッチ型相互接続又は当技術分野で周知の技術を含む他の技術といった、代替的な相互接続ユニットが使用されてもよい。いくつかの実施形態において、グラフィクスプロセッサ208は、I/Oリンク213を介してリング相互接続212と結合する。
【0047】
例示のI/Oリンク213は、様々なプロセッサ構成要素と、eDRAMモジュールのような高性能な組込みメモリモジュール218との間の通信を促進する、オンパッケージI/O相互接続(on package I/O interconnect)を含む複数の様々なI/O相互接続のうちの少なくとも1つを表す。いくつかの実施形態において、プロセッサコア202A~202N及びグラフィクスプロセッサ208の各々は、組込みメモリモジュール218を共有最終レベルキャッシュとして使用することができる。
【0048】
いくつかの実施形態において、プロセッサコア202A~202Nは、同じ命令セットアーキテクチャを実行する同種コアである。別の実施形態では、プロセッサコア202A~202Nは、命令セットアーキテクチャに関して異種であり、プロセッサコア202A~202Nのうちの1つ以上が第1命令セットを実行し、他のコアのうちの少なくとも1つが、第1命令セットのサブセット又は異なる命令セットを実行する。一実施形態において、プロセッサコア202A~202Nは、マイクロアーキテクチャに関して異種であり、比較的高い電力消費量を有する1つ以上のコアが、より低い電力消費量を有する1つ以上の電力コアと結合する。一実施形態において、プロセッサコア202A~202Nは、計算能力に関して異種である。加えて、プロセッサ200は、1つ以上のチップ上に、あるいは他の構成要素に加えて、図示される構成要素を有するSoC集積回路として実装されることができる。
【0049】
図2Bは、本明細書で説明されるいくつかの実施形態による、グラフィクスプロセッサコア219のハードウェアロジックのブロック図である。本明細書におけるいずれかの他の図面の要素と同じ参照番号(又は名称)を有する
図2Bの要素は、本明細書の他の箇所で説明されるものと同様の方法で動作又は機能することができるが、そのように限定されない。グラフィクスプロセッサコア219は、時々コアスライスとも呼ばれ、モジュラグラフィクスプロセッサ内の1つ又は複数のグラフィクスコアとすることができる。グラフィクスプロセッサコア219は、1つのグラフィクスコアスライスの例であり、本明細書で説明されるようなグラフィクスプロセッサは、目標電力及び性能エンベロープに基づいて複数のグラフィクスコアスライスを含んでよい。各グラフィクスプロセッサコア219は、サブスライスとも呼ばれる複数のサブコア221A~221Fと結合される、固定機能ブロック230を含むことができる。複数のサブコア221A~221Fは、汎用及び固定機能ロジックのモジュラブロックを含む。
【0050】
いくつかの実施形態において、固定機能ブロック230は、例えば低性能及び/又は低電力グラフィクスプロセッサ実装において、グラフィクスプロセッサコア219内のすべてのサブコアによって共有され得る、ジオメトリ/固定機能パイプライン231を含む。様々な実装において、ジオメトリ/固定機能パイプライン231は、3D固定機能パイプライン(例えば以下で説明される
図3及び
図4における3Dパイプライン312)、ビデオフロントエンドユニット、スレッドスポナー(thread spawner)及びスレッドディスパッチャ、並びに統一リターンバッファ(例えば以下で説明される
図4の統一リターンバッファ418)を管理する統一リターンバッファマネージャを含む。
【0051】
一実施形態において、固定機能ブロック230は、グラフィクスSoCインタフェース232、グラフィクスマイクロコントローラ233及びメディアパイプライン234も含む。グラフィクスSoCインタフェース232は、グラフィクスプロセッサコア219と、システムオンチップ集積回路内の他のプロセッサコアとの間のインタフェースを提供する。グラフィクスマイクロコントローラ233は、スレッドディスパッチ、スケジューリング及びプリエンプション(pre-emption)を含む、グラフィクスプロセッサコア219の様々な機能を管理するよう構成可能な、プログラム可能なサブプロセッサである。メディアパイプライン234(例えば
図3及び
図4のメディアパイプライン316)は、画像及びビデオデータを含む、マルチメディアデータの復号、符号化、前処理及び/又は後処理を容易にするロジックを含む。メディアパイプライン234は、サブコア221~221F内で計算又はサンプリングロジックへの要求を介してメディアオペレーションを実装する。
【0052】
一実施形態において、SoCインタフェース232は、グラフィクスプロセッサコア219が、汎用アプリケーションプロセッサコア(例えばCPU)と通信し、かつ/又は共有の最終レベルキャッシュメモリ、システムRAM及び/又は組込みオンチップ又はオンパッケージDRAMのようなメモリ階層要素を含む、SoC内の他の構成要素と通信することを可能にする。SoCインタフェース232は、カメライメージングパイプラインのようなSoC内の固定機能デバイスと通信することも可能にし、グラフィクスプロセッサコア219とSoC内のCPUとの間で共有され得るグローバルメモリアトミクスの使用及び/又は実装を可能にする。SoCインタフェース232は、グラフィクスプロセッサコア219のための電力管理コントロールも実装することができ、グラフィックコア219のクロックドメインと、SoC内の他のクロックドメインとの間のインタフェースを可能にする。一実施形態において、SoCインタフェース232は、グラフィクスプロセッサ内の1つ以上のグラフィクスコアの各々にコマンド及び命令を提供するように構成される、コマンドストリーマ及びグローバルスレッドディスパッチャからのコマンドバッファの受け取りを可能にする。コマンド及び命令は、メディアオペレーションが実行されるときメディアパイプライン234にディスパッチされ、あるいはグラフィクス処理オペレーションが実行されるとき、ジオメトリ及び固定機能パイプライン(例えばジオメトリ及び固定機能パイプライン231、ジオメトリ及び固定機能パイプライン237)にディスパッチされ得る。
【0053】
グラフィクスマイクロコントローラ233は、グラフィクスプロセッサコア219のために様々なスケジューリング及び管理タスクを実行するように構成され得る。一実施形態において、グラフィクスマイクロコントローラ233は、サブコア221A~221F内の実行ユニット(EU:execution unit)アレイ222A~222F、224A~224F内の様々なグラフィクス並列エンジンに対してグラフィクス及び/又は計算ワークロードスケジューリングを実行することができる。このスケジューリングモデルにおいて、グラフィクスプロセッサコア219を含むSoCのCPUコアで動作しているホストハードウェアは、適切なグラフィクスエンジン上でスケジューリングオペレーションを起動する、複数のグラフィックプロセッサドアベル(graphic processor doorbells)のうちの1つに、ワークロードを提示することができる。スケジューリングオペレーションは、どのワークロードを次に実行すべきかを決定することと、ワークロードをコマンドストリーマに提示することと、エンジン上で実行されている既存のワークロードを予め空にすることと、ワークロードの進行をモニタリングすることと、ワークロードが完了したときにホストソフトウェアに通知することを含む。一実施形態において、グラフィクスマイクロコントローラ233は、グラフィクスプロセッサコア219の低電力又はアイドル状態を促進することもでき、グラフィクスプロセッサコア219に、システム上のオペレーティングシステム及び/又はグラフィクスドライバソフトウェアとは独立に低電力状態遷移にわたってグラフィクスプロセッサコア219内にレジスタを保存及び復元する能力を提供する。
【0054】
グラフィクスプロセッサコア219は、図示されるサブコア221A~221Fより多くの又は少ない、最大でN個のモジュラサブコアを有してよい。N個のサブコアの各セットについて、グラフィクスプロセッサコア219は、共有機能ロジック235、共有及び/又はキャッシュメモリ236、ジオメトリ/固定機能パイプライン237、並びに様々なグラフィクス及び計算処理オペレーションを加速する追加の固定機能ロジック238も含むことができる。共有機能ロジック235は、グラフィクスプロセッサコア219内のN個のサブコアの各々によって共有され得る、
図4の共有機能ロジック420(例えばサンプラ、数学(math)及び/又はスレッド間通信ロジック)に関連付けられる論理ユニットを含むことができる。共有及び/又はキャッシュメモリ236は、グラフィクスプロセッサコア219内のN個のサブコア221A~221Fのセットのための最終レベルキャッシュとすることができ、複数のサブコアによってアクセス可能な共有メモリとして機能することもできる。ジオメトリ/固定機能パイプライン237は、ジオメトリ/固定機能パイプライン231の代わりに固定機能ブロック230内に含まれることができ、同じ又は同様の論理ユニットを含むことができる。
【0055】
一実施形態において、グラフィクスプロセッサコア219は、該グラフィクスプロセッサコア219による使用のために様々な固定機能アクセラレーションロジックを含むことができる、追加の固定機能ロジック238を含む。一実施形態において、追加の固定機能ロジック238は、位置専用シェーディング(position only shading)で使用するための追加のジオメトリパイプラインを含む。位置専用シェーディングでは、2つのジオメトリパイプライン、すなわちジオメトリ/固定機能パイプライン238、231内のフルジオメトリパイプライン(full geometry pipeline)と、追加の固定機能ロジック238内に含まれ得る追加のジオメトリパイプラインであるカルパイプライン(cull pipeline)が存在する。一実施形態において、カルパイプラインは、フルジオメトリパイプラインの削減されたバージョンである。フルパイプライン及びカルパイプラインは、同じアプリケーションの異なるインスタンスを実行することができ、各インスタンスは別個のコンテキストを有している。位置専用シェーディングは、破棄された三角形(discarded triangles)の長いカルの実行(long cull runs)を隠すことができ、いくつかの例では、シェーディングがより早く完了することを可能にする。例えば一実施形態において、カルパイプラインは、フレームバッファに対してピクセルのラスタライゼーション及びレンダリングを実行することなく、頂点の位置属性のみをフェッチしてシェーディングするので、追加の固定機能ロジック238内のカルパイプラインロジックは、メインアプリケーションと並行に位置シェーダを実行することができ、一般に、フルパイプラインよりも早く重要な結果を生成する。カルパイプラインは、生成された重要な結果を使用して、すべての三角形について、それらの三角形がカリング(culled)されたかどうかにかかわらず、視程情報を計算することができる。フルパイプライン(この例では、再生パイプラインとも呼ばれることがある)は視程情報を使用して、カリングされた三角形をスキップし、最終的にラスタライゼーションフェーズに渡される可視の三角形のみシェーディングすることができる。
【0056】
一実施形態において、追加の固定機能ロジック238は、機械学習トレーニング又は推論のための最適化を含む実装のために、固定機能行列乗算ロジックのような機械学習アクセラレーションロジックも含むことができる。
【0057】
各グラフィクスサブコア221A~221Fは、グラフィクスパイプライン、メディアパイプライン又はシェーダパイプラインによる要求に応答してグラフィクス、メディア及び計算オペレーションを実行するために使用され得る実行リソースのセットを含む。グラフィクスサブコア221A~221Fは、複数のEUアレイ222A~222F、224A~224F、スレッドディスパッチ及びスレッド間通信(TD/IC)ロジック223A~223F、3D(例えばテクスチャ)サンプラ225A~225F、メディアサンプラ206A~206F、シェーダプロセッサ227A~227F及び共有ローカルメモリ(SLM:shared local memory)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を使用することができ、スレッドグループ内で実行するスレッドが、オンチップメモリの共通のプールを使用して実行することを可能にする。
【0058】
図2Cは、マルチコアグループ240A~240Nへ配置されるグラフィクス処理リソースの専用のセットを含む、グラフィクス処理ユニット(GPU)239を図示している。単一のマルチコアグループ240Aのみの詳細が提供されるが、他のマルチコアグループ240B~240Nが、同じ又は同様のグラフィクス処理リソースに備えられてもよいことが認識されよう。
【0059】
図示されるように、マルチコアグループ240Aは、グラフィクスコア243のセット、テンソルコア244のセット及びレイトレーシングコア245のセットを含み得る。スケジューラ/ディスパッチャ241は、様々なコア243、244、245上で実行するためのグラフィクススレッドをスケジュールしてディスパッチする。レジスタファイル242のセットは、グラフィクススレッドを実行するときにコア243、244、245によって使用されるオペランド値を格納する。これらは、例えば整数値を格納するための整数レジスタ、浮動小数点値を格納するための浮動小数点レジスタ、パックされたデータ要素(整数及び/又は浮動小数点データ要素)を格納するためのベクトルレジスタ、テンソル/行列値を格納するためのタイルレジスタを含んでよい。一実施形態において、タイルレジスタは、ベクトルレジスタの組合せのセットとして実装される。
【0060】
1つ以上の組み合わされたレベル1(L1)キャッシュ及び共有メモリユニット247は、テクスチャデータ、頂点データ、ピクセルデータ、レイデータ、バウンディングボリュームデータ等のようなグラフィクスデータを、各マルチコアグループ240A内にローカルに格納する。1つ以上のテクスチャユニット247を使用して、テクスチャマッピング及びサンプリングのようなテクスチャリングオペレーションを実行することもできる。マルチコアグループ240A~240Nのすべて又はサブセットによって共有されるレベル2(L2)キャッシュ253は、複数の同時グラフィクススレッドのためのグラフィクスデータ及び/又はデータを格納する。図示されるように、L2キャッシュ253は、複数のマルチコアグループ240A~240Nにまたがって共有され得る。1つ以上のメモリコントローラ248は、GPU239をメモリ249に結合する。メモリ249は、システムメモリ(例えばDRAM)及び/又は専用のグラフィクスメモリ(例えばGDDR6メモリ)であってよい。
【0061】
入力/出力(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、CPU246及びGPU239は、同じ仮想アドレス空間を共有してよい。
【0062】
一実装において、IOMMU251は仮想化をサポートする。この場合、ゲスト/グラフィクス仮想アドレスをゲスト/グラフィクス物理アドレスにマップするページテーブルの第1セットと、ゲスト/グラフィクス物理アドレスを(例えばシステムメモリ249内の)システム/ホスト物理アドレスにマップするページテーブルの第2セットを管理してよい。ページテーブルの第1及び第2セットの各々のベースアドレスは、制御レジスタに格納されてよく、コンテキストスイッチにおいてスワップアウトされてよい(例えばその結果、ページテーブルの関連するセットへのアクセスが新たなコンテキストに提供される)。
図2Cには図示されていないが、コア243、244、245及び/又はマルチコアグループ240A~240Nの各々は、変換索引バッファ(TLB:translation lookaside buffers)を含み、ゲスト仮想からゲスト物理への変換、ゲスト物理からホスト物理への変換及びゲスト仮想からホスト物理への変換をキャッシュし得る。
【0063】
一実施形態において、CPU246、GPU239及びI/Oデバイス252は単一の半導体チップ及び/又はチップパッケージ上に一体化される。図示されるメモリ249は、同じチップ上に一体化されてよく、あるいはオフチップインタフェースを介してメモリコントローラ248に結合されてよい。一実装において、メモリ249は、他の物理システムレベルメモリと同じ仮想アドレス空間を共有するGDDR6メモリを備えるが、本発明の基礎をなす原理は、この特定の実装に限定されない。
【0064】
一実施形態において、テンソルコア244は、行列演算(matrix operations)を実行するように特別に設計された複数の実行ユニットを含む。行列演算は、ディープラーニングオペレーションを実行するために使用される基本の計算オペレーションである。例えば同時行列乗算オペレーションは、ニューラルネットワークトレーニング及び推論に使用され得る。テンソルコア244は、単精度浮動小数点(例えば32ビット)、半精度浮動小数点(例えば16ビット)、整数ワード(16ビット)、バイト(8ビット)及びハーフバイト(4ビット)を含む、様々なオペランド精度を使用して行列処理を実行してよい。一実施形態において、ニューラルネットワーク実装は、各レンダリングされたシーンの特徴を抽出し、潜在的には複数のフレームからの詳細を組み合わせて、高品質の最終画像を構築する。
【0065】
ディープラーニング実装では、並列行列乗算作業が、テンソルコア244上での実装のためにスケジュールされ得る。ニューラルネットワークのトレーニングは、特に、相当数の行列ドット積演算を必要とする。N×N×N行列乗算の内積定式化を処理するために、テンソルコア244は、少なくともN個のドット積処理要素を含み得る。行列乗算を開始する前に、1つの全体マトリクスがタイルレジスタにロードされ、第2行列の少なくとも1つの行が、Nサイクルの各サイクルでロードされる。各サイクルでは、処理されるN個のドット積が存在する。
【0066】
行列要素は、特定の実装に応じて、16ビットワード、8ビットバイト(例えばINT8)及び4ビットハーフバイト(例えばINT4)を含む異なる精度で格納されてよい。テンソルコア244に対して異なる精度モードを指定して、異なるワークロードに最も効率的な精度が使用されることを確実にすることができる(例えばバイト及びハーフバイトに対する量子化を許容することができるワークロードを推論すること等)。
【0067】
一実施形態において、レイトレーシングコア245は、リアルタイムレイトレーシングと非リアルタイムレイトレーシング実装の双方のためのレイトレーシングオペレーションを加速する。特に、レイトレーシングコア245は、バウンディングボリューム階層(BVH:bounding volume hierarchies)を使用してレイトラバーサルを実行し、BVHボリューム内で囲まれるレイとプリミティブとの間の交差を識別するためにレイトラバーサル/交差回路(ray traversal/intersection circuitry)を含む。レイトレーシングコア245は(例えばZバッファ又は同様の配置を使用して)深度テスト及びカリング(culling)を実行するための回路も含んでよい。一実装において、レイトレーシングコア245は、本明細書で説明される画像ノイズ除去技術と連携してトラバーサル及び交差オペレーションを実行し、その少なくとも一部がテンソルコア244上で実行されてよい。例えば一実施形態では、テンソルコア244は、ディープラーニングニューラルネットワークを実装して、レイトレーシングコア245によって生成されるフレームのノイズ除去を実行する。しかしながら、CPU246、グラフィクスコア243及び/又はレイトレーシングコア245は、ノイズ除去及び/又はディープラーニングアルゴリズムのすべて又は一部を実装してもよい。
【0068】
加えて、上述のように、ノイズ除去への分散アプローチが用いられてもよい。このアプローチでは、GPU239は、ネットワーク又は高速相互接続を介して他のコンピューティングデバイスに結合されるコンピューティングデバイス内にある。この実施形態では、相互接続されるコンピューティングデバイスは、ニューラルネットワークラーニング/トレーニングデータを共有し、全体的なシステムが異なるタイプの画像フレーム及び/又は異なるグラフィクスアプリケーションについてノイズ除去を実行するために学習するスピードを改善する。
【0069】
一実施形態において、レイトレーシングコア245は、すべてのBVHトラバーサル及びレイ-プリミティブ交差を処理し、グラフィクスコア243がレイ当たり数千の命令で過負荷となることを防ぐ。実施形態において、各レイトレーシングコア245は、(例えばトラバーサルオペレーションのために)バウンディングボックステストを実行するための特殊回路の第1セットと、レイ-三角形の交差テスト(ray-triangle intersection tests)(例えばトラバースされている交差しているレイ)を実行するための特殊回路の第2セットを含む。したがって、一実施形態において、マルチコアグループ240Aは単に、レイプローブ(ray probe)を始めることができ、レイトレーシングコア245は、レイトラバーサル及び交差を独立に実行して、ヒットデータ(例えばヒット、ノーヒット、複数ヒット等)をスレッドコンテキストに返す。レイトレーシングコア245がトラバーサル及び交差オペレーションを実行するが、他のコア243、244は他のグラフィクス又は計算作業を実行するために解放される。
【0070】
一実施形態において、各レイトレーシングコア245は、BVHテストオペレーションを実行するトラバーサルユニットと、レイ-プリミティブ交差テストを実行する交差ユニットを含む。交差ユニットは、「ヒット」、「ノーヒット」又は「複数ヒット」応答を生成し、適切なスレッドに提供する。トラバーサル及び交差オペレーションの間、他のコア(例えばグラフィクスコア243及びテンソルコア244)の実行リソースが、他の形式のグラフィクス作業を実行するために開放される。
【0071】
以下で説明される1つの特定の実施形態では、作業がグラフィクスコア243とレイトレーシングコア245との間で分散される、ハイブリッドラスタライゼーション/レイトレーシングアプローチが使用される。
【0072】
一実施形態において、レイトレーシングコア245(及び/又は他のコア243、244)は、DispatchRaysコマンド、並びにRay Generation、closest-hit、any-hit及び各オブジェクトについてシェーダ及びテクスチャの一意のセットの割り当てを可能にするmiss shaderを含む、マイクロソフトのDirectX Ray Tracing(DXR)のようなレイトレーシング命令セットのためのハードウェアサポートを含む。レイトレーシングコア245、グラフィクスコア243及びテンソルコア224によってサポートされ得る別のレイトレーシングプラットフォームは、Vulkan 1.1.85である。しかしながら、本発明の基礎をなす原理は、いずれか特定のレイトレーシングISAに限定されないことに留意されたい。
【0073】
一般に、様々なコア245、244、243は、レイ生成(ray generation)、最も近いヒット(closest hit)、任意のヒット(any hit)、レイ-プリミティブ交差(intersection)、プリミティブ当たり階層境界ボックスの構築(per-primitive and hierarchical bounding box construction)、ミス(miss)、ビジット(visit)及び例外(exception)の命令/関数を含む、レイトレーシング命令セットをサポートし得る。より具体的には、一実施形態は、以下の関数を実行するレイトレーシング命令を含む。
【0074】
Ray Generation-ray generation命令は、各ピクセル、サンプル又は他のユーザ定義される作業割り当てのために実行され得る。
【0075】
Closest Hit-closest hit命令は、シーン内のプリミティブとレイの最も近い交差点を探すために実行され得る。
【0076】
Any Hit-any hit命令は、レイとシーン内のプリミティブとの間の複数の交差を識別し、潜在的には新たな最も近い交差点を識別する。
【0077】
Intersection-intersection命令は、レイ-プリミティブ交差テストを実行し、結果を出力する。
【0078】
Per-primitive Bounding box Construction-この命令は、(例えば新たなBVH又は他のアクセラレーションデータ構造を構築するときに)所与のプリミティブ又はプリミティブのグループの周囲に境界ボックスを構築する。
【0079】
Miss-レイが、シーン内のすべてのジオメトリ又はシーンの指定領域を避ける(miss)ことを示す。
【0080】
Visit-レイがトラバースすることになる子ボリューム(children volumes)を示す。
【0081】
Exceptions-(例えば様々なエラー条件のために呼び出される)様々なタイプの例外ハンドラを含む。
【0082】
図2Dは、本明細書で説明される実施形態に従って、グラフィクスプロセッサ及び/計算アクセラレータとして構成され得る汎用グラフィクス処理ユニット(GPGPU:general purpose graphics processing unit)270のブロック図である。GPGPU270は、1つ以上のシステム及び/又はメモリバスを介して、ホストプロセッサ(例えば1つ以上のCPU246)及びメモリ271、272と相互接続することができる。一実施形態において、メモリ271は、1つ以上のCPU246と共有され得るシステムメモリであり、メモリ272は、GPGPU272専用のデバイスメモリである。一実施形態において、GPCPU270及びデバイスメモリ272内の構成要素は、1つ以上のCPU246に対してアクセス可能なメモリアドレスにマップされてよい。メモリ271及び272へのアクセスは、メモリコントローラ268を介して促進され得る。一実施形態において、メモリコントローラ268は、内部直接メモリアクセス(DMA)コントローラ269を含み、あるいは、さもなければDMAコントローラによって実行されることになるオペレーションを実行するロジックを含むことができる。
【0083】
GPGPU270は、L2キャッシュ253、L1キャッシュ254、命令キャッシュ255及び共有メモリ256を含む、複数のキャッシュメモリを含み、その少なくとも一部がキャッシュメモリとして区分されてもよい。GPGPU270は、複数の計算ユニット260A~260Nも含む。各計算ユニット260A~260Nは、ベクトルレジスタ261、スカラレジスタ262、ベクトル論理ユニット263及びスカラ論理ユニット264のセットを含む。計算ユニット260A~260Nは、ローカル共有メモリ265及びプログラムカウンタ266も含むことができる。計算ユニット260A~260Nは、定数データを格納するために使用することができる定数キャッシュ(constant cache)267と結合することができる。定数データは、GPCPU270上で実行するカーネル又はシェーダプログラムの実行中に変化しないデータである。一実施形態において、定数キャッシュ267は、スカラデータキャッシュと、スカラレジスタ262に直接フェッチすることができる、キャッシュされたデータである。
【0084】
動作中に、1つ以上のCPU246は、アクセス可能アドレス空間にマップされているGPGPU270内のレジスタ又はメモリにコマンドを書き込むことができる。コマンドプロセッサ257は、レジスタ又はメモリからコマンドを読み出して、これらのコマンドがGPGPU270内でどのように処理されるかを決定することができる。次いで、スレッドディスパッチャを使用してスレッドを計算ユニット260A~260Nにディスパッチし、これらのコマンドを実行することができる。各計算ユニット260A~260Nは、他の計算ユニットと独立にスレッドを実行することができる。加えて、各計算ユニット260A~260Nは、条件付き計算(conditional computation)について独立に構成されることができ、計算の結果を条件付きでメモリに出力することができる。コマンドプロセッサ257は、サブミットされたコマンドが完了すると、1つ以上のCPU246を中断することができる。
【0085】
図3A~
図3Cは、本明細書で説明される実施形態によって提供される追加のグラフィクスプロセッサ及び計算アクセラレータの構造のブロック図である。本明細書におけるいずれかの他の図面における要素と同じ参照番号(又は名前)を有する
図3A~
図3Cの要素は、本明細書の他の箇所で説明されるものと同様の方法で動作又は機能することができるが、そのように限定されない。
【0086】
図3Aは、グラフィクスプロセッサ300のブロック図である。グラフィクスプロセッサ300は分離グラフィクス処理ユニットであってよく、あるいは複数の処理コア又はこれらに限定されないがメモリデバイスやネットワークインタフェースといった他の半導体デバイスと一体化されるグラフィクスプロセッサであってよい。いくつかの実施形態において、グラフィクスプロセッサは、メモリマップされたI/Oインタフェースを介して、グラフィクスプロセッサ上のレジスタと、プロセッサメモリ内に配置されたコマンドと通信することができる。いくつかの実施形態において、グラフィクスプロセッサ300は、メモリにアクセスするためにメモリインタフェース314を含む。メモリインタフェース314は、ローカルメモリ、1つ以上の内部キャッシュ、1つ以上の共有外部キャッシュ及び/又はシステムメモリへのインタフェースとすることができる。
【0087】
いくつかの実施形態において、グラフィクスプロセッサ300は、ディスプレイデバイス318へのディスプレイ出力データを駆動するディスプレイコントローラ302も含む。ディスプレイコントローラ302は、ビデオ又はユーザインタフェース要素の複数のレイヤの表示及び構成のための1つ以上のオーバーレイ平面用のハードウェアを含む。ディスプレイデバイス318は、内部又は外部ディスプレイデバイスとすることができる。一実施形態において、ディスプレイデバイス318は、仮想現実(VR)ディスプレイデバイス又は拡張現実(AR)ディスプレイデバイスのような頭部装着型ディスプレイデバイスである。いくつかの実施形態において、グラフィクスプロセッサ300は、メディアを1つ以上のメディア符号化フォーマットへ、1つ以上のメディア符号化フォーマットから又は1つ以上のメディア符号化フォーマットの間で符号化、復号又はトランスコードするビデオ符号化エンジン306を含む。そのようなメディア符号化フォーマットは、MPEG-2のようなMPEG(Moving Picture Experts Group)フォーマット、H.264/MPEG-4 AVC、H.265/HEVCのようなAVC(Advanced Video Coding)フォーマット、AOMedia(Alliance for Open Media)V8、V9並びにSMPTE(Society of Motion Picture & Television Engineers)421M/VC-1及びJPEG及びMPEG(Motion JPEG)フォーマットのようなJPEG(Joint Photographic Experts Group)を含むが、これらに限定されない。
【0088】
いくつかの実施形態において、グラフィクスプロセッサ300は、例えばビット境界ブロック転送(bit-boundary block transfers)を含む、2次元(2D)ラスタライザオペレーションを実行するブロック画像転送(BLIT:block image transfer)エンジン304を含む。しかしながら、一実施形態では、2Dグラフィクスオペレーションは、グラフィクス処理エンジン(GPE)310の1つ以上の構成要素を使用して実行される。いくつかの実施形態において、GPE310は、3次元(3D)グラフィクスオペレーション及びメディアオペレーションを含む、グラフィクスオペレーションを実行するための計算エンジンである。
【0089】
いくつかの実施形態において、GPE310は、3Dプリミティブ形状(例えば矩形、三角形等)に対して作用する処理機能を使用して3次元画像及びシーンをレンダリングすることのような3Dオペレーションを実行するための3Dパイプライン312を含む。3Dパイプライン312は、3D/メディアサブシステム315に対して要素及び/又はスポーン(spawn)実行スレッド内の様々なタスクを実行するプログラム可能及び固定機能要素を含む。3Dパイプライン312を使用してメディアオペレーションを実行することができるが、GPE310の実施形態は、特に、ビデオ事後処理及び画像強調のようなメディアオペレーションを実行するために使用されるメディアパイプライン316も含む。
【0090】
いくつかの実施形態において、メディアパイプライン316は、ビデオデコードアクセラレーション、ビデオインタレース解除及びビデオ符号化エンジン306の代わりに又はその代理としてビデオエンコードアクセラレーションのような1つ以上の特別なメディアオペレーションを実行する、固定機能又はプログラム可能な論理ユニットを含む。いくつかの実施形態において、メディアパイプライン316は更に、3D/メディアサブシステム315に対する実行のためにスレッドを生成(spawn)するスレッドスポーニングユニット(thread spawning unit)を含む。生成されたスレッドは、3D/メディアサブシステム315内に含まれる1つ以上のグラフィクス実行ユニットに対するメディアオペレーションのための計算を実行する。
【0091】
いくつかの実施形態において、3D/メディアサブシステム315は、3Dパイプライン312及びメディアパイプライン316によって生成されたスレッドを実行するためのロジックを含む。一実施形態において、パイプラインは、利用可能なスレッド実行リソースへの様々な要求を仲裁(arbitrating)してディスパッチするためのスレッドディスパッチロジックを含む、3D/メディアサブシステム315にスレッド実行要求を送信する。実行リソースは、3D及びメディアスレッドを処理するグラフィクス実行ユニットのアレイを含む。いくつかの実施形態において、3D/メディアサブシステム315は、スレッド命令及びデータのための1つ以上の内部キャッシュを含む。いくつかの実施形態において、サブシステムは、スレッド間でデータを共有し、出力データを格納するために、レジスタ及びアドレス可能メモリを含む共有メモリも含む。
【0092】
図3Bは、本明細書で説明される実施形態による、タイル化アーキテクチャを有するグラフィクスプロセッサ320を図示している。一実施形態において、グラフィクスプロセッサ320は、グラフィクスエンジンタイル310A~310D内に
図3Aのグラフィクス処理エンジン310の複数のインスタンスを有するグラフィクス処理エンジンクラスタ322を含む。各グラフィクスエンジンタイル310A~310Dは、相互接続323A~323Fのセットを介して相互接続できる。また、各グラフィクスエンジンタイル310A~310Dは、メモリ相互接続325A~325Dを介してメモリモジュール又はメモリデバイス326A~326Dにも接続できる。メモリデバイス326A~326Dは、任意のグラフィクスメモリ技術を使用することができる。例えばメモリデバイス326A~326Dは、グラフィクスダブルデータレート(GDDR:graphics double data rate)メモリであってよい。メモリデバイス326A~326Dは、一実施形態では、それらのそれぞれのグラフィクスエンジンタイル310A~310Dを有するオンダイとすることができる、高帯域幅メモリ(HBM:high-bandwidth memory)モジュールである。一実施形態において、メモリデバイス326A~326Dは、それらのそれぞれのグラフィクスエンジンタイル310A~310Dの上部にスタックされ得るスタックメモリデバイスである。一実施形態において、各グラフィクスエンジンタイル310A~310D及び関連するメモリ326A~326Dは、
図11B~
図11Dで更に詳細に説明されるように、ベースダイ又はベース基板に接合される別個のチップレット上に存在する。
【0093】
グラフィクス処理エンジンクラスタ322は、オンチップ又はオンパッケージファブリック相互接続324と接続することができる。ファブリック相互接続324は、グラフィクスエンジンタイル310A~310Dと、ビデオコーデック306及び1つ以上のコピーエンジン304のような構成要素との間の通信を可能にすることができる。コピーエンジン304を使用して、メモリデバイス326A~326D及びグラフィクスプロセッサ320の外部にあるメモリ(例えばシステムメモリ)の外に、その中へ及びその間でデータを移動させることができる。また、ファブリック相互接続324を使用して、グラフィクスエンジンタイル310A~310Dを相互接続することもできる。グラフィクスプロセッサ310は、外部ディスプレイデバイス318との接続を可能にするディスプレイコントローラ302を任意選択で含んでもよい。グラフィクスプロセッサは、グラフィクス又は計算アクセラレータとして構成されてもよい。アクセラレータの構成では、ディスプレイコントローラ302及びディスプレイデバイス318は省略されてよい。
【0094】
グラフィクスプロセッサ320は、ホストインタフェース328を介してホストシステムに接続することができる。ホストインタフェース328は、グラフィクスプロセッサ320、システムメモリ及び/又は他のシステム構成要素の間の通信を可能にすることができる。ホストインタフェース328は、例えばPCIエクスプレスバス又は別のタイプのホストシステムインタフェースとすることができる。
【0095】
図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と接続されるか、かつ/又はファブリック相互接続324によって相互接続されてもよい。一実施形態において、計算アクセラレータ330は、デバイスワイドキャッシュとして構成され得る大きなL3キャッシュを含む。計算アクセラレータ330は、
図3Bのグラフィクスプロセッサ320と同様の方法で、ホストインタフェース328を介してホストプロセッサ及びメモリに接続することもできる。
【0096】
グラフィクス処理エンジン
図4は、いくつかの実施形態による、グラフィクスプロセッサのグラフィクス処理エンジン410のブロック図である。一実施形態において、グラフィクス処理エンジン(GPE:graphics processing engine)410は、
図3Aに図示されるGPE310の一バージョンであり、
図3Bのグラフィクスエンジンタイル310A~310Dを表してもよい。本明細書のいずれかの他の図面の要素と同じ参照番号(又は名前)を有する
図4の要素は、本明細書の他の箇所で説明されるものと同様の方法で動作又は機能することができるが、そのように限定されない。例えば
図3Aの3Dパイプライン312及びメディアパイプライン316が図示されている。メディアパイプライン316は、GPE410のいくつかの実施形態ではオプションであり、GPE410内に明示的に含まれなくてもよい。例えば少なくとも一実施形態では、別個のメディア及び/又は画像プロセッサが、GPE410に結合される。
【0097】
いくつかの実施形態において、GPE410は、コマンドストリーマ403と結合されるか、これを含む。コマンドストリーマ403は、3Dパイプライン312及び/又はメディアパイプライン316にコマンドストリームを提供する。いくつかの実施形態において、コマンドストリーマ403はメモリと結合され、メモリは、システムメモリ、あるいは内部キャッシュメモリ及び共有キャッシュメモリの1つ以上とすることができる。いくつかの実施形態において、コマンドストリーマ403は、メモリからコマンドを受け取り、該コマンドを3Dパイプライン312及び/又はメディアパイプライン316に送信する。コマンドは、3Dパイプライン312及びメディアパイプライン316のためのコマンドを格納するリングバッファからフェッチされた命令(directives)である。一実施形態において、リングバッファは、複数のコマンドのバッチを格納しているバッチコマンドバッファを更に含むことができる。3Dパイプライン312のためのコマンドは、これらに限定されないが、3Dパイプライン312のための頂点及びジオメトリデータ及び/又はメディアパイプライン316のための画像データ及びメモリオブジェクトのような、システム内に格納されるデータへの参照も含むことができる。3Dパイプライン312及びメディアパイプライン316は、それぞれのパイプライン内のロジックを介してオペレーションを実行することによって、あるいは1つ以上のスレッドをグラフィクスコアアレイ414へディスパッチすることによって、コマンド及びデータを処理する。一実施形態において、グラフィクスコアアレイ414は、グラフィクスコア(例えばグラフィクスコア415A、グラフィクスコア415B)の1つ以上のブロックを含み、各ブロックが1つ以上のグラフィクスコアを含む。各グラフィクスコアは、グラフィクス及び計算オペレーションを実行する汎用及びグラフィクス固有実行ロジック、並びに固定機能テクスチャ処理及び/又は機械学習及び人工知能アクセラレーションロジックを含む、グラフィクス実行リソースのセットを含む。
【0098】
様々な実施形態において、3Dパイプライン312は、命令を処理して実行スレッドをグラフィクスコアアレイ414にディスパッチすることによって、頂点シェーダ、ジオメトリシェーダ、ピクセルシェーダ、フラグメントシェーダ、計算シェーダ又は他のシェーダプログラムのような1つ以上のシェーダプログラムを処理する、固定機能及びプログラム可能ロジックを含むことができる。グラフィクスコアアレイ414は、これらのシェーダプログラムを処理する際に使用するための実行リソースの統一ブロックを提供する。グラフィクスコアアレイ414のグラフィクスコア415A~145B内の多目的実行ロジック(例えば実行ユニット)は、様々な3D APIシェーダ言語のためのサポートを含み、複数のシェーダに関連付けられる複数の同時実行スレッドを実行することができる。
【0099】
いくつかの実施形態において、グラフィクスコアアレイ414は、ビデオ及び/又は画像処理のようなメディア機能を実行する実行ロジックを含む。一実施形態において、実行ユニットは、グラフィクス処理オペレーションに加えて、並列汎用計算オペレーションを実行するようにプログラム可能な汎用ロジックを含む。汎用ロジックは、
図1のプロセッサコア107及び
図2Aのコア202A~202N内の汎用ロジックと並列に又はこれと共に処理オペレーションを実行することができる。
【0100】
グラフィクスコアアレイ414上で実行しているスレッドによって生成される出力データは、データを統一リターンバッファ(URB:unified return buffer)418内のメモリに出力することができる。URB418は、複数のスレッドのためのデータを格納することができる。いくつかの実施形態において、URB418を使用して、グラフィクスコアアレイ414上で実行している異なるスレッド間にデータを送信してよい。いくつかの実施形態において、URB418は更に、グラフィクスコアアレイ及び共有機能ロジック420内の固定機能ロジック上のスレッド間の同期化のために使用されてよい。
【0101】
いくつかの実施形態において、グラフィクスコアアレイ414は、該アレイが可変数のグラフィクスコアを含むようにスケーラブルである。グラフィクスコアの各々は、GPE410目標電力及び性能レベルに基づいて可変数の実行ユニットを有する。一実施形態において、実行リソースは、必要に応じて実行リソースが有効又は無効にされ得るように、動的にスケーラブルである。
【0102】
グラフィクスコアアレイ414は、グラフィクスコアアレイ内のグラフィクスコアの間で共有される複数のリソースを含む、共有機能ロジック420と結合する。共有機能ロジック420内の共有機能は、グラフィクスコアアレイ414に特別な補助機能を提供するハードウェア論理ユニットである。様々な実施形態において、共有機能ロジック420は、これらに限定されないが、サンプラ421、数学(math)422、スレッド間通信(ITC:inter-thread communication)423ロジックを含む。加えて、いくつかの実施形態は、共有機能ロジック420内に1つ以上のキャッシュ425を実装する。
【0103】
共有機能は、少なくとも、所与の特別な機能についての要求が、グラフィクスコアアレイ414内に含めるには不十分である場合に実装される。代わりに、その特別な機能の単一のインスタンス化は、共有機能ロジック420内のスタンドアロンエンティティとして実装され、グラフィクスコアアレイ414内の実行リソースの間で共有される。グラフィクスコアアレイ414の間で共有され、グラフィクスコアアレイ414内に含まれる機能の正確なセットは、実施形態により異なる。いくつかの実施形態では、グラフィクスコアアレイ414によって広く使用される共有機能ロジック420内の固有の共有機能が、グラフィクスコアアレイ414内の共有機能ロジック416内に含まれてよい。様々な実施形態において、グラフィクスコアアレイ414内の共有機能ロジック416は、共有機能ロジック420内の一部又はすべてのロジックを含むことができる。一実施形態において、共有機能ロジック420内のすべてのロジック要素は、グラフィクスコアアレイ414の共有機能ロジック416内で複製されてよい。一実施形態において、共有機能ロジック420は、グラフィクスコアアレイ414内の共有機能ロジック416のために除外される。
【0104】
実行ユニット
図5A~
図5Bは、本明細書で説明される実施形態による、グラフィクスプロセッサコア内で用いられる処理要素のアレイを含むスレッド実行ロジック500を図示している。本明細書のいずれかの他の図面の要素と同じ参照番号(又は名前)を有する
図5A~
図5Bの要素は、本明細書の他の箇所で説明されるものと同様の方法で動作又は機能することができるが、そのように限定されない。
図5A~
図5Bは、スレッド実行ロジック500の概要を示しており、スレッド実行ロジック500は、
図2Bの各サブコア221A~221Fで例示されるハードウェアロジックを表してよい。
図5Aは、汎用グラフィクスプロセッサ内の実行ユニットを表し、一方、
図5Bは、計算アクセラレータ内で使用され得る実行ユニットを表す。
【0105】
図5Aに図示されるように、いくつかの実施形態では、スレッド実行ロジック500は、シェーダプロセッサ502、スレッドディスパッチャ504、命令キャッシュ506、複数の実行ユニット508A~508Nを含むスケーラブル実行ユニットアレイ、サンプラ510、共有ローカルメモリ511、データキャッシュ512及びデータポート514を含む。一実施形態において、スケーラブル実行ユニットは、ワークロードの計算要件に基づいて、1つ以上の実行ユニット(例えば実行ユニット508A、508B、508C、508N-1~508Nのいずれか)を有効又は無効にすることによって、動的にスケーリングすることができる。一実施形態において、含まれる構成要素は、該構成要素の各々にリンクする相互接続ファブリックを介して相互接続される。いくつかの実施形態において、スレッド実行ロジック500は、命令キャッシュ506、データポート514、サンプラ510及び実行ユニット508A~508Bのうちの1つ以上を通して、システムメモリやキャッシュメモリのようなメモリへの1つ以上の接続を含む。いくつかの実施形態において、各実行ユニット(例えば508A)は、各スレッドに対して複数のデータ要素を並列に処理する間に、複数の同時ハードウェアスレッドを実行することができる、スタンドアロンのプログラム可能な汎用計算ユニットである。様々な実施形態において、実行ユニット508A~508Nのアレイは、任意の数の個々の実行ユニットを含むようスケーラブルである。
【0106】
いくつかの実施形態において、実行ユニット508A~508Nは主に、シェーダプログラムを実行するために使用される。シェーダプロセッサ502は、様々なシェーダプログラムを実行し、シェーダプログラムに関連付けられる実行スレッドを、スレッドディスパッチャ504を介してディスパッチすることができる。一実施形態において、スレッドディスパッチャは、グラフィクス及びメディアパイプラインからのスレッド開始要求を仲裁し、要求されたスレッドを、実行ユニット508A~508B内の1つ以上の実行スレッドにおいてインスタンス化するロジックを含む。例えばジオメトリパイプラインは、頂点、テセレーション又はジオメトリシェーダを、処理のためにスレッド実行ロジックにディスパッチすることができる。いくつかの実施形態において、スレッドディスパッチャ504は、実行しているシェーダプログラムからのランタイムスレッドスポーニング要求を処理することもできる。
【0107】
いくつかの実施形態において、実行ユニット508A~508Nは、グラフィクスライブラリ(例えばDirect 3D及びOpenGL)からのシェーダプログラムが最小限の変換で実行されるように、多くの標準3Dグラフィクスシェーダ命令のためのネイティブサポートを含む命令セットをサポートする。実行ユニットは、頂点及びジオメトリ処理(例えば頂点プログラム、ジオメトリプログラム、頂点シェーダ)、ピクセル処理(例えばピクセルシェーダ、フラグメントシェーダ)及び汎用処理(例えば計算及びメディアシェーダ)をサポートする。実行ユニット508A~508Nの各々は、マルチイシュー(multi-issue)単一命令多重データ(SIMD:single instruction multiple data)実行が可能であり、マルチスレッド化されたオペレーションは、より高いレイテンシメモリアクセスにもかかわらず、効率的な実行環境を可能にする。各実行ユニット内の各ハードウェアスレッドは、専用の高帯域幅レジスタファイル及び関連する独立のスレッド状態を有する。実行は、整数、単精度及び倍精度浮動小数点演算、SIMD分岐機能、論理オペレーション、超越オペレーション(transcendental operation)及び他の雑多なオペレーションが可能なパイプラインへのクロックごとのマルチイシューである。メモリ又は共有機能の1つからのデータを待機している間に、実行ユニット508A~508N内の依存関係ロジックは、要求されたデータが返されるまで、待機スレッドをスリープさせる。待機スレッドがスリープしている間、ハードウェアリソースは、他のスレッドの処理に充てられてよい。例えば頂点シェーダオペレーションに関連付けられるディレイの間に、実行ユニットは、ピクセルシェーダ、フラグメントシェーダ又は異なる頂点シェーダを含む別のタイプのシェーダプログラムのためのオペレーションを実行することができる。様々な実施形態は、単一命令複数スレッド(SIMT:Single Instruction Multiple Thread)の使用の代替として又はSIMDの使用に加えて、SIMTの使用による使用実行に適用することができる。また、SIMDコア又はオペレーションへの参照は、SIMTにも適用することができ、SIMTと組み合わせたSIMDに適用することもできる。
【0108】
実行ユニット508A~508N内の各実行ユニットは、データ要素のアレイに対して作用する。データ要素の数は「実行サイズ」又は命令用のチャネルの数である。実行チャネルは、データ要素アクセス、マスキング及び命令内のフロー制御のための実行の論理ユニットである。チャネルの数は、特定のグラフィクスプロセッサのための物理的な算術論理ユニット(ALU)又は浮動小数点ユニット(FPU)の数とは独立であってよい。いくつかの実施形態において、実行ユニット508A~508Nは、整数及び浮動小数点データタイプをサポートする。
【0109】
実行ユニット命令セットはSIMD命令を含む。様々なデータ要素を、パック化データタイプとしてレジスタ内に格納することができ、実行ユニットは、要素のデータサイズに基づいて様々な要素を処理することになる。例えば256ビット幅ベクトルに作用するとき、ベクトルの256ビットがレジスタ内に格納され、実行ユニットは、4つの別個の54ビットパック化データ要素(クワドワード(QW:Quad-Word)サイズデータ要素)、8つの別個の32ビットパック化データ要素(ダブルワード(DW:Double Word)サイズデータ要素)、16個の別個の16ビットパック化データ要素(ワード(W)サイズデータ要素)又は32個の別個の8ビットデータ要素(バイト(B)サイズデータ要素)としてベクトルに作用する。しかしながら、異なるベクトル幅及びレジスタサイズが可能である。
【0110】
一実施形態において、1つ以上の実行ユニットを結合して、融合EUに共通のスレッド制御ロジック(507A~507N)を有する融合実行ユニット(fused execution unit)にすることができる。複数のEUをEUグループに融合することができる。融合EUグループ内の各EUは、別個のSIMDハードウェアスレッドを実行するように構成され得る。融合EUグループ内のEUの数は、実施形態に応じて異なる可能性がある。加えて、限定ではないがSIMD8、SIMD16及びSIMD32を含む、様々なSIMD幅をEUごとに実施することができる。各融合グラフィクス実行ユニット509A~509Nは、少なくとも2つのユニットを含む。例えば融合実行ユニット509Aは、第1EU508Aと、第2EU508Bと、第1EU508A及び第2EU508Bに共通のスレッド制御ロジック507Aを含む。スレッド制御ロジック507Aは、融合グラフィクス実行ユニット509Aで実行されるスレッドを制御し、融合実行ユニット509A~509N内の各EUが、共通の命令ポインタレジスタを使用して実行することを可能にする。
【0111】
1つ以上の内部命令キャッシュ(例えば506)は、実行ユニットのためのスレッド命令をキャッシュするためにスレッド実行ロジック500に含まれる。いくつかの実施形態において、1つ以上のデータキャッシュ(例えば512)が、スレッド実行中にスレッドデータをキャッシュするために含まれる。実行ロジック500上で実行するスレッドは、管理されたデータを共有ローカルメモリ511内に明示的に格納することもできる。いくつかの実施形態において、サンプラ510が、3Dオペレーションのためテクスチャサンプリング及びメディアオペレーションのためのメディアサンプリングを提供するために含まれる。いくつかの実施形態において、サンプラ510は、特別なテクスチャ又はメディアサンプリング機能を含み、サンプリングされたデータを実行ユニットに提供する前に、サンプリングプロセス中にテクスチャ又はメディアデータを処理する。
【0112】
実行中に、グラフィクス及びメディアパイプラインは、スレッドスポーニング及びディスパッチロジックを介して、スレッド開始要求をスレッド実行ロジック500に送信する。ジオメトリックオブジェクトのグループが処理されて、ピクセルデータへラスタライズされると、シェーダプロセッサ502内のピクセルプロセッサロジック(例えばピクセルシェーダロジック、フラグメントシェーダロジック等が呼び出されて、出力情報を更に計算し、結果を出力サーフェス(output surfaces)(例えばカラーバッファ、深度バッファ、ステンシルバッファ等)に書き込ませる。いくつかの実施形態において、ピクセルシェーダ又はフラグメントシェーダは、ラスタライズされたオブジェクトにわたって補間されることになる様々な頂点属性の値を計算する。いくつかの実施形態において、シェーダプロセッサ502内のピクセルプロセッサロジックは、次いで、アプリケーションプログラミングインタフェース(API)供給ピクセル又はフラグメントシェーダプログラムを実行する。シェーダプログラムを実行するために、シェーダプロセッサ502は、スレッドディスパッチャ504を介してスレッドを実行ユニット(例えば508A)にディスパッチする。いくつかの実施形態において、シェーダプロセッサ502は、サンプラ510内のテクスチャサンプリングロジックを使用して、メモリ内に格納されたテクスチャマップのテクスチャデータにアクセスする。テクスチャデータ及び入力ジオメトリデータに対する算術演算は、各ジオメトリックフラグメントのピクセルカラーデータを計算するか、1つ以上のピクセルを更なる処理から破棄する。
【0113】
いくつかの実施形態において、データポート514は、スレッド実行ロジック500のためにメモリアクセス機構を提供し、グラフィクスプロセッサ出力パイプラインにおける更なる処理のために、処理されたデータをメモリに出力する。いくつかの実施形態において、データポート514は、1つ以上のキャッシュメモリ(例えばデータキャッシュ512)を含むかこれと結合し、データポートを介したメモリアクセスのためにデータをキャッシュする。
【0114】
一実施形態において、実行ロジック500は、レイトレーシングアクセラレーション機能を提供することができるレイトレーサ505も含むことができる。レイトレーサ505は、レイ生成のための命令/機能を含むレイトレーシング命令セットをサポートすることができる。レイトレーシング命令セットは、
図2Cのレイトレーシングコア245によってサポートされるレイトレーシング命令セットと同様とすることも、異なるものとすることもできる。
【0115】
図5Bは、実施形態による実行ユニット508の例示的な内部詳細を示している。グラフィクス実行ユニット508は、命令フェッチユニット537、一般レジスタファイルアレイ(GRF:general register file array)524、構築レジスタファイルアレイ(ARF:architectural register file array)526、スレッドアービタ522、送信ユニット530、分岐ユニット532、SIMD浮動小数点ユニット(FPU:floating point units)534及び一実施形態では、専用の整数SIMD ALU535のセットを含むことができる。GRF524及びARF526は、グラフィクス実行ユニット508内でアクティブであり得る、各同時ハードウェアスレッドに関連付けられる一般レジスタファイル及びアーキテクチャレジスタファイルのセットを含む。一実施形態において、スレッド毎の構築状態(per thread architectural state)はARF526内に維持されるが、スレッド実行中に使用されるデータはGRF524に格納される。各スレッドの命令ポインタを含む各スレッドの実行状態を、ARF526内のスレッド固有レジスタに保持することができる。
【0116】
一実施形態において、グラフィクス実行ユニット508は、同時マルチスレッディング(SMT:Simultaneous Multi-Threading)と粒度の細かいインターリーブマルチスレッディング(IMT:Interleaved Multi-Threading)の組合せであるアーキテクチャを有する。アーキテクチャは、同時スレッドの目標数及び実行ユニット当たりのレジスタの数に基づいて設計時に微調整され得るモジュラ構造を有し、この場合、実行ユニットリソースは、複数の同時スレッドを実行するために使用されるロジックにわたって分割される。グラフィクス実行ユニット508によって実行され得る論理スレッドの数は、ハードウェアスレッドの数に限定されず、複数の論理スレッドを各ハードウェアスレッドに割り当てることができる。
【0117】
一実施形態において、グラフィクス実行ユニット508は、複数の命令を共同発行(co-issue)することができる。複数の命令は各々異なる命令であってよい。グラフィクス実行ユニットスレッド508のスレッドアービタ522は、命令を、実行のために送信ユニット530、分岐ユニット532又はSIMD FPU534のうちの1つにディスパッチすることができる。各実行スレッドは、GRF528内の128個の汎用レジスタにアクセスすることができ、ここで、各レジスタは、32ビットデータ要素のSIMD8要素ベクトルとしてアクセス可能な32バイトを格納することができる。一実施形態において、各実行ユニットスレッドは、GRF524内の4Kバイトへのアクセスを有するが、実施形態はそのように限定されず、他の実施形態では、より多くの又はより少ないレジスタリソースが提供されてよい。一実施形態において、グラフィクス実行ユニット508は、計算オペレーションを独立に実行することができる7つのハードウェアスレッドに分割されるが、実行ユニット当たりのスレッドの数は、実施形態に応じて変わる可能性もある。例えば一実施形態では、最大16個のハードウェアスレッドがサポートされる。7つのスレッドが4Kバイトにアクセスし得る実施形態では、GRF524は、合計28Kバイトを格納することができる。16個のスレッドが4Kバイトにアクセスし得る場合、GRF524は合計64Kバイトを格納することができる。フレキシブルなアドレッシングモードは、レジスタを一緒にアドレス指定することを可能にし、より広いレジスタを効率的に構築するか又はストライドされた矩形のブロックデータ構造(strided rectangular block data structures)を表すことができる。
【0118】
一実施形態において、メモリオペレーション、サンプラオペレーション及び他のより長いレイテンシシステム通信は、メッセージを渡す送信ユニット(message passing send unit)530によって実行される「送信」命令を介してディスパッチされる。一実施形態において、分岐命令が専用分岐ユニット532にディスパッチされて、SIMD発散(divergence)と最終的な収束(eventual convergence)を容易にする。
【0119】
一実施形態において、グラフィクス実行ユニット508は、浮動小数点オペレーションを実行する1つ以上のSIMD浮動小数点ユニット(FPU:floating point units)534を含む。一実施形態において、FPU534は、最大M個の数の32ビット小数点(又は整数)オペレーションをSIMD実行するか、2M個までの16ビット整数又は16ビット浮動小数点オペレーションをSIMD実行することができる。一実施形態において、FPUのうちの少なくとも1つは、拡張計算機能を提供して、高スループットの超越数学関数(transcendental math functions)及び倍精度の54ビット浮動小数点をサポートする。いくつかの実施形態において、8ビット整数SIMD ALU535のセットも存在し、機械学習計算に関連付けられるオペレーションを実行するように特に最適化され得る。
【0120】
一実施形態では、グラフィクス実行ユニット508の複数のインスタンスのアレイを、グラフィクスサブコアグルーピング(例えばサブスライス)においてインスタンス化することができる。スケーラビリティのために、製品設計者は、サブコアグルーピングごとに、正確な数の実行ユニットを選択することができる。一実施形態において、実行ユニット508は、複数の実行チャネルにわたって命令を実行することができる。更なる実施形態では、グラフィクス実行ユニット508上で実行される各スレッドは、異なるチャネルで実行される。
【0121】
図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と同様に動作することができる。
【0122】
実行ユニット600は、複数の異なるタイプの機能ユニットを含む計算ユニット610も含む。一実施形態において、計算ユニット610は、算術論理ユニットのアレイを含むALUユニット611を含む。ALUユニット611は、64ビット、32ビット及び16ビットの整数及び浮動小数点演算を実行するように構成され得る。整数及び浮動小数点演算は同時に実行されてよい。計算ユニット610は、シストリックアレイ612及び数学ユニット613も含むことができる。シストリックアレイ612は、ベクトル又は他のデータ並列演算をシストリック方法(systolic manner)で実行するために使用することができるデータ処理ユニットのW幅及びD深度ネットワークを含む。一実施形態において、シストリックアレイ612は、行列ドット積演算のような行列演算を実行するように構成され得る。一実施形態において、シストリックアレイ612は、16ビット浮動小数点演算、並びに8ビット及び4ビット整数演算をサポートする。一実施形態において、シストリックアレイ612は、機械学習演算を加速するように構成され得る。そのような実施形態では、シストリックアレイ612は、bfloat16ビット浮動小数点フォーマットをサポートするよう構成され得る。一実施形態において、数学ユニット613は、数学演算の特定のサブセットをALUユニット611よりも効率的で低電力な方法で実行するために含まれ得る。数学ユニット613は、他の実施形態によって提供されるグラフィクス処理エンジンの共有機能ロジック(例えば
図4の共有機能ロジック420の数学ロジック422)においてみられ得る数学ロジックの変形を含むことができる。一実施形態において、数学ユニット613は、32ビット及び64ビット浮動小数点演算を実行するように構成され得る。
【0123】
スレッド制御ユニット601は、実行ユニット内のスレッドの実行を制御するロジックを含む。スレッド制御ユニット601は、実行ユニット600内のスレッドの実行を開始、停止及びプリエンプト(preempt)するスレッド仲裁ロジックを含むことができる。スレッド状態ユニット602を使用して、実行ユニット600上で実行するよう割り当てられるスレッドについてスレッド状態を格納することができる。実行ユニット600内にスレッド状態を格納することは、スレッドがブロックされる又はアイドル状態になったときに、それらのスレッドの迅速なプリエンプションを可能にする。命令フェッチ/プリフェッチユニット603は、より高レベルの実行ロジックの命令キャッシュ(例えば
図5Aにおける命令キャッシュ506)からの命令をキャッシュすることができる。命令フェッチ/プリフェッチユニット603は、現在実行中のスレッドの分析に基づいて命令キャッシュにロードされる命令についてプリフェッチ要求を発行することもできる。命令デコードユニット604を使用して、計算ユニットによって実行されるべき命令を復号することができる。一実施形態において、命令デコードユニット604を、複雑な命令を構成マイクロオペレーション(constituent micro-operations)へ復号する二次デコーダとして使用することができる。
【0124】
実行ユニット600は、該実行ユニット600上で実行するハードウェアスレッドによって使用され得るレジスタファイル606を更に含む。レジスタファイル606内のレジスタは、実行ユニット600の計算ユニット610内の複数の同時スレッドを実行するために使用されるロジックにわたって分割され得る。グラフィクス実行ユニット600によって実行され得る論理スレッドの数は、ハードウェアスレッドの数に限定されず、複数の論理スレッドを各ハードウェアスレッドに割り当てることができる。レジスタファイル606のサイズは、サポートされるハードウェアスレッドの数に基づいて実施形態にわたって異なる可能性がある。一実施形態において、レジスタリネームを使用して、レジスタをハードウェアスレッドに動的に割り当ててよい。
【0125】
図7は、いくつかの実施形態による、グラフィクスプロセッサ命令フォーマット700を図示するブロック図である。1つ以上の実施形態において、グラフィクスプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線のボックスは、実行ユニット命令に一般的に含まれる構成要素を図示し、一方、点線は、オプションであるか又は命令のサブセットのみに含まれる構成要素を含む。いくつかの実施形態において、説明及び図示される命令フォーマット700は、命令が処理された後に命令デコードから得られるマイクロオペレーションとは対照的に、それらが実行ユニットに供給される命令であるという点で、マイクロ命令である。
【0126】
いくつかの実施形態において、グラフィクスプロセッサ実行ユニットは、128ビット命令フォーマット710の命令をネイティブにサポートする。64ビット圧縮命令フォーマット730は、選択された命令、命令オプション及びオペランドの数に基づいていくつかの命令に利用可能である。ネイティブの128ビット命令フォーマット710は、すべての命令オプションへのアクセスを提供するが、64ビットフォーマット730では、いくつかのオプション及びオペレーションが制限される。64ビットフォーマット730で利用可能なネイティブ命令は、実施形態によって異なる。いくつかの実施形態において、命令は、インデックスフィールド713内のインデックス値のセットを使用して部分的に圧縮される。実行ユニットハードウェアは、インデックス値に基づいて圧縮テーブルのセットを参照し、圧縮テーブルの出力を使用して、128ビット命令フォーマット710のネイティブ命令を再構築する。命令の他のサイズ及びフォーマットを使用することができる。
【0127】
各フォーマットについて、命令オペコード712は、実行ユニットが実行すべきオペレーションを定義する。実行ユニットは、各オペランドの複数のデータ要素にわたって、各命令を並列に実行する。例えば追加命令に応答して、実行ユニットは、テクスチャ要素又はピクチャ要素を表している各色チャネルにわたって、同時追加オペレーションを実行する。デフォルトで、実行ユニットは、オペランドのすべてのデータチャネルにわたって各命令を実行する。いくつかの実施形態において、命令制御フィールド714は、チャネル選択(例えばプレディケーション(predication))及びデータチャネル順(例えばスウィズル(swizzle))のような特定の実行オプションに対する制御を可能にする。128ビット命令フォーマット710の命令について、実行サイズフィールド(exec-size field)716は、並列に実行されることになるデータチャネルの数を制限する。いくつかの実施形態において、実行サイズフィールド716は、64ビット圧縮命令フォーマット730における使用には利用可能でない。
【0128】
いくつかの実行ユニット命令は、2つのソースオペランド、src0 720、src1 722と、1つの宛先(destination)718とを含む、最大3つのオペランドを有する。いくつかの実施形態において、実行ユニットは二重宛先命令をサポートし、この場合、宛先のうちの1つが暗示される。データ操作命令は、第3ソースオペランド(例えばSRC2 724)を有することができ、この場合、命令オペコード712がソースオペランドの数を決定する。命令の最後のソースオペランドは、命令とともに渡されるイミディエート(例えばハードコードされた)値とすることができる。
【0129】
いくつかの実施形態において、128ビット命令フォーマット710は、例えば直接レジスタアドレッシングモードが使用されるか又は間接レジスタアドレッシングモードが使用されるかを指定するアクセス/アドレスモードフィールド726を含む。直接レジスタアドレッシングモードが使用されるとき、1つ以上のオペランドのレジスタアドレスは、命令内のビットによって直接的に提供される。
【0130】
いくつかの実施形態において、128ビット命令フォーマット710は、命令についてアドレスモード及び/又はアクセスモードを指定する、アクセス/アドレスモードフィールド726を含む。一実施形態において、アクセスモードは、命令についてデータアクセスアライメント(data access alignment)を定義するために使用される。いくつかの実施形態は、16バイトアライン・アクセスモード及び1バイトアライン・アクセスモードを含むアクセスモードをサポートし、この場合、アクセスモードのバイトアライメントは、命令オペランドのアクセスアライメントを決定する。例えば第1モードのとき、命令は、ソース及び宛先オペランドに対してバイトアライン・アドレッシングを使用してよく、第2モードのとき、命令は、すべてのソース及び宛先オペランドに対して16バイトアライン・アドレッシングを使用してよい。
【0131】
一実施形態において、アクセス/アドレスモードフィールド726のアドレスモード部分は、命令が直接アドレッシングを使用するか間接アドレッシングを使用するかを決定する。直接レジスタアドレッシングモードが使用されるとき、命令内のビットは、1つ以上のオペランドのレジスタアドレスを直接提供する。間接レジスタアドレッシングモードが使用されるとき、1つ以上のオペランドのレジスタアドレスは、アドレスレジスタ値及び命令内のアドレスイミディエートフィールドに基づいて計算され得る。
【0132】
いくつかの実施形態において、命令は、オペコードデコード740を簡略化するために、オペコード712ビットフィールドに基づいてグループ化される。8ビットオペコードについて、ビット4、5及び6は、実行ユニットがオペコードのタイプを決定することを可能にする。図示される正確なオペコードグループ化は単なる例である。いくつかの実施形態において、移動及び論理オペコードグループ742は、データ移動及び論理命令(例えば移動(mov)、比較(cmp))を含む。いくつかの実施形態において、移動及び論理グループ742は、5つの最上位ビット(MSB:most significant bit)を共有し、この場合、移動(mov)命令は0000xxxxbの形式であり、論理命令は0001xxxxbの形式である。流れ制御命令グループ744(例えばコール、ジャンプ(jmp))は、0010xxxxbの形式(例えば0x20)の命令である。雑多(miscellaneous)命令グループ746は、0011xxxxbの形式(例えば0x30)の同期命令(例えば待機、送信)を含む、命令の混合を含む。並列数学命令グループ748は、0100xxxxbの形式(例えば0x40)の構成要素に関する算術命令(component-wise arithmetic instructions)(例えば加算、乗算(mul))を含む。並列数学グループ748は、データチャネルにわたって並列に算術演算を実行する。ベクトル数学グループ750は、0101xxxxbの形式(例えば0x50)の算術命令(例えばdp4)を含む。ベクトル数学グループは、ベクトルオペランドに対するドット積計算のような算術を実行する。一実施形態において、図示されるオペコードデコード740を使用して、復号された命令を実行するために、実行ユニットのどの部分が使用されるかを決定することができる。例えばいくつかの命令は、シストリックアレイによって実行されることになるシストリック命令として設計されてよい。レイトレーシング命令(図示せず)のような他の命令を、実行ロジックのスライス又は部分内のレイトレーシングコア又はレイトレーシングロジックにルーティングすることができる。
【0133】
グラフィクスパイプライン
図8は、グラフィクスプロセッサ800の別の実施形態のブロック図である。本明細書におけるいずれかの他の図面の要素と同じ参照番号(又は名前)を有する
図8の要素は、本明細書の他の箇所で説明されるものと同様の方法で動作又は機能することができるが、そのように限定されない。
【0134】
いくつかの実施形態において、グラフィクスプロセッサ800は、ジオメトリパイプライン820、メディアパイプライン830、ディスプレイエンジン840、スレッド実行ロジック850及びレンダ出力パイプライン870を含む。いくつかの実施形態において、グラフィクスプロセッサ800は、1つ以上の汎用処理コアを含むマルチコア処理システム内のグラフィクスプロセッサである。グラフィクスプロセッサは、1つ以上の制御レジスタ(図示せず)へのレジスタ書き込みによって、あるいはリング相互接続802を介してグラフィクスプロセッサ800に発行されるコマンドを介して制御される。いくつかの実施形態において、リング相互接続802は、グラフィクスプロセッサ800を、他のグラフィクスプロセッサや汎用プロセッサのような他の処理構成要素に結合する。リング相互接続802からのコマンドは、コマンドストリーマ803によって解釈される。コマンドストリーマ803は、命令を、ジオメトリパイプライン820又はメディアパイプライン830の個々の構成要素に供給する。
【0135】
いくつかの実施形態において、コマンドストリーマ803は、メモリから頂点データを読み出し、コマンドストリーマ803によって提供される頂点処理コマンドを実行する、頂点フェッチャ805のオペレーションを指示する。いくつかの実施形態において、頂点フェッチャ807は、頂点データを頂点シェーダ807に提供し、該頂点シェーダ807は、各頂点に対して座標空間変換及びライティングオペレーションを実行する。いくつかの実施形態において、頂点フェッチャ805及び頂点シェーダ807は、スレッドディスパッチャ831を介して実行スレッドを実行ユニット852A~852Bにディスパッチすることによって、頂点処理命令を実行する。
【0136】
いくつかの実施形態において、実行ユニット852A~852Bは、グラフィクス及びメディアオペレーションを実行するための命令セットを有するベクトルプロセッサのアレイである。いくつかの実施形態において、実行ユニット852A~852Bは、各アレイに固有であるかアレイ間で共有される、付属のL1キャッシュ851を有する。キャッシュは、データキャッシュ、命令キャッシュ又はデータ及び命令を異なる区分に含むように区分される単一キャッシュとして構成され得る。
【0137】
いくつかの実施形態において、ジオメトリパイプライン820は、3Dオブジェクトのハードウェア加速化テセレーションを実行するテセレーション構成要素を含む。いくつかの実施形態において、プログラム可能なハルシェーダ(hull shader)811は、テセレーションオペレーションを構成する。プログラム可能なドメインシェーダ817は、テセレーション出力のバックエンド評価を提供する。テセレータ(tessellator)813は、ハルシェーダ811の方向で動作し、ジオメトリパイプライン820に入力として提供される粗いジオメトリックモデルに基づいて、詳細なジオメトリックオブジェクトのセットを生成する特別な目的のロジックを含む。いくつかの実施形態において、テセレーションが使用されない場合、テセレーション構成要素(例えばハルシェーダ811、テセレータ813及びドメインシェーダ817)をバイパスすることができる。
【0138】
いくつかの実施形態において、完全なジオメトリックオブジェクトは、1つ以上のスレッドジオメトリシェーダ819によって、実行ユニット852A~852Bにディスパッチされた1つ以上のスレッドを介して実行され得、あるいはクリッパー829へ直接処理することができる。いくつかの実施形態において、ジオメトリシェーダは、グラフィクスパイプラインの以前の段階のように頂点又は頂点のパッチではなく、ジオメトリオブジェクト全体に作用する。テセレーションが無効にされる場合、ジオメトリシェーダ819は、頂点シェーダ807から入力を受け取る。いくつかの実施形態において、ジオメトリシェーダ819は、ジオメトリシェーダプログラムによって、テセレーションユニットが無効にされる場合にジオメトリテセレーションを実行するようにプログラム可能である。
【0139】
ラスタライゼーションの前に、クリッパー829は頂点データを処理する。クリッパー829は、クリッピング及びジオメトリシェーダ機能を有する固定機能クリッパー又はプログラム可能クリッパーであってよい。いくつかの実施形態において、レンダ出力パイプライン870内のラスタライザ及び深度テスト構成要素873は、ピクセルシェーダをディスパッチして、ジオメトリックオブジェクトをピクセルごとの表現(per pixel representations)に変換する。いくつかの実施形態において、ピクセルシェーダロジックは、スレッド実行ロジック850内に含まれる。いくつかの実施形態において、アプリケーションは、ラスタライザ及び深度テスト構成要素873をバイパスして、ストリームアウトユニット823を介して非ラスタライズ頂点データにアクセスすることができる。
【0140】
グラフィクスプロセッサ800は、相互接続バス、相互接続ファブリック又はプロセッサの主な構成要素の間でデータ及びメッセージの通過を可能にする何らかの他の相互接続機構を有する。いくつかの実施形態において、実行ユニット852A~852B及び関連する論理ユニット(例えばL1キャッシュ851、サンプラ854、テクスチャキャッシュ858等)は、データポート856を介して相互接続し、メモリアクセスを実行して、プロセッサのレンダ出力パイプライン構成要素と通信する。いくつかの実施形態において、サンプラ854、キャッシュ851、858及び実行ユニット852A~852Bは各々、別個のメモリアクセス経路を有する。一実施形態では、テクスチャキャッシュ858をサンプラキャッシュとして構成することもできる。
【0141】
いくつかの実施形態において、レンダ出力パイプライン870は、ラスタライザ及び深度テスト構成要素873を含む。ラスタライザ及び深度テスト構成要素873は、頂点ベースのオブジェクトを、関連するピクセルベースの表現に変換する。いくつかの実施形態において、ラスタライザロジックは、固定機能三角形及び線ラスタライゼーションを実行するwindower/maskerユニットを含む。いくつかの実施形態では、関連するレンダキャッシュ878及び深度キャッシュ879も利用可能である。ピクセルオペレーション構成要素877は、データに対してピクセルベースオペレーションを実行するが、いくつかの例では、2Dオペレーションに関連付けられるピクセルオペレーション(例えばブレンディングを伴うビットブロック画像転送)は2Dエンジン841によって実行されるか、オーバーレイディスプレイ面を使用してディスプレイコントローラ843によって表示時に代替される。いくつかの実施形態において、共有L3キャッシュ875は、すべてのグラフィクス構成要素に利用可能であり、メインシステムメモリを使用することなく、データの共有を可能にする。
【0142】
いくつかの実施形態において、グラフィクスプロセッサメディアパイプライン830は、メディアエンジン837及びビデオフロントエンド834を含む。いくつかの実施形態において、ビデオフロントエンド834は、コマンドストリーマ803からパイプラインコマンドを受け取る。いくつかの実施形態において、メディアパイプライン830は、別個のコマンドストリーマを含む。いくつかの実施形態において、ビデオフロントエンド834は、コマンドをメディアエンジン837に送信する前にメディアコマンドを処理する。いくつかの実施形態において、メディアエンジン837は、スレッドディスパッチャ831を介してスレッド実行ロジック850にディスパッチするためのスレッドを生成するスレッドスポーニング機能を含む。
【0143】
いくつかの実施形態において、グラフィクスプロセッサ800はディスプレイエンジン840を含む。いくつかの実施形態において、ディスプレイエンジン840は、プロセッサ800の外部にあり、リング相互接続802又は何らかの他の相互接続バスやファブリックを介して、グラフィクスプロセッサと結合する。いくつかの実施形態において、ディスプレイエンジン840は、2Dエンジン841及びディスプレイコントローラ843を含む。いくつかの実施形態において、ディスプレイエンジン840は、3Dパイプラインとは独立に動作することができる特別な目的のロジックを含む。いくつかの実施形態において、ディスプレイコントローラ843は、ディスプレイデバイス(図示せず)と結合する。ディスプレイデバイスは、ラップトップコンピュータ内にあるようなシステム一体型ディスプレイデバイスであるか、ディスプレイデバイスコネクタを介して取り付けられる外部ディスプレイデバイスであってよい。
【0144】
いくつかの実施形態において、ジオメトリパイプライン820及びメディアパイプライン830は、複数のグラフィクス及びメディアプログラミングインタフェースに基づいてオペレーションを実行するように構成可能であり、いずれか1つのアプリケーションプログラミングインタフェース(API)に固有ではない。いくつかの実施形態において、グラフィクスプロセッサのためのドライバソフトウェアは、特定のグラフィクス又はメディアライブラリに固有のAPIコールを、グラフィクスプロセッサによって処理され得るコマンドに変換する。いくつかの実施形態では、すべてKhronosグループからのものであるが、オープングラフィクスライブラリ(OpenGL)、オープンコンピューティング言語(OpenCL)、Vulkanグラフィクス及び計算APIのためのサポートを提供する。いくつかの実施形態では、Microsoft(登録商標)社からのDirect3Dライブラリのためのサポートも提供されてよい。いくつかの実施形態では、これらのライブラリの組合せがサポートされ得る。オープンソースコンピュータビジョンライブラリ(OpenCV)のためのサポートも提供され得る。将来のAPIのパイプラインからグラフィクスプロセッサのパイプラインへのマッピングを作成することができる場合、互換性のある3Dパイプラインを有する将来のAPIもサポートされるであろう。
【0145】
グラフィクスパイプラインプログラミング
図9Aは、いくつかの実施形態による、グラフィクスプロセッサコマンドフォーマット900を例示するブロック図である。
図9Bは、一実施形態による、グラフィクスプロセッサコマンドシーケンス910を例示するブロック図である。
図9Aの実線のボックスは、グラフィクスコマンドに一般的に含まれる構成要素を示しており、一方、破線は、オプションであるか、グラフィクスコマンドのサブセット内にのみ含まれる構成要素を含む。
図9Aの例示のグラフィクスプロセッサコマンドフォーマット900は、クライアント902、コマンドオペレーションコード(オペコード)904及びコマンド用のデータ906を識別するデータフィールドを含む。いくつかのコマンドでは、サブオペコード905及びコマンドサイズ908も含まれる。
【0146】
いくつかの実施形態において、クライアント902は、コマンドデータを処理する、グラフィクスデバイスのクライアントユニットを指定する。いくつかの実施形態において、グラフィクスプロセッサコマンドパーサは、各コマンドのクライアントフィールドを調べて、コマンドの更なる処理に条件を設定し、コマンドデータを適切なクライアントユニットにルーティングする。いくつかの実施形態において、グラフィクスプロセッサクライアントユニットは、メモリインタフェースユニット、レンダユニット、2Dユニット、3Dユニット及びメディアユニットを含む。各クライアントユニットは、コマンドを処理する、対応する処理パイプラインを有する。コマンドがクライアントユニットによって受け取られると、クライアントユニットは、オペコード904と、存在する場合にはサブオペコード905を読み出し、実行すべきオペレーションを決定する。クライアントユニットは、データフィールド906内の情報を使用してコマンドを実行する。いくつかのコマンドについて、コマンドのサイズを指定するよう明示的なコマンドサイズ908が予期される。いくつかの実施形態において、コマンドパーサは、コマンドオペコードに基づいて、コマンドのうちの少なくともいくつかのサイズを自動的に決定する。いくつかの実施形態において、コマンドは、ダブルワードの倍数(multiples)を介して整列される。他のコマンドフォーマットを使用することもできる。
【0147】
図9Bのフロー図は、例示のグラフィクスプロセッサコマンドシーケンス910を例示している。いくつかの実施形態において、グラフィクスプロセッサの実施形態を特徴付けるデータ処理システムのソフトウェア又はファームウェアは、図示されるコマンドシーケンスの一バージョンを使用して、グラフィクスオペレーションのセットを設定、実行及び終了する。実施形態は、これらの特定のコマンド又はこのコマンドシーケンスに限定されないので、サンプルのコマンドシーケンスは単に例示の目的で図示され、説明される。さらに、コマンドは、グラフィクスプロセッサがコマンドのシーケンスを少なくとも部分的に同時に処理することになるよう、コマンドシーケンス内のコマンドのバッチとして発行され得る。
【0148】
いくつかの実施形態において、グラフィクスプロセッサコマンドシーケンス910は、パイプラインフラッシュコマンド912で開始して、いずれかのアクティブなグラフィクスパイプラインに、パイプライン用の現在保留中のコマンドを完了させてよい。いくつかの実施形態において、3Dパイプライン922及びメディアパイプライン924は同時に動作しない。パイプラインフラッシュは、アクティブなグラフィクスパイプラインに、いずれかの保留中のコマンドを完了させるために実行される。パイプラインフラッシュに応答して、グラフィクスプロセッサのためのコマンドパーサは、アクティブな描画エンジンが保留中のオペレーションを完了し、関連する読出しキャッシュが無効にされるまで、コマンド処理を中断することになる。任意に、レンダキャッシュ内の「汚れている(dirty)」とマークされたいずれかのデータを、メモリにフラッシュすることができる。いくつかの実施形態では、パイプラインフラッシュコマンド912を、パイプライン同期化のために又はグラフィクスプロセッサを低電力状態に置く前に使用することができる。
【0149】
いくつかの実施形態において、パイプライン選択コマンド913は、コマンドシーケンスが、パイプライン間を明示的に切り替えるためにグラフィクスプロセッサを必要とするときに使用される。いくつかの実施形態において、パイプライン選択コマンド913は、コンテキストが、両方のパイプラインにコマンドを発行しない限り、パイプラインコマンドを発行する前に、実行コンテキスト内で1度のみ必要とされる。いくつかの実施形態において、パイプラインフラッシュコマンド912は、パイプライン選択コマンド913を介してパイプラインが切り替わる直前に必要とされる。
【0150】
いくつかの実施形態において、パイプライン制御コマンド914は、オペレーションのためにグラフィクスパイプラインを構成し、3Dパイプライン922及びメディアパイプライン924をプログラムするために使用される。いくつかの実施形態において、パイプライン制御コマンド914は、アクティブなパイプラインのためにパイプライン状態を構成する。一実施形態において、パイプライン制御コマンド914は、パイプライン同期化のために、そしてコマンドのバッチを処理する前にアクティブなパイプライン内の1つ以上のキャッシュメモリからデータをクリアするために使用される。
【0151】
いくつかの実施形態では、リターンバッファ状態コマンド916を使用して、それぞれのパイプラインがデータを書き込むようリターンバッファのセットを構成する。いくつかのパイプラインオペレーションは、該オペレーションが処理中に中間データを書き込む1つ以上のリターンバッファの割り当て、選択又は構成を必要とする。いくつかの実施形態において、グラフィクスプロセッサはまた、1つ以上のリターンバッファを使用して、出力データを格納し、クロススレッド通信を実行する。いくつかの実施形態において、リターンバッファ状態916は、パイプラインオペレーションのセットのために使用すべきリターンバッファのサイズ及び数を選択することを含む。
【0152】
コマンドシーケンス内の残りのコマンドは、オペレーションのためのアクティブなパイプラインに基づいて異なる。パイプライン決定920に基づいて、コマンドシーケンスは、3Dパイプライン状態930で始まる3Dパイプライン922又はメディアパイプライン状態940で始まるメディアパイプライン924に対して調整される。
【0153】
3Dパイプライン状態930を構成するコマンドは、頂点バッファ状態、頂点要素状態、一定色状態、深度バッファ状態及び3Dプリミティブコマンドが処理される前に構成されるべき他の状態変数のための3D状態設定コマンドを含む。これらのコマンドの値は、少なくとも部分的に、使用時に特定の3D APIに基づいて決定される。いくつかの実施形態において、3Dパイプライン状態930コマンドは、特定のパイプライン要素が使用されない場合にはそれらの要素を選択的に無効に又はバイパスすることもできる。
【0154】
いくつかの実施形態において、3Dプリミティブ932コマンドを使用して、3Dパイプラインによって処理されるべき3Dプリミティブを提示する。3Dプリミティブ932コマンドを介してグラフィクスプロセッサに渡される、コマンド及び関連するパラメータは、グラフィクスパイプラインの頂点フェッチ機能に転送される。頂点フェッチ機能は、3Dプリミティブ932コマンドデータを使用して頂点データ構造を生成する。頂点データ構造は、1つ以上のリターンバッファに格納される。いくつかの実施形態において、3Dプリミティブ932コマンドを使用して、頂点シェーダを介して3Dプリミティブに対する頂点オペレーションを実行する。頂点シェーダを処理するために、3Dパイプライン922は、シェーダ実行スレッドをグラフィクスプロセッサ実行ユニットにディスパッチする。
【0155】
いくつかの実施形態において、3Dパイプライン922は、実行934コマンド又はイベントを介してトリガされる。いくつかの実施形態において、レジスタ書き込みは、コマンド実行をトリガする。いくつかの実施形態において、実行は、コマンドシーケンス内の「go」又は「kick」コマンドを介してトリガされる。一実施形態において、コマンド実行は、パイプライン同期コマンドを使用してトリガされ、グラフィクスパイプラインを通してコマンドシーケンスをフラッシュする。3Dパイプラインは、3Dプリミティブのためにジオメトリ処理を実行することになる。オペレーションが完了すると、結果として得られるジオメトリックオブジェクトがラスタライズされ、ピクセルエンジンが、結果として得られるピクセルに色付けをする。ピクセルシェーディング及びピクセルバックエンドオペレーションを制御する追加のコマンドも、これらのオペレーションのために含まれてよい。
【0156】
いくつかの実施形態において、グラフィクスプロセッサコマンドシーケンス910は、メディアオペレーションを実行するとき、メディアパイプライン924経路に従う。一般に、メディアパイプライン924のためのプログラミングの具体的な使用及び方法は、実行されるメディア又は計算オペレーションに依存する。具体的なメディア復号オペレーションは、メディア復号中、メディアパイプラインにオフロードされ得る。いくつかの実施形態において、メディアパイプラインをバイパスすることもでき、1つ以上の汎用処理コアによって提供されるリソースを全体又は部分的に使用してメディア復号を実行することができる。一実施形態において、メディアパイプラインは、汎用グラフィクスプロセッサユニット(GPGPU)オペレーションのための要素も含み、この場合、グラフィクスプロセッサは、グラフィクスプリミティブのレンダリングに明示的に関連しない計算シェーダプログラムを使用してSIMDベクトルオペレーションを実行するために使用される。
【0157】
いくつかの実施形態において、メディアパイプライン924は、3Dパイプライン922と同様の方法で構成される。メディアパイプライン状態940を構成するコマンドのセットは、メディアオブジェクト942の前にコマンドキューにディスパッチされるか、その中に配置される。いくつかの実施形態において、メディアパイプライン状態940のコマンドは、メディアオブジェクトを処理するために使用されることになるメディアパイプライン要素を構成するデータを含む。これは、符号化又は復号フォーマットのように、メディアパイプライン内でビデオ復号及びビデオ符号化ロジックを構成するデータを含む。いくつかの実施形態において、メディアパイプライン状態940のためのコマンドは、状態設定のバッチを含む「間接」状態要素への1つ以上のポインタの使用もサポートする。
【0158】
いくつかの実施形態において、メディアオブジェクトコマンド942は、メディアパイプラインによって処理するためのメディアオブジェクトにポインタを供給する。メディアオブジェクトは、処理されるべきビデオデータを含むメモリバッファを含む。いくつかの実施形態において、メディアオブジェクトコマンド942を発行する前に、すべてのメディアパイプライン状態が有効でなければならない。パイプライン状態が構成され、メディアオブジェクトコマンド942がキューに入れられると、メディアパイプライン924は、実行コマンド944又は同等の実行イベント(例えばレジスタ書き込み)を介してトリガされる。メディアパイプライン924からの出力は、次いで、3Dパイプライン922又はメディアパイプライン924によって提供されたオペレーションによって自己処理され得る。いくつかの実施形態において、GPGPUオペレーションは、メディアオペレーションと同様の方法で構成されて、実行される。
【0159】
グラフィクスソフトウェアアーキテクチャ
図10は、いくつかの実施形態による、データ処理システム1000の例示のグラフィクスソフトウェアアーキテクチャを図示している。いくつかの実施形態において、ソフトウェアアーキテクチャは、3Dグラフィクスアプリケーション1010、オペレーティングシステム1020及び少なくとも1つのプロセッサ1030を含む。いくつかの実施形態では、プロセッサ1030は、グラフィクスプロセッサ1032及び1つ以上の汎用プロセッサコア1034を含む。グラフィクスアプリケーション1010及びオペレーティングシステム1020は各々、データ処理システムのシステムメモリ1050内で実行する。
【0160】
いくつかの実施形態では、3Dグラフィクスアプリケーション1010は、シェーダ命令1012を含む1つ以上のシェーダプログラムを含む。シェーダ言語命令は、Direct3Dの高レベルシェーダ言語(HLSL)、OpenGL シェーダ言語(GLSL)等のような高レベルのシェーダ言語であり得る。アプリケーションは、汎用プロセッサコア1034による実行に適した機械言語の実行可能命令1014も含む。アプリケーションは、頂点データによって定義されるグラフィクスオブジェクト1016も含む。
【0161】
いくつかの実施形態において、オペレーティングシステム1020は、Microsoft(登録商標)社からのMicrosoft(登録商標)Windows(登録商標)オペレーティングシステム、独占的なUNIX(登録商標)のようなオペレーティングシステム又はLinux(登録商標)カーネルの変形を使用するオープンソースのUNIXのようなオペレーティングシステムである。オペレーティングシステム1020は、Direct3D API、OpenGL API、Vulkan APIのようなグラフィクスAPI1022をサポートすることができる。Direct3D APIが使用中のとき、オペレーティングシステム1020は、フロントエンドシェーダコンパイラ1024を使用して、HLSL内のいずれかのシェーダ命令1012をより低レベルのシェーダ言語にコンパイルする。コンパイルは、ジャストインタイム(JIT)コンパイルであってよく、あるいはアプリケーションは、シェーダプリコンパイルを実行することができる。いくつかの実施形態では、3Dグラフィクスアプリケーション1010のコンパイル中に、高レベルシェーダが低レベルシェーダにコンパイルされる。いくつかの実施形態では、シェーダ命令1012は、Vulkan APIによって使用される標準ポータブル中間表現(SPIR:Standard Portable Intermediate Representation)のバージョンのような、中間フォームで提供される。
【0162】
いくつかの実施形態において、ユーザモードグラフィクスドライバ1026は、シェーダ命令1012をハードウェア特有表現に変換するバックエンドシェーダコンパイラ1027を含む。OpenGL APIが使用中のとき、GLSL高レベル言語のシェーダ命令1012は、コンパイルのためにユーザモードグラフィクスドライバ1026に渡される。いくつかの実施形態において、ユーザモードグラフィクスドライバ1026は、オペレーティングシステムカーネルモード機能1028を使用して、カーネルモードグラフィクスドライバ1029と通信する。いくつかの実施形態において、カーネルモードグラフィクスドライバ1029は、グラフィクスプロセッサ1032と通信して、コマンド及び命令をディスパッチする。
【0163】
IPコア実装
少なくとも一実施形態の1つ以上の態様は、プロセッサのような集積回路内でロジックを表現及び/又は定義する機械読取可能媒体に格納される代表コードによって実装され得る。例えば機械読取可能媒体は、プロセッサ内の様々なロジックを表す命令を含んでよい。機械によって読み取られると、命令は、その機械に、本明細書で説明される技術を実行するようロジックを作らせ得る。「IPコア」として知られるそのような表現は、集積回路の構造を記述するハードウェアモデルとして有形の機械読取可能媒体上に格納され得る、集積回路のためのロジックの再使用可能なユニットである。ハードウェアモデルは、集積回路を製造する製造機械にハードウェアモデルをロードする、様々な顧客又は製造設備に供給され得る。集積回路は、該回路が、本明細書で説明される実施形態のいずれかに関連して説明されるオペレーションを実行するように製造されてよい。
【0164】
図11Aは、一実施形態による、オペレーションを実行する集積回路を製造するために使用され得るIPコア開発システム1100を例示するブロック図である。IPコア開発システム1100を使用してモジュラ式の再使用可能設計を生成してよく、そのようなモジュラ式の再使用可能設計を、より大きな設計に組み込むか、集積回路全体(例えばSOC集積回路)を構築するために使用することができる。設計設備1130は、高レベルプログラミング言語(例えばC/C++)でIOコア設計のソフトウェアシミュレーション1110を生成することができる。ソフトウェアシミュレーション1110を使用して、シミュレーションモデル1112を用いてIPコアの挙動を設計、テスト及び検証することができる。シミュレーションモデル1112は、機能、挙動及び/又はタイミングシミュレーションを含んでよい。次いで、レジスタ転送レベル(RTL:register transfer level)設計1115を、シミュレーションモデル1112から作成又は同期化することができる。RTL設計1115は、モデル化されたデジタル信号を使用して実行される関連ロジックを含む、ハードウェアレジスタ間のデジタル信号の流れをモデル化する集積回路の挙動の抽象化である。RTL設計1115に加えて、ロジックレベル又はトランジスタロジックにおける低レベルの設計が作成、設計又は同期されてもよい。したがって、最初の設計及びシミュレーションの特定の詳細は異なっていてよい。
【0165】
RTL設計1115及び均等物は更に、設計設備によってハードウェアモデル1120に統合されてよく、そのようなハードウェアモデル1120は、ハードウェア記述言語(HDL:hardware description language)又は物理設計データの何らかの他の表現のものであってよい。HDLは更に、IPコア設計を評価するために、シミュレート又はテストされ得る。IPコア設計は、第三者製造設備1165への配送のために、不揮発性メモリ1140(例えばハードディスク、フラッシュメモリ又は任意の不揮発性記憶媒体)を使用して格納され得る。あるいは、IPコア設計は、有線接続1150又は無線接続1160上で(例えばインターネットを介して)伝送されてよい。製造設備1165は、次いで、IPコア設計に少なくとも部分的に基づいて集積回路を製造し得る。製造された集積回路は、本明細書で説明される少なくとも1つの実施形態に従ってオペレーションを実行するように構成され得る。
【0166】
図11Bは、本明細書で説明されるいくつかの実施形態による、集積回路パッケージアセンブリ1170の側断面図を示している。集積回路パッケージアセンブリ1170は、本明細書で説明される1つ以上のプロセッサ又はアクセラレータデバイスの実装を図示している。パッケージアセンブリ1170は、基板1180に接続されるハードウェアロジック1172、1174の複数のユニットを含む。ロジック1172、1174は、少なくとも部分的に、構成可能ロジック又は固定機能ロジックハードウェアで実装されてよく、プロセッサコア、グラフィクスプロセッサ又は本明細書で説明される他のアクセラレータデバイスのうちのいずれかの1つ以上の部分を含むことができる。ロジック1172、1174の各ユニットを、半導体ダイ内で実装することができ、相互接続構造1173を介して基板1180と結合することができる。相互接続構造1173は、電気信号をロジック1172、1174及び基板1180の間でルーティングするように構成されてよく、これらに限定されないが、ダンプやピラーといった相互接続を含むことができる。いくつかの実施形態において、相互接続構造1173は、例えば入力/出力(I/O)信号及び/又はロジック1172、1174のオペレーションに関連付けられる電力又は接地信号といった電気信号をルーティングするように構成され得る。いくつかの実施形態において、基板1180はエポキシベースのラミネート基板である。基板1180は、他の実施形態において、他の適切なタイプの基板を含んでよい。パッケージアセンブリ1170は、パッケージ相互接続1183を介して他の電気デバイスに接続され得る。パッケージ相互接続1183は、基板1180の表面に結合されて、電気信号を、マザーボードや他のチップセット又はマルチチップモジュールのような他の電気デバイスにルーティングしてよい。
【0167】
いくつかの実施形態において、ロジック1172、1174のユニットは、ロジック1172、1174の間で電気信号をルーティングするように構成されるブリッジ1182に電気的に結合される。ブリッジ1182は、電気信号のためのルートを提供する密な相互接続構造であってよい。ブリッジ1182は、ガラス又は適切な半導体材料からなるブリッジ基板を含んでよい。電気ルーティング機能をブリッジ基板上に形成して、ロジック1172、1174の間のチップ間接続を提供することができる。
【0168】
ロジック1172、1174の2つのユニットとブリッジ1182が図示されているが、本明細書で説明される実施形態は、1つ以上のダイ上により多くの又は少ないロジックユニットを含んでもよい。ロジックが単一のダイ上に含まれるとき、ブリッジ1182は除外され得るので、1つ以上のダイは、ゼロ又はそれより多くのブリッジによって接続され得る。あるいは、複数のダイ又はロジックのユニットを1つ以上のブリッジによって接続することができる。加えて、三次元構成を含む他の可能な構成では、複数のロジックユニット、ダイ及びブリッジを一緒に接続することができる。
【0169】
図11Cは、基板1180(例えばベースダイ)に接続されるハードウェアロジックチップレットの複数のユニットを含む、パッケージアセンブリ1190を図示している。本明細書で説明されるようなグラフィクス処理ユニット、並列プロセッサ及び/又は計算アクセラレータを、別個に製造される多様なシリコンチップレットから構成することができる。このコンテキストにおいて、チップレットは、他のチップレットとともにより大きなパッケージにアセンブルされ得るロジックの個別のユニットを含む、少なくとも部分的にパッケージ化された集積回路である。異なるIPコアロジックを有するチップレットの多様なセットを、単一のデバイスにアセンブルすることができる。加えて、チップレットを、アクティブなインタポーザ技術を使用して、ベースダイ又はベースチップレットに統合することができる。本明細書で説明される概念は、GPU内のIPの異なる形式間での相互接続及び通信を可能にする。IPコアは、異なるプロセス技術を使用して製造され、製造中に構成されることができ、特にいくつかのフレーバIPを有する大きなSoC上の複数のIPを同じ製造プロセスに集約させる複雑性を回避する。複数のプロセス技術の使用を可能にすることにより、市場への時間を改善し、複数の製品SKUを作成する費用効果のよい方法を提供する。加えて、分解されたIPは、独立にパワーゲーティングされるように更に修正可能であり、所与のワークロードで使用されていない構成要素を電源オフにすることができ、全体的な電力消費を低減させることができる。
【0170】
ハードウェアロジックチップレットは、特別目的のハードウェアロジックチップレット1172、ロジック又はI/Oチップレット1174及び/又はメモリチップレット1175を含むことができる。ハードウェアロジックチップレット1172及びロジック又はI/Oチップレット1174は、少なくとも部分的に、構成可能ロジック又は固定機能ロジックハードウェアで実装されてよく、プロセッサコア、グラフィクスプロセッサ、並列プロセッサ又は本明細書で説明される他のアクセラレータのうちのいずれかの1つ以上の部分を含むことができる。メモリチップレット1175は、DRAM(例えばGDDR、HBM)メモリ又はキャッシュ(SRAM)メモリとすることができる。
【0171】
各チップレットを、別個の半導体ダイとして製造することができ、相互接続構造1173を介して基板1180と結合することができる。相互接続構造1173は、基板1180内の様々なチップレットとロジックの間で電気信号をルーティングするように構成され得る。相互接続1173は、これらに限定されないが、バンプやピラーのような相互接続を含むことができる。いくつかの実施形態において、相互接続構造1173は、例えばロジック、I/O及びメモリチップレットに関連付けられる入力/出力(I/O)信号及び/又は電力若しくは接地信号のような電気信号をルーティングするように構成され得る。
【0172】
いくつかの実施形態において、基板1180は、エポキシベースのラミネート基板である。基板1180は、他の実施形態では他の適切なタイプの基板を含んでもよい。パッケージアセンブリ1190は、パッケージ相互接続1183を介して他の電気デバイスに接続され得る。パッケージ相互接続1183は、基板1180の表面に結合され、マザーボードや他のチップレット又はマルチチップモジュールのような他の電気デバイスに電気信号をルーティングしてよい。
【0173】
いくつかの実施形態において。ロジック又はI/Oチップレット1174及びメモリチップレット1175を、ブリッジ1187を介して電気的に結合することができる。ブリッジ1187は、ロジック又はI/Oチップレット1174とメモリチップレット1175の間で電気信号をルーティングするように構成される。ブリッジ1187は、電気信号のルートを提供する密な相互接続構造であってよい。ブリッジ1187は、ガラス又は適切な半導体材料で構成されるブリッジ基板を含んでよい。電気ルーティング機能をブリッジ基板上に形成して、ロジック又はI/Oチップレット1174とメモリチップレット1175の間にチップ間接続を提供することができる。ブリッジ1187は、シリコンブリッジ又は相互接続ブリッジと呼ばれることもある。例えばブリッジ1187は、いくつかの実施形態では、組込みマルチダイ相互接続ブリッジ(EMIB:Embedded Multi-die Interconnect Bridge)である。いくつかの実施形態では、ブリッジ1187は単に、あるチップレットから別のチップレットへの直接接続であってよい。
【0174】
基板1180は、I/O1191、キャッシュメモリ1192及び他のハードウェアロジック1193のためのハードウェア構成要素を含むことができる。ファブリック1185を基板1180に埋め込んで、基板1180内の様々なチップレットとロジック1191、1193の間の通信を可能にすることができる。一実施形態において、I/O1191、ファブリック1185、キャッシュ、ブリッジ及び他のハードウェアロジック1193を、基板1180の上部にレイヤされるベースダイに一体化することができる。
【0175】
様々な実施形態において、パッケージアセンブリ1190は、ファブリック1185又は1つ以上のブリッジ1187によって相互接続される、より少ない又はより多くの数の構成要素及びチップレットを含むことができる。パッケージアセンブリ1190内のチップレットは、3D又は2.5D配置で配置されてよい。一般に、ブリッジ構造1187は、例えばロジック又はI/Oチップレットとメモリチップレットとの間のポイントツーポイント相互接続を容易にするために使用されてよい。ファブリック1185を使用して、様々なロジック及び/又はI/Oチップレット(例えばチップレット1172、1174、1191、1193)を他のロジック及び/又はI/Oチップレットと相互接続することができる。一実施形態において、基板内のキャッシュメモリ1192は、パッケージアセンブリ1190のためのグローバルキャッシュとして、分散グローバルキャッシュの一部又はファブリック1185のための専用キャッシュとして機能することができる。
【0176】
図11Dは、一実施形態による、交換可能チップレット1195を含むパッケージアセンブリ1194を図示している。交換可能チップレット1195を、1つ以上のベース基板1196、1198上の規格化スロットにアセンブルすることができる。ブリッジ相互接続1197を介して、ベースチップレット1196、1198を結合することができる。ブリッジ相互接続1197は、本明細書で説明される他のブリッジ相互接続と同様のものとすることができ、例えばEMIBであってよい。ブリッジ相互接続を介して、メモリチップレットをロジック又はI/Oチップレットに接続することもできる。I/O及びロジックチップレットは、相互接続ファブリックを介して通信することができる。ベースチップレットは各々、ロジック又はI/O又はメモリ/キャッシュのうちの1つについて、規格化フォーマットの1つ以上のスロットをサポートすることができる。
【0177】
一実施形態において、SRAM及び電力供給回路は、ベースチップレットの上部に積み重ねられる交換可能チップレット1195とは異なるプロセス技術を使用して製造され得る、ベースチップレット1196、1198のうちの1つ以上に製造され得る。例えばベースチップレット1196、1198は、より大きなプロセス技術を使用して製造され得るが、一方、交換可能チップレットは、より小さなプロセス技術を使用して製造され得る。交換可能チップレット1195のうちの1つ以上はメモリ(例えばDRAM)チップレットであってよい。パッケージアセンブリ1194を使用する製品を対象とする電力及び/または性能に基づいて、パッケージアセンブリ1194に対して異なるメモリ密度を選択することができる。加えて、製品を対象とする電力及び/又は性能に基づいて、異なる数のタイプの機能ユニットを有するロジックチップレットを、アセンブリ時に選択することができる。加えて、異なるタイプのIPロジックコアを含むチップレットを、交換可能チップレットスロットに挿入することができ、異なる技術のIPブロックを混合及びマッチさせることができるハイブリッドプロセッサ設計を可能にすることができる。
【0178】
例示のシステムオンチップ集積回路
図12~
図13は、本明細書で説明される様々な実施形態による、1つ以上のIPコアを使用して製造され得る、例示の集積回路及び関連するグラフィクスプロセッサを図示している。図示されているものに加えて、追加のグラフィクスプロセッサ/コア、周辺インタフェースコントローラ又は汎用プロセッサコアを含む、他のロジック及び回路が含まれてよい。
【0179】
図12は、一実施形態による、1つ以上のIPコアを使用して製造され得る、集積回路1200上の例示のシステムを示すブロック図である。例示の集積回路1200は、1つ以上のアプリケーションプロセッサ1205(例えばCPU)、少なくとも1つのグラフィクスプロセッサ1210を含み、画像プロセッサ1215及び/ビデオプロセッサ1220を更に含んでよく、そのいずれかは、同じ又は複数の異なる設計設備からのモジュラ式IPコアであってよい。集積回路1200は、USBコントローラ1225、UARTコントローラ1230、SPI/SDIOコントローラ1235及びI
2S/I
2Cコントローラ1240を含む、周辺又はバスロジックを含む。加えて、集積回路は、HDMI(high-definition multimedia interface)(登録商標)コントローラ1250及びMIPI(mobile industry processor interface)ディスプレイインタフェース1255のうちの1つ以上と結合されるディスプレイデバイス1245を含むことができる。ストレージが、フラッシュメモリ及びフラッシュメモリコントローラを含むフラッシュメモリサブシステム1260によって提供されてよい。SDRAM又はSRAMメモリデバイスへのアクセスのために、メモリインタフェースがメモリコントローラ1265を介して提供されてよい。いくつかの集積回路は、組込みセキュリティエンジン1270を更に含む。
【0180】
図13A~
図13Bは、本明細書で説明される実施形態による、SoC内で使用するための例示のグラフィクスプロセッサを例示するブロック図である。
図13Aは、一実施形態による、1つ以上のIPコアを使用して製造され得るシステムオンチップ集積回路の例示のグラフィクスプロセッサ1310を図示している。
図13Bは、一実施形態による、1つ以上のIPコアを使用して製造され得るシステムオンチップ集積回路の更なる例のグラフィクスプロセッサ1340を図示している。
図13Aのグラフィクスプロセッサ1310は、低電力グラフィクスプロセッサコアの例である。
図13Bのグラフィクスプロセッサ1340は、より高性能なグラフィクスプロセッサコアの例である。グラフィクスプロセッサ1310、1410の各々は、
図12のグラフィクスプロセッサ1210の変形とすることができる。
【0181】
図13Aに図示されるように、グラフィクスプロセッサ1310は、頂点プロセッサ1305及び1つ以上のフラグメントプロセッサ1315A~1315N(例えば1315A、1315B、1315C、1315D~1315N-1及び1315N)を含む。グラフィクスプロセッサ1310は、頂点プロセッサ1305が頂点シェーダプログラムのためのオペレーションを実行するよう最適化され、一方、フラグメントプロセッサ1315A~1315Nがフラグメント又はピクセルシェーダプログラムのためのフラグメント(例えばピクセル)シェーディングオペレーションを実行するように、別個のロジックを介して異なるプログラムを実行することができる。頂点プロセッサ1305は、3Dグラフィクスパイプラインの頂点処理段階を実行し、プリミティブ及び頂点データを生成する。フラグメントプロセッサ1315A~1315Nは、頂点プロセッサ1305によって生成されたプリミティブ及び頂点データを使用して、ディスプレイデバイス上に表示されるフレームバッファを生成する。一実施形態において、フラグメントプロセッサ1315A~1315Nは、Direct3D APIで提供されるピクセルシェーダプログラムと同様のオペレーションを実行するために使用され得る、OpenGL APIで提供されるフラグメントシェーダプログラムを実行するように最適化される。
【0182】
グラフィクスプロセッサ1310は、1つ以上のメモリ管理ユニット(MMU)1320A~1320B、キャッシュ1325A~1325B及び回路相互接続1330A~1330を更に含む。1つ以上のMMU1320A~1320Bは、頂点プロセッサ1305及び/フラグメントプロセッサ1315A~1315Nを含むグラフィクスプロセッサ1310について、仮想アドレスと物理アドレスのマッピングを提供する。これは、1つ以上のキャッシュ1325A~1325B内に格納された頂点又は画像/テクスチャデータに加えて、メモリ内に格納された頂点又は画像/テクスチャデータを参照し得る。一実施形態において、1つ以上のMMU1320~1320Bは、各プロセッサ1205~1220が共有又は統合仮想メモリシステムに参加することができるように、
図12の1つ以上のアプリケーションプロセッサ1205、画像プロセッサ1215及び/又はビデオプロセッサ1220に関連付けられる1つ以上のMMUを含む、システム内の他のMMUと同期されてよい。1つ以上の回路相互接続1330A~1330Bは、実施形態に従って、SoCの内部バスを介して又は直接接続を介して、グラフィクスプロセッサ1310がSoC内の他のIPコアとインタフェースすることを可能にする。
【0183】
図13Bに図示されるように、グラフィクスプロセッサ1340は、
図13Aのグラフィクスプロセッサ1310の1つ以上のMMU1320A~1320B、キャッシュ1325A~1325B及び回路相互接続1330A~1330Bを含む。グラフィクスプロセッサ1340は、統一シェーダコアアーキテクチャを提供する1つ以上のシェーダコア1355A~1355N(例えば1355A、1355B、1355C、1355D、1355E、1355F~1355N-1及び1355N)を含む。統一シェーダコアアーキテクチャでは、単一のコア又はタイプ又はコアが、頂点シェーダ、フラグメントシェーダ及び/又は計算シェーダを実装するシェーダプログラムコードを含む、すべてのタイプのプログラム可能なシェーダコアを実行することができる。存在するシェーダコアの正確な数は、実施形態及び実装において異なる可能性がある。加えて、グラフィクスプロセッサ1340は、実行スレッドを1つ以上のシェーダコア1355A~1355Nにディスパッチするスレッドディスパッチャとして機能するコア間タスクマネージャ1345と、タイルベースのレンダリングのためのタイル化オペレーションを加速するタイル化ユニット1358を含む。タイルベースのレンダリングでは、例えばシーン内のローカル空間コヒーレンスを利用するか、内部キャッシュの使用を最適化するために、シーンについてのレンダリングオペレーションが画像空間内で細分される。
【0184】
機械学習の概要
機械学習アルゴリズムは、データのセットに基づいて学習することができるアルゴリズムである。機械学習アルゴリズムの実施形態は、データセット内の高レベル抽象化をモデル化するように設計され得る。例えば画像認識アルゴリズムを使用して、所与の入力が、いくつかのカテゴリのうちのいずれに属するかを決定することができ;回帰アルゴリズムは、入力を与えられた数値を出力することができ;パターン認識アルゴリズムを使用して、変換されたテキストを生成するか、テキストから音声及び/又は音声認識を実行することができる。
【0185】
機械学習アルゴリズムの例示のタイプは、ニューラルネットワークである。多数のタイプのニューラルネットワークが存在し、簡単なタイプのニューラルネットワークは、フィードフォワードネットワークである。フィードフォワードネットワークは、ノードが層内に配置される非巡回グラフとして実装され得る。典型的に、フィードフォワードネットワークトポロジは、少なくとも1つの隠れ層によって分離される入力層と出力層を含む。隠れ層は、入力層によって受け取られた入力を、出力層で出力を生成するために役立つ表現に変換する。ネットワークノードは、エッジを介して、隣接する層に完全に接続されるが、エッジは各層内のノード間には存在しない。フィードフォワードネットワークの入力層のノードで受け取られたデータは、層を接続しているエッジの各々にそれぞれ関連付けられる係数(「重み」)に基づいてネットワーク内の各連続層のノードの状態を計算する活性化関数を介して、出力層のノードに伝播される(すなわち、「前方に供給される」)。実行されているアルゴリズムによって表されている特有のモデルに依存して、ニューラルネットワークアルゴリズムからの出力は様々な形式をとることができる。
【0186】
機械学習アルゴリズムを使用して特定の問題をモデル化できる前に、アルゴリズムは、トレーニングデータセットを使用してトレーニングされる。ニューラルネットワークをトレーニングすることは、ネットワークによって表されている問題を表すトレーニングデータのセットを使用して、ネットワークトポロジを選択することと、トレーニングデータセットのすべてのインスタンスについて、ネットワークモデルが最小誤差で実行されるまで重みを調整することを含む。例えばニューラルネットワークの教師あり学習トレーニングプロセスの間に、入力がトレーニングデータセット内のインスタンスを表していることに応答して、ネットワークによって生成される出力は、そのインスタンスについて、「正しい」とラベル付けされた出力と比較され、出力と、ラベル付けされた出力との間の差を表す誤差信号が計算され、誤差信号がネットワークの層を通して後方に伝播されるときに、その誤差を最小にするように、接続に関連付けられる重みが調整される。トレーニングデータセットのインスタンスから生成された出力の各々についての誤差が最小化されると、ネットワークは「トレーニングされた」と考えられる。
【0187】
機械学習アルゴリズムの正確性は、アルゴリズムをトレーニングするために使用されるデータセットの品質によって大いに影響され得る。トレーニングプロセスは計算集約的であり得、従来の汎用プロセッサにおいては相当な時間量を必要とする可能性がある。したがって、多くのタイプの機械学習アルゴリズムをトレーニングするために、並列処理ハードウェアが使用される。これは、ニューラルネットワーク内の係数を調整する際に実行される計算が自然に並列実装に役立つので、ニューラルネットワークのトレーニングを最適化するために特に有益である。特に、多くの機械学習アルゴリズム及びソフトウェアアプリケーションは、汎用グラフィクス処理デバイス内の並列処理ハードウェアを使用するように適合されている。
【0188】
図14は、機械学習ソフトウェアスタック1400の一般化された図である。機械学習アプリケーション1402は、トレーニングデータセットを使用してニューラルネットワークをトレーニングするか、トレーニングされたディープニューラルネットワークを使用して機械知能を実装するように構成され得る。機械学習アプリケーション1402は、ニューラルネットワークのためのトレーニング及び推論機能及び/又は展開前にニューラルネットワークをトレーニングするために使用され得る特別なソフトウェアを含むことができる。機械学習アプリケーション1402は、これらに限定されないが、画像認識、マッピングとローカリゼーション、自律ナビゲーション、音声合成、医療画像又は言語翻訳を含む、任意のタイプの機械知能を実装することができる。
【0189】
機械学習アプリケーション1402のためのハードウェア・アクセラレーションは、機械学習フレームワーク1404を介して可能にされ得る。機械学習フレームワーク1404は、機械学習プリミティブのライブラリを提供することができる。機械学習プリミティブは、機械学習アルゴリズムによって一般的に実行される基本オペレーションである。機械学習フレームワーク1404がない場合、機械学習アルゴリズムの開発者は、機械学習アルゴリズムに関連付けられる主計算ロジックを作成して最適化し、次いで新たな並列プロセッサが開発されると、その計算ロジックを再最適化する必要があるであろう。代わりに、機械学習アプリケーションは、機械学習フレームワーク1404によって提供されるプリミティブを使用して必要な計算を実行するように構成され得る。例示のプリミティブは、テンソル畳み込み、活性化関数及びプーリングを含み、これらは、畳み込みニューラルネットワーク(CNN)をトレーニングしている間に実行される計算オペレーションである。機械学習フレームワーク1404は、行列及びベクトル演算のように、多くの機械学習アルゴリズムによって実行される基本の線形代数サブプログラムを実装するプリミティブも提供することができる。
【0190】
機械学習フレームワーク1404は、機械学習アプリケーション1402から受け取った入力データを処理して、計算フレームワーク1406への適切な入力を生成することができる。計算フレームワーク1406は、GPGPUドライバ1408に提供される基礎となる命令を抽象化して、機械学習フレームワーク1404がGPGPUハードウェア1410のアーキテクチャの詳細な知識を有することを必要とせずに、機械学習フレームワーク1404が、GPGPUハードウェア1410を介してハードウェア・アクセラレーションを利用することを可能にする。加えて、計算フレームワーク1406は、GPGPUハードウェア1410の様々なタイプ及び世代にわたって、機械学習フレームワーク1404のハードウェア・アクセラレーションを可能にすることができる。
【0191】
機械学習ニューラルネットワーク実装
本明細書で説明される実施形態によって提供されるコンピューティングアーキテクチャは、ニューラルネットワークを機械学習のためにトレーニング及び展開することに特に適した並列処理のタイプを実行するように構成され得る。ニューラルネットワークは、グラフ関係を有する機能のネットワークとして一般化され得る。当技術分野で知られているように、機械学習で使用される様々なタイプのニューラルネットワーク実装が存在する。ニューラルネットワークの1つの例示のタイプは、前述したように、フィードフォワードネットワークである。
【0192】
ニューラルネットワークの第2の例示のタイプは、畳み込みニューラルネットワーク(CNN:Convolutional Neural Network)である。CNNは、画像データのような、既知のグリッド類似のトポロジを有するデータを処理するための特別なフィードフォワードニューラルネットワークである。したがって、CNNは、一般に、計算ビジョン及び画像認識アプリケーションに使用されるが、これらは、音声及び言語処理のような他のタイプのパターン認識に使用されてもよい。CNN入力層内のノードは、「フィルタ」のセット(網膜内でみられる受容野によって触発される特徴検出器)に編成され、フィルタの各セットの出力は、ネットワークの連続する層内のノードに伝播される。CNNについての計算は、畳み込み数学演算を各フィルタに適用して、そのフィルタの出力を生成することを含む。畳み込みは、2つの関数によって実行される特別な種類の数学演算であり、2つの元の関数のうちの1つの修正されたバージョンである第3の関数を生成する。畳み込みネットワーク用語法では、畳み込みへの第1の関数を入力と呼ぶことができ、第2の関数を畳み込みカーネルと呼ぶことができる。出力は特徴マップと呼ばれてよい。例えば畳み込み層への入力は、入力画像の様々な色構成要素を定義するデータの多次元アレイとすることができる。畳み込みカーネルは、パラメータの多次元アレイとすることができ、この場合、パラメータは、ニューラルネットワークのトレーニングプロセスによって適合される。
【0193】
リカレントニューラルネットワーク(RNN:Recurrent neural networks)は、層間のフィードバック接続を含む、フィードバックニューラルネットワークのファミリーである。RNNは、ニューラルネットワークの異なる部分にわたってパラメータデータを共有することによって、シーケンシャルデータのモデル化を可能にする。RNNのアーキテクチャはサイクル(cycles)を含む。RNNからの出力データの少なくとも一部が、シーケンス内の後続の入力を処理するためのフィードバックとして使用されるので、サイクルは、変数の現在の値の、将来の時間におけるそれ自体の値に対する影響を表す。この特徴は、言語データを構成することができる変数性質に起因して、RNNを言語処理に特に役立つものにする。
【0194】
以下で説明される図面は、例示のフィードフォワード、CNN及びRNNネットワークを提示し、これらのタイプのネットワークの各々をそれぞれトレーニングして展開するための一般的なプロセスを説明する。これらの説明は、本明細書で説明されるいずれかの具体的な実施形態に関して例示であって非限定的であり、説明される概念を、一般にディープニューラルネットワーク及び機械学習技術に一般的に適用することができることが理解されよう。
【0195】
上述の例示のニューラルネットワークを使用してディープラーニングを実行することができる。ディープラーニングは、ディープニューラルネットワークを使用する機械学習である。ディープラーニングで使用されるディープニューラルネットワークは、単一の隠れ層のみを含むシャローニューラルネットワーク(shallow neural network)とは対照的に、複数の隠れ層で構成される人工ニューラルネットワークである。より深いニューラルネットワークは一般的に、トレーニングするためにより計算集約的である。しかしながら、ネットワークの追加の隠れ層は、シャロー機械学習技術に比して出力誤差(output error)がより低減されることになるマルチステップパターン認識を可能にする。
【0196】
ディープラーニングで使用されるディープニューラルネットワークは典型的に、モデルに提供される特徴表現に基づいて、オペレーション(例えばオブジェクト分類、音声認識等)を実行することができる数学モデルを表す、バックエンドンネットワークに結合される特徴認識を実行するフロントエンドネットワークを含む。ディープラーニングは、手動で作成された特徴エンジニアリングをモデルに対して実行する必要なく、機械学習が実行されることを可能にする。代わりに、ディープニューラルネットワークは、入力データ内の統計構造又は相関性に基づいて特徴を学習することができる。学習した特徴を、検出された特徴を出力にマップすることができる数学モデルに提供することができる。ネットワークによって使用される数学モデルは一般に、実行される特定のタスクについて特定化され、異なるモデルを使用して異なるタスクを実行する。
【0197】
ニューラルネットワークが構造化されると、学習モデルをネットワークに適用して、特定のタスクを実行するようにネットワークをトレーニングすることができる。学習モデルは、ネットワークの出力誤差を減らすために、モデル内の重みをどのように調整するかを説明する。誤差の逆伝播は、ニューラルネットワークをトレーニングするために使用される一般的な方法である。入力ベクトルが、処理のためにネットワークに提示される。ネットワークの出力は、ロス関数を使用して所望の出力と比較され、誤差値が出力層内のニューロンの各々について計算される。誤差値は次いで、各ニューロンが元の出力に対する寄与を大まかに表す関連誤差値を有するまで後方に伝播される。ネットワークは次いで、確率的勾配降下アルゴリズムのようなアルゴリズムを使用してこれらの誤差から学習し、ニューラルネットワークの重みを更新することができる。
【0198】
図15A~
図15Nは、例示の畳み込みニューラルネットワークを図示している。
図15Aは、CNN内の様々な層を図示している。
図15Aに図示されるように、画像処理をモデル化するために使用される例示のCNNは、入力画像の赤、緑及び青(RGB)成分を示す入力1502を受け取ることができる。入力1502を、複数の畳み込み層(例えば第1畳み込み層1504、第2畳み込み層1506)によって処理することができる。複数の畳み込み層からの出力は、任意に、完全接続層1508のセットによって処理されてよい。完全接続層内のニューロンは、フィードフォワードネットワークに関して前述したように、前の層内のすべての活性化(activations)への完全な接続を有する。完全接続層1508からの出力を使用して、ネットワークからの出力結果を生成することができる。完全接続層1508内の活性化は、畳み込みの代わりに、行列乗算を使用して計算され得る。必ずしもすべてのCNN実装が完全接続層1508を使用するわけではない。例えばいくつかの実装では、第2畳み込み層1506が、CNNのための出力を生成することができる。
【0199】
畳み込み層は、完全接続層1508で見られる従来的なニューラルネットワーク構成とは異なり、低密度で接続される。従来のニューラルネットワーク層は、すべての出力部がすべての入力部と相互作用するように完全に接続される。しかしながら、畳み込み層は低密度で接続される。なぜなら、フィールドの畳み込みの出力は、図示されるように、(フィールド内のノードの各々のそれぞれの状態値の代わりに)後続の層のノードへの入力であるためである。畳み込み層に関連付けられるカーネルは、畳み込み演算を実行し、その出力は次の層に送られる。畳み込み層で実行される次元低減は、CNNが大きな画像をスケーリングして処理することを可能にする一態様である。
【0200】
図15Bは、CNNの畳み込み層内の例示の計算段階を図示している。CNNの畳み込み層への入力1512を、畳み込み層1514の3つの段階で処理することができる。3つの段階は、畳み込み段階1516、検出器段階1518及びプーリング段階1520を含むことができる。畳み込み層1514は、次いでデータを連続する畳み込み層に出力することができる。ネットワークの最終的な畳み込み層は、出力特徴マップデータを生成するか、完全接続層に入力を提供して、例えばCNNへの入力の分類値を生成することができる。
【0201】
畳み込み段階1516は、いくつかの畳み込みを並列に実行して、線形活性化のセットを生成する。畳み込み段階1516は、線形変換プラス平行移動(linear transformation plus a translation)として指定され得る任意の変換を含む、アフィン変換を含むことができる。アフィン変換は、回転、平行移動、スケーリング及びこれらの変換の組合せを含む。畳み込み段階は、入力内の特有の領域に接続される機能(例えばニューロン)の出力を計算する。そのような特有の領域は、ニューロンに関連付けられるローカル領域として決定され得る。ニューロンは、ニューロンの重みと、ニューロンが接続されるローカル入力内の領域との間のドット積を計算する。畳み込み段階1516からの出力は、畳み込み層1514の連続する段階によって処理される線形活性化のセットを定義する。
【0202】
線形活性化を検出器段階1518によって処理することができる。検出器段階1518では、各線形活性化は、非線形活性化関数によって処理される。非線形活性化関数は、畳み込み層の受容野に影響を与えることなく、ネットワーク全体の非線形特性を増加させる。いくつかのタイプの非線形活性化関数が使用されてよい。1つの特定のタイプは、ReLU(rectified linear unit)である。ReLUは、活性化がゼロで閾値処理されるように、f(x)=max(0,x)として定義される活性化関数を使用する。
【0203】
プーリング段階1520は、第2畳み込み層1506の出力を、近くの出力の要約統計(summary statistic)に置換するプーリング関数を使用する。入力に対する小さな平行移動が、プールされた出力を変えないように、プーリング関数を使用して並進不変性(translation invariance)をニューラルネットワークに導入することができる。局所平行移動に対する不変性は、入力データ内の特徴の存在が、その特徴の正確な位置よりも重要であるシナリオにおいて有益であり得る。最大プーリング、平均プーリング及び12ノルムプーリングを含め、様々なタイプのプーリング関数をプーリング段階1520中に使用することができる。加えて、いくつかのCNN実装はプーリング段階を含まない。代わりに、そのような実装は、前の畳み込みに対して増加したストライドを有する追加の畳み込み段階を代わりに用いる。
【0204】
畳み込み層1514からの出力を、次いで次の層1522によって処理することができる。次の層1522は、追加の畳み込み層又は完全接続層1508のうちの1つとすることができる。例えば
図15Aの第1畳み込み層1504は、第2畳み込み層1506に出力することができ、一方、第2畳み込み層は、完全接続層1508の第1層に出力することができる。
【0205】
図16は、例示のリカレントニューラルネットワークを図示している。リカレントニューラルネットワーク(RNN)では、ネットワークの前の状態が、ネットワークの現在の状態の出力に影響を及ぼす。RNNは、様々な関数を使用して様々な方法で構築することができる。RNNの使用は一般に、数学モデルを使用して周囲を回転し、入力の以前のシーケンスに基づいて将来を予測する。例えばRNNを使用して、統計的言語モデリングを実行し、ワードの以前のシーケンスを所与として次のワードを予測し得る。図示されたRNN1600は、入力ベクトルを受け取る入力層1602、リカレント関数を実装する隠れ層、前の状態の「メモリ」を可能にするフィードバック機構1605及び結果を出力する出力層1606を有するものとして説明され得る。RNN1600は、時間ステップに基づいて動作する。所与の時間ステップにおけるRNNの状態は、フィードバック機構1605を介して、以前に時間ステップに基づいて影響される。所与の時間ステップについて、隠れ層1604の状態は、前の状態と、現在の時間ステップにおける入力に基づいて定義される。第1時間ステップにおける初期入力(x1)を、隠れ層1604によって処理することができる。第2入力(x2)を、初期入力(x1)の処理中に決定される状態情報を使用して、隠れ層1604によって処理することができる。所与の状態を、s
t=f(Ux
t+Ws
t-1)として計算することができ、ここで、U及びWはパラメータメトリクスである。関数fは、一般に、双曲線タンジェント関数(Tanh)又は整流関数(rectifier function)f(x)=max(0,x)の変形のように非線形性である。しかしながら、隠れ層1604で使用される特有の数学関数は、RNN1600の特有の実装の詳細に依存して異なる可能性がある。
【0206】
説明される基本のCNN及びRNNに加えて、これらのネットワークに対する変形も可能であり得る。1つの例示のRNN変形は、長短期記憶(LSTM:long short-term memory)RNNである。LSTM RNNは、より長い言語シーケンスを処理するために必要となり得る長期依存性を学習することができる。CNNに対する変形は、CNNと同様の構造を有し、ディープビリーフネットワークと同様の方法でトレーニングされる、畳み込みディープビリーフネットワークである。ディープビリーフネットワーク(DBN:deep belief network)は、確率的(ランダムな)変数の複数の層で構成される生成的ニューラルネットワークである。DBNは、欲張り教師なし学習を使用してレイヤ毎にトレーニングされ得る。次いで、DBNの学習された重みを使用して、ニューラルネットワークの重みの最適な初期セットを決定することにより事前トレーニングニューラルネットワーク(pre-train neural networks)を提供することができる。
【0207】
図17は、ディープニューラルネットワークのトレーニング及び展開を図示している。所与のネットワークがタスクのために構造化されると、ニューラルネットワークが、トレーニングデータセット1702を使用してトレーニングされる。様々なトレーニングフレームワークが開発され、トレーニングプロセスのハードウェア・アクセラレーションを可能にしている。例えば
図14の機械学習フレームワーク1404は、トレーニングフレームワーク1704として構成されてよい。トレーニングフレームワーク1704は、トレーニングされていないニューラルネットワーク1706にフックすることができ、トレーニングされていないニューラルネットが、本明細書で説明される並列処理リソースを使用してトレーニングされて、トレーニングされたニューラルネットワーク1708を生成することを可能にする。トレーニングプロセスを開始するために、初期の重みが、ランダムに又はディープビリーフネットワークを使用して事前トレーニングすることにより選択されてよい。トレーニングサイクルは次いで、教師あり又は教師なしの方法のいずれかで実施される。
【0208】
教師あり学習は、例えばトレーニングデータセット1702が入力用の所望の出力とペアにされる入力を含むとき、あるいはトレーニングデータセットが既知の出力を有する入力を含み、ニューラルネットワークの出力が手動で等級付けされる(graded)場合等に、トレーニングが媒介オペレーション(mediated operation)として実行される学習方法である。ネットワークは入力を処理して、結果として得られる出力を、予期される又は所望の出力のセットと比較する。次いで、誤差がシステムを通して伝播される。トレーニングフレームワーク1704は、トレーニングされていないニューラルネットワーク1706を制御する重みを調節することができる。トレーニングフレームワーク1704は、トレーニングされていないニューラルネットワーク1706が、既知の入力データに基づいて、正しい答えを生成することに適したモデルに向かってどれくらい良好に収束しているかをモニタするツールを提供することができる。トレーニングプロセスは、ニューラルネットワークによって生成される出力を洗練させるためにネットワークの重みが調整されると、繰り返し生じる。トレーニングプロセスは、ニューラルネットワークが、トレーニングされたニューラルネットワーク1708に関連付けられる統計的に望まれる精度に到達するまで、継続することができる。トレーニングされたニューラルネットワーク1708は、その後、任意の数の機械学習演算を実装して、新たなデータ1712の入力に基づいて推論結果1714を生成するように展開され得る。
【0209】
教師なし学習は、ネットワークが、ラベル付けされていないデータを使用して自身をトレーニングするよう試みる学習方法である。したがって、教師なし学習では、トレーニングデータセット1702は、いずれの関連する出力データも伴わない入力データを含むことになる。トレーニングされていないニューラルネットワーク1706は、ラベル付けされていない入力内のグループ化を学習することができ、個々の入力がデータセット全体にどのように関連するかを決定することができる。教師なしトレーニングを使用して、自己組織化マップ(self-organizing map)を生成することができ、自己組織化マップは、データの次元を減らす際に役立つオペレーションを実行することができる、トレーニングされたニューラルネットワーク1708の一タイプである。教師なしトレーニングを使用して異常検出を実行することもできる。異常検出は、データの通常パターンから逸脱する、入力データセット内のデータポイントの識別を可能にする。
【0210】
教師あり及び教師なしトレーニングに対する変化も採用されてよい。半教師あり学習は、トレーニングデータセット1702が、同じ分布のラベル付けされたデータとラベル付けされていないデータの混合を含む技術である。増分学習は、入力データを連続的に使用してモデルを更にトレーニングする、教師あり学習の変形である。増分学習は、トレーニングされたニューラルネットワーク1708が、初期トレーニング中にネットワーク内に注入された知識を忘れることなく、新たなデータ1712に適応することを可能にする。
【0211】
教師あり又は教師なしに関わらず、特にディープニューラルネットワークのためのトレーニングプロセスは、単一の計算ノードにとって計算集約的すぎる可能性がある。単一の計算ノードを使用する代わりに、計算ノードの分散ネットワークを使用してトレーニングプロセスを加速することができる。
【0212】
図18は、分散学習を例示するブロック図である。分散学習は、複数の分散コンピューティングノードを使用して、ニューラルネットワークの教師あり又は教師なしトレーニングを実行するトレーニングモデルである。分散計算ノードは各々、1つ以上のホストプロセッサと、汎用処理ノードのうちの1つ以上を含むことができる。図示されるように、分散学習は、モデル並列性(parallelism)1802、データ並列性1804又はモデルとデータ並列性の組合せ1804を実施することができる。
【0213】
モデル並列性1802では、分散システム内の異なる計算ノードは、単一のネットワークの異なる部分についてトレーニング計算を実行することができる。例えばニューラルネットワークの各層を、分散システムの異なる処理ノードによってトレーニングすることができる。モデル並列性の利点には、特に大きなモデルにスケーリングする能力が含まれる。ニューラルネットワークの異なる層に関連付けられる計算を分割することは、すべての層の重みが単一の計算ノードのメモリに収まらない、非常に大きなニューラルネットワークのトレーニングを可能にする。いくつかの例では、モデル並列性は、大きなニューラルネットワークの教師なしトレーニングを実行する際に特に有益であり得る。
【0214】
データ並列性1804では、分散ネットワークの異なるノードは、モデルの完全なインスタンスを有し、各ノードは、データの異なる部分を受け取る。異なるノードからの結果はその後、組み合わされる。データ並列性への異なるアプローチも可能であるが、データ並列トレーニングアプローチはすべて、結果を組み合わせて、各ノード間のモデルパラメータを同期する技術を必要とする。データを組み合わせる例示のアプローチは、パラメータ平均化と、更新ベースのデータ並列性を含む。パラメータ平均化は、トレーニングデータのサブセットに対して各ノードをトレーニングし、グローバルパラメータ(例えば重み、バイアス)を各ノードからのパラメータの平均にセットする。パラメータ平均化は、パラメータデータを維持する中央パラメータサーバを使用する。更新ベースのデータ並列性は、ノードからパラメータサーバにパラメータを転送する代わりに、モデルに対する更新が転送されることを除いて、パラメータ平均化と同様である。加えて、更新ベースのデータ並列性は、更新が圧縮されてノード間で転送される、分散的方法で実行される可能性もある。
【0215】
組合せのモデルとデータ並列性1806は、例えば各計算ノードが複数のGPUを含む分散システムで実装され得る。各ノードは、モデルの完全なインスタンスを有することができ、ここで、各ノード内の別個のGPUは、該モデルの異なる部分をトレーニングするために使用される。
【0216】
分散トレーニングは、単一の機械上でのトレーニングに比してオーバヘッドを増加させている。しかしながら、本明細書で説明される並列プロセッサ及びGPGPUは各々、高帯域幅GPU間データ転送及び加速されたリモートデータ同期化を可能にする技術を含め、分散トレーニングのオーバヘッドを低減させる様々な技術を実装することができる。
【0217】
例示の機械学習アプリケーション
機械学習を適用して、限定ではないがコンピュータビジョン、自律運転及びナビゲーション、音声認識及び言語処理を含む、様々な技術的問題を解決することができる。コンピュータビジョンは、従来的に、機械学習アプリケーションにとって最も活発な研究分野の1つである。コンピュータビジョンのアプリケーションは、例えば顔を認識することのように人間の視覚能力を再現することから、視覚能力の新たなカテゴリを作成することに及ぶ。例えばコンピュータビジョンアプリケーションは、ビデオ内で可視のオブジェクトで引き起こされる振動から音波を認識するように構成され得る。並列プロセッサで加速される機械学習は、コンピュータビジョンアプリケーションが、以前に可能であったものよりもかなり大きなトレーニングデータセットを使用してトレーニングされることを可能にし、推論システムが、低電力並列プロセッサを使用して展開されることを可能にする。
【0218】
並列プロセッサで加速される機械学習は、レーン及び道路標識認識、衝突回避、ナビゲーション及び運転制御を含む、自律運転アプリケーションを有する。加速機械学習技術を使用して、特有のトレーニング入力に対する適切な応答を定義するデータセットに基づいて、運転モデルをトレーニングすることができる。本明細書で説明される並列プロセッサは、自律運転ソリューションに使用される、ますます複雑になるニューラルネットワークの迅速なトレーニングを可能にすることができ、自律車両への統合に適したモバイルプラットフォームにおける低電力推論プロセッサの展開を可能にする。
【0219】
並列プロセッサで加速されるディープニューラルネットワークは、自動音声認識(ASR:automatic speech recognition)への機械学習アプローチを可能にしている。ASRは、入力音響シーケンスを所与として、最もありそうな言語シーケンスを計算する関数の作成を含む。ディープニューラルネットワークを使用する加速機械学習は、ASRについて以前に使用されていた、隠れマルコフモデル(HMM:hidden Markov model)及びガウス混合モデル(GMM:Gaussian mixture model)の置換を可能にする。
【0220】
並列プロセッサで加速される機械学習を使用して、自然言語処理を加速することもできる。自動学習手順は、統計推論アルゴリズムを使用して、誤った入力又は見慣れない入力(unfamiliar input)に対してロバストなモデルを生成することができる。例示の自然言語プロセッサアプリケーションは、人間の言語間の自動機械翻訳を含む。
【0221】
機械学習に使用される並列処理プラットフォームを、トレーニングプラットフォームと展開プラットフォームに分割することができる。トレーニングプラットフォームは一般に、高度に並列であり、マルチGPUシングルノードトレーニング及びマルチノード、マルチGPUトレーニングを加速化する最適化を含み、一方、展開機械学習(例えば推論)プラットフォームは一般に、カメラや自律ロボット及び自律車両のような製品での使用に適した低電力並列プロセッサを含む。
【0222】
行列アクセラレーションロジックを用いるGPGPU
図19は、一実施形態による、データ処理システム1900のブロック図である。データ処理システム1900は、プロセッサ1901、統一メモリ1910及び機械学習加速ロジックを含むGPGPU1920を有する異種処理システムである。プロセッサ1902及びGPGPU1920は、本明細書で説明されるプロセッサ及びGPGPU/並列プロセッサのいずれかとすることができる。プロセッサ1902は、システムメモリ1912内に格納されたコンパイラ1915の命令を実行することができる。コンパイラ1915は、プロセッサ1902上で実行されて、ソースコード1914Aをコンパイルして、コンパイルされたコード1914Bにする。コンパイルされたコード1914Bは、プロセッサ1902によって実行され得る命令及び/又はGPGPU1920によって実行され得る命令を含むことができる。コンパイル中に、コンパイラ1915は、コンパイルされたコード1914B内に存在するデータ並列のレベルに関するヒント及び/又はコンパイルされたコード1914Bに基づいてディスパッチされるスレッドに関連付けられるデータローカル性に関するヒントを含む、メタデータを挿入するオペレーションを実行することができる。コンパイラ1915は、そのようなオペレーションを実行するために必要な情報を含むことができ、あるいは、ランタイムライブラリ1916の助けにより、そのようなオペレーションを実行することができる。ランタイムライブラリ1916は、ソースコード1914のコンパイルにおいてコンパイラ1915を助けることもでき、GPGPU1920におけるコンパイルされた命令の実行を容易にするために、ランタイム時にコンパイルされたコード1914Bとリンクされる命令を含むこともできる。
【0223】
統一メモリ1910は、プロセッサ1902及びGPGPU1920によってアクセスされ得る、統一アドレス空間を表す。統一メモリは、システムメモリ1912並びにGPGPUメモリ1918を含むことができる。GPGPUメモリ1918は、GPGPU1920のアドレス空間内のメモリであり、システムメモリ1912の一部又はすべてを含むことができる。一実施形態において、GPGPUメモリ1918は、GPGPU1920によって独占的に使用するために専用の任意のメモリの少なくとも一部も含むことができる。一実施形態において、システムメモリ1912に格納されたコンパイルされたコード1914Bを、GPGPU1920によるアクセスのためにGPGPUメモリ1918にマップすることができる。
【0224】
GPGPU1920は、複数の計算ブロック1924~1924Nを含む。複数の計算ブロック1924~1924Nは、本明細書で説明される様々な計算ユニット又は実行要素のうちの1つ以上を含むことができる。一実施形態において、GPGPU1920は行列アクセラレータ1923を更に含む。行列アクセラレータ1923は、行列演算のサブセット(例えばドット積等)を加速するように設計される、1つ以上の特別な関数計算ユニット(function compute unit)を含むことができる。GPGPU1920は、これらに限定されないがレジスタ1925のセット、電力及び性能モジュール1926並びにキャッシュ1927を含む、計算ブロック1924A~1924N及び行列アクセラレータ1923によって共有され得るリソースのセットも含むことができる。一実施形態において、レジスタ1925は、直接又は間接的にアクセス可能なレジスタを含み、ここで、間接的にアクセス可能なレジスタは、行列アクセラレータ1923による使用のために最適化される。電力及び性能モジュール1926は、計算ブロック1924A~1924Nについて電力供給及びクロック周波数を調整し、計算ブロック1924A~1924N内のゲートアイドル構成要素に電力を供給するように構成され得る。様々な実施形態において、キャッシュ1927は、命令キャッシュ及び/又はより低レベルのデータキャッシュを含むことができる。
【0225】
GPGPU1920は、行列アクセラレータ1923及び/又は計算ブロック1924A~1924N内の計算要素によって統一メモリ1910からアクセスされるデータをキャッシュするために使用できる、L3データキャッシュ1930を更に含むことができる。一実施形態において、L3データキャッシュ1930は、計算ブロック1924A~1924N内の計算要素又は行列アクセラレータ1923によって共有され得る、共有ローカルメモリ1932を含む。
【0226】
一実施形態において、GPGPU1920は、フェッチ及びデコードユニット1921並びにスケジューラコントローラ1922のような命令ハンドリングロジックを含む。フェッチ及びデコードユニット1921は、計算ブロック1924A~1924N又は行列アクセラレータ1923のうちの1つ以上による実行のために命令をフェッチして復号するフェッチユニットとデコードユニットを含む。スケジューラコントローラ1922を介して、計算ブロック1924A~1924N又は行列アクセラレータ内の適切な機能ユニットに対して命令をスケジュールすることができる。一実施形態において、スケジューラコントローラ1922は、高度なスケジューリングオペレーションを実行するよう構成可能なASICである。一実施形態において、スケジューラコントローラ1922は、ファームウェアモジュールからロードされたスケジューラ命令を実行することができる、マイクロコントローラ又は命令当たりの低エネルギ処理コア(low energy-per-instruction processing core)である。
【0227】
一実施形態において、計算ブロック1924A~1924Nによって実行されるいくつかの機能を直接スケジュールするか、行列アクセラレータ1923にオフロードすることができる。様々な実施形態において、行列アクセラレータ1923は、乗算及び加算オペレーション並びに3Dグラフィクス又は計算シェーダプログラムによって使用されるドット積演算のような、行列計算演算を効率的に実行するように構成される処理要素ロジックを含む。一実施形態において、行列アクセラレータ1923は、機械学習フレームワークによって使用される演算を加速化するように構成され得る。一実施形態において、行列アクセラレータ1923は、並列行列乗算及び/又は加算演算の特有のセットを実行するように明示的に構成される特定用途向け集積回路である。一実施形態において、行列アクセラレータ1923は、ワークロード間で更新され得る固定機能ロジックを提供するフィールドプログラマブルゲートアレイ(FPGA)である。行列アクセラレータ1923によって実行され得る行列演算のセットは、計算ブロック1924A~1924Nによって実行され得る演算に比して制限的であり得る。しかしながら、行列アクセラレータ1923は、計算ブロック1924A~1924Nに比して非常に高いスループットでこれらの演算を実行することができる。
【0228】
図20は、一実施形態による、命令パイプライン2000によって実行される行列演算2005の一実施形態を図示している。命令パイプライン2000は、限定ではないがドット積演算のような行列演算2005を実行するように構成され得る。2つのベクトルのドット積は、ベクトルの対応する成分の積の合計に等しいスカラ値である。ドット積を、以下の式(1)に示されるように計算することができる。
【数1】
【0229】
ドット積を、畳み込みニューラルネットワーク(CNN)の畳み込み演算で使用することができる。
図19は、ドット積を含む行列演算2005を使用する2次元(2D)畳み込みを図示している。2D畳み込みが図示されているが、N次元フィルタを使用して、N次元ボリュームに対してN次元畳み込みを実行することができる。受容野タイル2002は、入力ボリュームバッファ2004内の入力ボリュームの一部をハイライトする。入力ボリュームバッファをメモリ2030内に格納することができる。ドット行列演算2005を受容野タイル2002内のデータと畳み込みフィルタとの間で実行して、出力バッファ2006内のデータポイントを生成することができる。出力バッファ2006もメモリ2030内に格納することができる。メモリ2030は、
図19のシステムメモリ1912、GPGPUメモリ1918又は1つ以上のキャッシュメモリ1927、1930を含む、本明細書で説明されるメモリのいずれかとすることができる。
【0230】
出力バッファ2006内のデータポイントの組合せは、畳み込み演算によって生成される活性化マップを表す。活性化マップ内の各ポイントは、入力ボリュームバッファ2004にわたってそれぞれのフィールドタイルをスライドさせることによって生成される。アクティブマップデータを、活性化関数に入力することができ、出力活性化値を決定することができる。一実施形態において、入力ボリュームバッファ2004の畳み込みを、高レベル行列演算1705としてフレームワーク内で決定することができる。高レベル行列演算を、基本線形台数サブプログラム(BLAS)演算のような基本演算(primitive operation)を介して実行することができる。基本演算を、命令パイプライン2000によって実行されるハードウェア命令を介して加速化することができる。
【0231】
ハードウェア命令を加速化するために使用される命令パイプライン2000は、ハードウェア命令をフェッチ及び復号することができる命令フェッチ及びデコードユニット1921と、復号された命令を、計算ブロック1924A~1924B及び/又は行列アクセラレータ1923内の1つ以上の実行ユニットにスケジュールすることができるスケジューラコントローラ1922を含むことができる。一実施形態において、ハードウェア命令を、計算ブロック1924A~1924Nにスケジュールして、行列アクセラレータ1923にオフロードすることができる。行列演算2005を実行する1つ以上のハードウェア命令及び関連するデータを、メモリ2030に格納することができる。ハードウェア命令の出力を、メモリ2030内に格納することもできる。
【0232】
一実施形態において、行列アクセラレータ1923は、1つ以上のハードウェア命令を実行して、統一ドット積ロジック2008(DPロジック)を使用して行列演算2005を実行することができる。ドット積ロジック2008は、ドット積演算を実行するよう構成可能な、プログラム可能ハードウェアと固定機能ハードウェアの組合せを含むことができる。計算ブロック1924A~1924N内の機能ユニットもドット積演算を実行するように構成できるが、ドット積ロジック2008は、ドット積演算の限定的なサブセットを、計算ブロック1924A~1924Nに比して非常に高スループットで実行するように構成され得る。
【0233】
残差ニューラルネットワーク(ResNet)-50のような、CNNの行列乗算演算の処理中に、複数の層にわたる活性化メトリクス内にかなりの割合のスパースネス(例えばゼロ値)が存在する。実際、スパーシティは、いくつかの例では99.9%に到達する可能性がある。スパース行列のそのような高い割合は、冗長なメモリアクセス及び計算のバイパスを含む、最適化を処理するための機会を提供する。したがって、エネルギ消費は、不必要な処理をセーブすることによって低減され得る。
【0234】
一実施形態によると、行列アクセラレータ1923は、スパース行列の複数のタイルオペレーションをスキップ(又はバイパス)する能力を提供する、タイル化最適化を提供する。そのような実施形態において、行列データは、すべて「0」の最大数のタイルを含めることによって、スパースネスの利用を最大にするように選択されるサイズを有するタイルとして処理され得る。したがって、すべてゼロのタイルの数(例えばゼロタイルカウント)がより多いと、より多くの数の畳み込み行列演算をバイパスすることが可能になり、強化された性能につながる。
【0235】
一実施形態において、行列アクセラレータ1923は、入力行列データを受け取り、該データを検査してスパース性を決定する。そのような実施形態において、行列アクセラレータ1923は、決定されたスパース性に基づいて、スパースネス利用を最大にするようタイルサイズ(例えば4×4又は8×8)を選択する。
図21は、様々なタイル構成を有する入力行列データ2100の一実施形態を図示している。
図21に図示されるように、行列データ2100は、8×8タイル2110(例えば2110a及び2110b)及び4×4タイル2120(例えば2120a及び2120b)を含み得る。4×4及び8×8実装として図示されているが、他の実施形態は異なるタイルサイズを実装してよい。
【0236】
一実施形態によると、行列アクセラレータ1923は、受け取った行列データをサブブロック(例えば4×4サイズ)に変換し、処理すべきタイルサイズ(例えば4×4又は8×8)を選択するために連続するサブブロック(例えば4)を検査してデータのスパース性を決定する。そのような実施形態において、ビットマップデータが、行列データとともに受け取られ、畳み込み層にわたって出力行列を書き込むためにメモリ内に格納される。
図22Aは、行列データのサブブロックに対応するビットマップの一実施形態を図示している。
【0237】
一実施形態において、ビットマップ内の各ビット値(又はサブブロックビット)は、行列データのサブブロックに関連付けられる。更なる実施形態において、行列アクセラレータ1923は、各サブブロックビットを検査して、サブブロックがスパースデータ(例えばすべてゼロ)を含むかどうか判断する。そのような実施形態において、ビットは、関連するサブブロックがすべてゼロ値を含むときはいつでも高(例えば論理上1)に設定され、サブブロックが少なくとも1つの非ゼロ値を含むときはいつでも低(例えば論理上0)に設定される。
【0238】
更なる実施形態において、行列アクセラレータ1923は、4つの連続する(又は隣接する)サブブロックのブロックに関連付けられるサブブロックビットを検査して、処理されるべきタイルサイズを決定する。この実施形態において、行列アクセラレータ1923は、関連するサブブロックのビットの各々が高に設定される(例えばBit0-Bit3=1111)と判断すると、サブブロックのブロックについて8×8タイルサイズを選択する。したがって、8×8タイルサイズは、4つブロックすべてがすべてゼロのデータを有すると判断すると、選択される。8×8タイルサイズの選択の結果、タイルがすべてのスパースデータを含むので、演算をスキップすることにより出力行列データを生成することができる。
図22Bは、8×8タイルサイズとして処理されるべきサブブロックデータの一実施形態を図示している。
【0239】
更なる実施形態において、行列アクセラレータ1923は、サブブロックビットの少なくとも1つが高に設定されない(例えばBit0-Bit3=0111、1011、0001等)と判断すると、処理のために4×4タイルサイズを選択する。したがって、4×4タイルサイズは、サブブロックの少なくとも1つが非ゼロデータを有すると判断すると、ブロックを処理して出力データを生成するために選択される。
図22Cは、4×4タイルサイズとして処理されるべきサブブロックデータの一実施形態を図示している。一実施形態によると、上述のビットパターンチェックは、メモリへの書き込み中に実行され、したがって、メモリへ及びメモリからのデータ/行列の読み出し及び書き込みを伴わない。
【0240】
図23A及び
図23Bは、ブロック行列データを処理するように実装されるシストリックパイプラインの実施形態を図示している。
図23Aは、行列アクセラレータ192で実装されるシストリックパイプライン2300の実施形態を図示している。
図23Aに示されるように、シストリックパイプライン2300は、行列データの8×8シストリックアレイを処理する8つの段階を含む。各段階は、レジスタファイルレジスタにロードされた入力行列データを処理し、その結果、出力データが他のレジスタ内に格納されることになる(例えばr24[0_7]-r31[0_7])。
【0241】
一実施形態によると、シストリックパイプライン2300は、4×4タイルを処理するように構成され得る。そのような実施形態では、8段階のパイプライン2300は、4+4構成として実装されて、4×4タイルサイズを処理する。
図23Bは、4+4構成の実施形態を図示している。
図23Bに示されるように、パイプライン2300は、各々「4」段階を有する2つのシストリックパイプラインに変換される。一実施形態では、2つの「8×4」パイプライン出力と同等の出力を生成するために、更なる「追加の」演算が実装される。この実施形態では、パイプラインの変形は、サイクルごとに、最大6つの読み出し(又は「RD」)ポートと、最大2つの書き込み(又は「WR」)ポートを実装する。対角線の非ゼロのサブブロック又は単一の非スパースのブロックのみが生じる場合にのみ、4つより多くの「RD」ポート及び2つの「WR」ポートが必要とされる。
【0242】
図24は、タイル化最適化を処理するためのプロセスの一実施形態を示すフロー図である。処理ブロック2410において、入力行列データが受け取られる。処理ブロック2420において、行列データが、サブブロック(例えば4×4)に変換される。処理ブロック2430において、行列データに関連付けられるビットマップデータが取り出される。処理ブロック2440において、隣接するサブブロックのブロックのためのビットマップ内のサブブロックビットが検査される。
【0243】
決定ブロック2450において、サブブロックビットのすべてが高に設定されているかどうか(例えばBit0-Bit4=1111)に関する判断が行われる。すべて高に設定されている場合、処理ブロック2460において、隣接するサブブロックを表す行列データの第1タイルサイズが選択される(例えば8×8)。処理ブロック2470において、出力行列データが、スパースデータの8×8タイルを使用して生成される。結果として、出力行列データを生成するために実装される行列演算がバイパスされ得る。決定ブロック2450において、タイルビットのうちの1つ以上が高に設定されていないという判断が行われ、処理ブロック2480において、各ブロックのサイズを表す第2タイルサイズ(例えば4×4)が選択される。処理ブロック2470において、行列演算が4×4タイルに対して実行され、出力行列データを生成する。
【0244】
実施形態は、ペアレントボードを使用して相互接続される1つ以上のマイクロチップ又は集積回路、ハードワイヤードロジック、メモリデバイスによって格納されてマイクロプロセッサによって実行されるソフトウェア、ファームウェア、特定用途向け集積回路(ASIC)及び/又はフィールドプログラマブルゲートアレイ(FPGA)のうちのいずれか又は組合せとして実装され得る。「ロジック」という用語は、例として、ソフトウェア又はハードウェア及び/又はソフトウェアとハードウェアの組合せを含んでよい。
【0245】
実施形態は、例えばコンピュータプログラム製品として提供されてよく、コンピュータプログラム製品は、コンピュータ、コンピュータのネットワーク又は他の電子デバイスのような1つ以上の機械によって実行されると、該1つ以上の機械が本明細書で説明される実施形態による動作を実行することになり得る、機械実行可能な命令を有する1つ以上の機械読取可能な媒体を含み得る。機械読取可能媒体は、これらに限定されないが、フロッピーディスケット、光ディスク、CD-ROM(Compact Disc-Read Only Memories)及び磁気光ディスク、ROM、RAM、EPROM(Erasable Programmable Read Only Memories)、EEPROM(Electrically Erasable Programmable Read Only Memories)、磁気又は光カード、フラッシュメモリ又は機械実行可能命令を格納するのに適した他のタイプの媒体/機械読取可能媒体を含んでよい。
【0246】
さらに、実施形態はコンピュータプログラム製品としてダウンロードされてもよく、プログラムは、通信リンク(例えばモダン及び/又はネットワーク接続)を介して、搬送波又は他の伝播媒体内に具現化され、かつ/又はそれらによって変調される1つ以上のデータ信号により、リモートコンピュータ(例えばサーバ)から要求側コンピュータ(例えばクライアント)に転送されてよい。
【0247】
以下の項及び/又は例は、更なる実施形態又は例に関する。これらの例における詳細は、1つ以上の実施形態のどこでも使用されてよい。異なる実施形態又は例の様々な特徴は、様々な異なる用途に適合するよう、含まれるいくつかの特徴及び除外される他の特徴と様々に組み合わされてよい。例は、本明細書で説明される実施形態及び例よるハイブリッド通信を促進するための方法、方法の動作を実行するための手段、機械によって実行されると、方法の動作又は装置又はシステムを機械に実行させる命令を含む少なくとも1つの機械読取可能命令のような主題を含んでよい。
【0248】
いくつかの実施形態は、行列処理を容易にする装置であって、入力行列データを受け取り、該入力行列データを複数のサブブロックに変換し、該サブブロックの第1ブロックを検査して第1ブロックがスパースデータ(sparse data)を含むかどうかを判断し第1ブロックがスパースデータを含むと判断すると第1タイルサイズを選択し、第1タイルサイズに基づいて出力行列データを生成する、行列アクセラレータを備える装置を含む例1に関する。
【0249】
例2は、例1の主題を含み、第1タイルサイズは、第1ブロックのサイズを備える、。
【0250】
例3は、例1及び例2の主題を含み、行列アクセラレータは、第1ブロックがスパースデータを含まないと判断すると、第2タイルサイズを選択する。
【0251】
例4は、例1乃至例3の主題を含み、第2タイルサイズは、サブブロックのサイズを備える。
【0252】
例5は、例1乃至例4の主題を含み、行列アクセラレータは、各々が複数のサブブロックのうちの1つに関連付けられる、複数のサブブロックビットを有するビットマップデータを取り出す。
【0253】
例6は、例1乃至例5の主題を含み、第1ブロックを検査することは、第1ブロック内の各サブブロックに関連付けられるサブブロックビットを検査して、各サブブロックがスパースデータを含むかどうか判断することを含む。
【0254】
例7は、例1乃至例6の主題を含み、行列アクセラレータは、第1ブロック内の各サブブロックがスパースデータを含むと判断すると、第1タイルサイズを選択する。
【0255】
例8は、例1乃至例7の主題を含み、行列アクセラレータは、第1ブロック内の少なくとも1つのサブブロックがスパースデータを含まないと判断すると、第2タイルサイズを選択する。
【0256】
いくつかの実施形態は、行列処理を容易にする方法であって、入力行列データを受け取るステップと、入力行列データを複数のサブブロックに変換するステップと、サブブロックの第1ブロックを検査して第1ブロックがスパースデータを含むかどうかを判断するステップと、第1ブロックがスパースデータを含むと判断すると、第1タイルサイズを選択するステップと、第1タイルサイズに基づいて出力行列データを生成するステップとを含む方法を含む例9に関する。
【0257】
例10は、例9の主題を含み、第1タイルサイズは、第1ブロックのサイズを備える。
【0258】
例11は、例9及び例10の主題を含み、第1ブロックがスパースデータを含まないと判断すると、第2タイルサイズを選択するステップを更に含む。
【0259】
例12は、例9乃至例11の主題を含み、各々が複数のサブブロックのうちの1つに関連付けられる、複数のサブブロックビットを有するビットマップデータを取り出すステップを更に含む。
【0260】
例13は、例9乃至例12の主題を含み、第1ブロックを検査することは、第1ブロック内の各サブブロックに関連付けられるサブブロックビットを検査して、各サブブロックがスパースデータを含むかどうか判断することを含む。
【0261】
例14は、例9乃至13の主題を含み、第1ブロック内の各サブブロックがスパースデータを含むと判断すると、第1タイルサイズを選択するステップと、第1ブロック内の少なくとも1つのサブブロックがスパースデータを含まないと判断すると、第2タイルサイズを選択するステップとを更に含む。
【0262】
いくつかの実施形態は、グラフィクスプロセッサであって、入力行列データを受け取り、該入力行列データを複数のサブブロックに変換し、該サブブロックの第1ブロックを検査して第1ブロックがスパースデータを含むかどうかを判断し、第1ブロックがスパースデータを含むと判断すると第1タイルサイズを選択する行列アクセラレータと、第1タイルサイズに基づいて出力行列データを生成するシストリックパイプラインとを備える、グラフィクスプロセッサを含む、例15に関する。
【0263】
例16は、例15の主題を含み、第1タイルサイズは、第1ブロックのサイズを備える。
【0264】
例17は、例15及び例16の主題を含み、行列アクセラレータは、第1ブロックがスパースデータを含まないと判断すると、第2タイルサイズを選択し、第2タイルサイズは、サブブロックのサイズを備える。
【0265】
例18は、例15乃至例17の主題を含み、行列アクセラレータは、各々が複数のサブブロックのうちの1つに関連付けられる、複数のサブブロックビットを有するビットマップデータを取り出す。
【0266】
例19は、例15乃至例18の主題を含み、第1ブロックを検査することは、第1ブロック内の各サブブロックに関連付けられるサブブロックビットを検査して、各サブブロックがスパースデータを含むかどうか判断することを含む。
【0267】
例20は、例15乃至19の主題を含み、行列アクセラレータは、第1ブロック内の各サブブロックがスパースデータを含むと判断すると、第1タイルサイズを選択し、第1ブロック内の少なくとも1つのサブブロックがスパースデータを含まないと判断すると、第2タイルサイズを選択する。
【0268】
前述の説明及び図面は、限定的意味ではなく例示的な意味で解釈されるべきである。添付の特許請求の範囲で説明される本発明の広範な精神及び範囲から逸脱することなく、様々な修正及び変更が、本明細書で説明される実施形態に行われてよいことが当業者には理解されよう。