(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-05-19
(45)【発行日】2023-05-29
(54)【発明の名称】アウトオブオーダキャッシュリターン
(51)【国際特許分類】
G06F 12/0844 20160101AFI20230522BHJP
G06F 9/34 20180101ALI20230522BHJP
【FI】
G06F12/0844
G06F9/34 350A
(21)【出願番号】P 2019531774
(86)(22)【出願日】2017-11-21
(86)【国際出願番号】 US2017062889
(87)【国際公開番号】W WO2018111515
(87)【国際公開日】2018-06-21
【審査請求日】2020-11-10
(32)【優先日】2016-12-13
(33)【優先権主張国・地域又は機関】US
【前置審査】
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ダニエル シュナイダー
(72)【発明者】
【氏名】ファタネー ゴッドラット
【審査官】北村 学
(56)【参考文献】
【文献】特開2004-145838(JP,A)
【文献】特開2007-316859(JP,A)
【文献】特表2002-539509(JP,A)
【文献】米国特許出願公開第2013/0262776(US,A1)
【文献】米国特許出願公開第2014/0223111(US,A1)
【文献】米国特許第06237067(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/0844
G06F 9/34
(57)【特許請求の範囲】
【請求項1】
アウトオブオーダキャッシュリターンを実行する方法であって、
キャッシュシステムが、前記キャッシュシステム内に存在する複数のリターンオーダリングキューのうち第1リターンオーダリングキューの先頭にある第1エントリが、単一命令複数データユニットで実行されるウェーブフロントへのリターンに利用可能であると判別することであって、前記第1エントリは、第1キャッシュアクセス要求に対応し、前記第1リターンオーダリングキューは、テクスチャサンプラ操作キャッシュアクセスタイプを含む第2キャッシュアクセスタイプではなく、前記テクスチャサンプラ操作キャッシュアクセスタイプを含まない第1キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶し、前記複数のリターンオーダリングキューのうち第2リターンオーダリングキューは、第1キャッシュアクセスタイプではなく、第2キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶する、ことと、
前記キャッシュシステムが、前記判別したことに応じて、前記第1キャッシュアクセス要求よりも古い前記第2リターンオーダリングキューのエントリに対応するキャッシュアクセス要求が前記ウェーブフロントへのリターンに利用可能になるのを待つことなく、前記第1エントリに対応するキャッシュリターンを前記ウェーブフロントに送ることと、を含む、
方法。
【請求項2】
前記第1キャッシュアクセスタイプは、読み出しタイプ及び書き込みタイプのうち何れかを含む、
請求項1の方法。
【請求項3】
前記読み出しタイプは、メモリシステムに対してデータを要求し、応答としてデータを受信するアクセスタイプを含み、
前記書き込みタイプは、データを前記メモリシステムに書き込み、応答として肯定応答信号を受信するアクセスタイプを含み、
前記テクスチャサンプラ
操作キャッシュアクセスタイプは、テクスチャ座標を介してテクスチャデータを要求し、応答として前記テクスチャデータを受信するアクセスタイプを含む、
請求項2の方法。
【請求項4】
前記テクスチャサンプラ
操作キャッシュアクセスタイプは、前記テクスチャ座標を1つ以上のメモリアドレスに変換することと、前記1つ以上のメモリアドレスからデータをフェッチすることと、前記フェッチされたデータを解凍することと、前記フェッチされたデータにフィルタリングを適用することと、のうち1つ以上を要求するアクセスタイプを含む、
請求項3の方法。
【請求項5】
前記複数のリターンオーダリングキューのモードを選択することであって、前記モードは、前記複数のリターンオーダリングキュー内のリターンオーダリングキューの数と、前記複数のリターンオーダリングキューの各々に記憶され、オーダリングされる1つ以上のキャッシュアクセスタイプと、を定義する、ことを含む、
請求項1の方法。
【請求項6】
前記複数のリターンオーダリングキューは、モノリシックメモリ内に記憶された仮想キューを含み、前記仮想キューは、前記選択されたモードに適応するようにサイズ変更可能である、
請求項5の方法。
【請求項7】
各仮想キューの先頭から対応する物理キューの先頭にエントリをコピーすることを含み、
前記第1エントリに対応するキャッシュリターンを前記ウェーブフロントに送ることは、
前記第1リターンオーダリングキューに対応する物理キューの先頭からエントリを除去することと、
前記物理キューの次に古いエントリを、前記物理キューの先頭になるように変更することと、
エントリを、前記第1リターンオーダリングキューから、前記第1リターンオーダリングキューに対応する前記物理キューにコピーすることと、を含む、
請求項6の方法。
【請求項8】
前記ウェーブフロントにおいてキャッシュアクセスタイプに基づくバリア命令を実行することを含む、
請求項1の方法。
【請求項9】
前記キャッシュアクセスタイプに基づくバリア命令を実行することは、
特定のキャッシュアクセスタイプの未処理のキャッシュアクセスが完了するまで前記ウェーブフロントをストールさせることを含む、
請求項8の方法。
【請求項10】
アウトオブオーダキャッシュリターンを実行するための計算ユニットであって、
ウェーブフロントを実行するように構成された単一命令複数データユニットと、
キャッシュシステムと、を備え、
前記キャッシュシステムは、
第1リターンオーダリングキューと、第2リターンオーダリングキューと、を含む複数のリターンオーダリングキューを記憶することであって、前記第1リターンオーダリングキューは、テクスチャサンプラ操作キャッシュアクセスタイプを含む第2キャッシュアクセスタイプではなく、前記テクスチャサンプラ操作キャッシュアクセスタイプを含まない第1キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶し、前記第2リターンオーダリングキューは、第1キャッシュアクセスタイプではなく、第2キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶する、ことと、
前記第1リターンオーダリングキューの先頭にある第1エントリが、前記ウェーブフロントへのリターンに利用可能であると判別することであって、前記第1エントリは、第1キャッシュアクセス要求に対応する、ことと、
前記判別したことに応じて、前記第1キャッシュアクセス要求よりも古い前記第2リターンオーダリングキューのエントリに対応するキャッシュアクセス要求が前記ウェーブフロントへのリターンに利用可能になるのを待つことなく、前記第1エントリに対応するキャッシュリターンを前記ウェーブフロントに送ることと、を行うように構成されている、
計算ユニット。
【請求項11】
前記第1キャッシュアクセスタイプは、読み出しタイプ及び書き込みタイプのうち何れかを含む、
請求項10の計算ユニット。
【請求項12】
前記読み出しタイプは、メモリシステムに対してデータを要求し、応答としてデータを受信するアクセスタイプを含み、
前記書き込みタイプは、データを前記メモリシステムに書き込み、応答として肯定応答信号を受信するアクセスタイプを含み、
前記テクスチャサンプラ
操作キャッシュアクセスタイプは、テクスチャ座標を介してテクスチャデータを要求し、応答として前記テクスチャデータを受信するアクセスタイプを含む、
請求項11の計算ユニット。
【請求項13】
前記テクスチャサンプラ
操作キャッシュアクセスタイプは、前記テクスチャ座標を1つ以上のメモリアドレスに変換することと、前記1つ以上のメモリアドレスからデータをフェッチすることと、前記フェッチされたデータを解凍することと、前記フェッチされたデータにフィルタリングを適用することと、のうち1つ以上を要求するアクセスタイプを含む、
請求項12の計算ユニット。
【請求項14】
前記キャッシュシステムは、
前記複数のリターンオーダリングキューのモードを選択することであって、前記モードは、前記複数のリターンオーダリングキュー内のリターンオーダリングキューの数と、前記複数のリターンオーダリングキューの各々に記憶され、オーダリングされる1つ以上のキャッシュアクセスタイプと、を定義する、ことを行うように構成されている、
請求項10の計算ユニット。
【請求項15】
前記複数のリターンオーダリングキューは、モノリシックメモリ内に記憶された仮想キューを含み、前記仮想キューは、前記選択されたモードに適応するようにサイズ変更可能である、
請求項14の計算ユニット。
【請求項16】
前記キャッシュシステムは、
各仮想キューの先頭から対応する物理キューの先頭にエントリをコピーすることを行うように構成されており、
前記第1エントリに対応するキャッシュリターンを前記ウェーブフロントに送ることは、
前記第1リターンオーダリングキューに対応する物理キューの先頭からエントリを除去することと、
前記物理キューの次に古いエントリを、前記物理キューの先頭になるように変更することと、
エントリを、前記第1リターンオーダリングキューから、前記第1リターンオーダリングキューに対応する前記物理キューにコピーすることと、を含む、
請求項15の計算ユニット。
【請求項17】
前記ウェーブフロントは、
キャッシュアクセスタイプに基づくバリア命令を実行するように構成されている、
請求項10の計算ユニット。
【請求項18】
前記ウェーブフロントは、前記キャッシュアクセスタイプに基づくバリア命令を実行することに応じて、特定のキャッシュアクセスタイプの未処理のキャッシュアクセスが完了するまでストールされる、
請求項17の計算ユニット。
【請求項19】
計算ユニットを含むアクセラレーテッド処理デバイスと、
前記計算ユニット内のウェーブフロントを前記アクセラレーテッド処理デバイスに実行させるように構成されたプロセッサと、を備え、
前記計算ユニットは、
前記ウェーブフロントを実行するように構成された単一命令複数データユニットと、
キャッシュシステムと、を備え、
前記キャッシュシステムは、
第1リターンオーダリングキューと、第2リターンオーダリングキューと、を含む複数のリターンオーダリングキューを記憶することであって、前記第1リターンオーダリングキューは、テクスチャサンプラ操作キャッシュアクセスタイプを含む第2キャッシュアクセスタイプではなく、前記テクスチャサンプラ操作キャッシュアクセスタイプを含まない第1キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶し、前記第2リターンオーダリングキューは、第1キャッシュアクセスタイプではなく、第2キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶する、ことと、
前記第1リターンオーダリングキューの先頭にある第1エントリが、前記ウェーブフロントへのリターンに利用可能であると判別することであって、前記第1エントリは、第1キャッシュアクセス要求に対応する、ことと、
前記判別したことに応じて、前記第1キャッシュアクセス要求よりも古い前記第2リターンオーダリングキューのエントリに対応するキャッシュアクセス要求が前記ウェーブフロントへのリターンに利用可能になるのを待つことなく、前記第1エントリに対応するキャッシュリターンを前記ウェーブフロントに送ることと、を行うように構成されている、
コンピュータシステム。
【請求項20】
前記第1キャッシュアクセスタイプは、読み出しタイプ及び書き込みタイプのうち何れかを含む、
請求項19のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【0001】
(関連出願の相互参照)
本願は、2016年12月13日に出願された米国特許出願第15/377,998号の利益を主張するものであり、この内容は参照により本明細書に完全に記載されているものとして援用される。
【0002】
開示される実施形態は、概して、グラフィックス処理に関し、特に、アウトオブオーダキャッシュリターンに関する。
【背景技術】
【0003】
3次元グラフィックスをレンダリングするためのハードウェアは高度に並列であり、このハードウェアは、メモリからのデータを要求し、当該データに対して計算を行い、処理されたデータをフレームバッファに提供してスクリーンに出力する多数の個別処理装置を含む。通常、メモリ内のデータにアクセスするには、多くのレイテンシが生じる。このレイテンシを短縮するためにキャッシュシステムが設けられている。しかしながら、レンダリング動作において一般的に処理される大量のデータのために、メモリアクセスレイテンシの更なる改善が望まれる。
【0004】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解を得ることができる。
【図面の簡単な説明】
【0005】
【
図1】1つ以上の開示された実施形態を実装し得る例示的なデバイスのブロック図である。
【
図2】一例による、アクセラレーテッド処理デバイスを示すブロック図である。
【
図3】一例による、グラフィックス処理パイプラインを示すブロック図である。
【
図4】一例による、キャッシュシステムを示すブロック図である。
【
図5】一例による、様々なタイプのキャッシュアクセス要求をオーダリング(ordering)するためのキューを示すブロック図である。
【
図6】一例による、リターンオーダリングキューを示す図である。
【
図7】一例による、アクセスタイプ毎のリターンオーダリングキューにキャッシュアクセス要求の指示を記録する方法のフロー図である。
【
図8】一例による、アウトオブオーダキャッシュリターンをワークグループに提供する方法のフロー図である。
【発明を実施するための形態】
【0006】
本開示は、キャッシュアクセスのリターンをアウトオブオーダにすることを可能にする技術に関する。より具体的には、複数のキャッシュアクセスタイプ毎にリターンオーダリングキューが存在し、未処理のキャッシュアクセスを、それらのアクセスが行われた順に記憶する。キャッシュアクセスタイプには、読み出しタイプ、書き込みタイプ、テクスチャサンプラタイプが含まれる。特定のタイプのキャッシュアクセス要求が当該タイプのリターンオーダリングキューの先頭にあり、キャッシュアクセスが当該アクセスを行ったウェーブフロント(wavefront)へのリターンに使用可能である場合、キャッシュシステムは、キャッシュアクセスをウェーブフロントに返す。このリターンは、使用可能なキャッシュアクセスを記憶するリターンオーダリングキューに関連するタイプ以外のタイプのキャッシュアクセスの順序(オーダ)とは無関係に行われる。したがって、キャッシュアクセスは、異なるタイプのキャッシュアクセスに対してアウトオブオーダで戻される場合がある。アウトオブオーダリターンを可能にすると、例えば、比較的長いレイテンシのアクセスタイプ(例えば、テクスチャサンプラ操作)の後に比較的短いレイテンシのアクセスタイプ(例えば、読み出し)が発行される状況等において、レイテンシを改善するのに効果的となり得る。
【0007】
図1は、1つ以上の開示された実施形態を実装し得る例示的なデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲーム機、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータ等を含む。デバイス100は、プロセッサ102と、メモリ104と、ストレージデバイス106と、1つ以上の入力デバイス108と、1つ以上の出力デバイス110と、を含む。また、デバイス100は、入力デバイス108及び出力デバイス110をそれぞれ駆動する入力ドライバ112及び出力ドライバ114も含む。デバイス100は、
図1に示されていない追加のコンポーネントを含み得ることが理解されるであろう。
【0008】
プロセッサ102は、中央処理装置(CPU)、グラフィックス処理装置(GPU)、同じダイ上に配置されたCPU及びGPU、又は、1つ以上のプロセッサコアを含み、各プロセッサコアは、CPU又はGPUであってもよい。メモリ104は、プロセッサ102と同じダイ上に配置されてもよいし、プロセッサ102とは別に配置されてもよい。メモリ104は、揮発性又は不揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)、ダイナミックRAM、キャッシュ等)を含む。
【0009】
ストレージデバイス106は、固定又は着脱可能なストレージデバイス(例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク若しくはフラッシュドライブ等)を含む。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリクススキャナ又はネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信用の無線ローカルエリアネットワークカード)を含む。出力デバイス110は、ディスプレイデバイス、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上のライト、アンテナ又はネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信用の無線ローカルエリアネットワークカード)を含む。
【0010】
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信するのを可能にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信するのを可能にする。出力ドライバ114は、ディスプレイデバイス118に接続されたアクセラレーテッド処理デバイス(APD)116を含む。APD116は、プロセッサ102から計算コマンド及びグラフィックスレンダリングコマンドを受信し、計算コマンド及びグラフィックスレンダリングコマンドを処理して、表示のためにピクセル出力をディスプレイデバイス118に提供するように構成されている。
【0011】
APD116は、単一命令複数データ(SIMD)パラダイムに従って計算を実行するように構成された1つ以上の並列処理装置を含む。しかしながr、APD116によって実行されるものとして説明した機能は、SIMDパラダイムに従ってデータを処理しない処理デバイスによって実行されてもよい。
【0012】
図2は、一例による、アクセラレーテッド処理デバイス116のブロック図である。プロセッサ102は、プロセッサ102による実行のための1つ以上の制御論理モジュールをシステムメモリ104内に保持している。制御論理モジュールは、オペレーティングシステム120と、ドライバ122と、アプリケーション126と、を含む。これらの制御論理モジュールは、プロセッサ102及びAPD116の様々な態様の動作を制御する。例えば、オペレーティングシステム120は、ハードウェアと直接通信し、プロセッサ102で実行中の他のソフトウェア用のハードウェアへのインタフェースを提供する。ドライバ122は、例えば、APD116の様々な機能にアクセスするために、プロセッサ102で実行中のソフトウェア(例えば、アプリケーション126)へのアプリケーションプログラミングインタフェース(API)を提供することによって、APD116の動作を制御する。また、ドライバ122は、APD116の処理コンポーネント(例えば、以下でさらに詳細に説明するSIMDユニット138等)による実行のために、シェーダプログラムをコンパイルするジャストインタイムコンパイラを含む。
【0013】
APD116は、例えばグラフィックス処理及び非グラフィックス処理等のように、並列処理に適し得る選択された機能のためのコマンド及びプログラムを実行する。APD116は、例えばピクセル演算、幾何学的計算等のグラフィックスパイプライン処理を実行し、プロセッサ102から受信したコマンドに基づいて画像をディスプレイデバイス118にレンダリングするために使用することができる。また、APD116は、プロセッサ102から受信したコマンド、又は、グラフィックス処理パイプライン134の「正常な」情報フローの一部ではないコマンドに基づいて、例えばビデオ、物理シミュレーション、計算流体力学又は他のタスクに関係する動作等のようにグラフィックス処理に直接関連しない(若しくは関連していない)計算処理動作を実行する。
【0014】
APD116は、SIMDパラダイムに従って、プロセッサ102の要求に応じて並列に動作を実行するように構成された1つ以上のSIMDユニット138を有する計算ユニット132(本明細書では、まとめて「プログラマブル処理装置202」と呼ばれる)を含む。SIMDパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有することによって同一のプログラムを実行するが、異なるデータを用いて当該プログラムを実行することができるパラダイムである。一例では、各SIMDユニット138は、16個のレーンを含んでおり、各レーンは、SIMDユニット138内の他のレーンと同時に同じ命令を実行するが、異なるデータを用いて当該命令を実行することができる。全てのレーンが所定の命令を実行する必要がない場合には、レーンを予測によってスイッチオフにすることができる。予測を使用して、分岐制御フローを有するプログラムを実行することもできる。より具体的には、制御フローが個々のレーンによって実行された計算に基づく条件付き分岐又は他の命令を有するプログラムの場合、現在実行されていない制御フローパスに対応するレーンの予測、及び、異なる制御フローパスの連続実行は、任意の制御フローに追従することを可能にする。計算ユニット132は、例えばAPD116内のAPDメモリ139又はシステムメモリ104等のメモリから取得されたデータをキャッシュするキャッシュシステム140を含む。
【0015】
計算ユニット132における実行の基本単位は、ワークアイテムである。各ワークアイテムは、特定のレーンで並列に実行されるプログラムの単一のインスタンス化(instantiation)を表す。ワークアイテムは、単一のSIMDユニット138上で「ウェーブフロント」として同時に実行することができる。複数のウェーブフロントは、同じプログラムを実行するように指定されたワークアイテムの集合を含む「ワークグループ」に含まれてもよい。ワークグループを構成するウェーブフロントの各々を実行することによって、ワークグループを実行することができる。ウェーブフロントは、単一のSIMDユニット138上で順次実行されてもよいし、異なるSIMDユニット138上で部分的に又は完全に並列に実行されてもよい。ウェーブフロントは、単一のSIMDユニット138上で同時に実行可能なワークアイテムの最大の集合と考えることができる。したがって、プロセッサ102から受信したコマンドが、特定のプログラムが単一のSIMDユニット138上で同時に実行できない程度に並列化されることを示す場合、当該プログラムは、2つ以上のSIMDユニット138で並列化され、又は、同じSIMDユニット138上で直列化(必要に応じて、並列化及び直列化の両方が行われる)されたウェーブフロントに分割される。スケジューラ136は、異なる計算ユニット132及びSIMDユニット138で様々なウェーブフロントをスケジュールすることに関連する動作を実行するように構成されている。スケジューリングは、SIMDユニット138上で実行するためのウェーブフロントを割り当てること、ウェーブフロントがいつ終了したかを判別することと、ウェーブフロントがいつストールし、他のウェーブフロントとスワップアウトされるかを判別することと、他のスケジューリングタスクを実行すること、を含む。
【0016】
計算ユニット132によってもたらされる並列性は、例えば、ピクセル値計算、頂点変換及び他のグラフィックス動作等のグラフィックス関連動作に適している。プロセッサ102からグラフィックス処理コマンドを受信するグラフィックス処理パイプライン134は、並列実行のために計算タスクを計算ユニット132に提供する。
【0017】
また、計算ユニット132は、グラフィックスに関連しないか、グラフィックス処理パイプライン134の「通常」動作(例えば、グラフィックス処理パイプライン134の動作のために実行される処理を補足するのに実行されるカスタム動作)の一部として実行されない計算タスクを実行するために使用される。プロセッサ102で実行中のアプリケーション126又は他のソフトウェアは、係る計算タスクを定義するプログラム(「計算シェーダプログラム」とよく呼ばれる)を、実行のためにAPD116に送信する。
【0018】
図3は、
図2に示すグラフィックス処理パイプライン134の更なる詳細を示すブロック図である。グラフィックス処理パイプライン134は、各々が特定の機能を実行するステージを含む。各ステージは、グラフィックス処理パイプライン134の機能の小区分を表す。各ステージは、プログラマブル処理装置202内で実行されるシェーダプログラムとして部分的若しくは完全に、又は、プログラマブル処理装置202の外部の固定機能である非プログラマブルハードウェアとして部分的若しくは完全に実装される。
【0019】
入力アセンブラステージ302は、ユーザが充填したバッファ(例えば、プロセッサ102によって実行されるソフトウェア(アプリケーション126等)の要求によって充填されたバッファ)からプリミティブデータを読み出し、パイプラインの残りの部分によって使用されるプリミティブに当該データをアセンブルする。入力アセンブラステージ302は、ユーザが充填したバッファに含まれるプリミティブデータに基づいて、異なるタイプのプリミティブを生成することができる。入力アセンブラステージ302は、残りのパイプラインによって使用されるために、アセンブルされたプリミティブをフォーマットする。
【0020】
頂点シェーダステージ304は、入力アセンブラステージ302によってアセンブルされたプリミティブの頂点を処理する。頂点シェーダステージ304は、変換、スキニング、モーフィング及び頂点毎のライティング等の様々な頂点毎の操作を実行する。変換操作は、頂点の座標を変換するための様々な操作を含むことができる。これらの操作には、モデリング変換、表示変換、投影変換、パースペクティブ分割及びビューポート変換のうち1つ以上が含まれてもよい。本明細書では、このような変換は、変換が実行される頂点の座標、つまり「位置」を変更するものとみなされる。頂点シェーダステージ304の他の操作によって、座標以外の属性が変更されてもよい。
【0021】
頂点シェーダステージ304は、1つ以上の計算ユニット132上で実行される頂点シェーダプログラムとして部分的又は完全に実装される。頂点シェーダプログラムは、プロセッサ102によって提供され、コンピュータプログラマによって事前に書かれたプログラムに基づいている。ドライバ122は、このようなコンピュータプログラムをコンパイルして、計算ユニット132内での実行に適したフォーマットを有する頂点シェーダプログラムを生成する。
【0022】
ハルシェーダステージ306、テッセレータステージ308及びドメインシェーダステージ310は、連携してテッセレーションを実施し、プリミティブを更に分割することによって、単純なプリミティブをより複雑なプリミティブに変換する。ハルシェーダステージ306は、入力プリミティブに基づいてテッセレーションのためのパッチを生成する。テッセレータステージ308は、パッチのサンプルセットを生成する。ドメインシェーダステージ310は、パッチのサンプルに対応する頂点の頂点位置を計算する。ハルシェーダステージ306及びドメインシェーダステージ310は、プログラマブル処理装置202上で実行されるシェーダプログラムとして実装することができる。
【0023】
ジオメトリシェーダステージ312は、プリミティブ毎に頂点操作を実行する。ジオメトリシェーダステージ312によって、例えば、ポイントスプライト展開、動的パーティクルシステム操作、ファーフィン(fur-fin)生成、シャドウボリューム生成、キューブマップへのシングルパスレンダリング、プリミティブ毎のマテリアルスワップ、プリミティブ毎のマテリアル設定等の操作を含む、様々な異なるタイプの操作を実行することができる。ジオメトリシェーダステージ312の操作は、プログラマブル処理装置202上で実行されるシェーダプログラムによって行われてもよい。
【0024】
ラスタライザステージ314は、上流で生成された単純プリミティブを受け入れてラスタライズする。ラスタライズは、特定のプリミティブによってカバーされているスクリーンピクセル(又はサブピクセルサンプル)を判別することから構成されている。ラスタライズは、固定機能ハードウェアによって行われる。
【0025】
ピクセルシェーダステージ316は、上流で生成されたプリミティブとラスタライズの結果とに基づいて、スクリーンピクセルの出力値を計算する。ピクセルシェーダステージ316は、テクスチャをテクスチャメモリから適用することができる。ピクセルシェーダステージ316の操作は、プログラマブル処理装置202上で実行されるシェーダプログラムによって行われる。
【0026】
出力マージャステージ318は、ピクセルシェーダステージ316からの出力を受信し、これらの出力を結合(マージ)し、zテスト及びアルファブレンディング等の操作を行うことによって、スクリーンピクセルの最終色を決定する。
【0027】
テクスチャを定義するテクスチャデータは、テクスチャユニット320によって記憶及び/又はアクセスされる。テクスチャは、グラフィックス処理パイプライン134の様々な時点で使用されるビットマップ画像である。例えば、場合によっては、ピクセルシェーダステージ316は、テクスチャをピクセルに適用して、レンダリングされる頂点の数を増やすことなく、見かけ上のレンダリングの複雑さを向上させる(例えば、より「写実的」な外観を提供する)。
【0028】
場合によっては、頂点シェーダステージ304は、テクスチャユニット320のテクスチャデータを使用して、例えば、美観を向上させるために頂点を生成又は変更することによって複雑さを高めるように、プリミティブを変更する。一例では、頂点シェーダステージ304は、テクスチャユニット320に記憶されている高さマップを使用して、頂点の変位を変更する。このタイプの技術は、例えば、水をレンダリングするのに使用される頂点の位置及び数を変更することによって、ピクセルシェーダステージ316のみで使われるテクスチャと比較してより現実的に見える水を生成するために使用することができる。場合によっては、ジオメトリシェーダステージ312は、テクスチャユニット320のテクスチャデータにアクセスする。
【0029】
図4は、一例による、キャッシュシステム140を示す図である。キャッシュシステム140は、SIMDユニット138で実行されているウェーブフロントからキャッシュアクセスの要求を受信し、これらの要求を処理する。これらの要求を処理することの一部は、計算ユニット132内のキャッシュシステム140の1つ以上のキャッシュメモリ404において要求されたデータを検索することを含む。より具体的には、キャッシュシステム140は、キャッシュ階層の低レベル(第1レベル等)として機能する1つ以上のキャッシュメモリ404を有する。ウェーブフロント412によってアクセス要求されたデータがキャッシュメモリ404に存在しない場合、キャッシュシステム140は、要求されたデータにアクセスするために、階層インタフェース406を介して、キャッシュ階層内の他のメモリ(例えば、より高レベルのキャッシュメモリ、APDメモリ139、及び/又は、システムメモリ104)にアクセスする。
【0030】
いくつかの例では、キャッシュアクセスの要求は、ベクトルベースの要求である。ベクトルベースの要求は、SIMDユニット138での並列化された操作に従って、複数のメモリ位置からデータを要求する能力を有する。例えば、各ワークアイテムが異なるアドレスを指定する、単一のウェーブフロント内の異なるワークアイテムによって実行されるロード命令等の単一の命令は、メモリ内の複数の位置からの読み出しをもたらし得る。ベクトルベースの要求は、通常、データを単一のメモリ位置に読み書きするスカラ要求とは対照的である。
【0031】
キャッシュシステム140内のリターンオーダリングキュー402は、完了したキャッシュアクセスが順番にウェーブフロント412に返されるように、完了したキャッシュアクセスをオーダリングする。アクセスを順番に返すことは、これらのアクセスが行われた順番で、アクセスを行ったウェーブフロント412に対してリターンデータを提供することを意味する。いくつかの例では、キャッシュシステム140は、ウェーブフロント毎にキャッシュアクセス要求をオーダリングする。これは、特定のウェーブフロントによって行われたキャッシュアクセス要求の指標が、これらの要求を行った順序でウェーブフロント412が記憶されるが、異なるウェーブフロント412によって行われたキャッシュアクセス要求の順序が保持されないことを意味する。キャッシュアクセス要求のウェーブフロント毎のオーダリングを達成するために、各ウェーブフロント412は、キューメモリ空間の独自のセットに割り当てられて、キャッシュアクセス要求の順序を保持することができる。
【0032】
リターンオーダリングキュー402は、各キャッシュアクセスの識別子を記憶し、この識別子は、ウェーブフロント412によって各キャッシュアクセスが行われた順序で記憶される。新たなエントリ、すなわち、ウェーブフロント412からの最新のキャッシュアクセス要求に対応するエントリは、リターンオーダリングキュー402の末尾に提供される。リターンオーダリングキューの先頭には、最も古い未処理のキャッシュアクセス要求、したがって、返される次のキャッシュアクセスの識別情報が記憶されている。リターンオーダリングキュー402の先頭におけるアクセスに対するデータが、キャッシュメモリ404において利用可能である場合(例えば、データの少なくとも一部が、より高レベルのキャッシュメモリ、システムメモリ104又はAPDメモリ139からキャッシュメモリ404にフェッチされている場合)、キャッシュシステム140は、当該データを要求元のウェーブフロント412に提供する。
【0033】
キャッシュリターンをオーダリングするための1つの技術は、キャッシュリターンの「タイプ」に関係なく、全てのキャッシュリターンをオーダリングすることを含む。本明細書において、キャッシュリターンの「タイプ」(これは、キャッシュアクセス要求のタイプでもある)は、読み出しタイプ、書き込みタイプ、テクスチャサンプラタイプの何れかである。読み出しタイプアクセスは、メモリからのデータを要求し、要求されたデータがメモリから返されるアクセスである。読み出しタイプのアクセスでは、仮想アドレス又は物理アドレスによってメモリ位置が指定され、サンプラ操作とは異なり、テクスチャ座標が指定されない。読み出しタイプのアクセスに対するリターンは、要求されたデータを、当該データを要求したウェーブフロント412に返すこと(例えば、要求されたデータを、ウェーブフロント412を実行するSIMDユニット138のレジスタに配置することによって、SIMDユニット138が当該データに依存する命令を実行できるようにすること)を意味する。読み出しタイプのアクセスの場合、リターンデータは、読み出しタイプのアクセス要求によって要求されたデータである。
【0034】
書き込みタイプのアクセスに対するリターンは、書き込みを要求したウェーブフロント412を実行するSIMDユニット138に対して、「肯定応答」信号を返すことを意味する。「肯定応答」信号は、書き込みを要求したSIMDユニット138に対して、要求された書き込みがメモリシステムによって承認されたことを示す信号である。SIMDユニット138は、「肯定応答」信号を受信すると、「肯定応答」信号に依存する動作を進めることができるようになる。書き込みタイプのアクセスの場合、リターンデータは、「肯定応答」信号である。
【0035】
他の操作と同様に、(読み出し変更書き込み(read-modify-write)操作等の複雑な操作であってもよい)アトミック操作は、操作の完了に応じて返された信号のタイプに基づいて、読み出し又は書き込みとして分類される。より具体的には、データをウェーブフロントに返すアトミック操作は、読み出し操作として分類される。肯定応答信号をウェーブフロントに返すアトミック操作は、書き込み操作として分類される。
【0036】
テクスチャサンプラタイプのメモリ操作は、テクスチャデータの要求を受信することと、当該要求に対して処理を実行して、実際に必要とされる記憶データを判別することと、当該記憶データをフェッチすることと、任意に記憶データを解凍及び/又はフィルタリングして、ピクセル値又はサンプル値を取得することと、データを要求したウェーブフロント412を実行するSIMDユニット138に対してピクセル値又はサンプル値を返すことと、を含む複雑な操作である。テクスチャサンプラタイプのアクセスに対するリターンは、データを要求したウェーブフロント412を実行するSIMDユニット138に対して、要求されたデータを返すことを意味する。テクスチャサンプラタイプのアクセスの場合、リターンデータは、要求元のSIMDユニット138に返されるピクセル値又はサンプル値である。
【0037】
テクスチャサンプラ操作には多数の操作が含まれるため、レイテンシが長くなる。例えば、テクスチャサンプルアクセスの要求は、通常、データが望まれるテクスチャビットマップ内の位置を識別するテクスチャ座標(u,v,w)を含む。また、テクスチャサンプルアクセスの要求は、スクリーン座標の変化率と比較してテクスチャ座標の変化率を指定する1つ以上の勾配値を含んでもよく、他のデータ(例えば、ミップマップレベルを識別するデータ、キューブマップ面を識別するデータ又は他のデータ等)を含んでもよい。キャッシュシステム140のテクスチャユニット408は、このデータに基づいて、要求されたデータが見つかるアドレスを識別し、メモリシステムから当該データをフェッチし(計算ユニット132内のキャッシュシステム140のキャッシュメモリ404にヒットするか、キャッシュメモリ404において欠落していことを検出し、欠落しているデータをキャッシュ階層内の他のメモリからキャッシュメモリ404にフェッチすることを含んでもよい)、テクスチャデータが圧縮されていることがあるので、オプションでデータを解凍し、オプションでフィルタリングスキーム(例えば、バイリニアフィルタリング、トリリニアフィルタリング、異方性フィルタリング)に従ってデータを処理し、テクスチャサンプラキャッシュアクセス要求を行ったウェーブフロント412を実行するSIMDユニット138に対してデータを送る。これらの操作は、何百ものコンピュータクロックサイクルを必要とする可能性があり、これは長いレイテンシ(ここで、レイテンシとは、SIMDユニット138がテクスチャサンプリング操作の実行を要求してから、テクスチャサンプリング操作によって得られたデータがSIMDユニット138に提供されるまでの時間である)を表す。
【0038】
読み出し操作又は書き込み操作と比較してサンプラ操作のレイテンシが長いので、キャッシュリターンをオーダリングするための他のモードが本明細書で提供される。このような他のモードでは、全てのタイプのキャッシュリターンをオーダリングする単一のキューの代わりに、リターンオーダリングキュー402が、異なるタイプのキャッシュリターンの順序を保持する2つ以上の個別のキューを含む。いくつかのモードが可能である。異なるモード間の選択は、プロセッサ102からの要求、SIMDユニット138内で実行される命令、APD116内で実行されるファームウェアによって行われるアルゴリズム的判別に応じて、又は、任意の他の技術的に実現可能なメカニズムに応じて行われ得る。
【0039】
或るモードでは、「サンプラ」、「読み出し」、及び、「書き込み」のタイプのキャッシュアクセス要求毎にキューが保持される。各キューは、各々のタイプのキャッシュアクセスの指標を記憶する。例えば、サンプラキューは、アクセスが行われた順で、サンプラタイプのキャッシュアクセスのアクセス指標を保持するが、読み出しタイプ又は書き込みタイプのキャッシュアクセスのアクセス指標を保持しない。同様に、読み出しキューは、読み出しタイプのキャッシュアクセスの順序付きの指標を保持するが、書き込みタイプ又はサンプラタイプのキャッシュアクセスの順序付きの指標を保持せず、書き込みキューは、書き込みタイプのキャッシュアクセスの順序付きの指標を保持するが、読み出しタイプ又はサンプラタイプのキャッシュアクセスの順序付きの指標を保持しない。
【0040】
各キューは、先頭と末尾とを有する。先頭は、そのキューに対応するタイプの最も古いキャッシュアクセス要求を表し、末尾は、そのキューに対応するタイプの最も新しいキャッシュアクセス要求を表す。特定のキューの先頭にあるキャッシュアクセス要求の全てのデータがキャッシュメモリ404に記憶されることによって「利用可能」になると、キャッシュシステム140は、当該データを更なる処理のためにSIMDユニット138に返す。複数キューの先頭にあるキャッシュアクセスが利用可能な場合には、キャッシュシステム140は、技術的に実現可能なアービトレーションスキーム(例えば、ラウンドロビン)に従って、異なるキューの先頭のキャッシュアクセスが互いに発行された順序に関係なく、何れかのキューの先頭にある利用可能なキャッシュアクセスを選択することができる。
【0041】
別のモードでは、サンプラ操作及び読み出し操作を指示する1つのキューが保持され、書き込み操作を指示する別のキューが保持される。つまり、第1キューは、「読み出し」タイプのキャッシュアクセス要求と「サンプラ」タイプのキャッシュアクセスとの両方の指示を、これらのアクセス要求がウェーブフロントから受信された順序で記憶し、第2キューは、「書き込み」タイプのキャッシュアクセスの指示を、これらのアクセス要求がウェーブフロントから受信された順序で記憶する。したがって、読み出しタイプのキャッシュアクセスとサンプラタイプのキャッシュアクセスとは、互いに順序付けられているが、書き込みタイプのキャッシュアクセスについては順序付けられていない。書き込みタイプのキャッシュアクセスは、互いに順序付けられているが、読み出しタイプのキャッシュアクセス又はサンプラタイプのキャッシュアクセスについては順序付けられていない。
【0042】
読み出し及び書き込みをオーダリングするキューと、サンプラ操作をオーダリングする別のキューとを有する1つのモードや、書き込み及びサンプラ操作をオーダリングするキューと、読み出しをオーダリングする別のキューとを有する別のモード等の他のモードも可能である。
【0043】
図5は、一例による、様々なタイプのキャッシュアクセス要求をオーダリングするためのキューを示すブロック図である。キューは、読み出しタイプのキャッシュアクセス要求を表すエントリ514を、これらの要求がウェーブフロント412によって行われる順序で記憶する読み出しキュー502と、書き込みタイプのキャッシュアクセス要求を表すエントリ514を、これらの要求がウェーブフロント412によって行われる順序で記憶する書き込みキューと、サンプラタイプのキャッシュアクセス要求を表すエントリ514を、これらの要求がウェーブフロント412によって行われる順序で記憶するサンプラキュー506と、を含む。各エントリ514は、1つ以上のキャッシュアクセス要求に関するデータを記憶することができる。
【0044】
動作中、ウェーブフロント412は、キャッシュアクセス要求を含み得るシェーダプログラムの一部として実行される。このような要求が行われると、キャッシュシステム140は、当該要求を検出し、当該要求が読み出しタイプの要求であるか、書き込みタイプの要求であるか、又は、サンプラタイプの要求であるかを判別する。読み出しタイプ要求は、メモリからウェーブフロント412にデータを返すサンプラタイプ要求以外の要求である。書き込みタイプ要求は、データをメモリに記憶し、肯定応答信号をウェーブフロント412に返すが、メモリからウェーブフロント412にデータを返さない要求である。サンプラタイプ要求は、少なくともテクスチャ座標を受信し、当該座標及び他のデータを処理して、テクスチャデータを記憶するメモリ内の1つ以上のメモリ位置を識別し、テクスチャデータを取得し、テクスチャデータをウェーブフロント412に返す要求である。
【0045】
キャッシュシステム140は、キャッシュアクセス要求が何れのタイプであるかを判別したことに応じて、要求を表すエントリ514を適切なキュー(例えば、読み出しキュー502、書き込みキュー504又はサンプラキュー506)の末尾510に配置する。エントリ514は、ウェーブフロント412に返されるこれらのエントリ514に対するデータ又は書き込み肯定応答によって他のエントリがキューの先頭512から除去されるにつれて、各キューの先頭512に向かって移動する。要求を表すエントリ514が適切なキューにある間、キャッシュシステム140は、要求を満たすように動作する。
【0046】
読み出し要求の場合、キャッシュシステム140は、読み出されるように要求されたデータがキャッシュメモリ404に存在するかどうかを判別する。データがキャッシュメモリ404に存在する場合には、キャッシュシステム140は、対応するエントリ514を「利用可能」としてマークし、エントリ514が読み出しキュー502の先頭512にある場合に、適切なキャッシュリターンをウェーブフロント412に提供できることを示す。データが未だキャッシュメモリ404に存在しない場合には、対応するエントリ514は、利用可能として未だマークされていない。キャッシュシステム140は、階層インタフェース406を介して、キャッシュ階層の他のレベルから適切なデータをフェッチする。フェッチした後に全てのデータがキャッシュメモリ404で利用可能になった場合、キャッシュシステム140は、エントリ514を利用可能としてマークし、エントリ514が読み出しキュー502の先頭512にある場合にデータをウェーブフロント412に返す。
【0047】
サンプラ要求の場合、キャッシュシステム140は、サンプラ要求に対して適切な処理を実行して、サンプラ要求を満たす1つ以上のメモリアドレスを識別する。サンプラ要求のメモリアドレスを識別する処理が完了した後に、キャッシュシステム140は、サンプラ要求のデータがキャッシュメモリ404に存在するかどうかを判別する。データがキャッシュメモリ404に存在する場合には、キャッシュシステム140は、対応するエントリ514を利用可能としてマークする。データがキャッシュメモリ404に存在しない場合には、対応するエントリ514が利用可能としてマークされず、キャッシュシステム140は、階層インタフェース406を介してキャッシュ階層からデータをフェッチする。サンプラ要求のデータがキャッシュメモリ404に存在することに応じて、キャッシュシステム140は、対応するエントリ514を利用可能としてマークする。対応するエントリ514が利用可能であるとマークされ、当該エントリ514がサンプラキュー506の先頭512にある場合、キャッシュシステム140は、サンプラ要求に対するデータをウェーブフロント412に返す。
【0048】
書き込み要求の場合、キャッシュシステム140は、データをメモリシステムに書き込む。具体的には、キャッシュシステム140は、データをキャッシュメモリ404に書き込む。その後、データは、階層インタフェース406を介してキャッシュメモリ階層内の他のメモリに書き込まれる。データが、キャッシュメモリ404、又は、階層インタフェース406を介して到達可能な外部キャッシュメモリ内の1つ以上の他のメモリに書き込まれると(例えば、データが、キャッシュメモリ404からキャッシュ階層の1つ上位のレベルのキャッシュメモリに書き込まれると)、キャッシュシステム140は、書き込まれたデータに対応するエントリ514を利用可能としてマークする。利用可能なエントリ514が書き込みキュー504の先頭512にあることに応じて、キャッシュシステム140は、当該エントリ514を書き込みキュー504から除去し、肯定応答信号をウェーブフロント412に返す。
【0049】
図6は、一例による、リターンオーダリングキュー600を示す図である。リターンオーダリングキュー600は、
図4のリターンオーダリングキュー402の一例である。リターンオーダリングキュー600は、読み出しキュー502と、書き込みキュー504と、サンプラキュー506と、を含む。読み出しキュー502、書き込みキュー504及びサンプラキュー506の各々は、モノリシック(monolithic)メモリ602内の仮想キューとして実装される。「仮想キュー」という用語は、読み出しキュー502、書き込みキュー504及びサンプラキュー506の各々が、モノリシックメモリ602内の固定位置又は長さを有さず、モノリシックメモリ602内の異なるスロット604(「スロット604」という用語は、1つのエントリ514を記憶するように区分されたモノリシックメモリ602の最小単位を指す)で開始又は終了し得ることを意味している。異なるキューが背中合わせに示されているが(例えば、先頭512が、末尾510に隣接するスロット604にある)、キューの先頭512は、他のキューの末尾510に隣接していない場合がある。一例では、読み出しキュー502には、モノリシックメモリ602内の一定数のスロット604が割り当てられているが、読み出しキュー502の先頭512(1)は、割り当てられたスペースの最後まで延びていない。このような例では、読み出しキュー502の先頭512(1)は、書き込みキュー504の末尾510(2)に隣接しないことになる。別の例では、末尾510は、特定のキューの先頭に存在しない。キャッシュシステム140は、必要に応じて各仮想キューのサイズを変更することができ、特定の状況では、1つ以上のキューに対してゼロスロット604を割り当てることができる。一例では、読み出し及びサンプラ操作が互いにオーダリングされ、書き込みが互いにオーダリングされるが、読み出し及びサンプラ操作が書き込みに対してオーダリングされないモードでは、キャッシュシステム140は、2つのキュー(1つは読み出し及びサンプラ操作用、もう1つは書込み用)に対して0より多いスロット604を割り当て、第3キューに対してゼロスロット604を割り当てる。
【0050】
先頭抽出器(head extractor)610は、現在のモードに対してアクティブである各キューの先頭にあるデータを抽出し、当該データを各々の物理キューに配置する。物理読み出しキュー604と、物理書き込みキュー606と、物理サンプラキュー608と、を含む物理キューは、アービタ612が、特定のキューの先頭512を容易に読み出し、キャッシュシステム140の他の部分に提供してウェーブフロント412に返すことを可能にする。例えば、物理キューがない場合、アービタは、先ず、キューの先頭512のアドレスを検索し、次に、当該先頭512に対応するエントリ514内のデータを取得する。先頭抽出器610が各キューの先頭にあるエントリ514を抽出すると、アービタ612は、固定されたメモリ位置(物理キューの先頭)を調べて、次の利用可能なキャッシュメモリアクセスのためのデータを取得する。物理キューは、エントリ614を記憶するための1つ以上のスロット613を含む。物理キュー内のエントリ614は、仮想キュー(例えば、モノリシックメモリ602内の読み出しキュー502、書き込みキュー504及びサンプラキュー506)内のエントリ514と同一又は類似のデータを含む。各物理キューの先頭622は、対応する仮想キュー内の対応する先頭512のエントリ514のデータを有するエントリ614を記憶する。
【0051】
アービタ612は、エントリ614が利用可能としてマークされている場合に、物理キューの先頭622からエントリ614を選択する。異なる物理キューの先頭622にある複数のエントリ614が利用可能であるとマークされている場合には、アービタ612は、技術的に実現可能なアービトレーションスキーム(例えば、ラウンドロビン等)を適用して、ウェーブフロント412へのキャッシュリターンのために、先頭622にあるエントリ614のうち1つのエントリを選択する。
【0052】
アービタ612が物理キューの先頭622からエントリ614を読み出すと、物理キューは他のエントリ614を先頭622に向けて移動させ、先頭抽出器610は、モノリシックメモリ602内の対応する仮想キュー内の対応するスロット604から別のエントリ514を読み出し、先頭抽出器610によって読み出されたエントリ514のデータを含む新たなエントリ614を、適切な物理キュー内の新たに空いたスロットに配置する。
【0053】
図7は、一例による、アクセスタイプ毎のリターンオーダリングキューにキャッシュアクセス要求の指示を記録する方法700のフロー図である。
図1~
図6に関して示し、説明したシステムについて説明するが、技術的に実行可能な任意の順序でこの方法を実行するように構成された何れのシステムも、本発明の範囲に含まれることを理解されたい。
【0054】
図示するように、方法700は、ステップ702で開始し、キャッシュシステム140は、ウェーブフロント412からキャッシュアクセス要求を受信する。キャッシュアクセス要求は、キャッシュシステム140を介してメモリにアクセスするための要求である。ステップ704において、キャッシュシステム140は、キャッシュアクセス要求が読み出しタイプ、書き込みタイプ、テクスチャサンプラタイプのうち何れであるかを判別する。読み出しタイプは、1つ以上の位置からデータを読み出し、当該データを、そのアクセスを行ったウェーブフロント412に返すタイプのアクセスである。書き込みタイプは、データを特定の位置に書き込み、そのアクセスを行ったウェーブフロント412に対して「肯定応答」信号を返すタイプのアクセスである。テクスチャサンプラタイプは、テクスチャ座標と、場合によっては他のテクスチャ関連の入力と、を処理し、テクスチャ座標と、場合によっては他のテクスチャ関連入力と、に基づいて1つ以上のメモリアドレスを識別し、1つ以上のメモリアドレスからデータをフェッチし、オプションでデータを処理して当該データを解凍及び/又はデータをフィルタリング(例えば、バイリニアフィルタリング、トリリニアフィルタリング、異方性フィルタリング)し、フェッチされ処理されたテクスチャデータを、アクセスを行ったウェーブフロント412に提供するタイプのアクセスである。
【0055】
ステップ706において、キャッシュシステム140は、キャッシュアクセス要求の指標を、そのタイプに対応するタイプ毎のリターンオーダリングキューに入れる。例えば、キャッシュアクセス要求が書き込みタイプである場合、キャッシュシステム140は、そのキャッシュアクセス要求の指標を、書き込みタイプに対応するリターンオーダリングキューに入れる。各キューは、キャッシュアクセス要求を受信した順序でキャッシュアクセス要求を保持する。最も古いキャッシュアクセス要求は、キューの先頭にあり、最も新しいキャッシュアクセス要求は、キューの末尾にある。各キューは、キャッシュシステム140に設定されたモードに応じて、1種類、2種類又は3種類の要求をオーダリングすることができる。
【0056】
図8は、一例による、アウトオブオーダキャッシュリターンをワークグループに提供する方法800のフローチャートである。
図1~
図6に関連して示し、説明したシステムについて説明するが、技術的に実行可能な任意の順序でこの方法を実行するように構成された何れのシステムも、本発明の範囲に含まれることを理解されたい。
【0057】
図示するように、方法800は、ステップ802で開始し、キャッシュシステム140は、何れかのタイプ別のオーダリングキューの先頭のエントリを、関連するキャッシュアクセス要求を行ったウェーブフロントに返す準備ができているかどうかを判別する。読み出し又はサンプラ操作によって要求されたデータがキャッシュシステムのキャッシュメモリ404に記憶されている場合には、読み出し又はサンプラ操作の準備ができている。いくつかの例では、書き込みが行われるデータが他のメモリトランザクションに関して適切にオーダリングされていることが保証されていることを示す肯定応答を受信した場合、その時点で他のメモリトランザクションは、その書き込みの効果を「見る」ことができるので、書き込みは準備完了である。他の例では、書き込みが行われるデータがキャッシュ階層内のキャッシュシステム140のキャッシュメモリ404の少なくとも1つ上位のレベルにある1つ以上のメモリに記憶されていることを示す肯定応答を受信した場合、書き込みは準備完了である。
【0058】
ステップ804において、キャッシュシステム140は、ウェーブフロント412に返す準備ができているキューの先頭512にあるエントリ514を選択する。複数のキューが準備のできたエントリ514を有する先頭512を有している場合には、キャッシュシステム140は、エントリ514のうち1つのエントリをリターンのために選択する。この選択は、技術的に実現可能なアービトレーションスキーム(例えば、ラウンドロビン)に基づいて行うことができる。
【0059】
ステップ806において、キャッシュシステム140は、選択されたエントリ514に対応するキャッシュリターンを、キャッシュアクセスを要求したウェーブフロント412に提供する。読み出し及びサンプラ操作の場合、リターンは、要求されたデータである。書き込みの場合、リターンは、肯定応答信号である。ステップ808において、キャッシュシステム140は、選択されたエントリ514を含むキューから選択されたエントリ514を除去し、先頭512が次に古いエントリ514を指すようにキューを変更する。
【0060】
本明細書で説明した技術は、ウェーブフロント412がアクセスタイプ毎にメモリバリア操作を実行することを可能にする。メモリバリア操作は、バリア操作までの全てのメモリ操作についてリターンを受信するまで、ウェーブフロント412をストールさせる操作である。アクセスタイプ毎ベースのキュー及びオーダリングは、ウェーブフロント412がアクセスタイプ毎のバリア命令を実行することを可能にする。例えば、読み出しバリアは、未処理の書き込み操作又はサンプラ操作があるかどうかに関係なく、処理を進める前に、全ての未処理の読み出し操作ののリターンを受信するのをウェーブフロント412に待機させる。同様に、書き込みバリア又はサンプラバリアは、処理を進める前に、全ての未処理の書き込み又は未処理のサンプラを受信するのをウェーブフロント412に待機させる。
【0061】
本明細書で説明した技術は、メモリアクセス要求がタイプ毎にオーダリングされているが、キャッシュアクセスタイプ間でアウトオブオーダでリターンされ得るモードを提供することによって、メモリレイテンシを改善する。したがって、或るタイプ(例えば、読み出し)のキャッシュアクセスは、別のタイプ(例えば、テクスチャサンプラ操作)のキャッシュアクセスを待つ必要がない。このオーダリングの緩和によって、例えば、或るタイプのレイテンシが別のタイプのレイテンシよりも長い場合に、キャッシュアクセスのレイテンシを短縮することができる。一例では、読み出し操作は、比較的短いレイテンシを有し、テクスチャサンプラ操作は、比較的長いレイテンシを有する。キャッシュアクセスが古いテクスチャサンプラ操作のためにリターンする前に、新たな読み出し操作のためのキャッシュリターンを許可することによって、読み出し操作のレイテンシは、新たな読み出し操作が古いテクスチャサンプラ操作を待たなければならない状況と比較して、短縮する。
【0062】
アウトオブオーダキャッシュリターンを実行する方法が提供される。方法は、複数のリターンオーダリングキューのうち第1リターンオーダリングキューの先頭にある第1エントリが、ウェーブフロントへのリターンに利用可能であると判別することであって、第1エントリは、第1キャッシュアクセス要求に対応する、ことを含む。第1リターンオーダリングキューは、第2キャッシュアクセスタイプではなく、第1キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶し、複数のリターンオーダリングキューのうち第2リターンオーダリングキューは、第1キャッシュアクセスタイプではなく、第2キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶する。また、方法は、判別したことに応じて、第1キャッシュアクセス要求よりも古い第2リターンオーダリングキューのエントリに対応するキャッシュアクセス要求がウェーブフロントへのリターンに利用可能になるのを待つことなく、第1エントリに対応するキャッシュリターンをウェーブフロントに送ることを含む。
【0063】
アウトオブオーダキャッシュリターンを実行するための計算ユニットが提供される。計算ユニットは、ウェーブフロントを実行するように構成された単一命令複数データユニットと、キャッシュシステムと、を含む。キャッシュシステムは、第1リターンオーダリングキューと、第2リターンオーダリングキューと、を含む複数のリターンオーダリングキューを記憶することであって、第1リターンオーダリングキューは、第2キャッシュアクセスタイプではなく、第1キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶し、第2リターンオーダリングキューは、第1キャッシュアクセスタイプではなく、第2キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶することと、第1リターンオーダリングキューの先頭にある第1エントリが、ウェーブフロントへのリターンに利用可能であると判別することであって、第1エントリは、第1キャッシュアクセス要求に対応することと、判別したことに応じて、第1キャッシュアクセス要求よりも古い第2リターンオーダリングキューのエントリに対応するキャッシュアクセス要求がウェーブフロントへのリターンに利用可能になるのを待つことなく、第1エントリに対応するキャッシュリターンをウェーブフロントに送ることと、を行うように構成されている。
【0064】
また、コンピュータシステムが提供される。コンピュータシステムは、計算ユニットを含むアクセラレーテッド処理デバイスと、計算ユニット内のウェーブフロントをアクセラレーテッド処理デバイスに実行させるように構成されたプロセッサと、を含む。計算ユニットは、ウェーブフロントを実行するように構成された単一命令複数データユニットと、キャッシュシステムと、を含む。キャッシュシステムは、第1リターンオーダリングキューと、第2リターンオーダリングキューと、を含む複数のリターンオーダリングキューを記憶することであって、第1リターンオーダリングキューは、第2キャッシュアクセスタイプではなく、第1キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶し、第2リターンオーダリングキューは、第1キャッシュアクセスタイプではなく、第2キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶することと、第1リターンオーダリングキューの先頭にある第1エントリが、ウェーブフロントへのリターンに利用可能であると判別することであって、第1エントリは、第1キャッシュアクセス要求に対応することと、判別したことに応じて、第1キャッシュアクセス要求よりも古い第2リターンオーダリングキューのエントリに対応するキャッシュアクセス要求がウェーブフロントへのリターンに利用可能になるのを待つことなく、第1エントリに対応するキャッシュリターンをウェーブフロントに送ることと、を行うように構成されている。
【0065】
本明細書の開示に基づいて多くの変形が可能であることを理解されたい。機能及び要素を特定の組み合わせで上記のように説明されているが、各機能又は要素は、他の機能や要素なしに単独で使用されてもよいし、他の機能や要素を伴って若しくは伴わずに様々な組み合わせで使用されてもよい。
【0066】
提供された方法には、汎用コンピュータ、プロセッサ又はプロセッサコアにおける実施が含まれる。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ(DSP)、複数のマイクロプロセッサ、DSPコアに関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、任意の他のタイプの集積回路(IC)、及び/又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語(HDL)命令、及び、ネットリストを含む他の中間データ(このような命令はコンピュータ可読媒体に記憶され得る)の結果を使用して製造プロセスを構成することによって製造されてもよい。このような処理の結果は、本実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
【0067】
本明細書で提供される方法又はフロー図は、汎用コンピュータ若しくはプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア、ファームウェアにおいて実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、ROM、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、光学媒体(CD-ROMディスク等)、デジタル多用途ディスク(DVD)等が含まれる。