(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-10-21
(45)【発行日】2024-10-29
(54)【発明の名称】メモリ効率を改善するための起動及びカーネルの動的な分割
(51)【国際特許分類】
G06F 17/16 20060101AFI20241022BHJP
G06F 17/10 20060101ALI20241022BHJP
G06N 3/0464 20230101ALI20241022BHJP
【FI】
G06F17/16 C
G06F17/16 P
G06F17/10 A
G06N3/0464
【外国語出願】
(21)【出願番号】P 2020150177
(22)【出願日】2020-09-07
【審査請求日】2023-09-04
(31)【優先権主張番号】201911082113.X
(32)【優先日】2019-11-07
(33)【優先権主張国・地域又は機関】CN
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】チェン、 シャオミン
(72)【発明者】
【氏名】ヤオ、アンバン
(72)【発明者】
【氏名】ホァン、 ジュンジエ
(72)【発明者】
【氏名】エルブイ、タオ
(72)【発明者】
【氏名】ルオ、ユアンケ
【審査官】坂庭 剛史
(56)【参考文献】
【文献】特開2019-082996(JP,A)
【文献】米国特許出願公開第2019/0147319(US,A1)
【文献】特開2019-008421(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/16
G06F 17/10
G06N 3/0464
G06N 3/04
(57)【特許請求の範囲】
【請求項1】
機械学習を実行する計算エンジンにおける方法であって、
前記計算エンジン上に実装された畳み込みニューラルネットワーク(CNN)の畳み込み層によって、入力データに含まれる複数の起動グループを受信する段階であって、前記畳み込み層は1又は複数のカーネルグループを有し、前記1又は複数のカーネルグループは各々、複数のカーネルを含む、段階と、
前記複数の起動グループの起動グループの数及び前記複数のカーネルのカーネルの数に基づいて複数のメモリ効率測定基準を決定する段階と、
前記複数のメモリ効率測定基準の中の最適なメモリ効率測定基準に関連付けられている第1最適数の起動グループ及び第2最適数のカーネルを選択する段階と、
前記第1最適数と前記第2最適数とに基づいて、前記入力データに対して畳み込み演算を実行する段階と、
を備える、方法。
【請求項2】
起動スパース性及びカーネルスパース性を受信する段階を更に備え、前記複数のメモリ効率測定基準を決定する前記段階は、前記起動スパース性及び前記カーネルスパース性に更に基づく、請求項1に記載の方法。
【請求項3】
前記複数のメモリ効率測定基準は、次の式
(n×k×Sa×Sk)/(k×Sa+n×Sk)
の計算によって導出され、
nは、前記複数のカーネルのカーネルの数であり、
kは、前記複数の起動グループの起動グループの数であり、
Saは前記起動スパース性であり、
Skは前記カーネルスパース性である、
請求項2に記載の方法。
【請求項4】
前記第1最適数及び前記第2最適数を選択する前記段階は、前記CNNの異なる畳み込み層について独立して実行される、
請求項1から3のいずれか一項に記載の方法。
【請求項5】
前記複数の起動グループの起動グループの数の下限値が、前記計算エンジンに連結されたレジスタ又はバッファに関連付けられる、
請求項1から4のいずれか一項に記載の方法。
【請求項6】
前記複数のカーネルのカーネルの数の上限値が、前記計算エンジン上の算術論理ユニット(ALU)に関連付けられる、
請求項1から5のいずれか一項に記載の方法。
【請求項7】
前記複数のメモリ効率測定基準は、メモリ負荷効率を示す、
請求項1から6のいずれか一項に記載の方法。
【請求項8】
前記方法は、前記CNNの訓練又は推論の間に実施される、
請求項1から7のいずれか一項に記載の方法。
【請求項9】
機械学習のための装置であって、
入力データに含まれる複数の起動グループと、各々が畳み込みニューラルネットワーク(CNN)の畳み込み層に複数のカーネルを含む1又は複数のカーネルグループとを格納するデータストレージデバイスと、
前記データストレージデバイスに連結された1又は複数のプロセッサであって、前記CNNは前記1又は複数のプロセッサ上に実装される、1又は複数のプロセッサとを備え、
前記1又は複数のプロセッサは、
前記畳み込み層により、前記複数の起動グループを受信することであって、前記畳み込み層は、前記1又は複数のカーネルグループを含む、受信することと、
前記複数の起動グループの起動グループの数及び前記複数のカーネルのカーネルの数に基づいて複数のメモリ効率測定基準を決定することと、 前記複数のメモリ効率測定基準の中の最適なメモリ効率測定基準に関連付けられている第1最適数の起動グループ及び第2最適数のカーネルを選択することと、
前記第1最適数及び前記第2最適数に基づいて、前記入力データに対して畳み込み演算を実行することと、
を行う、装置。
【請求項10】
前記1又は複数のプロセッサは更に、
起動スパース性及びカーネルスパース性を受信し、前記1又は複数のプロセッサは、前記起動スパース性及び前記カーネルスパース性に更に基づいて、前記複数のメモリ効率測定基準を決定する、
請求項9に記載の装置。
【請求項11】
前記複数のメモリ効率測定基準は、次の式
(n×k×Sa×Sk)/(k×Sa+n×Sk)
の計算によって導出され、
nは、前記複数のカーネルのカーネルの数であり、
kは、前記複数の起動グループの起動グループの数であり、
Saは前記起動スパース性であり、
Skは前記カーネルスパース性である、
請求項10に記載の装置。
【請求項12】
前記1又は複数のプロセッサは、前記CNNの異なる畳み込み層について独立して前記第1最適数及び前記第2最適数を選択する、
請求項9から11のいずれか一項に記載の装置。
【請求項13】
前記複数の起動グループの起動グループの数の下限値が、前記1又は複数のプロセッサに連結されたレジスタ又はバッファに関連付けられる、
請求項9から12のいずれか一項に記載の装置。
【請求項14】
前記複数のカーネルのカーネルの数の上限値が、前記1又は複数のプロセッサ上の算術論理ユニット(ALU)に関連付けられる、
請求項9から13のいずれか一項に記載の装置。
【請求項15】
前記複数のメモリ効率測定基準は、メモリ負荷効率を示す、
請求項9から14のいずれか一項に記載の装置。
【請求項16】
前記1又は複数のプロセッサは、グラフィックプロセッサを有する、
請求項9から15のいずれか一項に記載の装置。
【請求項17】
請求項1~8のいずれか一項に記載の方法を実行するための手段を備える、機械学習のためのシステム。
【請求項18】
請求項1から8のいずれか一項に記載の方法をコンピュータに実行させる、プログラム。
【請求項19】
請求項18に記載のプログラムを格納する、少なくとも1つのコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
実施形態は、一般にデータ処理に関し、より詳細には、汎用グラフィック処理ユニットを介したデータ処理に関する。
【背景技術】
【0002】
現在の並列グラフィックデータ処理は、例えば、線形補間、テセレーション、ラスタライズ、テクスチャマッピング、デプステストなど、グラフィックデータに対して特定の動作を実行するために開発されたシステム及び方法を含む。従来、グラフィックプロセッサは、固定機能の計算ユニットを使用してグラフィックデータを処理していた。しかし、最近では、グラフィックプロセッサの一部がプログラマブルになり、そのようなプロセッサが頂点データ及びフラグメントデータを処理するための様々な動作をサポートすることが可能になった。
【0003】
性能を更に高めるために、グラフィックプロセッサは通常、例えば、グラフィックパイプラインの異なる部分全体で可能な限り多くのグラフィックデータを並列処理を試みるパイプライン処理などの処理技術を実装している。単一命令、複数のスレッド(SIMT)アーキテクチャを備える並列グラフィックプロセッサは、グラフィックパイプラインでの並列処理の量を最大化するように設計されている。SIMTアーキテクチャでは、並列スレッドのグループがプログラムの命令をできるだけ同時に同期的に一緒に実行して、処理効率を高めようと試みる。SIMTアーキテクチャのソフトウェア及びハードウェアの一般的な概要は、シェーンクック、CUDAプログラミングの第3章、37~51ページ(2013)に見られることができる。
【図面の簡単な説明】
【0004】
これにより本実施形態の上に記載の特徴の方法を詳細に理解されることができ、上に簡潔に要約した実施形態のより具体的な説明は、そのいくつかが添付図面に示されている実施形態を参照することによって行われ得る。しかし、添付図面は典型的な実施形態のみを示しており、従って、その範囲を限定するものと考慮されるべきではないことに留意されたい。
【0005】
【
図1】本明細書で説明される実施形態の1又は複数の態様を実装するように構成されたコンピュータシステムを示すブロック図である。
【0006】
【
図2A】一実施形態による、並列プロセッサコンポーネントを示す。
【
図2B】一実施形態による、並列プロセッサコンポーネントを示す。
【
図2C】一実施形態による、並列プロセッサコンポーネントを示す。
【
図2D】一実施形態による、並列プロセッサコンポーネントを示す。
【0007】
【
図3A】実施形態による、グラフィックマルチプロセッサ及びマルチプロセッサベースのGPUのブロック図である。
【
図3B】実施形態による、グラフィックマルチプロセッサ及びマルチプロセッサベースのGPUのブロック図である。
【
図3C】実施形態による、グラフィックマルチプロセッサ及びマルチプロセッサベースのGPUのブロック図である。
【0008】
【
図4A】複数のGPUが複数のマルチコアプロセッサに通信可能に連結されている例示的なアーキテクチャを示す。
【
図4B】複数のGPUが複数のマルチコアプロセッサに通信可能に連結されている例示的なアーキテクチャを示す。
【
図4C】複数のGPUが複数のマルチコアプロセッサに通信可能に連結されている例示的なアーキテクチャを示す。
【
図4D】複数のGPUが複数のマルチコアプロセッサに通信可能に連結されている例示的なアーキテクチャを示す。
【
図4E】複数のGPUが複数のマルチコアプロセッサに通信可能に連結されている例示的なアーキテクチャを示す。
【
図4F】複数のGPUが複数のマルチコアプロセッサに通信可能に連結されている例示的なアーキテクチャを示す。
【0009】
【
図5】一実施形態による、グラフィック処理パイプラインを示す。
【0010】
【
図6】一実施形態による、機械学習ソフトウェアスタックを示す。
【0011】
【
図7】一実施形態による、汎用グラフィック処理ユニットを示す。
【0012】
【
図8】一実施形態による、マルチGPUコンピューティングシステムを示す。
【0013】
【
図9A】例示的なディープニューラルネットワークの層を示す。
【
図9B】例示的なディープニューラルネットワークの層を示す。
【0014】
【
図10】例示的な再帰型ニューラルネットワークを示す。
【0015】
【
図11】ディープニューラルネットワークの訓練及び展開を示す。
【0016】
【0017】
【
図13】訓練されたモデルを使用して推論を実行するのに好適な例示的な推論システムオンチップ(SOC)を示す。
【0018】
【
図14】一実施形態による、処理システムのブロック図である。
【0019】
【
図15A】本明細書で説明される実施形態によって提供されるコンピューティングシステム及びグラフィックプロセッサを示す。
【
図15B】本明細書で説明される実施形態によって提供されるコンピューティングシステム及びグラフィックプロセッサを示す。
【
図15C】本明細書で説明される実施形態によって提供されるコンピューティングシステム及びグラフィックプロセッサを示す。
【0020】
【
図16A】本明細書で説明される実施形態によって提供される追加のグラフィックプロセッサ及び計算アクセラレータアーキテクチャのブロック図を示す。
【
図16B】本明細書で説明される実施形態によって提供される追加のグラフィックプロセッサ及び計算アクセラレータアーキテクチャのブロック図を示す。
【
図16C】本明細書で説明される実施形態によって提供される追加のグラフィックプロセッサ及び計算アクセラレータアーキテクチャのブロック図を示す。
【0021】
【
図17】いくつかの実施形態によるグラフィックプロセッサのグラフィック処理エンジンのブロック図である。
【0022】
【
図18A】本明細書で説明される実施形態による、グラフィックプロセッサコアで使用される処理要素の配列を含むスレッド実行ロジックを示す。
【
図18B】本明細書で説明される実施形態による、グラフィックプロセッサコアで使用される処理要素の配列を含むスレッド実行ロジックを示す。
【0023】
【
図19】一実施形態による、追加の実行ユニットを示す。
【0024】
【
図20】いくつかの実施形態によるグラフィックプロセッサ命令フォーマットを示すブロック図である。
【0025】
【
図21】別の実施形態によるグラフィックプロセッサのブロック図である。
【0026】
【
図22A】いくつかの実施形態による、グラフィックプロセッサコマンドフォーマット及びコマンドシーケンスを示す。
【
図22B】いくつかの実施形態による、グラフィックプロセッサコマンドフォーマット及びコマンドシーケンスを示す。
【0027】
【
図23】いくつかの実施形態によるデータ処理システムのための例示的なグラフィックソフトウェアアーキテクチャを示す。
【0028】
【
図24A】一実施形態による、IPコア開発システムを示すブロック図である。
【0029】
【
図24B】本明細書で説明されるいくつかの実施形態による、集積回路パッケージアセンブリの垂直断面図を示す。
【0030】
【
図24C】基板(例えば、ベースダイ)に接続されたハードウェアロジックチップレットの複数のユニットを含むパッケージアセンブリを示す。
【0031】
【
図24D】一実施形態による、交換可能なチップレットを含むパッケージアセンブリを示す。
【0032】
【
図25】一実施形態による、チップ集積回路上の例示的なシステムを示すブロック図である。
【0033】
【
図26A】本明細書で説明される実施形態による、SoC内で使用するための例示的なグラフィックプロセッサを示すブロック図である。
【
図26B】本明細書で説明される実施形態による、SoC内で使用するための例示的なグラフィックプロセッサを示すブロック図である。
【0034】
【0035】
【
図27B】一実施形態による、入力データ及びカーネルに対する畳み込み演算の実行を示す。
【0036】
【
図28】一実施形態による、機械学習のための方法を示す。そして
【0037】
【
図29】一実施形態による、機械学習のための方法を示す。
【発明を実施するための形態】
【0038】
いくつかの実施形態において、グラフィック処理ユニット(GPU)は、グラフィックオペレーション、機械学習オペレーション、パターン分析オペレーション、及び様々な汎用GPU(GPGPU)機能を加速するために、ホスト/プロセッサコアに通信可能に連結される。GPUは、バス又は別の相互接続(例えば、PCIe又はNVLinkなどの高速相互接続)を介してホストプロセッサ/コアに通信可能に連結され得る。他の実施形態において、GPUは、コアと同じパッケージ又はチップに統合され、内部プロセッサバス/相互接続(つまり、パッケージ又はチップの内部)を介してコアに通信可能に連結され得る。GPUの接続方法にかかわらず、プロセッサコアは、作業記述子に含まれるコマンド/命令のシーケンスの形式でGPUに作業を割り当てることが可能になり得る。次に、GPUは専用の回路/ロジックを使用して、これらのコマンド/命令を効果的に処理する。
【0039】
以下の説明では、より完全な理解を提供するために、多数の具体的な詳細が記載されている。しかし、本明細書に説明された実施形態は、これらの具体的な詳細のうちの1又は複数がなくても実施され得ることが当業者には明らかであろう。他の例において、本実施形態の詳細が曖昧になることを回避ために、既知の特徴は説明されていない。
[システム概要]
【0040】
図1は、本明細書で説明される実施形態の1又は複数の態様を実装するように構成されたコンピューティングシステム100を示すブロック図である。コンピューティングシステム100は、1又は複数のプロセッサ102を有する処理サブシステム101と、メモリハブ105を含み得る、相互接続経路を介して通信するシステムメモリ104とを含む。メモリハブ105は、チップセットコンポーネント内の別個のコンポーネントであり得、又は1又は複数のプロセッサ102内に統合され得る。メモリハブ105は、通信リンク106を介してI/Oサブシステム111と連結する。I/Oサブシステム111は、コンピューティングシステム100が1又は複数の入力デバイス108から入力を受信することを可能にすることができるI/Oハブ107を含む。更に、I/Oハブ107は、1又は複数のプロセッサ102に含まれ得るディスプレイコントローラが1又は複数のディスプレイデバイス110Aに出力を提供することを可能にすることができる。一実施形態において、I/Oハブ107に連結された1又は複数のディスプレイデバイス110Aは、ローカル、内蔵型、又は埋め込み型のディスプレイデバイスを含むことができる。
【0041】
一実施形態において、処理サブシステム101は、バス又は他の通信リンク113を介してメモリハブ105に連結された1又は複数の並列プロセッサ112を含む。通信リンク113は、例えば、限定されることはないがPCI Expressなどである任意の数の標準ベースの通信リンク技術又はプロトコルの1つであり得、又はベンダー固有の通信インタフェース又は通信ファブリックであり得る。一実施形態において、1又は複数の並列プロセッサ112は、例えば、多くの統合コア(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を介して追加できる様々な他のデバイスなどの他のコンポーネントとの間の接続を可能にするインタフェースメカニズムを提供するのに使用され得る。ネットワークアダプタ118は、イーサネット(登録商標)アダプタ又は別の有線ネットワークアダプタとすることができる。無線ネットワークアダプタ119は、Wi-Fi、Bluetooth(登録商標)、近距離無線通信(NFC)、又は1若しくは複数の無線電信機を含む他のネットワークデバイスのうちの1又は複数を含むことができる。
【0043】
コンピューティングシステム100は、明示的に示されていない他のコンポーネントを含むことができ、USB又は他のポート接続、光ストレージドライブ、ビデオキャプチャデバイスなどを含み、またI/Oハブ107に接続され得る。
図1の様々なコンポーネントを相互接続する通信経路は、PCI(ペリフェラルコンポーネントインターコネクト)ベースのプロトコル(例えば、PCI-Express)などの任意の適切なプロトコル、又はNV-Link高速相互接続などの任意の他のバス若しくはポイントツーポイント通信インタフェース及び/若しくはプロトコル、又は当技術分野で既知の相互接続プロトコル使用して実装されてよい。
【0044】
一実施形態において、1又は複数の並列プロセッサ112は、例えば、映像出力回路を含む、グラフィック処理及び映像処理用に最適化された回路を組み込み、グラフィック処理ユニット(GPU)を構成する。別の実施形態において、1又は複数の並列プロセッサ112は、本明細書でより詳細に説明される、基礎となる計算アーキテクチャを維持しながら、汎用処理用に最適化された回路を組み込む。更に別の実施形態において、コンピューティングシステム100のコンポーネントは、単一集積回路上に1又は複数の他のシステム要素と統合され得る。例えば、1又は複数の並列プロセッサ112、メモリハブ105、プロセッサ102、及びI/Oハブ107は、システムオンチップ(SoC)集積回路に統合されることができる。あるいは、コンピューティングシステム100のコンポーネントが単一パッケージに統合され、システムインパッケージ(SIP)構成を形成することができる。一実施形態において、コンピューティングシステム100のコンポーネントの少なくとも一部はマルチチップモジュール(MCM)に統合されることができ、MCMは、他のマルチチップモジュールと相互接続されてモジュール式コンピューティングシステムになり得る。
【0045】
本明細書に示されるコンピューティングシステム100は例示であり、変更及び修正が可能であることが理解されるであろう。ブリッジの数及び配置、プロセッサ102の数、及び並列プロセッサ112の数を含む接続トポロジは、所望に応じて修正され得る。例えば、いくつかの実施形態において、システムメモリ104は、ブリッジを介するのではなく直接プロセッサ102に接続され、一方、他のデバイスは、メモリハブ105及びプロセッサ102を介してシステムメモリ104と通信する。他の代替トポロジでは、並列プロセッサ112は、メモリハブ105ではなく、I/Oハブ107に、又は1又は複数のプロセッサ102の1つに直接接続される。他の実施形態において、I/Oハブ107及びメモリハブ105は、単一チップに統合され得る。いくつかの実施形態は、並列プロセッサ112の2又はそれより多くのインスタンスと連結することができる複数のソケットを介して取り付けられたプロセッサ102の2又はそれより多くのセットを含み得る。
【0046】
本明細書に示される特定のコンポーネントのいくつかは任意選択であり、コンピューティングシステム100の全ての実装態様に含まれなくてもよい。例えば、任意の数のアドインカード又は周辺機器がサポートされ得るか、又はいくつかのコンポーネントが除去され得る。更に、いくつかのアーキテクチャは、
図1に示されているものと類似のコンポーネントに対して異なる用語を使用し得る。例えば、メモリハブ105は、いくつかのアーキテクチャではノースブリッジと称される場合があり、一方、I/Oハブ107はサウスブリッジと称される場合がある。
【0047】
図2Aは、一実施形態による、並列プロセッサ200を示す。並列プロセッサ200の様々なコンポーネントは、例えば、プログラマブルプロセッサ、特定用途向け集積回路(ASIC)、又はフィールドプログラマブルゲートアレイ(FPGA)などの1又は複数の集積回路デバイスを使用して実装され得る。図示の並列プロセッサ200は、一実施形態による
図1に示される1又は複数の並列プロセッサ112の変形である。
【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に指示することができる。一実施形態において、フロントエンド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は、フロントエンド208から処理タスクを規定するコマンドを受信するスケジューラ210を介して、実行される処理タスクを受信することができる。グラフィック処理オペレーションの場合、処理タスクは、処理されるデータ、例えば、表面(パッチ)データ、プリミティブデータ、頂点データ、及び/又は画素データのインデックス、並びにどのようにデータが処理されるか(例えば、どのプログラム実行されるか)を規定する状態パラメータ及びコマンドを含み得る。スケジューラ210は、タスクに対応するインデックスをフェッチするように構成され得、又はフロントエンド208からインデックスを受信し得る。フロントエンド208は、受信コマンドバッファ(例えば、バッチバッファ、プッシュバッファなど)によって指定されたワークロードが開始される前に、処理クラスタ配列212が有効な状態に構成されることを保証するように構成されることができる。
【0055】
並列処理ユニット202の1又は複数のインスタンスの各々は、並列プロセッサメモリ222と連結することができる。並列プロセッサメモリ222は、処理クラスタ配列212及びI/Oユニット204からメモリ要求を受信することができるメモリクロスバー216を介してアクセスされることができる。メモリクロスバー216は、メモリインタフェース218を介して並列プロセッサメモリ222にアクセスすることができる。メモリインタフェース218は、各々が並列プロセッサメモリ222の一部(例えば、メモリユニット)に連結することができる複数のパーティションユニット(例えば、パーティションユニット220A、パーティションユニット220Bからパーティションユニット220Nまで)を含むことができる。一実装態様では、パーティションユニット220A~220Nの数は、第1パーティションユニット220Aが対応する第1メモリユニット224Aを有し、第2パーティションユニット220Bが対応するメモリユニット224Bを有し、第Nのパーティションユニット220Nが、対応する第Nのメモリユニット224Nを有するように、メモリユニットの数と等しくなるように構成される。他の実施形態において、パーティションユニット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は、I/Oユニット204と通信するためのメモリインタフェース218への接続、及び並列プロセッサメモリ222のローカルインスタンスへの接続を有し、異なる処理クラスタ214A~214N内の処理ユニットが、並列処理ユニット202に対してローカルではないシステムメモリ又は他のメモリと通信することが可能になる。一実施形態において、メモリクロスバー216は、仮想チャネルを使用して、クラスタ214A~214Nとパーティションユニット220A~220Nとの間のトラフィックストリームを分離することができる。
【0058】
並列処理ユニット202の単一インスタンスが並列プロセッサ200内に示されているが、並列処理ユニット202の任意の数のインスタンスが、含まれることができる。例えば、並列処理ユニット202の複数のインスタンスが、単一アドインカード上に提供されることができ、又は複数のアドインカードが相互接続されることができる。並列処理ユニット202の異なるインスタンスは、異なるインスタンスが異なる数の処理コア、異なる量のローカル並列プロセッサメモリ、及び/又は他の構成の差を有する場合でも相互動作するように構成されることができる。例えば、一実施形態において、並列処理ユニット202のいくつかのインスタンスは、他のインスタンスに対してより高い精度の浮動小数点ユニットを含むことができる。並列処理ユニット202又は並列プロセッサ200の1又は複数のインスタンスを組み込んだシステムは、様々な構成及びフォームファクタで実装されることができ、限定されることはないが、デスクトップ、ラップトップ、又はハンドヘルドパーソナルコンピュータ、サーバ、ワークステーション、ゲームコンソール、及び/又は埋め込システムを含む。
【0059】
図2Bは、一実施形態による、パーティションユニット220のブロック図である。一実施形態において、パーティションユニット220は、
図2Aのパーティションユニット220A~220Nのうちの1つのインスタンスである。図示のように、パーティションユニット220は、L2キャッシュ221、フレームバッファインタフェース225、及びROP226(ラスタオペレーションユニット)を含む。L2キャッシュ221は、メモリクロスバー216及びROP226から受信したロードオペレーション及びストアオペレーションを実行するように構成された読み出し/書き込みキャッシュである。読み出しミス及び緊急のライトバック要求が、処理のためにL2キャッシュ221によってフレームバッファインタフェース225に出力される。更新も、処理のためにフレームバッファインタフェース225を介してフレームバッファに送信されることができる。一実施形態において、フレームバッファインタフェース225は、例えば、
図2Aのメモリユニット224A~224Nなどの並列プロセッサメモリ内(例えば、並列プロセッサメモリ222内)のメモリユニットの1つとインタフェースする。
【0060】
グラフィックアプリケーションでは、ROP 226は、例えば、ステンシル、zテスト、ブレンドなどのラスタオペレーションを実行する処理ユニットである。次に、ROP226は、グラフィックメモリに格納されている処理されたグラフィックデータを出力する。いくつかの実施形態において、ROP226は、メモリに書き込まれるデプス又はカラーデータを圧縮し、メモリから読み出されるデプス又はカラーデータを伸張するための圧縮ロジックを含む。圧縮ロジックは、複数の圧縮アルゴリズムの1又は複数を利用する可逆圧縮ロジックにすることができる。ROP226によって実行される圧縮のタイプは、圧縮されるデータの統計的特性に基づいて変わることができる。例えば、一実施形態において、差分色圧縮が、タイル毎にデプス及びカラーデータに対して実行される。
【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)技術が、多数の一般に同期されたスレッドの並列実行をサポートするのに使用され、処理クラスタの各々の1つの内部にある処理エンジンのセットに命令を発行するように構成された共通命令ユニットを使用する。通常、全ての処理エンジンが同一の命令を実行する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はまた、ローカル並列プロセッサメモリ及び/又はシステムメモリのうちの1又は複数を含むことができるオフチップグローバルメモリにアクセスし得る。並列処理ユニット202の外部の任意のメモリが、グローバルメモリとして使用され得る。処理クラスタ214がグラフィックマルチプロセッサ234の複数のインスタンスを含む実施形態は、L1キャッシュ248に格納され得る共通命令及びデータを共有することができる。
【0067】
各処理クラスタ214は、仮想アドレスを物理アドレスにマッピングするように構成されたMMU245(メモリ管理ユニット)を含み得る。他の実施形態において、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の命令を実行するために使用される浮動小数点ユニット(FPU)及び/又は整数算術論理ユニット(ALU)を含むことができる。実施形態に従って、GPGPUコア262は、アーキテクチャが類似していることができ、又はアーキテクチャが異なることができる。例えば、一実施形態において、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実行モデル用に構成されたプログラムの複数のスレッドは、単一SIMD命令を介して実行されることができる。例えば、一実施形態において、同じ又は類似のオペレーションを実行する8つのSIMTスレッドが、単一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は、
図2Cのグラフィックマルチプロセッサ234の変形であるグラフィックマルチプロセッサ325、350を示す。
図3Cは、マルチコアグループ365A~365Nに配置されたグラフィック処理リソースの専用セットを含むグラフィック処理ユニット(GPU)380を示す。図示されたグラフィックマルチプロセッサ325、350及びマルチコアグループ365A~365Nは、多数の実行スレッドを同時実行できるストリーミングマルチプロセッサ(SM)とすることができる。
【0077】
図3Aは、追加の実施形態によるグラフィックマルチプロセッサ325を示す。グラフィックマルチプロセッサ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~Nに配置されたグラフィック処理リソースの専用セットを含むグラフィック処理ユニット(GPU)380を示す。単一マルチコアグループ365Aのみの詳細が提供されているが、その他のマルチコアグループ365B~365Nは、グラフィック処理リソースの同じ又は類似のセットを備え得ることが理解されるであろう。
【0083】
図示されるように、マルチコアグループ365Aは、グラフィックコア370のセット、テンソルコア371のセット、及びレイトレーシングコア372のセットを含み得る。スケジューラ/ディスパッチャ368は、様々なコア370、371、372上で実行するためにグラフィックスレッドをスケジュールしてディスパッチする。レジスタファイル369のセットは、グラフィックスレッドを実行する場合にコア370、371、372によって使用されるオペランド値を格納する。これらは、例えば、整数値を格納するための整数レジスタ、浮動小数点値を格納するための浮動小数点レジスタ、パックドデータ要素(整数及び/又は浮動小数点データ要素)を格納するためのベクトルレジスタ、テンソル/行列値を格納するためのタイルレジスタを含み得る。一実施形態において、タイルレジスタは、ベクトルレジスタの複合セットとして実装される。
【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は仮想化をサポートする。この場合、IOMMU364は、ゲスト/グラフィック仮想アドレスをゲスト/グラフィック物理アドレスにマッピングするために、ページテーブルの第1セットを管理し得、ゲスト/グラフィック物理アドレスをシステム/ホスト物理アドレス(例えば、システムメモリ366内)にマッピングするために、第2ページテーブルのセットを管理し得る。ページテーブルの第1及び第2セットの各々のベースアドレスは、制御レジスタに格納され、コンテキストスイッチでスワップアウトされ得る(例えば、これにより新たなコンテキストに、関連するページテーブルのセットへのアクセスが提供される)。
図3Cに図示されていないが、コア370、371、372及び/又はマルチコアグループ365A~365Nの各々は、変換ルックアサイドバッファ(TLB)を含み得、ゲスト仮想からゲスト物理への変換、ゲスト物理からホスト物理への変換、ゲスト仮想からホスト物理への変換をキャッシュする。
【0087】
一実施形態において、CPU361、GPU380、及びI/Oデバイス362は、単一半導体チップ及び/又はチップパッケージに統合される。図示されたメモリ366は、同じチップ上に統合され得、又はオフチップインタフェースを介してメモリコントローラ367に連結され得る。一実装態様では、メモリ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バッファ又は類似の配置を使用して)。一実装態様では、レイトレーシングコア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コマンド、並びにray-generationシェーダ、closest-hitシェーダ、any-hitシェーダ、及びmissシェーダを含むMicrosoftのDirectX Ray Tracing(DXR)などのレイトレーシング命令セットのハードウェアサポートを含み、これにより、オブジェクト毎にシェーダ及びテクスチャの一意のセットの割り当てを有効にする。レイトレーシングコア372、グラフィックコア370及びテンソルコア371でサポートされ得る別のレイトレーシングプラットフォームは、Vulkan1.1.85である。しかし、本発明の基礎となる原理は、任意の特定のレイトレーシングISAに限定されることはないことに留意されたい。
【0097】
一般に、様々なコア372、371、370は、レイトレーシング命令セットをサポートし得、これには、ray generation、closest hit、any hit、ray-primitive intersection、per-primitive and hierarchical bounding box construction、miss、visit、及びexceptionsに関する命令/関数が含まれる。より具体的には、一実施形態は、以下の機能を実行するためのレイトレーシング命令を含む。
【0098】
Ray Generation:Ray Generation命令は、画素、サンプル、又は他のユーザ定義型作業割り当て毎に実行され得る。
【0099】
Closest Hit:Closest Hit命令は、シーン内のプリミティブとレイの最も近い交点を見つけるために実行され得る。
【0100】
Any Hit:Any Hit命令は、レイとシーン内のプリミティブとの間の複数の交差を識別し、新たな最も近い交点を識別する可能性がある。
【0101】
Intersection:Intersection命令は、レイ-プリミティブ間交差テストを実行し、結果を出力する。
【0102】
Per-primitive Bounding box Construction:この命令は、所与のプリミティブ又はプリミティブのグループの周囲に境界ボックスを構築する(例えば、新たなBVH又は他のアクセラレーションデータ構造を構築する場合)。
【0103】
Miss:レイがシーン内又はシーンの指定された領域内の全てのジオメトリ、を欠落していることを示す。
【0104】
Visit:レイがトラバースするであろう子ボリュームを示す。
【0105】
Exceptions:様々なタイプの例外ハンドラが含まれる(例えば、様々なエラー条件に対して呼び出される)。
GPUからホストプロセッサへの相互接続の技術
【0106】
図4Aは、複数のGPU410~413が高速リンク440A~440D(例えば、バス、ポイントツーポイント相互接続など)を介して複数のマルチコアプロセッサ405~406に通信可能に連結される例示的なアーキテクチャを示す。一実施形態において、高速リンク440A~440Dは、実装態様に応じて、4GB/秒、30GB/秒、80GB/秒又はより高い通信スループットをサポートする。限定されることはないがPCIe4.0又は5.0、及びNVLink2.0を含む様々な相互接続プロトコルが使用され得る。しかし、本発明の基礎となる原理は、任意の特定の通信プロトコル又はスループットに限定されることはない。
【0107】
更に、一実施形態において、GPU410~413のうちの2又はそれより多くが、高速リンク440A~440Dに使用されるものと同一又は異なるプロトコル/リンクを使用して実装され得る高速リンク442A~442Bを介して相互接続される。同様に、マルチコアプロセッサ405~406のうちの2又はそれより多くが、20GB/秒、30GB/秒、120GB/秒又はより高速で動作する対称マルチプロセッサ(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の一実施形態は24個のコアを含み、各々が独自のL1キャッシュ、12個の共有L2キャッシュ、及び12個の共有L3キャッシュを有する。本実施形態において、L2及びL3キャッシュのうちの1つは、2つの隣接するコアによって共有される。プロセッサ407及びグラフィックアクセラレータ集積モジュール446は、プロセッサメモリ401~402を含み得るシステムメモリ441と接続する。
【0112】
コヒーレンシが、コヒーレンスバス464を通じたコア間通信を介して、様々なキャッシュ462A~462D、456及びシステムメモリ441に格納されたデータ及び命令に対して維持される。例えば、特定のキャッシュラインに対して検出された読み出し又は書き込みに応答して、コヒーレンスバス464を介して通信するために、各キャッシュは、各キャッシュに関連付けられたキャッシュコヒーレンシロジック/回路を有し得る。一実装態様では、キャッシュアクセスをスヌープするために、コヒーレンスバス464を介してキャッシュスヌーピングプロトコルが実装される。キャッシュスヌーピング/コヒーレンシ技術は当業者にはよく理解されており、本発明の基礎となる原理が曖昧になることを回避するためにここでは詳細に説明されないであろう。
【0113】
一実施形態において、プロキシ回路425が、グラフィックアクセラレーションモジュール446をコヒーレンスバス464に通信可能に連結し、グラフィックアクセラレーションモジュール446がコアのピアとしてキャッシュコヒーレンスプロトコルに加わることを可能にする。特に、インタフェース435が、高速リンク440(例えば、PCIeバス、NVLinkなど)を介してプロキシ回路425に接続性を提供し、インタフェース437は、グラフィックアクセラレーションモジュール446を高速リンク440に接続する。
【0114】
一実装態様では、アクセラレータ集積回路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)(図示せず)を含み得る。一実装態様では、キャッシュ438が、グラフィック処理エンジン431~432、Nによる効率的なアクセスのためのコマンド及びデータを格納する。一実施形態において、キャッシュ438及びグラフィックメモリ433~434、Mに格納されたデータは、コアキャッシュ462A~462D、456及びシステムメモリ411とコヒーレントに維持される。すでに述べたように、これは、キャッシュ438及びメモリ433~434、Mの代わりにキャッシュコヒーレンシメカニズムに加わるプロキシ回路425を介して実現され得る(例えば、プロセッサキャッシュ462A~462D、456上のキャッシュラインの修正/アクセスに関連するキャッシュ438に更新を送信し、キャッシュ438から更新を受信する)。
【0116】
レジスタのセット445が、グラフィック処理エンジン431~432、Nによって実行されるスレッド用のコンテキストデータを格納し、コンテキスト管理回路448が、スレッドコンテキストを管理する。例えば、コンテキスト管理回路448は、コンテキストの切り替え中に様々なスレッドのコンテキストを保存及び復元するために、保存及び復元オペレーションを実行し得る(例えば、第1スレッドが保存され、第2スレッドが格納され、これにより第2スレッドはグラフィック処理エンジンにより実行されることができる)。例えば、コンテキストスイッチでは、コンテキスト管理回路448は、現在のレジスタ値を(例えば、コンテキストポインタによって識別される)メモリ内の指定された領域に格納し得る。次に、コンテキストに戻る場合にレジスタ値を復元し得る。一実施形態において、割り込み管理回路447が、システムデバイスから受信された割り込みを受信して処理する。
【0117】
一実装態様では、グラフィック処理エンジン431からの仮想/実効アドレスは、MMU439によってシステムメモリ411内の実/物理アドレスに変換される。アクセラレータ集積回路436の一実施形態は、複数(例えば、4個、8個、16個)のグラフィックアクセラレータモジュール446及び/又はその他のアクセラレータデバイスをサポートする。グラフィックアクセラレータモジュール446は、プロセッサ407上で実行される単一アプリケーションに専用であり得、又は複数のアプリケーション間で共有され得る。一実施形態において、グラフィック処理エンジン431~432、Nのリソースが複数のアプリケーション又は仮想マシン(VM)と共有される仮想化グラフィック実行環境が提示される。リソースは「スライス」に細分化されてよく、これらのスライスは、VM及び/又はアプリケーションに関連付けられた処理要件及び優先順位に基づいて、異なるVM及び/又はアプリケーションに割り当てられる。
【0118】
従って、アクセラレータ集積回路は、グラフィックアクセラレーションモジュール446のシステムへのブリッジとしての機能を果たし、アドレス変換及びシステムメモリキャッシュサービスを提供する。更に、アクセラレータ集積回路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によって使用されない(少なくとも頻繁に使用されない)であろうデータであることを保証するのに使用される。同様に、バイアスメカニズムは、コアのキャッシュ462A~462D、456及びシステムメモリ411内のコア(好ましくはグラフィック処理エンジン431~432、Nではない)が必要とするデータを保持しようと試みる。
【0122】
図4Cは、アクセラレータ集積回路436がプロセッサ407内に統合される別の実施形態を示す。本実施形態において、グラフィック処理エンジン431~432、Nは、インタフェース437及びインタフェース435を介して高速リンク440を通じてアクセラレータ集積回路436に直接通信する(これらのインタフェースは、ここでも、任意の形式のバス又はインタフェースプロトコルを利用し得る)。アクセラレータ集積回路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は、プロセスハンドルを使用してプロセス要素を選択する。一実施形態において、プロセス要素は、システムメモリ411に格納され、本明細書で説明される実効アドレスから実アドレスへの変換技術を使用してアドレス指定可能である。プロセスハンドルは、そのコンテキストをグラフィック処理エンジン431~432、Nに登録する場合に(つまり、プロセス要素のリンクリストにプロセス要素を追加するためにシステムソフトウェアを呼び出す場合に)、ホストプロセスに提供される実装態様に固有の値であり得る。プロセスハンドルの下位16ビットは、プロセス要素のリンクリスト内のプロセス要素のオフセットであり得る。
【0127】
図4Dは、例示的なアクセラレータ集積スライス490を示す。本明細書で使用される場合、「スライス」は、アクセラレータ集積回路436の処理リソースの指定された部分を含む。システムメモリ411内のアプリケーション実効アドレス空間482は、プロセス要素483を格納する。一実施形態において、プロセス要素483は、プロセッサ407上で実行されるアプリケーション480からのGPU呼び出し481に応答して格納される。プロセス要素483は、対応するアプリケーション480の処理状態を含む。プロセス要素483に含まれる作業記述子(WD)484は、アプリケーションによって要求された単一ジョブとすることができるか、又はジョブのキューへのポインタを含み得る。後者の場合、WD484は、アプリケーションのアドレス空間482内のジョブ要求キューへのポインタである。
【0128】
グラフィックアクセラレーションモジュール446及び/又は個別のグラフィック処理エンジン431~432、Nは、システム内のプロセスの全て又はサブセットによって共有されることができる。本発明の実施形態は、処理状態を設定し、仮想化環境でジョブを開始するためにグラフィックアクセラレーションモジュール446にWD484を送信するためのインフラストラクチャを含む。
【0129】
一実装態様では、専用プロセスプログラミングモデルは実装態様に固有である。このモデルでは、単一プロセスがグラフィックアクセラレーションモジュール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で利用可能にする。グラフィックアクセラレーションモジュール446がシステムハイパーバイザ496による仮想化をサポートするために、グラフィックアクセラレーションモジュール446は以下の要件に準拠し得る。1)アプリケーションのジョブ要求は自律的でなければならない(つまり、ジョブ間で状態を維持する必要はない)、又は、グラフィックアクセラレーションモジュール446は、コンテキストの保存及び復元メカニズムを提供しなければならない。2)アプリケーションのジョブ要求は、グラフィックアクセラレーションモジュール446によって、任意の変換障害を含め、指定された時間内に完了することが保証されている。又は、グラフィックアクセラレーションモジュール446がジョブの処理を先取りする能力を提供する。3)グラフィックアクセラレーションモジュール446は、指向共有プログラミングモデルで動作する場合、プロセス間の公平性が保証されなければならない。
【0137】
一実施形態において、共有モデルの場合、アプリケーション480は、グラフィックアクセラレーションモジュール446のタイプ、作業記述子(WD)、権限マスクレジスタ(AMR)値、及びコンテキストの保存/復元エリアポインタ(CSRP)を使用してオペレーティングシステム495をシステムコールさせるのに必要とされる。グラフィックアクセラレーションモジュール446のタイプは、システムコールの対象アクセラレーション機能を示す。グラフィックアクセラレーションモジュール446のタイプは、システム固有の値であり得る。WDは、グラフィックアクセラレーションモジュール446用に特にフォーマットされており、グラフィックアクセラレーションモジュール446コマンド、ユーザ定義型構造への実効アドレスポインタ、コマンドのキューへの実効アドレスポインタ、又はグラフィックアクセラレーションモジュール446によって成される作業を説明するための任意の他のデータ構造の形式にすることができる。一実施形態において、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は、プロセス要素483を、対応するグラフィックアクセラレーションモジュール446タイプのプロセス要素のリンクリストに入れる。プロセス要素は、表4に示される情報を含み得る。
【表4】
【0140】
一実施形態において、ハイパーバイザは、複数のアクセラレータ集積スライス490のレジスタ445を初期化する。
【0141】
図4Fに図示されるように、本発明の一実施形態は、物理プロセッサメモリ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オフロードに有益な動作環境を提供する。この配置により、ホストプロセッサ405ソフトウェアは、従来のI/O DMAデータコピーのオーバヘッドなしに、オペランドを設定し、演算結果にアクセスが可能になる。このような従来のコピーには、ドライバのコール、割り込み及びメモリマッピングされたI/O(MMIO)アクセスが含まれており、単純なメモリアクセスに対して全て非効率的である。同時に、キャッシュコヒーレンスオーバヘッドなしでGPU付属メモリ420~423にアクセスする能力は、オフロードされた演算の実行時間にとって非常に重要になり得る。例えば、大量のストリーミング書き込みメモリトラフィックがある場合、キャッシュコヒーレンスオーバヘッドにより、GPU410~413で見られる実効書き込み帯域幅が大幅に減少する可能性がある。オペランド設定の効率、結果アクセスの効率、及びGPU演算の効率は全て、GPUオフロードの有効性を決定する上で重要な役割を果たす。
【0144】
一実装態様では、GPUバイアスとホストプロセッサバイアスのと間の選択は、バイアストラッカーデータ構造によって駆動される。例えば、GPU付属メモリメモリページ毎に1ビット又は2ビットを含むページ粒状構造(つまり、メモリページの粒度で制御される)であり得るバイアステーブルが使用され得る。バイアステーブルは、GPU410~413のバイアスキャッシュの有無で(例えば、バイアステーブルの頻繁に/最近使用されたエントリをキャッシュするため)、1又は複数のGPU付属メモリ420~423の盗まれたメモリ範囲に実装され得る。あるいは、バイアステーブル全体がGPU内で維持され得る。
【0145】
一実装態様では、GPU付属メモリ420~423への各アクセスに関連付けられるバイアステーブルエントリは、GPUメモリへの実際のアクセスの前にアクセスされ、以下の動作をさせる。第1に、GPUバイアスでこれらのページを見つけるGPU410~413からのローカル要求は、対応するGPUメモリ420~423に直接転送される。ホストバイアスでこれらのページを見つけるGPUからのローカル要求は、プロセッサ405に転送される(例えば、上で検討された高速リンクを介して)。一実施形態において、ホストプロセッサバイアスで要求されたページを見つけるプロセッサ405からの要求が、通常のメモリ読み出しと同様の要求を完了する。あるいは、GPUバイアスページに関する要求が、GPU410~413に転送され得る。GPUは、現在ページを使用していない場合、次に、そのページをホストプロセッサバイアスに移行し得る。
【0146】
ページのバイアス状態は、ソフトウェアベースのメカニズム、ハードウェア支援のソフトウェアベースのメカニズム、又は限定されたセットの場合では、純粋にハードウェアベースのメカニズムのいずれかによって変更されることができる。
【0147】
バイアス状態を変更するための1つのメカニズムは、APIコール(例えば、OpenCLなど)を使用する。APIコールは、次にGPUのデバイスドライバをコールし、次に、バイアス状態を変更し、いくつかの移行ではホストでキャッシュフラッシュオペレーションを実行するように指示するGPUにメッセージを送信(又はコマンド記述子をエンキュー)する。キャッシュフラッシュオペレーションは、ホストプロセッサ405バイアスからGPUバイアスへの移行に必要とされるが、反対の移行には必要とされない。
【0148】
一実施形態において、キャッシュコヒーレンシが、ホストプロセッサ405によってGPUバイアスページを一時的にキャッシュ不能にすることによって維持される。これらのページにアクセスするために、プロセッサ405は、実装態様に応じて、アクセスをすぐに許可してもしなくてもよいGPU410にアクセスを要求し得る。従って、ホストプロセッサ405とGPU410との間の通信を減らすために、GPUバイアスページが、GPUによって必要とされるがホストプロセッサ405では必要とされないものであることを保証することは有益であり、逆もまた同様である。グラフィック処理パイプライン
【0149】
図5は、一実施形態による、グラフィック処理パイプライン500を示す。一実施形態において、グラフィックプロセッサが、図示されたグラフィック処理パイプライン500を実装することができる。グラフィックプロセッサは、例えば、
図2Aの並列プロセッサ200など、本明細書で説明されるような並列処理サブシステム内に含まれることができる。これは、一実施形態において、
図1の並列プロセッサ112の変形である。様々な並列処理システムは、本明細書で説明されるように、並列処理ユニット(例えば、
図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)にアクセスすることができ、これは、
図2Aのメモリインタフェース218のインスタンスであり得る。
【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のうちの1つによって更に処理される処理ユニットである。いくつかの実施形態において、ラスタオペレーションユニット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を有効にすることができ、機械学習フレームワーク604がGPGPUハードウェア610のアーキテクチャの詳しい知識を持つことを要求することなく、GPGPUハードウェア610を介してハードウェアアクセラレーションを活用する。更に、計算フレームワーク606は、GPGPUハードウェア610の様々なタイプ及び世代にわたる機械学習フレームワーク604のハードウェアアクセラレーションを有効にすることができる。
[GPGPU機械学習アクセラレーション]
【0165】
図7は、一実施形態による、汎用グラフィック処理ユニット700を示す。一実施形態において、汎用処理ユニット(GPGPU)700は、ディープニューラルネットワークの訓練に関連付けられるタイプの計算ワークロードの処理において特に効率的であるように構成されることができる。更に、GPGPU700はGPGPUの他のインスタンスに直接リンクされ、マルチGPUクラスタを作成し、特にディープニューラルネットワークの訓練速度を改善することができる。
【0166】
GPGPU700は、ホストプロセッサとの接続を可能にするためのホストインタフェース702を含む。一実施形態において、ホストインタフェース702は、PCI Expressインタフェースである。しかし、ホストインタフェースはまた、ベンダー固有の通信インタフェース又は通信ファブリックにすることができる。GPGPU700は、ホストプロセッサからコマンドを受信し、グローバルスケジューラ704を使用して、それらのコマンドに関連付けられる実行スレッドを計算クラスタ706A~706Hのセットに分散する。計算クラスタ706A~706Hは、キャッシュメモリ708を共有する。キャッシュメモリ708は、計算クラスタ706A~706H内のキャッシュメモリのためのより高レベルキャッシュとして機能することができる。
【0167】
GPGPU700は、メモリコントローラ712A~712Bのセットを介して計算クラスタ706A~Hと連結されたメモリ714A~Bを含む。様々な実施形態において、メモリ714A~714Bは、ダイナミックランダムアクセスメモリ(DRAM)又は、例えば、グラフィックダブルデータレート(GDDR)メモリを含む同期グラフィックランダムアクセスメモリ(SGRAM)などのグラフィックランダムアクセスメモリを含む様々なタイプのメモリデバイスを含むことができる。一実施形態において、メモリ714A~714Nはまた、限定されることはないが高帯域幅メモリ(HBM)を含む3Dスタックメモリを含み得る。
【0168】
一実施形態において、計算クラスタ706A~706Hの各々は、例えば、
図4Aのグラフィックマルチプロセッサ400などのグラフィックマルチプロセッサのセットを含む。計算クラスタのグラフィックマルチプロセッサは、機械学習計算に適したものを含む、精度の範囲で計算演算を実行できる複数タイプの整数及び浮動小数点論理ユニットを含む。例えば、一実施形態において、計算クラスタ706A~Hの各々における少なくとも浮動小数点ユニットのサブセットは、16ビット又は32ビットの浮動小数点演算を実行するように構成されることができ、一方、浮動小数点ユニットの異なるサブセットは、64ビット浮動小数点演算を実行するように構成されることができる。
【0169】
GPGPU700の複数のインスタンスは、計算クラスタとして動作するように構成されることができる。同期及びデータ交換のために計算クラスタによって使用される通信メカニズムは、実施形態わたり変わる。一実施形態において、GPGPU700の複数のインスタンスは、ホストインタフェース702を介して通信する。一実施形態において、GPGPU700は、GPGPU700を、GPGPUの他のインスタンスへの直接接続を可能にするGPUリンク710と連結するI/Oハブ709を含む。一実施形態において、GPUリンク710は、GPGPU700の複数のインスタンス間の通信及び同期を有効にする専用のGPU間ブリッジに連結される。一実施形態において、GPUリンク710は、高速相互接続と連結して、他のGPGPU又は並列プロセッサにデータを送受信する。一実施形態において、GPGPU700の複数のインスタンスは、別個のデータ処理システムに位置され、ホストインタフェース702を介してアクセス可能なネットワークデバイスを介して通信する。一実施形態において、GPUリンク710は、ホストインタフェース702に加えて、又は代替的にホストプロセッサへの接続を可能にするように構成されることができる。
【0170】
図示されたGPGPU700の構成は、ニューラルネットワークを訓練するように構成されることができるが、一実施形態は、高性能又は低電力推論プラットフォーム内に展開するように構成されることができるGPGPU700の代替構成を提供する。推論構成では、GPGPU 700は、訓練構成に対して、より少ない計算クラスタ706A~706Hを含む。更に、メモリ714A~714Bに関連付けられメモリ技術は、推論構成と訓練構成との間で異なり得る。一実施形態において、GPGPU700の推論構成は、推論固有の命令をサポートすることができる。例えば、推論構成は、展開されたニューラルネットワークの推論演算中に一般的に使用される、1又は複数の8ビット整数ドット積命令のサポートを提供できる。
【0171】
図8は、一実施形態による、マルチGPUコンピューティングシステム800を示す。マルチGPUコンピューティングシステム800は、ホストインタフェーススイッチ804を介して複数のGPGPU806A~806Dに連結されたプロセッサ802を含むことができる。一実施形態において、ホストインタフェーススイッチ804は、プロセッサ802が、GPGPU806A~806Dのセットと通信することができるPCI Expressバスにプロセッサ802を連結するPCI Expressスイッチデバイスである。複数のGPGPU806A~806Dの各々は、
図7のGPGPU700のインスタンスとすることができる。GPGPU806A~806Dは、セットの高速ポイントツーポイントGPUからGPUリンク816を介して相互接続することができる。高速GPU間リンクは、例えば、
図7にあるようなGPUリンク710などの専用GPUリンクを介して、GPGPU806A~806Dの各々に接続することができる。P2PのGPUリンク816は、プロセッサ802が接続されるホストインタフェースバスを介した通信を要求することなく、GPGPU806A~806Dの各々の間の直接通信を可能にする。P2PのGPUリンクに関するGPU間トラフィックにより、ホストインタフェースバスは、システムメモリアクセスのために、又は例えば1又は複数のネットワークデバイスを介してマルチGPUコンピューティングシステム800の他のインスタンスと通信するために利用可能のままである。図示された実施形態において、GPGPU806A~Dは、ホストインタフェーススイッチ804を介してプロセッサ802に接続するが、一実施形態において、プロセッサ802は、P2PのGPUリンク816の直接サポートを含み、GPGPU806A~806Dに直接接続できる。
[機械学習ニューラルネットワークの実装態様]
【0172】
本明細書で説明される実施形態によって提供されるコンピューティングアーキテクチャは、機械学習のためのニューラルネットワークの訓練及び展開に特に適したタイプの並列処理を実行するように構成されることができる。ニューラルネットワークは、グラフの関係を有する関数のネットワークとして一般化されることができる。当技術分野で既知されているように、機械学習で使用される様々なタイプのニューラルネットワークの実装態様がある。ニューラルネットワークの1つの例示的なタイプは、前に説明されたようにフィードフォワードネットワークである。
【0173】
ニューラルネットワークの第2例示的なタイプは、畳み込みニューラルネットワーク(CNN)である。CNNは、例えば、画像データなど、既知のグリッド式のトポロジを有するデータを処理するための専用のフィードフォワードニューラルネットワークである。従って、CNNはビジョン計算又は画像認識のアプリケーションに一般的に使用されるが、例えば、それらは音声及び言語処理などの他のタイプのパターン認識にも使用され得る。CNN入力層のノードは、「フィルター」のセット(網膜に見つけられる受容野から発想を得た特徴検出器)に編成され、各フィルターセットの出力は、ネットワークの連続層のノードに伝搬される。CNNの演算には、畳み込み数学演算を各フィルターに適用して、そのフィルターの出力を生成することが含まれる。畳み込みは、2つの関数によって実行される専用の種類の数学演算であり、第3関数を生成する。これは、2つの元の関数のうちの一方の修正版である。畳み込みネットワークの用語では、畳み込みへの第1関数は入力と称されることができる一方、第2関数は畳み込みカーネルと称されることができる。出力は、特徴マップと称され得る。例えば、畳み込み層への入力は、入力画像の様々な色成分を規定するデータの多次元配列にすることができる。畳み込みカーネルは、パラメータの多次元配列にすることができる。パラメータは、ニューラルネットワークの訓練プロセスによって適合される。
【0174】
再帰型ニューラルネットワーク(RNN)は、層間のフィードバック接続を含むフィードフォワードニューラルネットワークのファミリである。RNNは、ニューラルネットワークの異なる部分にわたりパラメータデータを共有することにより、順次データのモデル化を有効にする。RNNのアーキテクチャにはサイクルが含まれる。サイクルは、RNNからの出力データの少なくとも一部が順番に後続の入力を処理するためのフィードバックとして使用されるため、将来の時点での変数の現在の値がそれ自体の値に及ぼす影響を表す。この機能により、言語データは構成されることができる可変性により、RNNは言語処理に特に有用である。
【0175】
現在以下に説明される図は、例示的なフィードフォワード、CNN、及びRNNネットワークを提示し、及びこれらのタイプのネットワークの各々をそれぞれ訓練及び展開するための一般的なプロセスを説明している。これらの説明は、本明細書で説明される任意の特定の実施形態に関して例示的及び限定されず、図示される概念は、概してディープニューラルネットワーク及び機械学習技術に一般に適用されることができることが理解されるであろう。
【0176】
上記の例示的なニューラルネットワークは、深層学習を実行するために使用されることができる。深層学習は、ディープニューラルネットワークを使用した機械学習である。深層学習で使用されるディープニューラルネットワークは、単一隠れ層のみを含む浅いニューラルネットワークとは異なり、複数の隠れ層から構成される人工ニューラルネットワークである。より深いニューラルネットワークは、一般に、訓練するためにより演算集約的である。しかし、ネットワークの追加の隠れ層により、浅い機械学習技術に対して出力エラーが減少するマルチステップパターン認識が可能になる。
【0177】
深層学習で使用されるディープニューラルネットワークには、通常、モデルに提供された特徴表現に基づいて演算(例えば、オブジェクト分類、音声認識など)を実行できる数学的モデルを表すバックエンドネットワークに連結された特徴認識を実行するフロントエンドネットワークが含まれる。深層学習は、モデルに対して手作りされた機能エンジニアリングが実行されることを要求することなく、機械学習が実行されることが可能になる。代わりに、ディープニューラルネットワークは、入力データ内の統計的構造又は相関関係に基づいて機能を学習できる。学習された特徴は、検出された特徴を出力にマッピングできる数学的モデルに提供されることができる。ネットワークにより使用される数学的モデルは、一般に、実行される特定のタスクに特化しており、異なるモデルが異なるタスクを実行するのに使用されることになる。
【0178】
ニューラルネットワークが構築されると、学習モデルはネットワークに適用され、特定のタスクを実行するようにネットワークを訓練できる。学習モデルは、どのようにモデル内の重みを調整してネットワークの出力エラーを減らすかを説明する。エラーの逆伝搬は、ニューラルネットワークの訓練に使用される一般的な方法である。入力ベクトルは、処理のためにネットワークに提示される。ネットワークの出力は、損失関数を使用して所望の出力と比較され、出力層のニューロン毎にエラー値が算出される。エラー値は、次に、各ニューロンが元の出力への寄与を大ざっぱに表す関連付けられたエラー値を有するまで、後方に伝搬される。ネットワークは、次に、例えば、確率的勾配降下アルゴリズムなどのアルゴリズムを使用してこれらのエラーから学習し、ニューラルネットワークの重みを更新できる。
【0179】
図9A~9Bは、例示的な畳み込みニューラルネットワークを示す。
図9Aは、CNN内の様々な層を示す。
図9Aに示されるように、画像処理をモデル化するために使用される例示的なCNNは、入力画像の赤、緑、及び青(RGB)成分を記載する入力902を受信することができる。入力902は、複数の畳み込み層(例えば、畳み込み層904、畳み込み層906)によって処理されることができる。複数の畳み込み層からの出力は、任意選択で、完全に接続された層908のセットによって処理され得る。完全に接続された層のニューロンは、フィードフォワードネットワークで前に説明されたように、前の層の全ての起動に完全に接続する。完全に接続された層908からの出力は、ネットワークから出力結果を生成するのに使用され得る。完全に接続された層908内の起動は、畳み込みの代わりに行列乗算を使用して計算されることができる。全てのCNN実装が完全に接続された層908を利用するわけではない。例えば、いくつかの実装態様では、畳み込み層906はCNNの出力を生成することができる。
【0180】
畳み込み層は疎に接続されており、完全に接続された層908に見られる従来のニューラルネットワーク構成とは異なる。従来のニューラルネットワーク層は完全に接続されているため、全ての出力ユニットはあらゆる入力ユニットとインタラクトする。しかし、図示のように、フィールドの畳み込みの出力が(フィールド内の各々のノードのそれぞれの状態値の代わりに)後続の層のノードに入力されるため、畳み込み層は疎に接続されている。畳み込み層に関連付けられたカーネルは、畳み込み演算を実行し、その出力は次の層に送信される。畳み込み層内で実行される次元削減は、CNNがスケーリングして大きな画像の処理を可能にする一態様である。
【0181】
図9Bは、CNNの畳み込み層内の例示的な演算段階を示す。CNNの畳み込み層912への入力は、畳み込み層914の3つの段階で処理されることができる。3つの段階は、畳み込み段階916、検出段階918、及びプーリング段階920を含むことができる。次に、畳み込み層914は、連続的畳み込み層にデータを出力することができる。ネットワークの最終の畳み込み層は、出力特徴マップデータを生成し、又は完全に接続された層に入力を提供し、例えばCNNへの入力の分類値を生成できる。
【0182】
畳み込み段階916では、いくつかの畳み込みを並列で実行して、線形起動のセットを生成する。畳み込み段階916は、線形変換プラス移動として指定されることができる任意の変換であるアフィン変換を含むことができる。アフィン変換には、回転、移動、スケーリング、及びこれらの変換の組み合わせが含まれる。畳み込み段階は、入力内の固有の領域に接続されている関数(例えば、ニューロン)の出力を計算する。これは、ニューロンに関連付けられたローカル領域として決定されることができる。ニューロンは、ニューロンの重みと、ニューロンが接続されているローカル入力の領域との間のドット積を計算する。畳み込み段階916からの出力は、畳み込み層914の連続的段階によって処理される線形起動のセットを規定する。
【0183】
線形起動は、検出段階918によって処理されることができる。検出段階918では、各線形起動は非線形起動関数によって処理される。非線形起動関数は、畳み込み層の受容野に影響を与えることなく、ネットワーク全体の非線形的性質を高める。いくつかのタイプの非線形起動関数は、使用され得る。1つの特定のタイプが、f(x)=max(0,x)として規定される起動関数を使用する正規化線形ユニット(ReLU)であるため、起動はゼロで閾値設定される。
【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ネットワークに加えて、これらのネットワークの変更を有効にし得る。ある例示的な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は、分散型学習を示すブロック図である。分散型学習は、複数の分散型コンピューティングノードを使用して、ニューラルネットワークの教師あり又は教師なし訓練を実行する訓練モデルである。分散型計算ノードは各々、例えば、
図7にあるような高並列汎用グラフィック処理ユニット700などの1又は複数のホストプロセッサ及び1又は複数の汎用処理ノードを含むことができる。図示されているように、分散型学習は、モデル並列処理1202、データ並列処理1204、又はモデル及びデータ並列処理1204の組み合わせで実行されることができる。
【0195】
モデル並列処理1202では、分散型システムの異なる計算ノードが、単一ネットワークの異なる部分の訓練演算を実行できる。例えば、ニューラルネットワークの各層は、分散型システムの異なる処理ノードによって訓練されることができる。モデル並列処理の利点には、特に大きなモデルにスケーリングする能力が含まれる。ニューラルネットワークの異なる層に関連付けられた演算を分割すると、全ての層の重みが単一計算ノードのメモリに適合しないであろう非常に大規模なニューラルネットワークの訓練が可能になる。いくつかの例において、モデル並列処理は、大規模なニューラルネットワークの教師なし訓練を実行する際に特に有用とすることができる。
【0196】
データ並列処理1204では、分散型ネットワークの異なるノードがモデルの完全なインスタンスを有し、各ノードがデータの異なる部分を受信する。次に、異なるノードからの結果が組み合わされる。データ並列処理には異なるアプローチが可能であるが、データの並列訓練アプローチでは全て、結果を組み合わせて各ノード間でモデルパラメータを同期させる技術が必要である。データを組み合わせるための例示的なアプローチには、パラメータの平均化と更新ベースのデータ並列処理が含まれる。パラメータの平均化は、訓練データのサブセットで各ノードを訓練し、グローバルパラメータ(例えば、重み、バイアス)を各ノードのパラメータの平均に設定する。パラメータの平均化では、パラメータデータを維持する中央パラメータサーバを使用する。更新ベースのデータ並列処理は、ノードからパラメータサーバにパラメータを転送する代わりに、モデルへの更新が転送されることを除いて、パラメータの平均化に類似している。更に、更新ベースのデータ並列処理は、更新がノード間で圧縮及び転送される分散方式で実行されることができる。
【0197】
組み合わせモデル及びデータ並列処理1206は、例えば、各計算ノードが複数のGPUを含む分散型システムで実装されることができる。各ノードはモデルの完全なインスタンスを有することができ、各ノード内の別個のGPUはモデルの異なる部分を訓練するために使用される。
【0198】
分散型訓練では、単一マシンでの訓練に対してオーバヘッドが増加している。しかし、本明細書で説明された並列プロセッサ及びGPGPUは各々、高帯域幅GPU間データ転送および加速されたリモートデータ同期を有効にする技術を含む、分散型訓練のオーバヘッドを削減する様々な技術を実装できる。
[例示的な機械学習アプリケーション]
【0199】
機械学習は、限定されることはないが、コンピュータビジョン、自動運転及びナビゲーション、音声認識、言語処理を含む様々な技術的問題を解決するために適用されることができる。コンピュータビジョンは、従来、機械学習アプリケーションの最もアクティブなリサーチエリアのうちの1つであった。コンピュータビジョンのアプリケーションは、例えば、顔の認識などの人の視覚能力の再生から、視覚能力の新たなカテゴリの作成までの範囲にわたる。例えば、コンピュータビジョンアプリケーションは、映像に可視のオブジェクトで引き起こされる振動からの音波を認識するように構成されることができる。並列プロセッサ加速機械学習により、コンピュータビジョンアプリケーションが、既に実現可能であったものよりも膨大な訓練データセットを使用して訓練されることが可能になり、また推論システムが低電力並列プロセッサを使用して展開されることが可能になる。
【0200】
並列プロセッサ加速機械学習は、レーン及び道路標識認識、障害物回避、ナビゲーション、及び運転制御を含む自動運転アプリケーションを有する。加速機械学習技術が、固有の訓練入力に対する適切な応答を規定するデータセットに基づいて駆動モデルを訓練するのに使用され得る。本明細書で説明される並列プロセッサは、自動運転ソリューションに使用されるますます複雑化するニューラルネットワークの迅速な訓練を可能にすることができ、自律走行車への統合に好適なモバイルプラットフォームでの低電力推論プロセッサの展開を可能にする。
【0201】
並列プロセッサ加速ディープニューラルネットワークにより、自動音声認識(ASR)への機械学習アプローチが可能になった。ASRには、入力アコースティックシーケンスが与えられたときに最も可能性の高い言語シーケンスを計算する関数の作成が含まれる。ディープニューラルネットワークを使用した加速機械学習により、既にASRに使用されていた隠れMarkovモデル(HMM)とGaussian混合モデル(GMM)の置き換えが可能になった。
【0202】
並列プロセッサ加速機械学習はまた、自然言語処理を加速するために使用されることができる。自動学習手順では、統計的推論アルゴリズムを利用して、誤った又は見知らぬ入力に対してロバストなモデルを生成できる。例示的な自然言語プロセッサアプリケーションには、人間の言語間の自動機械翻訳が含まれる。
【0203】
機械学習に使用される並列処理プラットフォームは、訓練プラットフォームと展開プラットフォームに分割されることができる。訓練プラットフォームは一般に非常に並列であり、マルチGPU単一ノード訓練及びマルチノード、マルチGPU訓練を加速するための最適化が含まれている。訓練に適した例示的な並列プロセッサは、
図7の汎用グラフィック処理ユニット700及び
図8マルチGPUコンピューティングシステム800を含む。それどころか、展開された機械学習プラットフォームには、一般に、例えば、カメラ、自律ロボット、自律走行車などの製品に使用するために好適な低電力の並列プロセッサが含まれている。
【0204】
図13は、訓練されたモデルを使用して推論を実行するのに好適な例示的な推論システムオンチップ(SOC)1300を示す。SOC 1300は、メディアプロセッサ1302、ビジョンプロセッサ1304、GPGPU 1306、及びマルチコアプロセッサ1308を含む処理コンポーネントを統合できる。SOC1300は、処理コンポーネントの各々によってアクセス可能な共有オンチップデータプールを有効にすることができるオンチップメモリ1305を更に含むことができる。処理コンポーネントは低電力動作用に最適化され、自律走行車及び自律ロボットを含む様々な機械学習プラットフォームへの展開を可能にすることができる。例えば、SOC1300の一実装態様は、自律走行車の主制御システムの一部として使用されることができる。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のブロック図である。システム1400は、単一プロセッサデスクトップシステム、マルチプロセッサワークステーションシステム、又は多数のプロセッサ1402又はプロセッサコア1407を有するサーバシステムで使用され得る。一実施形態において、システム1400は、モバイル、ハンドヘルド、又は、例えば、ローカル又はワイドエリアネットワークへの有線又は無線接続性を備えたモノのインターネット(IoT)デバイス内など埋め込みデバイスに使用するためのシステムオンチップ(SoC)集積回路内に組み込まれた処理プラットフォームである。
【0209】
一実施形態において、システム1400は、サーバベースのゲームプラットフォーム、ゲーム及びメディアコンソールを含むゲームコンソール、モバイルゲームコンソール、ハンドヘルドゲームコンソール、又はオンラインゲームコンソールを含む、連結する、又はに統合されることができる。いくつかの実施形態において、システム1400は、携帯電話、スマートフォン、タブレットコンピューティングデバイス、又は例えば、内部記憶容量が低いラップトップなどのモバイルインターネット接続デバイスの一部である。処理システム1400はまた、例えば、スマートウォッチウェアラブルデバイス、拡張現実(AR)又は仮想現実(VR)機能で強化された、視覚、音声、又は触覚出力を提供して、実際の世界の視覚、音声、又は触覚体験を補足するか、又はテキスト、音声、グラフィック、映像、ホログラフィック画像又は映像、又は別の場合、触覚フィードバックを提供するスマートなアイウェア又は衣類、他の拡張現実(AR)デバイス、又は他の仮想現実(VR)デバイスなどのウェアラブルデバイスを含む、連結する、又はに統合されることができる。いくつかの実施形態において、処理システム1400は、テレビ又はセットトップボックスデバイスを含むか、又はその一部である。一実施形態において、システム1400は、例えば、バス、トラクタートレーラー、自動車、モーター又は電力サイクル、飛行機又はグライダー(又はそれらの任意の組み合わせ)などの自動運転車両を含むか、それに連結するか、又はその中に統合されることができる。自動運転車両は、システム1400を使用して、車両の周囲で感知された環境を処理し得る。
【0210】
いくつかの実施形態において、1又は複数のプロセッサ1402は各々、実行される場合、システム又はユーザソフトウェアの動作を実行する命令を処理するために1又は複数のプロセッサコア1407を含む。いくつかの実施形態において、1又は複数のプロセッサコア1407のうちの少なくとも1つは、特定の命令セット1409を処理するように構成される。いくつかの実施形態において、命令セット1409は、複合命令セットコンピューティング(CISC)、縮小命令セットコンピューティング(RISC)、又は超長命令語(VLIW)を介したコンピューティングを介したコンピューティングを容易にし得る。1又は複数のプロセッサコア1407は、他の命令セットのエミュレーションを容易にするための命令を含み得る、異なる命令セット1409を処理し得る。プロセッサコア1407はまた、例えば、デジタル信号プロセッサ((DSP)などの他の処理デバイスを含み得る。
【0211】
いくつかの実施形態において、プロセッサ1402は、キャッシュメモリ1404を含む。アーキテクチャに応じて、プロセッサ1402は、単一内部キャッシュ又は複数のレベルの内部キャッシュを有することができる。いくつかの実施形態において、キャッシュメモリは、プロセッサ1402の様々なコンポーネント間で共有される。いくつかの実施形態において、プロセッサ1402はまた、外部キャッシュ(例えば、レベル3(L3)キャッシュ又はラストレベルキャッシュ(LLC))(図示せず)を使用し、これは、既知のキャッシュコヒーレンシ技術を使用してプロセッサコア1407間で共有され得る。レジスタファイル1406は、プロセッサ1402に更に含まれることができ、異なるタイプのデータ(例えば、整数レジスタ、浮動小数点レジスタ、状態スレジスタ、及び命令ポインタレジスタ)を格納するための異なるタイプのレジスタを含み得る。いくつかのレジスタは、汎用レジスタであり得る一方、他のレジスタは、プロセッサ1402の設計に固有であり得る。
【0212】
いくつかの実施形態において、1又は複数のプロセッサ1402は、1又は複数のインタフェースバス1410と連結され、例えば、アドレス、データ、又は制御信号などの通信信号を、プロセッサ1402とシステム1400の他のコンポーネントとの間で送信する。一実施形態において、インタフェースバス1410は、例えば、ダイレクトメディアインタフェース(DMI)バスのバージョンなどのプロセッサバスとすることができる。しかし、プロセッサバスはDMIバスに限定されることはなく、1又は複数のペリフェラルコンポーネントインターコネクトバス(例えば、PCI、PCI Express)、メモリバス、又は他のタイプのインタフェースバスを含み得る。一実施形態において、プロセッサ1402は、集積メモリコントローラ1416及びプラットフォームコントローラハブ1430を含む。メモリコントローラ1416は、メモリデバイスとシステム1400の他のコンポーネントとの間の通信を容易にする一方、プラットフォームコントローラハブ(PCH)1430は、ローカルI/Oバスを介してI/Oデバイスへの接続を提供する。
【0213】
メモリデバイス1420は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、静的ランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、相変化メモリデバイス、又はプロセスメモリとして機能するのに好適な性能を有するいくつかの他のメモリデバイスとすることができる。一実施形態において、メモリデバイス1420は、システム1400のシステムメモリとして動作して、1又は複数のプロセッサ1402がアプリケーション又はプロセスを実行する場合に使用するデータ1422及び命令1421を格納することができる。メモリコントローラ1416はまた、任意選択の外部グラフィックプロセッサ1418と連結し、プロセッサ1402内の1又は複数のグラフィックプロセッサ1408と通信して、グラフィック及びメディアオペレーションを実行し得る。いくつかの実施形態において、グラフィック、メディア、又は計算演算は、グラフィック、メディア、及び/又は計算演算の専用のセットを実行するように構成されることができるコプロセッサであるアクセラレータ1412によって支援され得る。例えば、一実施形態において、アクセラレータ1412は、機械学習又は計算演算を最適化するために使用される行列乗算アクセラレータである。一実施形態において、アクセラレータ1412は、グラフィックプロセッサ1408と連携してレイトレーシングオペレーションを実行するために使用されることができるレイトレーシングアクセラレータである。一実施形態において、外部アクセラレータ1419は、アクセラレータ1412の代わりに、又はアクセラレータ1412と連携して使用され得る。
【0214】
いくつかの実施形態において、ディスプレイデバイス1411は、プロセッサ1402に接続することができる。ディスプレイデバイス1411は、モバイル電子デバイス又はラップトップデバイス、又はディスプレイインタフェース(例えば、DisplayPortなど)を介して取り付けられた外部ディスプレイデバイスにあるような、1又は複数の内部ディスプレイデバイスとすることができる。一実施形態において、ディスプレイデバイス1411は、例えば、仮想現実(VR)アプリケーション又は拡張現実(AR)アプリケーションに使用するための立体ディスプレイデバイスなどのヘッドマウントディスプレイ(HMD)とすることができる。
【0215】
いくつかの実施形態において、プラットフォームコントローラハブ1430は、周辺機器が高速I/Oバスを介してメモリデバイス1420及びプロセッサ1402に接続することを可能にする。I/O周辺機器には、限定されることはないが、音声コントローラ1446、ネットワークコントローラ1434、ファームウェアインタフェース1428、無線トランシーバ1426、タッチセンサ1425、データストレージデバイス1424(例えば、不揮発性メモリ、揮発性メモリ、ハードディスクドライブ、フラッシュメモリ、NAND、3D NAND、3D XPointなど)が含まれる。データストレージデバイス1424は、ストレージインタフェース(例えば、SATA)を介して、又は、例えば、周辺機器コンポーネントインターコネクトバス(Peripheral Component Interconnect)(例えば、PCI、PCI Express)などの周辺機器バスを介して接続することができる。タッチセンサ1425は、タッチスクリーンセンサ、圧力センサ、又は指紋センサを含むことができる。無線トランシーバ1426は、Wi-Fiトランシーバ、Bluetooth(登録商標)トランシーバ、又は、例えば、3G、4G、5G、又はロングタームエボリューション(LTE)トランシーバなどのモバイルネットワークトランシーバとすることができる。ファームウェアインタフェース1428は、システムファームウェアとの通信を可能にし、例えば、統合拡張可能なファームウェアインタフェース(UEFI)とすることができる。ネットワークコントローラ1434は、有線ネットワークへのネットワーク接続を可能にすることができる。いくつかの実施形態において、高性能ネットワークコントローラ(図示せず)は、インタフェースバス1410と連結する。音声コントローラ1446は、一実施形態において、マルチチャネル高解像度音声コントローラである。一実施形態において、システム1400は、レガシ(例えば、Personal System2(PS/2))デバイスをシステムに連結するための任意選択的なレガシI/Oコントローラ1440を含む。プラットフォームコントローラハブ1430はまた、例えば、キーボードとマウス1443の組み合わせ、カメラ1444、又は他のUSB入力デバイスなどの入力デバイスを接続する1又は複数のユニバーサルシリアルバス(Universal Serial Bus)(USB)コントローラ1442に接続できる。
【0216】
示されているシステム1400は、別々に構成された他のタイプのデータ処理システムはまた使用され得るため、例示的であり、限定ではないことが理解されるであろう。例えば、メモリコントローラ1416及びプラットフォームコントローラハブ1430のインスタンスは、例えば、外部グラフィックプロセッサ1418などの別個の外部グラフィックプロセッサに統合され得る。一実施形態において、プラットフォームコントローラハブ1430及び/又はメモリコントローラ1416は、1又は複数のプロセッサ1402の外部にあり得る。例えば、システム1400は、外部メモリコントローラ1416及びプロセッサ1402と通信するシステムチップセット内のメモリコントローラハブ及び周辺機器コントローラハブとして構成され得る、プラットフォームコントローラハブ1430を含むことができる。
【0217】
例えば、CPU、メモリ、及びその他のコンポーネントなどのコンポーネントが配置されている回路基板(「スレッド」)は使用されることができ、熱性能を高めるために設計される。いくつかの例において、例えば、プロセッサなどの処理コンポーネントはスレッドの上側に位置され一方、例えば、DIMMなどの近くのメモリはスレッドの下側に位置される。この設計によって提供された強化された気流の結果として、コンポーネントは典型的なシステムよりも高い周波数及び電力レベルで動作し得、これにより性能が高まる。更に、スレッドはラック内の電源及びデータ通信ケーブルと盲目的にかみ合うように構成されているため、迅速に除去され、アップグレード、及び/又は再インストール、又は置き換えられるそれらの能力を拡張する。同様に、例えば、プロセッサ、アクセラレータ、メモリ、及びデータストレージドライブなどのスレッドに位置されたプロセッサ個別のコンポーネントは、これらの互いの空間が増すことにより、容易にアップグレードされるように構成されている。例示的な実施形態において、コンポーネントは、それらの真正性を証明するためにハードウェア証明機能を更に含む。
【0218】
データセンターは、イーサネット(登録商標)及びオムニ経路を含む他の複数のネットワークアーキテクチャをサポートする単一ネットワークアーキテクチャ(「ファブリック」)を利用できる。スレッドは、光ファイバーを介してスイッチに連結されることができる。これにより、典型的なツイストペアケーブル配線(例えば、カテゴリ5、カテゴリ5e、カテゴリ6など)よりも高い帯域幅と低いレイテンシを提供する。高帯域幅、低レイテンシの相互接続及びネットワークアーキテクチャにより、データセンターは、使用中、例えば、メモリ、アクセラレータ(例えば、GPU、グラフィックアクセラレータ、FPGA、ASIC、ニューラルネットワーク及び/又は人工知能アクセラレータなど)、及びデータストレージドライブなどのリソースをプールし得、それらは物理的に分解され、必要に応じてこれらを計算リソース(例えば、プロセッサ)に提供し、計算リソースがローカルであるかのようにプールされたリソースにアクセスが可能になる。
【0219】
電力供給又は電源は、システム1400又は本明細書で説明される任意のコンポーネント又はシステムに電圧及び/又は電流を提供することができる。一例において、電力供給は、壁のコンセントに差し込むためのAC-DC(交流電流から直流電流へ)アダプタを含む。そのようなAC電力は、再生可能エネルギー(例えば、太陽光発電)電源とすることができる。一例において、電源は、例えば、外部AC-DCコンバータなどのDC電源を含む。一例において、電源又は電力供給は、充電野の近接を介して充電する無線充電ハードウェアを含む。一例において、電源は、内部バッテリ、交流電流供給、動きベースの電力供給、太陽光電力供給、又は燃料電池電源を含むことができる。
【0220】
図15A~15Cは、本明細書で説明される実施形態によって提供されるコンピューティングシステム及びグラフィックプロセッサを示す。本明細書における任意の他の図面の要素と同じ参照番号(又は名称)を有する
図15A~15Cの要素は、本明細書の他の箇所で説明されているのと類似の任意の方法で動作又は機能できるが、そのようなものに限定されることはない。
【0221】
図15Aは、1又は複数のプロセッサコア1502A~1502N、集積メモリコントローラ1514、及び統合グラフィックプロセッサ1508を有するプロセッサ1500の一実施形態のブロック図である。プロセッサ1500は、破線の枠で表される追加のコア1502Nまで含む追加のコアを含むことができる。プロセッサコア1502A~1502Nの各々は、1又は複数の内部キャッシュユニット1504A~1504Nを含む。いくつかの実施形態において、各プロセッサコアはまた、1又は複数の共有キャッシュユニット1506へのアクセスを有する。内部キャッシュユニット1504A~1504N及び共有キャッシュユニット1506は、プロセッサ1500内のキャッシュメモリ階層を表す。キャッシュメモリ階層は、各プロセッサコア内の少なくとも1つのレベルの命令及びデータキャッシュと、例えば、レベル15(L2)、レベル3(L3)、レベル4(L4)、又は他のレベルのキャッシュなどの1又は複数のレベルの共有中間レベルキャッシュを含み得る。外部メモリの前のキャッシュの最高レベルがLLCとして分類される。いくつかの実施形態において、キャッシュコヒーレンシロジックは、様々なキャッシュユニット1506と1504A~1504Nとの間のコヒーレンシを維持する。
【0222】
いくつかの実施形態において、プロセッサ1500はまた、1又は複数のバスコントローラユニット1616のセット及びシステムエージェントコア1510を含み得る。1又は複数のバスコントローラユニット1616は、例えば、1又は複数のPCI又はPCI Expressバスなどの周辺機器バスのセットを管理する。システムエージェントコア1510は、様々なプロセッサコンポーネントに管理機能を提供する。いくつかの実施形態において、システムエージェントコア1510は、様々な外部メモリデバイス(図示せず)へのアクセスを管理するための1又は複数の集積メモリコントローラ1514を含む。
【0223】
いくつかの実施形態において、プロセッサコア1502A~1502Nの1又は複数は、同時マルチスレッディングのサポートを含む。そのような実施形態において、システムエージェントコア1510は、複数のスレッド処理の間にコア1502A~1502Nを調整及び動作するためのコンポーネントを含む。システムエージェントコア1510は、プロセッサコア1502A~1502N及びグラフィックプロセッサ1508の電力状態を規制するためのロジック及びコンポーネントを含む電力制御ユニット(PCU)を更に含み得る。
【0224】
いくつかの実施形態において、プロセッサ1500は、グラフィック処理オペレーションを実行するためのグラフィックプロセッサ1508を更に含む。いくつかの実施形態において、グラフィックプロセッサ1508は、共有キャッシュユニット1506のセット、及び1又は複数の集積メモリコントローラ1514を含むシステムエージェントコア1510と連結する。いくつかの実施形態において、システムエージェントコア1510は、グラフィックプロセッサ出力を1又は複数の連結されたディスプレイに駆動するディスプレイコントローラ1511も含む。いくつかの実施形態において、ディスプレイコントローラ1511はまた、少なくとも1つの相互接続を介してグラフィックプロセッサと連結された別個のモジュールであり得るか、又はグラフィックプロセッサ1508内に統合され得る。
【0225】
いくつかの実施形態において、リングベースの相互接続ユニット1512は、プロセッサ1500の内部コンポーネントを連結するために使用される。しかし、例えば、ポイントツーポイント相互接続、スイッチ型相互接続、又は当技術分野で既知の技術を含む他の技術など、代替の相互接続ユニットは使用され得る。いくつかの実施形態において、グラフィックプロセッサ1508は、I/Oリンク1513を介してリング相互接続1512と連結する。
【0226】
例示的なI/Oリンク1513は、様々なプロセッサコンポーネントと、例えば、eDRAMモジュールなどの高性能埋め込みメモリモジュール1518との間の通信を容易にするオンパッケージI/O相互接続を含む、複数の様々なI/O相互接続のうちの少なくとも1つを表す。いくつかの実施形態において、プロセッサコア1502A~1502N及びグラフィックプロセッサ1508の各々は、埋め込みメモリモジュール1518を共有ラストレベルキャッシュとして使用することができる。
【0227】
いくつかの実施形態において、プロセッサコア1502A~1502Nは、同じ命令セットアーキテクチャを実行する同種のコアである。別の実施形態において、プロセッサコア1502A~1502Nは、命令セットアーキテクチャ(ISA)に関して異種であり、プロセッサコア1502A~1502Nの1又は複数が第1命令セットを実行し、一方、他のコアのうちの少なくとも1つが第1命令セットのサブセット又は異なる命令セットを実行する。一実施形態において、プロセッサコア1502A~1502Nは、マイクロアーキテクチャに関して異種であり、相対的に消費電力が高い1又は複数のコアが、消費電力が少ない1又は複数の電力コアと連結する。一実施形態において、プロセッサコア1502A~1502Nは、演算機能に関して異種である。更に、プロセッサ1500は、1又は複数のチップ上で、又は他のコンポーネントに加えて、図示されたコンポーネントを有するSoC集積回路として実装されることができる。
【0228】
図15Bは、本明細書で説明されるいくつかの実施形態による、グラフィックプロセッサコア1519のハードウェアロジックのブロック図である。本明細書における任意の他の図面の要素と同じ参照番号(又は名称)を有する
図15Bの要素は、本明細書の他の箇所で説明されているのと類似の任意の方法で動作又は機能できるが、そのようなものに限定されることはない。時折コアスライスと称されることがあるグラフィックプロセッサコア1519は、モジュールグラフィックプロセッサ内の1又は複数のグラフィックコアにすることができる。グラフィックプロセッサコア1519は、1つのグラフィックコアスライスの例であり、本明細書で説明されるグラフィックプロセッサは、目標電力及び性能エンベロープに基づく複数のグラフィックコアスライスを含み得る。各グラフィックプロセッサコア1519は、汎用及び固定機能ロジックのモジュールブロックを含む、またサブスライスと称される複数のサブコア1521A~1521Fと連結された固定機能ブロック1530を含むことができる。
【0229】
いくつかの実施形態において、固定機能ブロック1530は、例えば、より低い性能及び/又はより低電力のグラフィックプロセッサの実装態様において、グラフィックプロセッサコア1519の全てのサブコアによって共有されることができるジオメトリ/固定機能パイプライン1531を含む。様々な実施形態において、ジオメトリ/固定機能パイプライン1531は、3D固定機能パイプライン(例えば、以下に説明される
図16Aにあるような3Dパイプライン1612)、ビデオフロントエンドユニット、スレッドスポーナ及びスレッドディスパッチャ、及び統合戻りバッファマネージャーを含み、これは、統合戻りバッファを管理する(例えば、以下に説明されるように、
図17の統合戻りバッファ1718)。
【0230】
一実施形態において、固定機能ブロック1530はまた、グラフィックSoCインタフェース1532、グラフィックマイクロコントローラ1533、及びメディアパイプライン1534を含む。グラフィックSoCインタフェース1532は、チップ集積回路上のシステム内のグラフィックプロセッサコア1519と他のプロセッサコアとの間のインタフェースを提供する。グラフィックマイクロコントローラ1533は、スレッドディスパッチ、スケジューリング、先取りを含む、グラフィックプロセッサコア1519の様々な機能を管理するように構成可能なプログラマブルサブプロセッサである。メディアパイプライン1534(例えば、
図16A及び
図17のメディアパイプライン1616)は、画像及び映像データを含むマルチメディアデータのデコード、エンコーディング、前処理、及び/又は後処理を容易にするロジックを含む。メディアパイプライン1534は、サブコア1521~1521F内の計算又はサンプリングロジックへの要求を介してメディアオペレーションを実装する。
【0231】
一実施形態において、SoCインタフェース1532は、グラフィックプロセッサコア1519が、SoC内の汎用アプリケーションプロセッサコア(例えば、CPU)及び/又は他のコンポーネントと通信することを可能にし、例えば、共有ラストレベルキャッシュメモリ、システムRAM、及び/又は埋め込み型オンチップ又はオンパッケージDRAMなどのメモリ階層要素を含む。SoCインタフェース1532はまた、例えば、カメライメージングパイプラインなどのSoC内の固定機能デバイスとの通信を可能にすることができ、グラフィックプロセッサコア1519とSoC内のCPUとの間で共有され得るグローバルメモリアトミックの使用及び/又は実装を可能にする。SoCインタフェース1532はまた、グラフィックプロセッサコア1519のための電力管理制御を実装し、グラフィックコア1519のクロックドメインとSoC内の他のクロックドメインとの間のインタフェースを可能にすることができる。一実施形態において、SoCインタフェース1532は、グラフィックプロセッサ内の1又は複数のグラフィックコアの各々にコマンド及び命令を提供するように構成されたコマンドストリーマ及びグローバルスレッドディスパッチャからのコマンドバッファの受信を可能にする。コマンド及び命令は、メディアオペレーションが実行される場合はメディアパイプライン1534に、又はグラフィック処理オペレーションが実行される場合は、ジオメトリ及び固定機能パイプライン(例えば、ジオメトリ及び固定機能パイプライン1531、ジオメトリ及び固定機能パイプライン1537)にディスパッチされることができる。
【0232】
グラフィックマイクロコントローラ1533は、グラフィックプロセッサコア1519のための様々なスケジューリング及び管理タスクを実行するように構成されることができる。一実施形態において、グラフィックマイクロコントローラ1533は、サブコア1521A~1521F内の実行ユニット(EU)配列1522A~1522F、1524A~1524F内の様々なグラフィック並列エンジン上でグラフィックを実行し、及び/又はワークロードスケジューリングを計算することができる。このスケジューリングモデルでは、グラフィックプロセッサコア1519を含むSoCのCPUコア上で実行されるホストソフトウェアが、適切なグラフィックエンジンでスケジューリング演算を呼び出す複数のグラフィックプロセッサドアベルの1つにワークロードを提示できる。スケジューリング演算には、次に実行するワークロードの決定、コマンドストリーマへのワークロードの提示、エンジン上で実行されている既存のワークロードのプリエンプト、ワークロードの経過の監視、ワークロードが完了した場合のホストソフトウェアへの通知が含まれる。一実施形態において、グラフィックマイクロコントローラ1533はまた、グラフィックプロセッサコア1519の低電力又はアイドル状態を容易にすることができ、グラフィックプロセッサコア1519に、オペレーティングシステム及び/又はシステム上のグラフィックドライバソフトウェアから独立して低電力状態移行全体でグラフィックプロセッサコア1519内のレジスタを保存及び復元する能力を提供する。
【0233】
グラフィックプロセッサコア1519は、図示されているサブコア1521A~1521Fよりも大きい又はより少ない最大N個のモジュールサブコアを有し得る。N個のサブコアのセット毎に、グラフィックプロセッサコア1519は、共有機能ロジック1535、共有及び/又はキャッシュメモリ1536、ジオメトリ/固定機能パイプライン1537、及び追加の固定機能ロジック1538も含むことができ、様々なグラフィック及び計算処理オペレーションを加速する。共有機能ロジック1535は、
図17の共有機能ロジック1720(例えば、サンプラ、数学、及び/又はスレッド間通信ロジック)に関連付けられる論理ユニットを含むことができる。これは、グラフィックプロセッサコア1519内の各N個のサブコアにより共有されることができる。共有及び/又はキャッシュメモリ1536は、グラフィックプロセッサコア1519内のN個のサブコア1521A~1521Fのセットのラストレベルキャッシュとすることができ、また複数のサブコアによってアクセス可能な共有メモリとして機能できる。ジオメトリ/固定機能パイプライン1537は、固定機能ブロック1530内のジオメトリ/固定機能パイプライン1531の代わりに含まれることができ、同じ又は類似の論理ユニットを含むことができる。
【0234】
一実施形態において、グラフィックプロセッサコア1519は、グラフィックプロセッサコア1519によって使用される様々な固定機能アクセラレーションロジックを含むことができる追加の固定機能ロジック1538を含む。一実施形態において、追加の固定機能ロジック1538は、位置のみのシェーディングに使用するための追加のジオメトリパイプラインを含む。位置のみのシェーディングでは、2つのジオメトリパイプラインが存在し、ジオメトリ/固定機能パイプライン1538、1531内の完全なジオメトリパイプラインと、追加の固定機能ロジック1538に含まれ得る追加のジオメトリパイプラインであるカルパイプラインである。一実施形態において、カルパイプラインは、完全なジオメトリパイプラインの縮小バージョンである。完全なパイプライン及びカルパイプラインは、同じアプリケーションの異なるインスタンスを実行できる。各インスタンスは別個のコンテキストを有する。位置のみのシェーディングでは、破棄された三角形の長いカル実行を隠すことができるため、いくつかのインスタンスではシェーディングをより早く終了されることが可能である。例えば、一実施形態において、追加の固定機能ロジック1538内のカルパイプラインロジックは、メインアプリケーションと並列して位置シェーダを実行でき、一般に、カルパイプラインが、フレームバッファへの画素のラスタライズ及びレンダリングは実行せずに頂点の位置属性のみをフェッチ及びシェーディングするため、完全なパイプラインよりも速く重要な結果を生成する。カルパイプラインは、生成された重要な結果を使用して、これらの三角形がカリングされているかどうかに関係なく、全ての三角形の可視性情報を計算できる。完全なパイプライン(このインスタンスにおいてリプレイパイプラインと称される場合がある)は、可視情報を消費して、カリングされた三角形をスキップして、最終的にラスタライズフェーズに渡される可視の三角形のみをシェーディングできる。
【0235】
一実施形態において、追加の固定機能ロジック1538はまた、機械学習訓練又は推論の最適化を含む実装態様のために、例えば、固定機能行列乗算ロジックなどの機械学習アクセラレーションロジックを含むことができる。
【0236】
各グラフィックサブコア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を利用することができ、スレッドグループ内で実行されるスレッドがオンチップメモリの共通のプールを使用して実行することを可能にする。
【0237】
図15Cは、本明細書で説明される実施形態による、グラフィックプロセッサ及び/又は計算アクセラレータとして構成されることができる汎用グラフィック処理ユニット(GPGPU)1570のブロック図である。GPGPU 1570は、1又は複数のシステム及び/又はメモリバスを介して、ホストプロセッサ(例えば、1又は複数のCPU1546)及びメモリ1571、1572と相互接続することができる。一実施形態において、メモリ1571は、1又は複数のCPU1546と共有され得るシステムメモリであり、一方、メモリ1572は、GPGPU1570専用のデバイスメモリである。一実施形態において、GPGPU1570及びデバイスメモリ1572内のコンポーネントは、1又は複数のCPU1546にアクセス可能なメモリアドレスにマッピングされ得る。メモリ1571及び1572へのアクセスは、メモリコントローラ1568を介して容易にされ得る。一実施形態において、メモリコントローラ1568は、内部直接メモリアクセス(DMA)コントローラ1569を含む、又は別の場合DMAコントローラによって実行されるであろう動作を実行するロジックを含むことができる。
【0238】
GPGPU1570は、L2キャッシュ1553、L1キャッシュ1554、命令キャッシュ1555、及び共有メモリ1556を含む複数のキャッシュメモリを含み、それらの少なくとも一部はまた、キャッシュメモリとしてパーティション化され得る。GPGPU1570はまた、複数の計算ユニット1560A~1560Nを含む。各計算ユニット1560A~1560Nは、ベクトルレジスタ1561、スカラレジスタ1562、ベクトル論理ユニット1563、及びスカラ論理ユニット1564のセットを含む。計算ユニット1560A~1560Nはまた、ローカル共有メモリ1565及びプログラムカウンタ1566を含むことができる。計算ユニット1560A~1560Nは、定数キャッシュ1567と連結できる。これは、GPGPU 1570上で実行されるカーネル又はシェーダプログラムの実行中に変更されないであろうデータである定数データを格納するために使用されることができる。一実施形態において、定数キャッシュ1567はスカラデータキャッシュであり、キャッシュされたデータはスカラレジスタ1562に直接フェッチされることができる。
【0239】
動作中、1又は複数のCPU1546は、アクセス可能なアドレス空間にマッピングされたGPGPU1570内のレジスタ又はメモリにコマンドを書き込むことができる。コマンドプロセッサ1557は、レジスタ又はメモリからコマンドを読み出し、それらのコマンドがGPGPU1570内でどのように処理されるであろうかを決定することができる。次に、スレッドディスパッチャ1558が、計算ユニット1560A~1560Nにスレッドをディスパッチして、それらのコマンドを実行するのに使用され得る。各計算ユニット1560A~1560Nは、他の計算ユニットとは独立してスレッドを実行できる。更に、各計算ユニット1560A~1560Nは、条件的な演算用に独立して構成されることができ、演算結果を条件的にメモリに出力できる。コマンドプロセッサ1557は、提示されたコマンドが完了された場合、1又は複数のCPU1546に割り込むことができる。
【0240】
図16A~16Cは、本明細書で説明される実施形態によって提供される追加のグラフィックプロセッサ及び計算アクセラレータアーキテクチャのブロック図を示す。本明細書における任意の他の図面の要素と同じ参照番号(又は名称)を有する
図16A~16Cの要素は、本明細書の他の箇所で説明されているのと類似の任意の方法で動作又は機能することができるが、そのようなものに限定されることはない。
【0241】
図16Aは、グラフィックプロセッサ1600のブロック図であり、これは、ディスクリートグラフィック処理ユニットであり得、又は複数の処理コアと統合されたグラフィックプロセッサ、又は例えば、限定されることはないが、メモリデバイス又はネットワークインタフェースなどの他の半導体デバイスであり得る。いくつかの実施形態において、グラフィックプロセッサは、メモリマッピングされたI/Oインタフェースを介して、グラフィックプロセッサ上のレジスタと通信し、プロセッサメモリに配置されたコマンドと通信する。いくつかの実施形態において、グラフィックプロセッサ1600は、メモリにアクセスするためのメモリインタフェース1614を含む。メモリインタフェース1614は、ローカルメモリ、1又は複数の内部キャッシュ、1又は複数の共有外部キャッシュ、及び/又はシステムメモリへのインタフェースとすることができる。
【0242】
いくつかの実施形態において、グラフィックプロセッサ1600はまた、ディスプレイ出力データをディスプレイデバイス1618に駆動するためのディスプレイコントローラ1602を含む。ディスプレイコントローラ1602は、映像又はユーザインタフェース要素の複数の層のディスプレイ及び組成のための1又は複数のオーバーレイ平面のためのハードウェアを含む。ディスプレイデバイス1618は、内部又は外部ディスプレイデバイスとすることができる。一実施形態において、ディスプレイデバイス1618は、例えば、仮想現実(VR)ディスプレイデバイス又は拡張現実(AR)ディスプレイデバイスなどのヘッドマウントディスプレイデバイスである。いくつかの実施形態において、グラフィックプロセッサ1600は、1又は複数のメディアエンコーディングフォーマットに、それから、又はそれらの間でメディアをエンコード、デコード、又はトランスコードするビデオコーデックエンジン1606を含み、限定されることはないが、例えば、MPEG-2などのMoving Picture Experts Group(MPEG)フォーマット、例えば、H.264/MPEG-4AVC、H.265/HEVCなどのAdvanced Video Coding(AVC)フォーマット、Alliance for Open Media(AOMedia)VP8、VP9、及びSociety of Motion Picture&Television Engineers(SMPTE)421M/VC-1、及び例えば、JPEGなどのJoint Photographic Experts Group(JPEG)フォーマット、及びMotion JPEG(MJPEG)フォーマットを含む。
【0243】
いくつかの実施形態において、グラフィックプロセッサ1600は、例えば、ビット境界ブロック転送を含む2次元(2D)ラスタライザ演算を実行するためのブロック画像転送(BLIT)エンジン1604を含む。しかし、一実施形態において、2Dグラフィックオペレーションは、グラフィック処理エンジン(GPE)1610の1又は複数のコンポーネントを使用して実行される。いくつかの実施形態において、GPE 1610は、3次元(3D)グラフィックオペレーション及びメディアオペレーションを含むグラフィックオペレーションを実行するための計算エンジンである。
【0244】
いくつかの実施形態において、GPE1610は、例えば、16Dプリミティブ形状(例えば、矩形、三角形など)に作用する処理機能を使用して3次元画像及びシーンをレンダリングするなど、16D動作を実行するための16Dパイプライン1612を含む。16Dパイプライン1612は、要素内で様々なタスクを実行する、及び/又は3D/メディアサブシステム1615への実行スレッドを生成する、プログラマブル及び固定機能要素を含む。3Dパイプライン1612はメディアオペレーションを実行するのに使用され得るが、GPE 1610の一実施形態はまた、例えば、映像後処理及び画像強調などのメディアオペレーションを実行するために特に使用されるメディアパイプライン1616を含む。
【0245】
いくつかの実施形態において、メディアパイプライン1616は、例えば、ビデオコーデックエンジン1606の代わりに、又はその代わりに、ビデオデコードアクセラレーション、ビデオデインターレース、及びビデオエンコードアクセラレーションなどの1又は複数の特殊メディアオペレーションを実行する固定機能又はプログラマブル論理ユニットを含む。いくつかの実施形態において、メディアパイプライン1616は、3D/メディアサブシステム1615上で実行するためにスレッドを生成するスレッド生成ユニットを更に含む。生成されたスレッドは、3D/メディアサブシステム1615に含まれる1又は複数のグラフィック実行ユニットでメディアオペレーションの演算を実行する。
【0246】
いくつかの実施形態において、3D/メディアサブシステム1615は、3Dパイプライン1612及びメディアパイプライン1616によって生成されたスレッドを実行するためのロジックを含む。一実施形態において、パイプラインは、スレッド実行要求を3D/メディアサブシステム1615に送信し、これは、様々な要求を調停し、利用可能なスレッド実行リソースにディスパッチするスレッドディスパッチロジックを含む。実行リソースには、3D及びメディアスレッドを処理するグラフィック実行ユニットの配列が含まれている。いくつかの実施形態において、3D/メディアサブシステム1615は、スレッド命令及びデータのための1又は複数の内部キャッシュを含む。いくつかの実施形態において、サブシステムはまた、スレッド間でデータを共有し、出力データを格納するために、レジスタ及びアドレス指定可能メモリを含む共有メモリを含む。
【0247】
図16Bは、本明細書で説明される実施形態による、タイル型アーキテクチャを有するグラフィックプロセッサ1620を示す。一実施形態において、グラフィックプロセッサ1620は、グラフィックエンジンタイル1610A~1610D内に
図16Aのグラフィック処理エンジン1610の複数のインスタンスを有するグラフィック処理エンジンクラスタ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で更に詳細に説明されるように、ベースダイ又はベース基板に結合された別個のチップレット上に存在する。
【0248】
グラフィック処理エンジンクラスタ1622は、オンチップ又はオンパッケージのファブリック相互接続1624と接続することができる。ファブリック相互接続1624は、グラフィックエンジンタイル1610A~1610Dと、例えば、ビデオコーデック1606及び1又は複数のコピーエンジン1604などのコンポーネントとの間の通信を可能にすることができる。コピーエンジン1604は、メモリデバイス1626A~1626Dとグラフィックプロセッサ1620の外部にあるメモリ(例えば、システムメモリ)の外、その中、及びその間でデータを移動するのに使用され得る。ファブリック相互接続1624はまた、グラフィックエンジンタイル1610A~1610Dを相互接続するために使用されることができる。グラフィックプロセッサ1620は、外部ディスプレイデバイス1618との接続を可能にするディスプレイコントローラ1602を任意選択で含み得る。グラフィックプロセッサはまた、グラフィック又は計算アクセラレータとして構成され得る。アクセラレータ構成では、ディスプレイコントローラ1602及びディスプレイデバイス1618は省略され得る。
【0249】
グラフィックプロセッサ1620は、ホストインタフェース1628を介してホストシステムに接続することができる。ホストインタフェース1628は、グラフィックプロセッサ1620、システムメモリ、及び/又は他のシステムコンポーネント間の通信を可能にすることができる。ホストインタフェース1628は、例えば、PCI Expressバス又は別のタイプのホストシステムインタフェースとすることができる。
【0250】
図16Cは、本明細書で説明される実施形態による、計算アクセラレータ1630を示す。計算アクセラレータ1630は、
図16Bのグラフィックプロセッサ1620とのアーキテクチャ上の類似点を含むことができ、計算アクセラレーションのために最適化される。計算エンジンクラスタ1632は、並列又はベクトルベースの汎用計算演算のために最適化された実行ロジックを含む計算エンジンタイル1640A~1640Dのセットを含むことができる。いくつかの実施形態において、計算エンジンタイル1640A~1640Dは、固定機能グラフィック処理ロジックを含まないが、一実施形態において、1又は複数の計算エンジンタイル1640A~1640Dは、メディアアクセラレーションを実行するロジックを含むことができる。計算エンジンタイル1640A~1640Dは、メモリ相互接続1625A~1625Dを介してメモリ1626A~1626Dに接続できる。メモリ1626A~1626D及びメモリ相互接続1625A~1625Dは、グラフィックプロセッサ1620にあるような類似の技術であり得るか、又は異なることができる。グラフィック計算エンジンタイル1640A~1640Dはまた、タイル相互接続1623A~1623Fのセットを介して相互接続されることもでき、ファブリック相互接続1624と接続及び/又は相互接続され得る。一実施形態において、計算アクセラレータ1630は、デバイスワイドキャッシュとして構成されることができる大きなL3キャッシュ1636を含む。計算アクセラレータ1630はまた、
図16Bのグラフィックプロセッサ1620と類似の方法で、ホストインタフェース1628を介してホストプロセッサ及びメモリに接続することができる。
[グラフィック処理エンジン]
【0251】
図17は、いくつかの実施形態によるグラフィックプロセッサのグラフィック処理エンジン1710のブロック図である。一実施形態において、グラフィック処理エンジン(GPE)1710は、
図15Aに示されるGPE1510のバージョンであり、また、
図15Bのグラフィックエンジンタイル1510A~1510Dを表し得る。本明細書における任意の他の図面の要素と同じ参照番号(又は名称)を有する
図17の要素は、本明細書の他の箇所で説明されているのと類似の任意の方法で動作又は機能できるが、そのようなものに限定されることはない。例えば、
図15Aの3Dパイプライン1612及びメディアパイプライン1616が示されている。メディアパイプライン1616は、GPE1710のいくつかの実施形態において、任意選択であり、GPE1710内に明示的に含まれ得ない。例えば、少なくとも1つの実施形態において、別個の媒体及び/又はイメージプロセッサがGPE1710に連結される。
【0252】
いくつかの実施形態において、GPE 1710は、3Dパイプライン1612及び/又はメディアパイプライン1616にコマンドストリームを提供するコマンドストリーマ1703と連結するか、又はそれを含む。いくつかの実施形態において、コマンドストリーマ1703は、システムメモリ、又は内部キャッシュメモリ及び共有キャッシュメモリのうちの1又は複数とすることができるメモリと連結される。いくつかの実施形態において、コマンドストリーマ1703は、メモリからコマンドを受信し、そのコマンドを3Dパイプライン1612及び/又はメディアパイプライン1616に送信する。コマンドは、3Dパイプライン1612及びメディアパイプライン1616のコマンドを格納するリングバッファからフェッチされたディレクティブである。一実施形態において、リングバッファは、複数のコマンドのバッチを格納するバッチコマンドバッファを更に含むことができる。3Dパイプライン1612のコマンドはまた、例えば、限定されることはないが、3Dパイプライン1612の頂点及びジオメトリデータ及び/又はメディアパイプライン316の画像データ及びメモリオブジェクトなど、メモリに格納されたデータへの参照を含むことができる。3Dパイプライン1612及びメディアパイプライン1616は、それぞれのパイプライン内のロジックを介して動作を実行することにより、又は1又は複数の実行スレッドをグラフィックコア配列1714にディスパッチすることにより、コマンド及びデータを処理する。一実施形態において、グラフィックコア配列1714は、グラフィックコアの1又は複数のブロック(例えば、グラフィックコア1715A、グラフィックコア1715B)を含み、各ブロックは、1又は複数のグラフィックコアを含む。各グラフィックコアには、グラフィック及び計算演算を実行するための汎用及びグラフィック固有の実行ロジック、及び固定機能のテクスチャ処理及び/又は機械学習及び人工知能アクセラレーションロジックを含むグラフィック実行リソースのセットが含まれている。
【0253】
様々な実施形態において、3Dパイプライン1612は、例えば、命令を処理し、実行スレッドをグラフィックコア配列1714にディスパッチすることによって、頂点シェーダ、ジオメトリシェーダ、画素シェーダ、フラグメントシェーダ、計算シェーダ、又は他のシェーダプログラムなどの1又は複数のシェーダプログラムを処理するための固定機能及びプログラマブルロジックを含むことができる。グラフィックコア配列1714は、これらのシェーダプログラムの処理に使用するために実行リソースの統合ブロックを提供する。グラフィックコア配列1714のグラフィックコア1715A~1714B内の多目的実行ロジック(例えば、実行ユニット)は、様々な3D APIシェーダ言語のサポートを含み、複数のシェーダに関連付けられる複数の同時実行スレッドを実行することができる。
【0254】
いくつかの実施形態において、グラフィックコア配列1714は、例えば、映像及び/又は画像処理などのメディア機能を実行するための実行ロジックを含む。一実施形態において、実行ユニットは、グラフィック処理オペレーションに加えて、並列汎用計算演算を実行するようにプログラマブルである汎用ロジックを含む。汎用ロジックは、
図14のプロセッサコア1407又は
図15Aにあるようなコア1502A~1502N内の汎用ロジックに並列又はそれと併せて処理オペレーションを実行できる。
【0255】
グラフィックコア配列1714上で実行されているスレッドによって生成された出力データは、統合戻りバッファ(URB)1718のメモリにデータを出力できる。URB 1718は、複数のスレッドのデータを格納できる。いくつかの実施形態において、URB1718は、グラフィックコア配列1714上で実行される異なるスレッド間でデータを送信するのに使用されてよい。いくつかの実施形態において、URB1718は、グラフィックコア配列上のスレッドと共有機能ロジック1720内の固定機能ロジックとの間の同期のために更に使用され得る。
【0256】
いくつかの実施形態において、グラフィックコア配列1714は、配列が可変数のグラフィックコアを含み、各々がGPE1710の目標電力及び性能レベルに基づいて可変数の実行ユニットを有するように、スケーラブルである。一実施形態において、実行リソースは、必要に応じて実行リソースは有効化又は無効化され得るように、動的にスケーラブルである。
【0257】
グラフィックコア配列1714は、グラフィックコア配列内のグラフィックコア間で共有される複数のリソースを含む共有機能ロジック1720と連結する。共有機能ロジック1720内の共有機能は、グラフィックコア配列1714に専用の補足的な機能を提供するハードウェア論理ユニットである。様々な実施形態において、共有機能ロジック1720は、限定されることはないが、サンプラ1721、数学1722、及びスレッド間通信(ITC)1723ロジックを含む。更に、いくつかの実施形態は、共有機能ロジック1720内に1又は複数のキャッシュ1725を実装する。
【0258】
共有機能は、少なくとも、所与の専用の関数の需要がグラフィックコア配列1714に含めるには不十分な場合に実装される。代わりに、その専用の機能の単一インスタンス化は、共有機能ロジック1720のスタンドアロンエンティティとして実装され、グラフィックコア配列1714内の実行リソース間で共有される。グラフィックコア配列1714間で共有され、グラフィックコア配列1714内に含まれる関数の正確なセットは、実施形態にわたり変わる。いくつかの実施形態において、グラフィックコア配列1714によって広範に使用される共有機能ロジック1720内の固有の共有機能は、グラフィックコア配列1714内の共有機能ロジック1716内に含まれ得る。様々な実施形態において、グラフィックコア配列1714内の共有機能ロジック1716は、共有機能ロジック1720内のいくつか又は全てのロジックを含むことができる。一実施形態において、共有機能ロジック1720内の全ての論理要素は、グラフィックコア配列1714の共有機能ロジック1716内で複製され得る。一実施形態において、共有機能ロジック1720は、グラフィックコア配列1714内の共有機能ロジック1716を優先して除外される。
[実行ユニット]
【0259】
図18A~18Bは、本明細書で説明される実施形態による、グラフィックプロセッサコアで使用される処理要素の配列を含むスレッド実行ロジック1800を示す。本明細書における任意の他の図面の要素と同じ参照番号(又は名称)を有する
図18A~18Bの要素は、本明細書の他の箇所で説明されているのと類似の任意の方法で動作又は機能できるが、そのようなものに限定されることはない。
図18A~18Bは、
図2Bの各サブコア221A~221Fで示されるハードウェアロジックを表し得るスレッド実行ロジック1800の概要を示す。
図18Aは、汎用グラフィックプロセッサ内の実行ユニットを表し、一方、
図18Bは、計算アクセラレータ内で使用され得る実行ユニットを表す。
【0260】
図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の配列は、任意の数の個別の実行ユニットを含むようにスケーラブルである。
【0261】
いくつかの実施形態において、実行ユニット1808A~1808Nは、主にシェーダプログラムを実行するために使用される。シェーダプロセッサ1802は、様々なシェーダプログラムを処理し、スレッドディスパッチャ1804を介してシェーダプログラムに関連付けられる実行スレッドをディスパッチすることができる。一実施形態において、スレッドディスパッチャは、グラフィック及びメディアパイプラインからのスレッド開始要求を調停し、要求されたスレッドを実行ユニット1808A~1808Nの1又は複数の実行ユニットでインスタンス化するロジックを含む。例えば、ジオメトリパイプラインは、処理のために、頂点、テセレーション、又はジオメトリシェーダをスレッド実行ロジックにディスパッチできる。いくつかの実施形態において、スレッドディスパッチャ1804はまた、実行中のシェーダプログラムからのランタイムスレッド生成要求を処理することができる。
【0262】
いくつかの実施形態において、実行ユニット1808A~1808Nは、グラフィックライブラリ(例えば、Direct 3D及びOpenGL)からのシェーダプログラムが最小限の移動で実行されるように、多くの標準3Dグラフィックシェーダ命令のネイティブサポートを含む命令セットをサポートする。実行ユニットは、頂点及びジオメトリ処理(例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ)、画素処理(例えば、画素シェーダ、フラグメントシェーダ)、及び汎用処理(例えば、計算及びメディアシェーダ)をサポートする。実行ユニット1808A~1808Nの各々は、マルチ発行単一命令多重データ(SIMD)を実行することができ、複数のスレッド動作は、より高いレイテンシメモリアクセスに直面して効率的な実行環境を有効にする。各実行ユニット内の各ハードウェアスレッドは、専用の高帯域幅レジスタファイルと関連付けられる独立したスレッド状態を有する。実行は、整数、単精度及び倍精度の浮動小数点演算、SIMD分岐機能、論理演算、超越演算、及び他の寄せ集め演算をできるパイプラインへのクロック毎のマルチ発行である。メモリ又は共有機能の1つからのデータを待機している間、実行ユニット1808A~1808N内の依存ロジックは、要求されたデータが戻ってくるまで待機中のスレッドをスリープさせる。待機中のスレッドがスリープしている間、ハードウェアリソースは他のスレッドの処理に専念され得る。例えば、頂点シェーダ演算に関連付けられる遅延の間、実行ユニットは、画素シェーダ、フラグメントシェーダ、又は異なる頂点シェーダを含む別のタイプのシェーダプログラムの動作を実行できる。様々な実施形態は、SIMDの使用の代替として、又はSIMDの使用に加えて、単一命令複数のスレッド(SIMT)を使用することによる使用実行に適用することができる。SIMDコア又は動作の参照はまた、SIMTに適用でき、又はSIMTと組み合わせてSIMDに適用できる。
【0263】
実行ユニット1808A~1808N内の各実行ユニットは、データ要素の配列上で動作する。データ要素の数は、「実行サイズ」又は命令のチャネルの数である。実行チャネルは、データ要素へのアクセス、マスキング、及び命令内のフロー制御のための実行の論理ユニットである。チャネルの数は、特定のグラフィックプロセッサの物理算術論理ユニット(Arithmetic Logic Units)(ALU)又は浮動小数点ユニット(Floating Point Units)(FPU)の数とは無関係であり得る。いくつかの実施形態において、実行ユニット1808A~1808Nは、整数及び浮動小数点データタイプをサポートする。
【0264】
実行ユニット命令セットは、SIMD命令を含む。様々なデータ要素は、パックドデータのタイプとしてレジスタに格納されることができ、実行ユニットは、要素のデータサイズに基づいて様々な要素を処理するであろう。例えば、256ビット幅のベクトルを演算する場合、ベクトルの256ビットはレジスタに格納され、実行ユニットは4つの別個の184ビットパックドデータ要素(クアッドワード(QW)サイズのデータ要素)、8つの別個の32ビットパックドデータ要素(ダブルワード(DW)サイズのデータ要素)、16の別個の16ビットパックドデータ要素(ワード(W)サイズのデータ要素)、又は32個の別個の8ビットデータ要素(バイト(B)サイズのデータ要素)としてベクトルを演算する。しかし、異なるベクトル幅及びレジスタサイズが可能である。
【0265】
一実施形態において、1又は複数の実行ユニットは、融合EUに共通のスレッド制御ロジック(1807A~1807N)を有する融合実行ユニット1809A~1809Nに組み合わせられることができる。複数のEUは1つのEUグループに融合されることができる。融合EUグループの各EUは、別個のSIMDハードウェアスレッドを実行するように構成されることができる。融合EUグループ内のEUの数は、実施形態により、変わることができる。更に、限定されることはないがSIMD8、SIMD16、及びSIMD32を含む様々なSIMD幅はEU毎に実行されることができる。各融合グラフィック実行ユニット1809A~1809Nは、少なくとも2つの実行ユニットを含む。例えば、融合実行ユニット1809Aは、第1EU1808A、第2EU1808B、ならびに第1EU1808A及び第2EU1808Bに共通のスレッド制御ロジック1807Aを含む。スレッド制御ロジック1807Aは、融合グラフィック実行ユニット1809A上で実行されるスレッドを制御し、融合実行ユニット1809A~1809N内の各EUが共通命令ポインタレジスタを使用して実行可能になる。
【0266】
1又は複数の内部命令キャッシュ(例えば、1806)は、実行ユニットのためのスレッド命令をキャッシュするためにスレッド実行ロジック1800に含まれる。いくつかの実施形態において、スレッド実行の間にスレッドデータをキャッシュするために、1又は複数のデータキャッシュ(例えば、1812)が含まれる。実行ロジック1800上で実行されるスレッドはまた、明示的に管理されたデータを共有ローカルメモリ1811に格納することができる。いくつかの実施形態において、サンプラ1810は、3D動作のためのテクスチャサンプリング及びメディアオペレーションのためのメディアサンプリングを提供するために含まれる。いくつかの実施形態において、サンプラ1810は、サンプリングされたデータを実行ユニットに提供する前に、サンプリング処理の間にテクスチャ又はメディアデータを処理するための専用のテクスチャ又はメディアサンプリング機能を含む。
【0267】
実行中、グラフィック及びメディアパイプラインは、スレッド生成及びディスパッチロジックを介して、スレッド開始要求をスレッド実行ロジック1800に送信する。ジオメトリックオブジェクトのグループが処理され、画素データにラスタライズされると、シェーダプロセッサ1802内の画素プロセッサロジック(例えば、画素シェーダロジック、フラグメントシェーダロジックなど)が呼び出され、出力情報が更に計算され、結果が出力面(例えば、カラーバッファ、デプスバッファ、ステンシルバッファなど)に書き込まれる。いくつかの実施形態において、画素シェーダ又はフラグメントシェーダが、ラスタライズされたオブジェクトにわたって補間される様々な頂点属性の値を算出する。いくつかの実施形態において、次に、シェーダプロセッサ1802内の画素プロセッサロジックは、アプリケーションプログラミングインタフェース(API)が提供する画素又はフラグメントシェーダプログラムを実行する。シェーダプログラムを実行するために、シェーダプロセッサ1802は、スレッドディスパッチャ1804を介して実行ユニット(例えば、1808A)にスレッドをディスパッチする。いくつかの実施形態において、シェーダプロセッサ1802は、サンプラ1810のテクスチャサンプリングロジックを使用して、メモリに格納されているテクスチャマップのテクスチャデータにアクセスする。テクスチャデータ及び入力ジオメトリデータの算術演算は、ジオメトリックフラグメント毎に画素カラーデータを計算し、又は1又は複数の画素を更なる処理から破棄する。
【0268】
いくつかの実施形態において、データポート1814は、スレッド実行ロジック1800がグラフィックプロセッサ出力パイプラインで更に処理するために処理されたデータをメモリに出力するためのメモリアクセスメカニズムを提供する。いくつかの実施形態において、データポート1814は、データポートを介したメモリアクセスのためにデータをキャッシュするために、1又は複数のキャッシュメモリ(例えば、データキャッシュ1812)を含む又はそれに連結する。
【0269】
一実施形態において、実行ロジック1800はまた、レイトレーシングアクセラレーション機能を提供することができるレイトレーサ1805を含むことができる。レイトレーサ1805は、レイ生成のための命令/関数を含むレイトレーシング命令セットをサポートすることができる。レイトレーシング命令セットは、
図2Cのレイトレーシングコア245によってサポートされるレイトレーシング命令セットと類似とする、又は異なるとすることができる。
【0270】
図18Bは、実施形態による、実行ユニット1808の例示的な内部の詳細を示す。グラフィック実行ユニット1808は、命令フェッチユニット1837、汎用レジスタファイル配列(GRF)1824、アーキテクチャレジスタファイル配列(ARF)1826、スレッドアービタ1822、送信ユニット1830、分岐ユニット1832、SIMD浮動小数点ユニット(FPU)1834のセット、及び一実施形態において、専用整数SIMD ALU1835のセットを含むことができる。GRF1824及びARF1826は、グラフィック実行ユニット1808においてアクティブであり得る各々の同時ハードウェアスレッドに関連付けられる汎用レジスタファイル及びアーキテクチャレジスタファイルのセットを含む。一実施形態において、スレッド実行の間に使用されるデータがGRF1824に格納される一方で、スレッド毎のアーキテクチャ状態がARF1826で維持される。スレッド毎に命令ポインタを含む各スレッドの実行状態は、ARF 1826のスレッド固有のレジスタに保持されることができる。
【0271】
一実施形態において、グラフィック実行ユニット1808は、同時マルチスレッディング(SMT)と細粒度のインタリーブ型マルチスレッディング(Multi-Threading)(IMT)との組み合わせであるアーキテクチャを有する。アーキテクチャは、同時スレッドの目標数及び実行ユニット毎のレジスタ数に基づいて設計時に微調整されることができるモジュール構成を有し、実行ユニットのリソースは、複数の同時スレッドの実行に使用されるロジック全体に分割される。グラフィック実行ユニット1808によって実行され得る論理スレッドの数は、ハードウェアスレッドの数に限定されることはなく、複数の論理スレッドを各ハードウェアスレッドに割り当てられることができる。
【0272】
一実施形態において、グラフィック実行ユニット1808は、各々が異なる命令であり得る複数の命令を同時に発行することができる。グラフィック実行ユニットスレッド1808のスレッドアービタ1822は、実行のために、送信ユニット1830、分岐ユニット1832、又はSIMD FPU1834のうちの1つに命令をディスパッチすることができる。各実行スレッドは、GRF1824内の128個の汎用レジスタにアクセスできる。各レジスタは32バイトを格納でき、32ビットデータ要素のSIMD8-要素ベクトルとしてアクセス可能である。一実施形態において、各実行ユニットスレッドは、GRF1824内の4Kバイトへのアクセスを有するが、実施形態はそのように限定されず、他の実施形態において、より大きい又はより少ないレジスタリソースが提供され得る。一実施形態において、グラフィック実行ユニット1808はまた、計算演算を独立して実行できる7つのハードウェアスレッドにパーティション化されるが、実行ユニット毎のスレッドの数はまた、実施形態により変わることができる。例えば、一実施形態において、最大16のハードウェアスレッドがサポートされる。7つのスレッドが4Kバイトにアクセスし得る一実施形態において、GRF1824は合計28キロバイトを格納することができる。16のスレッドが4Kバイトにアクセスし得る場合、GRF1824は合計64Kバイトを格納することができる。柔軟なアドレス指定モードにより、レジスタを一緒にアドレス指定されることを可能にし、より広いレジスタを効果的に構築し、又はストライドされた矩形のブロックデータ構造を表すことができる。
【0273】
一実施形態において、メモリ動作、サンプラ動作、及び他のより長いレイテンシのシステム通信は、メッセージ受け渡し送信ユニット1830によって実行される「送信」命令を介してディスパッチされる。一実施形態において、分岐命令は、専用分岐ユニット1832にディスパッチされて、SIMD分岐及び最終的な収束を容易にする。
【0274】
一実施形態において、グラフィック実行ユニット1808は、浮動小数点演算を実行するための1又は複数のSIMD浮動小数点ユニット(FPU)1834を含む。一実施形態において、FPU1834はまた、整数演算をサポートする。一実施形態において、FPU(複数可)1834は、最大M個の32ビット浮動小数点(又は整数)演算をSIMD実行することができ、又はSIMDは、最大2M個の16ビット整数又は16ビット浮動小数点演算を実行することができる。一実施形態において、FPUのうちの少なくとも1つは、高スループット超越数学関数及び倍精度184ビット浮動小数点をサポートする拡張数学機能を提供する。いくつかの実施形態において、8ビット整数SIMD ALU1835のセットはまた存在し、機械学習計算に関連付けられる演算を実行するように特に最適化され得る。
【0275】
一実施形態において、グラフィック実行ユニット1808の複数のインスタンスの配列は、グラフィックサブコアグループ化(例えば、サブスライス)でインスタンス化されることができる。スケーラビリティのために、製品アーキテクトはサブコアグループ化毎に実行ユニットの正確な数を選択できる。一実施形態において、実行ユニット1808は、複数の実行チャネルにわたって命令を実行することができる。更なる実施形態において、グラフィック実行ユニット1808上で実行される各スレッドは、異なるチャネル上で実行される。
【0276】
図19は、一実施形態による、追加の実行ユニット1900を示す。実行ユニット1900は、例えば、そのように限定されることはないが、
図15Cにあるような計算エンジンタイル1540A~1540Dに使用するための計算最適化実行ユニットであり得る。実行ユニット1900の変形はまた、
図15Bにあるようにグラフィックエンジンタイル1510A~1510Dで使用され得る。一実施形態において、実行ユニット1900は、スレッド制御ユニット1901、スレッド状態ユニット1902、命令フェッチ/プリフェッチユニット1903、及び命令デコードユニット1904を含む。実行ユニット1900は更に、実行ユニット内のハードウェアスレッドに割り当てられることができるレジスタを格納するレジスタファイル1906を含む。実行ユニット1900は、送信ユニット1907及び分岐ユニット1908を更に含む。一実施形態において、送信ユニット1907及び分岐ユニット1908は、
図18Bのグラフィック実行ユニット1808の送信ユニット1830及び分岐ユニット1832と同様に動作することができる。
【0277】
実行ユニット1900はまた、複数の異なるタイプの機能ユニットを含む計算ユニット1910を含む。一実施形態において、計算ユニット1910は、算術論理ユニットの配列を含むALUユニット1911を含む。ALUユニット1911は、64ビット、32ビット、及び16ビットの整数演算及び浮動小数点演算を実行するように構成されることができる。整数演算及び浮動小数点演算は同時に実行され得る。計算ユニット1910はまた、シストリック配列1912及び数学ユニット1913を含むことができる。シストリック配列1912は、シストリック方式でベクトル又は他のデータ並列演算を実行するために使用されることができるデータ処理ユニットのWワイド及びDディープネットワークを含む。一実施形態において、シストリック配列1912は、例えば、行列ドット積演算などの行列演算を実行するように構成されることができる。一実施形態において、シストリック配列1912は、16ビット浮動小数点演算、及び8ビット及び4ビット整数演算をサポートする。一実施形態において、シストリック配列1912は、機械学習オペレーションを加速するように構成されることができる。そのような実施形態において、シストリック配列1912は、b浮動16ビット浮動小数点フォーマットをサポートするように構成されることができる。一実施形態において、数学ユニット1913は含まれ、数学演算の固有のサブセットを、次にALUユニット1911よりも効率的及び低電力方式で実行することができる。数学ユニット1913は、他の実施形態によって提供されるグラフィック処理エンジンの共有機能ロジック(例えば、
図17の共有機能ロジック1720の数学ロジック1722)に見られ得る数学ロジックの変形を含むことができる。一実施形態において、数学ユニット1913は、32ビット及び64ビットの浮動小数点演算を実行するように構成されることができる。
【0278】
スレッド制御ユニット1901は、実行ユニット内のスレッドの実行を制御するロジックを含む。スレッド制御ユニット1901は、実行ユニット1900内のスレッドの実行を開始、停止、及び先取りするためのスレッド調停ロジックを含むことができる。スレッド状態ユニット1902は、実行ユニット1900上で実行するように割り当てられたスレッドのスレッド状態を格納するために使用されることができる。実行ユニット1900内にスレッド状態を格納することにより、それらのスレッドがブロックされた、又はアイドルになった場合に、スレッドの迅速な先取りが可能になる。命令フェッチ/プリフェッチユニット1903は、より高レベルの実行ロジックの命令キャッシュ(例えば、
図18Aにあるような命令キャッシュ1806)から命令をフェッチすることができる。命令フェッチ/プリフェッチユニット1903はまた、現在実行中のスレッドの分析に基づいて、命令キャッシュにロードされる命令のプリフェッチ要求を発行することができる。命令デコードユニット1904は、計算ユニットによって実行される命令をデコードするために使用されることができる。一実施形態において、命令デコードユニット1904は、複雑な命令を構成要素のマイクロ演算にデコードするための二次デコーダとして使用されることができる。
【0279】
実行ユニット1900は、実行ユニット1900上で実行されるハードウェアスレッドによって使用されることができるレジスタファイル1906を更に含む。レジスタファイル1906内のレジスタは、実行ユニット1900の計算ユニット1910内で複数の同時スレッドを実行するために使用されるロジックにわたって分割されることができる。グラフィック実行ユニット1900によって実行され得る論理スレッドの数は、ハードウェアスレッドの数に限定されることはなく、複数の論理スレッドは各ハードウェアスレッドに割り当てられることができる。レジスタファイル1906のサイズは、サポートされているハードウェアスレッドの数に基づいて、実施形態にわたって変わることができる。一実施形態において、レジスタのリネーミングが、ハードウェアスレッドにレジスタを動的に割り当てるのに使用されてよい。
【0280】
図20は、いくつかの実施形態によるグラフィックプロセッサ命令フォーマット2000を示すブロック図である。1又は複数の実施形態において、グラフィックプロセッサ実行ユニットは、複数のフォーマットの複数の命令を有する命令セットをサポートする。実線の枠は、一般に実行ユニット命令に含まれるコンポーネントを示し、一方、破線は任意選択のコンポーネント又は命令のサブセットにのみ含まれるコンポーネントを含む。いくつかの実施形態において、説明され及び図示される命令フォーマット2000は、命令が処理されると命令デコードから生じるマイクロ演算とは異なり、それらが実行ユニットに供給される命令であるという点でマクロ命令である。
【0281】
いくつかの実施形態において、グラフィックプロセッサ実行ユニットは、128ビットの命令フォーマット2010の複数の命令をネイティブにサポートする。64ビット圧縮命令フォーマット2030は、選択された命令、命令任意選択、及びオペランドの数に基づくいくつかの命令で利用可能である。ネイティブの128ビットの命令フォーマット2010では、全ての命令任意選択にアクセスを提供する一方、いくつかの任意選択と動作は64ビットフォーマット2030で制限されている。64ビットフォーマット2030で利用可能なネイティブ命令は、実施形態によって変わる。いくつかの実施形態において、命令は、インデックスフィールド2013内のインデックス値のセットを使用して部分的に圧縮される。実行ユニットのハードウェアは、インデックス値に基づいて圧縮テーブルのセットを参照し、圧縮テーブルの出力を使用して、ネイティブ命令を128ビットの命令フォーマット2010で再構成する。他のサイズ及びフォーマットの命令は使用されることができる。
【0282】
フォーマット毎に、命令オペコード2012は、実行ユニットが実行する動作を規定する。実行ユニットは、各オペランドの複数のデータ要素に並行して各命令を実行する。例えば、追加命令に応答して、実行ユニットは、テクスチャ要素又はピクチャ要素を表す各カラーチャネルにわたって同時に追加動作を実行する。デフォルトでは、実行ユニットは、オペランドの全てのデータチャネルにわたって各命令を実行する。いくつかの実施形態において、命令制御フィールド2014は、例えば、チャネル選択(例えば、予測)及びデータチャネル順序(例えば、スウィズル)などの特定の実行任意選択に対する制御を可能にする。128ビットの命令フォーマット2010の複数の命令の場合、実行サイズフィールド2016は、並列に実行されるであろうデータチャネルの数を制限する。いくつかの実施形態において、実行サイズフィールド2016は、64ビット圧縮命令フォーマット2030に使用するために利用可能でない。
【0283】
いくつかの実行ユニット命令は、2つのソースオペランド(src0 2020、src1 2022、及び1つのデスティネーション2018)を含む最大3つのオペランドを有する。いくつかの実施形態において、実行ユニットは、デスティネーションのうちの1つが暗示されるデュアルデスティネーション命令をサポートする。データ操作命令は、第3ソースオペランド(例えば、SRC2 2024)を有することができ、命令オペコード2012がソースオペランドの数を決定する。命令の最後のソースオペランドは、命令とともに渡される即(例えば、ハードコードされた)値にすることができる。
【0284】
いくつかの実施形態において、128ビットの命令フォーマット2010は、例えば、直接レジスタアドレス指定モード又は間接レジスタアドレス指定モードのどちらが使用されるかを指定するアクセス/アドレスモードフィールド2026を含む。直接レジスタアドレス指定モードが使用される場合、1又は複数のオペランドのレジスタアドレスは、命令のビットによって直接提供される。
【0285】
いくつかの実施形態において、128ビットの命令フォーマット2010は、命令のアドレスモード及び/又はアクセスモードを指定するアクセス/アドレスモードフィールド2026を含む。一実施形態において、アクセスモードは、命令のデータアクセス整列を規定するために使用される。いくつかの実施形態は、16バイト整列アクセスモード及び1バイト整列アクセスモードを含むアクセスモードをサポートし、アクセスモードのバイト整列は、命令オペランドのアクセス整列を決定する。例えば、第1モードの場合、命令はソースオペランド及びデスティネーションオペランドにバイト整列アドレス指定を使用し得、第2モードの場合、命令は全てのソースオペランド及びデスティネーションオペランドに16バイト整列アドレス指定を使用し得る。
【0286】
一実施形態において、アクセス/アドレスモードフィールド2026のアドレスモード部分は、命令が直接又は間接アドレス指定のどちらを使用するかを決定する。直接レジスタアドレス指定モードが使用される場合、命令のビットは、1又は複数のオペランドのレジスタアドレスを直接提供する。間接レジスタアドレス指定モードが使用される場合、1又は複数のオペランドのレジスタアドレスは、命令のアドレスレジスタ値及びアドレス即値フィールドに基づいて計算され得る。
【0287】
いくつかの実施形態において、命令は、オペコードデコード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は、一実施形態において、デコードされた命令を実行するのに実行ユニットのどの部分を使用することになるかを決定するために使用され得る。例えば、いくつかの命令は、シストリック配列によって実行されるであろうシストリック命令として指定され得る。例えば、レイトレーシング命令(図示せず)などの他の命令は、実行ロジックのスライス又はパーティション内のレイトレーシングコア又はレイトレーシングロジックにルーティングされることができる。
[グラフィックパイプライン]
【0288】
図21は、別の実施形態による、グラフィックプロセッサ2100のブロック図である。本明細書における任意の他の図面の要素と同じ参照番号(又は名称)を有する
図21の要素は、本明細書の他の箇所で説明されているのと類似の任意の方法で動作又は機能できるが、そのようなものに限定されることはない。
【0289】
いくつかの実施形態において、グラフィックプロセッサ2100は、ジオメトリパイプライン2120、メディアパイプライン2130、ディスプレイエンジン2140、スレッド実行ロジック2150、及びレンダー出力パイプライン2170を含む。いくつかの実施形態において、グラフィックプロセッサ2100は、1又は複数の汎用処理コアを含むマルチコア処理システム内のグラフィックプロセッサである。グラフィックプロセッサは、1又は複数の制御レジスタ(図示せず)へのレジスタ書き込みによって、又はリング相互接続2102を介してグラフィックプロセッサ2100に発行されたコマンドを介して制御される。いくつかの実施形態において、リング相互接続2102は、グラフィックプロセッサ2100を、例えば、他のグラフィックプロセッサ又は汎用プロセッサなどの他の処理コンポーネントに連結する。リング相互接続2102からのコマンドは、ジオメトリパイプライン2120又はメディアパイプライン2130の個別のコンポーネントに命令を供給するコマンドストリーマ2103によって解釈される。
【0290】
いくつかの実施形態において、コマンドストリーマ2103は、メモリから頂点データを読み出し、コマンドストリーマ2103によって提供される頂点処理コマンドを実行する頂点フェッチャ2105の演算を指示する。いくつかの実施形態において、頂点フェッチャ2105は、頂点シェーダ2107に頂点データを提供し、それは、各頂点に対して座標空間変換及びライティング演算を実行する。いくつかの実施形態において、頂点フェッチャ2105及び頂点シェーダ2107は、スレッドディスパッチャ2131を介して実行ユニット2152A~2152Bに実行スレッドをディスパッチすることにより、頂点処理命令を実行する。
【0291】
いくつかの実施形態において、実行ユニット2152A~2152Bは、グラフィック及びメディアオペレーションを実行するための命令セットを有するベクトルプロセッサの配列である。いくつかの実施形態において、実行ユニット2152A~2152Bは、配列毎に固有であるか、又は配列間で共有される、取り付けられたL1キャッシュ2151を有する。キャッシュは、データキャッシュ、命令キャッシュ、又は異なるパーティションのデータ及び命令を含むようにパーティション化された単一キャッシュとして構成されることができる。
【0292】
いくつかの実施形態において、ジオメトリパイプライン2120は、3Dオブジェクトのハードウェアアクセラレートテセレーションを実行するテセレーションコンポーネントを含む。いくつかの実施形態において、プログラマブルハルシェーダ2111は、テセレーション演算を構成する。プログラマブルドメインシェーダ2117は、テセレーション出力のバックエンド評価を提供する。テセレータ2113は、ハルシェーダ2111の指示で動作し、専用ロジックを含み、ジオメトリパイプライン2120への入力として提供される粗ジオメトリックモデルに基づいて、詳述されるジオメトリックオブジェクトのセットを生成する。いくつかの実施形態において、テセレーションが使用されない場合、テセレーションコンポーネント(例えば、ハルシェーダ2111、テセレータ2113、及びドメインシェーダ2117)はバイパスされることができる。
【0293】
いくつかの実施形態において、完全なジオメトリックオブジェクトは、実行ユニット2152A~2152Bにディスパッチされた1又は複数のスレッドを介してジオメトリシェーダ2119によって処理されることができ、又はクリッパー2129に直接進むことができる。いくつかの実施形態において、ジオメトリシェーダは、グラフィックパイプラインの前の段階のように頂点又は頂点のパッチではなく、ジオメトリックオブジェクト全体で動作する。テセレーションが無効化されている場合、ジオメトリシェーダ2119は頂点シェーダ2107から入力を受信する。いくつかの実施形態において、ジオメトリシェーダ2119は、テセレーションユニットが無効化されている場合にジオメトリテセレーションを実行するためにジオメトリシェーダプログラムによってプログラマブルである。
【0294】
ラスタライズの前に、クリッパー2129が頂点データを処理する。クリッパー2129は、固定機能クリッパー又はクリッピング及びジオメトリシェーダ機能を有するプログラマブルクリッパーであり得る。いくつかの実施形態において、レンダー出力パイプライン2170のラスタライザ及びデプステストコンポーネント2173は、画素シェーダをディスパッチして、ジオメトリックオブジェクトを画素毎の表現に変換する。いくつかの実施形態において、画素シェーダロジックはスレッド実行ロジック2150に含まれる。いくつかの実施形態において、アプリケーションは、ラスタライザ及びデプステストコンポーネント2173をバイパスし、ストリームアウトユニット2123を介して、ラスタライズされていない頂点データにアクセスすることができる。
【0295】
グラフィックプロセッサ2100は、相互接続バス、相互接続ファブリック、又はプロセッサの主要なコンポーネント間でデータ及びメッセージの受け渡しを可能にするいくつかの他の相互接続メカニズムを有する。いくつかの実施形態において、実行ユニット2152A~2152B及び関連する論理ユニット(例えば、L1キャッシュ2151、サンプラ2154、テクスチャキャッシュ2158など)は、データポート2156を介して相互接続して、メモリアクセスを実行し、プロセッサのレンダー出力パイプラインコンポーネントと通信する。いくつかの実施形態において、サンプラ2154、キャッシュ2151、2158、及び実行ユニット2152A~2152Bは、各々別個のメモリアクセス経路を有する。一実施形態において、テクスチャキャッシュ2158はまた、サンプラキャッシュとして構成されることができる。
【0296】
いくつかの実施形態において、レンダー出力パイプライン2170は、頂点ベースのオブジェクトを関連付けられる画素ベースの表現に変換するラスタライザ及びデプステストコンポーネント2173を含む。いくつかの実施形態において、ラスタライザロジックは、固定機能の三角形及び線ラスタライズを実行するためのウィンドウア/マスカユニットを含む。いくつかの実施形態において、関連付けられるレンダーキャッシュ2178及びデプスキャッシュ2179はまた、利用可能である。画素演算コンポーネント2177は、データに画素ベースの演算を実行するが、いくつかのインスタンスでは、2D動作(例えば、ブレンドを伴うビットブロック画像転送)に関連付けられた画素演算は、2Dエンジン2141によって実行されるか、又はオーバーレイ表示面を使用してディスプレイコントローラ2143によって表示時間に代わられる。いくつかの実施形態において、共有L3キャッシュ2175は、全てのグラフィックコンポーネントに利用可能であり、メインシステムメモリを使用することなくデータを共有することが可能になる。
【0297】
いくつかの実施形態において、グラフィックプロセッサメディアパイプライン2130は、メディアエンジン2137及びビデオフロントエンド2134を含む。いくつかの実施形態において、ビデオフロントエンド2134は、コマンドストリーマ2103からパイプラインコマンドを受信する。いくつかの実施形態において、メディアパイプライン2130は、別個のコマンドストリーマを含む。いくつかの実施形態において、ビデオフロントエンド2134は、コマンドをメディアエンジン2137に送信する前にメディアコマンドを処理する。いくつかの実施形態において、メディアエンジン2137は、スレッドディスパッチャ2131を介してスレッド実行ロジック2150にディスパッチするためにスレッドを生成するスレッド生成機能を含む。
【0298】
いくつかの実施形態において、グラフィックプロセッサ2100は、ディスプレイエンジン2140を含む。いくつかの実施形態において、ディスプレイエンジン2140は、プロセッサ2100の外部にあり、リング相互接続2102又はいくつかの他の相互接続バス又はファブリックを介してグラフィックプロセッサと連結する。いくつかの実施形態において、ディスプレイエンジン2140は、2Dエンジン2141及びディスプレイコントローラ2143を含む。いくつかの実施形態において、ディスプレイエンジン2140は、3Dパイプラインとは独立して動作することができる専用ロジックを含む。いくつかの実施形態において、ディスプレイコントローラ2143は、ラップトップコンピュータにあるようなシステム統合ディスプレイデバイス、又はディスプレイデバイスコネクタを介して取り付けられた外部ディスプレイデバイスであり得るディスプレイデバイス(図示せず)と連結する。
【0299】
いくつかの実施形態において、ジオメトリパイプライン2120及びメディアパイプライン2130は、複数のグラフィック及びメディアプログラミングインタフェースに基づいて動作を実行するように構成可能であり、任意の1つのアプリケーションプログラミングインタフェース(API)に固有ではない。いくつかの実施形態において、グラフィックプロセッサのドライバソフトウェアは、特定のグラフィック又はメディアライブラリに固有のAPIコールを、グラフィックプロセッサにより処理されることができるコマンドに変換する。いくつかの実施形態において、クロノスグループからオープングラフィックライブラリ(OpenGL)、オープンコンピューティング言語(OpenCL)、及び/又はVulkanグラフィック及び計算API、の全てに対するサポートが提供される。いくつかの実施形態において、Microsoft CorporationからのDirect3Dライブラリに対するサポートはまた、提供され得る。いくつかの実施形態において、これらのライブラリの組み合わせがサポートされ得る。オープンソースのコンピュータビジョンライブラリ(OpenCV)のサポートはまた提供され得る。将来のAPIのパイプラインからグラフィックプロセッサのパイプラインへのマッピングが、行われることができる場合、互換性のある3Dパイプラインを備えた将来のAPIはまた、サポートされるであろう。
[グラフィックパイプラインプログラミング]
【0300】
図22Aは、いくつかの実施形態によるグラフィックプロセッサコマンドフォーマット2200を示すブロック図である。
図22Bは、一実施形態によるグラフィックプロセッサコマンドシーケンス2210を示すブロック図である。
図22Aの実線の枠は、グラフィックコマンドに一般に含まれるコンポーネントを示す一方、破線は、任意選択であるか、又はグラフィックコマンドのサブセットにのみ含まれるコンポーネントを含む。
図22Aの例示的なグラフィックプロセッサコマンドフォーマット2200は、クライアント2202、コマンドオペレーションコード(オペコード)2204、及びコマンドのデータ2206を識別するデータフィールドを含む。いくつかのコマンドにはまた、サブオペコード2205とコマンドサイズ2208が含まれている。
【0301】
いくつかの実施形態において、クライアント2202は、コマンドデータを処理するグラフィックデバイスのクライアントユニットを指定する。いくつかの実施形態において、グラフィックプロセッサコマンドパーサーは、各コマンドのクライアントフィールドを検査し、コマンドの更なる処理を調整し、コマンドデータを適切なクライアントユニットにルーティングする。いくつかの実施形態において、グラフィックプロセッサクライアントユニットは、メモリインタフェースユニット、レンダーユニット、2Dユニット、3Dユニット、及びメディアユニットを含む。各クライアントユニットは、コマンドを処理する対応する処理パイプラインを有する。コマンドがクライアントユニットによって受信されると、クライアントユニットはオペコード2204を読み出し、存在する場合はサブオペコード2205を読み出して、実行する動作を決定する。クライアントユニットは、データフィールド2206の情報を使用してコマンドを実行する。いくつかのコマンドでは、明示的なコマンドサイズ2208は、コマンドのサイズを指定することを予期される。いくつかの実施形態において、コマンドパーサーは、コマンドオペコードに基づいて、コマンドの少なくともいくつかのサイズを自動的に決定する。いくつかの実施形態において、コマンドはダブルワードの倍数を介して整列される。他のコマンドフォーマットは、使用されることができる。
【0302】
図22Bのフロー図は、例示的なグラフィックプロセッサコマンドシーケンス2210を示す。いくつかの実施形態において、グラフィックプロセッサの実施形態を特徴とするデータ処理システムのソフトウェア又はファームウェアは、グラフィックオペレーションのセットを設定、実行、及び終了するために示されるコマンドシーケンスのバージョンを使用する。実施形態がこれらの特定のコマンド又はこのコマンドシーケンスに限定されることはないので、サンプルコマンドシーケンスが、例示の目的でのみ示され、説明される。更に、グラフィックプロセッサが少なくとも部分的に同意してコマンドのシーケンスを処理するであろうように、コマンドはコマンドシーケンスのコマンドのバッチとして発行され得る。
【0303】
いくつかの実施形態において、グラフィックプロセッサコマンドシーケンス2210は、パイプラインフラッシュコマンド2212で始まり得、任意のアクティブなグラフィックパイプラインにパイプラインの現在保留中のコマンドを完了させる。いくつかの実施形態において、3Dパイプライン2222及びメディアパイプライン2224は、同時に動作しない。パイプラインフラッシュが実行され、アクティブなグラフィックパイプラインに任意の保留中のコマンドを完了させる。パイプラインフラッシュに応答して、グラフィックプロセッサのコマンドパーサーは、アクティブな描画エンジンが保留中の動作を完了し、関連する読み出しキャッシュが無効になるまで、コマンド処理を一時停止するであろう。任意選択で、「ダーティ」とマークされているレンダーキャッシュ内の任意のデータはメモリにフラッシュされることができる。いくつかの実施形態において、パイプラインフラッシュコマンド2212は、パイプライン同期のために、又はグラフィックプロセッサを低電力状態に配置する前に使用されることができる。
【0304】
いくつかの実施形態において、パイプライン選択コマンド2213は、コマンドシーケンスがグラフィックプロセッサにパイプライン間を明示的に切り替えることを要求する場合に使用される。いくつかの実施形態において、コンテキストが両方のパイプラインに対してコマンドを発行するものでない限り、パイプラインコマンドを発行する前に、パイプライン選択コマンド2213が実行コンテキスト内で1回だけ必要とされる。いくつかの実施形態において、パイプライン選択コマンド2213を介してパイプライン切り替え直前に、パイプラインフラッシュコマンド2212が必要とされる。
【0305】
いくつかの実施形態において、パイプライン制御コマンド2214は、動作のためのグラフィックパイプラインを構成し、3Dパイプライン2222及びメディアパイプライン2224をプログラミングするために使用される。いくつかの実施形態において、パイプライン制御コマンド2214は、アクティブなパイプラインのパイプライン状態を構成する。一実施形態において、パイプライン制御コマンド2214は、パイプライン同期のため、及びコマンドのバッチを処理する前にアクティブなパイプライン内の1又は複数のキャッシュメモリからデータをクリアするために使用される。
【0306】
いくつかの実施形態において、戻りバッファ状態コマンド2216は、それぞれのパイプラインがデータを書き込むための戻りバッファのセットを構成するために使用される。いくつかのパイプライン動作では、動作が処理の間に中間データを書き込む1又は複数の戻りバッファの割り当て、選択、又は構成が必要である。いくつかの実施形態において、グラフィックプロセッサはまた、出力データを格納し、スレッド間通信を実行するために、1又は複数の戻りバッファを使用する。いくつかの実施形態において、戻りバッファ状態2216は、パイプライン動作のセットに使用する戻りバッファのサイズ及び数を選択することを含む。
【0307】
コマンドシーケンスの残りのコマンドは、動作のアクティブなパイプラインに基づいて異なる。パイプライン決定2220に基づいて、コマンドシーケンスは、3Dパイプライン状態2230で始まる3Dパイプライン2222、又はメディアパイプライン状態2240で始まるメディアパイプライン2224に調整される。
【0308】
3Dパイプライン状態2230を構成するコマンドは、頂点バッファ状態、頂点要素状態、一定のカラー状態、デプスバッファ状態、及び3Dプリミティブコマンドが処理される前に構成される他の状態変数のための3D状態設定コマンドを含む。これらのコマンドの値は、少なくとも部分的には使用中の特定の3D APIに基づいて決定される。いくつかの実施形態において、3Dパイプライン状態2230コマンドはまた、それらの要素が使用されないであろう場合、特定のパイプライン要素を選択的に無効化又はバイパスすることができる。
【0309】
いくつかの実施形態において、3Dプリミティブ2232コマンドは、3Dパイプラインによって処理される3Dプリミティブを提示するために使用される。3Dプリミティブ2232コマンドを介してグラフィックプロセッサに渡されるコマンド及び関連パラメータは、グラフィックパイプラインの頂点フェッチ機能に転送される。頂点フェッチ機能は、3Dプリミティブ2232コマンドデータを使用して、頂点データ構造を生成する。頂点データ構造は、1又は複数の戻りバッファに格納される。いくつかの実施形態において、3Dプリミティブ2232コマンドは、頂点シェーダを介して3Dプリミティブに対して頂点演算を実行するために使用される。頂点シェーダを処理するために、3Dパイプライン2222は、シェーダ実行スレッドをグラフィックプロセッサ実行ユニットにディスパッチする。
【0310】
いくつかの実施形態において、3Dパイプライン2222は、実行2234コマンド又はイベントを介してトリガーされる。いくつかの実施形態において、レジスタ書き込みがコマンド実行をトリガーする。いくつかの実施形態において、実行は、コマンドシーケンスの「go」又は「kick」コマンドを介してトリガーされる。一実施形態において、コマンド実行は、グラフィックパイプラインを介してコマンドシーケンスをフラッシュするためにパイプライン同期コマンドを使用してトリガーされる。3Dパイプラインは、3Dプリミティブのジオメトリ処理を実行するであろう。動作が完了すると、結果のジオメトリックオブジェクトがラスタライズされ、画素エンジンが結果の画素に色を付ける。画素シェーディング及び画素バックエンド演算を制御する追加のコマンドはまた、これらの演算に含まれ得る。
【0311】
いくつかの実施形態において、グラフィックプロセッサコマンドシーケンス2210は、メディアオペレーションを実行する場合、メディアパイプライン2224経路に続く。一般に、メディアパイプライン2224のプログラミングの固有の使用及び方法は、実行されるメディア又は計算演算に依存する。固有のメディアデコードオペレーションは、メディアデコード中にメディアパイプラインにオフロードされ得る。いくつかの実施形態において、メディアパイプラインはまた、バイパスされることができ、メディアデコードは、1又は複数の汎用処理コアによって提供されるリソースを使用して全体的に又は部分的に実行されることができる。一実施形態において、メディアパイプラインはまた、汎用グラフィックプロセッサユニット(GPGPU)動作のための要素を含み、グラフィックプロセッサは、グラフィックプリミティブのレンダリングに明示的に関連しない演算シェーダプログラムを使用してSIMDベクトル演算を実行するために使用される。
【0312】
いくつかの実施形態において、メディアパイプライン2224は、3Dパイプライン2222と類似の方法で構成される。メディアパイプライン状態2240を構成するコマンドのセットは、メディアオブジェクトコマンド2242の前にコマンドキューにディスパッチ又は配置される。いくつかの実施形態において、メディアパイプライン状態2240のためのコマンドは、メディアオブジェクトを処理するために使用されるであろうメディアパイプライン要素を構成するためのデータを含む。これには、例えば、エンコード又はデコードフォーマットなど、メディアパイプライン内のビデオデコード及びビデオエンコードロジックを構成するためのデータが含まれる。いくつかの実施形態において、メディアパイプライン状態2240のためのコマンドはまた、状態設定のバッチを含む「間接的な」状態要素への1又は複数のポインタの使用をサポートする。
【0313】
いくつかの実施形態において、メディアオブジェクトコマンド2242は、メディアパイプラインによる処理のためにメディアオブジェクトへのポインタを供給する。メディアオブジェクトには、処理される映像データを含むメモリバッファが含まれる。いくつかの実施形態において、メディアオブジェクトコマンド2242を発行する前に、全てのメディアパイプライン状態が有効でなければならない。パイプライン状態が構成され、メディアオブジェクトコマンド2242がキューに入れられると、メディアパイプライン2224は、実行コマンド2244又は同等の実行イベント(例えば、レジスタ書き込み)を介してトリガーされる。次に、メディアパイプライン2224からの出力は、3Dパイプライン2222又はメディアパイプライン2224によって提供される動作によって後処理され得る。いくつかの実施形態において、GPGPUオペレーションは、メディアオペレーションと類似の方法で構成及び実行される。
グラフィックソフトウェアアーキテクチャ
【0314】
図23は、いくつかの実施形態による、データ処理システム2300のための例示的なグラフィックソフトウェアアーキテクチャを示す。いくつかの実施形態において、ソフトウェアアーキテクチャは、3Dグラフィックアプリケーション2310、オペレーティングシステム2320、及び少なくとも1つのプロセッサ2330を含む。いくつかの実施形態において、プロセッサ2330は、グラフィックプロセッサ2332及び1又は複数の汎用プロセッサコア2334を含む。グラフィックアプリケーション2310及びオペレーティングシステム2320は各々、データ処理システムのシステムメモリ2350で実行される。
【0315】
いくつかの実施形態において、3Dグラフィックアプリケーション2310は、シェーダ命令2312を含む1又は複数のシェーダプログラムを含む。シェーダ言語の命令は、例えば、Direct3Dの高レベルシェーダ言語(HLSL)、OpenGLシェーダ言語(GLSL)などの高レベルシェーダ言語であり得る。アプリケーションはまた、汎用プロセッサコア2334による実行のために好適な機械語の実行可能命令2314を含む。アプリケーションにはまた、頂点データによって規定されたグラフィックオブジェクト2316が含まれる。
【0316】
いくつかの実施形態において、オペレーティングシステム2320は、Microsoft CorporationのMicrosoft(登録商標)Windows(登録商標)オペレーティングシステム、プロプライエタリUNIX(登録商標)様式のオペレーティングシステム、又はLinux(登録商標)カーネルの変形を使用するオープンソースのUNIX様式のオペレーティングシステムである。オペレーティングシステム2320は、例えば、Direct3D API、OpenGL API、又はVulkan APIなどのグラフィックAPI 2322をサポートできる。Direct3D APIが使用されている場合、オペレーティングシステム2320はフロントエンドシェーダコンパイラ2324を使用して、HLSLの任意のシェーダ命令2312をより低水準のシェーダ言語にコンパイルする。コンパイルはジャストインタイム(JIT)コンパイルであり得るか、又はアプリケーションがシェーダプリコンパイルを実行できる。いくつかの実施形態において、高レベルのシェーダは、3Dグラフィックアプリケーション2310のコンパイル中に低水準のシェーダにコンパイルされる。いくつかの実施形態において、シェーダ命令2312は、例えば、Vulkan APIによって使用される標準ポータブル中間表現(Standard Portable Intermediate Representation)(SPIR)のバージョンなどの中間形式で提供される。
【0317】
いくつかの実施形態において、ユーザモードグラフィックドライバ2326は、シェーダ命令2312をハードウェア固有の表現に変換するためのバックエンドのシェーダコンパイラ2327を含む。OpenGL APIが使用されている場合、GLSL高レベル言語のシェーダ命令2312が、コンパイルのためにユーザモードグラフィックドライバ2326に渡される。いくつかの実施形態において、ユーザモードグラフィックドライバ2326は、オペレーティングシステムカーネルモード機能2328を使用して、カーネルモードグラフィックドライバ2329と通信する。いくつかの実施形態において、カーネルモードグラフィックドライバ2329は、コマンド及び命令をディスパッチするためにグラフィックプロセッサ2332と通信する。
[IPコアの実装態様]
【0318】
少なくとも1つの実施形態の1又は複数の態様は、例えば、プロセッサなどの集積回路内のロジックを表す及び/又は規定する機械可読媒体に格納された代表的なコードによって実装され得る。例えば、機械可読媒体は、プロセッサ内の様々なロジックを表す命令を含み得る。機械によって読み出されると場合、命令は、機械に、本明細書に説明されている技術を実行するためのロジックを製造させ得る。「IPコア」として既知のそのような表現は、集積回路の構造を説明するハードウェアモデルとして有形の機械可読媒体に格納され得る、集積回路のロジックの再利用可能なユニットである。ハードウェアモデルは、集積回路を製造する製造機械にハードウェアモデルをロードする様々な顧客又は製造施設に供給され得る。集積回路は、回路が、本明細書において説明される実施形態のうちのいずれかと関連して説明される動作を実行するように製造され得る。
【0319】
図24Aは、一実施形態による、動作を実行するための集積回路を製造するために使用され得るIPコア開発システム2400を示すブロック図である。IPコア開発システム2400は、より大きな設計に組み込まれることができ、又は集積回路全体(例えば、SoC集積回路)を構築するのに使用されることができるモジュール、再利用可能な設計を生成するために使用され得る。設計施設2430は、高レベルプログラミング言語(例えば、C/C++)でのIPコア設計のソフトウェアシミュレーション2410を生成することができる。ソフトウェアシミュレーション2410は、シミュレーションモデル2412を使用してIPコアの挙動は設計、テスト、及び検証するために使用されることができる。シミュレーションモデル2412は、機能的、挙動的、及び/又はタイミングシミュレーションを含み得る。次に、レジスタ転送レベル(RTL)設計2415を、シミュレーションモデル2412から作成又は合成することができる。RTL設計2415は、モデル化されたデジタル信号を使用して実行される関連付けられるロジックを含む、ハードウェア配列レジスタ間のデジタル信号のフローをモデル化する集積回路の挙動の抽出である。RTL設計2415に加えて、論理レベル又はトランジスタレベルでの低水準の設計はまた、作成、設計、又は合成され得る。従って、初期の設計及びシミュレーションの具体的詳細は変わり得る。
【0320】
RTL設計2415又は同等物は、設計施設によって、ハードウェア記述言語(HDL)又は物理的設計データの他のいくつかの表現であり得るハードウェアモデル2420に更に合成され得る。HDLは更にシミュレーション又はテストされ得、IPコア設計を確認する。IPコア設計は、不揮発性メモリ2440(例えば、ハードディスク、フラッシュメモリ、又は任意の不揮発性記憶媒体)を使用して、サードパーティの製造施設2465に配送するために格納されることができる。あるいは、IPコア設計は、有線接続2450又は無線接続2460を介して(例えば、インターネットを介して)送信され得る。次に、製造施設2465は、IPコア設計に少なくとも部分的に基づいた集積回路を製造し得る。製造された集積回路は、本明細書で説明される少なくとも1つの実施形態による動作を実行するように構成されることができる。
【0321】
図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の表面に連結されて、例えば、マザーボード、他のチップセット、又はマルチチップモジュールなどの他の電気デバイスに電気信号をルーティングし得る。
【0322】
いくつかの実施形態において、ロジック2472、2474のユニットは、ロジック2472、2474間で電気信号をルーティングするように構成されたブリッジ2482と電気的に連結される。ブリッジ2482は、電気信号のルートを提供する高密度相互接続構造であり得る。ブリッジ2482は、ガラス又は適切な半導体材料から構成されるブリッジ基板を含み得る。電気ルーティング機能はブリッジ基板上に形成され、ロジック2472、2474間のチップ間接続を提供できる。
【0323】
ロジック2472、2474及びブリッジ2482の2つのユニットが図示されているが、本明細書で説明される実施形態は、1又は複数のダイ上により多い又はより少ない論理ユニットを含み得る。ロジックが単一ダイに含まれる場合、ブリッジ2482は除外され得るため、1又は複数のダイは、ゼロ又は複数のブリッジによって接続され得る。あるいは、複数のダイ又はロジックのユニットは1又は複数のブリッジで接続されることができる。更に、複数の論理ユニット、ダイ、及びブリッジは、3次元構成を含む他の可能な構成で一緒に接続されることができる。
【0324】
図24Cは、基板2480(例えば、ベースダイ)に接続されたハードウェアロジックチップレットの複数のユニットを含むパッケージアセンブリ2490を示す。本明細書に説明されるグラフィック処理ユニット、並列プロセッサ、及び/又は計算アクセラレータは、別個に製造される多様なシリコンチップレットから構成されることができる。このコンテキストにおいて、チップレットは、他のチップレットと組み立てられ、より大きなパッケージにすることができるロジックの別個のユニットを含む、少なくとも部分的にパッケージ化された集積回路である。異なるIPコアロジックを備えた多様なチップレットのセットは単一デバイスに組み立てられることができる。更に、チップレットは、アクティブインターポーザ技術を使用してベースダイ又はベースチップレットに統合されることができる。本明細書で説明される概念は、GPU内のIPの異なる形式間の相互接続及び通信を可能にする。IPコアは、異なるプロセス技術を使用して製造され、製造中に構成されることができる。これにより、特にいくつかのフレーバーIPを持つ大規模なSoCで、同じ製造プロセスに複数のIPを収束する複雑さが回避される。複数のプロセス技術の使用を可能にすることで、市場までの時間が短縮され、複数の製品SKUを作成するための費用対効果の高い方法が提供される。更に、分解されたIPは独立してパワーゲーティングされやすくなり、所与のワークロードで使用されていないコンポーネントの電源をオフにされることができるため、全体的な電力消費を削減できる。
【0325】
ハードウェアロジックチップレットは、専用ハードウェアロジックチップレット2472、ロジック又はI/Oチップレット2474、及び/又はメモリチップレット2475を含むことができる。ハードウェアロジックチップレット2472及びロジック又はI/Oチップレット2474は、少なくとも部分的に構成可能なロジック又は固定機能ロジックハードウェアで実装され得、本明細書で説明されるプロセッサコア、グラフィックプロセッサ、並列プロセッサ、又はその他のアクセラレータデバイスのいずれかの1又は複数の部分を含むことができる。メモリチップレット2475は、DRAM(例えば、GDDR、HBM)メモリ又はキャッシュ(SRAM)メモリとすることができる。
【0326】
各チップレットは、別個の半導体ダイとして製造され、相互接続構造2473を介して基板2480と連結されることができる。相互接続構造2473は、基板2480内の様々なチップレットとロジックとの間で電気信号をルーティングするように構成され得る。相互接続構造2473は、例えば、限定されることはないがバンプ又はピラーなどの相互接続を含むことができる。いくつかの実施形態において、相互接続構造2473は、例えば、ロジック、I/O及びメモリチップレットの動作に関連付けられる入力/出力(I/O)信号及び/又は電力又は接地信号などの電気信号をルーティングするように構成され得る。
【0327】
いくつかの実施形態において、基板2480は、エポキシベースの積層基板である。基板2480は、他の実施形態において、他の適切なタイプの基板を含み得る。パッケージアセンブリ2490は、パッケージ相互接続2483を介して他の電気デバイスに接続されることができる。パッケージ相互接続2483は、基板2480の表面に連結されて、例えば、マザーボード、他のチップセット、又はマルチチップモジュールなどの他の電気デバイスに電気信号をルーティングし得る。
【0328】
いくつかの実施形態において、ロジック又はI/Oチップレット2474及びメモリチップレット2475は、ロジック又はI/Oチップレット2474とメモリチップレット2475との間で電気信号をルーティングするように構成されるブリッジ2487を介して電気的に連結されることができる。ブリッジ2487は、電気信号のルートを提供する高密度相互接続構造であり得る。ブリッジ2487は、ガラス又は適切な半導体材料から構成されるブリッジ基板を含み得る。電気ルーティング機能はブリッジ基板上に形成され、ロジック又はI/Oチップレット2474とメモリチップレット2475の間にチップ間接続を提供できる。ブリッジ2487はまた、シリコンブリッジ又は相互接続ブリッジと称される場合がある。例えば、いくつかの実施形態において、ブリッジ2487は、埋め込みマルチダイ相互接続ブリッジ(Embedded Multi-die Interconnect Bridge)(EMIB)である。いくつかの実施形態において、ブリッジ2487は、単に1つのチップレットから別のチップレットへの直接接続であり得る。
【0329】
基板2480は、I/O2491、キャッシュメモリ2492、及び他のハードウェアロジック2493のためのハードウェアコンポーネントを含むことができる。ファブリック2485は基板2480に埋め込まれ、基板2480内の様々なロジックチップレットとロジック2491、2493との間の通信を可能にすることができる。一実施形態において、I/O2491、ファブリック2485、キャッシュ、ブリッジ、及び他のハードウェアロジック2493は、基板2480の上に積層されるベースダイに統合されることができる。
【0330】
様々な実施形態において、パッケージアセンブリ2490は、ファブリック2485又は1又は複数のブリッジ2487によって相互接続されるより少ない又はより多い数のコンポーネント及びチップレットを含むことができる。パッケージアセンブリ2490内のチップレットは、3D又は2.5D配置で配置され得る。一般に、ブリッジ構造2487は、例えば、ロジック又はI/Oチップレットとメモリチップレットとの間のポイントツーポイント相互接続を容易にするために使用され得る。ファブリック2485は、様々なロジック及び/又は他のロジック及び/又はI/Oチップレットを備えるI/Oチップレット(例えば、チップレット2472、2474、2491、2493)を相互接続するために使用されることができる。一実施形態において、基板内のキャッシュメモリ2492は、パッケージアセンブリ2490のグローバルキャッシュ、分散グローバルキャッシュの一部、又はファブリック2485の専用キャッシュとして機能することができる。
【0331】
図24Dは、一実施形態による、交換可能なチップレット2495を含むパッケージアセンブリ2494を示す。交換可能なチップレット2495は、1又は複数のベースチップレット2496、2498の標準化されたスロットに組み立てられることができる。ベースチップレット2496、2498は、本明細書で説明される他のブリッジ相互接続に類似することができ、例えば、EMIBであり得る、ブリッジ相互接続2497を介して連結されることができる。メモリチップレットはまた、ブリッジ相互接続を介してロジック又はI/Oチップレットに接続されることができる。I/O及びロジックチップレットは、相互接続ファブリックを介して通信できる。ベースチップレットは各々、ロジック又はI/O又はメモリ/キャッシュの1つに対して、標準化されたフォーマットで1又は複数のスロットをサポートできる。
【0332】
一実施形態において、SRAM及び電力供給回路は、ベースチップレットの上にスタックされる交換可能なチップレット2495に対して異なるプロセス技術を使用して製造されることができる1又は複数のベースチップレット2496、2498に製造されることができる。例えば、ベースチップレット2496、2498は、より大きなプロセス技術を使用して製造されることができる、一方、交換可能なチップレットは、より小さなプロセス技術を使用して製造されることができる。交換可能なチップレット2495の1又は複数は、メモリ(例えば、DRAM)チップレットであり得る。電力及び/又はパッケージアセンブリ2494を使用する製品を対象とした性能に基づいて、パッケージアセンブリ2494に対して異なるメモリ密度は選択されることができる。更に、電力及び/又は製品を対象とした性能に基づいて、アセンブリ時に異なる数のタイプの機能ユニットを備えたロジックチップレットは選択されることができる。更に、異なるタイプのIPロジックコアを含むチップレットは交換可能なチップレットスロットに挿入されることができるため、異なる技術のIPブロックを混合及び一致できるハイブリッドプロセッサ設計が可能になる。
[チップ集積回路の例示的なシステム]
【0333】
図25~
図26Bは、本明細書で説明される様々な実施形態による、1又は複数のIPコアを使用して製造され得る例示的な集積回路及び関連付けられるグラフィックプロセッサを示す。図示されているものに加えて、追加のグラフィックプロセッサ/コア、周辺機器インタフェースコントローラ、又は汎用プロセッサコアを含む他のロジック及び回路が含まれ得る。
【0334】
図25は、一実施形態による、1又は複数のIPコアを使用して製造され得るチップ集積回路2500上の例示的なシステムを示すブロック図である。例示的な集積回路2500は、1又は複数のアプリケーションプロセッサ2505(例えば、CPU)、少なくとも1つのグラフィックプロセッサ2510を含み、更に、イメージプロセッサ2515及び/又はビデオプロセッサ2520を含み得、それらのいずれも、同じ又は複数の異なる設計施設からのモジュールIPコアとし得る。集積回路2500は、USBコントローラ2525、UARTコントローラ2530、SPI/SDIOコントローラ2535、及びI
2S/I
2Cコントローラ2540を含む周辺機器又はバスロジックを含む。更に、集積回路は、高精細度マルチメディアインタフェース(HDMI(登録商標))コントローラ2550及びモバイル業界プロセッサインタフェース(MIPI)ディスプレイインタフェース2555のうちの1又は複数に連結されたディスプレイデバイス2545を含むことができる。ストレージは、フラッシュメモリ及びフラッシュメモリコントローラを含むフラッシュメモリサブシステム2560によって提供され得る。SDRAM又はSRAMメモリデバイスにアクセスするために、メモリコントローラ2565を介してメモリインタフェースを提供され得る。いくつかの集積回路は、埋め込みセキュリティエンジン2570を更に含む。
【0335】
図26A~26Bは、本明細書で説明される実施形態による、SoC内で使用するための例示的なグラフィックプロセッサを示すブロック図である。
図26Aは、一実施形態による、1又は複数のIPコアを使用して製造され得るチップ集積回路のシステムの例示的なグラフィックプロセッサ2610を示す。
図26Bは、一実施形態による、1又は複数のIPコアを使用して製造され得るシステムオンチップ集積回路のシステムの追加の例示的なグラフィックプロセッサ2640を示す。
図26Aのグラフィックプロセッサ2610は、低電力のグラフィックプロセッサコアの例である。
図26Bのグラフィックプロセッサ2640は、より高性能なグラフィックプロセッサコアの例である。グラフィックプロセッサ2610、2640の各々は、
図25のグラフィックプロセッサ2510の変形とすることができる。
【0336】
図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で提供されるフラグメントシェーダプログラムを実行するように最適化され、これは、Direct 3D APIで提供される画素シェーダプログラムと類似の動作を実行するために使用され得る。
【0337】
グラフィックプロセッサ2610は更に、1又は複数のメモリ管理ユニット(MMU)2620A~2620B、キャッシュ2625A~2625B、及び回路相互接続2630A~2630Bを含む。1又は複数のMMU2620A~2620Bは、頂点プロセッサ2605及び/又はフラグメントプロセッサ2615A~2615Nを含む、グラフィックプロセッサ2610の仮想アドレスから物理アドレスへのマッピングを提供し、1又は複数のキャッシュ2625A~2625Bに格納された頂点又は画像/テクスチャデータに加えて、メモリに格納された頂点又は画像/テクスチャデータを参照し得る。一実施形態において、1又は複数のMMU2620A~2620Bは、
図25の1又は複数のアプリケーションプロセッサ2505、イメージプロセッサ2515、及び/又はビデオプロセッサ2520に関連付けられた1又は複数のMMUを含む、システム内の他のMMUと同期され得るため、各プロセッサ2505-2520が共有又は統合仮想メモリシステムに加わることができる。実施形態による、1又は複数の回路相互接続2630A~2630Bにより、グラフィックプロセッサ2610は、SoCの内部バスを介して、又は直接接続を介して、SoC内の他のIPコアとインタフェースすることができ可能になる。
【0338】
図26Bに示されるように、グラフィックプロセッサ2640は、
図26Aのグラフィックプロセッサ2610の1又は複数のMMU2620A~2620B、キャッシュ2625A~2625B、及び回路相互接続2630A~2630Bを含む。グラフィックプロセッサ2640には、1又は複数のシェーダコア2655A-2655N(例えば、2655A、2655B、2655C、2655D、2655E、2655Fから2655N-1、2655Nまで)が含まれ、これは、単一コア又はタイプ又はコアが、頂点シェーダ、フラグメントシェーダ、及び/又は計算シェーダを実装するシェーダプログラムコードを含む、全てのタイプのプログラマブルシェーダコードを実行できる統合シェーダコアアーキテクチャを提供する。存在するシェーダコアの正確な数は、実施形態及び実装態様の間で変わることができる。更に、グラフィックプロセッサ2640は、スレッドディスパッチャとして機能し、実行スレッドを1又は複数のシェーダコア2655A~2655N及びタイル化ユニット2658にディスパッチして、タイルベースのレンダリングのタイル化動作を加速する、コア間タスクマネージャー2645を含み、シーンのレンダリング演算は、例えば、シーン内のローカル空間のコヒーレンシを活用したり、又は内部キャッシュの使用を最適化したりするために、画像空間で細分化される。
【0339】
図27Aは、一実施形態による、畳み込み層2700を示す。畳み込みニューラルネットワーク(CNN)の畳み込み層2700の場合、畳み込み層2700への入力データ2710は、H*W*Cテンソルとして示され得、H、W及びCは、それぞれ、入力データ2710の高さ、幅及びチャネル数を表す。カーネル2730で入力データ2710に対して畳み込み演算が実行され得、出力2750を得る。一実施形態において、カーネル2730は、いくつかのK*K*Cテンソルとして示され得、カーネル2730の各々の高さ及び幅は同じであり、Kで示される。一実施形態において、カーネルの高さ及び幅はまた異なり得る。畳み込み層2700の出力2750は、起動と称される場合がある。H、W、K、Cは、異なる畳み込み層に対して異なり得ることに留意されたい。入力データ2710(つまり、H*W*Cテンソル)及びカーネル2730のサイズ及び数は、これに限定されることはないが例示的である。以前の畳み込み層の起動が入力として現在の畳み込み層2700に入る場合、現在の畳み込み層2700の入力はまた、起動と称される場合がある。
【0340】
畳み込み層2700の演算中、メモリ効率を改善することは、CNNの計算性能を高めるために有益であることは、当業者には一般的に既知である。メモリ効率には、少なくともメモリ負荷効率が含まれる。一例として、メモリ負荷効率は、メモリコストに対する畳み込み層の運用コストを示すメモリ効率であり得る。
【0341】
CNNの異なる畳み込み層の場合、入力データ2710のチャネル数Cがそれに応じて増加し得る一方で、演算がより深い層に入る場合、入力データ2710のサイズH*Wは減少し得る。当業者が理解するであろうように、3x3行列及び1x1行列は、カーネル2730として当技術分野で一般的に使用されている。通常、入力データ2710のサイズは、浅い層のカーネル2730のサイズよりはるかに大きくなり得る。入力データ2710は、より浅い層で算出された場合、カーネル2730よりも多くのメモリを消費し得、一方、入力データ2710は、より深い層で算出された場合、カーネル2730よりも少ないメモリを消費し得る。入力データ2710及びカーネル2730のメモリコストは、異なる畳み込み層によって変わり得、メモリ効率を改善するためにメモリコスト節約される必要がある。
【0342】
低いメモリ効率につながり得る高いメモリコストの技術的問題を解決するために、実施形態は、メモリ効率を改善するために起動及びカーネルを動的に分割することに関する。
【0343】
図27Bは、一実施形態による、入力データ及びカーネルに対する畳み込み演算の実行を示す。畳み込み層2700の入力データ2710(以下、起動2710と称され)は、複数の起動グループ2712-1、2712-2、…、2712-kに分割され得、起動2710の起動グループの数は、kによって示される。複数の起動グループ2712-1、2712-2、…、2712-kは、起動2710より小さいサイズを有し得、各起動グループは、起動2710の一部に対応する。当業者は、入力データを複数の起動グループに分割するために使用され得る様々な分割戦略があることを理解するであろう。起動グループの数は示される数に限定されることはないことに留意されたい。
【0344】
畳み込み層2700内のカーネル2730は、複数のカーネルグループ2732-1、2732-2、…、2732-wに分割され得、カーネル2730内のカーネルグループの数は、wで示される。複数のカーネルグループ2732-1、2732-2、…、2732-wの各々は、複数のカーネル2730を含み得る。カーネルグループ内の複数のカーネル2730の数がnであると仮定する。当業者は、カーネルを複数のカーネルグループに分割するために使用され得る様々な分割戦略があることを理解するであろう。カーネルグループの数及び各カーネルグループ内のカーネルの数は、示されている数に限定されることはないことに留意されたい。
【0345】
図27A及び
図27Bを参照すると、畳み込み層2700の演算中に、複数の起動グループ2712-1、2712-2、…、2712-kの各々に対して、複数のカーネルグループ2732-1、2732-2、…、2732-wの各々で畳み込み演算は実行され得る。
【0346】
一実施形態において、矢印2722-1、2722-2、…、2722-kは、カーネルグループ2732-1を使用して複数の起動グループ2712-1、2712-2、…、2712-kの各々に対して実行された畳み込み演算を示し得る。矢印2722-1に対応する時間t1において、カーネルグループ2732-1を使用して起動グループ2712-1に対して畳み込み演算は実行され得、対応して複数の結果を生成する。矢印2722-2に対応する時間t2において、カーネルグループ2732-1を使用して起動グループ2712-2に対して畳み込み演算は実行され得、対応して複数の結果を生成する。カーネルグループ2732-1を使用する演算は、矢印2722-kに対応する時間tkに対応して複数の結果を生成するために、カーネルグループ2732-1を使用して起動グループ2712-kに対して畳み込み演算が実行され得るまで継続し得る。
【0347】
次に、演算は、カーネルグループ2732-2を使用して、複数の起動グループ2712-1、2712-2、…、2712-kの各々に対して実行される畳み込み演算を継続し得る。
【0348】
カーネルグループ2732-wを使用して複数の起動グループ2712-1、2712-2、…、2712-k毎に畳み込み演算が実行された後、畳み込み層2700に対する演算が完了する。畳み込み層2700の演算中に得られた全ての結果は、畳み込み層2700の出力2750を形成するために一緒に組み合わせられ得る。
【0349】
複数の起動グループが分割され、複数のカーネルグループが分割されることにより、各カーネルグループ内の各カーネルを使用して、起動グループに対して畳み込み演算は実行され得る。また、畳み込み演算は、各起動グループのカーネルグループ内の複数のカーネルを使用して実行され得る。数k及びnは、CNNの異なる畳み込み層に対して動的に選択され得る。起動及びカーネルを動的に分割することで、畳み込み層のメモリコストを大幅に削減し、メモリ効率を改善するのを助け得る。詳細については、以下で検討されるであろう。
【0350】
図28は、一実施形態による、機械学習のための方法を示す。一実施形態において、機械学習のための方法2800は、計算エンジンによって実行され得る。一実施形態において、方法2800は、グラフィック処理ユニット、グラフィックマルチプロセッサ、グラフィックプロセッサ、CPU、又はネットワークプロセッサによって実行され得る。一実施形態において、方法2800は、CNNの訓練又は推論中に実行され得る。
【0351】
ブロック2802において、入力データに含まれる複数の起動グループは、計算エンジン上に実装された畳み込みニューラルネットワーク(CNN)の畳み込み層によって受信され得る。畳み込み層は1又は複数のカーネルグループを含み得、1又は複数のカーネルグループは各々複数のカーネルを含み得る。一実施形態において、入力データは、CNNへの入力から得られ得る。一実施形態において、入力データは、前の畳み込み層の出力から得られ得る。
【0352】
ブロック2804で、複数のメモリ効率測定基準は、複数の起動グループの起動グループの数及び複数のカーネルのカーネルの数に基づいて決定され得る。一実施形態において、複数の起動グループの起動グループの数の下限値は、例えば、計算エンジンに連結されたレジスタ及びバッファの容量などの記憶容量に関連付けられ得る。一実施形態において、複数のカーネルのカーネルの数の上限値は、例えば、ALUの数、サイズ、及びコンピューティング機能などの計算エンジン上の算術論理ユニット(ALU)に関連付けられ得る。
【0353】
ブロック2806では、複数のメモリ効率測定基準の中の最適なメモリ効率測定基準に関連付けられる、第1最適数の起動グループ及び第2最適数のカーネルは選択され得る。
【0354】
ブロック2808では、第1最適数及び第2最適数に基づいて、畳み込み演算は入力データに対して実行され得る。第1最適数及び第2最適数を利用することにより、畳み込み層のメモリ効率が改善され得る。一実施形態において、複数のメモリ効率測定基準は、メモリ負荷効率を示し得る。
【0355】
一実施形態において、第1最適数及び第2最適数の選択は、CNNの異なる畳み込み層に対して独立して実行され得る。一実施形態において、それぞれp1及びp2として示される第1最適数及び第2最適数が畳み込み層に対して選択された後、畳み込み演算がこの層に対して実行され得る。次に、CNNの演算は別の畳み込み層に対して継続し得、それぞれp1'及びp2'として示される別の第1最適数及び別の第2最適数がこの層に対して選択され得る。数値p1'は、p1よりも大きい、等しい、又は小さくなり得る。数値p2'は、p2よりも大きい、等しい、又は小さくなり得る。方法2800は、CNNの任意の1又は複数の畳み込み層に適用され得、1又は複数の畳み込み層毎に入力データ及びカーネルは、畳み込み層の選択された第1最適数及び第2最適数に基づいて動的に分割され得る。
【0356】
図29は、一実施形態による、機械学習のための方法を示す。一実施形態において、機械学習のための方法2900は、計算エンジンによって実行され得る。一実施形態において、方法2900は、グラフィック処理ユニット、グラフィックマルチプロセッサ、グラフィックプロセッサ、CPU、又はネットワークプロセッサによって実行され得る。一実施形態において、方法2900は、CNNの訓練又は推論中に実行され得る。
【0357】
ブロック2902において、入力データに含まれる複数の起動グループは、計算エンジン上に実装された畳み込みニューラルネットワーク(CNN)の畳み込み層によって受信され得る。畳み込み層は1又は複数のカーネルグループを含み得、1又は複数のカーネルグループは各々複数のカーネルを含み得る。一実施形態において、入力データは、CNNへの入力から得られ得る。一実施形態において、入力データは、前の畳み込み層の出力から得られ得る。
【0358】
ブロック2904において、起動スパース性及びカーネルスパース性が、計算エンジンによって受信され得る。一実施形態において、起動スパース性は、CNNへの入力から得られ得る。一実施形態において、起動スパース性は、前の畳み込み層の出力から得られ得る。一実施形態において、カーネルスパース性は、CNNから決定され得る。
【0359】
入力データの各データ要素及びカーネルの各データ要素は、畳み込み層の演算に使用する必要があるが、値ゼロのいくつかのデータ要素は、演算中に値ゼロの結果を生成し得る。これらのゼロ値のデータ要素は、実際に算出する必要はない場合がある。入力データ及びカーネルにゼロ値のデータ要素がある場合、演算のコンピューティングリソースは節約され得る。入力データの合計データ要素の数に対するゼロ値のデータ要素の数の比率は、起動スパース性と称される場合がある。カーネルの合計データ要素の数に対するゼロ値のデータ要素の数の比率は、カーネルスパース性と称される場合がある。利用されているコンピューティングリソースの量又は運用コストは、起動スパース性及びカーネルスパース性に影響され得る。
【0360】
単一畳み込み層では、カーネルスパース性は固定され得るが、起動スパース性は異なる入力データにより変わり得る。異なる畳み込み層では、異なるカーネルは、異なる目的に対して異なるサイズ及び値を有し得るため、カーネルスパース性は変わり得る。従って、起動スパース性及びカーネルスパース性を使用して、畳み込み層のメモリ効率を改善すると有利であり得る。
【0361】
畳み込み層の演算中、メモリ効率を示すためのメモリ効率測定基準は、次の式
(m×n×k×Sa×Sk)/(m×k×Sa+m×n×Sk)…(1)
によって決定され得、mは入力データのチャネル数であり、nは複数のカーネルのカーネルの数であり、kは複数の起動グループの起動グループの数であり、Saは起動スパース性であり、Skはカーネルスパース性である。共通のmを除去する場合、上の式は
(n×k×Sa×Sk)/(k×Sa+n×Sk)…(2)
のように表されるであろう。メモリ効率測定基準は、k、n、Sa、及びSkに基づいて決定され得る。
【0362】
一実施形態において、CNNの訓練中に、例示的な入力データがCNNに供給され得、起動スパース性及びカーネルスパース性は、計算エンジン上に実装されたコンパイラによって決定され得る。一実施形態において、CNNの推論中に、起動スパース性は、計算エンジン上に実装されたドライバによって決定され得、カーネルスパース性は、ドライバによって受信され得る。
【0363】
ブロック2906で、複数のメモリ効率測定基準は、複数の起動グループの起動グループの数及び複数のカーネルのカーネルの数、及び起動スパース性及びカーネルスパース性に基づいて決定され得る。一実施形態において、複数の起動グループの起動グループの数の下限値は、例えば、計算エンジンに連結されたレジスタ及びバッファの容量などの記憶容量に関連付けられ得る。一実施形態において、複数のカーネルのカーネルの数の上限値は、例えば、ALUの数、サイズ、及びコンピューティング機能などの計算エンジン上の算術論理ユニット(ALU)に関連付けられ得る。
【0364】
一実施形態において、複数のメモリ効率測定基準は、上記の式
(n×k×Sa×Sk)/(k×Sa+n×Sk)
の計算によって導出され得、nは複数のカーネルのカーネルの数、kは複数の起動グループの起動グループの数、Saは起動スパース性であり、Skはカーネルスパース性である。
【0365】
ブロック2908では、複数のメモリ効率測定基準の中の最適なメモリ効率測定基準に関連付けられる、第1最適数の起動グループ及び第2最適数のカーネルは選択され得る。
【0366】
ブロック2910で、第1最適数及び第2最適数に基づいて、畳み込み演算は入力データに対して実行され得る。第1最適数及び第2最適数を利用することにより、畳み込み層のメモリ効率が改善され得る。一実施形態において、複数のメモリ効率測定基準は、メモリ負荷効率を示し得る。
【0367】
一実施形態において、第1最適数及び第2最適数の選択は、CNNの異なる畳み込み層に対して独立して実行され得る。一実施形態において、それぞれp1及びp2として示される第1最適数及び第2最適数が畳み込み層に対して選択された後、畳み込み演算がこの層に対して実行され得る。次に、CNNの演算は別の畳み込み層に対して継続し得、それぞれp1'及びp2'として示される別の第1最適数及び別の第2最適数がこの層に対して選択され得る。数値p1'は、p1よりも大きい、等しい、又は小さくなり得る。数値p2'は、p2よりも大きい、等しい、又は小さくなり得る。方法2900は、CNNの任意の1又は複数の畳み込み層に適用され得、1又は複数の畳み込み層毎に入力データ及びカーネルは、畳み込み層の選択された第1最適数及び第2最適数に基づいて動的に分割され得る。
【0368】
様々な実施形態の一部は、コンピュータプログラム製品として提供され得、これは、そこに格納されたコンピュータプログラム命令を有すコンピュータ可読媒体を含み得、これは、特定の実施形態によるプロセスを実行するために1又は複数のプロセッサによる実行のためにコンピュータ(又は他の電子デバイス)をプログラミングするために使用され得る。コンピュータ可読媒体は、限定されることはないが、磁気ディスク、光ディスク、読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、消去可能プログラマブル読み出し専用メモリ(EPROM)、電気的に消去可能プログラマブル読み出し専用メモリ(EEPROM)、磁気又は光カード、フラッシュメモリ、又は電子命令を格納するのに好適なその他のタイプのコンピュータ可読媒体を含み得る。更に、実施形態はまた、コンピュータプログラム製品としてダウンロードされ得、プログラムは、リモートコンピュータから要求コンピュータに転送され得る。いくつかの実施形態において、非一時的なコンピュータ可読記憶媒体は、プロセッサによって実行された場合、プロセッサに特定の動作を実行させる命令のシーケンスを表すデータをそこに格納している。
【0369】
多くの方法はこれらの最も基本的な形で説明されているが、プロセスは方法のいずれかに追加又は削除されることができ、情報は本実施形態の基本的な範囲から逸脱することなく、説明されたメッセージのいずれかから追加又は削除されることができる。多くの更なる修正及び適合が行われることができることは、当業者には明らかであろう。特定の実施形態は、概念を限定するためではなく、それを図示するために提供される。実施形態の範囲は、上に提供された固有の例によってではなく、以下の特許請求の範囲によってのみ判断されるべきである。
【0370】
要素「A」が要素「B」に又は要素「B」と連結されると言われる場合、要素Aは直接的に要素Bに連結され得、又は例えば要素Cを介して間接的に連結され得る。明細書又は特許請求の範囲に、コンポーネント、機能、構造、プロセス、又は特性Aがコンポーネント、機能、構造、プロセス、又は特性Bを「引き起こす」と記載されている場合、「A」が少なくとも「B」の部分的な原因であることを意味するが、また「B」を引き起こすのに役立つ少なくとも1つの他のコンポーネント、機能、構造、プロセス、又は特性があり得る。明細書は、コンポーネント、機能、構造、プロセス、又は特性が含まれ「得る(may)」、「可能性がある(might)」、又は「ことができる(could)」を示している場合、その特定のコンポーネント、機能、構造、プロセス、又は特性は含まれるのに必要とされない。明細書又は請求項が「a」又は「an」要素を指している場合、これは、説明されている要素の1つだけがあることを意味するものではない。
【0371】
実施形態は、実装態様又は例である。本明細書における「実施形態」、「一実施形態」、「いくつかの実施形態」、又は「他の実施形態」の参照は、実施形態に関連して説明される特定の特徴、構造、又は特性が少なくともいくつかの実施形態に含まれるが、必ずしも全ての実施形態においてないことを意味する。「実施形態」、「一実施形態」、又は「いくつかの実施形態」の様々な出現は、必ずしも全てが同じ実施形態を指しているわけではない。例示的な実施形態の上記の説明では、開示を簡素化し、様々な新規の態様の1又は複数の理解を助ける目的のために、様々な特徴が単一実施形態、図、又はこれらの説明に一緒にグループ化されることがあることを理解されたい。しかし、この開示の方法は、請求された実施形態が、各請求項に明示的に記載されているよりも多くの特徴を要求するという意図を反映するものとして解釈されるべきではない。むしろ、以下の特許請求の範囲が反映するように、新規の態様は、前述の単一開示された実施形態の全ての特徴により少ない特徴にある。従って、特許請求の範囲は、この説明に明示的に組み込まれ、各請求項は、別個の実施形態として自立している。
【0372】
以下の節及び/又は例は、更なる実施形態又は例に関する。実施例の詳細は、1又は複数の実施形態のどこでも使用され得る。異なる実施形態又は例の様々な特徴は、様々な異なる用途に適合するように含まれるいくつかの特徴及び除外される他の特徴と様々に組み合わられ得る。例は、例えば、方法、方法の機能を実行するための手段などの主題と、機械によって実行される場合、本明細書で説明される実施形態及び例によるハイブリッド通信を容易にするための方法又は装置又はシステムの動作を機械に実行させる命令を含む少なくとも1つの機械可読媒体を含み得る。
【0373】
更なる例
【0374】
例1は、計算エンジン上に実装された畳み込みニューラルネットワーク(CNN)の畳み込み層によって、入力データに含まれる複数の起動グループを受信する段階であって、畳み込み層は1又は複数のカーネルグループを含み、1又は複数のカーネルグループは各々複数のカーネルを含む、段階と、複数の起動グループの起動グループの数及び複数のカーネルのカーネルの数に基づいて複数のメモリ効率測定基準を決定する段階と、複数のメモリ効率測定基準の中の最適なメモリ効率測定基準に関連付けられている第1最適数の起動グループ及び第2最適数のカーネルを選択する段階と、第1最適数及び第2最適数に基づいて、入力データに対して畳み込み演算を実行するする段階と、を含む、機械学習を実行する計算エンジンにおける方法を含む。
【0375】
例2は、例1の主題を含み、起動スパース性及びカーネルスパース性を受信することを更に含み、複数のメモリ効率測定基準の決定は、起動スパース性及びカーネルスパース性に更に基づく。
【0376】
例3は例2の主題を含み、複数のメモリ効率測定基準は次の式
(n×k×Sa×Sk)/(k×Sa+n×Sk)
の計算によって導出され、nは複数のカーネルのカーネルの数であり、kは複数の起動グループの起動グループの数であり、Saは起動スパース性であり、Skはカーネルスパース性である。
【0377】
例4は、例1の主題を含み、第1最適数及び第2最適数の選択は、CNNの異なる畳み込み層に対して独立して実行される。
【0378】
例5は、例1の主題を含み、複数の起動グループの起動グループの数の下限値が、計算エンジンに連結されたレジスタ又はバッファに関連付けられる。
【0379】
例6は、例1の主題を含み、複数のカーネルのカーネルの数の上限値が、計算エンジン上の算術論理ユニット(ALU)に関連付けられる。
【0380】
例7は、例1の主題を含み、複数のメモリ効率測定基準は、メモリ負荷効率を示す。
【0381】
例8は例1の主題を含み、方法はCNNの訓練又は推論中に実装される。
【0382】
例9は、入力データに含まれる複数の起動グループと、各々が畳み込みニューラルネットワーク(CNN)の畳み込み層に複数のカーネルを含む1又は複数のカーネルグループとを格納するデータストレージデバイスと、データストレージデバイスに連結された1又は複数のプロセッサであって、CNNは、1又は複数のプロセッサ上に実装される1又は複数のプロセッサとを備え、1又は複数のプロセッサは、畳み込み層によって、複数の起動グループを受信することであって、畳み込み層は、1又は複数のカーネルグループが含む、受信することと、複数の起動グループの起動グループの数及び複数のカーネルのカーネルの数に基づいて複数のメモリ効率測定基準を決定することと、複数のメモリ効率測定基準の中の最適なメモリ効率測定基準に関連付けられている第1最適数の起動グループ及び第2最適数のカーネルを選択することと、第1最適数及び第2最適数に基づいて、入力データに対して畳み込み演算を実行することと、を行う機械学習のための装置を含む。
【0383】
例10は、例9の主題を含み、1又は複数のプロセッサは、更に、起動スパース性及びカーネルスパース性を受信し、1又は複数のプロセッサは、起動スパース性及びカーネルスパース性に更に基づいて、複数のメモリ効率測定基準を決定する。
【0384】
例11は例10の主題を含み、複数のメモリ効率測定基準は次の式
(n×k×Sa×Sk)/(k×Sa+n×Sk)
の計算によって導出され、nは複数のカーネルのカーネルの数であり、kは複数の起動グループの起動グループの数であり、Saは起動スパース性であり、Skはカーネルスパース性である。
【0385】
例12は、例9の主題を含み、1又は複数のプロセッサは、CNNの異なる畳み込み層に対して独立して第1最適数及び第2最適数を選択する。
【0386】
例13は、例9の主題を含み、複数の起動グループの起動グループの数の下限値は、1又は複数のプロセッサに連結されたレジスタ又はバッファに関連付けられる。
【0387】
例14は、例9の主題を含み、複数のカーネルのカーネルの数の上限値は、1又は複数のプロセッサ上の算術論理ユニット(ALU)に関連付けられる。
【0388】
例15は、例9の主題を含み、複数のメモリ効率測定基準は、メモリ負荷効率を示す。
【0389】
例16は、例9の主題を含み、1又は複数のプロセッサは、グラフィックプロセッサを含む。
【0390】
例17は、例1~8のいずれかに請求されるような方法を実行するための手段を含む機械学習のためのシステムを含む。
【0391】
例18は、コンピューティングデバイス上で実行された場合に、例1~8のいずれかに請求される方法を実行するための複数の命令を含む少なくとも1つのコンピュータ可読媒体を含む。
【0392】
上記の説明及び図面は、限定的な意味ではなく例示的な意味でみなされるべきである。当業者は、添付の特許請求の範囲に記載される本発明のより広い趣旨及び範囲から逸脱することなく、本明細書に説明される実施形態に対して様々な修正及び変更が行われ得ることを理解するであろう。
(項目1)
機械学習を実行する計算エンジンにおける方法であって、
上記計算エンジン上に実装された畳み込みニューラルネットワーク(CNN)の畳み込み層によって、入力データに含まれる複数の起動グループを受信する段階であって、上記畳み込み層は1又は複数のカーネルグループを備え、上記1又は複数のカーネルグループは各々複数のカーネルを有し、1又は複数のカーネルグループは各々、複数のカーネル含む、段階と、
上記複数の起動グループの起動グループの数及び上記複数のカーネルのカーネルの数に基づいて複数のメモリ効率測定基準を決定する段階と、
上記複数のメモリ効率測定基準の中の最適なメモリ効率測定基準に関連付けられている第1最適数の起動グループ及び第2最適数のカーネルを選択する段階と、
上記第1最適数と上記第2最適数に基づいて、上記入力データに対して畳み込み演算を実行する段階と、
を備える、方法。
(項目2)
起動スパース性及びカーネルスパース性を受信する段階を更に備え、上記複数のメモリ効率測定基準を決定する上記段階は更に、上記起動スパース性及び上記カーネルスパース性に基づく、項目1に記載の方法。
(項目3)
上記複数のメモリ効率測定基準は、次の式
(n×k×Sa×Sk)/(k×Sa+n×Sk)
の計算によって導出され、
nは、上記複数のカーネルのカーネルの数であり、
kは、上記複数の起動グループの起動グループの数であり、
Saは上記起動スパース性であり、
Skは上記カーネルスパース性である、
項目2に記載の方法。
(項目4)
上記第1最適数及び上記第2最適数を選択する上記段階は、上記CNNの異なる畳み込み層について独立して実行される、
項目1に記載の方法。
(項目5)
上記複数の起動グループの起動グループの数の下限値が、上記計算エンジンに連結されたレジスタ又はバッファに関連付けられる、
項目1に記載の方法。
(項目6)
上記複数のカーネルのカーネルの数の上限値が、上記計算エンジン上の算術論理ユニット(ALU)に関連付けられる、
項目1に記載の方法。
(項目7)
上記複数のメモリ効率測定基準は、メモリ負荷効率を示す、
項目1に記載の方法。
(項目8)
上記方法は、上記CNNの訓練又は推論の間に実施される、
項目1に記載の方法。
(項目9)
機械学習のための装置であって、
入力データに含まれる複数の起動グループと、各々が畳み込みニューラルネットワーク(CNN)の畳み込み層に複数のカーネルを含む1又は複数のカーネルグループとを格納するデータストレージデバイスと、
上記データストレージデバイスに連結された1又は複数のプロセッサであって、上記CNNは上記1又は複数のプロセッサ上に実装される、1又は複数のプロセッサと、を備え、
上記1又は複数のプロセッサは、
上記畳み込み層により、上記複数の起動グループを受信することであって、上記畳み込み層は、上記1又は複数のカーネルグループを含む、受信することと、
上記複数の起動グループの起動グループの数及び上記複数のカーネルのカーネルの数に基づいて複数のメモリ効率測定基準を決定することと、
上記複数のメモリ効率測定基準の中の最適なメモリ効率測定基準に関連付けられている第1最適数の起動グループ及び第2最適数のカーネルを選択することと、
上記第1最適数及び上記第2最適数に基づいて、上記入力データに対して畳み込み演算を実行することと
を行う
装置。
(項目10)
上記1又は複数のプロセッサは更に、
起動スパース性及びカーネルスパース性を受信し、上記1又は複数のプロセッサは、上記起動スパース性及び上記カーネルスパース性に更に基づいて、上記複数のメモリ効率測定基準を決定する、
項目9に記載の装置。
(項目11)
上記複数のメモリ効率測定基準は、次の式
(n×k×Sa×Sk)/(k×Sa+n×Sk)
の計算によって導出され、
nは、上記複数のカーネルのカーネルの数であり、
kは、上記複数の起動グループの起動グループの数であり、
Saは上記起動スパース性であり、
Skは上記カーネルスパース性である、
項目10に記載の装置。
(項目12)
上記1又は複数のプロセッサは、上記CNNの異なる畳み込み層について独立して上記第1最適数及び上記第2最適数を選択する、
項目9に記載の装置。
(項目13)
上記複数の起動グループの起動グループの数の下限値が、上記1又は複数のプロセッサに連結されたレジスタ又はバッファに関連付けられる、
項目9に記載の装置。
(項目14)
上記複数のカーネルのカーネルの数の上限値が、上記1又は複数のプロセッサ上の算術論理ユニット(ALU)に関連付けられる、
項目9に記載の装置。
(項目15)
上記複数のメモリ効率測定基準は、メモリ負荷効率を示す、
項目9に記載の装置。
(項目16)
上記1又は複数のプロセッサは、グラフィックプロセッサを有する、
項目9に記載の装置。
(項目17)
項目1~8のいずれかに請求される方法を実行するための手段を備える、機械学習のためのシステム。
(項目18)
コンピューティングデバイス上で実行された場合に、項目1から8のいずれかに請求される方法を実行するための複数の命令を備える、少なくとも1つのコンピュータ可読媒体。