(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024041826
(43)【公開日】2024-03-27
(54)【発明の名称】ハイブリッド浮動小数点フォーマットのドット積累算命令を有するグラフィックスプロセッサ及びグラフィックス処理ユニット
(51)【国際特許分類】
G06T 15/06 20110101AFI20240319BHJP
G06T 1/20 20060101ALI20240319BHJP
G06F 17/16 20060101ALI20240319BHJP
G06F 9/38 20180101ALI20240319BHJP
【FI】
G06T15/06
G06T1/20 B
G06T1/20 C
G06F17/16 M
G06F9/38 370C
G06F9/38 370A
【審査請求】有
【請求項の数】16
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2023223711
(22)【出願日】2023-12-28
(62)【分割の表示】P 2022104265の分割
【原出願日】2020-03-14
(31)【優先権主張番号】62/819,337
(32)【優先日】2019-03-15
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】62/819,361
(32)【優先日】2019-03-15
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】62/819,435
(32)【優先日】2019-03-15
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】マイユラン、スブラマニアム
(72)【発明者】
【氏名】マーワハ、シュブラ
(72)【発明者】
【氏名】ガーグ、アシュトシュ
(72)【発明者】
【氏名】パル、スプラティム
(72)【発明者】
【氏名】パーラ、ジョージ
(72)【発明者】
【氏名】グラム、チャンドラ
(72)【発明者】
【氏名】ジョージ、ヴァルギース
(72)【発明者】
【氏名】スターキー、ダリン
(72)【発明者】
【氏名】ルエー、グエイ-ユアン
(57)【要約】 (修正有)
【課題】ハイブリッド浮動小数点フォーマットのドット積累算命令を有するグラフィックスプロセッサ及びグラフィックス処理ユニットを提供する。
【解決手段】並列プロセッサであるグラフィックスマルチプロセッサが、命令をディスパッチする命令ユニットと、命令ユニットに結合された処理リソースである機能ユニットやFPUなどと、を有する。処理リソースは、命令ユニットからドット積累算命令を受信して、Bfloat16数値(BF16)フォーマットを用いてドット積累算命令を処理する。
【選択図】
図2D
【特許請求の範囲】
【請求項1】
並列処理操作を行う複数の処理リソースを含む第1処理クラスタであって、前記並列処理操作は、レイトレーシング操作及び行列乗算演算を含み、前記複数の処理リソースは、データ相互接続を介して相互接続され、前記レイトレーシング操作を行うレイトレーシング回路及び前記行列乗算演算を行う第1行列処理回路を含む、第1処理クラスタと、
前記第1処理クラスタに結合された第2処理クラスタであって、前記第2処理クラスタは、前記行列乗算演算と関連した浮動小数点演算を行う浮動小数点ユニットを含む第2行列処理回路を含み、前記浮動小数点ユニットは、Bfloat16(BF16)フォーマットを用いて命令を処理するように構成され、乗算器は第2ソースオペランドと第3ソースオペランドとを乗算し、累算器は前記乗算器からの出力と第1ソースオペランドとを加算する、第2処理クラスタと、
を備えるグラフィックスプロセッサ。
【請求項2】
前記命令は前記乗算器に、前記BF16フォーマットを有する第2ソースオペランドと第3ソースオペランドとを乗算させ、前記累算器は前記乗算器からの出力と第1ソースオペランドとを加算する、請求項1に記載のグラフィックスプロセッサ。
【請求項3】
前記第1ソースオペランドは単精度浮動小数点フォーマットを有し、前記第2ソースオペランド及び前記第3ソースオペランドは前記BF16フォーマットを有する、請求項2に記載のグラフィックスプロセッサ。
【請求項4】
前記レイトレーシング回路は、前記第1処理クラスタの処理リソースから受信した要求に応答して前記レイトレーシング操作を行うように構成される、請求項1に記載のグラフィックスプロセッサ。
【請求項5】
前記第1行列処理回路及び前記第2行列処理回路のそれぞれは、シストリックアレイを含む、請求項1に記載のグラフィックスプロセッサ。
【請求項6】
グラフィックス処理ユニット(GPU)の命令キャッシュから第1命令をフェッチする段階であって、前記第1命令は、複数のオペランドを有する単一命令複数データ(SIMD)命令であり、前記複数のオペランドの少なくとも1つは、Bfloat16(BF16)数値フォーマットであり、前記複数のオペランドは、第1ソースオペランド、第2ソースオペランド、及び第3ソースオペランドを含み、前記第1ソースオペランドは単精度浮動小数点フォーマットを有し、前記第2ソースオペランド及び前記第3ソースオペランドは前記BF16数値フォーマットを有し、前記GPUは、前記命令キャッシュと結合された共有メモリと、前記共有メモリ及び前記命令キャッシュと結合された回路とを含む、フェッチする段階と、
前記第1命令に応答して、1ワープのスレッドを前記GPUの処理リソースにディスパッチする段階であって、前記処理リソースは、行列演算を加速させるハードウェアを含む第1コア、及び前記命令のスレッドを実行するように構成された第2コアを含む、ディスパッチする段階と、
前記第2コアを用いて前記第1命令の前記スレッドを実行する段階であって、前記第1命令の前記スレッドを実行する段階は、前記第2ソースオペランドの要素と前記第3ソースオペランドの要素とを乗算し、前記乗算の結果に前記第1ソースオペランドの要素を加算する段階を含む、実行する段階と
を備える方法。
【請求項7】
前記方法はさらに、前記第1コアを介して、前記BF16数値フォーマットを有する入力に対して並列行列乗算演算を行う段階を備え、前記並列行列乗算演算は、第2命令に応答して行われ、前記第2命令は、前記第1命令と同時に実行される、請求項6に記載の方法。
【請求項8】
前記処理リソースは、単一命令複数スレッド(SIMT)マルチプロセッサであり、前記方法は、前記1ワープのスレッドを前記SIMTマルチプロセッサにディスパッチする段階を備える、請求項7に記載の方法。
【請求項9】
前記SIMTマルチプロセッサは、レイトレーシング操作を加速させる第3コアを含み、前記方法はさらに、前記第3コアを介して、前記第1命令及び前記第2命令の実行と並行してレイトレーシング操作を加速させる段階を備える、請求項8に記載の方法。
【請求項10】
前記方法はさらに、前記SIMTマルチプロセッサの外部にあり且つ前記SIMTマルチプロセッサと結合されたテクスチャ処理回路を介して、テクスチャ処理操作を行う段階を備える、請求項8に記載の方法。
【請求項11】
前記方法はさらに、前記第1命令に基づいて、前記第2コアを介してドット積演算を行う段階を備える、請求項8に記載の方法。
【請求項12】
前記方法はさらに、第3命令に基づいて、前記第1コアを介してドット積演算を行う段階を備える、請求項8に記載の方法。
【請求項13】
命令を格納するように構成されるメモリデバイスと、
前記メモリデバイスと結合されたグラフィックスプロセッサであって、
並列処理操作を行う複数の処理リソースを含む第1処理クラスタであって、前記並列処理操作は、レイトレーシング操作及び行列乗算演算を含み、前記複数の処理リソースは、データ相互接続を介して相互接続され、前記レイトレーシング操作を行うレイトレーシング回路及び前記行列乗算演算を行う第1行列処理回路を含む、第1処理クラスタと、
前記第1処理クラスタに結合された第2処理クラスタであって、前記第2処理クラスタは、前記行列乗算演算と関連した浮動小数点演算を行う浮動小数点ユニットを含む第2行列処理回路を含み、前記浮動小数点ユニットは、Bfloat16(BF16)フォーマットを用いて命令を処理するように構成され、乗算器は第2ソースオペランドと第3ソースオペランドとを乗算し、累算器は前記乗算器からの出力と第1ソースオペランドとを加算する、第2処理クラスタと、
を有する前記グラフィックスプロセッサと、
を備えるデータ処理システム。
【請求項14】
前記命令は前記乗算器に、前記BF16フォーマットを有する第2ソースオペランドと第3ソースオペランドとを乗算させ、前記累算器は前記乗算器からの出力と第1ソースオペランドとを加算する、請求項13に記載のデータ処理システム。
【請求項15】
前記第1ソースオペランドは単精度浮動小数点フォーマットを有し、前記第2ソースオペランド及び前記第3ソースオペランドは前記BF16フォーマットを有する、請求項14に記載のデータ処理システム。
【請求項16】
前記レイトレーシング回路は、前記第1処理クラスタの処理リソースから受信した要求に応答して前記レイトレーシング操作を行うように構成される、請求項13に記載のデータ処理システム。
【発明の詳細な説明】
【技術分野】
【0001】
[関連出願の相互参照]
本願は、以下の仮出願に関連しており、米国特許法第119条(e)の定めにより、Abhishek Appuらによる2019年3月15日出願の「グラフィックス処理」と題する米国仮出願第62/819,337号(代理人整理番号AC0271-Z)、Lakshminarayanan Striramassarmaらによる2019年3月15日出願の「グラフィックスデータ処理」と題する同第62/819,435号(代理人整理番号AC0285-Z)、及びSubramaniam Maiyuranらによる2019年3月15日出願の「キャッシュアクセス遅延を減らすためのシステム及びキャッシュ分割方法」と題する同第62/819,361号(代理人整理番号AC0286-Z)による利益と優先権とを主張し、これらの仮出願全ての内容は参照により本明細書に組み込まれている。
【0002】
本開示は概してデータ処理に関連しており、より具体的には、汎用グラフィックス処理ユニットによるデータ処理に関連している。
【背景技術】
【0003】
現在の並列グラフィックスデータ処理には、グラフィックスデータに対して特定の操作を行うために開発されたシステム及び方法、例えば、線形補間、テセレーション、ラスタライズ、テクスチャマッピング、デプステストなどが含まれている。これまで、グラフィックスプロセッサが固定機能計算ユニットを用いてグラフィックスデータを処理していたが、最近では、グラフィックスプロセッサの一部がプログラム可能になっており、そのようなプロセッサは、頂点データ及びフラグメントデータを処理する幅広い操作をサポートすることができる。
【0004】
さらに、性能を高めるために、グラフィックスプロセッサは通常、グラフィックスパイプラインの様々な部分の全体にわたって可能な限り多くのグラフィックスデータを並列に処理しようと試みるパイプライン化などの処理技法を実装している。単一命令複数スレッド(SIMT)アーキテクチャを備えた並列グラフィックスプロセッサでは、グラフィックスパイプラインでの並列処理の量を最大化するように設計されている。SIMTアーキテクチャでは、処理効率を高めるために、並列スレッドのグループがプログラム命令を可能な限り頻繁に一緒に同期して実行しようと試みている。SIMTアーキテクチャのソフトウェア及びハードウェアの概要については、「CUDA Programming」(Shane Cook著、2013年)の第3章、37~51ページで確認できる。
【図面の簡単な説明】
【0005】
本実施形態の上述した各機能を詳細に理解できるような方式で、上記に簡単に要約した実施形態のより具体的な説明が、これらの実施形態を参照することにより行われてよく、その一部が添付図面に図示されている。しかしながら、これらの添付図面は代表的な実施形態を図示しているだけであり、したがって、その範囲の限定とみなすべきではないことに留意されたい。
【0006】
【
図1】本明細書で説明される実施形態の1つ又は複数の態様を実装するように構成されたコンピュータシステムを示すブロック図である。
【0007】
【
図2A】並列プロセッサの各コンポーネントを示している。
【
図2B】並列プロセッサの各コンポーネントを示している。
【
図2C】並列プロセッサの各コンポーネントを示している。
【
図2D】並列プロセッサの各コンポーネントを示している。
【0008】
【
図3A】グラフィックスマルチプロセッサ及びマルチプロセッサベースのGPUに関するブロック図である。
【
図3B】グラフィックスマルチプロセッサ及びマルチプロセッサベースのGPUに関するブロック図である。
【
図3C】グラフィックスマルチプロセッサ及びマルチプロセッサベースのGPUに関するブロック図である。
【0009】
【
図4A】複数のGPUが複数のマルチコアプロセッサに通信可能に結合されている例示的なアーキテクチャを示している。
【
図4B】複数のGPUが複数のマルチコアプロセッサに通信可能に結合されている例示的なアーキテクチャを示している。
【
図4C】複数のGPUが複数のマルチコアプロセッサに通信可能に結合されている例示的なアーキテクチャを示している。
【
図4D】複数のGPUが複数のマルチコアプロセッサに通信可能に結合されている例示的なアーキテクチャを示している。
【
図4E】複数のGPUが複数のマルチコアプロセッサに通信可能に結合されている例示的なアーキテクチャを示している。
【
図4F】複数のGPUが複数のマルチコアプロセッサに通信可能に結合されている例示的なアーキテクチャを示している。
【0010】
【
図5】グラフィックス処理パイプラインを示している。
【0011】
【
図6】機械学習のソフトウェアスタックを示している。
【0012】
【
図7】汎用グラフィックス処理ユニットを示している。
【0013】
【
図8】マルチGPUコンピュータ処理システムを示している。
【0014】
【
図9A】例示的なディープニューラルネットワークの各層を示している。
【
図9B】例示的なディープニューラルネットワークの各層を示している。
【0015】
【
図10】例示的な再帰型ニューラルネットワークを示している。
【0016】
【
図11】ディープニューラルネットワークの訓練及び展開を示している。
【0017】
【0018】
【
図13】訓練済みのモデルを用いた推論を行うのに好適な、例示的な推論用システムオンチップ(SoC)を示している。
【0019】
【0020】
【
図15A】コンピュータ処理システム及びグラフィックスプロセッサを示している。
【
図15B】コンピュータ処理システム及びグラフィックスプロセッサを示している。
【
図15C】コンピュータ処理システム及びグラフィックスプロセッサを示している。
【0021】
【
図16A】別のグラフィックスプロセッサのアーキテクチャに関するブロック図を示している。
【
図16B】別のグラフィックスプロセッサのアーキテクチャに関するブロック図を示している。
【
図16C】別のコンピュートアクセラレータのアーキテクチャに関するブロック図を示している。
【0022】
【
図17】グラフィックスプロセッサのグラフィックス処理エンジンに関するブロック図である。
【0023】
【
図18A】グラフィックスプロセッサコアで使用される処理要素のアレイを含むスレッド実行ロジックを示している。
【
図18B】グラフィックスプロセッサコアで使用される処理要素のアレイを含むスレッド実行ロジックを示している。
【0024】
【0025】
【
図20】グラフィックスプロセッサの命令フォーマットを示すブロック図である。
【0026】
【
図21】別のグラフィックスプロセッサのアーキテクチャに関するブロック図である。
【0027】
【
図22A】グラフィックスプロセッサコマンドフォーマットを示している。
【
図22B】グラフィックスプロセッサコマンドシーケンスを示している。
【0028】
【
図23】データ処理システム用の例示的なグラフィックスソフトウェアアーキテクチャを示している。
【0029】
【
図24A】IPコア開発システムを示すブロック図である。
【0030】
【
図24B】集積回路パッケージアセンブリの垂直断面図を示している。
【0031】
【
図24C】基板(例えば、ベースダイ)に接続された複数のハードウェアロジックチップレットのユニットを含むパッケージアセンブリを示している。
【0032】
【
図24D】交換可能なチップレットを含むパッケージアセンブリを示している。
【0033】
【
図25】例示的なシステムオンチップ集積回路を示すブロック図である。
【0034】
【
図26A】SoC内で用いる例示的なグラフィックスプロセッサを示すブロック図である。
【
図26B】SoC内で用いる例示的なグラフィックスプロセッサを示すブロック図である。
【0035】
【
図27】処理リソース(例えば、機能ユニット、FPU)でBF16フォーマットのDP2A命令を実行するための、1つの実施形態による回路2700に関するブロック図を示している。
【0036】
【
図28】FPUでBF16フォーマットのDP2A命令を実行するための、別の実施形態による回路2800に関するブロック図を示している。
【0037】
【
図29】FPUでBF16フォーマットのDP2A命令を実行するための、1つの実施形態による回路2900に関するブロック図を示している。
【発明を実施するための形態】
【0038】
グラフィックス処理ユニット(GPU)がホスト/プロセッサコアに通信可能に結合され、例えば、グラフィックス操作、機械学習操作、パターン分析操作、及び/又は汎用GPU(GPGPU)の様々な機能が加速される。GPUは、バス又は別の相互接続(例えば、PCIe又はNVLinkなどの高速相互接続)によって、ホストプロセッサ/コアに通信可能に結合されてよい。あるいは、GPUは、当該コアと同じパッケージ又はチップに統合されて、内蔵プロセッサバス/相互接続によって(つまり、パッケージ又はチップの内部にある)コアに通信可能に結合されてよい。GPUが接続される方式に関係なく、プロセッサコアは、作業記述子に含まれるコマンド/命令のシーケンスの形で、GPUに作業を割り当ててよい。GPUは次いで、これらのコマンド/命令を効率的に処理するのに専用回路/ロジックを用いる。
【0039】
以下の説明では、より十分な理解を提供するために、多数の具体的な詳細が記載されている。しかしながら、これらの具体的な詳細のうちの1つ又は複数がなくても、本明細書で説明される実施形態は実施され得ることが、当業者には明らかであろう。他の例では、本実施形態の詳細を不明瞭にしないように、よく知られた特徴を説明していない。
[システム概要]
【0040】
図1は、本明細書で説明される実施形態の1つ又は複数の態様を実装するように構成されたコンピュータ処理システム100を示すブロック図である。コンピュータ処理システム100は、1つ又は複数のプロセッサ102と、メモリハブ105を含み得る相互接続経路を介して通信するシステムメモリ104とを有する処理サブシステム101を含む。メモリハブ105は、チップセットコンポーネント内の別個のコンポーネントであってもよく、1つ又は複数のプロセッサ102に統合されてもよい。メモリハブ105は、通信リンク106を介してI/Oサブシステム111に結合されている。I/Oサブシステム111は、コンピュータ処理システム100が1つ又は複数の入力デバイス108から入力を受信するのを可能にし得るI/Oハブ107を含む。さらに、I/Oハブ107は、1つ又は複数のプロセッサ102に含まれ得るディスプレイコントローラが1つ又は複数の表示デバイス110Aに出力を供給するのを可能にできる。1つの実施形態において、I/Oハブ107に結合された1つ又は複数の表示デバイス110Aは、ローカルの、内蔵型の、又は埋め込み型の表示デバイスを含んでよい。
【0041】
処理サブシステム101は、例えば、バス又は他の通信リンク113を介してメモリハブ105に結合された1つ又は複数の並列プロセッサ112を含む。通信リンク113は、任意の数の規格ベースの通信リンク技術又はプロトコル(限定されることはないが、PCI Expressなど)のうちの1つであってもよく、ベンダ固有の通信インタフェース又は通信ファブリックであってもよい。1つ又は複数の並列プロセッサ112は、計算に重点を置いた、多数の処理コア及び/又は処理クラスタを含むことができる並列又はベクトル処理システム(多数のコアを統合した(many integrated core:MIC)プロセッサなど)を形成してよい。例えば、1つ又は複数の並列プロセッサ112は、I/Oハブ107を介して結合された1つ又は複数の表示デバイス110Aのうちの1つにピクセルを出力できるグラフィックス処理サブシステムを形成する。1つ又は複数の並列プロセッサ112は、1つ又は複数の表示デバイス110Bへの直接的な接続を可能にするディスプレイコントローラ及びディスプレイインタフェース(不図示)も含んでよい。
【0042】
I/Oサブシステム111では、システムストレージユニット114がI/Oハブ107に接続して、コンピュータ処理システム100にストレージメカニズムを提供できる。I/Oスイッチ116が、インタフェースメカニズムを提供するのに用いられ、I/Oハブ107と、このプラットフォームに統合され得るネットワークアダプタ118及び/又は無線ネットワークアダプタ119などの他のコンポーネントと、1つ又は複数のアドインデバイス120を介して追加され得る様々な他のデバイスとの接続を可能にしてよい。アドインデバイス120は、例えば、1つ又は複数の外付けグラフィックスプロセッサデバイス及び/又はコンピュートアクセラレータも含んでよい。ネットワークアダプタ118は、イーサネット(登録商標)アダプタであっても、別の有線ネットワークアダプタであってもよい。無線ネットワークアダプタ119は、Wi-Fi(登録商標)ネットワークデバイス、Bluetooth(登録商標)ネットワークデバイス、近距離無線通信(NFC)ネットワークデバイス、あるいは1つ又は複数の無線機を含む他のネットワークデバイスのうちの1つ又は複数を含んでよい。
【0043】
コンピュータ処理システム100は、USBポート接続又は他のポート接続、光学ストレージドライブ、及びビデオキャプチャデバイスなどを含む明示的に示されていない他のコンポーネントを含んでよく、I/Oハブ107にも接続されてよい。
図1の様々なコンポーネントを相互接続する通信経路が、PCI(Peripheral Component Interconnect)ベースのプロトコル(例えば、PCI-Express)などの任意の好適なプロトコル、あるいはNV-Link高速相互接続などの任意の他のバス又はポイントツーポイント通信インタフェース及び/若しくはプロトコル、又は当技術分野で知られている相互接続プロトコルを用いて実装されてよい。
【0044】
1つ又は複数の並列プロセッサ112は、グラフィックス及び映像の処理に最適化された回路(例えば、ビデオ出力回路を含む)を組み込んでよく、グラフィックス処理ユニット(GPU)を構成する。代替的に又は追加的に、1つ又は複数の並列プロセッサ112は、汎用処理に最適化された回路を組み込んでよく、それと共に、本明細書でより詳細に説明される基礎的な計算アーキテクチャを保持する。コンピュータ処理システム100の各コンポーネントは、単一の集積回路上にある1つ又は複数の他のシステム要素と統合されてよい。例えば、1つ又は複数の並列プロセッサ112、メモリハブ105、プロセッサ102、及びI/Oハブ107は、システムオンチップ(SoC)型集積回路に統合されてよい。あるいは、コンピュータ処理システム100の各コンポーネントは、単一のパッケージに統合されて、システムインパッケージ(SIP)構成を形成してよい。1つの実施形態では、コンピュータ処理システム100のコンポーネントの少なくとも一部がマルチチップモジュール(MCM)に統合されてよく、当該マルチチップモジュールは、他のマルチチップモジュールと相互接続されてモジュール式コンピュータ処理システムになり得る。
【0045】
本明細書に示されるコンピュータ処理システム100は例示であり、変形及び修正があり得ることが理解されるであろう。ブリッジの数及び配置、プロセッサ102の数、並びに並列プロセッサ112の数を含む接続トポロジは、要求通りに修正されてよい。例えば、システムメモリ104は、ブリッジを通じてではなく、プロセッサ102に直接的に接続されてよく、他のデバイスはメモリハブ105及びプロセッサ102を介してシステムメモリ104と通信する。他の代替トポロジにおいて、並列プロセッサ112は、メモリハブ105ではなくI/Oハブ107に、あるいは1つ又は複数のプロセッサ102のうちの1つに直接的に接続される。他の実施形態において、I/Oハブ107及びメモリハブ105は単一のチップに統合されてよい。プロセッサ102の2つ又はそれより多くのセットを複数のソケットを介して取り付けることも可能であり、これらのソケットは、並列プロセッサ112の2つ又はそれより多くのインスタンスと結合できる。
【0046】
本明細書に示される特定のコンポーネントの一部は任意的であり、コンピュータ処理システム100の全ての実装形態に含まれなくてもよい。例えば、任意の数のアドインカード又は周辺機器がサポートされてもよく、いくつかのコンポーネントが除外されてもよい。さらに、いくつかのアーキテクチャが、
図1に示すものと同様のコンポーネントに異なる用語を用いてもよい。例えば、メモリハブ105は、いくつかのアーキテクチャではノースブリッジと呼ばれることがあり、I/Oハブ107はサウスブリッジと呼ばれることがある。
【0047】
図2Aは、並列プロセッサ200を示している。並列プロセッサ200は、本明細書で説明されるGPU又はGPGPUなどであってよい。並列プロセッサ200の様々なコンポーネントは、プログラム可能型プロセッサ、特定用途向け集積回路(ASIC)、又はフィールドプログラマブルゲートアレイ(FPGA)などの1つ又は複数の集積回路デバイスを用いて実装されてよい。図示されている並列プロセッサ200は、
図1に示す並列プロセッサ112であっても、そのうちの1つであってもよい。
【0048】
並列プロセッサ200は並列処理ユニット202を含む。並列処理ユニットは、並列処理ユニット202の他のインスタンスを含む他のデバイスとの通信を可能にするI/Oユニット204を含む。I/Oユニット204は、他のデバイスに直接的に接続されてよい。例えば、I/Oユニット204は、メモリハブ105などのハブ又はスイッチインタフェースの使用を介して他のデバイスと接続する。メモリハブ105とI/Oユニット204との接続によって、通信リンク113が形成される。並列処理ユニット202において、I/Oユニット204はホストインタフェース206及びメモリクロスバー216と接続する。ホストインタフェース206は処理操作の実行を対象とするコマンドを受信し、メモリクロスバー216はメモリ操作の実行を対象とするコマンドを受信する。
【0049】
ホストインタフェース206がI/Oユニット204を介してコマンドバッファを受信すると、ホストインタフェース206は、これらのコマンドを実行するための作業操作をフロントエンド208に送ることができる。1つの実施形態において、フロントエンド208は、コマンド又は他の作業項目を処理クラスタアレイ212に配分するように構成されているスケジューラ210と結合する。スケジューラ210は、処理クラスタアレイ212の処理クラスタにタスクが配分される前に必ず、処理クラスタアレイ212が適切に構成され且つ有効状態になるようにする。スケジューラ210は、マイクロコントローラ上で実行するファームウェアロジックによって実装されてよい。マイクロコントローラで実装されるスケジューラ210は、複雑なスケジューリングと作業配分操作とを粗粒度及び細粒度で行い、処理アレイ212上で実行しているスレッドの速やかなプリエンプション及びコンテキスト切り替えを可能にするように構成可能である。ホストソフトウェアは、複数のグラフィックス処理ドアベルのうちの1つを介して、処理アレイ212に対してスケジューリングするワークロードを確かめられることが好ましい。ワークロードは次に、スケジューラマイクロコントローラ内のスケジューラ210のロジックにより、処理アレイ212全体に自動的に配分されてよい。
【0050】
処理クラスタアレイ212は、「N個」までの処理クラスタ(例えば、クラスタ214A、クラスタ214B、…、クラスタ214N)を含んでよい。処理クラスタアレイ212の各クラスタ214A~214Nは、多数の同時スレッドを実行できる。スケジューラ210は、プログラム又は計算のタイプごとに発生するワークロードに応じて変わり得る様々なスケジューリングアルゴリズム及び/又は作業配分アルゴリズムを用いて、処理クラスタアレイ212のクラスタ214A~214Nに作業を割り当てることができる。スケジューリングは、スケジューラ210によって動的に処理されてもよく、処理クラスタアレイ212による実行のために構成されたプログラムロジックのコンパイル時に、コンパイラロジックによって部分的に支援されてもよい。必要に応じて、処理クラスタアレイ212の個々のクラスタ214A~214Nが、異なるタイプのプログラムを処理するために、又は異なるタイプの計算を行うために割り当てられてよい。
【0051】
処理クラスタアレイ212は、様々なタイプの並列処理操作を行うように構成されてよい。例えば、クラスタアレイ212は、汎用並列コンピュート操作を行うように構成されている。例えば、処理クラスタアレイ212は、ビデオデータ及び/又はオーディオデータのフィルタリング、物理演算を含むモデリング操作の実行、及びデータ変換の実行を含む処理タスクを実行するロジックを含んでよい。
【0052】
処理クラスタアレイ212は、並列グラフィックス処理操作を行うように構成されている。並列プロセッサ200がグラフィックス処理操作を行うように構成されているそのような実施形態において、処理クラスタアレイ212は、そのようなグラフィックス処理操作の実行をサポートする別のロジックを含んでよく、そのようなロジックには、限定されることはないが、テクスチャ操作を行うテクスチャサンプリングロジック、並びにテセレーションロジック及び他の頂点処理ロジックが含まれる。さらに、処理クラスタアレイ212は、グラフィックス処理関連のシェーダプログラムを実行するように構成されてよく、そのようなシェーダプログラムには、限定されることはないが、頂点シェーダ、テセレーションシェーダ、ジオメトリシェーダ、及びピクセルシェーダなどがある。並列処理ユニット202は、I/Oユニット204を介して処理のために、システムメモリからデータを転送できる。処理する際、転送されたデータは処理中にオンチップメモリ(例えば、並列プロセッサメモリ222)に格納され、次いでシステムメモリにライトバックされてよい。
【0053】
並列処理ユニット202を用いてグラフィックス処理を行う実施形態において、スケジューラ210は、処理ワークロードをほぼ等しいサイズの複数のタスクに分割して、処理クラスタアレイ212の複数のクラスタ214A~214Nにグラフィックス処理操作をより効果的に配分できるように構成されてよい。これらの実施形態のいくつかでは、処理クラスタアレイ212の一部が、異なるタイプの処理を行うように構成されてよい。例えば、レンダリングされた表示用の画像を生成するために、第1部分が頂点シェーディング及びトポロジ生成を行うように構成されてよく、第2部分がテセレーション及びジオメトリシェーディングを行うように構成されてよく、第3部分がピクセルシェーディング又は他のスクリーン空間操作を行うように構成されてよい。クラスタ214A~214Nのうちの1つ又は複数によって生成される中間データがバッファに格納され、当該中間データがさらなる処理のためにクラスタ214A~214Nに送られることを可能にしてよい。
【0054】
動作に際して、処理クラスタアレイ212は、実行される処理タスクをスケジューラ210を介して受信でき、スケジューラ210は、処理タスクを定めるコマンドをフロントエンド208から受信する。グラフィックス処理操作では、処理タスクが、処理されるデータ(例えば、サーフェス(パッチ)データ、プリミティブデータ、頂点データ、及び/又はピクセルデータ)のインデックス、並びにデータがどのように処理されるのか(例えば、どのプログラムが実行されるのか)を定める状態パラメータ及びコマンドを含んでよい。スケジューラ210は、当該タスクに対応するインデックスをフェッチするように構成されてもよく、このインデックスをフロントエンド208から受信してもよい。フロントエンド208は、受信コマンドバッファ(例えば、バッチバッファ、プッシュバッファなど)により指定されるワークロードが開始される前に必ず、処理クラスタアレイ212が有効状態になるように構成されるように構成されてよい。
【0055】
並列処理ユニット202の1つ又は複数のインスタンスのそれぞれは、並列プロセッサメモリ222と結合できる。並列プロセッサメモリ222は、メモリクロスバー216を介してアクセスされてよく、当該メモリクロスバーは処理クラスタアレイ212及びI/Oユニット204からメモリ要求を受信できる。メモリクロスバー216は、並列プロセッサメモリ222にメモリインタフェース218を介してアクセスできる。メモリインタフェース218は、それぞれが並列プロセッサメモリ222の一部(例えば、メモリユニット)に結合できる複数のパーティションユニット(例えば、パーティションユニット220A、パーティションユニット220B、…、パーティションユニット220N)を含んでよい。第1パーティションユニット220Aが、対応する第1メモリユニット224Aを有し、第2パーティションユニット220Bが、対応するメモリユニット224Bを有し、第Nパーティションユニット220Nが、対応する第Nメモリユニット224Nを有するように、パーティションユニット220A~220Nの数はメモリユニットの数と等しくなるように構成されてよい。他の実施形態において、パーティションユニット220A~220Nの数は、メモリデバイスの数と等しくなくてもよい。
【0056】
メモリユニット224A~224Nは、ダイナミックランダムアクセスメモリ(DRAM)、又はグラフィックスダブルデータレート(GDDR)メモリを含む同期式グラフィックスランダムアクセスメモリ(SGRAM)などのグラフィックスランダムアクセスメモリを含む様々なタイプのメモリデバイスを含んでよい。必要に応じて、メモリユニット224A~224Nは、限定されることはないが、高帯域幅メモリ(HBM)を含む3Dスタックメモリも含んでよい。当業者であれば、メモリユニット224A~224Nの具体的な実装形態は様々であってよく、様々な従来方式のうちの1つから選択されてよいことを理解するであろう。フレームバッファ又はテクスチャマップなどのレンダーターゲットがメモリユニット224A~224Nの全体に格納され、パーティションユニット220A~220Nが、各レンダーターゲットの一部を並列に書き込み、並列プロセッサメモリ222の利用可能な帯域幅を効率的に用いることを可能にしてよい。いくつかの実施形態では、並列プロセッサメモリ222のローカルインスタンスが、ローカルキャッシュメモリと併用してシステムメモリを利用する統合メモリ方式を優先して除外されてよい。
【0057】
必要に応じて、処理クラスタアレイ212のクラスタ214A~214Nのうちのいずれか1つが、並列プロセッサメモリ222内のメモリユニット224A~224Nのうちのいずれかに書き込まれるデータを処理する能力を有する。メモリクロスバー216は、各クラスタ214A~214Nの出力を任意のパーティションユニット220A~220N又は別のクラスタ214A~214Nに転送するように構成されてよく、このパーティションユニット又は別のクラスタは、出力に対して別の処理操作を行うことができる。各クラスタ214A~214Nは、メモリクロスバー216を通じてメモリインタフェース218と通信して、様々な外付けメモリデバイスとの間で読み出し又は書き込みを行うことができる。メモリクロスバー216を有する実施形態のうちの1つにおいて、メモリクロスバー216は、I/Oユニット204と通信するためのメモリインタフェース218への接続と、並列プロセッサメモリ222のローカルインスタンスへの接続とを有し、異なる処理クラスタ214A~214N内の処理ユニットが並列処理ユニット202のローカルではないシステムメモリ又は他のメモリと通信することを可能にする。一般に、メモリクロスバー216は、例えば、クラスタ214A~214Nとパーティションユニット220A~220Nとの間のトラフィックストリームを分離するのに仮想チャネルを用いることができてよい。
【0058】
並列プロセッサ200には並列処理ユニット202の1つのインスタンスが示されているが、並列処理ユニット202の任意の数のインスタンスが含まれてよい。例えば、並列処理ユニット202の複数のインスタンスを1つのアドインカードに設けることができ、複数のアドインカードを相互接続することができる。並列処理ユニット202の個々のインスタンスは、個々のインスタンスが異なる数の処理コア、異なる量のローカル並列プロセッサメモリ、及び/又は他の構成上の違いを有していても、相互に連動するように構成されてよい。必要に応じて、並列処理ユニット202の一部のインスタンスが他のインスタンスよりも高精度の浮動小数点ユニット264を含んでよい。並列処理ユニット202又は並列プロセッサ200の1つ又は複数のインスタンスを組み込むシステムが、様々な構成及びフォームファクタで実現されてよく、このシステムには、限定されることはないが、デスクトップ、ラップトップ、ハンドヘルド型パーソナルコンピュータ、サーバ、ワークステーション、ゲームコンソール、及び/又は埋め込みシステムが含まれる。
【0059】
図2Bは、パーティションユニット220のブロック図である。パーティションユニット220は、
図2Aに示すパーティションユニット220A~220Nのうちの1つのインスタンスであってよい。図示されているように、パーティションユニット220は、L2キャッシュ221、メタデータ(例えば、コントロールサーフェスアップデート、圧縮値)を格納するメタデータキャッシュ224、フレームバッファインタフェース225、及びROP226(ラスタ操作ユニット)を含む。L2キャッシュ221は、メモリクロスバー216及びROP226から受信するロード操作及びストア操作を行うように構成された読み出し/書き込みキャッシュである。読み出しミス及び緊急のライトバック要求が、処理のためにL2キャッシュ221によってフレームバッファインタフェース225に出力される。これらのアップデートも、処理のためにフレームバッファインタフェース225を介してフレームバッファに送信されてよい。1つの実施形態において、フレームバッファインタフェース225は、
図2Aに示すメモリユニット224A~224Nなどの、並列プロセッサメモリ内の(例えば、並列プロセッサメモリ222内の)複数のメモリユニットのうちの1つとインタフェースで接続する。パーティションユニット220も、追加的に又は代替的に、並列プロセッサメモリ内の複数のメモリユニットのうちの1つとメモリコントローラ(不図示)を介してインタフェースで接続してよい。
【0060】
グラフィックスアプリケーションでは、ROP226は、ステンシル、zテスト、及びブレンディングなどのラスタ操作を行う処理ユニットである。ROP226は次いで、グラフィックスメモリに格納されている処理済みのグラフィックスデータを出力する。いくつかの実施形態において、ROP226は、メモリに書き込まれるデプスデータ及びカラーデータを圧縮し且つメモリから読み出されたデプスデータ又はカラーデータを復元する圧縮ロジックを含む。圧縮ロジックは、複数の圧縮アルゴリズムのうちの1つ又は複数を利用する可逆圧縮ロジックであってよい。ROP226により行われる圧縮のタイプは、圧縮されるデータの統計的特性に基づいて異なってよい。例えば、1つの実施形態では、デプスデータ及びカラーデータに対してデルタカラー圧縮がタイルごとに行われる。
【0061】
ROP226は、パーティションユニット220に含まれる代わりに、各処理クラスタ(例えば、
図2Aのクラスタ214A~214N)に含まれてもよい。そのような実施形態では、ピクセルデータの読み出し要求及び書き込み要求が、ピクセルフラグメントデータの代わりに、メモリクロスバー216によって送られる。処理済みのグラフィックスデータは、
図1に示す1つ又は複数の表示デバイス110のうちの1つなどの表示デバイスに表示され、プロセッサ102によるさらなる処理のために送られても、
図2Aに示す並列プロセッサ200内の複数の処理エンティティのうちの1つによるさらなる処理のために送られてもよい。
【0062】
図2Cは、並列処理ユニット内の処理クラスタ214のブロック図である。例えば、処理クラスタは、
図2Aに示す処理クラスタ214A~214Nのうちの1つのインスタンスである。処理クラスタ214は、多くのスレッドを並列に実行するように構成されてよく、「スレッド」という用語は、特定のセットの入力データに対して実行される特定のプログラムのインスタンスを意味する。必要に応じて、複数の独立した命令ユニットを提供するのではなく、単一命令複数データ(SIMD)型の命令発行技法が、多数のスレッドの並列実行をサポートするのに用いられてよい。あるいは、複数の処理クラスタのそれぞれにある処理エンジンのセットに命令を発行するように構成された共通の命令ユニットを用いて、単一命令複数スレッド(SIMT)技法が、通常、同期した多数のスレッドの並列実行をサポートするのに用いられてよい。全ての処理エンジンが通常全く同じ命令を実行するSIMD実行方式とは異なり、SIMT実行では、個々のスレッドが所与のスレッドプログラムによって分岐実行パスをより容易にたどることが可能になる。当業者であれば、SIMD処理方式が、SIMT処理方式の機能的サブセットを表していることを理解するであろう。
【0063】
処理クラスタ214の操作が、処理タスクをSIMT並列プロセッサに配分するパイプラインマネージャ232を介して制御されてよい。パイプラインマネージャ232は、
図2Aのスケジューラ210から命令を受信し、これらの命令の実行をグラフィックスマルチプロセッサ234及び/又はテクスチャユニット236を介して管理する。図示されたグラフィックスマルチプロセッサ234は、SIMT並列プロセッサの例示的なインスタンスである。しかしながら、異なるアーキテクチャの様々なタイプのSIMT並列プロセッサが、処理クラスタ214に含まれてもよい。グラフィックスマルチプロセッサ234の1つ又は複数のインスタンスが、処理クラスタ214に含まれてもよい。グラフィックスマルチプロセッサ234はデータを処理することができ、データクロスバー240が、処理済みのデータを、他のシェーダユニットを含む複数の考え得る送信先のうちの1つに配分するのに用いられてよい。パイプラインマネージャ232は、データクロスバー240を介して配分される処理済みのデータの送信先を指定することで、処理済みのデータの配分を容易にすることができる。
【0064】
処理クラスタ214内の各グラフィックスマルチプロセッサ234は、全く同じセットの機能実行ロジック(例えば、算術論理ユニット、ロードストアユニットなど)を含んでよい。機能実行ロジックは、前の命令が完了する前に新たな命令を発行できるパイプライン方式で構成されてよい。機能実行ロジックは、整数及び浮動小数点算術、比較演算、ブール演算、ビットシフト、及び様々な代数関数の計算を含む様々な演算をサポートする。同じ機能ユニットのハードウェアを活用すれば、様々な演算を行うことができ、また、機能ユニットのあらゆる組み合わせが存在し得る。
【0065】
処理クラスタ214に送られる命令は、スレッドを構成する。並列処理エンジンのセット全体で実行するスレッドのセットが、スレッドグループである。スレッドグループは、異なる入力データに対して同じプログラムを実行する。スレッドグループ内の各スレッドは、グラフィックスマルチプロセッサ234内の異なる処理エンジンに割り当てられてよい。スレッドグループは、グラフィックスマルチプロセッサ234内の処理エンジンの数よりも少ないスレッドを含んでよい。スレッドグループが処理エンジンの数よりも少ないスレッドを含んでいる場合、これらの処理エンジンのうちの1つ又は複数が、スレッドグループの処理サイクル中に休止していてもよい。スレッドグループは、グラフィックスマルチプロセッサ234内の処理エンジンの数より多くのスレッドも含んでよい。スレッドグループがグラフィックスマルチプロセッサ234内の処理エンジンの数より多くのスレッドを含む場合、連続したクロックサイクルにわたって処理を実行できる。必要に応じて、グラフィックスマルチプロセッサ234で複数のスレッドグループが同時に実行されてもよい。
【0066】
グラフィックスマルチプロセッサ234は、ロード操作及びストア操作を行うための内蔵キャッシュメモリを含んでよい。必要に応じて、グラフィックスマルチプロセッサ234は内蔵キャッシュなしで済ませ、処理クラスタ214内のキャッシュメモリ(例えば、L1キャッシュ248)を用いることができる。各グラフィックスマルチプロセッサ234は、全ての処理クラスタ214に共有され且つスレッド間でデータを転送するのに用いられ得る、パーティションユニット(例えば、
図2Aのパーティションユニット220A~220N)内のL2キャッシュにもアクセスできる。グラフィックスマルチプロセッサ234は、オフチップグローバルメモリにもアクセスしてよく、このメモリはローカル並列プロセッサメモリ及び/又はシステムメモリのうちの一方又は両方を含んでよい。並列処理ユニット202の外部にある任意のメモリが、グローバルメモリとして用いられてよい。処理クラスタ214がグラフィックスマルチプロセッサ234の複数のインスタンスを含む実施形態では、L1キャッシュ248に格納され得る共通の命令及びデータを共有できる。
【0067】
各処理クラスタ214は、仮想アドレスを物理アドレスにマッピングするように構成されたMMU(メモリ管理ユニット)245を含んでよい。他の実施形態では、MMU245の1つ又は複数のインスタンスが、
図2Aのメモリインタフェース218に存在してよい。MMU245は、仮想アドレスをタイルの物理アドレス及び必要に応じてキャッシュラインインデックスにマッピングするのに用いられるページテーブルエントリ(PTE)のセットを含む。MMU245は、グラフィックスマルチプロセッサ234又はL1キャッシュ又は処理クラスタ214に存在し得るアドレス変換ルックアサイドバッファ(TLB)若しくはキャッシュを含んでよい。物理アドレスが処理されて、サーフェスデータアクセスの局所性が配分され、パーティションユニット間で効率的なリクエストインタリーブを可能にする。キャッシュラインインデックスは、キャッシュラインの要求がヒットなのかミスなのかを判定するのに用いられてよい。
【0068】
グラフィックスアプリケーション及びコンピュータ処理アプリケーションにおいて、処理クラスタ214は、テクスチャマッピング操作を行うための、例えば、テクスチャサンプル位置の決定、テクスチャデータの読み出し、及びテクスチャデータのフィルタリングを行うためのテクスチャユニット236に各グラフィックスマルチプロセッサ234が結合されるように構成され得る。テクスチャデータは、内蔵テクスチャL1キャッシュ(不図示)から、又はいくつかの実施形態ではグラフィックスマルチプロセッサ234内のL1キャッシュから読み出され、必要に応じて、L2キャッシュ、ローカル並列プロセッサメモリ、又はシステムメモリからフェッチされる。各グラフィックスマルチプロセッサ234は、処理済みのタスクをデータクロスバー240に出力し、さらなる処理のために処理済みのタスクを別の処理クラスタ214に提供するか、又は処理済みのタスクをメモリクロスバー216を介してL2キャッシュ、ローカル並列プロセッサメモリ、又はシステムメモリに格納する。プリROP242(プリラスタ操作ユニット)が、グラフィックスマルチプロセッサ234からデータを受信し、データをROPユニットに送るように構成されており、ROPユニットは、本明細書で説明したパーティションユニット(例えば、
図2Aのパーティションユニット220A~220N)と共に配置されてよい。プリROP242ユニットは、カラーブレンディングの最適化を行い、ピクセルカラーデータを編成し、アドレス変換を行うことができる。
【0069】
本明細書で説明されるコアアーキテクチャは例示であり、変形及び修正があり得ることが理解されるであろう。任意の数の処理ユニット、例えば、グラフィックスマルチプロセッサ234、テクスチャユニット236、プリROP242などが、処理クラスタ214に含まれてよい。さらに、1つの処理クラスタ214しか示されていないが、本明細書で説明される並列処理ユニットは、処理クラスタ214の任意の数のインスタンスを含んでよい。必要に応じて、各処理クラスタ214は、別個の異なる処理ユニット、L1キャッシュなどを用いて、他の処理クラスタ214から独立して動作するように構成されてよい。
【0070】
図2Dは、グラフィックスマルチプロセッサ234の一例を示しており、ここでは、グラフィックスマルチプロセッサ234は処理クラスタ214のパイプラインマネージャ232と結合する。グラフィックスマルチプロセッサ234は、限定されることはないが、命令キャッシュ252、命令ユニット254、アドレスマッピングユニット256、レジスタファイル258、1つ又は複数の汎用グラフィックス処理ユニット(GPGPU)コア262、及び1つ又は複数のロード/ストアユニット266を含む実行パイプラインを有する。GPGPUコア262及びロード/ストアユニット266は、メモリ及びキャッシュ相互接続268を介して、キャッシュメモリ272及び共有メモリ270に結合されている。グラフィックスマルチプロセッサ234はさらに、行列演算及び/又はレイトレーシング操作を加速させるハードウェアロジックを含むテンソル及び/又はレイトレーシングコア263を含んでよい。
【0071】
命令キャッシュ252は、パイプラインマネージャ232から、実行する一連の命令を受信してよい。これらの命令は命令キャッシュ252にキャッシュされ、命令ユニット254による実行のためにディスパッチされる。命令ユニット254は、スレッドグループ(例えば、ワープ)として命令をディスパッチでき、スレッドグループの各スレッドがGPGPUコア262内の様々な実行ユニットに割り当てられる。命令は、統合アドレス空間内のアドレスを指定することで、ローカルアドレス空間、共有アドレス空間、又はグローバルアドレス空間のうちのいずれかにアクセスできる。アドレスマッピングユニット256は、統合アドレス空間内のアドレスを、ロード/ストアユニット266がアクセスできる別のメモリアドレスに変換するのに用いられてよい。
【0072】
レジスタファイル258は、グラフィックスマルチプロセッサ234の機能ユニットにレジスタのセットを提供する。レジスタファイル258は、グラフィックスマルチプロセッサ234の機能ユニット(例えば、GPGPUコア262、ロード/ストアユニット266)のデータパスに接続されたオペランド用一時記憶を提供する。レジスタファイル258は、各機能ユニットがレジスタファイル258の専用部分に割り当てられるように、各機能ユニットに分割されてよい。例えば、レジスタファイル258は、グラフィックスマルチプロセッサ234が実行する様々なワープに分割されてよい。
【0073】
これらのGPGPUコア262はそれぞれ、グラフィックスマルチプロセッサ234の命令を実行するのに用いられる機能ユニット(例えば、浮動小数点ユニット264(FPU)及び/又は整数算術論理ユニット(ALU))を含んでよい。いくつかの実装形態において、GPGPUコア262は、別の場合にはテンソル及び/又はレイトレーシングコア263内に存在し得るハードウェアロジックを含んでよい。これらのGPGPUコア262はアーキテクチャが同様であってもよく、アーキテクチャが異なっていてもよい。例えば、1つの実施形態では、GPGPUコア262の第1部分が単精度FPU及び整数ALUを含み、GPGPUコアの第2部分が倍精度FPUを含む。必要に応じて、FPUは、浮動小数点算術用のIEEE754-2008規格を実装できる、又は可変精度の浮動小数点算術を可能にできる。グラフィックスマルチプロセッサ234はさらに、長方形コピー操作又はピクセルブレンディング操作などの特定の機能を行う1つ又は複数の固定機能ユニット又は特殊機能ユニットを含んでよい。複数のGPGPUコアのうちの1つ又は複数も、固定機能ロジック又は特殊機能ロジックを含んでよい。
【0074】
GPGPUコア262は、データの複数のセットに対して単一命令を実行できるSIMDロジックを含んでよい。必要に応じて、GPGPUコア262は、SIMD4命令、SIMD8命令、及びSIMD16命令を物理的に実行でき、SIMD1命令、SIMD2命令、及びSIMD32命令を論理的に実行できる。GPGPUコア用のSIMD命令は、コンパイル時にシェーダコンパイラによって生成されてもよく、単一プログラム複数データ(SPMD)アーキテクチャ又はSIMTアーキテクチャ用に記述されコンパイルされたプログラムを実行するときに自動的に生成されてもよい。SIMT実行モデル用に構成されたプログラムの複数のスレッドが、1つのSIMD命令によって実行されてよい。例えば、1つの実施形態では、同じ又は同様の操作を行う8個のSIMTスレッドが、1つのSIMD8論理ユニットによって並列に実行されてよい。
【0075】
メモリ及びキャッシュ相互接続268は、グラフィックスマルチプロセッサ234の各機能ユニットをレジスタファイル258及び共有メモリ270に接続する相互接続ネットワークである。例えば、メモリ及びキャッシュ相互接続268は、ロード/ストアユニット266が共有メモリ270とレジスタファイル258との間でロード操作及びストア操作を行うのを可能にするクロスバー相互接続である。レジスタファイル258はGPGPUコア262と同じ周波数で動作できるので、GPGPUコア262とレジスタファイル258との間のデータ転送遅延が非常に低い。共有メモリ270は、グラフィックスマルチプロセッサ234内の機能ユニットで実行するスレッド間の通信を可能にするのに用いられてよい。キャッシュメモリ272は、例えば、機能ユニットとテクスチャユニット236との間で通信されるテクスチャデータをキャッシュするデータキャッシュとして用いられてよい。共有メモリ270も、プログラム管理キャッシュとして用いられてよい。GPGPUコア262で実行するスレッドは、キャッシュメモリ272に格納される自動的にキャッシュされるデータに加えて、データを共有メモリにプログラムで格納できる。
【0076】
図3A~
図3Cは、複数の実施形態による別のグラフィックスマルチプロセッサを示している。
図3A~
図3Bはグラフィックスマルチプロセッサ325、350を示している。これらは、
図2Cのグラフィックスマルチプロセッサ234に関連しており、そのうちの1つの代わりに用いられてよい。したがって、グラフィックスマルチプロセッサ234と組み合わせたあらゆる機能のここでの開示は、グラフィックスマルチプロセッサ325、350との対応する組み合わせも開示するが、そのように限定されることはない。
図3Cは、グラフィックスマルチプロセッサ325、350に対応するマルチコアグループ365A~365Nに配置される専用のグラフィックス処理リソースのセットを含むグラフィックス処理ユニット(GPU)380を示している。図示されたグラフィックスマルチプロセッサ325、350、及びマルチコアグループ365A~365Nは、多数の実行スレッドの同時実行ができるストリーミングマルチプロセッサ(SM)であってよい。
【0077】
図3Aのグラフィックスマルチプロセッサ325は、
図2Dのグラフィックスマルチプロセッサ234と比べて、実行リソースユニットの複数の別のインスタンスを含む。例えば、グラフィックスマルチプロセッサ325は、命令ユニット332A~332B、レジスタファイル334A~334B、及びテクスチャユニット344A~344Bという複数のインスタンスを含んでよい。グラフィックスマルチプロセッサ325は、グラフィックス実行ユニット又はコンピュート実行ユニット(例えば、GPGPUコア336A~336B、テンソルコア337A~337B、レイトレーシングコア338A~338B)の複数のセット、及びロード/ストアユニット340A~340Bの複数のセットも含む。実行リソースユニットは、共通の命令キャッシュ330、テクスチャ及び/又はデータキャッシュメモリ342、並びに共有メモリ346を有する。
【0078】
様々なコンポーネントは、相互接続ファブリック327を介して通信することができる。相互接続ファブリック327は、グラフィックスマルチプロセッサ325の様々なコンポーネント間の通信を可能にする1つ又は複数のクロスバースイッチを含んでよい。相互接続ファブリック327は、別個の高速ネットワークファブリック層であってもよく、この層の上に、グラフィックスマルチプロセッサ325の各コンポーネントがスタックされる。グラフィックスマルチプロセッサ325の各コンポーネントは、相互接続ファブリック327を介して遠隔コンポーネントと通信する。例えば、GPGPUコア336A~336B、337A~337B、及び338A~338Bはそれぞれ、相互接続ファブリック327を介して共有メモリ346と通信できる。相互接続ファブリック327は、グラフィックスマルチプロセッサ325内の通信を調停して、コンポーネント間の公平な帯域幅割り当てを確保できる。
【0079】
図3Bのグラフィックスマルチプロセッサ350は、実行リソース356A~356Dの複数のセットを含み、実行リソースの各セットは、
図2D及び
図3Aに示されているように、複数の命令ユニット、レジスタファイル、GPGPUコア、及びロードストアユニットを含む。実行リソース356A~356Dは、命令キャッシュ354及び共有メモリ353を共有しながら、テクスチャ操作用のテクスチャユニット360A~360Dと連携して動作することができる。例えば、実行リソース356A~356Dは、命令キャッシュ354及び共有メモリ353、並びにテクスチャ及び/又はデータキャッシュメモリ358A~358Bの複数のインスタンスを共有できる。様々なコンポーネントは、
図3Aの相互接続ファブリック327と同様の相互接続ファブリック352を介して通信できる。
【0080】
当業者であれば、
図1、
図2A~
図2D、及び
図3A~
図3Bで説明したアーキテクチャは、本実施形態の範囲に関して記述的であり、限定しているわけではないことを理解するであろう。したがって、本明細書で説明される技法は、適切に構成されたあらゆる処理ユニットに実装されてよい。そのような処理ユニットは、限定されることはないが、1つ又は複数のモバイルアプリケーションプロセッサ、マルチコア中央演算処理装置(CPU)を含む1つ又は複数のデスクトップ用若しくはサーバ用CPU、
図2Aの並列処理ユニット202などの1つ又は複数の並列処理ユニット、及び1つ又は複数のグラフィックスプロセッサ若しくは専用処理ユニットを、本明細書で説明される実施形態の範囲から逸脱することなく含む。
【0081】
本明細書で説明される並列プロセッサ又はGPGPUは、グラフィックス操作、機械学習操作、パターン分析操作、及び汎用GPU(GPGPU)の様々な機能を加速するホスト/プロセッサコアに通信可能に結合されてよい。GPUは、バス又は他の相互接続(例えば、PCIe又はNVLinkなどの高速相互接続)によってホストプロセッサ/コアに通信可能に結合されてよい。他の実施形態において、GPUはコアと同じパッケージ又はチップに統合されて、内蔵プロセッサバス/相互接続によって(つまり、パッケージ又はチップの内部で)コアに通信可能に結合されてよい。GPUが接続される方式に関係なく、プロセッサコアは、作業記述子に含まれるコマンド/命令のシーケンスの形で、GPUに作業を割り当ててよい。GPUは次いで、これらのコマンド/命令を効率的に処理するのに専用回路/ロジックを用いる。
【0082】
図3Cは、マルチコアグループ365A~365Nに配置された専用のグラフィックス処理リソースのセットを含むグラフィックス処理ユニット(GPU)380を示している。1つのマルチコアグループ365Aだけの詳細が提供されているが、その他のマルチコアグループ365B~365Nも同じ又は同様のグラフィックス処理リソースのセットを備えてよいことが理解されるであろう。マルチコアグループ365A~365Nに関して説明される詳細が、本明細書で説明されるあらゆるグラフィックスマルチプロセッサ234、325、350にも適用されてよい。
【0083】
図示されているように、マルチコアグループ365Aがグラフィックスコア370のセット、テンソルコア371のセット、及びレイトレーシングコア372のセットを含んでよい。スケジューラ/ディスパッチャ368が、様々なコア370、371、372で実行するグラフィックススレッドをスケジューリングして、ディスパッチする。コア370、371、372がグラフィックススレッドを実行するときに用いるオペランド値を、レジスタファイル369のセットが格納する。これらのレジスタファイルは、例えば、整数値を格納する整数レジスタ、浮動小数点値を格納する浮動小数点レジスタ、パックドデータ要素(整数データ要素及び/又は浮動小数点データ要素)を格納するベクトルレジスタ、及びテンソル/行列値を格納するタイルレジスタを含んでよい。タイルレジスタは、組み合わされたベクトルレジスタのセットとして実装されてよい。
【0084】
組み合わされた1つ又は複数のレベルキャッシュ1(L1)及び共有メモリユニット373が、テクスチャデータ、頂点データ、ピクセルデータ、レイデータ、バウンディングボリュームデータなどのグラフィックスデータを、各マルチコアグループ365Aにローカルに格納する。1つ又は複数のテクスチャユニット374が、テクスチャマッピング及びサンプリングなどのテクスチャ操作を行うのにも用いられてよい。マルチコアグループ365A~365Nの全て又はそのサブセットにより共有されるレベル2(L2)キャッシュ375が、複数の同時グラフィックススレッド用のグラフィックスデータ及び/又は命令を格納する。図示されているように、L2キャッシュ375は、複数のマルチコアグループ365A~365N全体で共有されてよい。1つ又は複数のメモリコントローラ367が、GPU380を、システムメモリ(例えば、DRAM)及び/又は専用グラフィックスメモリ(例えば、GDDR6メモリ)であってよいメモリ366に結合する。
【0085】
入力/出力(I/O)回路363が、GPU380を、デジタル信号プロセッサ(DSP)、ネットワークコントローラ、又はユーザ入力デバイスなどの1つ又は複数のI/Oデバイス362に結合する。オンチップ相互接続が、I/Oデバイス362をGPU380及びメモリ366に結合するのに用いられてよい。I/O回路363の1つ又は複数のI/Oメモリ管理ユニット(IOMMU)364が、I/Oデバイス362をシステムメモリ366に直接的に結合する。必要に応じて、IOMMU364は、仮想アドレスをシステムメモリ366の物理アドレスにマッピングするページテーブルの複数のセットを管理する。I/Oデバイス362、CPU361、及びGPU380は次いで、同じ仮想アドレス空間を共有してよい。
【0086】
IOMMU364の1つの実装形態において、IOMMU364は仮想化をサポートしている。この場合、IOMMU364は、ゲスト/グラフィックス仮想アドレスをゲスト/グラフィックス物理アドレスにマッピングする第1のページテーブルのセットと、ゲスト/グラフィックス物理アドレスを(例えば、システムメモリ366内の)システム/ホスト物理アドレスにマッピングする第2のページテーブルのセットとを管理してよい。第1及び第2のページテーブルのセットのそれぞれのベースアドレスが、制御レジスタに格納され、コンテキストスイッチでスワップアウトされてよい(例えば、その結果、新たなコンテキストが関連するページテーブルのセットへのアクセスを提供される)。
図3Cには図示されていないが、コア370、371、372、及び/又はマルチコアグループ365A~365Nのそれぞれは、ゲスト仮想とゲスト物理との変換、ゲスト物理とホスト物理との変換、及びゲスト仮想とホスト物理との変換をキャッシュするための変換ルックアサイドバッファ(TLB)を含んでよい。
【0087】
CPU361、GPU380、及びI/Oデバイス362は、単一の半導体チップ及び/又はチップパッケージに統合されてよい。図示されているメモリ366は、同じチップに統合されてもよく、オフチップインタフェースを介してメモリコントローラ367に結合されてもよい。1つの実装形態において、メモリ366は、他の物理システムレベルのメモリと同じ仮想アドレス空間を共有するGDDR6メモリを含むが、本明細書で説明される基本的原理はこの特定の実装形態に限定されることはない。
【0088】
テンソルコア371は、特に行列演算を行うように設計された複数の実行ユニットを含んでよく、行列演算は、深層学習操作を行うのに用いられる基本的なコンピュート操作である。例えば、同時行列乗算演算がニューラルネットワークの訓練及び推論に用いられてよい。テンソルコア371は、単精度浮動小数点(例えば、32ビット)、半精度浮動小数点(例えば、16ビット)、整数ワード(16ビット)、バイト(8ビット)、及びハーフバイト(4ビット)を含む様々なオペランド精度を用いて行列処理を行ってよい。例えば、ニューラルネットワークの実装形態が、レンダリングされた各シーンの特徴点を抽出し、場合によっては複数のフレームの詳細な情報を組み合わせ、高品質の最終画像を構築する。
【0089】
深層学習の実装形態では、並列行列乗算作業が、テンソルコア371で実行するためにスケジューリングされてよい。ニューラルネットワークの訓練は、具体的には、多くの行列ドット積演算を必要とする。N×N×N行列乗算の内積式を処理するために、テンソルコア371は、少なくともN個のドット積処理要素を含んでよい。行列乗算を開始する前に、1つの行列全体がタイルレジスタにロードされ、第2行列の少なくとも1つの列がN回のサイクルのサイクルごとにロードされる。サイクルごとに、N個のドット積が処理される。
【0090】
行列要素が、特定の実装形態に応じて、16ビットワード、8ビットバイト(例えば、INT8)、及び4ビットハーフバイト(例えば、INT4)を含む様々な精度で格納されてよい。異なるワークロード(例えば、バイト及びハーフバイトへの量子化を許容できる推論ワークロードなど)に最も効率的な精度が必ず用いられるように、異なる精度モードがテンソルコア371に指定されてよい。
【0091】
レイトレーシングコア372は、リアルタイムのレイトレーシング及び非リアルタイムのレイトレーシングの両方の実装形態のために、レイトレーシング操作を加速させてよい。具体的には、レイトレーシングコア372は、バウンディングボリューム階層(BVH)を用いてレイトラバーサルを行い、且つBVHボリュームで囲まれたレイとプリミティブとの交差を識別するための、レイトラバーサル/交差回路を含んでよい。レイトレーシングコア372は、(例えば、Zバッファ又は同様の構成を用いて)デプステスト及びカリングを行うための回路も含んでよい。1つの実装形態において、レイトレーシングコア372は、本明細書で説明される画像ノイズ除去技法を併用してトラバーサル操作及び交差操作を行い、その少なくとも一部がテンソルコア371で実行されてよい。例えば、テンソルコア371は、深層学習ニューラルネットワークを実装して、レイトレーシングコア372が生成するフレームのノイズ除去を行ってよい。しかしながら、CPU361、グラフィックスコア370、及び/又はレイトレーシングコア372も、ノイズ除去アルゴリズム及び/又は深層学習アルゴリズムの全部又は一部を実装してよい。
【0092】
さらに、上述したように、ノイズ除去への分散型手法が使用されてもよく、ここでは、ネットワーク又は高速相互接続によって他のコンピュータ処理デバイスに結合されるコンピュータ処理デバイス内にGPU380がある。この分散型手法において、相互接続されたコンピュータ処理デバイスは、ニューラルネットワークの学習/訓練データを共有して、システム全体が異なるタイプの画像フレーム及び/又は異なるグラフィックスアプリケーションのノイズ除去を行うことを学習する速度を向上させてよい。
【0093】
レイトレーシングコア372は、全てのBVHトラバーサル及び/又はレイ-プリミティブ間交差を処理して、グラフィックスコア370がレイ当たり数千の命令で過負荷になるのを防いでよい。例えば、各レイトレーシングコア372は、(例えばトラバーサル操作のために)バウンディングボックステストを行う第1の専用回路のセット、及び/若しくはレイ-三角形間交差テストを行う(例えば、トラバースされたレイを交差させる)第2の専用回路のセットを含む。したがって例えば、マルチコアグループ365Aは単にレイプローブを起動すればよく、レイトレーシングコア372はレイトラバーサル及び交差を独立して行い、ヒットデータ(例えば、ヒット、ヒットなし、複数のヒットなど)をスレッドコンテキストに返す。他のコア370、371は、レイトレーシングコア372がトラバーサル操作及び交差操作を行う間、他のグラフィックス作業又はコンピュート作業を行うために解放される。
【0094】
必要に応じて、各レイトレーシングコア372は、BVHテスト操作を行うトラバーサルユニット及び/又はレイ-プリミティブ間交差テストを行う交差ユニットを含んでよい。交差ユニットは、「ヒット」応答、「ヒットなし」応答、又は「複数のヒット」応答を生成し、それを適切なスレッドに提供する。トラバーサル操作及び交差操作の際に、他のコアの実行リソース(例えば、グラフィックスコア370及びテンソルコア371)は、他の形式のグラフィックス作業を行うために解放される。
【0095】
後述される1つの任意的な実施形態では、ハイブリッドラスタライズ/レイトレーシング手法が用いられ、ここでは、グラフィックスコア370とレイトレーシングコア372との間で作業が配分される。
【0096】
レイトレーシングコア372(及び/又は他のコア370、371)は、DispatchRaysコマンドを含むMicrosoft(登録商標)のDirectX Ray Tracing(DXR)などのレイトレーシング命令セット用のハードウェアサポート、並びにレイ生成シェーダ、最も近いヒットシェーダ、任意のヒットシェーダ、及びミスシェーダを含んでよく、これらによって、オブジェクトごとに一意のシェーダ及びテクスチャのセットを割り当てるのが可能になる。レイトレーシングコア372、グラフィックスコア370、及びテンソルコア371によってサポートされ得る別のレイトレーシングプラットフォームが、Vulkan1.1.85である。しかしながら、本明細書で説明される基本的原理が、任意の特定のレイトレーシングISAに限定されることはないことに留意されたい。
【0097】
一般に、様々なコア372、371、370は、レイ生成、最も近いヒット、任意のヒット、レイ-プリミティブ間交差、プリミティブごと且つ階層的なバウンディングボックス構築、ミス、ビジット、及び例外のうちの1つ又は複数の命令/機能を含むレイトレーシング命令セットをサポートしてよい。より具体的には、好ましい実施形態が、以下に挙げる諸機能のうちの1つ又は複数を行うレイトレーシング命令を含む。
【0098】
レイ生成:レイ生成命令は、ピクセルごと、サンプルごと、又は他のユーザ定義型作業割り当てごとに実行されてよい。
【0099】
最も近いヒット:最も近いヒット命令は、シーン内のレイとプリミティブとの最も近い交点を特定するために実行されてよい。
【0100】
任意のヒット:任意のヒット命令は、シーン内のレイとプリミティブとの複数の交点を識別し、場合によっては、新たな最も近い交点を識別する。
【0101】
交差:交差命令は、レイ-プリミティブ間交差テストを行い、結果を出力する。
【0102】
プリミティブごとのバウンディングボックス構築:この命令は、(例えば、新たなBVH又は他のアクセラレーションデータ構造を形成するときに)所与のプリミティブ又はプリミティブのグループの周囲にバウンディングボックスを形成する。
【0103】
ミス:シーン内又はシーンの指定領域内の全てのジオメトリに、レイが当たらなかったことを示す。
【0104】
ビジット:レイがトラバースする子ボリュームを示す。
【0105】
例外:(例えば、様々なエラー条件に対して呼び出される)様々なタイプの例外ハンドラを含む。
[GPU-ホストプロセッサ間相互接続の技法]
【0106】
図4Aは、複数のGPU410~413、例えば、
図2Aに示す並列プロセッサ200などが、高速リンク440A~440D(例えば、バス、ポイントツーポイント相互接続など)によって複数のマルチコアプロセッサ405~406に通信可能に結合されている例示的なアーキテクチャを示す。高速リンク440A~440Dは、実装形態に応じて、4GB/s、30GB/s、80GB/s、又はそれより高い通信スループットをサポートしてよい。限定されることはないが、PCIe4.0又は5.0及びNVLink2.0を含む様々な相互接続プロトコルが用いられてよい。しかしながら、本明細書で説明される基本的原理は、任意の特定の通信プロトコル又はスループットに限定されることはない。
【0107】
GPU410~413のうちの2つ又はそれより多くが、高速リンク442A~442Bによって相互接続されてよく、これらの高速リンクは、高速リンク440A~440Dに用いられるものと同じ又は異なるプロトコル/リンクを用いて実装されてよい。同様に、マルチコアプロセッサ405~406のうちの2つ又はそれより多くが、20GB/s、30GB/s、120GB/s、又はそれより高速で動作する対称型マルチプロセッサ(SMP)バスであってよい高速リンク443によって接続されてよい。あるいは、
図4Aに示す様々なシステムコンポーネント間の通信は全て、同じプロトコル/リンクを用いて(例えば、共通の相互接続ファブリックによって)実現されてよい。しかしながら、すでに述べたように、本明細書で説明される基本的原理は、任意の特定のタイプの相互接続技術に限定されることはない。
【0108】
各マルチコアプロセッサ405~406は、メモリ相互接続430A~430Bを介してそれぞれプロセッサメモリ401~402に通信可能に結合されてよく、各GPU410~413は、GPUメモリ相互接続450A~450DによってそれぞれGPUメモリ420~423に通信可能に結合されている。メモリ相互接続430A~430B及び450A~450Dは、同じ又は異なるメモリアクセス技術を利用してよい。例として且つ限定ではなく、プロセッサメモリ401~402及びGPUメモリ420~423は、ダイナミックランダムアクセスメモリ(DRAM)(スタックDRAMを含む)、グラフィックスDDR SDRAM(GDDR)(例えば、GDDR5、GDDR6)、又は高帯域幅メモリ(HBM)などの揮発性メモリであってよく、且つ/又は3D XPoint又はNano-Ramなどの不揮発性メモリであってよい。例えば、これらのメモリの一部は、揮発性メモリであってもよく、別の部分は(例えば、2つのレベルのメモリ(2LM)階層を用いる)不揮発性メモリであってよい。
【0109】
後述するように、様々なプロセッサ405~406及びGPU410~413は、特定のメモリ401~402、420~423にそれぞれ物理的に結合されてよいが、統合メモリアーキテクチャが実装されてよく、このアーキテクチャでは、同じ仮想システムのアドレス空間(「実効アドレス」空間とも呼ばれる)が様々な物理メモリの全てに配分される。例えば、プロセッサメモリ401~402はそれぞれ、64GBのシステムメモリアドレス空間を含んでよく、GPUメモリ420~423はそれぞれ、32GBのシステムメモリアドレス空間を含んでよい(この例では、アドレス指定可能なメモリが合計256GBになる)。
【0110】
図4Bは、マルチコアプロセッサ407とグラフィックスアクセラレーションモジュール446との相互接続についての別の任意的な詳細情報を示している。グラフィックスアクセラレーションモジュール446は、高速リンク440を介してプロセッサ407に結合されているラインカードに統合された1つ又は複数のGPUチップを含んでよい。あるいは、グラフィックスアクセラレーションモジュール446は、プロセッサ407として同じパッケージ又はチップに統合されてもよい。
【0111】
示されているプロセッサ407は、複数のコア460A~460Dを含み、それぞれのコアが、変換ルックアサイドバッファ461A~461Dと1つ又は複数のキャッシュ462A~462Dとを有する。これらのコアは、命令を実行しデータを処理する様々な他のコンポーネントを含んでよい。これらの他のコンポーネント(例えば、命令フェッチユニット、分岐予測ユニット、デコーダ、実行ユニット、リオーダバッファなど)は、本明細書で説明されるコンポーネントの基本的原理を不明瞭にするのを回避するために図示されていない。キャッシュ462A~462Dは、レベル1(L1)キャッシュとレベル2(L2)キャッシュとを有してよい。さらに、1つ又は複数の共有キャッシュ456が、キャッシュ階層に含まれ、コア460A~460Dのセットによって共有されてよい。例えば、プロセッサ407の1つの実施形態が24個のコアを含み、各コアが独自のL1キャッシュ、12個の共有L2キャッシュ、及び12個の共有L3キャッシュを有する。この実施形態では、L2キャッシュ及びL3キャッシュのうちの一方が、2つの隣接コアによって共有されている。プロセッサ407及びグラフィックスアクセラレータ統合モジュール446は、システムメモリ441と接続している。このシステムメモリは、プロセッサメモリ401~402を含んでもよい。
【0112】
様々なキャッシュ462A~462D、456及びシステムメモリ441に格納されたデータ及び命令の一貫性が、コヒーレンスバス464によるコア間通信によって維持されている。例えば、各キャッシュは、それぞれに関連づけられたキャッシュコヒーレンシロジック/回路を有し、特定のキャッシュラインに対する読み出し又は書き込みの検出に応答して、コヒーレンスバス464で通信してよい。1つの実装形態では、キャッシュスヌーピングプロトコルが、キャッシュアクセスをスヌープするためにコヒーレンスバス464で実装されている。キャッシュスヌーピング/コヒーレンシ技法は、当業者によく理解されており、本明細書で説明される基本的原理を不明瞭にするのを回避するために、ここでは詳細に説明しない。
【0113】
グラフィックスアクセラレーションモジュール446をコヒーレンスバス464に通信可能に結合するプロキシ回路425が設けられてよく、このプロキシ回路は、グラフィックスアクセラレーションモジュール446が、これらのコアのピアとして、キャッシュコヒーレンスプロトコルに加わることを可能にする。具体的には、インタフェース435が高速リンク440(例えば、PCIeバス、NVLinkなど)によるプロキシ回路425への接続機能を提供し、インタフェース437がグラフィックスアクセラレーションモジュール446を高速リンク440に接続する。
【0114】
1つの実装形態では、アクセラレータ統合回路436が、グラフィックスアクセラレーションモジュール446の複数のグラフィックス処理エンジン431、432、Nに代わって、キャッシュ管理サービス、メモリアクセスサービス、コンテキスト管理サービス、及び割り込み管理サービスを提供する。グラフィックス処理エンジン431、432、Nはそれぞれ、別個のグラフィックス処理ユニット(GPU)を有してよい。あるいは、グラフィックス処理エンジン431、432、Nは、グラフィックス実行ユニット、メディア処理エンジン(例えば、ビデオエンコーダ/デコーダ)、サンプラ、及びブリットエンジンなどの異なるタイプのグラフィックス処理エンジンをGPUに含んでよい。言い換えれば、グラフィックスアクセラレーションモジュールは、複数のグラフィックス処理エンジン431~432、Nを有するGPUであってもよく、グラフィックス処理エンジン431~432、Nは共通のパッケージ、ラインカード、又はチップに統合された個々のGPUであってもよい。
【0115】
アクセラレータ統合回路436は、仮想-物理間のメモリ変換(実効-実間のメモリ変換とも呼ばれる)などの様々なメモリ管理機能を実行するためのメモリ管理ユニット(MMU)439、及びシステムメモリ441にアクセスするためのメモリアクセスプロトコルを含んでよい。MMU439は、仮想/実効アドレスと物理/実アドレスとの間の変換をキャッシュするための変換ルックアサイドバッファ(TLB)(不図示)も含んでよい。1つの実装形態では、グラフィックス処理エンジン431~432、Nによる効率的なアクセスのために、キャッシュ438がコマンド及びデータを格納する。キャッシュ438及びグラフィックスメモリ433~434、Mに格納されているデータは、コアキャッシュ462A~462D、456及びシステムメモリ441と一貫性が保持されてよい。すでに述べたように、これは、キャッシュ438及びメモリ433~434、Mに代わって、キャッシュコヒーレンシメカニズムに加わるプロキシ回路425によって実現されてよい(例えば、プロセッサキャッシュ462A~462D、456のキャッシュラインの修正/アクセスに関連したアップデートをキャッシュ438に送信する、またキャッシュ438からアップデートを受信する)。
【0116】
レジスタ445のセットが、グラフィックス処理エンジン431~432、Nにより実行されるスレッドのコンテキストデータを格納し、コンテキスト管理回路448がスレッドコンテキストを管理する。例えば、コンテキスト管理回路448は、コンテキスト切り替え時に、様々なスレッドのコンテキストを保存し復元する保存操作及び復元操作を行ってよい(例えば、グラフィックス処理エンジンが第2スレッドを実行できるように、第1スレッドが保存され、第2スレッドが格納される)。例えば、コンテキストスイッチでは、コンテキスト管理回路448は、現在のレジスタ値をメモリの(例えば、コンテキストポインタで識別される)指定領域に格納してよい。コンテキスト管理回路は次に、コンテキストに戻るときにレジスタ値を復元してよい。割り込み管理回路447が、例えば、システムデバイスから割り込みを受信し、受信した割り込みを処理してよい。
【0117】
1つの実装形態では、グラフィックス処理エンジン431からの仮想/実効アドレスが、MMU439によって、システムメモリ441の実/物理アドレスに変換される。必要に応じて、アクセラレータ統合回路436は、複数の(例えば、4個、8個、16個の)グラフィックスアクセラレータモジュール446及び/又は他のアクセラレータデバイスをサポートする。グラフィックスアクセラレータモジュール446は、プロセッサ407で実行される単一アプリケーションに特化されてもよく、複数のアプリケーション間で共有されてもよい。必要に応じて、グラフィックス処理エンジン431~432、Nのリソースが複数のアプリケーション又は仮想マシン(VM)と共有される仮想化グラフィックス実行環境が提供される。これらのリソースは、VM及び/又はアプリケーションに関連づけられた処理要件及び優先度に基づいて、異なるVM及び/又はアプリケーションに割り当てられる「スライス」に細分化されてよい。
【0118】
したがって、アクセラレータ統合回路436はグラフィックスアクセラレーションモジュール446にとってシステムへのブリッジの機能を果たし、アドレス変換サービス及びシステムメモリキャッシュサービスを提供する。1つの実施形態では、ブリッジ機能を容易にするために、アクセラレータ統合回路436は、共有I/O497(例えば、PCIe、USB)、並びに電圧、クロッキング、性能、熱、及びセキュリティのシステム制御を可能にするハードウェアも含んでよい。共有I/O497は、別個の物理接続を利用してもよく、高速リンク440を通ってもよい。さらに、アクセラレータ統合回路436は、グラフィックス処理エンジンの仮想化、割り込み、及びメモリ管理を管理するホストプロセッサに仮想化機能を提供してもよい。
【0119】
グラフィックス処理エンジン431~432、Nのハードウェアリソースは、ホストプロセッサ407から見える実アドレス空間に明示的にマッピングされるため、あらゆるホストプロセッサが、実効アドレス値を用いてこれらのリソースを直接的にアドレス指定できる。アクセラレータ統合回路436の1つの任意的な機能がグラフィックス処理エンジン431~432、Nの物理的分離であり、これによりシステムには、グラフィックス処理エンジンが独立したユニットに見える。
【0120】
1つ又は複数のグラフィックスメモリ433~434、Mがそれぞれ、グラフィックス処理エンジン431~432、Nのそれぞれに結合されてよい。グラフィックスメモリ433~434、Mは、グラフィックス処理エンジン431~432、Nのそれぞれによって処理される命令及びデータを格納する。グラフィックスメモリ433~434、Mは、DRAM(スタックDRAMを含む)、GDDRメモリ(例えば、GDDR5、GDDR6)、若しくはHBMなどの揮発性メモリであってもよく、且つ/又は3D XPoint又はNano-Ramなどの不揮発性メモリであってもよい。
【0121】
高速リンク440によるデータトラフィックを減らすために、バイアス技法を用いて、グラフィックスメモリ433~434、Mに格納されたデータが、必ずグラフィックス処理エンジン431~432、Nによって最も頻繁に用いられ、また好ましくは、コア460A~460Dによって用いられない(少なくとも頻繁に用いられない)データになるようにしてよい。同様に、このバイアスメカニズムは、コア(好ましくは、グラフィックス処理エンジン431~432、Nではない)が必要とするデータを、コアのキャッシュ462A~462D、456及びシステムメモリ441に保持しようと試みる。
【0122】
図4Cに示す変形例によれば、アクセラレータ統合回路436はプロセッサ407に統合されている。グラフィックス処理エンジン431~432、Nは、インタフェース437及びインタフェース435(これらのインタフェースは、ここでも、任意の形式のバス又はインタフェースプロトコルを利用してよい)を介して、アクセラレータ統合回路436に対して高速リンク440で直接的に通信する。アクセラレータ統合回路436は、
図4Bに関して説明したのと同じ操作を行ってよいが、コヒーレンシバス464及びキャッシュ462A~462D、456に近接していることを考慮すると、スループットが高くなる可能性がある。
【0123】
説明した実施形態は、専用プロセスプログラミングモデル(グラフィックスアクセラレーションモジュール仮想化なし)及び共有プログラミングモデル(仮想化あり)を含む異なるプログラミングモデルをサポートしてよい。後者は、アクセラレータ統合回路436により制御されるプログラミングモデルと、グラフィックスアクセラレーションモジュール446により制御されるプログラミングモデルとを含んでよい。
【0124】
専用プロセスモデルの実施形態において、グラフィックス処理エンジン431~432、Nは、単一オペレーティングシステムの下での単一アプリケーション又はプロセスに特化されてよい。単一アプリケーションは、他のアプリケーション要求をグラフィックスエンジン431~432、Nに送り、VM/パーティションの中に仮想化を提供することができる。
【0125】
専用プロセスプログラミングモデルでは、グラフィックス処理エンジン431~432、Nは、複数のVM/アプリケーションパーティションによって共有されてよい。共有モデルは、グラフィックス処理エンジン431~432、Nを仮想化して、各オペレーティングシステムがアクセスできるようにするシステムハイパーバイザを必要とする。ハイパーバイザのない単一パーティションシステムの場合、グラフィックス処理エンジン431~432、Nはオペレーティングシステムが所有する。どちらの場合も、オペレーティングシステムはグラフィックス処理エンジン431~432、Nを仮想化して、各プロセス又は各アプリケーションへのアクセスを提供できる。
【0126】
共有プログラミングモデルでは、グラフィックスアクセラレーションモジュール446又は個々のグラフィックス処理エンジン431~432、Nは、プロセスハンドルを用いてプロセス要素を選択する。このプロセス要素は、システムメモリ441に格納され、本明細書で説明された実効アドレス-実アドレス間変換技法を用いてアドレス指定可能になってよい。プロセスハンドルは、そのコンテキストをグラフィックス処理エンジン431~432、Nに登録する(すなわち、プロセス要素をプロセス要素リンクリストに追加するシステムソフトウェアを呼び出する)ときにホストプロセスに提供される、実装形態に固有の値であってよい。プロセスハンドルの下位16ビットは、プロセス要素リンクリスト内のプロセス要素のオフセットであってよい。
【0127】
図4Dは、例示的なアクセラレータ統合スライス490を示している。本明細書で用いる場合、「スライス」が、アクセラレータ統合回路436の処理リソースの指定部分を含む。システムメモリ441内のアプリケーション実効アドレス空間482が、プロセス要素483を格納する。プロセス要素483は、プロセッサ407で実行されるアプリケーション480からのGPU呼び出し481に応答して格納されてよい。プロセス要素483は、対応するアプリケーション480のプロセス状態を含む。プロセス要素483に含まれている作業記述子(WD)484が、アプリケーションにより要求される1つのジョブであってよく、ジョブのキューを指すポインタを含んでもよい。後者の場合では、WD484は、アプリケーションのアドレス空間482にあるジョブリクエストキューを指すポインタである。
【0128】
グラフィックスアクセラレーションモジュール446及び/又は個々のグラフィックス処理エンジン431~432、Nは、システム内のプロセスの全て又はサブセットによって共有されてよい。例えば、本明細書で説明される技術は、プロセス状態を設定し、WD484をグラフィックスアクセラレーションモジュール446に送信してジョブを仮想化環境で開始するためのインフラストラクチャを含んでよい。
【0129】
1つの実装形態において、専用プロセスプログラミングモデルは実装形態に固有である。このモデルでは、単一のプロセスが、グラフィックスアクセラレーションモジュール446又は個々のグラフィックス処理エンジン431を所有する。グラフィックスアクセラレーションモジュール446が単一のプロセスによって所有されているため、ハイパーバイザは、所有するパーティションのアクセラレータ統合回路436を初期化し、オペレーティングシステムは、グラフィックスアクセラレーションモジュール446が割り当てられたときに、所有するプロセスのアクセラレータ統合回路436を初期化する。
【0130】
動作時には、アクセラレータ統合スライス490内のWDフェッチユニット491が、グラフィックスアクセラレーションモジュール446の複数のグラフィックス処理エンジンのうちの1つによって行われる作業の標識を含む次のWD484をフェッチする。図示されているように、WD484からのデータがレジスタ445に格納され、MMU439、割り込み管理回路447、及び/又はコンテキスト管理回路448によって用いられてよい。例えば、MMU439は、OS仮想アドレス空間485内のセグメント/ページテーブル486にアクセスするためのセグメント/ページウォーク回路を含んでよい。割り込み管理回路447は、グラフィックスアクセラレーションモジュール446から受信した割り込みイベント492を処理してよい。グラフィックス操作を行うときに、グラフィックス処理エンジン431~432、Nにより生成される実効アドレス493が、MMU439によって実アドレスに変換される。
【0131】
同じレジスタ445のセットは、グラフィックス処理エンジン431~432、N及び/又はグラフィックスアクセラレーションモジュール446ごとに複製されてよく、ハイパーバイザ又はオペレーティングシステムによって初期化されてよい。複製されたこれらのレジスタのそれぞれは、アクセラレータ統合スライス490に含まれてよい。ハイパーバイザによって初期化され得る例示的なレジスタが、表1に示されている。
【表1】
【0132】
オペレーティングシステムによって初期化され得る例示的なレジスタが、表2に示されている。
【表2】
【0133】
各WD484は、特定のグラフィックスアクセラレーションモジュール446及び/又はグラフィックス処理エンジン431~432、Nに固有のものであってよい。WD484は、グラフィックス処理エンジン431~432、Nがその作業を行うのに必要な全ての情報を含む、又は完了すべき作業のコマンドキューをアプリケーションがセットアップしたメモリ位置を指すポインタであってよい。
【0134】
図4Eは、共有モデルの別の任意的な詳細情報を示している。ここには、プロセス要素リスト499が格納されているハイパーバイザ実アドレス空間498が含まれている。ハイパーバイザ実アドレス空間498は、オペレーティングシステム495のためにグラフィックスアクセラレーションモジュールエンジンを仮想化するハイパーバイザ496を介してアクセス可能である。
【0135】
共有プログラミングモデルは、システム内のパーティションの全て又はサブセットからのプロセスの全て又はサブセットがグラフィックスアクセラレーションモジュール446を用いるのを可能にする。グラフィックスアクセラレーションモジュール446が複数のプロセス及びパーティションによって共有されるプログラミングモデルには、タイムスライス共有型と、グラフィックス指向共有型という2つのモデルがある。
【0136】
このモデルでは、システムハイパーバイザ496がグラフィックスアクセラレーションモジュール446を所有し、その機能を全てのオペレーティングシステム495で利用できるようにする。システムハイパーバイザ496による仮想化をサポートするグラフィックスアクセラレーションモジュール446では、グラフィックスアクセラレーションモジュール446は以下に挙げる要件に従ってよい。1)アプリケーションのジョブリクエストは自律的でなければならない(すなわち、その状態はジョブ間で維持される必要はない)、又はグラフィックスアクセラレーションモジュール446はコンテキスト保存及び復元メカニズムを提供しなければならない。2)アプリケーションのジョブリクエストは、あらゆる変換フォルトを含む一定の時間で完了することがグラフィックスアクセラレーションモジュール446により保証されている、又はグラフィックスアクセラレーションモジュール446はジョブの処理をプリエンプトする機能を提供する。3)グラフィックスアクセラレーションモジュール446は、指向共有プログラミングモデルで動作する場合、プロセスの公平性が保証されなければならない。
【0137】
共有モデルの場合、アプリケーション480は、グラフィックスアクセラレーションモジュール446のタイプ、作業記述子(WD)、権限マスクレジスタ(AMR)値、及びコンテキスト保存/復元領域ポインタ(CSRP)でオペレーティングシステム495のシステムコールを行うことが必要とされてよい。グラフィックスアクセラレーションモジュール446のタイプは、システムコールの対象アクセラレーション機能を示す。グラフィックスアクセラレーションモジュール446のタイプはシステム固有の値であってよい。WDは具体的にはグラフィックスアクセラレーションモジュール446用にフォーマットされており、グラフィックスアクセラレーションモジュール446のコマンド、ユーザ定義型構造を指す実効アドレスポインタ、コマンドのキューを指す実効アドレスポインタ、又はグラフィックスアクセラレーションモジュール446により行われる作業を示す任意の他のデータ構造の形であってよい。1つの実施形態において、AMR値は、現在のプロセスに用いるAMR状態である。オペレーティングシステムに送られる値は、AMRを設定するアプリケーションと同様である。アクセラレータ統合回路436及びグラフィックスアクセラレーションモジュール446の実装形態がユーザ権限マスクオーバーライドレジスタ(UAMOR)をサポートしていない場合、オペレーティングシステムは、ハイパーバイザコールでAMRを送る前に、現在のUAMOR値をAMR値に適用してよい。ハイパーバイザ496は必要に応じて、AMRをプロセス要素483に配置する前に、現在の権限マスクオーバーライドレジスタ(AMOR)値を適用してよい。CSRPは、グラフィックスアクセラレーションモジュール446がコンテキスト状態を保存し復元する、アプリケーションのアドレス空間482内のある領域の実効アドレスを含む複数のレジスタ445のうちの1つであってよい。このポインタは、ジョブ間で状態を保存する必要がない場合、又はジョブがプリエンプトされているときには任意的である。コンテキスト保存/復元領域は、ピン留めされたシステムメモリであってよい。
【0138】
オペレーティングシステム495は、システムコールを受信すると、アプリケーション480が登録済みであり、且つグラフィックスアクセラレーションモジュール446を用いる権限を与えられていることを確認してよい。オペレーティングシステム495は次いで、表3に示す情報を用いてハイパーバイザ496を呼び出す。
【表3】
【0139】
ハイパーバイザ496は、ハイパーバイザコールを受信すると、オペレーティングシステム495が登録済みであり、且つグラフィックスアクセラレーションモジュール446を用いる権限を与えられていることを確認してよい。ハイパーバイザ496は次いで、対応するグラフィックスアクセラレーションモジュール446のタイプに関するプロセス要素リンクリストに、プロセス要素483を入れる。プロセス要素は、表4に示す情報を含んでよい。
【表4】
【0140】
ハイパーバイザは、アクセラレータ統合スライス490の複数のレジスタ445を初期化してよい。
【0141】
図4Fに示されているように、1つの任意的な実装形態では、物理プロセッサメモリ401~402及びGPUメモリ420~423にアクセスするのに用いられる共通の仮想メモリアドレス空間を介してアドレス指定可能な統合メモリが使用されている。この実装形態では、GPU410~413で実行される操作が、同じ仮想/実効メモリアドレス空間を利用して、プロセッサメモリ401~402にアクセスし、その逆も同様である。これにより、プログラミング性が簡略化される。仮想/実効アドレス空間の第1部分がプロセッサメモリ401に、第2部分が第2プロセッサメモリ402に、第3部分がGPUメモリ420にといったように割り当てられてよい。これにより、仮想/実効メモリ空間全体(実効アドレス空間と呼ばれることがある)がプロセッサメモリ401~402及びGPUメモリ420~423のそれぞれに配分され、当該メモリにマッピングされた仮想アドレスを用いて、任意のプロセッサ又はGPUが任意の物理メモリにアクセスするのが可能になる。
【0142】
MMU439A~439Eのうちの1つ又は複数に含まれるバイアス/コヒーレンス管理回路494A~494Eが提供されてよい。このバイアス/コヒーレンス管理回路は、ホストプロセッサ(例えば、405)とGPU410~413のキャッシュとの間のキャッシュコヒーレンスを確保し、特定のタイプのデータが格納されるべき物理メモリを示すバイアス技法を実現する。バイアス/コヒーレンス管理回路494A~494Eの複数のインスタンスが
図4Fに示されているが、バイアス/コヒーレンス回路は、1つ又は複数のホストプロセッサ405のMMU内及び/又はアクセラレータ統合回路436内に実装されてよい。
【0143】
GPU付属メモリ420~423は、システムメモリの一部としてマッピングされ、共有仮想メモリ(SVM)技術を用いてアクセスされてよいが、フルシステムのキャッシュコヒーレンスと関連した典型的な性能上の欠点を被ることはない。煩わしいキャッシュコヒーレンスオーバヘッドのないシステムメモリとしてアクセスされるGPU付属メモリ420~423の能力は、GPUオフロードにとって有益な動作環境を提供する。この構成によって、従来型I/OのDMAデータコピーのオーバヘッドを伴わずに、ホストプロセッサ405のソフトウェアがオペランドをセットアップし、計算結果にアクセスすることが可能になる。そのような一般的なコピーは、単純なメモリアクセスと比べて全く効率の悪いドライバコール、割り込み、及びメモリマップドI/O(MMIO)アクセスを必要とする。同時に、キャッシュコヒーレンスオーバヘッドを伴わずにGPU付属メモリ420~423にアクセスする能力は、オフロードされた計算の実行時間にとって非常に重要になり得る。大量のストリーミング書き込みメモリトラフィックがある場合、例えば、キャッシュコヒーレンスオーバヘッドがGPU410~413に見える効果的な書き込み帯域幅を大幅に減らす可能性がある。オペランドセットアップの効率、結果アクセスの効率、及びGPU計算の効率は全て、GPUオフロードの有効性を判断する際の一因となる。
【0144】
GPUバイアスとホストプロセッサバイアスとの間の選択が、バイアストラッカーデータ構造によって決定されてよい。バイアステーブルが用いられてよく、例えばこれは、GPU付属メモリページごとに1ビット又は2ビットを含むページグラニュラ構造であってよい(つまり、メモリページの粒度で制御される)。バイアステーブルは、(例えば、バイアステーブルの頻繁に/最近用いられたエントリをキャッシュする)バイアスキャッシュがGPU410~413にあってもなくても、1つ又は複数のGPU付属メモリ420~423のスチールされたメモリ領域に実装されてよい。あるいは、バイアステーブル全体は、GPU内に維持されてよい。
【0145】
1つの実装形態において、GPU付属メモリ420~423への各アクセスに関連づけられたバイアステーブルエントリは、GPUメモリに実際にアクセスする前にアクセスされ、以下に挙げる操作が生じる。まず、GPUバイアスで各GPUのページを見つけるという、GPU410~413からのローカル要求が、対応するGPUメモリ420~423に直接的に転送される。GPUからの、ホストバイアスでページを見つけるというローカル要求は、(例えば、上述した高速リンクによって)プロセッサ405に転送される。必要に応じて、ホストプロセッサバイアスで要求されたページを見つけるという、プロセッサ405の要求が、通常のメモリ読み出しのように要求を完了する。あるいは、GPUバイアスページを対象とする要求がGPU410~413に転送されてもよい。GPUは次いで、ホストプロセッサバイアスが当該ページを現在用いていない場合には、当該ページをホストプロセッサバイアスに移行してよい。
【0146】
ページのバイアス状態は、ソフトウェアベースのメカニズム、ハードウェアに支援されたソフトウェアベースのメカニズム、又は限られた組み合わせの場合には完全にハードウェアベースのメカニズムのいずれかによって変更されてよい。
【0147】
バイアス状態を変更する1つのメカニズムが、APIコール(例えば、OpenCL)を使用し、次にAPIコールはGPUのデバイスドライバを呼び出し、次にデバイスドライバは、バイアス状態を変更すること、移行によっては、キャッシュフラッシュ操作をホストで行うことをGPUに指示するメッセージをGPUに送信する(又はコマンド記述子をキューに加える)。キャッシュフラッシュ操作は、ホストプロセッサ405バイアスからGPUバイアスに移行するのに必要とされるが、逆方向の移行には必須ではない。
【0148】
キャッシュコヒーレンシは、ホストプロセッサ405がキャッシュできないGPUバイアスページを一時的にレンダリングすることにより維持されてよい。これらのページにアクセスするために、プロセッサ405は、GPU410にアクセスを要求してよく、GPUは、実装形態に応じて、すぐにアクセスを許可してもしなくてもよい。したがって、ホストプロセッサ405とGPU410との間の通信を減らすために、GPUバイアスページが、ホストプロセッサ405ではなくGPUが必要とするページであることを確実にするのが有益であり、逆の場合も同様である。
[グラフィックス処理パイプライン]
【0149】
図5は、グラフィックス処理パイプライン500を示している。
図2Dにあるようなグラフィックスマルチプロセッサ234、
図3Aのグラフィックスマルチプロセッサ325、
図3Bのグラフィックスマルチプロセッサ350などのグラフィックスマルチプロセッサが、図示されたグラフィックス処理パイプライン500を実装できる。グラフィックスマルチプロセッサは、本明細書で説明された、
図2Aの並列プロセッサ200などの並列処理サブシステムに含まれてよい。並列プロセッサ200は、
図1の並列プロセッサ112に関連していてよく、これらのうちの1つの代わりに用いられてよい。様々な並列処理システムは、本明細書で説明された並列処理ユニット(例えば、
図2Aの並列処理ユニット202)の1つ又は複数のインスタンスによってグラフィックス処理パイプライン500を実装できる。例えば、シェーダユニット(例えば、
図2Cのグラフィックスマルチプロセッサ234)が、頂点処理ユニット504、テセレーション制御処理ユニット508、テセレーション評価処理ユニット512、ジオメトリ処理ユニット516、及びフラグメント/ピクセル処理ユニット524のうちの1つ又は複数の機能を実行するように構成されてよい。データアセンブラ502、プリミティブアセンブラ506、514、518、テセレーションユニット510、ラスタライザ522、及びラスタ操作ユニット526の各機能も、処理クラスタ(例えば、
図2Aの処理クラスタ214)及び対応するパーティションユニット(例えば、
図2Aのパーティションユニット220A~220N)の中にある他の処理エンジンによって実行されてよい。グラフィックス処理パイプライン500は、1つ又は複数の機能に専用処理ユニットを用いて実装されてもよい。グラフィックス処理パイプライン500の1つ又は複数の一部が、汎用プロセッサ(例えば、CPU)内の並列処理ロジックによって実行されることも可能である。必要に応じて、グラフィックス処理パイプライン500の1つ又は複数の一部が、メモリインタフェース528を介してオンチップメモリ(例えば、
図2Aにあるような並列プロセッサメモリ222)にアクセスできる。メモリインタフェース528は、
図2Aのメモリインタフェース218のインスタンスであってよい。グラフィックスプロセッサパイプライン500は、
図3Cにあるようなマルチコアグループ365Aによって実装されてもよい。
【0150】
データアセンブラ502は、サーフェス及びプリミティブの頂点データを収集し得る処理ユニットである。データアセンブラ502は次に、頂点属性を含む頂点データを頂点処理ユニット504に出力する。頂点処理ユニット504は、頂点シェーダプログラムを実行するプログラム可能型実行ユニットであり、頂点シェーダプログラムにより指定されるように頂点データのライティング及び変換を行う。頂点処理ユニット504は、頂点データを処理する際に用いるために、キャッシュ、ローカルメモリ、又はシステムメモリに格納されているデータを読み出し、頂点データをオブジェクトベースの座標表現からワールド空間座標空間又は規格化されたデバイス座標空間に変換するようにプログラミングされてよい。
【0151】
プリミティブアセンブラ506の第1インスタンスが頂点処理ユニット504から頂点属性を受信する。プリミティブアセンブラ506は、格納された頂点属性を必要に応じて読み出し、テセレーション制御処理ユニット508による処理のためにグラフィックスプリミティブを構築する。グラフィックスプリミティブは、様々なグラフィックス処理のアプリケーションプログラミングインタフェース(API)によりサポートされる三角形、線分、点、パッチなどを含む。
【0152】
テセレーション制御処理ユニット508は、入力された頂点をジオメトリックパッチの制御点として扱う。これらの制御点は、パッチの入力表現(例えば、パッチのベース)から、テセレーション評価処理ユニット512によるサーフェス評価に用いるのに好適な表現に変換される。テセレーション制御処理ユニット508は、ジオメトリックパッチのエッジのテセレーション係数も計算できる。テセレーション係数は、単一のエッジに適用され、当該エッジに関連づけられた視点依存レベルの詳細情報を定量化する。テセレーションユニット510が、パッチのエッジのテセレーション係数を受信し、当該パッチを線プリミティブ、三角形プリミティブ、又は四辺形プリミティブなどの複数のジオメトリックプリミティブにテセレートするように構成されており、これらのプリミティブはテセレーション評価処理ユニット512に送られる。テセレーション評価処理ユニット512は、細分化されたパッチのパラメータで表示された座標を処理し、ジオメトリックプリミティブに関連づけられた頂点ごとに、サーフェス表現及び頂点属性を生成する。
【0153】
プリミティブアセンブラ514の第2インスタンスが、テセレーション評価処理ユニット512から頂点属性を受信し、格納された頂点属性を必要に応じて読み出し、ジオメトリ処理ユニット516による処理のためにグラフィックスプリミティブを構築する。ジオメトリ処理ユニット516は、ジオメトリシェーダプログラムを実行して、プリミティブアセンブラ514から受信したグラフィックスプリミティブを、ジオメトリシェーダプログラムにより指定されるように変換するプログラム可能型実行ユニットである。ジオメトリ処理ユニット516は、グラフィックスプリミティブを1つ又は複数の新たなグラフィックスプリミティブに細分化し、新たなグラフィックスプリミティブをラスタライズするのに用いられるパラメータを計算するようにプログラミングされてよい。
【0154】
ジオメトリ処理ユニット516は、ジオメトリストリームに要素を追加する又はジオメトリストリームの要素を削除することが可能であってよい。ジオメトリ処理ユニット516は、新たなグラフィックスプリミティブを指定するパラメータ及び頂点をプリミティブアセンブラ518に出力する。プリミティブアセンブラ518は、ジオメトリ処理ユニット516からパラメータ及び頂点を受信し、ビューポートスケーリング・カリング・クリッピングユニット520による処理のためにグラフィックスプリミティブを構築する。ジオメトリ処理ユニット516は、ジオメトリデータを処理する際に用いるために、並列プロセッサメモリ又はシステムメモリに格納されているデータを読み出す。ビューポートスケーリング・カリング・クリッピングユニット520は、クリッピング、カリング、及びビューポートスケーリングを行い、処理されたグラフィックスプリミティブをラスタライザ522に出力する。
【0155】
ラスタライザ522は、デプスカリング及び他のデプスベースの最適化を行うことができる。ラスタライザ522は、新たなグラフィックスプリミティブに対してスキャンコンバージョンも行い、フラグメントを生成して、これらのフラグメント及び関連するカバレッジデータをフラグメント/ピクセル処理ユニット524に出力する。フラグメント/ピクセル処理ユニット524は、フラグメントシェーダプログラム又はピクセルシェーダプログラムを実行するように構成されているプログラム可能型実行ユニットである。フラグメント/ピクセル処理ユニット524は、ラスタライザ522から受信したフラグメント又はピクセルを、フラグメントシェーダプログラム又はピクセルシェーダプログラムにより指定されるように変換する。例えば、フラグメント/ピクセル処理ユニット524は、限定されることはないが、テクスチャマッピング、シェーディング、ブレンディング、テクスチャ補正、及びパースペクティブ補正を含む操作を行い、ラスタ操作ユニット526に出力されるシェーディング済みのフラグメント又はピクセルを生成するようにプログラミングされてよい。フラグメント/ピクセル処理ユニット524は、フラグメントデータを処理するときに用いるために、並列プロセッサメモリ又はシステムメモリのいずれかに格納されているデータを読み出すことができる。フラグメントシェーダプログラム又はピクセルシェーダプログラムは、処理ユニットに設定されたサンプリングレートに応じて、サンプル、ピクセル、タイル、又は他の粒度でシェーディングするように構成されてよい。
【0156】
ラスタ操作ユニット526は、限定されることはないが、ステンシル、zテスト、及びブレンディングなどを含むラスタ操作を行い、グラフィックスメモリ(例えば、
図2Aにあるような並列プロセッサメモリ222及び/又は
図1にあるようなシステムメモリ104)に格納されるように、1つ又は複数の表示デバイス110に表示されるように、あるいは1つ又は複数のプロセッサ102若しくは並列プロセッサ112のうちの一方によるさらなる処理のために、処理済みのグラフィックスデータとしてピクセルデータを出力する処理ユニットである。ラスタ操作ユニット526は、メモリに書き込まれるzデータ又はカラーデータを圧縮し、メモリから読み出したzデータ又はカラーデータを復元するように構成されてよい。
[機械学習の概要]
【0157】
上述したアーキテクチャは、機械学習モデルを用いて訓練及び推論操作を行うのに適用されてよい。機械学習は、多くの種類のタスクを解決することに成功してきた。機械学習アルゴリズム(例えば、ニューラルネットワーク)を訓練し使用するときに生じる計算は、効率的な並列の実装形態にもともと適している。したがって、汎用グラフィックス処理ユニット(GPGPU)などの並列プロセッサが、ディープニューラルネットワークの実用的な実装形態において重要な役割を果たしてきた。単一命令複数スレッド(SIMT)アーキテクチャを備えた並列グラフィックスプロセッサが、グラフィックスパイプラインでの並列処理量を最大化するように設計されている。SIMTアーキテクチャでは、並列スレッドのグループが、プログラム命令を可能な限り頻繁に一緒に同期して実行し、処理効率を上げようと試みている。並列機械学習アルゴリズムの実装形態によりもたらされる効率によって、高容量ネットワークの使用が可能になり、これらのネットワークを大規模なデータセットで訓練することが可能になる。
【0158】
機械学習アルゴリズムとは、データのセットに基づいて学習できるアルゴリズムである。例えば、機械学習アルゴリズムは、データセット内の高次の抽象概念をモデル化するように設計されてよい。例えば、与えられた入力がいくつかのカテゴリのうちのどれに属するかを判定するのに画像認識アルゴリズムを用いることができ、入力が与えられると回帰アルゴリズムが数値を出力することができ、変換されたテキストを生成するあるいはテキスト読み上げ及び/又は音声認識を行うのにパターン認識アルゴリズムを用いることができる。
【0159】
機械学習アルゴリズムの例示的なタイプが、ニューラルネットワークである。多くのタイプのニューラルネットワークがある中で、単純なタイプのニューラルネットワークがフィードフォワード型ネットワークである。フィードフォワード型ネットワークは、ノードが層状に配置されている非巡回グラフとして実装されてよい。通常、フィードフォワード型ネットワークトポロジは、少なくとも1つの隠れ層によって分離されている入力層と出力層とを含む。隠れ層は、入力層が受信した入力を、出力層で出力を生成するのに役立つ表現に変換する。ネットワークノードは、隣接する層のノードにエッジを介して全結合されているが、各層内のノード間にはエッジがない。フィードフォワード型ネットワークの入力層のノードで受信されたデータが、各層を接続する各エッジにそれぞれ関連づけられた係数(「重み」)に基づいて、ネットワーク内の続く各層のノードの状態を計算する活性化関数を介して、出力層のノードに伝搬される(つまり、「フィードフォワード」される)。実行されるアルゴリズムによって表される特定のモデルに応じて、ニューラルネットワークアルゴリズムからの出力は様々な形式をとることができる。
【0160】
機械学習アルゴリズムを用いて特定の問題をモデル化できるようになる前に、当該アルゴリズムは訓練データセットを用いて訓練される。ニューラルネットワークの訓練には、ネットワークトポロジを選択すること、ネットワークによりモデル化された問題を表している訓練データのセットを使用すること、及び訓練データセットの全てのインスタンスに対してネットワークモデルが最小誤差で実行するまで重みを調整することが必要になる。例えば、ニューラルネットワークに対する教師あり学習の訓練プロセスにおいて、訓練データセット内のインスタンスを表す入力に応答してネットワークにより生成される出力は、当該インスタンスの「正解」ラベル付き出力と比較され、当該出力とラベル付き出力との差を表す誤差信号が計算され、当該誤差信号がネットワークの各層を通って逆伝搬されるときに、誤差を最小限に抑えるように、接続と関連づけられた重みが調整される。ネットワークは、訓練データセットの各インスタンスから生成される出力のそれぞれに対する誤差が最小になると、「訓練済み」とみなされる。
【0161】
機械学習アルゴリズムの精度は、アルゴリズムを訓練するのに用いられるデータセットの品質に大きく影響され得る。訓練プロセスは計算集約的になる可能性があり、従来の汎用プロセッサでは多大な時間を必要とし得る。したがって、並列処理ハードウェアが、多くのタイプの機械学習アルゴリズムを訓練するのに用いられている。これは、ニューラルネットワークで係数を調整する際に行われる計算が並列の実装形態にもともと適しているため、ニューラルネットワークの訓練を最適化するのに特に役立つ。具体的には、多くの機械学習アルゴリズム及びソフトウェアアプリケーションが、汎用グラフィックス処理デバイス内の並列処理ハードウェアを利用するように適合されている。
【0162】
図6は、機械学習のソフトウェアスタック600を一般化した図である。機械学習アプリケーション602が、訓練データセットを用いてニューラルネットワークを訓練するように、又は訓練したディープニューラルネットワークを用いてマシンインテリジェンスを実装するように構成されてよい。機械学習アプリケーション602は、ニューラルネットワーク用の訓練及び推論機能、並びに/又はニューラルネットワークを展開する前に訓練するのに用いられ得る特殊なソフトウェアを含んでよい。機械学習アプリケーション602は、限定されることはないが、画像認識、マッピング及び位置測定、自律航法、音声合成、医用画像、又は言語変換を含むあらゆるタイプのマシンインテリジェンスを実装できる。
【0163】
機械学習アプリケーション602のハードウェアアクセラレーションが、機械学習フレームワーク604によって可能になり得る。機械学習フレームワーク604は、機械学習プリミティブのライブラリを提供できる。機械学習プリミティブは、機械学習アルゴリズムによって一般的に行われる基本的演算である。機械学習フレームワーク604がないと、機械学習アルゴリズムの開発者は、機械学習アルゴリズムに関連した、中心となる計算ロジックを作成して最適化し、新たな並列プロセッサが開発されると、この計算ロジックを最適化し直すことが必要になるであろう。その代わりに、機械学習アプリケーションは、機械学習フレームワーク604により提供されるプリミティブを用いて必要な計算を行うように構成されてよい。例示的なプリミティブには、テンソル畳み込み、活性化関数、及びプーリングが含まれ、これらは、畳み込みニューラルネットワーク(CNN)を訓練する際に行われる計算操作である。機械学習フレームワーク604は、多くの機械学習アルゴリズムにより行われる、行列演算及びベクトル演算などの、基本的な線形代数サブプログラムを実装するためのプリミティブも提供できる。
【0164】
機械学習フレームワーク604は、機械学習アプリケーション602から受信した入力データを処理し、コンピュートフレームワーク606への適切な入力を生成することができる。コンピュートフレームワーク606は、GPGPUドライバ608に提供される基礎的な命令を抽象化して、機械学習フレームワーク604がGPGPUハードウェア610のアーキテクチャに関する詳しい知識を有することを必要とせずに、機械学習フレームワーク604がGPGPUハードウェア610を介してハードウェアアクセラレーションを活用できることを可能にすることができる。さらに、コンピュートフレームワーク606によって、GPGPUハードウェア610の様々なタイプ及び世代にわたり、機械学習フレームワーク604のハードウェアアクセラレーションが可能になり得る。
[GPGPU機械学習アクセラレーション]
【0165】
図7は汎用グラフィックス処理ユニット700を示しており、これは、
図2Aの並列プロセッサ200であっても、
図1の並列プロセッサ112であってもよい。汎用処理ユニット(GPGPU)700は、ディープニューラルネットワークの訓練と関連した計算ワークロードのタイプを処理する点で特に効率的であるように構成されよい。さらに、GPGPU700は、マルチGPUクラスタを作成して、特にディープニューラルネットワークの訓練速度を向上させるために、GPGPUの他のインスタンスに直接的に接続されてよい。
【0166】
GPGPU700は、ホストプロセッサとの接続を可能にするホストインタフェース702を含む。ホストインタフェース702は、PCI Expressインタフェースであってよい。しかしながら、ホストインタフェースは、ベンダ固有の通信インタフェース又は通信ファブリックであってもよい。GPGPU700はホストプロセッサからコマンドを受信し、グローバルスケジューラ704を用いて、これらのコマンドと関連づけられた実行スレッドを処理クラスタ706A~706Hのセットに配分する。処理クラスタ706A~706Hはキャッシュメモリ708を共有する。キャッシュメモリ708は、処理クラスタ706A~706H内のキャッシュメモリに対して、高次のキャッシュとしての機能を果たしてよい。図示された処理クラスタ706A~706Hは、
図2Aにあるような処理クラスタ214A~214Nに対応してよい。
【0167】
GPGPU700は、メモリコントローラ712A~712Bのセットを介して処理クラスタ706A~Hに結合されたメモリ714A~Bを含む。メモリ714A~714Bは、ダイナミックランダムアクセスメモリ(DRAM)又はグラフィックスランダムアクセスメモリを含む様々なタイプのメモリデバイス、例えば、グラフィックスダブルデータレート(GDDR)メモリを含む同期式グラフィックスランダムアクセスメモリ(SGRAM)などを含んでよい。メモリ714A~714Bは、限定されることはないが、高帯域幅メモリ(HBM)を含む3Dスタックメモリも含んでよい。
【0168】
処理クラスタ706A~706Hのそれぞれは、
図2Dのグラフィックスマルチプロセッサ234、
図3Aのグラフィックスマルチプロセッサ325、
図3Bのグラフィックスマルチプロセッサ350などのグラフィックスマルチプロセッサのセットを含んでもよく、
図3Cにあるようなマルチコアグループ365A~365Nを含んでもよい。コンピュートクラスタのグラフィックスマルチプロセッサは、機械学習計算に適した精度の範囲で計算操作を行うことができる複数のタイプの整数論理ユニット及び浮動小数点論理ユニットを含む。例えば、処理クラスタ706A~706Hのそれぞれにある浮動小数点ユニット264の少なくともあるサブセットが、16ビット又は32ビット浮動小数点演算を行うように構成されてよく、浮動小数点ユニット264の別のサブセットが64ビット浮動小数点演算を行うように構成されてよい。
【0169】
GPGPU700の複数のインスタンスが、コンピュートクラスタとして動作するように構成されてよい。同期及びデータ交換のためにコンピュートクラスタにより用いられる通信メカニズムは、実施形態によって様々である。例えば、GPGPU700の複数のインスタンスは、ホストインタフェース702で通信する。1つの実施形態において、GPGPU700は、GPGPUの他のインスタンスへの直接的な接続を可能にするGPUリンク710にGPGPU700を結合するI/Oハブ709を含む。GPUリンク710は、GPGPU700の複数のインスタンス間の通信及び同期を可能にする専用のGPU間ブリッジに結合されてよい。必要に応じて、GPUリンク710は、データを送受信する高速相互接続を用いて、他のGPGPU又は並列プロセッサに結合する。GPGPU700の複数のインスタンスは、別個のデータ処理システムに配置され、ホストインタフェース702を介してアクセス可能なネットワークデバイスを介して通信してよい。GPUリンク710は、ホストインタフェース702に加えて又はその代用として、ホストプロセッサへの接続を可能にするように構成されてよい。
【0170】
図示されたGPGPU700の構成はニューラルネットワークを訓練するように構成されてよいが、GPGPU700の代替構成が、高性能又は低電力推論プラットフォームに展開するように構成されてよい。ある推論構成において、GPGPU700は、訓練構成と比べてより少ない数の処理クラスタ706A~706Hを含む。さらに、メモリ714A~714Bと関連したメモリ技術が、推論構成と訓練構成とで異なってよい。1つの実施形態において、GPGPU700の推論構成は、特定の命令の推論をサポートできる。例えば、ある推論構成が、1つ又は複数の8ビット整数ドット積命令のサポートを提供でき、この命令は、展開されたニューラルネットワークの推論操作時によく用いられる。
【0171】
図8は、マルチGPUコンピュータ処理システム800を示している。マルチGPUコンピュータ処理システム800は、ホストインタフェーススイッチ804を介して複数のGPGPU806A~806Dに結合されるプロセッサ802を含んでよい。ホストインタフェーススイッチ804は、プロセッサ802をPCI Expressバスに結合するPCI Expressスイッチデバイスであってよく、PCI Expressバスによって、プロセッサ802はGPGPU806A~806Dのセットと通信できる。複数のGPGPU806A~806Dのそれぞれは、
図7のGPGPU700のインスタンスであってよい。GPGPU806A~806Dは、高速ポイントツーポイントGPU間リンク816のセットを介して相互接続できる。高速GPU間リンクは、
図7にあるようなGPUリンク710などの専用GPUリンクを介して、GPGPU806A~806Dのそれぞれに接続できる。P2PのGPUリンク816によって、プロセッサ802が接続されるホストインタフェースバスによる通信を必要とすることなく、GPGPU806A~806Dのそれぞれの間で直接的な通信が可能になる。P2PのGPUリンクを対象とするGPU間トラフィックで、ホストインタフェースバスは依然として、システムメモリアクセスに利用できる、又はマルチGPUコンピュータ処理システム800の他のインスタンスとの、例えば1つ又は複数のネットワークデバイスを介した通信に利用できる。
図8ではGPGPU806A~Dがホストインタフェーススイッチ804を介してプロセッサ802に接続しているが、プロセッサ802は代替的に、P2PのGPUリンク816への直接的なサポートを含み、GPGPU806A~806Dに直接的に接続してよい。
[機械学習ニューラルネットワークの実装形態]
【0172】
本明細書で説明するコンピュータ処理アーキテクチャは、機械学習向けニューラルネットワークの訓練及び展開に特に適しているタイプの並列処理を行うように構成されてよい。ニューラルネットワークは、グラフ関係を有する機能のネットワークとして一般化されてよい。当技術分野でよく知られているように、機械学習に用いられるニューラルネットワークの実装形態には様々なタイプがある。1つの例示的なタイプのニューラルネットワークが、前述したように、フィードフォワード型ネットワークである。
【0173】
別の例示的なタイプのニューラルネットワークが、畳み込みニューラルネットワーク(CNN)である。CNNは、既知のグリッド状トポロジを有する画像データなどのデータを処理するために特化されたフィードフォワード型ニューラルネットワークである。したがって、CNNはコンピュータビジョン及び画像認識のアプリケーションによく用いられているが、音声・言語処理などの他のタイプのパターン認識にも用いられてよい。CNN入力層内の各ノードは、「フィルタ」(網膜に見られる受容野から発想を得た特徴検出器)のセットに編成されており、フィルタの各セットの出力は、ネットワークの続く各層のノードに伝搬される。CNNの計算は、畳み込み数学演算を各フィルタに適用して、そのフィルタの出力を生成することを含む。畳み込みとは、2つの関数によって行われる、第3の関数を生成するための特殊な種類の数学演算であり、第3の関数は、2つの元の関数のうちの一方の修正版である。畳み込みネットワークの用語では、畳み込みに対する第1の関数は入力と呼ばれてよく、第2の関数は畳み込みカーネルと呼ばれてよい。出力は、特徴マップと呼ばれてよい。例えば、畳み込み層への入力は、入力画像の様々な色成分を規定するデータの多次元配列であってよい。畳み込みカーネルは、パラメータの多次元配列であってよく、これらのパラメータは、ニューラルネットワークの訓練プロセスによって適合される。
【0174】
再帰型ニューラルネットワーク(RNN)は、層間のフィードバック結合を含むフィードフォワード型ニューラルネットワークの仲間である。RNNは、ニューラルネットワークの異なる部分にわたってパラメータデータを共有することで、シーケンシャルデータのモデリングを可能にする。RNNのアーキテクチャはサイクルを含む。RNNからの出力データの少なくとも一部がシーケンスの次の入力を処理するためのフィードバックとして用いられるため、サイクルは、変数の現在の値が将来の時点でその変数自体の値に与える影響を表す。この特徴によって、RNNは、言語データが構成され得る可変性に起因して、言語処理にとって特に役立つことになる。
【0175】
後述される図は、例示的なフィードフォワード型、CNN型、及びRNN型ネットワークを示しており、併せてそれぞれのタイプのネットワークをそれぞれ訓練して展開するための一般的なプロセスも説明している。これらの説明は本明細書で説明される任意の特定の実施形態に関して例示的且つ非限定的であり、示される概念は概してディープニューラルネットワーク及び機械学習技法に一般に適用され得ることが理解されるであろう。
【0176】
上述した例示的なニューラルネットワークは、深層学習を行うのに用いられてよい。深層学習とは、ディープニューラルネットワークを用いる機械学習である。深層学習に用いられるディープニューラルネットワークは、複数の隠れ層で構成される人工ニューラルネットワークであり、隠れ層を1つしか含まない浅いニューラルネットワークとは異なる。深いニューラルネットワークほど、訓練は概して計算集約的になる。しかしながら、さらなるネットワークの隠れ層によって、浅い機械学習技法と比べて出力誤差の減少をもたらす多段式パターン認識が可能になる。
【0177】
深層学習に用いられるディープニューラルネットワークは通常、数学モデルを表すバックエンドネットワークに結合された、特徴認識を行うためのフロントエンドネットワークを含み、この数学モデルは、当該モデルに提供される特徴表現に基づいて、複数の操作(例えば、物体分類、音声認識など)を行うことができる。深層学習によって、手作りの特徴処理をモデルに対して行うことを必要とせずに、機械学習の実行が可能になる。その代わりに、ディープニューラルネットワークは入力データ内の統計的構造又は相関関係に基づいて特徴を学習できる。学習済みの特徴は、検出された特徴を出力にマッピングできる数学モデルに提供されてよい。ネットワークによって用いられる数学モデルは概して、実行される特定のタスクに特化されており、異なるモデルが異なるタスクを実行するのに用いられることになる。
【0178】
ニューラルネットワークが構築されると、特定のタスクを行うネットワークを訓練するために、当該ネットワークに学習モデルが適用されてよい。学習モデルは、ネットワークの出力誤差を減らすためにモデル内の重みをどのように調整するかを示している。誤差の逆伝搬が、ニューラルネットワークの訓練に用いられる一般的な方法である。入力ベクトルが、処理のためにネットワークに提供される。ネットワークの出力は、損失関数を用いて所望の出力と比較され、出力層の複数のニューロンのそれぞれに対して誤差値が計算される。誤差値は次に、各ニューロンが元の出力への寄与をほぼ表す相関誤差値を有するまで、逆方向に伝搬される。ネットワークは次いで、これらの誤差から、確率的勾配降下アルゴリズムなどのアルゴリズムを用いて学習し、ニューラルネットワークの重みを更新してよい。
【0179】
図9A~
図9Bは、例示的な畳み込みニューラルネットワークを示している。
図9Aは、CNN内の様々な層を示している。
図9Aに示すように、画像処理をモデル化するのに用いられる例示的なCNNが、入力画像の赤、緑、及び青(RGB)の成分を示す入力902を受信してよい。入力902は、複数の畳み込み層(例えば、畳み込み層904、畳み込み層906)により処理されてよい。複数の畳み込み層からの出力は、必要に応じて、全結合層908のセットにより処理されてよい。フィードフォワード型ネットワークについて前述したように、全結合層内のニューロンが、前の層の全ての活性化に対して全結合している。全結合層908からの出力は、ネットワークから出力結果を生成するのに用いられてよい。全結合層908内の活性化は、畳み込みの代わりに行列乗算を用いて計算されてよい。全てのCNN実装形態が全結合層908を利用するわけではない。例えば、いくつかの実装形態では、畳み込み層906がCNNの出力を生成してよい。
【0180】
畳み込み層は、全結合層908に見られる一般的なニューラルネットワーク構成とは異なり、疎に結合されている。一般的なニューラルネットワーク層は、全ての出力ユニットが全ての入力ユニットとやり取りできるように、全結合されている。しかしながら図示されているように、フィールド内の畳み込みの出力は(フィールド内の各ノードのそれぞれの状態値の代わりに)次の層のノードに入力されるため、畳み込み層は疎に結合されている。畳み込み層に関連づけられたカーネルは畳み込み演算を行い、その出力は次の層に送信される。畳み込み層内で行われる次元削減は、CNNが大画像の処理に拡張するのを可能にする1つの態様である。
【0181】
図9Bは、CNNの畳み込み層内の例示的な計算ステージを示している。CNNの畳み込み層への入力912は、畳み込み層914の3つのステージで処理されてよい。この3つのステージは、畳み込みステージ916、検出器ステージ918、及びプーリングステージ920を含んでよい。次に畳み込み層914は、続く畳み込み層にデータを出力してよい。ネットワークの最後の畳み込み層は、出力特徴マップデータを生成しても、全結合層に入力を提供して、例えばCNNへの入力の分類値を生成してもよい。
【0182】
畳み込みステージ916では、いくつかの畳み込みを並列に行って、線形活性化のセットを生成する。畳み込みステージ916は、アフィン変換を含んでよく、これは並進を加えた線形変換に指定され得る任意の変換である。アフィン変換は、回転、並進、スケーリング、及びこれらの変換の組み合わせを含む。畳み込みステージは、入力の特定の領域に結合されている機能(例えば、ニューロン)の出力を計算する。この領域は、ニューロンと関連づけられたローカル領域と決定されてよい。ニューロンは、ニューロンの重みと、ニューロンが結合されている、ローカル入力内の領域とのドット積を計算する。畳み込みステージ916からの出力は、畳み込み層914の続く各ステージによって処理される線形活性化のセットを規定する。
【0183】
線形活性化は、検出器ステージ918により処理されてよい。検出器ステージ918では、各線形活性化が非線形活性化関数で処理される。非線形活性化関数は、畳み込み層の受容野に影響を与えることなく、ネットワーク全体の非線形特性を改善する。いくつかのタイプの非線形活性化関数が用いられてよい。1つの特定のタイプが正規化線形ユニット(ReLU)であり、これは、f(x)=max(0,x)と定義された活性化関数を用い、活性化を0で分けることになる。
【0184】
プーリングステージ920は、畳み込み層906の出力を近くの出力の要約統計量と置き換えるプーリング関数を用いる。プーリング関数は、入力に対する小さい並進がプールされた出力を変えないように、ニューラルネットワークに並進不変性を導入するのに用いられてよい。局所的な並進に対する不変性は、入力データ内の特徴の存在が当該特徴の正確な位置より重要になるシナリオで役立ち得る。最大プーリング、平均プーリング、及びL2ノルムプーリングを含む様々なタイプのプーリング関数が、プーリングステージ920で用いられてよい。さらに、いくつかのCNN実装形態は、プーリングステージを含まない。その代わりに、そのような実装形態は、これまでの畳み込みステージと比べてストライドを増やした別の畳み込みステージを代用している。
【0185】
次いで畳み込み層914からの出力は、次の層922によって処理されてよい。次の層922は、別の畳み込み層であっても、全結合層908のうちの1つであってもよい。例えば、
図9Aの第1畳み込み層904は、第2畳み込み層906に出力してよく、第2畳み込み層は、全結合層908の第1層に出力してよい。
【0186】
図10は、例示的な再帰型ニューラルネットワーク1000を示している。再帰型ニューラルネットワーク(RNN)では、ネットワークの前の状態がネットワークの現在の状態の出力に影響を与える。RNNは、様々な機能を用いて、様々なやり方で構築されてよい。RNNの使用は概して、数学モデルを用いて前のシーケンスの入力に基づいて将来を予測することを中心に展開する。例えば、RNNを用いて、前のシーケンスのワードが与えられると、次のワードを予測する統計的言語モデルを実行してよい。図示されたRNN1000は、入力ベクトルを受信する入力層1002、再帰関数を実装する隠れ層1004、前の状態の「記憶」を可能にするフィードバックメカニズム1005、及び結果を出力する出力層1006を有するものとして説明されてよい。RNN1000は、時間ステップに基づいて動作する。所与の時間ステップでのRNNの状態は、前の時間ステップに基づき、フィードバックメカニズム1005を介して影響を受ける。所与の時間ステップでは、隠れ層1004の状態が、前の状態と、現在の時間ステップでの入力とによって定められる。第1時間ステップでの初期入力(X
1)が、隠れ層1004により処理されてよい。第2入力(X
2)が、初期入力(X
1)の処理時に決定された状態情報を用いて、隠れ層1004により処理されてよい。所与の状態が、s
t=f(Ux
t+Ws
t-1)として計算されてよく、ここで、U及びWはパラメータ行列である。関数fは一般に、双曲線正接関数(Tanh)又は正規化関数f(x)=max(0,x)の変形などの非線形性である。しかしながら、隠れ層1004で用いられる特定の数学関数は、RNN1000の特定の実装形態の詳細に応じて異なってよい。
【0187】
説明した基本的なCNN型ネットワーク及びRNN型ネットワークに加えて、これらのネットワークに対する変形が可能になり得る。1つの例示的なRNN変形が、長短期記憶(LSTM)RNNである。LSTM RNNは、長いシーケンスの言語を処理するのに必要になり得る長期依存を学習できる。CNNの変形が畳み込みディープビリーフネットワークである。これは、CNNと同様の構造を有し、ディープビリーフネットワークと同様の方式で訓練される。ディープビリーフネットワーク(DBN)とは、複数層の確率(ランダム)変数で構成された敵対的生成ニューラルネットワークである。DBNは、貪欲な教師なし学習を用いて層ごとに訓練されてよい。次に、DBNの学習済みの重みが、ニューラルネットワークにとって最適な重みの初期セットを決定することにより、事前訓練ニューラルネットワークを提供するのに用いられてよい。
【0188】
図11は、ディープニューラルネットワークの訓練及び展開を示している。あるタスクのために所与のネットワークが構築されると、ニューラルネットワークは、訓練データセット1102を用いて訓練される。様々な訓練フレームワーク1104が、訓練プロセスのハードウェアアクセラレーションを可能にするために開発されてきた。例えば、
図6の機械学習フレームワーク604は、訓練フレームワーク604として構成されてよい。訓練フレームワーク604は、訓練前のニューラルネットワーク1106に接続し、訓練済みのニューラルネット1108を生成するために、本明細書で説明した並列処理リソースを用いて訓練前のニューラルネットを訓練するのを可能にしてよい。
【0189】
訓練プロセスを開始するために、ランダムに、又はディープビリーフネットワークを用いて事前訓練することで、初期重みが選択されてよい。次に訓練サイクルが、教師あり方式又は教師なし方式のいずれかで行われてよい。
【0190】
教師あり学習とは、訓練データセット1102が入力に対する所望の出力と組み合わされた入力を含む場合、又は訓練データセットが既知の出力を有する入力を含み、ニューラルネットワークの出力が手動で格付けされる場合などに、訓練が仲介オペレーションとして行われる学習方法である。ネットワークは入力を処理し、得られた出力を、期待される出力又は所望の出力のセットと比較する。次に誤差は、システムを通じて後方に伝搬される。訓練フレームワーク1104は、訓練前のニューラルネットワーク1106を制御する重みを調整するように調整できる。訓練フレームワーク1104は、訓練前のニューラルネットワーク1106が、既知の入力データに基づいて、正解を生成するのに好適なモデルに向かってどの程度収束しているかを監視するツールを提供できる。ニューラルネットワークにより生成される出力を改善するためにネットワークの重みが調整されると、訓練プロセスが繰り返し行われる。ニューラルネットワークが、訓練済みのニューラルネット1108と関連づけられた統計的に所望の精度に達するまで、訓練プロセスは継続してよい。次いで、訓練済みのニューラルネットワーク1108は、新たなデータ1112の入力に基づいて推論結果1114を生成する任意の数の機械学習操作を実装するために展開されてよい。
【0191】
教師なし学習とは、ネットワークがラベルなしデータを用いて自ら訓練を試みる学習方法である。したがって教師なし学習の場合、訓練データセット1102は、関連づけられた出力データを何も持たない入力データを含むことになる。訓練前のニューラルネットワーク1106は、ラベルなし入力のグループ分けを学習でき、個々の入力がどれだけデータセット全体に関連しているかを判定できる。教師なし訓練は、自己組織化マップを生成するのに用いられてよく、これは、データの次元を削減する際に役立つ操作を実行できる訓練済みのニューラルネットワーク1108の一種である。教師なし訓練は、異常検出を行うのにも用いられてよく、これにより、データの通常のパターンから外れた入力データセット内のデータ点を識別するのが可能になる。
【0192】
教師あり訓練及び教師なし訓練の変形も使用されてよい。半教師あり学習とは、訓練データセット1102が同じ配分のラベル付きデータとラベルなしデータとの組み合わせを含む技法である。インクリメンタル学習とは、教師あり学習の変形であり、ここでは、入力データを継続的に用いて、モデルをさらに訓練する。インクリメンタル学習によって、訓練済みのニューラルネットワーク1108が、初期訓練時にネットワークに教え込まれた知識を忘れずに、新たなデータ1112に適合することが可能になる。
【0193】
教師ありであっても、教師なしであっても、特にディープニューラルネットワークの訓練プロセスは、単一コンピュートノードにとって過度に計算集約的かもしれない。単一コンピュートノードを用いる代わりに、分散型ネットワークの計算ノードを用いて、訓練プロセスを加速することができる。
【0194】
図12は、分散型学習を示すブロック図である。分散型学習とは、複数の分散型コンピュータ処理ノードを用いて、ニューラルネットワークの教師あり訓練または教師なし訓練を行う訓練モデルである。分散型計算ノードはそれぞれ、1つ又は複数のホストプロセッサと、
図7にあるような高度に並列化された汎用グラフィックス処理ユニット700などの複数の汎用処理ノードのうちの1つ又は複数とを含んでよい。図示されているように、分散型学習は、モデル並列処理1202、データ並列処理1204、又はモデル及びデータ並列処理の組み合わせ1206で行われてよい。
【0195】
モデル並列処理1202では、分散型システム内の異なる計算ノードが、単一ネットワークの異なる部分の訓練計算を行うことができる。例えば、ニューラルネットワークの各層は、分散型システムの異なる処理ノードにより訓練されてよい。モデル並列処理の利点には、特に大規模モデルに拡張する能力が含まれる。ニューラルネットワークの異なる層と関連づけられた複数の計算を分割することで、全ての層の重みが単一計算ノードのメモリに収まらない超大規模ニューラルネットワークの訓練が可能になる。いくつかの例では、大規模ニューラルネットワークの教師なし訓練を行う際に、モデル並列処理が特に役立ち得る。
【0196】
データ並列処理1204では、分散型ネットワークの個々のノードがモデルの完全なインスタンスを有し、各ノードがデータの異なる部分を受信する。次に、個々のノードからの結果が組み合わされる。データ並列処理には様々な手法が可能であるが、データ並列訓練手法は全て、結果を組み合わせ、各ノード間でモデルパラメータを同期させる技法が必要になる。データを組み合わせるための例示的な手法には、パラメータ平均化と更新ベースのデータ並列処理とが含まれる。パラメータ平均化では、訓練データのサブセットで各ノードを訓練し、グローバルパラメータ(例えば、重み、バイアス)を各ノードからのパラメータの平均に設定する。パラメータ平均化では、パラメータデータを維持する中央パラメータサーバを用いる。更新ベースのデータ並列処理は、パラメータを各ノードからパラメータサーバに転送する代わりにモデル化の更新情報が転送されること以外は、パラメータ平均化と同様である。さらに、更新ベースのデータ並列処理は、分散方式で行われてもよく、この場合、更新情報は圧縮されてノード間で転送される。
【0197】
モデルとデータの同時並列処理1206が、例えば、各計算ノードが複数のGPUを含む分散型システムで行われてよい。各ノードはモデルの完全なインスタンスを有してよく、各ノード内の独立したGPUがモデルの異なる部分を訓練するのに用いられる。
【0198】
分散型訓練では、単一の機械での訓練と比べてオーバヘッドが増加している。しかしながら、本明細書で説明した並列プロセッサ及びGPGPUはそれぞれ、分散型訓練のオーバヘッドを減らすための様々な技法を実装することができ、その技術には、高帯域幅GPU間データ転送及び加速型リモートデータ同期を可能にする技法が含まれる。
[例示的な機械学習アプリケーション]
【0199】
機械学習は、限定されることはないが、コンピュータビジョン、自動運転、ナビゲーション、音声認識、及び言語処理を含む様々な技術的問題を解決するのに適用され得る。コンピュータビジョンは、これまで機械学習アプリケーションの最も活発な研究領域のうちの1つである。コンピュータビジョンアプリケーションは、顔認識などの人の視覚能力を再現することから、視覚能力の新たなカテゴリを作成することまで多岐にわたる。例えば、コンピュータビジョンアプリケーションは、映像に見える物体に生じた振動から音波を認識するように構成されてよい。並列プロセッサによる加速型機械学習によって、これまでに実現可能だったものより著しく規模が大きい訓練データセットを用いてコンピュータビジョンアプリケーションを訓練することができ、また低電力並列プロセッサを用いて推論システムを展開することができる。
【0200】
並列プロセッサによる加速型機械学習は、車線や道路標識の認識、障害物回避、ナビゲーション、及び運転制御を含む自動運転アプリケーションを有する。加速型機械学習技法は、特定の訓練入力に対する適切な応答を定めたデータセットに基づいて、運転モデルを訓練するのに用いてよい。本明細書で説明された並列プロセッサは、自動運転ソリューションに用いられる複雑さを増すニューラルネットワークの速やかな訓練を可能にし、また自律走行車に組み込むのに好適なモバイルプラットフォームへの低電力推論プロセッサの展開を可能にし得る。
【0201】
並列プロセッサ加速型ディープニューラルネットワークは、自動音声認識(ASR)への機械学習の取り組みを可能にした。ASRは、入力音響シーケンスが与えられると、最も可能性の高い言語シーケンスを計算する機能の創出を含む。ディープニューラルネットワークを用いる加速型機械学習は、ASRに以前から用いられている隠れマルコフモデル(HMM)及び混合ガウスモデル(GMM)の交換を可能にした。
【0202】
並列プロセッサ加速型機械学習は、自然言語処理の加速にも用いられてよい。自動学習手順では、統計的推論アルゴリズムを利用して、誤った入力又は未知の入力に対してロバストなモデルを生成できる。例示的な自然言語プロセッサアプリケーションは、人の言語間の自動機械翻訳を含む。
【0203】
機械学習に用いられる並列処理プラットフォームは、訓練プラットフォームと展開プラットフォームとに分割されてよい。訓練プラットフォームは一般に、高度に並列化されており、マルチGPUシングルノード訓練及びマルチノードマルチGPU訓練を加速させる最適化を含む。訓練に適した例示的な並列プロセッサには、
図7の汎用グラフィックス処理ユニット700と、
図8のマルチGPUコンピュータ処理システム800とが含まれている。一方、展開機械学習プラットフォームは一般に、カメラ、自律型ロボット、及び自律走行車などの製品に使用するのに好適な低電力並列プロセッサを含む。
【0204】
図13は、訓練済みのモデルを用いた推論を行うのに好適な、例示的な推論用システムオンチップ(SoC)1300を示している。SoC1300は、メディアプロセッサ1302、ビジョンプロセッサ1304、GPGPU1306、及びマルチコアプロセッサ1308を含む処理コンポーネントを一体化することができる。GPGPU1306は、本明細書で説明したGPGPU700などのGPGPUであってよく、マルチコアプロセッサ1308は、マルチコアプロセッサ405~406などの本明細書で説明したマルチコアプロセッサであってよい。SoC1300はさらに、これらの処理コンポーネントのそれぞれがアクセス可能な共有オンチップデータプールを可能にできるオンチップメモリ1305を含んでよい。各処理コンポーネントは、自律走行車及び自律型ロボットを含む様々な機械学習プラットフォームへの展開を可能にする低電力動作用に最適化されてよい。例えば、SoC1300の1つの実装形態が、自律走行車のメイン制御システムの一部として用いられてよい。SoC1300が自律走行車に用いられるように構成されている場合、SoCは、展開管轄機関の関連する機能的な安全基準を順守するように設計され且つ構成されている。
【0205】
動作に際して、メディアプロセッサ1302及びビジョンプロセッサ1304は、コンピュータビジョンのオペレーションを加速させるために、連携して働くことができる。メディアプロセッサ1302は、複数の高解像度(例えば、4K、8K)ビデオストリームの低遅延デコードを可能にし得る。デコードされたビデオストリームは、オンチップメモリ1305のバッファに書き込まれてよい。ビジョンプロセッサ1304は次に、デコードされたビデオを解析し、訓練済み画像認識モデルを用いたフレーム処理の準備として、デコードされたビデオのフレームに対して予備処理操作を行ってよい。例えば、ビジョンプロセッサ1304は、高解像度ビデオデータに対して画像認識を行うのに用いられるCNN用畳み込み演算を加速させることができ、バックエンドモデル計算がGPGPU1306により行われる。
【0206】
マルチコアプロセッサ1308は、メディアプロセッサ1302及びビジョンプロセッサ1304により行われるデータ転送及び共有メモリ操作の順序付け及び同期を支援する制御ロジックを含んでよい。マルチコアプロセッサ1308は、GPGPU1306の推論計算能力を利用できるソフトウェアアプリケーションを実行するアプリケーションプロセッサとしても機能することができる。例えば、ナビゲーション及び運転ロジックの少なくとも一部が、マルチコアプロセッサ1308で実行するソフトウェアに実装されてよい。そのようなソフトウェアは、計算ワークロードをGPGPU1306に直接的に発行することができる、又は計算ワークロードはマルチコアプロセッサ1308に発行されてよい。マルチコアプロセッサはこれらの操作の少なくとも一部をGPGPU1306にオフロードすることができる。
【0207】
GPGPU1306は、汎用グラフィックス処理ユニット700内の低電力構成の処理クラスタ706A~706Hなどのコンピュートクラスタを含んでよい。GPGPU1306内のコンピュートクラスタは、訓練済みのニューラルネットワーク上で推論計算を行うように特に最適化された命令をサポートできる。例えば、GPGPU1306は、8ビット及び4ビットの整数ベクトル演算などの低精度計算を行う命令をサポートできる。
[別のシステム概要]
【0208】
図14は、処理システム1400のブロック図である。本明細書の任意の他の図の要素と同じ又は同様の名称を有する
図14の要素は、他の図にあるのと同じ要素を示しており、本明細書のどこか他の箇所で説明したものとして、それと同様な方式で動作又は機能でき、同じコンポーネントを有してよく、他のエンティティに接続されてよいが、そのように限定されることはない。システム1400は、単一プロセッサのデスクトップシステム、マルチプロセッサのワークステーションシステム、又は多数のプロセッサ1402若しくはプロセッサコア1407を有するサーバシステムに用いられてよい。システム1400は、モバイルデバイス、ハンドヘルドデバイス、又は埋め込み型デバイスに使用されるシステムオンチップ(SoC)集積回路に組み込まれた、例えば、ローカルエリアネットワーク又はワイドエリアネットワークへの有線接続機能又は無線接続機能を備えた「モノのインターネット」(IoT)デバイスなどに組み込まれた処理プラットフォームであってよい。
【0209】
システム1400は、
図1のコンポーネントと対応するコンポーネントを有する処理システムであってよい。例えば、異なる構成において、プロセッサ1402又はプロセッサコア1407が、
図1のプロセッサ102と対応してよい。グラフィックスプロセッサ1408が、
図1の並列プロセッサ112と対応してよい。外付けグラフィックスプロセッサ1418が、
図1の複数のアドインデバイス120のうちの1つであってよい。
【0210】
システム1400は、サーバベースのゲームプラットフォーム、ゲーム及びメディアコンソールを含むゲームコンソール、携帯型ゲームコンソール、ハンドヘルド型ゲームコンソール、又はオンラインゲームコンソールを含んでも、これらと結合しても、これらに統合されてもよい。システム1400は、携帯電話、スマートフォン、タブレット型コンピュータ処理デバイス、又は内蔵記憶容量が低いラップトップなどの携帯型インターネット接続デバイスの一部であってよい。処理システム1400は、スマートウォッチウェアラブルデバイスなどのウェアラブルデバイス、現実世界の視覚体験、音声体験、若しくは触覚体験を補助する視覚出力、音声出力、若しくは触覚出力を提供するか、そうでない場合には、テキスト、音声、グラフィックス、映像、ホログラフィ像若しくはホログラフィ映像、若しくは触覚フィードバックを提供する拡張現実(AR)機能若しくは仮想現実(VR)機能で拡充されたスマートアイウェア若しくは衣類、他の拡張現実(AR)デバイス、又は他の仮想現実(VR)デバイスも含んでよく、それらと結合してもよく、又はそれらに統合されてもよい。処理システム1400は、テレビ又はセットトップボックス機器の一部を含んでも、その一部であってもよい。システム1400は、バス、トラクタトレーラ、自動車、モータ駆動又は電動のオートバイ、飛行機若しくはグライダ(又はこれらの任意の組み合わせ)などの自動運転乗り物に含まれても、これらと結合しても、これらに統合されてもよい。自動運転乗り物は、システム1400を用いて、当該乗り物の周囲で検知された環境を処理してよい。
【0211】
1つ又は複数のプロセッサ1402は、実行されるとシステム又はユーザソフトウェアのオペレーションを行う命令を処理する1つ又は複数のプロセッサコア1407を含んでよい。1つ又は複数のプロセッサコア1407のうちの最も小さいものは、特定の命令セット1409を処理するように構成されてよい。命令セット1409は、複合命令セットによるコンピュータ処理(CISC)、縮小命令セットによるコンピュータ処理(RISC)、又は超長命令語(VLIW)によるコンピュータ処理を容易にしてよい。1つ又は複数のプロセッサコア1407は、別の命令セット1409を処理してよく、この命令セットは、他の命令セットのエミュレーションを容易にする命令を含んでよい。プロセッサコア1407は、デジタル信号プロセッサ(DSP)などの他の処理デバイスも含んでよい。
【0212】
プロセッサ1402は、キャッシュメモリ1404を含んでよい。アーキテクチャに応じて、プロセッサ1402は、単一の内蔵キャッシュ又は複数レベルの内蔵キャッシュを有してよい。いくつかの実施形態において、キャッシュメモリは、プロセッサ1402の様々なコンポーネントの間で共有される。いくつかの実施形態において、プロセッサ1402は、外付けキャッシュ(例えば、レベル3(L3)キャッシュ又はラストレベルキャッシュ(LLC))(不図示)も用いる。この外付けキャッシュは、既知のキャッシュコヒーレンシ技法を用いて複数のプロセッサコア1407の間で共有されてよい。レジスタファイル1406がさらに、プロセッサ1402に含まれてよく、このレジスタファイルは異なるタイプのデータを格納するための異なるタイプのレジスタ(例えば、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、及び命令ポインタレジスタ)を含んでよい。一部のレジスタは汎用レジスタであってよく、他のレジスタはプロセッサ1402の方式に固有であってよい。
【0213】
1つ又は複数のプロセッサ1402は、アドレス信号、データ信号、又は制御信号などの通信信号をプロセッサ1402とシステム1400の他のコンポーネントとの間で伝送する1つ又は複数のインタフェースバス1410に結合されてよい。これらの実施形態のうちの1つでは、インタフェースバス1410は、ダイレクトメディアインタフェース(DMI)バスのあるバージョンなどのプロセッサバスであってよい。しかしながら、プロセッサバスはDMIバスに限定されることはなく、1つ又は複数のペリフェラルコンポーネントインターコネクトバス(例えば、PCI、PCI Express)、メモリバス、又は他のタイプのインタフェースバスを含んでよい。例えば、プロセッサ1402は、統合メモリコントローラ1416及びプラットフォームコントローラハブ1430を含んでよい。メモリコントローラ1416は、メモリデバイスとシステム1400の他のコンポーネントとの間の通信を容易にし、プラットフォームコントローラハブ(PCH)1430は、ローカルのI/Oバスを介してI/Oデバイスへの接続を提供する。
【0214】
メモリデバイス1420は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、相変化メモリデバイス、又はプロセスメモリとしての機能を果たすのに好適な性能を有する何らかの他のメモリデバイスであってよい。メモリデバイス1420は、例えば、システム1400のシステムメモリとして動作し、1つ又は複数のプロセッサ1402がアプリケーション又はプロセスを実行するときに用いるデータ1422及び命令1421を格納してよい。メモリコントローラ1416は、任意的な外付けグラフィックスプロセッサ1418とも結合し、この外付けグラフィックスプロセッサは、グラフィックス操作及びメディア操作を行うために、プロセッサ1402の1つ又は複数のグラフィックスプロセッサ1408と通信してよい。いくつかの実施形態では、グラフィックス操作、メディア操作、及び/又はコンピュート操作が、特殊なセットのグラフィックス操作、メディア操作、又はコンピュート操作を行うように構成され得るコプロセッサであるアクセラレータ1412によって支援されてよい。例えば、アクセラレータ1412は、機械学習操作又はコンピュート操作を最適化するのに用いられる行列乗算アクセラレータであってよい。アクセラレータ1412は、グラフィックスプロセッサ1408と連携してレイトレーシング操作を行うのに用いられ得るレイトレーシングアクセラレータであってよい。1つの実施形態では、外付けアクセラレータ1419が、アクセラレータ1412の代わりに又はこれと連携して用いられてよい。
【0215】
プロセッサ1402に接続できる表示デバイス1411が提供されてよい。表示デバイス1411は、携帯型電子機器若しくはラップトップデバイスにあるような内蔵表示デバイス、又はディスプレイインタフェース(例えば、DisplayPortなど)を介して取り付けられた外付け表示デバイスのうちの一方又は両方であってよい。表示デバイス1411は、仮想現実(VR)アプリケーション又は拡張現実(AR)アプリケーションに用いる立体表示デバイスなどのヘッドマウントディスプレイ(HMD)であってよい。
【0216】
プラットフォームコントローラハブ1430は、周辺機器が高速I/Oバスを介してメモリデバイス1420及びプロセッサ1402に接続するのを可能にしてよい。I/O周辺機器は、限定されることはないが、オーディオコントローラ1446、ネットワークコントローラ1434、ファームウェアインタフェース1428、無線送受信機1426、タッチセンサ1425、データ記憶装置1424(例えば、不揮発性メモリ、揮発性メモリ、ハードディスクドライブ、フラッシュメモリ、NAND、3D NAND、3D XPointなど)を含む。データ記憶装置1424は、ストレージインタフェース(例えば、SATA)を介して、又はペリフェラルコンポーネントインターコネクトバス(例えば、PCI、PCI Express)などのペリフェラルバスを介して接続できる。タッチセンサ1425は、タッチスクリーンセンサ、圧力センサ、又は指紋センサを含んでよい。無線送受信機1426は、Wi-Fi送受信機、Bluetooth(登録商標)送受信機、又は3G、4G、5G、若しくはロングタームエボリューション(LTE)送受信機などの移動体ネットワーク送受信機であってよい。ファームウェアインタフェース1428は、システムファームウェアとの通信を可能にし、例えば、統合拡張ファームウェアインタフェース(UEFI)であってよい。ネットワークコントローラ1434は、有線ネットワークへのネットワーク接続を可能にし得る。いくつかの実施形態では、高性能ネットワークコントローラ(不図示)がインタフェースバス1410と結合する。オーディオコントローラ1446は、マルチチャネルのハイディフィニションオーディオコントローラであってよい。これらの実施形態のいくつかにおいて、システム1400は、レガシー(例えば、パーソナルシステム/2(PS/2))デバイスをシステムに結合するための任意的なレガシーI/Oコントローラ1440を含む。プラットフォームコントローラハブ1430は、キーボード及びマウス1443の組み合わせ、カメラ1444、又は他のUSB入力デバイスなどの入力デバイスを接続するための、1つ又は複数のユニバーサルシリアルバス(USB)コントローラ1442にも接続できる。
【0217】
違うように構成されている他のタイプのデータ処理システムも用いられてよいので、示されているシステム1400は、例示的であって限定しているわけではないことが理解されるであろう。例えば、メモリコントローラ1416及びプラットフォームコントローラハブ1430のインスタンスが、外付けグラフィックスプロセッサ1418などの別個の外付けグラフィックスプロセッサに統合されてよい。プラットフォームコントローラハブ1430及び/又はメモリコントローラ1416は、1つ又は複数のプロセッサ1402の外部にあってよい。例えば、システム1400は、外付けのメモリコントローラ1416及びプラットフォームコントローラハブ1430を含んでよく、これらは、プロセッサ1402と通信するシステムチップセット内のメモリコントローラハブ及びペリフェラルコントローラハブとして構成されてよい。
【0218】
例えば、CPU、メモリ、及び他のコンポーネントなどの各コンポーネントが配置された回路基板(「スレッド」)が用いられてよく、熱性能を高めるように設計されてよい。プロセッサなどの処理コンポーネントがスレッドの表面側に配置されてよく、DIMMなどのニアメモリがスレッドの裏面側に配置される。この方式でもたらされる気流改善の結果として、各コンポーネントは代表的なシステムのものより高い周波数及び高い電力レベルで動作することができ、これにより、性能が向上する。さらにスレッドは、ラック内の電力ケーブル及びデータ通信ケーブルと簡単に連結するように構成されているので、スレッドを素早く取り外す、アップグレードする、再取り付けする、且つ/又は交換する能力が改善される。同様に、スレッドに配置されるプロセッサ、アクセラレータ、メモリ、及びデータストレージドライブなどの個々のコンポーネントが、互いとの空間を広げることにより、容易にアップグレードされるように構成されている。例示の実施形態において、これらのコンポーネントはさらに、その真正性を証明するハードウェア認証機能を含む。
【0219】
データセンタでは、イーサネット(登録商標)及びオムニパスを含む複数の他のネットワークアーキテクチャをサポートする単一のネットワークアーキテクチャ(「ファブリック」)が利用できる。スレッドは、光ファイバを介してスイッチに結合されてよく、光ファイバにより、代表的なツイストペアケーブル(例えば、カテゴリ5、カテゴリ5e、カテゴリ6など)より高い帯域幅及び低い遅延がもたらされる。高帯域幅低遅延の相互接続及びネットワークアーキテクチャにより、データセンタは、使用時には、メモリ、アクセラレータ(例えば、GPU、グラフィックスアクセラレータ、FPGA、ASIC、ニューラルネットワーク、及び/又は人工知能アクセラレータなど)、及び物理的に分解されているデータストレージドライブなどのリソースをプールし、必要に応じてこれらのリソースをコンピュートリソース(例えば、プロセッサ)に提供して、プールされたリソースがローカルにあるかのように、コンピュートリソースがこれらのリソースにアクセスできるようにしてよい。
【0220】
電力供給装置又は電源が、システム1400又は本明細書で説明される任意のコンポーネント若しくはシステムに電圧及び/又は電流を供給してよい。1つの例では、電力供給装置は、壁コンセントに差し込むAC/DC(交流/直流)アダプタを含む。そのようなAC電源は、再生可能エネルギー(例えば、太陽光発電)電源であってよい。1つの例では、電源は、外付けのAC/DCコンバータなどのDC電源を含む。電源又は電力供給装置は、充電場に近づけることによって充電する無線充電ハードウェアも含んでよい。電源は、内蔵バッテリ、交流電源、モーションベースの電源、太陽電池電源、又は燃料電池電源を含んでよい。
【0221】
図15A~
図15Cは、コンピュータ処理システム及びグラフィックスプロセッサを示している。本明細書の任意の他の図の要素と同じ又は同様の名称を有する
図15A~
図15Cの要素は、他の図にあるのと同じ要素を示しており、本明細書のどこか他の箇所で説明したものとして、それと同様の方式で動作又は機能してよく、同じコンポーネントを有してよく、他のエンティティに接続されてよいが、そのように限定されることはない。
【0222】
図15Aはプロセッサ1500のブロック図であり、このプロセッサは、複数のプロセッサ1402のうちの1つの変形であってよく、また複数のプロセッサ1402のうちの1つの代わりに用いられてよい。したがって、ここでのプロセッサ1500と組み合わせた任意の特徴の開示も、プロセッサ1402との対応する組み合わせを開示しているが、そのように限定されることはない。プロセッサ1500は、1つ又は複数のプロセッサコア1502A~1502N、統合メモリコントローラ1514、及び統合グラフィックスプロセッサ1508を有してよい。統合グラフィックスプロセッサ1508を除外した場合、プロセッサを含むシステムは、グラフィックスプロセッサデバイスをシステムチップセット内に含むか、又はシステムバスを介して結合されることになる。プロセッサ1500は、破線枠で表される追加のコア1502Nまで(これを含めて)追加のコアを含んでよい。プロセッサコア1502A~1502Nのそれぞれは、1つ又は複数の内蔵キャッシュユニット1504A~1504Nを含む。いくつかの実施形態では、各プロセッサコア1502A~1502Nは、1つ又は複数の共有キャッシュユニット1506にもアクセスできる。内蔵キャッシュユニット1504A~1504N及び共有キャッシュユニット1506は、プロセッサ1500内のキャッシュメモリ階層を表している。キャッシュメモリ階層は、各プロセッサコア内に少なくとも1つのレベルの命令及びデータキャッシュと、レベル2(L2)、レベル3(L3)、レベル4(L4)、又は他のレベルのキャッシュなどの1つ又は複数のレベルの共有中間レベルキャッシュとを含んでよく、外付けメモリの前の最高レベルのキャッシュがLLCとして分類される。いくつかの実施形態では、キャッシュコヒーレンシロジックが、様々なキャッシュユニット1506及び1504A~1504Nの間の一貫性を維持する。
【0223】
プロセッサ1500は、1つ又は複数のバスコントローラユニット1516のセット、及びシステムエージェントコア1510も含んでよい。1つ又は複数のバスコントローラユニット1516は、1つ又は複数のPCIバス又はPCI Expressバスなどのペリフェラルバスのセットを管理する。システムエージェントコア1510は、様々なプロセッサコンポーネントに管理機能を提供する。システムエージェントコア1510は、様々な外付けメモリデバイス(不図示)へのアクセスを管理する1つ又は複数の統合メモリコントローラ1514を含んでよい。
【0224】
例えば、プロセッサコア1502A~1502Nのうちの1つ又は複数が、同時マルチスレッディング用のサポートを含んでよい。システムエージェントコア1510は、マルチスレッド処理時に、コア1502A~1502Nを調整し且つ動作させるためのコンポーネントを含む。システムエージェントコア1510は、電力制御ユニット(PCU)をさらに含んでよく、この電力制御ユニットは、プロセッサコア1502A~1502N及びグラフィックスプロセッサ1508の電力状態を調節するロジック及びコンポーネントを含む。
【0225】
プロセッサ1500は、グラフィックス処理操作を実行するグラフィックスプロセッサ1508をさらに含んでよい。これらの実施形態のいくつかにおいて、グラフィックスプロセッサ1508は、共有キャッシュユニット1506のセットと、1つ又は複数の統合メモリコントローラ1514を含むシステムエージェントコア1510と結合する。システムエージェントコア1510は、1つ又は複数の結合されたディスプレイへのグラフィックスプロセッサの出力を駆動するディスプレイコントローラ1511も含んでよい。ディスプレイコントローラ1511は、少なくとも1つの相互接続を介してグラフィックスプロセッサと結合された別個のモジュールであってもよく、グラフィックスプロセッサ1508に統合されてもよい。
【0226】
リングベースの相互接続ユニット1512が、プロセッサ1500の内蔵コンポーネントを結合するのに用いられてよい。しかしながら、ポイントツーポイント相互接続、交換型相互接続、又は当技術分野でよく知られた技法を含む他の技法などの代替相互接続ユニットが用いられてよい。リングベースの相互接続1512を用いたこれらの実施形態のいくつかでは、グラフィックスプロセッサ1508は、I/Oリンク1513を介してリングベースの相互接続1512と結合する。
【0227】
例示的なI/Oリンク1513は、様々なプロセッサコンポーネントと、eDRAMモジュールなどの高性能埋め込み型メモリモジュール1518との間の通信を容易にするオンパッケージI/O相互接続を含む複数の様々なI/O相互接続のうちの少なくとも1つを表している。必要に応じて、プロセッサコア1502A~1502N及びグラフィックスプロセッサ1508のそれぞれは、共有ラストレベルキャッシュとして埋め込み型メモリモジュール1518を用いてよい。
【0228】
プロセッサコア1502A~1502Nは、例えば、同じ命令セットアーキテクチャを実行する同種のコアであってよい。あるいは、プロセッサコア1502A~1502Nは、命令セットアーキテクチャ(ISA)に関して異種であり、プロセッサコア1502A~1502Nのうちの1つ又は複数が第1命令セットを実行し、その他のコアのうちの少なくとも1つが第1命令セットのサブセット又は別の命令セットを実行する。プロセッサコア1502A-1502Nは、マイクロアーキテクチャに関して異種であってよく、ここでは、電力消費が比較的高い1つ又は複数のコアが、電力消費が低い1つ又は複数の電力コアと結合する。別の例として、プロセッサコア1502A~1502Nは、計算能力に関して異種である。さらに、プロセッサ1500は、1つ又は複数のチップに実装されてもよく、例示したコンポーネントを他のコンポーネントの他に有するSoC集積回路として実装されてもよい。
【0229】
図15Bは、本明細書で説明したいくつかの実施形態によるグラフィックスプロセッサコア1519のハードウェアロジックのブロック図である。グラフィックスプロセッサコア1519は、コアスライスと呼ばれることがあり、モジュール式グラフィックスプロセッサ内の1つ又は複数のグラフィックスコアであってよい。グラフィックスプロセッサコア1519は、典型的な1つのグラフィックスコアスライスであり、本明細書で説明されたグラフィックスプロセッサが、目標電力及び性能エンベロープに基づいて複数のグラフィックスコアスライスを含んでよい。各グラフィックスプロセッサコア1519は、サブスライスとも呼ばれる複数のサブコア1521A~1521Fと結合した固定機能ブロック1530を含んでよく、この固定機能ブロックは汎用機能ロジック及び固定機能ロジックのモジュール式ブロックを含む。
【0230】
固定機能ブロック1530は、例えば、低性能及び/又は低電力のグラフィックスプロセッサの実装形態において、グラフィックスプロセッサコア1519内の全てのサブコアが共有できるジオメトリ/固定機能パイプライン1531を含んでよい。ジオメトリ/固定機能パイプライン1531は、3D固定機能パイプライン(例えば、後述される
図16Aにあるような3Dパイプライン1612)、ビデオフロントエンドユニット、スレッドスポーナ及びスレッドディスパッチャ、並びに統合リターンバッファ(例えば後述されるような、
図17の統合リターンバッファ1718)を管理する統合リターンバッファマネージャを含んでよい。
【0231】
固定機能ブロック1530は、グラフィックスSoCインタフェース1532、グラフィックスマイクロコントローラ1533、及びメディアパイプライン1534も含んでよい。グラフィックスSoCインタフェース1532は、グラフィックスプロセッサコア1519と、システムオンチップ集積回路内の他のプロセッサコアとの間のインタフェースを供給する。グラフィックスマイクロコントローラ1533は、スレッドディスパッチ、スケジューリング、及びプリエンプションを含む、グラフィックスプロセッサコア1519の様々な機能を管理するように構成可能なプログラム可能型サブプロセッサである。メディアパイプライン1534(例えば、
図16A及び
図17のメディアパイプライン1616)は、画像データ及びビデオデータを含むマルチメディアデータのデコード、エンコード、前処理、及び/又は後処理を容易にするロジックを含む。メディアパイプライン1534は、サブコア1521~1521F内のコンピュートロジック又はサンプリングロジックへの要求によってメディア操作を行う。
【0232】
SoCインタフェース1532によって、グラフィックスプロセッサコア1519は汎用アプリケーションプロセッサコア(例えば、CPU)及び/又はSoC内の他のコンポーネント(共有ラストレベルキャッシュメモリ、システムRAM、及び/又は埋め込み型オンチップ若しくはオンパッケージDRAMなどのメモリ階層要素を含む)と通信することが可能になり得る。SoCインタフェース1532は、カメライメージングパイプラインなどの、SoC内の固定機能デバイスとの通信も可能にしてよく、グラフィックスプロセッサコア1519とSoC内のCPUとの間で共有され得るグローバルメモリアトミックスの使用を可能にする且つ/又はグローバルメモリアトミックスを実装する。SoCインタフェース1532は、グラフィックスプロセッサコア1519の電力管理制御も行い、グラフィックスコア1519のクロックドメインとSoC内の他のクロックドメインとの間のインタフェースを可能にすることができる。必要に応じて、SoCインタフェース1532は、グラフィックスプロセッサ内の1つ又は複数のグラフィックスコアのそれぞれにコマンド及び命令を提供するように構成されたコマンドストリーマ及びグローバルスレッドディスパッチャからの、コマンドバッファの受信を可能にする。コマンド及び命令は、メディア操作が行われるときに、メディアパイプライン1534にディスパッチされてよく、又はグラフィックス処理操作が行われるときに、ジオメトリ及び固定機能パイプライン(例えば、ジオメトリ及び固定機能パイプライン1531、ジオメトリ及び固定機能パイプライン1537)にディスパッチされてよい。
【0233】
グラフィックスマイクロコントローラ1533は、グラフィックスプロセッサコア1519の様々なスケジューリング及び管理タスクを行うように構成されてよい。1つの構成では、グラフィックスマイクロコントローラ1533は、例えば、サブコア1521A~1521F内の実行ユニット(EU)アレイ1522A~1522F、1524A~1524F内の様々なグラフィックス並列エンジンでグラフィックス及び/又はコンピュートワークロードスケジューリングを行ってよい。このワークロードスケジューリングでは、グラフィックスプロセッサコア1519を含むSoCのCPUコアで実行するホストソフトウェアが、複数のグラフィックスプロセッサドアベルのうちの1つにワークロードを投入してよい。このドアベルは、適切なグラフィックスエンジン上にスケジューリング操作を呼び出す。スケジューリング操作は、どのワークロードを次に実行するかを決定すること、ワークロードをコマンドストリーマに投入すること、あるエンジンで実行される既存のワークロードをプリエンプトすること、ワークロードの進捗を監視すること、ワークロードが完了したときにホストソフトウェアに通知することを含む。必要に応じて、グラフィックスマイクロコントローラ1533はまた、グラフィックスプロセッサコア1519の低電力状態又は休止状態を促進し、システム上のオペレーティングシステム及び/又はグラフィックスドライバソフトウェアから独立して、低電力状態移行中にグラフィックスプロセッサコア1519内のレジスタを保存し復元する能力をグラフィックスプロセッサコア1519に提供してよい。
【0234】
グラフィックスプロセッサコア1519は、図示されているサブコア1521A~1521Fより多くても少なくてもよく、N個のモジュール式サブコアまで有してよい。N個のサブコアのセットごとに、グラフィックスプロセッサコア1519は、様々なグラフィックス処理操作及びコンピュート処理操作を加速させるために、共有機能ロジック1535、共有及び/又はキャッシュメモリ1536、ジオメトリ/固定機能パイプライン1537、並びに別の固定機能ロジック1538も含んでよい。共有機能ロジック1535は、
図17の共有機能ロジック1720と関連する論理ユニット(例えば、サンプラロジック、数学ロジック、及び/又はスレッド間通信ロジック)を含んでよく、この論理ユニットは、グラフィックスプロセッサコア1519内のそれぞれのN個のサブコアにより共有され得る。共有及び/又はキャッシュメモリ1536は、グラフィックスプロセッサコア1519内のN個のサブコア1521A~1521Fのセットに対するラストレベルキャッシュであってよく、複数のサブコアがアクセス可能な共有メモリとしての機能も果たすことができる。ジオメトリ/固定機能パイプライン1537は、固定機能ブロック1530内のジオメトリ/固定機能パイプライン1531の代わりに含まれてよく、同じ又は同様の論理ユニットを含んでよい。
【0235】
グラフィックスプロセッサコア1519は、グラフィックスプロセッサコア1519が用いるための様々な固定機能アクセラレーションロジックを含み得る別の固定機能ロジック1538を含んでよい。必要に応じて、別の固定機能ロジック1538は、位置限定シェーディングに用いるための別のジオメトリパイプラインを含む。位置限定シェーディングには2つのジオメトリパイプライン、つまり、ジオメトリ/固定機能パイプライン1538、1531内のフルジオメトリパイプラインと、カリングパイプラインとが存在し、カリングパイプラインは、別の固定機能ロジック1538内に含まれ得る別のジオメトリパイプラインである。例えば、カリングパイプラインは、フルジオメトリパイプラインの機能縮小版であってよい。フルパイプライン及びカリングパイプラインは、同じアプリケーションの個々のインスタンスを実行でき、各インスタンスは別個のコンテキストを有する。位置限定シェーディングは、破棄された三角形の長いカリング工程を隠すことができ、いくつかの例ではシェーディングを早く完了させることができる。例えば、別の固定機能ロジック1538内のカリングパイプラインロジックは、複数の位置シェーダをメインアプリケーションと並行して実行でき、通常、フルパイプラインより速く重要な結果を生成する。これは、カリングパイプラインが、ラスタライズ及びフレームバッファへのピクセルのレンダリングを行うことなく、頂点の位置属性だけをフェッチしてシェーディングするからである。カリングパイプラインは、生成された重要な結果を用いて、全ての三角形の可視性情報を、これらの三角形がカリングされているかどうかに関係なく計算できる。フルパイプライン(このインスタンスは再生パイプラインと呼ばれることがある)は、可視性情報を使って、カリングされた三角形をスキップし、最終的にラスタライズ段階に送られる可視三角形だけをシェーディングすることができる。
【0236】
必要に応じて、別の固定機能ロジック1538は、機械学習の訓練又は推論の最適化を含む実装形態のために、固定機能行列乗算ロジックなどの機械学習アクセラレーションロジックも含んでよい。
【0237】
各グラフィックスサブコア1521A~1521Fには、グラフィックスパイプライン、メディアパイプライン、又はシェーダプログラムの要求に応答して、グラフィックス操作、メディア操作、及びコンピュート操作を行うのに用いられ得る実行リソースのセットが含まれている。グラフィックスサブコア1521A~1521Fは、複数のEUアレイ1522A~1522F、1524A~1524F、スレッドディスパッチ及びスレッド間通信(TD/IC)ロジック1523A~1523F、3D(例えば、テクスチャ)サンプラ1525A~1525F、メディアサンプラ1506A~1506F、シェーダプロセッサ1527A~1527F、並びに共有ローカルメモリ(SLM)1528A~1528Fを含む。EUアレイ1522A~1522F、1524A~1524Fはそれぞれ、複数の実行ユニットを含み、これらの実行ユニットは、グラフィックス操作、メディア操作、又はコンピュート操作のサービスにおいて、浮動小数点及び整数/固定小数点の論理演算を行うことができ、グラフィックスシェーダプログラム、メディアシェーダプログラム、又はコンピュートシェーダプログラムを含む、汎用グラフィックス処理ユニットである。TD/ICロジック1523A~1523Fは、サブコア内の実行ユニットのためにローカルスレッドディスパッチ操作及びスレッド制御操作を行い、サブコアの実行ユニットで実行するスレッド間の通信を促進する。3Dサンプラ1525A~1525Fは、テクスチャ又は他の3Dグラフィックス関連のデータをメモリに読み出すことができる。3Dサンプラは、構成されたサンプリング状態と所与のテクスチャと関連づけられたテクスチャフォーマットとに基づいて、テクスチャデータを別々に読み出すことができる。メディアサンプラ1506A~1506Fは、メディアデータと関連づけられたタイプ及びフォーマットに基づいて、同様の読み出し操作を行うことができる。例えば、各グラフィックスサブコア1521A~1521Fは、統合3D及びメディアサンプラを交互に含んでよい。サブコア1521A~1521Fのそれぞれに含まれる実行ユニットで実行されるスレッドは、各サブコア内の共有ローカルメモリ1528A~1528Fを利用して、スレッドグループ内で実行されるスレッドがオンチップメモリの共通プールを用いて実行されることを可能にし得る。
【0238】
図15Cは、グラフィックスプロセッサとして、例えば、本明細書で説明した実施形態によるグラフィックスプロセッサ1508及び/又はコンピュートアクセラレータとして構成され得る汎用グラフィックス処理ユニット(GPGPU)1570のブロック図である。GPGPU1570は、1つ又は複数のシステムバス及び/又はメモリバスを介して、ホストプロセッサ(例えば、1つ又は複数のCPU1546)及びメモリ1571、1572と相互接続することができる。メモリ1571は、1つ又は複数のCPU1546と共有され得るシステムメモリであってよく、メモリ1572は、GPGPU1570に専用のデバイスメモリである。例えば、GPGPU1570及びデバイスメモリ1572内の各コンポーネントは、1つ又は複数のCPU1546がアクセス可能なメモリアドレスにマッピングされてよい。メモリ1571および1572へのアクセスが、メモリコントローラ1568を介して促進されてよい。メモリコントローラ1568は、内蔵ダイレクトメモリアクセス(DMA)コントローラ1569を含んでよく、そうでない場合には、DMAコントローラにより行われる操作を行うロジックを含んでよい。
【0239】
GPGPU1570は、L2キャッシュ1553、L1キャッシュ1554、命令キャッシュ1555、及び共有メモリ1556を含む複数のキャッシュメモリを含み、そのうちの少なくとも一部は、キャッシュメモリとしても分割されてよい。GPGPU1570は、複数のコンピュートユニット1560A~1560Nも含む。各コンピュートユニット1560A~1560Nは、ベクトルレジスタ1561、スカラレジスタ1562、ベクトル論理ユニット1563、及びスカラ論理ユニット1564のセットを含む。コンピュートユニット1560A~1560Nは、ローカル共有メモリ1565及びプログラムカウンタ1566も含んでよい。コンピュートユニット1560A~1560Nは、定数データを格納するのに用いられ得る定数キャッシュ1567と結合してよく、定数データは、GPGPU1570で実行されるカーネル又はシェーダプログラムの実行時に変わらないデータである。定数キャッシュ1567はスカラデータキャッシュであってよく、キャッシュされたデータは、スカラレジスタ1562に直接的にフェッチされてよい。
【0240】
動作に際して、1つ又は複数のCPU1546は、アクセス可能なアドレス空間にマッピングされているGPGPU1570内のレジスタ又はメモリにコマンドを書き込むことができる。コマンドプロセッサ1557は、コマンドをレジスタ又はメモリから読み出し、これらのコマンドをGPGPU1570でどのように処理するかを決定できる。次に、スレッドディスパッチャ1558を用いて、これらのコマンドを実行するコンピュートユニット1560A~1560Nにスレッドをディスパッチしてよい。各コンピュートユニット1560A~1560Nは、その他のコンピュートユニットから独立してスレッドを実行できる。さらに、各コンピュートユニット1560A~1560Nは条件付き計算用に独立して構成されてよく、計算結果をメモリに条件付きで出力できる。コマンドプロセッサ1557は、投入されたコマンドが完了すると、1つ又は複数のCPU1546を中断できる。
【0241】
図16A~
図16Cは、本明細書で説明した、例えば、
図15A~
図15Cによる実施形態により提供される別のグラフィックスプロセッサ及びコンピュートアクセラレータアーキテクチャのブロック図を示している。本明細書の任意の他の図の要素と同じ又は同様の名称を有する
図16A~
図16Cの要素は、他の図にあるのと同じ要素を示しており、本明細書のどこか他の箇所で説明したものとして、それと同様の方式で動作又は機能してよく、同じコンポーネントを有してよく、他のエンティティに接続されてよいが、そのように限定されることはない。
【0242】
図16Aは、グラフィックスプロセッサ1600のブロック図であり、このグラフィックスプロセッサは、別個のグラフィックス処理ユニットであってもよく、複数の処理コア又は他の半導体デバイス(限定されることはないが、メモリデバイス又はネットワークインタフェースなど)と一体化されたグラフィックスプロセッサであってもよい。グラフィックスプロセッサ1600は、グラフィックスプロセッサ1508の変形であってもよく、グラフィックスプロセッサ1508の代わりに用いられてもよい。したがって、グラフィックスプロセッサ1508と組み合わせた任意の特徴のここでの開示は、グラフィックスプロセッサ1600との対応する組み合わせも開示しているが、そのように限定されることはない。グラフィックスプロセッサは、グラフィックスプロセッサ上のレジスタへのメモリマップドI/Oインタフェースを介して、且つプロセッサメモリに配置されたコマンドを用いて通信してよい。グラフィックスプロセッサ1600は、メモリにアクセスするメモリインタフェース1614を含んでよい。メモリインタフェース1614は、ローカルメモリ、1つ又は複数の内蔵キャッシュ、1つ又は複数の共有外付けキャッシュ、及び/又はシステムメモリへのインタフェースであってよい。
【0243】
必要に応じて、グラフィックスプロセッサ1600は、表示デバイス1618への出力データの表示を駆動するディスプレイコントローラ1602も含む。ディスプレイコントローラ1602は、複数層のビデオインタフェース要素又はユーザインタフェース要素の表示及び合成に用いる1つ又は複数のオーバーレイ平面用のハードウェアを含む。表示デバイス1618は、内蔵表示デバイスでも外付け表示デバイスでもよい。1つの実施形態において、表示デバイス1618は、仮想現実(VR)表示デバイス又は拡張現実(AR)表示デバイスなどの、ヘッドマウントディスプレイデバイスである。グラフィックスプロセッサ1600は、1つ又は複数のメディアエンコードフォーマットとの間でメディアをエンコード、デコード、又はトランスコードするビデオコーデックエンジン1606を含んでよい。これらのフォーマットは、限定されることはないが、ムービングピクチャエキスパーツグループ(MPEG)フォーマット(MPEG-2など)、高度なビデオコーディング(AVC)フォーマット(H.264/MPEG-4 AVC、H.265/HEVCなど)、アライアンスフォーオープンメディア(AOMedia)のVP8、VP9、並びに米国映画テレビ技術者協会(SMPTE)の421M/VC-1、及びジョイントフォトグラフィックエキスパーツグループ(JPEG)フォーマット(JPEGフォーマット、モーションJPEG(MJPEG)フォーマットなど)を含む。
【0244】
グラフィックスプロセッサ1600は、例えば、ビット境界ブロック転送を含む2次元(2D)ラスタライザ操作を行うための、ブロック画像転送(BLIT)エンジン1604を含んでよい。しかしながら、代替的に、2Dグラフィックス操作が、グラフィックス処理エンジン(GPE)1610の1つ又は複数のコンポーネントを用いて行われてよい。いくつかの実施形態において、GPE1610は、3次元(3D)のグラフィックス操作及びメディア操作を含むグラフィックス操作を実行するためのコンピュートエンジンである。
【0245】
GPE1610は、3Dプリミティブ形状(例えば、長方形、三角形など)に作用する処理機能を用いて、3次元画像及びシーンのレンダリングなどの3D操作を行うための3Dパイプライン1612を含んでよい。3Dパイプライン1612は、要素内の様々なタスクを行う且つ/又は3D/メディアサブシステム1615への実行スレッドを生成するプログラム可能要素及び固定機能要素を含む。メディア操作を行うのに3Dパイプライン1612を用いてよいが、GPE1610の一実施形態が、ビデオ後処理及び画像強調などのメディア操作を行うのに特に用いられるメディアパイプライン1616も含む。
【0246】
メディアパイプライン1616は、ビデオコーデックエンジン1606の代わりに又はこれに代わって、ビデオデコードアクセラレーション、ビデオデインタレース、及びビデオエンコードアクセラレーションなどの、1つ又は複数の特殊なメディア操作を行う固定機能論理ユニット又はプログラム可能型論理ユニットを含んでよい。メディアパイプライン1616はさらに、3D/メディアサブシステム1615で実行するスレッドを生成するスレッド生成ユニットを含んでよい。生成されたスレッドは、3D/メディアサブシステム1615に含まれる1つ又は複数のグラフィックス実行ユニットでメディア操作用の計算を行う。
【0247】
3D/メディアサブシステム1615は、3Dパイプライン1612及びメディアパイプライン1616により生成されたスレッドを実行するためのロジックを含んでよい。これらのパイプラインは、スレッド実行要求を3D/メディアサブシステム1615に送信してよく、この3D/メディアサブシステムは、様々な要求を調停して、利用できるスレッド実行リソースにそれらの要求をディスパッチするためのスレッドディスパッチロジックを含む。実行リソースは、3Dスレッド及びメディアスレッドを処理するためのグラフィックス実行ユニットのアレイを含む。3D/メディアサブシステム1615は、スレッド命令及びデータ用の1つ又は複数の内蔵キャッシュを含んでよい。さらに、3D/メディアサブシステム1615は、レジスタ及びアドレス指定可能なメモリを含む、スレッド間でデータを共有し且つ出力データを格納するための共有メモリも含んでよい。
【0248】
図16Bは、グラフィックスプロセッサ1600の変形であるグラフィックスプロセッサ1620を示しており、グラフィックスプロセッサ1620は、グラフィックスプロセッサ1600の代わりに用いられてよく、その逆も同様である。したがって、グラフィックスプロセッサ1600と組み合わせた任意の特徴のここでの開示は、グラフィックスプロセッサ1620との対応する組み合わせも開示しているが、そのように限定されることはない。グラフィックスプロセッサ1620は、本明細書で説明される実施形態によるタイル型アーキテクチャを有する。グラフィックスプロセッサ1620は、
図16Aのグラフィックス処理エンジン1610の複数のインスタンスをグラフィックスエンジンタイル1610A~1610D内に有するグラフィックス処理エンジンクラスタ1622を含んでよい。各グラフィックスエンジンタイル1610A~1610Dは、タイル相互接続1623A~1623Fのセットを介して相互接続されてよい。各グラフィックスエンジンタイル1610A~1610Dは、メモリ相互接続1625A~1625Dを介してメモリモジュール又はメモリデバイス1626A~1626Dにも結合されてよい。メモリデバイス1626A~1626Dは、任意のグラフィックスメモリ技術を使用できる。例えば、メモリデバイス1626A~1626Dは、グラフィックスダブルデータレート(GDDR)メモリであってよい。メモリデバイス1626A~1626Dは、それぞれのグラフィックスエンジンタイル1610A~1610Dとオンダイになり得る高帯域幅メモリ(HBM)モジュールであってよい。メモリデバイス1626A~1626Dは、それぞれのグラフィックスエンジンタイル1610A~1610Dの上に積層され得るスタック型メモリデバイスであってよい。各グラフィックスエンジンタイル1610A~1610D及び関連するメモリ1626A~1626Dは、別個のチップレットに存在してよく、このチップレットは、
図24B~
図24Dにさらに詳細に説明されるように、ベースダイ又はベース基板に接合されている。
【0249】
グラフィックスプロセッサ1620は、メモリデバイス1626A~1626Dが関連グラフィックスエンジンタイル1610A~1610Dと結合されている不均一メモリアクセス(NUMA)システムで構成されてよい。所与のメモリデバイスが、当該メモリデバイスが直接的に結合されているタイル以外のグラフィックスエンジンタイルによりアクセスされてよい。しかしながら、メモリデバイス1626A~1626Dへのアクセス遅延が、ローカルタイルにアクセスすると最も低くなり得る。1つの実施形態では、キャッシュコヒーレントNUMA(ccNUMA)システムが可能になる。このシステムは、タイル相互接続1623A~1623Fを用いて、1つより多くのキャッシュが同じメモリ位置を格納すると、グラフィックスエンジンタイル1610A~1610D内のキャッシュコントローラ間の通信が一貫したメモリイメージの保持を可能にする。
【0250】
グラフィックス処理エンジンクラスタ1622は、オンチップ又はオンパッケージのファブリック相互接続1624と接続することができる。ファブリック相互接続1624は、グラフィックスエンジンタイル1610A~1610Dと、ビデオコーデック1606及び1つ又は複数のコピーエンジン1604などのコンポーネントとの通信を可能にすることができる。コピーエンジン1604は、メモリデバイス1626A~1626Dとの間で、またメモリデバイス1626A~1626Dとグラフィックスプロセッサ1620の外部にあるメモリ(例えば、システムメモリ)との間でデータを移動するのに用いられてよい。ファブリック相互接続1624は、グラフィックスエンジンタイル1610A~1610Dを相互接続するのにも用いられてよい。グラフィックスプロセッサ1620は、必要に応じて、外付け表示デバイス1618との接続を可能にするディスプレイコントローラ1602を含んでよい。グラフィックスプロセッサは、グラフィックスアクセラレータ又はコンピュートアクセラレータとしても構成されてよい。アクセラレータ構成では、ディスプレイコントローラ1602及び表示デバイス1618が省略されてよい。
【0251】
グラフィックスプロセッサ1620は、ホストインタフェース1628を介してホストシステムに接続できる。ホストインタフェース1628は、グラフィックスプロセッサ1620、システムメモリ、及び/又は他のシステムコンポーネントの間の通信を可能にし得る。ホストインタフェース1628は、例えば、PCI Expressバス又は別のタイプのホストシステムインタフェースであってよい。
【0252】
図16Cは、本明細書で説明される実施形態によるコンピュートアクセラレータ1630を示している。コンピュートアクセラレータ1630は、
図16Bのグラフィックスプロセッサ1620とアーキテクチャ上の類似点を含んでよく、コンピュートアクセラレーション用に最適化されている。コンピュートエンジンクラスタ1632が、並列又はベクトルベースの汎用コンピュート操作用に最適化されている実行ロジックを含むコンピュートエンジンタイル1640A~1640Dのセットを含んでよい。コンピュートエンジンタイル1640A~1640Dは、固定機能グラフィックス処理ロジックを含まなくてもよいが、いくつかの実施形態では、コンピュートエンジンタイル1640A~1640Dのうちの1つ又は複数がメディアアクセラレーションを行うロジックを含んでよい。コンピュートエンジンタイル1640A~1640Dは、メモリ相互接続1625A~1625Dを介してメモリ1626A~1626Dに接続できる。メモリ1626A~1626D及びメモリ相互接続1625A~1625Dは、グラフィックスプロセッサ1620に見られるのと同様の技術であってもよく、異なっていてもよい。グラフィックスコンピュートエンジンタイル1640A~1640Dは、タイル相互接続1623A~1623Fのセットを介して相互接続されてもよく、ファブリック相互接続1624で接続される且つ/又はファブリック相互接続1624により相互接続されてもよい。1つの実施形態において、コンピュートアクセラレータ1630はデバイス全体のキャッシュとして構成され得る大規模なL3キャッシュ1636を含む。コンピュートアクセラレータ1630は、
図16Bのグラフィックスプロセッサ1620と同様の方式で、ホストインタフェース1628を介してホストプロセッサ及びメモリにも接続できる。
[グラフィックス処理エンジン]
【0253】
図17は、いくつかの実施形態によるグラフィックスプロセッサのグラフィックス処理エンジン1710のブロック図である。グラフィックス処理エンジン(GPE)1710は、
図16Aに示すGPE1610のあるバージョンであってよく、
図16Bのグラフィックスエンジンタイル1610A~1610Dも表してよい。本明細書の任意の他の図の要素と同じ又は同様の名称を有する
図17の要素は、他の図にあるのと同じ要素を示しており、本明細書のどこか他の箇所で説明したものとして、それと同様の方式で動作又は機能してよく、同じコンポーネントを有してよく、他のエンティティに接続されてよいが、そのように限定されることはない。例えば、
図16Aの3Dパイプライン1612及びメディアパイプライン1616は、
図17にも示されている。メディアパイプライン1616はGPE1710のいくつかの実施形態では任意的であり、GPE1710に明示的に含まれていなくてもよい。例えば、少なくとも1つの実施形態では、別個のメディア及び/又はイメージプロセッサがGPE1710に結合されている。
【0254】
GPE1710は、コマンドストリーマ1703と結合しても、これを含んでもよく、このコマンドストリーマは、3Dパイプライン1612及び/又はメディアパイプライン1616にコマンドストリームを提供する。代替的に又は追加的に、コマンドストリーマ1703は、統合リターンバッファ1718に直接的に結合されてよい。統合リターンバッファ1718は、グラフィックスコアアレイ1714に通信可能に結合されてよい。必要に応じて、コマンドストリーマ1703はメモリと結合され、このメモリは、システムメモリであっても、内蔵キャッシュメモリ及び共有キャッシュメモリのうちの一方又は両方であってもよい。コマンドストリーマ1703は、メモリからコマンドを受信してよく、このコマンドを3Dパイプライン1612及び/又はメディアパイプライン1616に送信する。コマンドはリングバッファからフェッチされる指示であり、リングバッファは3Dパイプライン1612及びメディアパイプライン1616用のコマンドを格納する。リングバッファはさらに、複数のコマンドのバッチを格納するバッチコマンドバッファを含んでよい。3Dパイプライン1612用のコマンドは、限定されることはないが、3Dパイプライン1612用の頂点及びジオメトリデータ、並びに/又はメディアパイプライン316用の画像データ及びメモリオブジェクトなどの、メモリに格納されたデータへの参照も含んでよい。3Dパイプライン1612及びメディアパイプライン1616は、それぞれのパイプライン内のロジックを介して操作を行うことによって、又は1つ又は複数の実行スレッドをグラフィックスコアアレイ1714にディスパッチすることによって、コマンド及びデータを処理する。グラフィックスコアアレイ1714は、グラフィックスコア(例えば、グラフィックスコア1715A、グラフィックスコア1715B)の1つ又は複数のブロックを含んでよく、各ブロックは1つ又は複数のグラフィックスコアを含む。各グラフィックスコアは、グラフィックス操作及びコンピュート操作を行うための汎用及びグラフィックス固有の実行ロジック、並びに固定機能テクスチャ処理及び/又は機械学習及び人工知能アクセラレーションロジックを含むグラフィックス実行リソースのセットを含む。
【0255】
様々な実施形態において、3Dパイプライン1612は、命令を処理して、実行スレッドをグラフィックスコアアレイ1714にディスパッチすることにより、1つ又は複数のシェーダプログラムを処理する固定機能ロジック及びプログラム可能型ロジックを含んでよく、これらのシェーダプログラムは、頂点シェーダ、ジオメトリシェーダ、ピクセルシェーダ、フラグメントシェーダ、コンピュートシェーダ、又は他のシェーダプログラムなどである。グラフィックスコアアレイ1714は、これらのシェーダプログラムを処理する際に用いる実行リソースの統合ブロックを提供する。グラフィックスコアアレイ1714のグラフィックスコア1715A~1715B内の多目的実行ロジック(例えば、実行ユニット)が、様々な3D APIシェーダ言語のサポートを含み、複数のシェーダに関連した複数の同時実行スレッドを実行できる。
【0256】
グラフィックスコアアレイ1714は、映像処理及び/又は画像処理などのメディア機能を行う実行ロジックを含んでよい。実行ユニットは、グラフィックス処理操作に加えて、並列汎用計算操作を行うようにプログラム可能な汎用ロジックを含んでよい。汎用ロジックは、
図14のプロセッサコア1407又は
図15Aにあるようなコア1502A~1502N内の汎用ロジックと並列に又はこれと併用して処理操作を行うことができる。
【0257】
グラフィックスコアアレイ1714で実行するスレッドにより生成される出力データが、統合リターンバッファ(URB)1718内のメモリにデータを出力できる。URB1718は、複数のスレッドのデータを格納できる。URB1718は、グラフィックスコアアレイ1714で実行する個々のスレッド間でデータを送信するのに用いられてよい。URB1718はさらに、グラフィックスコアアレイ1714上のスレッドと、共有機能ロジック1720内の固定機能ロジックとの間の同期に用いられてよい。
【0258】
必要に応じて、グラフィックスコアアレイ1714はスケーラブルであってよく、このアレイは可変数のグラフィックスコアを含み、それぞれは、GPE1710の目標電力及び性能レベルに基づいて可変数の実行ユニットを有する。実行リソースは、動的にスケーラブルであってよく、実行リソースは必要に応じて有効になっても無効になってもよい。
【0259】
グラフィックスコアアレイ1714は、グラフィックスコアアレイ内のグラフィックスコア間で共有される複数のリソースを含む共有機能ロジック1720と結合する。共有機能ロジック1720内の共有機能は、特殊な補助的機能をグラフィックスコアアレイ1714に提供するハードウェア論理ユニットである。様々な実施形態において、共有機能ロジック1720は、限定されることはないが、サンプラロジック1721、数学ロジック1722、及びスレッド間通信(ITC)ロジック1723を含む。さらに、共有機能ロジック1720内の1つ又は複数のキャッシュ1725が実装されてもよい。
【0260】
少なくとも所与の専門機能の要求がグラフィックスコアアレイ1714内に含めるのに不十分な場合、共有機能が実装される。その代わりに、この専門機能の単一のインスタンス化が独立型エンティティとして共有機能ロジック1720に実装され、グラフィックスコアアレイ1714内の実行リソースの間で共有される。グラフィックスコアアレイ1714の間で共有され、グラフィックスコアアレイ1714に含まれる正確な機能のセットは、実施形態によって異なる。グラフィックスコアアレイ1714によって広く用いられている共有機能ロジック1720内の特定の共有機能が、グラフィックスコアアレイ1714内の共有機能ロジック1716に含まれてよい。必要に応じて、グラフィックスコアアレイ1714内の共有機能ロジック1716は、共有機能ロジック1720内の一部又は全部のロジックを含んでよい。共有機能ロジック1720内の全てのロジック要素は、グラフィックスコアアレイ1714の共有機能ロジック1716に複製されてよい。あるいは、共有機能ロジック1720は、グラフィックスコアアレイ1714内の共有機能ロジック1716を優先して除外される。
[実行ユニット]
【0261】
図18A~
図18Bは、本明細書で説明される実施形態によるグラフィックスプロセッサコアに使用される処理要素のアレイを含むスレッド実行ロジック1800を示している。本明細書の任意の他の図の要素と同じ又は同様の名称を有する
図18A~
図18Bの各要素は、他の図にあるのと同じ要素を示しており、本明細書のどこか他の箇所で説明したものとして、それと同様の方式で動作又は機能してよく、同じコンポーネントを有してよく、他のエンティティに接続されてよいが、そのように限定されることはない。
図18A~
図18Bは、スレッド実行ロジック1800の概要を示しており、このスレッド実行ロジックは、
図15Bの各サブコア1521A~1521Fと共に図示されたハードウェアロジックを表してよい。
図18Aは、汎用グラフィックスプロセッサ内の実行ユニットを表しており、
図18Bは、コンピュートアクセラレータで用いられ得る実行ユニットを表している。
【0262】
図18Aに図示されているように、スレッド実行ロジック1800が、シェーダプロセッサ1802、スレッドディスパッチャ1804、命令キャッシュ1806、複数の実行ユニット1808A~1808Nを含むスケーラブルな実行ユニットアレイ、サンプラ1810、共有ローカルメモリ1811、データキャッシュ1812、及びデータポート1814を含んでよい。必要に応じて、スケーラブルな実行ユニットアレイは、ワークロードの計算要件に基づいて、1つ又は複数の実行ユニット(例えば、実行ユニット1808A、1808B、1808C、1808D、…、1808N-1、及び1808Nのうちのいずれか)を有効または無効にすることによって動的にスケーリングできる。含まれているコンポーネントは、これらのコンポーネントのそれぞれに接続する相互接続ファブリックを介して相互接続されてよい。スレッド実行ロジック1800は、命令キャッシュ1806、データポート1814、サンプラ1810、及び実行ユニット1808A~1808Nのうちの1つ又は複数を通って、システムメモリ又はキャッシュメモリなどのメモリへの1つ又は複数の接続を含んでよい。各実行ユニット(例えば、1808A)は、複数のデータ要素をスレッドごとに並列に処理しながら、複数の同時ハードウェアスレッドを実行できる独立型のプログラム可能な汎用計算ユニットであってよい。様々な実施形態において、実行ユニット1808A~1808Nのアレイは、任意の数の個々の実行ユニットを含むようにスケーラブルである。
【0263】
実行ユニット1808A~1808Nは、主にシェーダプログラムを実行するのに用いられてよい。シェーダプロセッサ1802が、様々なシェーダプログラムを処理し、そのシェーダプログラムと関連づけられた実行スレッドを、スレッドディスパッチャ1804を介してディスパッチしてよい。スレッドディスパッチャは、グラフィックスパイプライン及びメディアパイプラインからのスレッド開始要求を調停して、要求されたスレッドを1つ又は複数の実行ユニット1808A~1808Nでインスタンス化するためのロジックを含んでよい。例えば、ジオメトリパイプラインが、処理のために、頂点シェーダ、テセレーションシェーダ、又はジオメトリシェーダをスレッド実行ロジックにディスパッチしてよい。必要に応じて、スレッドディスパッチャ1804は、実行しているシェーダプログラムからのランタイムスレッド生成要求も処理できる。
【0264】
実行ユニット1808A~1808Nは、多くの標準的な3Dグラフィックスシェーダ命令用のネイティブサポートを含む命令セットをサポートしてよく、これにより、グラフィックスライブラリ(例えば、Direct 3D及びOpenGL)からのシェーダプログラムが最小限の変換で実行されることになる。実行ユニットは、頂点及びジオメトリ処理(例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ)、ピクセル処理(例えば、ピクセルシェーダ、フラグメントシェーダ)、並びに汎用処理(例えば、コンピュートシェーダ及びメディアシェーダ)をサポートする。実行ユニット1808A~1808Nのそれぞれは、単一命令複数データ(SIMD)実行の複数発行が可能であり、マルチスレッドオペレーションによって、高遅延のメモリアクセスにもかかわらず効率的な実行環境が可能になる。各実行ユニット内の各ハードウェアスレッドは、専用の高帯域幅レジスタファイル及び関連する独立したスレッド状態を有する。実行は、整数演算、単精度及び倍精度の浮動小数点演算、SIMD分岐機能、論理演算、超越演算、及び他の雑演算ができるパイプラインへの、クロックごとの複数発行である。メモリ又は複数の共有機能のうちの1つからのデータを待つ間、実行ユニット1808A~1808N内の依存関係ロジックによって、待機中のスレッドが、要求したデータが戻ってくるまでスリープ状態になる。待機中のスレッドがスリープ状態にある間、ハードウェアリソースが他のスレッドの処理に当てられてよい。例えば、頂点シェーダ演算と関連した遅延の際に、実行ユニットが、ピクセルシェーダ、フラグメントシェーダ、又は別のタイプのシェーダプログラム(
図21に示す頂点シェーダ2107などの別の頂点シェーダを含む)の操作を行うことができる。様々な実施形態が、SIMDの使用の代替として又はSIMDの使用に加えて、単一命令複数スレッド(SIMT)の使用による実行を用いるのに適用されてよい。SIMDコア又は演算への言及が、SIMTにも適用されてよく、又はSIMTと組み合わせたSIMDに適用されてもよい。
【0265】
実行ユニット1808A~1808N内の各実行ユニットは、データ要素の配列を処理する。データ要素の数は、「実行サイズ」又は命令に対するチャネルの数である。実行チャネルが、データ要素アクセス、マスキング、及び命令内のフロー制御に関する実行の論理ユニットである。チャネルの数は、特定のグラフィックスプロセッサ用の物理算術論理ユニット(ALU)、浮動小数点ユニット(FPU)、又は他の論理ユニット(例えば、テンソルコア、レイトレーシングコアなど)の数と無関係でよい。さらに、実行ユニット1808A~1808Nは、整数データ型及び浮動小数点データ型をサポートしてよい。
【0266】
実行ユニット命令セットは、SIMD命令を含む。様々なデータ要素は、パックドデータ型としてレジスタに格納されてよく、実行ユニットは、これらの要素のデータサイズに基づいて様々な要素を処理することになる。例えば、256ビット幅のベクトルを処理する場合、このベクトルの256ビットはレジスタに格納されており、実行ユニットは、4個の別個の64ビットパックドデータ要素(クアッドワード(QW)サイズのデータ要素)、8個の別個の32ビットパックドデータ要素(ダブルワード(DW)サイズのデータ要素)、16個の別個の16ビットパックドデータ要素(ワード(W)サイズのデータ要素)、又は32個の別個の8ビットデータ要素(バイト(B)サイズのデータ要素)としてベクトルを処理する。しかしながら、別のベクトル幅及びレジスタサイズがあり得る。
【0267】
必要に応じて、1つ又は複数の実行ユニットを組み合わせて、融合実行ユニット1809A~1809Nにすることができ、この融合実行ユニットは各EUに共通のスレッド制御ロジック(1807A~1807N)を有する。複数のEUを融合して、EUグループにすることもできる。融合EUグループ内の各EUは、別個のSIMDハードウェアスレッドを実行するように構成されてよい。融合EUグループ内のEUの数は、実施形態に従って異なってよい。さらに、EUごとに様々なSIMD幅を実行することができ、この幅は、限定されることはないが、SIMD8、SIMD16、及びSIMD32を含む。それぞれの融合グラフィックス実行ユニット1809A~1809Nは、少なくとも2つの実行ユニットを含む。例えば、融合実行ユニット1809Aは、第1のEU(1808A)と、第2のEU(1808B)と、第1のEU(1808A)及び第2のEU(1808B)に共通のスレッド制御ロジック1807Aとを含む。スレッド制御ロジック1807Aは、融合グラフィックス実行ユニット1809Aで実行されるスレッドを制御し、融合実行ユニット1809A~1809N内の各EUが共通命令ポインタレジスタを用いて実行することを可能にする。
【0268】
1つ又は複数の内蔵命令キャッシュ(例えば、1806)が、実行ユニットのスレッド命令をキャッシュするために、スレッド実行ロジック1800に含まれている。1つ又は複数のデータキャッシュ(例えば、1812)が、スレッド実行時のスレッドデータをキャッシュするために、スレッド実行ロジック1800に含まれてよい。実行ロジック1800で実行するスレッドも、明示的に管理されたデータを共有ローカルメモリ1811に格納できる。サンプラ1810が、3D操作用のテクスチャサンプリング、及びメディア操作のメディアサンプリングを提供するために含まれてよい。サンプラ1810は、サンプリングしたデータを実行ユニットに提供する前に、サンプリング工程でテクスチャデータ又はメディアデータを処理するための、特殊なテクスチャサンプリング機能またはメディアサンプリング機能を含んでよい。
【0269】
実行時に、グラフィックスパイプライン及びメディアパイプラインは、スレッド生成及びディスパッチロジックを介して、スレッド実行ロジック1800にスレッド開始要求を送信する。ジオメトリックオブジェクトのグループが処理されてピクセルデータにラスタライズされると、シェーダプロセッサ1802内のピクセルプロセッサロジック(例えば、ピクセルシェーダロジック、フラグメントシェーダロジックなど)が呼び出されて、出力情報がさらに計算され、結果が出力サーフェス(例えば、カラーバッファ、デプスバッファ、ステンシルバッファなど)に書き込まれることになる。ピクセルシェーダ又はフラグメントシェーダは、ラスタライズされたオブジェクト全体に補間されることになる様々な頂点属性の値を計算してよい。シェーダプロセッサ1802内のピクセルプロセッサロジックは次に、アプリケーションプログラミングインタフェース(API)により供給されるピクセルシェーダプログラム又はフラグメントシェーダプログラムを実行してよい。シェーダプログラムを実行するために、シェーダプロセッサ1802は、スレッドディスパッチャ1804を介して、実行ユニット(例えば、1808A)にスレッドをディスパッチする。シェーダプロセッサ1802は、サンプラ1810内のテクスチャサンプリングロジックを用いて、メモリに格納されたテクスチャマップ内のテクスチャデータにアクセスしてよい。テクスチャデータ及び入力ジオメトリデータに対する算術演算によって、ジオメトリックフラグメントごとにピクセルカラーデータが計算される、あるいは1つ又は複数のピクセルがさらなる処理から破棄される。
【0270】
さらに、データポート1814は、メモリアクセスメカニズムをスレッド実行ロジック1800に提供し、処理済みのデータをグラフィックスプロセッサの出力パイプラインでのさらなる処理のためにメモリに出力してよい。データポート1814は、データポート1814を介してメモリアクセス用のデータをキャッシュする1つ又は複数のキャッシュメモリ(例えば、データキャッシュ1812)を含んでも、これに結合してもよい。
【0271】
必要に応じて、実行ロジック1800は、レイトレーシングアクセラレーション機能を提供できるレイトレーサ1805も含んでよい。レイトレーサ1805は、レイ生成用の命令/機能を含むレイトレーシング命令セットをサポートできる。このレイトレーシング命令セットは、
図3Cのレイトレーシングコア372によってサポートされるレイトレーシング命令セットと同様であっても、異なっていてもよい。
【0272】
図18Bは、実行ユニット1808の例示的な内部詳細を示している。グラフィックス実行ユニット1808が、命令フェッチユニット1837、汎用レジスタファイルアレイ(GRF)1824、アーキテクチャレジスタファイルアレイ(ARF)1826、スレッドアービタ1822、送信ユニット1830、分岐ユニット1832、SIMD浮動小数点ユニット(FPU)1834のセット、及び必要に応じて専用の整数SIMDのALU1835のセットを含んでよい。GRF1824及びARF1826は、グラフィックス実行ユニット1808で有効になり得るそれぞれの同時ハードウェアスレッドと関連づけられた汎用レジスタファイル及びアーキテクチャレジスタファイルのセットを含む。スレッドごとに、アーキテクチャの状態がARF1826に維持されてよく、スレッド実行時に用いられるデータがGRF1824に格納される。各スレッドの実行状態は、スレッドごとに命令ポインタを含んでおり、ARF1826内のスレッド固有のレジスタに保持されてよい。
【0273】
グラフィックス実行ユニット1808は、同時マルチスレッディング(SMT)と細粒度インタリーブ型マルチスレッディング(IMT)とを組み合わせたアーキテクチャを有してよい。このアーキテクチャは、実行ユニットごとの目標とする同時スレッドの数及びレジスタの数に基づいて、設計時に微調整可能なモジュール式構成を有してよく、実行ユニットのリソースは、複数の同時スレッドを実行するのに用いられるロジック全体に分割される。グラフィックス実行ユニット1808により実行され得る論理スレッドの数は、ハードウェアスレッドの数に限定されることはなく、複数の論理スレッドを各ハードウェアスレッドに割り当てることができる。
【0274】
必要に応じて、グラフィックス実行ユニット1808は複数の命令を同時発行でき、これらの命令はそれぞれ異なる命令であってよい。グラフィックス実行ユニットスレッド1808のスレッドアービタ1822は、送信ユニット1830、分岐ユニット1832、又はSIMD型FPU1834のうちの1つに命令を実行のためにディスパッチできる。各実行スレッドは、GRF1824内の128個の汎用レジスタにアクセスできる。各レジスタは、32ビットデータ要素のSIMD8-要素ベクトルとしてアクセス可能な32バイトを格納できる。各実行ユニットスレッドは、GRF1824の4Kバイトにアクセスできてよいが、実施形態がそのように限定されることはなく、もっと多い又は少ないレジスタリソースが他の実施形態で提供されてもよい。グラフィックス実行ユニット1808は、計算操作を独立して実行できる7個のハードウェアスレッドに分割されてよいが、実行ユニットごとのスレッドの数も、実施形態に従って異なってよく、例えば、16個までのハードウェアスレッドがサポートされてよい。7個のスレッドが4Kバイトにアクセスしてよい例示的な実施形態では、GRF1824は合計28Kバイトを格納できる。16個のスレッドが4Kバイトにアクセスしてよい別の例示的な実施形態では、GRF1824は合計64Kバイトを格納できる。しかしながら、実行ユニットごとのスレッドの数は、これらの例に限定されることはなく、所与の数より多くても少なくてもよい。柔軟なアドレス指定方式によって、複数のレジスタが一緒にアドレス指定されて、効果的に広範囲のレジスタを構築する又はストライド矩形ブロックデータ構造を表すことが可能になり得る。
【0275】
追加的に又は代替的に、メモリ操作、サンプラ操作、及び他の長遅延システム通信が、メッセージ伝達送信ユニット1830により実行される「送信」命令を介してディスパッチされてよい。分岐命令が、SIMDの発散及び最終的な収束を促進するために、専用の分岐ユニット1832にディスパッチされてよい。
【0276】
グラフィックス実行ユニット1808は、浮動小数点演算を行うための1つ又は複数のSIMD浮動小数点ユニット(FPU)1834を含んでよい。FPU1834は、整数計算もサポートしてよい。いくつかの例では、FPU1834は、M個までの32ビット浮動小数点(又は整数)演算をSIMDで実行できる、又は2M個までの16ビット整数演算若しくは16ビット浮動小数点演算をSIMDで実行できる。必要に応じて、FPUのうちの少なくとも1つが、高スループットの超越数学関数及び倍精度184ビット浮動小数点をサポートするための拡張数学機能を提供する。8ビット整数SIMD型ALU1835のセットも存在してよく、これは具体的には、機械学習計算と関連する演算を行うために最適化されてよい。
【0277】
必要に応じて、グラフィックス実行ユニット1808の複数のインスタンスのアレイが、グラフィックスサブコアグループ(例えば、サブスライス)にインスタンス化されてよい。拡張性については、製品設計者がサブコアグループごとに正確な数の実行ユニットを選択できる。実行ユニット1808は、複数の実行チャネル全体にわたって命令を実行してよい。さらに、グラフィックス実行ユニット1808で実行される各スレッドは、異なるチャネルで実行されてもよい。
【0278】
図19は、さらなる例示的な実行ユニット1900を示している。本明細書の任意の他の図の要素と同じ又は同様の名称を有する
図19の各要素は、他の図にあるのと同じ要素を示しており、本明細書のどこか他の箇所で説明したものとして、それと同様の方式で動作又は機能してよく、同じコンポーネントを有してよく、他のエンティティに接続されてよいが、そのように限定されることはない。実行ユニット1900は、例えば、
図16Cにあるようなコンピュートエンジンタイル1640A~1640Dに用いるためのコンピュート最適化実行ユニットであってよいが、そのように限定されることはない。実行ユニット1900は、
図16Bにあるようなグラフィックスエンジンタイル1610A~1610Dにも用いられてよい。実行ユニット1900は、スレッド制御ユニット1901、スレッド状態ユニット1902、命令フェッチ/プリフェッチユニット1903、及び命令デコードユニット1904を含んでよい。実行ユニット1900はさらに、実行ユニット内のハードウェアスレッドに割り当てられ得るレジスタを格納するレジスタファイル1906を含んでよい。実行ユニット1900はさらに、送信ユニット1907及び分岐ユニット1908を含んでよい。送信ユニット1907及び分岐ユニット1908は、
図18Bのグラフィックス実行ユニット1808の送信ユニット1830及び分岐ユニット1832と同様に動作してよい。
【0279】
実行ユニット1900は、複数の異なるタイプの機能ユニットを含むコンピュートユニット1910も含んでよい。コンピュートユニット1910は、算術論理ユニットのアレイを含むALUユニット1911も含んでよい。ALUユニット1911は、64ビット、32ビット、及び16ビットの整数及び浮動小数点演算を行うように構成されてよい。整数及び浮動小数点演算は同時に行われてよい。コンピュートユニット1910は、シストリックアレイ1912及び数学ユニット1913も含んでよい。シストリックアレイ1912は、ベクトル演算又は他のデータ並列操作をシストリック方式で行うのに用いられ得るデータ処理ユニットの横W×縦Dのネットワークを含む。シストリックアレイ1912は、行列ドット積演算などの行列演算を行うように構成されてよい。シストリックアレイ1912は、16ビット浮動小数点演算、並びに8ビット及び4ビットの整数演算をサポートしてよい。シストリックアレイ1912は、機械学習操作を加速させるように構成されてよい。シストリックアレイ1912は、Bfloat16、つまり16ビット浮動小数点フォーマットをサポートするように構成されてよい。数学ユニット1913が含まれてよく、これは、当時のALUユニット1911より効率的な低電力方式で、数学演算の特定のサブセットを実行する。数学ユニット1913は、説明した他の実施形態により提供されるグラフィックス処理エンジンの共有機能ロジックに見られる数学ロジック、例えば、
図17の共有機能ロジック1720の数学ロジック1722を含んでよい。数学ユニット1913は、32ビット及び64ビット浮動小数点演算を行うように構成されてよい。
【0280】
スレッド制御ユニット1901は、実行ユニット内のスレッドの実行を制御するロジックを含む。スレッド制御ユニット1901は、実行ユニット1900内のスレッドの実行を開始する、中断する、プリエンプトするためのスレッド調停ロジックを含んでよい。スレッド状態ユニット1902は、実行ユニット1900で実行するように割り当てられたスレッドのスレッド状態を格納するのに用いられてよい。スレッド状態を実行ユニット1900に格納すると、スレッドが遮断されるか休止状態になったときに、スレッドの速やかなプリエンプションが可能になる。命令フェッチ/プリフェッチユニット1903は、高次の実行ロジックの命令キャッシュ(例えば、
図18Aにあるような命令キャッシュ1806)から命令をフェッチしてよい。命令フェッチ/プリフェッチユニット1903は、現在実行しているスレッドの分析に基づいて、命令キャッシュにロードされる命令のプリフェッチ要求を発行することもできる。命令デコードユニット1904は、コンピュートユニットにより実行される命令をデコードするのに用いられてよい。命令デコードユニット1904は、複合命令を構成マイクロ演算にデコードする二次デコーダとして用いられてよい。
【0281】
実行ユニット1900はさらに、実行ユニット1900で実行するハードウェアスレッドにより用いられ得るレジスタファイル1906を含む。レジスタファイル1906内のレジスタが、実行ユニット1900のコンピュートユニット1910内で複数の同時スレッドを実行するのに用いられるロジック全体にわたって分割されてよい。グラフィックス実行ユニット1900により実行され得る論理スレッドの数は、ハードウェアスレッドの数に限定されることはなく、複数の論理スレッドを各ハードウェアスレッドに割り当てることができる。レジスタファイル1906のサイズは、サポートされるハードウェアスレッドの数に基づいて、実施形態によって異なってよい。レジスタリネーミングが、レジスタをハードウェアスレッドに動的に割り当てるのに用いられてよい。
【0282】
図20は、グラフィックスプロセッサの命令フォーマット2000を示すブロック図である。グラフィックスプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線枠は、実行ユニット命令に一般に含まれているコンポーネントを示しており、破線には、任意的なコンポーネント又は命令のサブセットにしか含まれていないコンポーネントが含まれている。説明し図示した命令フォーマット2000はマクロ命令であり、実行ユニットに供給される命令であるという点で、命令が処理されると命令デコードによって生じるマイクロ演算とは異なる。
【0283】
本明細書で説明したグラフィックスプロセッサ実行ユニットは、128ビット命令フォーマット2010の命令をネイティブにサポートしてよい。64ビット圧縮命令フォーマット2030が、選択した命令、命令オプション、及びオペランドの数に基づいて、一部の命令に利用可能である。ネイティブの128ビット命令フォーマット2010は、全ての命令オプションへのアクセスを提供し、一部のオプション及び操作が64ビットフォーマット2030に制限される。64ビットフォーマット2030で利用可能なネイティブ命令は、実施形態ごとに異なる。この命令は、インデックスフィールド2013内のインデックス値のセットを用いて部分的に圧縮されている。実行ユニットハードウェアは、インデックス値に基づいて圧縮表のセットを参照し、圧縮表の出力を用いて、ネイティブ命令を128ビット命令フォーマット2010に再構築する。他のサイズ及びフォーマットの命令が用いられてもよい。
【0284】
フォーマットごとに、実行ユニットが行う操作を命令オペコード2012が定める。実行ユニットは、各オペランドの複数のデータ要素全体にわたって各命令を並列に実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャ要素又はピクチャ要素を表す各カラーチャネルで同時加算演算を行う。デフォルトで、実行ユニットは、オペランドの全てのデータチャネルで各命令を行う。命令制御フィールド2014によって、チャネル選択(例えば、予測)及びデータチャネル順序(例えば、スウィズル)など特定の実行オプションの制御を可能にしてよい。128ビット命令フォーマット2010の命令では、実行サイズフィールド2016が並列に実行されるデータチャネルの数を限定する。実行サイズフィールド2016は、64ビット圧縮命令フォーマット2030での使用に利用できなくてもよい。
【0285】
いくつかの実行ユニット命令は、オペランドを3つまで有し、これらのオペランドには、2つのソースオペランドであるソース0(2020)、ソース1(2022)と、1つのデスティネーション2018とが含まれる。実行ユニットは、デュアルデスティネーション命令をサポートしてよく、これらのデスティネーションのうちの1つは示唆される。データ操作命令が第3ソースオペランド(例えば、ソース2(2024))を有してよく、命令オペコード2012がソースオペランドの数を決定する。命令の最後のソースオペランドが、その命令と共に送られるイミディエイト(例えば、ハードコーディングされた)値であってよい。
【0286】
128ビット命令フォーマット2010は、例えば、直接的レジスタアドレス指定モードが用いられるのか、間接的レジスタアドレス指定モードが用いられるのかを指定するアクセス/アドレスモードフィールド2026を含んでよい。直接的レジスタアドレス指定モードが用いられる場合、1つ又は複数のオペランドのレジスタアドレスは、命令内のビットによって直接的に提供される。
【0287】
128ビット命令フォーマット2010は、命令のアドレスモード及び/又はアクセスモードを指定するアクセス/アドレスモードフィールド2026も含んでよい。アクセスモードは、命令のデータアクセスアライメントを規定するのに用いられてよい。16バイト単位でアライメントされるアクセスモードと1バイト単位でアライメントされるアクセスモードとを含むアクセスモードがサポートされてよく、アクセスモードのバイトアライメントは、命令オペランドのアクセスアライメントを決定する。例えば、第1モードの場合、命令はバイト単位でアライメントされるアドレス指定をソースオペランド及びデスティネーションオペランドに用いてよく、第2モードの場合、命令は16バイト単位でアライメントされるアドレス指定を全てのソースオペランド及びデスティネーションオペランドに用いてよい。
【0288】
アクセス/アドレスモードフィールド2026のアドレスモード部分は、命令が直接的アドレス指定を用いるのか、間接的アドレス指定を用いるのかを決定してよい。直接的レジスタアドレス指定モードが用いられる場合、命令内のビットによって、1つ又は複数のオペランドのレジスタアドレスが直接的に提供される。間接的レジスタアドレス指定モードが用いられる場合、1つ又は複数のオペランドのレジスタアドレスは、アドレスレジスタの値と命令内のアドレスイミディエイトフィールドとに基づいて計算されてよい。
【0289】
命令は、オペコードデコード2040を簡略化するために、オペコード2012ビットフィールドに基づいてまとめられてよい。8ビットオペコードの場合、ビット4、5、及び6によって、実行ユニットがオペコードのタイプを判定することが可能になる。まさにこの示されているオペコードグループは、単なる一例にすぎない。移動/論理オペコードグループ2042が、データ移動命令及び論理命令(例えば、移動(mov)、比較(cmp))を含んでよい。移動/論理グループ2042は、5つの最上位ビット(MSB)を共有してよく、移動(mov)命令は0000xxxxbの形であり、論理命令は0001xxxxbの形である。フロー制御命令グループ2044(例えば、コール、ジャンプ(jmp))が、0010xxxxb(例えば、0x20)の形の命令を含む。雑命令グループ2046が、0011xxxxb(例えば、0x30)の形の同期命令(例えば、待機、送信)を含む複数の命令の組み合わせを含む。並列数学命令グループ2048が、0100xxxxb(例えば、0x40)の形で、コンポーネントごとの算術命令(例えば、加算、乗算(mul))を含む。並列数学グループ2048は、データチャネル全体で並列に算術演算を行う。ベクトル数学グループ2050は、0101xxxxb(例えば、0x50)の形で、算術命令(例えば、dp4)を含む。ベクトル数学グループは、ベクトルオペランドに対してドット積計算などの算術を行う。示されたオペコードデコード2040は、1つの実施形態において、デコードされた命令を実行するのに実行ユニットのどの部分を用いるのかを決定するのに用いられてよい。例えば、いくつかの命令が、シストリックアレイで実行されるシストリック命令に指定されてよい。レイトレーシング命令(不図示)などの他の命令が、実行ロジックのスライス又はパーティション内のレイトレーシングコア又はレイトレーシングロジックに送られてよい。
[グラフィックスパイプライン]
【0290】
図21は、別の実施形態によるグラフィックスプロセッサ2100のブロック図である。本明細書の任意の他の図の要素と同じ又は同様の名称を有する
図21の各要素は、他の図にあるのと同じ要素を示しており、本明細書のどこか他の箇所で説明したものとして、それと同様の方式で動作又は機能してよく、同じコンポーネントを有してよく、他のエンティティに接続されてよいが、そのように限定されることはない。
【0291】
グラフィックスプロセッサ2100は、異なるタイプのグラフィックス処理パイプライン、例えば、ジオメトリパイプライン2120、メディアパイプライン2130、ディスプレイエンジン2140、スレッド実行ロジック2150、及びレンダー出力パイプライン2170などを含んでよい。グラフィックスプロセッサ2100は、1つ又は複数の汎用処理コアを含むマルチコア処理システム内のグラフィックスプロセッサであってよい。このグラフィックスプロセッサの制御は、1つ又は複数の制御レジスタ(不図示)へのレジスタ書き込みによって、又はリング相互接続2102を介してグラフィックスプロセッサ2100に発行されるコマンドを介して行われてよい。リング相互接続2102は、グラフィックスプロセッサ2100を他の処理コンポーネント(他のグラフィックスプロセッサ又は汎用プロセッサなど)に結合してよい。リング相互接続2102からのコマンドは、コマンドストリーマ2103で翻訳され、このコマンドストリーマは、ジオメトリパイプライン2120又はメディアパイプライン2130の個々のコンポーネントに命令を供給する。
【0292】
コマンドストリーマ2103は、頂点フェッチャ2105のオペレーションを指示してよい。この頂点フェッチャは、メモリから頂点データを読み出して、コマンドストリーマ2103により供給される頂点処理コマンドを実行する。頂点フェッチャ2105は、頂点シェーダ2107に頂点データを供給してよく、この頂点シェーダは座標空間変換及びライティング演算を各頂点に対して行う。頂点フェッチャ2105及び頂点シェーダ2107は、スレッドディスパッチャ2131を介して実行ユニット2152A~2152Bに実行スレッドをディスパッチすることで頂点処理命令を実行してよい。
【0293】
実行ユニット2152A~2152Bは、グラフィックス操作及びメディア操作を行うための命令セットを有するベクトルプロセッサのアレイであってよい。実行ユニット2152A~2152Bは、各アレイに特有であるか又はアレイ間で共有される付属L1キャッシュ2151を有してよい。このキャッシュは、データキャッシュ、命令キャッシュ、又はデータ及び命令を別のパーティションに含むように分割されている1つのキャッシュとして構成されてよい。
【0294】
ジオメトリパイプライン2120が、3Dオブジェクトのハードウェア加速型テセレーションを行うテセレーションコンポーネントを含んでよい。プログラム可能型ハルシェーダ2111が、テセレーション操作を構成してよい。プログラム可能型ドメインシェーダ2117が、テセレーション出力のバックエンド評価を提供してよい。テセレータ2113が、ハルシェーダ2111の指示で動作し、ジオメトリパイプライン2120への入力として供給される粗いジオメトリックモデルに基づいて、詳細なジオメトリックオブジェクトのセットを生成する専用ロジックを含んでよい。さらに、テセレーションが用いられない場合、テセレーションコンポーネント(例えば、ハルシェーダ2111、テセレータ2113、ドメインシェーダ2117)を飛ばすことができる。
【0295】
ジオメトリックオブジェクト全体が、実行ユニット2152A~2152Bにディスパッチされる1つ又は複数のスレッドを介して、ジオメトリシェーダ2119により処理されてよく、又はクリッパ2129に直接的に進むことができる。ジオメトリシェーダは、グラフィックスパイプラインの前のステージにあるような頂点又は頂点のパッチではなく、ジオメトリックオブジェクト全体を処理してよい。テセレーションが無効である場合、ジオメトリシェーダ2119は、頂点シェーダ2107から入力を受信する。ジオメトリシェーダ2119は、テセレーションユニットが無効である場合、ジオメトリシェーダプログラムがジオメトリテセレーションを行うようにプログラム可能であってよい。
【0296】
ラスタライズの前に、クリッパ2129が頂点データを処理する。クリッパ2129は、固定機能クリッパであっても、クリッピング機能及びジオメトリシェーダ機能を有するプログラム可能型クリッパであってもよい。レンダー出力パイプライン2170内のラスタライザ及びデプステストコンポーネント2173が、ジオメトリックオブジェクトをピクセルごとの表現に変換するピクセルシェーダをディスパッチしてよい。ピクセルシェーダロジックは、スレッド実行ロジック2150に含まれてよい。必要に応じて、アプリケーションが、ラスタライザ及びデプステストコンポーネント2173を飛ばし、ストリームアウトユニット2123を介してラスタライズ前の頂点データにアクセスできる。
【0297】
グラフィックスプロセッサ2100は、相互接続バス、相互接続ファブリック、又はプロセッサの主なコンポーネントの間でデータ及びメッセージ送ることができるいくつかの他の相互接続メカニズムを有する。いくつかの実施形態では、実行ユニット2152A~2152B及び関連する論理ユニット(例えば、L1キャッシュ2151、サンプラ2154、テクスチャキャッシュ2158など)がデータポート2156を介して相互接続して、メモリアクセスを行い且つプロセッサのレンダー出力パイプラインコンポーネントと通信する。サンプラ2154、キャッシュ2151、2158、及び実行ユニット2152A~2152Bがそれぞれ、別個のメモリアクセスパスを有してよい。必要に応じて、テクスチャキャッシュ2158は、サンプラキャッシュとしても構成されてよい。
【0298】
レンダー出力パイプライン2170は、頂点ベースのオブジェクトを関連するピクセルベースの表現に変換するラスタライザ及びデプステストコンポーネント2173を含んでよい。ラスタライザロジックは、固定機能による三角形及び線のラスタライズを行うウィンドワー/マスカーユニットを含んでよい。関連するレンダーキャッシュ2178及びデプスキャッシュ2179も、いくつかの実施形態で利用可能である。ピクセル操作コンポーネント2177が、データに対してピクセルベースの操作を行うが、いくつかの例では、2D操作と関連したピクセル操作(例えば、ブレンディングを伴うビットブロック画像転送)が2Dエンジン2141によって行われるか、又はオーバーレイ表示プレーンを用いるディスプレイコントローラ2143で表示時に代用される。共有L3キャッシュ2175が、全てのグラフィックスコンポーネントに利用可能であってよく、これにより、メインシステムメモリを用いずにデータの共有が可能になる。
【0299】
グラフィックスプロセッサのメディアパイプライン2130は、メディアエンジン2137とビデオフロントエンド2134とを含んでよい。ビデオフロントエンド2134は、コマンドストリーマ2103からパイプラインコマンドを受信してよい。メディアパイプライン2130は、別個のコマンドストリーマを含んでよい。ビデオフロントエンド2134は、メディアコマンドを処理してから、このコマンドをメディアエンジン2137に送信してよい。メディアエンジン2137は、スレッドディスパッチャ2131を介してスレッド実行ロジック2150にディスパッチするスレッドを生成するスレッド生成機能を含んでよい。
【0300】
グラフィックスプロセッサ2100は、ディスプレイエンジン2140を含んでよい。このディスプレイエンジン2140は、プロセッサ2100の外部にあってもよく、リング相互接続2102又は何らかの他の相互接続バス若しくはファブリックを介して、グラフィックスプロセッサと結合してもよい。ディスプレイエンジン2140は、2Dエンジン2141とディスプレイコントローラ2143とを含んでよい。ディスプレイエンジン2140は、3Dパイプラインから独立して動作可能な専用ロジックを含んでよい。ディスプレイコントローラ2143は、表示デバイス(不図示)と結合してよい。この表示デバイスは、ラップトップコンピュータにあるようなシステム一体型表示デバイスであっても、表示デバイスコネクタを介して取り付けられる外付け表示デバイスであってもよい。
【0301】
ジオメトリパイプライン2120及びメディアパイプライン2130は、複数のグラフィックス及びメディアプログラミングインタフェースに基づいてオペレーションを行うように構成可能であってよく、任意の1つのアプリケーションプログラミングインタフェース(API)に固有のものではない。グラフィックスプロセッサのドライバソフトウェアが、特定のグラフィックス又はメディアライブラリに固有のAPIコールを、グラフィックスプロセッサが処理できるコマンドに変換してよい。オープングラフィックスライブラリ(OpenGL)、オープンコンピューティング言語(OpenCL)、及び/又はVulkanグラフィックス及びコンピュートAPIには全て、クロノスグループからサポートが提供され得る。Direct3Dライブラリにも、Microsoft Corporationからサポートが提供され得る。これらのライブラリの組み合わせがサポートされてもよい。オープンソースコンピュータビジョンライブラリ(OpenCV)にもサポートが提供され得る。将来のAPIのパイプラインからグラフィックスプロセッサのパイプラインへのマッピングを行うことができれば、互換性のある3Dパイプラインを含めた将来のAPIもサポートされるであろう。
[グラフィックスパイプラインのプログラミング]
【0302】
図22Aは、グラフィックス処理パイプライン、例えば、
図16A、
図17、
図21とともに本明細書で説明されたパイプラインなどをプログラミングするのに用いられるグラフィックスプロセッサコマンドフォーマット2200を示すブロック図である。
図22Bは、一実施形態によるグラフィックスプロセッサコマンドシーケンス2210を示すブロック図である。
図22Aの実線枠は、グラフィックスコマンドに一般に含まれているコンポーネントを示しており、破線には、任意的なコンポーネント又はグラフィックスコマンドのサブセットにしか含まれていないコンポーネントが含まれている。
図22Aの例示的なグラフィックスプロセッサコマンドフォーマット2200は、コマンドのクライアント2202、コマンドオペレーションコード(オペコード)2204、及びデータ2206を識別するデータフィールドを含む。サブオペコード2205及びコマンドサイズ2208も、いくつかのコマンドに含まれている。
【0303】
クライアント2202は、コマンドデータを処理するグラフィックスデバイスのクライアントユニットを指定してよい。グラフィックスプロセッサコマンドパーサが、各コマンドのクライアントフィールドを検査し、コマンドのさらなる処理を条件づけて、コマンドデータを適切なクライアントユニットに送ってよい。グラフィックスプロセッサクライアントユニットは、メモリインタフェースユニット、レンダーユニット、2Dユニット、3Dユニット、及びメディアユニットを含んでよい。各クライアントユニットは、コマンドを処理する対応する処理パイプラインを有してよい。コマンドがクライアントユニットにより受信されると、クライアントユニットはオペコード2204及び、もし存在するならばサブオペコード2205を読み出し、実行する操作を決定する。クライアントユニットは、データフィールド2206内の情報を用いてコマンドを実行する。いくつかのコマンドでは、明示的なコマンドサイズ2208が、コマンドのサイズを指定すると期待されている。コマンドパーサは、コマンドの少なくとも一部のサイズをコマンドオペコードに基づいて自動的に決定してよい。コマンドが、ダブルワードの倍数でアライメントされてよい。他のコマンドフォーマットも用いられてよい。
【0304】
図22Bのフロー図は、例示的なグラフィックスプロセッサコマンドシーケンス2210を示している。例示的なグラフィックスプロセッサを特徴づける、データ処理システムのソフトウェア又はファームウェアが、示されているコマンドシーケンスのあるバージョンを使用して、グラフィックス操作のセットをセットアップし、実行し、終了してよい。サンプルコマンドシーケンスが、例示のみを目的として示され且つ説明されるが、これらの特定のコマンド又はこのコマンドシーケンスに限定されることはない。さらに、グラフィックスプロセッサが少なくとも部分的に同時にコマンドのシーケンスを処理することになるように、コマンドはコマンドシーケンス内のコマンドのバッチとして発行されてよい。
【0305】
グラフィックスプロセッサコマンドシーケンス2210は、パイプライン用に現在保留しているコマンドを、任意の有効なグラフィックスパイプラインに完了させるためのパイプラインフラッシュコマンド2212から始まってよい。必要に応じて、3Dパイプライン2222とメディアパイプライン2224とが、同時に動作しなくてもよい。パイプラインフラッシュは、あらゆる保留中のコマンドを、有効なグラフィックスパイプラインに完了させるために行われる。パイプラインフラッシュに応答して、グラフィックスプロセッサのコマンドパーサは、有効な描画エンジンが保留中のオペレーションを完了して、関連するリードキャッシュが無効になるまで、コマンド処理を中断することになる。必要に応じて、「ダーティ」と示されたレンダーキャッシュ内の任意のデータがメモリにフラッシュされてよい。パイプラインフラッシュコマンド2212は、パイプライン同期に用いられても、グラフィックスプロセッサを低電力状態に置く前に用いられてもよい。
【0306】
コマンドシーケンスがパイプラインを明示的に切り替えるのにグラフィックスプロセッサを必要とするときに、パイプライン選択コマンド2213が用いられてよい。コンテキストが両方のパイプラインにコマンドを発行しない限り、パイプライン選択コマンド2213が、パイプラインコマンドを発行する前に実行コンテキスト内で一度しか必要とされなくてもよい。パイプラインがパイプライン選択コマンド2213を介して切り替わる直前に、パイプラインフラッシュコマンド2212が必要とされてよい。
【0307】
パイプライン制御コマンド2214が、オペレーションのためにグラフィックスパイプラインを構成してよく、3Dパイプライン2222及びメディアパイプライン2224をプログラムするのに用いられてよい。パイプライン制御コマンド2214は、有効なパイプライン用のパイプライン状態を構成してよい。パイプライン制御コマンド2214は、パイプライン同期に用いられてよく、コマンドのバッチを処理する前に、有効なパイプライン内の1つ又は複数のキャッシュメモリからデータを削除するのに用いられてよい。
【0308】
リターンバッファ状態コマンド2216が、それぞれのパイプラインがデータを書き込むための、リターンバッファのセットを構成するのに用いられてよい。いくつかのパイプラインオペレーションでは、各オペレーションが処理中に中間データを書き込む1つ又は複数のリターンバッファの割り当て、選択、又は構成が必要となる。グラフィックスプロセッサも、出力データを格納し、またスレッド間通信を行うために、1つ又は複数のリターンバッファを用いてよい。リターンバッファ状態コマンド2216は、パイプラインオペレーションのセットに用いるリターンバッファのサイズ及びその数を選択することを含んでよい。
【0309】
コマンドシーケンス内のその他のコマンドは、オペレーション用の有効なパイプラインに基づいて異なる。コマンドシーケンスは、パイプライン決定2220に基づいて、3Dパイプライン状態2230から始まる3Dパイプライン2222、又はメディアパイプライン状態2240で始まるメディアパイプライン2224に合わせてある。
【0310】
3Dパイプライン状態2230を構成するコマンドは、頂点バッファ状態、頂点要素状態、コンスタントカラー状態、デプスバッファ状態、及び3Dプリミティブコマンドが処理される前に構成される他の状態変数の3D状態設定コマンドを含む。これらのコマンドの値は、使用中の特定の3D APIに少なくとも部分的に基づいて決定される。3Dパイプライン状態2230のコマンドは、特定のパイプライン要素を、これらの要素が使われない場合には、選択的に無効にするか又は飛ばすこともでき得る。
【0311】
3Dプリミティブ2232のコマンドが、3Dパイプラインで処理される3Dプリミティブを投入するのに用いられてよい。3Dプリミティブ2232のコマンドを介してグラフィックスプロセッサに送られるこれらのコマンド及び関連するパラメータが、グラフィックスパイプライン内の頂点フェッチ機能に転送される。頂点フェッチ機能は、3Dプリミティブ2232コマンドデータを用いて頂点データ構造を生成する。頂点データ構造は、1つ又は複数のリターンバッファに格納される。3Dプリミティブ2232のコマンドは、頂点シェーダを介して3Dプリミティブに対して頂点操作を行うのに用いられてよい。頂点シェーダを処理するために、3Dパイプライン2222がシェーダ実行スレッドをグラフィックスプロセッサ実行ユニットにディスパッチする。
【0312】
3Dパイプライン2222は、実行2234のコマンド又はイベントでトリガーされてよい。レジスタが、トリガーコマンド実行を書き込んでよい。実行が、コマンドシーケンス内の「ゴー(go)」コマンド又は「キック(kick)」コマンドでトリガーされてよい。グラフィックスパイプラインを通じてコマンドシーケンスをフラッシュするために、コマンド実行がパイプライン同期コマンドを用いてトリガーされてよい。3Dパイプラインは、3Dプリミティブのジオメトリ処理を行うことになる。オペレーションが完了すると、得られたジオメトリックオブジェクトはラスタライズされ、得られたピクセルにピクセルエンジンが色をつける。ピクセルシェーディング及びピクセルバックエンドオペレーションを制御するための別のコマンドも、これらのオペレーションのために含まれてよい。
【0313】
グラフィックスプロセッサコマンドシーケンス2210は、メディア操作を行うときに、メディアパイプライン2224のパスをたどることができる。一般に、メディアパイプライン2224用のプログラミングの特定の用途又は方式は、行われるメディア操作またはコンピュート操作によって決まる。特定のメディアデコードオペレーションが、メディアデコードの際に、メディアパイプラインにオフロードされてよい。メディアパイプラインは無視されてもよく、メディアデコードが、1つ又は複数の汎用処理コアにより提供されるリソースを全体的に又は部分的に用いて行われてよい。メディアパイプラインは、汎用グラフィックスプロセッサユニット(GPGPU)オペレーション用の要素も含んでよく、グラフィックスプロセッサは、グラフィックスプリミティブのレンダリングに明示的に関連していない計算シェーダプログラムを用いてSIMDベクトル演算を行うのに用いられる。
【0314】
メディアパイプライン2224は、3Dパイプライン2222と同様の方式で構成されてよい。メディアパイプライン状態2240を構成するコマンドのセットが、メディアオブジェクトコマンド2242の前にディスパッチされるか、又はコマンドキューに置かれる。メディアパイプライン状態2240用のコマンドが、メディアオブジェクトを処理するのに用いられるメディアパイプライン要素を構成するデータを含んでよい。これには、メディアパイプライン内のビデオデコード及びビデオエンコードロジックを構成する、エンコードフォーマット又はデコードフォーマットなどのデータが含まれる。メディアパイプライン状態2240用のコマンドは、状態設定のバッチを含む「間接的」状態要素を指す1つ又は複数のポインタの使用もサポートしてよい。
【0315】
メディアオブジェクトコマンド2242は、メディアパイプラインが処理するメディアオブジェクトを指すポインタを供給してよい。メディアオブジェクトは、処理されるビデオデータを含むメモリバッファを含む。必要に応じて、全てのメディアパイプライン状態は、メディアオブジェクトコマンド2242を発行する前に有効でなければならない。パイプライン状態が構成されて、メディアオブジェクトコマンド2242がキューに入ると、メディアパイプライン2224は、実行コマンド2244又は等価な実行イベント(例えば、レジスタ書き込み)でトリガーされる。次に、メディアパイプライン2224からの出力が3Dパイプライン2222又はメディアパイプライン2224により提供されるオペレーションで後処理されてよい。GPGPUオペレーションが、メディア操作と同様の方式で構成され且つ実行されてよい。
[グラフィックスソフトウェアアーキテクチャ]
【0316】
図23は、データ処理システム2300の例示的なグラフィックスソフトウェアアーキテクチャを示している。そのようなソフトウェアアーキテクチャは、3Dグラフィックスアプリケーション2310と、オペレーティングシステム2320と、少なくとも1つのプロセッサ2330とを含んでよい。プロセッサ2330は、グラフィックスプロセッサ2332と、1つ又は複数の汎用プロセッサコア2334とを含んでよい。プロセッサ2330は、プロセッサ1402又は本明細書で説明されるプロセッサのうちのいずれかの変形であってもよい。プロセッサ2330は、プロセッサ1402又は本明細書で説明されるプロセッサのうちのいずれかの代わりに用いられてよい。したがって、プロセッサ1402又は本明細書で説明されるプロセッサのうちのいずれかと組み合わせた任意の特徴の開示は、グラフィックスプロセッサ2330との対応する組み合わせも開示しているが、そのように限定されることはない。さらに、本明細書の任意の他の図の要素と同じ又は同様の名称を有する
図23の各要素は、他の図にあるのと同じ要素を示しており、本明細書のどこか他の箇所で説明したものとして、それと同様の方式で動作又は機能してよく、同じコンポーネントを有してよく、他のエンティティに接続されてよいが、そのように限定されることはない。グラフィックスアプリケーション2310及びオペレーティングシステム2320はそれぞれ、データ処理システムのシステムメモリ2350で実行される。
【0317】
3Dグラフィックスアプリケーション2310は、シェーダ命令2312を含む1つ又は複数のシェーダプログラムを含んでよい。シェーダ言語命令は、Direct3Dの高水準シェーダ言語(HLSL)及びOpenGLシェーダ言語(GLSL)などの高水準シェーダ言語であってよい。アプリケーションは、汎用プロセッサコア2334による実行に好適な機械語の実行可能命令2314も含んでよい。アプリケーションは、頂点データで定義されたグラフィックスオブジェクト2316も含んでよい。
【0318】
オペレーティングシステム2320は、Microsoft CorporationのMicrosoft(登録商標)Windows(登録商標)オペレーティングシステム、独自のUnix(登録商標)ライクなオペレーティングシステム、又はLinux(登録商標)カーネルの変形を用いるオープンソースのUnixライクなオペレーティングシステムであってもよい。オペレーティングシステム2320は、Direct3D API、OpenGL API、又はVulkan APIなどのグラフィックスAPI2322をサポートしてよい。Direct3D APIが用いられる場合、オペレーティングシステム2320は、フロントエンドシェーダコンパイラ2324を用いて、HLSLの任意のシェーダ命令2312を低水準シェーダ言語にコンパイルする。コンパイルは実行時(JIT)コンパイルであってよく、又はアプリケーションはシェーダプリコンパイルを実行できる。高水準シェーダは、3Dグラフィックスアプリケーション2310のコンパイル時に、低水準シェーダにコンパイルされてよい。シェーダ命令2312は、Vulkan APIにより用いられる標準のポータブル中間表現(SPIR)のあるバージョンなどの中間型で提供されてよい。
【0319】
ユーザモードグラフィックスドライバ2326が、シェーダ命令2312をハードウェア固有の表現に変換するバックエンドシェーダコンパイラ2327を含んでよい。OpenGL APIが用いられる場合、GLSL高水準言語のシェーダ命令2312が、コンパイルのためにユーザモードグラフィックスドライバ2326に送られる。ユーザモードグラフィックスドライバ2326は、オペレーティングシステムのカーネルモード機能2328を用いて、カーネルモードグラフィックスドライバ2329と通信してよい。カーネルモードグラフィックスドライバ2329は、コマンド及び命令をディスパッチするためにグラフィックスプロセッサ2332と通信してよい。
[IPコアの実装形態]
【0320】
1つ又は複数の態様が、機械可読媒体に格納された、プロセッサなどの集積回路内のロジックを表す且つ/又は定義する代表コードで実装されてよい。例えば、機械可読媒体は、プロセッサ内の様々なロジックを表す命令を含んでよい。命令は、機械により読み出されると、機械に、本明細書で説明される技法を行うロジックを製造させてよい。そのような表現は、「IPコア」として知られており、集積回路の構造を示すハードウェアモデルとして有形な機械可読媒体に格納され得る、集積回路用ロジックの再利用可能な単位である。ハードウェアモデルは、集積回路を製造する製造機械にハードウェアモデルをロードする様々な顧客または製造施設に供給されてよい。集積回路は、回路が、本明細書で説明される実施形態のうちのいずれかと関連して説明されるオペレーションを行うように、製造されてよい。
【0321】
図24Aは、一実施形態によるオペレーションを行う集積回路を製造するのに用いられ得るIPコア開発システム2400を示すブロック図である。IPコア開発システム2400は、大規模な設計に組み込むことができる、又は集積回路全体(例えば、SoC集積回路)を構築するのに用いることができる、モジュール式の再利用可能な設計を生成するのに用いられてよい。設計施設2430では、IPコア設計のソフトウェアシミュレーション2410を高水準プログラミング言語(例えば、C/C++)で生成できる。ソフトウェアシミュレーション2410は、シミュレーションモデル2412を用いてIPコアの動作を設計し、テストし、確認するのに用いられてよい。シミュレーションモデル2412は、機能シミュレーション、動作シミュレーション、及び/又はタイミングシミュレーションを含んでよい。次に、レジスタ転送レベル(RTL)設計2415が、シミュレーションモデル2412から作成されるか又は合成されてよい。RTL設計2415は、ハードウェアレジスタ間のデジタル信号の流れをモデル化する、集積回路の動作の抽象化であり、モデル化されたデジタル信号を用いて行われる関連ロジックを含む。RTL設計2415に加えて、ロジックレベル又はトランジスタレベルでの低水準設計も、作成され、設計され、又は合成されてよい。したがって、初期設計及びシミュレーションの具体的な詳細は異なってもよい。
【0322】
RTL設計2415又はこれに相当するものはさらに、設計施設でハードウェアモデル2420に合成されてよく、このハードウェアモデルは、ハードウェア記述言語(HDL)又は物理設計データの何らかの他の表現になっていてよい。HDLはさらに、IPコア設計を確認するために、シミュレーションされるか、又はテストされてもよい。IPコア設計は、サードパーティの製造施設2465に届けるために、不揮発性メモリ2440(例えば、ハードディスク、フラッシュメモリ、又は任意の不揮発性記憶媒体)を用いて格納されてよい。あるいは、IPコア設計は(例えば、インターネットを介して)有線接続2450又は無線接続2460で送られてもよい。次に製造施設2465は、IPコア設計に少なくとも部分的に基づいている集積回路を製造してよい。製造される集積回路は、本明細書で説明される少なくとも1つの実施形態によるオペレーションを行うように構成されてよい。
【0323】
図24Bは、集積回路パッケージアセンブリ2470の垂直断面図を示している。集積回路パッケージアセンブリ2470は、本明細書で説明される1つ又は複数のプロセッサ又はアクセラレータデバイスの一実装形態を示している。パッケージアセンブリ2470は、基板2480に接続された複数のハードウェアロジック2472、2474というユニットを含む。ロジック2472、2474は、構成可能型ロジックハードウェア又は固定機能ロジックハードウェアに少なくとも部分的に実装されてよく、本明細書で説明されるプロセッサコア、グラフィックスプロセッサ、又は他のアクセラレータデバイスのうちのいずれかの1つ又は複数の部分を含んでもよい。ロジック2472、2474の各ユニットは、半導体ダイに実装され、相互接続構造2473を介して基板2480と結合されてよい。相互接続構造2473は、ロジック2472、2474と基板2480との間に電気信号を通すように構成されてよく、限定されることはないが、バンプ又はピラーなどの相互接続を含んでもよい。相互接続構造2473は、例えば、ロジック2472、2474の動作と関連した入力/出力(I/O)信号及び/又は電源若しくは接地信号などの電気信号を通すように構成されてよい。必要に応じて、基板2480はエポキシベースの積層基板であってよい。基板2480は、他の適切なタイプの基板も含んでよい。パッケージアセンブリ2470は、パッケージ相互接続2483を介して他の電気デバイスに接続されてよい。パッケージ相互接続2483は、マザーボード、他のチップセット、又はマルチチップモジュールなどの他の電気デバイスに電気信号を送るために、基板2480の表面に結合されてよい。
【0324】
ロジック2472、2474のユニットは、ロジック2472と2474との間に電気信号を通すように構成されたブリッジ2482と電気的に結合されてよい。ブリッジ2482は、電気信号のルートを提供する高密度相互接続構造であってよい。ブリッジ2482は、ガラス又は好適な半導体材料で構成されたブリッジ基板を含んでよい。電気経路選択構造が、ロジック2472と2474との間にチップ間接続を提供するために、ブリッジ基板に形成されてよい。
【0325】
ロジック2472、2474という2つのユニット及び1つのブリッジ2482が図示されているが、本明細書で説明される実施形態がもっと多い又は少ない論理ユニットを1つ又は複数のダイに含んでもよい。1つ又は複数のダイは、ブリッジを用いないか又は1つ以上のブリッジで接続されてよい(ロジックが1つのダイに含まれる場合には、ブリッジ2482が除外されてもよいため)。あるいは、複数のダイ又はロジックのユニットが、1つ又は複数のブリッジで接続されてよい。さらに、複数の論理ユニット、ダイ、及びブリッジが、3次元構成を含む他の可能な構成で一緒に接続されてもよい。
【0326】
図24Cは、基板2480(例えば、ベースダイ)に接続された複数のハードウェアロジックチップレットのユニットを含むパッケージアセンブリ2490を示している。本明細書で説明されるグラフィックス処理ユニット、並列プロセッサ、及び/又はコンピュートアクセラレータが、別個に製造される別種のシリコンチップレットで構成されてよい。この文脈において、チップレットとは、複数の別個のロジックのユニットを含む少なくとも部分的にパッケージされた集積回路であって、他のチップレットと共に組み立てられると大型パッケージになり得る集積回路である。異なるIPコアロジックを備えたチップレットの多様なセットが、1つのデバイスに組み立てられてよい。さらに、これらのチップレットは、アクティブインターポーザ技術を用いて、ベースダイ又はベースチップレットに統合されてよい。本明細書で説明される概念によって、GPU内の異なる形式のIP間での相互接続及び通信が可能になる。これらのIPコアは、異なるプロセス技術を用いて製造でき、また製造時に構成することができるので、特にいくつかの種類のIPを有する大型SoCに複数のIPを同じ製造プロセスで集積する際の複雑さを回避できる。複数のプロセス技術の使用を可能にすることで、市場投入までの時間が改善され、複数の製品SKUを作成する費用効果の高いやり方がもたらされる。さらに、分解できるIPの方が個別にパワーゲーティングを行うのに適しており、所与のワークロードに使われていないコンポーネントの電源を切ることができるので、全体の電力消費が減少する。
【0327】
ハードウェアロジックチップレットは、専用ハードウェアロジックチップレット2472、ロジック又はI/Oチップレット2474、及び/又はメモリチップレット2475を含んでよい。ハードウェアロジックチップレット2472とロジック又はI/Oチップレット2474とは、構成可能型ロジック又は固定機能ロジックハードウェアに少なくとも部分的に実装されてよく、本明細書で説明されるプロセッサコア、グラフィックスプロセッサ、並列プロセッサ、又は他のアクセラレータデバイスのうちのいずれかの1つ又は複数の部分を含んでもよい。メモリチップレット2475は、DRAM(例えば、GDDR、HBM)メモリであっても、キャッシュ(SRAM)メモリであってもよい。
【0328】
各チップレットは、別個の半導体ダイとして製造されてよく、相互接続構造2473を介して基板2480と結合されてよい。相互接続構造2473は、様々なチップレットと基板2480内のロジックとの間に電気信号を通すように構成されてよい。相互接続構造2473は、限定されることはないが、バンプ又はピラーなどの相互接続を含んでよい。いくつかの実施形態において、相互接続構造2473は、例えば、ロジック、I/O、及びメモリチップレットの動作と関連した入力/出力(I/O)信号及び/又は電源若しくは接地信号などの電気信号を通すように構成されてよい。
【0329】
基板2480はエポキシベースの積層基板であってよい。しかしながら、基板2480はこれに限定されることはなく、他の適切なタイプの基板も含んでよい。パッケージアセンブリ2490は、パッケージ相互接続2483を介して他の電気デバイスに接続されてよい。パッケージ相互接続2483は、マザーボード、他のチップセット、又はマルチチップモジュールなどの他の電気デバイスに電気信号を送るために、基板2480の表面に結合されてよい。
【0330】
ロジック又はI/Oチップレット2474とメモリチップレット2475とが、ロジック又はI/Oチップレット2474とメモリチップレット2475との間に電気信号を通すように構成されたブリッジ2487を介して電気的に結合されてよい。ブリッジ2487は、電気信号のルートを提供する高密度相互接続構造であってよい。ブリッジ2487は、ガラス又は好適な半導体材料で構成されたブリッジ基板を含んでよい。電気経路選択構造が、ロジック又はI/Oチップレット2474とメモリチップレット2475との間にチップ間接続を提供するために、ブリッジ基板に形成されてよい。ブリッジ2487は、シリコンブリッジ又は相互接続ブリッジとも呼ばれることがある。例えば、ブリッジ2487は、埋め込み型マルチダイ相互接続ブリッジ(EMIB)である。あるいは、ブリッジ2487は、あるチップレットから別のチップレットへの単なる直接的な接続であってもよい。
【0331】
基板2480は、I/O2491、キャッシュメモリ2492、及び他のハードウェアロジック2493用のハードウェアコンポーネントを含んでよい。様々なロジックチップレットと基板2480内のロジック2491、2493との間の通信を可能にするために、ファブリック2485を基板2480に埋め込むことができる。必要に応じて、I/O2491、ファブリック2485、キャッシュ、ブリッジ、及び他のハードウェアロジック2493は、基板2480の上に層状になっているベースダイに統合されてよい。ファブリック2485は、ネットワークオンチップ型相互接続であっても、パッケージアセンブリのコンポーネント間でデータパケットを切り替える別の形式のパケット交換型ファブリックであってもよい。
【0332】
さらに、パッケージアセンブリ2490は、ファブリック2485又は1つ若しくは複数のブリッジ2487で相互接続される、もっと小さい又は大きい数のコンポーネント及びチップレットも含んでよい。パッケージアセンブリ2490内のチップレットは、3D又は2.5D構成で配置されてよい。一般に、例えば、ロジック又はI/Oチップレットとメモリチップレットとの間のポイントツーポイント相互接続を容易にするために、ブリッジ構造2487が用いられてよい。ファブリック2485は、様々なロジック及び/又はI/Oチップレット(例えば、チップレット2472、2474、2491、2493)と、他のロジック及び/又はI/Oチップレットとを相互接続するのに用いられてよい。基板内のキャッシュメモリ2492は、パッケージアセンブリ2490のグローバルキャッシュ、分散型グローバルキャッシュの一部、又はファブリック2485の専用キャッシュの機能を果たすことができる。
【0333】
図24Dは、一実施形態による、交換可能なチップレット2495を含むパッケージアセンブリ2494を示している。交換可能なチップレット2495は、1つ又は複数のベースチップレット2496、2498の標準スロットに組み立てられてよい。ベースチップレット2496、2498は、ブリッジ相互接続2497を介して結合されてよく、このブリッジ相互接続は、本明細書で説明した他のブリッジ相互接続と同様であってよく、例えば、EMIBであってもよい。メモリチップレットは、ロジック又はI/Oチップレットにもブリッジ相互接続を介して接続されてよい。I/O及びロジックチップレットは、相互接続ファブリックを介して通信できる。ベースチップレットはそれぞれ、ロジック又はI/O、又はメモリ/キャッシュのうちの1つの標準フォーマットによる1つ又は複数のスロットをサポートできる。
【0334】
SRAM及び電源供給回路が、ベースチップレット2496、2498のうちの一方又は両方に作られてよく、これらの回路は、ベースチップレットの上に積層される交換可能なチップレット2495と比べて異なるプロセス技術を用いて作ることができる。例えば、ベースチップレット2496、2498は、大規模なプロセス技術を用いて作ることができ、交換可能なチップレットは小規模なプロセス技術を用いて作ることができる。交換可能なチップレット2495のうちの1つ又は複数が、メモリ(例えば、DRAM)チップレットであってよい。パッケージアセンブリ2494を用いる製品を対象とした電力及び/又は性能に基づいて、異なるメモリ密度が、パッケージアセンブリ2494のために選択されてよい。さらに、異なる数のタイプの機能ユニットを有するロジックチップレットが、当該製品を対象とした電力及び/又は性能に基づいて、組み立て時に選択されてよい。さらに、異なるタイプのIPロジックコアを含むチップレットが、交換可能なチップレットのスロットに挿入されてよく、これにより、異なる技術によるIPブロックを組み合わせたりそれに合わせたりできるハイブリッドプロセッサ方式が可能になる。
[例示的なシステムオンチップ集積回路]
【0335】
図25~
図26Bは、1つ又は複数のIPコアを用いて作られ得る例示的集積回路及び関連するグラフィックスプロセッサを示している。示されているものに加えて、他のロジック及び回路が含まれてよく、その中には、別のグラフィックスプロセッサ/コア、ペリフェラルインタフェースコントローラ、又は汎用プロセッサコアが含まれる。本明細書の任意の他の図の要素と同じ又は同様の名称を有する
図25~
図26Bの各要素は、他の図にあるのと同じ要素を示しており、本明細書のどこか他の箇所で説明したものとして、それと同様の方式で動作又は機能してよく、同じコンポーネントを有してよく、他のエンティティに接続されてよいが、そのように限定されることはない。
【0336】
図25は、1つ又は複数のIPコアを用いて作られ得る例示的なシステムオンチップ集積回路2500を示すブロック図である。例示的な集積回路2500は、1つ又は複数のアプリケーションプロセッサ2505(例えば、CPU)と、少なくとも1つのグラフィックスプロセッサ2510とを含み、このグラフィックスプロセッサは、グラフィックスプロセッサ1408、1508、2510の変形であっても、本明細書で説明された任意のグラフィックスプロセッサの変形であってもよく、説明された任意のグラフィックスプロセッサの代わりに用いられてもよい。したがって、グラフィックスプロセッサと組み合わせた任意の特徴のここでの開示は、グラフィックスプロセッサ2510との対応する組み合わせも開示しているが、そのように限定されることはない。集積回路2500はさらに、イメージプロセッサ2515及び/又はビデオプロセッサ2520を含んでよく、これらのうちのいずれかは、同じ又は複数の異なる設計施設によるモジュール式IPコアであってよい。集積回路2500は、USBコントローラ2525、UARTコントローラ2530、SPI/SDIOコントローラ2535、及びI
2S/I
2Cコントローラ2540を含むペリフェラルロジック又はバスロジックを含んでよい。さらに、集積回路は、高精細度マルチメディアインタフェース(HDMI(登録商標))コントローラ2550及びモバイルインダストリプロセッサインタフェース(MIPI)ディスプレイインタフェース2555のうちの一方又は両方に結合された表示デバイス2545を含んでよい。記憶装置が、フラッシュメモリ及びフラッシュメモリコントローラを含むフラッシュメモリサブシステム2560によって提供されてよい。メモリインタフェースが、SDRAM又はSRAMメモリデバイスへのアクセスのために、メモリコントローラ2565を介して提供されてよい。いくつかの集積回路がさらに、埋め込み型セキュリティエンジン2570を含む。
【0337】
図26A~
図26Bは、本明細書で説明される実施形態による、SoC内で用いる例示的なグラフィックスプロセッサを示すブロック図である。グラフィックスプロセッサは、グラフィックスプロセッサ1408、1508、2510、又は本明細書で説明した任意の他のグラフィックスプロセッサの変形であってもよい。グラフィックスプロセッサは、グラフィックスプロセッサ1408、1508、2510、又は本明細書で説明したグラフィックスプロセッサのうちのいずれかの代わりに用いられてよい。したがって、グラフィックスプロセッサ1408、1508、2510、又は本明細書で説明したグラフィックスプロセッサのうちのいずれかと組み合わせた任意の特徴の開示は、
図26A~
図26Bのグラフィックスプロセッサとの対応する組み合わせも開示しているが、そのように限定されることはない。
図26Aは、一実施形態による、1つ又は複数のIPコアを用いて作られ得るシステムオンチップ集積回路の例示的なグラフィックスプロセッサ2610を示している。
図26Bは、一実施形態による、1つ又は複数のIPコアを用いて作られ得るシステムオンチップ集積回路の別の例示的なグラフィックスプロセッサ2640を示している。
図26Aのグラフィックスプロセッサ2610は、低電力グラフィックスプロセッサコアの一例である。
図26Bのグラフィックスプロセッサ2640は、より高性能のグラフィックスプロセッサコアの一例である。例えば、グラフィックスプロセッサ2610、2640のそれぞれは、この段落の初めですでに述べたように、
図25のグラフィックスプロセッサ2510の変形であってよい。
【0338】
図26Aに示すように、グラフィックスプロセッサ2610は、頂点プロセッサ2605と、1つ又は複数のフラグメントプロセッサ2615A~2615N(例えば、2615A、2615B、2615C、2615D、…、2615N-1、及び2615N)を含む。グラフィックスプロセッサ2610は、異なるシェーダプログラムを別個のロジックを介して実行できるので、頂点プロセッサ2605は、頂点シェーダプログラムのオペレーションを実行するように最適化され、1つ又は複数のフラグメントプロセッサ2615A~2615Nは、フラグメントシェーダプログラム又はピクセルシェーダプログラム用のフラグメント(例えば、ピクセル)シェーディングオペレーションを実行する。頂点プロセッサ2605は、3Dグラフィックスパイプラインの頂点処理ステージを行い、プリミティブデータ及び頂点データを生成する。フラグメントプロセッサ2615A~2615Nは、頂点プロセッサ2605により生成されるプリミティブデータ及び頂点データを用いて、表示デバイスに表示されるフレームバッファを生成する。フラグメントプロセッサ2615A~2615Nは、OpenGL APIにおいて提供されたフラグメントシェーダプログラムを実行するように最適化されてよく、OpenGL APIは、Direct 3DのAPIにおいて提供されたピクセルシェーダプログラムと同様のオペレーションを行うのに用いられてよい。
【0339】
グラフィックスプロセッサ2610はさらに、1つ又は複数のメモリ管理ユニット(MMU)2620A~2620Bと、キャッシュ2625A~2625Bと、回路相互接続2630A~2630Bとを含む。1つ又は複数のMMU(2620A~2620B)は、頂点プロセッサ2605及び/又はフラグメントプロセッサ2615A~2615Nを含むグラフィックスプロセッサ2610に仮想-物理アドレスマッピングを提供する。グラフィックスプロセッサ2610は、1つ又は複数のキャッシュ2625A~2625Bに格納された頂点データ又は画像/テクスチャデータに加えて、メモリに格納された頂点データ又は画像/テクスチャデータを参照してよい。1つ又は複数のMMU(2620A~2620B)は、
図25の1つ又は複数のアプリケーションプロセッサ2505、イメージプロセッサ2515、及び/又はビデオプロセッサ2520と関連した1つ又は複数のMMUを含むシステム内の他のMMUと同期してよく、これにより、各プロセッサ2505~2520は、共有又は統合した仮想メモリシステムに加わることができる。グラフィックスプロセッサ2610の各コンポーネントは、本明細書で説明した他のグラフィックスプロセッサのコンポーネントと対応してよい。1つ又は複数のMMU(2620A~2620B)は、
図2CのMMU245と対応してよい。頂点プロセッサ2605及びフラグメントプロセッサ2615A~2615Nは、グラフィックスマルチプロセッサ234と対応してよい。1つ又は複数の回路相互接続2630A~2630Bによって、グラフィックスプロセッサ2610がSoCの内蔵バス、又は直接的な接続のいずれかを介して、実施形態によるSoC内の他のIPコアとインタフェースで接続するのが可能になる。1つ又は複数の回路相互接続2630A~2630Bは、
図2Cのデータクロスバー240と対応してよい。さらに、グラフィックスプロセッサ2610の類似したコンポーネントと、本明細書で説明される様々なグラフィックスプロセッサアーキテクチャとの間には、対応関係が見られてよい。
【0340】
図26Bに示すように、グラフィックスプロセッサ2640は、
図26Aに示すグラフィックスプロセッサ2610の、1つ又は複数のMMU(2620A~2620B)、キャッシュ2625A~2625B、及び回路相互接続2630A~2630Bを含む。グラフィックスプロセッサ2640は、1つ又は複数のシェーダコア2655A~2655N(例えば、2655A、2655B、2655C、2655D、2655E、2655F、…、2655N-1、及び2655N)を含み、これらのシェーダコアによって統合シェーダコアアーキテクチャがもたらされ、このアーキテクチャでは、単一のコア又は単一タイプのコアが、頂点シェーダ、フラグメントシェーダ、及び/又はコンピュートシェーダを実装するためのシェーダプログラムコードを含む全てのタイプのプログラム可能型シェーダコードを実行することができる。存在する正確な数のシェーダコアは、実施形態及び実装形態によって異なってよい。さらに、グラフィックスプロセッサ2640は、コア間タスクマネージャ2645を含む。これは、タイルベースのレンダリングのタイリング操作を加速させるために、実行スレッドを1つ又は複数のシェーダコア2655A~2655N及びタイリングユニット2658にディスパッチするスレッドディスパッチャの機能を果たす。ここでは、例えば、シーン内の局所的空間コヒーレンスを利用するために、又は内蔵キャッシュの使用を最適化するために、シーンのレンダリング操作が画像空間において細分化される。シェーダコア2655A~2655Nは、例えば、
図2Dにあるようなグラフィックスマルチプロセッサ234、又は
図3A及び
図3Bのそれぞれグラフィックスマルチプロセッサ325、350、又は
図3Cのマルチコアグループ365Aと対応してよい。
【0341】
[ハイブリッド浮動小数点データ型のドット積累算命令を有するグラフィックスプロセッサ]
【0342】
コンピュータは、(バイナリによる)数の科学表現を用い、コンピュータサイエンスでは浮動小数点と呼ばれる。科学表記法では、数字は、仮数と呼ばれる有理数で表され、仮数の後に、この仮数と、何らかの指数を累乗した基数との乗算が続く。コンピュータ用の浮動小数点数値フォーマットは、一般的にbinary32(又はFP32)及びbinary64(又はFP64)を含む。ここでの数字は、数を表すのに用いられる総桁数を意味しており、ほとんどの桁が仮数部に割り当てられるのは、仮数部によって高精度がもたらされるからである。
【0343】
本様式は、bfloat(BF16)フォーマットを用いてドット積を実行する包括的DP2A命令を含む。これは、行列乗算のような構造をサポートしていない製品に役立つ。
【0344】
Bfloat16フォーマットは、8個の指数ビットを確保した、32ビットIEEE754単精度浮動小数点フォーマットの短縮16ビットバージョンであるが、仮数の精度を24ビットから8ビットに減らして、メモリ、帯域幅、及び処理リソースを節約するとともに、依然として同程度を維持している。Bfloat16フォーマットは主に、機械学習アプリケーション及び近接センサコンピュータ処理アプリケーション用に設計された。この場合、0に近いところでは精度が必要とされるが、最大範囲ではそれほどでもない。
【0345】
[BF16データ型のDP2A命令]
【0346】
本発明の実施形態が、Bfloat16(BF16)フォーマットを用いてドット積を実行するために提供される包括的ドット積累算(DP2A)命令を含む。BF16は、半精度浮動小数点数値フォーマット(FP16)と単精度浮動小数点数値フォーマット(FP32)との中間フォーマットである。BF16は、16ビットのようなFP16であるが、FP32と同じ数の指数ビットを有する。これによって、非正規化数に関する一部のエッジケース以外は、BF16とFP32との間の変換が簡単になる。それぞれの数には1つの符号ビットがある。
【0347】
| フォーマット | ビット | 指数部 | 小数部 |
【0348】
|--------+------+----------+----------|
【0349】
| FP32 | 32 | 8 | 23 |
【0350】
| FP16 | 16 | 5 | 10 |
【0351】
| BF16 | 16 | 8 | 7 |
【0352】
BF16の精度は、他のフォーマットよりはるかに低く1に近い。BF16の指数部は、同じ16ビットのFP16と比較すると、広い範囲を有する。
【0353】
1つの実施形態では、BF16フォーマットを用いてドット積を実行するために、包括的DP2A命令が提供される。以下に挙げる命令は、処理リソースの演算の一部(例えば、FPU演算の通常部分)である。
【0354】
デスティネーション(出力2722)=ソース0オペランドFP32+(ソース1オペランドBF16)×(ソース2オペランドBF16)+(ソース1オペランドBF16)×(ソース2オペランドBF16)
【0355】
図27は、1つの実施形態による処理リソース(例えば、機能ユニット、FPU)で、BF16フォーマットのこのDP2A命令を実行するための回路2700のブロック図を示している。この命令は、通常のFPU演算の部分になる(シストリックパイプラインではない)。
【0356】
図2Aの並列プロセッサ200の処理クラスタ214はそれぞれ、浮動小数点ユニット264(FPU)を含んでよい。
図2DのGPGPUコア262はそれぞれ、グラフィックスマルチプロセッサ234の命令を実行するのに用いられる浮動小数点ユニット264(FPU)及び/又は整数算術論理ユニット(ALU)を含んでよい。
図7の処理クラスタ706A~706Hはそれぞれ、浮動小数点ユニット264(FPU)を含んでよい。SIMD浮動小数点ユニット(FPU)1834のセットが、
図18Bに示されている。
【0357】
GPGPUコア262は、データの複数のセットに対して単一命令(例えば、BF16フォーマットのDP2A命令)を実行できるSIMDロジックを含んでよい。必要に応じて、GPGPUコア262は、SIMD4命令、SIMD8命令、及びSIMD16命令を物理的に実行でき、またSIMD1命令、SIMD2命令、及びSIMD32命令を論理的に実行できる。
【0358】
回路2700は、それぞれ入力オペランド(例えば、ソース1、ソース2)を乗算する乗算器2710及び2711(例えば、BF16乗算器)を含む。累算器又は加算器2720が、第1オペランド(ソース0)と、乗算器2710及び2711のそれぞれからの出力とを加算する。累算器又は加算器2720は、デスティネーション用の出力2722を生成する。回路2700は、SIMDの個々のレーンに対して複数回繰り返されてよい。
【0359】
モード機能が設定されると、非正規化操作がBF16によってサポートされる。非正規化数が0にフラッシュされてよい。
【0360】
別の実施形態では、デスティネーション(出力2722)及びソース0オペランドは、FP16、FP32、又はBF16の浮動小数点数値フォーマットであってよい。
【0361】
処理リソースが、グラフィックスプロセッサと関連した処理要素(例えば、GPGPUコア、レイトレーシングコア、テンソルコア、実行リソース、実行ユニット(EU)、ストリームプロセッサ、ストリーミングマルチプロセッサ(SM)、グラフィックスマルチプロセッサ)、又は本明細書で説明されたGPU内のグラフィックスプロセッサ構造(例えば、並列処理ユニット、グラフィックス処理エンジン、マルチコアグループ、コンピュートユニット、グラフィックスコアネクストのコンピュートユニット)を表している。例えば、処理リソースは、FPUを有するGPGPUコア262のうちの1つ、若しくはグラフィックスマルチプロセッサ234のテンソル/レイトレーシングコア263、グラフィックスマルチプロセッサ325のレイトレーシングコア338A~338B、テンソルコア337A~337B、若しくはGPGPUコア336A~336B、グラフィックスマルチプロセッサ350の実行リソース356A~356D、マルチコアグループ365A~365NのGFXコア370、テンソルコア371、若しくはレイトレーシングコア372のうちの1つ、コンピュートユニット1506A~1506Nのベクトル論理ユニット1563若しくはスカラ論理ユニット1564のうちの1つ、EUアレイ1522A~1522F若しくはEUアレイ1524A~1524Fを備えた実行ユニット、実行ロジック1800の実行ユニット1808A~1808N、及び/又は実行ユニット1900であってよい。処理リソースは、例えば、グラフィックス処理エンジン431~432、処理クラスタ706A~706H、GPGPU806A~806D、GPGPU1306、グラフィックス処理エンジン1610、グラフィックス処理エンジンクラスタ1622、及び/又はグラフィックス処理エンジン1710内の実行リソースであってもよい。処理リソースは、グラフィックスプロセッサ2510mグラフィックスプロセッサ2610、及び/又はグラフィックスプロセッサ2640内の処理リソースであってもよい。
【0362】
別の実施形態では、BF16フォーマットを用いてドット積を実行するために、包括的DP2A命令が提供される。以下に挙げる命令は、通常のFPU演算の一部である。
【0363】
デスティネーション(出力2822)=ソース0オペランドFP32+(ソース1オペランドBF16)×(ソース2オペランドBF16)+(ソース1オペランドBF16)×(ソース2オペランドBF16)+(ソース1オペランドBF16)×(ソース2オペランドBF16)
【0364】
図28は、別の実施形態によるFPUにおいてBF16フォーマットのこのDP2A命令を実行するための回路2800のブロック図を示している。この命令は、通常のFPU演算の部分になる(シストリックパイプラインではない)。この命令は、製品が大行列のような構造をサポートしていない場合に役立つ。
【0365】
回路2800は、それぞれ複数の入力オペランド(例えば、ソース1、ソース2、又は他の入力オペランド)を乗算する乗算器2810、2811、2812(例えば、BF16乗算器)を含む。累算器又は加算器2820が、第1オペランド(ソース0)と、乗算器2810、2811、及び2812のそれぞれからの出力とを加算する。累算器又は加算器2820は、デスティネーション用の出力2822を生成する。回路2800は、SIMDの個々のレーンに対して複数回繰り返されてよい。
【0366】
回路2800は、追加の乗算器又はより少ない乗算器を有するように修正されてよい。
【0367】
[カスケード式ドット積累算]
【0368】
第1ステージの出力が第2ステージの入力として供給されて、回路2700又は回路2800が繰り返されてよい。第2ステージの出力が第3ステージの入力として供給され得るといったように繰り返される。
【0369】
1つの実施形態では、BF16フォーマットを用いてドット積を実行するために、包括的DP2A命令が供給される。以下に挙げる命令は、通常のFPU演算の一部である。
【0370】
デスティネーション(出力2922)=ソース0オペランドFP32+(ソース1オペランドBF16)×ソース2オペランドBF16)+(ソース1オペランドBF16)×(ソース2オペランドBF16)
【0371】
デスティネーション(出力2962)=出力2922オペランドFP32+(ソース1オペランドBF16)×ソース2オペランドBF16)+(ソース1オペランドBF16)×(ソース2オペランドBF16)
【0372】
図29は、1つの実施形態によるFPUにおいて、BF16フォーマットのこのDP2A命令を実行するための回路2900のブロック図を示している。この命令は、通常のFPU演算の部分になる(シストリックパイプラインではない)。
【0373】
回路2900は、第1ステージと第2ステージとを含むが、別のステージも含まれてよい。第1ステージ2901は、それぞれ入力オペランド(例えば、ソース1、ソース2)を乗算する乗算器2910及び2911(例えば、BF16乗算器)を含む。第1ステージ2901の累算器又は加算器2920が、第1オペランド(ソース0)と、乗算器2910及び2911のそれぞれからの出力とを加算する。累算器又は加算器2920は、第1出力2922を生成する。
【0374】
第2ステージ2902は、それぞれ入力オペランド(例えば、ソース1、ソース2)を乗算する乗算器2960及び2961(例えば、BF16乗算器)を含む。第2ステージ2902の累算器又は加算器2960が、第1オペランド(出力2922)と、乗算器2960及び2961のそれぞれからの出力とを加算する。累算器又は加算器2960は、デスティネーション用の第2出力2962を生成する、又は別のステージNが第2ステージに続いてもよい。
【0375】
多くの方法が最も基本的な形式で説明されているが、本実施形態の基本的な範囲から逸脱することなく、これらの方法のうちのいずれかに工程を追加することも、そこから工程を削除することもでき、説明したメッセージのうちのいずれかに情報を追加することも、そこから情報を引き去ることもできる。多くのさらなる修正及び改造を施し得ることが、当業者には明らかであろう。詳細な実施形態は、概念を限定するために提供されているのではなく、概念を示すために提供されている。これらの実施形態の範囲は、上述した具体的な例によって決定されるのではなく、以下の特許請求の範囲によってのみ決定される。
【0376】
要素「A」が要素「B」に又はそれと結合されていると言う場合、要素「A」は、要素「B」に直接的に結合されても、例えば、要素「C」を通じて間接的に結合されてもよい。コンポーネント、特徴、構造、プロセス、又は特性Aが、コンポーネント、特徴、構造、プロセス、又は特性Bをもたらすと、本明細書又は特許請求の範囲が述べている場合、これが意味するのは、「A」が「B」の少なくとも部分的な原因であるが、「B」をもたらすのを助ける少なくとも1つの他のコンポーネント、特徴、構造、プロセス、又は特性も存在し得るということである。コンポーネント、特徴、構造、プロセス、又は特性が、含まれ「得る」、含まれる「かもしれない」、又は含まれる「可能性がある」ことを本明細書が示している場合、この特定のコンポーネント、特徴、構造、プロセス、又は特性が含まれることは必須ではない。本明細書又は特許請求の範囲が「1つ」の要素に言及した場合、これは、説明された複数の要素のうちの1つだけが存在することを意味しているわけではない。
【0377】
1つの実施形態が、1つの実装形態又は実施例である。本明細書における「一実施形態」、「1つの実施形態」、「いくつかの実施形態」、又は「他の実施形態」への言及は、これらの実施形態に関連して説明される特定の機能、構造、又は特性が、必ずしも全ての実施形態ではなく、少なくともいくつかの実施形態に含まれていることを意味している。「一実施形態」、「1つの実施形態」、又は「いくつかの実施形態」が所々に現れるが、必ずしも全てが同じ実施形態を指しているわけではない。例示的な実施形態の前述の説明では、本開示を合理化して様々な新規態様のうちの1つ又は複数の理解を助ける目的で、様々な特徴が1つの実施形態、図、又はその説明に一緒にまとめられていることがあることを理解されたい。しかしながら、この開示方法は、特許請求される実施形態が、各請求項に明示的に記載されているよりも多くの特徴を必要とするという意図を反映するものと解釈されるべきではない。むしろ、以下の特許請求の範囲が反映しているように、前述の開示された単一の実施形態の全ての特徴に新規態様があるとはいえない。したがって、特許請求の範囲はこれにより本説明に明示的に組み込まれ、各請求項は別個の実施形態として独立している。
【0378】
いくつかの実施形態は、命令をディスパッチする命令ユニットと、命令ユニットに結合された処理リソースとを有するグラフィックスマルチプロセッサを含む実施例1に関連する。処理リソースは、命令ユニットからドット積累算命令を受信して、Bfloat16数値(BF16)フォーマットを用いてドット積累算命令を処理するように構成されている。
【0379】
実施例2は実施例1の主題を含み、ドット積累算命令は、第1のBF16乗算器及び第2のBF16乗算器にそれぞれ、第2ソースオペランドと第3ソースオペランドとを乗算させるとともに、累算器が、第1ソースオペランドと、第1のBF16乗算器及び第2のBF16乗算器のそれぞれからの出力とを加算する。
【0380】
実施例3は実施例1~2のいずれかの主題を含み、累算器はデスティネーション用の出力を生成する。
【0381】
実施例4は実施例1~3のいずれかの主題を含み、第1ソースオペランドは単精度浮動小数点フォーマットを有し、第2ソースオペランド及び第3ソースオペランドはBF16フォーマットを有する。
【0382】
実施例5は実施例1~4のいずれかの主題を含み、第1ソースオペランド及びデスティネーションは、半精度浮動小数点フォーマット、単精度浮動小数点フォーマット、又はBF16フォーマットである。
【0383】
実施例6は実施例1~5のいずれかの主題を含み、処理リソースは、BF16フォーマットを用いてドット積累算命令を実行する浮動小数点ユニット(FPU)を有する。
【0384】
実施例7は実施例1~6のいずれかの主題を含み、命令ユニットは単一命令複数データ(SIMD)命令を含む命令をディスパッチする。
【0385】
いくつかの実施形態は、単精度浮動小数点演算用の単精度浮動小数点ユニットと、半精度浮動小数点演算用の半精度浮動小数点ユニットとを有する汎用グラフィックス処理ユニットコア(GPGPUコア)を含む実施例8に関連する。半精度浮動小数点ユニットは、Bfloat16(BF16)フォーマットを用いてドット積累算命令を実行するように構成されている。
【0386】
実施例9は実施例8の主題を含み、ドット積累算命令は、第1のBF16乗算器及び第2のBF16乗算器にそれぞれ、第2ソースオペランドと第3ソースオペランドとを乗算させるとともに、累算器が、第1ソースオペランドと、第1のBF16乗算器及び第2のBF16乗算器のそれぞれからの出力とを加算する。
【0387】
実施例10は実施例8~9のいずれかの主題を含み、累算器はデスティネーション用の出力を生成する。
【0388】
実施例11は実施例8~10のいずれかの主題を含み、第1ソースオペランドは単精度浮動小数点フォーマットを有し、第2ソースオペランド及び第3ソースオペランドはBF16フォーマットを有する。
【0389】
実施例12は実施例8~11のいずれかの主題を含み、第1ソースオペランド及びデスティネーションは、半精度浮動小数点フォーマット、単精度浮動小数点フォーマット、又はBF16フォーマットである。
【0390】
実施例13は実施例8~12のいずれかの主題を含み、ドット積累算命令は、第1ステージの第1のBF16乗算器及び第2のBF16乗算器にそれぞれ、第2ソースオペランドと第3ソースオペランドとを乗算させるとともに、累算器が、第1ソースオペランドと、第1のBF16乗算器及び第2のBF16乗算器のそれぞれからの出力とを加算して、第1ステージの出力を生成する。
【0391】
実施例14は実施例8~12のいずれかの主題を含み、乗算器及び累算器によるN個のステージを有するカスケード構成用のドット積累算命令は、第2ステージの第1のBF16乗算器及び第2のBF16乗算器にそれぞれ、第2ソースオペランドと第3ソースオペランドとを乗算させるとともに、累算器が、第1ステージからの出力と、第2ステージの第1のBF16乗算器及び第2のBF16乗算器のそれぞれからの出力とを加算する。
【0392】
実施例15は、並列処理操作を行う第1処理クラスタと、第1処理クラスタに結合された第2処理クラスタとを有する並列処理ユニットを含むいくつかの実施形態に関連する。第1処理クラスタは、浮動小数点演算を行う浮動小数点ユニットを含む。浮動小数点ユニットは、Bfloat16(BF16)フォーマットを用いてドット積累算命令を処理するように構成されている。
【0393】
実施例16は実施例15の主題を含み、ドット積累算命令は、第1のBF16乗算器及び第2のBF16乗算器にそれぞれ、第2ソースオペランドと第3ソースオペランドとを乗算させるとともに、累算器が、第1ソースオペランドと、第1のBF16乗算器及び第2のBF16乗算器のそれぞれからの出力とを加算する。
【0394】
実施例17は実施例15~16のいずれかの主題を含み、累算器はデスティネーション用の出力を生成する。
【0395】
実施例18は実施例15~17のいずれかの主題を含み、第1ソースオペランドは単精度浮動小数点フォーマットを有し、第2ソースオペランド及び第3ソースオペランドはBF16フォーマットを有する。
【0396】
実施例19は実施例15~18のいずれかの主題を含み、第1ソースオペランド及びデスティネーションは、半精度浮動小数点フォーマット、単精度浮動小数点フォーマット、又はBF16フォーマットである。
【0397】
実施例20は実施例15~19のいずれかの主題を含み、ドット積累算命令は、第1ステージの第1のBF16乗算器及び第2のBF16乗算器にそれぞれ、第2ソースオペランドと第3ソースオペランドとを乗算させるとともに、累算器が、第1ソースオペランドと、第1のBF16乗算器及び第2のBF16乗算器のそれぞれからの出力とを加算し、乗算器及び累算器によるN個のステージを有するカスケード構成用のドット積累算命令は、第2ステージの第1のBF16乗算器及び第2のBF16乗算器にそれぞれ、第2ソースオペランドと第3ソースオペランドとを乗算させるとともに、累算器が、第1ステージからの出力と、第2ステージの第1のBF16乗算器及び第2のBF16乗算器のそれぞれからの出力とを加算する。
【0398】
実施例21は実施例15~20のいずれかの主題を含み、浮動小数点ユニットは、BF16乗算器及び累算器によるN個のステージを有するカスケード構成を有する。
【0399】
実施例22は実施例15~21のいずれかの主題を含み、N個のステージは、第1ステージであって、それぞれ第2ソースオペランドと第3ソースオペランドとを乗算する第1のBF16乗算器及び第2のBF16乗算器と、第1ソースオペランドと第1のBF16乗算器及び第2のBF16乗算器のそれぞれからの出力とを加算して、第1ステージの出力を生成する累算器とによる第1ステージと、第2ステージであって、それぞれ第2ソースオペランドと第3ソースオペランドとを乗算する第1のBF16乗算器及び第2のBF16乗算器と、第1ステージからの出力と第2ステージの第1のBF16乗算器及び第2のBF16乗算器のそれぞれからの出力とを加算する累算器とによる第2ステージとを含む。
【0400】
前述の説明及び図面は、限定的意味ではなく、例示的意味で扱われるべきである。当業者であれば、添付した特許請求の範囲に記載されている本発明のより広範な意図及び範囲から逸脱することなく、本明細書で説明された実施形態に対して、様々な修正及び変更を施してよいことを理解するであろう。
(項目1)
単一命令複数スレッド(SIMT)マルチプロセッサを備えるグラフィックス処理ユニットであって、
前記SIMTマルチプロセッサは、
命令キャッシュと、
前記命令キャッシュと結合された共有メモリと、
前記共有メモリ及び前記命令キャッシュと結合された回路であって、前記回路は、
複数のテクスチャユニットと、
行列演算を加速させるハードウェアを含む第1コアと、
第2コアであって、
Bfloat16(BF16)数値フォーマットの複数のオペランドを有する命令を受信することであって、前記複数のオペランドは、第1ソースオペランド、第2ソースオペランド、及び第3ソースオペランドを含み、前記BF16数値フォーマットは、8ビットの指数部を有する16ビットの浮動小数点フォーマットである、受信することと、
前記命令を処理することであって、前記命令を処理することは、前記第2ソースオペランドと前記第3ソースオペランドとを乗算して、前記乗算の結果に前記第1ソースオペランドを加算することを含む、処理することと
を行うように構成された第2コアと
を含む、回路と
を有する、グラフィックス処理ユニット。
(項目2)
前記命令は単一命令複数データ(SIMD)命令である、項目1に記載のグラフィックス処理ユニット。
(項目3)
前記命令によって、前記第2コアは前記加算の結果に正規化線形ユニット関数を適用することになる、項目2に記載のグラフィックス処理ユニット。
(項目4)
前記SIMTマルチプロセッサは、前記命令に応答して1ワープのスレッドを実行する、項目1から3のいずれか一項に記載のグラフィックス処理ユニット。
(項目5)
前記SIMTマルチプロセッサは、前記第1コアを介して並列行列乗算演算を行い、前記並列行列乗算演算は、前記BF16数値フォーマットを有する入力に対して行われる、項目1から4のいずれか一項に記載のグラフィックス処理ユニット。
(項目6)
前記グラフィックス処理ユニットはさらに、レイトレーシング操作を加速させるハードウェアを含む第3コアを備える、項目1から5のいずれか一項に記載のグラフィックス処理ユニット。
(項目7)
前記グラフィックス処理ユニットはさらに、前記SIMTマルチプロセッサの外部にあり且つ前記SIMTマルチプロセッサと結合されたテクスチャ処理回路を備える、項目1から6のいずれか一項に記載のグラフィックス処理ユニット。
(項目8)
前記命令は前記第2コアにドット積演算を実行させる、項目1から7のいずれか一項に記載のグラフィックス処理ユニット。
(項目9)
グラフィックス処理ユニット(GPU)の命令キャッシュから命令をフェッチする段階であって、前記命令はBfloat16(BF16)数値フォーマットの複数のオペランドを有し、前記複数のオペランドは、第1ソースオペランド、第2ソースオペランド、及び第3ソースオペランドを含み、前記BF16数値フォーマットは8ビットの指数部を有する16ビットの浮動小数点フォーマットであり、前記GPUは、前記命令キャッシュと結合された共有メモリと、前記共有メモリ及び前記命令キャッシュと結合された回路とを含む、フェッチする段階と、
前記命令に応答して、1ワープのスレッドを前記GPUの単一命令複数スレッド(SIMT)マルチプロセッサにディスパッチする段階であって、前記SIMTマルチプロセッサは、複数のテクスチャユニット、行列演算を加速させるハードウェアを含む第1コア、及び前記命令のスレッドを実行するように構成された第2コアを含む、ディスパッチする段階と、
前記第2コアを用いて前記命令を処理する段階であって、前記命令を処理する段階は、前記第2ソースオペランドと前記第3ソースオペランドとを乗算し、前記乗算の結果に第1ソースオペランドを加算する段階を含む、処理する段階と
を備える方法。
(項目10)
前記命令は単一命令複数データ(SIMD)命令である、項目9に記載の方法。
(項目11)
前記方法はさらに、前記第2コアを介して、前記加算の結果に正規化線形ユニット関数を適用する段階を備える、項目10に記載の方法。
(項目12)
前記方法はさらに、前記第1コアを介して、前記BF16数値フォーマットを有する入力に対して並列行列乗算演算を行う段階を備える、項目9から11のいずれか一項に記載の方法。
(項目13)
前記SIMTマルチプロセッサは、レイトレーシング操作を加速させる第3コアを含み、前記方法はさらに、前記第3コアを介して、前記命令の処理と並行してレイトレーシング操作を加速させる段階を備える、項目9から12のいずれか一項に記載の方法。
(項目14)
前記方法はさらに、前記SIMTマルチプロセッサの外部にあり且つ前記SIMTマルチプロセッサと結合されたテクスチャ処理回路を介して、テクスチャ処理操作を行う段階を備える、項目9から13のいずれか一項に記載の方法。
(項目15)
前記方法はさらに、前記命令に応答して、前記第2コアを介してドット積演算を行う段階を備える、項目9から14のいずれか一項に記載の方法。
(項目16)
メモリデバイスと、
前記メモリデバイスと結合されたグラフィックスプロセッサであって、前記グラフィックスプロセッサは、命令キャッシュ、前記命令キャッシュと結合された共有メモリ、並びに前記共有メモリ及び前記命令キャッシュと結合された回路を含む単一命令複数スレッド(SIMT)マルチプロセッサを有する、グラフィックスプロセッサと
を備えるグラフィックス処理システムであって、
前記回路は、
複数のテクスチャユニットと、
行列演算を加速させるハードウェアを含む第1コアと、
第2コアであって、Bfloat16(BF16)数値フォーマットの複数のオペランドA、B、C、及びDを有する命令を受信することであって、前記BF16数値フォーマットは、8ビットの指数部を有する16ビットの浮動小数点フォーマットである、受信することと、前記命令を処理することであって、前記命令を処理することは演算D=A×B+Cを行うことを含む、処理することとを行うように構成された第2コアと
を含む、グラフィックス処理システム。
(項目17)
前記命令は単一命令複数データ(SIMD)命令である、項目16に記載のグラフィックス処理システム。
(項目18)
前記第2コアはさらに、前記演算D=A×B+Cの結果に正規化線形ユニット関数を適用するように構成される、項目17に記載のグラフィックス処理システム。
(項目19)
前記SIMTマルチプロセッサは、前記命令に応答して1ワープのスレッドを実行する、項目16から18のいずれか一項に記載のグラフィックス処理システム。
(項目20)
前記SIMTマルチプロセッサは、前記第1コアを介して並列行列乗算演算を行い、前記並列行列乗算演算は、前記BF16数値フォーマットを有する入力に対して行われる、項目16から19のいずれか一項に記載のグラフィックス処理システム。
(項目21)
前記グラフィックス処理システムはさらに、レイトレーシング操作を加速させるハードウェアを含む第3コアを備える、項目16から20のいずれか一項に記載のグラフィックス処理システム。
(項目22)
前記グラフィックス処理システムはさらに、前記SIMTマルチプロセッサの外部にあり且つ前記SIMTマルチプロセッサと結合されたテクスチャ処理回路を備える、項目16から21のいずれか一項に記載のグラフィックス処理システム。
(項目23)
前記命令は前記第2コアにドット積演算を実行させる、項目16から22のいずれか一項に記載のグラフィックス処理システム。
(項目24)
並列処理操作を行う第1処理クラスタであって、前記並列処理操作は、レイトレーシング操作及び行列乗算演算を含む、第1処理クラスタと、
前記第1処理クラスタに結合された第2処理クラスタであって、前記第1処理クラスタは浮動小数点演算を行う浮動小数点ユニットを含み、前記浮動小数点ユニットは、Bfloat16(BF16)フォーマットを用いて命令を処理するように構成され、BF16乗算器は第2ソースオペランドと第3ソースオペランドとを乗算し、累算器は前記BF16乗算器からの出力と第1ソースオペランドとを加算する、第2処理クラスタと、
を備える並列処理ユニット。
(項目25)
前記命令は前記BF16乗算器に、前記BF16フォーマットを有する第2ソースオペランドと第3ソースオペランドとを乗算させ、前記累算器は前記BF16乗算器からの出力と第1ソースオペランドとを加算する、項目24に記載の並列処理ユニット。
(項目26)
前記第1ソースオペランドは単精度浮動小数点フォーマットを有し、前記第2ソースオペランド及び前記第3ソースオペランドはBF16フォーマットを有する、項目24又は25に記載の並列処理ユニット。
(項目27)
項目9から15のいずれか一項に記載の方法を機械に実行させるプログラム。
(項目28)
項目27に記載のプログラムを格納する機械可読記憶媒体。
(項目29)
項目9から15のいずれか一項に記載の方法を実行する手段を備える装置。
【外国語明細書】