(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022151634
(43)【公開日】2022-10-07
(54)【発明の名称】プロセッサ内の遅延を低減するテッセレーション再分配
(51)【国際特許分類】
G06T 15/00 20110101AFI20220929BHJP
G06T 17/20 20060101ALI20220929BHJP
【FI】
G06T15/00 501
G06T17/20
【審査請求】未請求
【請求項の数】25
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2022021745
(22)【出願日】2022-02-16
(31)【優先権主張番号】17/211,095
(32)【優先日】2021-03-24
(33)【優先権主張国・地域又は機関】US
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.BLUETOOTH
2.HDMI
3.Direct3D
4.OpenGL
(71)【出願人】
【識別番号】593096712
【氏名又は名称】インテル コーポレイション
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】アマンディープ シン
(72)【発明者】
【氏名】アーサー ハンター ジュニア
(72)【発明者】
【氏名】アビナヴ シュリヴァスタヴァ
(72)【発明者】
【氏名】ラシュミ アガルワル
(72)【発明者】
【氏名】モヒート チョラディア
【テーマコード(参考)】
5B080
【Fターム(参考)】
5B080AA13
5B080AA14
5B080AA15
5B080AA17
5B080BA00
5B080BA03
5B080CA01
5B080CA03
5B080CA04
5B080FA01
5B080FA02
5B080FA03
5B080FA08
5B080GA02
5B080GA22
(57)【要約】 (修正有)
【課題】プロセッサ内の遅延を低減するテッセレーション再分配を行う。
【解決手段】処理システム100において、プロセッサは、別個のフロントエンド及びバックエンドを有する並列相互接続ジオメトリ固定機能ユニットを設ける。フロントエンドは、パッチカリング及び送信を実行し、バックエンドは、フロントエンドからのパッチ受信及びテッセレーションを実行し、再分配バスを用いてバックエンドの間でパッチを再分配するテッセレーション再分配中央エンジンを設け、フロントエンドから並列に、分配のためにマークされたパッチを受信し、テッセレーション再分配エンジンはパッチを順に処理し、フロントエンドのうちの1つから同期バリアパケットを受信することに応答して、テッセレーション再分配中央エンジンにより、同期バリアパケットをバックエンドへブロードキャストして、バックエンドのうちの1つにテッセレーション作業をローカルに処理させる。
【選択図】
図1
【特許請求の範囲】
【請求項1】
機器であって、
プロセッサを含み、前記プロセッサは、
別個のフロントエンド及びバックエンドを有する並列相互接続ジオメトリ固定機能ユニットを設け、前記フロントエンドはパッチカリング及び送信を実行し、前記バックエンドは前記フロントエンドからのパッチ受信及びパッチテッセレーションを実行し、
前記フロントエンドと前記バックエンドとの間に設けられた再分配バスを用いて前記バックエンドの間でパッチを再分配するテッセレーション再分配中央エンジンを設け、
前記テッセレーション再分配中央エンジンにより前記フロントエンドから並列に、分配のためにマークされたパッチ送信を受信し、前記テッセレーション再分配中央エンジンは前記パッチ送信を順に処理し、
前記フロントエンドのうちの1つから同期バリアパケットを受信することに応答して、前記テッセレーション再分配中央エンジンにより、前記同期バリアパケットを前記バックエンドへブロードキャストして、前記バックエンドのうちの1つにテッセレーション作業をローカルに処理させる、
機器。
【請求項2】
前記同期バリアパケットは、前記同期バリアパケットに対応する前記バックエンドのうちの前記1つに、前記バックエンドのうちの前記1つに対応する中間記憶から前記テッセレーション作業を読み出させ、前記バックエンドのうちの前記1つは、前記中間記憶から読み出した前記テッセレーション作業に対して前記パッチテッセレーションを実行する、請求項1に記載の機器。
【請求項3】
前記同期バリアパケットは、前記同期バリアパケットを生じた前記並列相互接続ジオメトリ固定機能ユニットの識別子(ID)を含み、前記バックエンドは、前記IDを利用して、前記同期バリアパケットを処理するか又は前記同期バリアパケットをドロップするかを決定する、請求項2に記載の機器。
【請求項4】
前記中間記憶は、先入れ先出し(FIFO)キューであり、前記FIFOキューの各エントリは、前記同期バリアパケットに関連付けられるエントリに格納されたテッセレーション作業に応答して設定される同期バリアビットを含む、請求項2に記載の機器。
【請求項5】
前記フロントエンドは、ローカル処理のためにマークされたテッセレーション作業を前記中間記憶へプッシュする、請求項2に記載の機器。
【請求項6】
前記並列相互接続ジオメトリ固定機能ユニットの各々は、対応する中間記憶を含む、請求項1に記載の機器。
【請求項7】
前記並列相互接続ジオメトリ固定機能ユニットの各々は、前記対応するバックエンドの各々に前記中間記憶又は前記再分配バスのいずれからのテッセレーション作業を処理するかを示す制御信号を切り換える選択回路を含む、請求項6に記載の機器。
【請求項8】
前記テッセレーション再分配中央エンジンは、前記フロントエンドから受信した分配のためにマークされた前記パッチ送信をキューに入れ、キューに入れられた前記パッチ送信を順番に処理し、前記順番は前記並列相互接続ジオメトリ固定機能ユニットの決定されたシーケンスにより定められる、請求項1に記載の機器。
【請求項9】
前記プロセッサは、グラフィック処理ユニット(GPU)である、請求項1に記載の機器。
【請求項10】
前記機器は、単一命令複数データ(SIMD)マシン又は単一命令複数スレッド(SIMT)マシンのうちの少なくとも1つである、請求項1に記載の機器。
【請求項11】
方法であって、
プロセッサにより、別個のフロントエンド及びバックエンドを有する並列相互接続ジオメトリ固定機能ユニットを設けるステップであって、前記フロントエンドはパッチカリング及び送信を実行し、前記バックエンドは前記フロントエンドからのパッチ受信及びパッチテッセレーションを実行する、ステップと、
前記フロントエンドと前記バックエンドとの間に設けられた再分配バスを用いて、前記並列相互接続ジオメトリ固定機能ユニットの前記バックエンドの間でパッチを再分配するテッセレーション再分配中央エンジンを設けるステップと、
前記テッセレーション再分配中央エンジンにより前記フロントエンドから並列に、分配のためにマークされたパッチ送信を受信するステップであって、前記テッセレーション再分配エンジンは前記パッチ送信を順に処理する、ステップと、
前記フロントエンドのうちの1つから同期バリアパケットを受信することに応答して、前記テッセレーション再分配中央エンジンにより、前記同期バリアパケットを前記バックエンドへブロードキャストするステップであって、前記バックエンドのうちの1つにテッセレーション作業をローカルに処理させる、ステップと、
を含む方法。
【請求項12】
前記同期バリアパケットは、前記同期バリアパケットに対応する前記バックエンドのうちの前記1つに、前記バックエンドのうちの前記1つに対応する中間記憶から前記テッセレーション作業を読み出させ、前記バックエンドのうちの前記1つは、前記中間記憶から読み出した前記テッセレーション作業に対して前記パッチテッセレーションを実行する、請求項11に記載の方法。
【請求項13】
前記同期バリアパケットは、前記同期バリアパケットを生じた前記並列相互接続ジオメトリ固定機能ユニットの識別子(ID)を含み、前記バックエンドは、前記IDを利用して、前記同期バリアパケットを処理するか又は前記同期バリアパケットをドロップするかを決定する、請求項12に記載の方法。
【請求項14】
前記中間記憶は、先入れ先出し(FIFO)キューであり、前記FIFOキューの各エントリは、前記同期バリアパケットに関連付けられるエントリに格納されたテッセレーション作業に応答して設定される同期バリアビットを含む、請求項12に記載の方法。
【請求項15】
前記並列相互接続ジオメトリ固定機能ユニットの各々は、対応する中間記憶を含み、前記並列相互接続ジオメトリ固定機能ユニットの各々は、前記対応するバックエンドの各々に前記中間記憶又は前記再分配バスのいずれからのテッセレーション作業を処理するかを示す制御信号を切り換える選択回路を含む、請求項11に記載の方法。
【請求項16】
前記テッセレーション再分配中央エンジンにより、前記フロントエンドから受信した分配のためにマークされた前記パッチ送信をキューに入れるステップと、
前記テッセレーション再分配中央エンジンにより、キューに入れられた前記パッチ送信を順番に処理するステップであって、前記順番は前記並列相互接続ジオメトリ固定機能ユニットの決定されたシーケンスにより定められる、ステップと、
を更に含む請求項11に記載の方法。
【請求項17】
プロセッサ内の遅延を低減するテッセレーション再分配を行うシステムであって、
メモリと、複数のGPUの1つ以上のプロセッサと、を含み、
前記1つ以上のプロセッサは、
前記メモリに通信可能に結合され、
別個のフロントエンド及びバックエンドを有する並列相互接続ジオメトリ固定機能ユニットを設け、前記フロントエンドはパッチカリング及び送信を実行し、前記バックエンドは前記フロントエンドからのパッチ受信及びパッチテッセレーションを実行し、
前記フロントエンドと前記バックエンドとの間に設けられた再分配バスを用いて前記バックエンドの間でパッチを再分配するテッセレーション再分配中央エンジンを設け、
前記テッセレーション再分配中央エンジンにより前記フロントエンドから並列に、分配のためにマークされたパッチ送信を受信し、前記テッセレーション再分配エンジンは前記パッチ送信を順に処理し、
前記フロントエンドのうちの1つから同期バリアパケットを受信することに応答して、前記テッセレーション再分配中央エンジンにより、前記同期バリアパケットを前記バックエンドへブロードキャストして、前記バックエンドのうちの1つにテッセレーション作業をローカルに処理させる、
システム。
【請求項18】
前記同期バリアパケットは、前記同期バリアパケットに対応する前記バックエンドのうちの前記1つに、前記バックエンドのうちの前記1つに対応する中間記憶から前記テッセレーション作業を読み出させ、前記バックエンドのうちの前記1つは、前記中間記憶から読み出した前記テッセレーション作業に対して前記パッチテッセレーションを実行する、請求項17に記載のシステム。
【請求項19】
前記同期バリアパケットは、前記同期バリアパケットを生じた前記並列相互接続ジオメトリ固定機能ユニットの識別子(ID)を含み、前記バックエンドは、前記IDを利用して、前記同期バリアパケットを処理するか又は前記同期バリアパケットをドロップするかを決定する、請求項17又は18に記載のシステム。
【請求項20】
前記中間記憶は、先入れ先出し(FIFO)キューであり、前記FIFOキューの各エントリは、前記同期バリアパケットに関連付けられるエントリに格納されたテッセレーション作業に応答して設定される同期バリアビットを含む、請求項17~19のいずれかに記載のシステム。
【請求項21】
前記フロントエンドは、ローカル処理のためにマークされたテッセレーション作業を前記中間記憶へプッシュする、請求項17~20のいずれかに記載のシステム。
【請求項22】
前記並列相互接続ジオメトリ固定機能ユニットの各々は、対応する中間記憶を含む、請求項17~21のいずれかに記載のシステム。
【請求項23】
前記並列相互接続ジオメトリ固定機能ユニットの各々は、前記対応するバックエンドの各々に前記中間記憶又は前記再分配バスのいずれからのテッセレーション作業を処理するかを示す制御信号を切り換える選択回路を含む、請求項17~22のいずれかに記載のシステム。
【請求項24】
複数の命令を含む少なくとも1つの機械可読媒体であって、前記命令は、コンピューティング装置上で実行されることに応答して、該コンピューティング装置に請求項11~16のいずれか一項に記載の方法を実行させる、機械可読媒体。
【請求項25】
プロセッサ内の遅延を低減するテッセレーション再分配を行う機器であって、請求項11~16のいずれか一項に記載の方法を実行する手段を含む機器。
【発明の詳細な説明】
【技術分野】
【0001】
本願明細書は、概して、データ処理に関し、特に、プロセッサ内の遅延を低減するテッセレーション再分配に関する。
【背景技術】
【0002】
現在の並列グラフィックデータ処理は、例えば線形補間、テッセレーション、ラスタライズ、テクスチャマッピング、深さテスト、等のようなグラフィックデータに対する特定の演算を実行するために開発されたシステム及び方法を含む。伝統的に、グラフィックプロセッサは、グラフィックデータを処理するために固定機能計算ユニットを使用するが、最近は、グラフィック処理の部分はプログラマブルにされ、そのようなプロセッサは頂点及びフラグメントデータを処理する様々な演算をサポートできるようになっている。
【0003】
更に性能を向上するために、グラフィックプロセッサは、標準的に、グラフィックパイプラインの異なる部分を通じて可能な限り多くのグラフィックデータを並列に処理しようとするパイプラインのような処理技術を実施する。単一命令複数データ(single instruction, multiple data (SIMD))又は単一命令複数スレッド(single instruction, multiple thread (SIMT))アーキテクチャを有する並列グラフィックプロセッサは、グラフィックパイプラインの中で並列処理の量を最大化するよう設計される。SIMDアーキテクチャでは、複数の処理要素を有するコンピュータが、複数のデータポイントに対して同時に同じ演算を実行しようとする。SIMTアーキテクチャでは、並列スレッドのグループが、処理効率を向上するために、可能な限り頻繁にプログラム命令を同期して一緒に実行しようとする。
【0004】
グラフィック処理ユニット(graphics processing unit (GPU))における競争力のあるジオメトリ処理性能を提供することは、標準的に、複数の、並列の、同時のジオメトリ処理固定機能パイプライン(geometry processing fixed-function pipeline (GPP))に関連する。これらのGPP(時に、SMM、ジオメトリ及び設定固定機能パイプライン、又はプレテッセレーション及びポストテッセレーションパイプラインとも呼ばれる)は、OpenGLレンダリングパイプライン(rendering pipeline (RP))におけるプログラマブルシェーダ及び固定機能ステージの混合を含む。コンピュータグラフィックでは、テッセレーションは、シーン内のオブジェクトを表す多角形のデータセット(頂点セットとも呼ばれる)を管理し、及びそれらをレンダリングのために適切な構造に分割するために使用される。リアルタイムグラフィックに対するテッセレーションの利点は、制御パラメータ(例えば、カメラ距離)に基づき3D多角形メッシュ及びそのシルエットエッジから詳細を動的に加算及び減算できることである。テッセレーションは、パッチプリミティブ(primitive)(「オブジェクト」とも呼ばれる)を細分化し、その頂点の頂点値を計算することを含む。テッセレーション制御シェーダは、テッセレーション係数を指定することにより、実行すべきテッセレーションの量を決定してよい。パッチ当たりの頂点の数は、アプリケーションレベルで定義されてよい。パッチオブジェクトは、三角形又は四角形(正方形)であってよい。
【0005】
テッセレーションは、入力パッチプリミティブに関連するパラメータドメインを三角形プリミティブに細分化し、(それらの三角形プリミティブの角と一致する)テッセレーション済みドメイン点における頂点を計算することを含む。入力パッチプリミティブは、三角形又は四角形パラメータドメインに関連してよい。テッセレーション制御シェーダは、パッチ毎にテッセレーション係数のセットを指定することにより、ドメインがどれ位細かく三角形に細分化されるかを決定してよい。テッセレーション評価シェーダは、続いて、入力パッチプリミティブに関連する入力制御点のセット及びテッセレーション済みドメイン点におけるドメインパラメータを用いて、頂点値を計算してよい。パッチプリミティブに関連する入力制御点の数は、アプリケーションレベルで定義されてよい。
【0006】
並列レンダリンググラフィックアーキテクチャにおける問題は、厳格な順序通りの3次元(3D)パイプラインレンダリングモデルを維持しながら、どれだけ並列GPP及びレンダリング及びラスタライズパイプライン(RP)を利用するかである。関連する主な課題は、アプリケーションにより供給される「オブジェクト空間」ジオメトリプリミティブの、レンダリング処理中のレンダリングされる画像への任意のマッピングである。ここで、「Sort-Middle」アーキテクチャが、業界により効果的に利用されている。この方式では、GPUは、先ず、並列GPPにより、完全なジオメトリ処理を、オブジェクト空間プリミティブの任意に分散したサブセット(「バッチ」)に対して実行する。結果として生じるスクリーン空間プリミティブは、次に正しくレンダリングされ(つまり、時間的にソートされ)、各PRの所有するスクリーン空間領域に基づき、ラスタライズクロスバーによりRPに分配される。
【0007】
設計においてGPPの数(N)を増大することは、標準的に、ラスタライズクロスバーへ出力するためにGPPが「その順番を待つ」間に、十分なGPP出力バッファを提供するために、各GPPの出力でより深いバッファを利用する。ここで、GPP出力バッファは、他の(N-1)個のGPPがそれらのバッチをクロスバーへ排出するのに要する平均時間に合わせてサイズが決定される可能性がある。十分なバッファが提供されない場合、「順番を待っている」GPPは排出されないために直ぐに停止になり、順番になるとGPP処理レート(これはクロスバーレートより遅い)でクロスバーへ出力するので、全体のジオメトリスループットは、単一GPPのスループットにまで低下する傾向がある。
【図面の簡単な説明】
【0008】
本実施形態の上記の特徴を詳細に理解できるように、上記で簡単に要約された実施形態のより具体的な説明は、実施形態を参照することによって得ることができ、そのいくつかは添付の図面に示される。しかしながら、添付の図面は、単に標準的な実施形態を示し、従って本願の範囲の限定と考えられるべきではないことに留意する。
【0009】
【0010】
【
図2A】コンピューティングシステム及びグラフィックプロセッサを示す。
【
図2B】コンピューティングシステム及びグラフィックプロセッサを示す。
【
図2C】コンピューティングシステム及びグラフィックプロセッサを示す。
【
図2D】コンピューティングシステム及びグラフィックプロセッサを示す。
【0011】
【
図3A】は、追加のグラフィックプロセッサ及び計算アクセラレータアーキテクチャのブロック図を示す。
【
図3B】は、追加のグラフィックプロセッサ及び計算アクセラレータアーキテクチャのブロック図を示す。
【
図3C】は、追加のグラフィックプロセッサ及び計算アクセラレータアーキテクチャのブロック図を示す。
【0012】
【
図4】グラフィックプロセッサのグラフィック処理エンジンのブロック図である。
【0013】
【
図5A】グラフィックプロセッサコアの中で利用される処理要素のアレイを含むスレッド実行ロジックを示す。
【
図5B】グラフィックプロセッサコアの中で利用される処理要素のアレイを含むスレッド実行ロジックを示す。
【0014】
【0015】
【
図7】グラフィックプロセッサ命令フォーマットを示すブロック図である。
【0016】
【
図8】追加グラフィックプロセッサアーキテクチャのブロック図である。
【0017】
【
図9A】グラフィックプロセッサコマンドフォーマット及びコマンドシーケンスを示す。
【
図9B】グラフィックプロセッサコマンドフォーマット及びコマンドシーケンスを示す。
【0018】
【
図10】データ処理システムの例的なグラフィックソフトウェアアーキテクチャを示す。
【0019】
【
図11A】IPコア開発システムを示すブロック図である。
【0020】
【
図11B】集積回路パッケージ組立体の断面側面図を示す。
【0021】
【
図11C】基板(例えば、基本ダイ)に接続されるハードウェアロジックチップレットの複数のユニットを含むパッケージ組立体を示す。
【0022】
【
図11D】相互交換可能なチップレットを含むパッケージ組立体を示す。
【0023】
【
図12】例示的なシステムオンチップ集積回路を示すブロック図である。
【0024】
【
図13A】SoC内で使用するための例示的なグラフィックプロセッサを示すブロック図である。
【
図13B】SoC内で使用するための例示的なグラフィックプロセッサを示すブロック図である。
【0025】
【
図14】実施形態による、遅延を低減するテッセレーション再分配のための固定機能テッセレーションステージを有する集積回路グラフィックプロセッサを示すブロック図である。
【0026】
【
図15】実施形態による、遅延を低減するテッセレーション再分配のためのテッセレーションエンジンを有するテッセレーション再分配システムを示すブロック図である。
【0027】
【
図16】プロセッサ内の遅延を低減するテッセレーション再分配のための方法の実施形態を示すフロー図である。
【0028】
【
図17】プロセッサ内の遅延を低減するテッセレーション再分配を実行するテッセレーションエンジンフロントエンド(TEFE)のための方法の実施形態を示すフロー図である。
【0029】
【
図18】プロセッサ内の遅延を低減するテッセレーション再分配を実行するテッセレーションエンジンバックエンド(TEBE)のための方法の実施形態を示すフロー図である。
【発明を実施するための形態】
【0030】
グラフィック処理ユニット(graphics processing unit (GPU))は、ホスト/プロセッサコアに通信可能に結合されて、例えば、グラフィック演算、機械学習演算、パターン分析演算、及び/又は種々の汎用GPU(general-purpose GPU (GPGPU))機能を加速させる。GPUは、バス又は別の相互接続(例えば、PCIe又はNVLinkのような高速相互接続)を介してホストプロセッサ/コアに通信可能に結合されてよい。代替として、GPUは、コアと同じパッケージ又はチップに統合され、内部プロセッサバス/相互接続(つまり、パッケージ又はチップの内部にある)を介してコアに通信可能に結合されてよい。GPUが接続される方法に拘わらず、プロセッサコアは、作業記述子に含まれるコマンド/命令のシーケンスの形式で、GPUに作業を割り当ててよい。GPUは、次に、これらのコマンド/命令を効率的に処理するために、専用回路/ロジックを使用する。
【0031】
以下の説明では、より完全な理解を提供するために、多くの特定の詳細が説明される。しかしながら、当業者には、本願明細書に記載される実施形態がこれらの特定の詳細のうちの1つ以上を有しないで実行されてよいことが明らかである。他の例では、本発明の実施形態の詳細を不明瞭にすることを回避するために、よく知られた特徴は説明されない。
【0032】
<システム概要>
図1は、実施形態による処理システム100のブロック図である。システム100は、単一プロセッサのデスクトップシステム、マルチプロセッサのワークステーションシステム、又は多数のプロセッサ102又はプロセッサコア107を有するサーバシステムで使用されてよい。一実施形態では、システム100は、ローカル又はワイドエリアネットワークへの有線又は無線接続を備えるモノのインターネット(IoT)内のような、モバイル、ハンドヘルド、又は埋め込み型装置で使用するためのシステムオンチップ(system-on-a-chip:SoC)集積回路の中に組み込まれた処理プラットフォームである。
【0033】
一実施形態では、システム100は、サーバに基づくゲームプラットフォーム、ゲーム及びメディアコンソールを含むゲームコンソール、モバイルゲームコンソール、ハンドヘルドゲームコンソール、又はオンラインゲームコンソールを含み、それに結合され、又はその中に統合され得る。幾つかの実施形態では、システム100は、携帯電話機、スマートフォン、タブレットコンピューティング装置、又は低い内部記憶容量を備えるラップトップのようなモバイルインターネット接続装置の部分である。処理システム100は、現実世界の視覚、聴覚、又は触覚経験を補強するために、或いはテキスト、音声、グラフィック、ビデオ、ホログラフ画像又はビデオ、又は触覚フィードバックを提供するために、視覚、聴覚又は触覚出力を提供する拡張現実(AR)又は仮想現実(VR)機能により拡張された、スマートウォッチウェアラブル装置、スマート眼鏡又は衣服のようなウェアラブル装置、他の拡張現実(AR)装置又は他の仮想現実(VR)装置も含み、それに結合され、又はその中に統合され得る。幾つかの実施形態では、処理システム100は、テレビジョン又はセットトップボックスを含み又はその部分である。一実施形態では、システム100は、バス、トラクター、トレーラー、自動車、モータ又は電動自転車、飛行機又はグライダー(又はそれらの任意の組み合わせ)のような自動走行車両を含み、それに結合され、又はその中に統合され得る。自動走行車両は、システム100を使用して、車両の周囲の検知された環境を処理してよい。
【0034】
幾つかの実施形態では、1つ以上のプロセッサ102は、それぞれ、実行されるとシステム又はユーザソフトウェアのための動作を実行する命令を処理する1つ以上のプロセッサコア107を含む。幾つかの実施形態では、1つ以上のプロセッサコア107のうちの少なくとも1つは、特定命令セット109を処理するよう構成される。幾つかの実施形態では、命令セット109は、CISC(Complex Instruction Set Computing)、RISC(Reduced Instruction Set Computing)、又はVLIW(Very Long Instruction Word)による計算を実現してよい。1つ以上のプロセッサコア107は、他の命令セットのエミュレーションを促進するための命令を含み得る異なる命令セット109を処理してよい。プロセッサコア107は、DSP(Digital Signal Processor)のような他の処理装置も含んでよい。
【0035】
幾つかの実施形態では、プロセッサ102は、キャッシュメモリ104を含む。アーキテクチャに依存して、プロセッサ102は、単一内部キャッシュまたは複数レベルの内部キャッシュを有し得る。幾つかの実施形態では、キャッシュメモリは、プロセッサ102の種々のコンポーネントの間で共有される。幾つかの実施形態では、プロセッサ102は、知られいているキャッシュコヒーレンシ技術を用いてプロセッサコア107の間で共有されてよい外部キャッシュ(例えば、レベル3(L3)キャッシュまたは最終レベルキャッシュ(Last Level Cache:LLC)(図示しない))も使用する。レジスタファイル106は、プロセッサ102に追加で含まれてよく、異なるデータ型を格納するための異なる種類のレジスタを含んでよい(例えば、整数レジスタ、浮動小数点レジスタ、状態レジスタ、及び命令ポインタレジスタ)。幾つかのレジスタは、汎用レジスタであってよく、他のレジスタはプロセッサ102の設計に固有であってよい。
【0036】
幾つかの実施形態では、1つ以上のプロセッサ102は、プロセッサ102とシステム100内の他のコンポーネントとの間でアドレス、データ、又は制御信号のような通信信号を送信するために1つ以上のインタフェースバス110に結合される。インタフェースバス110は、一実施形態では、DMI(Direct Media Interface)バスのバージョンのようなプロセッサバスであり得る。しかしながら、プロセッサバスは、DMIバスに限定されず、1つ以上の周辺機器相互接続バス(例えば、PCI、PCI Express)、メモリバス、又は他の種類のインタフェースバスを含んでよい。一実施形態では、プロセッサ102は、統合メモリ制御部116、及びプラットフォーム制御ハブ130を含む。メモリ制御部116は、メモリ装置とシステム100の他のコンポーネントとの間の通信を促進し、一方で、プラットフォーム制御バス(platform controller hub:PCH)130は、ローカルI/Oバスを介してI/O装置への接続を提供する。
【0037】
メモリ装置120は、DRAM(dynamic random-access memory)装置、SRMA(static random-access memory)装置、フラッシュメモリ装置、位相変化メモリ装置、又はプロセスメモリとして機能するために適切な性能を有する何らかの他のメモリ装置であり得る。一実施形態では、メモリ装置120は、システム100のシステムメモリとして動作し、1つ以上のプロセッサ102がアプリケーション又はプロセスを実行するときに使用するために、データ122及びメモリ121を格納し得る。メモリ制御部116は、グラフィック及びメディア動作を実行するために、プロセッサ102内の1つ以上のグラフィックプロセッサ108と通信し得る任意的な外部グラフィックプロセッサ118とも結合する。幾つかの実施形態では、グラフィック、メディア、及び又は計算動作は、グラフィック、メディア、又は計算動作の専用セットを実行するよう構成され得るコプロセッサであるアクセラレータ112により支援されてよい。例えば、一実施形態では、アクセラレータ112は、機械学習又は計算動作を最適化するために使用される行列乗算アクセラレータである。一実施形態では、アクセラレータ112は、グラフィックプロセッサ108と共同して光線追跡動作を実行するために使用され得る光線追跡アクセラレータである。一実施形態では、外部アクセラレータ119は、アクセラレータ112n代わりに又はそれと共同して使用されてよい。
【0038】
幾つかの実施形態では、ディスプレイ装置111は、プロセッサ102に接続できる。ディスプレイ装置111は、モバイル電子装置又はラップトップ装置又はディスプレイインタフェース(例えば、DisplayPort等)を介して取り付けられた外部ディスプレイ装置内のような、内部ディスプレイ装置の1つ以上であり得る。一実施形態では、ディスプレイ装置111は、仮想現実(VR)アプリケーション又は拡張現実(AR)アプリケーションで使用する立体ディスプレイのようなHMD(head mounted display)であり得る。
【0039】
幾つかの実施形態では、プラットフォーム制御ハブ130は、周辺機器がメモリ装置120及びプロセッサ102に高速I/Oバスを介して接続することを可能にする。I/O周辺機器は、限定ではないが、音声制御部146、ネットワーク制御部134、ファームウェアインタフェース128、無線トランシーバ126、タッチセンサ125、データ記憶装置124(例えば、不揮発性メモリ、揮発性メモリ、ハードディスクドライブ、フラッシュメモリ、NAND、3D NAND、3D XPoint、等)を含む。データ記憶装置124は、記憶インタフェース(例えば、SATA)を介して、又は周辺機器コンポーネント相互接続バス(例えばPCI、PCI Express)のような周辺機器バスを介して、接続できる。タッチセンサ125は、タッチスクリーンセンサ、圧力センサ、又は指紋センサを含み得る。無線トランシーバ126は、Wi-Fiトランシーバ、Bluetoothトランシーバ、又は3G、4G、5G、又はLTE(Long-Term Evolution)トランシーバのようなモバイルネットワークトランシーバであり得る。ファームウェアインタフェース128は、システムファームウェアとの通信を可能にし、例えばUEFI(unified extensible firmware interface)であり得る。ネットワーク制御部134は、有線ネットワークへのネットワーク接続を可能にできる。幾つかの実施形態では、高性能ネットワーク制御部(図示しない)は、インタフェースバス110と結合する。音声制御部146は、一実施形態では、マルチチャネル高分解能音声制御部である。幾つかの実施形態では、システム100は、レガシー(例えば、PS/2(Personal System 2))をシステムに結合する光レガシーI/O制御部140を含む。プラットフォーム制御ハブ130は、キーボード及びマウス143の結合、カメラ144、又は他のUSB入力装置のような、1つ以上のUSB(Universal Serial Bus)制御部142接続入力装置にも接続できる。
【0040】
システム100は、例示的に示され、限定的ではなく、異なる方法で構成される他の種類のデータ処理システムも使用されてよいことが理解される。例えば、メモリ制御部116及びプラットフォーム制御ハブ130のインスタンスは、外部グラフィックプロセッサ118のような個別外部グラフィックプロセッサに統合されてよい。一実施形態では、プラットフォーム制御ハブ130及び/又はメモリ制御部116は、1つ以上のプロセッサ102の外部にあってよい。例えば、システム100は、プロセッサ102と通信するシステムチップセット内のメモリ制御ハブ及び周辺機器制御は部として構成されてよい、外部メモリ制御部116及びプラットフォーム制御ハブ130を含み得る。
【0041】
例えば、CPU、メモリ、及び他のコンポーネントのようなコンポーネントの配置された回路基板(「スレッド(sled)」)は、熱性能の向上のために設計される。幾つかの例では、プロセッサのような処理コンポーネントは、スレッドの上側に配置され、DIMMのような近くのメモリはスレッドの下側に配置される。この設計により提供される向上した気流の結果、コンポーネントは、標準的なシステムより、高い周波数及び高い電力レベルで動作し、それにより性能を向上する。さらに、スレッドは、ラック内の電力及びデータ通信ケーブルと盲目的に嵌合するよう構成され、それにより、それらの素早く取り外し、アップグレードし、再インストールし、及び/又は交換するための能力を向上する。同様に、プロセッサ、アクセラレータ、メモリ、及びデータ記憶ドライブのようなスレッド上に配置された個別コンポーネントは、互いにより遠くに離されることにより、簡単にアップグレードされるよう構成される。説明のための実施形態では、コンポーネントは、さらに、それらの真正さを証明するためにハードウェアアテステーション(attestation)機能を含む。
【0042】
データセンタは、Ethernet及びOmni-Pathを含む複数の他のネットワークアーキテクチャをサポートする単一のネットワークアーキテクチャ(「ファブリック(fabric)」)を利用できる。スレッドは、標準的なより対線ケーブル(例えば、カテゴリ5、カテゴリ5e、カテゴリ6、等)より高い帯域幅及びより低い遅延を提供する光ファイバを介してスイッチに結合できる。高い帯域幅、低い遅延の相互接続及びネットワークアーキテクチャにより、データセンタは、使用中、メモリ、アクセラレータ(例えば、GPU、グラフィックアクセラレータ、FPGA、ASIC、ニューラルネットワーク、及び/又は人工知能アクセラレータ、等)、物理的に非集合型のデータ記憶ドライブのようなリソースをプールし、それらを計算リソース(例えば、プロセッサ)に提供してよく、計算リソースがプールされたリソースに、まるで該リソースがローカルにあるかのようにアクセスできるようにする。
【0043】
電力供給または電源は、電圧及び/又は電流をシステム100又はここに記載の任意のコンポーネント又はシステムに提供できる。一例では、電源は、壁付きコンセントに差し込むためのAC-DC(交流から直流への)アダプタを含む。このようなAC電力は、継続可能なエネルギ(例えば、太陽電力)電源であり得る。一例では、電源は、外部AC-DC変換器のようなDC電源を含む。一例では、電力供給又は電源は、充電場の近くを介して充電する無線充電ハードウェアを含む。一例では、電源は、内部バッテリ、交流源、動きに基づく電源、太陽電池、又は燃料電池を含み得る。
【0044】
図2A~2Dは、ここに記載の実施形態により提供されるコンピューティングシステム及びグラフィックプロセッサを示す。本願明細書の任意の他の図の要素と同じ参照符号(又は名称)を有する
図2A~2Dの要素は、本願明細書の他の場所に記載されたものと同様の任意の方法で動作し又は機能し得るが、このようなものに限定されない。
【0045】
図2Aは、1つ以上のプロセッサコア202A~202N、統合メモリ制御部214、及び統合グラフィックプロセッサ208を有するプロセッサ200の一実施形態のブロック図である。プロセッサ200は、破線ボックスで表される最大で追加コア202Nまでの及びそれを含む追加コアを含み得る。プロセッサコア202A~202Nの各々は、1つ以上の内部キャッシュユニット204A~204Nを含む。幾つかの実施形態では、各プロセッサコアは、1つ以上の共有キャッシュユニット206へのアクセスも有する。内部キャッシュユニット204A~204N及び共有キャッシュユニット206は、プロセッサ200内のキャッシュメモリ階層構造を表す。キャッシュメモリ階層構造は、各プロセッサコア内の少なくとも1つのレベルの命令及びデータキャッシュ、及びレベル2(L2)、レベル3(L3)、レベル4(L4)、又は他のレベルのキャッシュのような1つ以上のレベルの共有中間キャッシュを含んでよい。ここで、外部メモリの前の最高レベルのキャッシュは、LLCとして分類される。幾つかの実施形態では、キャッシュコヒーレンシロジックは、種々のキャッシュユニット206及び204A~204Nの間でコヒーレンシを維持する。
【0046】
幾つかの実施形態では、プロセッサ200は、1つ以上のバス制御ユニット216及びシステムエージェントコア210のセットも含んでよい。1つ以上のバス制御ユニット216は、1つ以上のPCI又はPCI Expressバスのような周辺機器バスのセットを管理する。システムエージェントコア210は、種々のプロセッサコンポーネントのために管理機能を提供する。幾つかの実施形態では、システムエージェントコア210は、種々の外部メモリ装置(図示しない)を管理するために、1つ以上の統合メモリ制御部214を含む。
【0047】
幾つかの実施形態では、プロセッサコア202A~202Nのうちの1つ以上は、同時マルチスレッドのサポートを含む。このような実施形態では、システムエージェントコア210は、マルチスレッド処理の間に、コア202A~202Nを調整し及び動作するためのコンポーネントを含む。システムエージェントコア210は、プロセッサコア202A~202N及びグラフィックプロセッサ208の電力状態を調整するためのロジック及びコンポーネントを含む電力制御ユニット(power control unit:PCU)を更に含んでよい。
【0048】
幾つかの実施形態では、プロセッサ200は、グラフィック処理動作を実行するためにグラフィックプロセッサ208を更に含む。幾つかの実施形態では、グラフィックプロセッサ208は、共有キャッシュユニット206のセットと、1つ以上の統合メモリ制御部214を含むシステムエージェントコア210と、に結合する幾つかの実施形態では、システムエージェントコア210は、1つ以上の結合されたディスプレイへのグラフィックプロセッサ出力を駆動するために、ディスプレイ制御部211も含む。幾つかの実施形態では、ディスプレイ制御部211は、少なくとも1つの相互接続を介してグラフィックプロセッサと結合される個別モジュールも含んでよく、又はグラフィックプロセッサ208内に統合されてよい。
【0049】
幾つかの実施形態では、リングに基づく相互接続ユニット212が、プロセッサ200の内部コンポーネントを結合するために使用される。しかしながら、ポイントツーポイント相互接続、切り替え相互接続、又は従来よく知られている技術を含む他の技術のような、代替の相互接続ユニットが使用されてよい。幾つかの実施形態では、グラフィックプロセッサ208は、I/Oリンク213を介してリング相互接続212に結合する。
【0050】
例的なI/Oリンク213は、種々のプロセッサコンポーネントとeDRAMモジュールのような高性能内蔵メモリモジュール218との間の通信を促進するパッケージI/O相互接続を含む複数の種類のI/O相互接続のうちの少なくとも1つを表す。幾つかの実施形態では、プロセッサコア202A~202N及びグラフィックプロセッサ208の各々は、共有最終レベルキャッシュ(Last Level Cache)として内蔵メモリモジュール218を使用できる。
【0051】
幾つかの実施形態では、プロセッサコア202A~202Nは、同じ命令セットアーキテクチャを実行する同種コアである。別の実施形態では、プロセッサコア202A~202Nは、命令セットアーキテクチャの観点から異種であり、プロセッサコア202A~202Nのうちの1つ以上が第1命令セットを実行し、一方で、他のコアのうちの少なくとも1つが第1命令セットのサブセットまたは異なる命令セットを実行する。一実施形態では、プロセッサコア202A~202Nは、マイクロアーキテクチャの観点から異種であり、1つ以上のコアが相対的に高い電力消費結合を有し、1つ以上のパワーコアがより低い電力消費を有する。一実施形態では、プロセッサコア202A~202Nは、計算能力の観点から異種である。さらに、プロセッサ200は、1つ以上のチップ上に、又は他のコンポーネントに加えて図示のコンポーネントを有するSoC集積回路として実装できる。
【0052】
図2Bは、本願明細書に記載の幾つかの実施形態による、グラフィックプロセッサコア219のハードウェアロジックのブロック図である。本願明細書の任意の他の図の要素と同じ参照符号(又は名称)を有する
図2Bの要素は、本願明細書の他の場所に記載されたものと同様の任意の方法で動作し又は機能し得るが、このようなものに限定されない。グラフィックプロセッサコア219は、時に、コアスライスと呼ばれ、モジュール式グラフィックプロセッサ内の1又は複数のグラフィックコアであり得る。グラフィックプロセッサコア219は、1つのグラフィックコアスライスの例であり、本願明細書に記載のグラフィックプロセッサは、目標電力及び性能エンベロープに基づき複数のグラフィックコアスライスを含んでよい。各グラフィックプロセッサコア219は、汎用及び固定機能ロジックのモジュール式ブロックを含む、サブスライスとも呼ばれる複数のサブコア221A~221Fに結合された固定機能ブロック230を含み得る。
【0053】
幾つかの実施形態では、固定機能ブロック230は、例えば低性能及び/又は低電力グラフィックプロセッサ実装において、グラフィックプロセッサコア219内の全てのサブコアにより共有可能なジオメトリ/固定機能パイプライン231を含む。種々の実施形態では、ジオメトリ/固定機能パイプライン231は、3D固定機能パイプライン(例えば、後述する
図3及び
図4のような3Dパイプライン312)、ビデオフロントエンドユニット、スレッド生成部(spawner)及びスレッドディスパッチャ(dispatcher)、及び統合リターンバッファ(例えば、後述する
図4の統合リターンバッファ418)を管理する統合リターンバッファマネジャを含む。
【0054】
一実施形態では、固定機能ブロック230は、グラフィックSoCインタフェース232、グラフィックマイクロコントローラ233、及びメディアパイプライン234も含む。グラフィックSoCインタフェース232は、グラフィックプロセッサコア219とシステムオンチップ集積回路内の他のプロセッサコアとの間のインタフェースを提供する。グラフィックマイクロコントローラ233は、スレッドディスパッチャ、スケジューリング、及び先取り(pre-emption)を含む、グラフィックプロセッサコア219の種々の機能を管理するよう構成可能なプログラマブルサブプロセッサである。メディアパイプライン234(例えば、FIG3及びFIG4のメディアパイプライン316)は、画像及びビデオデータを含むマルチメディアデータの復号、符号化、前処理、及び/又は後処理を促進するためのロジックを含む。メディアパイプライン234は、サブコア221A~221F内の計算又はサンプリングロジックへの要求により、メディア動作を実施する。
【0055】
一実施形態では、SoCインタフェース232は、グラフィックプロセッサコア219が汎用アプリケーションプロセッサコア(例えばCPU)、及び/又は、共有最終レベルキャッシュメモリ、システムRAM及び/又は内蔵オンチップまたはオンパッケージDRAMを含むメモリ階層構造要素を含むSoC内の他のコンポーネントと通信することを可能にする。SoCインタフェース232は、カメラ画像パイプラインのようなSoC内の固定機能装置と通信することも可能にし、グラフィックプロセッサコア219とSoC内のCPUとの間で共有され得るグローバルメモリアトミックの使用及び/又はその実装を可能にする。SoCインタフェース232は、グラフィックプロセッサコア219のための電力管理制御も実装でき、グラフィックコア219のクロックドメインとSoC内の他のクロックドメインとの間のインタフェースを可能にする。一実施形態では、SoCインタフェース232は、コマンド及び命令をグラフィックプロセッサ内の1つ以上のグラフィックコアの各々に提供するよう構成されるコマンドストリーマ及びグローバルスレッドディスパッチャからのコマンドバッファの受信を可能にする。コマンド及び命令は、メディア動作が実行されるとき、メディアパイプライン234に、又はグラフィック処理動作が実行されるとき、ジオメトリ及び固定機能パイプライン(例えば、ジオメトリ及び固定機能パイプライン231、ジオメトリ及び固定機能パイプライン237)に、ディスパッチされ得る。
【0056】
グラフィックマイクロコントローラ233は、グラフィックプロセッサコア219のための種々のスケジューリング及び管理タスクを実行するよう構成され得る。一実施形態では、グラフィックマイクロコントローラ233はサブコア221A~221F内の、実行ユニット(EU)アレイ221A~221F、224A~224F内の種々のグラフィック並列エンジンに対してグラフィック及び/又は計算作業負荷スケジューリングを実行できる。このスケジューリングモデルでは、グラフィックプロセッサコア219を含むSoCのCPUコア上で実行するホストソフトウェアは、複数のグラフィックプロセッサドアベル(doorbell)のうちの1つに作業負荷を提出でき、これは、適切なグラフィックエンジン上のスケジューリング動作を呼び出す。スケジューリング動作は、次に実行するべき作業負荷を決定し、作業負荷をコマンドストリーマに提出し、エンジン上で実行している既存の作業負荷を先取りし(pre-empting)、作業負荷の進捗を監視し、作業負荷が完了するとホストソフトウェアに通知することを含む。一実施形態では、グラフィックマイクロコントローラ233は、グラフィックプロセッサコア219に対して低電力又はアイドル状態を促進することもでき、グラフィックプロセッサコア219に、オペレーティングシステム及び/又はシステム上のグラフィックドライバソフトウェアと独立に低電力状態遷移に渡りグラフィックプロセッサコア219内のレジスタを節約し及び復旧する能力を提供する。
【0057】
グラフィックプロセッサコア219は、図示のサブコア221A~221Fより多くの又はそれより少ない、最大N個のモジュール式サブコアを有してよい。N個のサブコアの各セットについて、グラフィックプロセッサコア219は、共有機能ロジック235、共有及び/又はキャッシュメモリ236、ジオメトリ/固定機能パイプライン237、並びに種々のグラフィック及び計算処理動作を加速するための追加固定機能ロジック238も含み得る。共有機能ロジック235は、グラフィックプロセッサコア219内の各N個のサブコアにより共有可能な、FIG4の共有機能ロジック420に関連付けられたロジック(例えば、サンプラ、算術、及び/又はスレッド間通信ロジック)を含み得る。共有及び/又キャッシュメモリ236は、グラフィックプロセッサコア219内のN個のサブコア221A~221Fのセットのための最終レベルキャッシュになることができ、複数のサブコアによりアクセス可能な共有メモリとしても機能できる。ジオメトリ/固定機能パイプライン237は、固定機能ブロック230内のジオメトリ/固定機能パイプライン231の代わりに含まれ、同じ又は同様のロジックユニットを含むことができる。
【0058】
一実施形態では、グラフィックプロセッサコア219は、グラフィックプロセッサコア219による使用のための種々の固定機能加速ロジックを含み得る追加固定機能ロジック238を含む。一実施形態では、追加固定機能ロジック238は、位置のみのシェーディングで使用するための追加ジオメトリパイプラインを含む。位置のみのシェーディングでは、2つのジオメトリパイプライン:ジオメトリ/固定機能パイプライン238、231内の完全なジオメトリパイプラインと、追加固定機能ロジック238内に含まれてよい追加ジオメトリパイプラインであるカル(cull)パイプラインと、が存在する。一実施形態では、カルパイプラインは、完全なジオメトリパイプラインの細分化されたバージョンである。完全なパイプライン及びカルパイプラインは、同じアプリケーションの異なるインスタンスを実行でき、各インスタンスは別個のコンテキストを有する。位置のみのシェーディングは、破棄される三角形の長いカルランを隠すことができ、幾つかのインスタンスにおけるよりも早くシェーディングを完成させる。例えば、一実施形態では、追加固定機能ロジック238内のカルパイプラインロジックは、主アプリケーションと並列に位置シェーダを実行でき、通常、完全なパイプラインより速く結果を生成する。これは、カルパイプラインが、フレームバッファに対してピクセルのラスタライズ及びレンダリングを実行せずに、頂点の位置属性のみをフェッチしシェーディングするからである。カルパイプラインは、生成されたな結果を用いて、三角形がカリングされるか否かにかかわらず、全ての三角形の可視情報を計算することができる。完全なパイプラインは(これは、本例では、再生パイプラインと呼ばれてよい)、可視情報を消費して、カリングされた三角形をスキップして、最終的にラスタライズ段階に渡される可視三角形のみをシェーディングできる。
【0059】
一実施形態では、追加行程機能ロジック238は、機械学習トレーニングまたは推定の最適化を含む実装のために、固定機能行列乗算ロジックのような機械学習加速ロジックも含み得る。
【0060】
各グラフィックサブコア221A~221F内には、グラフィックパイプライン、メディアパイプライン、又はシェーダプログラムによる要求に応答して、グラフィック、メディア、及び計算動作を実行するために使用され得る実行リソースのセットが含まれる。グラフィックサブコア221A~221Fは、複数のEUアレイ222A~222F、224A~224F、スレッドディスパッチ及びスレッド間通信(thread dispatch and inter-thread communication:TD/IC)ロジック223A~223F、3D(例えばテクスチャ)サンプラ225A~225F、メディアサンプラ206A~206F、シェーダプロセッサ227A~227F、及び共有ローカルメモリ(shared local memory:SLM)228A~228Fを含む。EUアレイ222A~222F、224A~224Fはそれぞれ、グラフィック、メディア、又は計算シェーダプログラムを含むグラフィック、メディア、又は計算動作のサービス中に浮動小数点及び整数/固定小数点ロジック動作を実行可能な汎用グラフィック処理ユニットである複数の実行ユニットを含む。TD/ICロジック223A~223Fは、サブコア内の実行ユニットのために、ローカルスレッドディスパッチ及びスレッド制御動作を実行し、サブコアの実行ユニット上で実行しているスレッド間の通信を促進する。3Dサンプラ225A~225Fは、テクスチャ又は他の3Dグラフィック関連データをメモリへと読み出すことができる。3Dサンプラは、構成されたサンプル状態及び所与のテクスチャに関連付けられたテクスチャフォーマットに基づき、異なる方法でテクスチャデータを読み出すことができる。メディアサンプラ206A~206Fは、メディアデータに関連付けられた種類及びフォーマットに基づき、同様のリード動作を実行できる。一実施形態では、各グラフィックサブコア221A~221Fは、代替として、統合3D及びメディアサンプラを含み得る。サブコア221A~221Fの各々の中の実行ユニット上で実行しているスレッドは、各サブコア内の共有ローカルメモリ228A~228Fを利用して、スレッドグループ内で実行しているスレッドがオンチップメモリの共通プールを使用して実行できるようにできる。
【0061】
図2Cは、マルチコアグループ240A~240Nに構成されたグラフィック処理リソースの専用セットを含むグラフィック処理ユニット(GPU)239を示す。単一のマルチコアグループ240Aのみの詳細が提供されるが、他のマルチコアグループ240B~240Nはグラフィック処理リソースの同じ又は同様のセットを備えられてよいことが理解される。
【0062】
図示のように、マルチコアグループ240Aは、グラフィックコアのセット243、テンソルコアのセット244、及び光線追跡コアのセット245を含んでよい。スケジューラ/ディスパッチャ241は、種々のコア243、244、245での実行のためにグラフィックスレッドをスケジューリングしディスパッチする。レジスタファイルのセット242は、グラフィックスレッドを実行するとき、コア243、244、245により使用されるオペランド値を格納する。これらは、例えば、整数値を格納する整数レジスタ、浮動小数点値を格納する浮動小数点レジスタ、パックされたデータ要素(整数及び/又は浮動小数点データ要素)を格納するベクトルレジスタ、及びテンソル/行列値を格納するタイルレジスタを含んでよい。一実施形態では、タイルレジスタは、ベクトルレジスタの結合されたセットとして実装される。
【0063】
1つ以上の結合されたレベル1(L1)キャッシュ及び共有メモリユニット247は、テクスチャデータ、頂点データ、ピクセルデータ、光線データ、境界ボリュームデータ、等のようなグラフィックデータを各マルチコアグループ240A内にローカルに格納する。1つ以上のテクスチャユニット247は、テクスチャマッピング及びサンプリングのようなテクスチャ動作を実行するためにも使用できる。マルチコアグループ240A~240Nの全部又はサブセットにより共有されるレベル2(L2)キャッシュ253は、複数の同時グラフィックスレッドのためのグラフィックデータ及び/又は命令を格納する。図示のように、L2キャッシュ253は、複数のマルチコアグループ240A~240Nに渡り共有されてよい。1つ以上のメモリ制御部248は、システムメモリ(例えばDRAM)及び/又は専用グラフィックメモリ(例えばGDDR6メモリ)であってよいメモリ249にGPU239を結合する。
【0064】
入力/出力(I/O)回路250は、デジタル信号プロセッサ(DSP)、ネットワーク制御部、又はユーザ入力装置のような1つ以上のI/O装置252にGPU239を結合する。オンチップ相互接続は、I/O装置252をGPU239及びメモリ249に結合するために使用されてよい。I/O回路250の1つ以上のI/Oメモリ管理ユニット(I/O memory management unit:IOMMU)251は、I/O装置252をシステムメモリ249に直接結合する。一実施形態では、IOMMU251は、仮想アドレスをシステムメモリ249内の物理アドレスにマッピングするために、ページテーブルの複数のセットを管理する。本実施形態では、I/O装置252、CPU246、及びGPU239は、同じ仮想アドレス空間を共有してよい。
【0065】
一実装では、IOMMU251は、仮想化をサポートする。この場合、IOMMU3770は、ゲスト/グラフィック仮想アドレスを、ゲスト/グラフィック物理アドレスにマッピングする第1ページテーブルセット、及びゲスト/グラフィック物理アドレスを(例えばシステムメモリ249内の)システム/ホスト物理アドレスにマッピングする第2ページテーブルセットを管理してよい。第1及び第2ページテーブルセットの各々の基本アドレスは、制御レジスタに格納され、コンテキストスイッチでスワップアウトされてよい(例えば、その結果、新しいコンテキストが、関連するページテーブルセットへのアクセスを提供される)。
図2Cに図示しないが、コア243、244、245及び/又はマルチコアグループ240A~240Nの各々は、ゲスト仮想トランスレーションをゲスト物理トランスレーションへ、ゲスト物理トランスレーションをホスト物理トランスレーションへ、及びゲスト仮想トランスレーションをホスト物理トランスレーションへキャッシュするトランスレーションルックアサイドバッファ(translation lookaside buffer:TLB)を含んでよい。
【0066】
一実施形態では、CPU246、GPU239、及びI/O装置252は、単一の半導体チップ及び/又はチップパッケージに統合される。図示のメモリ249は、同じチップに統合されてよく、又はオフチップインタフェースを介してメモリ制御部248に結合されてよい。一実装では、メモリ249は、同じ仮想アドレス空間を他の物理システムレベルメモリとして共有するGDDR6メモリを含むが、は、本願明細書で議論原理はこの特定の実装に限定されない。
【0067】
一実施形態では、テンソルコア244は、深層学習動作を実行するために使用される基本的計算動作である行列演算を実行するよう特に設計された複数の実行ユニットを含む。例えば、同時行列乗算演算は、ニューラルネットワークトレーニング及び推定のために使用されてよい。テンソルコア244は、単一精度浮動小数点(例えば32ビット)、半精度浮動小数点(例えば16ビット)、整数ワード(16ビット)、バイト(8ビット)、半バイト(4ビット)を含む種々のオペランド精度を用いて、行列処理を実行してよい。一実施形態では、ニューラルネットワーク実装は、各レンダリングされたシーンの特徴を抽出し、場合によっては複数のフレームからの詳細を結合して、高品質な最終画像を構成する。
【0068】
深層学習実装では、並列行列乗算作業は、テンソルコア244上での実行のためにスケジューリングされてよい。ニューラルネットワークのトレーニングは、特に、相当数の行列ドット積演算を利用とする。N×N×N行列乗算の内積式を処理するために、テンソルコア244は、少なくともN個のドット積処理要素を含んでよい。行列乗算を開始する前に、1つの行列全体が、タイルレジスタにロードされ、第2行列の少なくとも1つの列がN個のサイクルの各サイクルでロードされる。各サイクルに、処理されるN個のドット積がある。
【0069】
行列要素は、16ビットワード、8ビットバイト(例えばINT8)、及び4ビット半バイト(例えばINT4)を含む特定の実装に依存して、異なる精度で格納されてよい。異なる精度モードが、テンソルコア244について指定されて、最も効率的な精度が異なる作業負荷(例えば、バイト及び半バイトへの量子化に耐え得る推定作業負荷)に対して使用されることを保証してよい。
【0070】
一実施形態では、光線追跡コア245は、リアルタイム光線追跡及び非リアルタイム光線追跡実装の両方の光線追跡動作を加速する。特に、光線追跡コア245は、境界ボリューム階層構造(bounding volume hierarchy:BVH)を用いて光線トラバースを実行し及び光線とBVHボリューム内に閉じ込められたプリミティブとの間の交差(intersection)を識別する光線トラバース/交差回路を含む。光線追跡コア245は、(例えばZバッファ又は同様の構成を用いて)深さテスト及びカリングを実行する回路も含んでよい。一実施形態では、光線追跡コア245は、少なくとも一部がテンソルコア244上で実行されてよい本願明細書に記載される画像ノイズ除去技術と共同して、トラバース及び交差動作を実行する。例えば、一実施形態では、テンソルコア244は、光線追跡コア245により生成されたフレームのノイズ除去を実行するために、深層学習ニューラルネットワークを実装する。しかしながら、CPU246、グラフィックコア243、及び/又は光線追跡コア245は、ノイズ除去及び/又は深層学習アルゴリズムの全部又は一部を実装してもよい。
【0071】
さらに、上述のように、ノイズ除去への分散型アプローチが利用されてよく、ここで、GPU239は、ネットワーク又は高速相互接続を介して他のコンピューティング装置に結合されるコンピューティング装置の中にある。本実施形態では、相互接続されたコンピューティング装置は、ニューラルネットワーク学習/トレーニングデータを共有して、システム全体が異なる種類の画像フレーム及び/又は異なるグラフィックアプリケーションのためにノイズ除去を実行するために学習する速度を向上する。
【0072】
一実施形態では、光線追跡コア245は、全てのBVHトラバース及び光線プリミティブ交差を処理して、グラフィックコア243が光線当たり数千個もの命令により過負荷になることを防ぐ。一実施形態では、各光線追跡コア245は、(例えばトラバース動作のために)境界ボックステストを実行する第1専用回路セットと、(例えばトラバースされた光線を交差する)光線三角形交差テストを実行する第2専用回路セットと、を含む。したがって、一実施形態では、マルチコアグループ240Aは、単に光線プローブを出すことができ、光線追跡コア245は、光線トラバース及び交差を独立に実行してヒットしたデータ(例えば、ヒット、ヒット無し、複数のヒット、等)をスレッドコンテキストに返す。他のコア243、244は、他のグラフィック又は計算作業を実行するために自由にされ、その間、光線追跡コア245は、トラバース及び交差動作を実行する。
【0073】
一実施形態では、各光線追跡コア245は、BVHテスト動作を実行するためのトラバースユニットと、光線プリミティブ交差テストを実行する交差ユニットと、を含む。交差ユニットは、「ヒット」、「ヒット無し」、又は「複数ヒット」応答を生成し、適切なスレッドに提供する。トラバース及び交差動作の間、他のコア(例えば、グラフィックコア243及びテンソルコア244)の実行リソースは、他の形式のグラフィック作業を実行するために自由にされる。
【0074】
後述する1つの特定の実施形態では、ハイブリッドラスタライズ/光線追跡アプローチが使用され、作業がグラフィックコア243と光線追跡コア245との間で分散される。
【0075】
一実施形態では、光線追跡コア245(及び/又は他のコア243、244)は、DispatchRaysコマンド及び光線生成、最近接ヒット、任意のヒット、及びミスシェーダを含みオブジェクト毎にシェーダ及びテクスチャのセットの割り当てを可能にするMicrosoftのDirectX Ray Tracing(DXR)のような光線追跡命令セットのためのハードウェアサポートを含む。光線追跡コア245、グラフィックコア243、及びテンソルコア244によりサポートされ得る別の光線追跡プラットフォームは、Vulkan1.1.85である。しかしながら、は、本願明細書で議論原理は、任意の特定の光線追跡ISAに限定されないことに留意する。
【0076】
一般に、種々のコア245、244、243は、光線生成、最近接ヒット、任意のヒット、光線プリミティブ交差、プリミティブ毎及び下位構造境界ボックス構成、ミス(miss)、ビジット(visit)、及び例外(exception)のための命令/関数を含む光線追跡命令セットをサポートしてよい。より具体的には、一実施形態は、以下の機能を実行するために光線追跡命令を含む。
【0077】
光線生成(Ray Generation):光線生成命令は、ピクセル、サンプル、又は他のユーザ定義作業割り当て毎に、実行されてよい。
【0078】
最近接ヒット(Closest Hit):最近接ヒット命令は、光線のシーン内のプリミティブとの最近接交差点の位置を特定するために実行されてよい。
【0079】
任意のヒット(Any Hit):任意のヒット命令は、光線とシーン内のプリミティブとの間の複数の交差を識別して、場合によっては新しい最近接交差点を識別する。
【0080】
交差(Intersection):交差命令は、光線プリミティブ交差テストを実行し、結果を出力する。
【0081】
プリミティブ毎の境界ボックス構成(Per-primitive Bounding box Construction):この命令は、(例えば、新しいBVH又は他の加速データ構造を構築するとき)所与のプリミティブ又はプリミティブ群の周囲に境界ボックスを構築する。
【0082】
ミス(Miss):光線がシーン内の全てのジオメトリ又はシーンの特定の領域を避ける(miss)ことを示す。
【0083】
ビジット(Visit):光線がトラバースする子ボリュームを示す。
【0084】
例外(Exceptions):種々の種類の例外処理(例えば、種々のエラー状態について呼び出される)を含む。
【0085】
図2Dは、本願明細書に記載の実施形態に従いグラフィックプロセッサ及び/又は計算アクセラレータとして構成できる汎用グラフィック処理ユニット(general purpose graphics processing unit:GPGPU)270のブロック図である。GPGPU270は、ホストプロセッサ(例えば1つ以上のCPU246)及びメモリ271、272と、1つ以上のシステム及び/又はメモリバスを介して相互接続できる。一実施形態では、メモリ271は、1つ以上のCPU246により共有されてよいシステムメモリであり、メモリ272は、GPGPU270に専用の装置メモリである。一実施形態では、GPGPU270内のコンポーネント及び装置メモリ272は、1つ以上のCPU246によりアクセス可能なメモリアドレスにマッピングされてよい。メモリ271及び272へのアクセスは、メモリ制御部268により促進されてよい。一実施形態では、メモリ制御部268は、内部直接メモリアクセス(direct memory access:DMA)制御部269を含み、又はその他の場合にDMA制御部により実行され得る動作を実行するためのロジックを含み得る。
【0086】
GPGPU270は、少なくとも一部がキャッシュメモリとしてパーティションされてもよいL2キャッシュ253、L1キャッシュ254、命令キャッシュ255、及び共有メモリ256を含む複数のキャッシュメモリを含む。GPGPU270は、複数の計算ユニット260A~260Nも含む。各計算ユニット260A~260Nは、ベクトルレジスタのセット261、スカラレジスタ262、ベクトル論理ユニット263、及びスカラ論理ユニット264を含む。計算ユニット260A~260Nは、ローカル共有メモリ256及びプログラムカウンタ266も含み得る。計算ユニット260A~260Nは、GPGPU270上で実行するカーネル又はシェーダプログラムの実行中に変化しない定数データを格納するために使用できる定数キャッシュ267に結合できる。一実施形態では、定数キャッシュ267は、スカラデータキャッシュであり、キャッシュされたデータは、スカラレジスタ262内に直接フェッチできる。
【0087】
動作中、1つ以上のCPU246は、アクセス可能なアドレス空間にマッピングされたコマンドをGPGPU270内のレジスタ又はメモリに書き込むことができる。コマンドプロセッサ257は、レジスタ又はメモリからコマンドを読み出し、これらのコマンドがGPGPU270内でどのように処理されるかを決定できる。スレッドディスパッチャ258は、次に、これらのコマンドを実行するために計算ユニット260A~260Nにスレッドをディスパッチするために使用できる。各計算ユニット260A~260Nは、他の計算ユニットと独立にスレッドを実行できる。さらに、各計算ユニット260A~260Nは、条件付き計算を独立して構成されることができ、計算結果を条件付きでメモリに出力できる。コマンドプロセッサ257は、提出されたコマンドが完了すると、1つ以上のCPU246に割り込みできる。
【0088】
図3A~3Cは、本願明細書に記載される実施形態により提供される追加のグラフィックプロセッサ及び計算アクセラレータのブロック図を示す。本願明細書の任意の他の図の要素と同じ参照符号(又は名称)を有する
図2A~2Dの要素は、本願明細書の他の場所に記載されたものと同様の任意の方法で動作し又は機能し得るが、このようなものに限定されない。
【0089】
図3Aは、個別グラフィック処理ユニットであってよい又は複数の処理コア又は限定ではないがメモリ装置若しくはネットワークインタフェースのような他の半導体装置を統合されたグラフィックプロセッサであってよいグラフィックプロセッサ300のブロック図である。幾つかの実施形態では、グラフィックプロセッサは、メモリマッピングされたI/Oインタフェースを介してグラフィックプロセッサ上のレジスタと、及びプロセッサメモリ内に置かれたコマンドと、通信する。幾つかの実施形態では、グラフィックプロセッサ300は、メモリにアクセスするためにメモリインタフェース314を含む。メモリインタフェース314は、ローカルメモリ、1つ以上の内部キャッシュ、1つ以上の共有外部キャッシュ、及び/又はシステムメモリへのインタフェースであり得る。
【0090】
幾つかの実施形態では、グラフィックプロセッサ300は、ディスプレイ出力データをディスプレイ装置318へと駆動するディスプレイ制御部302も含む。ディスプレイ制御部302は、ディスプレイのための1つ以上のオーバレイ平面のための及びビデオ又はユーザインタフェース要素の複数のレイヤの合成のためのハードウェアを含む。ディスプレイ装置318は、内部または外部ディスプレイ装置であり得る。一実施形態では、ディスプレイ装置318は、仮想現実(VR)ディスプレイ装置又は拡張現実(AR)ディスプレイ装置のような頭部搭載ディスプレイ装置である。幾つかの実施形態では、グラフィックプロセッサ300は、限定ではないがMPEG2のようなMPEG(Moving Picture Experts Group)フォーマット、H.264/MPEG-4 AVC、H.265/HEVCのようなAVC(Advanced Video Coding)フォーマット、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つ以上のメディア符号化フォーマットに、それらへ、又はそれらの間でメディアを符号化し、復号し、又は変換するためのビデオコーデックエンジン306を含む。
【0091】
幾つかの実施形態では、グラフィックプロセッサ300は、例えばビット境界ブロック転送を含む2次元(2D)ラスタライズ動作を実行するためのブロック画像転送(block image transfer:BLIT)エンジン304を含む。しかしながら、一実施形態では、2Dグラフィック動作は、グラフィック処理エンジン(graphics processing engine:GPE)310の1つ以上のコンポーネントを用いて実行される。幾つかの実施形態では、GPE310は、3次元(3D)グラフィック動作及びメディア動作を含むグラフィック動作を実行するための計算エンジンである。
【0092】
幾つかの実施形態では、GPE310は、3Dプリミティブ形状(例えば、長方形、三角形、等)に作用する処理関数を用いて3次元画像及びシーンをレンダリングするような、3D動作を実行する3Dパイプライン312を含む。3Dパイプライン312は、要素内の種々のタスク及び/又は3D/メディアサブシステム315への実行スレッドの生成を実行するプログラマブル及び固定関数要素を含む。3Dパイプライン312は、メディア動作を実行するために使用できるが、GPE310の実施形態は、ビデオ後処理及び画像拡張のようなメディア動作を実行するために特に使用されるメディアパイプライン316も含む。
【0093】
幾つかの実施形態では、メディアパイプライン316は、ビデオコーデックエンジン306の代わりに又はそれを代表してビデオ復号加速化、ビデオデインターレース、及びビデオ符号化加速化のような1つ以上の特定メディア動作を実行する固定機能又はプログラマブル論理ユニットを含む。幾つかの実施形態では、メディアパイプライン316は、3D/メディアサブシステム315上で実行するためにスレッドを生成するスレッド生成ユニットを更に含む。生成されたスレッドは、3D/メディアサブシステム315に含まれる1つ以上のグラフィック実行ユニット上でメディア動作のための計算を実行する。
【0094】
幾つかの実施形態では、3D/メディアサブシステム315は、3Dパイプライン312及びメディアパイプライン316により生成されたスレッドを実行するロジックを含む。一実施形態では、パイプラインは、スレッド実行要求を、3D/メディアサブシステム315へ送信する。3D/メディアサブシステム315は、利用可能なスレッド実行リソースへの種々の要求を調停し及びディスパッチするスレッドディスパッチロジックを含む。実行リソースは、3D及びメディアスレッドを処理するために、グラフィック実行ユニットのアレイを含む。幾つかの実施形態では、3D/メディアサブシステム315は、スレッド命令及びデータのための1つ以上の内部キャッシュを含む。幾つかの実施形態では、サブシステムは、スレッド間でデータを共有するため及び出力データを格納するために、レジスタ及びアドレス可能メモリを含む共有メモリも含む。
【0095】
図3Bは、本願明細書に記載の実施形態による、タイルアーキテクチャを有するグラフィックプロセッサ320を示す。一実施形態では、グラフィックプロセッサ320は、グラフィックエンジンタイル310A~310D内に
図3Aのグラフィック処理エンジン310の複数のインスタンスを有するグラフィック処理エンジンクラスタ322を含む。各グラフィックエンジンタイル310A~310Dは、タイル相互接続323A~323Fのセットを介して相互接続できる。各グラフィックエンジンタイル310A~310Dは、メモリ相互接続325A~325Dを介して、メモリモジュール又はメモリ装置326A~326Dにも接続できる。メモリ装置326A~326Dは、任意のグラフィックメモリ技術を使用できる。例えば、メモリ装置326A~326Dが、GDDR(graphics double data rate)メモリであってよい。メモリ装置326A~326Dは、一実施形態では、それらのそれぞれのグラフィックエンジンタイル310A~310Dと共にダイの上にある高帯域幅メモリ(high-bandwidth memory:HBM)モジュールである。一実施形態では、メモリ装置326A~326Dは、それらそれぞれのグラフィックエンジンタイル310A~310Dの一番上にスタックされ得るスタック型メモリ装置である。一実施形態では、各グラフィックエンジンタイル310A~310D及び関連するメモリ326A~326Dは、
図11B~11Dにおいて詳述される基本ダイ又はベース基板に結合される個別チップレット(chiplet)上に存在する。
【0096】
グラフィックプロセッサ320は、メモリ装置326A~326Dが関連するグラフィックエンジンタイル310A~310Dに結合される不均一メモリアクセス(non-uniform memory access (NUMA))システムにより構成されてよい。所与のメモリ装置は、それが直接接続されていないタイル以外のグラフィックエンジンタイルによりアクセスされてよい。しかしながら、メモリ装置326A~326Dへのアクセス遅延は、ローカルタイルにアクセスするとき最も小さくなり得る。一実施形態では、キャッシュコヒーレントNUMA(cache coherent NUMA (ccNUMA))システムは、タイル相互接続323A~323Fを使用して、グラフィックエンジンタイル310A~310D内のキャッシュ制御部間の通信を可能にし、1つより多くのキャッシュが同じメモリ位置を格納しているとき、一貫したメモリイメージを保つ。
【0097】
グラフィック処理エンジンクラスタ322は、オンチップ又はオンパッケージファブリック相互接続324と接続できる。ファブリック相互接続324は、グラフィックエンジンタイル310A~310Dと、ビデオコーデック306及び1つ以上のコピーエンジン304のようなコンポーネントとの間の通信を可能にする。コピーエンジン304は、メモリ装置326A~326D及びグラフィックプロセッサ320の外部にあるメモリ(例えばシステムメモリ)から/へ/間でデータを移動させるために使用できる。ファブリック相互接続324は、グラフィックエンジンタイル310A~310Dを相互接続するためにも使用できる。グラフィックプロセッサ320は、任意で、外部ディスプレイ装置318との接続を可能にするために、ディスプレイ制御部302を含んでよい。グラフィックプロセッサは、グラフィック又は計算アクセラレータとして構成されてもよい。アクセラレータ構成では、ディスプレイ制御部302及びディスプレイ装置318は省略されてよい。
【0098】
グラフィックプロセッサ320は、ホストインタフェース328を介してホストシステムに接続できる。ホストインタフェース328は、グラフィックプロセッサ320、システムメモリ、及び/又は他のシステムコンポーネントの間の通信を可能にできる。ホストインタフェース328は、例えば、PCI Expressバス又は別の種類のホストシステムインタフェースであり得る。
【0099】
図3Cは、本願明細書に記載の実施形態による計算アクセラレータ330を示す。計算アクセラレータ330は、
図3Bのグラフィックプロセッサ320とアーキテクチャ上の類似点を含み、計算加速化のために最適化されている。計算エンジンクラスタ332は、並列又はベクトルに基づく汎用計算演算のために最適化された実行ロジックを含む計算エンジンタイル340A~340Dのセットを含み得る。幾つかの実施形態では、計算エンジンタイル340A~340Dは、固定機能グラフィック処理ロジックを含まないが、一実施形態では、計算エンジンタイル340A~340Dのうちの1つ以上がメディア加速化を実行するためのロジックを含み得る。計算エンジンタイル340A~340Dは、メモリ相互接続325A~325Dを介してメモリ326A~326Dに接続できる。メモリ326A~326D及びメモリ相互接続325A~325Dは、グラフィックプロセッサ320におけるものと同様の技術であってよく、又は異なり得る。グラフィック計算エンジンタイル340A~340Dは、タイル相互接続323A~323Fを介して相互接続することもでき、ファブリック相互接続324と接続され及び/又はそれにより相互接続されてよい。一実施形態では、計算アクセラレータ330は、装置ワイドなキャッシュとして構成され得る大きなL3キャッシュ336を含む。計算アクセラレータ330は、
図3Bのグラフィックプロセッサ320と同様の方法で、ホストインタフェース328を介してホストプロセッサ及びメモリとも接続できる。
【0100】
<グラフィック処理エンジン>
図4は、幾つかの実施形態によるグラフィックプロセッサのグラフィック処理エンジン410のブロック図である。一実施形態では、グラフィック処理エンジン(graphics processing engine:GPE)410は、
図3Aに示したGPE310のバージョンであり、
図3Bのグラフィックエンジンタイル310A~310Fを表してもよい。本願明細書の任意の他の図の要素と同じ参照符号(又は名称)を有する
図4の要素は、本願明細書の他の場所に記載されたものと同様の任意の方法で動作し又は機能し得るが、このようなものに限定されない。例えば、
図3Aの3Dパイプライン312及びメディアパイプライン316が示される。メディアパイプライン316は、GPE410の幾つかの実施形態では任意であり、GPE410内に明示的に含まれなくてよい。例えば、少なくとも一実施形態では、個別メディア及び/又は画像プロセッサがGPE410に結合される。
【0101】
幾つかの実施形態では、GPE410は、コマンドストリームを3Dパイプライン312及び/又はメディアパイプライン316に提供するコマンドストリーマ403に結合し又はそれを含む。幾つかの実施形態では、コマンドストリーマ403は、システムメモリ又は内部キャッシュメモリ及び共有キャッシュメモリのうちの1つ以上であり得るメモリに結合される。幾つかの実施形態では、コマンドストリーマ403は、メモリからコマンドを受信し、該コマンドを3Dパイプライン312及び/又はメディアパイプライン316へ送信する。コマンドは、3Dパイプライン312及びメディアパイプライン316のためにコマンドを格納するリングバッファからフェッチされた指示である。一実施形態では、リングバッファは、複数のコマンドのバッチを格納するバッチコマンドバッファを更に含み得る。3Dパイプライン312のためのコマンドは、限定ではないが、3Dパイプライン312のための頂点及びジオメトリデータ、及び/又はメディアパイプライン316のための画像データ及びメモリオブジェクトのような、メモリに格納されたデータへの参照も含み得る。3Dパイプライン312及びメディアサブシステム316は、それぞれのパイプライン内のロジックにより動作を実行することにより、マス亜1つ以上の実行スレッドをグラフィックコアアレイ414にディスパッチすることにより、コマンド及びデータを処理する。一実施形態では、グラフィックコアアレイ414は、グラフィックコアの1つ以上のブロック(例えば、グラフィックコア415A、グラフィックコア415B)を含む。各ブロックは、1つ以上のグラフィックコアを含む。各グラフィックコアは、グラフィック及び計算動作を実行する汎用及びグラフィック専用実行ロジック、並びに、固定機能テクスチャ処理及び/又は機械学習及び人工知能加速ロジックを含むグラフィック実行リソースのセットを含む。
【0102】
種々の実施形態では、3Dパイプライン312は、命令を処理し及び実行スレッドをグラフィックコアアレイ414にディスパッチすることにより、頂点シェーダ、ジオメトリシェーダ、ピクセルシェーダ、フラグメントシェーダ、計算シェーダ、又は他のシェーダプログラムのような1つ以上シェーダプログラムを処理する固定機能及びプログラマブルロジックを含み得る。グラフィックコアアレイ414は、これらのシェーダプログラムを処理する際に使用するための実行リソースの統合されたブロックを提供する。グラフィックコアアレイ414のグラフィックコア415A~414B内の多目的実行ロジック(例えば、実行ユニット)は、種々の3D APIシェーダ言語に対するサポートを含み、複数のシェーダに関連付けられた複数の同時実行スレッドを実行できる。
【0103】
幾つかの実施形態では、グラフィックコアアレイ414は、ビデオ及び/又は画像処理のようなメディア機能を実行するために実行ロジックを含む。一実施形態では、実行ユニットは、グラフィック処理動作に加えて、並列汎用計算動作を実行する汎用ロジックを含む。汎用ロジックは、
図1のプロセッサコア107又は
図2Aにおけるようなコア202A~202N内の汎用ロジックと並列に又はそれと関連して、処理動作を実行できる。
【0104】
グラフィックコアアレイ414上で実行するスレッドにより生成された出力データは、統合リターンバッファ(URB)418内のメモリにデータを出力し得る。URB418は、複数のスレッドのデータを格納できる。幾つかの実施形態では、URB418は、グラフィックコアアレイ414上で実行する異なるスレッド間でデータを送信するために使用されてよい。幾つかの実施形態では、URB418は、グラフィックコアアレイ上のスレッドと共有機能ロジック420内の固定機能ロジックとの間の同期化のために更に使用されてよい。
【0105】
幾つかの実施形態では、グラフィックコアアレイ414は、スケーラブルである。その結果、アレイは可変数のグラフィックコアを含み、各グラフィックコアは、GPE410の目標パワー及び性能レベルに基づき可変数の実行ユニットを有する。一実施形態では、実行リソースは、動的にスケーラブルである。その結果、実行リソースは有効又は無効にされてよい。
【0106】
グラフィックコアアレイ414は、グラフィックコアアレイ内のグラフィックコアの間で共有される複数のリソースを含む共有機能ロジック420に結合する。共有機能ロジック420内の共有機能は、グラフィックコアアレイ414に専用補足機能を提供するハードウェア論理ユニットである。種々の実施形態では、共有機能ロジック420は、限定ではないが、サンプラ421、算術422、及びスレッド間通信(inter-thread communication:ITC)423ロジックを含む。さらに、幾つかの実施形態は、共有機能ロジック420内に1つ以上のキャッシュ425を実装する。
【0107】
共有機能は、少なくとも、所与の専用機能がグラフィックコアアレイ414内に含むために不十分である場合に実装される。代わりに、この専用機能の単一のインスタンス化が、共有機能ロジック420内に独立型エンティティとして実装され、グラフィックコアアレイ414内の実行リソースの間で共有される。グラフィックコアアレイ414の間で共有される、グラフィックコアアレイ414内に含まれる機能の正確なセットは、実施形態により変化する。幾つかの実施形態では、グラフィックコアアレイ414により広範囲に渡り使用される共有機能ロジック420内の特定の共有機能は、グラフィックコアアレイ414内の共有機能ロジック416に含まれてよい。種々の実施形態では、グラフィックコアアレイ414内の共有機能ロジック416は、共有機能ロジック420内の一部の又は全部のロジックを含み得る。一実施形態では、共有機能ロジック420内の全部の論理要素は、グラフィックコアアレイ414の共有機能ロジック416内で複製されてよい。一実施形態では、共有機能ロジック420は、グラフィックコアアレイ414内の共有機能ロジック416の方を選んで、取り除かれる。
【0108】
<実行ユニット>
図5A~5Bは、本願明細書に記載の実施形態によるグラフィックプロセッサコアの中で利用される処理要素のアレイを含むスレッド実行ロジック500を示す。本願明細書の任意の他の図の要素と同じ参照符号(又は名称)を有する
図5A~5Bの要素は、本願明細書の他の場所に記載されたものと同様の任意の方法で動作し又は機能し得るが、このようなものに限定されない。
図5A~5Bは、
図2Bの各サブコア221A~221Fと共に示されたハードウェアロジックを表してよいスレッド実行ロジック500の概略を示す。
図5Aは、汎用グラフィックプロセッサ内の実行ユニットを表し、
図5Bは、計算アクセラレータ内で使用され得る実行ユニットを表す。
【0109】
図5Aに示すように、幾つかの実施形態では、スレッド実行ロジック500は、シェーダプロセッサ502、スレッドディスパッチャ504、命令キャッシュ506、複数の実行ユニット508A~508Nを含むスケーラブル実行ユニットアレイ、サンプラ510、共有ローカルメモリ511、データキャッシュ512、及びデータポート514を含む。一実施形態では、スケーラブル実行ユニットアレイは、作業負荷の計算要件に基づき、1つ以上の実行ユニット(例えば、実行ユニット508A、508B、508C、508D~508N-1、及び508Nのうちのいずれか)を有効又は無効にすることにより、動的にスケーリング可能である。一実施形態では、含まれるコンポーネントは、コンポーネントの各々にリンクする相互接続ファブリックを介して相互接続される。幾つかの実施形態では、スレッド実行ロジック500は、命令キャッシュ506、データポート514、サンプラ510、及び実行ユニット508A~508Nのうちの1つ以上を通じて、システムメモリ又はキャッシュメモリのようなメモリへの1つ以上の接続を含む。幾つかの実施形態では、各実行ユニット(例えば508A)は、各スレッドと並列に複数のデータ要素を処理しながら複数の同時ハードウェアスレッドを実行可能な独立型プログラマブル汎用計算ユニットである。種々の実施形態では、実行ユニット508A~508Nのアレイは、任意の数の個別実行ユニットを含むようにスケーラブルである。
【0110】
幾つかの実施形態では、実行ユニット508A~508Nは、主に、シェーダプログラムを実行するために使用される。シェーダプロセッサ502は、種々のシェーダプログラムを処理し、シェーダプログラムに関連付けられた実行スレッドをスレッドディスパッチャ504を介してディスパッチする。一実施形態では、スレッドディスパッチャは、グラフィック及びメディアパイプラインからのスレッド開始要求を調停し、実行ユニット508A~508N内の1つ以上の実行ユニット上に要求されたスレッドをインスタンス化するためのロジックを含む。例えば、ジオメトリパイプラインは、頂点、テッセレーション、又はジオメトリシェーダを、処理のためにスレッド実行ロジックにディスパッチできる。幾つかの実施形態では、スレッドディスパッチャ504は、実行シェーダプログラムからのランタイムスレッド生成要求も処理できる。
【0111】
幾つかの実施形態では、実行ユニット508A~508Nは、多くの標準的3Dグラフィックシェーダ命令のためのネイティブサポートを含む命令セットをサポートする。その結果、グラフィックライブラリ(例えば、Direct 3D及びOpenGL)からのシェーダプログラムは最小限の変換で実行される。実行ユニットは、頂点及びジオメトリ処理(例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ)、ピクセル処理(例えば、ピクセルシェーダ、フラグメントシェーダ)、及び汎用処理(例えば、計算及びメディアシェーダ)をサポートする。実行ユニット508A~508Nの各々は、SIMD(multi-issue single instruction multiple data)実行が可能であり、マルチスレッド動作は、より高い遅延メモリアクセスにもかかわらず、効率的な実行環境を可能にする。各実行ユニット内の各ハードウェアスレッドは、専用高帯域幅レジスタファイル及び関連する独立スレッド状態を有する。実行は、整数、単及び倍精度浮動小数点演算、SIMDブランチ能力、論理演算、超越(transcendental)演算、及びだの多種多様な演算の可能なパイプラインに対するクロック毎の複数命令(multi-issue per clock)である。メモリ又は共有機能のうちの1つからのデータを待つ間、実行ユニット508A~508N内の従属ロジックは、必要なデータが返されるまで、待機中スレッドをスリープさせる。待機中スレッドがスリープしている間、ハードウェアリソースは、処理中の他のスレッドに捧げられてよい。例えば、頂点シェーダ動作に関連付けられた遅延の間、実行ユニットは、ピクセルシェーダ、フラグメントシェーダ、又は異なる頂点シェーダを含む別の種類のシェーダプログラムのために動作を実行できる。種々の実施形態は、SIMDの使用の代わりとして、又はSIMDの使用に加えて、SIMT(Single Instruction Multiple Thread)の使用による実行を使用するよう適用できる。SIMDコアまたは動作への言及は、SIMTにも適用でき、又はSIMTと組み合わせてSIMDに適用できる。
【0112】
実行ユニット508A~508Nの中の各実行ユニットは、データ要素のアレイで動作する。データ要素の数は、命令の「実行サイズ」又はチャネル数である。実行チャネルは、命令の中のデータ要素アクセス、マスキング、及びフロー制御の論理実行ユニットである。チャネルの数は、特定のグラフィックプロセッサの物理ALU(Arithmetic Logic Unit)又はFPU(Floating Point Unit)の数と独立であってよい。幾つかの実施形態では、実行ユニット508A~508Nは、整数及び浮動小数点データ型をサポートする。
【0113】
実行ユニット命令セットは、SIMD命令を含む。種々のデータ要素は、パックされたデータ型としてレジスタに格納でき、実行ユニットは、要素のデータサイズに基づき種々の要素を処理する。例えば、256ビット幅のベクトルに対して動作するとき、256尾とtのベクトルはレジスタに格納され、実行ユニットは、4個の別個の54ビットのパックされたデータ要素(QW(Quad-Word)サイズデータ要素)、8個の別個の32ビットのパックされたデータ要素(DW(Double Word)サイズデータ要素)、16個の別個の16ビットのパックされたデータ要素(W( Word)サイズデータ要素)、又は32個の別個の8ビットのパックされたデータ要素(B(Byte)サイズデータ要素)としての該ベクトルに対して動作する。しかしながら、異なるベクトル幅及びレジスタサイズが可能である。
【0114】
一実施形態では、1つ以上の実行ユニットは、結合EUに共通であるスレッド制御ロジック(507A~507N)を有する結合実行ユニット509A~509Nへと結合できる。複数のEUは、EUグループへと結合できる。結合EUグループの中の各EUは、別個のSIMDハードウェアスレッドを実行するよう構成できる。結合EUグループの中のEUの数は、実施形態に従い変化し得る。さらに、種々のSIMD幅がEU毎に実行でき、限定ではないが、SIMD8、SIMD16、及びSIMD32を含む。各結合グラフィック実行ユニット509A~509Nは、少なくとも2つの実行ユニットを含む。例えば、結合実行ユニット509Aは、第1EU508A、第2EU508B、及び、第1EU508A及び第2EU508Bに共通である第3スレッド制御ロジック507Aを含む。スレッド実行ロジック507Aは、結合グラフィック実行ユニット509A上で実行されるスレッドを制御して、結合実行ユニット509A~509N内の各EUが共通命令ポインタレジスタを用いて実行できるようにする。
【0115】
1つ以上の内部命令キャッシュ(例えば506)は、実行ユニットのためのスレッド命令をキャッシュするために、スレッド実行ロジック500に含まれる。幾つかの実施形態では、1つ以上のデータキャッシュ(例えば512)は、スレッド実行中にスレッドデータをキャッシュするために含まれる。実行ロジック500上で実行しているスレッドは、共有ローカルメモリ511に、明示的に管理されるデータも格納できる。幾つかの実施形態では、サンプラ510は、3D動作のためのテクスチャサンプリング及びメディア動作のためのメディアサンプリングを提供するために含まれる。幾つかの実施形態では、サンプラ510は、サンプリングされたデータを実行ユニットに提供する前にサンプリング処理の間にテクスチャ又はメディアデータを処理するために、専用テクスチャ又はメディアサンプリング機能を含む。
【0116】
実行中、グラフィック及びメディアパイプラインは、スレッド開始要求をスレッド実行ロジック500へスレッド生成及びディスパッチロジックを介して送信する。ジオメトリオブジェクトのグループが処理されピクセルデータへとラスタライズされると、シェーダプロセッサ502内のピクセルプロセッサロジック(例えば、ピクセルシェーダロジック、フラグメントシェーダロジック、等)は、出力情報を更に計算し、及び出力面(例えば、色バッファ、深さバッファ、ステンシルバッファ、等)に結果を書き込むために呼び出される。幾つかの実施形態では、ピクセルシェーダ又はフラグメントシェーダは、ラスタライズされたオブジェクトに渡り補間されるべき種々の頂点属性の値を計算する。幾つかの実施形態では、シェーダプログラム502内のピクセルプロセッサロジックは、次に、API(application programming interface)により供給されるピクセルまたはフラグメントシェーダプログラムを実行する。シェーダプログラムを実行するために、シェーダプロセッサ502は、スレッドディスパッチャ504により実行ユニット(例えば508A)に、スレッドをディスパッチする。幾つかの実施形態では、シェーダプロセッサ502は、サンプラ510内のテクスチャサンプリングロジックを使用して、メモリに格納されたテクスチャマップの中のテクスチャデータにアクセスする。テクスチャデータ及び入力ジオメトリデータに対する算術演算は、各ジオメトリフラグメントのピクセル色データを計算し、又は将来の処理から1つ以上のピクセルを破棄する。
【0117】
幾つかの実施形態では、データポート514は、グラフィックプロセッサ出力パイプライン上の将来の処理のために処理済みデータをメモリへ出力するために、スレッド実行ロジック500にメモリアクセスメカニズムを提供する。幾つかの実施形態では、データポート514は、データポートによるメモリアクセスのためにデータをキャッシュするために、1つ以上のキャッシュメモリ(例えば、データキャッシュ512)を含みまたはそれに結合する。
【0118】
一実施形態では、実行ロジック500は、光線追跡加速化機能を提供できる光線追跡部505も含み得る。光線追跡部505は、光線生成のための命令/関数を含む光線追跡命令セットをサポートできる。光線追跡命令セットは、
図2Cの光線追跡コア245によりサポートされる光線追跡命令セットと同様であり又は異なり得る。
【0119】
図5Bは、実施形態により実行ユニット508の例示的な内部の詳細を示す。グラフィック実行ユニット508は、命令フェッチユニット537、汎用レジスタファイルアレイ(general register file array:GRF)524、アーキテクチャレジスタファイルアレイ(architectural register file array:ARF)526、スレッド調停部522、送信ユニット530、ブランチユニット532、SIMD浮動小数点ユニット(floating point units:FPU)534、及び一実施形態では、専用レジスタSIMD ALU535のセットを含み得る。GRF524及びARF526は、汎用レジスタファイル、及びグラフィック実行ユニット508の中でアクティブであってよい各々の同時ハードウェアスレッドに関連付けられたアーキテクチャレジスタファイルのセットを含む。一実施形態では、スレッドアーキテクチャ状態毎に、ARF256が維持され、一方で、スレッド実行中に使用されるデータはGRF524に格納される。各スレッドの命令ポインタを含む、各スレッドの実行状態は、ARF256内のスレッド固有レジスタに保持され得る。
【0120】
一実施形態では、グラフィック実行ユニット508は、SMT(Simultaneous Multi-Threading)及びきめ細かいIMT(Interleaved Multi-Threading)の結合であるアーキテクチャを有する。アーキテクチャは、同時スレッドの目標数及び実行ユニット当たりのレジスタ数に基づき、設計時に微調整可能なモジュール式構成を有する。ここで、実行ユニットリソースは、複数の同時スレッドを実行するために使用されるロジックに渡り分割される。グラフィック実行ユニット508により実行され得る論理スレッドの数は、ハードウェアスレッドの数に限定されず、複数の論理スレッドが各ハードウェアスレッドに割り当て可能である。
【0121】
一実施形態では、グラフィック実行ユニット508は、それぞれが異なる命令であってよい複数の命令を同時に発行(co-issue)できる。グラフィック実行ユニットスレッド508のスレッド調停部522は、送信ユニット530、ブランチユニット532、又はSIMD FPU534のうちの1つに、実行のために命令をディスパッチできる。各実行スレッドは、GRF524内の128個の汎用レジスタにアクセスできる。ここで、各レジスタは、32ビットのデータ要素のSIMD8要素ベクトルとしてアクセス可能な、32バイトを格納できる。一実施形態では、各実行ユニットスレッドは、GRF524内の4Kバイトへのアクセスを有するが、実施形態はこれに限定されず、他の実施形態では、より多くの又は少ないレジスタリソースが設けられてよい。一実施形態では、グラフィック実行ユニット508は、計算動作を独立して実行できる7個のハードウェアスレッドにパーティションされる。しかしながら、実行ユニット当たりのスレッド数も、実施形態に従い変化し得る例えば、一実施形態では、最大16個のハードウェアスレッドがサポートされる。一実施形態では、7個のスレッドは4Kバイトにアクセスしてよく、GRF524は全部で28Kバイトを格納できる。16個のスレッドは4Kバイトにアクセスしてよく、GRF524は全部で64Kバイトを格納できる。柔軟なアドレッシングモードは、効率的に幅広なレジスタを構築するために又はストライド(stride)された長方形ブロックデータ構造を表すために、レジスタが一緒にアドレスされることを許容できる。
【0122】
一実施形態では、メモリ動作、サンプラ動作、及び他のより長い遅延のシステム通信は、メッセージ通過送信ユニット530により実行される「送信」命令によりディスパッチされる。一実施形態では、ブランチ命令は、SIMダイバージェンス及び最終コンバージェンスを促進するために、専用ブランチユニット532へディスパッチされる。
【0123】
一実施形態では、グラフィック実行ユニット508は、浮動小数点演算を実行するために、1つ以上のSIMD浮動小数点ユニット(FPU)534を含む。一実施形態では、FPU534は、整数計算もサポートする。一実施形態では、FPU534は、最大M個の32ビット浮動小数点(又は整数)演算をSIMD実行し、又は最大2M個の16ビット整数又は16ビット浮動小数点演算をSIMD実行できる。一実施形態では、FPUのうちの少なくとも1つは、高スループットの超越(transcendental)数学関数及び倍精度54ビット浮動小数点をサポートするために、拡張計算能力を提供する。幾つかの実施形態では、8ビット整数SIMD ALU535のセットも存在し、機械学習計算に関連付けられた動作を実行するために特に最適化されてよい。
【0124】
幾つかの実施形態では、グラフィック実行ユニット508の複数のインスタンスのアレイは、グラフィックサブコアグループ(例えばサブスライス)の中でインスタンス化できる。拡張性のために、製品アーキテクチャは、サブコアグループ値の正確な数の実行ユニットを選択できる。一実施形態では、実行ユニット508は、複数の実行チャネルに跨がり命令を実行できる。更なる実施形態では、グラフィック実行ユニット508上で実行される各スレッドは、異なるチャネル上で実行される。
【0125】
図6は、一実施形態による追加実行ユニット600を示す。実行ユニット600は、例えば、
図3Cのような計算エンジンタイル340A~340Dで使用するための計算最適化実行ユニットであってよいが、これは限定ではない。実行ユニット600の変形が、
図3Bのグラフィックエンジンタイル310A~310Dで使用されてもよい。一実施形態では、実行ユニット600は、スレッド制御ユニット601、スレッド状態ユニット602、命令フェッチ/プリフェッチユニット603、及び命令復号ユニット604を含む。実行ユニット600は、実行ユニット内のハードウェアスレッドに割り当て可能なレジスタを格納するレジスタファイル606を更に含む。実行ユニット600は、送信ユニット607及びブランチユニット608を更に含む。一実施形態では、送信ユニット607及びブランチユニット608は、
図5Bのグラフィック実行ユニット508の送信ユニット530及びブランチユニット532と同様に動作できる。
【0126】
実行ユニット600は、複数の異なる種類の機能ユニットを含む計算ユニット610も含む。一実施形態では、計算ユニット610は、算術ロジックユニットのアレイを含むALUユニット611を含む。ALUユニット611は、64ビット、32ビット、及び16ビット整数及び浮動小数点演算を実行するよう構成できる。整数及び浮動小数点演算は、同時に実行されてよい。計算ユニット610は、シストリック(systolic)アレイ612及び算術ユニット613も含み得る。シストリックアレイ612は、ベクトル又は他のデータ並列演算をシストリック方式で実行するために使用できるW幅及びD深さのデータ処理ユニットネットワークを含む。一実施形態では、シストリックアレイ612は、行列ドット積演算のような行列演算を実行するよう構成できる。一実施形態では、シストリックアレイ612は、16ビット浮動小数点演算、及び8ビット及び4ビット整数演算をサポートする。一実施形態では、シストリックアレイ612は、機械学習動作を加速化するよう構成できる。このような実施形態では、シストリックアレイ612は、b浮動小数点(bfloat)16ビット浮動小数点フォーマットをサポートするよう構成できる。一実施形態では、算術ユニット613は、ALUユニット611より効率的且つ低電力の方法で、算術演算の固有サブセットを実行するために含まれ得る。算術ユニット613は、他の実施形態により提供されたグラフィック処理エンジンの共有機能ロジックの中に見られる算術ロジックの変形を含み得る(例えば、
図4の共有機能ロジック420の算術ロジック422)。一実施形態では、算術ユニット613は、32ビット及び64ビット浮動小数点演算を実行するよう構成できる。
【0127】
スレッド制御ユニット601は、実行ユニット内のスレッドの実行を制御するためのロジックを含む。スレッド制御ユニット601は、実行ユニット600内のスレッドの実行を開始し、停止し、及び先取り(preempt)するためのスレッド調停ロジックを含み得る。スレッド状態ユニット602は、実行ユニット600上で実行するよう割り当てられたスレッドのスレッド状態を格納するために使用できる。実行ユニット600内のスレッド状態を格納することは、これらのスレッドがブロックされ又はアイドルになったとき、スレッドの高速な先取りを可能にする。命令フェッチ/プリフェッチユニット603は、上位レベルの実行ロジック(例えば、
図5Aの命令キャッシュ506)から命令をフェッチできる。命令フェッチ/プリフェッチユニット603は、現在実行中のスレッドの分析に基づき、命令キャッシュにロードされるべき命令に対するプリフェッチ要求も発行できる。命令復号ユニット604は、計算ユニットにより実行されるべき命令を復号するために使用できる。一実施形態では、命令復号ユニット604は、複雑な命令を成分マイクロ演算に復号するために2次デコーダとして使用できる。
【0128】
実行ユニット600は、実行ユニット600上で実行しているハードウェアスレッドにより使用可能なレジスタファイル606を更に含む。レジスタファイル606内のレジスタは、実行ユニット600の計算ユニット610内の複数の同時スレッドを実行するために使用されるロジックに渡り分割できる。グラフィック実行ユニット600により実行され得る論理スレッドの数は、ハードウェアスレッドの数に限定されず、複数の論理スレッドが各ハードウェアスレッドに割り当て可能である。レジスタファイル606のサイズは、サポートされるハードウェアスレッドの数に基づき、実施形態により変化し得る。一実施形態では、レジスタの名称変更は、ハードウェアスレッドにレジスタを動的に割り当てるために使用されてよい。
【0129】
図7は、幾つかの実施形態によるグラフィックプロセッサ命令フォーマット700を示すブロック図である。1つ以上の実施形態では、グラフィックプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線ボックスは、通常、実行ユニット命令に含まれるコンポーネントを示し、破線は、任意の又は命令のサブセットにのみ含まれるコンポーネントを含む。幾つかの実施形態では、記載された及び図示された命令フォーマット700は、命令が処理されると命令復号から生じるマイクロ演算と反対に、それらが実行ユニットに供給される命令であるという点で、マクロ命令である。
【0130】
幾つかの実施形態では、グラフィックプロセッサ実行ユニットは、本来、128ビット命令フォーマット710の命令をサポートする。64ビットのコンパクト命令フォーマット730は、選択された命令、命令オプション、及びオペランドの数に基づき、幾つかの命令で利用可能である。本来の(native)128ビット命令フォーマット710は、全ての命令オプションへのアクセスを提供し、幾つかのオプション及び動作は、64ビットフォーマット730において制限される。64ビットフォーマット730で利用可能なネイティブ命令は、実施形態により変化する。幾つかの実施形態では、命令は、部分的にインデックスファイル713の中のインデックス値のセットを用いて小型化される。実行ユニットハードウェアは、インデックス値に基づき小型化テーブルのセットを参照し、小型化テーブルの出力を用いて、128ビット命令フォーマット710のネイティブ命令を再構成する。他のサイズ及びフォーマットの命令が使用できる。
【0131】
各フォーマットについて、命令オペコード712は、実行ユニットが実行すべき動作を定義する。実行ユニットは、各オペランドの複数のデータ要素に渡り、各命令を並行して実行する。例えば、加算(add)命令に応答して、実行ユニットは、テクスチャ要素またはピクチャ要素を表す各色チャネルに渡り同時加算演算を実行する。デフォルトで、実行ユニットは、オペランドの全てのデータチャネルに渡り、各命令を実行する。幾つかの実施形態では、命令制御フィールド714は、チャネル選択(例えば、予測)及びデータチャネル順(例えば、スウィズル)のような、特定の実行オプションに対する制御を有効にする。128ビット命令フォーマット710の命令では、実行サイズ(exec-size)フィールド716は、並列に実行されるデータチャネルの数を制限する。幾つかの実施形態では、実行サイズフィールド716は、64ビット小型命令フォーマット730での使用のために利用できない。
【0132】
幾つかの実行ユニット命令は、2個のソースオペランド、src0 720、src1 722と、1個の宛先718と、を含む最大3個のオペランドを有する。幾つかの実施形態では、実行ユニットは、宛先のうちの1つが暗示される2重宛先命令をサポートする。データ操作命令は、第3ソースオペランド(例えば、SRC2 724)を有することができ、命令オペコード712は、ソースオペランドの数を決定する。命令の最後のソースオペランドは、命令と共に渡される中間(例えば、ハードコード)値であり得る。
【0133】
幾つかの実施形態では、128ビット命令フォーマット710は、例えば直接レジスタアドレスモード又は間接レジスタアドレスモードが使用されるかを指定するアクセス/アドレスモードフィールド726を含む。直接レジスタアドレスモードが使用されるとき、1つ以上のオペランドのレジスタアドレスは、命令の中のビットにより直接提供される。
【0134】
幾つかの実施形態では、128ビット命令フォーマット710は、命令のアドレスモード及び/又はアクセスモードを指定するアクセス/アドレスモードフィールド726を含む。一実施形態では、アクセスモードは、命令のデータアクセスアライメントを定めるために使用される。幾つかの実施形態は、16バイトに揃えられたアクセスモード及び1バイトに揃えられたアクセスモードを含むアクセスモードをサポートする。ここで、アクセスモードのバイトアライメントは、命令オペランドのアクセスアライメントを決定する。例えば、第1モードでは、命令は、送信元及び宛先オペランドのためにバイトに揃えられたアドレッシングを使用してよく、第2モードでは、命令は、全ての送信元及び宛先オペランドのために16バイトに揃えられたアドレッシングを使用してよい。
【0135】
一実施形態では、アクセス/アドレスモードフィールド726のアドレスモード部分は、命令が直接又は間接アドレッシングを使用すべきかを決定する。直接レジスタアドレッシングモードが使用されるとき、命令の中のビットは、1つ以上のオペランドのレジスタアドレスを直接提供する。間接レジスタアドレッシングモードが使用されるとき、1つ以上のオペランドのレジスタアドレスは、アドレスレジスタ値及び命令の中のアドレス中間フィールドに基づき計算されてよい。
【0136】
幾つかの実施形態では、命令は、オペコード712のビットフィールドに基づきグループ化され、オペコードデコーダ740を簡略化する。8ビットオペコードでは、ビット4、5、及び6は、実行ユニットがオペコードのタイプを決定することを可能にする。図示の詳細なオペコードグループ化は単に一例である。幾つかの実施形態では、移動(move)及び論理(logic)オペコードグループ724は、データ移動及び論理命令(例えば、移動(mov)、比較(comp))を含む。幾つかの実施形態では、移動及び論理グループ742は、5個の最上位ビット(most significant bits:MSB)を共有し、移動(mov)命令は0000xxxxbの形式であり、論理命令は0001xxxxbの形式である。フロー制御命令グループ744(例えば、call、ジャンプ(jmp))は、0010xxxxb(例えば、0x20)の形式の命令を含む。種々雑多な命令グループ746は、0011xxxxb(例えば、ox30)の形式の同期命令(例えば、待機(wait)、送信)を含む。並列算術命令グループ748は、0100xxxxb(例えば、0x40)の形式のコンポーネント関連の計算命令(例えば、加算、乗算(mul))を含む。並列算術グループ748は、データチャネルに渡り並列に、計算演算を実行する。ベクトル算術グループ750は、0101xxxxb(例えば、0x50)の形式の計算命令(例えば、dp4)を含む。ベクトル算術グループは、ベクトルオペランドに対するドット積計算のような計算を実行する。図示のオペコードデコード740は一実施形態では、実行ユニットのどの部分が復号済み命令を実行するために使用されるかを決定するために使用できる。例えば、幾つかの命令は、シストリックアレイにより実行されるシストリック命令として設計されてよい。光線追跡命令(図示しない)のような他の命令は、実行ユニットのスライス又はパーティション内の光線追跡コア又は光線追跡ロジックへとルーティングできる。
【0137】
<グラフィックパイプライン>
図8は、グラフィックプロセッサ800の別の実施形態のブロック図である。本願明細書の任意の他の図の要素と同じ参照符号(又は名称)を有する
図8の要素は、本願明細書の他の場所に記載されたものと同様の任意の方法で動作し又は機能し得るが、このようなものに限定されない。
【0138】
幾つかの実施形態では、グラフィックプロセッサ800は、ジオメトリパイプライン820、メディアパイプライン830、ディスプレイエンジン840、スレッド実行ロジック850、及びレンダ出力パイプライン870を含む。幾つかの実施形態では、グラフィックプロセッサ800は、1つ以上の汎用処理コアを含むマルチコア処理システム内のグラフィックプロセッサである。グラフィックプロセッサは、1つ以上の制御レジスタ(図示しない)へのレジスタ書き込みにより、又はリング相互接続802を介してグラフィックプロセッサ800へと発行されるコマンドにより、制御される。幾つかの実施形態では、リング相互接続802は、グラフィックプロセッサ800を、他のグラフィックプロセッサ又は汎用プロセッサのような他の処理コンポーネントに結合する。リング相互接続802からのコマンドは、ジオメトリパイプライン820又はメディアパイプライン830の個別コンポーネントに命令を供給するコマンドストリーマ803により解釈される。
【0139】
幾つかの実施形態では、コマンドストリーマ803は、メモリから頂点データを読み出してコマンドストリーマ803により提供された得頂点処理コマンドを実行する頂点フェッチャー805の動作を指示する。幾つかの実施形態では、頂点フェッチャー805は、頂点データを頂点シェーダ807に提供する。頂点シェーダ807は、座標空間変換及び各頂点に照明(lighting)演算を実行する。幾つかの実施形態では、頂点フェッチャー805及び頂点シェーダ807は、スレッドディスパッチャ831を介して実行ユニット852A~852Bへ実行スレッドをディスパッチすることにより、頂点処理命令を実行する。
【0140】
幾つかの実施形態では、実行ユニット852A~852Bは、グラフィック及びメディア動作を実行するための命令セットを有するベクトルプロセッサのアレイである。幾つかの実施形態では、実行ユニット852A~852Bは、各アレイに専用の又はアレイ間で共有される付属L1キャッシュ851を有する。キャッシュは、データキャッシュ、命令キャッシュ、又は異なるパーティションにデータ及び命令を含むようパーティションされた単一のキャッシュとして構成できる。
【0141】
幾つかの実施形態では、ジオメトリパイプライン820は、3Dオブジェクトのハードウェアにより加速化されたテッセレーションを実行するテッセレーションコンポーネントを含む。幾つかの実施形態では、プログラマブルハル(hull)シェーダ811は、テッセレーション動作を構成する。プログラマブルドメインシェーダ817は、テッセレーション出力のバックエンド評価を提供する。テッセレータ813は、ハルシェーダ811の指示で動作し、ジオメトリパイプライン820への入力として提供される粗ジオメトリモデルに基づき詳細ジオメトリオブジェクトのセットを生成する専用ロジックを含む。幾つかの実施形態では、テッセレーションが使用されない場合、テッセレーションコンポーネント(例えば、ハルシェーダ811、テッセレータ813、及びドメインシェーダ817)は、バイパスできる。テッセレーションコンポーネントは、頂点シェーダ807から受信したデータに基づき動作できる。
【0142】
幾つかの実施形態では、完全なジオメトリオブジェクトは、実行ユニット852A~852Bへとディスパッチされた1つ以上のスレッドを介してジオメトリシェーダ819により処理でき、又はクリッパ829に直接進むことができる。幾つかの実施形態では、ジオメトリシェーダは、ジオメトリパイプラインの前の段階におけるような頂点又は頂点のパッチではなく、ジオメトリオブジェクト全体に対して動作する。テッセレーションが無効にされた場合、ジオメトリシェーダ819は、頂点シェーダ807から入力を受信する。幾つかの実施形態では、ジオメトリシェーダ819は、テッセレーションユニットが無効にされた場合、ジオメトリテッセレーションを実行するようジオメトリシェーダプログラムによりプログラム可能である。
【0143】
ラスタライズの前に、クリッパ829は、頂点データを処理する。クリッパ829は、固定機能クリッパ、又はクリッピング及びジオメトリ機能を有するプログラマブルクリッパであってよい。幾つかの実施形態では、レンダ出力パイプライン870内のラスタライザ及び深さテストコンポーネント873は、ジオメトリオブジェクトをピクセル毎の表現に変換するために、ピクセルシェーダをディスパッチする。幾つかの実施形態では、ピクセルシェーダロジックは、スレッド実行ロジック850に含まれる。幾つかの実施形態では、アプリケーションは、ラスタライザ及び深さテストコンポーネント873をバイパスし、ストリーム出力ユニット823を介してラスタライズされていない頂点データにアクセスできる。
【0144】
グラフィックプロセッサ800は、相互接続バス、相互接続ファブリック、又はプロセッサの主張コンポーネントの間でデータ及びメッセージを渡すことを可能にする何らかの他の相互接続メカニズムを有する。幾つかの実施形態では、実行ユニット852A~852B及び関連する論理ユニット(例えば、L1キャッシュ851、サンプラ854、テクスチャキャッシュ858、等)は、メモリアクセスを実行し及びプロセッサのレンダ出力パイプラインと通信するために、データポート856を介して相互接続する。幾つかの実施形態では、サンプラ854、キャッシュ851、858、及び実行ユニット852A~852Bは、それぞれ、別個のメモリアクセスパスを有する。一実施形態では、テクスチャキャッシュ858は、サンプラキャッシュとしても構成され得る。
【0145】
幾つかの実施形態では、レンダ出力パイプライン870は、頂点に基づくオブジェクトを関連するピクセルに基づく表現に変換するラスタライザ及び深さテストコンポーネント873を含む。幾つかの実施形態では、ラスタライザロジックは、固定機能三角形及び線ラスタライズを実行するために、ウインドウ化/マスク化(windower/masker)ユニットを含む。関連するレンダキャッシュ878及び深さキャッシュ879は、幾つかの実施形態でも利用可能である。ピクセル動作コンポーネント877は、ピクセルに基づく演算をデータに対して実行する。しかしながら、幾つかのインスタンスでは、2D動作に関連付けられたピクセル動作(例えば、ブレンディング(blending)によるビットブロック画像転送)が、2Dエンジン841により実行され、又はオーバレイ表示面を用いてディスプレイ制御部843により表示のときに代用される。幾つかの実施形態では、共有L3キャッシュ875は、全てのグラフィックコンポーネントに利用可能であり、メインシステムメモリの使用を伴わずに、データの共有を可能にする。
【0146】
幾つかの実施形態では、グラフィックプロセッサメディアパイプライン830は、メディアエンジン837及びビデオフロントエンド834を含む。幾つかの実施形態では、ビデオフロントエンド834は、コマンドストリーマ803からパイプラインコマンドを受信する。幾つかの実施形態では、メディアパイプライン830は、個別コマンドストリーマを含む。幾つかの実施形態では、ビデオフロントエンド834は、コマンドをメディアエンジン837へ送信する前に、メディアコマンドを処理する。幾つかの実施形態では、メディアエンジン837は、スレッドディスパッチャ831を介してスレッド実行ロジック850へディスパッチするために、スレッドを生成するスレッド生成機能を含む。
【0147】
幾つかの実施形態では、グラフィックプロセッサ800は、ディスプレイエンジン840を含む。幾つかの実施形態では、ディスプレイエンジン840は、プロセッサ800の外部にあり、リング相互接続802、又は何らかの他の相互接続バス若しくはファブリックを介してグラフィックプロセッサに結合する。幾つかの実施形態では、ディスプレイエンジン840は、2Dエンジン841及びディスプレイ制御部843を含む。幾つかの実施形態では、ディスプレイエンジン840は、3Dパイプラインと独立に動作可能な専用ロジックを含む。幾つかの実施形態では、ディスプレイ制御部843は、ディスプレイ装置(図示しない)に結合する。ディスプレイ装置は、ラップトップコンピュータにおけるようなシステム内蔵ディスプレイ装置、又はディスプレイ装置コネクタを介して取り付けられる外部ディスプレイ装置であってよい。
【0148】
幾つかの実施形態では、ジオメトリパイプライン820及びメディアパイプライン830は、複数のグラフィック及びメディアプログラミングインタフェースに基づき動作を実行するよう構成可能であり、任意の1つのAPI(application programming interface)に固有ではない。幾つかの実施形態では、グラフィックプロセッサのためのドライバソフトウェアは、特定のグラフィック又はメディアライブラリに固有のAPI呼び出しを、グラフィックプロセッサにより処理可能なコマンドに変換する。幾つかの実施形態では、OpenGL(Open Graphics Library)、OpenCL(Open Computing Language)、及び/又はVulkanグラフィック及び計算APIのためのサポートが提供され、これら全てはKhronos Groupから提供される。幾つかの実施形態では、Microsoft CorporationのDirect3Dライブラリのためのサポートも提供されてよい。幾つかの実施形態では、これらのライブラリの組み合わせがサポートされてよい。OpenCV(Open Source Computer Vision Library)のためのサポートも提供されてよい。互換性のある3Dパイプラインを有する将来のAPIも、作用来のAPIのパイプラインからグラフィックプロセッサのパイプラインへのマッピングを行うことができるならば、サポートされ得る。
【0149】
<グラフィックパイプラインプログラミング>
図9Aは、幾つかの実施形態によるグラフィックプロセッサコマンドフォーマット900を示すブロック図である。
図9Bは、一実施形態によるグラフィックプロセッサコマンドシーケンス910を示すブロック図である。
図9Aの実線ボックスは、通常、グラフィックコマンドに含まれるコンポーネントを示し、破線は、任意の又はグラフィックコマンドのサブセットにのみ含まれるコンポーネントを含む。
図9Aの例的なグラフィックプロセッサコマンドフォーマット900は、クライアント902、コマンド演算コード(オペコード)904、及びコマンドのためのデータ906を識別するためのデータフィールドを含む。サブオペコード905及びコマンドサイズ908も、幾つかのコマンドに含まれる。
【0150】
幾つかの実施形態では、クライアント902は、コマンドデータを処理するグラフィック装置のクライアントユニットを指定する。幾つかの実施形態では、グラフィックプロセッサコマンドパーサは、各コマンドのクライアントフィールドを調べて、コマンドの更なる処理を条件付け(condition)、コマンドデータを適切なクライアントユニットへルーティングする。幾つかの実施形態では、グラフィックプロセッサクライアントユニットは、メモリインタフェースユニット、レンダユニット、2Dユニット、3Dユニット、及びメディアユニットを含む。各クライアントユニットは、コマンドを処理する対応する処理パイプラインを有する。コマンドがクライアントユニットにより受信されると、クライアントユニットは、オペコード904、及び存在する場合にはサブオペコード905を読み出し、実行すべき動作を決定する。クライアントユニットは、データフィールド906内の情報を用いてコマンドを実行する。幾つかのコマンドについては、コマンドのサイズを指定するために、明示的なコマンドサイズ908が期待される。幾つかの実施形態では、コマンドパーサは、コマンドオペコードに基づき、コマンドのうちの少なくとも幾つかのサイズを自動的に決定する。幾つかの実施形態では、コマンドは、ダブルワードの複数倍により揃えられる。他のコマンドフォーマットが使用できる。
【0151】
図9Bのフロー図は、例的なグラフィックプロセッサコマンドシーケンスを示す。幾つかの実施形態では、グラフィックプロセッサの一実施形態を特徴付けるデータ処理システムのソフトウェア又はファームウェアは、グラフィック動作のセットを設定し、実行し、及び終了するために示されるコマンドシーケンスのバージョンを使用する。例示的なコマンドシーケンスが、単に説明の目的で、示され説明され、実施形態は、これらの特定のコマンドに又はこのコマンドシーケンスに限定されない。さらに、コマンドは、コマンドシーケンスの中のコマンドのバッチとして発行されてよい。その結果、グラフィックプロセッサは、少なくとも部分的に同時にコマンドのシーケンスを処理する。
【0152】
幾つかの実施形態では、グラフィックプロセッサコマンドシーケンス910は、パイプラインフラッシュコマンド912により開始してよく、任意のアクティブなグラフィックパイプラインに、パイプラインの現在保留中のコマンドを完了させる。幾つかの実施形態では、3Dパイプライン922及びメディアパイプライン924は、同時に動作しない。パイプラインフラッシュは、アクティブなグラフィックパイプラインに任意の保留中のコマンドを完了させるために実行される。パイプラインフラッシュに応答して、グラフィックプロセッサのためのコマンドパーサは、アクティブな描画エンジンが保留中の動作を完了し、関連するリードキャッシュが無効にされるまで、コマンド処理を一時停止する。任意で、「ダーティ(dirty)」とマークされたレンダキャッシュの中の任意のデータは、メモリにフラッシュされ得る。幾つかの実施形態では、パイプラインフラッシュコマンド912は、パイプライン同期化のために、又はグラフィックプロセッサを低電力状態に置く前に、使用できる。
【0153】
幾つかの実施形態では、パイプライン選択コマンド913は、コマンドシーケンスがグラフィックプロセッサを利用してパイプライン間で明示的に切り替えるとき、使用される。幾つかの実施形態では、パイプライン選択コマンド913は、コンテキストが両方のパイプラインのためのコマンドを発行するべきではない限り、パイプラインコマンドを発行する前に、実行コンテキスト内で1回利用される。幾つかの実施形態では、パイプラインフラッシュコマンド912は、パイプライン選択コマンド913を介してパイプライン切り替えの直前に利用される。
【0154】
幾つかの実施形態では、パイプライン制御コマンド914は、動作のためにグラフィックパイプラインを構成し、3Dパイプライン及びメディアパイプライン924をプログラムするために使用される。幾つかの実施形態では、パイプライン制御コマンド914は、アクティブなパイプラインのパイプライン状態を構成する。一実施形態では、パイプライン制御コマンド914は、パイプライン同期化のために、及びコマンドのバッチを処理する前にアクティブなパイプライン内の1つ以上のキャッシュメモリからのデータを削除する(clear)ために、使用される。
【0155】
幾つかの実施形態では、リターンバッファ状態コマンド916は、データを書き込むよう、それぞれのパイプラインのリターンバッファのセットを構成するために使用される。幾つかのパイプライン動作は、処理中に動作が中間データを書き込む1つ以上のリターンバッファの割り当て、選択、又は構成を利用する。幾つかの実施形態では、グラフィックプロセッサは、出力データを格納するために及びスレッド間通信を実行するためにも、1つ以上のリターンバッファを使用する。幾つかの実施形態では、リターンバッファ状態916は、パイプライン動作のセットのために使用するリターンバッファのサイズ及び数を選択することを含む。
【0156】
コマンドシーケンスの中の残りのコマンドは、動作のためのアクティブなパイプラインに基づき異なる。パイプライン決定902に基づき、コマンドシーケンスは、3Dパイプライン状態930で開始する3Dパイプライン922、又はメディアパイプライン状態940で開始するメディアパイプライン924に合わせられる。
【0157】
3Dパイプライン状態930を構成するためのコマンドは、頂点バッファ状態、条店要素状態、一定色状態、深さバッファ状態、及び3Dプリミティブコマンドが処理される前に構成されるべき他の状態変数のためのコマンドを設定する3D状態設定コマンドを含む。これらのコマンドの値は、少なくとも部分的に使用中の特定の3D APIに基づき決定される。幾つかの実施形態では、3Dパイプライン状態930コマンドは、特定のパイプライン要素を、これらの要素が使用されない場合に、選択的に無効化し又はバイパスすることもできる。
【0158】
幾つかの実施形態では、3Dプリミティブ932コマンドは、3Dパイプラインにより処理されるべき3Dプリミティブを提出するために使用される。3Dプリミティブ932コマンドを介してグラフィックプロセッサに渡されるコマンド及び関連付けられたパラメータは、グラフィックパイプラインの中の頂点フェッチ機能へ転送される。頂点フェッチ機能は、3Dプリミティブ932コマンドデータを使用して、頂点データ構造を生成する。頂点データ構造は、1つ以上のリターンバッファに格納される。幾つかの実施形態では、3Dプリミティブ932コマンドは、頂点シェーダを介して3Dプリミティブに対する頂点動作を実行するために使用される。頂点シェーダを処理するために、3Dパイプライン922は、シェーダ実行スレッドをグラフィックプロセッサ実行ユニットへとディスパッチする。
【0159】
幾つかの実施形態では、3Dパイプライン922は、実行934コマンド又はイベントによりトリガされる。幾つかの実施形態では、レジスタ書き込みは、コマンド実行をトリガする。幾つかの実施形態では、実行は、コマンドシーケンスの中の「go」又は「kick」コマンドによりトリガされる。一実施形態では、コマンド実行は、グラフィックパイプラインを通じてコマンドシーケンスをフラッシュするために、パイプライン同期化コマンドを用いてトリガされる。3Dパイプラインは、3Dプリミティブに対してジオメトリ処理を実行する。動作が完了すると、結果として生じたジオメトリオブジェクトは、ラスタライズされ、ピクセルエンジンは結果として生じたピクセルを着色する。ピクセルシェーディングを制御する追加コマンド及びピクセルバックエンド動作も、これらの動作のために含まれてよい。
【0160】
幾つかの実施形態では、グラフィックプロセッサコマンドシーケンス910は、メディア動作を実行するとき、メディアパイプライン924を辿る。通常、メディアパイプライン924の固有の使用及びプログラミング方法は、実行されるべきメディア又は計算動作に依存する。固有のメディア復号動作は、メディア復号の間にメディアパイプラインへとオフロードされてよい。幾つかの実施形態では、メディアパイプラインはバイパスされることもでき、メディア復号は、1つ以上の汎用処理コアにより提供されるリソースを用いて全体又は部分的に実行され得る。一実施形態では、メディアパイプラインは、GPGPU(general-purpose graphics processor unit)動作のための要素も含む。ここで、グラフィックプロセッサは、グラフィックプリミティブのレンダリングに明示的に関連しない計算シェーダプログラムを使用して、SIMDベクトル動作を実行するために使用される。
【0161】
幾つかの実施形態では、メディアパイプライン924は、3Dパイプライン922と同様の方法で構成される。メディアパイプライン状態940を構成するためのコマンドセットは、メディアオブジェクトコマンド942の前にディスパッチされコマンドキューに配置される。幾つかの実施形態では、メディアパイプライン状態940のためのコマンドは、メディアオブジェクトを処理するために使用されるメディアパイプライン要素を構成するためのデータを含む。これは、符号化又は復号フォーマットのような、メディアパイプライン内のビデオ復号及びビデオ符号化ロジックを構成するためのデータを含む。幾つかの実施形態では、メディアパイプライン状態940のためのコマンドは、状態設定のバッチを含む「間接」状態要素への1つ以上のポインタの使用もサポートする。
【0162】
幾つかの実施形態では、メディアオブジェクトコマンド942は、メディアパイプラインによる処理のために、メディアオブジェクトへのポインタを提供する。メディアオブジェクトは、処理されるべきビデオデータを含むメモリバッファを含む。幾つかの実施形態では、全てのメディアパイプライン状態は、メディアオブジェクトコマンド942を発行する前に有効でなければならない。パイプライン状態が構成され、メディアオブジェクトコマンド942がキューイングされると、メディアパイプライン924は、実行コマンド944又は等価な実行イベント(例えば、レジスタ書き込み)を介してトリガされる。メディアパイプライン924からの出力は、次に、3Dパイプライン922又はメディアパイプライン924により提供される動作により後処理されてよい。幾つかの実施形態では、GPGPU動作は、メディア動作と同様に構成され実行される。
【0163】
<グラフィックソフトウェアアーキテクチャ>
図10は、幾つかの実施形態によるデータ処理システム1000の例的なグラフィックソフトウェアアーキテクチャを示す。幾つかの実施形態では、ソフトウェアアーキテクチャは、3Dグラフィックアプリケーション1010、オペレーティングシステム1020、及び少なくとも1つのプロセッサ1030を含む。幾つかの実施形態では、プロセッサ1030は、グラフィックプロセッサ1032及び1つ以上の汎用プロセッサコア1034を含む。グラフィックアプリケーション1010及びオペレーティングシステム1020は、それぞれ、データ処理システムのシステムメモリ1050の中で実行する。
【0164】
幾つかの実施形態では、3Dグラフィックアプリケーション1010は、シェーダ命令1012を含む1つ以上のシェーダプログラムを含む。シェーダ言語命令は、Direct3DのHLSL(High-Level Shader Language)、GLSL(OpenGL Shader Language)等のような高レベルシェーダ言語であってよい。アプリケーションは、汎用プロセッサコア1034による実行に適した機械語の実行可能命令1014も含む。アプリケーションは、頂点データにより定められるグラフィックオブジェクト1016も含む。
【0165】
幾つかの実施形態では、オペレーティングシステム1020は、Microsoft CorporationのMicrosoft(登録商標)Windows(登録商標)オペレーティングシステム、独自UNIX(登録商標)様オペレーティングシステム、又はLinux(登録商標)カーネルの変形を使用するオープンソースUNIX(登録商標)様オペレーティングシステムである。オペレーティングシステム1020は、Direct3D API、OpenGL API、又はVulkan APIのようなグラフィックAPI1022をサポートできる。Direct3D APIが使用されているとき、オペレーティングシステム1020は、HLSLの任意のシェーダ命令1012を低レベルのシェーダ言語にコンパイルするために、フロントエンドコンパイラ1024を使用する。コンパイルは、JIT(just-in-time)コンパイルであってよく、又はアプリケーションはシェーダプレコンパイルを実行できる。幾つかの実施形態では、高レベルシェーダは、3Dグラフィックアプリケーション1010のコンパイル中に、低レベルシェーダにコンパイルされる。幾つかの実施形態では、シェーダ命令1012は、Vulkan APIにより使用されるSPIR(Standard Portable Intermediate Representation)のバージョンのような中間形式で提供される。
【0166】
幾つかの実施形態では、ユーザモードグラフィックドライバ1026は、シェーダ命令1012をハードウェア固有表現に変換するためのバックエンドシェーダコンパイラ1027を含む。OpenGL APIが使用されているとき、GLSL高レベル言語のシェーダ命令1012は、コンパイルのためにユーザモードグラフィックドライバ1026に渡される。幾つかの実施形態では、ユーザモードグラフィックドライバ1026は、オペレーティングシステムカーネルモード機能1028を使用して、カーネルモードグラフィックドライバ1029と通信する。幾つかの実施形態では、カーネルモードグラフィックドライバ1029は、コマンド及び命令をディスパッチするために、グラフィックプロセッサ1032と通信する。
【0167】
<IPコア実装>
少なくとも1つの実施形態の1つ以上の態様は、プロセッサのような集積回路内のロジックを表す及び/又は定める機械可読媒体(本願明細書ではコンピュータ可読媒体または非一時的コンピュータ可読媒体とも呼ばれる)に格納された代表的コードにより実装されてよい。例えば、機械可読媒体は、プロセッサ内の種々のロジックを表す命令を含んでよい。機械により読み取られると、命令は、機械に、本願明細書に記載の技術を実行するようにさせてよい。このような表現は、「IPコア」として知られ、集積回路の構造を記述するハードウェアモデルのような、有形の機械可読媒体に格納され得る集積回路のためのロジックの再利用可能ユニットである。ハードウェアモデルは、ハードウェアモデルを集積回路を製造する製造機械にロードする種々の顧客又は製造設備に供給されてよい。集積回路は、回路が本願明細書に記載の実施形態のうちのいずれかに関連して記載された動作を実行するように製造されてよい。
【0168】
図11Aは、一実施形態による動作を実行するための集積回路を製造するために使用され得る例示的なIPコア開発システム1100を示すブロック図である。IPコア開発システム1100は、より大きな設計に組み込むことができ又は集積回路全体(例えばSOC集積回路)を構成するために使用可能なモジュール式の再利用可能な設計を生成するために使用されてよい。設計設備1130は、高レベルプログラミング言語(例えば、C/C++)でIPコア設計のソフトウェアシミュレーション1110を生成できる。ソフトウェアシミュレーション1110は、シミュレーションモデル1112を用いてIPコアの振る舞いを設計し、テストし、及び検証するために使用できる。シミュレーションモデル1112は、機能、振る舞い、及び/又はタイミングシミュレーションを含んでよい。RTL(register transfer level)設計1115は、次に、シミュレーションモデル1112から生成され又は合成され得る。RTL設計1115は、モデル化されたデジタル信号を用いて実行される関連するロジックを含むハードウェアレジスタ間のデジタル信号のフローをモデル化する集積回路の振る舞いの抽象である。RTL設計1115に加えて、論理レベル又はトランジスタレベルの低レベル設計も生成され、設計され、又は合成されてよい。したがって、初期設計及びシミュレーションの特定の詳細は変化してよい。
【0169】
RTL設計1115又は均等物は、設計設備によりハードウェアモデル1120に更に合成されてよい。ハードウェアモデル1120は、ハードウェア記述言語(HDL)又は何らかの他の物理設計データの表現であってよい。HDLは、IPコア設計を検証するために更にシミュレートされ又はテストされてよい。IPコア設計は、不揮発性メモリ1140(例えば、ハードディスク、フラッシュメモリ、又は任意の不揮発性記憶媒体)を用いて第三者製造設備1165への分配のために格納できる。代替として、IPコア設計は、有線接続1150又は無線接続1160を介して(例えばインターネットを介して)送信されてよい。製造設備1165は、次に、IPコア設計に少なくとも部分的に基づく集積回路を製造してよい。製造された集積回路は、本願明細書に記載の少なくとも1つの実施形態に従う動作を実行するよう構成できる。
【0170】
図11Bは、本願明細書に記載の幾つかの実施形態による、集積回路パッケージ部品1170の側面断面図を示す。集積回路パッケージ部品1170は、本願明細書に記載のような1つ以上のプロセッサ又はアクセラレータ装置の一実装を示す。パッケージ部品1170は、基板1180に接続されたハードウェアロジック1172、1174の複数のユニットを含む。ロジック1172、1174は、少なくとも部分的に構成可能ロジック又は固定機能ロジックハードウェアに実装されてよく、本願明細書に記載のプロセッサコア、グラフィックプロセッサ、又は他のアクセラレータ装置のうちのいずれかの1つ以上の部分を含み得る。ロジック1172、1174の各ユニットは、半導体ダイの中に実装され、相互接続構造1173を介して基板1180に結合され得る。相互接続構造1173は、ロジック1172、1174と基板1180との間で電気信号をルーティングするよう構成されてよく、限定ではないがバンプ又はピラーのような相互接続構造を含み得る。幾つかの実施形態では、相互接続構造1173は、例えば、ロジック1172、1174の動作に関連付けられた入力/出力(I/O)信号及び/又は電力又はグランド信号のような電気信号をルーティングするよう構成されてよい。幾つかの実施形態では、基板1180は、樹脂に基づく積層基板である。基板1180は、他の実施形態では、他の適切な種類の基板を含んでよい。パッケージ部品1170は、パッケージ相互接続1183を介して他の電気装置に接続され得る。パッケージ相互接続1183は、電気信号をマザーボード、他のチップセット、又はマルチチップモジュールのような他の電気装置へルーティングするために、基板1180の表面に結合されてよい。
【0171】
幾つかの実施形態では、ロジック1172、1174のユニットは、ロジック1172、1174の間で電気信号をルーティングするよう構成されるブリッジ1182に電気的に結合される。ブリッジ1182は、電気信号のルートを提供する高密度相互接続構造であってよい。ブリッジ1182は、ガラス又は適切な半導体材料からなるブリッジ基板を含んでよい。電気的ルーティング機能は、ロジック1172、1174の間のチップ間接続を提供するためにブリッジ基板上に形成できる。
【0172】
1つのロジックユニット1172、1174、及びブリッジ1182が示されるが、本願明細書に記載の実施形態は、より多くの又は少ないロジックユニットを1つ以上のダイの上に含んでよい。1つ以上のダイは、ゼロ個以上のブリッジにより接続されてよく、ロジックが単一のダイに含まれるとき、ブリッジ1182が排除されてよい。代替として、複数のダイまたはロジックユニットは、1つ以上のブリッジにより接続され得る。さらに、複数の論理ユニット、ダイ、及びブリッジが、3次元構成を含む他の可能な構成で一緒に接続できる。
【0173】
図11Cは、基板1180(例えば、基本ダイ)に接続されるハードウェアロジックチップレットの複数のユニットを含むパッケージ部品1190を示す。本願明細書に記載のようなグラフィック処理ユニット、並列プロセッサ、及び/又は計算アクセラレータは、個別に製造される多様なシリコンチップレットで構成され得る。この文脈では、チップレットは、他のチップレットとより大きなパッケージに組み立てることのできる個別ロジックユニットを含む少なくとも部分的にパッケージされた集積回路である。異なるIPコアロジックを有するチップレットの多様なセットは、単一の装置へと組み立て可能である。さらに、チップレットは、アクティブインタポーザ技術を用いて基本ダイ又は基本チップレットへと主席可能である。本願明細書に記載の概念は、GPU内の異なる形式のIPの間の相互接続及び通信を可能にする。IPコアは、異なるプロセス技術を用いて製造でき、製造中に構成できる。これは、特に幾つかの種類のIPを有する大規模SoC上の複数のIPを、同じ製造プロセスにまとめることの複雑性を回避する。複数のプロセス技術の使用を可能にすることは、市場に出るまでの時間を改善し、複数の製品SKUを生成するためのコスト効率の良い方法を提供する。さらに、非集中型IPは、独立に電力制御されるよう更に変更可能であり、所与の作業負荷で使用されていないコンポーネントは、電力をオフにでき、電力消費全体を低減する。
【0174】
ハードウェアロジックチップレットは、専用ハードウェアロジックチップレット1172、ロジック又はI/Oチップレット1174、及び/又はメモリチップレット1175を含み得る。ハードウェアロジックチップレット1172、及びロジック又はI/Oチップレット1174は、少なくとも部分的に構成可能ロジック又は固定機能ロジックハードウェアに実装されてよく、本願明細書に記載のプロセッサコア、グラフィックプロセッサ、並列プロセッサ、又は他のアクセラレータ装置のうちのいずれかの1つ以上の部分を含み得る。メモリチップレット1175は、DRAM(例えば、GDDR、HBM)メモリ又はキャッシュ(SRMA)メモリであり得る。
【0175】
各チップレットは、個別半導体ダイとして製造され、相互接続構造1173を介して基板1180に結合され得る。相互接続構造1173は、種々のチップレット及び基板1180内のロジックの間の電気信号をルーティングするよう構成されてよい。相互接続構造1173は、限定ではないがバンプ又はピラーのような相互接続を含み得る。幾つかの実施形態では、相互接続構造1173は、例えば、ロジック、I/O及びメモリチップレットの動作に関連付けられた入力/出力(I/O)信号及び/又は電力又はグランド信号のような電気信号をルーティングするよう構成されてよい。
【0176】
幾つかの実施形態では、基板1180は、樹脂に基づく積層基板である。基板1180は、他の実施形態では、他の適切な種類の基板を含んでよい。パッケージ部品1190は、パッケージ相互接続1183を介して他の電気装置に接続され得る。パッケージ相互接続1183は、電気信号をマザーボード、他のチップセット、又はマルチチップモジュールのような他の電気装置へルーティングするために、基板1180の表面に結合されてよい。
【0177】
幾つかの実施形態では、ロジック又はI/Oチップレット1174及びメモリチップレット1175は、ロジック又はI/Oチップレット1174及びメモリチップレット1175の間の電気信号をルーティングするよう構成されるブリッジ1187を介して電気的に結合され得る。ブリッジ1187は、電気信号のルートを提供する高密度相互接続構造であってよい。ブリッジ1187は、ガラス又は適切な半導体材料からなるブリッジ基板を含んでよい。電気的ルーティング機能は、ロジック又はI/Oチップレット1174及びメモリチップレット1175の間のチップ間接続を提供するためにブリッジ基板上に形成できる。ブリッジ1187は、シリコンブリッジ又は相互接続ブリッジとも呼ばれてよい。例えば、ブリッジ1187は、幾つかの実施形態では、EMIB(Embedded Multi-die Interconnect Bridge)である。幾つかの実施形態では、ブリッジ1187は、単に、あるチップレットから別のチップレットへの直接接続であってよい。
【0178】
基板1180は、I/O1191、キャッシュメモリ1192、及び他のハードウェアロジック1193のためのハードウェアコンポーネントを含み得る。ファブリック1185は、基板1180内の種々のロジックチップレット及びロジック1191、1193の間の通信を可能にするために、基板1180内に埋め込まれ得る。一実施形態では、I/O1191、ファブリック1185、キャッシュ、ブリッジ、及び他のハードウェアロジック1193は、基板1180の上に積層された基本ダイに統合され得る。ファブリック1185は、ネットワークオンチップ相互接続、又はパッケージ組立体のコンポーネント間でデータパケットを切り換える別の形式のパケット交換ファブリックであってよい。
【0179】
種々の実施形態では、パッケージ部品1190は、ファブリック1185又は1つ以上のブリッジ1187により相互接続されるより少数の又は多数のコンポーネント及びチップレットを含み得る。パッケージ部品1190内のチップレットは、3D又は2.5D構成で構成されてよい。通常、ブリッジ構造1187は、例えば、ロジック又はI/Oチップレット及びメモリチップレットの間のポイントツーポイント相互接続を促進するために使用されてよい。ファブリック1185は、種々のロジック及び/又はI/Oチップレット(例えば、チップレット1172、1174、1191、1193)を他のロジック及び/又はI/Oチップレットと相互接続するために使用され得る。一実施形態では、基板内のキャッシュメモリ1192は、パッケージ部品1190のグローバルキャッシュ、分散型グローバルキャッシュの部分、又はファブリック1185のための専用キャッシュとして動作できる。
【0180】
図11Dは、一実施形態による、相互接続可能なチップレット1195を含むパッケージ部品1194を示す。相互接続可能なチップレット1195は、1つ以上の基本チップレット1196、1198上の標準化スロットの中に組み立てることができる。基本チップレット1196、1198は、本願明細書に記載の他のブリッジ相互接続と同様であり例えばEMIBであってよいブリッジ相互接続1197を介して結合できる。メモリチップレットは、ブリッジ相互接続を介してロジック又はI/Oチップレットにも接続され得る。I/O及びロジックチップレットは、相互接続ファブリックを介して通信できる。基本チップレットは、それぞれ、ロジック又はI/O又はメモリ/キャッシュのうちの1つのための標準化フォーマットの1つ以上のスロットをサポートできる。
【0181】
一実施形態では、SRMA及び電力分配回路は、基本チップレットの上にスタックされる相互接続可能なチップレット1195と異なるプロセス技術を使用して製造され得る基本チップレット1196、1198のうちの1つ以上の中に製造され得る。例えば、基本チップレット1196、1198は、より大規模なプロセス技術を用いて製造でき、一方で、相互接続可能なチップレットは、より小規模なプロセス技術を用いて製造できる。相互接続可能なチップレット1195のうちの1つ以上は、メモリ(例えば、DRAM)チップレットであってよい。パッケージ部品1194を使用する製品について目標とされる電力、及び/又は性能に基づき、パッケージ部品1194のために異なるメモリア密度が選択できる。さらに、異なる数の基本ユニット種類を有するロジックチップレットが、製品について目標とされる電力及び/又は性能に基づき、組み立て時に選択できる。さらに、異なる種類のIPロジックコアを含むチップレットは、相互接続可能なチップレットスロットに挿入でき、異なる技術のIPブロックを混合し及び調和させることのできるハイブリッドプロセッサ設計を可能にする。
【0182】
<例的なシステムオンチップ集積回路>
図12~13Bは、本願明細書に記載される種々の実施形態による、1つ以上のIPコアを用いて製造され得る例示的な集積回路及び関連グラフィックプロセッサを示す。図示のものに加えて、追加グラフィックプロセッサ/コア、周辺機器インタフェースプロセッサ/コア、又は汎用プロセッサコアを含む他のロジック及び回路が含まれてよい。
【0183】
図12は、一実施形態による、1つ以上のIPコアを用いて製造され得る例的なシステムオンチップ集積回路1200を示すブロック図である。例的な集積回路1200は、1つ以上のアプリケーションプロセッサ1205(例えば、CPU)、少なくとも1つのグラフィックプロセッサ1210を含み、更に画像プロセッサ1215及び/又はビデオプロセッサ1220を含んでよく、これらのうちのいずれかは、同じ又は複数の異なる設計設備からのモジュール式IPコアであってよい。集積回路1200は、USB制御部1225、UART制御部1230、SPI/SDIO制御部1235、及びI2S/I2C制御部1240を含む周辺機器又はバスロジックを含む。さらに、集積回路は、HDMI(high-definition multimedia interface)制御部1250及びMIPI(mobile industry processor interface)ディスプレイインタフェース1255のうちの1つ以上に結合されたディスプレイ装置1245を含む。記憶装置は、フラッシュメモリ及びフラッシュメモリ制御部を含むフラッシュメモリサブシステム1260により提供されてよい。メモリインタフェースは、SDRAM又はSRAMメモリ装置へのアクセスのためにメモリ制御部1265により提供されてよい。幾つかの集積回路は、内蔵セキュリティエンジン1270を更に含む。
【0184】
図13A~13Bは、本願明細書に記載の実施形態による、SoC内で使用するための例的なグラフィックプロセッサを示すブロック図である。
図13Aは、一実施形態による、1つ以上のIPコアを用いて製造され得るシステムオンチップ集積回路の例的なグラフィックプロセッサ1310を示す。
図13Bは、一実施形態による、1つ以上のIPコアを用いて製造され得るシステムオンチップ集積回路の追加の例的なグラフィックプロセッサ1340を示す。
図13Aのグラフィックプロセッサ1310は、低電力グラフィックプロセッサコアの一例である。
図13Bのグラフィックプロセッサ1340は、高電力グラフィックプロセッサコアの一例である。グラフィックプロセッサ1310、1340の各々は、
図12のグラフィックプロセッサ1210の変形であり得る。
【0185】
図13Aに示すように、グラフィックプロセッサ1310は、頂点プロセッサ1305及び1つ以上のグラフメントプロセッサ1315A~1315N(例えば、1315A、1315B、1315C、1315D~1315N-1、1315N)を含む。グラフィックプロセッサ1310は、個別ロジックにより異なるシェーダプログラムを実行できる。その結果、頂点プロセッサ1305は、頂点シェーダプログラムの動作を実行するために最適化され、一方で、1つ以上のフラグメントプロセッサ1315A~1315Nは、フラグメント又はピクセルシェーダプログラムのフラグメント(例えば、ピクセル)シェーディング動作を実行する。頂点プロセッサ1305は、3Dグラフィックパイプラインの頂点処理段階を実行し、プリミティブ及び頂点データを生成する。フラグメントプロセッサ1315A~1315Nは、頂点プロセッサ1305により生成されたプリミティブ及び頂点データを使用して、ディスプレイ装置で表示されるフレームバッファを生成する。一実施形態では、フラグメントプロセッサ1315A~1315Nは、Direct3D APIにおいて提供されるようなピクセルシェーダプログラムと同様の動作を実行するために使用されてよい、OpenGL APIにおいて提供されるようなフラグメントシェーダプログラムを実行するために最適化される。
【0186】
グラフィックプロセッサ1310は、1つ以上のメモリ管理ユニット(memory management unit:MMU)1320A~1320B、キャッシュ1325A~1325B、及び回路相互接続1330A~1330Bを更に含む。1つ以上のMMU1320A~1320Bは、仮想から物理へのアドレスマッピングを、1つ以上のキャッシュ1325A~1325Bに格納された頂点又は画像/テクスチャデータに加えてメモリに格納された頂点又は画像/テクスチャデータを参照し得る頂点プロセッサ1305及び/又はフラグメントプロセッサ1315A~1315Nを含むグラフィックプロセッサ1310に提供する。一実施形態では、1つ以上のMMU1320A~1320Bは、
図12の1つ以上のアプリケーションプロセッサ1205、画像プロセッサ1215、及び/又はビデオプロセッサ1220に関連付けられた1つ以上のMMUを含む、システム内の他のMMUと同期化されてよい。その結果、各プロセッサ1205~1220は、共有又は統合仮想メモリシステムに参加できる。1つ以上の回路相互接続1330A~1330Bは、グラフィックプロセッサ1310が実施形態に従いSoC内の他のIPコアとSoCの内部バスを介して又は直接接続を介して相互作用することを可能にする。
【0187】
図13Bに示すように、グラフィックプロセッサ1340は、
図13Aの1つ以上のMMU1320A~1320B、キャッシュ1325A~1325B、及びグラフィックプロセッサ1310の回路相互接続1330A~1330Bを含む。グラフィックプロセッサ1340は、統一シェーダコアアーキテクチャを提供する1つ以上のシェーダコア1355A~1355N(例えば、1455A、1355B、1355C、1355D、1355E、1355F~1355N-1、1355N)を含む。統一シェーダコアアーキテクチャでは、単一のコア又は種類又はコアが、頂点シェーダ、フラグメントシェーダ、及び/又は計算シェーダを実装するためのシェーダプログラムコードを含む全ての種類のプログラマブルシェーダコードを実行できる。存在するシェーダコアの正確な数は、実施形態及び実装の間で変化し得る。さらに、グラフィックプロセッサ1340は、実行スレッドを1つ以上のシェーダコア1355A~1355Nにディスパッチするスレッドディスパッチャとして動作するコア間タスクマネジャ1345、及びタイルに基づくレンダリングのためのタイリング動作を加速化するタイリングユニット1358を含む。タイルに基づくレンダリングでは、シーンのレンダリング動作は、画像空間において細分化され、例えばシーン内のローカル空間コヒーレンスを利用し、又は内部キャッシュの使用を最適化する。
【0188】
幾つかの実施形態では、処理リソースは、処理要素(例えば、本願明細書に記載されるようなGPU内のグラフィックプロセッサ又はグラフィックプロセッサ構造(例えば、並列処理ユニット、グラフィック処理エンジン、マルチコアグループ、計算ユニット、グラフィックコアネクストの計算ユニット)に関連する、GPGPUコア、光線追跡コア、テンソルコア、実行リソース、実行ユニット(execution unit (EU))、ストリームプロセッサ、ストリーミングマルチプロセッサ(streaming multiprocessor (SM))、グラフィックマルチプロセッサ)を表す。例えば、処理リソースは、グラフィックマルチプロセッサのGPGPUコア又はテンソル/光線追跡コア、グラフィックマルチプロセッサの光線追跡コア、テンソルコア、又はGPGPUコア、グラフィックマルチプロセッサの実行リソース、マルチコアグループのGFXコア、テンソルコア、又は光線追跡コアのうちの1つ、計算ユニットのベクトル論理ユニット又はスカラ論理ユニットのうちの1つ、EUアレイを有する実行ユニット又はEUアレイ、実行ロジックの実行ユニット、及び/又は実行ユニット、のうちの1つであってよい。処理リソースは、例えば、グラフィック処理エンジン、処理クラスタ、GPGPU、GPGPU、グラフィック処理エンジン、グラフィック処理エンジンクラスタ、及び/又はグラフィック処理エンジン内の実行リソースであってもよい。処理リソースは、グラフィックプロセッサ内の処理リソース、グラフィックプロセッサ、及び/又はグラフィックプロセッサであってもよい。
【0189】
<処理の遅延を低減するテッセレーション再分配>
並列コンピューティングは、多数の計算または処理の実行が独自に実行される種類の計算である。並列コンピューティングは、限定ではないがSIMD又はSIMTを含む多様な形式であり得る。SIMDは、複数の処理要素を有するコンピュータが、複数のデータポイントに対して同時に同じ演算を実行することを表す。一例では、上述の
図5A~5BはSIMDを表し、EU、FPU、及びALUの観点で汎用プロセッサに実装される。一般的なSIMDマシンでは、データは、レジスタにパッケージされ、各レジスタはチャネルのアレイを含む。命令は、レジスタのチャネルnで見付かったデータ、及び別のレジスタの同じチャネルで見付かったデータに対して作用する。SIMDマシンは、命令の単一のシーケンスが大容量データに同時に適用できる分野で有利である。例えば、一実施形態では、グラフィックプロセッサ(例えば、GPGPU、GPU、等)は、計算シェーダプログラムを用いて、SIMDベクトル演算を実行するために使用できる。
【0190】
種々の実施形態は、SIMDの使用の代わりとして、又はSMIDの使用に加えて、SMIT(Single Instruction Multiple Thread)の使用による実行を使用するよう適用できる。SIMDコアまたは動作への言及は、SIMTにも適用でき、又はSIMTと組み合わせてSIMDに適用できる。以下の説明は、SIMDマシンの観点で議論される。しかしながら、本願明細書における実施形態は、SIMDコンテキストだけに限定されず、例えばSIMTのような他の並列コンピューティングの枠組みに適用されてよい。議論及び説明を容易にするために、以下の説明は、概して、SIMD実装に焦点を当てる。しかしながら、実施形態は、記載される技術及び方法に変更を伴わずに、SIMTマシンに同様に適用できる。SIMTマシンに関して、シストリックアレイに命令を提供するために及びSIMTマシン上で命令を実行するために、以下に議論するものと同様のパターンに従うことができる。他の種類の並列コンピューティングマシンも、同様に本願明細書に記載の実施形態を利用してよい。
【0191】
前述のように、グラフィック処理ユニット(graphics processing unit (GPU))における競争力のあるジオメトリ処理性能を提供することは、標準的に、複数の、並列の、同時のジオメトリ処理固定機能パイプライン(geometry processing fixed-function pipeline (GPP))に関連する。これらのGPP(時に、SMM、ジオメトリ及び設定固定機能パイプライン、又はプレテッセレーション及びポストテッセレーションパイプラインとも呼ばれる)は、OpenGLレンダリングパイプライン(rendering pipeline (RP))におけるプログラマブルシェーダ及び固定機能ステージの混合を含む。コンピュータグラフィックでは、テッセレーションは、シーン内のオブジェクトを表す多角形のデータセット(頂点セットとも呼ばれる)を管理し、及びそれらをレンダリングのために適切な構造に分割するために使用される。リアルタイムグラフィックに対するテッセレーションの利点は、制御パラメータ(例えば、カメラ距離)に基づき3D多角形メッシュ及びそのシルエットエッジから詳細を動的に加算及び減算できることである。テッセレーションは、パッチプリミティブ(primitive)(「オブジェクト」とも呼ばれる)を細分化し、その頂点の頂点値を計算することを含む。テッセレーション制御シェーダは、テッセレーション係数を指定することにより、実行すべきテッセレーションの量を決定してよい。パッチ当たりの頂点の数は、アプリケーションレベルで定義されてよい。パッチオブジェクトは、三角形又は四角形(正方形)であってよい。
【0192】
テッセレーションは、入力パッチプリミティブに関連するパラメータドメインを三角形プリミティブに細分化し、(それらの三角形プリミティブの角と一致する)テッセレーション済みドメイン点における頂点を計算することを含む。入力パッチプリミティブは、三角形又は四角形パラメータドメインに関連してよい。テッセレーション制御シェーダは、パッチ毎にテッセレーション係数のセットを指定することにより、ドメインがどれ位細かく三角形に細分化されるかを決定してよい。テッセレーション評価シェーダは、続いて、入力パッチプリミティブに関連する入力制御点のセット及びテッセレーション済みドメイン点におけるドメインパラメータを用いて、頂点値を計算してよい。パッチプリミティブに関連する入力制御点の数は、アプリケーションレベルで定義されてよい。
【0193】
並列レンダリンググラフィックアーキテクチャにおける問題は、厳格な順序通りの3次元(3D)パイプラインレンダリングモデルを維持しながら、どれだけ並列GPP及びレンダリング及びラスタライズパイプライン(RP)を利用するかである。関連する主な課題は、アプリケーションにより供給される「オブジェクト空間」ジオメトリプリミティブの、レンダリング処理中のレンダリングされる画像への任意のマッピングである。ここで、「Sort-Middle」アーキテクチャが、業界により効果的に利用されている。この方式では、GPUは、先ず、並列GPPにより、完全なジオメトリ処理を、オブジェクト空間プリミティブの任意に分散したサブセット(「バッチ」)に対して実行する。結果として生じるスクリーン空間プリミティブは、次に正しくレンダリングされ(つまり、時間的にソートされ)、各PRの所有するスクリーン空間領域に基づき、ラスタライズクロスバーによりRPに分配される。
【0194】
設計においてGPPの数(N)を増大することは、標準的に、ラスタライズクロスバーへ出力するためにGPPが「その順番を待つ」間に、十分なGPP出力バッファを提供するために、各GPPの出力でより深いバッファを利用する。ここで、GPP出力バッファは、他の(N-1)個のGPPがそれらのバッチをクロスバーへ排出するのに要する平均時間に合わせてサイズが決定される可能性がある。十分なバッファが提供されない場合、「順番を待っている」GPPは排出されないために直ぐに停止になり、順番になるとGPP処理レート(これはクロスバーレートより遅い)でクロスバーへ出力するので、全体のジオメトリスループットは、単一GPPのスループットにまで低下する傾向がある。
【0195】
GPUのテッセレーション処理レートは、ローカル(オンダイ、on-die)テッセレーション作業再分配を用いて向上できる。テッセレーション作業再分配は、大規模なオンダイバッファを回避でき、分配がローカルであるので、オフチップメモリアクセスの使用により発生する性能及び電力ペナルティも回避できる。プレテッセレーション結果をメモリに書き込み、続いてそれらの結果をテッセレーションパイプラインに渡り再分配する代わりに、テッセレーション再分配能力が利用されて、オフチップメモリ帯域幅を消費することなく、GPPのテッセレーションステージに渡りパッチを直接分配する。
【0196】
テッセレーション作業再分配の既存のアプローチは、テッセレーションエンジン(tessellation engine (TE))を通信可能に結合するテッセレーション再分配バス(tessellation redistribution bus (TRB))を用いるGPP通信におけるTTEに関連し得る。ここで、TRBは、順序を維持しながら、テッセレーション作業の並列GPPへの再分配をサポートする。GPP内のTEに制御を渡してTRBの制御を可能にするために、テッセレーション分配中央エンジン(tessellation distribution centralengine (TED))も利用される。TEはTEDと通信し、テッセレーション作業をTEDへ送信し、及びTRBを解放し、その間、TRBを制御すべき次のGPPに関する情報を渡すことを含む。
【0197】
しかしながら、既存のアプローチでは、TEDは、(GPP内に存在する)個々のTEから物理的に離れて配置され得る。あるGPPから別のGPPへ制御を渡すことに関連する、又は(TEで次のテッセレーション作業自体を処理する前に)前のテッセレーション作業が再分配のために分配されるべきTEDへ送信されるのを待っているTEに関連する通信は、長いパスを含み、遅延をもたらす。これらの長いパス及び遅延は、GPPに渡りアイドル時間を生じる。
【0198】
例えば、TEからTEDへのラウンドトリップ遅延は、1つのGPPから別のGPPへの切り替えの間に、ストリーミングにとって許されない。そのようなストリーミングは、例えば、TEが、TE自身により実行されるべきテッセレーション作業とインタリーブされたTEDによる再分配のためにマークされたテッセレーション作業を有するとき、生じることができない。この問題は、TEが分配のためにマークされたテッセレーション作業とTEにおいてローカルに処理されるようマークされたテッセレーション作業との間で頻繁に切り換えられるとき、増大する。従って、TRBの制御を有するTEが、TEにおいてローカルに処理されるべきテッセレーション作業が続く(TEDへ)分配されるべきテッセレーション作業を有する度に、又はその逆の度に、アイドル期間が増大し得る。これは、テッセレーション作業再分配の既存のアプローチにおちえ、GPPの全体的な利用率の低下をもたらし性能損失を生じる。
【0199】
実施形態は、プロセッサにおける遅延を低減するテッセレーション再分配を提供することにより、上述の欠点を解決する。実施形態のテッセレーション再分配は、GPPのTEからTEDへの相互作用を、TEフロントエンド(TE front end (TEFE))からTEDへの相互作用と、TEバックエンド(TE back end (TEBE))からTEDへの相互作用とに分ける。幾つかの実施形態では、TEDと相互作用する全部のGPPの各TEFEは、TEDへ並列にパケットを送信でき、その間、TEDはそのようなパケットを順に処理する。本願明細書の実施形態は、TEとTEDとの間の分配バリアに基づく動機を更に導入して、テッセレーション作業のパイプライン処理を可能にする。
【0200】
実施形態は、合理化された方法で全部のGPPに渡りテッセレーション作業をスケジューリングし及び各GPP内でそのようなスケジューリングに関連する切り替えペナルティを回避することにより、GPUのようなプロセッサ内の遅延を低減し、テッセレーション作業再分配を実施するGPPに渡るプロセッサ性能を向上するという技術的利点を提供する。実施形態によりTEDとの間とTEDとの間の長いパスに関連する遅延が低減されるので、実施形態は、大規模なSoC又はマルチダイプロセッサ内の追加GPPを追加するとき、テッセレーション作業再分配のスケーラビリティを提供する。
【0201】
図14は、実施形態による、遅延を低減するテッセレーション再分配のための固定機能テッセレーションステージを有する集積回路グラフィックプロセッサ1400を示すブロック図である。十層では、グラフィックプロセッサ1400は、
図1~13に関して本願明細書で説明された例示的なGPGPU及び/又はGPUのようなGPGPU又はGPUを含んでよい。
【0202】
図14に示されるグラフィックプロセッサ1400は、パッチカリング及びパッチ送信を実行するテッセレーションフロントエンド(TEFE)論理回路1410A~1410N(集合的にTEFE1410と呼ばれる)と、パッチ受信及びパッチテッセレーションを実行するテッセレーションバックエンド(TEBE)論理回路1415A~1415N(集合的にTEBE1415と呼ばれる)と、に分割される1つ以上の固定機能テッセレーションステージを含んでよい。GPPのテッセレーションエンジン(tessellation engine (TE))は、TEFE1410とTEBE1415との組合せを含んでよい。例えば、グラフィックプロセッサ1400のGPPの第1TEはTEFE1 1410A及びTEBE1 1415Aを含んでよく、グラフィックプロセッサ1400の第2GPPの第2TEはTEFE2 1410B及びTEBE2 1415Bを含んでよく、以下同様に、N番目のTEはTEFEN 1410N及びTEBEN 1415Nを含む。テッセレーション再分配バス(tessellation redistribution bus (TRB))1420及びテッセレーション再分配中央エンジン(tessellation redistribution central engine (TED))1040の組合せは、ソースGPPのTEFE11401から1つ以上の宛先GPPのTEBE1415へのパッチ再分配を実行する。
【0203】
GPPは、素子のフロアプラン内の位置のような基準に基づき、シーケンシャルGPP識別子(ID)を割り当てられることができる。或いは、GPP IDは、例えば、装置リセットの後にプログラマブルな値とともにロードされてよい。各GPPは、そのGPPIDを認識してよい。一実装によると、これらのGPPIDは、GPPのシーケンシャル順序を確立し、この順序は、最高番号を付されたGPPから最低番号を付されたGPPまでを包含してGPP IDのサイクルを形成する。しかしながら、他の順序付け方式も実装できる。
【0204】
実装では、TEFE1410、TEBE1415、TRB1420、及びTED1440の1つ以上又は部分は、実行ユニット(execution unit (EU))のような処理リソースにより実装できる。EUのような処理リソースは、例えば、プログラマブルロジック機能の広範なアレイを提供し得るロジックコア又は複数のコアのようなプログラマブルロジック又は回路を含んでよい。実装では、TEFE1410、TEBE1415、TRB1420、及びTED1440の1つ以上又はその部分は、固定機能回路等のような専用ハードウェアにより実装される。固定機能回路は、専用ロジック又は回路を含んでよく、固定目的または機能の専用ロジックへマッピングし得る固定機能エントリポイントのセットを提供してよい。
【0205】
プロセッサ1400により提供されるテッセレーション再分配は、各パッチ及びGPPが可変量の作業を導入する可能性あるので、テッセレーションの前にTEのバランスを取り直すことにより、利得を提供すると期待される。作業の順序を維持するために、TEFE1410とTEBE1415との間でTED1440を通じて同期通信が利用される。前述のように、大規模GPUの場合には、TEFE1410からTED1440まで、及びTED1440からTEBE1415までの遅延が重要であり得る。これは、頻繁な切り替えが利用される場合、性能損失を生じ得る。また、TEFE1410が、ローカルで処理できるテッセレーション作業のバッチを有する場合、そのバッチ自体を処理しながら、TED1440へ(次のTEの情報を有する)制御パケットを送信する能力を有する。ここでも、この制御パケットがTED1440に可能な限り直ぐに到達する場合には、性能が向上できる。
【0206】
幾つかの実施形態では、プロセッサ1400により提供されるテッセレーション再分配は、TED1440と相互作用する全部のGPPの各TEFE1410が、TED1440へ並列にパケットを送信することを可能にする。パケットはTED1440において並列に受信され得るが、TED1440は、GPPの処理の順序を定めるシーケンスに従い、そのようなパケットを順に処理する。実施形態では、TEFE1410A~1410Nのうちの1つ以上は、分配のためにマークされたテッセレーション作業を有してよい。分配のためにマークされたテッセレーション作業を有するこれらのTEFE1410A~1410Nは、互いに並列にTED1440と通信できる。TED1440は、各TEFE1410A~1410Nからのトラフィックを順に処理する責任がある。従来のアプローチでは、TEFE1410は、TED1440が特定のTEFE1410からの通信を受信する準備ができているという信号が受信されるまで、待機する必要があった。これに対して、実施形態は、TEFE1410がTED1440へテッセレーション作業を送信することを可能にし、TED1440が遵守するTEFEシーケンス順序でTEFE1410の順番を待つ必要がない。
【0207】
幾つかの実装では、TED1440は、TEFE1410から受信された分配のためにマークされた受信したパッチ送信(例えば、テッセレーション作業)をキューに入れるために使用されるキューのような記憶構造を含んでよい。TEFE1410は、シーケンシャル順序で、キューに入れられたパッチ送信を処理してよい。このシーケンシャル順序は、並列相互接続ジオメトリ固定機能ユニットの決定されたシーケンスにより定義される。
【0208】
実施形態は、TE(TEFE1410及びTEBE1415を含む)とTED1440との間の分配バリアに基づく同期を更に提供して、テッセレーション作業のパイプライン処理を可能にする。選択回路1430A~1430N(例えば、マルチプレクサ(mux))は、TEBE1415A~1415Nによるテッセレーション作業の処理を管理する制御ロジックとして、各TEにより実装されてよい。TED1440から来るパッチトラフィックとTEFE1410から直接来るパッチトラフィックとの間の切り替えのための選択線1435A~1435Nは、TEFE1410からTED1440への通信、及びTED1440からTEBE1415への通信を利用する。
【0209】
幾つかの実施形態では、TED1440へ分配のためにマークされたテッセレーション作業を送信することに続き、TEFE1410がローカル処理のためにマークされた(例えば、TEBE1415に直接送信されるべき)追加テッセレーション作業を受信した場合、TEFE1410は、ローカル処理のためにマークされたこのテッセレーション作業を、TEBE1415がこの作業を処理する前に同期バリアパケットがTED1440から受信されるのを待機すべきであることを示すマーカと共に、中間記憶(例えば、先入れ先出し(first in first out (FIFO))キュー)へとプッシュできる。
【0210】
そのようなテッセレーション作業が中間記憶へ送信されるとき(例えば、その間、他のテッセレーション作業はTED1440への分配を保留される)、TEFE1410も、TED1440へ同期バリアパケットを送信する。同期バリアパケットは、TED1440により受信され処理されると、TED1440により全部のTEBE1415へブロードキャストされ得る。この同期バリアパケットは、それ自体のTEFE1410に対応するTEBE1415により受信され、その間、他のTEBE1415はそれをドロップする。一実装では、同期バリアパケットは、同期バリアパケットを生じたTEの識別子(ID)を含む。TEBE1415は、同期バリアパケット内のこのIDを利用して、同期バリアパケットを処理するか又は同期バリアパケットをドロップするかを決定できる。
【0211】
TEBE1415の動作に関して、TEBE1415は、TED1440からの通信を待機する。TEBE1415は、TEBE1415の実行できるTED1440からの作業を受信するか、又はTEBE1415は、TEFE1410から直接来るトラフィックを自身が処理できることを示す制御コマンドを受信する。更に、TEBE1415は、自身が同期バリアパケットを待機すべきであることを示すマーカを有するTEFE1410からの作業を受信すると、TEBE1415が同期バリアパケットを受信するまで、TED1440から作業又は制御パケットを読み出すことができる。TEBE1415は、TEBE1415がローカルトラフィックを処理すべきであると示すTED1440からの通信を受信すると、TEFE1410から中間記憶へと転送された作業の完全なバッチを処理し始める。
【0212】
幾つかの実装では、TEFE1410により処理されるバッチの中のテッセレーション作業の全部がローカルに処理されるべきであるとマークされている場合、TEFE1410は、制御サイクルをTED1440へ直ちに送信できる。また、TEFE1410は、ローカルとマークされた複数のそのようなバッチを連続して有してよく、TEFE1410は、バッチに対応する制御サイクルの数をTED1440へ直ちに送信できる。ステップ7では、TEFE1410は、作業を中間記憶(例えば、ローカルFIFOキュー)へと移動し始めることができる。
【0213】
図15は、実施形態による、遅延を低減するテッセレーション再分配のためのテッセレーションエンジンを有するテッセレーション再分配システム1500を示すブロック図である。一実装では、テッセレーション再分配システム1500は、
図1~13に関して本願明細書で説明された例示的なGPGPU及び/又はGPUのようなGPGPU又はGPUを含んでよい。一実装では、テッセレーション再分配システム1500は、TRB1550に通信可能に結合され(TEDと通信する)、TEFE1510及びTEBE515を有するテッセレーションエンジン1505を含む。TEFE1510及びTEBE1515は、それぞれ、
図14に関して説明したTEFE1410A~N及びTEBE1415A~Nと同じであってよい。TRB1550は、
図14に関して説明したTRB1420と同じであってよい。
【0214】
図示のように、TE1505は、TEFE1510、フロントエンドパッチ制御選択回路1520、中間記憶1530、バックエンドパッチ制御選択回路1540、TEBE1515、分配記憶1570、及び分配回路1560を含んでよい。TE1505は、本願明細書に記載されたものより多くの又は少ないコンポーネントを含んでよい。一実装では、フロントエンドパッチ制御選択回路1520、バックエンドパッチ制御選択回路1540、及び/又は、分配回路1560は、それぞれ、有限状態機械(finite state machine (FSM))を実装してよい。フロントエンドパッチ制御選択回路1520は、前述のように、TRB1550により、TEDへの順方向送信を管理してよい。
【0215】
本願明細書の実施形態では、フロントエンドパッチ制御選択回路1520は、TEFE1510から受信されると直ぐにパッチ送信をTRB1550を介してTEDへ転送してよく、そのようなパッチ送信を転送するようTEDから信号を受信するのを待たない。これらの転送されたパッチ送信は、決定された順序に従い後に処理するために、TEDによりキューに入れられる。
【0216】
幾つかの実装では、中間記憶1530は、フロントエンドパッチ制御選択回路1520により中間記憶1530にプッシュされた(例えば、ローカル処理のためにマークされた)ローカルテッセレーション作業を受信してよい。一実装では、中間記憶1530は、TE1505のローカルFIFOであってよい。
図14に関して議論したように、中間記憶にプッシュされるテッセレーション作業は、同期バリアビットによりマークされてよい。該ビットは、そのような作業が、TEFE1510(又は幾つかの実装ではフロントエンドパッチ制御選択回路1520)によりTEDへ送信された同期バリアパケットに関連することを示す。
【0217】
バックエンドパッチ制御選択回路1540は、制御信号(例えば、
図14に関して説明したmux1430A~Nのようなmuxの制御選択線)を、TEFE1410/フロントエンドパッチ制御選択回路1520から受信したメッセージ及び(例えば、後述する分配回路1560を介して)TEDから受信したメッセージに基づき管理する。バックエンドパッチ制御選択回路1540は受信したメッセージに基づき制御信号をトグル(toggle)させて、TEBE1515に、中間記憶1530から又は分配記憶1570を介してTEDから受信したテッセレーション作業を処理させてよい。
【0218】
幾つかの実装では、分配記憶1570は、TEDにより送信されたテッセレーション作業を受信し格納するFIFOキューであってよい。分配回路1560は、(TRB1550を介して)TEDにより送信された、同期バリアパケットのような制御メッセージを受信し処理するよう動作してよい。例えば、分配回路1560はTE1505に対応するIDを有するTEDによりブロードキャストされた同期バリアパケットを受け付け渡し、その間に、TE1505のIDを含まない同期バリアパケットをドロップする、FSMを実装してよい。分配回路1560は、TEにより分配されたテッセレーション作業を、TEBE1515による後の処理のために、分配記憶1570にプッシュさせてよい。上述のように、TEBE1515は、TEBE1515にテッセレーション作業を処理することを開始させる、バックエンドパッチ制御選択回路からの制御信号に応答して、分配記憶1570から作業を取得し処理する。
【0219】
図16は、プロセッサ内の遅延を低減するテッセレーション再分配のための方法の実施形態を示すフロー図である。方法1600は、ハードウェアを含み得る処理ロジック(例えば、回路、専用ロジック、プログラマブルロジック、等)、ソフトウェア(例えば、処理装置上で実行する命令)、又はそれらの組み合わせにより実行されてよい。方法1600の処理は、表現の簡単及び明確性のために線形シーケンスで示される。しかしながら、それらのうちの任意の数が並列に、非同期に、又は異なる順序で実行できると考えられる。更に、簡単、明確性、及び理解を容易にするために、
図1~17を参照して議論されるコンポーネント及び処理の多くは、以下に繰り返され又は議論されない。一実装では、
図14のプロセッサ1400のようなプロセッサ、又は
図15のテッセレーションエンジン(TE)1505を含むプロセッサは、方法1600を実行してよい。
【0220】
方法1600は、処理ブロック1610で開始し、処理装置は、別個のフロントエンド及びバックエンドを有する並列相互接続ジオメトリ固定機能ユニットを提供してよい。一実装では、フロントエンドはパッチカリング及び送信を実行し、バックエンドはフロントエンドからのパッチ受信及びパッチテッセレーションを実行する。処理ブロック1620で、処理装置はテッセレーション再分配中央エンジンを提供し、フロントエンドとバックエンドとの間に設けられた再分配バスを用いて、バックエンドの間でパッチを再分配する。
【0221】
続いて、処理ブロック1630で、処理装置は、テッセレーション再分配中央エンジンにより、分配のためにマークされたパッチ送信をフロントエンドから並列に受信してよい。一実装では、テッセレーション再分配エンジンは、パッチ送信を順に処理する。最後に、処理ブロック1640で、処理装置は、フロントエンドのうちの1つから同期バリアパケットを受信することに応答して、テッセレーション再分配中央エンジンによりブロードキャストしてよい。一実装では、バックエンドへの同期バリアパケットは、バックエンドのうちの1つに、テッセレーション作業をローカルに処理させる。
【0222】
図17は、プロセッサ内の遅延を低減するテッセレーション再分配を実行するTEFEの方法1700の実施形態を示すフロー図である。方法1700は、ハードウェアを含み得る処理ロジック(例えば、回路、専用ロジック、プログラマブルロジック、等)、ソフトウェア(例えば、処理装置上で実行する命令)、又はそれらの組み合わせにより実行されてよい。方法1700の処理は、表現の簡単及び明確性のために線形シーケンスで示される。しかしながら、それらのうちの任意の数が並列に、非同期に、又は異なる順序で実行できると考えられる。更に、簡単、明確性、及び理解を容易にするために、
図1~17を参照して議論されるコンポーネント及び処理の多くは、以下に繰り返され又は議論されない。一実装では、
図14のTEFE1410又は
図15のTEFE1510のような、プロセッサのTEFEが、方法1700を実行してよい。
【0223】
方法1700は、処理ブロック1710で開始し、処理装置が、TEFE1410からにおいて、テッセレーションエンジンによる処理のためのパッチを受信してよい。処理ブロック1720で、TEFEは、パッチがカリングされるべきであると決定することに応答して、パッチを破棄してよい。
【0224】
次に、決定ブロック1730で、TEFEは、パッチがローカルに処理されるかどうかを決定してよい。そうである場合、方法1700は、処理ブロック1740へ進み、TEFEは、テッセレーションエンジンの中間記憶へパッチを送信し、中間記憶内のパッチに対応するエントリ内の同期バリアビットをマークしてよい。続いて、処理ブロック1750で、TEFEは、テッセレーションエンジンのIDを有する同期バリアパケットを、テッセレーション再分配中央エンジンへ送信してよい。
【0225】
他方で、決定ブロック1730で、TEFE1410からが、パッチはローカルに処理されないと決定した場合(例えば、TEDへの分配のためにマークされている)、方法1700は、処理ブロック1760へ進んでよい。処理ブロック1760で、TEFEは、再分配バスを介して、テッセレーション再分配中央エンジンへパッチを送信してよい。
【0226】
図18は、プロセッサ内の遅延を低減するテッセレーション再分配を実行するTEBEの方法1800の実施形態を示すフロー図である。方法1800は、ハードウェアを含み得る処理ロジック(例えば、回路、専用ロジック、プログラマブルロジック、等)、ソフトウェア(例えば、処理装置上で実行する命令)、又はそれらの組み合わせにより実行されてよい。方法1800の処理は、表現の簡単及び明確性のために線形シーケンスで示される。しかしながら、それらのうちの任意の数が並列に、非同期に、又は異なる順序で実行できると考えられる。更に、簡単、明確性、及び理解を容易にするために、
図1~17を参照して議論されるコンポーネント及び処理の多くは、以下に繰り返され又は議論されない。一実装では、
図14のTEBE1415又は
図15のTEBE1515のような、プロセッサのTEBEが、方法1800を実行してよい。
【0227】
方法1800は、処理ブロック1810で開始し、処理装置は、TEBEで、パッチに関連する同期バリアパケットを示すマーカを有するテッセレーションエンジンでローカルに処理するためにマークされたパッチを受信してよい。一実装では、パッチは、テッセレーションエンジンの中間記憶に維持される。処理ブロック1820で、TEBEは、テッセレーション再分配中央エンジンからの同期バリアパケット又は制御パケットによりマークされていない作業をフロントエンドから読み出し、その間、受信したパッチは中間記憶に保持される。
【0228】
続いて、処理ブロック1830で、TEBEは、テッセレーション再分配中央エンジンから、テッセレーションエンジンのIDによりマークされた同期バリアパケットを受信してよい。最後に、処理ブロック1840で、TEBEは、同期バリアパケットを受信することに応答して、中間記憶からのパッチを処理してよい。
【0229】
以下の例は、更なる実施形態に関連する。例1は、プロセッサ内の遅延を低減するテッセレーション再分配を行う機器である。
(例1)機器であって、
プロセッサを含み、前記プロセッサは、
別個のフロントエンド及びバックエンドを有する並列相互接続ジオメトリ固定機能ユニットを設け、前記フロントエンドはパッチカリング及び送信を実行し、前記バックエンドは前記フロントエンドからのパッチ受信及びパッチテッセレーションを実行し、
前記フロントエンドと前記バックエンドとの間に設けられた再分配バスを用いて前記バックエンドの間でパッチを再分配するテッセレーション再分配中央エンジンを設け、
前記テッセレーション再分配中央エンジンにより前記フロントエンドから並列に、分配のためにマークされたパッチ送信を受信し、前記テッセレーション再分配エンジンは前記パッチ送信を順に処理し、
前記フロントエンドのうちの1つから同期バリアパケットを受信することに応答して、前記テッセレーション再分配中央エンジンにより、前記同期バリアパケットを前記バックエンドへブロードキャストして、前記バックエンドのうちの1つにテッセレーション作業をローカルに処理させる、機器。
【0230】
(例2)任意で、前記同期バリアパケットは、前記同期バリアパケットに対応する前記バックエンドのうちの前記1つに、前記バックエンドのうちの前記1つに対応する中間記憶から前記テッセレーション作業を読み出させ、前記バックエンドのうちの前記1つは、前記中間記憶から読み出した前記テッセレーション作業に対して前記パッチテッセレーションを実行する、例1に記載の機器。
【0231】
(例3)任意で、前記同期バリアパケットは、前記同期バリアパケットを生じた前記並列相互接続ジオメトリ固定機能ユニットの識別子(ID)を含み、前記バックエンドは、前記IDを利用して、前記同期バリアパケットを処理するか又は前記同期バリアパケットをドロップするかを決定する、例1又は2に記載の機器。
【0232】
(例4)任意で、前記中間記憶は、先入れ先出し(FIFO)キューであり、前記FIFOキューの各エントリは、前記同期バリアパケットに関連付けられるエントリに格納されたテッセレーション作業に応答して設定される同期バリアビットを含む、例1~3のいずれかに記載の機器。
【0233】
(例5)任意で、前記フロントエンドは、ローカル処理のためにマークされたテッセレーション作業を前記中間記憶へプッシュする、例1~4のいずれかに記載の機器。
【0234】
(例6)任意で、前記並列相互接続ジオメトリ固定機能ユニットの各々は、対応する中間記憶を含む、例1~5のいずれかに記載の機器。
【0235】
(例7)任意で、前記並列相互接続ジオメトリ固定機能ユニットの各々は、前記対応するバックエンドの各々に前記中間記憶又は前記再分配バスのいずれからのテッセレーション作業を処理するかを示す制御信号を切り換える選択回路を含む、例1~6のいずれかに記載の機器。
【0236】
(例8)任意で、前記テッセレーション再分配中央エンジンは、前記フロントエンドから受信した分配のためにマークされた前記パッチ送信をキュー入れ、キューに入れられた前記パッチ送信を順番に処理し、前記順番は前記並列相互接続ジオメトリ固定機能ユニットの決定されたシーケンスにより定められる、例1~7のいずれかに記載の機器。
【0237】
(例9)任意で、前記プロセッサはグラフィック処理ユニット(GPU)を含む、例1~8のいずれかに記載の機器。
【0238】
(例10)任意で、前記機器は、単一命令複数データ(SIMD)マシン又は単一命令複数スレッド(SIMT)マシンのうちの少なくとも1つである、例1~9のいずれかに記載の機器。
【0239】
(例11)プロセッサ内の遅延を低減するテッセレーション再分配を行う方法であって、
プロセッサにより、別個のフロントエンド及びバックエンドを有する並列相互接続ジオメトリ固定機能ユニットを設けるステップであって、前記フロントエンドはパッチカリング及び送信を実行し、前記バックエンドは前記フロントエンドからのパッチ受信及びパッチテッセレーションを実行する、ステップと、
前記フロントエンドと前記バックエンドとの間に設けられた再分配バスを用いて、前記並列相互接続ジオメトリ固定機能ユニットの前記バックエンドの間でパッチを再分配するテッセレーション再分配中央エンジンを設けるステップと、
前記テッセレーション再分配中央エンジンにより前記フロントエンドから並列に、分配のためにマークされたパッチ送信を受信するステップであって、前記テッセレーション再分配エンジンは前記パッチ送信を順に処理する、ステップと、
前記フロントエンドのうちの1つから同期バリアパケットを受信することに応答して、前記テッセレーション再分配中央エンジンにより、前記同期バリアパケットを前記バックエンドへブロードキャストするステップであって、前記バックエンドのうちの1つにテッセレーション作業をローカルに処理させる、ステップと、
を含む方法。
【0240】
(例12)任意で、前記同期バリアパケットは、前記同期バリアパケットに対応する前記バックエンドのうちの前記1つに、前記バックエンドのうちの前記1つに対応する中間記憶から前記テッセレーション作業を読み出させ、前記バックエンドのうちの前記1つは、前記中間記憶から読み出した前記テッセレーション作業に対して前記パッチテッセレーションを実行する、例11に記載の方法。
【0241】
(例13)任意で、前記同期バリアパケットは、前記同期バリアパケットを生じた前記並列相互接続ジオメトリ固定機能ユニットの識別子(ID)を含み、前記バックエンドは、前記IDを利用して、前記同期バリアパケットを処理するか又は前記同期バリアパケットをドロップするかを決定する、例11又は12に記載の機器。
【0242】
(例14)任意で、前記中間記憶は、先入れ先出し(FIFO)キューであり、前記FIFOキューの各エントリは、前記同期バリアパケットに関連付けられるエントリに格納されたテッセレーション作業に応答して設定される同期バリアビットを含む、例11~13のいずれかに記載の機器。
【0243】
(例15)任意で、前記並列相互接続ジオメトリ固定機能ユニットの各々は、対応する中間記憶を含み、前記並列相互接続ジオメトリ固定機能ユニットの各々は、前記対応するバックエンドの各々に前記中間記憶又は前記再分配バスのいずれからのテッセレーション作業を処理するかを示す制御信号を切り換える選択回路を含む、例11~14のいずれかに記載の方法。
【0244】
(例16)任意で、前記テッセレーション再分配中央エンジンにより、前記フロントエンドから受信した分配のためにマークされた前記パッチ送信をキューに入れるステップと、
前記テッセレーション再分配中央エンジンにより、キューに入れられた前記パッチ送信を順番に処理するステップであって、前記順番は前記並列相互接続ジオメトリ固定機能ユニットの決定されたシーケンスにより定められる、ステップと、
を更に含む例11~15に記載の方法。
【0245】
例17は、プロセッサ内の遅延を低減するテッセレーション再分配を行うための非一時的コンピュータ可読媒体である。
(例17)命令を有することのできる非一時的コンピュータ可読媒体であって、前記命令は、1つ以上のプロセッサにより実行されると、該プロセッサに、
別個のフロントエンド及びバックエンドを有する並列相互接続ジオメトリ固定機能ユニットを設けさせ、前記フロントエンドはパッチカリング及び送信を実行し、前記バックエンドは前記フロントエンドからのパッチ受信及びパッチテッセレーションを実行し、
前記フロントエンドと前記バックエンドとの間に設けられた再分配バスを用いて、前記並列相互接続ジオメトリ固定機能ユニットの前記バックエンドの間でパッチを再分配するテッセレーション再分配中央エンジンを設けさせ、
前記テッセレーション再分配中央エンジンにより前記フロントエンドから並列に、分配のためにマークされたパッチ送信を受信させ、前記テッセレーション再分配エンジンは前記パッチ送信を順に処理し、
前記フロントエンドのうちの1つから同期バリアパケットを受信することに応答して、前記テッセレーション再分配中央エンジンにより、前記同期バリアパケットを前記バックエンドへブロードキャストさせ、前記バックエンドのうちの1つにテッセレーション作業をローカルに処理させる、非一時的コンピュータ可読媒体。
【0246】
(例18)任意で、前記同期バリアパケットは、前記同期バリアパケットに対応する前記バックエンドのうちの前記1つに、前記バックエンドのうちの前記1つに対応する中間記憶から前記テッセレーション作業を読み出させ、前記バックエンドのうちの前記1つは、前記中間記憶から読み出した前記テッセレーション作業に対して前記パッチテッセレーションを実行する、例17に記載の非一時的コンピュータ可読媒体。
【0247】
(例19)任意で、前記同期バリアパケットは、前記同期バリアパケットを生じた前記並列相互接続ジオメトリ固定機能ユニットの識別子(ID)を含み、前記バックエンドは、前記IDを利用して、前記同期バリアパケットを処理するか又は前記同期バリアパケットをドロップするかを決定する、例17又は18に記載の非一時的コンピュータ可読媒体。
【0248】
(例20)任意で、前記中間記憶は、先入れ先出し(FIFO)キューであり、前記FIFOキューの各エントリは、前記同期バリアパケットに関連付けられるエントリに格納されたテッセレーション作業に応答して設定される同期バリアビットを含む、例17~19のいずれかに記載の非一時的コンピュータ可読媒体。
【0249】
例21は、プロセッサ内の遅延を低減するテッセレーション再分配を行うシステムである。
(例21)システムであって、
メモリと、複数のGPUの1つ以上のプロセッサと、を含み、
前記1つ以上のプロセッサは、
前記メモリに通信可能に結合され、
別個のフロントエンド及びバックエンドを有する並列相互接続ジオメトリ固定機能ユニットを設け、前記フロントエンドはパッチカリング及び送信を実行し、前記バックエンドは前記フロントエンドからのパッチ受信及びパッチテッセレーションを実行し、
前記フロントエンドと前記バックエンドとの間に設けられた再分配バスを用いて前記バックエンドの間でパッチを再分配するテッセレーション再分配中央エンジンを設け、
前記テッセレーション再分配中央エンジンにより前記フロントエンドから並列に、分配のためにマークされたパッチ送信を受信し、前記テッセレーション再分配エンジンは前記パッチ送信を順に処理し、
前記フロントエンドのうちの1つから同期バリアパケットを受信することに応答して、前記テッセレーション再分配中央エンジンにより、前記同期バリアパケットを前記バックエンドへブロードキャストして、前記バックエンドのうちの1つにテッセレーション作業をローカルに処理させる、
システム。
【0250】
(例22)任意で、前記同期バリアパケットは、前記同期バリアパケットに対応する前記バックエンドのうちの前記1つに、前記バックエンドのうちの前記1つに対応する中間記憶から前記テッセレーション作業を読み出させ、前記バックエンドのうちの前記1つは、前記中間記憶から読み出した前記テッセレーション作業に対して前記パッチテッセレーションを実行する、例21に記載のシステム。
【0251】
(例23)任意で、前記同期バリアパケットは、前記同期バリアパケットを生じた前記並列相互接続ジオメトリ固定機能ユニットの識別子(ID)を含み、前記バックエンドは、前記IDを利用して、前記同期バリアパケットを処理するか又は前記同期バリアパケットをドロップするかを決定する、例21又は22に記載のシステム。
【0252】
(例24)任意で、前記中間記憶は、先入れ先出し(FIFO)キューであり、前記FIFOキューの各エントリは、前記同期バリアパケットに関連付けられるエントリに格納されたテッセレーション作業に応答して設定される同期バリアビットを含む、例21~23のいずれかに記載のシステム。
【0253】
(例25)任意で、前記フロントエンドは、ローカル処理のためにマークされたテッセレーション作業を前記中間記憶へプッシュする、例21~24のいずれかに記載のシステム。
【0254】
(例26)任意で、前記並列相互接続ジオメトリ固定機能ユニットの各々は、対応する中間記憶を含む、例21~25のいずれかに記載のシステム。
【0255】
(例27)任意で、前記並列相互接続ジオメトリ固定機能ユニットの各々は、前記対応するバックエンドの各々に前記中間記憶又は前記再分配バスのいずれからのテッセレーション作業を処理するかを示す制御信号を切り換える選択回路を含む、例21~26のいずれかに記載のシステム。
【0256】
(例28)任意で、前記テッセレーション再分配中央エンジンは、前記フロントエンドから受信した分配のためにマークされた前記パッチ送信をキュー入れ、キューに入れられた前記パッチ送信を順番に処理し、前記順番は前記並列相互接続ジオメトリ固定機能ユニットの決定されたシーケンスにより定められる、例21~27のいずれかに記載のシステム。
【0257】
(例29)任意で、前記プロセッサはグラフィック処理ユニット(GPU)を含む、例21~28のいずれかに記載のシステム。
【0258】
(例30)任意で、前記機器は、単一命令複数データ(SIMD)マシン又は単一命令複数スレッド(SIMT)マシンのうちの少なくとも1つである、例21~29のいずれかに記載のシステム。
【0259】
(例31)プロセッサ内の遅延を低減するテッセレーション再分配を行う機器であって、
別個のフロントエンド及びバックエンドを有する並列相互接続ジオメトリ固定機能ユニットを設ける手段であって、前記フロントエンドはパッチカリング及び送信を実行し、前記バックエンドは前記フロントエンドからのパッチ受信及びパッチテッセレーションを実行する、手段と、
前記フロントエンドと前記バックエンドとの間に設けられた再分配バスを用いて、前記並列相互接続ジオメトリ固定機能ユニットの前記バックエンドの間でパッチを再分配するテッセレーション再分配中央エンジンを設ける手段と、
前記テッセレーション再分配中央エンジンにより前記フロントエンドから並列に、分配のためにマークされたパッチ送信を受信する手段であって、前記テッセレーション再分配エンジンは前記パッチ送信を順に処理する、手段と、
前記フロントエンドのうちの1つから同期バリアパケットを受信することに応答して、前記テッセレーション再分配中央エンジンにより、前記同期バリアパケットを前記バックエンドへブロードキャストする手段であって、前記バックエンドのうちの1つにテッセレーション作業をローカルに処理させる、手段と、
を含む機器。
【0260】
(例32)任意で、前記機器は例12~16のいずれかに記載の方法を実行するよう更に構成される、例31に記載の機器。
【0261】
(例33)複数の命令を含む少なくとも1つの機械可読媒体であって、前記命令は、コンピューティング装置上で実行されることに応答して、該コンピューティング装置に例11~16のいずれか一項に記載の方法を実行させる、機械可読媒体。
【0262】
(例34)プロセッサ内の遅延を低減するテッセレーション再分配を行う機器であって、例11~16のいずれか一項に記載の方法を実行するよう構成される機器。
【0263】
(例35)プロセッサ内の遅延を低減するテッセレーション再分配を行う機器であって、例11~16のいずれか一項に記載の方法を実行する手段を含む機器。例における具体的事項は、1つ以上の実施形態のどこで使用されてもよい。
【0264】
前述の説明及び図面は、限定的意味ではなく説明的意味で考えられるべきである。当業者は、種々の変形及び変更が、添付の特許請求の範囲に記載された広範な精神及び特徴の範囲から逸脱することなく、本願明細書に記載された実施形態に対して行われ得ることを理解する。
【符号の説明】
【0265】
100 処理システム
102 プロセッサ
104 キャッシュ
106 レジスタファイル
107 プロセッサコア
108 グラフィックプロセッサ
109 命令セット
110 インタフェースバス
111 ディスプレイ装置
112 アクセラレータ
116 メモリ制御部
118 外部グラフィックプロセッサ
119 外部アクセラレータ
120 メモリ装置
121 命令
122 データ
124 データ記憶装置
125 タッチセンサ
126 無線トランシーバ
128 ファームウェアインタフェース
130 プラットフォーム制御ハブ
134 ネットワーク制御部
140 レガシーI/O制御部
142 USB制御部
143 キーボード/マウス
144 カメラ
146 オーディオ制御部
【外国語明細書】