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

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

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

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-10-11
(45)【発行日】2024-10-22
(54)【発明の名称】SOCアーキテクチャの分解
(51)【国際特許分類】
   H01L 25/04 20230101AFI20241015BHJP
   H01L 25/18 20230101ALI20241015BHJP
   G06F 15/78 20060101ALI20241015BHJP
【FI】
H01L25/04 Z
G06F15/78 570
G06F15/78 520
【請求項の数】 19
【外国語出願】
(21)【出願番号】P 2021173122
(22)【出願日】2021-10-22
(62)【分割の表示】P 2021546776の分割
【原出願日】2020-01-23
(65)【公開番号】P2022070229
(43)【公開日】2022-05-12
【審査請求日】2023-01-17
(31)【優先権主張番号】16/355,377
(32)【優先日】2019-03-15
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】593096712
【氏名又は名称】インテル コーポレイション
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】マタム,ナヴィーン
(72)【発明者】
【氏名】チェニー,ランス
(72)【発明者】
【氏名】フィンリー,エリック
(72)【発明者】
【氏名】ジョージ,ヴァーギーズ
(72)【発明者】
【氏名】ジャハジルダール,サンジーヴ
(72)【発明者】
【氏名】コケル,アルトゥーグ
(72)【発明者】
【氏名】マストロナルデ,ジョシュ
(72)【発明者】
【氏名】ラージワニ,イクバル
(72)【発明者】
【氏名】ストリラマッサルマ,ラクシュミナラヤナン
(72)【発明者】
【氏名】テショミ,メラク
(72)【発明者】
【氏名】ヴェムラパッリ,ヴィクラント
(72)【発明者】
【氏名】ザビエル,ビノージ
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許出願公開第2018/0307863(US,A1)
【文献】米国特許出願公開第2017/0200672(US,A1)
【文献】米国特許出願公開第2014/0281378(US,A1)
【文献】米国特許出願公開第2018/0102251(US,A1)
【文献】米国特許出願公開第2016/0147291(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
H01L 25/04
G06F 15/78
(57)【特許請求の範囲】
【請求項1】
複数のチップレット及び複数のインターコネクト構造を有するパッケージアセンブリを有し、
前記複数のチップレットは、
ブリッジインターコネクト及びインターコネクト構造へ結合された第1ベースチップレットに配置される第1チップレットであり、前記第1ベースチップレットが、インターコネクトファブリックと、メモリから出し入れされるデータをキャッシュする第1の複数のレベル3(L3)キャッシュバンクとを含む、前記第1チップレットと、
記ブリッジインターコネクトを介して前記第1ベースチップレット結合されている第2ベースチップレットに配置される第2チップレットと、
第2の複数のL3キャッシュバンクを含む第3チップレットであり、3D配置で前記第1ベースチップレット上にスタックされて、前記インターコネクト構造を介して前記第1ベースチップレット結合されている前記第3チップレットと
を含む、
装置。
【請求項2】
前記第2の複数のL3キャッシュバンクは、SRAMキャッシュバンクである、
請求項1に記載の装置。
【請求項3】
令を実行する1つ以上の実行ユニットが前記第1チップレット又は前記第1ベースチップレットに含まれ
前記1つ以上の実行ユニットは、前記ブリッジインターコネクトを介して前記第2チップレットへ結合される、
請求項1に記載の装置。
【請求項4】
前記第2チップレットは、1つ以上の追加チップレットへ結合するよう入出力(I/O)チップレットを有する、
請求項1に記載の装置。
【請求項5】
前記第2チップレットは、前記ブリッジインターコネクトを介して前記第3チップレットへ結合される、
請求項4に記載の装置。
【請求項6】
前記複数のチップレットのうちの1つ以上は、当該チップレットのための動的な電圧及び周波数スケーリングを設定する電力制御ロジックを更に有する、
請求項1に記載の装置。
【請求項7】
前記複数のチップレットの各チップレットは、独立したクロックドメイン及び独立した電力ドメインを有する、
請求項6に記載の装置。
【請求項8】
前記複数のチップレットのうちの少なくとも1つは、複数の処理コアを有する、
請求項1乃至7のうちいずれか一項に記載の装置。
【請求項9】
前記第3チップレットは、前記第1ベースチップレットに接着される、
請求項8に記載の装置。
【請求項10】
前記第3チップレットは、メモリチップレットである、
請求項8に記載の装置。
【請求項11】
メモリチップレットと、
複数のチップレット及び複数のインターコネクト構造を有するパッケージアセンブリを含むプロセッサと
を有し、
前記複数のチップレットは、
ブリッジインターコネクト及びインターコネクト構造へ結合された第1ベースチップレットに配置される第1チップレットであり、前記第1ベースチップレットが、インターコネクトファブリックと、メモリから出し入れされるデータをキャッシュする第1の複数のレベル3(L3)キャッシュバンクとを含む、前記第1チップレットと、
記ブリッジインターコネクトを介して前記第1ベースチップレットへ結合されている第2ベースチップレットに配置される第2チップレットと、を含み、
前記メモリチップレットは、第2の複数のL3キャッシュバンクを含む第3チップレットを有し前記第3チップレットは、3D配置で前記第1ベースチップレット上にスタックされて、前記インターコネクト構造を介して前記第1ベースチップレット結合されている
システム。
【請求項12】
前記第2の複数のL3キャッシュバンクは、SRAMキャッシュバンクである、
請求項11に記載のシステム。
【請求項13】
令を実行する1つ以上の実行ユニットが前記第1チップレット又は前記第1ベースチップレットに含まれ
前記1つ以上の実行ユニットは、前記ブリッジインターコネクトを介して前記第2チップレットへ結合される、
請求項11に記載のシステム。
【請求項14】
前記第2チップレットは、1つ以上の追加チップレットへ結合するよう入出力(I/O)チップレットを有する、
請求項11に記載のシステム。
【請求項15】
前記第2チップレットは、前記ブリッジインターコネクトを介して前記第3チップレットへ結合される、
請求項14に記載のシステム。
【請求項16】
前記複数のチップレットのうちの1つ以上は、当該チップレットのための動的な電圧及び周波数スケーリングを設定する電力制御ロジックを更に有する、
請求項11に記載のシステム。
【請求項17】
前記複数のチップレットの各チップレットは、独立したクロックドメイン及び独立した電力ドメインを有する、
請求項16に記載のシステム。
【請求項18】
前記複数のチップレットのうちの少なくとも1つは、複数の処理コアを有する、
請求項11乃至17のうちいずれか一項に記載のシステム。
【請求項19】
前記第3チップレットは、前記第1ベースチップレットに接着される、
請求項18に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
[関連出願]
本願は、2019年3月15日付けで出願された米国特許出願第16/355377号に基づく優先権の利益を主張する。先の米国特許出願は、その全文を参照により本願に援用される。
【0002】
[分野]
実施形態は、概して、汎用グラフィクス及び並列処理ユニットの設計及び製造に関係がある。
【背景技術】
【0003】
現在の並列グラフィクスデータ処理は、例えば、線形補間、テッセレーション、ラスタライズ、テクスチャマッピング、デプステスト、などのような特定の動作をグラフィクスデータに対して実行するために開発されたシステム及び方法を含む。従来、グラフィクスプロセッサは、グラフィクスデータを処理するために固定機能計算ユニットを使用したが、より最近では、グラフィクスプロセッサの部分がプログラム可能になっており、頂点及びフラグメントデータを処理するためのより様々な動作をサポートすることをそのようなプロセッサに可能にする。
【0004】
性能を更に向上させるために、グラフィクスプロセッサは、通常は、グラフィクスパイプラインの異なる部分にわたって可能な限り多くのグラフィクスデータを並列に処理しようと試みるパイプライン化などの処理技術を実装する。SIMT(single instruction, multiple thread)アーキテクチャを備えた並列グラフィクスプロセッサは、グラフィクスパイプラインにおける並列処理の量を最大限にするよう設計される。SIMTアーキテクチャにおいて、並列スレッドのグループは、処理効率を高めるよう可能な限り頻繁にプログラム命令を同時に一緒に実行しようと試みる。SIMTアーキテクチャのためのソフトウェア及びハードウェアの概要は、Shane Cook, CUDA Programming Chapter 3, pages 37-51 (2013)で見つけられ得る。
【図面の簡単な説明】
【0005】
本実施形態の上記の特徴が詳細に理解され得るように、先に簡潔に要約された実施形態は、実施形態を参照して、より具体的に説明され、実施形態のいくつは、添付の図面に表される。
【0006】
図1】本願で記載される実施形態の1つ以上の態様を実装するよう構成されたコンピュータシステムを表すブロック図である。
図2A】実施形態に従う並列プロセッサコンポーネントを表す。
図2B】実施形態に従う並列プロセッサコンポーネントを表す。
図2C】実施形態に従う並列プロセッサコンポーネントを表す。
図2D】実施形態に従う並列プロセッサコンポーネントを表す。
図3A】実施形態に従うグラフィクスマルチプロセッサ及びマルチブロックベースGPUのブロック図である。
図3B】実施形態に従うグラフィクスマルチプロセッサ及びマルチブロックベースGPUのブロック図である。
図3C】実施形態に従うグラフィクスマルチプロセッサ及びマルチブロックベースGPUのブロック図である。
図4A】複数のGPUが複数のマルチコアプロセッサへ通信可能に結合されている例示的なアーキテクチャを表す。
図4B】複数のGPUが複数のマルチコアプロセッサへ通信可能に結合されている例示的なアーキテクチャを表す。
図4C】複数のGPUが複数のマルチコアプロセッサへ通信可能に結合されている例示的なアーキテクチャを表す。
図4D】複数のGPUが複数のマルチコアプロセッサへ通信可能に結合されている例示的なアーキテクチャを表す。
図4E】複数のGPUが複数のマルチコアプロセッサへ通信可能に結合されている例示的なアーキテクチャを表す。
図4F】複数のGPUが複数のマルチコアプロセッサへ通信可能に結合されている例示的なアーキテクチャを表す。
図5】実施形態に従うグラフィクス処理パイプラインを表す。
図6】実施形態に従う機械学習ソフトウェアスタックを表す。
図7】実施形態に従う汎用グラフィクス処理ユニットを表す。
図8】実施形態に従うマルチGPUコンピューティングシステムを表す。
図9A】例示的なディープニューラルネットワークのレイヤを表す。
図9B】例示的なディープニューラルネットワークのレイヤを表す。
図10】例示的な回帰型ニューラルネットワークを表す。
図11】ディープニューラルネットワークの訓練及びデプロイを表す。
図12】分散学習を表すブロック図である。
図13】訓練されたモデルを用いて推定を行うのに適した例示的な推定SOC(system on chip)を表す。
図14】実施形態に従う処理システムのブロック図である。
図15】実施形態に従うプロセッサのブロック図である。
図16】実施形態に従うグラフィクスプロセッサのブロック図である。
図17】いくつかの実施形態に従うグラフィクスプロセッサのグラフィクス処理エンジンのブロック図である。
図18】本願で記載されるいくつかの実施形態に従うグラフィクスプロセッサコアのハードウェアロジックのブロック図である。
図19A】本願で記載される実施形態に従うグラフィクスプロセッサで用いられる処理要素のアレイを含むスレッド実行ロジックを表す。
図19B】本願で記載される実施形態に従うグラフィクスプロセッサで用いられる処理要素のアレイを含むスレッド実行ロジックを表す。
図20】いくつかの実施形態に従うグラフィクスプロセッサ命令フォーマットを表すブロック図である。
図21】他の実施形態に従うグラフィクスプロセッサのブロック図である。
図22A】いくつかの実施形態に従うグラフィクスプロセッサコマンドフォーマット及びフォーマットシーケンスを表す。
図22B】いくつかの実施形態に従うグラフィクスプロセッサコマンドフォーマット及びフォーマットシーケンスを表す。
図23】いくつかの実施形態に従うデータ処理システムのための例示的なグラフィクスソフトウェアアーキテクチャを表す。
図24A】実施形態に従うIPコア開発システムを表すブロック図である。
図24B】本願で記載されるいくつかの実施形態に従う集積回路パッケージアセンブリの断面側面図を表す。
図25】実施形態に従うチップ集積回路上の例示的なシステムを表すブロック図である。
図26A】本願で記載される実施形態に従う、SoC内で使用される例示的なグラフィクスプロセッサを表すブロック図である。
図26B】本願で記載される実施形態に従う、SoC内で使用される例示的なグラフィクスプロセッサを表すブロック図である。
図27】実施形態に従う並列計算システムを示す。
図28A】本願で記載される実施形態に従う非凝集並列プロセッサのハイブリッド論理/物理ビューを表す。
図28B】本願で記載される実施形態に従う非凝集並列プロセッサのハイブリッド論理/物理ビューを表す。
図29A】実施形態に従う非凝集並列プロセッサのパッケージ図を表す。
図29B】実施形態に従う非凝集並列プロセッサのパッケージ図を表す。
図30】実施形態に従うインターコネクトファブリックのためのメッセージ輸送システムを表す。
図31】インターコネクトファブリックの複数の物理リンクにわたる機能ユニット間のメッセージ又は信号の伝送を表す。
図32】インターコネクトファブリックの単一の物理リンクにわたる複数の機能ユニットのメッセージ又は信号の伝送を表す。
図33】非凝集並列プロセッサ内の機能ユニットのためのファブリック接続を構成する方法を表す。
図34】非凝集並列プロセッサ内のインターコネクトファブリックにわたってメッセージ及び/又は信号を中継する方法を表す。
図35】ワークロードごとにチップレットをパワーゲーティングする方法を表す。
図36】交換可能なチップレットを含む並列プロセッサアセンブリを表す。
図37】実施形態に従う交換可能チップレットシステムを表す。
図38】実施形態に従う、仮想チャネル上で運ばれる複数のトラフィッククラスの実例である。
図39】実施形態に従う、交換可能なチップレットのためのスロット間のアグノスティックデータ伝送の方法を表す。
図40】実施形態に従う交換可能チップレットシステムなチップレットのためのモジュールアーキテクチャを表す。
図41】チップレットの試験、検証、及び統合を可能にする際に使用される標準化されたシャーシインターフェースの使用を表す。
図42】様々な製品階層を生み出すための個別的にビニングされたチップレットの使用を表す。
図43】チップレット構成に基づいて種々の製品階層を可能にする方法を表す。
【発明を実施するための形態】
【0007】
いくつかの実施形態において、グラフィクス処理ユニット(GPU)は、グラフィクス操作、機械学習動作、パターン解析動作、及び様々な汎用GPU(GPGPU)機能を加速させるようホスト/プロセッサコアへ通信可能に結合されている。GPUは、バス又は他のインターコネクト(例えば、PCIe又はNVLinkなどの高速インターコネクト)を介してホストプロセッサ/コアへ通信可能に結合されてよい。他の実施形態では、GPUは、コアと同じパッケージ又はチップに集積され、内部プロセッサバス/インターコネクト(すなわち、パッケージ又はチップ内にある)を介してコアへ通信可能に結合されてもよい。GPUが接続されている様態にかかわらず、プロセッサコアは、作業記述子に含まれているコマンド/命令のシーケンスの形で作業をGPUに割り当ててよい。次いで、GPUは、これらのコマンド/命令を効率的に処理するための専用の回路構成/ロジックを使用する。
【0008】
以下の記載では、多数の具体的な詳細が、より完全な理解をもたらすよう示されている。しかし、当業者に明らかなように、ここで記載される実施形態は、これらの具体的な詳細の1つ以上によらずとも実施されてよい。他の事例では、よく知られている特徴は、本実施形態の詳細を不明りょうにしないように記載されていない。
【0009】
[システム概要]
図1は、本願で記載される実施形態の1つ以上の態様を実装するよう構成されたコンピューティングシステム100を表すブロック図である。コンピューティングシステム100は、インターコネクションパスを介して通信する1つ以上のプロセッサ102及びシステムメモリ104を備えている処理サブシステム101を含む。インターコネクションパスは、メモリハブ105を含んでよい。メモリハブ105は、チップセットコンポーネント内の別個のコンポーネントであってよく、あるいは、1つ以上のプロセッサ102内に組み込まれてもよい。メモリハブ105は、通信リンク106を介してI/Oサブシステム111と結合する。I/Oサブシステム111は、1つ以上の入力デバイス108から入力を受けることをコンピューティングシステム100に可能にすることができるI/Oハブ107を含む。更には、I/Oハブ107は、1つ以上のプロセッサ102に含まれ得るディスプレイコントローラが1つ以上の表示デバイス110Aへ出力を供給することを可能にすることができる。一実施形態で、I/Oハブ107と結合されている1つ以上の表示デバイス110Aは、ローカル、内蔵、又は埋め込み表示デバイスを含むことができる。
【0010】
一実施形態で、処理サブシステム101は、バス又は他の通信リンク113を介してメモリハブ105へ結合されている1つ以上の並列プロセッサ112を含む。通信リンク113は、例えば、PCI Expressなどの、しかしこれに限られない任意の数の規格に基づいた通信リンク技術又はプロトコルの1つであってよく、あるいは、ベンダー固有の通信インターフェース又は通信ファブリックであってもよい。一実施形態で、1つ以上の並列プロセッサ112は、MIC(many integrated core)プロセッサなどの多数の処理コア及び/又は処理クラスタを含むことができる計算的に集束した並列又はベクトル処理システムを形成する。一実施形態で、1つ以上の並列プロセッサ112は、I/Oハブ107を介して結合されている1つ以上の表示デバイス110Aの中の1つへピクセルを出力することができるグラフィクス処理システムを形成する。1つ以上の並列プロセッサ112はまた、1つ以上の表示デバイス110Bへの直接接続を可能にするディスプレイコントローラ及びディスプレイインターフェース(図示せず。)も含むことができる。
【0011】
I/Oサブシステム111内で、システム記憶ユニット114は、コンピューティングシステム100のための記憶メカニズムを提供するようI/Oサブシステム111へ接続可能である。I/Oスイッチ116は、I/Oハブ107と、プラットフォームに集積され得るネットワークアダプタ118及び/又は無線ネットワークアダプタ119などの他のコンポーネント、及び1つ以上のアドインデバイス120を介して追加可能な様々な他のデバイスとの間の接続を可能にするインターフェースメカニズムを提供するために使用され得る。ネットワークアダプタ118は、Ehternet(登録商標)アダプタ又は他の有線ネットワークアダプタであることができる。無線ネットワークアダプタ119は、Wi-Fi、Bluetooth(登録商標)、近距離通信(NFC)、又は1つ以上の無線ラジオを含む他のネットワークデバイスのうちの1つ以上を含むことができる。
【0012】
コンピューティングシステム100は、USB又は他のポート接続を含む、明示されていない他のコンポーネントを含むことができ、光学記憶ドライバ、ビデオ捕捉デバイス、なども、I/Oハブ107へ接続されてよい。図1で様々なコンポーネントを相互接続する通信パスは、PCI(Peripheral Component Interconnect)に基づくプロトコル(例えば、PCI-Express)などの任意の適切なプロトコル、あるいは、NV-Link高速インターコネクト又は当該技術で知られているインターコネクトプロトコルなどの任意の他のバス又はポイント・ツー・ポイント通信インターフェース及び/又はプロトコルを用いて実装されてもよい。
【0013】
一実施形態で、1つ以上の並列プロセッサ112は、例えば、ビデオ出力回路構成を含む、グラフィクス及びビデオ処理のために最適化された回路構成を組み込み、グラフィクス処理ユニット(GPU)を構成する。他の実施形態では、1つ以上の並列プロセッサ112は、本願で更に詳細に記載されるように、基礎を成す計算アーキテクチャを保持しながら、汎用処理のために最適化された回路構成を組み込む。更なる他の実施形態では、コンピューティングシステム100のコンポーネントは、単一の集積回路上で1つ以上の他のシステム要素と集積されてよい。例えば、1つ以上の並列プロセッサ112、メモリハブ105、プロセッサ102、及びI/Oハブ107は、システム・オン・チップ(SoC)集積回路に組み込まれ得る。代替的に、コンピューティングシステム100のコンポーネントは、システム・イン・パッケージ(SIP)構成を形成するよう単一のパッケージに組み込まれ得る。一実施形態で、コンピューティングシステム100のコンポーネントの少なくとも一部は、モジュールコンピューティングシステム内に他のマルチチップモジュールと相互接続され得るマルチ・チップ・モジュール(MCM)に組み込まれ得る。
【0014】
本願で示されているコンピューティングシステム100は実例であり、変形及び変更が可能であることが理解されるだろう。ブリッジの数及び配置、プロセッサ102の数、並びに並列プロセッサ112の数を含む接続トポロジは、望まれるように変更されてよい。例えば、いくつかの実施形態で、システムメモリ104は、ブリッジを通じてよりもむしろ直接にプロセッサ102へ接続され、一方、他のデバイスは、メモリハブ105及びプロセッサ102を介してシステムメモリ104と通信する。他の代替のトポロジでは、並列プロセッサ112は、メモリハブ105へよりもむしろ、I/Oハブ107へ、又は1つ以上のプロセッサ102の中の1つへ直接に接続される。他の実施形態では、I/Oハブ107及びメモリハブ105は、単一のチップに組み込まれてもよい。いくつかの実施形態は、並列プロセッサ112の2つ以上のインスタンスと結合することができる複数のソケットを介して取り付けられた2組以上のプロセッサ102を含んでもよい。
【0015】
ここで示されている特定のコンポーネントのいくつかは任意であり、コンピューティングシステム100の全ての実施に含まれなくてもよい。例えば、任意の数のアドインカード又はペリフェラルがサポートされてよく、あるいは、いくつかのコンポーネントは削除されてもよい。更には、いくつかのアーキテクチャは、図1に表されているものと類似したコンポーネントに対して異なった用語を使用してもよい。例えば、メモリハブ105は、いくつかのアーキテクチャではノースブリッジと呼ばれることがあり、一方、I/Oハブ107は、サウスブリッジと呼ばれることがある。
【0016】
図2Aは、実施形態に従う並列プロセッサ200を表す。並列プロセッサ200の様々なコンポーネントは、プログラム可能なプロセッサ、特定用途向け集積回路(ASIC)、又はフィールド・プログラマブル・ゲート・アレイ(FPGA)などの1つ以上の集積回路デバイスを用いて実装されてよい。表されている並列プロセッサ200は、実施形態に従って、図1に示されている1つ以上の並列プロセッサ112の変形である。
【0017】
一実施形態で、並列プロセッサ200は、並列処理ユニット202を含む。並列処理ユニット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は、メモリ動作を実行することに向けられたコマンドを受け取る。
【0018】
ホストインターフェース206がI/Oユニット204を介してコマンドバッファを受け取るとき、ホストインターフェース206は、それらのコマンドを実行するための作業操作をフロントエンド208へ向けることができる。一実施形態で、フロントエンド208はスケジューラ210と結合し、スケジューラ210は、コマンド又は他の作業項目を処理クラスタアレイ212へ分配するよう構成される。一実施形態で、スケジューラ210は、処理クラスタアレイ212が適切に構成され、処理クラスタアレイ212の処理クラスタへタスクが分配される前に有効な状態にあることを確かにする。一実施形態で、スケジューラ210は、マイクロコントローラで実行されるファームウェアロジックにより実装される。マイクロコントローラにより実装されたスケジューラ210は、処理アレイ212で実行されるスレッドの迅速なプリエンプション及びコンテキストスイッチングを可能にしながら、複雑なスケジューリング及び作業分配操作を粗い及び細かい粒度で実行するよう構成される。一実施形態で、ホストソフトウェアは、複数のグラフィクス処理ドアベルの中の1つにより、処理アレイ212に対するスケジューリングのためのワークロードを証明することができる。次いで、ワークロードは、スケジューラマイクロコントローラ内のスケジューラ210のロジックによって、処理アレイ212にわたって自動的に分配され得る。
【0019】
処理クラスタアレイ212は、最大“N”個までの処理クラスタ(例えば、クラスタ214A、クラスタ214B、乃至クラスタ214N)を含むことができる。処理クラスタアレイ212の各クラスタ214A~214Nは、多数の同時のスレッドを実行することができる。スケジューラ210は、各タイプのプログラム又は計算について生じるワークロードに応じて様々であり得る様々なスケジューリング及び/又は作業分配アルゴリズムを用いて、処理クラスタアレイ212のクラスタ214A~214Nへ作業を割り当てることができる。スケジューリングは、スケジューラ210によって動的に処理され得るか、あるいは、処理クラスタアレイ212による実行のために構成されたプログラムロジックのコンパイル中にコンパイラロジックによって部分的に支援され得る。一実施形態で、処理クラスタアレイ212の異なるクラスタ214A~214Nは、異なるタイプのプログラムを処理するために、及び異なるタイプの計算を実行するために、割り当てられ得る。
【0020】
処理クラスタアレイ212は、様々なタイプの並列処理動作を実行するよう構成され得る。一実施形態で、処理クラスタアレイ212は、汎用の並列計算動作を実行するよう構成される。例えば、処理クラスタアレイ212は、ビデオ及び/又はオーディオデータのフィルタリング、物理演算を含むモデリング動作の実行、及びデータ変形の実行を含む処理タスクを実行するためのロジックを含むことができる。
【0021】
一実施形態で、処理クラスタアレイ212は、並列なグラフィクス処理動作を実行するよう構成される。並列プロセッサ200がグラフィクス処理動作を実行するよう構成されている実施形態で、処理クラスタアレイ212は、テッセレーションロジック及び他の頂点処理ロジックとともにテクスチャ動作を実行するテクスチャサンプリングロジックを含むがこれに限られないそのようなグラフィクス処理動作の実行をサポートする追加のロジックを含むことができる。更には、処理クラスタアレイ212は、頂点シェーダ、テッセレーションシェーダ、ジオメトリシェーダ、及びピクセルシェーダなどの、しかしこれらに限られないグラフィクス処理関連シェーダプログラムを実行するよう構成され得る。並列処理ユニット202は、データを処理のためにシステムメモリからI/Oユニット204を介して転送することができる。処理中、転送されたデータは、処理中にオンチップメモリ(例えば、並列プロセッサメモリ222)に記憶され、次いで、システムメモリへ書き込まれ得る。
【0022】
一実施形態で、並列処理ユニット202がグラフィクス処理を実行するために使用される場合に、スケジューラ210は、処理クラスタアレイ212の複数のクラスタ214A~214Nへのグラフィクス処理動作の分配をより良く可能にするために、処理ワークロードをおおよそ等しいサイズのタスクに分けるよう構成され得る。いくつかの実施形態において、処理クラスタアレイ212の部分は、異なるタイプの処理を実行するよう構成され得る。例えば、表示のためのレンダリングされた画像を生成するために、第1部分は、頂点シェーディング及びトポロジ生成を実行するよう構成されてよく、第2部分は、テッセレーション及びジオメトリシェーディングを実行するよう構成されてよく、第3部分は、ピクセルシェーディング又は他のスクリーン空間動作を実行するよう構成されてよい。クラスタ214A~214Nのうちの1つ以上によって生成された中間データは、中間データが更なる処理のためにクラスタ214A~214Nの間で伝送されることを可能にするようバッファに格納されてよい。
【0023】
動作中、処理クラスタアレイ212は、スケジューラ210を介して、実行されるべき処理タスクを受け取ることができ、スケジューラ210は、フロントエンド208から、処理タスクを定義するコマンドを受け取る。グラフィクス処理動作のために、処理タスクは、処理されるべきデータのインデックス、例えば、サーフェス(パッチ)データ、プリミティブデータ、頂点データ、及びピクセルデータを、どのようにしてデータが処理されるべきか(例えば、どのようなプログラムが実行されるべきか)を定義する状態パラメータ及びコマンドとともに含むことができる。スケジューラ210は、タスクに対応するインデックスをフェッチするよう構成されてよく、あるいは、フロントエンド208からインデックスを受け取ってもよい。フロントエンド208は、処理クラスタアレイ212が、入来するコマンドバッファ(例えば、バッチバッファ、プッシュバッファ、など)によって指定されたワークロードが開始される前に有効な状態に設定されることを確かにするよう構成され得る。
【0024】
並列処理ユニット202の1つ以上のインスタンスの夫々は、並列プロセッサメモリ222と結合することができる。並列プロセッサメモリ222は、メモリクロスバー216を介してアクセスされ得る。メモリクロスバー216は、処理クラスタアレイ212及びI/Oユニット204からメモリリクエストを受け取ることができる。メモリクロスバー216は、メモリインターフェース218を介して並列プロセッサメモリ222にアクセスすることができる。メモリインターフェース218は、並列プロセッサメモリ222の部分(例えば、メモリユニット)へ夫々が結合することができる複数のパーティションユニット(例えば、パーティションユニット220A、パーティションユニット220B、乃至パーティションユニット220N)を含むことができる。一実施において、パーティションユニット220A~220Nの数は、メモリユニットの数に等しいよう構成され、それにより、第1パーティションユニット220Aは、対応する第1メモリユニット224Aを有し、第2パーティションユニット220Bは、対応するメモリユニット224Bを有し、N番目のパーティションユニット220Nは、対応するN番目のメモリユニット224Nを有する。他の実施形態では、パーティションユニット220A~220Nの数は、メモリデバイスの数に等しくなくてもよい。
【0025】
様々な実施形態において、メモリユニット224A~224Nは、グラフィクス・ダブル・データ・レート(GDDR)メモリを含む動的ランダム・アクセス・メモリ(DRAM)又はグラフィクス・ランダム・アクセス・メモリ、例えば、同期グラフィクス・ランダム・アクセス・メモリ(SGRAM)を含む様々なタイプのメモリデバイスを含むことができる。一実施形態で、メモリユニット224A~224Nは、高帯域幅メモリ(HBM)を含むがこれに限られない3D積層メモリも含んでよい。当業者に明らかなように、メモリユニット224A~224Nは様々であることができ、様々な従来設計のうちの1つから選択可能である。フレームバッファ又はテクスチャマップなどのレンダーターゲットは、メモリユニット224A~224Nにわたって記憶されてよく、パーティションユニット220A~220Nが、並列プロセッサメモリ222の利用可能な帯域幅を効率よく使用するよう各レンダーターゲットの部分を書き込むことを可能にする。いくつかの実施形態において、並列プロセッサメモリ222のローカルインスタンスは、ローカルキャッシュメモリとともにシステムメモリを利用する統合されたメモリ設計を支持して、除かれてもよい。
【0026】
一実施形態で、処理クラスタアレイ212のクラスタ214A~214Nのうちのいずれか1つは、並列プロセッサメモリ222内のメモリユニット224A~224Nのうちのいずれかに書き込まれることになるデータを処理することができる。メモリクロスバー216は、各クラスタ214A~214Nの出力を、いずれかのパーティションユニット220A~220Nへ、又は出力に対して追加の処理動作を実行することができる他のクラスタ214A~214Nへ転送するよう構成され得る。各クラスタ214A~214Nは、様々な外部メモリデバイスから読み出すために又はそれらに書き込むために、メモリクロスバー216を通じてメモリインターフェース218と通信することができる。一実施形態で、メモリクロスバー216は、I/Oユニット204と通信するためのメモリインターフェース218への接続と、並列プロセッサメモリ222のローカルインスタンスへの接続とを有し、異なる処理クラスタ214A~214N内の処理ユニットが、並列処理ユニット202にとってローカルでないシステムメモリ又は他のメモリと通信することを可能にする。一実施形態で、メモリクロスバー216は、クラスタ214A~214Nとパーティションユニット220A~220Nとの間でトラフィックストリームを分離するために仮想チャネルを使用することができる。
【0027】
並列処理ユニット202の単一のインスタンスが並列プロセッサ200内に表されているが、並列処理ユニット202の任意の数のインスタンスが含まれ得る。例えば、並列処理ユニット202の複数のインスタンスが、単一のアドインカードで設けられ得るか、あるいは、複数のアドインカードが相互接続され得る。並列処理ユニット202の異なるインスタンスは、たとえ異なるインスタンスが異なる数の処理コア、異なる量のローカル並列プロセッサメモリ、及び/又は他の構成相違点を有しているとしても、相互動作するよう構成され得る。例えば、一実施形態で、並列処理ユニット202のいくつかのインスタンスは、他のインスタンスよりも高い精度の浮動小数点ユニットを含むことができる。並列処理ユニット202又は並列プロセッサ200の1つ以上のインスタンスを組み込むシステムは、デスクトップ、ラップトップ、若しくは携帯型パーソナルコンピュータ、サーバ、ワークステーション、ゲーム機、及び/又は埋め込み型システムを含むがこれらに限られない様々な構成及び形状因子で実装され得る。
【0028】
図2Bは、実施形態に従うパーティションユニット220のブロック図である。一実施形態で、パーティションユニット220は、図2Aのパーティションユニット220A~220Nのうちの1つのインスタンスである。表されているように、パーティションユニット220は、L2キャッシュ221、フレームバッファインターフェース225、及びROP226(raster operations unit)を含む。L2キャッシュ221は、メモリクロスバー216及びROP226から受け取られたロード及びストア動作を実行するよう構成される読み出し/書き込みキャッシュである。読み出しミス及び緊急の書き戻しサーフェスは、L2キャッシュ221によってフレームバッファインターフェース225へ処理のために出力される。アップデートも、処理のためにフレームバッファインターフェース225を介してフレームバッファへ送信され得る。一実施形態で、フレームバッファインターフェース225は、図2Aのメモリユニット224A~224N(例えば、並列プロセッサメモリ222内)などの並列プロセッサメモリ内のメモリユニットの中の1つとインターフェース接続する。
【0029】
グラフィクスアプリケーションでは、ROP226は、ステンシル、zテスト、ブレンディングなどのようなラスタ動作を実行する処理ユニットである。ROP226は、次いで、処理されたグラフィクスデータを出力し、処理されたグラフィクスデータは、グラフィクスメモリに記憶される。いくつかの実施形態において、ROP226は、メモリに書き込まれるデプス又はカラーデータを圧縮し、メモリから読み出されるデプス又はカラーデータを圧縮解除する圧縮ロジックを含む。圧縮ロジックは、複数の圧縮アルゴリズムのうちの1つ以上を使用するロスレス圧縮ロジックであることができる。ROP226によって実行される圧縮のタイプは、圧縮されるべきデータの統計特性に基づいて様々であることができる。例えば、一実施形態で、デルタカラー圧縮は、タイルごとにデプス及びカラーデータに対して実行される。
【0030】
いくつかの実施形態において、ROP226は、パーティションユニット220内ではなく、各処理クラスタ(例えば、図2Aのクラスタ214A~214N)内に含まれる。そのような実施形態では、ピクセルデータの読み出し及び書き込みリクエストは、ピクセルフラグメントデータの代わりにメモリクロスバー216を介して伝送される。処理されたグラフィクスデータは、図1の1つ以上の表示デバイス110のうちの1つなどの表示デバイスで表示されるか、プロセッサ102による更なる処理のためにルーティングされるか、あるいは、図2Aの並列プロセッサメモリ222内の処理エンティティのうちの1つによる更なる処理のためにルーティングされてよい。
【0031】
図2Cは、実施形態に従う、並列処理ユニット内の処理クラスタ214のブロック図である。一実施形態で、処理クラスタは、図2Aの処理クラスタ214A~214Nのうちの1つのインスタンスである。処理クラスタ214は、多くのスレッドを同時に実行するよう構成され得る。ここで、「スレッド」という用語は、特定の組の入力データに対して実行する特定のプログラムのインスタンスを指す。いくつかの実施形態において、SIMD(single-instruction, multiple-data)命令発行技術が、多数の独立した命令ユニットを設けずに、多数のスレッドの並列実行をサポートするために使用される。他の実施形態では、SIMT(single-instruction, multiple-thread)技術が、処理クラスタの各1つの中の処理エンジンの組へ命令を発行するよう構成された共通命令ユニットを使用して、多数の概ね同期されたスレッドの並列実行をサポートするために使用される。全ての処理エンジンが通常は同じ命令を実行するSIMD実行レジームとは異なり、SIMT実行は、異なるスレッドが、所与のスレッドプログラムを通じて、異なる実行パスをより簡単に辿ることを可能にする。当業者であれば、SIMD処理レジームはSIMT処理レジームの機能サブセットを表している、と理解するだろう。
【0032】
処理クラスタ214の動作は、処理タスクをSIMT並列プロセッサに分配するパイプラインマネージャ232を介して制御され得る。パイプラインマネージャ232は、図2のスケジューラ210から命令を受け取り、グラフィクスマルチプロセッサ234及び/又はテクスチャユニット236によるこれらの命令の実行を管理する。表されているグラフィクスマルチプロセッサ234は、SIMT並列プロセッサの例示的なインスタンスである。しかし、異なるアーキテクチャの様々なタイプのSIMT並列プロセッサが処理クラスタ214内に含まれてよい。グラフィクスマルチプロセッサ234の1つ以上のインスタンスが処理クラスタ214内に含まれ得る。グラフィクスマルチプロセッサ234は、データを処理することができ、データクロスバー240は、処理されたデータを、他のシェーダユニットを含む複数の可能なあて先のうちの1つへ分配するために使用され得る。パイプラインマネージャ232は、処理されたデータがデータクロスバー240を介して分配されるためのあて先を指定することによって、処理されたデータの分配を促すことができる。
【0033】
処理クラスタ214内の各グラフィクスマルチプロセッサ234は、同じ組の機能実行ロジック(例えば、算術ロジックユニット、ロード-ストアユニット、など)を含むことができる。機能実行ロジックは、前の命令が完了する前に新しい命令が発行され得るパイプライン化された様態で構成され得る。機能実行ロジックは、整数及び浮動小数点演算、比較演算、ブール演算、ビットシフト、及び様々な代数関数の計算を含む様々な演算をサポートする。一実施形態で、同じ機能ユニットハードウェアは、種々の演算を実行するために利用可能であり、機能ユニットの如何なる組み合わせも存在してよい。
【0034】
処理クラスタ214へ伝送された命令は、スレッドを構成する。並列処理エンジンにわたって実行されるスレッドの組は、スレッドグループである。スレッドグループは、異なる入力データに対して同じプログラムを実行する。スレッドグループ内の各スレッドは、グラフィクスマルチプロセッサ234内の異なる処理エンジンへ割り当てられ得る。スレッドグループに含まれているスレッドは、グラフィクスマルチプロセッサ234内の処理エンジンの数よりも少なくてよい。スレッドグループに含まれているスレッドが処理エンジンの数よりも少ない場合に、処理エンジンのうちの1つ以上は、スレッドグループが処理中であるサイクル中にアイドル状態であってよい。スレッドグループに含まれているスレッドはまた、グラフィクスマルチプロセッサ234内の処理エンジンの数よりも多くてもよい。スレッドグループに含まれているスレッドがグラフィクスマルチプロセッサ234内の処理エンジンの数よりも多い場合に、処理は、連続したクロックサイクルにわたって実行され得る。一実施形態で、複数のスレッドグループがグラフィクスマルチプロセッサ234で同時に実行され得る。
【0035】
一実施形態で、グラフィクスマルチプロセッサ234は、ロード及びストア動作を実行するよう内部キャッシュメモリを含む。一実施形態で、グラフィクスマルチプロセッサ234は、内部キャッシュを先送りし、処理クラスタ214内のキャッシュメモリ(例えば、L1キャッシュ248)を使用することができる。各グラフィクスマルチプロセッサ234はまた、全ての処理クラスタ214にわたって共有されてスレッド間でデータを転送するために使用され得るパーティションユニット(例えば、図2Aのパーティションユニット220A~220N)内のL2キャッシュへのアクセスも有する。グラフィクスマルチプロセッサ234はまた、オフチップグローバルメモリにアクセスしてもよい。オフチップグローバルメモリは、ローカル並列プロセッサメモリ及び/又はシステムメモリのうちの1つ以上を含むことができる。並列処理ユニット202の外にある如何なるメモリも、グローバルメモリとして使用されてよい、処理クラスタ214がグラフィクスマルチプロセッサ234の複数のインスタンスを含む実施形態は、L1キャッシュ248に記憶され得る共通命令及びデータを共有することができる。
【0036】
各処理クラスタ214は、仮想アドレスを物理アドレスにマッピングするよう構成されるMMU245(memory management unit)を含んでよい。他の実施形態では、MMU245の1つ以上のインスタンスは、図2Aのメモリインターフェース218内に存在してよい。MMU245は、仮想アドレスをタイルの物理アドレスと、任意にキャッシュラインインデックスとにマッピングするために使用されるページテーブルエントリ(PTE)の組を含む。MMU245は、グラフィクスマルチプロセッサ234若しくはL1キャッシュ248又は処理クラスタ214内に存在し得るアドレストランスレーション・ルックアサイド・バッファ(TLB)又はキャッシュを含んでもよい。物理アドレスは、パーティションユニットの間で効率的なリクエストインターリービングを可能にするためにサーフェスデータアクセスの局所性を分散するよう処理される。キャッシュラインインデックスは、キャッシュラインに対するリクエストがヒットかミスかを決定するために使用されてよい。
【0037】
グラフィクス及びコンピューティングアプリケーションでは、処理クラスタ214は、各グラフィクスマルチプロセッサ234が、テクスチャマッピング動作、例えば、テクスチャサンプル位置を決定すること、テクスチャデータを読み出すこと、及びテクスチャデータにフィルタをかけること、を実行するために、テクスチャユニット236へ結合されるように構成されてよい。テクスチャデータは、内部テクスチャL1キャッシュ(図示せず)から、又はいくつかの実施形態では、グラフィクスマルチプロセッサ234内のL1キャッシュから読み出され、必要に応じて、L2キャッシュ、ローカル並列プロセッサメモリ、又はシステムメモリからフェッチされる。各グラフィクスマルチプロセッサ234は、処理されたタスクを、更なる処理のために、他の処理クラスタ214へ供給するよう、あるいは、処理されたタスクをL2キャッシュ、ローカル並列プロセッサメモリ、又はシステムメモリにメモリクロスバー216を介して格納するよう、処理されたタスクをデータクロスバー240へ出力する。preROP242(pre-raster operations unit)は、グラフィクスマルチプロセッサ234からデータを受け取り、データを、本願で記載されるパーティションユニット(例えば、図2Aのパーティションユニット220A~220N)により位置を定められ得るROPユニットへ向けるよう構成される。preROP242ユニットは、色混合のための最適化を実行し、ピクセル色データを編成し、アドレス変換を実行することができる。
【0038】
本願で記載されるコアアーキテクチャは実例であり、変更及び変形が可能であることが理解されるだろう。任意の数の処理ユニット、例えば、グラフィクスマルチプロセッサ234、テクスチャユニット236、preROP242などが処理クラスタ214に含まれてよい。更に、ただ1つの処理ユニット214しか示されていないが、本願で記載される並列処理ユニットは、処理クラスタ214の任意の数のインスタンスを含んでよい。一実施形態において、各処理クラスタ214は、別々の相異なる処理ユニット、L1キャッシュ、などを用いて他の処理クラスタ214から独立して動作するよう構成され得る。
【0039】
図2Dは、一実施形態に従って、グラフィクスマルチプロセッサ234を示す。そのような実施形態では、グラフィクスマルチプロセッサ234は、処理クラスタ214のパイプラインマネージャ232と結合する。グラフィクスマルチプロセッサ234は、命令キャッシュ252、命令ユニット254、アドレスマッピングユニット256、レジスタファイル258、1つ以上の汎用グラフィクス処理ユニット(GPGPU)コア262、及び1つ以上のロード/ストアユニット266を含むがこれらに限られない実行パイプラインを備える。GPGPUコア262及びロード/ストアユニット266は、メモリ及びキャッシュインターコネクト268を介してキャッシュメモリ272及び共有メモリ270と結合される。一実施形態において、グラフィクスマルチプロセッサ234は、行列及び/又はレイトレーシング演算を加速させるハードウェアロジックを含むテンソル及び/又はレイトレーシングコア263を更に含む。
【0040】
一実施形態において、命令キャッシュ252は、パイプラインマネージャ232から、実行すべき命令のストリームを受け取る。命令は、命令キャッシュ252にキャッシュされ、命令ユニット254による実行のためにディスパッチされる。命令ユニット254は、スレッドグループ(例えば、ワープ)として命令をディスパッチすることができ、スレッドグループの各スレッドは、GPGPUコア262内の異なる実行ユニットに割り当てられる。命令は、統合アドレス空間内でアドレスを指定することによって、ローカル、共有、又はグローバルアドレス空間のいずれかにアクセスすることができる。アドレスマッピングユニット256は、統合アドレス空間内のアドレスを、ロード/ストアユニット266によってアクセスされ得る相異なるメモリアドレスに変換するために使用され得る。
【0041】
レジスタファイル258は、グラフィクスマルチプロセッサ234の機能ユニットのためのレジスタの組を提供する。レジスタファイル258は、グラフィクスマルチプロセッサ234の機能ユニット(例えば、GPGPUコア262、ロード/ストアユニット266)のデータパスへ接続されたオペランドの一時記憶を提供する。一実施形態において、レジスタファイル258は、各機能ユニットがレジスタファイル258の専用の部分を割り当てられるように、機能ユニットの夫々の間で分割される。一実施形態において、レジスタファイル258は、グラフィクスマルチプロセッサ234によって実行される異なるワープ間で分割される。
【0042】
GPGPUコア262は、グラフィクスマルチプロセッサ234の命令を実行するために使用される浮動小数点ユニット(FPU)及び/又は整数算術ロジックユニット(ALU)を夫々含むことができる。GPGPUコア262は、実施形態に従って、アーキテクチャが類似していることができ、あるいは、アーキテクチャが異なることができる。例えば、一実施形態において、GPGPUコア262の第1部分は、単精度FPU及び整数ALUを含み、一方、GPGPUコア262の第2部分は、倍精度FPUを含む。一実施形態において、FPUは、浮動小数点算術のためのIEEE754-2008を実装するか、あるいは、変数精度浮動小数点算術を有効にすることができる。グラフィクスマルチプロセッサ234は、コピー長方形又はピクセル混合動作などの特定の機能を実行するよう1つ以上の固定機能又は特別の機能を更に含むことができる。一実施形態において、GPGPUコアの1つ以上はまた、固定又は特別の機能ロジックも含むことができる。
【0043】
一実施形態において、GPGPUコア262は、複数組のデータに対して単一の命令を実行することができるSIMDロジックを含む。一実施形態において、GPGPUコア262は、SIMD4、SIMD8、及びSIMD16命令を物理的に実行し、SIMD1、SIMD2、及びSIMD32命令を論理的に実行することができる。GPGPUコアのためのSIMD命令は、シェーダコンパイラによってコンパイル時に生成されるか、あるいは、SPMD(single program multiple data,SPMD)又はSIMTアーキテクチャのために記述及びコンパイルされたプログラムを実行するときに自動的に生成され得る。SIMT実行モデルのために構成されたプログラムの複数のスレッドは、単一のSIMD命令により実行可能である。例えば、一実施形態において、同じ又は類似した動作を実行する8つのSIMTスレッドが、単一のSIMD8ロジックユニットにより並列に実行され得る。
【0044】
メモリ及びキャッシュインターコネクト268は、グラフィクスマルチプロセッサ234の機能ユニットの夫々をレジスタファイル258へ及び共有メモリ270へ接続するインターコネクトネットワークである。一実施形態において、メモリ及びキャッシュインターコネクト268は、ロード/ストアユニット266が共有メモリ270とレジスタファイル258との間でロード及びストア動作を実装することを可能にするクロスバーインターコネクトである。レジスタファイル258は、GPGPUコア262と同じ周波数で動作することができるので、GPGPUコア262とレジスタファイル258との間のデータ転送は、レイテンシが非常に小さい。共有メモリ270は、グラフィクスマルチプロセッサ234内の機能ユニットで実行されるスレッド間の通信を可能にするために使用され得る。キャッシュメモリ272は、例えば、機能ユニットとテクスチャユニット236との間で通信されたテクスチャデータをキャッシュするために、データキャッシュとして使用され得る。共有メモリ270はまた、キャッシュされて管理されるプログラムとしても使用され得る。GPGPUコア262で実行されるスレッドは、キャッシュメモリ272内に格納されている自動的にキャッシュされたデータに加えて、共有メモリ内にデータをプログラム可能に格納することができる。
【0045】
図3A~3Cは、実施形態に従って、更なるグラフィクスマルチプロセッサを表す。図3A~3Bは、図2Cのグラフィクスマルチプロセッサ234の変形であるグラフィクスマルチプロセッサ325、350を表す。図3Cは、マルチコアグループ365A~365Nに配置されたグラフィクス処理リソースの専用の組を含むグラフィクス処理ユニット(GPU)380を表す。表されているグラフィクスマルチプロセッサ325、350及びマルチコアグループ365A~365Nは、多数の実行スレッドの同時の実行が可能なストリーミング・マルチプロセッサ(streaming multiprocessor,SM)であることができる。
【0046】
図3Aは、更なる実施形態に従うグラフィクスマルチプロセッサ325を示す。グラフィクスマルチプロセッサ325は、図2Dのグラフィクスマルチプロセッサ234に対して、実行リソースユニットの複数の追加インスタンスを含む。例えば、グラフィクスマルチプロセッサ325は、命令ユニット332A~332B、レジスタファイル334A~334B、及びテクスチャユニット344A~344Bの複数のインスタンスを含むことができる。グラフィクスマルチプロセッサ325はまた、複数組のグラフィクス又は計算実行ユニット(例えば、GPGPUコア336A~336B、テンソルコア337A~337B、レイトレーシングコア338A~338B)と、複数組のロード/ストアユニット340A~340Bとを含む。一実施形態において、実行リソースユニットは、共通命令キャッシュ330、テクスチャ及び/又はデータキャッシュメモリ342、及び共有メモリ346を備える。
【0047】
様々なコンポーネントは、インターコネクトファブリック327を介して通信することができる。一実施形態において、インターコネクトファブリック327は、グラフィクスマルチプロセッサ325の様々なコンポーネント間の通信を可能にするよう1つ以上のクロスバースイッチを含む。一実施形態において、インターコネクトファブリック327は、グラフィクスマルチプロセッサ325の各コンポーネントがスタックされる別個の高速ネットワークファブリックレイヤである。グラフィクスマルチプロセッサ325のコンポーネントは、インターコネクトファブリック327を介して遠隔のコンポーネントと通信する。例えば、GPGPUコア336A~336B、337A~337B、及び338A~338Bは夫々、インターコネクトファブリック327を介して共有メモリ346と通信することができる。インターコネクトファブリック327は、コンポーネント間の公平な帯域幅割り当てを確かにするために、グラフィクスマルチプロセッサ325内の通信を調停することができる。
【0048】
図3Bは、更なる実施形態に従うグラフィクスマルチプロセッサ350を示す。グラフィクスマルチプロセッサ350は、複数組の実行リソース356A~356Dを含み、実行リソースの各組は、図2D及び図3Aに表されているような複数の命令ユニット、レジスタファイル、GPGPUコア、及びロード/ストアユニットを含む。実行リソース356A~356Dは、命令キャッシュ354及び共有メモリ353を共有しながら、テクスチャ動作のためのテクスチャユニット360~360Dに呼応して動作することができる。一実施形態において、実行リソース356A~356Dは、テクスチャ及び/又はデータキャッシュメモリ358A~358Bの複数のインスタンスとともに、命令キャッシュ354及び共有メモリ353を共有することができる。様々なコンポーネントは、図3Aのインターコネクトファブリック327に類似したインターコネクトファブリック352を介して通信することができる。
【0049】
当業者であれば、図1、2A~2D、及び3A~3Bに示されているアーキテクチャは説明であり、本実施形態の範囲に関する限定ではない、と理解するだろう。よって、本願で説明される技術は、本願で記載される実施形態の範囲から逸脱せずに、制限なしに、1つ以上のモバイルアプリケーションプロセッサ、マルチコアCPUを含む1つ以上のデスクトップ又はサーバ中央演算処理ユニット、図2Aの並列処理ユニット202のような1つ以上の並列処理ユニット、及び1つ以上のグラフィクスプロセッサ又は特別目的の処理ユニットを含む如何なる適切に構成された処理ユニットでも実装されてよい。
【0050】
いくつかの実施形態において、本願で記載される並列プロセッサ又はGPGPUは、グラフィクス操作、機械学習動作、パターン解析動作、及び様々な汎用GPU(GPGPU)機能を加速させるようホスト/プロセッサコアへ通信可能に結合される。GPUは、バス又は他のインターコネクト(例えば、PCIe又はNVLinkなどの高速インターコネクト)を介してホストプロセッサ/コアへ通信可能に結合されてよい。他の実施形態では、GPUは、コアと同じパッケージ又はチップに集積され、内部プロセッサバス/インターコネクト(すなわち、パケット又はチップ内にある)を介してコアへ通信可能に結合されてよい。GPUが接続されている様態にかかわらず、プロセッサコアは、作業記述に含まれているコマンド/命令のシーケンスの形でGPUに作業を割り当ててよい。GPUは、次いで、それらのコマンド/命令を有効に処理するための専用の回路構成/ロジックを使用する。
【0051】
図3Cは、マルチコアグループ365A~Nに割り当てられたグラフィクス処理リソースの専用の組を含むグラフィクス処理ユニット(GPU)380を表す。ただ1つのマルチコアグループ365Aの詳細しか与えられていないが、他のマルチコアグループ365A~365Nは、グラフィクス処理リソースの同じ又は類似した組を備えられてよいことが理解されるだろう。
【0052】
表されているように、マルチコアグループ365Aは、グラフィクスコアの組370、テンソルコアの組371、及びレイトレーシングコアの組372を含んでよい。スケジューラ/ディスパッチャ368は、様々なコア370、371及び372で実行されるグラフィクススレッドをスケジューリング及びディスパッチする。レジスタファイルの組369は、グラフィクススレッドを実行するときにコア370、371及び372によって使用されるオペランド値を格納する。これらは、例えば、整数値を格納する整数レジスタ、浮動小数点値を格納する浮動小数点レジスタ、パックされたデータ要素(整数及び/又は浮動小数点データ要素)を格納するベクトルレジスタ、及びテンソル/行列値を格納するタイルレジスタを含んでよい。一実施形態において、タイルレジスタは、ベクトルレジスタの組み合わされた組として実装される。
【0053】
1つ以上の組み合わされたレベル1(L1)キャッシュ及び共有メモリユニット373は、各マルチコアグループ365A内に局所的にテクスチャデータ、頂点データ、ピクセルデータ、レイデータ、境界ボリュームデータ、などのグラフィクスデータを格納する。1つ以上のテクスチャユニット374はまた、テクスチャマッピング及びサンプリングなどのテクスチャリング動作を実行するためにも使用され得る。マルチコアグループ365A~365Nの全て又はサブセットによって共有されているレベル2(L2)キャッシュ375は、複数の同時のグラフィクススレッドのためのグラフィクスデータ及び/又は命令を格納する。表されているように、L2キャッシュ375は、複数のマルチコアグループ365A~365Nにわたって共有されてよい。1つ以上のメモリコントローラ367は、GPU380をメモリ366へ結合する。メモリ366は、システムメモリ(例えば、DRAM)及び/又は専用のグラフィクスメモリ(例えば、GDDR6メモリ)であってよい。
【0054】
入出力(I/O)回路構成363は、GPU380を、デジタル信号プロセッサ(DSP)、ネットワークコントローラ、又はユーザ入力デバイスなどの1つ以上のI/Oデバイス362へ結合する。オンチップインターコネクトが、I/Oデバイス362をGPU380及びメモリ366へ結合するために使用されてよい。I/O回路構成363の1つ以上のI/Oメモリ管理ユニット(IOMMU)364は、システムメモリ366へ直接にI/Oデバイス362を結合する。一実施形態において、IOMMU364は、システムメモリ366内の物理アドレスへ仮想アドレスをマッピングするよう複数組のページテーブルを管理する。この実施形態で、I/Oデバイス362、CPU361、及びGPU380は、同じ仮想アドレス空間を共有してもよい。
【0055】
1つの実施において、IOMMU364は仮想化をサポートする。この場合に、それは、ゲスト/グラフィクス仮想アドレスをゲスト/グラフィクス物理アドレスにマッピングするページテーブルの第1の組と、ゲスト/グラフィクス物理アドレスをシステム/ホスト物理アドレス(例えば、システムメモリ366内)にマッピングするページテーブルの第2の組とを管理してよい。ページテーブルの第1及び第2の組の夫々のベースアドレスは、制御レジスタに格納され、コンテキストスイッチでスワップアプトされてよい(例えば、それにより、新しいコンテキストは、ページテーブルの関連する組へのアクセスを与えられる)。図3Cに表されていないが、コア370、371、372及び/又はマルチコアグループ365A~365Nの夫々は、ゲスト仮想からのゲスト物理への変換、ゲスト物理からホスト物理への変換、及びゲスト仮想からホスト物理への変換をキャッシュするようトランスレーション・ルックアサイド・バッファ(TLB)を含んでもよい。
【0056】
一実施形態において、CPU361、GPU380、及びI/Oデバイス362は、単一の半導体チップ及び/又はチップパッケージで集積される。表されているメモリ366は、同じチップに集積されてよく、あるいは、オフチップインターフェースを介してメモリコントローラ367へ結合されてよい。1つの実施において、メモリ366は、他の物理システムレベルメモリと同じ仮想アドレス空間を共有するGDDR6メモリを有するが、本発明の基礎原理は、この具体的な実施に限定されない。
【0057】
一実施形態において、テンソルコア371は、ディープラーニング動作を実行するために使用される基本計算動作である行列演算を実行するよう特に設計された複数の実行ユニットを含む。例えば、同時の行列乗算演算は、ニューラルネットワークの訓練及び推論のために使用されてよい。テンソルコア371は、単精度浮動小数点(例えば、32ビット)、半精度浮動小数点(例えば、16ビット)、整数ワード(16ビット)、バイト(8ビット)及び半バイト(4ビット)を含む様々なオペランド精度を用いて行列処理を実行してよい。一実施形態において、ニューラルネットワーク実施は、高品質の最終画像を構成するために、複数のフレームからの詳細を潜在的に組み合わせる各レンダリングされたシーンの特徴を抽出する。
【0058】
ディープラーニング実施では、並列な行列乗算作業が、テンソルコア371での実行のためにスケジューリングされてよい。ニューラルネットワークの訓練は、特に、有意な数の行列内積演算を必要とする。N×N×N行列かけ算の内積定式化を処理するために、テンソルコア371は、少なくともN個の内積処理要素を含んでよい。行列かけ算が始まる前に、1つの行列全体がタイルレジスタにロードされ、第2行列の少なくとも1つの列がN回のサイクルの各サイクルでロードされる。サイクルごとに、処理されるN個の内積がある。
【0059】
行列要素は、16ビットワード、8ビットバイト(例えば、INT8)及び4ビット半バイト(例えば、INT4)を含む、特定の実施に応じた異なる精度で記憶されてよい。異なる精度モードは、最も有効な精度が異なるワークロード(例えば、バイト及び半バイトへの量子化を許すことができるワークロードを推論すること、など)のために使用されることを確かにするよう、テンソルコアの組371に対して指定されてよい。
【0060】
一実施形態において、レイトレーシングコア372は、実時間のレイトレーシング又は非実時間のレイトレーシングの両方の実施のためにレイトレーシング演算を加速させる。特に、レイトレーシングコア372は、境界ボリュームヒエラルキ(BVH)を用いてレイトラバースを実行し、レイとBVHボリューム内に含まれるプリミティブとの間の交差を識別するレイトラバース/交差回路を含む。レイトレーシングコア372はまた、デプス試験及び選択を実行するための回路構成(例えば、Zバッファ又は同様の配置を使用する)も含んでよい。1つの実施において、レイトレーシングコア372は、本願で記載される画像ノイズ除去技術に呼応してトラバース及び交差動作を実行する。それらの技術のうちの少なくとも一部は、テンソルコア371で実行されてよい。例えば、一実施形態において、テンソルコア371は、レイトレーシングコア372によって生成されたフレームのノイズ除去を実行するようディープラーニングニューラルネットワークを実装する。しかし、CPU361、グラフィクスコア370、及び/又はレイトレーシングコア372も、ノイズ除去及び/又はディープラーニングアルゴリズムの全て又は一部を実装してよい。
【0061】
更には、上述されたように、ノイズ除去に対する分散型アプローチが用いられてもよく、GPU380は、ネットワーク又は高速インターコネクトを介して他のコンピューティングデバイスへ結合されたコンピューティングデバイス内にある。この実施形態では、相互接続されたコンピューティングデバイスは、異なるタイプの画像フレーム及び/又は異なるグラフィクスアプリケーションについてノイズ除去を実行するために、システム全体が学習する速度を改善するようニューラルネットワーク学習/訓練データを共有する。
【0062】
一実施形態において、レイトレーシングコア372は、グラフィクスコア370がレイごとの数千の命令で過負荷になることを防ぐように、全てのBVHトラバース及びレイプリミティブ交差を処理する。一実施形態において、各レイトレーシングコア372は、境界ボックステスト(例えば、トラバース動作のため)を実行する専用回路の第1の組と、レイ-三角形交差テスト(例えば、トラバースされている交差レイ)を実行する専用回路の第2の組とを含む。よって、一実施形態において、マルチコアグループ365Aは簡単にレイプローブを起動することができ、レイトレーシングコア372は、レイトラバース及び交差を独立して実行し、ヒットデータ(例えば、ヒット、ノーヒット、多ヒットなど)をスレッドコンテキストへ返す。レイトレーシングコア372がトラバース及び交差演算を実行する間、他のコア370、371は、自由に他のグラフィクス及び計算作業を実行することができる。
【0063】
一実施形態において、各レイトレーシングコア372は、BVH試験動作を実行するトラバースユニットと、レイ-プリミティブ交差テストを実行する交差ユニットとを含む。交差ユニットは、「ヒット」、「ノーヒット」又は「多ヒット」応答を生成し、それを適切なスレッドへ供給する。トラバース及び交差演算中に、他のコア(例えば、グラフィクスコア370及びテンソルコア371)の実行リソースは、自由に他の形式のグラフィクス作業を実行することができる。
【0064】
後述される1つの具体的な実施形態では、ハイブリッドラスタライゼーション/レイトレーシングアプローチが使用され、作業が、グラフィクスコア370とレイトレーシングコア372との間で分配される。
【0065】
一実施形態において、レイトレーシングコア372(及び/又は他のコア370、371)は、DispatchRaysコマンドを含むMicrosoftのDirectX Ray Tracing(DXR)などのレイトレーシング命令と、オブジェクトごとにシェーダ及びテクスチャの一意の組の割り当てを可能にするレイ生成、最接近ヒット、任意のヒット、及びミスシェーダとのためのハードウェアサポートを含む。レイトレーシングコア372、グラフィクスコア370、及びテンソルコア371によってサポートされ得る他のレイトレーシングプラットフォームは、Vulkab1.1.85である。しかし、本発明の基礎原理は、如何なる特定のレイトレーシングISAにも限定されないことに留意されたい。
【0066】
一般に、様々なコア372、371、370は、レイ生成、最接近ヒット、レイ-プリミティブ交差、プリミティブごとの階層的な境界ボックス構成、ミス(miss)、ビジット(visit)、及び例外(exceptions)のための命令/機能を含むレイトレーシング命令セットをサポートしてよい。より具体的には、一実施形態は、次の機能を実行するためのレイトレーシング命令を含む。
【0067】
レイ生成(Ray Generation)-レイ生成命令は、夫々のピクセル、サンプル、又は他のユーザ定義された作業割り当てについて実行されてよい。
【0068】
最接近ヒット(Closest Hit)-最接近ヒット命令は、シーン内でレイとプリミティブとの最も近い交差を見つけるために実行されてよい。
【0069】
任意のヒット(Any Hit)-任意ヒット命令は、潜在的に、新しい最接近交点を識別するために、シーン内でレイとプリミティブとの間の複数の交差を識別する。
【0070】
交差(Intersection)-交差命令は、レイ-プリミティブ交差試験を実行し、結果を出力する。
【0071】
プリミティブごとの境界ボックス構成(Per-primitive Bounding box Construction)-この命令は、所与のプリミティブ又はプリミティブのグループの周りに境界ボックスを形成する(例えば、新しいBVH又は他のアクセラレーションデータ構造を形成する場合)。
【0072】
ミス(Miss)-レイがシーン内の全てのジオメトリ、又はシーンの指定された領域を外すことを示す。
【0073】
ビジット(Visit)-レイがトラバースすることにある子ボリューム(children volumes)を示す。
【0074】
例外(Exceptions)-様々なタイプの例外ハンドラ(例えば、様々なエラー条件について呼び出される)を含む。
【0075】
[GPUがプロセッサインターコネクトをホストする技術]
図4Aは、複数のGPU410~413が高速リンク440A~440D(例えば、バス、ポイント・ツー・ポイントインターコネクト、など)を介して複数のマルチコアプロセッサ405~406へ通信可能に結合される例示的なアーキテクチャを表す。一実施形態において、高速リンク440A~440Dは、実施に応じて、4GB/s、30GB/s、80GB/s又はそれ以上の通信スループットをサポートする。PCIe4.0又は5.0及びNVLink2.0を含むがこれらに限られない様々なインターコネクトプロトコルが使用されてよい。しかし、本発明の基礎原理は、如何なる特定の通信プロトコル又はスループットにも限定されない。
【0076】
更には、一実施形態において、GPU410~413のうちの2つ以上は、高速リンク440A~440Dのために使用されるものと同じ又は異なるプロトコル/リンクを用いて実装され得る高速リンク442A~442Bを介して相互接続される。同様に、マルチコアプロセッサ405~406のうちの2つ以上は、高速リンク443を介して接続されてよい。高速リンク443は、20GB/s、30GB/s、120GB/s又はそれ以上で動作する対称マルチプロセッサ(symmetric multi-processor,SMP)バスであってよい。代替的に、図4Aに示されている様々なシステムコンポーネント間の全ての通信は、同じプロトコル/リンクを用いて(例えば、通信インターコネクションファブリックを介して)実現されてよい。述べられているように、しかしながら、本発明の基礎原理は、如何なる特定のタイプのインターコネクト技術にも限定されない。
【0077】
一実施形態において、各マルチコアプロセッサ405~406は、夫々メモリインターコネクト430A~430Bを介してプロセッサメモリ401~402へ通信可能に結合され、各GPU410~413は、夫々GPUメモリインターコネクト450A~450Dを介してGPUメモリ420~423へ通信可能に結合される。メモリインターコネクト430A~430B及び450A~450Dは、同じ又は異なったメモリアクセス技術を利用してよい。例として、限定としてではなく、プロセッサメモリ401~402及びGPUメモリ420~423は、動的ランダム・アクセス・メモリ(DRAM)(スタックドDRAMを含む)、グラフィクスDDR SDRAM(GDDR)(例えば、GDDR5、GDDR6)、高バンド幅メモリ(HBM)などの揮発性メモリであってよく、かつ/あるは、3D XPoint又はNano-Ramなどの不揮発性メモリであってもよい。一実施形態において、メモリのいくつかの部分は、揮発性メモリであってよく、他の部分は、不揮発性メモリであってもよい(例えば、2レベルメモリ(2LM)ヒエラルキーを使用する)。
【0078】
後述されるように、様々なプロセッサ405~406及びGPU410~413は夫々特定のメモリ401~402、420~423へ物理的に結合されてよいが、統合されたメモリアーキテクチャが実装されてもよく、そのようなアーキテクチャでは、同じ仮想システムアドレス空間(「実効アドレス」空間とも呼ばれる)が様々な物理メモリの全ての間で分配される。例えば、プロセッサメモリ401~402は、夫々が64GBのシステムメモリアドレス空間を有してよく、GPUメモリ420~423は、夫々32GBのシステムメモリアドレス空間を有してよい(結果として、この例では、アドレス可能なメモリは全部で254GBになる)。
【0079】
図4Bは、一実施形態に従って、マルチコアプロセッサ407とグラフィクスアクセラレーションモジュール446との間の相互接続についての更なる詳細を表す。グラフィクスアクセラレーションモジュール446は、高速リンク440を介してプロセッサ407へ結合されているラインカード上に集積された1つ以上のGPUチップを含んでよい。代替的に、グラフィクスアクセラレーションモジュール446は、プロセッサ407と同じパッケージ又はチップ上に集積されてもよい。
【0080】
表されているプロセッサ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と接続し、システムメモリ441は、プロセッサメモリ401~402を含んでよい。
【0081】
様々なキャッシュ462A~462D、456、及びシステムメモリ441に記憶されているデータ及び命令については、コヒーレンスバス464上のインターコア通信を介して、コヒーレンシが保たれている。例えば、各キャッシュは、それらに関連したキャッシュコヒーレンシロジック/回路を有してよく、特定のキャッシュラインへの読み出し又は書き込みの検出に応答してコヒーレンスバス464上で通信する。1つの実施では、キャッシュスヌーピングプロトコルが、キャッシュアクセスをスヌープするようコヒーレンスバス464上で実装される。キャッシュスヌーピング/コヒーレンシ技術は、当業者によく理解されており、本発明の基礎原理を不明りょうしないようここでは詳細に記載されない。
【0082】
一実施形態において、プロキシ回路425は、グラフィクスアクセラレーションモジュール446がコアのピアとしてキャッシュコヒーレンスプロトコルに関与することを可能にするよう、グラフィクスアクセラレーションモジュール446をコヒーレンスバス464へ通信可能に結合する。特に、インターフェース435は、高速リンク440(例えば、PCIeバス、NVLinkなど)を介したプロキシ回路425への接続をもたらし、インターフェース437は、グラフィクスアクセラレーションモジュール446を高速リンク440へ接続する。
【0083】
1つの実施では、アクセラレータ集積化回路436は、グラフィクスアクセラレーションモジュール446の複数のグラフィクス処理エンジン431、432、Nに成り代わって、キャッシュ管理、メモリアクセス、コンテキスト管理、及び割り込み管理サービスを提供する。グラフィクス処理エンジン431、432、Nは、夫々が別個のグラフィクス処理ユニット(GPU)を有してよい。代替的に、グラフィクス処理エンジン431、432、Nは、グラフィクス実行ユニット、メディア処理エンジン(例えば、ビデオエンコーダ/デコーダ)、サンプラ、及びビットエンジンなどのようなGPU内の異なったタイプのグラフィクス処理エンジンを有してもよい。言い換えれば、グラフィクスアクセラレーションモジュールは、複数のグラフィクス処理エンジン431~432、Nを備えたGPUであってよく、あるいは、グラフィクス処理エンジン431~432、Nは、共通のパッケージ、ラインカード、又はチップ上に集積された個別的なGPUであってよい。
【0084】
一実施形態において、アクセラレータ集積化回路436は、仮想-物理メモリ変換(実効-実質メモリ変換とも呼ばれる)などの様々なメモリ管理機能と、システムメモリ441にアクセスするためのメモリアクセスプロトコルとを実行するメモリ管理ユニット(MMU)439を含む。MMU439は、仮想/実効-物理/実質アドレス変換をキャッシュするためのトランスレーション・ルックアサイド・バッファ(TLB)(図示せず)も含んでよい。1つの実施において、キャッシュ438は、グラフィクス処理エンジン431、432、Nによる有効なアクセスのためにコマンド及びデータを記憶する。一実施形態において、キャッシュ438及びグラフィクスメモリ433~434、Mに記憶されているデータは、コアキャッシュ462A~462D、456及びシステムメモリ441とコヒーレントを保たれる。述べられているように、これは、キャッシュ438及びメモリ433~434、Mに成り代わってキャッシュコヒーレンシメカニズムに関与するプロキシ回路425を介して達成され得る(例えば、プロセッサキャッシュ462A~462D、456上のキャッシュラインの変更/アクセスに関連したキャッシュ438へアップデートを送信し、キャッシュ438からアップデートを受信する)。
【0085】
レジスタ445の組は、グラフィクス処理エンジン431~432、Nによって実行されるスレッドのコンテキストデータを記憶し、コンテキスト管理回路448は、スレッドコンテキストを管理する。例えば、コンテキスト管理回路448は、コンテキストスイッチ中に様々なスレッドのコンテキストをセーブ及びリストアするようセーブ及びリストア動作を実行してよい(例えば、第1スレッドはセーブされ、第2スレッドはストアされ、それにより、第2スレッドはグラフィクス処理エンジンによって実行可能である)。例えば、コンテキストスイッチで、コンテキスト管理回路448は、メモリ内の指定領域(例えば、コンテキストポインタによって識別される)に現在のレジスタ値を格納してよい。それは次いで、コンテキストに戻る時にレジスタ値をリストアしてよい。一実施形態において、割り込み管理回路447は、システムデバイスから受け取られた割り込みを受け取って処理する。
【0086】
1つの実施では、グラフィクス処理エンジン431からの仮想/実効アドレスは、MMU439によってシステムメモリ441内の実質/物理アドレスに変換される。アクセラレータ集積化回路436の一実施形態は、複数(例えば、4個、8個、16個)のグラフィクスアクセラレータモジュール446及び/又は他のアクセラレータデバイスをサポートする。グラフィクスアクセラレータモジュール446は、プロセッサ407で実行される単一アプリケーションに専用であってよく、あるいは、複数のアプリケーション間で共有されてもよい。一実施形態において、仮想化されたグラフィクス実行環境が与えられ、そのような環境では、グラフィクス処理エンジン431~432、Nのリソースは、複数のアプリケーション又は仮想マシン(VM)と共有される。リソースは、「スライス」に細分されてもよく、「スライス」は、VM及び/又はアプリケーションに関連した処理要件及び優先順位に基づいて異なるVM及び/又はアプリケーションに割り当てられる。
【0087】
よって、アクセラレータ集積化回路は、グラフィクスアクセラレーションモジュール446のためのシステムへのブリッジとして動作し、アドレス変換及びシステムメモリキャッシュサービスを提供する。更には、アクセラレータ集積化回路436は、ホストプロセッサがグラフィクス処理エンジンの仮想化、割り込み、及びメモリ管理を管理するための仮想化ファシリティを提供し得る。
【0088】
グラフィクス処理エンジン431~432、Nのハードウェアリソースは、ホストプロセッサ407によってみられる実質アドレス空間へ明示的にマッピングされるので、如何なるホストプロセッサも、それらのリソースを直接に、実効アドレス値を用いてアドレッシング可能である。アクセラレータ集積化回路436の1つの機能は、一実施形態において、グラフィクスエンジン431~432、Nの物理的分離であり、それにより、それらは独立したユニットしてシステムには見える。
【0089】
述べられているように、表されている実施形態では、1つ以上のグラフィクスメモリ433~434、Mは、夫々、グラフィクス処理エンジン431~432、Nの夫々へ結合されている。グラフィクスメモリ433~434、Mは、グラフィクス処理エンジン431~432、Nの夫々によって処理される命令及びデータを記憶する。グラフィクスメモリ433~434、Mは、DRAM(スタックドDRAMを含む)、GDDRメモリ(例えば、GDDR5、GDDR6)、又はHBMなどの揮発性メモリであってよく、かつ/あるは、3D XPoint又はNano-Ramなどの不揮発性メモリであってもよい。
【0090】
一実施形態において、高速リンク440上のデータトラフィックを低減するために、バイアシング技術が、グラフィクスメモリ433~434、Mに記憶されているデータが、グラフィクス処理エンジン431~432、Nによって最も頻繁に使用され、望ましくは、コア460A~460Dによって使用されない(少なくとも頻繁にではない)データであることを確かにするよう使用される。同様に、バイアシングメカニズムは、コアのキャッシュ462A~462D、456及びシステムメモリ441内にコアによって必要とされる(望ましくは、グラフィクス処理エンジン431~432、Nには必要とされない)データを保持使用と試みる。
【0091】
図4Cは、アクセラレータ集積化回路436がプロセッサ407内に集積されている他の実施形態を表す。この実施形態では、グラフィクス処理エンジン431~432、Nは、インターフェース437及びインターフェース435(先と同じく、任意の形式のバス又はインターフェースプロトコルを利用してよい)を介してアクセラレータ集積化回路436と高速リンク440上で直接に通信する。アクセラレータ集積化回路436は、図4Bに関して説明されたのと同じ動作を実行し得るが、コヒーレンシバス464及びキャッシュ462A~462D、456とのその近接近を考えると、潜在的に、より高いスループットで実行し得る。
【0092】
一実施形態は、専用プロセスプログラミングモデル(非グラフィクスアクセラレーションモジュール仮想化)及び共有プログラミングモデル(仮想化による)を含む異なったプログラミングモデルをサポートする。後者は、アクセラレータ集積化回路436によって制御されるプログラミングモデルと、グラフィクスアクセラレーションモジュール446によって制御されるプログラミングモデルとを含んでよい。
【0093】
専用プロセスモデルの一実施形態において、グラフィクス処理エンジン431~432、Nは、単一のオペレーティングシステムの下で単一のアプリケーション又はプロセスに専用である。単一のアプリケーションは、VM/パーティション内で仮想化を提供するよう、他のアプリケーションリクエストをグラフィクスエンジン431~432、Nへ向かわせることができる。
【0094】
専用プロセスプログラミングモデルでは、グラフィクス処理エンジン431~432、Nは、複数のVM/アプリケーションパーティションによって共有されてよい。共有されたモデルは、各オペレーティングシステムによるアクセスを可能にするようにグラフィクス処理エンジン431~432、Nを仮想化することをシステムハイパーバイザに要求する。ハイパーバイザなしの単一パーティションシステムについては、グラフィクス処理エンジン431~432、Nは、オペレーティングシステムによって所有される。いずれの場合にも、オペレーティングシステムは、各プロセス又はアプリケーションへのアクセスを提供するようグラフィクス処理エンジン431~432、Nを仮想化することができる。
【0095】
共有プログラミングモデルについては、グラフィクスアクセラレーションモジュール446又は個別的なグラフィクス処理エンジン431~432、Nが、プロセスハンドルを用いてプロセス要素を選択する。一実施形態において、プロセス要素は、システムメモリ441に記憶され、本願で記載されている実効アドレスから実質アドレスへの変換技術を用いてアドレス可能である。プロセスハンドルは、そのコンテキストをグラフィクス処理エンジン431~432、Nに登録する(すなわち、プロセス要素をそのプロセス要素にリンクされたリストに加えるシステムソフトウェアを呼び出す)ときにホストプロセスへ供給される実施に固有の値であってよい。プロセスハンドルの下位16ビットは、プロセス要素にリンクされたリスト内のプロセス要素のオフセットであってよい。
【0096】
図4Dは、例となるアクセラレータ集積化スライス490を表す。本願で使用されているように、「スライス」は、アクセラレータ集積化回路436の処理リソースの指定された部分を有する。システムメモリ441内のアプリケーション実効アドレス空間482は、プロセス要素483を記憶する。一実施形態において、プロセス要素483は、プロセッサ407で実行されているアプリケーション480からのGPU起動481に応答して記憶される。プロセス要素483は、対応するアプリケーション480のプロセス状態を含む。プロセス要素483に含まれる作業記述子(work descriptor,WD)484は、アプリケーションによって要求される単一のジョブであることができ、あるいは、ジョブのキューへのポインタを含んでもよい。後者の場合に、WD484は、アプリケーションのアドレス空間482内のジョブリクエストキューへのポインタである。
【0097】
グラフィクスアクセラレーションモジュール446及び/又は個別的なグラフィクス処理エンジン431~432、Nは、システム内のプロセスの全て又はサブセットによって共有され得る。本発明の実施形態は、プロセス状態をセットアップし、WD484をグラフィクスアクセラレーションモジュール446へ送って、仮想化された環境でジョブを開始するインフラストラクチャを含む。
【0098】
1つの実施において、専用プロセスプログラミングモデルは、実施に固有である。このモデルでは、単一のプロセスがグラフィクスアクセラレーションモジュール446又は個別的なグラフィクス処理エンジン431を所有する。グラフィクスアクセラレーションモジュール446が単一のプロセスによって所有されるので、ハイパーバイザは、所有パーティションのためにアクセラレータ集積化回路436を初期化し、オペレーティングシステムは、グラフィクスアクセラレーションモジュール446が割り当てられる時点で、所有パーティションのためにアクセラレータ集積化回路436を初期化する。
【0099】
動作中に、アクセラレータ集積化回路436内のWDフェッチユニット491は、グラフィクスアクセラレーションモジュール446のグラフィクス処理エンジンの1つによって行われるべき作業の指示を含む次のWD484をフェッチする。WD484からのデータは、レジスタ445に格納され、表されているようにMMU439、割り込み管理回路447及び/又はコンテキスト管理回路448によって使用されてよい。例えば、MMU439の一実施形態は、OS仮想アドレス空間485内のセグメント/ページテーブル486にアクセスするためのセグメント/ページウォーク回路を含む。割り込み管理回路447は、グラフィクスアクセラレーションモジュール446から受け取られた割り込みイベント492を処理してよい。グラフィクス操作を実行するときに、グラフィクス処理エンジン431~432、Nによって生成された実効アドレス493は、MMU439によって実質アドレスに変換される。
【0100】
一実施形態において、レジスタ445の同じ組が、各グラフィクス処理エンジン431~432、N及び/又はグラフィクスアクセラレーションモジュール446について複製され、ハイパーバイザ又はオペレーティングシステムによって初期化されてよい。それらの複製されたレジスタの夫々は、アクセラレータ集積化スライス490に含まれてよい。ハイパーバイザによって初期化され得る例示的なレジスタは、表1に示される。
【表1】
【0101】
オペレーティングシステムによって初期化され得る例示的なレジスタは、表2に示される。
【表2】
【0102】
一実施形態において、各WD484は、特定のグラフィクスアクセラレーションモジュール446及び/又はグラフィクス処理エンジン431~432、Nに特有である。それは、グラフィクス処理エンジン431~432、Nがその作業を行うために必要とする全ての情報を含むか、あるいは、それは、アプリケーションが完了されるべき作業のコマンドキューをセットアップしているメモリ位置へのポインタであることができる。
【0103】
図4Eは、共有モデルの一実施形態の更なる詳細を表す。この実施形態は、プロセス要素リスト499が記憶されているハイパーバイザ実質アドレス空間498を含む。ハイパーバイザ実質アドレス空間498は、オペレーティングシステム495のためのグラフィクスアクセラレーションモジュールエンジンを仮想化するハイパーバイザ496を介してアクセス可能である。
【0104】
共有プログラミングモデルは、システム内のパーティションの全て又はサブセットからのプロセスの全て又はサブセットがグラフィクスアクセラレーションモジュール446を使用することを可能にする。
グラフィクスアクセラレーションモジュール446が複数のプロセス及びパーティションによって共有される2つのプログラミングモデル、つまり、時間スライス共有及びグラフィクス指向共有がある。
【0105】
このモデルでは、システムハイパーバイザ496がグラフィクスアクセラレーションモジュール446を所有し、その機能を全てのオペレーティングシステム495に利用可能にする。グラフィクスアクセラレーションモジュール446がシステムハイパーバイザ496による仮想化をサポートするために、グラフィクスアクセラレーションモジュール446は、次の要件に従ってよい:1)アプリケーションのジョブリクエストは、自律的でなければならず(すなわち、状態がジョブ間で維持される必要はない)、あるいは、グラフィクスアクセラレーションモジュール446は、コンテキストセーブ及びリストアメカニズムを提供しなければならい。2)アプリケーションのジョブリクエストは、グラフィクスアクセラレーションモジュール446によって、如何なる変換不良も含めて指定された時間量で完了することが保証され、あるいは、グラフィクスアクセラレーションモジュール446は、ジョブの処理をプリエンプトする能力を提供する。3)グラフィクスアクセラレーションモジュール446は、指向的な共有プログラミングモデルで動作するときにプロセス間の公平性を保証されなければならない。
【0106】
一実施形態において、共有モデルについては、アプリケーション480が、グラフィクスアクセラレーションモジュール446のタイプ、作業記述子(WD)、権限マスクレジスタ(authority mask register,AMR)値、及びコンテキストセーブ/リストアエリアポインタ(contest save/restore area pointer,CSRP)を用いてオペレーティングシステム495のシステム呼び出しを行うために必要とされる。グラフィクスアクセラレーションモジュール446のタイプは、システム呼び出しの対象となるアクセラレーション機能を記述する。グラフィクスアクセラレーションモジュール446のタイプは、システム固有の値であってよい。WDは、グラフィクスアクセラレーションモジュール446のために特にフォーマット化され、グラフィクスアクセラレーションモジュール446のコマンド、ユーザにより定義された構造への実効アドレスポインタ、コマンドのキューへの実効アドレスポインタ、又はグラフィクスアクセラレーションモジュール446によって行われるべき作業を記述する何らかの他のデータ構造の形を取ることができる。一実施形態において、AMR値は、現在のプロセスのために使用すべきAMR状態である。オペレーティングシステムへ渡される値は、AMRを設定するアプリケーションと同様である。アクセラレータ集積化回路436及びグラフィクスアクセラレーションモジュール446の実装がユーザ権限マスクオーバーライドレジスタ(User Authority Mask Override Register,UAMOR)をサポートしない場合には、オペレーティングシステムは、ハイパーバイザ呼び出しにおいてAMRを渡す前に現在のUAMOR値をAMR値に適用してもよい。ハイパーバイザ496は、任意に、AMRをプロセス要素483に置く前に現在のAMOR(Authority Mask Override Register)値を適用してもよい。一実施形態において、CSRPは、グラフィクスアクセラレーションモジュール446がコンテキスト状態をセーブ及びリストアするためにアプリケーションのアドレス空間482内のエリアの実効アドレスを含むレジスタ445の1つである。このポインタは、ジョブ間で状態がセーブされる必要がない場合に、あるいは、ジョブがプリエンプトされる場合に、任意である。コンテキストセーブ/リストアエリアは、ピン留めされたシステムメモリであってよい。
【0107】
システム呼び出しを受け取ると、オペレーティングシステム495は、アプリケーション480が登録されており、グラフィクスアクセラレーションモジュール446を使用する権限を与えられていることを確かめてよい。次いで、オペレーティングシステム495は、表3に示される情報を用いてハイパーバイザ496を呼び出す。
【表3】
【0108】
ハイパーバイザ呼び出しを受け取ると、ハイパーバイザ496は、オペレーティングシステム495が登録されており、グラフィクスアクセラレーションモジュール446を使用する権限を与えられていることを確かめる。次いで、ハイパーバイザ496は、対応するグラフィクスアクセラレーションモジュール446のタイプについてプロセス要素483をプロセス要素にリンクされたリスト内に置く。プロセス要素は、表4に示される情報を含んでよい。
【表4】
【0109】
一実施形態において、ハイパーバイザは、複数のアクセラレータ集積化スライス490のスライス445を初期化する。
【0110】
図4Fに表されているように、本発明の一実施形態は、物理プロセッサメモリ401~402及びGPUメモリ420~423にアクセスするために使用される共通仮想メモリアドレス空間を介してアドレス可能な統合メモリを用いる。この実施では、GPU410~413で実行される動作は、プロセッサメモリ401~402にアクセスするために同じ仮想/実効メモリアドレス空間を利用し、逆もまた同様であり、それによって、プログラム可能性を簡素化する。一実施形態において、仮想/実効アドレス空間の第1部分は、プロセッサメモリ401に割り当てられ、第2部分は、第2プロセッサメモリ402に割り当てられ、第3部分は、GPUメモリ420に割り当てられる、など。全体の仮想/実効メモリ空間(時々、実効アドレス空間と呼ばれる)は、それによって、プロセッサメモリ401~402及びGPUメモリ420~423の夫々にわたって分配され、いずれかのプロセッサ又はGPUが、いずれかの物理メモリに、そのメモリにマッピングされている仮想アドレスを用いてアクセスすることを可能にする。
【0111】
一実施形態において、MMU439A~439Eのうちの1つ以上の中にあるバイアス/コヒーレンス管理回路494A~494Eは、ホストプロセッサ(例えば、405)のキャッシュとGPU410~413との間のキャッシュコヒーレンスを確かにし、特定のタイプのデータが記憶されるべきである物理メモリを示すバイアシング技術を実装する。バイアス/コヒーレンス管理回路494A~494Eの複数のインスタンスが図4Fに表されている一方で、バイアス/コヒーレンス回路は、1つ以上のホストプロセッサ405のMMU内に、及び/又はアクセラレータ集積化回路436内に実装されてもよい。
【0112】
一実施形態は、GPU付属メモリ420~423がシステムメモリの部分としてマッピングされ、共有仮想メモリ(SVM)技術を用いて、しかし、完全システムキャッシュコヒーレンスに関連した典型的な性能欠点に苦しまずにアクセスされることを可能にする。GPU付属メモリ420~423が面倒なキャッシュコヒーレンスオーバーヘッドなしでシステムメモリとしてアクセスされる能力は、GPUオフロードのための有利な動作環境をもたらす。この配置は、ホストプロセッサ405のソフトウェアが、従来のI/O DMAデータコピーのオーバーヘッドなしで、オペランドをセットアップし、計算結果にアクセスすることを可能にする。そのような従来のコピーは、ドライバ呼び出し、割り込み及びメモリマッピングI/O(memory mapped I/O,MMIO)アクセスを必要とし、これらは全て、簡単なメモリアクセスに対して非効率的である。同時に、キャッシュコヒーレンスオーバーヘッドなしでGPU付属メモリ420~423にアクセスする能力は、オフロードされた計算の実行時間にとって重要であり得る。ストリーミング書き込みメモリトラフィックが相当量である場合に、例えば、キャッシュコヒーレンスオーバーヘッドは、GPU410~413によって見られる実効書き込みバンド幅を大幅に減らすことができる。オペランドセットアップの効率、結果アクセスの効率、及びGPU計算の効率は全て、GPUオフロードの有効性を決定することにおいて役割を果たす。
【0113】
1つの実施において、GPUバイアスとホストプロセッサバイアスとの間の選択は、バイアストラッカデータ構造によって駆動される。例えば、バイアステーブルが使用されてよい。バイアステーブルは、GPU付属メモリページごとに1又は2ビットを含むページ粒度構造であってよい(すなわち、メモリページの粒度で制御される)。バイアステーブルは、(例えば、バイアステーブルの頻繁に/最近使用されたエントリをキャッシュするための)GPU410~413内のバイアスキャッシュの有無によらず、1つ以上のGPU付属メモリ420~423のスチールされたメモリ範囲で実装されてよい。代替的に、エントリバイアステーブルはGPU内で保持されてもよい。
【0114】
1つの実施において、GPU付属メモリ420~423への各アクセスに関連したバイアステーブルエントリは、GPUメモリへの実際のアクセスの前にアクセスされ、次の動作を引き起こす。最初に、GPU410~413からの、GPUバイアスにおいてそれらのページを見つけるローカルリクエストが、対応するGPUメモリ420~423へ直接に転送される。GPUからの、ホストバイアスにおいてそれらのページを見つけるローカルリクエストは、プロセッサ405へ(例えば、上述された高速リンク上で)転送される。一実施形態において、プロセッサ405からの、要求されたページをホストプロセッサバイアスにおいて見つけるリクエストは、通常のメモリ読み出しのようなリクエストを完了する。代替的に、GPUバイアスページに向けられたリクエストは、GPU410~413へ転送されてもよい。GPUは、次いで、ホストプロセッサがページを現在使用中でない場合に、そのページをホストプロセッサへ移してよい。
【0115】
ページのバイアス状態は、ソフトウェアベースメカニズム若しくはハードウェア支援型ソフトウェアベースメカニズムによって、又は限られた場合の組については、単にハードウェアベースのメカニズムによって、変更され得る。
【0116】
バイアス状態を変更するための1つのメカニズムは、APIコール(例えば、OpenCL)を用いる。これは、次に、GPUのデバイスドライバを呼び出し、これは、次に、バイアス状態を変更するようそれに指示するGPUへメッセージを送信し(又はコマンド記述子をエンキューし)、いくつかの遷移については、ホストにおいてキャッシュフラッシュ動作を実行する。キャッシュフラッシュ動作は、ホストプロセッサ405のバイアスからGPUのバイアスへの遷移のために必要とされるが、逆の遷移のためには必要とされない。
【0117】
一実施形態において、キャッシュコヒーレンシは、GPUバイアスページをホストプロセッサ405によって一時的にキャッシュ不能にすることによって維持される。それらのページにアクセスするために、プロセッサ405は、実装に応じて、直ぐにアクセスを許可する場合も許可しない場合もあるGPU410からのアクセスを要求してよい。よって、ホストプロセッサ405とGPU410との間の通信を減らすために、GPUバイアスページが、GPUによって必要とされるがホストプロセッサ405によっては必要とされないページであり、その逆も同様であることを確かにすることは有益である。
【0118】
[グラフィクス処理パイプライン]
図5は、実施形態に従って、グラフィクス処理パイプライン500を表す。一実施形態において、グラフィクスプロセッサは、表されているグラフィクス処理パイプライン500を実装することができる。グラフィクスプロセッサは、一実施形態において、図1の並列プロセッサ112の変形である図2Aの並列プロセッサ200などの、本願で記載されている並列処理サブシステム内に含まれ得る。様々な並列処理システムは、ここで記載されるような並列処理ユニット(例えば、図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つ以上の部分は、図2Aのメモリインターフェース218のインスタンスであってよいメモリインターフェース528を介してオンチップメモリ(例えば、図2Aで見られるような並列プロセッサメモリ)にアクセスすることができる。
【0119】
一実施形態において、データアセンブラ502は、表面の頂点データ及びプリミティブを集める処理ユニットである。データアセンブラ502は、次いで、頂点属性を含む頂点データを頂点処理ユニット504へ出力する。頂点処理ユニット504は、頂点シェーダプログラムを実行するプログラム可能な実行ユニットであり、頂点シェーダプログラムによって指定された頂点データをライティング及び変換する。頂点処理ユニット504は、頂点データを処理する際の使用のために、キャッシュ、ローカル又はシステムメモリに記憶されているデータを読み出し、オブジェクトベースの座標表現から世界空間座標空間又は正規化されたデバイス座標空間へ頂点データを変換するようプログラムされてよい。
【0120】
プリミティブアセンブラ506の第1インスタンスは、頂点処理ユニット504から頂点属性を受け取る。プリミティブアセンブラ506は、必要に応じて、記憶されている頂点属性を読み出し、テッセレーション制御処理ユニット508による処理のためにグラフィクスプリミティブを構成する。グラフィクスプリミティブは、様々なグラフィクス処理アプリケーションプログラミングインターフェース(API)によってサポートされているトライアングル、ラインセグメント、ポイント、パッチ、などを含む。
【0121】
テッセレーション制御処理ユニット508は、入力された頂点を幾何学的パッチのための制御ポイントとして扱う。制御ポイントは、パッチ(例えば、パッチベース)からの入力表現から、テッセレーション評価処理ユニット512による適切な評価での使用に適している表現へ変換される。テッセレーション制御処理ユニット508はまた、幾何学的パッチのエッジのテッセレーション係数を計算することもできる。テッセレーション係数は、単一のエッジに適用され、エッジに関連したディテールのビュー依存レベルを定量化する。テッセレーションユニット510は、パッチのエッジのテッセレーション係数を受け取り、直線、三角形、又は四辺形プリミティブなどの複数の幾何学的プリミティブにパッチをモザイク化するよう構成される。複数の幾何学的プリミティブは、テッセレーション評価処理ユニット512へ送られる。テッセレーション評価処理ユニット512は、幾何学的プリミティブに関連した各頂点の曲面表現及び頂点属性を生成するよう、細分されたパッチのパラメータ化された座標に作用する。
【0122】
プリミティブアセンブラ514の第2インスタンスは、記憶されている頂点属性を必要に応じて読み出すテッセレーション評価処理ユニット512から頂点属性を受け取り、ジオメトリ処理ユニット516による処理のためのグラフィクスプリミティブを構成する。ジオメトリ処理ユニット516は、ジオメトリシェーダプログラムによって指定されているようにプリミティブアセンブラ514から受け取られたグラフィクスプリミティブを変換するようジオメトリシェーダプログラムを実行するプログラム可能な実行ユニットである。一実施形態において、ジオメトリ処理ユニット516は、グラフィクスプリミティブを1つ以上の新しいグラフィクスプリミティブに細分し、新しいグラフィクスプリミティブをラスタライズするために使用されるパラメータを計算するようプログラムされる。
【0123】
いくつかの実施形態において、ジオメトリ処理ユニット516は、ジオメトリストリーム内の要素を追加又は削除することができる。ジオメトリ処理ユニット516は、新しいグラフィクスプリミティブを特定するパラメータ及び頂点をプリミティブアセンブラ518へ出力する。プリミティブアセンブラ518は、ジオメトリ処理ユニット516からパラメータ及び頂点を受け取り、ビューポートスケール、カル(cull)、及びクリップ(clip)ユニット520による処理のためにグラフィクスプリミティブを構成する。ジオメトリ処理ユニット516は、ジオメトリデータを処理する際の使用のために並列プロセッサメモリ又はシステムメモリに記憶されているデータを読み出す。ビューポートスケール、カル、及びクリップユニット520は、クリッピング、カリング、及びビューポートスケーリングを実行し、処理されたグラフィクスプリミティブをラスタライザ522へ出力する。
【0124】
ラスタライザ522は、デプスカリング及び他のデプスベースの最適化を実行することができる。ラスタライザ522はまた、フラグメントを生成し、これらのフラグメント及び関連するカバレッジデータをフラグメント/ピクセル処理ユニット524へ出力するよう、新しいグラフィクスプリミティブに対してスキャン変換を実行する。フラグメント/ピクセル処理ユニット524は、フラグメントシェーダプログラム又はピクセルシェーダプログラムを実行するよう構成されるプログラム可能な実行ユニットである。フラグメント/ピクセル処理ユニット524は、フラグメント又はピクセルシェーダプログラムによって指定されているように、ラスタライザ522から受け取られたフラグメント又はピクセルを変換する。例えば、フラグメント/ピクセル処理ユニット524は、ラスタ動作ユニット526へ出力される陰影付けされたフラグメント又はピクセルを生成するよう、テクスチャマッピング、シェーディング、ブレンディング、テクスチャ補正及びパースペクティブ補正(perspective correction)を含むがこれらに限られない動作を実行するようプログラムされてよい。フラグメント/ピクセル処理ユニット524は、フラグメントデータを処理するときの使用のために、並列プロセッサメモリ又はシステムメモリのどちらかに記憶されているデータを読み出すことができる。フラグメント又はピクセルシェーダプログラムは、処理ユニットのために設定されたサンプリングレートに応じたサンプル、ピクセル、タイル、又は他の粒度でシェーディングを行うよう構成されてよい。
【0125】
ラスタ動作ユニット526は、ステンシル、zテスト、ブレンディング、などを含むがこれらに限られないラスタ動作を実行し、ピクセルデータを、グラフィクスメモリ(例えば、図2Aの並列プロセッサメモリ222、及び/又は図1のシステムメモリ104)に記憶されるように、1つ以上の表示デバイス110で表示されるように、又は1つ以上のプロセッサ102若しくは並列プロセッサ112のうちの1つによる更なる処理のために、処理されたグラフィクスデータとして出力する処理ユニットである。いくつかの実施形態において、ラスタ動作ユニット526は、メモリに書き込まれるz又はカラーデータを圧縮し、メモリから読み出されるz又はカラーデータを圧縮解除するよう構成される。
【0126】
[機械学習概要]
上記のアーキテクチャは、機械学習モデルを使用して訓練及び推論動作を実行するよう適用され得る。機械学習は、多くの種類のタスクの解決に成功している。機械学習アルゴリズム(例えば、ニューラルネットワーク)を訓練及び使用するときに生じる計算は、効率的な並列実装に必然的に役に立つ。従って、汎用グラフィック処理ユニット(GPGPU)などの並列プロセッサは、ディープニューラルネットワークの実際の実装において重要な役割を果たしている。SIMT(single instruction, multiple thread)アーキテクチャを備えた並列グラフィクスプロセッサは、グラフィクスパイプラインでの並列処理の量を最大にするよう設計される。SIMTアーキテクチャでは、並列スレッドのグループは、処理効率を高めるよう可能な限り頻繁に一緒に同期してプログラム命令を実行しようと試みる。並列な機械学習アルゴリズム実装によってもたらされる効率は、高容量ネットワークの使用を可能にし、それらのネットワークがより大きいデータセットに対して訓練されることを可能にする。
【0127】
機械学習アルゴリズムは、データの組に基づいて学習することができる。機械学習アルゴリズムの実施形態は、データセット内のハイレベル抽象化をモデル化するよう設計され得る。例えば、画像認識アルゴリズムは、所与の入力がいくつかのカテゴリのうちのどれに属しているかを決定するために使用可能であり、回帰アルゴリズムは、入力が与えられると数値を出力することができ、パターン認識アルゴリズムは、変換されたテキストを生成したり、あるいは、テキストからの発話認識及び/又は発話認識を実行したりするために使用可能である。
【0128】
機械学習アルゴリズムの例となるタイプは、ニューラルネットワークである。多くの種類のニューラルネットワークがあり、ニューラルネットワークの簡単なタイプはフィードフォワードネットワークである。フィードフォワードネットワークは、ノードがレイヤに配置されている非周期グラフとして実装されてよい。典型的に、フィードフォワードネットワークトポロジは、少なくとも1つの隠れレイヤによって分離されている入力レイヤ及び出力レイヤを含む。隠れレイヤは、入力レイヤによって受け取られた入力を、出力レイヤで出力を生成するために有用である表現に変換する。ネットワークノードは、隣接レイヤ内のノードへエッジを介して完全に接続されるが、各レイヤ内のノード間にエッジは存在しない。フィードフォワードネットワークの入力レイヤのノードで受け取られたデータは、レイヤを接続するエッジの夫々に各々関連付けられた係数(「重み」)に基づいてネットワーク内の各連続レイヤのノードの状態を計算する活性化関数により出力レイヤのノードへ伝搬される(すなわち、前方に送られる)。実行されているアルゴリズムによって表現される具体的なモデルに応じて、ニューラルネットワークアルゴリズムからの出力は、様々な形を取ることができる。
【0129】
機械学習アルゴリズムが特定の問題をモデル化するために使用され得る前に、アルゴリズムは、訓練データセットを用いて訓練される。ニューラルネットワークの訓練は、ネットワークトロポジを選択すること、ネットワークによってモデル化される問題を表す訓練データの組を使用すること、及びネットワークモデルが訓練データセットの全てのインスタンスについて最小限のエラーで実行するまで重みを調整することを必要とする。例えば、ニューラルネットワークのための教師あり学習訓練プロセス中に、訓練データセット内のインスタンスを表す入力に応答してネットワークによって生成された出力は、そのインスタンスについての「正しい」とラベル付けされた出力と比較され、出力とラベル付き出力との間の差を表すエラー信号が計算され、接続に関連した重みは、エラー信号がネットワークレイヤを通って後方伝搬されるということで、そのエラーを最小限にすべく調整される。ネットワークは、訓練データセットのインスタンスから生成された出力の夫々についてのエラーが最小限にされる場合に、「訓練済み」と見なされる。
【0130】
機械学習アルゴリズムの精度は、アルゴリズムを訓練するために使用されるデータセットの品質によって大いに影響を及ぼされ得る。訓練プロセスは、計算量が多く、従来の汎用プロセッサでは相当量の時間を必要とする可能性がある。従って、並列処理ハードウェアが、多くのタイプの機械学習アルゴリズムを訓練するために使用される。これは、ニューラルネットワークで係数を調整する際に実行される計算が並列実装に必然的に役に立つということで、ニューラルネットワークの訓練を最適化することにとって特に有用である。具体的に、多くの機械学習アルゴリズム及びソフトウェアアプリケーションは、汎用のグラフィクス処理デバイス内の並列処理ハードウェアを使用するよう適応されている。
【0131】
図6は、機械学習ソフトウェアスタック600の一般化された図である。機械学習アプリケーション602は、訓練データセットを使用してニューラルネットワークを訓練するよう、あるいは、訓練されたディープニューラルネットワークを使用して機械学習インテリジェンスを実装するよう構成され得る。機械学習アプリケーション602は、ニューラルネットワークのための訓練及び推論機能、及び/又はデプロイ前にニューラルネットワークを訓練するために使用され得る特殊化したソフトウェアを含むことができる。機械学習アプリケーション602は、画像認識、マッピング及びローカライゼーション、自律ナビゲーション、発話合成、医療撮像、又は言語変換を含むがこれらに限られない如何なるタイプのマシンインテリジェンスも実装することができる。
【0132】
機械学習アプリケーション602のためのハードウェアアクセラレーションは、機械学習フレームワーク604を介して有効にされ得る。機械学習フレームワーク604は、機械学習プリミティブのライブラリを提供することができる。機械学習プリミティブは、機械学習アルゴリズムによって一般に実行される基本操作である。機械学習フレームワーク604によらないと、機械学習アルゴリズムの開発者は、機械学習アルゴリズムに関連した主な計算ロジックを作成し最適化し、次いで、新しい並列プロセッサ開発される場合には計算ロジックを最適化し直すよう求められることになる。代わりに、機械学習アプリケーションは、機械学習フレームワーク604によって提供されたプリミティブを用いて、必要な計算を実行するよう構成され得る。例となるプリミティブは、テンソル畳み込み、活性化関数、及びプーリングを含み、これらは、畳み込みニューラルネットワーク(convolutional neural network,CNN)を訓練している間に実行される計算操作である。機械学習フレームワーク604はまた、行列及びベクトル演算などの、多くの機械学習アルゴリズムによって実行される基本線形代数サブプログラムを実装するために、プリミティブを供給することができる。
【0133】
機械学習フレームワーク604は、機械学習アプリケーション602から受け取られた入力データを処理し、計算フレームワーク606への適切な入力を生成することができる。計算フレームワーク606は、GPGPUハードウェア610のアーキテクチャに関する徹底的な知識を有することを機械学習フレームワーク604に求めずに、GPGPUハードウェア610を介してハードウェアアクセラレーションを利用することを機械学習フレームワーク604に可能にするよう、GPGPUドライバ608へ供給される基礎となる命令を抽象化することができる。更には、計算フレームワーク606は、GPGPUハードウェア610の様々なタイプ及び生成にわたって機械学習フレームワーク604のためにハードウェアアクセラレーションを可能にすることができる。
【0134】
[GPGPU機械学習アクセラレーション]
図7は、実施形態に従って、汎用グラフィクス処理ユニット700を表す。一実施形態において、汎用処理ユニット(GPGPU)700は、ディープニューラルネットワークの訓練に関連したタイプの計算ワークロードを処理することにおいて特に効率的であるよう構成され得る。更には、GPGPU700は、特にディープニューラルネットワークのために訓練速度を改善するためにマルチGPUクラスタを生成するようGPGPUの他のインスタンスへ直接にリンクされ得る。
【0135】
GPGPU700は、ホストプロセッサとの接続を可能にするホストインターフェース702を含む。一実施形態において、ホストインターフェース702は、PCI Expressインターフェースである。しかし、ホストインターフェースはまた、ベンダー特有の通信インターフェース又は通信ファブリックであることもできる。GPGPU700は、ホストプロセッサからコマンドを受け取り、グローバルスケジューラ704を使用して、それらのコマンドに関連した実行スレッドを計算クラスタ706A~706Hの組へ分配する。計算クラスタ706A~706Hは、キャッシュメモリ708を共有する。キャッシュメモリ708は、計算クラスタ706A~706H内のキャッシュメモリのためのより上位のキャッシュとして働くことができる。
【0136】
GPGPU700は、メモリコントローラ712A~712Bの組を介して計算クラスタ706A~Hと結合されたメモリ714A~Bを含む。様々な実施形態において、メモリ714A~Bは、グラフィクスダブルデータレート(GDDR)メモリを含む同期グラフィクス・ランダム・アクセス・メモリ(SGRAM)などの動的ランダム・アクセス・メモリ(DRAM)又はグラフィクス・ランダム・アクセス・メモリを含む様々なタイプのメモリデバイスを含むことができる。一実施形態において、メモリ714A~714Bはまた、高バンド幅メモリ(HBM)を含むがこれに限られない3Dスタックドメモリも含んでよい。
【0137】
一実施形態において、計算クラスタ706A~706Hの夫々は、図4Aのグラフィクスマルチプロセッサ400などのグラフィクスマルチプロセッサの組を含む。計算クラスタのグラフィクスマルチプロセッサは、機械学習計算に適したものを含む精度の範囲で計算動作を実行することができる複数のタイプの整数及び浮動小数点ロジックユニットを含む。例えば、一実施形態において、計算クラスタ706A~Hの夫々における浮動小数点ユニットの少なくともサブセットは、16ビット又は32ビットの浮動小数点演算を実行するよう構成され得る一方で、浮動小数点ユニットの別のサブセットは、64ビット浮動小数点演算を実行するよう構成され得る。
【0138】
GPGPU700の複数のインスタンスは、計算クラスタとして動作するよう構成され得る。同期化及びデータ交換のために計算クラスタによって使用される通信メカニズムは、実施形態ごとに様々である。一実施形態において、GPGPU700の複数のインスタンスは、ホストインターフェース702を介して通信する。一実施形態において、GPGPU700は、GPGPUの他のインスタンスへの直接接続を可能にするGPUリンク710とGPGPU700を結合するI/Oハブ709を含む。一実施形態において、GPUリンク710は、GPGPU700の複数のインスタンスの間の通信及び同期化を可能にする専用のGPU間ブリッジへ結合される。一実施形態において、GPUリンク710は、データを他のGPGPU又は並列プロセッサへ送信及び受信するよう高速インターコネクトと結合する。一実施形態において、GPGPU700の複数のインスタンスは、別のデータ処理システムに位置し、ホストインターフェース702によりアクセス可能なネットワークデバイスを介して通信する。一実施形態において、GPUリンク710は、ホストインターフェース702に加えて又はその代わりとしてホストプロセッサへの接続を可能にするよう構成され得る。
【0139】
GPGPU700の表されている構成は、ニューラルネットワークを訓練するよう構成され得る一方で、一実施形態は、高性能又は低電力の推論プラットフォーム内のデプロイのために構成され得るGPGPU700の代替の構成を提供する。推論構成では、GPGPU700は、訓練構成と比べて、それに含まれている計算クラスタ706A~706Hが少ない。更には、メモリ714A~714Bに関連したメモリ技術は、推論構成と訓練構成との間とは異なってもよい。一実施形態において、GPGPU700の推論構成は、特定の命令を推論することをサポートすることができる。例えば、推論構成は、デプロイされたニューラルネットワークのために推論動作中に一般的に使用される1つ以上の8ビット整数内積命令をサポートすることができる。
【0140】
図8は、実施形態に従って、マルチGPUコンピューティングシステム800を表す。マルチGPUコンピューティングシステム800は、ホストインターフェーススイッチ804を介して複数のGPGPU806A~806Bへ結合されているプロセッサ802を含むことができる。ホストインターフェーススイッチ804は、一実施形態において、プロセッサ802をPCIエクスプレスバスへ結合するPCIエクスプレススイッチデバイスである。PCIエクスプレスバスを介して、プロセッサ802は、GPGPU806A~806Dの組と通信することができる。複数のGPGPU806A~806Dの夫々は、図7のGPGPU700のインスタンスであることができる。GPGPU806A~806Dは、高速ポイント・ツー・ポイントGPU間リンク816の組を介して相互接続することができる。高速GPU間リンクは、図7のGPUリンク710などの専用のGPUリンクを介してGPGPU806A~806Dの夫々へ接続することができる。P2P GPUリンク816は、プロセッサ802が接続されるホストインターフェースバス上での通信を必要とせずに、GPGPU806A~806Dの夫々の間の直接通信を可能にする。P2P GPUリンクへ向けられたGPU間トラフィックによれば、ホストインターフェースバスは、例えば、1つ以上のネットワークデバイスを介して、システムメモリアクセスのために、又はマルチGPUコンピューティングシステム800の他のインスタンスと通信するために、利用可能なままである。GPGPU806A~Dの表されている実施形態は、ホストインターフェーススイッチ804を介してプロセッサ802へ接続する一方で、一実施形態において、プロセッサ802は、P2P GPUリンク816の直接サポートを含み、GPGPU806~806Dへ直接接続することができる。
【0141】
[機械学習ニューラルネットワーク実装]
本願で記載されている実施形態によって提供されるコンピューティングアーキテクチャは、機械学習のためにニューラルネットワークを訓練及びデプロイするのに特に適しているタイプの並列処理を実行するよう構成され得る。ニューラルネットワークは、グラフ関係を有する機能のネットワークとして一般化され得る。当該技術でよく知られているように、機械学習で使用される様々なタイプのニューラルネットワーク実装が存在する。ニューラルネットワークの1つの例示的なタイプは、上述されたように、フィードフォワードネットワークである。
【0142】
ニューラルネットワークの第2の例示的なタイプは、畳み込みニューラルネットワーク(CNN)である。CNNは、画像データなどの既知のグリッド様トポロジを有するデータを処理するための特殊化したフィードフォワードニューラルネットワークである。従って、CNNは、コンピュータビジョン及び画像認識アプリケーションのために広く使用されているが、それらは、発話及び言語処理などの他のタイプのパターン認識のためにも使用されてよい。CNN入力レイヤ内のノードは、「フィルタ」(網膜にある受容野によって呼び起こされた特徴検出部)の組に編成され、フィルタの各組の出力は、ネットワークの連続したレイヤ内のノードへ伝搬される。CNNの計算は、各フィルタに畳み込み数学演算を適用してそのフィルタの出力を生成することを含む。畳み込みは、2つの関数によって実行される特殊化した種類の数学演算であって、2つの元の関数のうちの一方の変更されたバージョンである第3の関数を生成する。畳み込みネットワークの用語では、畳み込みの最初の関数は入力と呼ばれ、一方、第2の関数は、畳み込みカーネルと呼ばれ得る。出力は、特徴マップと呼ばれ得る。例えば、畳み込みレイヤへの入力は、入力画像の様々な色成分を定義するデータの多次元配列であることができる。畳み込みカーネルは、パラメータの多次元配列であることができ、パラメータは、ニューラルネットワークのための訓練プロセスによって適応される。
【0143】
回帰型ニューラルネットワーク(RNN)は、レイヤ間のフィードバック接続を含むフィードフォワードニューラルネットワークの仲間である。RNNは、ニューラルネットワークの異なった部分にわたってパラメータデータを共有することによって、シーケンシャルデータのモデリングを可能にする。RNNのアーキテクチャはサイクルを含む。サイクルは、RNNからの出力データの少なくとも一部がその後の入力を順序通りに処理するためにフィードバックとして使用されるということで、変数の現在の値が将来の時点でのそれ自体の値に与える影響を表す。この特徴は、RNNを、言語データが構成され得る可変な性質により、言語処理に特に有用なものとする。
【0144】
後述される図は、例示的なフィードフォワード、CNN、及びRNNネットワークを提示するとともに、これらのタイプのネットワークの夫々を各々訓練及びデプロイするための一般的なプロセスについて記載する。これらの記載は例であって、本願で記載されている如何なる具体的に実施形態に関しても非限定的であり、表されている概念は、ディープニューラルネットワーク及び機械学習技術全般に概して適用され得る。
【0145】
上記の例示的なニューラルネットワークは、ディープラーニングを実行するために使用され得る。ディープラーニングは、ディープニューラルネットワークを使用する機械学習である。ディープラーニングで使用されるディープニューラルネットワークは、単一の隠れレイヤしか含まない浅いニューラルネットワークとは対照的に、複数の隠れレイヤから成る人工ニューラルネットワークである。より深いニューラルネットワークは、一般的に、訓練するのにより多くの計算負荷を要する。しかし、ネットワークの追加の隠れレイヤは、浅い機械学習技術に対して出力エラーが低減されることになるマルチステップパターン認識を可能にする。
【0146】
ディープラーニングで使用されるディープニューラルネットワークは、通常は、モデルに与えられた特徴表現に基づいて演算(例えば、オブジェクト分類、発話認識、など)を実行することができる数学モデルを表すバックエンドネットワークへ結合された特徴認識を実行するためのフロントエンドネットワークを含む。ディープラーニングは、Hand-crafted特徴エンジニアリングがモデルに対して実行されることを必要とせずに機械学習が実行されることを可能にする。代わりに、ディープニューラルネットワークは、入力データ内の統計的構造又は相関に基づいて特徴を学習することができる。学習された特徴は、検出された特徴を出力にマッピングすることができる数学モデルへ供給され得る。ネットワークによって使用される数学モデルは、一般的に、特定のタスクが実行されるために特殊化され、異なるモデルが、異なるタスクを実行するために使用されることになる。
【0147】
ニューラルネットワークが構造化されると、学習モデルが、特定のタスクを実行するようネットワークを訓練するためにネットワークに適用され得る。学習モデルは、ネットワークの出力エラーを減らすようモデル内の重みをどのように調整すべきかについて記載する。エラーの後方伝搬は、ニューラルネットワークを訓練するために使用される一般的なモデルである。入力ベルは、処理のためにネットワークに与えられる。ネットワークの出力は、損失関数を用いて所望の出力と比較され、エラー値が、出力レイヤ内のニューロンの夫々について計算される。エラー値は、次いで、各ニューロンが、元の出力へのその寄与を大まかにあらわる関連したエラー値を有するまで、後方に伝搬される。次いで、ネットワークは、ニューラルネットワークの重みを更新するために、確率的勾配降下アルゴリズム(stochastic gradient descent algorithm)などのアルゴリズムを用いてそれらのエラーから学習することができる。
【0148】
図9A~9Bは、例示的な畳み込みニューラルネットワークを表す。図9Aは、CNN内の様々なレイヤを表す。図9Aに示されているように、画像処理をモデル化するために使用される例示的なCNNは、入力画像の赤、緑、及び青(RGB)成分を記述する入力902を受け取ることができる。入力902は、複数の畳み込みレイヤ(例えば、畳み込みレイヤ904、畳み込みレイヤ906)によって処理され得る。複数の畳み込みレイヤからの出力は、全結合レイヤ908の組によって任意に処理されてもよい。全結合レイヤ内のニューロンは、フィードフォワードネットワークについて上述されたように、前のレイヤ内の全ての活性化(activations)への完全接続を有する。全結合レイヤ908からの出力は、ネットワークからの出力結果を生成するために使用され得る。全結合レイヤ908内の活性化は、畳み込みの代わりに行列乗算を用いて計算され得る。全てのCNN実装が、全結合レイヤ908を利用するわけではない。例えば、いくつかの実施では、畳み込みレイヤ906がCNNの出力を生成することができる。
【0149】
畳み込みレイヤは疎結合され、これは、全結合レイヤ908で見られる従来のニューラルネットワーク構成とは異なる。従来のニューラルネットワークレイヤは完全接続され、それにより、あらゆる出力ユニットはあらゆる入力ユニットと相互作用する。しかし、畳み込みレイヤは、表されているように、フィールドの畳み込みの出力が後続のレイヤのノードへ(フィールド内のノードの夫々の各々の状態値の代わりに)入力されるので、疎結合される。畳み込みレイヤに関連したカーネルが畳み込み演算を実行し、その出力が次のレイヤへ送られる。畳み込みレイヤで実行される次元削減(dimensionality reduction)は、CNNが大きい画像を処理するようスケーリングすることを可能にする1つの態様である。
【0150】
図9Bは、CNNの畳み込みレイヤ内の例示的な計算段を表す。CNNの畳み込みレイヤへの入力912は、畳み込みレイヤ914の3つ段で処理され得る。3つの段は、畳み込み段916、検出器段918、及びプーリング段920を含むことができる。畳み込みレイヤ914は、連続する畳み込みレイヤへデータを出力することができる。ネットワークの最終の畳み込みレイヤは、出力される特徴マップデータを生成するか、あるいは、全結合レイヤへ入力を供給して、例えば、CNNへの入力に対して分類値を生成することができる。
【0151】
畳み込み段916は、線形活性化の組を生成するよういくつかの畳み込みを並行して実行する。畳み込み段916はアフィン変換を含むことができる。アフィン変換は、線形変換プラス平行移動(a linear transformation plus a translation)として特定され得る任意の変換である。アフィン変換は、回転、平行移動、スケーリング、及びこれらの変換の組み合わせを含む。畳み込み段は、ニューロンに関連した局所領域と決定され得る入力内の特定の領域に接続されている関数(例えば、ニューロン)の出力を計算する。ニューロンは、ニューロンの重みと、ニューロンが接続される局所入力内の領域との間の内積を計算する。畳み込み段916からの出力は、畳み込みレイヤ914の続く段によって処理される線形活性化の組を定義する。
【0152】
線形活性化は、検出器段918によって処理され得る。検出器段918では、非線形活性化は、非線形活性化関数によって処理される。非線形活性化関数は、畳み込みレイヤの各々のフィールドに影響を及ぼさずにネットワーク全体の非線形特性を高める。いくつかのタイプの非線形活性化関数が使用されてよい。1つの特定のタイプは、正規化線形関数(rectified linear unit,ReLU)であり、これは、活性がゼロで閾値化されるように、f(x)=max(0,x)と定義された活性化関数を使用する。
【0153】
プーリング段920は、畳み込みレイヤ906の出力を近くの出力の要約統計量で置き換えるプーリング関数を使用する。プーリング関数は、入力への小さい並進がプールされた出力を変更しないように、ニューラルネットワークに並進不変性を導入するために使用され得る。局所並進に対する不変性は、入力データでの特徴の存在が特徴の正確な位置よりも重要であるシナリオで有用であることができる。最大プーリング(max pooling)、平均プーリング(average pooling)、及び12ノルムプーリング(12-norm pooling)を含む様々なタイプのプーリング関数が、プーリング段920の間に使用され得る。更には、いくつかのCNN実装はプーリング段を含まない。代わりに、そのような実装は、前の畳み込みレイヤに対してストライドが増大している追加の畳み込み段を代用する。
【0154】
畳み込みレイヤ914からの出力は、次いで、次のレイヤ922によって処理され得る。次のレイヤ922は、追加の畳み込みレイヤ、又は全結合レイヤ908の1つであることができる。例えば、図9Aの第1畳み込みレイヤ904は、第2畳み込みレイヤ906へ出力することができ、一方、第2畳み込みレイヤは、全結合レイヤ908の第1レイヤへ出力することができる。
【0155】
図10は、例となる回帰型ニューラルネットワーク100を表す。回帰型ニューラルネットワーク(RNN)では、ネットワークの前の状態がネットワークの現在の状態の出力に影響を及ぼす。RNNは、様々な機能を用いて様々な方法で構築可能である。RNNの使用は、一般に、前の入力シーケンスに基づいて将来を予測するよう数学モデルを使用することを中心に展開する。例えば、RNNは、前のワードシーケンスを前提として、来たるべきワードを予測するよう統計的言語モデリングを実行するために使用されてよい。表されているRNN1000は、入力ベクトルを受け取る入力レイヤ1002と、回帰関数を実装する隠れレイヤ1004と、前の状態の‘メモリ’を可能にするフィードバックメカニズム1005と、結果を出力する出力レイヤ1006とを有しているものとして記載され得る。RNN1000は、時間ステップに基づいて動作する。所与の時間ステップでのRNNの状態は、フィードバックメカニズム1005を介して前の時間ステップに基づいて影響を及ぼされる。所与の時間ステップについては、隠れレイヤ1004の状態は、前の状態と、現在の時間ステップでの入力とによって定義される。第1時間ステップでの最初の入力(x)が隠れレイヤ1004によって処理され得る。第2の入力(x)は、最初の入力(x)の処理中に決定される状態情報を用いて隠れレイヤ1004によって処理され得る。所与の状態はs=f(Ux+Wst-1)と計算され得る。このとき、U及びWはパラメータ行列である。関数fは、一般的に、双曲線正接関数(hyperbolic tangent function)(Tanh)又は正規化線形関数f(x)=max(0,x)などの非線形性である。しかし、隠れレイヤ1004で使用される具体的な数学関数は、RNN1000の具体的な実装詳細に応じて様々であることができる。
【0156】
記載されている基本的なCNN及びRNNネットワークに加えて、それらのネットワークに対する変形が可能であり得る。RNNの変形の一例は、長・短期記憶(long short term memory,LSTM)RNNである。LSTM RNNは、より長い言語シーケンスを処理するために必要であり得る長期依存を学習することが可能である。CNNの変形例は、CNNと類似した構造を有し、ディープ・ビリーフ・ネットワーク(deep belief network)と類似した方法で訓練される畳み込みディープ・ビリーフ・ネットワークである。ディープ・ビリーフ・ネットワーク(DBN)は、確率論的な(ランダムな)変数の複数のレイヤからなる生成ニューラルネットワークである。DBNは、教師なしグリーディ学習を用いてレイヤごとに訓練され得る。DBNの学習された重みが、次いで、ニューラルネットワークのための重みの最適な初期セットを決定することによって、予め訓練されたニューラルネットワークを提供するために使用され得る。
【0157】
図11は、ディープニューラルネットワークの訓練及びデプロイを表す。所与のネットワークがタスクに対して構造化されると、ニューラルネットワークは、訓練データセット1102を用いて訓練される。様々な訓練フレームワーク1104が、訓練プロセスのハードウェアアクセラレーションを可能にするよう開発されている。例えば、図6の機械学習フレームワーク604が訓練フレームワーク1104として構成されてよい。訓練フレームワーク1104は、訓練されていないニューラルネットワーク1106につながり、訓練されていないニューラルネットワーク1106が、訓練されたニューラルネットワーク1108を生成するよう、本願で記載されている並列処理リソースを用いて訓練されることを可能にすることができる。
【0158】
訓練プロセスを開始するために、初期重みが、ランダムに、又はディープ・ビリーフ・ネットワークを用いて予め訓練することによって、選択されてよい。次いで、訓練サイクルは、教師あり又は教師なしのいずれかの方法で実行される。
【0159】
教師あり学習は、例えば、訓練データセット1112が、入力に対する所望の出力と対にされた入力を含む場合、又は訓練データセットが、既知の出力を有する入力を含み、ニューラルネットワークの出力が手動で格付けされる場合など、仲介された動作(mediated operation)として訓練が実行される学習方法である。ネットワークは、入力を処理し、得られた出力を、期待されている又は望まれている出力の組と比較する。次いで、エラーがシステムを通って後方伝搬される。訓練フレームワーク1104は、訓練されていないニューラルネットワーク1106を制御する重みを調整することができる。訓練フレームワーク1104は、訓練されていないニューラルネットワーク1106が、既知の入力データに基づいて正しい答えを生成することに適したモデルに向かってどれくらい上手く収束しているかをモニタするツールを提供することができる。訓練プロセスは、ネットワークの重みが、ニューラルネットワークによって生成される出力を精緻化するよう調整されるように、繰り返し行われる。訓練プロセスは、ニューラルネットワークが、訓練されたニューラルネットワーク1108に関連した統計的に望ましい制度に達するまで、続くことができる。訓練されたニューラルネットワーク1108は、次いで、新しいデータ1102の入力に基づいて推論結果1114を生成するために任意の数の機械学習動作を実装するようデプロイされ得る。
【0160】
教師なし学習は、ネットワークがラベルなしデータを用いて自身を訓練しようと試みる学習モデルである。よって、教師なし学習については、訓練データセット1112は、如何なる関連付けられた出力データも伴わない入力を含むことになる。訓練されていないニューラルネットワーク1106は、ラベルなし入力内のグルーピングを学習することができ、個々の入力が全体のデータセットにどのように関係しているかを決定することができる。教師なし訓練は、データの次元を削減するのに有用な動作を実行することが可能な訓練されたニューラルネットワーク1108の一種である自己組織化マップ(self-organizing map)を生成するために使用され得る。教師なし訓練はまた、異常検出を実行するために使用され得る。これは、データの正常パターンから外れている入力データセット内のデータポイントの識別を可能にする。
【0161】
教師あり及び教師なし訓練の変形も用いられてよい。半教師あり学習は、訓練データセット1112が同じ分布のラベルあり及びラベルなしデータの混合を含む技術である。増分学習は、入力データがモデルを更に訓練するために連続して使用され得る教師あり学習の変形である。増分学習は、訓練されたニューラルネットワーク1108が、最初の訓練中にネットワーク内に植え付けられた知識を忘れずに新しいデータ1112に適応することを可能にする。
【0162】
教師ありか教師なしかに関わらず、特にディープニューラルネットワークのための訓練プロセスは、単一の計算ノードにとっては計算負荷が高すぎることがある。単一の計算ノードを使用する代わりに、計算ノードの分散ネットワークが、訓練プロセスを加速させるために使用され得る。
【0163】
図12は、分散学習(distributed learning)を表すブロック図である。分散学習は、ニューラルネットワークの教師あり又は教師なし訓練を実行するために複数の分散した計算ノードを使用する訓練モデルである。分散した計算ノードは夫々、1つ以上のホストプロセッサと、図7で見られたような高並列汎用グラフィクス処理ユニット700などの汎用処理ノードの1つ以上とを含むことができる。表されているように、分散学習は、モデル並列処理(parallelism)1202、データ並列処理1204、又はモデル及びデータ並列処理の組み合わせ1206を実行することができる。
【0164】
モデル並列処理1202では、分散システム内の異なる計算ノードは、単一のネットワークの異なる部分の訓練計算を実行することができる。例えば、ニューラルネットワークの各レイヤは、分散システムの異なる処理ノードによって訓練され得る。モデル並列処理の利点には、特に大きいモデルにスケーリングする能力がある。ニューラルネットワークの異なるレイヤに関連した計算を分けることは、全てのレイヤの重みが単一の計算ノードのメモリに収まるわけでない非常に大きいニューラルネットワークの訓練を可能にする。いくつかの場合に、モデル並列処理は、大きいニューラルネットワークの教師なし訓練を実行するのに特に有用であることができる。
【0165】
データ並列処理1204では、分散ネットワークの異なるノードは、モデルの完全なインスタンスを有し、各ノードは、データの異なる部分を受け取る。異なるノードからの結果は、次いで、結合される。データ並列処理に対する異なるアプローチが可能である一方で、データ並列訓練アプローチは全て、結果を結合し、各ノード間でモデルパラメータを同期させる技術を必要とする。データの結合に対するアプローチの例には、パラメータ平均化及び更新に基づくデータ並列処理がある。パラメータ平均化は、訓練データのサブセットに関して各ノードを訓練し、大域パラメータ(例えば、重み、バイアス)を各ノードからのパラメータの平均にセットする。パラメータ平均化は、パラメータデータを保持する中央パラメータサーバを使用する。更新に基づくデータ並列処理は、ノードからパラメータサーバへパラメータを転送する代わりに、モデルに対する更新が転送されることを除いて、パラメータ平均化と類似している。更には、更新に基づくデータ並列処理は、非中央集権的な方法で実行可能であり、更新は圧縮され、ノード間で転送される。
【0166】
複合的なモデル及びデータ並列処理1206は、例えば、各計算ノードが複数のGPUを含む分散システムで、実装され得る。各ノードは、モデルの完全なインスタンスを有し、各ノード内の別々のGPUは、モデルの異なる部分を訓練するために使用される。
【0167】
分散学習は、単一のマシンでの訓練と比較して、オーバーヘッドが増大する。しかし、本願で記載されている並列プロセッサ及びGPGPUは夫々、高バンド幅GPU間データ転送及び加速されたリモードデータ同期化を可能にする技術を含め、分散訓練のオーバーヘッドを低減するよう様々な技術を実装することができる。
【0168】
[例となる機械学習応用]
機械学習は、コンピュータビジョン、自動運転及び航法、発話認識、並びに言語処理を含むがこれらに限られない様々な技術的課題を解決するために適用され得る。コンピュータビジョンは、従来から、機械学習応用の最も活発な研究分野の1つである。コンピュータビジョンの応用は、顔認識などのヒトの視覚能力を再現することから、視覚能力の新たなカテゴリを作り出すことまで多岐にわたる。例えば、コンピュータビジョンアプリケーションは、映像内で見ることができる対象に引き起こされた振動から音波を認識するよう構成され得る。並列プロセッサにより加速された機械学習は、コンピュータビジョンアプリケーションが、以前に実現可能であったよりも相当に大きい訓練データセットを用いて訓練されることを可能にし、かつ、推論システムが、より低電力の並列プロセッサを用いてデプロイされることを可能にする。
【0169】
並列プロセッサにより加速された機械学習は、レーン及び道路標識認識、障害物回避、ナビゲーション、並びに運転制御を含む自動運転用途がある。加速された機械学習技術は、特定の訓練入力に対する適切な応答を定義するデータセットに基づいて運転モデルを訓練するために使用され得る。本願で記載されている並列プロセッサは、自動運転ソリューションのために使用されるますます複雑なニューラルネットワークの急速訓練を可能にすることができ、自律走行車への組み込みに適したモバイルプラットフォームにおける低電力推論プロセッサのデプロイを可能にする。
【0170】
並列プロセッサにより加速されたディープニューラルネットワークは、自動発話認識(automatic speech recognition,ASR)に対する機械学習アプローチを可能にしてきた。ASRは、入力された音響シーケンスを前提として最も確からしい言語シーケンスを計算する関数の生成を含む。ディープニューラルネットワークを使用する加速された機械学習は、ASRのために従前使用されていた隠れマルコフモデル(hidden Markov model,HMM)及びガウス混合モデル(Gaussian mixture models,GMM)の置換を可能にしている。
【0171】
並列プロセッサにより加速された機械学習はまた、自然言語処理を加速させるためにも使用され得る。自動学習プロシージャは、誤りのある又は聞き慣れない入力に対してロバストであるモデルを生成するために統計的推論アルゴリズムを利用することができる。例となる自然言語プロセッサアプリケーションには、ヒトの言語間の自動機械翻訳がある。
【0172】
機械学習のために使用される並列処理プラットフォームは、訓練プラットフォーム及びデプロイプラットフォームに分けられ得る。訓練プラットフォームは、一般的に高並列であり、マルチGPU単一ノード訓練及びマルチノードマルチGPU訓練を加速させる最適化を含む。訓練に適した並列プロセッサの例には、図7の汎用グラフィクス処理ユニット700及び図8のマルチGPUコンピューティングシステム800がある。対照的に、デプロイされた機械学習プラットフォームは、一般的に、カメラ、自律ロボット、及び自律走行車などの製品での使用に適した、より低電力の並列プロセッサを含む。
【0173】
図13は、訓練されたモデルを用いて推論を行うのに適した例示的な推論システム・オン・ア・チップ(SOC)1300を表す。SOC1300は、メディアプロセッサ1302、ビジョンプロセッサ1304、GPGPU1306、及びマルチコアプロセッサ1308を含む処理コンポーネントを組み込むことができる。SOC1300は、処理コンポーネントの夫々によってアクセス可能である共有されたオンチップデータプールを可能にすることができるオンチップメモリ1305を更に含むことができる。処理コンポーネントは、自律走行車及び自律ロボットを含む様々な機械学習プラットフォームへのデプロイを可能にするよう低電力動作のために最適化され得る。例えば、SOC1300の1つの実施は、自律走行車のための主制御システムの部分として使用され得る。SOC1300が自律走行車での使用のために構成される場合に、SOCは、デプロイ権限の関連した機能安全標準に従うよう設計及び構成される。
【0174】
動作中、メディアプロセッサ1302及びビジョンプロセッサ1304は、コンピュータビジョン動作を加速させるよう協働することができる。メディアプロセッサ1302は、複数の高解像度(例えば、4K,8K)ビデオストリームの低遅延復号化を可能にすることができる。復号されたビデオストリームは、オンチップメモリ1305内のバッファに書き込まれ得る。ビジョンプロセッサ1304は、次いで、訓練された画像認識モデルを用いてフレームを処理することに備えて、復号されたビデオをパースし、復号されたビデオのフレームに対して予備処理動作を実行することができる。例えば、ビジョンプロセッサ1304は、高解像度ビデオデータに対して画像認識を実行するために使用されるCNNの畳み込み演算を加速させることができ、一方、バックエンドモデル計算は、GPGPU1306によって実行される。
【0175】
マルチコアプロセッサ1308は、メディアプロセッサ1302及びビジョンプロセッサ1304によって実行されるデータ転送及び共有メモリ動作の順序付け及び同期化を支援する制御ロジックを含むことができる。マルチコアプロセッサ1308はまた、GPGPU1306の推論計算能力を利用することができるソフトウェアアプリケーションを実行するようアプリケーションプロセッサとして動作することもできる。例えば、ナビゲーション及び駆動ロジックの少なくとも一部は、マルチコアプロセッサ1308で実行されるソフトウェアで実装され得る。そのようなソフトウェアは、GPGPU1306に対して直接に計算ワークロードを発行することができ、あるいは、計算ワークロードは、これらの動作の少なくとも一部をGPGPU1306にオフロードすることができるマルチコアプロセッサ1308に対して発行され得る。
【0176】
GPGPU1306は、汎用グラフィクス処理ユニット700内の計算クラスタ706A~706Hの低電力構成などの計算クラスタを含むことができる。GPGPU1306内の計算クラスタは、訓練されたニューラルネットワークに対して推論計算を実行するよう特に最適化される命令をサポートすることができる。例えば、GPGPU1306は、8ビット及び4ビット整数ベクトル演算などの低精度計算を実行するための命令をサポートすることができる。
【0177】
[更なる例となるグラフィクス処理システム]
上述された実施形態の詳細は、以下で説明されるグラフィクス処理システム及びデバイス内に組み込まれ得る。図14乃至図26のグラフィクス処理システム及びデバイスは、ありとあらゆる上記の技術を実装することができる代替のシステム及びグラフィクス処理ハードウェアを表す。
【0178】
図14は、実施形態に従う処理システム1400のブロック図である。システム1400は、シングルプロセッサデスクトップシステム、マルチプロセッサワークステーションシステム、又は多数のプロセッサ1402又はプロセッサコア1407を備えたサーバシステムで使用されてよい。一実施形態において、システム1400は、ローカル又はワイドエリアネットワークへの有線又は無線接続を備えたインターネット・オブ・シングス(IoT)デバイス内など携帯型、手持ち式、埋め込み型デバイスで使用されるシステム・オン・ア・チップ(SoC)集積回路内に組み込まれた処理プラットフォームである。
【0179】
一実施形態において、システム1400は、サーバベースのゲームプラットフォーム;ゲーム及びメディアコンソールを含むゲームコンソール;携帯型ゲームコンソール、手持ち式ゲーム機、又はオンラインゲーム機を含むか、それと結合するか、又はその中に組み込まれることが可能である。いくつかの実施形態において、システム1400は、携帯電話機、スマートフォン、タブレットコンピュータデバイス、又はモバイルインターネット接続デバイス、例えば、低内部記憶容量のラップトップ、の部分である。処理システム1400はまた、スマートウォッチウェラブルデバイスなどのウェアラブルデバイス;現実世界の視覚、音声又は触覚経験を補完するよう視覚、音声又は触覚出力を供給するか、あるいは、テキスト、音声、映像、ホログラフィック画像若しくは映像、又は触覚フィードバックを供給する拡張現実(AR)又は仮想現実(VR)機能により強化されたスマートアイウェア又は衣服;あるいは、他の仮想現実(VR)デバイスを含むか、それと結合するか、又はその中に組み込まれることも可能である。いくつかの実施形態において、処理システム1400は、テレビ受像機又はセットトップボックスデバイスを含むか、あるいは、その部分である。
【0180】
いくつかの実施形態において、システム1400は、バス、トレーラトラック、自動車、原動機付き又は電動自転車、飛行機又はグライダー(あるいは、それらの任意の組み合わせ)などの自動運転式輸送手段を含むか、それと結合するか、又はその中に組み込まれることが可能である。自動運転式輸送手段は、輸送手段の周りで検知された環境を処理するためにシステム1400を用いてよい。
【0181】
いくつかの実施形態において、1つ以上のプロセッサ1402は夫々、実行時に、システム又はユーザソフトウェアのための動作を実行する命令を処理する1つ以上のプロセッサコア1407を含む。いくつかの実施形態において、1つ以上のプロセッサコア1407のうちの少なくとも1つは、特定の命令セット1409を処理するよう構成される。いくつかの実施形態において、命令セット1409は、複数命令セットコンピューティング(Complex Instruction Set Computing,CISC)、縮小命令セットコンピューティング(Reduced Instruction Set Computing,RISC)、又は超長命令語(Very Long Instruction Word,VLIW)によるコンピューティングを促進してよい。1つ以上のプロセッサコア1407は、異なる命令セット1409を処理してもよい。異なる命令セット1409は、他の命令セットのエミュレーションを促進する命令を含んでよい。プロセッサコア1407はまた、デジタル信号プロセッサ(Digital Signal Processor,DSP)などの他の処理デバイスを含んでもよい。
【0182】
いくつかの実施形態において、プロセッサ1402は、キャッシュメモリ1404を含む。アーキテクチャに応じて、プロセッサ1402は、単一内部キャッシュ、又は複数レベルの内部キャッシュを有することができる。いくつかの実施形態において、キャッシュメモリは、プロセッサ1402の様々なコンポーネントの間で共有される。いくつかの実施形態において、プロセッサ1402はまた、外部キャッシュ(例えば、レベル-3(L3)キャッシュ又はラストレベルキャッシュ(LLC))(図示せず)も使用する。外部キャッシュは、既知のキャッシュコヒーレンス技術を用いてプロセッサコア1407の間で共有されてよい。プロセッサ1402には、レジスタファイル1406が更に含まれ得る。レジスタファイル1406は、異なるタイプのデータを記憶する異なるタイプのレジスタ(例えば、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、及び命令ポインタレジスタ)を含んでよい。いくつかのレジスタは、汎用のレジスタであってよく、一方、他のレジスタは、プロセッサ1402の設計に特有であってよい。
【0183】
いくつかの実施形態において、1つ以上のプロセッサ1402は、アドレス、データ、又は制御信号などの通信信号をプロセッサ1402とシステム1400内の他のコンポーネントとの間で伝送するよう1つ以上のインターフェースバス1410と結合される。インターフェースバス1410は、一実施形態において、ダイレクト・メディア・インターフェース(Direct Media Interface,DMI)バスの変形などのプロセッサバスであることができる。しかし、プロセッサバスは、DMIバスに限定されず、1つ以上のペリフェラル・コンポーネント・インターコネクト(例えば、PCI、PCI Express)バス、メモリバス、又は他のタイプのインターフェースバスを含んでもよい。一実施形態において、プロセッサ1402は、集積メモリコントローラ1416及びプラットフォームコントローラハブ1430を含む。メモリコントローラ1416は、メモリデバイスとシステム1400の他のコンポーネントとの間の通信を助け、一方、プラットフォームコントローラハブ(PCH)1430は、ローカルI/Oバスを介したI/Oデバイスへの接続を提供する。
【0184】
メモリデバイス1420は、動的ランダム・アクセス・メモリ(DRAM)デバイス、静的ランダム・アクセス・メモリ(SRAM)デバイス、フラッシュメモリデバイス、相変化メモリデバイス、又はプロセスメモリとして機能するよう適切な性能を備えたその他メモリデバイスであることができる。一実施形態において、メモリデバイス1420は、1つ以上のプロセッサ1402がアプリケーション又はプロセスを実行するときに使用されるデータ1422及び命令1421を記憶するために、システム1400のためのシステムメモリとして動作することができる。メモリコントローラ1416はまた、任意の外部グラフィクスプロセッサ1418とも結合する。外部グラフィクスプロセッサ1418は、グラフィクス及びメディア操作を実行するようプロセッサ1402内の1つ以上のグラフィクスプロセッサ1408と通信してよい。いくつかの実施形態において、グラフィクス、メディア、及び/又は計算操作は、グラフィクス、メディア、又は計算操作の特殊化した組を実行するよう構成され得るコプロセッサであるアクセラレータ1412によって支援されてよい。例えば、一実施形態において、アクセラレータ1412は、機械学習又は計算操作を最適化するために使用される行列乗算アクセラレータである。一実施形態において、アクセラレータ1412は、グラフィクスプロセッサ1408と協力してレイトレーシング動作を実行するために使用され得るレイトレーシングアクセラレータである。いくつかの実施形態において、表示デバイス1411は、プロセッサ1402へ接続することができる。表示デバイス1411は、モバイル電子機器若しくはラップトップデバイスで見られるような内蔵表示デバイス、又は表示インターフェース(例えば、DisplayPortなど)を介して取り付けられた外部表示デバイス、の1つ以上であることができる。一実施形態において、表示デバイス1411は、仮想現実(VR)アプリケーション又は拡張現実(AR)アプリケーションで使用される立体視表示デバイスなどのヘッドマウント型ディスプレイ(HMD)であることができる。
【0185】
いくつかの実施形態において、プラットフォームコントローラハブ1430は、周辺機器が高速I/Oバスを介してメモリデバイス1420及びプロセッサ1402へ接続することを可能にする。I/Oペリフェラルは、オーディオコントローラ1446、ネットワークデバイス1434、ファームウェアインターフェース1428、無線トランシーバ1426、タッチセンサ1425、データ記憶デバイス1424(例えば、不揮発性メモリ、揮発性メモリ、ハードディスクドライブ、フラッシュメモリ、NAND、3D NAND、3D XPoint、など)を含むが、これらに限られない。データ記憶デバイス1424は、ペリフェラル・コンポーネント・インターコネクト(例えば、PCI、PCI Express)バスなどのペリフェラルバスを介して又はストレージインターフェース(例えば、SATA)を介して接続することができる。タッチセンサ1425は、タッチスクリーンセンサ、圧力センサ、又は指紋センサを含むことができる。無線トランシーバ1426は、Wi-Fiトランシーバ、Bluetooth(登録商標)トランシーバ、又はモバイルネットワークトランシーバ、例えば、3G、4G、5G、又はロング・ターム・エボリューション(LTE)トランシーバであることができる。ファームウェアインターフェース1428は、システムファームウェアとの通信を可能にし、例えば、ユニファイド・エクステンシブル・ファームウェア・インターフェース(unified extensible firmware interface,UEFI)であることができる。ネットワークコントローラ1434は、有線ネットワークへのネットワーク接続を可能にすることができる。いくつかの実施形態において、高性能ネットワークコントローラ(図示せず)がインターフェースバス1410と結合する。オーディオコントローラ1446は、一実施形態において、マルチチャネル・ハイディフィニション・オーディオコントローラである。一実施形態において、システム1400は、レガシー(例えば、Personal System 2(PS/2))デバイスをシステムへ結合する任意のレガシーI/Oコントローラ1440を含む。プラットフォームコントローラハブ1430はまた、キーボード及びマウス1443の組み合わせ、カメラ1444、又は他のUSB入力デバイスなどの入力デバイスを接続する1つ以上のユニバーサル・シリアル・バス(USB)コントローラ1442へ接続することもできる。
【0186】
明らかなように、示されているシステム1400は、例であって限定ではなく、別なふうに構成される他のタイプのデータ処理システムも使用されてよい。例えば、メモリコントローラ1416及びプラットフォームコントローラハブ1430のインスタンスは、外部グラフィクスプロセッサ1418などの分離した外部グラフィクスプロセッサに組み込まれてもよい。一実施形態において、プラットフォームコントローラハブ1430及び/又はメモリコントローラ1416は、1つ以上のプロセッサ1402の外であってよい。例えば、システム1400は、外付けのメモリコントローラ1416及びプラットフォームコントローラハブ1430を含むことができ、これらは、プロセッサ1402と通信するシステムチップセット内のメモリコントローラハブ及びペリフェラルコントローラハブとして構成されてよい。
【0187】
例えば、回路基板(「スレッド(sleds)」)が使用可能であり、その上には、CPU、メモリ、及び他のコンポーネントなどのコンポーネントが載置され、熱性能を向上させるよう設計される。いくつかの例では、プロセッサなどの処理コンポーネントは、スレッドの上面に置かれ、一方、DIMMなどの近くのメモリは、スレッドの底面に置かれる。この設計によってもたらされる強化された気流の結果として、コンポーネントは、通常のシステムよりも高い周波数及び電力レベルで動作して、性能を向上させ得る。更に、スレッドは、ラック内の電源及びデータ通信ケーブルと盲目的に結合するよう構成され、それによって、迅速な取り外し、アップグレード、再インストール、及び/又は交換が可能である。同様に、プロセッサ、アクセラレータ、メモリ、及びデータ記憶ドライブなどの、スレッドに載置されている個々のコンポーネントは、相互の間隔を広げられることで容易にアップグレードされるよう構成される。実例となる実施形態では、コンポーネントは、それらの真正性を証明するためのハードウェア認証機能を更に含む。
【0188】
データセンターは、Ethernet(登録商標)及びOmni-Pathを含む複数の他のネットワークアーキテクチャをサポートする単一のネットワークアーキテクチャ(「ファブリック」)を利用することができる。スレッドは、光ファイバを介してスイッチへ結合可能であり、これは、典型的なツイステッド・ペア・ケーブル(カテゴリ5、カテゴリ5e、カテゴリ6、など)よりも高いバンド幅及び低いレイテンシをもたらす。高バンド幅、低レイテンシの相互接続及びネットワークアーキテクチャにより、データセンターは、使用中に、物理的に構成要素に分けられているメモリ、アクセラレータ(例えば、GPU、グラフィクスアクセラレータ、FPGA、ASIC、ニューラルネットワーク及び/又は人工知能アクセラレータ、など)及びデータ記憶ドライブなどのリソースをプールし、それらを、必要に応じて計算リソース(例えば、プロセッサ)に提供して、計算リソースが、プールされたリソースに、それらがあたかもローカルであるかのようにアクセスすることを可能にする。
【0189】
電力供給又は電源は、電圧及び/又は電流をシステム1400又は本願で記載されているいずれかのコンポーネント若しくはシステムに供給することができる。一例では、電力供給は、壁コンセントにプラグを差し込むようAC-DC(交流から直流)アダプタを含む。そのようなAC電力は、再生可能エネルギ(例えば、太陽エネルギ)電源であることができる。一例では、電源は、外部AC-DCコンバータなどのDC電源を含む。一例では、電源又は電力供給は、充電野への近接により充電する無線充電ハードウェアを含む。一例では、電源は、内蔵バッテリ、交流電源、運動に基づいた電源、太陽電源、又は燃料電池を含むことができる。
【0190】
図15は、1つ以上のプロセッサコア1502A~1502N、集積メモリコントローラ1514、及び集積グラフィクスプロセッサ1508を備えたプロセッサ1500の実施形態のブロック図である。本願のいずれかの他の図の要素と同じ参照番号(又は名称)を持っている図15のこれらの要素は、本願のどこかで記載されているのと同じように動作又は機能することができるが、そのように限定されない。プロセッサ1500は、破線ボックスで表されている追加コア1502Nまでの追加コアを含むことができる。プロセッサコア1502A~1502Nの夫々は、1つ以上の内部キャッシュユニット1504A~1504Nを含む。いくつかの実施形態において、各プロセッサコアはまた、1つ以上の共有キャッシュユニット1506へのアクセスも有する。
【0191】
内部キャッシュユニット1504A~1504N及び共有キャッシュユニット1506は、プロセッサ1500内のキャッシュメモリヒエラルキを表す。キャッシュメモリヒエラルキは、各プロセッサコア内の少なくとも1つのレベルの命令及びデータキャッシュと、レベル2(L2)、レベル3(L3)、レベル4(L4)、又は他のレベルのキャッシュなどの1つ以上のレベルの共有ミッドレベルキャッシュとを含んでよく、外部メモリの前の最も高いレベルのキャッシュは、LLCと分類される。いくつかの実施形態において、キャッシュコヒーレンシロジックは、様々なキャッシュユニット1506及び1504A~1504Nの間でコヒーレンシを保つ。
【0192】
いくつかの実施形態において、プロセッサ1500はまた、1つ以上のバスコントローラユニット1516の組と、システムエージェントコア1510とを含んでもよい。1つ以上のバスコントローラユニット1516は、1つ以上のPCI又はPCIエクスプレスバスなどのペリフェラルバスの組を管理する。システムエージェントコア1510は、様々なプロセッサコンポーネントのための管理機能性を提供する。いくつかの実施形態において、システムエージェントコア1510は、様々な外部メモリデバイス(図示せず)へのアクセスを管理する1つ以上の集積メモリコントローラ1514を含む。
【0193】
いくつかの実施形態において、プロセッサコア1502A~1502Nのうちの1つ以上は、同時のマルチスレッディングのサポートを含む。そのような実施形態では、システムエージェントコア1510は、マルチスレッド処理中にコア1502A~1502Nを協調及び作動させるためのコンポーネントを含む。システムエージェントコア1510は、プロセッサコア1502A~1502N及びグラフィクスプロセッサ1508の電力状態を調整するロジック及びコンポーネントを含む電力制御ユニット(PCU)を更に含んでもよい。
【0194】
いくつかの実施形態において、プロセッサ1500は、グラフィクス処理動作を実行するグラフィクスプロセッサ1508を更に含む。いくつかの実施形態において、グラフィクスプロセッサ1508は、共有キャッシュユニット1506の組、及び1つ以上の集積メモリコントローラ1514を含むシステムエージェントコア1510と結合する。いくつかの実施形態において、システムエージェントコア1510はまた、結合された1つ以上のディスプレイへのグラフィクスプロセッサ出力を駆動するディスプレイコントローラ1511も含む。いくつかの実施形態において、ディスプレイコントローラ1511はまた、少なくとも1つのインターコネクトを介してグラフィクスプロセッサと結合された別個のモジュールであってもよく、あるいは、グラフィクスプロセッサ1508内に組み込まれてもよい。
【0195】
いくつかの実施形態において、リングベースのインターコネクトユニット1512が、プロセッサ1500の内部コンポーネントを結合するために使用される。しかし、代替のインターコネクトユニットが使用されてもよく、例えば、ポイント・ツー・ポイントインターコネクト、スイッチドインターコネクト、又は当該技術でよく知られている技術を含む他の技術がある。いくつかの実施形態において、グラフィクスプロセッサ1508は、I/Oリンク1513を介してリングインターコネクト1512と結合する。
【0196】
例となるI/Oリンク1513は、eDRAMモジュールなどの高性能埋め込みメモリモジュール1518と様々なプロセッサコンポーネントとの間の通信を助けるパッケージI/Oインターコネクトを含む多種多様なI/Oインターコネクトのうちの少なくとも1つを表す。いくつかの実施形態において、プロセッサコア1502A~1502N及びグラフィクスプロセッサ1508の夫々は、埋め込みメモリモジュール1518を共有ラストレベルキャッシュとして使用することができる。
【0197】
いくつかの実施形態において、プロセッサコア1502A~1502Nは、同じ命令セットアーキテクチャを実行する同種のコアである。他の実施形態では、プロセッサコア1502A~1502Nは、命令セットアーキテクチャ(ISA)に関して異種であり、プロセッサコア1502A~1502Nのうちの1つ以上は、第1命令セットを実行し、一方、残りのコアのうちの少なくとも1つは、第1命令セットのサブセット又は異なる命令セットを実行する。一実施形態において、プロセッサコア1502A~1502Nは、マイクロアーキテクチャに関して異種であり、相対的により高い電力消費を有する1つ以上のコアは、より低い電力消費を有する1つ以上の電力コアと結合する。一実施形態において、プロセッサコア1502A~1502Nは、計算能力に関して異種である。更には、プロセッサ1500は、1つ以上のチップ上で、あるいは、他のコンポーネントに加えて、表されているコンポーネントを備えたSoC集積回路として、実装され得る。
【0198】
図16は、グラフィクスプロセッサ1600のブロック図であり、グラフィクスプロセッサ1600は、別個のグラフィクス処理ユニットであってよく、あるいは、複数の処理コア、又はメモリデバイス若しくはネットワークインターフェースを含むがこれに限られない他の半導体デバイスと一体化されたグラフィクスプロセッサであってもよい。いくつかの実施形態において、グラフィクスプロセッサは、メモリマップドI/Oインターフェースを介してグラフィクスプロセッサ上のレジスタと、及びプロセッサメモリ内に置かれたコマンドと通信する。いくつかの実施形態において、グラフィクスプロセッサ1600は、メモリにアクセスするためのメモリインターフェース1614を含む。メモリインターフェース1614は、ローカルメモリ、ひとついじょうの内部キャッシュ、1つ以上の共有外部キャッシュ、及び/又はシステムメモリへのインターフェースであることができる。
【0199】
いくつかの実施形態において、グラフィクスプロセッサ1600はまた、表示デバイス1618への表示出力データを駆動するディスプレイコントローラ1602も含む。ディスプレイコントローラ1602は、ビデオの複数のレイヤ又はユーザインターフェース要素の表示及び合成のための1つ以上のオーバーレイプレーン用のハードウェアを含む。表示デバイス1618は、内蔵又は外付け表示デバイスであることができる。一実施形態において、表示デバイス1618は、仮想現実(VR)表示デバイス又は拡張現実(AR)表示デバイスなどのヘッドマウント型表示デバイスである。いくつかの実施形態において、グラフィクスプロセッサ1600は、MPEG-2などのMPEG(Moving Picture Experts Group)フォーマット、H.265/MPEG-4 AVCなどのAVC(Advanced Video Coding)フォーマット、H.265/HEVC、AOMedia(Alliance for Open Media)VP8、VP9、及びSMPTE(Society of Motion Picture & Television Engineers)421M/VC-1、並びにJPEGなどのJPEG(Joint Photographic Experts Group)フォーマット及びMJPEG(Motion JPEG)フォーマットを含むがこれらに限られない1つ以上のメディア符号化フォーマットへ、又はそのようなフォーマットから、又はそれらのフォーマットの間でメディアを符号化、復号化、又はトランスコードするビデオコーデックエンジン1606を含む。
【0200】
いくつかの実施形態において、グラフィクスプロセッサ1600は、例えば、ビット境界ブロック転送(bit-boundary block transfer)を含む2次元(2D)のラスタライザ動作を実行するブロック画像転送(BLIT)エンジン1604を含む。しかし、一実施形態では、2Dグラフィクス操作は、グラフィクス処理エンジン(GPE)1610の1つ以上のコンポーネントを用いて実行される。いくつかの実施形態において、GPE1610は、3次元(3D)グラフィクス操作及びメディア操作を含むグラフィクス操作を実行する計算エンジンである。
【0201】
いくつかの実施形態において、GPE1610は、3Dプリミティブ形状(例えば、長方形、三角形、など)に従って動作する処理機能を使用した3次元画像及びシーンのレンダリングなどの3D操作を実行する3Dパイプライン1612を含む。3Dパイプライン1612は、要素内で様々なタスクを実行しかつ/あるいは実行スレッドを3D/メディアサブシステム1615に対して生成するプログラム可能な固定された機能を含む。3Dパイプライン1612が、メディア操作を実行するために使用され得る一方で、GPE1610の実施形態は、ビデオ後処理及び画像エンハンスメントなどのメディア操作を実行するために特に使用されるメディアパイプライン1616も含む。
【0202】
いくつかの実施形態において、メディアパイプライン1616は、ビデオコーデックエンジン1606の代わりに、又はその代理として、ビデオ復号化アクセラレーション、ビデオインターレース解除、及びビデオ符号化アクセラレーションなどの1つ以上の特殊化したメディア操作を実行する固定された機能又はプログラム可能なロジックユニットを含む。いくつかの実施形態において、メディアパイプライン1616は、3D/メディアサブシステム1615で実行されるスレッドを生成するスレッド生成ユニットを更に含む。生成されたスレッドは、3D/メディアサブシステム1615に含まれる1つ以上のグラフィクス実行ユニットでのメディア操作のための計算を実行する。
【0203】
いくつかの実施形態において、3D/メディアサブシステム1615は、3Dパイプライン1612及びメディアパイプライン1616によって生成されたスレッドを実行するためのロジックを含む。一実施形態において、これらのパイプラインは、スレッド実行要求を3D/メディアサブシステム1615へ送る。3D/メディアサブシステム1615は、様々な要求を調停して、利用可能なスレッド実行リソースにディスパッチするスレッドディスパッチロジックを含む。実行リソースは、3D及びメディアスレッドを処理するグラフィクス実行ユニットのアレイを含む。いくつかの実施形態において、3D/メディアサブシステム1615は、スレッド命令及びデータのための1つ以上の内部キャッシュを含む。いくつかの実施形態において、サブシステムはまた、スレッド間でデータを共有しかつ出力データを記憶するために、レジスタ及びアドレス可能メモリを含む共有メモリを含む。
【0204】
[グラフィクス処理エンジン]
図17は、いくつかの実施形態に従うグラフィクスプロセッサのグラフィクス処理エンジン1710のブロック図である。一実施形態において、グラフィクス処理エンジン(GPE)1710は、図16に示されたGPE1610の変形である。本願のどこかの図の要素と同じ参照番号(又は名称)を持っている図17の要素は、本願のどこかで記載されているのと同じように動作又は機能することができるが、そのように限定されない。例えば、図16の3Dパイプライン1612及びメディアパイプライン1616が表されている。メディアパイプライン1616は、GPE1710のいくつかの実施形態では任意であり、GPE1710内に明示的に含まれてなくてもよい。例えば、少なくとも1つの実施形態では、別個のメディア及び/又は画像プロセッサがGPE1710へ結合される。
【0205】
いくつかの実施形態において、GPE1710は、コマンドストリームを3Dパイプライン1612及び/又はメディアパイプライン1616へ供給するコマンドストリーマ1703と結合するか、又はそれを含む。いくつかの実施形態において、コマンドストリーマ1703は、システムメモリ、又は内部キャッシュメモリ及び共有キャッシュメモリのうちの1つ以上であることができるメモリと結合される。いくつかの実施形態において、コマンドストリーマ1703は、メモリからコマンドを受け取り、コマンドを3Dパイプライン1612及び/又はメディアパイプライン1616へ送る。コマンドは、3Dパイプライン1612及びメディアパイプライン1616に対するコマンドを記憶するリングバッファからフェッチされた指令である。一実施形態において、リングバッファは、複数のコマンドのバッチを記憶しているバッチコマンドバッファを更に含むことができる。3Dパイプライン1612に対するコマンドはまた、例えば、3Dパイプライン1612に対する頂点及びジオメトリデータ、及び/又はメディアパイプライン1616のための画像データ及びメモリオブジェクトなどの、しかしこれらに限られない、メモリに記憶されているデータへの参照を含むこともできる。3Dパイプライン1612及びメディアパイプライン1616は、各々のパイプライン内のロジックにより動作を実行することによって、あるいは、1つ以上の実行スレッドをグラフィクスコアアレイ1714にディスパッチすることによって、コマンド及びデータを処理する。一実施形態において、グラフィクスコアアレイ1714は、グラフィクスコア(例えば、グラフィクスコア1715A、グラフィクスコア1715B)の1つ以上のブロックを含み、各ブロックは、1つ以上のグラフィクスコアを含む。各グラフィクスコアは、グラフィクス及び計算操作を実行する汎用及びグラフィクス特有実行ロジックと、固定機能テクスチャ処理及び/又は機械学習及び人工知能アクセラレーションロジックとを含むグラフィクス実行リソースの組を含む。
【0206】
様々な実施形態において、3Dパイプライン1612は、命令を処理しかつ実行スレッドをグラフィクスコアアレイ1714にディスパッチすることによって、頂点シェーダ、ジオメトリシェーダ、ピクセルシェーダ、フラグメントシェーダ、計算シェーダ、又は他のシェーダプログラムなどの1つ以上のシェーダプログラムを処理する固定機能及びプログラム可能ロジックを含むことができる。グラフィクスコアアレイ1714は、これらのシェーダプログラムを処理する際に使用される実行リソースの統合されたブロックを提供する。グラフィクスコアアレイ1714のグラフィクスコア1715A~1715B内の多目的実行ロジック(例えば、実行ユニット)は、様々な3D APIシェーダ言語のサポートを含み、複数のシェーダに関連した複数の同時実行スレッドを実行することができる。
【0207】
いくつかの実施形態において、グラフィクスコアアレイ1714は、ビデオ及び/又は画像処理などのメディア機能を実行する実行ロジックを含む。一実施形態において、実行ユニットは、グラフィクス処理動作に加えて、並列な汎用計算動作を実行するようプログラム可能である汎用ロジックを含む。汎用ロジックは、図14のプロセッサコア1407又は図15のコア1502A~1502N内の汎用ロジックと並行して又はそれと連動して処理動作を実行することができる。
【0208】
グラフィクスコアアレイ1714でのスレッド実行によって生成された出力データは、統合リターンバッファ(unified return buffer,URB)1718内のメモリへデータを出力することができる。URB1718は、複数のスレッドのデータを記憶することができる。いくつかの実施形態において、URB1718は、グラフィクスコアアレイ1714で実行される異なるスレッド間データを送るために使用されてよい。いくつかの実施形態において、URB1718は、グラフィクスコアアレイ及び共有機能ロジック1720内の固定機能ロジックでのスレッド間の同期化のために更に使用されてよい。
【0209】
いくつかの実施形態において、グラフィクスコアアレイ1714は、アレイが、GPE1710の目標電力及び性能レベルに基づいて可変な数の実行ユニットを夫々が有する可変な数のグラフィクスコアを含むように、スケーリング可能である。一実施形態において、実行リソースは、実行リソースが必要に応じて有効又は無効にされ得るように、動的にスケーリング可能である。
【0210】
グラフィクスコアアレイ1714は、グラフィクスコアアレイ内のグラフィクスコア間で共有される複数のリソースを含む共有機能ロジック1720と結合する。共有機能ロジック1720内の共有機能は、特殊化した補助機能をグラフィクスコアアレイ1714にもたらすハードウェアロジックユニットである。様々な実施形態において、共有機能ロジック1720は、サンプラ1721、マス(math)1722、及びインタースレッド通信(ITC)1723ロジックを含むが、これらに限られない。更に、いくつかの実施形態は、共有機能ロジック1720内の1つ以上のキャッシュ1725を実装する。
【0211】
共有機能は、少なくとも、所与の特殊化した機能に対する需要がグラフィクスコアアレイ1714内に含めるには不十分である場合に、実装される。代わりに、この特殊化した機能の単一のインスタンス化が、共有機能ロジック1720でスタンドアロンのエンティティとして実装され、グラフィクスコアアレイ1714内の実行リソース間で共有される。グラフィクスコアアレイ1714の間で共有され、グラフィクスコアアレイ1714内に含まれる機能の正確な組は、実施形態ごとに様々である。いくつかの実施形態において、グラフィクスコアアレイ1714によって広範に使用される共有機能ロジック1720内の特定の共有機能は、グラフィクスコアアレイ1714内の共有機能ロジック1716内に含まれてもよい。様々な実施形態において、グラフィクスコアアレイ1714内の共有機能ロジック1716は、共有機能ロジック1720内のいくつか又は全てのロジックを含むことができる。一実施形態において、共有機能ロジック1720内の全てのロジック要素は、グラフィクスコアアレイ1714の共有機能ロジック1716内に複製されてよい。一実施形態において、共有機能ロジック1720は、グラフィクスコアアレイ1714内の共有機能ロジック1716を支持して除外される。
【0212】
図18は、本願で記載されているいくつかの実施形態に従うグラフィクスプロセッサコア1800のハードウェアロジックのブロック図である。本願のいずれかの他の図の要素と同じ参照番号(又は名称)を有している図18の要素は、本願のどこかで記載されているのと同じように動作又は機能することができるが、そのように限定されない。表されているグラフィクスプロセッサコア1800は、いくつかの実施形態において、図17のグラフィクスコアアレイ1714内に含まれる。グラフィクスプロセッサコア1800は、コアスライスと時々呼ばれ、モジュールグラフィクスプロセッサ内の1つ又は複数のグラフィクスコアであることができる。グラフィクスプロセッサコア1800は、1つのグラフィクスコアスライスの例であり、本願で記載されているグラフィクスプロセッサは、目標電力及び性能エンベロープに基づいて複数のグラフィクスコアスライスを含んでよい。各グラフィクスプロセッサコア1800は、汎用及び固定機能ロジックのモジュールブロックを含む、サブスライスとも呼ばれる複数のサブコア1801A~1801Fと結合されている固定機能ブロック1830を含むことができる。
【0213】
いくつかの実施形態において、固定機能ブロック1830は、例えば、より低い性能及び/又はより低い電力のグラフィクスプロセッサ実装で、グラフィクスプロセッサコア1800内の全てのサブコアによって共有され得るジオメトリ/固定機能パイプライン1836を含む。様々な実施形態において、ジオメトリ/固定機能パイプライン1836は、3D固定機能パイプライン(例えば、図16及び図17で見られた3Dパイプライン1612)、ビデオフロントエンドユニット、スレッドスポナー(spawner)及びスレッドディスパッチャ、並びに図17の統合リターンバッファ1718などの統合リターンバッファを管理する統合リターンバッファマネージャを含む。
【0214】
一実施形態において、固定機能ブロック1830はまた、グラフィクスSoCインターフェース1837、グラフィクスマイクロコントローラ1838、及びメディアパイプライン1839を含む。グラフィクスSoCインターフェース1837は、グラフィクスプロセッサコア1800とSoC集積回路内の他のプロセッサとの間のインターフェースを提供する。グラフィクスマイクロコントローラ1838は、スレッドディスパッチ、スケジューリング、及びプリエンプションを含むグラフィクスプロセッサコア1800の様々な機能を管理するよう構成可能であるプログラム可能なサブプロセッサである。メディアパイプライン1839(例えば、図16及び図17のメディアパイプライン1616)は、画像及びビデオデータを含むマルチメディアデータの復号化、符号化、前処理、及び/又は後処理を助けるロジックを含む。メディアパイプライン1839は、サブコア1801A~1801F内の計算又はサンプリングロジックへのリクエストによりメディア操作を実装する。
【0215】
一実施形態において、SoCインターフェース1837は、汎用アプリケーションプロセッサコア(例えば、CPU)、かつ/あるいは、共有ラストレベルキャッシュメモリなどのメモリヒエラルキ要素、システムRAM、及び/又は埋め込みオンチップ若しくはオンパッケージDRAMを含むSoC内の他のコンポーネントと通信することをグラフィクスプロセッサコア1800に可能にする。SoCインターフェース1837はまた、カメライメージングパイプラインなどのSoC内の固定機能デバイスとの通信も可能にすることができ、グラフィクスプロセッサコア1800とSoC内のCPUとの間で共有され得るグローバルメモリアトミックの使用を可能にしかつ/あるいはそれを実装する。SoCインターフェース1837はまた、グラフィクスプロセッサコア1800のための電力管理制御を実装し、グラフィクスプロセッサコア1800のクロックドメインとSoC内の他のクロックドメインとの間のインターフェースを可能にすることもできる。一実施形態において、SoCインターフェース1837は、グラフィクスプロセッサ内の1つ以上のグラフィクスコアの夫々へコマンド及び命令を供給するよう構成されるコマンドストリーマ及びグローバルスレッドディスパッチャからのコマンドバッファの受信を可能にする。コマンド及び命令は、メディア操作が実行されるべき場合にメディアパイプライン1839に、あるいは、グラフィクス処理動作が実行されるべきである場合にジオメトリ及び固定機能パイプライン(例えば、ジオメトリ及び固定機能パイプライン1836、ジオメトリ及び固定機能パイプライン1814)にディスパッチされ得る。
【0216】
グラフィクスマイクロコントローラ1838は、グラフィクスプロセッサコア1800のための様々なスケジューリング及び管理タスクを実行するよう構成され得る。一実施形態において、グラフィクスマイクロコントローラ1838は、サブコア1801A~1801F内の実行ユニット(execution unit,EU)アレイ1802A~1802F、1804A~1804F内の様々なグラフィクス並列エンジンに対してグラフィクス及び/又は計算ワークロードスケーリングを実行することができる。このスケジューリングモデルでは、グラフィクスプロセッサコア1800を含むSoCのCPUコアで実行されるホストソフトウェアは、適切なグラフィクスエンジンでスケーリング動作を呼び出す複数のグラフィックプロセッサドアベルのうちの1つにワークロードを発行することができる。スケジューリング動作は、次にどのワークロードを実行すべきかを決定すること、コマンドストリーマにワークロードを発行すること、エンジンで実行されている既存のワークロードをプリエンプトとすること、ワークロードの進捗を管理すること、及びワークロードが完了する場合にホストソフトウェアに通知することを含む。一実施形態において、グラフィクスマイクロコントローラ1838はまた、グラフィクスプロセッサコア1800の低電力又はアイドル状態を促進することができ、グラフィクスプロセッサコア1800に、システム上のオペレーティングシステム及び/又はグラフィクスドライバソフトウェアから独立して低電力状態遷移にわたってグラフィクスプロセッサコア1800内のレジスタにセーブ及びリストアする能力をもたらす。
【0217】
グラフィクスプロセッサコア1800は、表されているサブコア1801A~1801Fよりも多い又は少ない、最大N個までモジュールサブコアを有してよい。N個のサブコアの各組について、グラフィクスプロセッサコア1800はまた、様々なグラフィクス及び計算処理動作を加速させるよう、共有機能ロジック1810、共有及び/又はキャッシュメモリ1812、ジオメトリ/固定機能パイプライン1814、並びに追加の固定機能ロジック1816を含むこともできる。共有機能ロジック1810は、グラフィクスプロセッサコア1800内の各N個のサブコアによって共有され得る図17の共有機能ロジック1720に関連したロジックユニット(例えば、サンプラ、マス、及び/又はインタースレッド通信ロジック)を含むことができる。共有及び/又はキャッシュメモリ1812は、グラフィクスプロセッサコア1800内のN個のサブコア1801A~1801Fの組のためのラストレベルキャッシュであることができ、複数のサブコアによってアクセス可能である共有メモリとしても働くことができる。ジオメトリ/固定機能パイプライン1814は、固定機能ブロック1830内のジオメトリ/固定機能パイプライン1836の代わりに含まれ得、同じ又は類似したロジックユニットを含むことができる。
【0218】
一実施形態において、グラフィクスプロセッサコア1800は、グラフィクスプロセッサコア1800によって使用される様々な固定機能アクセラレーションロジックを含むことができる追加の固定機能ロジック1816を含む。一実施形態において、追加の固定機能ロジック1816は、ポジション・オンリー・シェーディング(position only shading)で使用される追加のジオメトリパイプラインを含む。ポジション・オンリー・シェーディングでは、2つのジオメトリパイプラインが存在し、ジオメトリ/固定機能パイプライン1814、1836内のフルジオメトリパイプラインと、追加の固定機能ロジック1816内に含まれ得る追加のジオメトリパイプラインであるカルパイプラインとである。一実施形態において、カルパイプラインは、フルジオメトリパイプラインの縮小版である。フルパイプライン及びカルパイプラインは、同じアプリケーションの異なるインスタンスを実行することができ、各インスタンスは、別個のコンテキストを有する。ポジション・オンリー・シェーディングは、破棄された三角形(discarded triangles)の長いカル実行(long cull run)を隠すことができ、いくつかのインスタンスにおいては、シェーディングがより早く完了されるのを可能にしている。例えば、1つの実施形態において、追加的な固定機能ロジック1816内のカルパイプラインロジックは、主アプリケーションと並列にポジションシェーダを実行することができ、そして、一般的に、フルパイプラインよりも速く、決定的な結果(critical result)を生成する。ピクセルのフレームバッファへのラスタライゼーション及びレンダリングを実行することなく、カルパイプラインは、頂点の位置属性だけをフェッチし、そして、シェーディングするからである。カルパイプラインは、生成された決定的な結果を使用して、それらの三角形がカリングされるかどうかに関係なく、全ての三角形についての可視性(visibility)情報を計算することができる。フルパイプライン(このインスタンスにおいては、リプレイ(replay)パイプラインと呼ばれ得る)は、最終的にラスタライゼーションフェーズへ渡される可視的な三角形だけをシェーディングするために、カリングされた三角形をスキップように可視性情報を消費することができる。
【0219】
いくつかの実施形態において、追加の固定機能ロジック1816はまた、機械学習訓練又は推論のための最適化を含む実装のために、固定機能行列乗算などの機械学習アクセラレーションロジックも含むことができる。
【0220】
各グラフィクスサブコア1801A~1801F内には、グラフィクスパイプライン、メディアパイプライン、又はシェーダプログラムによるリクエストに応答してグラフィクス、メディア、及び計算操作を実行するために使用され得る実行リソースの組が含まれる。グラフィクスサブコア1801A~1801Fは、複数のEUアレイ1802A~1802F、1804A~1804F、スレッドディスパッチ及びインタースレッド通信(TD/IC)ロジック1803A~1803F、3D(例えば、テクスチャ)サンプラ1805A~1805F、メディアサンプラ1806A~1806F、シェーダプロセッサ1807A~1807F、及び共有ローカルメモリ(SLM)1808A~1808Fを含む。EUアレイ1802A~1802F、1804A~1804Fは夫々、グラフィクス、メディア、計算シェーダプログラムを含むグラフィクス、メディア、又は計算操作のサービスにおいて、浮動小数点及び整数/固定小数点ロジック演算を実行可能な汎用グラフィクス処理ユニットである複数の実行ユニットを含む。TD/ICロジック1803A~1803Fは、サブコア内の実行ユニットについてローカルスレッドディスパッチ及びスレッド制御動作を実行し、サブコアの実行ユニットで実行されるスレッド間の通信を促進する。3Dサンプラ1805A~1805Fは、テクスチャ又は他の3Dグラフィクス関連データをメモリ内に読み込むことができる。3Dサンプラは、所与のテクスチャに関連したテクスチャフォーマット及び構成されたサンプル状態に基づいて異なるようにテクスチャデータを読み込むことができる。メディアサンプラ1806A~1806Fは、メディアデータに関連したタイプ及びフォーマットに基づいて同様の読み込み動作を実行することができる。一実施形態において、各グラフィクスサブコア1801A~1801Fは、代替的に、統合された3D及びメディアサンプラを含むことができる。サブコア1801A~1801Fの夫々の中の実行ユニットで実行されるスレッドは、スレッドグループ内で実行されているスレッドがオンチップメモリの共通プールを用いて実行されることを可能にするよう、各サブコア内の共有ローカルメモリ1808A~1808Fを利用することができる。
【0221】
[実行ユニット]
図19A~19Bは、本願で記載されている実施形態に従って、グラフィクスプロセッサコアで用いられる処理要素のアレイを含むスレッド実行ロジック1900を表す。本願のいずれかの他の図の要素と同じ参照番号(又は名称)を有している図19A~19Bの要素は、本願のどこかで記載されているのと同じように動作又は機能することができるが、そのように限定されない。図19Aは、図18の各サブコア1801A~1801Fにより表されたハードウェアロジックの変形を含むことができるスレッド実行ロジック1900の概要を表す。図19Bは、実行ユニットの内部詳細の例を表す。
【0222】
図19Aに表されているように、いくつかの実施形態において、スレッド実行ロジック1900は、シェーダプロセッサ1902、スレッドディスパッチャ1904、命令キャッシュ1906、複数の実行ユニット1908A~1908Nを含むスケーラブル実行ユニットアレイ、サンプラ1910、データキャッシュ1912、及びデータポート1914を含む。一実施形態において、スケーラブル実行ユニットアレイは、ワークロードの計算要件に基づいて1つ以上の実行ユニット(例えば、実行ユニット1908A、1908B、1908C、1908D、乃至1908N-1及び1908Nのいずれか)を有効又は無効にすることによって、動的にスケーリング可能である。一実施形態において、含まれているコンポーネントは、コンポーネントの夫々へリンクするインターコネクトファブリックを介して相互接続される。いくつかの実施形態において、スレッド実行ロジック1900は、命令キャッシュ1906、データポート1914、サンプラ1910、及び実行ユニット1908A~1908Nのうちの1つ以上を通じて、システムメモリ又はキャッシュメモリなどのメモリへの1つ以上の接続を含む。いくつかの実施形態において、各実行ユニット(例えば、1908A)は、各スレッドについて並行して複数のデータ要素を処理しながら、複数の同時ハードウェアスレッドを実行することができるスタンドアロンのプログラム可能な汎用計算ユニットである。様々な実施形態において、実行ユニット1908A~1908Nのアレイは、任意の数の個別的な実行ユニットを含むようスケーリング可能である。
【0223】
いくつかの実施形態において、実行ユニット1908A~1908Nは、シェーダプログラムを実行するために主として使用される。シェーダプロセッサ1902は、様々なシェーダプログラムを処理し、シェーダプログラムに関連した実行スレッドをスレッドディスパッチャ1904によりディスパッチすることができる。一実施形態において、スレッドディスパッチャは、グラフィクス及びメディアパイプラインからのスレッド開始リクエストを調停し、要求されたスレッドを実行ユニット1908A~1908Nの中の1つ以上の実行ユニットでインスタンス化するロジックを含む。例えば、ジオメトリパイプラインは、頂点、テッセレーション、又はジオメトリシェーダを処理のためにスレッド実行ロジックにディスパッチすることができる。いくつかの実施形態において、スレッドディスパッチャ1904はまた、実行中のシェーダプログラムからのランタイムスレッド生成リクエストを処理することもできる。
【0224】
いくつかの実施形態において、実行ユニット1908A~1908Nは、グラフィクスライブラリ(例えば、Direct 3D及びOpenGL)からのシェーダプログラムが最小限の変換で実行されるように、多くの標準3Dグラフィクスシェーダ命令のネイティブサポートを含む命令セットをサポートする。実行ユニットは、頂点及びジオメトリ処理(例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ)、ピクセル処理(例えば、ピクセルシェーダ、フラグメントシェーダ)、並びに汎用処理(例えば、計算及びメディアシェーダ)をサポートする。実行ユニット1908A~1908Nの夫々は、多重発行(multi-issue)のSIMD(single instruction multiple data)実行が可能であり、マルチスレッド操作は、より高いレイテンシのメモリアクセスに直面して効率的な実行環境を可能にする。各実行ユニット内の各ハードウェアスレッドは、専用の高バンド幅レジスタファイル及び関連する独立したスレッド状態を有する。実行は、整数、単精度及び倍精度浮動小数点演算、SIMD分岐機能、論理演算、超越演算(transcendental operations)、及び他の種々雑多な演算が可能なパイプラインにクロックごとに多重発行する。メモリ又は共有機能の1つからのデータを待つ間、実行ユニット1908A~1908N内の依存関係ロジック(dependency logic)は、要求されているデータが返されるまで、待機中のスレッドをスリープさせる。待機中のスレッドがスリープしている間、ハードウェアリソースは、他のスレッドを処理することにあてられてよい。例えば、頂点シェーダ演算に関連した遅延中に、実行ユニットは、ピクセルシェーダ、フラグメントシェーダ、又は別の頂点シェーダを含む他のタイプのシェーダプログラムの演算を実行することができる。様々な実施形態は、SIMDの使用の代わりとして、又はSIMDの使用に加えて、SIMT(single instruction multiple thread)の使用による実行を使用するよう適用可能である。SIMDコア又は動作への言及は、SIMTにも適用することができ、あるいは、SIMTと組み合わされたSIMDにも適用することができる。
【0225】
実行ユニット1908A~1908Nの中の各実行ユニットは、データ要素のアレイに作用する。データ要素の数は、命令のための「実行サイズ」又はチャネル数である実行チャネルは、命令内のデータ要素アクセス、マスキング、及びフロー制御のための実行のロジックユニットである。チャネルの数は、特定のグラフィクスプロセッサのための物理的な算術論理ユニット(ALU)又は浮動小数点ユニット(FPU)の数とは無関係であり得る。いくつかの実施形態において、実行ユニット1908A~1908Nは、整数及び浮動小数点データタイプをサポートする。
【0226】
実行ユニット命令セットは、SIMD命令を含む。様々なデータ要素が、パックされたデータイプとしてレジスタに記憶可能であり、実行ユニットは、要素のデータサイズに基づいて様々な要素を処理することになる。例えば、256ビットワイドのベクトルに作用する場合に、ベクトルの256ビットがレジスタに記憶され、実行ユニットは、4つの別個の64ビットのパックされたデータ要素(クワッドワード(Quad-Word,QW)サイズデータ要素)、8つの別個の32ビットのパックされたデータ要素(ダブルワード(Double Word,DW)サイズデータ要素)、16個の別個の16ビットのパックされたデータ要素(ワード(W)サイズデータ要素)、又は32個の別個の8ビットデータ要素(バイト(B)サイズデータ要素)としてベクトルに作用する。しかし、異なるベクトル幅及びレジスタサイズが可能である。
【0227】
一実施形態において、1つ以上の実行ユニットは、融合したEUに共通するスレッド制御ロジック(1907A~1907N)を有する融合した実行ユニット1909A~1909Nにまとめられ得る。複数のEUは、EUグループに融合され得る。融合されたEUグループ内の各EUは、別々のSIMDハードウェアスレッドを実行するよう構成され得る。融合されたEUグループ内のEUの数は、実施形態により様々であることができる。更には、様々なSIMD幅がEUごとに実行可能であり、SIMD8、SIMD16、及びSIMD32があるが、これらに限られない。融合されたグラフィクス実行ユニット1909A~1909Nの夫々は、少なくとも2つの実行ユニットを含む。例えば、融合された実行ユニット1909Aは、第1EU1908Aと、第2EU1908Bと、第1EU1908A及び第2EU1908Bに共通する第3制御ロジック1907Aとを含む。スレッド制御ロジック1907Aは、融合されたグラフィクス実行ユニット1909Aで実行されるスレッドを制御して、融合された実行ユニット1909A~1909N内の各EUが共通命令ポインタレジスタを用いて実行することを可能にする。
【0228】
1つ以上の内部命令キャッシュ(例えば、1906)は、実行ユニットのためのスレッド命令をキャッシュするようスレッド実行ロジック1900に含まれる。いくつかの実施形態において、1つ以上のデータキャッシュ(例えば、1912)は、スレッド実行中にスレッドデータをキャッシュするよう含まれている。いくつかの実施形態において、サンプラ1910は、3D操作のためのテクスチャサンプリングと、メディア操作のためのメディアサンプラとを提供するよう含まれている。いくつかの実施形態において、サンプラ1910は、サンプリングされたデータを実行ユニットへ供給する前にサンプリングプロセス中にテクスチャ又はメディアデータを処理する特殊化したテクスチャ又はメディアサンプリング機能を含む。
【0229】
実行中、グラフィクス及びメディアパイプラインは、スレッド生成及びディスパッチロジックを介してスレッド実行ロジック1900へスレッド開始リクエストを送る。幾何学オブジェクトのグループが処理されピクセルデータにラスタライズされると、シェーダプロセッサ1902内のピクセルプロセッサロジック(例えば、ピクセルシェーダロジック、フラグメントシェーダロジック、など)が、出力情報を更に計算して、結果を出力表面(例えば、カラーバッファ、デプスバッファ、ステンシルバッファ、など)に書き込せるために呼び出される。いくつかの実施形態において、ピクセルシェーダ又はフラグメントシェーダは、ラスタライズされたオブジェクトにわたって補間されるべきである様々な頂点属性の値を計算する。いくつかの実施形態において、シェーダプロセッサ1902内のピクセルプロセッサロジックは、次いで、アプリケーションプログラミングインターフェース(API)により供給されたピクセル又はフラグメントシェーダプログラムを実行する。シェーダプログラムを実行するために、シェーダプロセッサ1902は、スレッドディスパッチャ1904を介して実行ユニット(例えば、1908A)にスレッドをディスパッチする。いくつかの実施形態において、シェーダプロセッサ1902は、サンプラ1910内のテクスチャサンプリングロジックを使用して、メモリに記憶されているテクスチャマップ内のテクスチャデータにアクセスする。テクスチャデータ及び入力ジオメトリデータに対する算術演算は、各幾何学フラグメントについてピクセル色データを計算するか、あるいは、更なる処理から1つ以上のピクセルを捨てる。
【0230】
いくつかの実施形態において、データポート1914は、スレッド実行ロジック1900が処理されたデータをグラフィクスプロセッサ出力パイプラインで更なる処理のためにメモリへ出力するためのメモリアクセスメカニズムを提供する。いくつかの実施形態において、データポート1914は、データポートによるメモリアクセスのためにデータをキャッシュする1つ以上のキャッシュメモリ(例えば、データキャッシュ1912)を含むか又はそれへ結合する。
【0231】
図19Bに表されているように、グラフィクス実行ユニット1908は、命令フェッチユニット1937、汎用レジスタファイルアレイ(GFR)1924、アーキテクチャレジスタファイルアレイ(ARF)1926、スレッドアービタ1922、送信ユニット1930、分岐ユニット1932、SIMD浮動小数点ユニット(FPU)1934、及び一実施形態では、専用の整数SIMD ALU1935の組を含むことができる。GRF1924及びARF1926は、グラフィクス実行ユニット1908でアクティブであり得る各同時ハードウェアスレッドに関連した汎用レジスタファイル及びアーキテクチャレジスタファイルの組を含む。一実施形態において、スレッドごとのアーキテクチャ状態は、ARF1926で保持され、一方、スレッド実行中に使用されるデータは、GRF1924に格納される。各スレッドの命令ポインタを含む各スレッドの実行状態は、ARF1926内のスレッド固有レジスタに保持され得る。
【0232】
一実施形態において、グラフィクス実行ユニット1908は、同時マルチスレッディング(simultaneous multi-threading,SMT)及び微細(fine-grained)インターリーブマルチスレッディング(interleaved multi-threading,IMT)の組み合わせであるアーキテクチャを有する。アーキテクチャは、同時スレッドの目標数及び実行ユニットごとのレジスタの数に基づいて設計時に微調整され得るモジュール構成を有し、実行ユニットリソースは、複数の同時スレッドを実行するために使用されるロジックにわたって分割される。
【0233】
一実施形態において、グラフィクス実行ユニット1908は、夫々が異なった命令であってよい複数の命令を同時発行(co-issue)することができる。グラフィクス実行ユニット1908のスレッドアービタ1922は、命令を送信ユニット1930、分岐ユニット1932、又はSIMD FPU1934の1つへ実行のためにディスパッチすることができる。各実行スレッドは、GRF1924内の128個の汎用レジスタにアクセスすることができ、各レジスタは、32ビットデータ要素の8要素ベクトルとしてアクセス可能な32バイトを記憶することができる。一実施形態において、各実行ユニットスレッドは、GRF1924内の4Kバイトへのアクセスを有するが、実施形態はそのように限定されず、より多い又はより少ないレジスタリソースが他の実施形態では設けられてもよい。一実施形態において、最大7個のスレッドが同時に実行可能であるが、実行ユニットごとのスレッドの数も、実施形態により様々であることができる。7つのスレッドが4Kバイトにアクセスし得る実施形態では、GRF1924は、全部28Kバイトを記憶することができる。フレキシブルアドレッシングモードは、有効により幅広のレジスタを構成するために、又はストライド型長方形ブロックデータ構造を表すために、レジスタが一緒にアドレッシングされることを可能にすることができる。
【0234】
一実施形態において、メモリ動作、サンプラ動作、及び他のより長いレイテンシのシステム通信は、メッセージパッシング送信ユニット1930によって実行される「送信」命令によりディスパッチされる。一実施形態において、分岐命令は、SIMDダイバージェンス及び結果として起こるコンバージェンスを促進するよう専用の分岐ユニット1932にディスパッチされる。
【0235】
一実施形態において、グラフィクス実行ユニット1908は、浮動小数点演算を実行するよう1つ以上のSIMD浮動小数点ユニット(FPU)1934を含む。一実施形態において、FPU1934はまた、整数計算をサポートする。一実施形態において、FPU1934は、最大M個の32ビット浮動小数点(若しくは整数)演算をSIMD実行するか、あるいは、最大2M個の16ビット整数又は16ビット浮動小数点演算をSIMD実行することができる。一実施形態において、FPUの少なくとも1つは、高スループット超越数学関数及び倍精度64ビット浮動小数点をサポートするよう、拡張された数学能力を提供する。いくつかの実施形態において、8ビット整数SIMD ALU1935の組も存在し、機械学習計算に関連した動作を実行するよう特に最適化されてよい。
【0236】
一実施形態において、グラフィクス実行ユニット1908の複数のインスタンスのアレイは、グラフィクスサブコアグルーピング(例えば、サブスライス)でインスタンス化され得る。スケーラビリティについては、製品創案者が、サブコアグルーピングごとに実行ユニットの正確な数を選択することができる。一実施形態において、実行ユニット1908は、複数の実行チャネルにわたって命令を実行することができる。更なる実施形態では、グラフィクス実行ユニット1908で実行される各スレッドが、異なるチャネルで実行される。
【0237】
図20は、いくつかの実施形態に従うグラフィクスプロセッサ命令フォーマット2000を表すブロック図である。1つ以上の実施形態で、グラフィクスプロセッサ実行ユニットは、複数のフォーマットで命令を有する命令セットをサポートする。実線ボックスは、一般的に実行ユニット命令に含まれているコンポーネントを表し、一方、破線は、任意であるか、あるいは、命令のサブセットにしか含まれないコンポーネントを含む。いくつかの実施形態において、記載及び例示されている命令フォーマット2000は、それらが、命令が処理されると命令復号化から生じるマイクロオペレーションとは対照的に、実行ユニットへ供給される命令であるという点で、マクロ命令である。
【0238】
いくつかの実施形態において、グラフィクスプロセッサ実行ユニットは、元々、128ビット命令フォーマット2010で命令をサポートする。64ビットコンパクト命令フォーマット2030は、選択された命令、命令オプション、及びオペランドの数に基づいて、いくつかの命令について利用可能である。元々の128ビット命令フォーマット2010は、全ての命令オプションへのアクセスを提供し、一方、64ビットフォーマット2030では、いくつかのオプション及び動作が制限される。64ビットフォーマット2030で利用可能な元々の命令は、実施形態により異なる。いくつかの実施形態において、命令は、インデックスフィールド2013内のインデックス値の組を用いて部分的に圧縮される。実行ユニットハードウェアは、インデックス値に基づいて圧縮テーブルの組を参照し、そして、圧縮テーブル出力を使用して、128ビット命令フォーマット2010内の元々の命令を再構成する。他のサイズ及びフォーマットの命令が使用可能である。
【0239】
各フォーマットについて、命令オペコード2012は、実行ユニットが実行すべきである動作を定義する。実行ユニットは、各オペランドの複数のデータ要素にわたって並行して各命令を実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャ要素又はピクチャ要素を表す各色チャネルにわたって同時の加算演算を実行する。デフォルトで、実行ユニットは、オペランドの全データチャネルにわたって各命令を実行する。いくつかの実施形態において、命令制御フィールド2014は、チャネル選択(例えば、プレディケーション(predication))及びデータチャネル順序(スウィズル(swizzle))などの特定の実行オプションに対する制御を可能にする。128ビット命令フォーマット2010での命令について、実行サイズフィールド2016は、並行して実行されるデータチャネルの数を制限する。いくつかの実施形態において、実行サイズフィールド2016は、64ビットコンパクト命令フォーマット2030では使用不可能である。
【0240】
いくつかの実行ユニット命令は、2つのソースオペランドsrc0 2020及びsrc1 2022と、1つのあて先2018とを含む最大3つのオペランドを有する。いくつかの実施形態において、実行ユニットは、あて先の1つが暗示される二重あて先命令をサポートする。データ操作命令は、第3ソースオペランド(例えば、SRC2 2024)を有することができ、命令オペコード2012は、ソースオペランドの数を決定する。命令の最後のソースオペランドは、命令とともに渡される即時(例えば、ハードコードされた)値であることができる。
【0241】
いくつかの実施形態において、128ビット命令フォーマット2010は、例えば、直接レジスタアドレッシングモード又は間接レジスタアドレッシングモードが使用されるかどうかを指定するアクセス/アドレスモードフィールド2026を含む。直接レジスタアドレッシングモードが使用される場合に、1つ以上のオペランドのレジスタアドレスは、命令内のビットによって直接に供給される。
【0242】
いくつかの実施形態において、128ビット命令フォーマット2010は、命令のアドレスモード及び/又はアクセスモードを指定するアクセス/アドレスモードフィールド2026を含む。一実施形態において、アクセスモードは、命令についてデータアクセスアライメントを定義するために使用される。いくつかの実施形態は、16バイトアライメントアクセスモード及び1バイトアライメントアクセスモードを含むアクセスモードをサポートし、アクセスモードのバイトアライメントは、命令オペランドのアクセスアライメントを決定する。例えば、第1モードにある場合に、命令は、ソース及びあて先オペランドのために、バイトアライメントされたアドレッシングを使用してよく、第2モードにある場合に、命令は、全てのソース及びあて先オペランドのために、16バイトアライメントされたアドレッシングを使用してよい。
【0243】
一実施形態において、アクセス/アドレスモードフィールド2026のアドレスモード部分は、命令が直接又は間接アドレッシングを使用すべきかどうかを決定する。直接レジスタアドレッシングモードが使用される場合に、命令内のビットは、1つ以上のオペランドのレジスタアドレスを直接に供給する。間接レジスタアドレッシングモードが使用される場合に、1つ以上のオペランドのレジスタアドレスは、命令内のアドレス中間フィールド及びアドレスレジスタ値に基づいて計算されてよい。
【0244】
いくつかの実施形態において、命令は、オペコードでコード2040を簡単にするようオペコード2012のビットフィールドに基づいてグループ化される。8ビットオペコードについては、ビット4、5及び6は、実行ユニットがオペコードのタイプを決定することを可能にする。示されている正確なオペコードグルーピングは、例にすぎない。いくつかの実施形態において、移動及び論理オペコードグループ2042は、データ移動及び論理命令(例えば、移動(mov)、比較(cmp))を含む。いくつかの実施形態において、移動及び論理グループ2042は、5つの最上位ビット(MSB)を共有し、移動(mov)命令は、0000xxxxbの形を取り、論理命令は、0001xxxxbの形を取る。フロー制御命令2044(例えば、コール、ジャンプ(jmp))は、0010xxxxb(例えば、0x20)の形を取る命令を含む。その他の命令グループ2046は、0011xxxxb(例えば、0x30)の形を取る同期化命令(例えば、待機、送信)を含む命令の混合を含む。並列演算命令グループ2048は、0100xxxxb(例えば、0x40)の形を取るコンポーネントごとの算術命令(例えば、加算、乗算(mul))を含む。並列演算グループ2048は、データチャネルにわたって並行して算術演算を実行する。ベクトル演算グループ2050は、0101xxxxb(例えば、0x50)の形を取る算術命令(例えば、dp4)を含む。ベクトル演算グループは、ベクトルオペランドに対する内積計算などの算術演算を実行する。
【0245】
[グラフィクスパイプライン]
図21は、グラフィクスプロセッサ2100の他の実施形態のブロック図である。本願のいずれかの他の図の要素と同じ参照番号(又は名称)を有する図21の要素は、本願のどこかで記載されているのと同じように動作又は機能することができるが、そのように限定されない。
【0246】
いくつかの実施形態において、グラフィクスプロセッサ2100は、ジオメトリパイプライン2120、メディアパイプライン2130、ディスプレイエンジン2140、スレッド実行ロジック2150、及びレンダー出力パイプライン2170を含む。いくつかの実施形態において、グラフィクスプロセッサ2100は、1つ以上の汎用処理コアを含むマルチコア処理システム内のグラフィクスプロセッサである。グラフィクスプロセッサは、リングインターコネクト2102を介してグラフィクスプロセッサ2100へ発行されたコマンドにより、あるいは、1つ以上の制御レジスタ(図示せず)へのレジスタ書き込みによって、制御される。いくつかの実施形態において、リングインターコネクト2102は、グラフィクスプロセッサ2100を、他のグラフィクスプロセッサ又は汎用プロセッサなどの他の処理コンポーネントへ結合する。リングインターコネクト2102からのコマンドは、ジオメトリパイプライン2120又はメディアパイプライン2130の個々のコンポーネントへ命令を供給するコマンドストリーマ2103によって解釈される。
【0247】
いくつかの実施形態において、コマンドストリーマ2103は、メモリから頂点データを読み出し、コマンドストリーマ2103によって供給された頂点処理コマンドを実行する頂点フェッチャ2105の動作を指示する。いくつかの実施形態において、頂点フェッチャ2105は、頂点データを頂点シェーダ2107へ供給し、頂点シェーダ2107は、各頂点に対して座標空間変換及び明暗操作を実行する。いくつかの実施形態において、頂点フェッチャ2105及び頂点シェーダ2107は、スレッドディスパッチャ2131を介して実行ユニット2152A~2152Bへ実行スレッドをディスパッチすることによって、頂点処理命令を実行する。
【0248】
いくつかの実施形態において、実行ユニット2152A~2152Bは、グラフィクス及びメディア操作を実行するための命令セットを有するベクトルプロセッサのアレイである。いくつかの実施形態において、実行ユニット2152A~2152Bは、各アレイについて特有であるか又はアレイ間で共有される付属のL1キャッシュ2151を有する。キャッシュは、異なるパーティションでデータ及び命令を含むようパーティション化されているデータキャッシュ、命令キャッシュ、単一キャッシュとして構成され得る。
【0249】
いくつかの実施形態において、ジオメトリパイプライン2120は、3Dオブジェクトのハードウェアで加速されたテッセレーションを実行するテッセレーションコンポーネントを含む。いくつかの実施形態において、プログラム可能なハルシェーダ2111は、テッセレーション演算を構成する。プログラム可能なドメインシェーダ2117は、テッセレーション出力のバックエンド評価を提供する。テッセレータ2113は、ハルシェーダ2111の指示で動作し、そして、ジオメトリパイプライン2120への入力として供給される粗幾何学モデルに基づいて詳細な幾何学オブジェクトの組を生成する専用ロジックを含む。いくつかの実施形態において、テッセレーションが使用されない場合には、テッセレーションコンポーネント(例えば、ハルシェーダ2111、テッセレータ2113、及びドメインシェーダ2117)はバイパスされ得る。
【0250】
いくつかの実施形態において、完全な幾何学オブジェクトは、実行ユニット2152A~2152Bにディスパッチされた1つ以上のスレッドを介してジオメトリシェーダ2119によって処理され得るか、あるいは、クリッパ2129へ直接に進むことができる。いくつかの実施形態において、ジオメトリシェーダ2119は、グラフィクスパイプラインの前の段で見られたように頂点又は頂点のパッチよりもむしろ、幾何学オブジェクト全体に作用する。テッセレーションが無効にされる場合には、ジオメトリシェーダ2119は頂点シェーダ2107から入力を受け取る。いくつかの実施形態において、ジオメトリシェーダ2119は、テッセレーションユニットが無効にされる場合にジオメトリテッセレーションを実行するようジオメトリシェーダプログラムによってプログラム可能である。
【0251】
ラスタライゼーションの前に、クリッパ2129は頂点データを処理する。クリッパ2129は、クリッピング及びジオメトリシェーダ機能を備えた固定機能クリッパ又はプログラム可能なクリッパであってよい。いくつかの実施形態において、レンダー出力パイプライン2170内のラスタイラザ及びデプステストコンポーネント2173は、幾何学オブジェクトをピクセルごとの表現に変換するようピクセルシェーダをディスパッチする。いくつかの実施形態において、ピクセルシェーダロジックはスレッド実行ロジック2150に含まれている。いくつかの実施形態において、アプリケーションは、ラスタライザ及びデプステストコンポーネント2173をバイパスし、ラスタライズされていない頂点データにストリーム出力ユニット2123を介してアクセスすることができる。
【0252】
グラフィクスプロセッサ2100は、インターコネクトバス、インターコネクトファブリック、又はプロセッサの主なコンポーネントの間のデータ及びメッセージ受け渡しを可能にするその他のインターコネクトメカニズムを有する。いくつかの実施形態において、実行ユニット2152A~2152B及び関連するロジックユニット(例えば、L1キャッシュ2151、サンプラ2154、テクスチャキャッシュ2158、など)は、メモリアクセスを実行しかつプロセッサのレンダー出力パイプラインコンポーネントと通信するようデータポート2156を介して相互接続する。いくつかの実施形態において、サンプラ2154、L1キャッシュ2151、テクスチャキャッシュ2158、及び実行ユニット2152A~2152Bは夫々、別々のメモリアクセスパスを有する。一実施形態において、テクスチャキャッシュ2158はまた、サンプラキャッシュとして構成され得る。
【0253】
いくつかの実施形態において、レンダー出力パイプライン2170は、頂点に基づくオブジェクトを関連するピクセルに基づく表現に変換するラスタライザ及びデプステストコンポーネント2173を含む。いくつかの実施形態において、ラスタイラザロジックは、固定機能三角形及び直線ラスタライゼーションを実行するウィンドウア(windower)/マスカ(masker)ユニットを含む。関連するレンダーキャッシュ2178及びデプスキャッシュ2179も、いくつかの実施形態で利用可能である。ピクセル操作コンポーネント2177は、データに対してピクセルに基づいた操作を実行するが、いくつかのインスタンスでは、2D操作(例えば、混合(blending)を伴ったビットブロック画像転送)に関連したピクセル操作は、2Dエンジン2141によって実行されるか、あるいは、オーバーレイ表示面を用いてディスプレイコントローラ2143によって表示時点で置換される。いくつかの実施形態において、共有L3キャッシュ2175は、全てのグラフィクスコンポーネントに利用可能であり、主システムメモリの使用なしでデータの共有を可能にする。
【0254】
いくつかの実施形態において、グラフィクスプロセッサメディアパイプライン2130は、メディアエンジン2137及びビデオフロントエンド2134を含む。いくつかの実施形態において、ビデオフロントエンド2134は、コマンドストリーマ2103からパイプラインコマンドを受け取る。いくつかの実施形態において、メディアパイプライン2130は、別個のコマンドストリーマを含む。いくつかの実施形態において、ビデオフロントエンド2134は、コマンドをメディアエンジン2137へ送る前に、メディアコマンドを処理する。いくつかの実施形態において、メディアエンジン2137は、スレッドディスパッチャ2131によるスレッド実行ロジック2150へのディスパッチのためにスレッドを生成するようスレッド生成機能を含む。
【0255】
いくつかの実施形態において、グラフィクスプロセッサ2100は、ディスプレイエンジン2140を含む。いくつかの実施形態において、ディスプレイエンジン2140は、プロセッサ2100の外にあり、リングインターコネクト2102又はその他のインターコネクトバス若しくはファブリックを介してグラフィクスプロセッサと結合する。いくつかの実施形態において、ディスプレイエンジン2140は、2Dエンジン2141及びディスプレイコントローラ2143を含む。いくつかの実施形態において、ディスプレイエンジン2140は、3Dパイプラインから独立して動作することが可能な専用ロジックを含む。いくつかの実施形態において、ディスプレイコントローラ2143は、表示デバイス(図示せず)と結合し、表示デバイスは、ラップトップコンピュータで見られるように、システム内蔵型表示デバイス、又は表示デバイスコネクタを介して取り付けられた外付け表示デバイスであってよい。
【0256】
いくつかの実施形態において、ジオメトリパイプライン2120及びメディアパイプライン2130は、複数のグラフィクス及びメディアプログラミングインターフェースに基づいて動作を実行するよう構成可能であり、いずれか1つのアプリケーションプログラミングインターフェース(API)に特有ではない。いくつかの実施形態において、グラフィクスプロセッサ用のドライバソフトウェアは、特定のグラフィクス又はメディアライブラリに特有であるAPIコールを、グラフィクスプロセッサによって処理され得るコマンドに変換する。いくつかの実施形態において、全てクロノスグループからであるオープン・グラフィクス・ライブラリ(Open Graphics Library,OpenGL)、オープン・コンピューティング・ランゲージ(Open Computing Language,OpenCL)、及び/又はVulkanグラフィクス及び計算APIのために、サポートが提供される。いくつかの実施形態において、マイクロソフト・コーポレーションからのDirect3Dライブラリのためにも、サポートが提供されてよい。いくつかの実施形態において、これらのライブラリの組み合わせがサポートされてもよい。オープン・ソース・コンピュータ・ビジョン・ライブラリ(Open Source Computer Vision Library,OpenCV)のためにも、サポートが提供されてよい。互換性のある3Dパイプラインを備えた将来のAPIも、マッピングが将来のAPIのパイプラインからグラフィクスプロセッサのパイプラインへ行われ得る場合は、サポートされることになる。
【0257】
[グラフィクスパイプラインプログラミング]
図22Aは、いくつかの実施形態に従うグラフィクスプロセッサコマンドフォーマット2200を表すブロック図である。図22Bは、実施形態に従うグラフィクスプロセッサコマンドシーケンス2210を表すブロック図である。図22Aの実線ボックスは、一般的にグラフィクスコマンドに含まれているコンポーネントを表し、破線は、任意であるか、あるいは、グラフィクスコマンドのサブセットにしか含まれないコンポーネントを含む。図22Aの例となるグラフィクスプロセッサコマンドフォーマット2200は、クライアント2202、コマンド操作コード(オペコード)2204、及びコマンドのためのデータ2206を識別するデータフィールドを含む。サブオペコード2205及びコマンドサイズ2208も、いくつかのコマンドには含まれる。
【0258】
いくつかの実施形態において、クライアント2202は、コマンドデータを処理するグラフィクスデバイスのクライアントユニットを指定する。いくつかの実施形態において、グラフィクスプロセッサコマンドパーサは、コマンドの更なる処理を条件付け、コマンドデータを適切なクライアントユニットへ送るよう、各コマンドのクライアントフィールドを調べる。いくつかの実施形態において、グラフィクスプロセッサクライアントユニットは、メモリインターフェースユニット、レンダーユニット、2Dユニット、3Dユニット、及びメディアユニットを含む。各クライアントユニットは、コマンドを処理する対応する処理パイプラインを有する。コマンドがクライアントユニットによって受け取られると、クライアントユニットは、オペコード2204、及び存在する場合には、サブオペコード2205を読み出して、実行すべき動作を決定する。クライアントユニットは、データフィールド2206内の情報を用いてコマンドを実行する。いくつかのコマンドについては、明示的なコマンドサイズ2208が、コマンドのサイズを特定すると期待される。いくつかの実施形態において、コマンドパーサは、コマンドオペコードに基づいてコマンドの少なくとも一部のサイズを自動的に決定する。いくつかの実施形態において、コマンドは、ダブルワードの倍数によりアライメントされる。他のコマンドフォーマットが使用可能である。
【0259】
図22Bのフロー図は、例となるグラフィクスプロセッサコマンドシーケンス2210を表す。いくつかの実施形態において、グラフィクスプロセッサの実施形態を特徴付けるデータ処理システムのソフトウェア又はファームウェアは、グラフィクス操作の組をセットアップ、実行、及び終了することが示されたコマンドシーケンスの変形を使用する。サンプルコマンドシーケンスは、実施形態がこれらの具体的なコマンドに又はこのコマンドシーケンスに限定されないということで、例示のみを目的として図示及び記載されている。更に、コマンドは、グラフィクスプロセッサが少なくとも部分的に同時にコマンドのシーケンスを処理するように、コマンドシーケンスの中のコマンドのバッチとして発行されてよい。
【0260】
いくつかの実施形態において、グラフィクスプロセッサコマンドシーケンス2210は、いずれかのアクティブなグラフィクスパイプラインにそのパイプラインの目下ペンディング中のコマンドを完了させるよう、パイプラインフラッシュコマンド2212から始まってよい。いくつかの実施形態において、3Dパイプライン2222及びメディアパイプライン2224は、同時に動作しない。パイプラインフラッシュは、アクティブなグラフィクスパイプラインに如何なるペンディング中のコマンドも完了させるよう実行される。パイプラインフラッシュに応答して、グラフィクスプロセッサのコマンドパーサは、アクティブな描画エンジンがペンディング中の動作を完了し、関連する読み取りキャッシュが無効にされるまで、コマンド処理を一時停止する。任意に、「ダーティ」(dirty)とマークされているレンダーキャッシュ内の如何なるデータも、メモリにフラッシュされ得る。いくつかの実施形態において、パイプラインフラッシュコマンド2212は、グラフィクスプロセッサを低電力状態に置く前に、又はパイプライン同期化のために、使用され得る。
【0261】
いくつかの実施形態において、パイプライン選択コマンド2213は、コマンドシーケンスがグラフィクスプロセッサにパイプライン間の明示的な切り替えを求める場合に、使用される。いくつかの実施形態において、パイプライン選択コマンド2213は、コンテキストが両方のパイプラインについてコマンドを発行すべきでない限り、パイプラインコマンドを発行する前に実行コンテキスト内で一度だけ必要とされる。いくつかの実施形態において、パイプラインフラッシュコマンド2212は、パイプライン選択コマンド2213によるパイプライン切り替えの直前に必要とされる。
【0262】
いくつかの実施形態において、パイプライン制御コマンド2214は、動作のためにグラフィクスパイプラインを設定し、そして、3Dパイプライン2222及びメディアパイプライン2224をプログラムするために使用される。いくつかの実施形態において、パイプライン制御コマンド2214は、アクティブなパイプラインについてパイプライン状態を設定する。一実施形態において、パイプライン制御コマンド2214は、パイプライン同期化のために、かつ、コマンドのバッチを処理する前にアクティブなパイプライン内の1つ以上のキャッシュメモリからデータをクリアするために、使用される。
【0263】
いくつかの実施形態において、リターンバッファ状態2216を設定するコマンドは、各々のパイプラインがデータを書き込むためにリターンバッファの組を設定するために使用される。いくつかのパイプライン動作は、動作が処理中に中間データを書き込む1つ以上のリターンバッファの割り当て、選択、又は設定を必要とする。いくつかの実施形態において、グラフィクスプロセッサはまた、出力データを記憶するために及びクロススレッド通信を実行するために1つ以上のリターンバッファを使用する。いくつかの実施形態において、リターンバッファ状態2216は、パイプライン動作の組に使用すべきリターンバッファのサイズ及び数を選択することを含む。
【0264】
コマンドシーケンス内の残りのコマンドは、動作のためのアクティブなパイプラインに基づいて異なる。パイプライン決定2220に基づいて、コマンドシーケンスは、3Dパイプライン状態2230から開始する3Dパイプライン2222、又はメディアパイプライン状態2240で始まるメディアパイプライン2224に合わせられる。
【0265】
3Dパイプライン状態2230を設定するコマンドは、3Dプリミティブコマンドが処理される前に設定されるべきである頂点バッファ状態、頂点要素状態、一定色状態、デプスバッファ状態、及び他の状態変数に対する3D状態設定コマンドを含む。これらのコマンドの値は、使用中の特定の3D APIに少なくとも部分的に基づいて決定される。いくつかの実施形態において、3Dパイプライン状態2230コマンドはまた、特定のパイプライン要素を、それらの要素が使用されない場合に選択的に無効化又はバイパスすることもできる。
【0266】
いくつかの実施形態において、3Dプリミティブ2232コマンドは、3Dパイプラインによって処理されるべき3Dプリミティブをサブミットするために使用される。3Dプリミティブ2232コマンドによりグラフィクスプロセッサへ渡されるコマンド及び関連するパラメータは、グラフィクスパイプライン内の頂点フェッチ機能へ転送される。頂点フェッチ機能は、3Dプリミティブ2232コマンドデータを使用して、頂点データ構造を生成する。頂点データ構造は、1つ以上のリターンバッファに格納される。いくつかの実施形態において、3Dプリミティブ2232コマンドは、頂点シェーダにより3Dプリミティブに対して頂点操作を実行するために使用される。頂点シェーダを処理するために、3Dパイプライン2222は、グラフィクスプロセッサ実行ユニットへシェーダ実行スレッドをディスパッチする。
【0267】
いくつかの実施形態において、3Dパイプライン2222は、実行2234コマンド又はイベントによりトリガされる。いくつかの実施形態において、レジスタ書き込みは、コマンド実行をトリガする。いくつかの実施形態において、実行は、コマンドシーケンス内の「ゴー」(go)又は「キック」(kick)コマンドによりトリガされる。一実施形態において、コマンド実行は、グラフィクスパイプラインを通じてコマンドシーケンスをフラッシュするようパイプライン同期化コマンドを用いてトリガされる。3Dパイプラインは、3Dプリミティブに対するジオメトリ処理を実行する。動作が完了すると、結果として得られた幾何学オブジェクトはラスタライズされ、ピクセルエンジンは、結果として得られたピクセルを彩色する。ピクセルシェーディング及びピクセルバックエンド動作を制御するための追加コマンドも、これらの動作のために含まれてよい。
【0268】
いくつかの実施形態において、グラフィクスプロセッサコマンドシーケンス2210は、メディア操作を実行する場合にメディアパイプライン2224パスを辿る。一般に、メディアパイプライン2224のためのプログラミングの具体的な使用及び方法は、実行されるべきメディア又は計算操作に依存する。特定のメディア復号化動作が、メディア復号化中にメディアパイプラインにオフロードされてよい。いくつかの実施形態において、メディアパイプラインはまた、バイパスされてもよく、メディア復号化は、1つ以上の汎用処理コアによって供給されたリソースを用いて全体的に又は部分的に実行され得る。一実施形態において、メディアパイプラインはまた、汎用グラフィクスプロセッサユニット(GPGPU)動作のための要素を含み、グラフィクスプロセッサは、グラフィクスプリミティブのレンダリングに明示的には関係がない計算シェーダプログラムを用いてSIMDベクトル演算を実行するために使用される。
【0269】
いくつかの実施形態において、メディアパイプライン2224は、3Dパイプライン2222と同じように構成される。メディアパイプライン状態2240を設定するためのコマンドの組は、メディアオブジェクトコマンド2242の前にコマンドキューにディスパッチ又は挿入される。いくつかの実施形態において、メディアパイプライン状態2240のためのコマンドは、メディアオブジェクトを処理するために使用されるメディアパイプライン要素を構成するデータを含む。これは、符号化又は復号化フォーマットなどの、メディアパイプライン内のビデオ復号化及びビデオ符号化ロジックを構成するデータを含む。いくつかの実施形態において、メディアパイプライン状態2240のためのコマンドはまた、状態設定のバッチを含む「間接的な」状態要素への1つ以上のポインタの使用もサポートする。
【0270】
いくつかの実施形態において、メディアオブジェクトコマンド2242は、メディアパイプラインによる処理のためにメディアオブジェクトへのポインタを供給する。メディアオブジェクトは、処理されるべきビデオデータを含むメモリバッファを含む。いくつかの実施形態において、全てのメディアパイプライン状態は、メディアオブジェクトコマンド2242を発行する前に有効でなければならない。パイプライン状態が設定され、メディアオブジェクトコマンド2242がキューされると、メディアパイプライン2224は、実行コマンド2244又は同等の実行イベント(例えば、レジスタ書き込み)によりトリガされる。メディアパイプライン2224からの出力は、次いで、3Dパイプライン2222又はメディアパイプライン2224によって供給された演算によって後処理されてよい。いくつかの実施形態において、GPGPU動作は、メディア操作と同様に設定及び実行される。
【0271】
[グラフィクスソフトウェアアーキテクチャ]
図23は、いくつかの実施形態に従うデータ処理システム2300についての例示的なグラフィクスソフトウェアアーキテクチャを表す。いくつかの実施形態において、ソフトウェアアーキテクチャは、3Dグラフィクスアプリケーション2310、オペレーティングシステム2320、及び少なくとも1つのプロセッサ2330を含む。いくつかの実施形態において、プロセッサ2330は、グラフィクスプロセッサ2332及び1つ以上の汎用プロセッサコア2334を含む。グラフィクスアプリケーション2310及びオペレーティングシステム2320は夫々、データ処理システムのシステムメモリ2350で実行する。
【0272】
いくつかの実施形態において、3Dグラフィクスアプリケーション2310は、シェーダ命令2312を含む1つ以上のシェーダプログラムを含む。シェーダ言語命令は、Direct3Dの上位シェーダ言語(High-Level Shader Language,HLSL)、OpenGLシェーダ言語(GLSL)、などのような上位シェーダ言語にあってよい。アプリケーションはまた、汎用プロセッサコア2334による実行に適した機械言語で実行可能命令2314を含む。アプリケーションはまた、頂点データによって定義されたグラフィクスオブジェクト2316を含む。
【0273】
いくつかの実施形態において、オペレーティングシステム2320は、マイクロソフト・コーポレーションからのMicrosoft(登録商標) Windows(登録商標)オペレーティングシステム、独自仕様のUnix様のオペレーティングシステム、又はLinux(登録商標)カーネルの変形を使用するオープンソースのUNIX(登録商標)様のオペレーティングシステムである。オペレーティングシステム2320は、Direct3D API、OpenGL API、又はVulkan APIなどのグラフィクスAPI2322をサポートすることができる。Direct3D APIが使用中であるとき、オペレーティングシステム2320は、HLSLでの如何なるシェーダ命令2312も下位シェーダ言語にコンパイルするためにフロントエンドシェーダコンパイラ2324を使用する。コンパイルは、ジャスト・イン・タイム(JIT)コンパイルであってよく、あるいは、アプリケーションは、シェーダ・プリコンパイルを実行することができる。いくつかの実施形態において、上位シェーダは、3Dグラフィクスアプリケーション2310のコンパイル中に下位シェーダにコンパイルされる。いくつかの実施形態において、シェーダ命令2312は、Vulkan APIによって使用されるSPIR(Standard Portable Intermediate Representation)の変形などの中間形で供給される。
【0274】
いくつかの実施形態において、ユーザモードグラフィクスドライバ2326は、シェーダ命令2312をハードウェア特有の表現に変換するようバックエンドシェーダコンパイラ2327を含む。OpengGL APIが使用中であるとき、GLSL上位言語でのシェーダ命令2312は、コンパイルのためにユーザモードグラフィクスドライバ2326へ渡される。いくつかの実施形態において、ユーザモードグラフィクスドライバ2326は、カーネルモードグラフィクスドライバ2329と通信するためにオペレーティングシステムカーネルモード機能2328を使用する。いくつかの実施形態において、カーネルモードグラフィクスドライバ2329は、コマンド及び命令をディスパッチするためにグラフィクスプロセッサ2332と通信する。
【0275】
[IPコア実装]
少なくとも1つの実施形態の1つ以上の態様は、プロセッサなどの集積回路内のロジックを表現及び/又は定義する機械可読媒体に記憶された代表コードによって実装されてもよい。例えば、機械可読媒体は、プロセッサ内の様々なロジックを表す命令を含んでよい。機械によって読み出される場合に、命令は、機械に、本願で記載されている技術を実行するようロジックを組み立てさせ得る。「IPコア」として知られているそのような表現は、集積回路の構造を記述するハードウェアモデルとして有形な機械可読媒体に記憶され得る集積回路用ロジックの再利用可能なユニットである。ハードウェアモデルは、集積回路を製造する組立機械にハードウェアモデルをロードする様々なカスタマ又は製造設備に供給されてよい。集積回路は、回路が、本願で記載されている実施形態のいずれかと関連して記載されている動作を実行するように、組み立てられてよい。
【0276】
図24Aは、実施形態に従う動作を実行するよう集積回路を製造するために使用され得るIPコア開発システム2400を表すブロック図である。IPコア開発システム2400は、より大きい設計に組み込まれ得るモジュール式の再利用可能な設計を生成するために使用されるか、あるいは、集積回路(例えば、SOC集積回路)全体を構成するために使用されてよい。設計機関2430は、上位プログラミング言語(例えば、C/C++)でIPコア設計のソフトウェアシミュレーション2410を生成することができる。ソフトウェアシミュレーション2410は、シミュレーションモデル2412を用いてIPコアの挙動を設計、試験、及び検証するために使用され得る。シミュレーションモデル2412は、機能、挙動、及び/又はタイミングシミュレーションを含んでよい。レジスタ転送レベル(register transfer level,RTL)設計2415は、モデル化されたデジタル信号を用いて実行される関連ロジックを含め、ハードウェアレジスタ間のデジタル信号のフローをモデル化する集積回路の挙動の抽象化である。RTL設計2415に加えて、ロジックレベル又はトランジスタレベルでの下位設計も、生成、設計又は合成されてよい。よって、初期設計及びシミュレーションの具体的な詳細は様々であってよい。
【0277】
RTL設計2415又は同等物は、設計機関によって、ハードウェア記述言語(HDL)又は物理設計データのその他表現であってよいハードウェアモデルに更に合成されてもよい。HDLは、IPコア設計を検証するよう更にシミュレーション又はテストされてもよい。IPコア設計は、不揮発性メモリ2440(例えば、ハードディスク、フラッシュメモリ、又は任意の不揮発性記憶媒体)を用いて第三者の組立設備2465への配送のために記憶され得る。代替的に、IPコア設計は、有線接続2450又は無線接続2460を介して(例えば、インターネット経由で)伝送されてもよい。組立設備2465は、次いで、少なくとも部分的にIPコア設計に基づく集積回路を組み立ててよい。組み立てられた集積回路は、本願で記載されている少なくとも1つの実施形態に従う動作を実行するよう構成され得る。
【0278】
図24Bは、本願で記載されているいくつかの実施形態に従って、集積回路パッケージアセンブリ2470の側面断面図を表す。集積回路パッケージアセンブリ2470は、本願で記載されている1つ以上のプロセッサ又はアクセラレータデバイスの実装を表す。パッケージアセンブリ2470は、基板2480へ接続されたハードウェアロジックの複数のユニット2672、2674を含む。ロジック2672、2674は、設定可能なロジック又は固定機能ロジックハードウェアにおいて少なくとも部分的に実装されてよく、プロセッサコア、グラフィクスプロセッサ、又は本願で記載されている他のアクセラレータデバイスのいずれかの1つ以上の部分を含むことができる。ロジック2672、2674の各ユニットは、半導体ダイの中に実装され、インターコネクト構造2473を介して基板2480と結合され得る。インターコネクト構造2473は、ロジック2672、2674と基板2480との間で電気信号を伝えるよう構成されてよく、バンプ又はピラーなどの、しかしこれらに限られないインターコネクトを含むことができる。いくつかの実施形態において、インターコネクト構造2473は、例えば、ロジック2672、2674の動作に関連した入出力(I/O)信号及び/又は電力若しくは接地信号などの電気信号を伝えるよう構成されてよい。いくつかの実施形態において、基板2480は、エポキシベースの積層基板である。基板2480は、他の実施形態では他の適切なタイプの基板を含んでもよい。パッケージアセンブリ2470は、パッケージインターコネクト2483を介して他の電気デバイスへ接続され得る。パッケージインターコネクト2483は、マザーボード、他のチップセット、又はマルチチップモジュールなどの他の電気デバイスへ電気信号を伝えるよう基板2480の表面へ結合されてよい。
【0279】
いくつかの実施形態において、ロジック2672、2674のユニットは、ロジック2672、2674の間で電気信号を伝えるよう構成されるブリッジ2482と電気的に結合されている。ブリッジ2482は、電気信号のルートを提供する密なインターコネクト構造であってよい。ブリッジ2482は、ガラス又は適切な半導体材料から成るブリッジ基板を含んでよい。電気ルーティング構造が、ロジック2672、2674の間のチップ間接続を提供するようブリッジ基板上に形成され得る。
【0280】
ロジックの2つのユニット2672、2674及びブリッジ2482が表されているが、本願で記載されている実施形態は、1つ以上のダイ上でより多い又はより少ないロジックユニットを含んでよい。1つ以上のダイは、ロジックが単一のダイ上に含まれる場合にブリッジ2482は除かれてもよいということで、ゼロか又はより多いブリッジによって接続されてもよい。代替的に、複数のダイ又はロジックのユニットが1つ以上のブリッジによって接続され得る。更には、複数のロジックユニット、ダイ、及びブリッジは、3次元構成を含む他の可能な構成で連結され得る。
【0281】
[例となるシステム・オン・ア・チップ集積回路]
図25~26は、本願で記載されている様々な実施形態に従って、1つ以上のIPコアを使用して組み立てられ得る例示的な集積回路及び関連するグラフィクスプロセッサを表す。表されているものに加えて、追加のグラフィクスプロセッサ/コア、プロセッサ/コア、ペリフェラル・インターフェース・コントローラ、又は汎用プロセッサコアを含む他のロジック及び回路が含まれてもよい。
【0282】
図25は、実施形態に従って、1つ以上のIPコアを使用して組み立てられ得る例示的なシステム・オン・ア・チップ集積回路2500を表すブロック図である。例となる集積回路2500は、1つ以上のアプリケーションプロセッサ2505(例えば、CPU)及び少なくとも1つのグラフィクスプロセッサ2510を含み、更には、画像プロセッサ2515及び/又はビデオプロセッサ2520を含んでもよく、これらのいずれは、同じ又は複数の異なった設計設備からのモジュールIPコアであってよい。集積回路2500は、USBコントローラ2525、UARTコントローラ2530、SPI/SDIOコントローラ2535、及びIS/ICコントローラ2540を含むペリフェラル又バスロジックを含む。更には、集積回路2500は、ハイ・デフィニション・マルチメディア・インターフェース(HDMI(登録商標))コントローラ2550及びモバイル・インダストリ・プロセッサ・インターフェース(MIPI)表示インターフェース2555の1つ以上へ結合される表示デバイス2545を含むことができる。ストレージは、フラッシュメモリ及びフラッシュメモリコントローラを含むフラッシュメモリサブシステム2560によって提供されてよい。メモリインターフェースは、SCRAM又はSRAMメモリデバイスへのアクセスのためにメモリコントローラ2565を介して提供されてよい。いくつかの集積回路は、埋め込みセキュリティエンジン2570を更に含む。
【0283】
図26A~26Bは、本願で記載されている実施形態に従って、SoC内で使用される例示的なグラフィクスプロセッサを表すブロック図である。図26Aは、実施形態に従って、1つ以上のIPコアを使用して組み立てられ得るSoC集積回路の例示的なグラフィクスプロセッサ2610を表す。図26Bは、実施形態に従って、1つ以上のIPコアを使用して組み立てられ得るSoC集積回路の更なる例示的なグラフィクスプロセッサ2640を表す。図26Aのグラフィクスプロセッサ2610は、低電力グラフィクスプロセッサコアの例である。図26Bのグラフィクスプロセッサ2640は、より高性能のグラフィクスプロセッサコアの例である。グラフィクスプロセッサ2610、2640の夫々は、図25のグラフィクスプロセッサ2510の変形であることができる。
【0284】
図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は、Direct3D APIで提供されるようなピクセルシェーダプログラムと同じような動作を実行するために使用され得るOpengGL APIで提供されるようなフラグメントシェーダプログラムを実行するよう最適化される。
【0285】
グラフィクスプロセッサ2610は、1つ以上のメモリ管理ユニット(MMU)2620A~2620B、キャッシュ2625A~2625B、及び回路インターコネクト2630A~2630Bを更に含む。1つ以上のMMU2620A~2620Bは、1つ以上のキャッシュ2625A~2625Bに記憶されている頂点又は画像/テクスチャデータに加えて、メモリに記憶あれている頂点又は画像/テクスチャデータを参照し得る頂点プロセッサ2605及び/又はフラグメントプロセッサ2615A~2615Nを含むグラフィクスプロセッサ2610のための仮想-物理アドレスマッピングを提供する。一実施形態において、1つ以上のMMU2620A~2620Bは、図25の1つ以上のアプリケーションプロセッサ2505、画像プロセッサ2515、及び/又はビデオプロセッサ2520に関連した1つ以上のMMUを含む、システム内の他のMMUと同期してよく、それにより、各プロセッサ2505~2520は、共有又は統合仮想メモリシステムに関与することができる。1つ以上の回路インターコネクト2630A~2630Bは、実施形態に従って、グラフィクスプロセッサ2610が、SoCの内部バスを介して、又は直接接続を介して、SoC内の他のIPコアとインターフェース接続することを可能にする。
【0286】
図26Bに示されるように、グラフィクスプロセッサ2640は、図26Aのグラフィクスプロセッサ2610の1つ以上のMMU2620A~2620B、キャッシュ2625A~2625B、及び回路インターコネクト2630A~2630Bを含む。グラフィクスプロセッサ2640は、単一のコア又はタイプ若しくはコアが頂点シェーダ、フラグメントシェーダ、及び/又は計算シェーダを実装するようシェーダプログラムコードを含む全てのタイプのプログラム可能なシェーダコードを実行することができる統合シェーダコアアーキテクチャを提供する1つ以上のシェーダコア2655A~2655N(例えば、2655A、2655B、2655C、2655D、2655E、2655F、乃至2655N-1、及び2655N)を含む。シェーダコアの正確な数は、実施形態及び実施により様々であることができる。更には、グラフィクスプロセッサ2640は、シーンに対するレンダリング動作が、例えば、シーン内の局所空間コヒーレンスを利用するために、又は内部キャッシュの使用を最適化するために、画像空間において細分されるタイルベースのレンダリングのためのタイリング動作を加速させるよう実行スレッドを1つ以上のシェーダコア2655A~2655N及びタイリングユニット2658にディスパッチするスレッドディスパッチャとして動作するインターコアタスクマネージャ2645を含む。
【0287】
[SoCアーキテクチャの分解]
ますます大きいシリコンダイを構成することは、様々な理由により困難である。シリコンダイが大きくなるにつれて、製造収益は小さくなり、異なるコンポーネントのプロセス技術要件は発散する可能性がある。他方で、高性能システムを有するために、重要なコンポーネントは、高速、高バンド幅、低レイテンシのインターフェースによって相互接続されるべきである。これらの矛盾するニーズは、高性能チップの開発に難題をもたらす。
【0288】
本願で記載されている実施形態は、SoC回路のアーキテクチャを、共通のシャーシ上にパッケージ化され得る複数の相異なるチップレットに分ける技術を提供する。一実施形態において、グラフィクス処理ユニット又は並列プロセッサは、別々に製造される様々なシリコンチップレットから成る。チップレットは、他のチップレットともにより大きいパッケージ内に集められ得る相異なるロジックユニットを含む少なくとも部分的にパッケージ化された集積回路である。異なるIPコアロジックを含むチップレットの様々な組が単一のデバイスに組み立てられ得る。更には、チップレットは、アクティブインターポーザ(active interposer)技術を用いてベースダイ又はベースチップレットに集積され得る。本願で記載されている概念は、GPU内の異なる形のIP間の相互接続又は通信を可能にする。異なるプロセスでのIPの開発は、混合されてよい。これは、特に、いくつかのフレーバーIPを備えた大規模SoCで、複数のIPを同じプロセスに収束させる複雑さを回避する。
【0289】
複数のプロセス技術の使用を可能にすることは、市場投入までの時間を改善し、かつ、複数の製品SKUを作成するためのコスト効果の高い方法をもたらす。顧客にとって、このことは、コスト効果が高くかつタイムリーな方法で彼らの要求により合っている製品を得ることを意味する。更には、分解されたIPは、より、独立してパワーゲーティングされやすくなり、所与のワークロードで使用されていないコンポーネントの電源をオフにして、全体の電力消費を削減することができる。
【0290】
図27は、実施形態に従う並列計算システム2700を示す。一実施形態において、並列計算システム2700は、本願で記載されているグラフィクスプロセッサ又は計算アクセラレータであることができる並列プロセッサ2720を含む。並列プロセッサ2720は、グローバルロジック2701ユニット、インターフェース2702、スレッドディスパッチャ2703、メディアユニット2704、計算ユニット2705A~2705Hの組、及びキャッシュ/メモリユニット2706を含む。グローバルロジックユニット2701は、一実施形態において、デバイス設定レジスタ、グローバルスケジューラ、電力管理ロジック、などを含む、並列プロセッサ2720のための大域的機能を含む。インターフェース2702は、並列プロセッサ2720のためのフロントエンドインターフェースを含むことができる。スレッドディスパッチャ2703は、インターフェース2702からワークロードを受け取り、ワークロードのスレッドを計算ユニット2705A~2705Hにディスパッチすることができる。ワークロードが任意のメディア操作を含む場合には、それらの操作の少なくとも一部はメディアユニット2704によって実行され得る。メディアユニット2704はまた、計算ユニット2705A~2705Hへいくつかの操作をオフロードする。キャッシュ/メモリユニット2706は、並列プロセッサ2720のためのキャッシュメモリ(例えば、L3キャッシュ)及びローカルメモリ(例えば、HBM、GDDR)を含むことができる。
【0291】
図28A~28Bは、本願で記載されている実施形態に従って、分解された並列プロセッサのハイブリッド論理/物理ビューを表す。図28Aは、分解された並列計算システム2800を表す。図28Bは、分解された並列計算システム2800のチップレット2830を表す。
【0292】
図28Aに示されるように、分解された計算システム2800は、並列プロセッサSOCの様々なコンポーネントが複数のチップレットにわたって分布している並列プロセッサ2820を含むことができる。各チップレットは、1つ以上の共通インターフェースを介して他のチップレットと通信するよう独立して設計及び構成されている相異なるIPコアであることができる。チップレットは、計算チップレット2805、メディアチップレット2804、及びメモリチップレット2806を含むがこれらに限られない。各チップレットは、異なるプロセス技術を用いて別々に製造され得る。例えば、計算チップレット2805は、製造時点で利用可能な最小又は最新のプロセス技術を用いて製造されてよく、一方、メモリチップレット2806又は他のチップレット(例えば、I/O、ネットワーキング、など)は、より大きい又はより最新でないプロセス技術を用いて製造されてよい。
【0293】
様々なチップレットがベースダイ2810に接着され、インターコネクトレイヤ2812を介して互い及びベースダイ2810内のロジックと通信するよう構成され得る。一実施形態において、ベースダイ2810は、スケジューラ2811及び電力管理2821ロジックユニットを含むことができるグローバルロジック2801と、インターフェース2802と、ディスパッチユニット2803と、1つ以上のL3キャッシュバンク2809A~2809Nと結合又は集積されたインターコネクトファブリックモジュール2808とを含むことができる。インターコネクトファブリックモジュール2808は、ベースダイ2810の中に組み込まれるインターチップレットファブリックであることができる。ロジックチップレットは、様々なチップレット間のメッセージを中継するためにファブリック2808を使用することができる。更には、ベースダイにあるL3キャッシュバンク2809A~2809N及び/又はメモリチップレット2806内のL3キャッシュバンクは、メモリチップレット2806内のDRAMチップレットから読み出されたデータ及びDRAMチップレット及びホストシステムメモリに伝送されるデータをキャッシュすることができる。
【0294】
一実施形態において、グローバルロジック2801は、並列プロセッサ2820のためのスケジューラ2811及び電力管理2821の機能を実行するようファームウェアを実行することができるマイクロコントローラである。グローバルロジックを実行するマイクロコントローラは、並列プロセッサ2820の対象使用ケースに合わせられ得る。スケジューラ2811は、並列プロセッサ2820のための大域的スケジューリング動作を実行することができる。電力管理2821機能は、並列プロセッサ内の個々のチップレットを、それらのチップレットが使用されてないときに、有効又は無効にするために使用され得る。
【0295】
並列プロセッサ2820の様々なチップレットは、既存の設計では単一のダイに集積されることになる特定の機能を実行するよう設計され得る。計算チップレット2805の組は、計算又はグラフィクスシェーダ命令を実行するプログラム可能なロジックを含む計算ユニット(例えば、実行ユニット、ストリーミング・マルチプロセッサ、など)のクラスタを含むことができる。メディアチップレット2804は、メディア符号化及び復号化動作を加速させるハードウェアロジックを含むことができる。メモリチップレット2806は、揮発性メモリ(例えば、DRAM)及び1つ以上のSRAMキャッシュメモリバンク(例えば、L3バンク)を含むことができる。
【0296】
図28Bに示されるように、各チップレット2830は、共通のコンポーネント及びアプリケーション固有コンポーネントを含むことができる。チップレット2830内のチップレットロジック2836は、本願で記載されているストリーミング・マルチプロセッサ、計算ユニット、又は実行ユニットのアレイなどの、チップレットの特定のコンポーネントを含むことができる。チップレットロジック2836は、任意のキャッシュ又は共有ローカルメモリ2838と結合することができ、あるいは、チップレットロジック2836内にキャッシュ又は共有ローカルメモリを含むことができる。チップレット2830は、インターチップレットファブリックを介してコマンドを受け取るファブリックインターコネクトノード2842を含むことができる。ファブリックインターコネクトノード2842を介して受け取られたコマンド及びデータは、インターコネクトバッファ2839内に一時的に記憶され得る。ファブリックインターコネクトノード2842へ伝送されるデータ及びそれから受け取られるデータは、インターコネクトキャッシュ2840に記憶され得る。電力制御2832及びクロック制御2834ロジックも、チップレット内に含まれ得る。電力制御2832及びクロック制御2834ロジックは、チップレット2830のための動的電圧及び周波数スケーリングを設定することができる設定コマンドをファブリックを介して受け取ることができる。一実施形態において、各チップレットは、独立したクロックドメイン及び電力ドメインを有することができ、他のチップレットから独立してクロックゲーティング及びパワーゲーティングされ得る。
【0297】
表されているチップレット2830内のコンポーネントの少なくとも一部はまた、図28Aのベースダイ2810の中に埋め込まれたロジック内に含まれ得る。例えば、ファブリックと通信するベースダイ内のロジックは、ファブリックインターコネクトノード2842の変形を含むことができる。独立してクロック又はパワーゲーティングされ得るベースダイロジックは、電力制御2832及び/又はクロック制御2834ロジックの変形を含むことができる。
【0298】
図29A~29Bは、実施形態に従う分解された並列プロセッサのパッケージビューを表す。図29Aは、パッケージアセンブリ2920の物理レイアウトを表す。図29Bは、複数のチップレット2904、2906とインターコネクトファブリック2940との間のインターコネクトを表す。
【0299】
図29Aに示されるように、パッケージアセンブリ2920は、基板2910(例えば、ベースダイ)へ接続されたハードウェアロジックチップレットの複数のユニットを含むことができる。ハードウェアロジックチップレットは、専用ハードウェアロジックチップレット2902、ロジック又はI/Oチップレット2904、及び/又はメモリチップレット2905を含むことができる。ハードウェアロジックチップレット2902及びロジック又はI/Oチップレット2904は、設定可能なロジック又は固定機能ロジックハードウェアにおいて少なくとも部分的に実装されてよく、本願で記載されているプロセッサコア、グラフィクスプロセッサ、並列プロセッサ、又は他のアクセラレータデバイスのいずれかの1つ以上の部分を含むことができる。メモリチップレット2905は、本願で記載及び例示されているようなDRAM(例えば、GDDR、HBM)メモリ又はキャッシュ(SRAM)メモリであることができる。
【0300】
各チップレットは、別個の半導体ダイとして製造され、インターコネクト構造2903を介して基板2910と結合され得る。インターコネクト構造2903は、基板2910内の様々なチップレット及びロジック間で電気信号を伝えるよう構成されてよい。インターコネクト構造2903は、例えば、バンプ又はピラーなどの、しかしこれらに限られないインターコネクトを含むことができる。いくつかの実施形態において、インターコネクト構造2903は、例えば、ロジック、I/O及びメモリチップレットの動作に関連した入出力(I/O)信号及び/又は電力若しくは接地信号などの電気信号を伝送するよう構成されてよい。
【0301】
いくつかの実施形態において、基板2910は、エポキシベースの積層基板である。基板2910は、他の実施形態では他の適切なタイプの基板を含んでもよい。パッケージアセンブリ2920は、パッケージインターコネクト2914を介して他の電気デバイスへ接続され得る。パッケージインターコネクト2914は、マザーボード、他のチップセット、又はマルチチップモジュールなどの他の電気デバイスへ電気信号を伝えるよう基板2910の表面へ結合されてよい。
【0302】
いくつかの実施形態において、ロジック又はI/Oチップレット2904及びメモリチップレット2905は、ロジック又はI/Oチップレット2904とメモリチップレット2905との間で電気信号を伝えるよう構成されるブリッジ2917を介して電気的に結合され得る。ブリッジ2917は、電気信号のためのルートを提供する密なインターコネクト構造であってよい。ブリッジ2917は、ガラス又は適切な半導体材料から成るブリッジ構造を含んでよい。電気ルーティング機能は、ロジック又はI/Oチップレット2904とメモリチップレット2905との間のチップ間接続をもたらすようブリッジ構造で形成され得る。ブリッジ2917はまた、シリコンブリッジ又はインターコネクトブリッジとも呼ばれ得る。例えば、ブリッジ2917は、いくつかの実施形態において、埋め込みマルチダイインターコネクトブリッジ(Embedded Multi-die Interconnect Bridge,EMIB)である。いくつかの実施形態において、ブリッジ2917は、単に、1つのチップレットから他のチップレットへの直接接続であってもよい。
【0303】
基板2910は、I/O2911、キャッシュメモリ2912、及び他のハードウェアロジック2913のためのハードウェアコンポーネントを含むことができる。ファブリック2915は、様々なロジックチップレットと基板2910内のロジック2911、2913との間の通信を可能にするよう基板2910に埋め込まれ得る。
【0304】
様々な実施形態において、パッケージアセンブリ2920は、ファブリック2915又は1つ以上のブリッジ2917によって相互接続されるより少ない又はより多いコンポーネント及びチップレットを含むことができる。パッケージアセンブリ2920内のチップレットは、3D又は2.5D配置で配置されてよい。一般に、ブリッジ構造2917は、例えば、ロジック又はI/Oチップレット2904とメモリチップレット2905との間のポイント・ツー・ポイントのインターコネクトを促進するために使用されてよい。ファブリック2915は、様々なロジック及び/又はI/Oチップレット(例えば、チップレット2902、2904、2911、2913)を他のロジック及び/又はI/Oチップレットと相互接続するために使用され得る。一実施形態において、基板2910内のキャッシュメモリ2912は、パッケージアセンブリ2920のためのグローバルキャッシュとして、又は分散グローバルキャッシュの部分として、又はファブリック2915の専用のキャッシュとして動作することができる。
【0305】
図29Bに示されるように、メモリチップレット2906は、インターコネクトブリッジ2947を通じてルーティングされたチップレットインターコネクト2935を介してロジック又はI/Oチップレット2904と接続することができる。インターコネクトブリッジ2947は、図29Aに示されたパッケージアセンブリ2920の基板2910に埋め込まれたブリッジ2917の変形であることができる。ブリッジ又はI/Oチップレット2904は、図29Aのファブリック2915の変形であるインターコネクトファブリック2940を介して他のチップレットと通信することができる。
【0306】
一実施形態において、メモリチップレット2906は、チップレットによって提供されるメモリ技術と対応するメモリバンク2931の組を含む。メモリバンク2931は、DRAM、SRAM、若しくはフラッシュ、又は3D XPointメモリを含むがこれらに限られない、本願で記載されているメモリのタイプのいずれかを含むことができる。メモリ制御プロトコルレイヤ2932は、メモリバンク2931の制御を可能にすることができ、1つ以上のメモリコントローラのためのロジックを含むことができる。インターコネクトブリッジプロトコルレイヤ2933は、メモリ制御プロトコルレイヤ2932とインターコネクトブリッジI/Oレイヤ2934との間でメッセージを中継することができる。インターコネクトブリッジI/Oレイヤ2934は、チップレットインターコネクト2935を介してインターコネクトブリッジI/Oレイヤ2936と通信することができる。インターコネクトブリッジI/Oレイヤ2934、2936は、チップレットインターコネクト2935を介して対応するインターコネクトへ信号を伝送するか又はそれから信号を受信する物理レイヤを表すことができる。物理I/Oレイヤは、チップレットインターコネクト2935上で信号を駆動しかつ/あるいはチップレットインターコネクト2935~信号を受信する回路構成を含むことができる。ロジック又はI/Oチップレット2904内のインターコネクトブリッジプロトコルレイヤ2937は、インターコネクトブリッジI/Oレイヤ2936からの信号を、計算又はI/Oロジック2939へ通信され得るメッセージ又は信号に変換することができる。一実施形態において、デジタルアダプタレイヤ2938は、信号の計算又はI/Oロジック2939によって使用されるメッセージ又は信号への変換を促進するために使用され得る。
【0307】
計算又はI/Oロジック2939は、インターコネクトファブリック2940を介して他のロジック又はI/Oチップレットと通信することができる。計算又はI/Oロジック2939は、一実施形態において、図28Bのファブリックインターコネクトノード2842などの、インターコネクトファブリック2940と通信することができる組み込まれたファブリックノードロジック2939を含む。
【0308】
一実施形態において、メモリチップレット2906内の制御レイヤ2986は、ロジック又はI/Oチップレット2904内の制御レイヤ2970と通信することができる。これらの制御レイヤ2968、2970は、例えば、ロジック又はI/Oチップレット2904のインターフェースバスプロトコルレイヤ2937と、メモリチップレット2906のインターフェースバスプロトコルレイヤ2933、メモリ制御プロトコルレイヤ2932及び/又はメモリバンク2931との間で電力及び設定メッセージを送るよう、アウト・オブ・バンド(out-of-band)方式で特定の制御信号を伝搬又は伝送するために使用され得る。
【0309】
図30は、実施形態に従って、インターコネクトファブリックのためのメッセージ輸送システム300を表す。メッセージ輸送システム300は、利用可能なインターフェース幅に応じて異なったレートでトラフィックを扱うよう構成され得る。具体的なインターフェース幅は、チップレットごとに様々であることができ、あるいは、ファブリックの速度又は構成は、様々な機能ユニットが相互接続されるために適切であるレートでデータが伝送されることを可能にするよう調整され得る。トランスポートレイヤはまた、クロックドメイン間でデータが転送されることと可能にするようクロックドメイン間の境界でのクロックドメインクロッシングFIFOの使用により、1つ以上のクロックドメインを横断することができる。トランスポートレイヤはまた、1つ以上のサブレいやに分割可能であり、各サブレイヤは、1つ以上のクロックドメインを含む。トランスポートレイヤが記載及び例示されているが、いくつかの実施形態において,表されている動作は、インターコネクトファブリックのデータリンクレイヤで実行され得る。
【0310】
一実施形態において、元のレイヤ3010にある第1機能ユニット3001Aは、1つ以上のトランスポートレイヤ3011、3012を経由してあて先レイヤ3013内の第2機能ユニット3001Bと通信することができる。元のレイヤ3010は、チップレット内、又は図29Aで見られたようなパッケージアセンブリ2920の基板2910などの、パッケージアセンブリの基板内のロジック又はI/Oであることができる。あて先レイヤ3013も、チップレット内又は基板内のロジック又はI/Oであることができる。一実施形態において、元のレイヤ3010及び/又はあて先レイヤ3013は、チップレット又は基板/ベースダイ内のキャッシュメモリに関連することができる。
【0311】
1つ以上のトランスポートレイヤ3011、3012は、別々のクロックドメイン内にあることができる。例えば、トランスポートレイヤ3011は、第1クロックドメイン内にあることができ、一方、トランスポートレイヤ3012は、第2クロックドメイン内にあることができる。別々のクロックドメインは、異なった周波数で動作することができる。データは、トランスポートレイヤ内のクロッククロッシングモジュール3003を介してクロックドメイン間で伝送され得る。一実施形態において、クロッククロッシングモジュール3003内の第1バッファ又は高速メモリモジュール3004は、クロスクロッシングFIFO3005を介して第2バッファ又は高速メモリモジュール3006へ中継されるデータをバッファリングすることができる。第1バッファ/高速メモリモジュール3004は、第1クロックドメイン内にあることができ、一方、第2バッファ/高速メモリモジュール3006は、第2クロックドメイン内にあることができる。
【0312】
機能ユニット3001A及び機能ユニット3001Bは、各々のファブリックインターフェース3002A、3002Bを介してメッセージをファブリックへ伝送しかつそれから受信することができる。ファブリックインターフェース3002A、3002Bは、以下図31~32に示されるように、トランスポートレイヤにわたってメッセージ及び信号を中継するためにファブリック内で使用される接続の幅を動的に設定することができる。
【0313】
図31は、インターコネクトファブリックの複数の物理リンクにわたる機能ユニット間のメッセージ又は信号の伝送を表す。一実施形態において、機能ユニットの組の間の通信チャネルが、単一の物理リンクを介して供給され得るものを超えるバンド幅要求を有している場合に、複数のリンクが、機能ユニット間の通信を即するために使用され得る。
【0314】
一実施形態において、第1機能ユニット3101Aは、第1ファブリックインターフェース3102Aへメッセージ又は信号を送ることができる。第1ファブリックインターフェース3102Aは、メッセージ又は信号を分岐し、単一の仮想チャネルとして複数の物理リンクにわたってメッセージ又は信号を送ることができる。例えば、複数の物理リンクが同じ仮想チャネルに割り当てられ得、夫々が仮想チャネルのメッセージ又は信号を運ぶことができる。
【0315】
データは、1つ以上のトランスポートレイヤ3011、3012内のクロッククロッシングモジュール3103を介してクロックドメイン間で伝送され得る。クロッククロッシングモジュール3103は、図30に示されたの同じようにして、複数のバッファ又は高速メモリ3104A~3104B、3106A~3106B(及びクロックドメインクロッシングFIFO)を介して複数の物理リンクにわたってチャネルのメッセージ又は信号を伝送する。複数の物理リンクは、メッセージ又は信号が第2機能ユニット3101Bへ供給される前に、第2ファブリックインターフェース3102Bで集束され得る。
【0316】
図32は、インターコネクトファブリックの単一チャネルにわたる複数の機能ユニットのメッセージ又は信号の伝送を表す。一実施形態において、機能ユニットの組の間の通信チャネルが、物理リンクの利用可能な全てのバンド幅を利用しないバンド幅要求を有している場合に、複数の仮想チャネルが物理リンクにわたって輸送され得る。仮想チャネルは、物理リンクに沿って時間により切り替えることができ、物理リンク内データラインの特定の組が特定の機能ユニットに割り当てられ得る。
【0317】
一実施形態において、第1の組の機能ユニット3201A、3211Aは、インターコネクトファブリックの単一の物理リンクを介して第2の組の機能ユニット3201B、3211Bと通信することができる。機能ユニット3201A、3201Bは、第1仮想チャネルに関連することができ、一方、機能ユニット3211A、3211Bは、第2仮想チャネルに関することができる。第1仮想チャネル及び第2仮想チャネルは、第1ファブリックインターフェース3202Aで集束され得る。メッセージ又は信号は、1つ以上のトランスポートレイヤ3011、3012にわたって中継され得る。データは、図30に示されたのと同じようにして、複数のバッファ又は高速メモリ3204、3206(及びクロックドメインクロッシングFIFO)を経由して1つ以上のトランスポートレイヤ3011、3012内のクロッククロッシングモジュール3203を介してクロックドメイン間で伝送され得る。複数の仮想チャネルは、メッセージ又は信号が第2の組の機能ユニット3201B、3211Bへ供給される前に、第2ファブリックインターフェース3202Bで分岐され得る。
【0318】
図33は、分解された並列プロセッサ内の機能ユニットのためのファブリック接続を設定する方法3300を表す。本願で記載されている分解された並列プロセッサのインターコネクトファブリックは、異なった設計者及び/又は製造者を有するIPコアであり得る様々な多種多様なコンポーネントのためにメッセージ及び/又は信号を伝送するよう構成可能である。チップレット又はベースダイロジックコンポーネント内で各機能ユニットによって使用されるリンクの具体的なタイプは、構成可能である。一実施形態において、リンクは、機能ユニットによって使用されるファブリックインターコネクトノードで構成可能である。
【0319】
一実施形態において、ファブリックインターコネクトノードは、並列プロセッサパッケージ内のインターコネクトファブリックを介して通信するよう構成されるべきである機能ユニットのためのバンド幅設定データを受信することができる(ブロック3302)。設定データは、分解された並列プロセッサの最初の組み立て及びプロビジョニングの間に静的に供給され得るか、あるいは、分解された並列プロセッサの初期化の間に動的に設定され得る。動的な初期化については、ファブリックインターコネクトノードは、機能ユニットとファブリックインターコネクトノードとの間のインターコネクトの物理的な幅及び周波数並びに機能ユニットのバンド幅要件を指定する機能ユニットからのバンド幅設定リクエストを受け取ることができる。
【0320】
ファブリックインターコネクトノードは、次いで、機能ユニットのための設定されたインターコネクト幅及び周波数を解析することができる(ブロック3304)。次いで、ファブリックインターコネクトノードは、機能ユニットのための集束及び/又は分岐リンクを設定することができる(ブロック3306)。設定されると、ファブリックインターコネクトノードは、設定されたリンクにわたって機能ユニットのメッセージ及び/又は信号を中継することができる(ブロック3308)。
【0321】
図34は、分解された並列プロセッサ内のインターコネクトファブリックにわたってメッセージ及び/又は信号を中継する方法3400を表す。本願で記載されている分解された並列プロセッサのインターコネクトファブリックは、複数のクロックドメインを横断しながら、分解された並列プロセッサの1つ以上のレイヤにわたってメッセージ及び/又は信号を中継することができる。
【0322】
一実施形態において、プロセッサのチップレット又はベースダイの中の第1機能ユニットは、伝送されるべきメッセージ又は信号の形でデータを生成することができる(ブロック3402)。第1機能ユニットは、第1ファブリックインターフェースノードを介してメッセージ又は信号をインターコネクトファブリックへ送信することができる(ブロック3404)。ファブリックインターフェースノードは、図31及び図32に示されるように、仮想チャネルを物理トランポートリンクに集束又は分岐することができる(ブロック3406)。伝送されるべきメッセージ又は信号は、仮想チャネルと関連付けられ、関連する仮想チャネルを介して伝送され得る。ファブリックインターコネクトがメッセージ又は信号の転送及び/又は切り替え動作をどのように実行するかは、メッセージ又は信号に割り当てられている仮想チャネルによって影響を及ぼされ得る。更には、複数の仮想チャネルは、単一の物理リンクにまとめられ得るか、あるいは、仮想チャネルは、複数の物理インクによって運ばれ得る。
【0323】
一実施形態において、インターコネクトファブリックは、1つ以上のトランスポート及び/又はデータリンクレイヤ内で複数のクロックドメインにわたってメッセージ又は信号を運ぶことができる(ブロック3408)。高速メモリ及びドメインクロッシングFIFOを含む1つ以上のクロッククロッシングモジュールは、複数のクロックドメインを横断するために使用され得る。一実施形態において、各チップレットは、インターコネクトファブリックに対して別個のクロックドメインを有することができる。インターコネクトファブリックはまた、複数のクロックドメインを有することもできる。複数のクロックドメインにわたってメッセージ又は信号を伝送することは、インターコネクトファブリック内のスイッチングロジックを用いてメッセージ又は信号を切り替えることを含むことができる。
【0324】
第2ファブリックインターフェースノードは、メッセージ又は信号を受信することができる(ブロック3410)。第2ファブリックインターフェースノードは、次いで、第2ファブリックインターフェースノードで物理輸送リンクから仮想チャネルを分岐又は集束することができる(ブロック3412)。複数の仮想チャネルが、単一の物理リンクから分岐され得るか、あるいは、仮想チャネルは、複数の物理リンクから集束され得る。プロセッサのチップレット又はベースダイの中の第2機能ユニットは、次いで、第2ハードウェアロジックでメッセージ又は信号の形でデータを受信することができる(ブロック3414)。第2機能ユニットは、次いで、受信されたデータに基づいて動作を実行することができる。
【0325】
図35は、ワークロードごとにチップレットをパワーゲーティングする方法3500を表す。一実施形態において、分解された並列プロセッサ内の電力制御ロジックは、ワークロードの要件に基づいてワークロードを実行中にどのチップレット又はロジックユニットが給電されるべきであるかを決定することができる。一実施形態において、電力制御ロジックは、どのコンポーネントがワークロードを処理するために使用されることになるかを決定するために、グローバルスケジューラ又はフロントエンドインターフェースなどの他のグローバルロジックと協働することができる。
【0326】
方法3500は、ワークロードが並列プロセッサで実行されるためのコマンドバッファを受け取ることを含む(ブロック3502)。コマンドバッファは、例えば、グローバルスケジューラ又はフロントエンドインターフェースで受け取られ得る。方法3500は、ワークロードを実行するために使用されるべきチップレットの組を決定することを更に含む(ブロック3504)。この決定は、コマンドバッファ内のコマンドを実行するために使用される機能ユニットの大域的設定及び/又はタイプを決定することによって実行され得る。
【0327】
方法3500は、ワークロードを処理するために使用されるべきいずれかの機能チップレットが、パワーゲーティングされるチップレットに存在するかどうかを決定すること、又は使用されるべきチップレットがまだ給電されていない場合にそれらのチップレットの電源を投入することを更に含む(ブロック3506)。更には、ワークロードを処理するために使用されない機能ユニットが決定され得る。チップレット内の全ての機能ユニットがワークロードを処理するために使用されるわけではない場合には、電力制御ロジックは、ワークロードを処理するために使用されないチップレットの電源を切る(パワーゲーティングする)ことができる(ブロック3508)。チップレットの電源を入れたり切ったりするために、大域的電力制御ロジックは、チップレット内の局所的電力制御ロジックに信号を送ることができる。次いで、チップレット内の局所電力制御ロジックは、チップレットの適切なパワーダウンシーケンスを実行することができる。次いで、分解された並列プロセッサは、電源を入れられた(例えば、アクティブな)チップレットを用いてワークロードを実行することができる(ブロック3510)。
【0328】
[チップレット設定に基づく製品SKUの有効化]
半導体ダイは、ダイ上に形成された集積回路を評価するよう製造中に試験される。全体的な機能のための標準試験は、ウェハでダイをプローブ試験することによって実行され得る。バーンイン試験は、ダイが分割及びパッケージ化された後に、又はベアダイのためのテストハーネスを用いて、実行され得る。欠陥があるダイは捨てられてよい。しかし、最初の試験を通過したが、最多頻度でその後の試験に失敗したダイは、正確に動作することができる頻度が少ない可能性がある。このビニングアウト(binning-out)プロセスは、性能が低い又は高いダイを選択し、それらのダイを、種々の在庫管理単位(stock keeping units,SKU)で、より高い又はより低い性能の製品の対象とすることができる。モノリシックSoC集積回路については、ビニングアウトプロセスは、粗粒度のプロセスである。欠陥がある計算又はグラフィクスコアをいくつか含むプロセッサはダウンビニングされてもよいが、最低限の製品要件を満たすために、最低限の数の欠陥がないコンポーネントが存在すべきである。
【0329】
本願で記載されている分解されたSoCアーキテクチャによれば、個々のチップレットは、チップレットレベルで試験及びビニングされ得、SKUレベルは、所与の製品SKUに対する需要に基づいて組み立て中に製品に対して決定され得る。組み立て中に、異なる設定を有する異なる製品SKUは、特定のチップレット又は同じチップレット設計の異なるビンを指定することによって、異なるメモリ量、異なる機能性、及び異なる性能で組み立てられ得る。
【0330】
分解されたプロセッサパッケージは、交換可能なチップレットを受け入れるよう構成され得る。交換可能性は、ファブリック又はブリッジインターコネクトとインターフェース接続することをチップレットに可能にすることができるチップレット用の標準の物理インターコネクトを指定することによって、可能にされる。異なるIP設計者によるチップレットは、共通のインターコネクトに適合することができ、そのようなチップレットが組み立て中に交換可能であるようにする。チップレット上のファブリック及びブリッジインターコネクトロジックは、次いで、チップレットのオンボードロジックの実際のインターコネクトレイアウトと一致するよう構成され得る。更には、チップレットからのデータは、転送される実際のデータがファブリックに不透明であるようにカプセル化を用いてインターチップレットファブリックにわたって伝送され、個々のチップレットの交換可能性を更に可能にすることができる。そのような交換可能な設計によれば、より高い又はより低い密度のメモリが、メモリチップレットスロットに挿入可能であり、一方、より多い又はより少ないコア数の計算又はグラフィクスチップレットがロジックチップレットに挿入可能である。
【0331】
組み立て中に機能性も決定され得る。例えば、メディアチップレットは、製品使用及び需要に基づいて追加又は削除され得る。いくつかの製品では、オンパッケージネットワーキング又は他の通信チップレットが追加され得る。いくつかの製品では、異なるタイプのホスト接続が、異なるチップレットを用いて有効にされ得る。例えば、ホストインターコネクトのバージョン変化は、物理形状因子の変化を伴わないインターコネクトロジックに対する変更を含み、新しいインターコネクトバージョンへのアップグレードは、新しいインターコネクトロジックをモノリシックダイに挿入するためのSoCの再設計を必要とせずに、組み立て中にホストインターコネクトチップレットを変更することによって実行されてよい。
【0332】
チップレットビニングは、標準化されたシャーシインターフェースに適合するチップレット試験ハーネスの準備によって更に可能にされ得る。このチップレット試験ハーネスは、異なるSKUについてのチップレットの迅速な試験及びビニングを可能にすることができる。
【0333】
図36は、交換可能なチップレット3602を含む並列プロセッサアセンブリ3600を表す。交換可能なチップレット3602は、1つ以上のベースチップレット3604、3608上の標準化されたスロット内に組み立てられ得る。ベースチップレット3604、3608は、本願で記載されている他のブリッジインターコネクトと同様であることができるブリッジインターコネクト3606を介して結合され得る。メモリチップレットは、ブリッジインターコネクトを介してロジック又はI/Oチップレットへ接続され得る。I/O及びロジックチップレットは、インターコネクトファブリックを介して通信することができる。ベースチップレットは夫々、ロジック又はI/O又はメモリ/キャッシュの1つについての標準化されたフォーマットで1つ以上のスロットをサポートすることができる。異なるメモリ密度が、製品の目標SKUに基づいてチップレットスロットに組み込まれ得る。更には、機能ユニットのタイプの数が異なっているロジックチップレットが、組み立て時に、製品の目標SKUに基づいて選択され得る。更には、異なるタイプのIPロジックコアを含むチップレットが、交換可能なチップレットスロット内に挿入され得る。
【0334】
図37は、実施形態に従って、交換可能チップレットシステム3700を表す。一実施形態において、交換可能チップレットシステム3700は、複数のメモリチップレットスロット3701A~3701F及び複数のロジックチップレットスロット3702A~3702Fを含む少なくとも1つのベースチップレット3710を含む。ロジックチップレットスロット(例えば、3702A)及びメモリチップレットスロット(例えば、3701A)は、本願で記載されている他のインターコネクトブリッジと同様であることができるインターコネクトブリッジ3735によって接続され得る。ロジックチップレットスロット3702A~3702Fは、ファブリックインターコネクト3708を介して相互接続され得る。ファブリックインターコネクト3708は、データをファブリックパケットにカプセル化することによってデータに対してアグノスティックである様態でロジックチップレットスロット間のデータパケットの中継を可能にするよう構成され得るスイッチングロジック3718を含む。ファブリックパケットは、次いで、ファブリックインターコネクト3708内のあて先スロットへ切り替えられ得る。
【0335】
ファブリックインターコネクト3708は、1つ以上の物理データチャネルを含むことができる。1つ以上のプログラム可能な仮想チャネルが、各物理チャネルによって運ばれ得る。仮想チャネルは、仮想チャネルごとに別々にネゴシエーションされたチャネルアクセスにより、独立して調停されてよい。仮想チャネル上のトラフィックは、1つ以上のトラフィッククラスに分類されてよい。一実施形態において、優先順位付けシステムは、仮想チャネル及びトラフィッククラスが調停のための相対的優先順位を割り当てられることを可能にする。一実施形態において、トラフィック平衡アルゴリズムは、ファブリックに結合されている各ノードに対して略等しいバンド幅及びスループットを維持するよう動作する。一実施形態において、ファブリックインターコネクトロジックは、ファブリックに結合されているノードよりも高いクロックレートで動作して、ノード間のバンド幅要件を維持しながらインターコネクト幅の低減を可能にする。特定のノードがより高いバンド幅を必要とする場合に、複数の物理リンクは、先の図31で見られたように、単一の仮想チャネルを運ぶよう結合され得る。一実施形態において、各物理リンクは、アイドル時に別々にクロックゲーティングされる。次の動作の早期指示は、データが伝送されるべきである前に物理リンクを起動させるトリガとして使用され得る。
【0336】
図38は、実施形態に従う、仮想チャネル上で運ばれる複数のトラフィッククラスの例示である。第1ファブリックコネクタ3802及び第2ファブリックコネクタ3804は、最大‘M’個の仮想チャネル3806A~3806Mを有するファブリックチャネル3806上の通信を促進する。仮想チャネルは、固定の組の物理チャネル上での可変長情報の転送を可能にする。仮想チャネルは、恒久的な仮想チャネルであってよく、あるいは、仮想チャネルは、システム設定に基づいて動的に有効か又は無効化されてもよい。恒久的な仮想チャネルを使用すると、固定チャネルIDが可能になり、仮想チャネル管理のオーバーヘッドを最小限に抑えることができる。チャネルを動的に設定すると、チャネル管理オーバーヘッドが増える代わりに、設計の柔軟性が高まる。
【0337】
各仮想チャネルは、複数のトラフィッククラスを割り当てられてよい。トラフィッククラスは、調停に関係があるトラフィックの区分である。各仮想チャネルは、最大‘N’個のトラフィッククラスを運んでよい。トラフィックの各クラスは、プログラミング(ヒューズ、設定レジスタ、など)を通じて特定の仮想チャネルに割り当てられる。トラフィッククラスの最大‘L’個のクラスが、所与の仮想チャネルに割り当てられてよい。
【表5】
【0338】
上の表5は、図38で表されているような例示的なトラフィッククラスの仮想チャネル割り当てを示す。ファブリックインターコネクトは、入来するトラフィックの各ユニットを分類し、そして、入来ユニットがその割り当てられた仮想チャネル内を移動することを確かにするロジックを含んでよい。一実施形態において、チャネル上でのデータ伝送は、先入れ先出し(first-in-first-out,FIFO)順序で起こり、チャネル調停は、仮想チャネルに基づいて行われる。仮想チャネル内のトラフィックは、同じ仮想チャネル上の追加のトラフィックの伝送をブロックしてよい。しかし、所与の仮想チャネルは、異なる仮想チャネルをブロックしない。従って、異なる仮想チャネル上のトラフィックは、独立して調停される。
【0339】
コヒーレンシは、ファブリックインターコネクトノード間のデータ伝送中に維持される。一実施形態において、GPGPU又は並列プロセッサ上の発信スレッドのデータは、同じトラフィッククラス内でルーティングされ、トラフィッククラスは、特定の仮想チャネルに割り当てられる。単一の仮想チャネル上の単一のトラフィッククラス内のデータは、FIFO順序で伝送される。よって、単一スレッドからのデータは、ファブリックを介して伝送されるときに厳密に順序づけられ、スレッドごとのコヒーレンシは、リード・アフター・ライト(read-after-write)又はライト・アフター・リード(write-after-read)データハザードを回避するよう維持される。一実施形態において、スレッドグループコヒーレンシは、リソースノード間の大域的同期化メカニズムにより維持される。
【表6】
【0340】
上の表6は、例となるトラフィッククラス優先順位付けを示す。優先順位アルゴリズムは、トラフィッククラスの夫々に割り当てるべき優先順位を決定するようプログラムされてよい。プログラム可能なトラフィッククラス優先順位は、トラフィッククラスが任意のトラフィックグルーピングメカニズムとして使用されることを可能にする。このとき、トラフィックは、コヒーレンシを維持するために単にクラス内でグループ化されてよく、あるいは、特定のトラフィックは、高い優先順位を割り当てられ、もっぱら高優先データに用いられ得る。例えば、仮想チャネル1 3806Bに夫々割り当てられているクラス1及びクラス4は、2の優先順位を割り当てられてよい。仮想チャネル1 3806Aに夫々割り当てられているクラス2及びクラス5は、1の優先順位を割り当てられてよい。トラフィッククラス‘N’は、優先順位が3である仮想チャネル3 3806Cに割り当てられてよい。クラス2のトラフィックは、可能な限り直ぐに伝送されるべきであるか、又は他のトラフィッククラスによってブロックされるべきでない遅延センシティブなデータであってよく、一方、クラス1のトラフィックは、コヒーレンシを維持するようグループ化されている単一スレッドからの適度に遅延センシティブなトラフィックであってよい。
【0341】
トラフィッククラスは、全てのトラフィッククラスに対して、又は同じ仮想チャネル上のトラフィッククラスの優先順位に対して、優先順位を割り当てられてよい。一実施形態において、優先順位スキームは、重みをトラフィッククラスに割り当てることによって設計される。このとき、より高い重みは、より高い優先順位を示す。公平な優先順位付けアルゴリズムが用いられてよく、このとき、各参加者は、飢餓を防ぐよう最小限の量のバンド幅を保証される。一実施形態において、絶対優先順位アルゴリズムは、特定の環境下で使用され、このとき、より高い優先度のトラフィックは、より低い優先度を常にブロックする。
【0342】
絶対優先度が使用されている場合に、通信デッドロックを防ぐよう、追加のアルゴリズムが実施される。仮想チャネル及びトラフィッククラスを組み合わせて使用することにより、デッドロックの可能性は減る。これは、所与の仮想チャネル上で絶対優先順位を有している単一のトラフィッククラスが、別の仮想チャネル上のトラフィックをブロックしないからである。一実施形態において、飢餓条件又は潜在的なデッドロックが1つの仮想チャネルで検出される場合に、ブロックされたトラフィッククラスは、別の仮想チャネルに再割り当てされてよい。
【表7】
【0343】
上の表7は、例となる仮想チャネル優先順位付けを示す。トラフィッククラスと同様に、各仮想チャネルも優先順位を受け取ってよく、チャネル調停は、仮想チャネルの相対優先順位を考慮に入れることができる。例えば、仮想チャネル2上のデータトラフィックは、他の仮想チャネル上のデータよりも高い相対優先順位を有してよい。重み付き優先順位システムが、仮想チャネル優先順位付けにより用いられてもよく、このとき、より高い重みは、より高い優先順位を示す。公平な優先順位システム又は絶対優先順位システムが使用されてもよい。
【0344】
図39は、実施形態に従って、交換可能なチップレットのスロット間のアグノスティックなデータ伝送の方法3900を表す。方法3900は、本願で記載されているファブリックインターコネクト及びファブリックインターコネクトノード内のハードウェアロジックによって実行され得る。一実施形態において、方法3900は、第1ファブリックインターフェースノードが第1チップレットロジックスロットからデータを受信することを含む(ブロック3902)。第1ファブリックインターフェースノードは、データをファブリックパケットにカプセル化することができる(ブロック3904)。第1ファブリックインターフェースノードは、パケットを、ファブリックインターコネクト内のスイッチングロジックを介して第2ファブリックインターフェースノードへ送信することができる(ブロック3906)。第2ファブリックインターフェースノードは、パケットを受信し(ブロック3908)、パケットからデータをパケット解除することができる(3910)。第2ファブリックインターフェースノードは、次いで、パケットからカプセル解除されたデータを第2チップレットロジックスロットへ送信することができる(ブロック3912)。
【0345】
図40は、実施形態に従って、交換可能なチップレットのためのモジュールアーキテクチャを表す。一実施形態において、チップレット設計4030は、インターフェーステンプレート4008との相互運用のためにチップレットロジック4002を適応させることによって交換可能にされ得る。インターフェーステンプレート4008は、図28Bのチップレット2830で見られたような、電力制御2832及びクロック制御2834ロジックなどの標準化されたロジックと、インターコネクトバッファ2839と、インターコネクトキャッシュ2840と、ファブリックインターコネクトノード2842とを含むことができる。次いで、IP設計者は、インターフェーステンプレート4008とインターフェース接続するよう設計されるチップレットロジック4002を設けることができる。チップレットロジック4002の仕様は、様々であることができ、本願で記載されている実行ユニット、計算ユニット、又はストリーミング・マルチプロセッサを含むことができる。チップレットロジック4002はまた、メディア符号化及び/又は復号化ロジック、行列アクセラレーションロジック、又はレイトレーシングロジックを含むことができる。メモリチップレットについては、チップレットロジック4002は、メモリセルにより置換可能であり、ファブリックインターコネクトノードは、例えば、図29Bのメモリチップレット2906において表されているようなインターコネクトブリッジI/O回路により置換可能である。
【0346】
図41は、チップレット試験、検証及び集積において使用される標準化されたシャーシインターフェースの使用を表す。チップレット4130は、図40のチップレット4030と同様に、ロジックレイヤ4110及びインターフェースレイヤ4112を含むことができる。インターフェースレイヤ4112は、テストハーネス4116へ着脱可能に結合されることをチップレットに可能にする一時インターコネクト4114と通信することができる標準化されたインターフェースであることができる。テストハーネス4116は、テストホスト4118と通信することができる。テストハーネス4116は、テストホスト4118の通信下で、ロジックレイヤ4110内の不具合を確認しかつチップレット4130の性能又は機能性ビンを決定するために初期試験又はビニングアウトプロセス中に個々のチップレット4130に対する一連のテストを実行することができる。例えば、ロジックレイヤ4110は、欠陥がある機能ユニット及び欠陥がない機能ユニットの数と、特定の機能ユニット(例えば、行列アクセラレータ、レイトレーシングコア、など)の閾数が有効であるかどうかとを決定するよう試験され得る。ロジックレイヤ4110はまた、内部ロジックが目標周波数で動作することができるかどうかを決定するよう試験され得る。
【0347】
図42は、様々な製品ティアを作成するための個々にビニングされたチップレットの使用を表す。試験されていないチップレット4202の組は試験され、個々のチップレットが特定の性能又は機能性ティアに適合するかどうかに応じて、性能ビン4204、メインストリームビン4206、及び経済ビン4208の組にビニングされ得る。性能ビン4204は、メインストリームビン4206の性能(例えば、安定した周波数)を超えるチップレットを含むことができ、一方、経済ビン4208は、役には立つが、メインストリームビン4206性能を下回るチップレットを含むことができる。
【0348】
チップレットは、組み立て中に交換可能に配置され得るので、異なる製品ティアは、チップレットの選択された組に基づいて集められ得る。ティア1製品4212は、性能ビン4204内のチップレットからのみ集められ、一方、ティア2製品4214は、性能ビン4204からのチップレットとメインストリームビン4206からの他のチップレットとの選択を含むことができる。例えば、高バンド幅、低レイテンシメモリを必要とするワークロードのために設計されるティア2製品4214は、メインストリームビン4206からの計算、グラフィクス、又はメディアチップレットを使用ながら、性能ビン4204からの高性能メモリチップレットを使用することができる。更には、ティア3製品4216は、そのような製品が高いメモリバンド幅要件を伴わないワークロードに合わせられる場合に、メインストリームビン4206からのメインストリーム計算チップレットと、経済ビン4208からのメモリとを使用して組み立てられ得る。ティア4製品4218は、経済ビン4208内の役には立つが性能が低いチップレットから組み立てられ得る。
【0349】
図43は、チップレット構成に基づいて異なる製品ティアを有効にする方法4300を表す。方法4300は、チップレットダイを試験パッケージングにパッケージ化することを含む(ブロック4302)。次いで、チップレットは、機能ユニットの周波数及び/又は数に基づいてチップレットをビニングアウトするよう試験され得る(ブロック4304)。次いで、分解された並列プロセッサは、製品要件に基づいて、1つ以上のビンからのチップレットを用いて組み立てられ得る(ブロック4306)。追加のチップレット(例えば、メディア、レイトレーシング、など)も、機能要件に基づいて加えられ得る(ブロック4308)。
【0350】
次の付記及び/又は例は、具体的な実施形態又はその例に関係がある。例の中の特定は、1つ以上の実施形態においてどこでも使用されてよい。異なる実施形態又は例の様々な特徴は、様々な異なる用途に適するよういくつかの特徴は含まれ他は除外されて、様々に組み合わされてよい。例は、本願で記載されている実施形態及び例に従う方法、方法の動作を実行する手段、機械によって実行される場合にその機械に方法の動作を実行させる命令を含む少なくとも1つの機械読み出し可能な媒体、又は装置若しくはシステムなどの対象を含んでよい。様々なコンポーネントは、記載されている動作又は機能を実行する手段であることができる。
【0351】
本願で記載されている実施形態は、SoC集積回路のアーキテクチャを、共通のシャーシ上にパッケージ化され得る複数の相異なるチップレットに分解する技術を提供する。一実施形態において、グラフィクス処理ユニット又は並列プロセッサは、別々に製造される多種多様なシリコンチップレットから成る。チップレットは、他のチップレットともにより大きいパッケージ内に組み立てられ得る相異なるロジックユニットを含む少なくとも部分的にパッケージ化された集積回路である。異なるIPコアロジックを備えたチップレットの多種多様な組が単一のデバイス内に組み立てられ得る。
【0352】
一実施形態は、インターコネクトファブリックを含むベースダイと、インターコネクト構造により前記ベースダイ及び前記インターコネクトファブリックと結合された1つ以上のチップレットとを有し、前記インターコネクト構造が、前記1つ以上のチップレットと前記インターコネクトファブリックとの間の電気通信を可能にする、汎用グラフィクスプロセッサを提供する。前記1つ以上のチップレットは、第1チップレット及び第2チップレットを含むことができ、前記第1チップレットは、前記ベースダイと結合され、かつ、第1インターコネクト構造により前記インターコネクトファブリックへ接続され、前記第2チップレットは、前記ベースダイと結合され、かつ、第2インターコネクト構造により前記インターコネクトファブリックへ接続される。チップレットは、汎用グラフィクス処理動作、メディア符号化又は復号化動作、行列演算アクセラレーション、及び/又はレイトレーシングを実行するよう構成された機能ユニットを含むことができる。一実施形態において、チップレットは、ネットワークプロセッサ及び物理ネットワークインターフェース(例えば、ネットワークポート、無線ラジオ、など)を含む。チップレットは、キャッシュメモリ又はDRAMであってよいメモリを更に含むことができる。各チップレットは、別々にかつ独立してパワーゲーティングされてよい。更には、ロジック又はメモリが前記ベースダイに含まれ得る。一実施形態において、前記ベースダイはキャッシュメモリを含む。ベースダイにおけるキャッシュメモリは、プロセッサワイドキャッシュであることができる。ベースダイキャッシュメモリは、チップレット内のキャッシュメモリと協働するよう構成され得る。
【0353】
一実施形態は、インターコネクトファブリックを含むベースダイと、複数のインターコネクト構造により前記ベースダイ及び前記インターコネクトファブリックと結合された複数のチップレットとを有し、前記複数のインターコネクト構造が、前記複数のチップレットと前記インターコネクトファブリックとの間の電気通信を可能にし、前記インターコネクトファブリックが、前記複数のチップレットの中の第1チップレットに関連した第1ファブリックインターフェースノードからメッセージ又は信号を受信し、該メッセージ又は信号を、前記複数のチップレットの中の第2チップレットに関連した第2ファブリックインターフェースノードへ中継する、汎用グラフィクスプロセッサを有するデータ処理システムを提供する。前記インターコネクトファブリックは、該インターコネクトファブリックの複数の物理リンク上で複数の仮想チャネルを介してメッセージ又は信号を伝送することができる。一実施形態において、複数の仮想チャネルは、単一の物理リンクにわたって伝送され得る。一実施形態において、単一の仮想チャネルは、複数の物理リンクにわたって伝送され得る。アイドル状態の物理リンクは、別々にパワーゲーティングされ得る。
【0354】
一実施形態は、プロセッサのチップレット又はベースダイ内の第1機能ユニットでデータを生成することと、第1ファブリックインターフェースノードを介してインターコネクトファブリックへ前記データを伝送することと、前記プロセッサ内の複数のクロックドメインにわたって前記データを運ぶことと、第2ファブリックインターフェースノードで前記データを受け取ることと、前記プロセッサの前記チップレット又はベースダイ内の第2機能ユニットへ前記データを伝送することと、前記第2機能ユニットで、受信されたデータに基づいて動作を実行することとを有する方法を提供する。方法は、前記インターコネクトファブリックの仮想チャネルと前記データを関連付け、前記仮想チャネルに基づいて前記データを転送又はスイッチングすることを更に有する。更なる実施形態では、方法は、前記第1ファブリックインターフェースノードで前記仮想チャネルを分岐することと、複数の物理リンクを用いて前記複数のクロックドメインにわたって前記仮想チャネルのデータを運ぶことと、前記第2ファブリックインターフェースノードで前記仮想チャネルを収束させることとを含む。更なる他の実施形態では、前記仮想チャネルは、第1仮想チャネルであり、方法は、前記第1仮想チャネルを前記第1ファブリックインターフェースノードで第2仮想チャネルと収束させることと、単一の物理リンクを用いて前記複数のクロックドメインにわたって前記第1仮想チャネル及び前記第2仮想チャネルを運ぶことと、前記第2ファブリックインターフェースノードで前記第1仮想チャネル及び前記第2仮想チャネルを分岐することとを更に有する。
【0355】
一実施形態は、分解されたアーキテクチャを有するプロセッサ内のマイクロコントローラのためのファームウェアを記憶している非一時的な機械読み出し可能な媒体であって、前記ファームウェアは、前記マイクロコントローラに、ワークロードが前記プロセッサで実行されるためのコマンドバッファを受け取ることと、前記ワークロードを実行するために使用されるべき機能ユニットを含むプロセッサ上のチップレットの組を決定することと、前記ワードを実行するために使用されるべき機能ユニットを含まない1つ以上のチップレットをパワーゲーティングすることと、給電されたチップレットを用いて前記ワークロードを実行することとを有する動作を実行させる命令を含む。動作は、前記ワークロードを実行するために使用されるべき機能ユニットを含むチップレットが給電されているかどうかを決定し、前記チップレットがパワーゲーティングされているときに前記チップレットの電源を投球することを更に有することができる。
【0356】
更なる実施形態は、交換可能なチップレットを受け入れるよう構成され得る分解されたプロセッサパッケージを提供する。交換可能性は、チップレットがファブリック又はブリッジインターコネクトとインターフェース接続することを可能にすることができるチップレット用の標準物理インターコネクトを指定することによって、有効にされる。異なるIP設計者によるチップレットは、共通のインターコネクトに適合することができ、そのようなチップレットが組み立て中に交換可能であるようにする。チップレット上のファブリック及びブリッジインターコネクトロジックは、次いで、チップレットのオンボードロジックの実際のインターコネクトレイアウトと一致するよう構成され得る。更には、チップレットからのデータは、転送される実際のデータがファブリックに不透明であるようにカプセル化を用いてインターチップレットファブリックにわたって伝送され、個々のチップレットの交換可能性を更に可能にすることができる。そのような交換可能な設計によれば、より高い又はより低い密度のメモリが、メモリチップレットスロットに挿入可能であり、一方、より多い又はより少ないコア数の計算又はグラフィクスチップレットがロジックチップレットに挿入可能である。
【0357】
一実施形態は、インターコネクトファブリックを含むベースダイと、インターコネクト構造により前記ベースダイ及び前記インターコネクトファブリックと結合された1つ以上のチップレットとを有し、前記インターコネクト構造が、前記1つ以上のチップレットと前記インターコネクトファブリックとの間の電気通信を可能にし、前記1つ以上のチップレットが、汎用グラフィクスプロセッサの組み立て中に交換可能である、汎用グラフィクスプロセッサを提供する。前記1つ以上のチップレットは、メモリデバイスに関連したメモリセルを有するメモリチップレットを含む。前記メモリチップレットは、第1チップレットスロットへ結合される。前記1つ以上のチップレットは、第1ロジックチップレット及び第2ロジックチップレットを更に含むことができる。前記第1ロジックチップレットは、前記ベースダイと結合され、かつ、第1インターコネクト構造により前記インターコネクトファブリックへ接続される。前記第1インターコネクト構造は、第1ロジックチップレットスロットに固着される。前記第2ロジックチップレットは、前記ベースダイと結合され、かつ、第2インターコネクト構造により前記インターコネクトファブリックへ接続される。前記第2インターコネクト構造は、第2ロジックチップレットスロットに固着される。
【0358】
一実施形態において、前記第1ロジックチップレットスロットは、前記第1ロジックチップレット又は第3ロジックチップレットを受け入れるよう構成される。前記第1ロジックチップレットは、汎用グラフィクス処理動作を実行するよう構成された機能ユニット(例えば、実行ユニット、計算ユニット、ストリーミング・マルチプロセッサ、など)を含み、一方、第3ロジックチップレットは、テンソルコアなどの行列アクセラレーション動作を実行するよう構成された機能ユニットを含む。前記第2ロジックチップレットスロットは、前記第2ロジックチップレット又は第4ロジックチップレットを受け入れるよう構成され得る。前記第2ロジックチップレットは、メディアを、本願で記載されている1つ以上のメディア符号化フォーマットへ符号化し、そのようなフォーマットから復号し、又はそのようなフォーマットの間でトランスコードするメディア操作を実行するよう構成された機能ユニットを含む。前記第4ロジックチップレットは、代わりに、ネットワークプロセッサ及び物理ネットワークインターフェースを含むことができる。
【0359】
一実施形態において、本願で記載されているロジックチップレットは、機能ユニットを含む第1レイヤと、ファブリックインターコネクトノードを含む第2レイヤとを含む。本願で記載されているメモリチップレットは、メモリセルのバンクを含む第1レイヤと、メモリチップレットとロジックチップレットとの間のインターコネクトブリッジに関連したI/O回路を含む第2レイヤとを含むことができる。更なる実施形態では、前記ベースダイは、第1ベースダイであり、該第1ベースダイは、インターコネクトブリッジを介して第2ベースダイと結合する。
【0360】
一実施形態は、インターコネクトファブリックを含むベースダイと、複数のインターコネクト構造により前記ベースダイ及び前記インターコネクトファブリックと結合された複数のチップレットとを有する汎用グラフィクスプロセッサを有するデータ処理システムを提供する。前記複数のインターコネクト構造は、前記複数のチップレットと前記インターコネクトファブリックとの間の電気通信を可能にする。前記インターコネクトファブリックは、前記複数のチップレットの中の第1ロジックチップレットに関連した第1ファブリックインターフェースノードからファブリックパケットを受信し、該ファブリックパケットを、前記複数のチップレットの中の第2ロジックチップレットに関連した第2ファブリックインターフェースノードへ中継することができる。前記インターコネクトファブリックは、該インターコネクトファブリックの複数の物理リンク上で複数の仮想チャネルを介して前記ファブリックパケットを伝送することができる。前記インターコネクトファブリックは、該インターコネクトファブリックの複数の物理リンクにわたって単一の仮想チャネルに関連したファブリックパケットを伝送することができる。前記インターコネクトファブリックはまた、該インターコネクトファブリックの単一の物理リンクにわたって複数の仮想チャネルのファブリックパケットを伝送することができる。前記複数の物理リンクの物理リンクは、該物理リンクがアイドル状態であるときにパワーゲーティングされ得る。一実施形態において、仮想チャネルのファブリックパケットは、1つ以上のトラフィッククラスに関連することができる。仮想チャネル及びトラフィッククラスは夫々、関連する優先順位を有することができる。
【0361】
一実施形態は、第1ファブリックインターフェースノードで第1ロジックチップレットスロットからデータを受信することと、前記第1ファブリックインターフェースノードで前記データをファブリックパケットにカプセル化することと、該ファブリックパケットを第2ファブリックインターフェースノードへスイッチングロジックを介して伝送することと、前記第2ファブリックインターフェースノードで前記パケットを受信することと、前記第2ファブリックインターフェースノードで前記ファブリックパケットからデータをカプセル解除することと、前記ファブリックパケットからの前記データを前記第2ファブリックインターフェースノードから第2ロジックチップレットスロットへ伝送することとを有する方法を提供する。前記ファブリックパケットは、前記第1ファブリックインターフェースノードと前記第2ファブリックインターフェースノードとの間で複数のクロックドメインを通過することができる。
【0362】
当然ながら、実施形態の1つ以上の部分は、ソフトウェア、ファームウェア、及び/又はハードウェアの異なる組み合わせを用いて実装されてよい。この詳細な説明の全体を通して、説明のために、多数の具体的な詳細が、本発明の完全な理解をもたらすために示されている。なお、当業者に明らかなように、実施形態は、これらの具体的な詳細のいくつかによらずとも実施されてよい。特定の場合に、よく知られている構造及び機能は、実施形態の発明対象を不明りょうにしないよう詳述されていない。従って、本発明の範囲及び精神は、続く特許請求の範囲に関して判断されるべきである。
図1
図2A
図2B
図2C
図2D
図3A
図3B
図3C
図4A
図4B
図4C
図4D
図4E
図4F
図5
図6
図7
図8
図9A
図9B
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19A
図19B
図20
図21
図22A
図22B
図23
図24A
図24B
図25
図26A
図26B
図27
図28A
図28B
図29A
図29B
図30
図31
図32
図33
図34
図35
図36
図37
図38
図39
図40
図41
図42
図43