(57)【要約】共有リソースに対するアクセス要求を効率的に処理するシステム及び方法を説明する。多くのリクエスタの各々は、共有リソースのパーティションに割り当てられている。コントローラは、未割り当てのパーティションに対するアクセス要求をリクエスタが生成しないと判別した場合、アクティブなリクエスタに対して割り当てられたパーティションへの同時アクセスを許可する。コントローラは、少なくとも１つのアクティブなリクエスタが未割り当てのパーティションに対するアクセス要求を生成したと判別した場合、他のアクティブなリクエスタのアクセスを停止しながら、１つのアクティブなリクエスタが共有リソース全体への排他的アクセスを得るのを可能にする。コントローラは、アクティブなリクエスタ間の排他的アクセスを代替する。様々な実施形態では、共有リソースは、グラフィックス処理ユニット内のローカルデータストアであり、複数のリクエスタの各々は、単一命令複数データ（ＳＩＭＤ）計算ユニットである。【選択図】図３
2020500379.tif 000002
【特許請求の範囲】
【請求項１】
複数のパーティションを含む共有リソースと、
前記共有リソースの前記複数のパーティションのそれぞれ異なるパーティションに割り当てられた複数のリクエスタと、
前記共有リソースに接続されたコントローラと、を備え、
前記コントローラは、
前記複数のリクエスタのうち第１リクエスタから所定のパーティションへのアクセス要求を受信したことに応じて、
前記所定のパーティションが前記第１リクエスタに割り当てられていると判別したことに応じて、前記第１リクエスタに対して前記所定のパーティションのみへのアクセスを提供し、
前記所定のパーティションが前記第１リクエスタに割り当てられていないと判別したことに応じて、前記第１リクエスタに対して前記複数のパーティションの全てのパーティションへのアクセスを提供する、ように構成されている、
コンピューティングシステム。
【請求項２】
前記コントローラは、前記第１リクエスタに対して全てのパーティションへのアクセスを提供する場合に、前記複数のリクエスタのうち前記第１リクエスタ以外のリクエスタの各々に対して前記共有リソースへのアクセスを停止するようにさらに構成されている、
請求項１のコンピューティングシステム。
【請求項３】
前記第１リクエスタは、前記複数のリクエスタのうち最近選択されていないアクティブなリクエスタである、
請求項２のコンピューティングシステム。
【請求項４】
前記コントローラは、前記第１リクエスタに対する所定数のアクセス要求の完了を判別したことと、前記複数のリクエスタがより多くのアクセス要求を有すると判別したことと、に応じて前記第１リクエスタを選択解除するようにさらに構成されている、
請求項１のコンピューティングシステム。
【請求項５】
前記所定数は、単一のクロックサイクル内で処理されるアクセス要求の数である、
請求項４のコンピューティングシステム。
【請求項６】
前記コントローラは、
前記第１リクエスタに対して前記共有リソースへのアクセスを停止し、
前記第１リクエスタを、前記複数のリクエスタのうち最近選択されたアクティブなリクエスタとしてマークするようにさらに構成されている、
請求項４のコンピューティングシステム。
【請求項７】
前記コントローラは、
前記複数のリクエスタのうち前記第１リクエスタとは異なる第２リクエスタを選択し、
選択した第２リクエスタの停止を解除し、
前記第２リクエスタに対して、前記複数のパーティションの全てのパーティションへのアクセスを提供するようにさらに構成されている、
請求項６のコンピューティングシステム。
【請求項８】
前記共有リソースは、グラフィックス処理ユニット内のローカルデータストアであり、前記複数のリクエスタの各々は、単一命令複数データ（ＳＩＭＤ）計算ユニットである、
請求項１のコンピューティングシステム。
【請求項９】
複数のリクエスタの各々を、共有リソースの複数のパーティションの異なるパーティションに割り当てることと、
前記複数のリクエスタのうち第１リクエスタから所定のパーティションへのアクセス要求を受信したことに応じて、
前記所定のパーティションが前記第１リクエスタに割り当てられていると判別したことに応じて、前記第１リクエスタに対して前記所定のパーティションのみへのアクセスを提供することと、
前記所定のパーティションが前記第１リクエスタに割り当てられていないと判別したことに応じて、前記第１リクエスタに対して前記複数のパーティションの全てのパーティションへのアクセスを提供することと、を含む、
方法。
【請求項１０】
前記第１リクエスタに対して全てのパーティションへのアクセスを提供する場合に、前記複数のリクエスタのうち前記第１リクエスタ以外のリクエスタの各々に対して前記共有リソースへのアクセスを停止することをさらに含む、
請求項９の方法。
【請求項１１】
前記第１リクエスタは、前記複数のリクエスタのうち最近選択されていないアクティブなリクエスタである、
請求項１０の方法。
【請求項１２】
前記第１リクエスタに対する所定数のアクセス要求の完了を判別したことと、前記複数のリクエスタがより多くのアクセス要求を有すると判別したことと、に応じて前記第１リクエスタを選択解除することをさらに含む、
請求項９の方法。
【請求項１３】
前記所定数は、単一のクロックサイクル内で処理されるアクセス要求の数である、
請求項１２の方法。
【請求項１４】
前記第１リクエスタに対して前記共有リソースへのアクセスを停止することと、
前記第１リクエスタを、前記複数のリクエスタのうち最近選択されたアクティブなリクエスタとしてマークすることと、をさらに含む、
請求項１２の方法。
【請求項１５】
前記複数のリクエスタのうち前記第１リクエスタとは異なる第２リクエスタを選択することと、
選択した第２リクエスタの停止を解除することと、
前記第２リクエスタに対して、前記複数のパーティションのうち何れかのパーティションへのアクセスを許可することと、をさらに含む、
請求項９の方法。
【請求項１６】
前記共有リソースは、グラフィックス処理ユニット内のローカルデータストアであり、前記複数のリクエスタの各々は、単一命令複数データ（ＳＩＭＤ）計算ユニットである、
請求項９の方法。
【請求項１７】
複数のパーティションを含む共有リソースに接続された第１インタフェースと、
前記共有リソースの前記複数のパーティションの異なるパーティションにそれぞれ割り当てられた複数のリクエスタに接続された第２インタフェースと、
制御ユニットと、を備え、
前記制御ユニットは、
前記複数のリクエスタのうち第１リクエスタから所定のパーティションへのアクセス要求を受信したことに応じて、
前記所定のパーティションが前記第１リクエスタに割り当てられていると判別したことに応じて、前記第１リクエスタに対して前記所定のパーティションのみへのアクセスを提供し、
前記所定のパーティションが前記第１リクエスタに割り当てられていないと判別したことに応じて、前記第１リクエスタに対して前記複数のパーティションの全てのパーティションへのアクセスを提供する、ように構成されている、
コントローラ。
【請求項１８】
前記制御ユニットは、前記第１リクエスタに対して全てのパーティションへのアクセスを提供する場合に、前記複数のリクエスタのうち前記第１リクエスタ以外のリクエスタの各々に対して前記共有リソースへのアクセスを停止するようにさらに構成されている、
請求項１７のコントローラ。
【請求項１９】
前記制御ユニットは、前記第１リクエスタに対する所定数のアクセス要求の完了を判別したことと、前記複数のリクエスタがより多くのアクセス要求を有すると判別したことと、に応じて前記第１リクエスタを選択解除するようにさらに構成されている、
請求項１７のコントローラ。
【請求項２０】
前記制御ユニットは、
前記第１リクエスタに対して前記共有リソースへのアクセスを停止し、
前記第１リクエスタを、前記複数のリクエスタのうち最近選択されたアクティブなリクエスタとしてマークするようにさらに構成されている、
請求項１９のコントローラ。
【発明の詳細な説明】
【背景技術】
【０００１】
（関連技術の説明）
タスクの並列化は、コンピュータシステムのスループットを向上させるために用いられる。この目的のために、コンパイラ又はソフトウェアプログラマは、並列化タスクをプログラムコードから抽出して、システムハードウェア上で並列に実行する。アウトオブオーダ実行、ディープパイプライン、スペキュレーティブ実行及びマルチスレッド実行は、命令レベルの並列性を利用するために使用され、これにより、スループットを向上させる。ハードウェア上での並列実行をさらに増やすために並列アーキテクチャプロセッサがシステムに含まれ、データレベルの並列性を利用し、従来の汎用プロセッサから計算集約的で反復的なタスクをオフロードする。これらのタスクの例には、ビデオグラフィックスレンダリング、暗号化、ガベージコレクション及び他のベクトル命令アプリケーションが含まれる。
【０００２】
データレベル並列性を利用する上記システムの様々な例は、並列アーキテクチャプロセッサとして単一命令複数データ（ＳＩＭＤ）プロセッサを含む。グラフィックス処理ユニット（ＧＰＵ）は、ＳＩＭＤプロセッサの一例である。ＧＰＵは、スレッドの命令を実行するための処理リソースの複数のレーンをそれぞれ有する１つ以上のＳＩＭＤ計算ユニットを含む。命令は、レーン間で実行されているスレッドでは同じだが、所定のレーンに特定のデータ要素を用いる。オペレーティングシステムのスケジューラ又はプログラマは、ソフトウェアプログラミングプラットフォームを介して、ＳＩＭＤ計算ユニットのレーン上のスレッドをスケジューリングする。
【０００３】
ローカルデータストアを使用しない場合、ＳＩＭＤ計算ユニット内の所定のレーンによって生成された結果データは、他の形式のデータストレージに結果データを記憶して取得するときの高コストなレイテンシ無しに他のレーンにアクセスすることができない。ＳＩＭＤ計算ユニットの複数のレーンは、ローカルデータストアを共有するが、システムは、レーン数を動的に変更するのを可能にすることによって、ローカルデータストア内で共有するストレージの量を変更するアーキテクチャを提供しない。したがって、システムは、ローカルデータストアの競合解決及び完全なアクセス可能性（アドレス可能性）をサポートしていない。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上記を考慮して、共有リソースに対するアクセス要求を効率的に処理するための効率的な方法及びシステムが望まれている。
【図面の簡単な説明】
【０００５】
【図１】共有リソースへのアクセスをサポートするコンピューティングシステムの一実施形態の一般化された図である。
【図２】並列アーキテクチャプロセッサの一実施形態の一般化された図である。
【図３】共有リソースを対象とするアクセス要求を処理する方法の一実施形態の一般化された図である。
【図４】共有リソースを対象とするアクセス要求を処理する方法の別の実施形態の一般化された図である。
【図５】共有リソースを使用するためのアクセス要求のソースを選択する方法の一実施形態の一般化された図である。
【発明を実施するための形態】
【０００６】
本発明は、様々な変更及び代替形態を受け入れることができるが、特定の実施形態が、例として図面に示されており、本明細書において詳細に説明されている。しかし、図面及び詳細な説明は、本発明を、開示された特定の形態に限定することを意図するものではなく、逆に、本発明は、添付の特許請求の範囲によって定義される本発明の範囲に含まれる全ての変更、均等物及び代替物を包含することを意図していることを理解されたい。
【０００７】
以下の説明では、本発明の完全な理解を提供するために、多くの具体的な詳細が述べられている。しかしながら、当業者であれば、本発明がこれらの具体的な詳細無しに実施され得ることを認識するであろう。いくつかの例では、本発明を曖昧にするのを避けるために、周知の回路、構造及び技術を詳細に示していない。さらに、説明を簡単且つ明瞭にするために、図に示す要素が必ずしも縮尺通りに描かれていないことが理解されるであろう。例えば、いくつかの要素の寸法は、他の要素に対して誇張されている。
【０００８】
共有リソースに対するアクセス要求を効率的に処理するためのシステム及び方法が考えられる。様々な実施形態では、多くのリクエスタの各々が、共有リソースのパーティションに割り当てられている。いくつかの実施形態では、各パーティションは、別々のパーティションであり、このパーティションは、共有リソースの他のパーティションと重複しない。コントローラは、共有リソースへのアクセスをサポートするために使用される。未割り当てのパーティションに対するアクセス要求をリクエスタが生成しないとコントローラが判別した場合、コントローラは、アクティブなリクエスタに対して割り当てられたパーティションへの同時アクセスを許可する。ただし、コントローラは、少なくとも１つのアクティブなリクエスタが、未割り当てのパーティションに対するアクセス要求を生成したと判別した場合に、他のアクティブなリクエスタのアクセスを停止しながら、単一のアクティブなリクエスタが共有リソース全体にアクセスするのを可能にする。
【０００９】
コントローラは、アクティブなリクエスタを選択することによってアービトレーションを実行する。いくつかの実施形態では、選択は、最長未使用時間（least recently used）基準に基づいている。コントローラは、選択されたリクエスタのアクセスを許可しながら、選択されていないリクエスタの共有リソースへのアクセスを停止させる。いくつかの実施形態では、コントローラは、選択されたリクエスタについて実行されたアクセス要求の数に制限を設定するか、例えばクロックサイクル数等のように、選択されたリクエスタのアクセス要求を実行するための時間に制限を設定する。アクティブなリクエスタがより多くのアクセス要求を有する場合、コントローラは、選択されたリクエスタの共有リソースへのアクセスを停止し、これを最近選択されたアクティブなリクエスタとしてマークする。その後、コントローラは、リクエスタの選択を解除し、共有リソース全体に排他的アクセスするために別のアクティブなリクエスタを選択することによって、アービトレーションを再度実行する。
【００１０】
様々な実施形態では、共有リソースは、グラフィックス処理ユニット内のローカルデータストアであり、複数のリクエスタの各々は、単一命令複数データ（ＳＩＭＤ）計算ユニットである。いくつかの実施形態では、コントローラは、ＳＩＭＤ計算ユニットのために割り当てられたメモリアドレス境界の外側のローカルデータストアの領域へのアクセスを検出することによって、未割り当てのパーティションへのアクセス要求を検出する。様々な実施形態では、所定のＳＩＭＤ計算ユニットは、ローカルデータストア全体への排他的アクセスを有する場合に、アービトレーションが再発生し且つ他のＳＩＭＤ計算ユニットが排他的アクセスを得る前に、単一クロックサイクルの間、排他的アクセスを有する。しかし、別の数のクロックサイクルが可能であり、考えられる。或いは、他の実施形態では、コントローラは、アクセス要求の数を監視し、当該数が制限に達するとアービトレーションが再発生する。様々な実施形態では、各ＳＩＭＤ計算ユニットは、ローカルデータストアへの読み書きポートを含み、これは、他のＳＩＭＤ計算ユニットがローカルデータストアへの排他的アクセスを有する場合に、別のＳＩＭＤ計算ユニットのローカルデータストアへのアクセスを提供するために使用される。
【００１１】
図１を参照すると、共有リソースへのアクセスをサポートするコンピューティングシステムの一実施形態の一般化されたブロック図が示されている。図示した実施形態では、コンピューティングシステムは、アービトレーション制御ユニット１２０を介して共有リソース１４０にアクセスするリクエスタ１１０Ａ〜１１０Ｈを含む。いくつかの実施形態では、共有リソース１４０は、共有メモリであり、アービトレーション制御ユニット１２０は、メモリコントローラである。他の実施形態では、共有リソース１４０は、特定の集中的な計算機能を有するユニット、又は、ネットワークへのスイッチングアクセスを提供するユニットである。リソース及び任意の関連するコントローラの他の例が可能であり、考えられる。
【００１２】
リクエスタ１１０Ａ〜１１０Ｈは、計算リソース１１２Ａ〜１１２Ｈを含む。様々な実施形態では、計算リソース１１２Ａ〜１１２Ｈは、パイプラインレジスタ、中間結果を記憶するためのデータ構造、整数演算、浮動小数点演算、ブール論理演算、分岐条件比較等を実行するための回路を含む。図示するように、共有リソース１４０は、複数のパーティション１４２Ａ〜１４２Ｈに分割されている。いくつかの実施形態では、パーティション１４２Ａ〜１４２Ｈの各々は、同じ数のデータストレージ、同じ数の集中的な計算機能等を含む。他の実施形態では、１つ以上のパーティション１４２Ａ〜１４２Ｈは、パーティション１４２Ａ〜１４２Ｈの他のパーティションよりも少ない若しくは多いデータストレージ又は集中的な計算機能を含む。        
【００１３】
様々な実施形態では、パーティション１４２Ａ〜１４２Ｈの各々は、パーティション１４２Ａ〜１４２Ｈの他のパーティションと重複しない別々のパーティションである。他の実施形態では、重複が用いられる。様々な実施形態では、パーティション１４２Ａ〜１４２Ｈの各パーティションは、計算リソース１１２Ａ〜１１２Ｈのうち１つの計算リソースに割り当てられる。他の実施形態では、計算リソース１１２Ａ〜１１２Ｈのうち２つ以上の計算リソースは、パーティション１４２Ａ〜１４２Ｈのうち同じパーティションに割り当てられる。
【００１４】
いくつかの実施形態では、パーティション１４２Ａ〜１４２Ｈのサイズに加えて、計算リソース１１２Ａ〜１１２Ｈとパーティション１４２Ａ〜１４２Ｈとの間の割り当ては、プログラム可能な制御レジスタ及びステータスレジスタ（図示省略）によって設定される。ファームウェア、実行中のソフトウェアアプリケーション又は他のソフトウェアを使用して、制御レジスタ及びステータスレジスタを更新し、計算リソース１１２Ａ〜１１２Ｈをパーティション１４２Ａ〜１４２Ｈ及びパーティション１４２Ａ〜１４２Ｈのサイズに最初に割り当て、その後に再割り当てを行う。他の実施形態では、リクエスタ１１０Ａ〜１１０Ｈ及び／又はアービトレーション制御ユニット１２０内のハードウェア回路によって実装される制御ロジックは、最初の割り当て及びサイジング、並びに、その後の再割り当て及びリサイジングを実行する。
【００１５】
１つ以上の計算リソース１１２Ａ〜１１２Ｈが１つ以上のアプリケーションの命令を処理すると、１つ以上のリクエスタ１１０Ａ〜１１０Ｈが共有リソース１４０に対するアクセス要求を生成する。様々な実施形態では、生成されたアクセス要求は、パーティション１４２Ａ〜１４２Ｈのうち１つのパーティションを識別する。パーティション１４２Ａ〜１４２Ｈのうち１つのパーティションを識別することによって、生成されたアクセス要求は、識別されたパーティションをターゲットとする。ターゲットパーティションは、割り当てられたパーティション又は未割り当てのパーティションである。
【００１６】
リクエスタ１１０Ａ〜１１０Ｈによって生成されたアクセス要求が、パーティション１４２Ａ〜１４２Ｈのうち未割り当てのパーティションをターゲットとしていない場合、アクセス要求は、割り当てに基づいて処理される。各アクセス要求は、アービトレーション制御ユニット１２０によって、その割り当てられたパーティションへのアクセスが許可される。マルチプレクサ（ｍｕｘ）ゲート１３０Ａ〜１３０Ｈによって実装される選択ロジックは、許可信号１３２Ａ〜１３２Ｈに基づいてアクセス情報１３４Ａ〜１３４Ｈを選択する。許可信号１３２Ａ〜１３２Ｈは、先に設定された割り当てに基づいて、リクエスタ１１０Ａ〜１１０Ｈのうち割り当てられたリクエスタを選択するように、アービトレーション制御ユニット１２０によってアサートされる。したがって、パーティション１４２Ａ〜１４２Ｈは、リクエスタ１１０Ａ〜１１０Ｈのうち割り当てられたリクエスタによってアクセスされる。様々な実施形態では、割り当てに基づく競合が無い場合、２つ以上のパーティション１４２Ａ〜１４２Ｈが同時にアクセスされる。
【００１７】
リクエスタ１１０Ａ〜１１０Ｈによって生成されたアクセス要求が、パーティション１４２Ａ〜１４２Ｈのうち未割り当てのパーティションをターゲットとする場合、リクエスタ１１０Ａ〜１１０Ｈは、パーティション１４２Ａ〜１４２Ｈへの排他的アクセスを得る。排他的アクセスは、アービトレーション制御ユニット１２０によって提供されるアービトレーションに基づいて発生する。例えば、様々な実施形態では、リクエスタ１１０Ａ〜１１０Ｈのうちアクティブなリクエスタの各々は、最近選択されていない基準（least recently selected basis）に基づいて、クロックサイクルの間、排他的アクセスを得る。他の実施形態では、多くのクロックサイクル又はアクセス要求がアービトレーション制御ユニット１２０によって使用され、リクエスタ１１０Ａ〜１１０Ｈのうち別のアクティブなリクエスタがパーティション１４２Ａ〜１４２Ｈへの排他的アクセスを得るのをいつ許可するかを決定する。
【００１８】
いくつかの実施形態では、コンピューティングシステムは、ハイブリッドアービトレーションスキームを含み、アービトレーション制御ユニット１２０は、集中型アービタを含み、１つ以上のリクエスタ１１０Ａ〜１１０Ｈは、分散型アービトレーションロジックを含む。例えば、１つ以上のリクエスタ１１０Ａ〜１１０Ｈは、計算リソース１１２Ａ〜１１２Ｈ内の複数のソースによって生成された複数の要求からアービトレーション制御ユニット１２０に送信する所定の要求を選択するためのアービタを含む。アービトレーション制御ユニット１２０は、リクエスタ１１０Ａ〜１１０Ｈから受信した複数の要求から、共有リソース１４０に送信する１つ以上の要求を選択する。許可信号１３２Ａ〜１３２Ｈは、受信した要求に基づいてアサートされ、受信した要求が、パーティション１４２Ａ〜１４２Ｈのうち割り当てられたパーティションをターゲットとしているかどうかを検出する。また、いくつかの実施形態では、アービトレーション制御ユニット１２０は、最近選択されていないスキーム（least-recently- selected scheme）と共に符号化優先度に基づいて、共有リソース１４０への排他的アクセスのためのクロックサイクル数又はアクセス要求数を調整する。
【００１９】
要求に対する応答１５０は、アービトレーション制御ユニット１２０に返送されるように示されている。他の実施形態では、応答１５０は、バスを介する等してリクエスタ１１０Ａ〜１１０Ｈに直接送信される。いくつかの実施形態では、リクエスタ１１０Ａ〜１１０Ｈのインタフェース内のポーリングロジックは、バス又はアービトレーション制御ユニット１２０から関連する応答データ１５０を取得するために使用される。他の様々な実施形態では、応答１５０は、コンピューティングシステム内の他の計算ユニット（図示省略）に送信される。
【００２０】
図２を参照すると、並列アーキテクチャプロセッサ２００の一実施形態が示されている。様々な実施形態では、並列アーキテクチャプロセッサ２００は、アービトレーション制御ユニット２５０を介してローカルデータストア２６０にアクセスする計算ユニット２１０Ａ〜２１０Ｄを有するグラフィックス処理ユニット（ＧＰＵ）である。概して、ＧＰＵは、レーン２２０Ａ〜２２０Ｍ間でデータを共有するために、計算ユニット２１０Ａ〜２１０Ｄの各々に対して別々のローカルデータ共有を含む。ただし、本明細書では、ローカルデータ共有２６０は、計算ユニット２１０Ａ〜２１０Ｄ間で共有される。したがって、計算ユニット２１０Ａ内の１つ以上のレーン２２０Ａ〜２２０Ｍが、動作モードに基づいて、計算ユニット２１０Ｄ内の１つ以上のレーン２２０Ａ〜２２０Ｍと結果データを共有することが可能である。
【００２１】
上述したように、並列アーキテクチャプロセッサ２００は、単一命令複数データ（ＳＩＭＤ）動作等の高度に並列なデータアプリケーションに最適化された専用集積回路を含む。様々な実施形態では、並列アーキテクチャプロセッサ２００は、ビデオグラフィックスレンダリングに使用されるグラフィックス処理ユニット（ＧＰＵ）である。図示するように、計算ユニット２１０Ａ内のレーン２２０Ａ〜２２０Ｍの各々は、レジスタ２２２Ａと、算術論理ユニット（ＡＬＵ）２２４Ａと、を含む。計算ユニット２１０Ａ〜２１０Ｄの他の計算ユニット内のレーンも同様のコンポーネントを含む。様々な実施形態では、レジスタ２２２Ａは、オペランド及び結果を記憶するためのレジスタファイルとして使用される記憶要素である。
【００２２】
様々な実施形態では、ＡＬＵ２２４Ａ内のデータフローは、パイプライン化されている。ＡＬＵ２２４Ａは、パイプラインレジスタと、中間結果を記憶するためのデータ構造と、整数演算、浮動小数点演算、ブール論理演算、分岐条件比較等を実行するための回路と、を含む。説明を簡単にするために、これらのコンポーネントは示されていない。レーン２２０Ａ〜２２０Ｍに亘る所定の行内の計算ユニットの各々は、同じ計算ユニットである。これらの計算ユニットの各々は、同じ命令で動作するが、異なるデータが異なるスレッドに関連付けられている。
【００２３】
計算ユニット２１０Ａ内のレーン２２０Ａ〜２２０Ｍの各々は、命令のためにキャッシュ２３０にアクセスする。また、キャッシュ２３０は、レジスタ２２２Ａにロードするためのオペランドデータを記憶する。ビデオグラフィックスレンダリングを実行する実施形態では、キャッシュ２３０は、レベル１（Ｌ１）テクスチャキャッシュと呼ばれる。計算ユニット２１０Ａ〜２１０Ｄの各々は、計算ユニット２１０Ａ〜２１０Ｄに対するグローバルデータ共有として機能する共有Ｌ２キャッシュ（図示省略）へのさらなるアクセスを有する。例えば、様々な実施形態では、計算ユニット２１０Ａ〜２１０Ｄの各々は、共有Ｌ２キャッシュからのデータを記憶し取得するためにキャッシュ２３０の論理的に最上部に配置されたキャッシュコントローラを含む。
【００２４】
上述したように、レーン２２０Ａ〜２２０Ｍの各々は、別々のスレッドのデータを処理する。計算ユニット２１０Ａ〜２１０Ｄの各々は、所定の作業単位のスレッドを処理する。オペレーティングシステム（ＯＳ）スケジューラ又はユーザレベルスケジューラは、ラウンドロビン方式、優先方式、可用性方式、又は、これらの組み合わせ等の様々な方式を使用して、並列アーキテクチャプロセッサ２００を用いてコンピュータシステム上で実行されるワークロードをスケジューリングする。或いは、プログラマが、ランタイムシステムと組み合わせてワークロードをスケジューリングする。このような場合、プログラマは、ソフトウェアプラットフォームを利用してスケジューリングを実行する。例えば、ＯｐｅｎＣＬ（登録商標）（Open Computing Language）フレームワークは、異種コンピューティング環境に亘るプログラミングをサポートし、異種コンピューティング用の低レベルアプリケーションプログラミングインタフェース（ＡＰＩ）を含む。
【００２５】
ＯｐｅｎＣＬフレームワーク（概して、本明細書では「ＯｐｅｎＣＬ」と呼ばれる）は、実行キューを定義するために使用されるＣライク言語インタフェースを含み、各キューは、ＯｐｅｎＣＬデバイスに関連付けられている。ＯｐｅｎＣＬデバイスは、汎用の中央処理ユニット（ＣＰＵ）、ＧＰＵ、又は、異種マルチコアアーキテクチャ内の少なくとも１つのプロセッサコアを有する他のユニットであってもよい。ＯｐｅｎＣＬフレームワークにおいて、関数呼び出しは、ＯｐｅｎＣＬ計算カーネル又は単に「計算カーネル」と呼ばれる。ソフトウェアプログラマは、実行キュー内の計算カーネルをスケジューリングする。計算カーネルは、１つ以上のデータレコードと照合され、１つ以上の計算作業単位を生成する。各作業単位は、固有の識別子（ＩＤ）を有する。計算ユニット２１０Ａ〜２１０Ｄの各々は、ＯＳ又はソフトウェアプログラマによって、多数の作業単位のうち１つの作業単位に割り当てられる。計算ユニット２１０Ａ〜２１０Ｄのうち所定の計算ユニット内の各レーン２２０Ａ〜２２０Ｍには、割り当てられた作業単位内のスレッドが割り当てられる。
【００２６】
レーン２２０Ａ〜２２０Ｍの各々は、ローカルデータ共有２６０にアクセスする。例えば、様々な実施形態では、レーン２２０Ａ〜２２０Ｍの各々は、ローカルデータ共有２６０内にスペースを割り当てている。計算ユニット２１０Ａ〜２１０Ｄのうち所定の計算ユニットのレーン２２０Ａ〜２２０Ｍの各々は、同じ所定の計算ユニット内の他のレーンの割り当てられたスペースにアクセスすることができる。例えば、計算ユニット２１０Ａ内のレーン２２０Ａは、計算ユニット２１０Ａ内のレーン２２０Ｍに割り当てられたローカルデータストア２６０内の割り当てられたスペースにアクセスすることができる。計算ユニット２１０Ａ内のレーン２２０Ａ〜２２０Ｍは、同じ作業単位を処理することによって、互いに割り当てられたスペースにアクセスすることができる。
【００２７】
レーン２２０Ａ〜２２０Ｍの各々によって生成された要求は、データブロックにアクセスしようとする。様々な実施形態では、データのブロック、すなわちデータブロックは、隣接するメモリ位置に記憶されているバイトのセットである。データブロック内のバイト数は、設計上の選択によって変動し、任意のサイズとすることができる。スケジューラ２４０は、計算ユニット２１０Ａ内のレーン２２０Ａ〜２２０Ｍによって生成されたアクセス要求をスケジュールするために使用される。生成されたアクセス要求は、アービトレーション制御ユニット２５０を介してスケジューラ２４０からローカルデータストア２６０に送信される。
【００２８】
図示したように、ローカルデータ共有２６０は、複数のパーティション２６２Ａ〜２６２Ｄに分割されている。様々な実施形態では、パーティション２６２Ａ〜２６２Ｄの各々は、パーティション２６２Ａ〜２６２Ｄの他の何れのパーティションとも重複しない別々のパーティションである。いくつかの実施形態では、パーティション２６２Ａ〜２６２Ｄの各々は、同量のデータストレージを含む。他の実施形態では、１つ以上のパーティション２６２Ａ〜２６２Ｄは、パーティション２６２Ａ〜２６２Ｄのうち他のパーティションよりも少ない又は多いデータストレージを含む。
【００２９】
様々な実施形態では、パーティション２６２Ａ〜２６２Ｄのサイズに加えて、計算ユニット２１０Ａ〜２１０Ｄとパーティション２６２Ａ〜２６２Ｄとの間の割り当ては、オペレーティングシステム、ソフトウェアプログラマ、専用制御ユニット等によって設定される。例えば、いくつかの実施形態では、プログラム可能制御及びステータスレジスタ（図示省略）は、割り当てを設定するために特定の値を記憶する。パーティション２６２Ａ〜２６２Ｄのサイズを定義することに加えて、ファームウェア、実行中のソフトウェアアプリケーション又は他のソフトウェアを使用して、制御及びステータスレジスタを更新し、計算ユニット２１０Ａ〜２１０Ｄ及びパーティション２６２Ａ〜２６２Ｄを最初に割り当て、その後に再割り当てを行う。他の実施形態では、計算ユニット２１０Ａ〜２１０Ｄ及び／又はアービトレーション制御ユニット２５０内のハードウェア回路によって実装される制御ロジックは、最初の割り当て、その後の再割り当て及びサイズ変更を実行する。
【００３０】
様々な実施形態では、アービトレーション制御ユニット２５０は、計算ユニット２１０Ａ〜２１０Ｄに亘って共有メモリ機能を提供するために使用される。例えば、様々な実施形態では、同じ作業単位のスレッドは、１つの計算ユニット２１０Ａ〜２１０Ｄにスケジュールされるのではなく、２つ以上の計算ユニット２１０Ａ〜２１０Ｄに亘ってスケジュールされる。効率的な処理のために、レーン間の通信は、２つ以上の計算ユニット２１０Ａ〜２１０Ｄに拡張されるべきである。
【００３１】
一例では、計算ユニット２１０Ａは、パーティション２６２Ａに割り当てられ、計算ユニット２１０Ｄは、パーティション２６２Ｄに割り当てられる。ただし、同じ作業単位のスレッドは、後に、２つの計算ユニット２１０Ａ，２１０Ｄに亘ってスケジュールされる。効率的な実行のために、計算ユニット２１０Ａ内の１つ以上のレーン２２０Ａ〜２２０Ｍが、計算ユニット２１０Ｄ内の１つ以上のレーン２２０Ａ〜２２０Ｍと通信する必要があることが可能となっている。アービトレーション制御ユニット２５０は、この状況を識別し、計算ユニット２１０Ａ，２１０Ｄのうち選択された計算ユニットに対してローカルデータストア２６０への排他的アクセスを提供する。
【００３２】
アービトレーション制御ユニット２５０によって選択された計算ユニットは、所定期間、排他的アクセスを有する。様々な実施形態では、所定期間は、単一のクロックサイクルである。したがって、上記の例では、計算ユニット２１０Ａ，２１０Ｄは、各クロックサイクルでローカルデータストア２６０への排他的アクセスを交互に有する。様々な実施形態では、所定期間は、プログラム可能である。他の実施形態では、期間は、他のクロックサイクルの数に基づいて測定される。さらに他の実施形態では、所定期間は、アクセス要求数、符号化された優先度、リクエスタの識別子（ＩＤ）、応答データの宛先のＩＤ、最近選択されていないスキーム等に基づいて測定される。アービトレーション制御ユニット２５０によって使用されるロジックのさらなる詳細を次に説明する。
【００３３】
図３を参照すると、共有リソースをターゲットとするアクセス要求を処理する方法３００の一実施形態が示されている。説明の目的のために、本実施形態における（及び、図４〜図５における）ステップは、順番に示されている。しかし、他の実施形態では、いくつかのステップが示された順序とは異なる順序で行われてもよいし、いくつかのステップが同時に実行されてもよいし、いくつかのステップが他のステップと組み合わされてもよいし、いくつかのステップが存在しなくてもよい。
【００３４】
様々な実施形態では、共有リソースにアクセスするために、コンピューティングシステム内に複数のリクエスタがセットアップされる。共有リソースは、複数のパーティションに分割されている。セットアッププロセスの一部として、複数のリクエスタの各々を複数のパーティションのうち１つのパーティションに割り当てる（ブロック３０２）。割り当ては、ハードウェア、ソフトウェア又はこれらの組み合わせで実装されたロジックに基づいている。オペレーティングシステム、ソフトウェアプログラマ、専用制御ユニット又は他のものが割り当てを実行する。さらに、いくつかの実施形態では、セットアッププロセス中にパーティションのサイズも設定される。最後のリクエスタに割り当てが到達すると（条件ブロック３０４：Ｙｅｓ）、１つ以上のソフトウェアアプリケーションの命令がコンピューティングシステムによって処理される（ブロック３０６）。
【００３５】
１つ以上のソフトウェアアプリケーションの処理中に、アクティブなリクエスタは、共有リソースに対するアクセス要求を生成する（ブロック３０８）。様々な実施形態では、生成されたアクセス要求は、複数のパーティションのうち１つのパーティションを識別する。いくつかの実施形態では、識別は、パーティションの識別子（ＩＤ）を含む。他の実施形態では、フィールド又は符号化等の指標は、パーティションを間接的に識別し、制御ロジックは、その指標に基づいて識別を決定する。さらに他の実施形態では、アドレスは、パーティションに関連する所定のアドレス範囲内のデータストレージ位置を示すことによって、パーティションを間接的に識別する。複数のパーティションのうち１つのパーティションを識別することによって、生成されたアクセス要求は、識別されたパーティションをターゲットとする。ターゲットとなるパーティションは、割り当てられたパーティション又は未割り当てのパーティションである。
【００３６】
生成されたアクセス要求が未割り当てのパーティションをターゲットとしていない場合（条件ブロック３１０：Ｎｏ）、アクセス要求は、割り当てに基づいて処理される（ブロック３１２）。各アクセス要求は、割り当てられたパーティションへのアクセスが許可される。しかし、生成されたアクセス要求が未割り当てのパーティションをターゲットとする場合（条件ブロック３１０：Ｙｅｓ）、アクセス要求は、共有リソース全体への排他的アクセスを許可するアービトレーションに基づいて処理される（ブロック３１４）。例えば、アクティブなリクエスタの各々は、所定期間、共有リソース全体への排他的アクセスを得る。様々な実施形態では、所定期間は、クロックサイクルの数に基づいて測定される。他の実施形態では、所定期間は、アクセス要求の数に基づいて測定される。様々な実施形態では、所定期間は、プログラム可能である。いくつかの実施形態では、所定期間は、符号化された優先度、リクエスタの識別子（ＩＤ）、応答データの宛先のＩＤ、最近選択されていないスキーム等にさらに基づいている。
【００３７】
図４を参照すると、共有リソースをターゲットとするアクセス要求を処理する方法４００の別の実施形態が示されている。共有リソース内のパーティションに複数のリクエスタが割り当てられている。上述したように、リクエスタは、１つのパーティションを識別するアクセス要求を生成する。生成されたアクセス要求が未割り当てのパーティションをターゲットとしていない場合（条件ブロック４０２：Ｎｏ）、アクセス要求は、割り当てられたパーティションへのアクセスに基づいて処理される（ブロック４０４）。各アクセス要求は、割り当てられたパーティションへのアクセスが許可される。様々な実施形態では、非共有パーティションは、同時にアクセスされる。命令の処理が継続し（ブロック４０６）、リクエスタは、アクセス要求を生成する。
【００３８】
生成されたアクセス要求が未割り当てのパーティションをターゲットとする場合（条件ブロック４０２：Ｙｅｓ）、共有リソースへのアクセスが競合しないように１つのリクエスタが選択される（ブロック４０８）。様々な実施形態では、選択されたリクエスタは、未割り当てのパーティションをターゲットとするアクセス要求を生成したリクエスタである。他の実施形態では、選択されたリクエスタは、現在、最近選択されていないリクエスタである。いくつかの実施形態では、最近選択されていないリクエスタは、最後のアクセス要求がリクエスタに処理されてからの時間に基づいている。他の実施形態では、最近選択されていないリクエスタは、当該リクエスタで処理されるアクセス要求の数に基づいている。いくつかの実施形態では、選択は、符号化された優先度、リクエスタのＩＤ、リクエスタに関連する計算ユニットによって処理されている動作の識別等にさらに基づいている。
【００３９】
未選択のリクエスタが停止される（ブロック４１０）。いくつかの実施形態では、停止することは、未選択のリクエスタが共有リソースに対するアクセス要求を送信するのを抑制することを含む。他の実施形態では、停止することは、未選択のリクエスタから要求キューに記憶されているアクセス要求を選択しないことを含む。いくつかの実施形態では、未選択のリクエスタのＩＤを使用して、キュー内で無視するアクセス要求を識別する。
【００４０】
共有リソース内の任意のパーティションは、選択されたリクエスタによって生成されたアクセス要求によってアクセス可能になる（ブロック４１２）。選択されたリクエスタによって生成されたアクセス要求は、所定期間、共有リソースへの排他的アクセスを有する。上述したように、いくつかの実施形態では、所定期間は、クロックサイクルの数に基づいて測定される。他の実施形態では、所定期間は、アクセス要求の数に基づいて測定される。様々な実施形態では、所定期間は、プログラム可能である。いくつかの実施形態では、所定期間は、符号化された優先度、リクエスタの識別子（ＩＤ）、応答データの宛先のＩＤ、最近選択されていないスキーム等にさらに基づいている。
【００４１】
所定期間に達すると、アービトレーションを使用してリクエスタの選択を切り替えるように指示が設定される。現在選択されているリクエスタが選択解除され、停止する。ブロック４０８の選択ステップにおいて説明した基準等の以前に使用されたアービトレーション基準に基づいて、別のアクティブなリクエスタが選択される。アービトレーションロジックに基づく選択は、現在のワークロードが完了するか、リセットが強制されるまで継続する。命令の処理が継続し（ブロック４０６）、リクエスタは、アクセス要求を生成する。上記から分かるように、アクセス要求は、２つのモードのうち１つのモードで処理される。生成されたアクセス要求が未割り当てのパーティションをターゲットにしていない場合、処理は、割り当てられたパーティションがアクセス要求を処理するのに利用可能な第１モードで継続する。ただし、生成されたアクセス要求が未割り当てのパーティションをターゲットにしている場合、処理は、共有リソース全体への排他的アクセスのためにリクエスタが選択される第２モードに切り替わる。
【００４２】
図５を参照すると、共有リソースの使用のためにアクセス要求のソースを選択する方法５００の一実施形態の一般化されたブロック図が示されている。共有リソース内のパーティションに複数のリクエスタが割り当てられている。上述したように、リクエスタは、１つのパーティションを識別するアクセス要求を生成する。少なくとも１つのアクティブなリクエスタがリソースの未割り当てのパーティションへのアクセスを要求していると判別される（ブロック５０２）。１つのアクティブなリクエスタは、リソース全体への排他的アクセスを有する次のリクエスタとして選択される（ブロック５０４）。上述したように、最近選択されていないスキーム、符号化された優先度、保留中のアクセス要求の数、既に処理されたアクセス要求の数、関連する計算ユニットによって実行されている計算の指示、現在未処理の要求のエイジ（age）等の多くの要因が、選択のために考慮される。
【００４３】
様々な実施形態では、選択されたリクエスタは、所定期間、共有リソースの各パーティションへの排他的アクセスを有する。上述したように、所定期間は、様々な要因に基づいている。選択されたリクエスタは、例えば所定期間、共有リソースにアクセスしなかった場合（条件ブロック５０６：Ｎｏ）、選択を維持し、排他的アクセスによって共有リソースにアクセスし続ける（ブロック５０８）。しかし、選択されたリクエスタは、所定期間において共有リソースにアクセスした場合（条件ブロック５０６：Ｙｅｓ）、選択解除される（ブロック５１０）。
【００４４】
リクエスタが最近選択されたリクエスタであることを示す指標が設定される（ブロック５１２）。リクエスタのワークロードが未だ完了していない場合（条件ブロック５１４：Ｎｏ）、方法５００の制御フローはブロック５０４に戻り、共有リソースへの排他的アクセスのために別のリクエスタが選択される。リクエスタのワークロードが完了した場合（条件ブロック５１４：Ｙｅｓ）、リクエスタの選択も完了する（ブロック５１６）。別のワークロードがリクエスタに割り当てられる場合、いくつかの実施形態では、動作モードは、共有リソースの割り当てられたパーティションのみへのアクセスを提供するために、リセットされる。
【００４５】
上述の実施形態のうち１つ以上がソフトウェアを含むことに留意されたい。このような実施形態では、方法及び／又はメカニズムを実装するプログラム命令は、コンピュータ可読媒体に伝達又は記憶される。プログラム命令を記憶するように構成された多くのタイプの媒体が利用可能であり、これらには、ハードディスク、フロッピー（登録商標）ディスク、ＣＤ−ＲＯＭ、ＤＶＤ、フラッシュメモリ、プログラム可能ＲＯＭ（ＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）及び他の様々な形態の揮発性又は不揮発性ストレージデバイスが含まれる。一般的に言えば、コンピュータアクセス可能な記憶媒体は、命令及び／又はデータをコンピュータに提供するために使用中にコンピュータがアクセス可能な記憶媒体を含む。例えば、コンピュータアクセス可能な記憶媒体は、例えば磁気又は光学媒体（例えば、ディスク（固定若しくは取り外し可能）、テープ、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ、ブルーレイ（登録商標））等の記憶媒体を含む。記憶媒体は、ＲＡＭ（例えば、同期型ダイナミックＲＡＭ（ＳＤＲＡＭ）、ダブルデータレート（ＤＤＲ、ＤＤＲ２、ＤＤＲ３等）ＳＤＲＡＭ、低電力ＤＤＲ（ＬＰＤＤＲ２等）ＳＤＲＡＭ、ラムバスＤＲＡＭ（ＲＤＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）等）、ＲＯＭ、フラッシュメモリ、ＵＳＢインタフェース等の周辺インタフェースを介してアクセス可能な不揮発性メモリ（例えば、フラッシュメモリ）等の揮発性又は不揮発性記憶媒体をさらに含む。記憶媒体は、微小電気機械システム（ＭＥＭＳ）、並びに、ネットワーク及び／又は無線リンク等の通信媒体を介してアクセス可能な記憶媒体を含む。
【００４６】
また、様々な実施形態では、プログラム命令は、Ｃ等の高水準プログラミング言語、Ｖｅｒｉｌｏｇ、ＶＨＤＬ等の設計言語（ＨＤＬ）、又は、ＧＤＳ  ＩＩストリームフォーマット（ＧＤＳＩＩ）等のデータベースフォーマットにおけるハードウェア機能の動作レベル記述又はレジスタ転送レベル（ＲＴＬ）記述を含む。場合によっては、記述は合成ツールによって読み取られ、合成ツールは、記述を合成して、ゲートのリストを含むネットリストを合成ライブラリから生成する。ネットリストは、システムを含むハードウェアの機能を表すゲートのセットを含む。次に、ネットリストを配置してルーティングし、マスクに適用される幾何学的形状を記述するデータセットを生成する。次いで、マスクを様々な半導体製造工程で使用して、システムに対応する１つ以上の半導体回路を製造する。或いは、コンピュータアクセス可能な記憶媒体上の命令は、必要に応じて、ネットリスト（合成ライブラリを伴う若しくは伴わない）又はデータセットである。さらに、命令は、Ｃａｄｅｎｃｅ（登録商標）、ＥＶＥ（登録商標）及びＭｅｎｔｏｒ  Ｇｒａｐｈｉｃｓ（登録商標）等のベンダからのハードウェアベースタイプのエミュレータによるエミュレーションの目的で利用される。
【００４７】
上記の実施形態をかなり詳細に説明したが、上記の開示が十分に理解されれば、当業者には多くの変形及び修正が明らかになるであろう。添付の特許請求の範囲は、このような全ての変形及び修正を包含するように解釈されることを意図している。
【図１】
2020500379.tif 000003
【図２】
2020500379.tif 000004
【図３】
2020500379.tif 000005
【図４】
2020500379.tif 000006
【図５】
2020500379.tif 000007
【国際調査報告】
2020500379.tif 000008
2020500379.tif 000009