(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024138299
(43)【公開日】2024-10-08
(54)【発明の名称】マルチタイルメモリ管理
(51)【国際特許分類】
G06F 15/80 20060101AFI20241001BHJP
G06F 12/0813 20160101ALI20241001BHJP
【FI】
G06F15/80
G06F12/0813
【審査請求】有
【請求項の数】20
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2024102405
(22)【出願日】2024-06-25
(62)【分割の表示】P 2021544279の分割
【原出願日】2020-03-14
(31)【優先権主張番号】62/819,337
(32)【優先日】2019-03-15
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】62/819,435
(32)【優先日】2019-03-15
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】62/819,361
(32)【優先日】2019-03-15
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】アップ、アビシェーク アール.
(72)【発明者】
【氏名】コーカー、アルトゥグ
(72)【発明者】
【氏名】アナンタラマン、アラビンド
(72)【発明者】
【氏名】ウルド-アハメド-ヴァル、エルムスタファ
(72)【発明者】
【氏名】アンドレイ、ヴァレンティン
(72)【発明者】
【氏名】ギャロッポ フォン ボリーズ、ニコラス
(72)【発明者】
【氏名】ジョージ、ヴァルギース
(72)【発明者】
【氏名】マックファーソン、マイク
(72)【発明者】
【氏名】マイユラン、スブラマニアム
(72)【発明者】
【氏名】レイ、ジョイディープ
(72)【発明者】
【氏名】ストリラマッサルマ、ラクシュミナラヤナン
(72)【発明者】
【氏名】ヤヌス、スコット
(72)【発明者】
【氏名】インスコ、ブレント
(72)【発明者】
【氏名】ランガナサン、ヴァサンス
(72)【発明者】
【氏名】シンハ、カマル
(72)【発明者】
【氏名】ハンター、アーサー
(72)【発明者】
【氏名】スルティ、プラスーンクマール
(72)【発明者】
【氏名】パファー、デーヴィッド
(72)【発明者】
【氏名】ヴァレリオ、ジェイムズ
(72)【発明者】
【氏名】シャー、アンカー エヌ.
(57)【要約】 (修正有)
【課題】マルチタイルメモリ管理のための汎用グラフィックス処理ユニットを介したデータ処理方法及び装置を提供する。
【解決手段】装置は、キャッシュメモリと、高帯域幅メモリと、メモリサイドキャッシュ2915に通信可能に連結されるシェーダコア2910を含む。シェーダコアは、キャッシュメモリ内のインメモリデータベースから抽出され、かつ、第1のビット長を有する第1のデータ要素を解凍して、第1のビット長より大きい第2のビット長を有する第2のデータ要素を生成する処理要素を有する。装置はまた、前記データ要素を、インメモリデータベースのクエリで提供される目標値と比較する算術論理ユニット(ALU)2920を備える。
【選択図】
図29
【特許請求の範囲】
【請求項1】
グラフィックスプロセッサであって、
インタポーザと、
前記インタポーザと連結される第1のチップレットであって、グラフィックス処理リソースおよび前記グラフィックス処理リソースと連結されるインターコネクトネットワークを含む第1のチップレットと、
前記インターコネクトネットワークを介して前記グラフィックス処理リソースと連結されるキャッシュ回路と、
前記インタポーザを介して前記第1のチップレットと連結される第2のチップレットであって、メモリサイドキャッシュおよび前記メモリサイドキャッシュと連結されるメモリコントローラを含む第2のチップレットと、
を備え、
前記メモリコントローラは、高帯域幅メモリ(HBM)デバイスへのアクセスを可能にするように構成され、
前記メモリサイドキャッシュは、前記メモリコントローラを介して実行されるメモリアクセスと関連付けられるデータをキャッシュするように構成され、
前記キャッシュ回路は、前記グラフィックス処理リソースとチップレットインタフェースとの間に論理的に位置する、
グラフィックスプロセッサ。
【請求項2】
前記キャッシュ回路は、レベル2(L2)キャッシュを含む、請求項1に記載のグラフィックスプロセッサ。
【請求項3】
前記レベル2キャッシュは、前記インターコネクトネットワークを介してインターコネクトされるノードを有する分散型キャッシュである、請求項2に記載のグラフィックスプロセッサ。
【請求項4】
前記メモリサイドキャッシュは、レベル3(L3)キャッシュを含む、請求項1から3のいずれか一項に記載のグラフィックスプロセッサ。
【請求項5】
前記インタポーザ、第1のチップレット、および第2のチップレットは、2.5次元(2.5D)構成を有する、請求項1から4のいずれか一項に記載のグラフィックスプロセッサ。
【請求項6】
前記インタポーザは、アクティブインタポーザである、請求項5に記載のグラフィックスプロセッサ。
【請求項7】
前記グラフィックス処理リソースは、単一命令多重スレッド(SIMT)アーキテクチャを有する複数の機能ユニットを含む、請求項1から6のいずれか一項に記載のグラフィックスプロセッサ。
【請求項8】
前記複数の機能ユニットは、汎用グラフィックスプロセッサコアおよびテンソルコアを含む、請求項7に記載のグラフィックスプロセッサ。
【請求項9】
前記複数の機能ユニットは、レイトレーシングコアを含む、請求項7または8に記載のグラフィックスプロセッサ。
【請求項10】
前記グラフィックス処理リソースは、単一命令多重データ(SIMD)アーキテクチャを有する複数の機能ユニットを含む、請求項1から6のいずれか一項に記載のグラフィックスプロセッサ。
【請求項11】
システムインタフェースへのインターコネクトと、
前記インターコネクトと連結されるマルチダイグラフィックスプロセッサと、
を備えるシステムであって、
前記マルチダイグラフィックスプロセッサは、
インタポーザと、
前記インタポーザと連結される第1のチップレットであって、グラフィックス処理リソースおよび前記グラフィックス処理リソースと連結されるインターコネクトネットワークを含む第1のチップレットと、
前記インターコネクトネットワークを介して前記グラフィックス処理リソースと連結されるキャッシュ回路と、
前記インタポーザを介して前記第1のチップレットと連結される第2のチップレットであって、メモリサイドキャッシュおよび前記メモリサイドキャッシュと連結されるメモリコントローラを含む第2のチップレットと、
を有し、
前記メモリコントローラは、高帯域幅メモリ(HBM)デバイスへのアクセスを可能にするように構成され、
前記メモリサイドキャッシュは、前記メモリコントローラを介して実行されるメモリアクセスと関連付けられるデータをキャッシュするように構成され、
前記キャッシュ回路は、前記グラフィックス処理リソースとチップレットインタフェースとの間に論理的に位置する、
システム。
【請求項12】
前記キャッシュ回路は、レベル2(L2)キャッシュを含む、請求項11に記載のシステム。
【請求項13】
前記レベル2キャッシュは、前記インターコネクトネットワークを介してインターコネクトされるノードを有する分散型キャッシュである、請求項12に記載のシステム。
【請求項14】
前記メモリサイドキャッシュは、レベル3(L3)キャッシュを含む、請求項11から13のいずれか一項に記載のシステム。
【請求項15】
前記インタポーザ、第1のチップレット、および第2のチップレットは、2.5次元(2.5D)構成を有する、請求項11から14のいずれか一項に記載のシステム。
【請求項16】
前記インタポーザは、アクティブインタポーザである、請求項15に記載のシステム。
【請求項17】
前記グラフィックス処理リソースは、単一命令多重スレッド(SIMT)アーキテクチャを有する複数の機能ユニットを含む、請求項11から16のいずれか一項に記載のシステム。
【請求項18】
前記複数の機能ユニットは、汎用システムコアおよびテンソルコアを含む、請求項17に記載のシステム。
【請求項19】
前記複数の機能ユニットは、レイトレーシングコアを含む、請求項17または18に記載のシステム。
【請求項20】
前記グラフィックス処理リソースは、単一命令多重データ(SIMD)アーキテクチャを有する複数の機能ユニットを含む、請求項11から16のいずれか一項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
[優先権の主張及び関連出願の相互参照]
本願は関連して、35 U.S.C.119(e)のもと、2019年3月15日に出願され、Abhishek Appu他によるグラフィックス処理と題する米国仮出願第62/819,337号(代理人整理番号AC0271-Z)、2019年3月15日に出願され、Lakshminarayanan Striramassarma他によるグラフィックスデータ処理と題する第62/819,435号(代理人整理番号AC0285-Z)、及び、2019年3月15日に出願され、Subramaniam Maiyuran他によるキャッシュアクセスのレイテンシを減らすためにキャッシュを分割するためのシステム及び方法と題する第62/819,361号(代理人整理番号AC0286-Z)に対する利益及び優先権の利益を主張し、すべての内容が参照により本明細書に組み込まれる。
【0002】
[分野]
本開示は、概してデータ処理に関し、より具体的には、汎用グラフィックス処理ユニットを介したデータ処理に関する。
【背景技術】
【0003】
現在の並列グラフィックスデータ処理には、例えば、線形補間、テセレーション、ラスタライズ、テクスチャマッピング、デプステストなどといった特定の処理をグラフィックスデータに対し実行するように開発されたシステム及び方法が含まれる。従来では、グラフィックスプロセッサは、グラフィックスデータを処理するための固定機能計算ユニットを用いていたが、しかしながら、近年では、グラフィックスプロセッサの一部がプログラム可能となり、そのようなプロセッサが、頂点及びフラグメントデータを処理するために、より広い種類の演算をサポートできるようになった。
【0004】
性能をさらに向上させるためには、通常、グラフィックスプロセッサは、グラフィックスパイプラインの異なる部分全体にわたって、できるだけ多くのグラフィックスデータを並列に処理することを試みるパイプライン方式などの処理技術を実装する。単一命令、複数スレッド(SIMT)アーキテクチャを有する並列グラフィックスプロセッサは、グラフィックスパイプラインにおける並列処理の量を最大化させるように設計されている。SIMTアーキテクチャにおいては、処理効率を向上させるべく、並列スレッドのグループが、できるだけ頻繁に、複数のプログラム命令を一緒に同期して実行することを試みる。SIMTアーキテクチャに関するソフトウェア及びハードウェアの一般的な概要は、Shane Cook著、CUDAプログラミング、第3章、37~51ページ(2013)において見つけることができる。
【図面の簡単な説明】
【0005】
本実施形態の上述した特徴が詳細に理解できるように、上記の簡単に要約した実施形態のより具体的な説明は、実施形態を参照することによって得られるかもしれないが、そのうちのいくつかは、添付の図面に図示される。しかしながら、添付の図面は、典型的な実施形態のみを示しており、したがって、その範囲に限定するものとみなされることはないことに留意されたい。
【0006】
【
図1】本明細書で説明される実施形態の1つ又は複数の態様を実施するように構成されるコンピュータシステムを示すブロック図である。
【0007】
【0008】
【
図3A】グラフィックスマルチプロセッサ及びマルチプロセッサベースのGPUのブロック図である。
【
図3B】グラフィックスマルチプロセッサ及びマルチプロセッサベースのGPUのブロック図である。
【
図3C】グラフィックスマルチプロセッサ及びマルチプロセッサベースのGPUのブロック図である。
【0009】
【
図4A】複数のGPUが複数のマルチコアプロセッサに通信可能に連結される例示的なアーキテクチャを示す。
【
図4B】複数のGPUが複数のマルチコアプロセッサに通信可能に連結される例示的なアーキテクチャを示す。
【
図4C】複数のGPUが複数のマルチコアプロセッサに通信可能に連結される例示的なアーキテクチャを示す。
【
図4D】複数のGPUが複数のマルチコアプロセッサに通信可能に連結される例示的なアーキテクチャを示す。
【
図4E】複数のGPUが複数のマルチコアプロセッサに通信可能に連結される例示的なアーキテクチャを示す。
【
図4F】複数のGPUが複数のマルチコアプロセッサに通信可能に連結される例示的なアーキテクチャを示す。
【0010】
【0011】
【0012】
【0013】
【
図8】マルチGPUコンピューティングシステムを示す。
【0014】
【
図9A】例示的なディープニューラルネットワークの層を示す。
【
図9B】例示的なディープニューラルネットワークの層を示す。
【0015】
【
図10】例示的な再帰型ニューラルネットワークを示す。
【0016】
【
図11】ディープニューラルネットワークの訓練及びデプロイを示す。
【0017】
【0018】
【
図13】訓練されたモデルを用いて推論を実行するのに適している例示的な推論システムオンチップ(SOC)を示す。
【0019】
【0020】
【
図15A】コンピューティングシステム及びグラフィックスプロセッサを示す。
【
図15B】コンピューティングシステム及びグラフィックスプロセッサを示す。
【
図15C】コンピューティングシステム及びグラフィックスプロセッサを示す。
【0021】
【
図16A】追加のグラフィックスプロセッサ及び計算アクセラレータアーキテクチャのブロック図を示す。
【
図16B】追加のグラフィックスプロセッサ及び計算アクセラレータアーキテクチャのブロック図を示す。
【
図16C】追加のグラフィックスプロセッサ及び計算アクセラレータアーキテクチャのブロック図を示す。
【0022】
【
図17】グラフィックスプロセッサのグラフィックス処理エンジンのブロック図である。
【0023】
【
図18A】グラフィックスプロセッサコアにおいて採用される処理要素のアレイを含むスレッド実行ロジックを示す。
【
図18B】グラフィックスプロセッサコアにおいて採用される処理要素のアレイを含むスレッド実行ロジックを示す。
【0024】
【0025】
【
図20】グラフィックスプロセッサの命令フォーマットを示すブロック図である。
【0026】
【
図21】追加のグラフィックスプロセッサアーキテクチャのブロック図である。
【0027】
【
図22A】グラフィックスプロセッサコマンドフォーマット及びコマンドシーケンスを示す。
【
図22B】グラフィックスプロセッサコマンドフォーマット及びコマンドシーケンスを示す。
【0028】
【
図23】データ処理システムのための例示的なグラフィックスソフトウェアアーキテクチャを示す。
【0029】
【
図24A】IPコア開発システムを示すブロック図である。
【0030】
【
図24B】集積回路パッケージアセンブリの垂直断面図を示す。
【0031】
【
図24C】基板(例えば、ベースダイ)に接続されるハードウェアロジックチップレットの複数のユニットを含むパッケージアセンブリを示す。
【0032】
【
図24D】交換可能なチップレットを含むパッケージアセンブリを示す。
【0033】
【
図25】例示的なシステムオンチップ集積回路を示すブロック図である。
【0034】
【
図26A】SoC内で用いるための例示的なグラフィックスプロセッサを示すブロック図である。
【
図26B】SoC内で用いるための例示的なグラフィックスプロセッサを示すブロック図である。
【0035】
【
図27】実施形態に係る圧縮技術を実装する方法における工程を示すフローチャートである。
【
図28】実施形態に係る圧縮技術を実装する方法における工程を示すフローチャートである。
【0036】
【
図29】実施形態に係るビットシーケンスを圧縮及び解凍する模式図である。
【0037】
【
図30】実施形態に係る方法における工程を示すフローチャートである。
【0038】
【
図31A】実施形態に係るL3キャッシュアウェアディスパッチを実装するように適合される処理環境の概略ブロック図である。
【
図31B】実施形態に係るL3キャッシュアウェアディスパッチを実装するように適合される処理環境の概略ブロック図である。
【0039】
【
図32】実施形態に係るキャッシュL3キャッシュアウェアカーネルディスパッチを実装する方法における工程を示すフローチャートである。
【発明を実施するための形態】
【0040】
グラフィックス処理ユニット(GPU)は、例えば、グラフィックス演算、機械学習演算、パターン分析演算、及び/又は、様々な汎用GPU(GPGPU)をアクセラレートすべく、ホスト/プロセッサコアに通信可能に連結される。GPUは、バス又は別のインターコネクト(例えば、PCIe又はNVLinkなどの高速インターコネクト)を通じてホストプロセッサ/コアに通信可能に連結されてよい。あるいは、GPUは、コアとして、同一のパッケージ又はチップ上に集積され、内部プロセッサバス/インターコネクト(つまり、パッケージ又はチップの内部)を通じてコアに通信可能に連結されてよい。GPUが接続される方式に関わらず、プロセッサコアは、作業記述子に含まれるコマンド/命令のシーケンスの形式で、GPUに作業を割り当ててよい。次に、GPUは、これらのコマンド/命令を効率的に処理するための専用回路/ロジックを用いる。
【0041】
以下の説明では、より深い理解を提供するために多数の具体的な詳細が記載されている。しかしながら、本明細書で説明される本実施形態がこれら具体的な詳細のうちの1つ又は複数がなくても実施され得ることが、当業者に明らかである。他の例では、本実施形態の詳細を曖昧にすることを避けるために、周知の特徴は説明されていない。
[システムの概要]
【0042】
図1は、本明細書で説明される実施形態の1つ又は複数の態様を実施するように構成されるコンピューティングシステム100を示すブロック図である。コンピューティングシステム100は、メモリハブ105を含み得るインターコネクトパスを介して通信する1つ又は複数のプロセッサ102及びシステムメモリ104を有する処理サブシステム101を含む。メモリハブ105は、チップセットコンポーネント内にある別個のコンポーネントであってよい、又は、1つ又は複数のプロセッサ102内に統合されてよい。メモリハブ105は、通信リンク106を介してI/Oサブシステム111と連結する。I/Oサブシステム111は、コンピューティングシステム100が1つ又は複数の入力デバイス108からの入力を受信できるようにするI/Oハブ107を含む。さらに、I/Oハブ107は、1つ又は複数のプロセッサ102に含まれ得るディスプレイコントローラが、1つ又は複数のディスプレイデバイス110Aに出力を提供できるようにする。一実施形態において、I/Oハブ107と連結される1つ又は複数のディスプレイデバイス110Aは、ローカル、内部又は埋め込み型のディスプレイデバイスを含むことができる。
【0043】
処理サブシステム101は、例えば、バス又は他の通信リンク113を介してメモリハブ105に連結される1つ又は複数の並列プロセッサ112を含む。通信リンク113は、限定されるものではないが、PCI Expressなどの任意の数の規格ベースの通信リンク技術又はプロトコルのうちの1つであってよい、又は、ベンダ固有の通信インタフェース又は通信ファブリックであってよい。1つ又は複数の並列プロセッサ112は、メニーインテグレーテッドコア(MIC)プロセッサなどの多数のプロセッシングコア及び/又は処理クラスタを含むことができる計算的に集中した並列又はベクトル処理システムを形成してよい。例えば、1つ又は複数の並列プロセッサ112は、I/Oハブ107を介して連結される1つ又は複数のディスプレイデバイス110Aのうちの1つに画素を出力できるグラフィックス処理サブシステムを形成する。1つ又は複数の並列プロセッサ112はまた、1つ又は複数のディスプレイデバイス110Bへの直接接続を可能にするディスプレイコントローラ及びディスプレイインタフェース(図示されていない)を含むことができる。
【0044】
I/Oサブシステム111内で、システムストレージユニット114は、I/Oハブ107に接続して、コンピューティングシステム100にストレージメカニズムを提供できる。I/Oスイッチ116は、I/Oハブ107及びプラットフォームに統合され得るネットワークアダプタ118及び/又は無線ネットワークアダプタ119などの他のコンポーネントと、1つ又は複数のアドインデバイス120を介して追加され得る様々な他のデバイスとの間の接続を可能にするインタフェースメカニズムを提供するために用いられることができる。アドインデバイス120はまた、例えば、1つ又は複数の外部グラフィックスプロセッサデバイス及び/又は計算アクセラレータを含んでよい。ネットワークアダプタ118は、イーサネット(登録商標)アダプタ又は別の有線ネットワークアダプタとすることができる。無線ネットワークアダプタ119は、Wi-Fi(登録商標)、Bluetooth(登録商標)、近距離無線通信(NFC)、又は、1つ又は複数の無線ラジオを含む他のネットワークデバイスのうちの1つ又は複数を含むことができる。
【0045】
コンピューティングシステム100は、USB、又は、他のポート接続、光ストレージドライブ、撮像デバイスなどを含む明確には図示されていない他のコンポーネントを含むことができ、I/Oハブ107に接続されてもよい。
図1における様々なコンポーネントをインターコネクトする通信パスは、PCI(Peripheral Component Interconnect)ベースのプロトコル(例えば、PCI-Express)、又は、NV-Link高速インターコネクト又は当該技術分野で知られているインターコネクトプロトコルなどの任意の他のバス又はポイントツーポイント通信インタフェース及び/又はプロトコルなどの任意の好適なプロトコルを用いて実装されてよい。
【0046】
1つ又は複数の並列プロセッサ112は、例えば、ビデオ出力回路を含むグラフィックス及びビデオ処理のために最適化された回路を組み込んでよく、グラフィックス処理ユニット(GPU)を構成する。あるいは又はさらに、1つ又は複数の並列プロセッサ112は、本明細書でさらに詳しく説明される基本的な計算アーキテクチャを保持しつつ、汎用処理のために最適化された回路を組み込むことができる。コンピューティングシステム100のコンポーネントは、単一の集積回路上で1つ又は複数の他のシステム要素と共に統合されてよい。例えば、1つ又は複数の並列プロセッサ112、メモリハブ105、プロセッサ102、及び、I/Oハブ107は、システムオンチップ(SoC)集積回路に統合されることができる。あるいは、コンピューティングシステム100のコンポーネントは、単一のパッケージに統合されて、システムインパッケージ(SIP)構成を形成することができる。一実施形態において、コンピューティングシステム100のコンポーネントの少なくとも一部は、マルチチップモジュール(MCM)に統合されることができ、MCMは、モジュール式のコンピューティングシステム内の他のマルチチップモジュールとインターコネクトされることができる。
【0047】
本明細書に示されるコンピューティングシステム100は例示であり、変形及び修正が可能であることが理解される。ブリッジの数及び配置、プロセッサ102の数、及び、並列プロセッサ112の数を含む接続トポロジは、所望のとおり修正されてよい。例えば、システムメモリ104は、ブリッジを通すよりもむしろ、直接的にプロセッサ102に接続されることができ、一方、他のデバイスは、メモリハブ105及びプロセッサ102を介してシステムメモリ104と通信する。他の代替的なトポロジでは、並列プロセッサ112は、メモリハブ105よりもむしろ、I/Oハブ107に接続される、又は、1つ又は複数のプロセッサ102のうちの1つに直接接続される。他の実施形態では、I/Oハブ107及びメモリハブ105は、単一のチップに統合されてよい。プロセッサ102の2つ又はそれより多くのセットは複数のソケットを介して取り付けられ、当該ソケットは、並列プロセッサ112の2つ又はそれより多くのインスタンスと連結できることも可能である。
【0048】
本明細書に示される特定のコンポーネントのいくつかは、オプション的であり、コンピューティングシステム100のすべての実装に含まれていなくてよい。例えば、任意の数のアドインカード又は周辺機器がサポートされてよく、いくつかのコンポーネントは除外されてよい。さらに、いくつかのアーキテクチャは、
図1に示されているものに類似するコンポーネントに対して異なる用語を用いてよい。例えば、メモリハブ105は、いくつかのアーキテクチャにおいてノースブリッジと称されることがあり、一方、I/Oハブ107は、サウスブリッジと称されることがある。
【0049】
図2Aは、並列プロセッサ200を示す。並列プロセッサ200は、本明細書で説明されるようなGPU又はGPGPUなどであってよい。並列プロセッサ200の様々なコンポーネントは、プログラマブルプロセッサ、特定用途向け集積回路(ASIC)、又は、フィールドプログラマブルゲートアレイ(FPGA)などの1つ又は複数の集積回路デバイスを用いて実装されてよい。図示される並列プロセッサ200は、
図1に示されている並列プロセッサ112、又は、そのうちの1つであってよい。
【0050】
並列プロセッサ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は、メモリ演算の実行を指示するコマンドを受信する。
【0051】
ホストインタフェース206がI/Oユニット204を介してコマンドバッファを受信した場合、ホストインタフェース206は、これらのコマンドを実行する作業工程をフロントエンド208に誘導できる。一実施形態において、フロントエンド208は、スケジューラ210と連結し、スケジューラ210は、コマンド又は他の作業項目を処理クラスタアレイ212に分散するように構成される。スケジューラ210は、タスクが処理クラスタアレイ212の処理クラスタに分散される前に、処理クラスタアレイ212が適切に構成されており、有効な状態にあることを保証する。スケジューラ210は、マイクロコントローラ上で実行するファームウェアロジックを介して実装されてよい。マイクロコントローラが実装されたスケジューラ210は、粗い粒度及び細かい粒度で、複雑なスケジューリング及び作業分散工程を実行するように構成可能であり、処理アレイ212上で実行するスレッドの急速なプリエンプション及びコンテキスト切り替えを可能にする。好ましくは、ホストソフトウェアは、複数のグラフィックス処理ドアベルのうちの1つを介して、処理アレイ212に対するスケジューリングのための作業負荷を明らかにできる。次に、スケジューラマイクロコントローラ内のスケジューラ210ロジックにより、作業負荷が処理アレイ212にわたって自動的に分散されることができる。
【0052】
処理クラスタアレイ212は、最大で「N」個の処理クラスタ(例えば、クラスタ214A、クラスタ214Bからクラスタ214Nまで)を含むことができる。処理クラスタアレイ212の各クラスタ214A-214Nは、多数の同時スレッドを実行できる。スケジューラ210は、様々なスケジューリング及び/又は作業分散アルゴリズムを用いて、処理クラスタアレイ212のクラスタ214A-214Nに作業を割り当てることができ、様々なスケジューリング及び/又は作業分散アルゴリズムは、各タイプのプログラム又は計算に対して生じる作業負荷に応じて変わり得る。スケジューリングは、スケジューラ210により動的に処理され得る、又は、処理クラスタアレイ212による実行のために構成されるプログラムロジックのコンパイル中に、コンパイラロジックにより部分的に支援され得る。オプションで、異なるタイプのプログラムを処理するために、又は、異なるタイプの計算を実行するために、処理クラスタアレイ212の異なるクラスタ214A-214Nを割り当てることができる。
【0053】
処理クラスタアレイ212は、様々なタイプの並列処理演算を実行するように構成され得る。例えば、クラスタアレイ212は、汎用の並列計算演算を実行するように構成される。例えば、処理クラスタアレイ212は、ビデオ及び/又はオーディオデータのフィルタリング、物理演算を含むモデル化演算の実行、及び、データ変換の実行を含む処理タスクを実行するロジックを含むことができる。
【0054】
処理クラスタアレイ212は、並列グラフィックス処理演算を実行するように構成される。並列プロセッサ200がグラフィックス処理演算を実行するように構成されるそのような実施形態では、処理クラスタアレイ212は、そのようなグラフィックス処理演算の実行をサポートする追加のロジックを含むことができ、限定されるものではないが、テクスチャ演算を実行するテクスチャサンプリングロジック、並びに、テセレーションロジック及び他の頂点処理ロジックを含む。さらに、処理クラスタアレイ212は、限定されるものではないが、頂点シェーダ、テセレーションシェーダ、ジオメトリシェーダ及び画素シェーダなどのシェーダプログラムに関するグラフィックス処理を実行するように構成され得る。並列処理ユニット202は、処理のためにシステムメモリからのデータをI/Oユニット204を介して転送できる。処理の間、転送されるデータは、オンチップメモリ(例えば、並列プロセッサメモリ222)に処理の間格納され、次に、システムメモリにライトバックされ得る。
【0055】
並列処理ユニット202がグラフィックス処理を実行するために用いられる実施形態では、スケジューラ210は、処理クラスタアレイ212の複数のクラスタ214A-214Nへのグラフィックス処理演算をより分散しやすくするために、処理作業負荷をほぼ等しいサイズのタスクに分割するように構成されてよい。これらの実施形態のいくつかでは、処理クラスタアレイ212の一部は、異なるタイプの処理を実行するように構成され得る。例えば、第1部分は、頂点シェーディング及びトポロジ生成を実行するように構成されてよく、第2部分は、テセレーション及びジオメトリシェーディングを実行するように構成されてよく、第3部分は、画素シェーディング又は他のスクリーン空間操作を実行して、表示のためにレンダリングされた画像を生成するように構成されてよい。クラスタ214A-214Nのうちの1つ又は複数により生成された中間データは、さらなる処理のためにクラスタ214A-214N間で中間データが伝送されることを可能にすべく、バッファに格納されてよい。
【0056】
動作中、処理クラスタアレイ212は、スケジューラ210を介して実行される対象の処理タスクを受信でき、スケジューラ210は、フロントエンド208から処理タスクを規定するコマンドを受信する。グラフィックス処理演算に関して、処理タスクは、処理対象となるデータ、例えば、サーフェス(パッチ)データ、プリミティブデータ、頂点データ及び/又は画素データ、並びに、どのようにデータが処理されるべきか(例えば、どのプログラムが実行されるべきか)を規定する状態パラメータ及びコマンドのインデックスを含むことができる。スケジューラ210は、タスクに対応するインデックスをフェッチするように構成されてよい、又は、フロントエンド208からインデックスを受信してよい。フロントエンド208は、到着したコマンドバッファ(例えば、バッチバッファ、プッシュバッファなど)により特定される作業負荷が初期化される前に処理クラスタアレイ212が有効な状態となるように構成されることを保証するように構成され得る。
【0057】
並列処理ユニット202の1つ又は複数のインスタンスのそれぞれは、並列プロセッサメモリ222と連結できる。並列プロセッサメモリ222は、メモリクロスバー216を介してアクセスされることができ、メモリクロスバー216は、処理クラスタアレイ212並びにI/Oユニット204からのメモリ要求を受信できる。メモリクロスバー216は、メモリインタフェース218を介して並列プロセッサメモリ222にアクセスできる。メモリインタフェース218は、それぞれが並列プロセッサメモリ222の一部(例えば、メモリユニット)に連結できる複数のパーティションユニット(例えば、パーティションユニット220A、パーティションユニット220Bからパーティションユニット220Nまで)を含むことができる。第1のパーティションユニット220Aが対応する第1のメモリユニット224Aを有し、第2のパーティションユニット220Bが対応するメモリユニット224Bを有し、N番目のパーティションユニット220Nが対応するN番目のメモリユニット224Nを有するように、パーティションユニット220A-220Nの数は、メモリユニットの数に等しくなるように構成されてよい。他の実施形態では、パーティションユニット220A-220Nの数は、メモリデバイスの数に等しくなくてよい。
【0058】
メモリユニット224A-224Nは、ダイナミックランダムアクセスメモリ(DRAM)、又は、グラフィックスランダムアクセスメモリ、例えば、グラフィックスダブルデータレート(GDDR)メモリを含む同期グラフィックスランダムアクセスメモリ(SGRAM)を含む様々なタイプのメモリデバイスを含むことができる。オプションで、メモリユニット224A-224Nはまた、限定されるものではないが、高帯域幅メモリ(HBM)を含む3Dスタックメモリを含んでよい。当業者であれば、メモリユニット224A-224Nの特定の実装は変わることができ、様々な従来の設計のうちの1つから選択され得ることを理解するだろう。フレームバッファ又はテクスチャマップなどのレンダーターゲットは、メモリユニット224A-224Nにわたって格納されてよく、パーティションユニット220A-220Nが並列プロセッサメモリ222の利用可能な帯域幅を効率的に用いるために、並列に各レンダーターゲットの一部を書き込むことを可能にする。いくつかの実施形態において、ローカルキャッシュメモリと共にシステムメモリを利用するユニファイドメモリ設計を優先して、並列プロセッサメモリ222のローカルインスタンスが除外されてよい。
【0059】
オプションで、処理クラスタアレイ212のクラスタ214A-214Nのうちのいずれか1つは、並列プロセッサメモリ222内のメモリユニット224A-224Nのいずれかに書き込まれるデータを処理する能力を有する。メモリクロスバー216は、任意のパーティションユニット220A-220N、又は、別のクラスタ214A-214Nに各クラスタ214A-214Nの出力を転送するように構成されることができ、これらは出力に対して追加の処理演算を実行できる。各クラスタ214A-214Nは、メモリクロスバー216を通じてメモリインタフェース218と通信して、様々な外部メモリデバイスから読み出し、又は、書き込むことができる。メモリクロスバー216を有する実施形態のうちの1つにおいて、メモリクロスバー216は、I/Oユニット204と通信すべく、メモリインタフェース218への接続を有し、及び、並列プロセッサメモリ222のローカルインスタンスへの接続を有し、異なる処理クラスタ214A-214N内の処理ユニットが並列処理ユニット202に対してローカルではないシステムメモリ又は他のメモリと通信することが可能である。概して、メモリクロスバー216は、例えば、仮想チャネルを用いて、クラスタ214A-214Nとパーティションユニット220A-220Nとの間のトラフィックストリームを分離することが可能であってよい。
【0060】
並列プロセッサ200内に、並列処理ユニット202の単一のインスタンスが図示されている一方、並列処理ユニット202の任意の数のインスタンスを含むことができる。例えば、並列処理ユニット202の複数のインスタンスは、単一のアドインカードに提供されることができる、又は、複数のアドインカードはインターコネクトされることができる。並列処理ユニット202の異なるインスタンスが、異なる数のプロセッシングコア、異なる量のローカル並列プロセッサメモリ、及び/又は、他の構成の差異を有する場合であっても、異なるインスタンスは、相互動作するように構成され得る。オプションで、並列処理ユニット202のいくつかインスタンスは、他のインスタンスと比較してより高精度の精度浮動小数点ユニットを含むことができる。並列処理ユニット202又は並列プロセッサ200の1つ又は複数のインスタンスを組み込んだシステムは、様々な構成及びフォームファクタで実装されることができ、限定されるものではないが、デスクトップ、ラップトップ又はハンドヘルドパーソナルコンピュータ、サーバ、ワークステーション、ゲームコンソール及び/又は埋め込みシステムを含む。
【0061】
図2Bは、パーティションユニット220のブロック図である。パーティションユニット220は、
図2Aのパーティションユニット220A-220Nのうちの1つのインスタンスであってよい。図示されるように、パーティションユニット220は、L2キャッシュ221、フレームバッファインタフェース225及びROP226(ラスタ演算ユニット)を含む。L2キャッシュ221は、メモリクロスバー216及びROP226から受信したロード及びストア処理を実行するように構成される読み出し/書き込みキャッシュである。読み出しミス及び緊急のライトバック要求は、処理のために、L2キャッシュ221によりフレームバッファインタフェース225に出力される。更新も、処理のためにフレームバッファインタフェース225を介してフレームバッファに送信され得る。一実施形態において、フレームバッファインタフェース225は、
図2Aの(例えば、並列プロセッサメモリ222内の)メモリユニット224A-224Nなど、並列プロセッサメモリ内のメモリユニットのうちの1つとやり取りする。さらに、又は、あるいは、パーティションユニット220は、メモリコントローラ(図示されていない)を介して並列プロセッサメモリ内のメモリユニットのうちの1つともやり取りしてよい。
【0062】
グラフィックスアプリケーションにおいて、ROP226は、例えば、ステンシル、z検定及びブレンディングなどのラスタ演算を実行する処理ユニットである。次に、ROP226は、グラフィックスメモリに格納される処理されたグラフィックスデータを出力する。いくつかの実施形態において、ROP226は、メモリに書き込まれるデプス又はカラーデータを圧縮し、メモリから読み出されるデプス又はカラーデータを解凍する圧縮ロジックを含む。圧縮ロジックは、複数の圧縮アルゴリズムのうちの1つ又は複数を用いる可逆圧縮ロジックとすることができる。ROP226により実行される圧縮のタイプは、圧縮される対象のデータの統計的特性に基づいて変わり得る。例えば、一実施形態において、デルタカラー圧縮は、デプス及びカラーデータに対してタイル基準ごとに実行される。
【0063】
ROP226は、パーティションユニット220内に含まれる代わりに、各処理クラスタ(例えば、
図2Aのクラスタ214A-214N)内に含まれてよい。そのような実施形態では、画素フラグメントデータの代わりに、画素データに対する読み出し及び書き込み要求がメモリクロスバー216上で伝送される。処理されたグラフィックスデータは、
図1の1つ又は複数のディスプレイデバイス110のうちの1つなどのディスプレイデバイス上に表示されてよく、プロセッサ102によってさらなる処理のためにルーティングされる、又は、
図2Aの並列プロセッサ200内の処理エンティティのうちの1つによってさらなる処理のためにルーティングされる。
【0064】
図2Cは、並列処理ユニット内の処理クラスタ214のブロック図である。例えば、処理クラスタは、
図2Aの処理クラスタ214A-214Nのうちの1つのインスタンスである。処理クラスタ214は、多くのスレッドを並行して実行するように構成されることができ、用語「スレッド」は、入力データの特定のセットに対して実行する特定のプログラムのインスタンスを指す。オプションで、複数の独立した命令ユニットを提供することなく、多数のスレッドの並列実行をサポートするために、単一命令、複数データ(SIMD)命令発行技術が用いられてよい。あるいは、処理クラスタのそれぞれのクラスタ内にある処理エンジンのセットに命令を発行するように構成される共通の命令ユニットを用いて、概して同期した多数のスレッドの並列実行をサポートするために、単一命令、複数スレッド(SIMT)技術が用いられてよい。すべての処理エンジンが通常、同一の命令を実行するSIMD実行法とは異なり、SIMT実行では、特定のスレッドプログラムを通して、異なるスレッドが分岐実行パスをより容易にたどることを可能にする。当業者であれば、SIMD処理法は、SIMT処理法の機能サブセットを表すことを理解するだろう。
【0065】
処理クラスタ214のオペレーションは、SIMT並列プロセッサに処理タスクを分散するパイプラインマネージャ232を介して制御され得る。パイプラインマネージャ232は、
図2Aのスケジューラ210から命令を受信し、グラフィックスマルチプロセッサ234及び/又はテクスチャユニット236を介してこれらの命令の実行を管理する。図示されたグラフィックスマルチプロセッサ234は、SIMT並列プロセッサの例示的なインスタンスである。しかしながら、異なるアーキテクチャの様々なタイプのSIMT並列プロセッサが処理クラスタ214内に含まれてよい。処理クラスタ214内に、グラフィックスマルチプロセッサ234の1つ又は複数のインスタンスを含めることができる。グラフィックスマルチプロセッサ234は、データを処理することができ、データクロスバー240は、他のシェーダユニットを含む複数の可能なデスティネーションのうちの1つに、処理されたデータを分散するために用いられることができる。パイプラインマネージャ232は、データクロスバー240を介して分散される対象の処理されたデータに対するデスティネーションを特定することにより、処理されたデータを分散しやすくすることができる。
【0066】
処理クラスタ214内の各グラフィックスマルチプロセッサ234は、同一のセットの機能実行ロジック(例えば、算術論理ユニット、ロード-ストアユニットなど)を含むことができる。機能実行ロジックは、前の命令が完了する前に、新たな命令を発行できるパイプライン方式で構成されることができる。機能実行ロジックは、整数及び浮動小数点算術、比較演算、ブール演算、ビットシフト及び様々な代数関数の計算を含む様々な演算をサポートする。異なる演算を実行するために、同一の機能ユニットハードウェアが活用されることができ、機能ユニットの任意の組み合わせが存在し得る。
【0067】
処理クラスタ214に伝送される命令は、スレッドを構成する。並列処理エンジンのセットにわたって実行するスレッドのセットはスレッドグループである。スレッドグループは、異なる入力データに対して同一プログラムを実行する。スレッドグループ内の各スレッドは、グラフィックスマルチプロセッサ234内の異なる処理エンジンに割り当てられ得る。スレッドグループは、グラフィックスマルチプロセッサ234内の処理エンジンの数よりも少ないスレッドを含んでよい。スレッドグループが処理エンジンの数よりも少ないスレッドを含む場合、スレッドグループが処理されているサイクルの間、処理エンジンのうちの1つ又は複数がアイドルであってよい。スレッドグループは、グラフィックスマルチプロセッサ234内の処理エンジンの数より多くのスレッドを含んでもよい。スレッドグループがグラフィックスマルチプロセッサ234内の処理エンジンの数より多くのスレッドを含む場合、連続的なクロックサイクルにわたって処理が実行され得る。オプションで、複数のスレッドグループは、グラフィックスマルチプロセッサ234上で同時に実行され得る。
【0068】
グラフィックスマルチプロセッサ234は、ロード及びストア処理を実行する内部キャッシュメモリを含んでよい。オプションで、グラフィックスマルチプロセッサ234は、内部キャッシュに先行して、処理クラスタ214内のキャッシュメモリ(例えば、L1キャッシュ248)を用いることができる。各グラフィックスマルチプロセッサ234はまた、すべて処理クラスタ214間で共有され、スレッド間でデータを転送するために用いられてよいパーティションユニット(例えば、
図2Aのパーティションユニット220A-220N)内のL2キャッシュへのアクセスを有する。グラフィックスマルチプロセッサ234はまた、ローカル並列プロセッサメモリ及び/又はシステムメモリのうちの1つ又は複数を含むことができるオフチップグローバルメモリにアクセスしてよい。並列処理ユニット202の外部にある任意のメモリが、グローバルメモリとして用いられてよい。処理クラスタ214がグラフィックスマルチプロセッサ234の複数のインスタンスを含む実施形態は、L1キャッシュ248に格納され得る共通の命令及びデータを共有できる。
【0069】
各処理クラスタ214は、仮想アドレスを物理アドレスにマッピングするように構成されるMMU245(メモリ管理ユニット)を含んでよい。他の実施形態では、MMU245の1つ又は複数のインスタンスが、
図2Aのメモリインタフェース218内に存在してよい。MMU245は、タイル及びオプションでキャッシュラインインデックスの物理アドレスに仮想アドレスをマッピングするために用いられるページテーブルエントリ(PTE)のセットを含む。MMU245は、グラフィックスマルチプロセッサ234又はL1キャッシュ又は処理クラスタ214内に存在し得るアドレス変換ルックアサイドバッファ(TLB)又はキャッシュを含んでよい。サーフェスデータアクセス局所性を分散させて、パーティションユニット間で効率的な要求インタリーブを可能にすべく、物理アドレスが処理される。キャッシュラインインデックスは、キャッシュラインに対する要求がヒットであるか、又は、ミスであるかを判定するために用いられてよい。
【0070】
グラフィックス及びコンピューティングアプリケーションにおいて、テクスチャマッピング演算を実行するために、例えば、テクスチャサンプル位置を判定し、テクスチャデータを読み出し、テクスチャデータをフィルタリングするために、各グラフィックスマルチプロセッサ234がテクスチャユニット236に連結されるように、処理クラスタ214が構成されてよい。テクスチャデータは、内部テクスチャL1キャッシュ(図示されていない)から、又は、いくつかの実施形態においてグラフィックスマルチプロセッサ234内のL1キャッシュから読み出され、必要に応じて、L2キャッシュ、ローカル並列プロセッサメモリ、又は、システムメモリからフェッチされる。各グラフィックスマルチプロセッサ234は、処理されたタスクをデータクロスバー240に出力して、さらなる処理のために別の処理クラスタ214に処理されたタスクを提供する、又は、メモリクロスバー216を介して、L2キャッシュ、ローカル並列プロセッサメモリ又はシステムメモリに処理されたタスクを格納する。preROP242(ラスタ前演算ユニット)は、グラフィックスマルチプロセッサ234からデータを受信し、ROPユニットにデータを誘導するように構成され、ROPユニットは、本明細書で説明したようなパーティションユニット(例えば、
図2Aのパーティションユニット220A-220N)に位置してよい。preROP242ユニットは、カラーブレンディングに対する最適化を実行し、画素カラーデータを編成し、アドレス変換を実行できる。
【0071】
本明細書で説明されるコアアーキテクチャは例示であり、変形及び修正が可能であることが理解される。任意の数の処理ユニット、例えば、グラフィックスマルチプロセッサ234、テクスチャユニット236、preROP242などは、処理クラスタ214内に含まれてよい。さらに、1つの処理クラスタ214のみが示されている一方、並列処理ユニットは、本明細書で説明されるように、処理クラスタ214の任意の数のインスタンスを含んでよい。オプションで、各処理クラスタ214は、分離して異なる処理ユニット、L1キャッシュなどを用いて、他の処理クラスタ214とは独立して動作するように構成されることができる。
【0072】
図2Dは、グラフィックスマルチプロセッサ234が処理クラスタ214のパイプラインマネージャ232と連結するグラフィックスマルチプロセッサ234の例を示す。グラフィックスマルチプロセッサ234は、限定されるものではないが、命令キャッシュ252、命令ユニット254、アドレスマッピングユニット256、レジスタファイル258、1つ又は複数の汎用グラフィックス処理ユニット(GPGPU)コア262及び1つ又は複数のロード/ストアユニット266を含む実行パイプラインを有する。GPGPUコア262及びロード/ストアユニット266は、メモリ及びキャッシュインターコネクト268を介してキャッシュメモリ272及び共有メモリ270と連結される。グラフィックスマルチプロセッサ234は、行列及び/又はレイトレーシング演算をアクセラレートするハードウェアロジックを含むテンソル及び/又はレイトレーシングコア263をさらに含んでよい。
【0073】
命令キャッシュ252は、パイプラインマネージャ232から実行すべき命令のストリームを受信してよい。命令は、命令キャッシュ252にキャッシュされ、命令ユニット254による実行のためにディスパッチされる。命令ユニット254は、スレッドグループの各スレッドがGPGPUコア262内の異なる実行ユニットに割り当てられたスレッドグループ(例えば、ワープ)として命令をディスパッチすることができる。命令は、統合アドレス空間内のアドレスを指定することにより、ローカル、共有又はグローバルアドレス空間のいずれにアクセスできる。アドレスマッピングユニット256は、統合アドレス空間内のアドレスを、ロード/ストアユニット266によりアクセスされ得る個別のメモリアドレスに変換するために用いられ得る。
【0074】
レジスタファイル258は、グラフィックスマルチプロセッサ234の機能ユニットにレジスタのセットを提供する。レジスタファイル258は、グラフィックスマルチプロセッサ234の機能ユニット(例えば、GPGPUコア262、ロード/ストアユニット266)のデータパスに接続されるオペランドに一時ストレージを提供する。レジスタファイル258は、各機能ユニットが、レジスタファイル258の専用部分を割り当てられるように、機能ユニットのそれぞれ間で分割されてよい。例えば、レジスタファイル258は、グラフィックスマルチプロセッサ234により実行される異なるワープ間で分割されてよい。
【0075】
GPGPUコア262はそれぞれ、グラフィックスマルチプロセッサ234の命令を実行するために用いられる浮動小数点ユニット(FPU)及び/又は整数算術論理ユニット(ALU)を含むことができる。いくつかの実装において、GPGPUコア262は、別の場合には、テンソル及び/又はレイトレーシングコア263内に存在し得るハードウェアロジックを含むことができる。GPGPUコア262は、アーキテクチャに類似することがある、又は、アーキテクチャとは異なることがある。例えば、一実施形態において、GPGPUコア262の第1部分は、単精度FPU及び整数ALUを含む一方、GPGPUコアの第2部分は、倍精度FPUを含む。オプションで、FPUは、浮動小数点演算のためのIEEE754-2008規格を実装できる、又は、可変精度の浮動小数点演算を可能にする。グラフィックスマルチプロセッサ234は、さらに、矩形コピー又は画素ブレンディング演算などの特定の機能を実行すべく、1つ又は複数の固定機能又は特殊機能ユニットを含むことができる。GPGPUコアの1つ又は複数は、固定又は特殊機能ロジックを含むこともできる。
【0076】
GPGPUコア262は、データの複数のセットに対して単一命令を実行できるSIMDロジックを含んでよい。オプションで、GPGPUコア262は、SIMD4、SIMD8及びSIMD16命令を物理的に実行し、SIMD1、SIMD2及びSIMD32命令を論理的に実行できる。GPGPUコアに対するSIMD命令は、シェーダコンパイラによりコンパイル時に生成され得る、又は、単一プログラム複数データ(SPMD)又はSIMTアーキテクチャのために書き込まれ、コンパイルされるプログラムを実行する場合に、自動的に生成され得る。SIMT実行モデルが構成されるプログラムの複数のスレッドは、単一のSIMD命令を介して実行され得る。例えば、一実施形態において、同一又は類似の演算を実行する8個のSIMTスレッドが、単一のSIMD8論理ユニットを介して並列に実行され得る。
【0077】
メモリ及びキャッシュインターコネクト268は、グラフィックスマルチプロセッサ234の機能ユニットのそれぞれをレジスタファイル258及び共有メモリ270に接続するインターコネクトネットワークである。例えば、メモリ及びキャッシュインターコネクト268は、ロード/ストアユニット266が、共有メモリ270とレジスタファイル258との間のロード及びストア処理を実施することを可能にするクロスバーインターコネクトである。レジスタファイル258は、GPGPUコア262と同一の周波数で動作でき、したがって、GPGPUコア262とレジスタファイル258との間のデータ転送は、非常に低いレイテンシである。共有メモリ270は、グラフィックスマルチプロセッサ234内の機能ユニット上で実行するスレッド間の通信を可能にするために用いられることができる。キャッシュメモリ272は、例えば、機能ユニットとテクスチャユニット236との間で通信されるテクスチャデータをキャッシュするデータキャッシュとして用いられることができる。共有メモリ270は、プログラム管理キャッシュとして用いられることもできる。GPGPUコア262上で実行するスレッドは、キャッシュメモリ272内に格納される自動的にキャッシュされるデータに加えて、共有メモリ内のデータをプログラムで格納できる。
【0078】
図3A~
図3Cは、実施形態に係る追加のグラフィックスマルチプロセッサを示す。
図3A~
図3Bは、グラフィックスマルチプロセッサ325、350を示し、
図2Cのグラフィックスマルチプロセッサ234に関連しており、これらのうちの1つの代わりに用いられてよい。したがって、ここでは、グラフィックスマルチプロセッサ234と組み合わせた任意の特徴の開示はまた、そのように限定されるものではないが、グラフィックスマルチプロセッサ325、350との対応する組み合わせを開示する。
図3Cは、グラフィックスマルチプロセッサ325、350に対応するマルチコアグループ365A-365Nに配置される専用のグラフィックス処理リソースのセットを含むグラフィックス処理ユニット(GPU)380を示す。図示されたグラフィックスマルチプロセッサ325、350、及び、マルチコアグループ365A-365Nは、多数の実行スレッドの同時実行が可能なストリーミングマルチプロセッサ(SM)とすることができる。
【0079】
図3Aのグラフィックスマルチプロセッサ325は、
図2Dのグラフィックスマルチプロセッサ234と比較して、実行リソースユニットの複数の追加のインスタンスを含む。例えば、グラフィックスマルチプロセッサ325は、命令ユニット332A-332B、レジスタファイル334A-334B、及び、テクスチャユニット344A-344Bの複数のインスタンスを含むことができる。グラフィックスマルチプロセッサ325はまた、グラフィックス又は計算実行ユニット(例えば、GPGPUコア336A-336B、テンソルコア337A-337B、レイトレーシングコア338A-338B)の複数のセット、及び、ロード/ストアユニット340A-340Bの複数のセットを含む。実行リソースユニットは、共通の命令キャッシュ330、テクスチャ及び/又はデータキャッシュメモリ342、及び、共有メモリ346を有する。
【0080】
様々なコンポーネントは、インターコネクトファブリック327を介して通信できる。インターコネクトファブリック327は、グラフィックスマルチプロセッサ325の様々なコンポーネント間の通信を可能にする1つ又は複数のクロスバースイッチを含んでよい。インターコネクトファブリック327は、グラフィックスマルチプロセッサ325の各コンポーネントが積層される別個の高速ネットワークファブリック層であってよい。グラフィックスマルチプロセッサ325のコンポーネントは、インターコネクトファブリック327を介してリモートコンポーネントと通信する。例えば、GPGPUコア336A-336B、337A-337B及び338A-338Bはそれぞれ、インターコネクトファブリック327介して共有メモリ346と通信できる。インターコネクトファブリック327は、コンポーネント間の公平な帯域幅割り当てを保証すべく、グラフィックスマルチプロセッサ325内の通信をアービトレートできる。
【0081】
図3Bのグラフィックスマルチプロセッサ350は、実行リソース356A-356Dの複数のセットを含み、実行リソースの各セットは、
図2D及び
図3Aに示されるような複数の命令ユニット、レジスタファイル、GPGPUコア及びロードストアユニットを含む。実行リソース356A-356Dは、命令キャッシュ354及び共有メモリ353を共有しつつ、テクスチャ演算のために、テクスチャユニット360A-360Dと連携して作業することができる。例えば、実行リソース356A-356Dは、命令キャッシュ354及び共有メモリ353、並びに、テクスチャ及び/又はデータキャッシュメモリ358A-358Bの複数のインスタンスを共有できる。様々なコンポーネントは、
図3Aのインターコネクトファブリック327に類似するインターコネクトファブリック352を介して通信できる。
【0082】
当業者であれば、
図1、
図2A~
図2D及び
図3A~
図3Bにおいて説明されたアーキテクチャは説明のためのものであり、本実施形態の範囲を限定するものではないことを理解するだろう。したがって、本明細書で説明される技術は、任意の適切に構成された処理ユニットに対して実装されてよく、1つ又は複数のモバイルアプリケーションプロセッサ、1つ又は複数のデスクトップ又はマルチコアCPUを含むサーバ中央処理装置(CPU)、
図2Aの並列処理ユニット202などの1つ又は複数の並列処理ユニット、並びに、1つ又は複数のグラフィックスプロセッサ又は専用処理ユニットを含むが限定されるものではなく、本明細書で説明される実施形態の範囲から逸脱することはない。
【0083】
本明細書で説明されるように、並列プロセッサ又はGPGPUは、グラフィックス演算、機械学習演算、パターン分析演算、及び、様々な汎用GPU(GPGPU)をアクセラレートすべく、ホスト/プロセッサコアに通信可能に連結されてよい。GPUは、バス又は他のインターコネクト(例えば、PCIe又はNVLinkなどの高速インターコネクト)を通じてホストプロセッサ/コアに通信可能に連結されてよい。他の実施形態では、GPUは、コアとして、同一のパッケージ又はチップ上に集積され、内部プロセッサバス/インターコネクト(つまり、パッケージ又はチップの内部)を通じてコアに通信可能に連結されてよい。GPUが接続される方式に関わらず、プロセッサコアは、作業記述子に含まれるコマンド/命令のシーケンスの形式で、GPUに作業を割り当ててよい。次に、GPUは、これらのコマンド/命令を効率的に処理するための専用回路/ロジックを用いる。
【0084】
図3Cは、マルチコアグループ365A-365Nに配置される専用のグラフィックス処理リソースのセットを含むグラフィックス処理ユニット(GPU)380を示す。単一のマルチコアグループ365Aのみの詳細が提供されている一方、マルチコアグループ365B-365Nは、同一又は類似のグラフィックス処理リソースのセットが備えられてよいことが理解される。マルチコアグループ365A-365Nに関する詳細な説明はまた、本明細書で説明される任意のグラフィックスマルチプロセッサ234、325、350に適用されてよい。
【0085】
図示されるように、マルチコアグループ365Aは、グラフィックスコア370のセット、テンソルコア371のセット及びレイトレーシングコア372のセットを含んでよい。スケジューラ/ディスパッチャ368は、様々なコア370、371、372上での実行のために、グラフィックスレッドをスケジューリング及びディスパッチする。レジスタファイル369のセットは、グラフィックスレッドを実行する場合にコア370、371、372により用いられるオペランド値を格納する。これらは、例えば、整数値を格納するための整数レジスタ、浮動小数点値を格納するための浮動小数点レジスタ、パックドデータ要素(整数及び/又は浮動小数点データ要素)を格納するためのベクトルレジスタ、及び、テンソル/行列値を格納するためのタイルレジスタを含んでよい。タイルレジスタは、ベクトルレジスタの組み合わせられたセットとして実装されてよい。
【0086】
1つ又は複数の組み合わせられたレベル1(L1)キャッシュ及び共有メモリユニット373は、例えば、テクスチャデータ、頂点データ、画素データ、レイデータ、境界ボリュームデータなどのグラフィックスデータを各マルチコアグループ365A内のローカルに格納する。1つ又は複数のテクスチャユニット374はまた、テクスチャマッピング及びサンプリングなどのテクスチャリング演算を実行するために用いられることができる。マルチコアグループ365A-365Nのすべて又はサブセットにより共有されるレベル2(L2)キャッシュ375は、複数の同時グラフィックスレッドのためのグラフィックスデータ及び/又は命令を格納する。図示されるように、L2キャッシュ375は、複数のマルチコアグループ365A-365Nにわたって共有されてよい。1つ又は複数のメモリコントローラ367は、GPU380を、システムメモリ(例えば、DRAM)及び/又は専用のグラフィックスメモリ(例えば、GDDR6メモリ)であり得るメモリ366に連結する。
【0087】
入力/出力(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は、同一の仮想アドレス空間を共有してよい。
【0088】
IOMMU364の一つの実装において、IOMMU364は仮想化をサポートする。この場合、それは、ページテーブルの第1のセットが、ゲスト/グラフィックス仮想アドレスをゲスト/グラフィックス物理アドレスにマッピングし、ページテーブルの第2のセットが、ゲスト/グラフィックス物理アドレスを(例えば、システムメモリ366内の)システム/ホスト物理アドレスにマッピングするように管理してよい。ページテーブルの第1及び第2のセットのそれぞれの基本アドレスは、制御レジスタに格納され、(例えば、新たなコンテキストが、ページテーブルの関連するセットへのアクセスと共に提供されるように)コンテキストスイッチ上でスワップアウトされてよい。
図3Cには示されていないが、コア370、371、372及び/又はマルチコアグループ365A-365Nのそれぞれは、ゲスト仮想からゲスト物理への変換、ゲスト物理からホスト物理への変換、ゲスト仮想からホスト物理への変換をキャッシュする変換ルックアサイドバッファ(TLB)を含んでよい。
【0089】
CPU361、GPU380及びI/Oデバイス362は、単一の半導体チップ及び/又はチップパッケージ上に統合されてよい。図示されるメモリ366は、同一のチップ上に統合されてよい、又は、オフチップインタフェースを介してメモリコントローラ367に連結されてよい。一つの実装において、メモリ366は、他の物理システムレベルのメモリと同一の仮想アドレス空間を共有するGDDR6メモリを有するが、本明細書で説明される基礎となる原理は、この特定の実装に限定されるものではない。
【0090】
テンソルコア371は、深層学習演算を実行するために用いられる基本的な計算演算である行列演算を実行するように特別に設計された複数の実行ユニットを含んでよい。例えば、同時行列乗算演算は、ニューラルネットワーク訓練及び推論のために用いられてよい。テンソルコア371は、単精度浮動小数点(例えば、32ビット)、半精度浮動小数点(例えば、16ビット)、整数ワード(16ビット)、バイト(8ビット)及びハーフバイト(4ビット)を含む、様々なオペランド精度を用いて、行列処理を実行してよい。例えば、ニューラルネットワークの実装は、各レンダリングされたシーンの特徴を抽出し、潜在的に複数のフレームからの詳細情報と組み合わせて、高品質な最終イメージを構築する。
【0091】
深層学習の実装において、並列行列乗算作業は、テンソルコア371上での実行のためにスケジューリングされてよい。ニューラルネットワークの訓練は、特に、かなりの数の行列ドット積演算を必要とする。N×N×N行列乗算の内積の公式化を処理すべく、テンソルコア371は、少なくともN個のドット積処理要素を含んでよい。行列乗算が開始される前に、1つの行列全体がタイルレジスタにロードされ、第2の行列の少なくとも1つの列が、Nサイクルのうちの各サイクルでロードされる。各サイクルにおいて、処理されるN個のドット積が存在する。
【0092】
行列成分は、16ビットワード、8ビットバイト(例えば、INT8)及び4ビットハーフバイト(例えば、INT4)を含む、特定の実装に応じて異なる精度で格納されてよい。異なる作業負荷(例えば、バイト及びハーフバイトへの量子化を許容できる推論作業負荷など)に、最も効率的な精度が用いられることを保証すべく、異なる精度モードがテンソルコア371に指定されてよい。
【0093】
レイトレーシングコア372は、リアルタイムレイトレーシング及び非リアルタイムレイトレーシング実装の両方のために、レイトレーシング演算をアクセラレートし得る。具体的には、レイトレーシングコア372は、境界ボリューム階層(BVH)を用いてレイトラバーサルを実行し、BVHボリューム内に囲まれたレイ及びプリミティブ間のインターセクションを識別するためのレイトラバーサル/インターセクション回路を含んでよい。レイトレーシングコア372は、(例えば、Zバッファ又は類似の構成を用いて)デプステスト及びカリングを実行するための回路を含んでもよい。一つの実装において、レイトレーシングコア372は、本明細書で説明される画像ノイズ除去技術と連携してトラバーサル及びインターセクション動作を実行し、少なくとも一部がテンソルコア371上で実行され得る。例えば、テンソルコア371は、レイトレーシングコア372により生成されるフレームのノイズ除去を実行すべく、深層学習ニューラルネットワークを実装してよい。しかしながら、CPU361、グラフィックスコア370及び/又はレイトレーシングコア372は、ノイズ除去及び/又は深層学習アルゴリズムのすべて又は一部を実装してもよい。
【0094】
さらに、上述したように、ノイズ除去に対する分散型アプローチが用いられてよく、ネットワーク又は高速インターコネクトを通じて他のコンピューティングデバイスに連結されるコンピューティングデバイス内にGPU380があってよい。この分散型アプローチにおいて、インターコネクトされるコンピューティングデバイスは、ニューラルネットワークの学習/訓練データを共有して、システム全体が異なるタイプの画像フレーム及び/又は異なるグラフィックスアプリケーションに対してノイズ除去を実行することを学習する速度を改善し得る。
【0095】
レイトレーシングコア372は、すべてのBVHトラバーサル及び/又はレイ-プリミティブインターセクションを処理してよく、グラフィックスコア370にレイごとに数千の命令を伴うオーバーロードが掛かるのを防ぐ。例えば、各レイトレーシングコア372は、境界ボックステストを実行するための(例えば、トラバーサル演算のための)第1のセットの専用回路、及び/又は、レイトライアングルインターセクションテスト(例えば、トラバーサルされたレイをインターセクトする)を実行するための第2のセットの専用回路を含む。したがって、例えば、マルチコアグループ365Aは、単にレイプローブを起動するだけでよく、レイトレーシングコア372は、レイトラバーサル及びインターセクションを独立して実行し、ヒットデータ(例えば、ヒット、ヒットなし、複数のヒットなど)をスレッドコンテキストに戻す。レイトレーシングコア372がトラバーサル及びインターセクション動作を実行している間、他のコア370、371は、他のグラフィックス又は計算作業を解放又は実行する。
【0096】
オプションで、各レイトレーシングコア372は、BVHテスト工程を実行するトラバーサルユニット、及び/又は、レイ-プリミティブインターセクションテストを実行するインターセクションユニットを含んでよい。インターセクションユニットは、「ヒット」、「ヒットなし」又は「複数のヒット」応答を生成し、適切なスレッドに提供する。トラバーサル及びインターセクション動作中、他のコア(例えば、グラフィックスコア370及びテンソルコア371)の実行リソースは、他の形式のグラフィックス作業を実行すべく解放される。
【0097】
以下に説明される一つのオプションの実施形態では、グラフィックスコア370とレイトレーシングコア372との間で作業が分散されるハイブリッドラスタライズ/レイトレーシング手法が用いられる。
【0098】
レイトレーシングコア372(及び/又は、他のコア370、371)は、DispatchRaysコマンドを含むマイクロソフト(登録商標)のDirectXレイトレーシング(DXR)などのレイトレーシング命令セット用のハードウェアサポート、並びに、各オブジェクトに対する固有のセットのシェーダ及びテクスチャの割り当てを可能にするray-generationシェーダ、closest-hitシェーダ、any-hitシェーダ、及び、missシェーダを含んでよい。レイトレーシングコア372、グラフィックスコア370及びテンソルコア371によりサポートされ得る別のレイトレーシングプラットフォームは、Vulkan1.1.85である。しかしながら、ここで説明される基礎となる原理は任意の特定のレイトレーシングISAに限定されることはないことを留意されたい。
【0099】
一般に、様々なコア372、371、370は、ray Generation、closest hit、Any Hit、レイ-プリミティブインターセクション、プリミティブごと及び階層境界ボックス構築、ミス、ビジット及び例外のうちの1つ又は複数のための命令/機能を含むレイトレーシング命令セットをサポートしてよい。より具体的には、好ましい実施形態は、以下の機能のうちの1つ又は複数を実行するレイトレーシング命令を含む。
【0100】
[Ray Generation]-Ray Generation命令は、各画素、サンプル、又は、他のユーザに規定される作業割り当てのために実行されてよい。
【0101】
[Closest Hit]-closest hit命令は、シーン内のレイとプリミティブとの最も近い交点を見つけるべく実行されてよい。
【0102】
[Any Hit]-any hit命令は、潜在的に、シーン内のレイとプリミティブとの間の複数のインターセクションを識別して、新たな最も近い交点を識別する。
【0103】
[インターセクション]-インターセクション命令は、レイ-プリミティブインターセクションテストを実行し、結果を出力する。
【0104】
[プリミティブごとの境界ボックス構築]-この命令は、(例えば、新たなBVH又は他のアクセラレーションデータ構造を構築する場合)所定のプリミティブ又はプリミティブのグループの周りの境界ボックスを構築する。
【0105】
[ミス]-シーン内のすべてのジオメトリ又はシーンの特定の領域にレイが当たらなかったことを示す。
【0106】
[ビジット]-レイがトラバースすることになる子ボリュームを示す。
【0107】
[例外]-様々なタイプの例外ハンドラ(例えば、様々なエラー条件に対して呼び出される)を含む。
[GPU-ホストプロセッサのインターコネクトに関する技術]
【0108】
図4Aは、例えば、
図2Aに示される並列プロセッサ200などの複数のGPU410-413が、高速リンク440A-440D(例えば、バス、ポイントツーポイントインターコネクトなど)を通じて、複数のマルチコアプロセッサ405-406に通信可能に連結されている例示的なアーキテクチャを示す。高速リンク440A-440Dは、実装に応じて、4GB/s、30GB/s、80GB/s又はそれ以降の通信スループットをサポートしてよい。様々なインターコネクトプロトコルが用いられてよく、限定されるものではないが、PCIe4.0又は5.0、及び、NVLink2.0を含む。しかしながら、本明細書で説明される基礎となる原理は、任意の特定の通信プロトコル又はスループットに限定されるものではない。
【0109】
2つ又はそれより多くのGPU410-413は、高速リンク442A-442Bを通じてインターコネクトされてよく、高速リンク440A-440Dのために用いられるものと同一又はこれらとは異なるプロトコル/リンクを用いて実装されてよい。同様に、2つ又はそれより多くのマルチコアプロセッサ405-406は、20GB/s、30GB/s、120GB/s、又は、より高い速度で動作する対称マルチプロセッサ(SMP)バスであり得る高速リンク443を通じて接続されてよい。あるいは、
図4Aに示される様々なシステムコンポーネント間のすべての通信は、同一のプロトコル/リンクを用いて(例えば、共通のインターコネクトファブリックを通じて)実現されてよい。しかしながら、すでに述べたように、本明細書で説明される基礎となる原理は、任意の特定のタイプのインターコネクト技術に限定されるものではない。
【0110】
各マルチコアプロセッサ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/Optane又はNano‐Ramなどの不揮発性メモリであってよい。例えば、複数のメモリの一部は揮発性メモリであってよく、別の一部が不揮発性メモリ(例えば、2レベルのメモリ(2LM)階層を用いる)であってよい。
【0111】
以下に説明されるように、様々なプロセッサ405-406及びGPU410-413が特定のメモリ401-402、420-423にそれぞれ物理的に連結されてよいが、同一の仮想システムアドレス空間(「実効アドレス」空間とも称される)が様々な物理メモリのすべての間で分散されるユニファイドメモリアーキテクチャが実装されてよい。例えば、プロセッサメモリ401-402はそれぞれ、64GBのシステムメモリアドレス空間を有してよく、GPUメモリ420-423はそれぞれ、32GBのシステムメモリアドレス空間を有してよい(この例では、結果として、合計で256GBのアドレス指定可能メモリとなる)。
【0112】
図4Bは、マルチコアプロセッサ407とグラフィックスアクセラレーションモジュール446との間のインターコネクトに関する追加の任意の詳細を示す。グラフィックスアクセラレーションモジュール446は、高速リンク440を介してプロセッサ407に連結されるラインカード上に統合される1つ又は複数のGPUチップを含んでよい。あるいは、グラフィックスアクセラレーションモジュール446は、プロセッサ407と同一のパッケージ又はチップ上に統合されてよい。
【0113】
図示されるプロセッサ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は、システムメモリ441を接続し、プロセッサメモリ401-402を含んでよい。
【0114】
コヒーレンスバス464を通じてコア間通信を介して様々なキャッシュ462A-462D、456及びシステムメモリ441に格納されるデータ及び命令に対して、コヒーレンシが維持される。例えば、各キャッシュは、関連付けられるキャッシュコヒーレンシロジック/回路を有してよく、特定のキャッシュラインに対して検出される読み出し又は書き込みに応答して、コヒーレンスバス464を通じてそれらと通信する。一つの実装において、キャッシュスヌーピングプロトコルは、キャッシュアクセスをスヌープすべく、コヒーレンスバス464を通じて実装される。キャッシュスヌーピング/コヒーレンシ技術は、当業者により十分に理解されており、ここでは、本明細書で説明される基礎となる原理が曖昧になることを避けるために、詳細に説明することはしない。
【0115】
コヒーレンスバス464にグラフィックスアクセラレーションモジュール446を通信可能に連結し、グラフィックスアクセラレーションモジュール446が、コアのピアとして、キャッシュコヒーレンスプロトコルに加わることが可能となるプロキシ回路425が提供されてよい。具体的には、インタフェース435は、高速リンク440(例えば、PCIeバス、NVLinkなど)を通じたプロキシ回路425への接続性を提供し、インタフェース437は、グラフィックスアクセラレーションモジュール446を高速リンク440に接続する。
【0116】
一つの実装において、アクセラレータ統合回路436は、グラフィックスアクセラレーションモジュール446の複数のグラフィックス処理エンジン431、432、Nの代わりに、キャッシュ管理、メモリアクセス、コンテキスト管理、及び、割り込み管理サービスを提供する。グラフィックス処理エンジン431、432、Nはそれぞれ、別個のグラフィックス処理ユニット(GPU)を有してよい。あるいは、グラフィックス処理エンジン431、432、Nは、グラフィックス実行ユニット、メディア処理エンジン(例えば、ビデオエンコーダ/デコーダ)、サンプラ、ブリットエンジンなど、GPU内の異なるタイプのグラフィックス処理エンジンを有してよい。つまり、グラフィックスアクセラレーションモジュールは、複数のグラフィックス処理エンジン431-432、Nを有するGPUであってよい、又は、グラフィックス処理エンジン431-432、Nは、共通のパッケージ、ラインカード又はチップ上に統合される個々のGPUであってよい。
【0117】
アクセラレータ統合回路436は、仮想-物理メモリ変換(有効‐実メモリ変換とも称される)、及び、システムメモリ441にアクセスするためのメモリアクセスプロトコルなどの様々なメモリ管理機能を実行するためのメモリ管理ユニット(MMU)439を含んでよい。MMU439は、仮想/実効-物理/実アドレス変換をキャッシングするための変換ルックアサイドバッファ(TLB)(図示されていない)を含んでもよい。一つの実装において、キャッシュ438は、グラフィックス処理エンジン431-432、Nによる効率的なアクセスのためのコマンド及びデータを格納する。キャッシュ438及びグラフィックスメモリ433-434、Nに格納されるデータは、コアキャッシュ462A-462D、456及びシステムメモリ411とのコヒーレントが維持され得る。すでに述べたように、これは、キャッシュ438及びメモリ433-434の代わりに、キャッシュコヒーレンシメカニズムに参加するプロキシ回路425を介して実現され得る(例えば、プロセッサキャッシュ462A-462D、456上のキャッシュラインの修正/アクセスに関連するキャッシュ438に更新を送信し、キャッシュ438から更新を受信する)。
【0118】
レジスタ445のセットは、グラフィックス処理エンジン431-432、Nにより実行されるスレッドのためのコンテキストデータを格納し、コンテキスト管理回路448は、スレッドコンテキストを管理する。例えば、コンテキスト管理回路448は、コンテキスト切り替え中に様々なスレッドのコンテキストを保存及び復元する保存及び復元工程を実行してよい(例えば、第2スレッドがグラフィックス処理エンジンにより実行され得るように、第1スレッドが保存され、第2スレッドが格納される)。例えば、コンテキストスイッチにおいて、コンテキスト管理回路448は、(例えば、コンテキストポインタにより識別される)メモリ内の指定された領域に現在のレジスタ値を格納してよい。次に、コンテキストに戻る場合、レジスタ値を復元してよい。例えば、割り込み管理回路447は、システムデバイスから割り込みを受信し、受信した割り込みを処理してよい。
【0119】
一つの実装において、グラフィックス処理エンジン431からの仮想/実効アドレスは、MMU439によりシステムメモリ411内の実/物理アドレスに変換される。オプションで、アクセラレータ統合回路436は、複数(例えば、4、8、16)のグラフィックスアクセラレータモジュール446及び/又は他のアクセラレータデバイスをサポートする。グラフィックスアクセラレータモジュール446は、プロセッサ407上で実行される単一アプリケーションに専用であってよい、又は、複数のアプリケーション間で共有されてよい。オプションで、グラフィックス処理エンジン431-432、Nのリソースが、複数のアプリケーション又は仮想マシン(VM)を用いて共有される仮想化されたグラフィックス実行環境が提供される。リソースは、VM及び/又はアプリケーションと関連付けられる処理要求及び優先度に基づいて、異なるVM及び/又はアプリケーションに割り当てられる「スライス」に細分化されてよい。
【0120】
したがって、アクセラレータ統合回路436は、グラフィックスアクセラレーションモジュール446にとってのシステムへのブリッジとしての機能を果たし、アドレス変換及びシステムメモリキャッシュサービスを提供する。一実施形態において、ブリッジ機能を促進すべく、アクセラレータ統合回路436は、共有I/O497(例えば、PCIe、USB)、及び、電圧、クロッキング、性能、熱及びセキュリティのシステム制御を可能にするハードウェアを含んでもよい。共有I/O497は、別個の物理接続を利用してよい、又は、高速リンク440をトラバースしてよい。さらに、アクセラレータ統合回路436は、グラフィックス処理エンジン、割り込み、及び、メモリ管理の仮想化を管理する仮想化機能をホストプロセッサに提供してよい。
【0121】
グラフィックス処理エンジン431-432、Nのハードウェアリソースは、ホストプロセッサ407により見られる実アドレス空間に明示的にマッピングされるので、任意のホストプロセッサは、実効アドレス値を用いて直接これらのリソースにアドレス指定できる。アクセラレータ統合回路436の一つのオプション的な機能は、グラフィックス処理エンジン431-432、Nがシステムにとってそれぞれ独立のユニットとして見えるように、グラフィックス処理エンジン431-432、Nを物理的に分離することである。
【0122】
1つ又は複数のグラフィックスメモリ433-434、Mは、それぞれ、グラフィックス処理エンジン431-432、Nのそれぞれに連結されてよい。グラフィックスメモリ433-434、Mはグラフィックス処理エンジン431-432、Nのそれぞれにより処理される命令及びデータを格納する。グラフィックスメモリ433-434、Mは、DRAM(スタック型DRAMを含む)、GDDRメモリ(例えば、GDDR5、GDDR6)、又は、HBMなどの揮発性メモリであってよい、及び/又は、3D XPoint/Optane又はNano-Ramなどの不揮発性メモリであってよい。
【0123】
高速リンク440上のデータトラフィックを減らすべく、バイアス技術が用いられてよく、グラフィックスメモリ433-434、Nに格納されるデータが、グラフィックス処理エンジン431-432、Nにより最も頻繁に用いられ、好ましくは、コア460A-460Dにより用いられていない(少なくとも頻繁ではない)データであることを保証する。同様に、バイアスメカニズムは、コア(及び、好ましくは、グラフィックス処理エンジン431-432、Nではない)により必要とされるデータをコアのキャッシュ462A-462D、456及びシステムメモリ411内に維持しようと試みる。
【0124】
図4Cに示される変形例によれば、アクセラレータ統合回路436は、プロセッサ407内に統合される。グラフィックス処理エンジン431-432、Nは、インタフェース437及びインタフェース435(ここでも、バス又はインタフェースプロトコルの任意の形式を利用してよい)を介した高速リンク440を通じてアクセラレータ統合回路436に直接通信する。アクセラレータ統合回路436は、
図4Bに関して説明されるものと同一の工程であるが、コヒーレンシバス464及びキャッシュ462A-462D、456に潜在的に近接する所定のより高いスループットで実行してよい。
【0125】
説明される実施形態は、専用プロセスプログラミングモデル(グラフィックスアクセラレーションモジュール仮想化なし)、及び、共有プログラミングモデル(仮想化あり)を含む異なるプログラミングモデルをサポートしてよい。後者は、アクセラレータ統合回路436により制御されるプログラミングモデル、及び、グラフィックスアクセラレーションモジュール446により制御されるプログラミングモデルを含んでよい。
【0126】
専用処理モデルの実施形態において、グラフィックス処理エンジン431-432、Nは、単一のオペレーティングシステムの下で単一アプリケーション又はプロセスに専用であってよい。単一アプリケーションは、他のアプリケーション要求をグラフィックスエンジン431-432、Nに送信し、VM/パーティション内の仮想化を提供することができる。
【0127】
専用プロセスプログラミングモデルにおいて、グラフィックス処理エンジン431-432、Nは、複数のVM/アプリケーションパーティションにより共有されてよい。共有モデルは、システムハイパーバイザに、グラフィックス処理エンジン431-432、Nを仮想化して、各オペレーティングシステムによるアクセスを可能にすることを要求する。ハイパーバイザを用いない単一のパーティションシステムについて、グラフィックス処理エンジン431-432、Nはオペレーティングシステムにより所有される。両方の場合、オペレーティングシステムは、グラフィックス処理エンジン431-432、Nを仮想化して、各プロセス又はアプリケーションへのアクセスを提供できる。
【0128】
共有プログラミングモデルについて、グラフィックスアクセラレーションモジュール446又は個別のグラフィックス処理エンジン431-432、Nは、プロセスハンドルを用いてプロセス要素を選択する。プロセス要素は、システムメモリ411に格納され、本明細書で説明される実効アドレス-実アドレス変換技術を用いてアドレス指定可能されてよい。プロセスハンドルは、グラフィックス処理エンジン431-432、Nにそのコンテキストを登録する場合にホストプロセスに提供される実装に固有の値であってよい(つまり、システムソフトウェア呼び出して、プロセス要素のリンクリストにプロセス要素を追加する)。プロセスハンドルの下位16ビットは、プロセス要素のリンクリスト内のプロセス要素のオフセットであってよい。
【0129】
図4Dは、例示的なアクセラレータ統合スライス490を示す。本明細書で用いられるように、「スライス」は、アクセラレータ統合回路436の処理リソースの特定の部分を有する。システムメモリ411内のアプリケーション実効アドレス空間482は、プロセス要素483を格納する。プロセス要素483は、プロセッサ407上で実行されるアプリケーション480からのGPU呼び出し481に応答して格納されてよい。プロセス要素483は、対応するアプリケーション480に関するプロセスの状態を含む。プロセス要素483に含まれる作業記述子(WD)484は、アプリケーションにより要求される単一のジョブとすることができる、又は、ジョブのキューに対するポインタを含んでよい。後者の場合、WD484は、アプリケーションのアドレス空間482におけるジョブリクエストキューへのポインタである。
【0130】
グラフィックスアクセラレーションモジュール446及び/又は個々のグラフィックス処理エンジン431-432、Nは、システムにおけるプロセスのすべて又はサブセットにより共有されることができる。例えば、本明細書で説明される技術は、プロセスの状態をセットアップし、仮想化された環境においてジョブを開始するグラフィックスアクセラレーションモジュール446にWD484を送信するインフラストラクチャを含んでよい。
【0131】
一つの実装において、専用プロセスプログラミングモデルは、実装に固有のものである。このモデルでは、単一プロセスが、グラフィックスアクセラレーションモジュール446又は個別のグラフィックス処理エンジン431を所有する。グラフィックスアクセラレーションモジュール446が単一プロセスにより所有されるので、ハイパーバイザは、所有するパーティションのためのアクセラレータ統合回路436を初期化し、オペレーティングシステムは、グラフィックスアクセラレーションモジュール446が割り当てられた時点で、所有するプロセスのためのアクセラレータ統合回路436を初期化する。
【0132】
動作中、アクセラレータ統合スライス490におけるWDフェッチユニット491は、グラフィックスアクセラレーションモジュール446のグラフィックス処理エンジンのうちの1つにより行われる作業のインジケーションを含む次のWD484をフェッチする。WD484からのデータは、レジスタ445に格納され、図示されるようなMMU439、割り込み管理回路447及び/又はコンテキスト管理回路448により用いられてよい。例えば、MMU439は、OS仮想アドレス空間485内のセグメント/ページテーブル486にアクセスするためのセグメント/ページウォーク回路を含んでよい。割り込み管理回路447は、グラフィックスアクセラレーションモジュール446から受信される割り込みイベント492を処理してよい。グラフィックス演算を実行した場合、グラフィックス処理エンジン431-432、Nにより生成される実効アドレス493は、MMU439により実アドレスに変換される。
【0133】
同一のセットのレジスタ445は、各グラフィックス処理エンジン431-432、N、及び/又は、グラフィックスアクセラレーションモジュール446により複製されてよく、ハイパーバイザ又はオペレーティングシステムにより初期化されてよい。これらの複製されたレジスタのそれぞれは、アクセラレータ統合スライス490に含まれてよい。ハイパーバイザにより初期化され得る例示的なレジスタが表1に示される。
表1-ハイパーバイザの初期化されるレジスタ
【表1】
【0134】
オペレーティングシステムにより初期化され得る例示的なレジスタが表2に示される。
表2-オペレーティングシステムの初期化されるレジスタ
【表2】
【0135】
各WD484は、特定のグラフィックスアクセラレーションモジュール446及び/又はグラフィックス処理エンジン431-432、Nに固有のものであってよい。それは、グラフィックス処理エンジン431-432、Nがその作業を行う必要があるすべての情報を含む、又は、アプリケーションが、完了すべき作業のコマンドキューをセットアップしたメモリ位置へのポインタとすることができる。
【0136】
図4Eは、共有モデルの追加の任意の詳細を示す。それは、プロセス要素リスト499が格納されるハイパーバイザの実アドレス空間498を含む。ハイパーバイザの実アドレス空間498は、オペレーティングシステム495のためのグラフィックスアクセラレーションモジュールエンジンを仮想化するハイパーバイザ496を介してアクセス可能である。
【0137】
共有プログラミングモデルは、システム内のパーティションのすべて又はサブセットからのプロセスのすべて又はサブセットがグラフィックスアクセラレーションモジュール446を用いることを可能にする。グラフィックスアクセラレーションモジュール446が複数のプロセス及びパーティションにより共有される2つのプログラミングモデル、すなわち、タイムスライス型の共有及びグラフィックス指示型の共有がある。
【0138】
このモデルでは、システムハイパーバイザ496は、グラフィックスアクセラレーションモジュール446を所有し、すべてのオペレーティングシステム495に対してその機能を利用可能にする。システムハイパーバイザ496による仮想化をサポートするグラフィックスアクセラレーションモジュール446について、グラフィックスアクセラレーションモジュール446は、以下の要件に従ってよい。1)アプリケーションのジョブリクエストは自律的でなければ(すなわち、状態がジョブ間で維持される必要はない)、又は、グラフィックスアクセラレーションモジュール446は、コンテキストの保存及び復元メカニズムを提供しなければならない。2)アプリケーションのジョブリクエストは、任意の変換障害を含む特定の時間内に完了することをグラフィックスアクセラレーションモジュール446により保証される、又は、グラフィックスアクセラレーションモジュール446は、ジョブの処理をプリエンプトする能力を提供する。3)グラフィックスアクセラレーションモジュール446は、指示型共有プログラミングモデルで動作している場合、プロセス間の公平性を保証しなければならない。
【0139】
共有モデルについて、アプリケーション480は、オペレーティングシステム495に、グラフィックスアクセラレーションモジュール446のタイプ、作業記述子(WD)、オーソリティマスクレジスタ(AMR)値及びコンテキストの保存/復元エリアポインタ(CSRP)を用いてシステムコールを行わせる必要があり得る。グラフィックスアクセラレーションモジュール446のタイプは、システムコールのための対象となるアクセラレーション機能を説明する。グラフィックスアクセラレーションモジュール446のタイプは、システム固有の値であってよい。WDは、グラフィックスアクセラレーションモジュール446用に具体的にフォーマット化され、グラフィックスアクセラレーションモジュール446のコマンド、ユーザにより規定される構造への実効アドレスポインタ、コマンドのキューへの実効アドレスポインタ、又は、グラフィックスアクセラレーションモジュール446により行われる作業を説明する任意の他のデータ構造の形式とすることができる。一実施形態において、AMR値は、現在のプロセスのために用いられるAMR状態である。オペレーティングシステムに渡される値は、AMRを設定するアプリケーションに類似する。アクセラレータ統合回路436及びグラフィックスアクセラレーションモジュール446の実装がユーザオーソリティマスクオーバーライドレジスタ(UAMOR)をサポートしていない場合、オペレーティングシステムは、ハイパーバイザコールにおいてAMRを渡す前に、現在のUAMORをAMR値に適用してよい。オプションで、ハイパーバイザ496は、AMRをプロセス要素483に配置する前に、現在のオーソリティマスクオーバーライドレジスタ(AMOR)値を適用してよい。CSRPは、コンテキスト状態を保存及び復元するグラフィックスアクセラレーションモジュール446に対するアプリケーションのアドレス空間482内の領域の実効アドレスを含むレジスタ445のうちの1つであってよい。ジョブ間で保存される必要がある状態がない場合、又は、ジョブがプリエンプトされた場合、このポインタはオプションである。コンテキストの保存/復元エリアは、固定されたシステムメモリであってよい。
【0140】
システムコールを受信すると、オペレーティングシステム495は、アプリケーション480が、グラフィックスアクセラレーションモジュール446を用いる権限を登録しており、当該権限が与えられていることを確認してよい。次に、オペレーティングシステム495は、表3に示される情報を用いてハイパーバイザ496を呼び出す。
表3-OS-ハイパーバイザコールパラメータ
【表3】
【0141】
ハイパーバイザコールを受信すると、ハイパーバイザ496は、オペレーティングシステム495は、グラフィックスアクセラレーションモジュール446を用いる権限を登録し、当該権限が与えられていることを確認する。次に、ハイパーバイザ496は、対応するグラフィックスアクセラレーションモジュール446のタイプに関するプロセス要素リンクリストにプロセス要素483を置く。プロセス要素は、表4に示される情報を含んでよい。
表4-プロセス要素情報
【表4】
【0142】
ハイパーバイザは、複数のアクセラレータ統合スライス490のレジスタ445を初期化してよい。
【0143】
図4Fに示されるように、一つのオプション実装では、物理プロセッサメモリ401-402及びGPUメモリ420-423にアクセスするために用いられる共通の仮想メモリアドレス空間を介してアドレス指定可能なユニファイドメモリが用いられる。この実装では、GPU410-413により実行される工程は、同一の仮想/実効メモリアドレス空間を利用して、プロセッサメモリ401-402にアクセスし、逆もまた同様であり、これにより、プログラマビリティを簡略化する。仮想/実効アドレス空間の第1部分はプロセッサメモリ401に、第2部分は第2プロセッサメモリ402に、第3部分はGPUメモリ420などに割り当てられてよい。これにより、仮想/実効メモリ空間全体(実効アドレス空間と称される場合がある)は、プロセッサメモリ401-402及びGPUメモリ420-423のそれぞれにわたって分散され、任意のプロセッサ又はGPUがメモリにマッピングされる仮想アドレスを用いて任意の物理メモリにアクセスすることが可能となる。
【0144】
ホストプロセッサ(例えば、405)のキャッシュと、GPU410-413との間のキャッシュコヒーレンスを保証し、一定のタイプのデータが格納されるべき物理メモリを示すバイアス技術を実施するMMU439A-439Eの1つ又は複数内のバイアス/コヒーレンス管理回路494A-494Eが提供されてよい。バイアス/コヒーレンス管理回路494A-494Eの複数のインスタンスが
図4Fに示される一方、バイアス/コヒーレンス回路は、1つ又は複数のホストプロセッサ405のMMU内、及び/又は、アクセラレータ統合回路436内に実装されてよい。
【0145】
GPU付属メモリ420-423は、システムメモリの一部としてマッピングされ、共有仮想メモリ(SVM)技術を用いてアクセスされてよいが、完全なシステムキャッシュコヒーレンスと関連付けられる典型的な性能上の欠点に悩まされることはない。煩わしいキャッシュコヒーレンスのオーバヘッドがないシステムメモリとしてアクセスされるGPU付属メモリ420-423の能力は、GPUオフロードのための有利な動作環境をもたらす。この配置は、ホストプロセッサ405のソフトウェアが、従来のI/O DMAデータコピーのオーバヘッドを伴うことなく、ホストプロセッサ405のソフトウェアがオペランドをセットアップすること、及び、計算結果にアクセスすることを可能にする。そのような従来のコピーは、簡易なメモリアクセスと比較してすべて非効率的であるドライバコール、割り込み、メモリにマッピングされたI/O(MMIO)アクセスに関わる。同時に、キャッシュコヒーレンスのオーバヘッドを伴わずに、GPU付属メモリ420-423にアクセスする能力は、オフロード計算の実行時間にとってクリティカルであり得る。ストリーミング書き込みメモリトラフィックが大きい場合、例えば、キャッシュコヒーレンスのオーバヘッドは、GPU410~413から見える有効書き込み帯域幅を大きく低減させる可能性がある。オペランドセットアップの効率、結果的なアクセスの効率、及び、GPU計算の効率はすべて、GPUオフロードの有効性を判定する機能を担う。
【0146】
GPUバイアスとホストプロセッサバイアスとの間の選択は、バイアストラッカーデータ構造により駆動され得る。バイアステーブルは、例えば、GPU付属メモリページごとに1又は2ビットを含むページ粒度の構造(つまり、メモリページの粒度で制御される)であってよいバイアステーブルが用いられてよい。バイアステーブルは、GPU410-413内のバイアスキャッシュを有する又は有しない状態で、1つ又は複数のGPU付属メモリ420-423のストールンメモリ(stolen memory)範囲内で実装されてよい(例えば、バイアステーブルの頻繁に/最近用いられたエントリをキャッシュすべく)。あるいは、バイアステーブル全体がGPU内に維持されてよい。
【0147】
一つの実装において、GPU付属メモリ420-423への各アクセスと関連付けられるバイアステーブルのエントリは、GPUメモリへの実際のアクセスの前にアクセスされることで、以下の工程を引き起こす。まず、GPUバイアスにおいてそれらのページを見つけたGPU410-413からローカルリクエストは、対応するGPUメモリ420-423に直接転送される。ホストバイアスにおいてそれらのページを見つけたGPUからのローカルリクエストは、(例えば、上述したような高速リンクを通じて)プロセッサ405に転送される。オプションで、ホストプロセッサバイアスにおいて要求されたページを見つけたプロセッサ405からのリクエストは、通常のメモリ読み出しのようなリクエストを完了する。あるいは、GPUバイアスページに指示されるリクエストは、GPU410-413に転送されてよい。次に、ページを現在用いていない場合、GPUは、ホストプロセッサバイアスにページを移行してよい。
【0148】
ページのバイアス状態は、ソフトウェアベースのメカニズム、ハードウェア支援型ソフトウェアベースのメカニズムのいずれか一方により、又は、制限されたセットの場合、純粋なハードウェアベースのメカニズムにより変更され得る。
【0149】
バイアス状態を変更するための1つのメカニズムがAPIコール(例えば、OpenCL)を用いると、APIコールによりGPUのデバイスドライバが呼び出され、GPUのデバイスドライバにより、GPUに対しバイアス状態を変更し、且ついくつかの移行のために、ホスト内のキャッシュフラッシュ操作を実行することを指示するメッセージがGPUに送信(又は、コマンド記述子をキューに入れる)される。キャッシュフラッシュ操作は、ホストプロセッサ405バイアスからGPUバイアスへの移行のために必要とされるが、逆の移行のためには必要とされていない。
【0150】
キャッシュコヒーレンシは、ホストプロセッサ405によりキャッシュ不可能なGPUバイアスページを一時的にレンダリングすることにより維持されてよい。実装に応じて、これらのページにアクセスすべく、プロセッサ405は、GPU410からのアクセスを要求してよく、GPU410は即座にアクセスを許可してもよいし、しなくてもよい。したがって、ホストプロセッサ405とGPU410との間の通信を低減するには、GPUバイアスページが、ホストプロセッサ405ではなく、GPUにより必要とされるページであることを保証することが有利であり、逆もまた同様である。
[グラフィックス処理パイプライン]
【0151】
図5は、グラフィックス処理パイプライン500を示す。
図2Dのグラフィックスマルチプロセッサ234、
図3Aのグラフィックスマルチプロセッサ325、
図3Bのグラフィックスマルチプロセッサ350などのグラフィックスマルチプロセッサは、図示されるグラフィックス処理パイプライン500を実装できる。グラフィックスマルチプロセッサは、本明細書で説明されるように、
図2Aの並列プロセッサ200などの並列処理サブシステム内に含まれることができ、
図1の並列プロセッサ112に関連してよく、これらのうちの1つの代わりに用いられてよい。様々な並列処理システムは、本明細書で説明されるような並列処理ユニット(例えば、
図2Aの並列処理ユニット202)の1つ又は複数のインスタンスを介してグラフィックス処理パイプライン500を実装できる。例えば、シェーダユニット(例えば、
図2Cのグラフィックスマルチプロセッサ234)は、頂点処理ユニット504、テセレーション制御処理ユニット508、テセレーション評価処理ユニット512、ジオメトリ処理ユニット516、及び、フラグメント/画素処理ユニット524のうちの1つ又は複数の機能を実行するように構成されてよい。データアセンブラ502、プリミティブアセンブラ506、514、518、テセレーションユニット510、ラスタライザ522及びラスタ演算ユニット526の機能は、処理クラスタ(例えば、
図2Aの処理クラスタ214)及び対応するパーティションユニット(例えば、
図2Aのパーティションユニット220A-220N)内の他の処理エンジンにより実行されてもよい。グラフィックス処理パイプライン500は、1つ又は複数の機能のための専用の処理ユニットを用いて実装されてもよい。グラフィックス処理パイプライン500の1つ又は複数の部分が、汎用プロセッサ(例えば、CPU)内の並列処理ロジックにより実行されることも可能である。オプションで、グラフィックス処理パイプライン500の1つ又は複数の部分は、メモリインタフェース528を介して、オンチップメモリ(例えば、
図2Aの並列プロセッサメモリ222)にアクセスすることができ、
図2Aのメモリインタフェース218のインスタンスであってよい。グラフィックス処理パイプライン500は、
図3Cのマルチコアグループ365Aを介して実装されてもよい。
【0152】
データアセンブラ502は、サーフェス及びプリミティブに対する頂点データを収集し得る処理ユニットである。次に、データアセンブラ502は、頂点属性を含む頂点データを頂点処理ユニット504に出力する。頂点処理ユニット504は、頂点シェーダプログラムを実行するプログラマブル実行ユニットであり、頂点シェーダプログラムにより指定されるとおりに、頂点データをライティング及び変換する。頂点処理ユニット504は、頂点データを処理する際に用いられるキャッシュ、ローカル又はシステムメモリに格納されているデータを読み出し、オブジェクトベースの座標表現からワールドスペース座標空間又は正規化されたデバイス座標空間に頂点データを変換するようにプログラミングされてよい。
【0153】
プリミティブアセンブラ506の第1のインスタンスは、頂点処理ユニット504から頂点属性を受信する。プリミティブアセンブラ506は、必要に応じて格納された頂点属性を読み出し、テセレーション制御処理ユニット508による処理のためにグラフィックスプリミティブを構築する。グラフィックスプリミティブは、様々なグラフィックス処理アプリケーションプログラミングインタフェース(API)によりサポートされるような三角形、線分、点及びパッチなどを含む。
【0154】
テセレーション制御処理ユニット508は、入力された頂点をジオメトリックパッチのための制御点として扱う。制御点は、パッチからの入力された表現(例えば、パッチのベース)からテセレーション評価処理ユニット512によるサーフェス評価で用いるのに適した表現に変換される。テセレーション制御処理ユニット508は、ジオメトリックパッチのエッジに関するテセレーション係数を計算することもできる。テセレーション係数は、単一のエッジに適用され、当該エッジに関連付けられた詳細情報のビュー依存レベルを定量化する。テセレーションユニット510は、パッチのエッジのテセレーション係数を受信し、且つ、当該パッチを、線、三角形、四辺形のプリミティブなど、複数のジオメトリックプリミティブにテセレーションするように構成されており、これらのプリミティブはテセレーション評価処理ユニット512に伝送される。テセレーション評価処理ユニット512は、細分化されたパッチのパラメータ化された座標に対し処理を行い、当該ジオメトリックプリミティブに関連付けられたサーフェス表現及び各頂点の頂点属性を生成する。
【0155】
プリミティブアセンブラ514の第2のインスタンスは、テセレーション評価処理ユニット512から頂点属性を受信し、必要に応じて、格納されている頂点属性を読み出し、ジオメトリ処理ユニット516による処理のためのグラフィックスプリミティブを構築する。ジオメトリ処理ユニット516は、ジオメトリシェーダプログラムを実行して、ジオメトリシェーダプログラムにより指定されるとおりにプリミティブアセンブラ514から受信したグラフィックスプリミティブを変換するプログラマブル実行ユニットである。ジオメトリ処理ユニット516は、グラフィックスプリミティブを、1つ又は複数の新たなグラフィックスプリミティブに細分化し、且つ、当該新たなグラフィックスプリミティブをラスタライズするために用いられるパラメータを計算するようにプログラミングされてよい。
【0156】
ジオメトリ処理ユニット516は、ジオメトリストリーム内の要素を追加又は削除することが可能であり得る。ジオメトリ処理ユニット516は、新たなグラフィックスプリミティブを指定するパラメータ及び頂点をプリミティブアセンブラ518に出力する。プリミティブアセンブラ518は、ジオメトリ処理ユニット516からパラメータ及び頂点を受信し、ビューポートスケール、カル及びクリップユニット520による処理のためのグラフィックスプリミティブを構築する。ジオメトリ処理ユニット516は、ジオメトリデータを処理する際に用いられる並列プロセッサメモリ又はシステムメモリに格納されているデータを読み出す。ビューポートスケール、カル及びクリップユニット520は、クリッピング、カリング、及び、ビューポートスケーリングを実行し、処理されたグラフィックスプリミティブをラスタライザ522に出力する。
【0157】
ラスタライザ522は、デプスカリング及び他のデプスベースの最適化を実行できる。ラスタライザ522はまた、新たなグラフィックスプリミティブに対してスキャン変換を実行して、フラグメントを生成し、これらのフラグメント及び関連するカバレッジデータをフラグメント/画素処理ユニット524に出力する。フラグメント/画素処理ユニット524は、フラグメントシェーダプログラム又は画素シェーダプログラムを実行するように構成されるプログラマブル実行ユニットである。フラグメント/画素処理ユニット524は、フラグメント又は画素シェーダプログラムにより指定されるとおりにラスタライザ522から受信したフラグメント又は画素を変換する。例えば、フラグメント/画素処理ユニット524は、限定されるものではないが、テクスチャマッピング、シェーディング、ブレンディング、テクスチャ補正及び奥行き補正などを含む工程を実行して、シェーディングされたフラグメント又は画素を生成するようにプログラミングされてよく、当該フラグメント又は画素はラスタ演算ユニット526に出力される。フラグメント/画素処理ユニット524は、フラグメントデータを処理する場合に用いられる並列プロセッサメモリ又はシステムメモリのいずれかに格納されているデータを読み出すことができる。フラグメント又は画素シェーダプログラムは、処理ユニットのために構成されるサンプリングレートに応じて、サンプル、画素、タイル又は他の粒度でシェーディングするように構成されてよい。
【0158】
ラスタ演算ユニット526は、限定されるものではないが、ステンシル、z検定、ブレンディングなどを含むラスタ演算を実行し、グラフィックスメモリ(例えば、
図2Aの並列プロセッサメモリ222及び/又は
図1のシステムメモリ104)に格納される処理されたグラフィックスデータとして、1つ又は複数のディスプレイデバイス110上に表示されるグラフィックスデータとして、又は、1つ又は複数のプロセッサ102又は並列プロセッサ112のうちの1つによるさらなる処理のために、画素データを出力する処理ユニットである。ラスタ演算ユニット526は、メモリに書き込まれるz又はカラーデータを解凍し、メモリから読み出されるz又はカラーデータを解凍するように構成されてよい。
[機械学習の概要]
【0159】
上述したアーキテクチャは、機械学習モデルを用いて訓練及び推論演算を実行するために適用され得る。機械学習は、数多くの種類のタスクを解決することに成功してきた。機械学習アルゴリズム(例えば、ニューラルネットワーク)を訓練及び使用する際に生じる計算は、本質的に効率的な並列実装にふさわしい。したがって、例えば、汎用グラフィックス処理ユニット(GPGPU)などの並列プロセッサは、ディープニューラルネットワークの実用的な実装において重要な機能を果たしてきた。単一命令、複数スレッド(SIMT)アーキテクチャを用いた並列グラフィックスプロセッサは、グラフィックスパイプラインにおける並列処理の量を最大化するように設計される。SIMTアーキテクチャにおいては、処理効率性を向上させるべく、並列スレッドのグループが、可能な限り頻繁に、プログラム命令を同期して一緒に実行することを試みる。並列機械学習アルゴリズム実装によりもたらされる効率性は、高容量ネットワークの使用を可能にし、これらのネットワークがより大きなデータセットに対して訓練されることを可能にする。
【0160】
機械学習アルゴリズムは、データのセットに基づいて学習できるアルゴリズムである。例えば、機械学習アルゴリズムは、データセット内で高レベルの抽象化をモデリングするように設計されることができる。例えば、画像認識アルゴリズムは、所定の入力がいくつかのカテゴリのうちのいずれに属するかを判定するために用いられることができ、回帰アルゴリズムは、入力が与えられると数値を出力してよく、パターン認識アルゴリズムは、変換されたテキストを生成する、又は、テキスト対音声及び/又は音声認識を実行するために用いられることができる。
【0161】
例示的なタイプの機械学習アルゴリズムはニューラルネットワークである。数多くのタイプのニューラルネットワークがあり、単純なタイプのニューラルネットワークは、フィードフォワードネットワークである。フィードフォワードネットワークは、ノードが複数の層に配置される非巡回グラフとして実装されてよい。通常、フィードフォワードネットワークトポロジは、少なくとも1つの隠れ層により分離される入力層及び出力層を含む。隠れ層は、入力層が受信した入力を出力層において出力を生成するのに有用な表現に変換する。ネットワークノードは、エッジを介して隣接する層にあるノードにすべて接続されるが、各層内のノード間にはエッジは存在しない。フィードフォワードネットワークの入力層のノードで受信されるデータは、層を接続するエッジのそれぞれに関連付けられた係数(「重み」)に基づいて、ネットワーク内の各連続層のノードの状態を算出する活性化関数を介して、出力層のノードに伝搬「つまり、フィードフォワード」される。アルゴリズムが実行されることにより表現される特定のモデルに応じて、ニューラルネットワークアルゴリズムからの出力は、様々な形式を取ることができる。
【0162】
機械学習アルゴリズムが特定の問題をモデル化するために用いられ得る前に、当該アルゴリズムは、訓練データセットを用いて訓練される。ニューラルネットワークを訓練することは、ネットワークによりモデル化される問題を表す訓練データのセットを用いてネットワークトポロジを選択すること、及び、ネットワークモデルが当該訓練データのセットのあらゆるインスタンスに対して最小のエラーで実行するようになるまで重み、重みを調整することを含む。例えば、ニューラルネットワークのための教師あり学習訓練プロセスの間に、訓練データセット内のあるインスタンスを表す入力に応答して、ネットワークにより生成された出力は、そのインスタンスの「正解」のラベル付き出力と比較され、出力とそのラベル付き出力との間の差を表すエラー信号が計算され、当該エラー信号がネットワークの層を通って後方伝搬される際、そのエラーを最小化すべく、これらの関係に関連付けられた重みが調整される。訓練データセットのインスタンスから生成される出力のそれぞれに対するエラーが最小化された場合、ネットワークは、「訓練された」とみなされる。
【0163】
機械学習アルゴリズムの精度は、アルゴリズムを訓練するために用いられるデータセットの品質により大きく影響され得る。訓練プロセスは、計算量が多くなる可能性があり、従来の汎用プロセッサでは多大な時間が掛かる場合がある。したがって、並列処理ハードウェアは、多くのタイプの機械学習アルゴリズムを訓練するために用いられる。これは、ニューラルネットワークにおける係数を調整する際に実行される計算が、もともと並列実装に適しているので、ニューラルネットワークの訓練を最適化するのに特に有用である。具体的には、多くの機械学習アルゴリズム及びソフトウェアアプリケーションは、汎用グラフィックス処理デバイス内の並列処理ハードウェアの利用に適合されている。
【0164】
図6は、機械学習ソフトウェアスタック600の一般化された図である。機械学習アプリケーション602は、訓練データセットを用いてニューラルネットワークを訓練する、又は、訓練されたディープニューラルネットワークを用いて、マシンインテリジェンスを実装するように構成されることができる。機械学習アプリケーション602は、ニューラルネットワークのための訓練及び推論機能、及び/又は、デプロイ前にニューラルネットワークを訓練するために用いられてよい専用ソフトウェアを含むことができる。機械学習アプリケーション602は、限定されることはないが、画像認識、マッピング及び位置特定、自律ナビゲーション、音声合成、医用イメージング、又は言語変換を含む任意のタイプのマシンインテリジェンスを実装できる。
【0165】
機械学習アプリケーション602のハードウェアアクセラレーションは、機械学習フレームワーク604を介して有効にされ得る。機械学習フレームワーク604は、機械学習プリミティブのライブラリを提供できる。機械学習プリミティブは、機械学習アルゴリズムにより一般的に実行される基本的なオペレーションである。機械学習フレームワーク604がない場合、機械学習アルゴリズムの開発者は、機械学習アルゴリズムに関連付けられた主な計算ロジックを作成及び最適化し、次に、新たな並列プロセッサが開発されるときに計算ロジックを再最適化するのに必要とされるであろう。代わりに、機械学習アプリケーションは、機械学習フレームワーク604により提供されるプリミティブを用いて、必要な計算を実行するように構成されることができる。例示的なプリミティブには、テンソル畳み込み、活性化関数及びプーリングが含まれ、これらは、畳み込みニューラルネットワーク(CNN)を訓練する際に実行される計算演算である。機械学習フレームワーク604はまた、行列演算及びベクトル演算などの多くの機械学習アルゴリズムにより実行される基本的な線形代数サブプログラムを実装するためのプリミティブも提供できる。
【0166】
機械学習フレームワーク604は、機械学習アプリケーション602から受信した入力データを処理し、計算フレームワーク606への適切な入力を生成することができる。計算フレームワーク606は、GPGPUドライバ608に提供される基礎となる命令を要約して、機械学習フレームワーク604を有効にすることができ、機械学習フレームワーク604がGPGPUハードウェア610のアーキテクチャの詳しい知識を持つことを要求することなく、GPGPUハードウェア610を介してハードウェアアクセラレーションを活用する。さらに、計算フレームワーク606は、GPGPUハードウェア610の様々なタイプ及び世代にわたる機械学習フレームワーク604のハードウェアアクセラレーションを可能にし得る。
[GPGPU機械学習アクセラレーション]
【0167】
図7は、
図2Aの並列プロセッサ200又は
図1の並列プロセッサ112であってよい汎用グラフィックス処理ユニット700を示す。汎用処理ユニット(GPGPU)700は、ディープニューラルネットワークの訓練に関連付けられるタイプの計算作業負荷を処理する際に特に効率的となるように構成されることができる。さらに、GPGPU700はGPGPUの他のインスタンスに直接リンクされ、マルチGPUクラスタを生成し、特にディープニューラルネットワークの訓練速度を改善することができる。
【0168】
GPGPU700は、ホストプロセッサとの接続を有効にするホストインタフェース702を含む。ホストインタフェース702は、PCI Expressインタフェースであってよい。しかしながら、ホストインタフェースは、ベンダ固有の通信インタフェース又は通信ファブリックとすることもできる。GPGPU700は、ホストプロセッサからコマンドを受信し、グローバルスケジューラ704を用いて、これらのコマンドと関連付けられる実行スレッドを処理クラスタ706A-706Hのセットに分散する。処理クラスタ706A-706Hは、キャッシュメモリ708を共有する。キャッシュメモリ708は、処理クラスタ706A-706H内のキャッシュメモリに対するより高レベルのキャッシュとして機能できる。図示される処理クラスタ706A-706Hは、
図2Aにおける処理クラスタ214A-214Nと対応してよい。
【0169】
GPGPU700は、メモリコントローラ712A-712Bのセットを介して処理クラスタ706A-Hと連結されるメモリ714A-714Bを含む。メモリユニット714A-714Bは、ダイナミックランダムアクセスメモリ(DRAM)を含むメモリデバイス、又は、グラフィックスダブルデータレート(GDDR)メモリを含む同期グラフィックスランダムアクセスメモリ(SGRAM)などのグラフィックスランダムアクセスメモリの様々なタイプのメモリデバイスを含むことができる。メモリ714A-714Bは、限定されるものではないが、高帯域幅メモリ(HBM)を含む3Dスタックメモリを含んでもよい。
【0170】
処理クラスタ706A-706Hのそれぞれは、
図2Dのグラフィックスマルチプロセッサ234、
図3Aのグラフィックスマルチプロセッサ325、
図3Bのグラフィックスマルチプロセッサ350などのグラフィックスマルチプロセッサのセットを含んでよい、又は、
図3Cのマルチコアグループ365A-365Nを含んでよい。計算クラスタのグラフィックスマルチプロセッサは、機械学習計算に適したものを含む精度の範囲で計算処理を実行できる複数のタイプの整数及び浮動小数点論理ユニットを含む。例えば、処理クラスタ706A-706Hのそれぞれにおける浮動小数点ユニットの少なくともサブセットは、16ビット又は32ビットの浮動小数点演算を実行するように構成されることができる一方、浮動小数点ユニットの異なるサブセットは、64ビットの浮動小数点演算を実行するように構成されることができる。
【0171】
GPGPU700の複数のインスタンスは、計算クラスタとして動作するように構成されることができる。同期及びデータ交換のために計算クラスタにより用いられる通信メカニズムは、実施形態にわたって変化する。例えば、GPGPU700の複数のインスタンスは、ホストインタフェース702を通じて通信する。一実施形態において、GPGPU700は、GPGPU700を、GPGPUの他のインスタンスへの直接接続を可能にするGPUリンク710と連結するI/Oハブ709を含む。GPUリンク710は、GPGPU700の複数のインスタンス間での通信及び同期を可能にする専用のGPU間ブリッジに連結されてよい。オプションで、GPUリンク710は、他のGPGPU又は並列プロセッサに対してデータを伝送及び受信すべく、高速インターコネクトと連結する。GPGPU700の複数のインスタンスは、別個のデータ処理システムに位置してよく、ホストインタフェース702を介してアクセス可能なネットワークデバイスを介して通信してよい。GPUリンク710は、ホストインタフェース702に加えて、又は、代わりとして、ホストプロセッサへの接続を有効にするように構成されてよい。
【0172】
GPGPU700の図示される構成は、ニューラルネットワークを訓練するように構成されることができ、GPGPU700の代替的な構成は、高性能又は低電力推論プラットフォーム内のデプロイのために構成されることができる。推論構成において、GPGPU700は、訓練構成と比較してより少ない処理クラスタ706A-706Hを含む。さらに、メモリ714A-714Bと関連付けられるメモリ技術は、推論及び訓練構成間で異なってよい。一実施形態において、GPGPU700の推論構成は、推論固有の命令をサポートできる。例えば、推論構成は、1つ又は複数の8ビット整数ドット積命令のサポートを提供することができ、当該命令は、デプロイされたニューラルネットワークのための推論演算中に共通で用いられる。
【0173】
図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間リンク816のセットを介してインターコネクトできる。高速GPU間リンクは、
図7のGPUリンク710など、専用のGPUリンクを介してGPGPU806A-806Dのそれぞれに接続することができる。P2P GPUリンク816は、プロセッサ802が接続されるホストインタフェースバスを通じた通信を要求することなく、GPGPU806A-806Dのそれぞれの間での直接通信を可能にする。P2P GPUリンクに向けられたGPU間トラフィックに関して、ホストインタフェースバスは、システムメモリアクセスのために、又は、マルチGPUコンピューティングシステム800の他のインスタンスと、例えば、1つ又は複数のネットワークデバイスを介して通信すべく、利用可能なままである。
図8において、GPGPU806A-806Dは、ホストインタフェーススイッチ804を介してプロセッサ802に接続されている一方、プロセッサ802は、代替的に、P2P GPUリンク816に対する直接サポート、及び、GPGPU806A-806Dに直接接続を含んでよい。
[機械学習ニューラルネットワークの実装]
【0174】
本明細書で説明されるコンピューティングアーキテクチャは、機械学習のためにニューラルネットワークを訓練及びデプロイするのに特に適しているタイプの並列処理を実行するように構成されることができる。ニューラルネットワークは、グラフ関係を有する機能のネットワークとして一般化され得る。周知のように、機械学習に用いられるニューラルネットワークの実装には様々なタイプがある。すでに説明したように、1つの例示的なタイプのニューラルネットワークはフィードフォワードネットワークである。
【0175】
第2の例示的なタイプのニューラルネットワークは、畳み込みニューラルネットワーク(CNN)である。CNNは、画像データなど既知のグリッド状トポロジを有するデータを処理するための専用のフィードフォワードニューラルネットワークである。したがって、CNNは、コンピュータビジョンアプリケーション及び画像認識アプリケーションで一般的に用いられるが、それらはまた、音声処理及び言語処理など、他のタイプのパターン認識に用いられてもよい。CNN入力層におけるノードは、「フィルタ」(網膜に見つけられる受容野から発想を得た特徴検出)のセットにまとめられ、フィルタの各セットの出力は、ネットワークの連続層においてノードに伝搬される。CNNの計算は、各フィルタに畳み込み数学演算を適用し、そのフィルタの出力を生成することを含む。畳み込みとは、2つのもとの機能のうちの一方の修正版である第3の機能を生成すべく、当該2つの機能により実行される特別な種類の数学演算である。畳み込みネットワークの用語において、畳み込みに対する第1の機能は入力と称されることがある一方、第2の機能は、畳み込みカーネルと称されることがある。出力は、特徴マップと称されてよい。例えば、畳み込み層への入力は、入力画像の様々なカラー成分を規定するデータの多次元アレイとすることができる。畳み込みカーネルは、パラメータの多次元アレイとすることができ、パラメータは、ニューラルネットワークに対する訓練プロセスにより適合される。
【0176】
再帰型ニューラルネットワーク(RNN)は、層間のフィードバック接続を含むフィードフォワードニューラルネットワークのファミリである。RNNは、ニューラルネットワークの異なる部分にわたるパラメータデータを共有することにより、シーケンシャルデータのモデル化を可能にする。RNNに関するアーキテクチャはサイクルを含む。RNNからの出力データの少なくとも一部はシーケンス中の後続の入力を処理するためのフィードバックとして用いられるので、サイクルは変数の現在の値が、将来の時点におけるそれ自体の値への影響を表す。この機能は、言語データが構成され得る可変性に起因して、特にRNNを言語処理に役立てる。
【0177】
以下に示す図は、例示的なフィードフォワード、CNN及びRNNネットワークを示しており、これらのタイプの各ネットワークをそれぞれ訓練及びデプロイするための一般的なプロセスについて説明する。これらの説明が例示的なものであり、本明細書において説明される任意の特定の実施形態に限定されることはなく、図示されるコンセプトは、一般的なディープニューラルネットワーク及び機械学習技術に一般的に適用され得ることが理解されるだろう。
【0178】
上述した例示的なニューラルネットワークは、深層学習を実行するために用いられることができる。深層学習は、ディープニューラルネットワークを用いる機械学習である。深層学習において用いられるディープニューラルネットワークは、単一の隠れ層のみを含む浅いニューラルネットワークに対し、複数の隠れ層で構成される人工ニューラルネットワークである。ディープニューラルネットワークは、一般に、訓練するのに計算量がより多い。しかしながら、ネットワークの追加の隠れ層は、浅い機械学習技術と比較して、出力エラーを結果的に減らすマルチステップパターン認識を可能にする。
【0179】
深層学習で用いられるディープニューラルネットワークは通常、バックエンドネットワークに連結された特徴認識を実行するためのフロントエンドネットワークを含み、バックエンドネットワークは、モデルに提供された特徴表現に基づく処理(例えば、オブジェクト分類、音声認識など)を実行し得る数学モデルを表す。深層学習は、モデルに実行されるハンドクラフト型特徴エンジニアリングを必要とせずに、機械学習が実行されることを可能にする。代わりに、ディープニューラルネットワークは、統計構造又は入力データ内の相関関係に基づき、特徴を学習できる。学習された特徴が数学モデルに提供されてよく、数学モデルが検出された特徴を出力にマッピングできる。ネットワークにより用いられる数学モデルは概して、実行されるべき特定のタスクに専用のものであり、異なるタスクを実行するために異なるモデルが用いられる。
【0180】
ニューラルネットワークが構築されると、学習モデルがネットワークに適用され、ネットワークが特定のタスクを実行するよう訓練できる。学習モデルは、ネットワークの出力エラーを減らすべく、モデル内の重みをどのように調整するかを説明する。誤差逆伝搬法は、ニューラルネットワークを訓練するために用いられる一般的な方法である。入力ベクトルは、処理用のネットワークに提示される。ネットワークの出力は、損失関数を用いて所望の出力と比較され、出力層におけるニューロンのそれぞれに対しエラー値が計算される。次に、エラー値は、各ニューロンが、元の出力に対する寄与を大まかに表す関連するエラー値を有するようになるまで、後方伝搬される。その後、ネットワークは、確率的勾配降下法アルゴリズムなどのアルゴリズムを用いて、これらのエラーから学習して、ニューラルネットワークの重みを更新できる。
【0181】
図9A~
図9Bは、例示的な畳み込みニューラルネットワークを示す。
図9Aは、CNN内の様々な層を示す。
図9Aに示されるように、画像処理をモデル化するために用いられる例示的なCNNは、入力画像の赤、緑及び青(RGB)成分を記述する入力902を受信できる。入力902は、複数の畳み込み層(例えば、畳み込み層904、畳み込み層906)により処理されることができる。複数の畳み込み層からの出力は、完全に接続された層908のセットによりオプションで処理され得る。完全に接続された層におけるニューロンは、フィードフォワードネットワークで前述したように、前の層におけるすべての活性化に対し完全な接続を有している。完全に接続された層908からの出力は、ネットワークからの出力結果を生成するために用いられることができる。完全に接続された層908内の活性化は、畳み込みの代わりに行列乗算を用いて計算され得る。すべてのCNN実装が、完全に接続された層908を利用するわけではない。例えば、いくつかの実装において、畳み込み層906は、CNNに対する出力を生成できる。
【0182】
畳み込み層は疎に接続され、完全に接続された層908において見受けられる従来型のニューラルネットワーク構成とは異なる。あらゆる出力ユニットがあらゆる入力ユニットと相互作用するように、従来型のニューラルネットワーク層はすべて接続される。しかしながら、図示されるように、フィールドの畳み込みの出力が後続の層のノードへ入力(当該フィールドにおける各ノードのそれぞれの状態値の代わりに)されるので、畳み込み層は疎に接続されている。畳み込み層に関連付けられたカーネルが畳み込み演算を実行し、その出力が次の層へと送信される。畳み込み層内で実行される次元削減は、CNNが大きな画像を処理するためにスケーリングすることを可能にする1つの態様である。
【0183】
図9Bは、CNNの畳み込み層内の例示的な計算ステージを示す。CNNの畳み込み層912の入力は、畳み込み層914の3つのステージにおいて処理されることができる。3つのステージは、畳み込みステージ916、検出ステージ918及びプーリングステージ920を含むことができる。次に、畳み込み層914は、連続的な畳み込み層にデータを出力できる。ネットワークの最終的な畳み込み層は、出力特徴マップデータを生成するか、又は、完全に接続された層に入力を提供するかして、例えば、CNNへの入力に対する分類値を生成することができる。
【0184】
畳み込みステージ916は、いくつかの畳み込みを並行して実行し、線形活性化を生成する。畳み込みステージ916は、アフィン変換を含むことができ、アフィン変換は、線形変換に平行移動を加えたものとして指定され得る任意の変換であり得る。アフィン変換は、回転、平行移動、スケーリング及びこれらの変換の組み合わせを含む。畳み込みステージは、入力における特定の領域に接続された機能(例えば、ニューロン)の出力を計算し、入力はニューロンに関連付けられた局所領域として判定され得る。ニューロンは、ニューロンの重みと、ニューロンが接続された局所入力における領域との間のドット積を計算する。畳み込みステージ916からの出力は、畳み込み層914の連続ステージによって処理される線形活性化のセットを定義する。
【0185】
線形活性化は、検出ステージ918により処理されることができる。検出ステージ918において、各線形活性化は、非線形活性化関数により処理される。非線形活性化関数は、畳み込み層の受容野に影響を及ぼすことなく、ネットワーク全体の非線形特性を高める。非線形活性化関数のいくつかのタイプが用いられてよい。1つの特定のタイプは、正規化線形ユニット(ReLU)であり、ReLUは、活性化がゼロに閾値設定されるように、f(x)=max(0,x)として規定される活性化関数を用いる。
【0186】
プーリングステージ920は、畳み込み層906の出力を、近くの出力の要約統計と置き換えるプーリング関数を用いる。プーリング関数は、移動不変性(translation invariance)をニューラルネットワークに導入するために用いられることができ、その結果、入力へのわずかな移動はプールされる出力を変更しない。入力データ内の特徴の存在が特徴の正確な位置よりも重要なシナリオにおいては、局所的な移動に対する不変性は有用であり得る。様々なタイプのプーリング関数が、最大プーリング、平均プーリング及びl2-ノルムプーリングを含むプーリングステージ920中に用いられることができる。さらに、いくつかのCNN実装は、プーリングステージを含まない。代わりに、かかる実装は、前の畳み込みステージと比較して、増加したストライドを有する代わりの及び追加の畳み込みステージである。
【0187】
次に、畳み込み層914からの出力は、次の層922により処理されることができる。次の層922は、追加の畳み込み層、又は、完全に接続された層908のうちの1つとすることができる。例えば、
図9Aの第1畳み込み層904は、第2畳み込み層906に出力できる一方、第2畳み込み層は、完全に接続された層908のうちの第1の層に出力できる。
【0188】
図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の特定の実装の詳細に応じて変えることができる。
【0189】
説明される基本的なCNN及びRNNネットワークに加えて、これらのネットワークに対するバリエーションが可能であってよい。1つの例示的なRNNの変形例は、長短期記憶(LSTM)RNNである。LSTM RNNは、言語のより長いシーケンスを処理するために必要であり得る長期依存関係を学習可能である。CNNの変形例は畳み込みディープビリーフネットワークであり、当該ネットワークは、CNNと類似する構造を有し、ディープビリーフネットワークと同様の方式で訓練される。ディープビリーフネットワーク(DBN)は、確率(ランダム)変数の複数の層で構成される生成系ニューラルネットワーク(generative neural network)である。DBNは、層ごとにグリーディ教師なし学習(greedy unsupervised learning)を用いて訓練されることができる。次に、DBNの学習される重みは、ニューラルネットワークに対する重みの最適な初期セットを判定することにより、事前訓練ニューラルネットワークを提供するために用いられ得る。
【0190】
図11は、ディープニューラルネットワークの訓練及びデプロイを示す。所定のネットワークがタスク用に構築されると、ニューラルネットワークは、訓練データセット1102を用いて訓練される。様々な訓練フレームワーク1104は、訓練プロセスのハードウェアアクセラレーションを可能にすべく開発されてきた。例えば、
図6の機械学習フレームワーク604は、訓練フレームワーク604として構成され得る。訓練フレームワーク604は、訓練されていないニューラルネットワーク1106に接続され、訓練されていないニューラルネットが本明細書で説明される並列処理リソースを用いて訓練できるようにして、訓練されたニューラルネット1108を生成できる。
【0191】
訓練プロセスを開始すべく、初期の重みがランダムに、又は、ディープビリーフネットワークを用いた事前訓練により選択されてよい。次に、教師あり又は教師なし方式のいずれかで訓練サイクルが実行される。
【0192】
教師あり学習は、例えば、訓練データセット1102が、入力に対する所望の出力と組み合わされる入力を含む場合、又は、訓練データセットが、既知の出力を有する入力を含み、かつ、ニューラルネットワークの出力が手動で格付けされる場合などの仲介オペレーションとして訓練が実行される学習方法である。ネットワークは、入力を処理し、予期又は所望の出力のセットに対して結果の出力を比較する。次に、エラーがシステムに伝搬される。訓練フレームワーク1104は、訓練されていないニューラルネットワーク1106を制御する重みを調整するように調整できる。訓練フレームワーク1104は、訓練されていないニューラルネットワーク1106が、既知の入力データに基づいて正しい回答を生成するのに適したモデルにどのくらい収束しつつあるかをモニタリングするツールを提供できる。ネットワークの重みが、ニューラルネットワークにより生成される出力を絞り込むべく調整されるにつれ、訓練プロセスは繰り返し行われる。訓練プロセスは、訓練されたニューラルネット1108に関連付けられた統計的に所望の精度にニューラルネットワークが到達するまで継続され得る。次に、訓練されたニューラルネットワーク1108は、新たなデータ1112の入力に基づいて、推論結果1114を生成するための任意の数の機械学習演算を実装するようデプロイされることができる。
【0193】
教師なし学習は、ネットワークがラベル付けされていないデータを用いて自身を訓練することを試みる学習方法である。したがって、教師なし学習については、訓練データセット1102は、関連付けられた出力データを何も持たない入力データを含む。訓練されていないニューラルネットワーク1106は、ラベル付けされていない入力内のグループを学習することができ、個々の入力がデータセット全体にどのように関係するかを判定できる。教師なし訓練を用いて、自己組織化マップを生成してよく、当該マップは、データの次元を削減するのに有用な演算を実行することが可能な訓練されたニューラルネットワーク1108の一種である。教師なし訓練はまた、アノマリ検出を実行するために用いられることもでき、データの通常のパターンから逸脱する入力データセット内のデータポイントの識別を可能にする。
【0194】
教師あり学習及び教師なし訓練のバリエーションも用いられてよい。半教師あり学習は、訓練データセット1102が、同一分散のうち、ラベル付けされたデータとラベル付けされていないデータの混合を含む技術である。インクリメンタル学習は、入力データがモデルをさらに訓練するために継続的に用いられる教師あり学習の変形例である。インクリメンタル学習は、訓練されたニューラルネットワーク1108が、初期訓練中にネットワーク内にインストールされた知識を忘れることなく、新たなデータ1112に適合することを可能にする。
【0195】
教師あり又は教師なしに関わらず、特にディープニューラルネットワークの訓練プロセスは、単一の計算ノードに計算が集中し過ぎる可能性がある。単一の計算ノードを用いる代わりに、計算ノードの分散型ネットワークが、訓練プロセスをアクセラレートするために用いられ得る。
【0196】
図12は、分散型学習を示すブロック図である。分散型学習は、複数の分散型コンピューティングノードを使用して、ニューラルネットワークの教師あり又は教師なし訓練を実行する訓練モデルである。分散型計算ノードはそれぞれ、1つ又は複数のホストプロセッサ、及び、
図7の高速並列汎用グラフィックス処理ユニット700のような、汎用処理ノードのうちの1つ又は複数を含むことができる。図示されるように、分散型学習は、モデル並列処理1202、データ並列処理1204、又は、モデル及びデータ並列処理1204の組み合わせが実行されることができる。
【0197】
モデル並列処理1202において、分散型システムの異なる計算ノードは、単一ネットワークの異なる部分に対する訓練計算を実行できる。例えば、ニューラルネットワークの各層は、分散型システムの異なる処理ノードにより訓練されることができる。モデル並列処理の利点は、とりわけ大きなモデルにスケーリングする能力を含む。ニューラルネットワークの異なる層に関連付けられた計算を分割させることで、すべての層の重みが単一の計算ノードのメモリに収まらないであろう非常に大規模なニューラルネットワークの訓練を可能にする。いくつかの例において、モデル並列処理は、大規模なニューラルネットワークの教師なし訓練を実行するのに特に有用となり得る。
【0198】
データ並列処理1204において、分散型ネットワークの異なるノードは、モデルの完全なインスタンスを有し、各ノードは、データの異なる部分を受信する。次に、異なるノードからの結果が組み合わせられる。データ並列処理に対する異なる手法が可能である一方、データの並列訓練手法はすべて、結果を組み合わせて、各ノード間のモデルパラメータを同期させる技術を必要とする。データを組み合わせる例示的な手法は、パラメータの平均化及び更新ベースのデータ並列処理を含む。パラメータの平均化は、訓練データのサブセットに対して各ノードを訓練し、グローバルパラメータ(例えば、重み、バイアス)を各ノードからのパラメータの平均に設定する。パラメータの平均化は、パラメータデータを維持する中央パラメータサーバを用いる。更新ベースのデータ並列処理は、ノードからのパラメータをパラメータサーバに転送する代わりに、モデルへの更新が転送される点を除き、パラメータの平均化と同様である。さらに、更新ベースのデータ並列処理は、分散的な方式で実行されることができ、更新は、圧縮され、ノード間で転送される。
【0199】
組み合わせられたモデル及びデータ並列処理1206は、例えば、各計算ノードが複数のGPUを含む分散型システムにおいて実装されることができる。各ノードは、モデルの異なる部分を訓練するために用いられる各ノード内の別個のGPUを持つモデルの完全なインスタンスを有することができる。
【0200】
分散型訓練は、単一のマシン上で訓練することと比較してオーバヘッドを増加させる。しかしながら、本明細書において説明される並列プロセッサ及びGPGPUはそれぞれ、分散型訓練のオーバヘッドを低減させる様々な技術を実装でき、高帯域幅のGPU間データ転送及びアクセラレート型リモートデータ同期を可能にする技術を含む。
[例示的な機械学習アプリケーション]
【0201】
機械学習は、限定されることはないが、コンピュータビジョン、自動運転及びナビゲーション、音声認識、及び、言語処理を含む様々な技術的な問題を解決すべく適用されることができる。コンピュータビジョンは、これまで、機械学習アプリケーションの最もアクティブなリサーチ領域のうちの1つであった。コンピュータビジョンのアプリケーションは、顔を認識することなどの人の視覚能力を再生することから、視覚能力の新たなカテゴリを作成することに及ぶ。例えば、コンピュータビジョンアプリケーションは、ビデオ内の可視オブジェクトに誘導される振動から音波を認識するように構成されることができる。並列プロセッサによりアクセラレートされる機械学習は、コンピュータビジョンアプリケーションが、以前の実行可能なものよりはるかに大規模な訓練データセットを用いて訓練されることを可能にし、且つ、推論システムが、低電力並列プロセッサを用いてデプロイされることを可能にする。
【0202】
並列プロセッサアクセラレート型機械学習は、レーン及び道路標識認識、障害物回避、ナビゲーション並びに運転制御を含む自動運転アプリケーションを有する。アクセラレート型機械学習技術は、特定の訓練入力に対する適切な応答を規定するデータセットに基づいて運転モデルを訓練するために用いられ得る。本明細書で説明される並列プロセッサは、自動運転ソリューションに用いられるますます複雑化するニューラルネットワークの迅速な訓練を可能にしてよく、自律走行車に統合するのに適したモバイルプラットフォーム内への低電力推論プロセッサのデプロイを可能にする。
【0203】
並列プロセッサアクセラレート型ディープニューラルネットワークは、自動音声認識(ASR)への機械学習手法を可能にしてきた。ASRは、入力アコースティックシーケンスが与えられた際、最も確からしい言語シーケンスを計算する機能の作成を含む。ディープニューラルネットワークを用いるアクセラレート型機械学習は、ASR用に以前に用いられていた隠れマルコフモデル(HMM)及びガウス混合モデル(GMM)の置き換えを可能してきた
【0204】
並列プロセッサアクセラレート型機械学習はまた、自然言語処理をアクセラレートするために用いられることができる。自動学習プロシージャは、統計推論アルゴリズムを利用して、エラーの多い、又は、見慣れていない入力に対し堅牢なモデルを生成できる。例示的な自然言語プロセッサアプリケーションは、人間の言語間の自動機械翻訳を含む 。
【0205】
機械学習に用いられる並列処理プラットフォームは、訓練プラットフォーム及びデプロイプラットフォームに分割されることができる。一般に、訓練プラットフォームは非常に並列的であり、マルチGPU‐単一ノードの訓練及びマルチノード‐マルチGPUの訓練をアクセラレートするための最適化を含む。訓練に適している例示的な並列プロセッサは、
図7の汎用グラフィックス処理ユニット700、及び、
図8のマルチGPUコンピューティングシステム800を含む。むしろ、デプロイされる機械学習プラットフォームは、一般に、カメラ、自律ロボット及び自律走行車などの製品に用いるのに適している低電力並列プロセッサを含む。
【0206】
図13は、訓練されたモデルを用いて推論を実行するのに適している例示的な推論システムオンチップ(SOC)1300を示す。SOC1300は、メディアプロセッサ1302、ビジョンプロセッサ1304、GPGPU1306及びマルチコアプロセッサ1308を含む処理コンポーネントを統合できる。GPGPU1306は、GPGPU700など、本明細書で説明されるようなGPGPUであってよく、マルチコアプロセッサ1308は、マルチコアプロセッサ405-406など、本明細書で説明されるマルチコアプロセッサであってよい。SOC1300は、処理コンポーネントのそれぞれによりアクセス可能な共有のオンチップデータプールを可能にし得るオンチップメモリ1305をさらに含むことができる。処理コンポーネントは、自律走行車及び自律ロボットを含む様々な機械学習プラットフォームへのデプロイを有効にすべく、低電力動作用に最適化されることができる。例えば、SOC1300の一つの実装は、自律走行車用の主制御システムの一部として用いられることができる。SOC1300が自律走行車での使用のために構成される場合、当該SOCは、デプロイメント管轄の関連する機能的安全性標準に準拠するよう設計され、構成される。
【0207】
動作中、メディアプロセッサ1302及びビジョンプロセッサ1304は、協調しながら作業して、コンピュータビジョン演算をアクセラレートすることができる。メディアプロセッサ1302は、複数の高解像度(例えば、4K、8K)ビデオストリームの低レイテンシのデコードを可能にし得る。デコードされたビデオストリームは、オンチップメモリ1305のバッファに書き込まれることができる。次に、ビジョンプロセッサ1304は、訓練された画像認識モデルを用いたフレームの処理に備えて、デコードされたビデオを解析し、デコードされたビデオのフレームに対して予備処理演算を実行することができる。例えば、ビジョンプロセッサ1304は、高解像度ビデオデータに対して画像認識を実行するために用いられるCNN用の畳み込み演算をアクセラレートすることができる一方、バックエンドモデル計算がGPGPU1306により実行される。
【0208】
マルチコアプロセッサ1308は、データ転送のシーケンシング及び同期、及び、メディアプロセッサ1302及びビジョンプロセッサ1304により実行される共有メモリ演算を支援する制御ロジックを含むことができる。マルチコアプロセッサ1308はまた、GPGPU1306の推論計算能力を利用できるソフトウェアアプリケーションを実行するアプリケーションプロセッサとして機能することができる。例えば、ナビゲーション及び運転ロジックの少なくとも一部は、マルチコアプロセッサ1308上で実行するソフトウェアにおいて実装されることができる。そのようなソフトウェアは、計算作業負荷をGPGPU1306に直接発行できる、又は、計算作業負荷は、これらの動作の少なくとも一部をGPGPU1306にオフロードできるマルチコアプロセッサ1308に発行され得る。
【0209】
GPGPU1306は、汎用グラフィックス処理ユニット700内にある処理クラスタ706A-706Hの低電力構成などの計算クラスタを含むことができる。GPGPU1306内の計算クラスタは、訓練されたニューラルネットワーク上で推論計算を実行するために特に最適化される命令をサポートできる。例えば、GPGPU1306は、8ビット整数ベクトル演算及び4ビット整数ベクトル演算などの低精度計算を実行するための命令をサポートできる。
[追加システムの概要]
【0210】
図14は、処理システム1400のブロック図である。本明細書における任意の他の図面の要素と同一又は類似の名称を有する
図14の要素は、他の図面にある同一の要素について説明しており、本明細書における他の箇所での説明と同様に、それと同様に動作又は機能でき、同一のコンポーネントを備えることができ、他の要素にリンクされることができるが、そのように限定されることはない。システム1400は、シングルプロセッサデスクトップシステム、マルチプロセッサワークステーションシステム、又は、多数のプロセッサ1402又はプロセッサコア1407を有するサーバシステムで用いられ得る。システム1400は、ローカル又はワイドエリアネットワークへの有線又は無線接続を有するモノのインターネット(IoT)デバイス内など、モバイル、ハンドヘルド、又は埋め込みデバイスでの使用のためにシステムオンチップ(SoC)集積回路内に組み込まれる処理プラットフォームであってよい。
【0211】
システム1400は、
図1のものと対応するコンポーネントを有する処理システムであってよい。例えば、異なる構成では、プロセッサ1402又はプロセッサコア1407は、
図1のプロセッサ102と対応してよい。グラフィックスプロセッサ1408は、
図1の並列プロセッサ112と対応してよい。外部グラフィックスプロセッサ1418は、
図1のアドインデバイス120のうちの1つであってよい。
【0212】
システム1400は、サーバベースのゲーミングプラットフォーム、ゲーム及びメディアコンソールを含むゲームコンソール、モバイルゲーミングコンソール、ハンドヘルドゲームコンソール、又は、オンラインゲームコンソールを含む、これらと連結する、又は、これら内に集積されることができる。システム1400は、携帯電話、スマートフォン、タブレットコンピューティングデバイス、又は、内部ストレージ容量の低いラップトップなどのモバイルインターネット接続デバイスの一部であってよい。処理システム1400はまた、例えば、スマートウォッチウェアラブルデバイスなどのウェアラブルデバイス;視覚、音声、又は触覚出力を提供して、実際の世界の視覚、音声、又は触覚体験を補足するか、又は別の場合、テキスト、オーディオ、グラフィックス、ビデオ、ホログラフィック画像又はビデオ、又は、触覚フィードバックを提供する拡張現実(AR)又は仮想現実(VR)機能で強化されたスマートアイウェア又は衣類;他の拡張現実(AR)デバイス;又は、他の仮想現実(VR)デバイスを含む、これらを連結する、又は、これらに統合されることができる。処理システム1400は、テレビ又はセットトップボックスデバイスを含んでよい、又は、それらの一部であってよい。システム1400は、バス、トラクタトレーラ、車、モータサイクル又は電力サイクル、飛行機又はグライダ(又はこれらの任意の組み合わせ)等の自動運転車を含むことができる、当該自動運転車に連結されることができる、又は当該自動運転車に統合されることができる。自動運転車は、システム1400を用いて、車両の周囲で感知される環境を処理してよい。
【0213】
1つ又は複数のプロセッサ1402は、実行された場合、システム又はユーザソフトウェアのためのオペレーションを実行する命令を処理する1つ又は複数のプロセッサコア1407を含んでよい。1つ又は複数のプロセッサコア1407のうちの少なくとも1つは、特定の命令セット1409を処理するように構成されてよい。命令セット1409は、複合命令セットコンピューティング(CISC)、縮小命令セットコンピューティング(RISC)、又は、超長命令語(VLIW)を介したコンピューティングを促進してよい。1つ又は複数のプロセッサコア1407は、異なる命令セット1409を処理してよく、当該命令セットは、他の命令セットのエミュレーションを促進するための命令を含んでよい。プロセッサコア1407はまた、デジタル信号プロセッサ(DSP)などの他の処理デバイスを含んでよい。
【0214】
プロセッサ1402は、キャッシュメモリ1404を含んでよい。アーキテクチャに応じて、プロセッサ1402は、単一の内部キャッシュ、又は、複数レベルの内部キャッシュを有することができる。いくつかの実施形態において、キャッシュメモリは、プロセッサ1402の様々なコンポーネントの間で共有される。いくつかの実施形態において、プロセッサ1402はまた、外部キャッシュ(例えば、レベル-3(L3)キャッシュ、又は、ラストレベルキャッシュ(LLC))(図示されていない)を用いており、当該外部キャッシュは、既知のキャッシュコヒーレンシ技術を用いてプロセッサコア1407間で共有され得る。レジスタファイル1406は、さらに、プロセッサ1402内に含まれることができ、異なるタイプのデータを格納するための異なるタイプのレジスタ(例えば、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、及び、命令ポインタレジスタ)を含んでよい。いくつかのレジスタは、汎用レジスタであってよく、一方、他のレジスタは、プロセッサ1402の設計に固有のものであってよい。
【0215】
1つ又は複数のプロセッサ1402は、1つ又は複数のインタフェースバス1410と連結されて、プロセッサ1402とシステム1400内の他のコンポーネントとの間で、アドレス、データ又は制御信号などの通信信号を伝送してよい。インタフェースバス1410は、これらの実施形態のうちの1つにおいて、あるバージョンのダイレクトメディアインタフェース(DMI)バスなどのプロセッサバスとすることができる。しかしながら、プロセッサバスは、DMIバスに限定されるものではなく、1つ又は複数のペリフェラルコンポーネントインターコネクトバス(例えば、PCI、PCI Express)、メモリバス、又は、他のタイプのインタフェースバスを含んでよい。例えば、プロセッサ1402は、ユニファイドメモリコントローラ1416及びプラットフォームコントローラハブ1430を含んでよい。メモリコントローラ1416は、システム1400のメモリデバイスと他のコンポーネントとの間の通信を促進する一方、プラットフォームコントローラハブ(PCH)1430は、ローカルI/Oバスを介してI/Oデバイスへの接続を提供する。
【0216】
メモリデバイス1420は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、相変化メモリデバイス、又は、プロセスメモリとして機能する好適な性能を有するいくつかの他のメモリデバイスとすることができる。メモリデバイス1420は、例えば、1つ又は複数のプロセッサ1402がアプリケーション又はプロセスを実行する場合の使用のために、データ1422及び命令1421を格納するシステム1400のためのシステムメモリとして動作できる。メモリコントローラ1416はまた、オプションの外部グラフィックスプロセッサ1418と連結し、プロセッサ1402内の1つ又は複数のグラフィックスプロセッサ1408と通信して、グラフィックス及びメディア演算を実行してよい。いくつかの実施形態において、グラフィックス、メディア及び/又は計算演算は、グラフィックス、メディア又は計算演算の特定のセットを実行するように構成されることができるコプロセッサであるアクセラレータ1412により支援され得る。例えば、アクセラレータ1412は、機械学習又は計算演算を最適化するために用いられる行列乗算アクセラレータであってよい。アクセラレータ1412は、グラフィックスプロセッサ1408と連携してレイトレーシング演算を実行するために用いられることができるレイトレーシングアクセラレータとすることができる。一実施形態において、外部アクセラレータ1419は、アクセラレータ1412の代わりに、又は、これと連携して用いられてよい。
【0217】
プロセッサ1402に接続できるディスプレイデバイス1411が提供され得る。ディスプレイデバイス1411は、モバイル電子デバイス又はラップトップデバイスにあるような内部ディスプレイデバイス、又は、ディスプレイインタフェース(例えば、DisplayPortなど)を介して取り付けられる外部ディスプレイデバイスのうちの1つ又は複数とすることができる。ディスプレイデバイス1411は、仮想現実(VR)アプリケーション又は拡張現実(AR)アプリケーションでの使用のための立体表示デバイスなどのヘッドマウントディスプレイ(HMD)とすることができる。
【0218】
プラットフォームコントローラハブ1430は、周辺機器を高速I/Oバスを介してメモリデバイス1420及びプロセッサ1402に接続することを可能にし得る。I/O周辺機器は、限定されることはないが、オーディオコントローラ1446、ネットワークコントローラ1434、ファームウェアインタフェース1428、無線トランシーバ1426、タッチセンサ1425、データストレージデバイス1424(例えば、不揮発性メモリ、揮発性メモリ、ハードディスクドライブ、フラッシュメモリ、NAND、3D NAND、3D XPoint/Optaneなど)を含む。データストレージデバイス1424は、ストレージインタフェース(例えば、SATA)を介して、又は、ペリフェラルコンポーネントインターコネクトバス(例えば、PCI、PCI Express)などの周辺機器用バスを介して接続できる。タッチセンサ1425は、タッチスクリーンセンサ、圧力センサ又は指紋センサを含むことができる。無線トランシーバ1426は、Wi-Fi(登録商標)トランシーバ、Bluetooth(登録商標)トランシーバ、又は、3G、4G、5G又はロングタームエボリューション(LTE)トランシーバなどのモバイルネットワークトランシーバとすることができる。ファームウェアインタフェース1428は、システムファームウェアとの通信を可能にし、例えば、ユニファイドエクステンシブルファームウェアインタフェース(UEFI)とすることができる。ネットワークコントローラ1434は、有線ネットワークへのネットワーク接続を可能にし得る。いくつかの実施形態において、高性能なネットワークコントローラ(図示されていない)は、インタフェースバス1410と連結する。オーディオコントローラ1446は、マルチチャネル高精細オーディオコントローラであってよい。これらの実施形態のいくつかにおいて、システム1400は、レガシ(例えば、パーソナルシステム2(PS/2))デバイスをシステムに連結するためのオプションのレガシI/Oコントローラ1440を含む。プラットフォームコントローラハブ1430はまた、キーボード及びマウス1443の組み合わせ、カメラ1444又は他のUSB入力デバイスなどの1つ又は複数のユニバーサルシリアルバス(USB)コントローラ1442の接続入力デバイスに接続できる。
【0219】
別々に構成される他のタイプのデータ処理システムも用いられ得るので、図示されるシステム1400は例示的且つ非限定的なものであることが理解されるだろう。例えば、メモリコントローラ1416及びプラットフォームコントローラハブ1430のインスタンスは、外部グラフィックスプロセッサ1418などの別個の外部グラフィックスプロセッサに統合されてよい。プラットフォームコントローラハブ1430及び/又はメモリコントローラ1416は、1つ又は複数のプロセッサ1402の外部にあってよい。例えば、システム1400は、外部メモリコントローラ1416及びプラットフォームコントローラハブ1430を含むことができ、これらは、プロセッサ1402と通信するシステムチップセット内のメモリコントローラハブ及び周辺機器用のコントローラハブとして構成されてよい。
【0220】
例えば、CPU、メモリ及び他のコンポーネントなどのコンポーネントが配置される回路基板(「スレッド(sleds)」)が用いられることができ、熱性能を向上させるために設計される。プロセッサなどの処理コンポーネントは、スレッドの上面に配置される一方、DIMMなどのnearメモリがスレッドの下面に配置されてよい。この設計により提供される気流の改善の結果として、これらのコンポーネントは、典型的なシステムの場合と比べて、より高い周波数及び電力レベルで動作し得るので、性能を高めることができる。さらに、スレッドは、ラックにある電力ケーブル及びデータ通信ケーブルと何も確認せずに接続できるように構成されるので、スレッドを素早く取り外す、アップグレードする、再度取り付ける、且つ/又は置き換える能力を高めることができる。同様に、プロセッサ、アクセラレータ、メモリ、及びデータストレージドライブなどの、スレッドに位置する個々のコンポーネントが、互いとの間隔が増したことにより、アップグレードされやすくなるように構成される。例示した実施形態において、これらのコンポーネントはさらに、真正性を証明するハードウェア認証機能を含む。
【0221】
データセンタは、イーサネット(登録商標)及びオムニパスを含む複数の他のネットワークアーキテクチャをサポートする単一のネットワークアーキテクチャ(「ファブリック」)を用いることができる。スレッドは光ファイバを介してスイッチに連結され得る。光ファイバは、典型的なツイストペアケーブル(例えば、カテゴリ5、カテゴリ5e、カテゴリ6など)より高い帯域幅と低いレイテンシとを提供する。高帯域幅で低レイテンシのインターコネクト及びネットワークアーキテクチャにより、データセンタは使用時に、メモリ、アクセラレータ(例えば、GPU、グラフィックスアクセラレータ、FPGA、ASIC、ニューラルネットワーク、及び/又は人工知能アクセラレータなど)、及び物理的に分かれているデータストレージドライブなどのリソースをプールして、必要に応じてこれらのリソースに計算リソース(例えば、プロセッサ)を提供してよく、その結果、プールされたリソースがあたかもローカルにあるかのように、計算リソースがこれらのリソースにアクセスすることが可能になる。
【0222】
電力供給又は電源は、システム1400又は本明細書で説明される任意のコンポーネント又はシステムに電圧及び/又は電流を提供することができる。1つの例において、電力供給部は、壁コンセントに接続する、AC-DC(交流電流-直流電流)アダプタを含む。そのようなAC電力は、再生可能エネルギー(例えば、太陽光発電)電源とすることができる。1つの例において、電源は、外部のAC-DCコンバータなどのDC電源を含む。電源又は電力供給はまた、充電場に近接させることで充電する無線の充電ハードウェアも含んでよい。電源は、内蔵バッテリ、交流電源、モーションベースの電源、太陽光発電又は燃料電池ソースを含むことができる。
【0223】
図15A~
図15Cは、コンピューティングシステム及びグラフィックスプロセッサを示す。本明細書における任意の他の図面の要素と同一又は類似の名称を有する
図15A~
図15Cの要素は、他の図面にある同一の要素について説明しており、本明細書における他の箇所での説明と同様に、それと同様に動作又は機能でき、同一のコンポーネントを備えることができ、他の要素にリンクされることができるが、そのように限定されることはない。
【0224】
図15Aは、プロセッサ1500のブロック図であり、プロセッサ1500は、プロセッサ1402のうちの1つの変形例であってよく、これらのうちの1つの代わりに用いられてよい。したがって、ここでは、プロセッサ1500と組み合わせた任意の特徴の開示はまた、そのように限定されるものではないが、プロセッサ1402との対応する組み合わせを開示する。プロセッサ1500は、1つ又は複数のプロセッサコア1502A-1502N、ユニファイドメモリコントローラ1514及び統合グラフィックスプロセッサ1508を有してよい。統合グラフィックスプロセッサ1508が除外される場合、プロセッサを含むシステムは、システムチップセット内に、又は、システムバスを介して連結されるグラフィックスプロセッサデバイスを含む。プロセッサ1500は、最大で、破線ボックスで表される追加のコア1502Nまでを含む追加のコアを含むことができる。プロセッサコア1502A-1502Nのそれぞれは、1つ又は複数の内部キャッシュユニット1504A-1504Nを含む。いくつかの実施形態において、各プロセッサコア1502A-1502Nはまた、1つ又は複数の共有キャッシュユニット1506へのアクセスを有する。内部キャッシュユニット1504A-1504N及び共有キャッシュユニット1506は、プロセッサ1500内のキャッシュメモリ階層を表す。キャッシュメモリ階層は、各プロセッサコア内の少なくとも1つのレベルの命令及びデータキャッシュと、レベル2(L2)、レベル3(L3)、レベル4(L4)、又は、他のレベルのキャッシュなど1つ又は複数のレベルの共有中間レベルキャッシュを含んでよく、外部メモリの前の最高レベルのキャッシュがLLCとして分類される。いくつかの実施形態において、キャッシュコヒーレンシロジックは、様々なキャッシュユニット1506及び1504A-1504N間のコヒーレンシを維持する。
【0225】
プロセッサ1500は、1つ又は複数のバスコントローラユニット1516のセット及びシステムエージェントコア1510を含んでもよい。1つ又は複数のバスコントローラユニット1516は、1つ又は複数のPCI又はPCI Expressバスなどの周辺機器バスのセットを管理する。システムエージェントコア1510は、様々なプロセッサコンポーネントに管理機能を提供する。システムエージェントコア1510は、様々な外部メモリデバイス(図示されていない)へのアクセスを管理する1つ又は複数のユニファイドメモリコントローラ1514を含んでよい。
【0226】
例えば、プロセッサコア1502A-1502Nのうちの1つ又は複数は、同時マルチスレッディングに対するサポートを含んでよい。システムエージェントコア1510は、マルチスレッド処理中にコア1502A-1502Nを協調させ、動作させるためのコンポーネントを含む。システムエージェントコア1510は、さらに、電力制御ユニット(PCU)を含んでよく、PCUは、プロセッサコア1502A-1502N及びグラフィックスプロセッサ1508の電力状態を調整するためのロジック及びコンポーネントを含む。
【0227】
プロセッサ1500は、さらに、グラフィックス処理演算を実行するグラフィックスプロセッサ1508を含んでよい。これらの実施形態のいくつかにおいて、グラフィックスプロセッサ1508は、共有キャッシュユニット1506のセット、及び、1つ又は複数のユニファイドメモリコントローラ1514を含むシステムエージェントコア1510と連結する。システムエージェントコア1510は、1つ又は複数の連結されたディスプレイにグラフィックスプロセッサ出力をドライブするディスプレイコントローラ1511を含んでもよい。ディスプレイコントローラ1511は、少なくとも1つのインターコネクトを介してグラフィックスプロセッサと連結される別個のモジュールであってもよい、又は、グラフィックスプロセッサ1508内に統合されてもよい。
【0228】
リングベースのインターコネクトユニット1512は、プロセッサ1500の内部コンポーネントを連結するために用いられてよい。しかしながら、周知の技術を含むポイントツーポイントインターコネクト、スイッチ型インターコネクト、又は、他の技術などの代替的なインターコネクトユニットが用いられてよい。リングベースのインターコネクト1512を有するこれらの実施形態のいくつかにおいて、グラフィックスプロセッサ1508は、I/Oリンク1513を介してリングベースのインターコネクト1512と連結する。
【0229】
例示的なI/Oリンク1513は、様々なプロセッサコンポーネントと、eDRAMモジュールなどの高性能な埋め込み型メモリモジュール1518と間の通信を促進するオンパッケージI/Oインターコネクトを含む複数の様々なI/Oインターコネクトのうちの少なくとも1つを表す。オプションで、プロセッサコア1502A-1502N及びグラフィックスプロセッサ1508のそれぞれは、埋め込み型メモリモジュール1518を共有ラストレベルキャッシュとして用いることができる。
【0230】
プロセッサコア1502A-1502Nは、例えば、同一の命令セットアーキテクチャを実行する同種のコアであってよい。あるいは、プロセッサコア1502A-1502Nは、命令セットアーキテクチャ(ISA)の観点から異種であり、プロセッサコア1502A-1502Nのうちの1つ又は複数は、第1の命令セットを実行する一方、他のコアのうちの少なくとも1つは、第1の命令セットのサブセット又は異なる命令セットを実行する。プロセッサコア1502A-1502Nは、マイクロアーキテクチャの観点から異種であってよく、比較的より高い電力消費量を有する1つ又は複数のコアは、より低い電力消費量を有する1つ又は複数の電力コアに連結される。別の例として、プロセッサコア1502A-1502Nは、計算能力の観点から異種である。さらに、プロセッサ1500は、1つ又は複数のチップ上に、又は、他のコンポーネントに加えて図示されるコンポーネントを有するSoC集積回路として実装されることができる。
【0231】
図15Bは、本明細書で説明されるいくつかの実施形態に係るグラフィックスプロセッサコア1519のハードウェアロジックのブロック図である。グラフィックスプロセッサコア1519は、コアスライスと称される場合があり、モジュールグラフィックスプロセッサ内の1つ又は複数のグラフィックスコアとすることができる。グラフィックスプロセッサコア1519は、あるグラフィックスコアスライスの例であり、本明細書で説明されるようなグラフィックスプロセッサは、目標電力及び性能限度に基づいて、複数のグラフィックスコアスライスを含んでよい。各グラフィックスプロセッサコア1519は、汎用及び固定機能ロジックのモジュールブロックを含むサブスライスとも称される複数のサブコア1521A-1521Fと連結される固定機能ブロック1530を含むことができる。
【0232】
固定機能ブロック1530は、例えば、低性能及び/又は低電力グラフィックスプロセッサ実装において、グラフィックスプロセッサコア1519内のすべてのサブコアにより共有されることができるジオメトリ/固定機能パイプライン1531を含んでよい。ジオメトリ/固定機能パイプライン1531は、3D固定機能パイプライン(例えば、以下で説明される
図16Aの3Dパイプライン1612)、ビデオフロントエンドユニット、スレッドスポーナ及びスレッドディスパッチャ、並びに、ユニファイドリターンバッファ(例えば、以下で説明される
図17のユニファイドリターンバッファ1718)を管理するユニファイドリターンバッファマネージャを含んでよい。
【0233】
固定機能ブロック1530はまた、グラフィックスSoCインタフェース1532、グラフィックスマイクロコントローラ1533及びメディアパイプライン1534を含んでよい。グラフィックスSoCインタフェース1532は、グラフィックスプロセッサコア1519とシステムオンチップ集積回路内の他のプロセッサコアとの間のインタフェースを提供する。グラフィックスマイクロコントローラ1533は、スレッドディスパッチ、スケジューリング及びプリエンプションを含む、グラフィックスプロセッサコア1519の様々な機能を管理するように構成可能なプログラマブルサブプロセッサである。メディアパイプライン1534(例えば、
図16A及び
図17のメディアパイプライン1616)は、画像及びビデオデータを含むマルチメディアデータのデコード、エンコード、前処理及び/又は後処理を促進するロジックを含む。メディアパイプライン1534は、サブコア1521-1521F内の計算又はサンプリングロジックへの要求を介してメディア演算を実施する。
【0234】
SoCインタフェース1532は、グラフィックスプロセッサコア1519が汎用アプリケーションプロセッサコア(例えば、CPU)及び/又は共有ラストレベルキャッシュメモリ、システムRAM及び/又は埋め込み型オンチップ又はオンパッケージDRAMなどのメモリ階層要素を含むSoC内の他のコンポーネントと通信することを可能にし得る。SoCインタフェース1532はまた、カメライメージングパイプラインなど、SoC内の固定機能デバイスとの通信を有効にすることができ、グラフィックスプロセッサコア1519とSoC内のCPUとの間で共有され得るグローバルメモリアトミックの使用を有効にする及び/又はグローバルメモリアトミックを実施する。SoCインタフェース1532はまた、グラフィックスプロセッサコア1519の電力管理制御を実施し、グラフィックスコア1519のクロックドメインと、SoC内の他のクロックドメインとの間のインタフェースを有効にすることができる。オプションで、SoCインタフェース1532は、グラフィックスプロセッサ内の1つ又は複数のグラフィックスコアのそれぞれにコマンド及び命令を提供するように構成されるコマンドストリーマ及びスレッドディスパッチャからのコマンドバッファの受信を可能にする。メディア演算が実行される場合には、コマンド及び命令がメディアパイプライン1534にディスパッチされることができ、グラフィックス処理演算が実行される場合には、ジオメトリ及び固定機能パイプライン(例えば、ジオメトリ及び固定機能パイプライン1531、ジオメトリ及び固定機能パイプライン1537)がメディアパイプライン1534にディスパッチされることができる。
【0235】
グラフィックスマイクロコントローラ1533は、グラフィックスプロセッサコア1519に対する様々なスケジューリング及び管理タスクを実行するように構成されることができる。1つの構成では、グラフィックスマイクロコントローラ1533は、例えば、サブコア1521A-1521F内の実行ユニット(EU)アレイ1522A-1522F、1524A-1524Fにある様々なグラフィックス並列エンジンに対するグラフィックス及び/又は計算作業負荷スケジューリングを実行できる。この作業負荷スケジューリングにおいて、グラフィックスプロセッサコア1519を含むSoCのCPUコア上で実行するホストソフトウェアは、複数のグラフィックスプロセッサドアベルのうちの1つに対する作業負荷を提示することができ、適切なグラフィックスエンジン上でのスケジューリング演算を呼び出す。スケジューリング演算は、次にどの作業負荷を実行するかを判定すること、作業負荷をコマンドストリーマに提示すること、エンジン上で実行する存在する作業負荷をプリエンプトすること、作業負荷のプロセスをモニタリングすること、及び、作業負荷が完了した場合にホストソフトウェアに通知することを含む。オプションで、グラフィックスマイクロコントローラ1533はまた、グラフィックスプロセッサコア1519の低電力又はアイドル状態を促進することができ、システム上のオペレーティングシステム及び/又はグラフィックスドライバソフトウェアとは独立した低電力状態遷移にわたって、グラフィックスプロセッサコア1519内のレジスタを保存及び復元する能力をグラフィックスプロセッサコア1519に提供する。
【0236】
グラフィックスプロセッサコア1519は、最大でN個の、図示されるサブコア1521A-1521Fより多い又はより少ないモジュールサブコアを有してよい。N個のサブコアの各セットについて、グラフィックスプロセッサコア1519は、共有機能ロジック1535、共有及び/又はキャッシュメモリ1536、ジオメトリ/固定機能パイプライン1537、並びに、様々なグラフィックス及び計算処理演算をアクセラレートする追加の固定機能ロジック1538を含むこともできる。共有機能ロジック1535は、グラフィックスプロセッサコア1519内の各N個のサブコアにより共有されることができる
図17の共有機能ロジック1720(例えば、サンプラ、数学及び/又はスレッド間通信ロジック)と関連付けられる論理ユニットを含むことができる。共有及び/又はキャッシュメモリ1536は、グラフィックスプロセッサコア1519内のN個のサブコア1521A-1521Fのセットに対するラストレベルキャッシュとすることができ、複数のサブコアによりアクセス可能な共有メモリとしても機能できる。ジオメトリ/固定機能パイプライン1537は、固定機能ブロック1530内のジオメトリ/固定機能パイプライン1531の代わりに含まれることができ、同一又は類似の論理ユニットを含むことができる。
【0237】
グラフィックスプロセッサコア1519は、グラフィックスプロセッサコア1519による使用のために様々な固定機能アクセラレーションロジックを含むことができる追加の固定機能ロジック1538を含んでよい。オプションで、追加の固定機能ロジック1538は、位置のみのシェーディングで用いるための追加のジオメトリパイプラインを含む。位置のみのシェーディングでは、2つのジオメトリパイプライン、つまり、ジオメトリ/固定機能パイプライン1538、1531内の完全なジオメトリパイプラインと、追加の固定機能ロジック1538内に含まれ得る追加のジオメトリパイプラインであるカリングパイプラインとが存在する。例えば、カリングパイプラインは、完全なジオメトリパイプラインの縮小バージョンであってよい。完全なパイプライン及びカリングパイプラインは、同一のアプリケーションの異なるインスタンスを実行でき、各インスタンスは、別個のコンテキストを有する。位置のみのシェーディングは、破棄された三角形の長いカリング実行を隠すことができ、いくつかの例では、シェーディングをより早く完了することが可能になる。例えば、追加の固定機能ロジック1538内のカリングパイプラインロジックは、メインのアプリケーションと並列で位置シェーダを実行でき、カリングパイプラインは、フレームバッファの画素のラスタライズ及びレンダリングを実行せずに、頂点の位置属性のみをフェッチし、及び、シェーディングするので、概して、重要な結果を完全なパイプラインよりも早く生成する。カリングパイプラインは、生成された重要な結果を用いて、これらの三角形がカリングされたかどうかに関わらず、すべての三角形の可視情報を計算することができる。フルパイプライン(この例では、リプレイパイプラインと呼ばれることがある)は、カリングされた三角形をスキップし、最終的にラスタライズフェーズに送られる可視三角形だけをシェーディングするのに可視情報を消費することができる。
【0238】
オプションで、追加の固定機能ロジック1538は、機械学習訓練又は推論の最適化を含む実装のための固定機能行列乗算ロジックなどの機械学習アクセラレーションロジックを含むこともできる。
【0239】
各グラフィックスサブコア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を利用できる。
【0240】
図15Cは、本明細書で説明される実施形態に係る、グラフィックスプロセッサ、例えば、グラフィックスプロセッサ1508及び/又は計算アクセラレータとして構成されることができる汎用グラフィックス処理ユニット(GPGPU)1570のブロック図である。GPGPU1570は、1つ又は複数のシステム及び/又はメモリバスを介して、ホストプロセッサ(例えば、1つ又は複数のCPU1546)及びメモリ1571、1572とインターコネクトできる。メモリ1571は、1つ又は複数のCPU1546で共有されることができるシステムメモリであってよく、一方、メモリ1572は、GPGPU1570に専用のデバイスメモリである。例えば、GPGPU1570及びデバイスメモリ1572内のコンポーネントは、1つ又は複数のCPU1546にアクセス可能なメモリアドレスにマッピングされてよい。メモリ1571及び1572へのアクセスは、メモリコントローラ1568を介して促進されてよい。メモリコントローラ1568は、内部ダイレクトメモリアクセス(DMA)コントローラ1569を含んでよい、又は、DMAコントローラにより別の方法で実行される演算を実行するロジックを含むことができる。
【0241】
GPGPU1570は、L2キャッシュ1553、L1キャッシュ1554、命令キャッシュ1555、及び、共有メモリ1556を含む複数のキャッシュメモリを含み、それらの少なくとも一部は、キャッシュメモリとしてパーティション化されてもよい。GPGPU1570はまた、複数の計算ユニット1560A-1560Nを含む。各計算ユニット1560A-1560Nは、ベクトルレジスタ1561、スカラレジスタ1562、ベクトル論理ユニット1563及びスカラ論理ユニット1564のセットを含む。計算ユニット1560A-1560Nは、ローカル共有メモリ1565及びプログラムカウンタ1566を含むこともできる。計算ユニット1560A-1560Nは、定数キャッシュ1567と連結することができ、これは、定数データを格納するために用いられることができ、定数データはGPGPU1570上で実行するカーネル又はシェーダプログラムの実行の間変わらないであろうデータである。定数キャッシュ1567は、スカラデータキャッシュであってよく、キャッシュされるデータは、スカラレジスタ1562に直接フェッチされることができる。
【0242】
動作中、1つ又は複数のCPU1546は、アクセス可能なアドレス空間にマッピングされたGPGPU1570内のレジスタ又はメモリにコマンドを書き込むことができる。コマンドプロセッサ1557は、レジスタ又はメモリからコマンドを読み出し、これらのコマンドがGPGPU1570内でどのように処理されるかを判定できる。次に、スレッドディスパッチャ1558は、計算ユニット1560A-1560Nにスレッドをディスパッチして、これらのコマンドを実行するために用いられることができる。各計算ユニット1560A-1560Nは、他の計算ユニットとは独立して、スレッドを実行できる。さらに、各計算ユニット1560A-1560Nは、条件計算のために独立して構成されることができ、計算の結果を条件付きでメモリに出力できる。コマンドプロセッサ1557は、提示されたコマンドが完了した場合に1つ又は複数のCPU1546に割り込むことができる。
【0243】
図16A~
図16Cは、例えば、
図15A~
図15Cに従って、本明細書で説明される実施形態により提供される追加のグラフィックスプロセッサ及び計算アクセラレータアーキテクチャのブロック図を示す。本明細書における任意の他の図面の要素と同一又は類似の名称を有する
図16A~
図16Cの要素は、他の図面にある同一の要素について説明しており、本明細書における他の箇所での説明と同様に、それと同様に動作又は機能でき、同一のコンポーネントを備えることができ、他の要素にリンクされることができるが、そのように限定されることはない。
【0244】
図16Aは、グラフィックスプロセッサ1600のブロック図であり、これは、ディスクリートグラフィックス処理ユニットであってよい、又は、複数のプロセッシングコアと統合されたグラフィックスプロセッサ、又は、限定されることはないが、メモリデバイス又はネットワークインタフェースなどの他の半導体デバイスであってよい。グラフィックスプロセッサ1600は、グラフィックスプロセッサ1508の変形例であってよく、グラフィックスプロセッサ1508の代わりに用いられてよい。したがって、ここでは、グラフィックスプロセッサ1508と組み合わせた任意の特徴の開示はまた、そのように限定されるものではないが、グラフィックスプロセッサ1600との対応する組み合わせを開示する。グラフィックスプロセッサは、メモリマッピングされたI/Oインタフェースを介して、及び、プロセッサメモリに置かれたコマンドを用いて、グラフィックスプロセッサ上のレジスタと通信してよい。グラフィックスプロセッサ1600は、メモリにアクセスするメモリインタフェース1614を含んでよい。メモリインタフェース1614は、ローカルメモリ、1つ又は複数の内部キャッシュ、1つ又は複数の共有外部キャッシュ及び/又はシステムメモリに対するインタフェースとすることができる。
【0245】
オプションで、グラフィックスプロセッサ1600はまた、ディスプレイデバイス1618にデータを出力するディスプレイを駆動するディスプレイコントローラ1602を含む。ディスプレイコントローラ1602は、1つ又は複数のオーバレイプレーンのためのハードウェア及びビデオの複数の層又はユーザインタフェース要素の構成を含む。ディスプレイデバイス1618は、内部又は外部ディスプレイデバイスとすることができる。一実施形態において、ディスプレイデバイス1618は、仮想現実(VR)ディスプレイデバイス又は拡張現実(AR)ディスプレイデバイスなどのヘッドマウント型ディスプレイデバイスである。グラフィックスプロセッサ1600は、限定されることはないが、MPEG-2などのムービングピクチャエキスパーツグループ(MPEG)フォーマット、H.264/MPEG-4 AVC、H.265/HEVC、Alliance for Open Media(AOMedia)VP8、VP9などのアドバンスドビデオコーティング(AVC)フォーマット、並びに、米国映画テレビ技術者協会(SMPTE)421M/VC-1、及び、JPEGなどのジョイントフォトグラフィックエキスパートグループ(JPEG)フォーマット、及び、モーションJPEG(MJPEG)フォーマットを含む1又は複数のメディアエンコードフォーマットに、当該メディアエンコードフォーマットから、又は、当該メディアエンコードフォーマット間でメディアをエンコード、デコード又はトランスコードするビデオコーデックエンジン1606を含んでよい。
【0246】
グラフィックスプロセッサ1600は、例えば、ビット境界ブロック転送を含む2次元(2D)ラスタライザ演算を実行するブロック画像転送(BLIT)エンジン1604を含んでよい。しかしながら、代替的に、グラフィックス処理エンジン(GPE)1610の1つ又は複数のコンポーネントを用いて、2Dグラフィックス演算が実行されてよい。いくつかの実施形態において、GPE1610は、3次元(3D)グラフィックス演算及びメディア演算を含むグラフィックス演算を実行するための計算エンジンである。
【0247】
GPE1610は、3Dプリミティブ形状(例えば、矩形、三角形など)に従う処理機能を用いて3次元画像及びシーンをレンダリングするなど、3D演算を実行するための3Dパイプライン1612を含んでよい。3Dパイプライン1612は、要素内の様々なタスクを実行し、及び/又は、実行スレッドを3D/メディアサブシステム1615にスポーン(spawn)するプログラマブル及び固定機能要素を含む。3Dパイプライン1612がメディア演算を実行するために用いられることができる一方、GPE1610の実施形態も、具体的には、ビデオ後処理及び画像エンハンスメントなどのメディア演算を実行するために用いられるメディアパイプライン1616を含む。
【0248】
メディアパイプライン1616は、ビデオコーデックエンジン1606の代わりに、又は、その代理でビデオデコードアクセラレーション、ビデオデインタレーシング、ビデオエンコードアクセラレーションなどの1つ又は複数の専用のメディア演算を実行する固定機能又はプログラマブル論理ユニットを含んでよい。メディアパイプライン1616は、さらに、3D/メディアサブシステム1615上での実行のためのスレッドをスポーン(spawn)するスレッドスポーンユニットを含んでよい。スポーンされたスレッドは、3D/メディアサブシステム1615に含まれる1つ又は複数のグラフィックス実行ユニット上でメディア演算のための計算を実行する。
【0249】
3D/メディアサブシステム1615は、3Dパイプライン1612及びメディアパイプライン1616によりスポーンされたスレッドを実行するためのロジックを含んでよい。パイプラインは、3D/メディアサブシステム1615にスレッド実行リクエストを送信してよく、3D/メディアサブシステム1615は、利用可能なスレッド実行リソースに対する様々なリクエストを調整し、ディスパッチするためのスレッドディスパッチロジックを含む。実行リソースは、3D及びメディアスレッドを処理するグラフィックス実行ユニットのアレイを含む。3D/メディアサブシステム1615は、スレッド命令及びデータに対する1つ又は複数の内部キャッシュを含んでよい。さらに、3D/メディアサブシステム1615は、スレッド間のデータを共有し、出力データを格納するレジスタ及びアドレス指定可能なメモリを含む共有メモリを含んでもよい。
【0250】
図16Bは、グラフィックスプロセッサ1620を示し、これは、グラフィックスプロセッサ1600の変形例であり、グラフィックスプロセッサ1600の代わりに用いられてよく、逆もまた同様である。したがって、グラフィックスプロセッサ1600と組み合わせた任意の特徴の開示はまた、そのように限定されるものではないが、グラフィックスプロセッサ1620との対応する組み合わせを開示する。グラフィックスプロセッサ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でさらに詳細に説明されるように、ベースダイ又はベース基板に接合される。
【0251】
グラフィックスプロセッサ1620は、メモリデバイス1626A-1626Dが関連するグラフィックスエンジンタイル1610A-1610Dと連結される不均一なメモリアクセス(NUMA)システムで構成されてよい。所定のメモリデバイスは、それが直接接続されるタイル以外のグラフィックスエンジンタイルによりアクセスされてよい。しかしながら、メモリデバイス1626A-1626Dへのアクセスのレイテンシは、ローカルタイルにアクセスする場合に最も低くなってよい。一実施形態において、1つより多くのキャッシュが同一のメモリ位置に格納する場合、グラフィックスエンジンタイル1610A-1610D内のキャッシュコントローラ間の通信が一貫性のあるメモリ画像を維持することを可能にするタイルインターコネクト1623A-1623Fを用いるキャッシュコヒーレントNUMA(ccNUMA)システムが可能である。
【0252】
グラフィックス処理エンジンクラスタ1622は、オンチップ又はオンパッケージファブリックインターコネクト1624と接続できる。ファブリックインターコネクト1624は、グラフィックスエンジンタイル1610A-1610Dと、ビデオコーデック1606及び1つ又は複数のコピーエンジン1604などのコンポーネントとの間で通信を可能にし得る。コピーエンジン1604は、メモリデバイス1626A-1626D外に、メモリデバイス1626A-1626D内に、及び、メモリデバイス1626A-1626Dとグラフィックスプロセッサ1620の外部にあるメモリ(例えば、システムメモリ)との間で、データを移動するために用いられることができる。ファブリックインターコネクト1624は、グラフィックスエンジンタイル1610A-1610Dをインターコネクトするために用いられることもできる。オプションで、グラフィックスプロセッサ1620は、外部ディスプレイデバイス1618との接続を可能にするディスプレイコントローラ1602を含んでよい。グラフィックスプロセッサは、グラフィックス又は計算アクセラレータとして構成されてもよい。アクセラレータの構成では、ディスプレイコントローラ1602及びディスプレイデバイス1618が省略されてよい。
【0253】
グラフィックスプロセッサ1620は、ホストインタフェース1628を介してホストシステムに接続できる。ホストインタフェース1628は、グラフィックスプロセッサ1620と、システムメモリ及び/又は他のシステムコンポーネントとの間の通信を可能にし得る。ホストインタフェース1628は、例えば、PCI expressバス又は別のタイプのホストシステムインタフェースとすることができる。
【0254】
図16Cは、本明細書で説明される実施形態に係る計算アクセラレータ1630を示す。計算アクセラレータ1630は、
図16Bのグラフィックスプロセッサ1620とのアーキテクチャ上の類似点を含むことができ、計算アクセラレーションのために最適化される。計算エンジンクラスタ1632は、並列又はベクトルベースの汎用計算演算のために最適化される実行ロジックを含む計算エンジンタイル1640A-1640Dのセットを含むことができる。計算エンジンタイル1640A-1640Dは、固定機能グラフィックス処理ロジックを含まなくてよいが、いくつかの実施形態において、計算エンジンタイル1640A-1640Dのうちの1つ又は複数は、メディアアクセラレーションを実行するロジックを含むことができる。計算エンジンタイル1640A-1640Dは、メモリインターコネクト1625A-1625Dを介してメモリ1626A-1626Dに接続できる。メモリ1626A-1626D及びメモリインターコネクト1625A-1625Dは、グラフィックスプロセッサ1620と類似の技術であってよい、又は、異なるものとすることができる。グラフィックス計算エンジンタイル1640A-1640Dはまた、タイルインターコネクト1623A-1623Fのセットを介してインターコネクトされることができ、ファブリックインターコネクト1624と接続され、及び/又は、ファブリックインターコネクト1624によりインターコネクトされてよい。一実施形態において、計算アクセラレータ1630は、デバイス全体のキャッシュとして構成されることができる大容量L3キャッシュ1636を含む。計算アクセラレータ1630はまた、
図16Bのグラフィックスプロセッサ1620と類似の方式で、ホストインタフェース1628を介してホストプロセッサ及びメモリに接続できる。
[グラフィックス処理エンジン]
【0255】
図17は、いくつかの実施形態に従うグラフィックスプロセッサのグラフィックス処理エンジン1710のブロック図である。グラフィックス処理エンジン(GPE)1710は、
図16Aに示されるGPE1610のバージョンであってよく、
図16Bのグラフィックスエンジンタイル1610A-1610Dを表してもよい。本明細書における任意の他の図面の要素と同一又は類似の名称を有する
図17の要素は、他の図面にある同一の要素について説明しており、本明細書における他の箇所での説明と同様に、それと同様に動作又は機能でき、同一のコンポーネントを備えることができ、他の要素にリンクされることができるが、そのように限定されることはない。例えば、
図16Aの3Dパイプライン1612及びメディアパイプライン1616が
図17にも示されている。メディアパイプライン1616は、GPE1710のいくつかの実施形態におけるオプションであり、GPE1710内に明示的に含まれていなくてよい。例えば、少なくとも1つの実施形態において、別個のメディア及び/又は画像プロセッサは、GPE1710に連結される。
【0256】
GPE1710は、コマンドストリーマ1703と連結してよい、又は、コマンドストリーマ1703を含んでよく、コマンドストリーマ1703は、3Dパイプライン1612及び/又はメディアパイプライン1616にコマンドストリームを提供する。あるいは又はさらに、コマンドストリーマ1703は、ユニファイドリターンバッファ1718に直接連結されてよい。ユニファイドリターンバッファ1718は、グラフィックスコアアレイ1714に通信可能に連結されてよい。オプションで、コマンドストリーマ1703は、メモリと連結されており、メモリは、システムメモリ、又は、内部キャッシュメモリと共有キャッシュメモリのうちの1つ又は複数とすることができる。コマンドストリーマ1703は、メモリからコマンドを受信し、当該コマンドを3Dパイプライン1612及び/又はメディアパイプライン1616に送信してよい。コマンドは、リングバッファからフェッチされる命令であり、3Dパイプライン1612及びメディアパイプライン1616に対するコマンドを格納する。さらに、リングバッファは、複数のコマンドのバッチを格納するバッチコマンドバッファを含むことができる。3Dパイプライン1612に対するコマンドは、限定されることはないが、3Dパイプライン1612に対する頂点及びジオメトリデータ、及び/又は、メディアパイプライン316に対する画像データ及びメモリオブジェクトなど、メモリに格納されたデータへの参照を含むこともできる。3Dパイプライン1612及びメディアパイプライン1616は、それぞれのパイプライン内のロジックを介して演算を実行することにより、又は、1つ又は複数の実行スレッドをグラフィックスコアアレイ1714にディスパッチすることにより、コマンド及びデータを処理する。グラフィックスコアアレイ1714は、グラフィックスコア(例えば、グラフィックスコア1715A、グラフィックスコア1715B)の1つ又は複数のブロックを含んでよく、各ブロックは、1つ又は複数のグラフィックスコアを含む。各グラフィックスコアは、グラフィックス及び計算演算、並びに、固定機能テクスチャ処理を実行する汎用及びグラフィックス固有の実行ロジック、及び/又は、機械学習及び人工知能アクセラレーションロジックを含むグラフィックス実行リソースのセットを含む。
【0257】
様々な実施形態において、3Dパイプライン1612は、命令を処理し、実行スレッドをグラフィックスコアアレイ1714にディスパッチすることにより、頂点シェーダ、ジオメトリシェーダ、画素シェーダ、フラグメントシェーダ、計算シェーダ、又は、他のシェーダプログラムなど、1つ又は複数のシェーダプログラムを処理する固定機能及びプログラマブルロジックを含むことができる。グラフィックスコアアレイ1714は、これらのシェーダプログラムを処理する際の使用のために、実行リソースの統合ブロックを提供する。グラフィックスコアアレイ1714のグラフィックスコア1715A-1714B内の多目的実行ロジック(例えば、実行ユニット)は、様々な3D APIシェーダ言語に対するサポートを含み、複数のシェーダと関連付けられる複数の同時実行スレッドを実行できる。
【0258】
グラフィックスコアアレイ1714は、ビデオ及び/又は画像処理などのメディア機能を実行する実行ロジックを含んでよい。実行ユニットは、グラフィックス処理演算に加えて、並列汎用計算演算を実行するためにプログラマブルな汎用ロジックを含んでよい。汎用ロジックは、
図14のプロセッサコア1407又は
図15Aのコア1502A-1502N内の汎用ロジックと並行して、又はこれらと共に処理演算を実行できる。
【0259】
グラフィックスコアアレイ1714上で実行するスレッドにより生成される出力データは、ユニファイドリターンバッファ(URB)1718内のメモリにデータを出力できる。URB1718は、複数のスレッドに対するデータを格納できる。URB1718は、グラフィックスコアアレイ1714上で実行する異なるスレッド間のデータを送信するために用いられてよい。さらに、URB1718は、グラフィックスコアアレイ1714上のスレッドと、共有機能ロジック1720内の固定機能ロジックとの間の同期のために用いられてよい。
【0260】
オプションで、グラフィックスコアアレイ1714はスケーラブルであってよく、当該アレイは、様々な数のグラフィックスコアを含み、それぞれ、GPE1710の目標電力及び性能レベルに基づいて、様々な数の実行ユニットを有する。実行リソースは動的にスケーラブルであってよく、実行リソースは、必要に応じて、有効にされる、又は、無効にされる。
【0261】
グラフィックスコアアレイ1714は、グラフィックスコアアレイのグラフィックスコア間で共有される複数のリソースを含む共有機能ロジック1720と連結する。共有機能ロジック1720内の共有機能は、専用の補足機能をグラフィックスコアアレイ1714に提供するハードウェアロジックユニットである。様々な実施形態において、共有機能ロジック1720は、限定されるものではないが、サンプラ1721、数学1722、スレッド間通信(ITC)1723ロジックを含む。さらに、共有機能ロジック1720内に、1つ又は複数のキャッシュ1725が実装されてよい。
【0262】
共有機能は、少なくとも、所定の専用の機能に対する要求をグラフィックスコアアレイ1714内に含めるには不十分である場合に実装される。代わりに、その専用の機能の単一インスタンス化は、共有機能ロジック1720のスタンドアロンエンティティとして実装され、グラフィックスコアアレイ1714内の実行リソース間で共有される。グラフィックスコアアレイ1714間で共有され、グラフィックスコアアレイ1714内に含まれる機能の正確なセットは、実施形態により変わる。グラフィックスコアアレイ1714によって拡張的に用いられる共有機能ロジック1720内の特定の共有機能が、グラフィックスコアアレイ1714内の共有機能ロジック1716内に含まれてよい。オプションで、グラフィックスコアアレイ1714内の共有機能ロジック1716は、共有機能ロジック1720内のいくつかの又はすべてのロジックを含むことができる。共有機能ロジック1720内のすべてのロジックエレメントは、グラフィックスコアアレイ1714の共有機能ロジック1716内で重複してよい。あるいは、グラフィックスコアアレイ1714内の共有機能ロジック1716が優先され、共有機能ロジック1720が除外される。
[実行ユニット]
【0263】
図18A~
図18Bは、本明細書で説明される実施形態に係るグラフィックスプロセッサコアにおいて用いられる処理要素のアレイを含むスレッド実行ロジック1800を示す。本明細書における任意の他の図面の要素と同一又は類似の名称を有する
図18A~
図18Bの要素は、他の図面にある同一の要素について説明しており、本明細書における他の箇所での説明と同様に、それと同様に動作又は機能でき、同一のコンポーネントを備えることができ、他の要素にリンクされることができるが、そのように限定されることはない。
図18A~
図18Bは、スレッド実行ロジック1800の概要を示し、
図15Bの各サブコア1521A-1521Fで図示されるハードウェアロジックを表し得る。
図18Aは、汎用グラフィックスプロセッサ内の実行ユニットを表す一方、
図18Bは、計算アクセラレータ内で用いられ得る実行ユニットを表す。
【0264】
図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のアレイはスケーラブルである。
【0265】
実行ユニット1808A-1808Nは、主に、シェーダプログラムを実行するために用いられてよい。シェーダプロセッサ1802は、様々なシェーダプログラムを処理し、スレッドディスパッチャ1804を介してシェーダプログラムと関連付けられた実行スレッドをディスパッチできる。スレッドディスパッチャは、グラフィックス及びメディアパイプラインからのスレッド開始要求をアービトレートし、1つ又は複数の実行ユニット1808A-1808N上で要求されたスレッドをインスタンス化するロジックを含んでよい。例えば、ジオメトリパイプラインは、頂点、テセレーション、ジオメトリシェーダを処理用のスレッド実行ロジックにディスパッチできる。オプションで、スレッドディスパッチャ1804はまた、実行中のシェーダプログラムからのランタイムスレッドスポーンリクエストを処理できる。
【0266】
実行ユニット1808A-1808Nは、グラフィックスライブラリ(例えば、Direct3D及びOpenGL)からのシェーダプログラムが最小の変換で実行されるように、多くの標準3Dグラフィックシェーダ命令のためのネイティブサポートを含む命令セットをサポートしてよい。実行ユニットは、頂点及びジオメトリ処理(例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ)、画素処理(例えば、画素シェーダ、フラグメントシェーダ)、及び、汎用処理(例えば、計算及びメディアシェーダ)をサポートする。実行ユニット1808A-1808Nのそれぞれは、マルチ発行単一命令多重データ(SIMD)を実行することができ、マルチスレッド演算は、より高いレイテンシメモリアクセスに直面して効率的な実行環境を可能にする。各実行ユニット内の各ハードウェアスレッドは、専用の高帯域幅レジスタファイルと、関連する独立したスレッド状態を有する。実行は、整数、単精度及び倍精度浮動小数点演算、SIMD分岐機能、論理演算、超越演算及び他の各種演算が可能なパイプラインへのクロックごとのマルチ発行である。メモリからのデータ又は共有機能のうちの1つからのデータを待機する間、実行ユニット1808A-1808N内の依存性ロジックは、要求したデータが戻されるまで、待機中のスレッドをスリープさせる。待機中のスレッドがスリープしている間、ハードウェアリソースは、他のスレッドの処理に当てられてよい。例えば、頂点シェーダ演算に関連する遅延中に、実行ユニットは、
図21に示される頂点シェーダ2107などの異なる頂点シェーダを含む、画素シェーダ、フラグメントシェーダ又は別のタイプのシェーダプログラムのための演算を実行できる。様々な実施形態が、SIMDの使用に対する代替として又はSIMDの使用に加えて、単一命令多重スレッド(SIMT)を使用して実行を用いるのに適用できる。SIMDコア又はオペレーションへの参照が、SIMTにも適用でき、SIMTと組み合わせてSIMDにも適用できる。
【0267】
実行ユニット1808A-1808N内の各実行ユニットは、データ要素のアレイ上で動作する。データ要素の数は、命令に対する「実行サイズ」、又は、チャネルの数である。実行チャネルは、データ要素アクセス、マスキング、及び命令内のフロー制御についての実行の論理ユニットである。チャネルの数は、特定のグラフィックスプロセッサ用の物理算術論理ユニット(ALU)、浮動小数点ユニット(FPU)又は他のロジックユニット(例えば、テンソルコア、レイトレーシングコアなど)の数とは独立していてよい。さらに、実行ユニット1808A-1808Nは、整数及び浮動小数点データ型をサポートしてよい。
【0268】
実行ユニット命令セットは、SIMD命令を含む。様々なデータ要素は、パックドデータ型としてレジスタに格納されてよく、実行ユニットは、これらの要素のデータサイズに基づいて様々な要素を処理することになる。例えば、256ビット幅のベクトルに対して操作する場合、ベクトルの256ビットがレジスタに格納され、実行ユニットは、4つの別個の184ビットパックドデータ要素(クアッドワード(QW)サイズのデータ要素)、8つの別個の32ビットパックドデータ要素(ダブルワード(DW)サイズのデータ要素)、16個の別個の16ビットパックドデータ要素(ワード(W)サイズのデータ要素)、又は、32個の別個の8ビットデータ要素(バイト(B)サイズのデータ要素)としてベクトルを操作する。しかしながら、異なるベクトル幅及びレジスタサイズが可能である。
【0269】
オプションで、1つ又は複数の実行ユニットは、融合された実行ユニット(EU)に共通のスレッド制御ロジック(1807A~1807N)を有する融合された実行ユニット1809A~1809Nと組み合わせられ得る。複数のEUは、EUグループに融合されることができる。融合されたEUグループ内の各EUは、別個のSIMDハードウェアスレッドを実行するように構成されることができる。融合されたEUグループ内のEUの数は、実施形態に応じて変わり得る。さらに、限定されるものではないが、SIMD8、SIMD16、SIMD32を含む様々なSIMD幅が、EUごとに実行され得る。各融合されたグラフィックス実行ユニット1809A-1809Nは、少なくとも2つの実行ユニットを含む。例えば、融合された実行ユニット1809Aは、第1のEU1808A、第2のEU1808B、及び第1のEU1808Aと第2のEU1808Bに共通のスレッド制御ロジック1807Aを含む。スレッド制御ロジック1807Aは、融合されたグラフィックス実行ユニット1809A上で実行されるスレッドを制御し、融合された実行ユニット1809A-1809N内の各EUが、共通命令ポインタレジスタを用いて実行されることを可能にする。
【0270】
1つ又は複数の内部命令キャッシュ(例えば、1806)は、実行ユニットに対するスレッド命令をキャッシュすべく、スレッド実行ロジック1800に含まれる。1つ又は複数のデータキャッシュ(例えば、1812)は、スレッド実行中にスレッドデータをキャッシュすべく、スレッド実行ロジック1800に含まれてよい。実行ロジック1800で実行中のスレッドはまた、共有ローカルメモリ1811に、明示的に管理されているデータを格納できる。3D演算用のテクスチャサンプリング及びメディア演算用のメディアサンプリングを提供すべく、サンプラ1810が含まれてよい。サンプラ1810は、サンプリングされたデータを実行ユニットに提供する前に、サンプリング処理中にテクスチャ又はメディアデータを処理するための専用のテクスチャ又はメディアサンプリング機能を含んでよい。
【0271】
実行中に、グラフィックス及びメディアパイプラインは、スレッドスポーン及びディスパッチロジックを介して、スレッド実行ロジック1800にスレッド開始要求を送信する。ジオメトリックオブジェクトのグループが処理されて、画素データへとラスタライズされると、シェーダプロセッサ1802内の画素プロセッサロジック(例えば、画素シェーダロジック、フラグメントシェーダロジックなど)が、出力情報をさらに計算するために呼び出され、出力サーフェス(例えば、カラーバッファ、デプスバッファ、ステンシルバッファなど)に結果が書き込まれるようにする。画素シェーダ又はフラグメントシェーダは、ラスタライズされたオブジェクトにわたって補間されるべき様々な頂点属性の値を計算してよい。次に、シェーダプロセッサ1802内の画素プロセッサロジックは、アプリケーションプログラミングインタフェース(API)により供給される画素、又は、フラグメントシェーダプログラムを実行してよい。シェーダプログラムを実行するべく、シェーダプロセッサ1802は、スレッドディスパッチャ1804を介して、スレッドを実行ユニット(例えば、1808A)にディスパッチする。シェーダプロセッサ1802は、サンプラ1810内のテクスチャサンプリングロジックを用いて、メモリに格納されているテクスチャマップ内のテクスチャデータにアクセスしてよい。テクスチャデータに対する算術演算、及び、入力されるジオメトリデータは、各ジオメトリックフラグメントに対する画素カラーデータを計算する、又は、さらなる処理から1つ又は複数の画素を破棄する。
【0272】
さらに、データポート1814は、グラフィックスプロセッサ出力パイプラインに対するさらなる処理のために、処理されたデータをメモリに出力すべく、スレッド実行ロジック1800にメモリアクセスメカニズムを提供する。データポート1814は、データポート1814を介してメモリアクセスのためのデータをキャッシュする1つ又は複数のキャッシュメモリ(例えば、データキャッシュ1812)を含んでよい、又は、これに連結されてよい。
【0273】
オプションで、実行ロジック1800はまた、レイトレーシングアクセラレーション機能を提供できるレイトレーサ1805を含むことができる。レイトレーサ1805は、Ray Generationのための命令/機能を含むレイトレーシング命令セットをサポートできる。レイトレーシング命令セットは、
図3Cにおけるレイトレーシングコア372によりサポートされているレイトレーシング命令セットに類似する、又は、異なるものとすることができる。
【0274】
図18Bは、実行ユニット1808の例示的な内部の詳細を示す。グラフィックス実行ユニット1808は、命令フェッチユニット1837、汎用レジスタファイルアレイ(GRF)1824、アーキテクチャレジスタファイルアレイ(ARF)1826、スレッドアービタ1822、送信ユニット1830、分岐ユニット1832、SIMD浮動小数点ユニット(FPU)のセット1834、及び、オプションで、専用の整数SIMD ALUのセット1835を含むことができる。GRF1824及びARF1826は、グラフィックス実行ユニット1808内でアクティブであってよい各同時ハードウェアスレッドと関連付けられた汎用レジスタファイル及びアーキテクチャレジスタファイルのセットを含む。スレッドごとのアーキテクチャの状態がARF1826内で維持されてよい一方、スレッド実行中に用いられるデータは、GRF1824内に格納される。各スレッドの命令ポインタを含む、各スレッドの実行状態は、ARF1826内のスレッド固有のレジスタ内に保持されることができる。
【0275】
グラフィックス実行ユニット1808は、同時マルチスレッディング(SMT)及び細粒度のインタリーブ型マルチスレッディング(IMT)の組み合わせのアーキテクチャを有してよい。アーキテクチャは、目標の同時スレッドの数及び実行ユニットごとのレジスタの数に基づいて、設計時に微調整され得るモジュール構成を有してよく、実行ユニットのリソースが複数の同時スレッドを実行するために用いられるロジックに分割される。グラフィックス実行ユニット1808によって実行可能な論理スレッドの数は、ハードウェアスレッドの数に限定はされるものではなく、複数の論理スレッドが各ハードウェアスレッドに割り当てられることができる。
【0276】
オプションで、グラフィックス実行ユニット1808は、それぞれが異なる命令であり得る複数の命令を共同発行できる。グラフィックス実行ユニットのスレッド1808のスレッドアービタ1822は、実行のために、送信ユニット1830、分岐ユニット1832、又は、SIMD FPU1834のうちの1つに命令をディスパッチすることができる。各実行スレッドは、GRF1824内の128個の汎用レジスタにアクセスでき、各レジスタは、32ビットデータ要素のSIMD8-要素ベクトルとしてアクセス可能な32バイトを格納できる。各実行ユニットのスレッドは、GRF1824内の4Kバイトへのアクセスを有してよいが、実施形態ではそのようには限定されず、他の実施形態においては、より多い又はより少ない数のレジスタリソースが提供されてよい。グラフィックス実行ユニット1808は、計算演算を独立して実行できる7個のハードウェアスレッドにパーティション化されてよいが、実行ユニットごとのスレッド数は、実施形態に従って変わってもよく、例えば、最大で16個のハードウェアスレッドをサポートすることもできる。7個のスレッドが4Kバイトにアクセスしてよい例示的な実施形態においては、GRF1824は、合計28Kバイトを格納してよい。別の例示的な実施形態では、16個のスレッドは、4Kバイトにアクセスしてよく、GRF1824は、合計64Kバイトを格納できる。しかしながら、実行ユニットごとのスレッド数は、これらの例に限定はされず、所定の数よりも多くてよい又は少なくてよい。柔軟なアドレス指定モードにより複数のレジスタが一緒にアドレス指定されることを許容することができ、効果的により幅広いレジスタを構築する、又は、ストライド矩形ブロックデータ構造を表す。
【0277】
さらに、又は、あるいは、メモリ演算、サンプラ演算及び他のより長いレイテンシのシステム通信は、メッセージパッシングを送信ユニット1830により実行される「送信」命令を介してディスパッチされてよい。分岐命令は、SIMD発散及び最終的な収束を促進するための専用の分岐ユニット1832にディスパッチされてよい。
【0278】
グラフィックス実行ユニット1808は、浮動小数点演算を実行する1つ又は複数のSIMD浮動小数点ユニット(FPU)1834を含んでよい。FPU1834は、整数計算をサポートしてもよい。いくつかの例において、FPU1834は、最大でM個の32ビットの浮動小数点(又は、整数)演算をSIMD実行でき、又は、最大で2M個の16ビット整数又は16ビットの浮動小数点演算をSIMD実行できる。オプションで、FPUのうちの少なくとも1つは、ハイスループットで卓越した数学関数及び倍精度の184ビットの浮動小数点をサポートする拡張型数学機能を提供する。8ビットの整数SIMD ALU1835のセットが存在してもよく、具体的には、機械学習計算と関連付けられる演算を実行するために最適化されてよい。
【0279】
オプションで、グラフィックス実行ユニット1808の複数のインスタンスのアレイは、グラフィックスサブコアグループ(例えば、サブスライス)にインスタンス化されることができる。スケーラビリティについては、製品設計者がサブコアごとにグループした実行ユニットの正確な数を選択できる。実行ユニット1808は、複数の実行チャネルにわたって命令を実行してよい。さらに、グラフィックス実行ユニット1808上で実行される各スレッドは、異なるチャネル上で実行されてよい。
【0280】
図19は、さらに例示的な実行ユニット1900を示す。本明細書における任意の他の図面の要素と同一又は類似の名称を有する
図19の要素は、他の図面にある同一の要素について説明しており、本明細書における他の箇所での説明と同様に、それと同様に動作又は機能でき、同一のコンポーネントを備えることができ、他の要素にリンクされることができるが、そのように限定されることはない。実行ユニット1900は、例えば、
図16Cにあるような計算エンジンタイル1640A-1640Dでの使用のための計算が最適化された実行ユニットであってよいが、これに限定されるものではない。実行ユニット1900はまた、
図16Bにあるようなグラフィックスエンジンタイル1610A-1610Dにおいて用いられてよい。実行ユニット1900は、スレッド制御ユニット1901、スレッド状態ユニット1902、命令フェッチ/プリフェッチユニット1903、及び、命令デコードユニット1904を含んでよい。さらに、実行ユニット1900は、実行ユニット内のハードウェアスレッドに割り当てられることができるレジスタを格納するレジスタファイル1906を含んでよい。さらに、実行ユニット1900は、送信ユニット1907及び分岐ユニット1908を含んでよい。送信ユニット1907及び分岐ユニット1908は、
図18Bのグラフィックス実行ユニット1808の送信ユニット1830及び分岐ユニット1832と同様に動作してよい。
【0281】
実行ユニット1900は、複数の異なるタイプの機能ユニットを含む計算ユニット1910を含むこともできる。計算ユニット1910はまた、算術論理ユニットのアレイを含むALUユニット1911を含んでよい。ALUユニット1911は、64ビット、32ビット及び16ビットの整数及び浮動小数点演算を実行するように構成されることができる。整数及び浮動小数点演算は、同時に実行されてよい。計算ユニット1910は、シストリックアレイ1912及び数学ユニット1913を含むこともできる。シストリックアレイ1912は、シストリック方式でベクトル演算又は他のデータ並列演算を行うのに用いられ得るデータ処理ユニットのW幅及びD深さのネットワークを含む。シストリックアレイ1912は、行列ドット積演算などの行列演算を実行するように構成されることができる。シストリックアレイ1912は、16ビットの浮動小数点演算、並びに、8ビット及び4ビット整数演算をサポートしてよい。シストリックアレイ1912は、機械学習演算をアクセラレートするように構成され得る。シストリックアレイ1912は、bfloat16、16ビット浮動小数点フォーマットをサポートするように構成されることができる。ALUユニット1911よりも効率的かつ低電力な方式で数学演算の特定のサブセットを実行するために、数学ユニット1913が含まれることができる。数学ユニット1913は、説明した他の実施形態、例えば、
図17の共有機能ロジック1720の数学ロジック1722により提供されるグラフィックス処理エンジンの共有機能ロジックで見つけられる数学ロジックを含むことができる。数学ユニット1913は、32ビット及び64ビットの浮動小数点演算を実行するように構成されることができる。
【0282】
スレッド制御ユニット1901は、実行ユニット内のスレッドの実行を制御するロジックを含む。スレッド制御ユニット1901は、実行ユニット1900内のスレッドの実行を開始、停止及びプリエンプトするためのスレッドアービトレーションロジックを含むことができる。スレッド状態ユニット1902は、実行ユニット1900上で実行するように割り当てられるスレッドのスレッド状態を格納するために用いられることができる。実行ユニット1900内のスレッド状態を格納することで、これらのスレッドがブロック又はアイドルになったとき、スレッドの迅速なプリエンプトを可能にする。命令フェッチ/プリフェッチユニット1903は、より高レベルな実行ロジックの命令キャッシュ(例えば、
図18Aの命令キャッシュ1806)から命令をフェッチすることができる。命令フェッチ/プリフェッチユニット1903は、現在実行中のスレッドの解析に基づいて、命令キャッシュにロードされる命令に対するプリフェッチリクエストを発行することもできる。命令デコードユニット1904は、計算ユニットにより実行される命令をデコードするために用いられることができる。命令デコードユニット1904は、複合命令を構成マイクロオペレーションにデコードするための二次デコーダとして用いられることができる。
【0283】
さらに、実行ユニット1900は、実行ユニット1900上で実行するハードウェアスレッドにより用いられることができるレジスタファイル1906を含む。レジスタファイル1906内のレジスタは、実行ユニット1900の計算ユニット1910内で複数の同時スレッドを実行するために用いられるロジックにわたって分割されることができる。グラフィックス実行ユニット1900により実行され得る論理スレッドの数は、ハードウェアスレッドの数に限定されるものではなく、複数の論理スレッドは、各ハードウェアスレッドに割り当てられることができる。レジスタファイル1906のサイズは、サポートされるハードウェアスレッドの数に基づいて、実施形態にわたって変わることができる。レジスタリネーミングは、レジスタをハードウェアスレッドに動的に割り当てるために用いられてよい。
【0284】
図20は、グラフィックスプロセッサの命令フォーマット2000を示すブロック図である。グラフィックスプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線の枠は、一般に実行ユニット命令に含まれるコンポーネントを示し、破線は、任意選択のコンポーネント又は命令のサブセットだけに含まれるコンポーネントを含む。説明され図示される命令フォーマット2000は、命令が処理された時点の命令デコードから得られたマイクロオペレーションとは対照的に、実行ユニットに供給される命令であるという点で、マクロ命令である。
【0285】
本明細書で説明されるように、グラフィックスプロセッサ実行ユニットは、128ビットの命令フォーマット2010の命令をネイティブサポートしてよい。選択された命令、命令オプション及びオペランド数に基づいて、64ビットの圧縮命令フォーマット2030が、いくつかの命令に利用可能である。ネイティブの128ビットの命令フォーマット2010は、すべての命令オプションへのアクセスを提供する一方、いくつかのオプション及び演算は、64ビットのフォーマット2030に制限されている。64ビットのフォーマット2030で利用可能なネイティブ命令は、実施形態により変わる。インデックスフィールド2013内のインデックス値のセットを用いて、命令は部分的に圧縮される。実行ユニットのハードウェアは、インデックス値に基づいて圧縮テーブルのセットを参照し、圧縮テーブルの出力を使用して、ネイティブ命令を128ビットの命令フォーマット2010で再構成する。他のサイズ及びフォーマットの命令を用いることができる。
【0286】
各フォーマットについて、命令オペコード2012は、実行ユニットが実行する演算を規定する。実行ユニットは、各オペランドの複数のデータ要素にわたって、各命令を並行して実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャ要素又はピクチャ要素を表す各カラーチャネルに対して同時加算演算を実行する。デフォルトでは、実行ユニットは、オペランドのすべてのデータチャネルに対して各命令を行う。命令制御フィールド2014は、チャネル選択(例えば、プレディケーション)及びデータチャネルオーダ(例えば、スウィズル)などの特定の実行オプションに対する制御を可能にしてよい。128ビットの命令フォーマット2010の命令について、実行サイズフィールド2016は、並行して実行されるデータチャネルの数を制限する。実行サイズフィールド2016は、64ビットの圧縮命令フォーマット2030で用いるには、利用可能でない可能性がある。
【0287】
いくつかの実行ユニット命令は、2つのソースオペランド、src0 2020、src1 2022及び1つのデスティネーション2018を含む最大で3つのオペランドを有する。実行ユニットは、デュアルデスティネーション命令をサポートしてよく、デスティネーションのうちの1つが暗示される。データ操作命令は、第3ソースオペランド(例えば、SRC2 2024)を有することができ、命令オペコード2012がソースオペランドの数を判定する。命令の最後のソースオペランドは、命令と共に送られる直の(例えば、ハードコードされた)値とすることができる。
【0288】
128ビットの命令フォーマット2010は、例えば、直接レジスタアドレス指定モード又は間接レジスタアドレス指定モードが用いられるかを指定するアクセス/アドレスモードフィールド2026を含んでよい。直接レジスタアドレス指定モードが用いられる場合、1つ又は複数のオペランドのレジスタアドレスは、命令内のビットにより直接提供される。
【0289】
128ビットの命令フォーマット2010はまた、命令に対するアドレスモード及び/又はアクセスモードを指定するアクセス/アドレスモードフィールド2026を含んでよい。アクセスモードは、命令のデータアクセスアライメントを規定するために用いられてよい。16バイトアライン型のアクセスモード及び1バイトアライン型のアクセスモードを含むアクセスモードをサポートしてよく、この場合、アクセスモードのバイトアライメントが命令オペランドのアクセスアライメントを判定する。例えば、第1のモードの場合、命令は、バイトアライン型のアドレス指定をソースオペランド及びデスティネーションオペランドに用いてよく、第2のモードの場合、命令は、16バイトでアラインしたアドレス指定をすべてのソースオペランド及びデスティネーションオペランドに用いてよい。
【0290】
アクセス/アドレスモードフィールド2026のアドレスモード部分は、命令が直接アドレス指定又は間接アドレス指定のいずれを使用するかを判定してよい。直接レジスタアドレス指定モードが用いられる場合、命令内のビットが1つ又は複数のオペランドのレジスタアドレスを直接提供する。間接レジスタアドレス指定モードが用いられる場合、1つ又は複数のオペランドのレジスタアドレスが、命令内のアドレスレジスタ値及びアドレス即値フィールドに基づいて計算されてよい。
【0291】
命令は、オペコードデコード2040を単純化するべく、オペコード2012ビットフィールドに基づいてグループ化されてよい。8ビットのオペコードに対して、ビット4、5及び6は、実行ユニットがオペコードのタイプを判定することを可能にする。示されている、まさにそのオペコードのグループは、単なる一例である。移動及びロジックオペコードグループ2042は、データ移動及びロジック命令(例えば、移動(mov)、比較(cmp))を含んでよい。移動及びロジックグループ2042は、5つの最下位ビット(LSB)を共有してよく、ここで、移動(mov)命令は0000xxxxbの形式であり、ロジック命令は0001xxxxbの形式である。フロー制御命令グループ2044(例えば、呼び出し、ジャンプ(jmp))は、0010xxxxb(例えば、0x20)の形式の命令を含む。各種命令グループ2046は、命令の混合を含み、0011xxxxb(例えば、0x30)の形式の同期命令(例えば、待機、送信)を含む。並列数学命令グループ2048は、0100xxxxb(例えば、0x40)の形式のコンポーネントに関する算術命令(例えば、加算、乗算(mul))を含む。並列数学グループ2048は、データチャネルに並行して算術演算を実行する。ベクトル数学グループ2050は、0101xxxxb(例えば、0x50)の形式の算術命令(例えば、dp4)を含む。ベクトル数学グループは、ベクトルオペランドに対して、ドット積計算などの算術を行う。一実施形態において、示されたオペコードデコード2040を用いて、実行ユニットのどの部分が、デコードされた命令の実行に用いられるかを判定できる。例えば、いくつかの命令は、シストリックアレイにより実行されるシストリック命令に指定されてよい。レイトレーシング命令(図示されていない)などの他の命令が、実行ロジックのスライス又はパーティション内のレイトレーシングコア又はレイトレーシングロジックに送られることができる。
[グラフィックスパイプライン]
【0292】
図21は、別の実施形態に係るグラフィックスプロセッサ2100のブロック図である。本明細書における任意の他の図面の要素と同一又は類似の名称を有する
図21の要素は、他の図面にある同一の要素について説明しており、本明細書における他の箇所での説明と同様に、それと同様に動作又は機能してよく、同一のコンポーネントを備えてよく、他の要素にリンクされてよいが、そのように限定されることはない。
【0293】
グラフィックスプロセッサ2100は、ジオメトリパイプライン2120、メディアパイプライン2130、ディスプレイエンジン2140、スレッド実行ロジック2150及びレンダー出力パイプライン2170など、異なるタイプのグラフィックス処理パイプラインを含んでよい。グラフィックスプロセッサ2100は、1つ又は複数の汎用処理コアを含むマルチコア処理システム内のグラフィックスプロセッサであってよい。グラフィックスプロセッサは、1つ又は複数の制御レジスタ(図示されていない)に書き込まれるレジスタにより、又は、リングインターコネクト2102を介してグラフィックスプロセッサ2100に発行されるコマンドを介して制御されてよい。リングインターコネクト2102は、グラフィックスプロセッサ2100を、他のグラフィックスプロセッサ又は汎用プロセッサなどの他の処理コンポーネントに連結してよい。リングインターコネクト2102からのコマンドは、ジオメトリパイプライン2120又はメディアパイプライン2130の個別のコンポーネントに命令を供給するコマンドストリーマ2103により解釈される。
【0294】
コマンドストリーマ2103は、メモリから頂点データを読み出す頂点フェッチャ2105の演算を命令してよく、コマンドストリーマ2103により提供される頂点処理コマンドを実行する。頂点フェッチャ2105は、頂点データを頂点シェーダ2107に提供してよく、頂点シェーダ2107は、各頂点に座標空間変換及びライティング(lighting)演算を実行する。頂点フェッチャ2105及び頂点シェーダ2107は、スレッドディスパッチャ2131を介して実行ユニット2152A-2152Bに実行スレッドをディスパッチすることにより、頂点処理命令を実行してよい。
【0295】
実行ユニット2152A-2152Bは、グラフィックス及びメディア演算を実行するための命令セットを有するベクトルプロセッサのアレイであってよい。実行ユニット2152A-2152Bは、各アレイに対して固有である、又は、アレイ間で共有される付属のL1キャッシュ2151を有してよい。キャッシュは、異なるパーティションにデータ及び命令を含むようにパーティション化されるデータキャッシュ、命令キャッシュ、又は、単一のキャッシュとして構成されることができる。
【0296】
ジオメトリパイプライン2120は、3Dオブジェクトのハードウェアアクセラレーテッドテセレーションを実行するテセレーションコンポーネントを含んでよい。プログラマブルハルシェーダ2111は、テセレーション演算を構成してよい。プログラマブルドメインシェーダ2117は、テセレーション出力のバックエンド評価を提供してよい。テセレータ2113は、ハルシェーダ2111の指示で動作してよく、ジオメトリパイプライン2120への入力として提供される粗いジオメトリックモデルに基づいて、詳細なジオメトリックオブジェクトのセットを生成する専用ロジックを含んでよい。さらに、テセレーションが用いられない場合、テセレーションコンポーネント(例えば、ハルシェーダ2111、テセレータ2113及びドメインシェーダ2117)はバイパスされることができる。
【0297】
完全なジオメトリックオブジェクトは、実行ユニット2152A-2152Bにディスパッチされる1つ又は複数のスレッドを介してジオメトリシェーダ2119により処理されてよい、又は、クリッパ2129に直接進むことができる。ジオメトリシェーダは、グラフィックスパイプラインの前のステージにあるような頂点又は頂点のパッチよりもむしろ、ジオメトリックオブジェクト全体に対して動作してよい。テセレーションが無効である場合、ジオメトリシェーダ2119は、頂点シェーダ2107からの入力を受信する。ジオメトリシェーダ2119は、テセレーションユニットが無効である場合に、ジオメトリテセレーションを実行するジオメトリシェーダプログラムによりプログラマブルであってよい。
【0298】
ラスタライズの前に、クリッパ2129は、頂点データを処理する。クリッパ2129は、固定機能クリッパ、又は、クリッピング及びジオメトリシェーダ機能を有するプログラマブルクリッパであってよい。レンダー出力パイプライン2170におけるラスタライザ及びデプステストコンポーネント2173は、画素表現ごとにジオメトリックオブジェクトを変換するために、画素シェーダをディスパッチしてよい。画素シェーダロジックは、スレッド実行ロジック2150に含まれてよい。オプションで、アプリケーションは、ラスタライザ及びデプステストコンポーネント2173をバイパスし、ストリームアウトユニット2123を介して、ラスタライズされていない頂点データにアクセスすることができる。
【0299】
グラフィックスプロセッサ2100は、インターコネクトバス、インターコネクトファブリック、又は、プロセッサの主要なコンポーネント間でデータ及びメッセージの受け渡しを可能にするいくつかの他のインターコネクトメカニズムを有する。いくつかの実施形態において、実行ユニット2152A-2152B及び関連する論理ユニット(例えば、L1キャッシュ2151、サンプラ2154、テクスチャキャッシュ2158など)は、メモリアクセスを実行するために、データポート2156を介してインターコネクトし、プロセッサのレンダー出力パイプラインコンポーネントと通信する。サンプラ2154、キャッシュ2151、2158及び実行ユニット2152A-2152Bはそれぞれ、別個のメモリアクセスパスを有してよい。オプションで、テクスチャキャッシュ2158は、サンプラキャッシュとして構成されることもできる。
【0300】
レンダー出力パイプライン2170は、頂点ベースのオブジェクトを関連する画素ベースの表現に変換するラスタライザ及びデプステストコンポーネント2173を含んでよい。ラスタライザロジックは、固定機能三角形及び線ラスタライズを実行するウィンドウア(windower)/マスカ(masker)ユニットを含んでよい。関連するレンダーキャッシュ2178及びデプスキャッシュ2179はまた、いくつかの実施形態において利用可能である。画素演算コンポーネント2177は、データに対して画素ベースの演算を実行するが、いくつかの例では、2D演算と関連付けられる画素演算(例えば、ブレンディングを伴うビットブロック画像転送)が、2Dエンジン2141により実行される、又は、オーバレイディスプレイプレーンを用いてディスプレイコントローラ2143により表示時に置き換えられる。共有L3キャッシュ2175は、すべてのグラフィックスコンポーネントに利用可能であってよく、メインシステムメモリを用いることなくデータを共有することが可能となる。
【0301】
グラフィックスプロセッサメディアパイプライン2130は、メディアエンジン2137及びビデオフロントエンド2134を含んでよい。ビデオフロントエンド2134は、コマンドストリーマ2103からパイプラインコマンドを受信してよい。メディアパイプライン2130は、別個のコマンドストリーマを含んでよい。ビデオフロントエンド2134は、メディアコマンドをメディアエンジン2137に送信する前に、当該コマンドを処理してよい。メディアエンジン2137は、スレッドディスパッチャ2131を介してスレッド実行ロジック2150にディスパッチするためのスレッドをスポーンするためのスレッドスポーン機能を含んでよい。
【0302】
グラフィックスプロセッサ2100は、ディスプレイエンジン2140を含んでよい。ディスプレイエンジン2140は、プロセッサ2100の外部にあってよく、リングインターコネクト2102、又は、いくつかの他のインターコネクトバス又はファブリックを介してグラフィックスプロセッサと連結してよい。ディスプレイエンジン2140は、2Dエンジン2141及びディスプレイコントローラ2143を含でよい。ディスプレイエンジン2140は、3Dパイプラインとは独立して動作できる専用ロジックを含んでよい。ディスプレイコントローラ2143は、ディスプレイデバイス(図示されていない)と連結してよく、ラップトップコンピュータにあるようなシステム統合型のディスプレイデバイス、又は、ディスプレイデバイスコネクタを介して取り付けられる外部ディスプレイデバイスであってよい。
【0303】
ジオメトリパイプライン2120及びメディアパイプライン2130は、複数のグラフィックス及びメディアプログラミングインタフェースに基づいて演算を実行するように構成可能されてよく、任意の1つのアプリケーションプログラミングインタフェース(API)に固有のものではない。グラフィックスプロセッサのためのドライバソフトウェアは、特定のグラフィックス又はメディアライブラリに固有であるAPIコールを、グラフィックスプロセッサにより処理されることができるコマンドに変換してよい。オープングラフィックライブラリ(OpenGL)、オープンコンピューティング言語(OpenCL)、及び/又は、Vulkanグラフィック及び計算APIに対し、すべてKhronosグループからサポートが提供されてよい。サポートはまた、マイクロソフト社からのDirect3Dライブラリに対して提供されてよい。これらのライブラリの組み合わせがサポートされてよい。オープンソースのコンピュータビジョンライブラリ(OpenCV)にもサポートが提供されてよい。3Dパイプラインとの互換性を有する将来のAPIはまた、将来のAPIのパイプラインからグラフィックスプロセッサのパイプラインへとマッピングが行われることができる場合にサポートされるだろう。
[グラフィックスパイプラインプログラミング]
【0304】
図22Aは、
図16A、
図17、
図21と共に本明細書で説明される、例えばパイプラインなどのグラフィックス処理パイプラインをプログラミングするために用いられるグラフィックスプロセッサコマンドフォーマット2200を示すブロック図である。
図22Bは、実施形態に係るグラフィックスプロセッサコマンドシーケンス2210を示すブロック図である。
図22Aの実線の枠は、一般にグラフィックスコマンドに含まれるコンポーネントを示す一方、破線は、オプションである、又は、グラフィックスコマンドのサブセットのみに含まれるコンポーネントを含む。
図22Aの例示的なグラフィックスプロセッサコマンドフォーマット2200は、クライアント2202、コマンドオペレーションコード(オペコード)2204及びコマンドに対するデータ2206を識別するデータフィールドを含む。サブオペコード2205及びコマンドサイズ2208もいくつかのコマンドに含まれている。
【0305】
クライアント2202は、コマンドデータを処理するグラフィックスデバイスのクライアントユニットを指定してよい。グラフィックスプロセッサコマンドパーサは、各コマンドのクライアントフィールドを検査して、コマンドのさらなる処理を条件付けてよく、適切なクライアントユニットにコマンドデータをルーティングする。グラフィックスプロセッサクライアントユニットは、メモリインタフェースユニット、レンダユニット、2Dユニット、3Dユニット及びメディアユニットを含んでよい。各クライアントユニットは、コマンドを処理する対応する処理パイプラインを有してよい。クライアントユニットによりコマンドが受信されると、クライアントユニットは、オペコード2204及び、存在する場合、サブオペコード2205を読み出して、実行する演算を判定する。クライアントユニットは、データフィールド2206内の情報を用いてコマンドを実行する。いくつかのコマンドについて、コマンドのサイズを指定するために、明示的なコマンドサイズ2208が予期される。コマンドパーサは、コマンドオペコードに基づいてコマンドの少なくともいくつかのサイズを自動的に判定してよい。コマンドは、複数のダブルワードを介してアラインされてよい。他のコマンドフォーマットを用いることもできる。
【0306】
図22Bのフロー図は、例示的なグラフィックスプロセッサコマンドシーケンス2210を示す。例示的なグラフィックスプロセッサを特徴付けるデータ処理システムのソフトウェア又はファームウェアは、グラフィックス演算のセットを設定、実行及び終了するための図示されたコマンドシーケンスのバージョンを用いてよい。例示の目的のみで、サンプルのコマンドシーケンスが示され、説明されており、これらの特定のコマンド又はこのコマンドシーケンスに限定されるものではない。更に、コマンドは、コマンドシーケンスにおいてコマンドのバッチとして発行されてよく、その結果、グラフィックスプロセッサは、少なくとも部分的に同時にコマンドのシーケンスを処理する。
【0307】
グラフィックスプロセッサコマンドシーケンス2210は、パイプラインフラッシュコマンド2212で開始して、任意のアクティブなグラフィックスパイプラインにパイプラインに対して現在保留中のコマンドを遂行させてよい。オプションで、3Dパイプライン2222及びメディアパイプライン2224は、同時に動作しなくてよい。アクティブなグラフィックスパイプラインに、任意の保留中のコマンドを遂行させるために、パイプラインフラッシュが実行される。パイプラインフラッシュに応答して、グラフィックスプロセッサのコマンドパーサは、アクティブな描画エンジンが保留オペレーションを遂行して関連する読み出しキャッシュが無効になるまで、コマンド処理を一時停止することになる。オプションで、レンダリングキャッシュ内の、「ダーティ(dirty)」とマークされた任意のデータがメモリにフラッシュされることができる。パイプラインフラッシュコマンド2212は、パイプライン同期のために、又は、グラフィックスプロセッサを低電力状態にする前に用いられることができる。
【0308】
コマンドシーケンスが、グラフィックスプロセッサにパイプライン間で明示的に切り替えることを要求するときに、パイプライン選択コマンド2213が用いられてよい。パイプライン選択コマンド2213は、コンテキストが両方のパイプラインにコマンドを発行しない限り、パイプラインコマンドを発行する前に実行コンテキスト内で1度のみ要求され得る。パイプライン選択コマンド2213を介したパイプラインスイッチの直前に、パイプラインフラッシュコマンド2212が要求されてよい。
【0309】
パイプライン制御コマンド2214は、演算のためのグラフィックスパイプラインを構成してよく、3Dパイプライン2222及びメディアパイプライン2224をプログラムするために用いられてよい。パイプライン制御コマンド2214は、アクティブなパイプラインのパイプライン状態を構成してよい。パイプライン制御コマンド2214は、パイプライン同期のために、かつ、コマンドのバッチを処理する前にアクティブなパイプライン内の1つ又は複数のキャッシュメモリからのデータをクリアするために用いられてよい。
【0310】
リターンバッファ状態コマンド2216は、データを書き込むために、それぞれのパイプラインに対してリターンバッファのセットを構成するために用いられてよい。いくつかのパイプライン操作は、動作が処理中に中間データを書き込む1つ又は複数のリターンバッファの割り当て、選択、又は構成を必要とする。グラフィックスプロセッサはまた、出力データを格納し、クロススレッド通信を実行するために1つ又は複数のリターンバッファを用いてよい。リターンバッファ状態2216は、パイプライン操作のセットに用いるために、リターンバッファのサイズ及び数を選択することを含んでよい。
【0311】
コマンドシーケンス内の残りのコマンドは、演算のためにアクティブなパイプラインに基づいて異なる。パイプライン判定2220に基づいて、コマンドシーケンスは、3Dパイプライン状態2230で始まる3Dパイプライン2222、又は、メディアパイプライン状態2240で始まるメディアパイプライン2224に調整される。
【0312】
3Dパイプライン状態2230を構成するコマンドは、頂点バッファ状態、頂点要素状態、一定のカラー状態、デプスバッファ状態、及び、3Dプリミティブコマンドが処理される前に構成されるべき他の状態変数に対する3D状態設定コマンドを含む。これらのコマンドの値は、使用中の特定の3D APIに基づいて少なくとも部分的に判定される。3Dパイプライン状態2230コマンドはまた、これらの要素が用いられていない場合に、一定のパイプライン要素を選択的に無効にする又はバイパスすることができ得る。
【0313】
3Dプリミティブ2232コマンドは、3Dパイプラインにより処理される3Dプリミティブを提示するために用いられてよい。3Dプリミティブ2232コマンドを介してグラフィックスプロセッサに渡されるコマンド及び関連するパラメータは、グラフィックスパイプラインの頂点フェッチ機能に転送される。頂点フェッチ機能は、3Dプリミティブ2232コマンドデータを用いて、頂点データ構造体を生成する。頂点データ構造体は、1つ又は複数のリターンバッファに格納される。3Dプリミティブ2232コマンドは、頂点シェーダを介して3Dプリミティブに対する頂点演算を実行するために用いられてよい。頂点シェーダを処理するために、3Dパイプライン2222は、シェーダ実行スレッドをグラフィックスプロセッサ実行ユニットにディスパッチする。
【0314】
3Dパイプライン2222は、実行2234コマンド又はイベントを介してトリガされてよい。レジスタは、トリガコマンド実行を書き込んでよい。実行は、コマンドシーケンス内の「go」、又は、「kick」コマンドを介してトリガされてよい。コマンド実行は、グラフィックスパイプラインを通じてコマンドシーケンスをフラッシュするパイプライン同期コマンドを用いてトリガされてよい。3Dパイプラインは、3Dプリミティブに対してジオメトリ処理を実行する。演算が完了すると、結果として得られるジオメトリックオブジェクトがラスタライズされ、画素エンジンは結果として得られる画素に色をつける。画素シェーディング及び画素バックエンド演算を制御するために、これらの演算に対して、追加のコマンドが含まれてもよい。
【0315】
グラフィックスプロセッサコマンドシーケンス2210は、メディア演算を実行する場合、メディアパイプライン2224パスに従ってよい。一般に、メディアパイプライン2224に対するプログラミングの特定の使用及び方式は、実行されるメディア及び計算演算に依存する。特定のメディアデコード演算は、メディアデコード中にメディアパイプラインにオフロードされてよい。メディアパイプラインは、バイパスされることもでき、メディアデコードは、1つ又は複数の汎用処理コアにより提供されるリソースを全体的に又は部分的に用いて実行されることができる。メディアパイプラインはまた、汎用グラフィックスプロセッサユニット(GPGPU)演算のための要素を含んでよく、グラフィックスプロセッサは、グラフィックスプリミティブのレンダリングに明示的には関連していない計算シェーダプログラムを用いてSIMDベクトル演算を実行するために用いられる。
【0316】
メディアパイプライン2224は、3Dパイプライン2222と類似の方式で構成されてよい。メディアパイプライン状態2240を構成するコマンドのセットは、メディアオブジェクトコマンド2242の前に、コマンドキューにディスパッチされる、又は、置かれる。メディアパイプライン状態2240に対するコマンドは、メディアオブジェクトをプロセスするために用いられるメディアパイプライン要素を構成するデータを含んでよい。これは、エンコード又はデコードフォーマットなど、メディアパイプライン内のビデオデコード及びビデオエンコードロジックを構成するデータを含む。メディアパイプライン状態2240に対するコマンドはまた、状態設定のバッチを含む「間接」状態要素に対する1つ又は複数のポインタの使用をサポートしてよい。
【0317】
メディアオブジェクトコマンド2242は、メディアパイプラインによる処理のために、メディアオブジェクトにポインタを供給してよい。メディアオブジェクトは、処理されるビデオデータを含むメモリバッファを含む。オプションで、すべてのメディアパイプライン状態は、メディアオブジェクトコマンド2242を発行する前に有効である必要がある。パイプライン状態が構成され、メディアオブジェクトコマンド2242がキューイングされると、メディアパイプライン2224は、実行コマンド2244又同等の実行イベント(例えば、レジスタ書き込み)を介してトリガされる。次に、メディアパイプライン2224からの出力は、3Dパイプライン2222又はメディアパイプライン2224により提供される演算のために後処理されてよい。GPGPU演算は、メディア演算と類似の方式で構成及び実行されてよい。
[グラフィックスソフトウェアアーキテクチャ]
【0318】
図23は、データ処理システム2300の例示的なグラフィックスソフトウェアアーキテクチャを示す。そのようなソフトウェアアーキテクチャは、3Dグラフィックスアプリケーション2310、オペレーティングシステム2320及び少なくとも1つのプロセッサ2330を含んでよい。プロセッサ2330は、グラフィックスプロセッサ2332、及び、1つ又は複数の汎用プロセッサコア2334を含んでよい。プロセッサ2330は、プロセッサ1402、又は、本明細書で説明される任意の他のプロセッサの変形例であってよい。プロセッサ2330は、プロセッサ1402、又は、本明細書で説明される任意他のプロセッサの代わりに用いられてよい。したがって、本明細書で説明されるプロセッサ1402又は任意のその他プロセッサと組み合わせた任意の特徴の開示はまた、そのように限定されるものではないが、グラフィックスプロセッサ2330との対応する組み合わせを開示する。さらに、本明細書における任意の他の図面の要素と同一又は類似の名称を有する
図23の要素は、他の図面にある同一の要素について説明しており、本明細書における他の箇所での説明と同様に、それと同様に動作又は機能でき、同一のコンポーネントを備えることができ、他の要素にリンクされることができるが、そのように限定されることはない。グラフィックスアプリケーション2310及びオペレーティングシステム2320はそれぞれ、データ処理システムのシステムメモリ2350において実行される。
【0319】
3Dグラフィックスアプリケーション2310は、シェーダ命令2312を含む1つ又は複数のシェーダプログラムを含んでよい。シェーダ言語命令は、例えば、Direct3Dの高レベルシェーダ言語(HLSL)及びOpenGLシェーダ言語(GLSL)などの高レベルシェーダ言語におけるものであってよい。アプリケーションはまた、汎用プロセッサコア2334による実行に適した機械言語における実行可能命令2314を含んでよい。アプリケーションは、頂点データにより規定されるグラフィックスオブジェクト2316を含んでもよい。
【0320】
いくつかの実施形態において、オペレーティングシステム2320は、マイクロソフト社のMicrosoft(登録商標)Windows(登録商標)オペレーティングシステム、プロプライエタリUNIX(登録商標)様式のオペレーティングシステム、又は、Linux(登録商標)カーネルの変形例を用いたオープンソースUNIX(登録商標)様式のオペレーティングシステムであってよい。オペレーティングシステム2320は、Direct3D API、OpenGL API又はVulkan APIなどのグラフィックスAPI2322をサポートすることができる。Direct3D APIが用いられる場合、オペレーティングシステム2320は、フロントエンドシェーダコンパイラ2324を用いて、HLSLにおける任意のシェーダ命令2312を低水準シェーダ言語にコンパイルする。コンパイルは、ジャストインタイム(JIT)コンパイルであってよい、又は、アプリケーションは、シェーダプリコンパイルを実行できる。高水準シェーダは、3Dグラフィックスアプリケーション2310のコンパイル中に、低水準シェーダにコンパイルされてよい。シェーダ命令2312は、Vulkan APIにより用いられるスタンダードポータブルインターメディエイトレプリゼンテーション(SPIR)のバージョン等の中間形態で提供されてよい。
【0321】
ユーザモードグラフィックスドライバ2326は、シェーダ命令2312をハードウェア固有の表現に変換するバックエンドシェーダコンパイラ2327を含んでよい。OpenGL APIが用いられる場合、GLSL高水準言語におけるシェーダ命令2312は、コンパイルのためにユーザモードグラフィックスドライバ2326に渡される。ユーザモードグラフィックスドライバ2326は、オペレーティングシステムカーネルモード機能2328を用いて、カーネルモードグラフィックススドライバ2329と通信してよい。カーネルモードグラフィックススドライバ2329は、グラフィックスプロセッサ2332と通信して、コマンド及び命令をディスパッチしてよい。
[IPコアの実装]
【0322】
1つ又は複数の態様は、プロセッサなどの集積回路内のロジックを表す及び/又は規定する機械可読媒体に格納される代表的なコードにより実装されてよい。例えば、機械可読媒体は、プロセッサ内の様々なロジックを表す命令を含んでよい。機械により読み出される場合、命令は、機械に、本明細書で説明される技術を実行するロジックを作らせてよい。「IPコア」として知られるそのような表現は、集積回路の構造を記述するハードウェアモデルとして、有形の機械可読媒体に格納され得る、集積回路用ロジックの再利用可能なユニットである。ハードウェアモデルは、集積回路を製造する製造機械にハードウェアモデルをロードする様々な顧客又は製造施設に供給されてよい。集積回路は、本明細書において説明される実施形態のうちのいずれかと関連して説明される演算を回路が実行するように製造されてよい。
【0323】
図24Aは、実施形態に係る演算を実行する集積回路を製造するために用いられ得るIPコア開発システム2400を示すブロック図である。IPコア開発システム2400は、より大きな設計へと組み込まれ得るモジュール式の再利用可能な設計を生成するために用いられてよい、又は、集積回路(例えば、SoC集積回路)全体を構築するために用いられてよい。設計施設2430は、高水準プログラミング言語(例えば、C/C++)でIPコア設計のソフトウェアシミュレーション2410を生成できる。ソフトウェアシミュレーション2410は、シミュレーションモデル2412を用いてIPコアの挙動を設計、テスト及び確認するために用いられることができる。シミュレーションモデル2412は、機能、挙動及び/又はタイミングシミュレーションを含んでよい。次に、レジスタ転送レベル(RTL)設計2415が作成されることができる、又は、シミュレーションモデル2412から合成されることができる。RTL設計2415は、ハードウェアレジスタ間のデジタル信号のフローをモデル化する集積回路の挙動を抽出し、モデル化されたデジタル信号を用いて実行される関連するロジックを含む。RTL設計2415に加えて、ロジックレベル又はトランジスタレベルでの低水準設計が生成、設計又は合成されてもよい。したがって、初期設計及びシミュレーションの特定の詳細が変わり得る。
【0324】
RTL設計2415又はこれと同等のものは、ハードウェアモデル2420へと設計施設によりさらに合成されてよく、ハードウェアモデル2420は、ハードウェア記述言語(HDL)、又は、物理的な設計データのいくつか他の表現であってよい。HDLはさらに、IPコア設計を確認するために、シミュレーションされてもテストされてもよい。IPコア設計は、サードパーティの製造施設2465へ配送するために、不揮発性メモリ2440(例えば、ハードディスク、フラッシュメモリ又は任意の不揮発性記憶媒体)を用いて格納されることができる。あるいは、IPコア設計は、有線接続2450又は無線接続2460を通じて、(例えば、インターネットを介して)伝送されてよい。次に、製造施設2465は、IPコア設計に少なくとも部分的に基づいている集積回路を製造してよい。製造される集積回路は、本明細書で説明される少なくとも1つの実施形態に従って演算を実行するように構成されることができる。
【0325】
図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の表面に連結されてよい。
【0326】
ロジック2472、2474のユニットは、ロジック2472、2474間で電気信号をルーティングするように構成されるブリッジ2482と電気的に連結されてよい。ブリッジ2482は、電気信号のための経路を提供する高密度なインターコネクト構造であってよい。ブリッジ2482は、ガラス又は好適な半導体材料で構成されるブリッジ基板を含んでよい。電気ルーティング機能は、ロジック2472、2474間にチップ間接続を提供するブリッジ基板上に形成されることができる。
【0327】
ロジック2472、2474及びブリッジ2482の2つのユニットが図示されているが、本明細書で説明される実施形態は、1つ又は複数のダイ上により多い又はより少ない論理ユニットを含んでよい。ロジックが単一のダイ上に含まれる場合、ブリッジ2482が除外されてもよいので、1つ又は複数のダイは、ゼロ又はより多くのブリッジにより接続されてよい。あるいは、複数のダイ又はロジックのユニットは、1つ又は複数のブリッジにより接続されることができる。さらに、複数の論理ユニット、ダイ及びブリッジは、3次元構成を含む他の可能な構成と一緒に接続されることができる。
【0328】
図24Cは、基板2480(例えば、ベースダイ)に接続されるハードウェアロジックチップレットの複数のユニットを含むパッケージアセンブリ2490を示す。本明細書で説明されるように、グラフィックス処理ユニット、並列プロセッサ、及び/又は、計算アクセラレータは、別個に製造される多様なシリコンチップレットから構成され得る。このコンテキストにおいて、チップレットは、より大きなパッケージへと他のチップレットと共に組み立てられることができるロジックの別個のユニットを含む少なくとも部分的にパッケージ化された集積回路である。異なるIPコアロジックを有するチップレットの多様なセットが単一のデバイスに組み立てられることができる。さらに、チップレットは、アクティブインタポーザ技術を用いてベースダイ又はベースチップレットに統合されることができる。本明細書で説明される概念は、GPU内で、異なる形式のIP間のインターコネクト及び通信を可能にする。IPコアは、異なるプロセス技術を用いて製造され、製造時に構成されることができ、複数のIPを、特にいくつかの種類のIPを有する大きなSoCに同一の製造プロセスで集中させることによる複雑性が回避される。複数のプロセス技術の使用を可能にすることで、市場投入までの時間が改善され、複数の製品SKUを形成するのに費用対効果の高いやり方が提供される。さらに、IPが分かれている方が、独立してパワーゲーティングするのに適しており、所与のワークロードに使用されていないコンポーネントが電源をオフにされて、全体の電力消費を低減することができる。
【0329】
ハードウェアロジックチップレットは、専用ハードウェアロジックチップレット2472、ロジック又はI/Oチップレット2474、及び/又は、メモリチップレット2475を含むことができる。ハードウェアロジックチップレット2472と、ロジック又はI/Oチップレット2474とは、構成可能なロジック又は固定機能論理ハードウェアにおいて少なくとも部分的に実装されてよく、本明細書で説明されるプロセッサコア、グラフィックスプロセッサ、並列プロセッサ又は他のアクセラレータデバイスのいずれかの1つ又は複数の部分を含むことができる。メモリチップレット2475は、DRAM(例えば、GDDR、HBM)メモリ、又は、キャッシュ(SRAM)メモリとすることができる。
【0330】
各チップレットは、別個の半導体ダイとして製造され、インターコネクト構造2473を介して基板2480と連結されることができる。インターコネクト構造2473は、基板2480内の様々なチップレットとロジックとの間で電気信号をルーティングするように構成されてよい。インターコネクト構造2473は、限定されるものではないが、バンプ又はピラーなどのインターコネクトを含むことができる。いくつかの実施形態において、インターコネクト構造2473は、例えば、ロジック、I/O及びメモリチップレットの演算と関連付けられる入力/出力(I/O)信号、及び/又は、電力又は接地信号などの電気信号をルーティングするように構成されてよい。
【0331】
基板2480は、エポキシベースの積層基板であってよいが、しかしながら、基板2480は、それに限定されるものではなく、他の適切なタイプの基板を含んでもよい。パッケージアセンブリ2490は、パッケージインターコネクト2483を介して他の電気デバイスに接続されることができる。パッケージインターコネクト2483は、マザーボード、他のチップセット又はマルチチップモジュールなどの他の電気デバイスに電気信号をルーティングすべく、基板2480の表面に連結されてよい。
【0332】
ロジック又はI/Oチップレット2474と、メモリチップレット2475とは、ロジック又はI/Oチップレット2474と、メモリチップレット2475との間で電気信号をルーティングするように構成されるブリッジ2487を介して電気的に連結されてよい。ブリッジ2487は、電気信号のための経路を提供する高密度なインターコネクト構造であってよい。ブリッジ2487は、ガラス又は好適な半導体材料で構成されるブリッジ基板を含んでよい。電気ルーティング機能は、ロジック又はI/Oチップレット2474と、メモリチップレット2475との間のチップ間接続を提供すべく、ブリッジ基板上に形成されることができる。ブリッジ2487は、シリコンブリッジ又はインターコネクトブリッジと称されてもよい。例えば、ブリッジ2487は、埋め込み型マルチダイインターコネクトブリッジ(EMIB)である。あるいは、ブリッジ2487は、単に、あるチップレットから別のチップレットへの直接接続であってよい。
【0333】
基板2480は、I/O2491、キャッシュメモリ2492及び他のハードウェアロジック2493のためのハードウェアコンポーネントを含むことができる。ファブリック2485は、基板2480内の様々なロジックチップレットと、ロジック2491、2493との間の通信を可能すべく、基板2480に埋め込まれることができる。オプションで、I/O2491、ファブリック2485、キャッシュ、ブリッジ及び他のハードウェアロジック2493は、基板2480の上に重なるベースダイに統合されることができる。
【0334】
さらに、パッケージアセンブリ2490は、ファブリック2485又は1つ又は複数のブリッジ2487によりインターコネクトされる少数又は多数のコンポーネント及びチップレットを含むこともできる。パッケージアセンブリ2490内のチップレットは、3D又は2.5D構成で配置されてよい。一般に、ブリッジ構造2487は、例えば、ロジック又はI/Oチップレットと、メモリチップレットとの間のポイントツーポイントインターコネクトを促進するために用いられてよい。ファブリック2485は、様々なロジック及び/又はI/Oチップレット(例えば、チップレット2472、2474、2491、2493)を他のロジック及び/又はI/Oチップレットとインターコネクトするために用いられることができる。基板内のキャッシュメモリ2492は、パッケージアセンブリ2490のためのグローバルキャッシュとして、分散型のグローバルキャッシュの一部として、又は、ファブリック2485用の専用キャッシュとしての機能を果たすことができる。
【0335】
図24Dは、実施形態に係る交換可能なチップレット2495を含むパッケージアセンブリ2494を示す。交換可能なチップレット2495は、1つ又は複数のベースチップレット2496、2498上の標準化されたスロットに組み立てられることができる。ベースチップレット2496、2498は、本明細書で説明される他のブリッジインターコネクトに類似し得るブリッジインターコネクト2497を介して連結されることができ、例えば、EMIBであってよい。メモリチップレットはまた、ブリッジインターコネクトを介してロジック又はI/Oチップレットに接続されることができる。I/O及びロジックチップレットは、インターコネクトファブリックを介して通信できる。ベースチップレットはそれぞれ、ロジック若しくはI/O、又は、メモリ/キャッシュのうちの1つに対して、標準化されたフォーマットの1つ又は複数のスロットをサポートできる。
【0336】
SRAM及び電力供給回路は、ベースチップレット2496、2498の1つ又は複数の内部に製造されてよく、ベースチップレットの最上部に積層される交換可能なチップレット2495とは異なるプロセス技術を用いて製造されることができる。例えば、ベースチップレット2496、2498は、大規模なプロセス技術を用いて製造されることができる一方、交換可能なチップレットは、小規模なプロセス技術を用いて製造されることができる。交換可能なチップレット2495の1つ又は複数は、メモリ(例えば、DRAM)チップレットであってよい。パッケージアセンブリ2494を用いる製品を対象とした電力及び/又は性能に基づいて、異なるメモリ密度が、パッケージアセンブリ2494に対して選択されるができる。さらに、製品を対象とした電力及び/又は性能に基づいて、異なる数のタイプの機能ユニットを有するロジックチップレットが組み立て時に選択されることができる。さらに、異なるタイプのIPロジックコアを含むチップレットは、交換可能なチップレットスロットに挿入されることができ、異なる技術IPブロックを混合及び調和できるハイブリッドプロセッサ設計を可能にする。
[例示的なシステムオンチップ集積回路]
【0337】
図25~
図26Bは、1つ又は複数のIPコアを用いて製造され得る例示的な集積回路及び関連するグラフィックスプロセッサを示す。図示されているものに加えて、追加のグラフィックスプロセッサ/コア、周辺機器インタフェースコントローラ、又は、汎用プロセッサコアを含む他のロジック及び回路が含まれてよい。本明細書における任意の他の図面の要素と同一又は類似の名称を有する
図25~
図26Bの要素は、他の図面にある同一の要素について説明しており、本明細書における他の箇所での説明と同様に、それと同様に動作又は機能でき、同一のコンポーネントを備えることができ、他の要素にリンクされることができるが、そのように限定されることはない。
【0338】
図25は、1つ又は複数のIPコアを用いて製造され得る例示的なシステムオンチップ集積回路2500を示すブロック図である。例示的な集積回路2500は、1つ又は複数のアプリケーションプロセッサ2505(例えば、CPU)、グラフィックスプロセッサ1408、1508、2510の変形例、又は、本明細書で説明される任意のグラフィックスプロセッサであってよく、かつ、説明される任意のグラフィックスプロセッサの代わりに用いられてよい少なくとも1つのグラフィックスプロセッサ2510を含む。したがって、ここでは、グラフィックスプロセッサと組み合わせた任意の特徴の開示はまた、そのように限定されるものではないが、グラフィックスプロセッサ2510との対応する組み合わせを開示する。集積回路2500は、画像プロセッサ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をさらに含む。
【0339】
図26A~
図26Bは、本明細書で説明される実施形態に係るSoC内での使用のための例示的なグラフィックスプロセッサを示すブロック図である。グラフィックスプロセッサは、グラフィックスプロセッサ1408、1508、2510の変形例、又は、本明細書で説明される任意の他のグラフィックスプロセッサであってよい。グラフィックスプロセッサは、グラフィックスプロセッサ1408、1508、2510、又は、本明細書で説明されるグラフィックスプロセッサのうちの任意の他のものの代わりに用いられてよい。したがって、本明細書で説明されるグラフィックスプロセッサ1408、1508、2510又は任意の他のグラフィックスプロセッサと組み合わせた任意の特徴の開示はまた、そのように限定されるものではないが、
図26A~
図26Bのグラフィックスプロセッサとの対応する組み合わせを開示する。
図26Aは、実施形態に係る1つ又は複数のIPコアを用いて製造され得るチップ集積回路上のシステムの例示的なグラフィックスプロセッサ2610を示す。
図26Bは、実施形態に係る1つ又は複数のIPコアを用いて製造され得るチップ集積回路上のシステムの追加の例示的なグラフィックスプロセッサ2640を示す。
図26Aのグラフィックスプロセッサ2610は、低電力グラフィックスプロセッサコアの例である。
図26Bのグラフィックスプロセッサ2640は、より高性能なグラフィックスプロセッサコアの例である。例えば、グラフィックスプロセッサ2610、2640のそれぞれは、この段落の初めで言及したように、
図25のグラフィックスプロセッサ2510の変形例とすることができる。
【0340】
図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で提供されるようなフラグメントシェーダプログラムを実行すべく最適化されてよく、Direct3D APIで提供されるような画素シェーダプログラムと類似する演算を実行するために用いられてよい。
【0341】
グラフィックスプロセッサ2610は、1つ又は複数のメモリ管理ユニット(MMU)2620A~2620B、キャッシュ2625A~2625B、及び、回路インターコネクト2630A~2630Bをさらに含む。1つ又は複数のMMU2620A~2620Bは、グラフィックスプロセッサ2610に対して、頂点プロセッサ2605及び/又はフラグメントプロセッサ2615A-2615Nに対するものを含む、仮想-物理アドレスマッピングを提供し、1つ又は複数のキャッシュ2625A-2625Bに格納される頂点又は画像/テクスチャデータに加えて、メモリに格納される頂点又は画像/テクスチャデータを参照してよい。1つ又は複数のMMU2620A~2620Bは、
図25の1つ又は複数のアプリケーションプロセッサ2505、画像プロセッサ2515、及び/又は、ビデオプロセッサ2520と関連付けられる1つ又は複数のMMUを含むシステム内の他のMMUと同期してよく、その結果、各プロセッサ2505-2520は、共有又は統合された仮想メモリシステムに加わることができる。グラフィックスプロセッサ2610のコンポーネントは、本明細書で説明される他のグラフィックスプロセッサのコンポーネントと対応してよい。1つ又は複数のMMU2620A~2620Bは、
図2CのMMU245と対応してよい。頂点プロセッサ2605及びフラグメントプロセッサ2615A-2615Nは、グラフィックスマルチプロセッサ234と対応してよい。1つ又は複数の回路インターコネクト2630A~2630Bは、実施形態に係るSOCの内部バスを介するか、又は、直接接続を介するかのいずれかで、グラフィックスプロセッサ2610が、SOC内の他のIPコアとインタフェース接続することを可能にする。1つ又は複数の回路インターコネクト2630A~2630Bは、
図2Cのデータクロスバー240と対応してよい。グラフィックスプロセッサ2610と、本明細書で説明される様々なグラフィックスプロセッサアーキテクチャとの類似のコンポーネント間に、さらなる対応関係が見出され得る。
【0342】
図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は、コア間タスクマネージャ2645を含み、タイルベースのレンダリングのためにタイル化演算をアクセラレートすべく、1つ又は複数のシェーダコア2655A-2655N及びタイル化ユニット2658に実行スレッドをディスパッチするスレッドディスパッチャとしての機能を果たし、タイルベースのレンダリングでは、例えば、シーン内の局所的な空間コヒーレンスを十分に引き出すべく、又は、内部キャッシュの使用を最適化すべく、シーンに対するレンダリング演算が画像空間内で細分化されている。シェーダコア2655A~2655Nは、例えば、
図2Dのグラフィックスマルチプロセッサ234、又は、
図3A及び
図3Bのグラフィックスマルチプロセッサ325、350のそれぞれ、又は、
図3Cのマルチコアグループ365Aと対応してよい。
[分散型キャッシュモデル、ソフトウェア制御]
【0343】
いくつかの例において、分散型キャッシュモデルは、マルチダイアーキテクチャにおけるベースダイに付け加えられ得るキャッシュチップレットを用いるグラフィックスアーキテクチャにおいて実装されてよい。
図27を参照すると、いくつかの例において、グラフィックス処理システムは、ベースダイ2710と、1つ又は複数のチップレット2720A、2720B、2720Cとを備えてよく、ここでは参照符号2720により総称され得る。
図27に示される例では、チップレット2720の1つ又は複数は、L3キャッシュを実装するキャッシュチップレット2720Cであってよい。チップレットの機能がベースダイ2710の処理能力に必要とされていない場合、チップレット2720の1つ又は複数は、ヒューズオフ(fused off)されてよい。別の例では、チップレットは、ベースダイとは異なるプロセスジオメトリで製造されてよい、及び/又は、SRAMとは異なるストレージエレメント、例えば、DRAM、ReRAM、3Dクロスポイント、FeRAMなどを含んでよい。
【0344】
図28を参照すると、いくつかの例において、ベースダイ2710は、ベースダイ2710上でのキャッシュのためのキャッシュ演算を管理し、チップレットインタフェース2830を介して1つ又は複数のキャッシュチップレット2720を管理するキャッシュ制御ロジック2810を備えてよい。いくつかの例では、キャッシュチップレット2720に対するキャッシュ管理スキーム(つまり、キャッシュタグ2820、状態プロトコルなど)は、ベースダイ2710上でのキャッシュのためのキャッシュ管理スキームと同一であり、そのため、1つ又は複数のキャッシュチップレット2720をベースダイ2710上に連結することにより、キャッシュメモリをベースダイ2710に追加できる。
【0345】
キャッシュ制御ロジック2810はベースダイ2710に存在するので、キャッシュチップレット2720に対するキャッシュデータパイプラインは、チップレット2720のデータポートへのダイレクトアクセスを有していない。さらに、いくつかの例では、チップレットインタフェース2830は、非同期式のインタフェースであってよく、そのため、キャッシュチップレット2720に対する読み出し操作からのデータのリターンが予測可能ではない。これは、クレジットベースのメカニズムを用いること、及び、先入れ先出し(FIFO)ストレージを用いて、コマンド及びデータリターンを蓄積することにより管理されてよい。
【0346】
いくつかの例では、データパイプライン操作は、2段階操作に分けられてよい。第1段階では、キャッシュアクセス(つまり、読み出し/書き込み)操作がチップレットインタフェースに送られる。TAGブロック2820からのヒット及びフィルは、インオーダFIFOキュー2822に入り、コマンドがスケジューリングされる。いくつかの例では、あらゆるオーバフローを回避すべく、データバッファ(つまり、トランスポート層のデータリターンインタフェース)において、クレジットチェックが実施されてよい。アトミック操作を促進すべく、CMDデータ(すなわち、タイプRdinv、Atomics、Directデータリターン)、読み出し/書き込みデータ、及び、SRCデータに対してストレージが提供されてよい。いくつかの例では、コリジョンを避けるべく、パイプライン操作の同一のステージからフィルがアライン及び発行されてよい。
【0347】
いくつかの例では、電力及び不必要なデータストレージを節約するために、コマンドデータに対して、及び、読み出し/書き込みデータに対して、別個のインタフェースが提供されてよい。読み出し操作のたびに、コマンドインタフェースだけが更新され、データアレイに向けて送信される必要がある。書き込み操作のたびに、コマンドインタフェース及びデータインタフェースの両方が更新される必要がある。インタフェースが非同期式なので、いくつかの例では、トランスポートリンク層は、いかなるコマンドも順番に進み、書き込みコマンドに対するデータのみを送信することを保証する。クロッキングドメインをクロッシングした後に、書き込みコマンドが利用可能な場合にのみ、ストレージからデータを読み出すことができる。
【0348】
第2段階では、アトミック操作は、古いデスティネーションと、メモリに格納されているSRCデータとを要求する。複雑性を減らし、両方のバンクに対して同一の設計を行うべく、第1段階の読み出しパイプライン操作から、古いデスティネーションのデータがメモリからSRCデータと共にインオーダデータリターン構造へと受信され、別個のFIFOで格納される。すべてのデータがパイプラインに転送される状態になると、アトミック操作は、次に、インオーダパイプラインからスケジューリングされる。アトミック操作の完了後に、新たなアトミックデータがメモリに書き込まれる。
[アトミックALUを用いて、IMDBクエリ評価をアクセラレートする]
【0349】
いくつかの例において、シェーダコア及びアトミック算術論理ユニット(ALU)は、インメモリデータベース(IMDB)クエリ評価をアクセラレートするために用いられてよい。
図29は、実施形態に係る、インメモリデータベース(IMDB)クエリをアクセラレートするためにアトミックALUが実装される処理環境の模式図である。
図29を参照すると、いくつかの例では、処理環境は、算術論理ユニット(ALU)2920に通信可能に連結されるメモリサイドキャッシュ2915に通信可能に連結されるシェーダコア2910を有する。いくつかの例では、シェーダコア2910は、シェーダコア2655A-2655Nを参照して上述したように実装されてよい。キャッシュ2915はまた、高帯域幅メモリ2925に通信可能に連結されてよい。いくつかの例において、メモリサイドキャッシュ2915の少なくとも一部は、インメモリデータベースのすべて又は一部を有してよい。
【0350】
インメモリデータベースは、偶数バイト長に対応していないビット長に圧縮されたデータを有してよい。
図30を参照すると、工程3010において、シェーダコア2910は、その圧縮されたビット長から、次の自然ビットサイズ、つまり、次の偶数バイト長サイズに対応するビットサイズに対応するビット長へと、インメモリデータベース内のデータを解凍するために用いられてよい。例えば、5ビットフィールドに合致するように圧縮されたデータ要素は、8ビットフィールドへと解凍されてよく、13ビットフィールドに合致するように圧縮されたデータ要素は、16ビットフィールドへと解凍されてよく、17ビットフィールドに合致するように圧縮されたデータ要素は、32ビットフィールドへと解凍されてよい、などである。
【0351】
工程3015において、ALU2920によりベクトル比較が実行される。例えば、ALU2915は、工程3010において生成された解凍済みの値を、データベースのクエリにおいて提供される1つ又は複数の目標値と比較して、1つ又は複数のデータベースエントリを抽出してよい。工程3020において、工程3015において実行された比較の結果がビットベクトルとして書き込まれる。
[L3キャッシュアウェアカーネルディスパッチ(1A-15)(PROV1-4 JWC)]
【0352】
いくつかの例では、カーネルは、クロスカーネルワークグループ依存性を最適化する又は少なくとも改善するように設計される方式での実行のためにディスパッチされてよい。
図31A~
図31Bは、L3キャッシュアウェアディスパッチを実施するように適合される処理環境の概略ブロック図であり、
図32は、実施形態に係るキャッシュL3キャッシュアウェアカーネルディスパッチを実施する方法における工程を示すフローチャートである。
図31Aを参照すると、いくつかの例では、第1のカーネル(K1)3100は、256個のワークグループ(つまり、WG0 3112、WG1 3114、・・・WG255 3116)を有してよく、第2のカーネル(K2)も、256個のワークグループ(つまり、WG0 3122、WG1 3124・・・WG255 3126)を有してよい。
図31Aに示されるように、第2のカーネル(K2)3120における対応するワークグループを開始し得る前に、第1のカーネル(K1)3110におけるワークグループの1つ又は複数を完了させる必要があり得るので、ワークグループ間の従属関係が遅延の原因となり得る。
【0353】
図31B及び
図32を参照すると、いくつかの例において、これは、ハードウェアスコアカードを用いて従属関係を追跡することにより対処され得る。
図32に示されるように、工程3210では、L3キャッシュにおけるカーネルに合致させるべく、小さいバッチが用いられてよい。次のカーネルをプリフェッチ(工程3215)するために、短いカーネルが用いられてよい。工程3220において、クロス-カーネルワークグループ従属関係にあり得る部分的なフィルが実施されてよく、そのため、現在のカーネルがフィルされるまで、次のカーネルを開始できない。アトミック操作を用いることにより、これをソフトウェアでエミュレートすることができる。
【0354】
本明細書で開示される技術の例示的な例が以下に提供される。本技術の実施形態は、以下で説明される任意の1つ又は複数の例及び例の任意の組み合わせを含んでよい。
【0355】
例1は、装置を含み、装置は、キャッシュメモリと、高帯域幅メモリと、キャッシュメモリに通信可能に連結されるシェーダコアであって、キャッシュメモリ内のインメモリデータベースから抽出され、かつ、第1のビット長を有する第1のデータ要素を解凍して、第1のビット長より大きい第2のビット長を有する第2のデータ要素を生成する処理要素を有するシェーダコアと、当該データ要素を、インメモリデータベースのクエリにおいて提供される目標値とを比較する算術論理ユニット(ALU)とを備える。
【0356】
例2は、例1の主題を含み、シェーダコアは、第1のデータ要素を、ビット未満のビット長から8ビットのビット長へと解凍する。
【0357】
例3は、例1~例2のいずれかの主題を含み、シェーダコアは、第1のデータ要素を、9ビットと15ビットとの間のビット長から16ビットのビット長へと解凍する。
【0358】
例4は、例1~例3のいずれかの主題を含み、シェーダコアは、第1のデータ要素を、17ビットと31ビットとの間のビット長から32ビットのビット長へと解凍する。
【0359】
例5は、例1~例4のいずれかの主題を含み、シェーダコアは、第1のデータ要素を、33ビットと63ビットとの間のビット長から64ビットのビット長へと解凍する。
【0360】
例6は、例1~例5のいずれかの主題を含み、算術論理ユニット(ALU)は、第2のビット長でベクトル比較演算を実行する。
【0361】
例7は、例1~例6のいずれかの主題を含み、算術論理ユニット(ALU)は、ベクトル比較演算の結果をビットベクトルとして書き込む。
【0362】
例8は、方法を含み、方法は、キャッシュメモリに通信可能に連結されるシェーダコアの処理要素において、キャッシュメモリ内のインメモリデータベースから抽出され、かつ、第1のビット長を有する第1のデータ要素を解凍して、第1のビット長より大きい第2のビット長を有する第2のデータ要素生成する段階と、インメモリデータベースのクエリで提供される目標値と比較するために、第2のデータ要素を算術論理ユニット(ALU)に転送する段階とを備える。
【0363】
例9は、例8の主題を含み、シェーダコアは、第1のデータ要素を、ビット未満のビット長から8ビットのビット長へと解凍する。
【0364】
例10は、例8~例9のいずれかの主題を含み、シェーダコアは、第1のデータ要素を、9ビットと15ビットとの間のビット長から16ビットのビット長へと解凍する。
【0365】
例11は、例8~例10のいずれかの主題を含み、シェーダコアは、第1のデータ要素を、17ビットと31ビットとの間のビット長から32ビットのビット長へと解凍する。
【0366】
例12は、例8~例11のいずれかの主題を含み、シェーダコアは、第1のデータ要素を、33ビットと63ビットとの間のビット長から64ビットのビット長へと解凍する。
【0367】
例13は、例8~例12のいずれかの主題を含み、算術論理ユニット(ALU)は、第2のビット長でベクトル比較演算を実行する。
【0368】
例14は、例8~例13のいずれかの主題を含み、算術論理ユニット(ALU)は、ベクトル比較演算の結果をビットベクトルとして書き込む。
【0369】
例15は、非一時的なコンピュータ可読媒体を含み、非一時的なコンピュータ可読媒体は、少なくとも1つのプロセッサ上で実行される場合、キャッシュメモリに通信可能に連結されるシェーダコアの処理要素において、キャッシュメモリ内のインメモリデータベースから抽出され、かつ、第1のビット長を有する第1のデータ要素を解凍して、第1のビット長より大きい第2のビット長を有する第2のデータ要素を生成し、インメモリデータベースのクエリで提供される目標値と比較するために、第2のデータ要素を算術論理ユニット(ALU)に転送する、1つ又は複数の工程を実行するように少なくとも1つのプロセッサを構成する1つ又は複数の命令を備える。
【0370】
例16は、例15の主題を含み、シェーダコアは、第1のデータ要素を、ビット未満のビット長から8ビットのビット長へと解凍する。
【0371】
例17は、例15~例16のいずれかの主題を含み、シェーダコアは、第1のデータ要素を、9ビットと15ビットとの間のビット長から16ビットのビット長へと解凍する。
【0372】
例18は、例15~例17のいずれかの主題を含み、シェーダコアは、第1のデータ要素を、17ビットと31ビットとの間のビット長から32ビットのビット長へと解凍する。
【0373】
例19は、例15~例18のいずれかの主題を含み、シェーダコアは、第1のデータ要素を、33ビットと63ビットとの間のビット長から64ビットのビット長へと解凍する。
【0374】
例20は、例15~例19のいずれかの主題を含み、算術論理ユニット(ALU)は、第2のビット長でベクトル比較演算を実行する。
【0375】
例21は、例15~例20のいずれかの主題を含み、算術論理ユニット(ALU)は、ベクトル比較演算の結果をビットベクトルとして書き込む。
【0376】
上記の詳細な説明は、発明を実施するための形態の一部を形成する添付の図面への言及を含む。図面は、例示の目的で、実施され得る特定の実施形態を示す。これらの実施形態はまた、本明細書において「例」と称される。示される又は説明されるものに加えて、そのような例は要素を含んでよい。しかしながら、示される又は説明される要素を含む例も検討される。更に、示される又は説明されるこれらの要素(又は、これらの1つ又は複数の態様)の任意の組み合わせ又は置換、具体例(その1つ又は複数の態様)に関する、又は、本明細書で示される又は説明される他の例(又は、その1つ又は複数の態様)のいずれかを用いる例も検討される。
【0377】
本明細書において参照される複数の出版物、複数の特許、及び複数の特許文献は、参照により個別に組み込まれるかのように、それらの全体においてここで参照により組み込まれる。本明細書と参照により組み込まれるこれらの文献との間に一貫性がない使用がある場合、組み込まれる参照における使用は、本明細書のものへの補足であり、矛盾する不一致については、本明細書における使用が支配する。
【0378】
この文書において、用語「a」又は「an」は、1つ又は1つよりも多くを含むように、特許文献で一般にあるように用いられ、「少なくとも1つ」又は「1つ又は複数」の任意の他のインスタンス又は使用とは独立している。さらに、「セット」は、1つ又は複数の要素を含む。この文書において、用語「又は」は、別段の指示がない限り、「A又はB」が「Aであるが、Bではない」、「Bであるが、Aではない」及び「A及びB」を含むように、非排他的なorを指すために用いられる。添付の特許請求の範囲において、用語「含む(including)」及び「in which」は、それぞれの用語「備える(comprising)」及び「wherein」のプレーンイングリッシュに相当するものとして用いられる。また、以下の特許請求の範囲では、用語「含む(including)」及び「備える(comprising)」は、変更可能であり、すなわち、要素を含むシステム、デバイス、物品又はプロセスは、請求項内のそのような用語の後に列挙されているものに加えて、依然としてその請求項の範囲内に含まれるものとみなされる。さらに、以下の特許請求の範囲では、用語「第1」、「第2」、「第3」などは、単にラベルとして用いられているだけであり、それらのオブジェクトの番号の順序を示唆することを目的としたものではない。
【0379】
本明細書において「ロジック命令」と称される用語は、1つ又は複数の論理演算を実行するために、1つ又は複数の機械により理解され得る表現に関するものである。例えば、ロジック命令は、1つ又は複数のデータオブジェクトに対して1つ又は複数の演算を実行するためのプロセッサコンパイラにより解釈可能な命令を含んでよい。しかしながら、これは、機械可読命令の単なる一例であり、例は、この点に限定されるものではない。
【0380】
本明細書で「コンピュータ可読媒体」と称される用語は、1つ又は複数の機械により感知可能な表現を維持することができる媒体に関するものである。例えば、コンピュータ可読媒体は、コンピュータ可読命令又はデータを格納するための1つ又は複数のストレージデバイスを備えてよい。そのようなストレージデバイスは、例えば、光学、磁気又は半導体記憶媒体などの記憶媒体を備えてよい。しかしながら、これは、コンピュータ可読媒体の単なる一例に過ぎず、例はこの点に限定されるものではない。
【0381】
本明細書において「ロジック」と称される用語は、1つ又は複数の論理演算を実行するための構造に関するものである。例えば、ロジックは、1つ又は複数の入力信号に基づいて、1つ又は複数の出力信号を提供する回路を備えてよい。そのような回路は、デジタル入力を受信し、デジタル出力を提供する有限状態機械、又は、1つ又は複数のアナログ入力信号に応答して、1つ又は複数のアナログ出力信号を提供する回路を備えてよい。そのような回路は、特定用途向け集積回路(ASIC)又はフィールドプログラマブルゲートアレイ(FPGA)において提供されてよい。また、ロジックは、機械可読命令を実行する処理回路と組み合わせてメモリに格納される当該機械可読命令を含んでよい。しかしながら、これらは、ロジックを提供し得る単なる構造の例に過ぎず、例はこの点に限定されるものではない。
【0382】
本明細書で説明される方法のいくつかは、コンピュータ可読媒体上のロジック命令として具現化されてよい。プロセッサ上で実行される場合、ロジック命令は、プロセッサに、説明される方法を実施する専用の機械としてプログラミングさせられる。プロセッサは、本明細書で説明される方法を実行するようにロジック命令により構成される場合、説明される方法を実行するための構造を構成する。あるいは、本明細書で説明される方法は、例えば、フィールドプログラマブルゲートアレイ(FPGA)上、特定用途向け集積回路(ASIC)上などのロジックに縮小されてよい。
【0383】
説明及び請求項では、用語「連結され」及び「接続されるがそれらの派生語と共に用いられてよい。具体例において、「接続され」は、2つ又はそれより多くの要素が互いに直接物理的に又は電気的に接触した状態にあることを示すために用いられてよい。「連結され」は、2つ又はそれより多くの要素が直接物理的に又は電気的に接触した状態にあることを意味してよい。しかしながら、「連結され」は、2つ又はそれより多くの要素が互いに直接接触した状態ではないかもしれないが、それでもやはり、依然として互いに協働又は相互作用し得ることも意味し得る。
【0384】
明細書における「一例」又は「いくつかの例」への言及は、例に関連して説明される特定の特徴、構造又は特性が、実装として少なくとも含まれることを意味する。本明細書の様々な場所において、「一例において」という表現の出現は、同一の例をすべて参照してもよいし、しなくてもよい。
【0385】
上記の説明は、例示を目的としたものであり、限定ではない。例えば、上述した例(又は、それらの1つ又は複数の態様)は、他のものと組み合わせて用いられてよい。他の実施形態は、例えば、上記の説明を検討する際に当業者により用いられてよい。要約書は、読み手が技術的な開示の本質をすぐに確認するのを可能にする。要約書は、請求項の範囲又は意味を解釈又は限定するためには用いられないという理解のもと提出されている。また、上記の詳細な説明において、本開示を簡素化すべく、様々な特徴が一緒にグループ化されてもよい。しかしながら、実施形態として本明細書において開示される特徴ごとに記載されていない特許請求の範囲は、当該特徴のサブセットを特徴付けてよい。さらに、実施形態は、具体例において開示されるものより少ない特徴を含んでよい。したがって、以下の特許請求の範囲は、ここで発明を実施するための形態に組み込まれ、各請求項は、別個の実施形態として独立したものである。本明細書で開示される実施形態の範囲は、添付の請求項を参照して、権利が与えられるそのような請求項の均等物の全範囲と併せて決定されるべきである。
【0386】
例が、構造的特徴及び/又は方法論的動作に固有の記載で説明されたが、特許請求の範囲に記載された主題は、説明された具体的な特徴又は動作に限定されなくてよいことを理解されたい。むしろ、特定の特徴及び動作は、特許請求される主題を実装する例示形態として開示される。上記の説明及び図面は、限定的な意味ではなく、むしろ例示的な意味であるとみなされるべきである。当業者であれば、本明細書で説明される実施形態に対して、様々な修正及び変更が、添付の特許請求の範囲に記載されているように、本発明のより広い趣旨及び範囲から逸脱することなく行われてよいことを理解するだろう。
(項目1)
キャッシュメモリと、
高帯域幅メモリと、
前記キャッシュメモリに通信可能に連結されるシェーダコアであって、前記キャッシュメモリ内のインメモリデータベースから抽出され、かつ、第1のビット長を有する第1のデータ要素を解凍して、前記第1のビット長より大きい第2のビット長を有する第2のデータ要素を生成する処理要素を有するシェーダコアと、
前記第2のデータ要素を、前記インメモリデータベースのクエリで提供される目標値と比較する算術論理ユニット(ALU)と
を備える装置。
(項目2)
シェーダコアは、前記第1のデータ要素を、ビット未満のビット長から8ビットのビット長へと解凍する、項目1に記載の装置。
(項目3)
前記シェーダコアは、前記第1のデータ要素を、9ビットと15ビットとの間のビット長から16ビットのビット長へと解凍する、項目1に記載の装置。
(項目4)
前記シェーダコアは、前記第1のデータ要素を、17ビットと31ビットとの間のビット長から32ビットのビット長へと解凍する、項目1に記載の装置。
(項目5)
前記シェーダコアは、前記第1のデータ要素を、33ビットと63ビットとの間のビット長から64ビットのビット長へと解凍する、項目1に記載の装置。
(項目6)
前記算術論理ユニット(ALU)は、前記第2のビット長でベクトル比較演算を実行する、項目1から5のいずれか一項に記載の装置。
(項目7)
前記算術論理ユニット(ALU)は、前記ベクトル比較演算の結果をビットベクトルとして書き込む、項目6に記載の装置。
(項目8)
キャッシュメモリに通信可能に連結されるシェーダコアの処理要素において、前記キャッシュメモリ内のインメモリデータベースから抽出され、かつ、第1のビット長を有する第1のデータ要素を解凍して、前記第1のビット長より大きい第2のビット長を有する第2のデータ要素を生成する段階と、
前記インメモリデータベースのクエリで提供される目標値と比較するために、前記第2のデータ要素を算術論理ユニット(ALU)に転送する段階と
を備える方法。
(項目9)
シェーダコアは、前記第1のデータ要素をビット未満のビット長から8ビットのビット長へと解凍する、項目8に記載の方法。
(項目10)
前記シェーダコアは、前記第1のデータ要素を、9ビットと15ビットとの間のビット長から16ビットのビット長へと解凍する、項目8に記載の方法。
(項目11)
前記シェーダコアは、前記第1のデータ要素を、17ビットと31ビットとの間のビット長から32ビットのビット長へと解凍する、項目8に記載の方法。
(項目12)
前記シェーダコアは、前記第1のデータ要素を、33ビットと63ビットとの間のビット長から64ビットのビット長へと解凍する、項目8に記載の方法。
(項目13)
前記算術論理ユニット(ALU)は、前記第2のビット長でベクトル比較演算を実行する、項目8から12のいずれか一項に記載の方法。
(項目14)
前記算術論理ユニット(ALU)は、前記ベクトル比較演算の結果をビットベクトルとして書き込む、項目13に記載の方法。
(項目15)
プロセッサに、
キャッシュメモリに通信可能に連結されるシェーダコアの処理要素において、前記キャッシュメモリ内のインメモリデータベースから抽出され、かつ、第1のビット長を有する第1のデータ要素を解凍して、前記第1のビット長より大きい第2のビット長を有する第2のデータ要素を生成する手順と、
前記インメモリデータベースのクエリで提供される目標値と比較するために、前記第2のデータ要素を算術論理ユニット(ALU)に転送する手順と
を実行させるためのプログラム。
(項目16)
シェーダコアは、前記第1のデータ要素を、ビット未満のビット長から8ビットのビット長へと解凍する、項目15に記載のプログラム。
(項目17)
前記シェーダコアは、前記第1のデータ要素を、9ビットと15ビットとの間のビット長から16ビットのビット長へと解凍する、項目15に記載のプログラム。
(項目18)
前記シェーダコアは、前記第1のデータ要素を、17ビットと31ビットとの間のビット長から32ビットのビット長へと解凍する、項目15に記載のプログラム。
(項目19)
前記シェーダコアは、前記第1のデータ要素を、33ビットと63ビットとの間のビット長から64ビットのビット長へと解凍する、項目15に記載のプログラム。
(項目20)
前記算術論理ユニット(ALU)は、前記第2のビット長でベクトル比較演算を実行する、項目15から19のいずれか一項に記載のプログラム。
(項目21)
前記算術論理ユニット(ALU)は、前記ベクトル比較演算の結果をビットベクトルとして書き込む、項目20に記載のプログラム。
(項目22)
項目15から21のいずれか一項に記載のプログラムを格納するコンピュータ可読記憶媒体。
【外国語明細書】