(57)【要約】キャッシュアクセスのリターンをアウトオブオーダにする技術が開示されている。リターンオーダリングキューは、いくつかのキャッシュアクセスタイプ毎に存在し、これらのアクセスが行われた順序で未処理のキャッシュアクセスを記憶する。特定のタイプのキャッシュアクセス要求が当該タイプのリターンオーダリングキューの先頭にあり、キャッシュアクセスが、当該アクセスを行ったウェーブフロントへのリターンに利用可能である場合、キャッシュシステムは、当該キャッシュアクセスをウェーブフロントに返す。したがって、異なるタイプのキャッシュアクセスに対して、キャッシュアクセスをアウトオブオーダで返すことができる。アウトオブオーダリターンを可能にすると、例えば、比較的長いレイテンシのアクセスタイプ（例えば、テクスチャサンプラ操作）の後に比較的短いレイテンシのアクセスタイプ（例えば、読み出し）が発行される状況において、レイテンシを改善するのに効果的となり得る。【選択図】図６
2020513631.tif 000002
【特許請求の範囲】
【請求項１】
アウトオブオーダキャッシュリターンを実行する方法であって、
複数のリターンオーダリングキューのうち第１リターンオーダリングキューの先頭にある第１エントリが、ウェーブフロントへのリターンに利用可能であると判別することであって、前記第１エントリは、第１キャッシュアクセス要求に対応し、前記第１リターンオーダリングキューは、第２キャッシュアクセスタイプではなく、第１キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶し、前記複数のリターンオーダリングキューのうち第２リターンオーダリングキューは、第１キャッシュアクセスタイプではなく、第２キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶する、ことと、
前記判別したことに応じて、前記第１キャッシュアクセス要求よりも古い前記第２リターンオーダリングキューのエントリに対応するキャッシュアクセス要求が前記ウェーブフロントへのリターンに利用可能になるのを待つことなく、前記第１エントリに対応するキャッシュリターンを前記ウェーブフロントに送ることと、を含む、
方法。
【請求項２】
前記第１キャッシュアクセスタイプは、読み出しタイプ、書き込みタイプ、テクスチャサンプラタイプのうち何れかを含み、
前記第２キャッシュアクセスタイプは、前記読み出しタイプ、前記書き込みタイプ、前記テクスチャサンプラタイプのうち何れかを含み、
前記第２キャッシュアクセスタイプは、前記第１キャッシュアクセスタイプと異なる、
請求項１の方法。
【請求項３】
前記読み出しタイプは、メモリシステムに対してデータを要求し、応答としてデータを受信するアクセスタイプを含み、
前記書き込みタイプは、データを前記メモリシステムに書き込み、応答として肯定応答信号を受信するアクセスタイプを含み、
前記テクスチャサンプラタイプは、テクスチャ座標を介してテクスチャデータを要求し、応答として前記テクスチャデータを受信するアクセスタイプを含む、
請求項２の方法。
【請求項４】
前記テクスチャサンプラタイプは、前記テクスチャ座標を１つ以上のメモリアドレスに変換することと、前記１つ以上のメモリアドレスからデータをフェッチすることと、前記フェッチされたデータを解凍することと、前記フェッチされたデータにフィルタリングを適用することと、のうち１つ以上を要求するアクセスタイプを含む、
請求項３の方法。
【請求項５】
前記複数のリターンオーダリングキューのモードを選択することであって、前記モードは、前記複数のリターンオーダリングキュー内のいくつかのリターンオーダリングキューと、前記複数のリターンオーダリングキューの各々に記憶され、オーダリングされる１つ以上のキャッシュアクセスタイプと、を定義する、ことを含む、
請求項１の方法。
【請求項６】
前記複数のリターンオーダリングキューは、モノリシックメモリ内に記憶された仮想キューを含み、前記仮想キューは、前記選択されたモードに適応するようにサイズ変更可能である、
請求項５の方法。
【請求項７】
各仮想キューの先頭から対応する物理キューの先頭にエントリをコピーすることを含み、
前記第１エントリに対応するキャッシュリターンを前記ウェーブフロントに送ることは、
前記第１リターンオーダリングキューに対応する物理キューの先頭からエントリを除去することと、
前記物理キューの次に古いエントリを、前記物理キューの先頭になるように変更することと、
エントリを、前記第１リターンオーダリングキューから、前記第１リターンオーダリングキューに対応する前記物理キューにコピーすることと、を含む、
請求項６の方法。
【請求項８】
前記ウェーブフロントにおいてキャッシュアクセスタイプに基づくバリア命令を実行することを含む、
請求項１の方法。
【請求項９】
前記キャッシュアクセスタイプに基づくバリア命令を実行することは、
特定のキャッシュアクセスタイプの未処理のキャッシュアクセスが完了するまで前記ウェーブフロントをストールさせることを含む、
請求項８の方法。
【請求項１０】
アウトオブオーダキャッシュリターンを実行するための計算ユニットであって、
ウェーブフロントを実行するように構成された単一命令複数データユニットと、
キャッシュシステムと、を備え、
前記キャッシュシステムは、
第１リターンオーダリングキューと、第２リターンオーダリングキューと、を含む複数のリターンオーダリングキューを記憶することであって、前記第１リターンオーダリングキューは、第２キャッシュアクセスタイプではなく、第１キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶し、前記第２リターンオーダリングキューは、第１キャッシュアクセスタイプではなく、第２キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶する、ことと、
前記第１リターンオーダリングキューの先頭にある第１エントリが、前記ウェーブフロントへのリターンに利用可能であると判別することであって、前記第１エントリは、第１キャッシュアクセス要求に対応する、ことと、
前記判別したことに応じて、前記第１キャッシュアクセス要求よりも古い前記第２リターンオーダリングキューのエントリに対応するキャッシュアクセス要求が前記ウェーブフロントへのリターンに利用可能になるのを待つことなく、前記第１エントリに対応するキャッシュリターンを前記ウェーブフロントに送ることと、を行うように構成されている、
計算ユニット。
【請求項１１】
前記第１キャッシュアクセスタイプは、読み出しタイプ、書き込みタイプ、テクスチャサンプラタイプのうち何れかを含み、
前記第２キャッシュアクセスタイプは、前記読み出しタイプ、前記書き込みタイプ、前記テクスチャサンプラタイプのうち何れかを含み、
前記第２キャッシュアクセスタイプは、前記第１キャッシュアクセスタイプと異なる、
請求項１０の計算ユニット。
【請求項１２】
前記読み出しタイプは、メモリシステムに対してデータを要求し、応答としてデータを受信するアクセスタイプを含み、
前記書き込みタイプは、データを前記メモリシステムに書き込み、応答として肯定応答信号を受信するアクセスタイプを含み、
前記テクスチャサンプラタイプは、テクスチャ座標を介してテクスチャデータを要求し、応答として前記テクスチャデータを受信するアクセスタイプを含む、
請求項１１の計算ユニット。
【請求項１３】
前記テクスチャサンプラタイプは、前記テクスチャ座標を１つ以上のメモリアドレスに変換することと、前記１つ以上のメモリアドレスからデータをフェッチすることと、前記フェッチされたデータを解凍することと、前記フェッチされたデータにフィルタリングを適用することと、のうち１つ以上を要求するアクセスタイプを含む、
請求項１２の計算ユニット。
【請求項１４】
前記キャッシュシステムは、
前記複数のリターンオーダリングキューのモードを選択することであって、前記モードは、前記複数のリターンオーダリングキュー内のいくつかのリターンオーダリングキューと、前記複数のリターンオーダリングキューの各々に記憶され、オーダリングされる１つ以上のキャッシュアクセスタイプと、を定義する、ことを行うように構成されている、
請求項１０の計算ユニット。
【請求項１５】
前記複数のリターンオーダリングキューは、モノリシックメモリ内に記憶された仮想キューを含み、前記仮想キューは、前記選択されたモードに適応するようにサイズ変更可能である、
請求項１４の計算ユニット。
【請求項１６】
前記キャッシュシステムは、
各仮想キューの先頭から対応する物理キューの先頭にエントリをコピーすることを行うように構成されており、
前記第１エントリに対応するキャッシュリターンを前記ウェーブフロントに送ることは、
前記第１リターンオーダリングキューに対応する物理キューの先頭からエントリを除去することと、
前記物理キューの次に古いエントリを、前記物理キューの先頭になるように変更することと、
エントリを、前記第１リターンオーダリングキューから、前記第１リターンオーダリングキューに対応する前記物理キューにコピーすることと、を含む、
請求項１５の計算ユニット。
【請求項１７】
前記ウェーブフロントは、
キャッシュアクセスタイプに基づくバリア命令を実行するように構成されている、
請求項１０の計算ユニット。
【請求項１８】
前記ウェーブフロントは、前記キャッシュアクセスタイプに基づくバリア命令を実行することに応じて、特定のキャッシュアクセスタイプの未処理のキャッシュアクセスが完了するまでストールされる、
請求項１７の計算ユニット。
【請求項１９】
計算ユニットを含むアクセラレーテッド処理デバイスと、
前記計算ユニット内のウェーブフロントを前記アクセラレーテッド処理デバイスに実行させるように構成されたプロセッサと、を備え、
前記計算ユニットは、
前記ウェーブフロントを実行するように構成された単一命令複数データユニットと、
キャッシュシステムと、を備え、
前記キャッシュシステムは、
第１リターンオーダリングキューと、第２リターンオーダリングキューと、を含む複数のリターンオーダリングキューを記憶することであって、前記第１リターンオーダリングキューは、第２キャッシュアクセスタイプではなく、第１キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶し、前記第２リターンオーダリングキューは、第１キャッシュアクセスタイプではなく、第２キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶する、ことと、
前記第１リターンオーダリングキューの先頭にある第１エントリが、前記ウェーブフロントへのリターンに利用可能であると判別することであって、前記第１エントリは、第１キャッシュアクセス要求に対応する、ことと、
前記判別したことに応じて、前記第１キャッシュアクセス要求よりも古い前記第２リターンオーダリングキューのエントリに対応するキャッシュアクセス要求が前記ウェーブフロントへのリターンに利用可能になるのを待つことなく、前記第１エントリに対応するキャッシュリターンを前記ウェーブフロントに送ることと、を行うように構成されている、
コンピュータシステム。
【請求項２０】
前記第１キャッシュアクセスタイプは、読み出しタイプ、書き込みタイプ、テクスチャサンプラタイプのうち何れかを含み、
前記第２キャッシュアクセスタイプは、前記読み出しタイプ、前記書き込みタイプ、前記テクスチャサンプラタイプのうち何れかを含み、
前記第２キャッシュアクセスタイプは、前記第１キャッシュアクセスタイプと異なる、
請求項１９のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１６年１２月１３日に出願された米国特許出願第１５／３７７，９９８号の利益を主張するものであり、この内容は参照により本明細書に完全に記載されているものとして援用される。
【０００２】
開示される実施形態は、概して、グラフィックス処理に関し、特に、アウトオブオーダキャッシュリターンに関する。
【背景技術】
【０００３】
３次元グラフィックスをレンダリングするためのハードウェアは高度に並列であり、このハードウェアは、メモリからのデータを要求し、当該データに対して計算を行い、処理されたデータをフレームバッファに提供してスクリーンに出力する多数の個別処理装置を含む。通常、メモリ内のデータにアクセスするには、多くのレイテンシが生じる。このレイテンシを短縮するためにキャッシュシステムが設けられている。しかしながら、レンダリング動作において一般的に処理される大量のデータのために、メモリアクセスレイテンシの更なる改善が望まれる。
【０００４】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解を得ることができる。
【図面の簡単な説明】
【０００５】
【図１】１つ以上の開示された実施形態を実装し得る例示的なデバイスのブロック図である。
【図２】一例による、アクセラレーテッド処理デバイスを示すブロック図である。
【図３】一例による、グラフィックス処理パイプラインを示すブロック図である。
【図４】一例による、キャッシュシステムを示すブロック図である。
【図５】一例による、様々なタイプのキャッシュアクセス要求をオーダリング（ordering）するためのキューを示すブロック図である。
【図６】一例による、リターンオーダリングキューを示す図である。
【図７】一例による、アクセスタイプ毎のリターンオーダリングキューにキャッシュアクセス要求の指示を記録する方法のフロー図である。
【図８】一例による、アウトオブオーダキャッシュリターンをワークグループに提供する方法のフロー図である。
【発明を実施するための形態】
【０００６】
本開示は、キャッシュアクセスのリターンをアウトオブオーダにすることを可能にする技術に関する。より具体的には、複数のキャッシュアクセスタイプ毎にリターンオーダリングキューが存在し、未処理のキャッシュアクセスを、それらのアクセスが行われた順に記憶する。キャッシュアクセスタイプには、読み出しタイプ、書き込みタイプ、テクスチャサンプラタイプが含まれる。特定のタイプのキャッシュアクセス要求が当該タイプのリターンオーダリングキューの先頭にあり、キャッシュアクセスが当該アクセスを行ったウェーブフロント（wavefront）へのリターンに使用可能である場合、キャッシュシステムは、キャッシュアクセスをウェーブフロントに返す。このリターンは、使用可能なキャッシュアクセスを記憶するリターンオーダリングキューに関連するタイプ以外のタイプのキャッシュアクセスの順序（オーダ）とは無関係に行われる。したがって、キャッシュアクセスは、異なるタイプのキャッシュアクセスに対してアウトオブオーダで戻される場合がある。アウトオブオーダリターンを可能にすると、例えば、比較的長いレイテンシのアクセスタイプ（例えば、テクスチャサンプラ操作）の後に比較的短いレイテンシのアクセスタイプ（例えば、読み出し）が発行される状況等において、レイテンシを改善するのに効果的となり得る。
【０００７】
図１は、１つ以上の開示された実施形態を実装し得る例示的なデバイス１００のブロック図である。デバイス１００は、例えば、コンピュータ、ゲーム機、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータ等を含む。デバイス１００は、プロセッサ１０２と、メモリ１０４と、ストレージデバイス１０６と、１つ以上の入力デバイス１０８と、１つ以上の出力デバイス１１０と、を含む。また、デバイス１００は、入力デバイス１０８及び出力デバイス１１０をそれぞれ駆動する入力ドライバ１１２及び出力ドライバ１１４も含む。デバイス１００は、図１に示されていない追加のコンポーネントを含み得ることが理解されるであろう。
【０００８】
プロセッサ１０２は、中央処理装置（ＣＰＵ）、グラフィックス処理装置（ＧＰＵ）、同じダイ上に配置されたＣＰＵ及びＧＰＵ、又は、１つ以上のプロセッサコアを含み、各プロセッサコアは、ＣＰＵ又はＧＰＵであってもよい。メモリ１０４は、プロセッサ１０２と同じダイ上に配置されてもよいし、プロセッサ１０２とは別に配置されてもよい。メモリ１０４は、揮発性又は不揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ、キャッシュ等）を含む。
【０００９】
ストレージデバイス１０６は、固定又は着脱可能なストレージデバイス（例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク若しくはフラッシュドライブ等）を含む。入力デバイス１０８は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリクススキャナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／若しくは受信用の無線ローカルエリアネットワークカード）を含む。出力デバイス１１０は、ディスプレイデバイス、スピーカ、プリンタ、触覚フィードバックデバイス、１つ以上のライト、アンテナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／若しくは受信用の無線ローカルエリアネットワークカード）を含む。
【００１０】
入力ドライバ１１２は、プロセッサ１０２及び入力デバイス１０８と通信し、プロセッサ１０２が入力デバイス１０８から入力を受信するのを可能にする。出力ドライバ１１４は、プロセッサ１０２及び出力デバイス１１０と通信し、プロセッサ１０２が出力デバイス１１０に出力を送信するのを可能にする。出力ドライバ１１４は、ディスプレイデバイス１１８に接続されたアクセラレーテッド処理デバイス（ＡＰＤ）１１６を含む。ＡＰＤ１１６は、プロセッサ１０２から計算コマンド及びグラフィックスレンダリングコマンドを受信し、計算コマンド及びグラフィックスレンダリングコマンドを処理して、表示のためにピクセル出力をディスプレイデバイス１１８に提供するように構成されている。
【００１１】
ＡＰＤ１１６は、単一命令複数データ（ＳＩＭＤ）パラダイムに従って計算を実行するように構成された１つ以上の並列処理装置を含む。しかしながｒ、ＡＰＤ１１６によって実行されるものとして説明した機能は、ＳＩＭＤパラダイムに従ってデータを処理しない処理デバイスによって実行されてもよい。
【００１２】
図２は、一例による、アクセラレーテッド処理デバイス１１６のブロック図である。プロセッサ１０２は、プロセッサ１０２による実行のための１つ以上の制御論理モジュールをシステムメモリ１０４内に保持している。制御論理モジュールは、オペレーティングシステム１２０と、ドライバ１２２と、アプリケーション１２６と、を含む。これらの制御論理モジュールは、プロセッサ１０２及びＡＰＤ１１６の様々な態様の動作を制御する。例えば、オペレーティングシステム１２０は、ハードウェアと直接通信し、プロセッサ１０２で実行中の他のソフトウェア用のハードウェアへのインタフェースを提供する。ドライバ１２２は、例えば、ＡＰＤ１１６の様々な機能にアクセスするために、プロセッサ１０２で実行中のソフトウェア（例えば、アプリケーション１２６）へのアプリケーションプログラミングインタフェース（ＡＰＩ）を提供することによって、ＡＰＤ１１６の動作を制御する。また、ドライバ１２２は、ＡＰＤ１１６の処理コンポーネント（例えば、以下でさらに詳細に説明するＳＩＭＤユニット１３８等）による実行のために、シェーダプログラムをコンパイルするジャストインタイムコンパイラを含む。
【００１３】
ＡＰＤ１１６は、例えばグラフィックス処理及び非グラフィックス処理等のように、並列処理に適し得る選択された機能のためのコマンド及びプログラムを実行する。ＡＰＤ１１６は、例えばピクセル演算、幾何学的計算等のグラフィックスパイプライン処理を実行し、プロセッサ１０２から受信したコマンドに基づいて画像をディスプレイデバイス１１８にレンダリングするために使用することができる。また、ＡＰＤ１１６は、プロセッサ１０２から受信したコマンド、又は、グラフィックス処理パイプライン１３４の「正常な」情報フローの一部ではないコマンドに基づいて、例えばビデオ、物理シミュレーション、計算流体力学又は他のタスクに関係する動作等のようにグラフィックス処理に直接関連しない（若しくは関連していない）計算処理動作を実行する。
【００１４】
ＡＰＤ１１６は、ＳＩＭＤパラダイムに従って、プロセッサ１０２の要求に応じて並列に動作を実行するように構成された１つ以上のＳＩＭＤユニット１３８を有する計算ユニット１３２（本明細書では、まとめて「プログラマブル処理装置２０２」と呼ばれる）を含む。ＳＩＭＤパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有することによって同一のプログラムを実行するが、異なるデータを用いて当該プログラムを実行することができるパラダイムである。一例では、各ＳＩＭＤユニット１３８は、１６個のレーンを含んでおり、各レーンは、ＳＩＭＤユニット１３８内の他のレーンと同時に同じ命令を実行するが、異なるデータを用いて当該命令を実行することができる。全てのレーンが所定の命令を実行する必要がない場合には、レーンを予測によってスイッチオフにすることができる。予測を使用して、分岐制御フローを有するプログラムを実行することもできる。より具体的には、制御フローが個々のレーンによって実行された計算に基づく条件付き分岐又は他の命令を有するプログラムの場合、現在実行されていない制御フローパスに対応するレーンの予測、及び、異なる制御フローパスの連続実行は、任意の制御フローに追従することを可能にする。計算ユニット１３２は、例えばＡＰＤ１１６内のＡＰＤメモリ１３９又はシステムメモリ１０４等のメモリから取得されたデータをキャッシュするキャッシュシステム１４０を含む。
【００１５】
計算ユニット１３２における実行の基本単位は、ワークアイテムである。各ワークアイテムは、特定のレーンで並列に実行されるプログラムの単一のインスタンス化（instantiation）を表す。ワークアイテムは、単一のＳＩＭＤユニット１３８上で「ウェーブフロント」として同時に実行することができる。複数のウェーブフロントは、同じプログラムを実行するように指定されたワークアイテムの集合を含む「ワークグループ」に含まれてもよい。ワークグループを構成するウェーブフロントの各々を実行することによって、ワークグループを実行することができる。ウェーブフロントは、単一のＳＩＭＤユニット１３８上で順次実行されてもよいし、異なるＳＩＭＤユニット１３８上で部分的に又は完全に並列に実行されてもよい。ウェーブフロントは、単一のＳＩＭＤユニット１３８上で同時に実行可能なワークアイテムの最大の集合と考えることができる。したがって、プロセッサ１０２から受信したコマンドが、特定のプログラムが単一のＳＩＭＤユニット１３８上で同時に実行できない程度に並列化されることを示す場合、当該プログラムは、２つ以上のＳＩＭＤユニット１３８で並列化され、又は、同じＳＩＭＤユニット１３８上で直列化（必要に応じて、並列化及び直列化の両方が行われる）されたウェーブフロントに分割される。スケジューラ１３６は、異なる計算ユニット１３２及びＳＩＭＤユニット１３８で様々なウェーブフロントをスケジュールすることに関連する動作を実行するように構成されている。スケジューリングは、ＳＩＭＤユニット１３８上で実行するためのウェーブフロントを割り当てること、ウェーブフロントがいつ終了したかを判別することと、ウェーブフロントがいつストールし、他のウェーブフロントとスワップアウトされるかを判別することと、他のスケジューリングタスクを実行すること、を含む。
【００１６】
計算ユニット１３２によってもたらされる並列性は、例えば、ピクセル値計算、頂点変換及び他のグラフィックス動作等のグラフィックス関連動作に適している。プロセッサ１０２からグラフィックス処理コマンドを受信するグラフィックス処理パイプライン１３４は、並列実行のために計算タスクを計算ユニット１３２に提供する。
【００１７】
また、計算ユニット１３２は、グラフィックスに関連しないか、グラフィックス処理パイプライン１３４の「通常」動作（例えば、グラフィックス処理パイプライン１３４の動作のために実行される処理を補足するのに実行されるカスタム動作）の一部として実行されない計算タスクを実行するために使用される。プロセッサ１０２で実行中のアプリケーション１２６又は他のソフトウェアは、係る計算タスクを定義するプログラム（「計算シェーダプログラム」とよく呼ばれる）を、実行のためにＡＰＤ１１６に送信する。
【００１８】
図３は、図２に示すグラフィックス処理パイプライン１３４の更なる詳細を示すブロック図である。グラフィックス処理パイプライン１３４は、各々が特定の機能を実行するステージを含む。各ステージは、グラフィックス処理パイプライン１３４の機能の小区分を表す。各ステージは、プログラマブル処理装置２０２内で実行されるシェーダプログラムとして部分的若しくは完全に、又は、プログラマブル処理装置２０２の外部の固定機能である非プログラマブルハードウェアとして部分的若しくは完全に実装される。
【００１９】
入力アセンブラステージ３０２は、ユーザが充填したバッファ（例えば、プロセッサ１０２によって実行されるソフトウェア（アプリケーション１２６等）の要求によって充填されたバッファ）からプリミティブデータを読み出し、パイプラインの残りの部分によって使用されるプリミティブに当該データをアセンブルする。入力アセンブラステージ３０２は、ユーザが充填したバッファに含まれるプリミティブデータに基づいて、異なるタイプのプリミティブを生成することができる。入力アセンブラステージ３０２は、残りのパイプラインによって使用されるために、アセンブルされたプリミティブをフォーマットする。
【００２０】
頂点シェーダステージ３０４は、入力アセンブラステージ３０２によってアセンブルされたプリミティブの頂点を処理する。頂点シェーダステージ３０４は、変換、スキニング、モーフィング及び頂点毎のライティング等の様々な頂点毎の操作を実行する。変換操作は、頂点の座標を変換するための様々な操作を含むことができる。これらの操作には、モデリング変換、表示変換、投影変換、パースペクティブ分割及びビューポート変換のうち１つ以上が含まれてもよい。本明細書では、このような変換は、変換が実行される頂点の座標、つまり「位置」を変更するものとみなされる。頂点シェーダステージ３０４の他の操作によって、座標以外の属性が変更されてもよい。
【００２１】
頂点シェーダステージ３０４は、１つ以上の計算ユニット１３２上で実行される頂点シェーダプログラムとして部分的又は完全に実装される。頂点シェーダプログラムは、プロセッサ１０２によって提供され、コンピュータプログラマによって事前に書かれたプログラムに基づいている。ドライバ１２２は、このようなコンピュータプログラムをコンパイルして、計算ユニット１３２内での実行に適したフォーマットを有する頂点シェーダプログラムを生成する。
【００２２】
ハルシェーダステージ３０６、テッセレータステージ３０８及びドメインシェーダステージ３１０は、連携してテッセレーションを実施し、プリミティブを更に分割することによって、単純なプリミティブをより複雑なプリミティブに変換する。ハルシェーダステージ３０６は、入力プリミティブに基づいてテッセレーションのためのパッチを生成する。テッセレータステージ３０８は、パッチのサンプルセットを生成する。ドメインシェーダステージ３１０は、パッチのサンプルに対応する頂点の頂点位置を計算する。ハルシェーダステージ３０６及びドメインシェーダステージ３１０は、プログラマブル処理装置２０２上で実行されるシェーダプログラムとして実装することができる。
【００２３】
ジオメトリシェーダステージ３１２は、プリミティブ毎に頂点操作を実行する。ジオメトリシェーダステージ３１２によって、例えば、ポイントスプライト展開、動的パーティクルシステム操作、ファーフィン（fur-fin）生成、シャドウボリューム生成、キューブマップへのシングルパスレンダリング、プリミティブ毎のマテリアルスワップ、プリミティブ毎のマテリアル設定等の操作を含む、様々な異なるタイプの操作を実行することができる。ジオメトリシェーダステージ３１２の操作は、プログラマブル処理装置２０２上で実行されるシェーダプログラムによって行われてもよい。
【００２４】
ラスタライザステージ３１４は、上流で生成された単純プリミティブを受け入れてラスタライズする。ラスタライズは、特定のプリミティブによってカバーされているスクリーンピクセル（又はサブピクセルサンプル）を判別することから構成されている。ラスタライズは、固定機能ハードウェアによって行われる。
【００２５】
ピクセルシェーダステージ３１６は、上流で生成されたプリミティブとラスタライズの結果とに基づいて、スクリーンピクセルの出力値を計算する。ピクセルシェーダステージ３１６は、テクスチャをテクスチャメモリから適用することができる。ピクセルシェーダステージ３１６の操作は、プログラマブル処理装置２０２上で実行されるシェーダプログラムによって行われる。
【００２６】
出力マージャステージ３１８は、ピクセルシェーダステージ３１６からの出力を受信し、これらの出力を結合（マージ）し、ｚテスト及びアルファブレンディング等の操作を行うことによって、スクリーンピクセルの最終色を決定する。
【００２７】
テクスチャを定義するテクスチャデータは、テクスチャユニット３２０によって記憶及び／又はアクセスされる。テクスチャは、グラフィックス処理パイプライン１３４の様々な時点で使用されるビットマップ画像である。例えば、場合によっては、ピクセルシェーダステージ３１６は、テクスチャをピクセルに適用して、レンダリングされる頂点の数を増やすことなく、見かけ上のレンダリングの複雑さを向上させる（例えば、より「写実的」な外観を提供する）。
【００２８】
場合によっては、頂点シェーダステージ３０４は、テクスチャユニット３２０のテクスチャデータを使用して、例えば、美観を向上させるために頂点を生成又は変更することによって複雑さを高めるように、プリミティブを変更する。一例では、頂点シェーダステージ３０４は、テクスチャユニット３２０に記憶されている高さマップを使用して、頂点の変位を変更する。このタイプの技術は、例えば、水をレンダリングするのに使用される頂点の位置及び数を変更することによって、ピクセルシェーダステージ３１６のみで使われるテクスチャと比較してより現実的に見える水を生成するために使用することができる。場合によっては、ジオメトリシェーダステージ３１２は、テクスチャユニット３２０のテクスチャデータにアクセスする。
【００２９】
図４は、一例による、キャッシュシステム１４０を示す図である。キャッシュシステム１４０は、ＳＩＭＤユニット１３８で実行されているウェーブフロントからキャッシュアクセスの要求を受信し、これらの要求を処理する。これらの要求を処理することの一部は、計算ユニット１３２内のキャッシュシステム１４０の１つ以上のキャッシュメモリ４０４において要求されたデータを検索することを含む。より具体的には、キャッシュシステム１４０は、キャッシュ階層の低レベル（第１レベル等）として機能する１つ以上のキャッシュメモリ４０４を有する。ウェーブフロント４１２によってアクセス要求されたデータがキャッシュメモリ４０４に存在しない場合、キャッシュシステム１４０は、要求されたデータにアクセスするために、階層インタフェース４０６を介して、キャッシュ階層内の他のメモリ（例えば、より高レベルのキャッシュメモリ、ＡＰＤメモリ１３９、及び／又は、システムメモリ１０４）にアクセスする。
【００３０】
いくつかの例では、キャッシュアクセスの要求は、ベクトルベースの要求である。ベクトルベースの要求は、ＳＩＭＤユニット１３８での並列化された操作に従って、複数のメモリ位置からデータを要求する能力を有する。例えば、各ワークアイテムが異なるアドレスを指定する、単一のウェーブフロント内の異なるワークアイテムによって実行されるロード命令等の単一の命令は、メモリ内の複数の位置からの読み出しをもたらし得る。ベクトルベースの要求は、通常、データを単一のメモリ位置に読み書きするスカラ要求とは対照的である。
【００３１】
キャッシュシステム１４０内のリターンオーダリングキュー４０２は、完了したキャッシュアクセスが順番にウェーブフロント４１２に返されるように、完了したキャッシュアクセスをオーダリングする。アクセスを順番に返すことは、これらのアクセスが行われた順番で、アクセスを行ったウェーブフロント４１２に対してリターンデータを提供することを意味する。いくつかの例では、キャッシュシステム１４０は、ウェーブフロント毎にキャッシュアクセス要求をオーダリングする。これは、特定のウェーブフロントによって行われたキャッシュアクセス要求の指標が、これらの要求を行った順序でウェーブフロント４１２が記憶されるが、異なるウェーブフロント４１２によって行われたキャッシュアクセス要求の順序が保持されないことを意味する。キャッシュアクセス要求のウェーブフロント毎のオーダリングを達成するために、各ウェーブフロント４１２は、キューメモリ空間の独自のセットに割り当てられて、キャッシュアクセス要求の順序を保持することができる。
【００３２】
リターンオーダリングキュー４０２は、各キャッシュアクセスの識別子を記憶し、この識別子は、ウェーブフロント４１２によって各キャッシュアクセスが行われた順序で記憶される。新たなエントリ、すなわち、ウェーブフロント４１２からの最新のキャッシュアクセス要求に対応するエントリは、リターンオーダリングキュー４０２の末尾に提供される。リターンオーダリングキューの先頭には、最も古い未処理のキャッシュアクセス要求、したがって、返される次のキャッシュアクセスの識別情報が記憶されている。リターンオーダリングキュー４０２の先頭におけるアクセスに対するデータが、キャッシュメモリ４０４において利用可能である場合（例えば、データの少なくとも一部が、より高レベルのキャッシュメモリ、システムメモリ１０４又はＡＰＤメモリ１３９からキャッシュメモリ４０４にフェッチされている場合）、キャッシュシステム１４０は、当該データを要求元のウェーブフロント４１２に提供する。
【００３３】
キャッシュリターンをオーダリングするための１つの技術は、キャッシュリターンの「タイプ」に関係なく、全てのキャッシュリターンをオーダリングすることを含む。本明細書において、キャッシュリターンの「タイプ」（これは、キャッシュアクセス要求のタイプでもある）は、読み出しタイプ、書き込みタイプ、テクスチャサンプラタイプの何れかである。読み出しタイプアクセスは、メモリからのデータを要求し、要求されたデータがメモリから返されるアクセスである。読み出しタイプのアクセスでは、仮想アドレス又は物理アドレスによってメモリ位置が指定され、サンプラ操作とは異なり、テクスチャ座標が指定されない。読み出しタイプのアクセスに対するリターンは、要求されたデータを、当該データを要求したウェーブフロント４１２に返すこと（例えば、要求されたデータを、ウェーブフロント４１２を実行するＳＩＭＤユニット１３８のレジスタに配置することによって、ＳＩＭＤユニット１３８が当該データに依存する命令を実行できるようにすること）を意味する。読み出しタイプのアクセスの場合、リターンデータは、読み出しタイプのアクセス要求によって要求されたデータである。
【００３４】
書き込みタイプのアクセスに対するリターンは、書き込みを要求したウェーブフロント４１２を実行するＳＩＭＤユニット１３８に対して、「肯定応答」信号を返すことを意味する。「肯定応答」信号は、書き込みを要求したＳＩＭＤユニット１３８に対して、要求された書き込みがメモリシステムによって承認されたことを示す信号である。ＳＩＭＤユニット１３８は、「肯定応答」信号を受信すると、「肯定応答」信号に依存する動作を進めることができるようになる。書き込みタイプのアクセスの場合、リターンデータは、「肯定応答」信号である。
【００３５】
他の操作と同様に、（読み出し変更書き込み（read-modify-write）操作等の複雑な操作であってもよい）アトミック操作は、操作の完了に応じて返された信号のタイプに基づいて、読み出し又は書き込みとして分類される。より具体的には、データをウェーブフロントに返すアトミック操作は、読み出し操作として分類される。肯定応答信号をウェーブフロントに返すアトミック操作は、書き込み操作として分類される。
【００３６】
テクスチャサンプラタイプのメモリ操作は、テクスチャデータの要求を受信することと、当該要求に対して処理を実行して、実際に必要とされる記憶データを判別することと、当該記憶データをフェッチすることと、任意に記憶データを解凍及び／又はフィルタリングして、ピクセル値又はサンプル値を取得することと、データを要求したウェーブフロント４１２を実行するＳＩＭＤユニット１３８に対してピクセル値又はサンプル値を返すことと、を含む複雑な操作である。テクスチャサンプラタイプのアクセスに対するリターンは、データを要求したウェーブフロント４１２を実行するＳＩＭＤユニット１３８に対して、要求されたデータを返すことを意味する。テクスチャサンプラタイプのアクセスの場合、リターンデータは、要求元のＳＩＭＤユニット１３８に返されるピクセル値又はサンプル値である。
【００３７】
テクスチャサンプラ操作には多数の操作が含まれるため、レイテンシが長くなる。例えば、テクスチャサンプルアクセスの要求は、通常、データが望まれるテクスチャビットマップ内の位置を識別するテクスチャ座標（ｕ，ｖ，ｗ）を含む。また、テクスチャサンプルアクセスの要求は、スクリーン座標の変化率と比較してテクスチャ座標の変化率を指定する１つ以上の勾配値を含んでもよく、他のデータ（例えば、ミップマップレベルを識別するデータ、キューブマップ面を識別するデータ又は他のデータ等）を含んでもよい。キャッシュシステム１４０のテクスチャユニット４０８は、このデータに基づいて、要求されたデータが見つかるアドレスを識別し、メモリシステムから当該データをフェッチし（計算ユニット１３２内のキャッシュシステム１４０のキャッシュメモリ４０４にヒットするか、キャッシュメモリ４０４において欠落していことを検出し、欠落しているデータをキャッシュ階層内の他のメモリからキャッシュメモリ４０４にフェッチすることを含んでもよい）、テクスチャデータが圧縮されていることがあるので、オプションでデータを解凍し、オプションでフィルタリングスキーム（例えば、バイリニアフィルタリング、トリリニアフィルタリング、異方性フィルタリング）に従ってデータを処理し、テクスチャサンプラキャッシュアクセス要求を行ったウェーブフロント４１２を実行するＳＩＭＤユニット１３８に対してデータを送る。これらの操作は、何百ものコンピュータクロックサイクルを必要とする可能性があり、これは長いレイテンシ（ここで、レイテンシとは、ＳＩＭＤユニット１３８がテクスチャサンプリング操作の実行を要求してから、テクスチャサンプリング操作によって得られたデータがＳＩＭＤユニット１３８に提供されるまでの時間である）を表す。
【００３８】
読み出し操作又は書き込み操作と比較してサンプラ操作のレイテンシが長いので、キャッシュリターンをオーダリングするための他のモードが本明細書で提供される。このような他のモードでは、全てのタイプのキャッシュリターンをオーダリングする単一のキューの代わりに、リターンオーダリングキュー４０２が、異なるタイプのキャッシュリターンの順序を保持する２つ以上の個別のキューを含む。いくつかのモードが可能である。異なるモード間の選択は、プロセッサ１０２からの要求、ＳＩＭＤユニット１３８内で実行される命令、ＡＰＤ１１６内で実行されるファームウェアによって行われるアルゴリズム的判別に応じて、又は、任意の他の技術的に実現可能なメカニズムに応じて行われ得る。
【００３９】
或るモードでは、「サンプラ」、「読み出し」、及び、「書き込み」のタイプのキャッシュアクセス要求毎にキューが保持される。各キューは、各々のタイプのキャッシュアクセスの指標を記憶する。例えば、サンプラキューは、アクセスが行われた順で、サンプラタイプのキャッシュアクセスのアクセス指標を保持するが、読み出しタイプ又は書き込みタイプのキャッシュアクセスのアクセス指標を保持しない。同様に、読み出しキューは、読み出しタイプのキャッシュアクセスの順序付きの指標を保持するが、書き込みタイプ又はサンプラタイプのキャッシュアクセスの順序付きの指標を保持せず、書き込みキューは、書き込みタイプのキャッシュアクセスの順序付きの指標を保持するが、読み出しタイプ又はサンプラタイプのキャッシュアクセスの順序付きの指標を保持しない。
【００４０】
各キューは、先頭と末尾とを有する。先頭は、そのキューに対応するタイプの最も古いキャッシュアクセス要求を表し、末尾は、そのキューに対応するタイプの最も新しいキャッシュアクセス要求を表す。特定のキューの先頭にあるキャッシュアクセス要求の全てのデータがキャッシュメモリ４０４に記憶されることによって「利用可能」になると、キャッシュシステム１４０は、当該データを更なる処理のためにＳＩＭＤユニット１３８に返す。複数キューの先頭にあるキャッシュアクセスが利用可能な場合には、キャッシュシステム１４０は、技術的に実現可能なアービトレーションスキーム（例えば、ラウンドロビン）に従って、異なるキューの先頭のキャッシュアクセスが互いに発行された順序に関係なく、何れかのキューの先頭にある利用可能なキャッシュアクセスを選択することができる。
【００４１】
別のモードでは、サンプラ操作及び読み出し操作を指示する１つのキューが保持され、書き込み操作を指示する別のキューが保持される。つまり、第１キューは、「読み出し」タイプのキャッシュアクセス要求と「サンプラ」タイプのキャッシュアクセスとの両方の指示を、これらのアクセス要求がウェーブフロントから受信された順序で記憶し、第２キューは、「書き込み」タイプのキャッシュアクセスの指示を、これらのアクセス要求がウェーブフロントから受信された順序で記憶する。したがって、読み出しタイプのキャッシュアクセスとサンプラタイプのキャッシュアクセスとは、互いに順序付けられているが、書き込みタイプのキャッシュアクセスについては順序付けられていない。書き込みタイプのキャッシュアクセスは、互いに順序付けられているが、読み出しタイプのキャッシュアクセス又はサンプラタイプのキャッシュアクセスについては順序付けられていない。
【００４２】
読み出し及び書き込みをオーダリングするキューと、サンプラ操作をオーダリングする別のキューとを有する１つのモードや、書き込み及びサンプラ操作をオーダリングするキューと、読み出しをオーダリングする別のキューとを有する別のモード等の他のモードも可能である。
【００４３】
図５は、一例による、様々なタイプのキャッシュアクセス要求をオーダリングするためのキューを示すブロック図である。キューは、読み出しタイプのキャッシュアクセス要求を表すエントリ５１４を、これらの要求がウェーブフロント４１２によって行われる順序で記憶する読み出しキュー５０２と、書き込みタイプのキャッシュアクセス要求を表すエントリ５１４を、これらの要求がウェーブフロント４１２によって行われる順序で記憶する書き込みキューと、サンプラタイプのキャッシュアクセス要求を表すエントリ５１４を、これらの要求がウェーブフロント４１２によって行われる順序で記憶するサンプラキュー５０６と、を含む。各エントリ５１４は、１つ以上のキャッシュアクセス要求に関するデータを記憶することができる。
【００４４】
動作中、ウェーブフロント４１２は、キャッシュアクセス要求を含み得るシェーダプログラムの一部として実行される。このような要求が行われると、キャッシュシステム１４０は、当該要求を検出し、当該要求が読み出しタイプの要求であるか、書き込みタイプの要求であるか、又は、サンプラタイプの要求であるかを判別する。読み出しタイプ要求は、メモリからウェーブフロント４１２にデータを返すサンプラタイプ要求以外の要求である。書き込みタイプ要求は、データをメモリに記憶し、肯定応答信号をウェーブフロント４１２に返すが、メモリからウェーブフロント４１２にデータを返さない要求である。サンプラタイプ要求は、少なくともテクスチャ座標を受信し、当該座標及び他のデータを処理して、テクスチャデータを記憶するメモリ内の１つ以上のメモリ位置を識別し、テクスチャデータを取得し、テクスチャデータをウェーブフロント４１２に返す要求である。
【００４５】
キャッシュシステム１４０は、キャッシュアクセス要求が何れのタイプであるかを判別したことに応じて、要求を表すエントリ５１４を適切なキュー（例えば、読み出しキュー５０２、書き込みキュー５０４又はサンプラキュー５０６）の末尾５１０に配置する。エントリ５１４は、ウェーブフロント４１２に返されるこれらのエントリ５１４に対するデータ又は書き込み肯定応答によって他のエントリがキューの先頭５１２から除去されるにつれて、各キューの先頭５１２に向かって移動する。要求を表すエントリ５１４が適切なキューにある間、キャッシュシステム１４０は、要求を満たすように動作する。
【００４６】
読み出し要求の場合、キャッシュシステム１４０は、読み出されるように要求されたデータがキャッシュメモリ４０４に存在するかどうかを判別する。データがキャッシュメモリ４０４に存在する場合には、キャッシュシステム１４０は、対応するエントリ５１４を「利用可能」としてマークし、エントリ５１４が読み出しキュー５０２の先頭５１２にある場合に、適切なキャッシュリターンをウェーブフロント４１２に提供できることを示す。データが未だキャッシュメモリ４０４に存在しない場合には、対応するエントリ５１４は、利用可能として未だマークされていない。キャッシュシステム１４０は、階層インタフェース４０６を介して、キャッシュ階層の他のレベルから適切なデータをフェッチする。フェッチした後に全てのデータがキャッシュメモリ４０４で利用可能になった場合、キャッシュシステム１４０は、エントリ５１４を利用可能としてマークし、エントリ５１４が読み出しキュー５０２の先頭５１２にある場合にデータをウェーブフロント４１２に返す。
【００４７】
サンプラ要求の場合、キャッシュシステム１４０は、サンプラ要求に対して適切な処理を実行して、サンプラ要求を満たす１つ以上のメモリアドレスを識別する。サンプラ要求のメモリアドレスを識別する処理が完了した後に、キャッシュシステム１４０は、サンプラ要求のデータがキャッシュメモリ４０４に存在するかどうかを判別する。データがキャッシュメモリ４０４に存在する場合には、キャッシュシステム１４０は、対応するエントリ５１４を利用可能としてマークする。データがキャッシュメモリ４０４に存在しない場合には、対応するエントリ５１４が利用可能としてマークされず、キャッシュシステム１４０は、階層インタフェース４０６を介してキャッシュ階層からデータをフェッチする。サンプラ要求のデータがキャッシュメモリ４０４に存在することに応じて、キャッシュシステム１４０は、対応するエントリ５１４を利用可能としてマークする。対応するエントリ５１４が利用可能であるとマークされ、当該エントリ５１４がサンプラキュー５０６の先頭５１２にある場合、キャッシュシステム１４０は、サンプラ要求に対するデータをウェーブフロント４１２に返す。
【００４８】
書き込み要求の場合、キャッシュシステム１４０は、データをメモリシステムに書き込む。具体的には、キャッシュシステム１４０は、データをキャッシュメモリ４０４に書き込む。その後、データは、階層インタフェース４０６を介してキャッシュメモリ階層内の他のメモリに書き込まれる。データが、キャッシュメモリ４０４、又は、階層インタフェース４０６を介して到達可能な外部キャッシュメモリ内の１つ以上の他のメモリに書き込まれると（例えば、データが、キャッシュメモリ４０４からキャッシュ階層の１つ上位のレベルのキャッシュメモリに書き込まれると）、キャッシュシステム１４０は、書き込まれたデータに対応するエントリ５１４を利用可能としてマークする。利用可能なエントリ５１４が書き込みキュー５０４の先頭５１２にあることに応じて、キャッシュシステム１４０は、当該エントリ５１４を書き込みキュー５０４から除去し、肯定応答信号をウェーブフロント４１２に返す。
【００４９】
図６は、一例による、リターンオーダリングキュー６００を示す図である。リターンオーダリングキュー６００は、図４のリターンオーダリングキュー４０２の一例である。リターンオーダリングキュー６００は、読み出しキュー５０２と、書き込みキュー５０４と、サンプラキュー５０６と、を含む。読み出しキュー５０２、書き込みキュー５０４及びサンプラキュー５０６の各々は、モノリシック（monolithic）メモリ６０２内の仮想キューとして実装される。「仮想キュー」という用語は、読み出しキュー５０２、書き込みキュー５０４及びサンプラキュー５０６の各々が、モノリシックメモリ６０２内の固定位置又は長さを有さず、モノリシックメモリ６０２内の異なるスロット６０４（「スロット６０４」という用語は、１つのエントリ５１４を記憶するように区分されたモノリシックメモリ６０２の最小単位を指す）で開始又は終了し得ることを意味している。異なるキューが背中合わせに示されているが（例えば、先頭５１２が、末尾５１０に隣接するスロット６０４にある）、キューの先頭５１２は、他のキューの末尾５１０に隣接していない場合がある。一例では、読み出しキュー５０２には、モノリシックメモリ６０２内の一定数のスロット６０４が割り当てられているが、読み出しキュー５０２の先頭５１２（１）は、割り当てられたスペースの最後まで延びていない。このような例では、読み出しキュー５０２の先頭５１２（１）は、書き込みキュー５０４の末尾５１０（２）に隣接しないことになる。別の例では、末尾５１０は、特定のキューの先頭に存在しない。キャッシュシステム１４０は、必要に応じて各仮想キューのサイズを変更することができ、特定の状況では、１つ以上のキューに対してゼロスロット６０４を割り当てることができる。一例では、読み出し及びサンプラ操作が互いにオーダリングされ、書き込みが互いにオーダリングされるが、読み出し及びサンプラ操作が書き込みに対してオーダリングされないモードでは、キャッシュシステム１４０は、２つのキュー（１つは読み出し及びサンプラ操作用、もう１つは書込み用）に対して０より多いスロット６０４を割り当て、第３キューに対してゼロスロット６０４を割り当てる。
【００５０】
先頭抽出器（head extractor）６１０は、現在のモードに対してアクティブである各キューの先頭にあるデータを抽出し、当該データを各々の物理キューに配置する。物理読み出しキュー６０４と、物理書き込みキュー６０６と、物理サンプラキュー６０８と、を含む物理キューは、アービタ６１２が、特定のキューの先頭５１２を容易に読み出し、キャッシュシステム１４０の他の部分に提供してウェーブフロント４１２に返すことを可能にする。例えば、物理キューがない場合、アービタは、先ず、キューの先頭５１２のアドレスを検索し、次に、当該先頭５１２に対応するエントリ５１４内のデータを取得する。先頭抽出器６１０が各キューの先頭にあるエントリ５１４を抽出すると、アービタ６１２は、固定されたメモリ位置（物理キューの先頭）を調べて、次の利用可能なキャッシュメモリアクセスのためのデータを取得する。物理キューは、エントリ６１４を記憶するための１つ以上のスロット６１３を含む。物理キュー内のエントリ６１４は、仮想キュー（例えば、モノリシックメモリ６０２内の読み出しキュー５０２、書き込みキュー５０４及びサンプラキュー５０６）内のエントリ５１４と同一又は類似のデータを含む。各物理キューの先頭６２２は、対応する仮想キュー内の対応する先頭５１２のエントリ５１４のデータを有するエントリ６１４を記憶する。
【００５１】
アービタ６１２は、エントリ６１４が利用可能としてマークされている場合に、物理キューの先頭６２２からエントリ６１４を選択する。異なる物理キューの先頭６２２にある複数のエントリ６１４が利用可能であるとマークされている場合には、アービタ６１２は、技術的に実現可能なアービトレーションスキーム（例えば、ラウンドロビン等）を適用して、ウェーブフロント４１２へのキャッシュリターンのために、先頭６２２にあるエントリ６１４のうち１つのエントリを選択する。
【００５２】
アービタ６１２が物理キューの先頭６２２からエントリ６１４を読み出すと、物理キューは他のエントリ６１４を先頭６２２に向けて移動させ、先頭抽出器６１０は、モノリシックメモリ６０２内の対応する仮想キュー内の対応するスロット６０４から別のエントリ５１４を読み出し、先頭抽出器６１０によって読み出されたエントリ５１４のデータを含む新たなエントリ６１４を、適切な物理キュー内の新たに空いたスロットに配置する。
【００５３】
図７は、一例による、アクセスタイプ毎のリターンオーダリングキューにキャッシュアクセス要求の指示を記録する方法７００のフロー図である。図１〜図６に関して示し、説明したシステムについて説明するが、技術的に実行可能な任意の順序でこの方法を実行するように構成された何れのシステムも、本発明の範囲に含まれることを理解されたい。
【００５４】
図示するように、方法７００は、ステップ７０２で開始し、キャッシュシステム１４０は、ウェーブフロント４１２からキャッシュアクセス要求を受信する。キャッシュアクセス要求は、キャッシュシステム１４０を介してメモリにアクセスするための要求である。ステップ７０４において、キャッシュシステム１４０は、キャッシュアクセス要求が読み出しタイプ、書き込みタイプ、テクスチャサンプラタイプのうち何れであるかを判別する。読み出しタイプは、１つ以上の位置からデータを読み出し、当該データを、そのアクセスを行ったウェーブフロント４１２に返すタイプのアクセスである。書き込みタイプは、データを特定の位置に書き込み、そのアクセスを行ったウェーブフロント４１２に対して「肯定応答」信号を返すタイプのアクセスである。テクスチャサンプラタイプは、テクスチャ座標と、場合によっては他のテクスチャ関連の入力と、を処理し、テクスチャ座標と、場合によっては他のテクスチャ関連入力と、に基づいて１つ以上のメモリアドレスを識別し、１つ以上のメモリアドレスからデータをフェッチし、オプションでデータを処理して当該データを解凍及び／又はデータをフィルタリング（例えば、バイリニアフィルタリング、トリリニアフィルタリング、異方性フィルタリング）し、フェッチされ処理されたテクスチャデータを、アクセスを行ったウェーブフロント４１２に提供するタイプのアクセスである。
【００５５】
ステップ７０６において、キャッシュシステム１４０は、キャッシュアクセス要求の指標を、そのタイプに対応するタイプ毎のリターンオーダリングキューに入れる。例えば、キャッシュアクセス要求が書き込みタイプである場合、キャッシュシステム１４０は、そのキャッシュアクセス要求の指標を、書き込みタイプに対応するリターンオーダリングキューに入れる。各キューは、キャッシュアクセス要求を受信した順序でキャッシュアクセス要求を保持する。最も古いキャッシュアクセス要求は、キューの先頭にあり、最も新しいキャッシュアクセス要求は、キューの末尾にある。各キューは、キャッシュシステム１４０に設定されたモードに応じて、１種類、２種類又は３種類の要求をオーダリングすることができる。
【００５６】
図８は、一例による、アウトオブオーダキャッシュリターンをワークグループに提供する方法８００のフローチャートである。図１〜図６に関連して示し、説明したシステムについて説明するが、技術的に実行可能な任意の順序でこの方法を実行するように構成された何れのシステムも、本発明の範囲に含まれることを理解されたい。
【００５７】
図示するように、方法８００は、ステップ８０２で開始し、キャッシュシステム１４０は、何れかのタイプ別のオーダリングキューの先頭のエントリを、関連するキャッシュアクセス要求を行ったウェーブフロントに返す準備ができているかどうかを判別する。読み出し又はサンプラ操作によって要求されたデータがキャッシュシステムのキャッシュメモリ４０４に記憶されている場合には、読み出し又はサンプラ操作の準備ができている。いくつかの例では、書き込みが行われるデータが他のメモリトランザクションに関して適切にオーダリングされていることが保証されていることを示す肯定応答を受信した場合、その時点で他のメモリトランザクションは、その書き込みの効果を「見る」ことができるので、書き込みは準備完了である。他の例では、書き込みが行われるデータがキャッシュ階層内のキャッシュシステム１４０のキャッシュメモリ４０４の少なくとも１つ上位のレベルにある１つ以上のメモリに記憶されていることを示す肯定応答を受信した場合、書き込みは準備完了である。
【００５８】
ステップ８０４において、キャッシュシステム１４０は、ウェーブフロント４１２に返す準備ができているキューの先頭５１２にあるエントリ５１４を選択する。複数のキューが準備のできたエントリ５１４を有する先頭５１２を有している場合には、キャッシュシステム１４０は、エントリ５１４のうち１つのエントリをリターンのために選択する。この選択は、技術的に実現可能なアービトレーションスキーム（例えば、ラウンドロビン）に基づいて行うことができる。
【００５９】
ステップ８０６において、キャッシュシステム１４０は、選択されたエントリ５１４に対応するキャッシュリターンを、キャッシュアクセスを要求したウェーブフロント４１２に提供する。読み出し及びサンプラ操作の場合、リターンは、要求されたデータである。書き込みの場合、リターンは、肯定応答信号である。ステップ８０８において、キャッシュシステム１４０は、選択されたエントリ５１４を含むキューから選択されたエントリ５１４を除去し、先頭５１２が次に古いエントリ５１４を指すようにキューを変更する。
【００６０】
本明細書で説明した技術は、ウェーブフロント４１２がアクセスタイプ毎にメモリバリア操作を実行することを可能にする。メモリバリア操作は、バリア操作までの全てのメモリ操作についてリターンを受信するまで、ウェーブフロント４１２をストールさせる操作である。アクセスタイプ毎ベースのキュー及びオーダリングは、ウェーブフロント４１２がアクセスタイプ毎のバリア命令を実行することを可能にする。例えば、読み出しバリアは、未処理の書き込み操作又はサンプラ操作があるかどうかに関係なく、処理を進める前に、全ての未処理の読み出し操作ののリターンを受信するのをウェーブフロント４１２に待機させる。同様に、書き込みバリア又はサンプラバリアは、処理を進める前に、全ての未処理の書き込み又は未処理のサンプラを受信するのをウェーブフロント４１２に待機させる。
【００６１】
本明細書で説明した技術は、メモリアクセス要求がタイプ毎にオーダリングされているが、キャッシュアクセスタイプ間でアウトオブオーダでリターンされ得るモードを提供することによって、メモリレイテンシを改善する。したがって、或るタイプ（例えば、読み出し）のキャッシュアクセスは、別のタイプ（例えば、テクスチャサンプラ操作）のキャッシュアクセスを待つ必要がない。このオーダリングの緩和によって、例えば、或るタイプのレイテンシが別のタイプのレイテンシよりも長い場合に、キャッシュアクセスのレイテンシを短縮することができる。一例では、読み出し操作は、比較的短いレイテンシを有し、テクスチャサンプラ操作は、比較的長いレイテンシを有する。キャッシュアクセスが古いテクスチャサンプラ操作のためにリターンする前に、新たな読み出し操作のためのキャッシュリターンを許可することによって、読み出し操作のレイテンシは、新たな読み出し操作が古いテクスチャサンプラ操作を待たなければならない状況と比較して、短縮する。
【００６２】
アウトオブオーダキャッシュリターンを実行する方法が提供される。方法は、複数のリターンオーダリングキューのうち第１リターンオーダリングキューの先頭にある第１エントリが、ウェーブフロントへのリターンに利用可能であると判別することであって、第１エントリは、第１キャッシュアクセス要求に対応する、ことを含む。第１リターンオーダリングキューは、第２キャッシュアクセスタイプではなく、第１キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶し、複数のリターンオーダリングキューのうち第２リターンオーダリングキューは、第１キャッシュアクセスタイプではなく、第２キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶する。また、方法は、判別したことに応じて、第１キャッシュアクセス要求よりも古い第２リターンオーダリングキューのエントリに対応するキャッシュアクセス要求がウェーブフロントへのリターンに利用可能になるのを待つことなく、第１エントリに対応するキャッシュリターンをウェーブフロントに送ることを含む。
【００６３】
アウトオブオーダキャッシュリターンを実行するための計算ユニットが提供される。計算ユニットは、ウェーブフロントを実行するように構成された単一命令複数データユニットと、キャッシュシステムと、を含む。キャッシュシステムは、第１リターンオーダリングキューと、第２リターンオーダリングキューと、を含む複数のリターンオーダリングキューを記憶することであって、第１リターンオーダリングキューは、第２キャッシュアクセスタイプではなく、第１キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶し、第２リターンオーダリングキューは、第１キャッシュアクセスタイプではなく、第２キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶することと、第１リターンオーダリングキューの先頭にある第１エントリが、ウェーブフロントへのリターンに利用可能であると判別することであって、第１エントリは、第１キャッシュアクセス要求に対応することと、判別したことに応じて、第１キャッシュアクセス要求よりも古い第２リターンオーダリングキューのエントリに対応するキャッシュアクセス要求がウェーブフロントへのリターンに利用可能になるのを待つことなく、第１エントリに対応するキャッシュリターンをウェーブフロントに送ることと、を行うように構成されている。
【００６４】
また、コンピュータシステムが提供される。コンピュータシステムは、計算ユニットを含むアクセラレーテッド処理デバイスと、計算ユニット内のウェーブフロントをアクセラレーテッド処理デバイスに実行させるように構成されたプロセッサと、を含む。計算ユニットは、ウェーブフロントを実行するように構成された単一命令複数データユニットと、キャッシュシステムと、を含む。キャッシュシステムは、第１リターンオーダリングキューと、第２リターンオーダリングキューと、を含む複数のリターンオーダリングキューを記憶することであって、第１リターンオーダリングキューは、第２キャッシュアクセスタイプではなく、第１キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶し、第２リターンオーダリングキューは、第１キャッシュアクセスタイプではなく、第２キャッシュアクセスタイプのキャッシュアクセス要求のエントリを記憶することと、第１リターンオーダリングキューの先頭にある第１エントリが、ウェーブフロントへのリターンに利用可能であると判別することであって、第１エントリは、第１キャッシュアクセス要求に対応することと、判別したことに応じて、第１キャッシュアクセス要求よりも古い第２リターンオーダリングキューのエントリに対応するキャッシュアクセス要求がウェーブフロントへのリターンに利用可能になるのを待つことなく、第１エントリに対応するキャッシュリターンをウェーブフロントに送ることと、を行うように構成されている。
【００６５】
本明細書の開示に基づいて多くの変形が可能であることを理解されたい。機能及び要素を特定の組み合わせで上記のように説明されているが、各機能又は要素は、他の機能や要素なしに単独で使用されてもよいし、他の機能や要素を伴って若しくは伴わずに様々な組み合わせで使用されてもよい。
【００６６】
提供された方法には、汎用コンピュータ、プロセッサ又はプロセッサコアにおける実施が含まれる。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアに関連する１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路、任意の他のタイプの集積回路（ＩＣ）、及び／又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語（ＨＤＬ）命令、及び、ネットリストを含む他の中間データ（このような命令はコンピュータ可読媒体に記憶され得る）の結果を使用して製造プロセスを構成することによって製造されてもよい。このような処理の結果は、本実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
【００６７】
本明細書で提供される方法又はフロー図は、汎用コンピュータ若しくはプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア、ファームウェアにおいて実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、ＲＯＭ、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、光学媒体（ＣＤ−ＲＯＭディスク等）、デジタル多用途ディスク（ＤＶＤ）等が含まれる。
【図１】
2020513631.tif 000003
【図２】
2020513631.tif 000004
【図３】
2020513631.tif 000005
【図４】
2020513631.tif 000006
【図５】
2020513631.tif 000007
【図６】
2020513631.tif 000008
【図７】
2020513631.tif 000009
【図８】
2020513631.tif 000010
【国際調査報告】
2020513631.tif 000011
2020513631.tif 000012