(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2025-01-16
(54)【発明の名称】グラフィックス破棄エンジン
(51)【国際特許分類】
G06F 9/38 20180101AFI20250108BHJP
【FI】
G06F9/38 380Z
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2024536025
(86)(22)【出願日】2022-11-23
(85)【翻訳文提出日】2024-07-18
(86)【国際出願番号】 US2022080402
(87)【国際公開番号】W WO2023129776
(87)【国際公開日】2023-07-06
(32)【優先日】2021-12-27
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(71)【出願人】
【識別番号】508301087
【氏名又は名称】エーティーアイ・テクノロジーズ・ユーエルシー
【氏名又は名称原語表記】ATI TECHNOLOGIES ULC
【住所又は居所原語表記】One Commerce Valley Drive East, Markham, Ontario, L3T 7X6 Canada
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】クリストファー ジェイ. ブレナン
(72)【発明者】
【氏名】ランディー ウェイン ラムジー
(72)【発明者】
【氏名】ニシャンク パータク
(72)【発明者】
【氏名】リッキー ワイ ヨング ウ
(72)【発明者】
【氏名】ジムシェド ミルザ
(72)【発明者】
【氏名】アンソニー チャン
【テーマコード(参考)】
5B013
【Fターム(参考)】
5B013EE10
(57)【要約】
グラフィックスパイプラインにおいて破棄エンジンを実装するためのシステム、装置及び方法が開示される。システムは、プリミティブのセットの各プリミティブの頂点についての属性データを生成するシェーダを起動するジオメトリエンジンを有するグラフィックスパイプラインを含む。属性データは、ピクセルシェーダによって消費され、各ピクセルシェーダは、ピクセルシェーダがもはや属性データを必要としない場合に、割り当て解除メッセージを生成する。破棄エンジンは、複数のピクセルシェーダから割り当て解除を収集し、属性データがもはや必要とされない場合を判定する。属性のブロックが全ての潜在的なピクセルシェーダコンシューマによって消費されると、破棄エンジンは、属性の所定のブロックを割り当て解除する。破棄エンジンは、属性データを無効化し、メモリに書き戻すことができないように、破棄コマンドをキャッシュに送信する。
【選択図】
図5
【特許請求の範囲】
【請求項1】
装置であって、
プリミティブのセットの各プリミティブの頂点の属性データを記憶するように構成されたキャッシュと、
前記属性データを消費するためにピクセルシェーダを実行するように構成された複数の計算ユニットと、
破棄エンジンと、を備え、
前記破棄エンジンは、
前記ピクセルシェーダによって生成された属性割り当て解除メッセージを追跡することと、
属性データの所定のブロックが対応するピクセルシェーダによって消費された場合を判定したことに応じて、破棄コマンドを前記キャッシュに伝達することと、
を行うように構成されている、
装置。
【請求項2】
前記キャッシュは、前記破棄コマンドの受信に応じて、前記キャッシュ内の前記属性データの所定のブロックを無効化するように構成されている、
請求項1の装置。
【請求項3】
前記キャッシュは、前記破棄コマンドの受信に応じて、前記属性データの所定のブロックが別のレベルのキャッシュ又はメモリに書き込まれるのを防止するように構成されている、
請求項2の装置。
【請求項4】
前記破棄エンジンは、属性データの異なる範囲についてのエントリを有する破棄テーブルを維持するように構成されている、
請求項1の装置。
【請求項5】
前記破棄エンジンは、
属性データの所定の範囲を消費している最も古いピクセルシェーダを追跡することと、
前記最も古いピクセルシェーダの識別子(ID)を、前記属性データの所定の範囲に対応する所定のエントリに記憶することと、
を行うように構成されている、
請求項4の装置。
【請求項6】
前記破棄エンジンは、
ビン完了信号を受信することと、
前記ビン完了信号からピクセルシェーダIDを取得することであって、前記ピクセルシェーダIDは、前記ビンを処理した最も若いピクセルシェーダを識別する、ことと、
前記ビン完了信号から取得された前記ピクセルシェーダIDよりも高いIDを有するピクセルシェーダに対応するエントリについて前記破棄テーブルを検索することと、
前記ビン完了信号から取得された前記ピクセルシェーダIDよりも高いIDを有するエントリに対応する属性データの範囲に対する破棄コマンドを生成及び伝達することと、
を行うように構成されている、
請求項5の装置。
【請求項7】
前記破棄エンジンは、
ビン完了信号を受信することと、
前記ビン完了信号からビンIDを取得することであって、前記ビンIDは、処理されたばかりの所定のビンを識別する、ことと、
前記ビン完了信号から取得された前記ビンIDに対応するエントリについて前記破棄テーブルを検索することと、
前記ビン完了信号から取得された前記ビンIDと同じビンIDを有するエントリに対応する属性データの範囲に対する破棄コマンドを生成及び伝達することと、
を行うように構成されている、
請求項5の装置。
【請求項8】
方法であって、
破棄エンジンが、複数のピクセルシェーダによって生成された属性割り当て解除メッセージを追跡することと、
属性データの所定のブロックが対応するピクセルシェーダによって消費された場合を判定したことに応じて、破棄コマンドを1つ以上のキャッシュに伝達することと、を含む、
方法。
【請求項9】
前記破棄コマンドの受信に応じて、所定のキャッシュ内の前記属性データの所定のブロックを無効化することを含む、
請求項8の方法。
【請求項10】
前記破棄コマンドの受信に応じて、前記属性データの所定のブロックが別のレベルのキャッシュ又はメモリに書き込まれるのを防止することを含む、
請求項9の方法。
【請求項11】
属性データの異なる範囲についてのエントリを有する破棄テーブルを維持することを含む、
請求項8の方法。
【請求項12】
属性データの所定の範囲を消費している最も古いピクセルシェーダを追跡することと、
前記最も古いピクセルシェーダの識別子(ID)を、前記属性データの所定の範囲に対応する所定のエントリに記憶することと、を含む、
請求項11の方法。
【請求項13】
ビン完了信号を受信することと、
前記ビン完了信号からピクセルシェーダIDを取得することであって、前記ピクセルシェーダIDは、前記ビンを処理した最も若いピクセルシェーダを識別する、ことと、
前記ビン完了信号から取得された前記ピクセルシェーダIDよりも高いIDを有するピクセルシェーダに対応するエントリについて前記破棄テーブルを検索することと、
前記ビン完了信号から取得された前記ピクセルシェーダIDよりも高いIDを有するエントリに対応する属性データの範囲に対する破棄コマンドを生成及び伝達することと、を含む、
請求項12の方法。
【請求項14】
ビン完了信号を受信することと、
前記ビン完了信号からビンIDを取得することであって、前記ビンIDは、処理されたばかりの所定のビンを識別する、ことと、
前記ビン完了信号から取得された前記ビンIDに対応するエントリについて前記破棄テーブルを検索することと、
前記ビン完了信号から取得された前記ビンIDと同じビンIDを有するエントリに対応する属性データの範囲に対する破棄コマンドを生成及び伝達することと、を含む、
請求項12の方法。
【請求項15】
システムであって、
キャッシュと、
破棄エンジンと、を備え、
前記破棄エンジンは、
複数のピクセルシェーダによって生成された属性割り当て解除メッセージを追跡することと、
属性データの所定のブロックが対応するピクセルシェーダによって消費された場合を判定したことに応じて、破棄コマンドを前記キャッシュに伝達することと、
を行うように構成されている、
システム。
【請求項16】
前記キャッシュは、前記破棄コマンドの受信に応じて、前記キャッシュ内の前記属性データの所定のブロックを無効化するように構成されている、
請求項15のシステム。
【請求項17】
前記キャッシュは、前記破棄コマンドの受信に応じて、前記属性データの所定のブロックが別のレベルのキャッシュ又はメモリに書き込まれるのを防止するように構成されている、
請求項16のシステム。
【請求項18】
前記破棄エンジンは、属性データの異なる範囲についてのエントリを有する破棄テーブルを維持するように構成されている、
請求項15のシステム。
【請求項19】
前記破棄エンジンは、
属性データの所定の範囲を消費している最も古いピクセルシェーダを追跡することと、
前記最も古いピクセルシェーダの識別子(ID)を、前記属性データの所定の範囲に対応する所定のエントリに記憶することと、
を行うように構成されている、
請求項15のシステム。
【請求項20】
前記破棄エンジンは、
ビン完了信号を受信することと、
前記ビン完了信号からピクセルシェーダIDを取得することであって、前記ピクセルシェーダIDは、前記ビンを処理した最も若いピクセルシェーダを識別する、ことと、
前記ビン完了信号から取得された前記ピクセルシェーダIDよりも高いIDを有するピクセルシェーダに対応するエントリについて前記破棄テーブルを検索することと、
前記ビン完了信号から取得された前記ピクセルシェーダIDよりも高いIDを有するエントリに対応する属性データの範囲に対する破棄コマンドを生成及び伝達することと、
を行うように構成されている、
請求項19のシステム。
【発明の詳細な説明】
【背景技術】
【0001】
(関連技術の説明)
三次元(three-dimensional、3-D)グラフィックスは、多くの場合に、プログラマブルシェーダ及び固定機能ハードウェアブロックのシーケンスで形成されたグラフィックスパイプラインを使用して処理される。例えば、フレーム内で視認可能なオブジェクトの3-Dモデルは、ユーザに表示されるためのピクセルの値を生成するようにグラフィックスパイプラインで処理された三角形、他の多角形又はパッチのセットによって表すことができる。三角形、他の多角形及びパッチは、まとめてプリミティブと称される。
【0002】
典型的なグラフィックスパイプラインでは、スレッドと称され得るワークアイテムのシーケンスが最終結果を出力するように処理される。各処理要素は、着信データを処理するために、特定のワークアイテムのそれぞれのインスタンス化を実行する。ワークアイテムは、計算ユニット上で呼び出されるカーネルの並列実行の集合のうち何れかである。ワークアイテムは、グローバルID及びローカルIDによって集合内で他の実行から区別される。本明細書で使用される場合、「計算ユニット」という用語は、複数のワークアイテムの同期実行を実施する処理要素(例えば、単一命令複数データ(single-instruction, multiple-data、SIMD)ユニット)の集合として定義される。計算ユニット当たりの処理要素の数は、実施形態ごとに異なり得る。計算ユニット上で一緒に同時に実行されるワークグループ内のワークアイテムのサブセットは、ウェーブフロント(wavefront)、ワープ(warp)又はベクトルと称され得る。ウェーブフロントの幅(width)は、計算ユニットのハードウェアの特性である。
【0003】
グラフィックス処理パイプラインは、頂点位置及び属性の変換、ピクセル色の計算等のような個々のタスクを実施するいくつかのステージを含む。これらのタスクの多くは、パイプラインを横断するウェーブフロントの個々のワークアイテムに対する処理要素の集合によって並列に実施される。グラフィックス処理パイプラインは、絶えず更新及び改善されている。
【0004】
本明細書に説明される方法及び機構の利点は、添付の図面と併せて以下の説明を参照することによってより良好に理解され得る。
【図面の簡単な説明】
【0005】
【
図1】コンピューティングシステムの一実施形態のブロック図である。
【
図3】計算ユニットの一実施形態のブロック図である。
【
図4】破棄エンジン(discard engine)の一実施形態のブロック図である。
【
図5】破棄エンジンを動作させるための方法の一実施形態を示す一般化されたフロー図である。
【
図6】破棄テーブルを管理するための方法の一実施形態を示す一般化されたフロー図である。
【
図7】破棄コマンドを生成するための方法の一実施形態を示す一般化されたフロー図である。
【
図8】破棄コマンドを生成するための方法の別の実施形態を示す一般化されたフロー図である。
【
図9】順序付けられた破棄コマンド生成スキームを実施するための方法の一実施形態を示す一般化されたフロー図である。
【発明を実施するための形態】
【0006】
以下の説明では、本明細書に提示される方法及び機構の十分な理解を提供するために、多数の具体的な詳細が記載されている。しかしながら、当業者は、様々な実施形態が、これらの具体的な詳細なしに実施され得ることを認識すべきである。いくつかの場合では、本明細書において説明されるアプローチを不明瞭にすることを避けるために、周知の構造、構成要素、信号、コンピュータプログラム命令及び技術が詳細に示されていない。説明を簡単且つ明確にするために、図に示される要素は、必ずしも縮尺どおりに描かれているわけではないことが理解されよう。例えば、いくつかの要素の寸法は、他の要素に対して誇張されている場合がある。
【0007】
グラフィックスパイプラインにおいて破棄エンジンを実装するための様々なシステム、装置及び方法が本明細書で開示される。一実施形態では、システムは、プリミティブのセットの各プリミティブの頂点についての属性データを生成するシェーダを起動するジオメトリエンジンを有するグラフィックスパイプラインを含む。属性データは、ピクセルシェーダによって消費され、各ピクセルシェーダは、ピクセルシェーダがもはや属性データを必要としない場合に、属性割り当て解除メッセージを生成する。破棄エンジンは、複数のピクセルシェーダから割り当て解除を収集し、属性データがもはや必要とされない場合を判定する。属性のブロックが全ての潜在的なピクセルシェーダコンシューマによって消費されると、破棄エンジンは、属性の所定のブロックを割り当て解除する。破棄エンジンは、属性データを無効化し、メモリに書き戻すことができないように、破棄コマンドをキャッシュに送信する。
【0008】
図1を参照すると、コンピューティングシステム100の一実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム100は、少なくとも、プロセッサ105A~105N、入力/出力(input/output、I/O)インターフェイス120、バス125、メモリコントローラ130、ネットワークインターフェイス135、メモリデバイス140、ディスプレイコントローラ150、及び、ディスプレイ155を含む。他の実施形態では、コンピューティングシステム100は、他の構成要素を含み、及び/又は、コンピューティングシステム100は、別様に配置される。プロセッサ105A~105Nは、システム100に含まれる任意の数のプロセッサを表す。
【0009】
一実施形態では、プロセッサ105Aは、中央処理ユニット(central processing unit、CPU)等の汎用プロセッサである。この実施形態では、プロセッサ105Aは、システム100内の他のプロセッサの1つ以上と通信するための及び/又はそれらのプロセッサの1つ以上の動作を制御するためのドライバ110(例えば、グラフィックスドライバ)を実行する。一実施形態では、プロセッサ105Nは、データを処理し、ワークロードの並列処理を実行し、ディスプレイコントローラ150がディスプレイ155を駆動するためのピクセルをレンダリングし及び/又は他のワークロードを実行するグラフィックス処理ユニット(graphics processing unit、GPU)等の高度並列アーキテクチャを有するデータ並列プロセッサである。
【0010】
GPUは、ビデオゲームアプリケーション等のエンドユーザアプリケーションから必要とされるグラフィックス処理タスクを実行することができる。また、GPUは、グラフィックスに関連しない他のタスクを実行するためにもますます使用されている。システム100に含まれ得る他のデータ並列プロセッサには、デジタル信号プロセッサ(digital signal processor、DSP)、フィールドプログラマブルゲートアレイ(field programmable gate array、FPGA)及び特定用途向け集積回路(application specific integrated circuit、ASIC)等が含まれる。いくつかの実施形態では、プロセッサ105A~105Nは、複数のデータ並列プロセッサを含む。
【0011】
いくつかの実施形態では、プロセッサ105A上で実行するアプリケーションは、グラフィックスアプリケーションプログラミングインターフェイス(graphics application programming interface、API)を利用して、ユーザモードドライバ110(又は同様のGPUドライバ)を呼び出す。一実施形態において、ユーザモードドライバ110は、表示可能なグラフィックス画像に1つ以上のグラフィックスプリミティブをレンダリングするために、GPUに1つ以上のコマンドを発行する。ユーザモードドライバ110にアプリケーションによって発行されたグラフィックス命令に基づいて、ユーザモードドライバ110は、グラフィックスのレンダリングを実施するためにGPUの1つ以上の動作を指定する1つ以上のグラフィックスコマンドを生成する。いくつかの実施形態では、ユーザモードドライバ110は、CPU上で動作しているアプリケーションの一部である。例えば、ユーザモードドライバ110は、CPU上で動作しているゲームアプリケーションの一部であり得る。一実施形態では、ドライバ110がカーネルモードドライバである場合、ドライバ110は、CPU上で動作しているオペレーティングシステム(operating system、OS)の一部である。
【0012】
メモリコントローラ130は、プロセッサ105A~105Nによってアクセス可能な任意の数及び種類のメモリコントローラを表す。メモリコントローラ130は、プロセッサ105A~105Nから分離されているものとして示されているが、これは、あくまで想定される一実施形態を表すことを理解されたい。他の実施形態では、メモリコントローラ130は、プロセッサ105A~105Nのうち1つ以上の中に埋め込むことができる。メモリコントローラ130は、任意の数及び種類のメモリデバイス140に結合される。
【0013】
メモリデバイス140は、メモリ及び/又は記憶素子を含む任意の数及び種類のデバイスを表す。例えば、メモリデバイス140内のメモリの種類は、ダイナミックランダムアクセスメモリ(Dynamic Random Access Memory、DRAM)、スタティックランダムアクセスメモリ(Static Random Access Memory、SRAM)、NANDフラッシュメモリ、NORフラッシュメモリ、強誘電体ランダムアクセスメモリ(Ferroelectric Random Access Memory、FeRAM)等を含む。メモリデバイス140は、アプリケーション用のプログラム命令の第1セット、ドライバ構成要素用のプログラム命令の第2セット等を含むことができるプログラム命令145を記憶する。代替的に、プログラム命令145又はその一部は、プロセッサ105A及び/又はプロセッサ105Nの近くにあるメモリ又はキャッシュデバイスに記憶され得る。
【0014】
I/Oインターフェイス120は、任意の数及び種類のI/Oインターフェイス(例えば、周辺構成要素相互接続(peripheral component interconnect、PCI)バス、PCI-Extended(PCI-Extended、PCI-X)、PCIE(PCI Express)バス、ギガビットイーサネット(登録商標)(gigabit Ethernet、GBE)バス、ユニバーサルシリアルバス(universal serial bus、USB))を表す。様々な種類の周辺デバイス(図示せず)がI/Oインターフェイス120に結合される。かかる周辺デバイスには、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティック、他の種類のゲームコントローラ、メディア記録デバイス、及び、外部記憶デバイス等が含まれる(ただし、これらに限定されない)。ネットワークインターフェイス135は、ネットワークにわたってネットワークメッセージを受信及び送信することができる。
【0015】
様々な実施形態では、コンピューティングシステム100は、コンピュータ、ラップトップ、モバイルデバイス、ゲームコンソール、サーバ、ストリーミングデバイス、ウェアラブルデバイス、又は、様々な他の種類のコンピューティングシステム若しくはデバイスの何れかである。コンピューティングシステム100の構成要素の数は、実施形態ごとに異なることに留意されたい。例えば、他の実施形態では、
図1で示される数よりも多い又は少ない各構成要素が存在する。また、他の実施形態では、コンピューティングシステム100は、
図1に示されていない他の構成要素を含むことにも留意されたい。加えて、他の実施形態では、コンピューティングシステム100は、
図1に示される以外の他の方式で構造化される。
【0016】
図2に目を向けると、GPU200の一実施形態のブロック図が示されている。一実施形態では、コマンドプロセッサ210は、ホストプロセッサ(例えば、
図1のプロセッサ105A)から受信されたコマンドを処理する。また、コマンドプロセッサ210は、受信されたコマンドを実行するために、GPU200を正しい状態に設定する。様々な実施形態では、受信されたコマンドは、GPU200に、ビデオゲームアプリケーション、動画又は他のアプリケーションの様々なシーンをレンダリングさせることが意図されている。コマンドプロセッサ210から受信したコマンドに基づいて、ジオメトリエンジン220は、レンダリングされているシーンのトポロジ(例えば、点、線、三角形)及び接続性に従って、インデックスを処理する。例えば、一実施形態では、ジオメトリエンジン220は、三次元(3D)オブジェクトを表す四辺形プリミティブ又は三角形プリミティブに基づいて、メッシュを処理する。この例では、ジオメトリエンジン220は、固定関数演算を使用して(キャッシュ/メモリ275に記憶された)バッファから頂点を読み出し、メッシュジオメトリを形成し、パイプラインワークアイテムを生成する。
【0017】
ジオメトリエンジン220は、任意の数のシェーダプロセッサ入力(shader processor inputs、SPI)230A~230Nに結合され、その数は、実施形態に従って変化する。SPI230A~230Nは、ウェーブフロントを生成するのに十分なワークアイテムが受信されるまでワークアイテムを蓄積し、次いで、SPI230A~230Nは、それぞれ、計算ユニット240A~240N上でウェーブフロントを起動する。実施形態に応じて、ウェーブフロントは、32個のワークアイテム、64個のワークアイテム、又は、何らかの他の数のワークアイテムを含むことができる。「ワークアイテム」及び「スレッド」という用語は、本明細書において互換的に使用することができることに留意されたい。
【0018】
計算ユニット240A~240Nは、シェーダプログラムを実行して、SPI230A~230Nから受信したウェーブフロントを処理する。一実施形態では、ジオメトリフロントエンドが、シーンの三次元(3D)モデルを表すパッチ等の高次プリミティブに対して動作する頂点シェーダ及びハルシェーダを含む。この実施形態では、ジオメトリフロントエンドは、より高次のプリミティブからより低次のプリミティブを生成するシェーダに高次プリミティブを提供する。次いで、より低次のプリミティブは、ピクセルエンジンによって処理される前に複製、シェーディング及び/又は細分化される。ピクセルエンジンは、プリミティブに対してカリング、ラスタ化、深度テスト、カラーブレンディング等を実行して、表示のためのフラグメント又はピクセルを生成する。他の実施形態では、他の種類及び/又はシーケンスのシェーダが、パイプラインを横断する様々なウェーブフロントを処理するために用いられる。
【0019】
計算ユニット240A~240Nは、シェーダプログラムの実行中にキャッシュ/メモリ275から読み出し、キャッシュ/メモリ275に書き込む。例えば、一実施形態では、ジオメトリエンジン220は、リングバッファ285に書き込まれる属性データを生成するシェーダを計算ユニット240A~240N上で起動する。属性データは、頂点に関連付けられた任意の非位置データを含むことができる。例えば、属性データは、色、テクスチャ、半透明性、表面法線等を含むことができるが、これらに限定されない。後の時点で、計算ユニット240A~240N上で起動されたピクセルシェーダは、リングバッファ285からの属性データを消費する。同じ属性データにアクセスする必要がある複数のピクセルが存在する可能性があり、したがって、属性データを破棄することができる場合を追跡するために、破棄エンジン235は、ピクセルシェーダからの割り当て解除を追跡する。属性の所定のブロックがそのコンシューマの全てによって消費されると、破棄エンジン235は、属性の所定のブロックのアドレス範囲を有する破棄コマンドをキャッシュ275に送信する。破棄コマンドの受信に応じて、キャッシュ275は、対応するデータを無効化し、他のキャッシュレベル及び/又はメモリへのダーティデータのライトバックを防止する。
【0020】
シェーダエクスポートユニット250A~250Nが、計算ユニット240A~240Nからの出力を管理し、プリミティブアセンブラ260A~260N又はバックエンド280の何れかに出力を転送する。例えば、一実施形態では、シェーダエクスポートユニット250A~250Nは、変換後に頂点の位置をエクスポートする。プリミティブアセンブラ260A~260Nは、プリミティブにまたがる頂点を蓄積して接続し、プリミティブを、ラスタ化を実施するスキャンコンバータ270A~270Nに渡す。プリミティブアセンブラ260A~260Nは、視認可能ではないプリミティブのカリングも実施する。スキャンコンバータ270A~270Nは、何れのピクセルがプリミティブによってカバーされるかを判定し、ピクセルデータをSPI230A~230Nに転送し、次いで、SPI210A~230Nは、計算ユニット240A~240N上でピクセルシェーダウェーブフロントを起動する。
【0021】
図3を参照すると、計算ユニット300の一実施形態のブロック図が示されている。一実施形態では、計算ユニット300は、少なくともSIMD310A~310N、シーケンサ305、命令バッファ340、及び、ローカルデータシェア(local data share、LDS)350を含む。計算ユニット300は、図を不明瞭にすることを避けるために
図3に示されていない他の構成要素を含み得ることに留意されたい。一実施形態では、(
図2の)計算ユニット240A~240Nは、計算ユニット300の構成要素を含む。
【0022】
一実施形態では、計算ユニット300は、任意の数のウェーブフロント上でカーネルの命令を実行する。これらの命令は、命令バッファ340に記憶され、シーケンサ305によってSIMD310A~310N上での実行のためにスケジュールされる。一実施形態では、ウェーブフロントの幅は、SIMD310A~310N内のレーン315A~315N、320A~320N、325A~325N上内のレーンの数と一致する。SIMD310A~310Nの各レーン315A~315N、320A~320N、325A~325Nは、「実行ユニット」又は「処理要素」とも称され得る。
【0023】
一実施形態では、GPU300は、いくつかのワークアイテムを有するウェーブフロントのための複数の命令を受信する。ワークアイテムがSIMD310A~310N上で実行される場合、各ワークアイテムには、ベクトル汎用レジスタ(vector general purpose register、VGPR)330A~330N、スカラ汎用レジスタ(scalar general purpose register、SGPR)335A~335N、及び、ローカルデータシェア(local data share、LDS)350の対応する部分が割り当てられる。「N」という文字は、本明細書において様々な構造の隣に表示される場合に、その構造についての任意の数の要素(例えば、任意の数のSIMD310A~310N)を概して示すことを意味することに留意されたい。加えて、「N」という文字を使用する
図3内の異なる参照(例えば、SIMD310A~310N及びレーン315A~315N)は、等しい数の異なる要素が提供されることを示すように意図されていない(例えば、SIMD310A~310Nの数は、レーン315A~315Nの数と異なり得る)。
【0024】
図4に目を向けると、破棄エンジン430の一実施形態のブロック図が示されている。
図4に示されるように、破棄エンジン430は、ピクセルシェーダ410及びキャッシュ420に結合されている。ピクセルシェーダ410は、任意の数のピクセルシェーダを表す。実行中、ピクセルシェーダ410は、キャッシュ420から属性データ425を消費する。所定のピクセルシェーダ410が対応する属性データの消費を完了すると、所定のピクセルシェーダ410は、割り当て解除メッセージを破棄エンジン430に送信する。
【0025】
一実施形態では、破棄エンジン430は、テーブル440を使用してピクセルシェーダ410からの割り当て解除メッセージを追跡する。一実施形態では、テーブル440内の各エントリは、属性アドレス範囲フィールド450、最も古いピクセルシェーダコンシューマの識別子(identifier、ID)フィールド460、受信された割り当て解除の数フィールド470、ビンID480、及び、任意の数の他のフィールドを含む。他の実施形態では、テーブル440内の各エントリは、他の好適な様式で構造化され及び/又は他のフィールドを含むことができる。破棄エンジン430は、所定の属性範囲がそのコンシューマの全てによって消費されていると判定すると、破棄エンジン430は、所定の属性範囲に関する破棄コマンドをキャッシュ420に送信する。破棄コマンドの受信に応じて、キャッシュ420は、対応するデータを無効化し、ダーティデータのライトバックを防止し、これは、メモリ帯域幅使用量を低減するのに役立つ。
【0026】
図5を参照すると、破棄エンジンを動作させるための方法500の一実施形態が示されている。説明の目的で、この実施形態におけるステップ及び
図6~
図8のステップが順番に示されている。しかしながら、説明される方法の様々な実施形態では、記載された要素の1つ以上が、示されたものとは異なる順序で同時に実行されるか、又は、完全に省略されることに留意されたい。必要に応じて、他の追加の要素も実行される。本明細書に説明される様々なシステム又は装置の何れも、方法500(及び、方法600~800)を実施するように構成されている。
【0027】
ジオメトリエンジンは、属性データを生成するシェーダを起動する(ブロック505)。属性データは、生成された後、1つ以上のキャッシュに記憶される(ブロック510)。後の時点で、属性データを消費するピクセルシェーダが起動される(ブロック515)。ピクセルシェーダは、属性データの部分を消費することに応じて、割り当て解除メッセージを破棄エンジンに送信する(ブロック520)。破棄エンジンは、割り当て解除メッセージを収集し、属性データの所定の部分がその対応するピクセルシェーダコンシューマの全てによって消費されている場合を追跡する(ブロック525)。破棄エンジンは、属性データの対応する部分をキャッシュから破棄することができる場合に破棄コマンドを1つ以上のキャッシュに送信する(ブロック530)。割り当て解除コマンドの受信に応じて、キャッシュは、対応する属性データを無効化し、より低いキャッシュレベル及び/又はメモリへのライトバックを防止する(ブロック535)。ブロック535の後、方法500は終了する。
【0028】
図6に目を向けると、破棄テーブルを管理するための方法600の一実施形態が示されている。破棄エンジン(例えば、
図4の破棄エンジン430)が、ピクセルシェーダから属性データの所定の範囲に対する割り当て解除メッセージを受信する(ブロック605)。割り当て解除メッセージの受信に応じて、破棄エンジンは、属性データの所定の範囲に対応するエントリについて破棄テーブル(例えば、破棄テーブル440)を検索する(ブロック610)。一実施形態では、破棄エンジンは、所定の範囲のメモリアドレスに基づいて属性データの所定の範囲を検索する。別の実施形態では、破棄エンジンは、属性データの所定の範囲のピクセル座標に基づいて属性データの所定の範囲を検索する。
【0029】
次に、破棄エンジンは、一致するエントリの受信された割り当て解除の数フィールド内のカウントをインクリメントする(ブロック615)。また、破棄エンジンは、割り当て解除メッセージを生成したピクセルシェーダが、エントリの最も古いピクセルシェーダコンシューマフィールドにIDが記憶されているピクセルシェーダよりも古いかどうかを判定する(ブロック620)。一実施形態では、破棄エンジンは、ピクセルシェーダのIDに基づいて、何れのピクセルシェーダがより古いかを判定し、より小さいIDは、より大きいIDよりも古いと考えられる。別の実施形態では、破棄エンジンは、他の技術を使用して、ピクセルシェーダの相対年数(relative age)を判定する。
【0030】
割り当て解除メッセージを生成したピクセルシェーダが、エントリの最も古いピクセルシェーダコンシューマフィールドにIDが記憶されているピクセルシェーダよりも古い場合(条件ブロック625:「はい」)、ピクセルシェーダは、一致するエントリの最も古いピクセルシェーダコンシューマフィールド内の既存のIDを、割り当て解除メッセージを生成したピクセルシェーダのIDで置き換える(ブロック630)。そうではなく、割り当て解除メッセージを生成したピクセルシェーダが、そのIDがエントリの最も古いピクセルシェーダコンシューマフィールドに記憶されているピクセルシェーダよりも若い場合(条件ブロック625:「いいえ」)、一致するエントリの最も古いピクセルシェーダコンシューマフィールドは、同じままである(ブロック635)。ブロック630及び635の後、方法600は終了する。
【0031】
図7を参照すると、破棄コマンドを生成するための方法700の一実施形態が示されている。破棄エンジン(例えば、
図4の破棄エンジン430)は、処理されている所定のビンについて、シェーダプロセッサ入力(shader processor input、SPI)(例えば、
図2のSPI230A)からビン完了信号を受信する(ブロック705)。本明細書で使用される場合、「ビン」という用語は、画面空間の領域として定義される。一実施形態では、画面空間は、複数の矩形領域又はビンに分割される。破棄エンジンは、ビン完了信号からピクセルシェーダIDを取り出し、ピクセルシェーダIDは、ビンを処理した最も若いピクセルシェーダを識別する(ブロック710)。次に、破棄エンジンは、ビン完了信号から取り出されたピクセルシェーダIDよりも高いIDを有するピクセルシェーダに対応するエントリについて、破棄テーブル(例えば、破棄テーブル440)を検索する(ブロック715)。次いで、破棄エンジンは、ビン完了信号から取り出されたピクセルシェーダIDよりも高いIDを有するエントリに対応する属性データの範囲に対する破棄コマンドを生成及び伝達する(ブロック720)。ブロック720の後、方法700は終了する。
【0032】
図8に目を向けると、破棄コマンドを生成するための方法800の別の実施形態が示されている。破棄エンジン(例えば、
図4の破棄エンジン430)は、プリミティブの所定のビンについて、シェーダプロセッサ入力(SPI)(例えば、
図2のSPI230A)からビン完了信号を受信する(ブロック805)。破棄エンジンは、ビン完了信号からビンIDを取り出し、ビンIDは、ピクセルシェーダによって処理されたばかりのビンを識別する(ブロック810)。次に、破棄エンジンは、ビン完了信号から取り出されたビンIDに対応するエントリについて、破棄テーブル(例えば、破棄テーブル440)を検索する(ブロック815)。次いで、破棄エンジンは、ビン完了信号から取り出されたビンIDと同じビンIDを有するエントリに対応する属性データの範囲に対する破棄コマンドを生成及び伝達する(ブロック820)。ブロック820の後、方法800は終了する。
【0033】
図9を参照すると、順序付けられた破棄コマンド生成スキームを実施するための方法900の一実施形態が示されている。破棄エンジン(例えば、
図4の破棄エンジン430)は、ピクセルシェーダごとに割り当て解除カウンタを維持する(ブロック905)。割り当て解除メッセージが破棄エンジンによって受信されると、破棄エンジンは、割り当て解除メッセージを生成した特定のピクセルシェーダに対応する所定の割り当て解除カウンタをインクリメントする(ブロック910)。破棄エンジンは、各ピクセルシェーダのカウンタを監視する(ブロック915)。ピクセルシェーダの全てについてカウンタが0より大きい場合(条件ブロック920:「はい」)、これは、全てのピクセルシェーダが属性データの最も古いグループで完了したことを意味し、したがって、破棄エンジンは、属性データの最も古いグループについての破棄コマンドを1つ以上のキャッシュに送信する(ブロック925)。次に、破棄エンジンは、各カウンタをデクリメントする(ブロック930)。ブロック930の後、方法900は、ブロック910に戻る。属性データの最も古いグループが依然として使用中であることを示す、ピクセルシェーダの何れかについて、何れかのカウンタが依然として0である場合(条件ブロック920:「いいえ」)、方法900は、ブロック910に戻る。
【0034】
様々な実施形態では、ソフトウェアアプリケーションのプログラム命令を使用して、本明細書に説明される方法及び/又は機構を実装する。例えば、汎用又は専用プロセッサによって実行可能なプログラム命令が企図される。様々な実施形態では、そのようなプログラム命令は、高レベルプログラミング言語によって表される。他の実施形態では、プログラム命令は、高レベルプログラミング言語からバイナリ、中間又は他の形態にコンパイルされる。代替的に、ハードウェアの挙動又は設計を説明するプログラム命令が書かれる。そのようなプログラム命令は、C等の高レベルプログラミング言語によって表される。代替的に、Verilog等のハードウェア設計言語(hardware design language、HDL)が使用される。様々な実施形態では、プログラム命令は、様々な非一時的なコンピュータ可読記憶媒体の何れかに記憶される。記憶媒体は、プログラム実行のためにプログラム命令をコンピューティングシステムに提供するために、使用中にコンピューティングシステムによってアクセス可能である。一般的に言えば、そのようなコンピューティングシステムは、少なくとも1つ以上のメモリと、プログラム命令を実行するように構成された1つ以上のプロセッサと、を含む。
【0035】
上述した実施形態は、実施形態の非限定的な例にすぎないことを強調すべきである。上記の開示が十分に理解されると、多数の変形及び修正が当業者に明らかになるであろう。以下の特許請求の範囲は、全てのそのような変形及び修正を包含すると解釈されることが意図されている。
【国際調査報告】