(57)【特許請求の範囲】
【請求項１】
並列プロセッサ上で実行するアプリケーション内のワークグループを含むカーネルのコンカレンシーファクタ（concurrency factor）を決定する方法であって、
前記ワークグループをミニカーネルに分割することであって、各ミニカーネルは、同時に実行するワークグループの数を含み、前記ワークグループの数は、前記ミニカーネルのコンカレンシーファクタであり、少なくとも１つの前記ミニカーネルの前記コンカレンシーファクタは、１よりも大きい、ことと、
前記並列プロセッサが、前記カーネルの少なくとも一部を前記ミニカーネルのシーケンスとして実行することと、
ミニカーネルの各シーケンスのパフォーマンス測定値を決定することと、
前記パフォーマンス測定値に基づいて、前記カーネルの所望のパフォーマンスを達成する特定のシーケンスを前記シーケンスから選択することと、
前記並列プロセッサが、前記カーネルを前記特定のシーケンスで実行することと、を含む、
方法。
【請求項２】
ミニカーネルにおいて同時に実行される全てのワークグループが連続している、請求項１の方法。
【請求項３】
前記ミニカーネルの少なくとも１つのシーケンス内の全てのミニカーネルは、共通のコンカレンシーファクタを有する、請求項１の方法。
【請求項４】
前記アプリケーションの実行中に新たなアプリケーションカーネルが呼び出される毎に、前記カーネルの少なくとも一部を実行することと、前記決定することと、前記選択することと、前記実行することと、を行うことをさらに含む、請求項１の方法。
【請求項５】
前記アプリケーションの実行中に動的に、前記カーネルの少なくとも一部を実行することと、前記決定することと、前記選択することと、前記実行することと、を行うことをさらに含む、請求項１の方法。
【請求項６】
前記所望のパフォーマンスを達成することは、実行時間を最小にすることと、熱的制限内で前記並列プロセッサを維持することと、電力効率及びエネルギー効率のうち少なくとも１つを最大にすることと、前記並列プロセッサ又は前記並列プロセッサを含むシステムの信頼性を最大にすることと、メモリの使用のためにワークグループ間の競合を最小にすることと、のうち少なくとも１つを含む、請求項１の方法。
【請求項７】
前記パフォーマンス測定値は、パフォーマンス測定値の変化を、前記カーネルを実行する計算ユニットの数の対応する変化で除算したパフォーマンス測定値である計算ユニットの感度（compute-unit sensitivity）を含む、請求項１の方法。
【請求項８】
前記アプリケーションの実行結果を、前記実行結果を表示するディスプレイに提供することをさらに含む、請求項１の方法。
【請求項９】
アプリケーション内のワークグループを含むカーネルのコンカレンシーファクタ（concurrency factor）を決定するように構成されたシステムであって、
前記アプリケーションを実行するように構成された並列プロセッサと、
前記並列プロセッサと情報を交換し、前記アプリケーションを記憶し、前記アプリケーションを前記並列プロセッサ内にロードするように構成された第１メモリと、
前記並列プロセッサと情報を交換するように構成された第２メモリと、を備え、
前記並列プロセッサは、
前記ワークグループをミニカーネルに分割することであって、各ミニカーネルは、同時に実行するワークグループの数を含み、前記ワークグループの数は、前記ミニカーネルのコンカレンシーファクタであり、少なくとも１つの前記ミニカーネルの前記コンカレンシーファクタは、１よりも大きい、ことと、
前記カーネルの少なくとも一部を前記ミニカーネルのシーケンスとして実行することと、
ミニカーネルの各シーケンスのパフォーマンス測定値を決定することと、
前記パフォーマンス測定値に基づいて、前記カーネルの所望のパフォーマンスを達成する特定のシーケンスを前記シーケンスから選択することと、
前記カーネルを前記特定のシーケンスで実行することと、
を行うように構成されている、
システム。
【請求項１０】
前記並列プロセッサは、連続しており同時に実行されるワークグループを備えるミニカーネルのシーケンスとして、前記カーネルの少なくとも一部を実行するように構成されている、請求項９のシステム。
【請求項１１】
前記並列プロセッサは、前記カーネルの少なくとも一部をミニカーネルのシーケンスとして実行するように構成されており、前記シーケンスの少なくとも１つのシーケンス内の全てのミニカーネルは、共通のコンカレンシーファクタを含む、請求項９のシステム。
【請求項１２】
前記並列プロセッサは、前記アプリケーションの実行中に新たなアプリケーションカーネルが呼び出される毎に、前記カーネルの少なくとも一部を実行することと、前記決定することと、前記選択することと、前記実行することと、を行うように構成されている、請求項９のシステム。
【請求項１３】
前記並列プロセッサは、前記アプリケーションの実行中に動的に、前記カーネルの少なくとも一部を実行することと、前記決定することと、前記選択することと、前記実行することと、を行うように構成されている、請求項９のシステム。
【請求項１４】
前記並列プロセッサは、実行時間を最小にすることと、熱的制限内で前記システムを維持することと、電力効率及びエネルギー効率のうち少なくとも１つを最大にすることと、前記システムの信頼性を最大にすることと、前記第１メモリ、前記第２メモリ又はこれらの両方のメモリの使用のためにワークグループ間の競合を最小にすることと、のうち少なくとも１つによって、前記カーネルの所望のパフォーマンスを達成する特定のシーケンスを選択するように構成されている、請求項９のシステム。
【請求項１５】
前記並列プロセッサは、前記パフォーマンス測定値として、パフォーマンス測定値の変化を、前記カーネルを実行する計算ユニットの数の対応する変化で除算したパフォーマンス測定値である計算ユニットの感度（compute-unit unit sensitivity）を測定するように構成されている、請求項９のシステム。
【請求項１６】
前記アプリケーションの実行結果を提供するように構成された出力デバイスをさらに備える、請求項９のシステム。
【請求項１７】
前記出力デバイスは、視覚的ディスプレイを備える、請求項１６のシステム。
【請求項１８】
前記共通のコンカレンシーファクタは２の累乗である、請求項３の方法。
【請求項１９】
前記計算ユニットの感度は、計算挙動（compute behavior）、メモリ挙動（memory behavior）、１つ以上のランタイム統計、及び、実行するワークグループの数、のうち少なくとも１つに基づいて決定される、請求項７の方法。
【請求項２０】
前記計算ユニットの感度は、計算挙動、メモリ挙動、１つ以上のランタイム統計、及び、実行するワークグループの数、のうち少なくとも１つの線形関数としてモデル化される、請求項７の方法。
【請求項２１】
前記並列プロセッサは、計算挙動、メモリ挙動、１つ以上のランタイム統計、及び、実行するワークグループの数、のうち少なくとも１つに基づいて、前記計算ユニットの感度を測定するように構成されている、請求項１５のシステム。
【請求項２２】
前記並列プロセッサは、計算挙動、メモリ挙動、１つ以上のランタイム統計、及び、実行するワークグループの数、のうち少なくとも１つの線形関数として前記計算ユニットの感度を測定するように構成されている、請求項１５のシステム。
【請求項２３】
前記共通のコンカレンシーファクタは２の累乗である、請求項１１のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１５年５月１３日に出願された米国特許出願第１４／７１０，８７９号の利益を主張し、その内容は、参照により本明細書に援用される。
【０００２】
本発明は、概して並列プロセッサに関し、特に並列プロセッサ上のアプリケーションの実行に関する。
【背景技術】
【０００３】
グラフィックスプロセッサやグラフィックスプロセッシングユニット（ＧＰＵ）等の並列プロセッサは、高度な並列計算デバイスである。その名称が示すように、ＧＰＵは、元来、ビデオ等の視覚情報を高速且つ効率的に処理するために開発されている。しかし最近では、これらは、より汎用的な大規模並列デバイスとして設計されている。現在のＧＰＵは、同時に数千の計算を実行することができ、この数は、時間とともに増加することになる。このような並列計算はスレッドと呼ばれる。ハードウェアの複雑さを軽減する（よって、より多くの並列計算ユニットを１つのチップ内に存在させる）ために、ＧＰＵは、複数のスレッドをまとめてバンドルし、ＳＩＭＤ（single-instruction-multiple-data）方式で実行する必要がある。すなわち、多くの異なるデータに対して同じ命令が同時に実行される。このようなスレッドのバンドルは、ウェーブフロント（wavefront）、ワープ（warp）又は他の名称で呼ばれる。
【０００４】
カーネルは、コンピューティングデバイス上で実行される、複数のスレッドを含むプログラム又はプログラムの一部である。複数のスレッドは、スレッドブロック及び他の名称として知られる１つ以上のワークグループにバンドルされ得る。
【発明の概要】
【課題を解決するための手段】
【０００５】
並列プロセッサ上で実行されるアプリケーション内のカーネルのコンカレンシーファクタ（concurrency factors）を決定する方法が開示される。また、この方法を実施するシステムが開示される。
【０００６】
一実施形態では、方法は、ミニカーネルのシーケンスとしてカーネルの少なくとも一部を実行することであって、各ミニカーネルは、ミニカーネルのコンカレンシーファクタとして定義される数の同時に実行するワークグループを含む、ことと、ミニカーネルの各シーケンスのパフォーマンス測定値を決定することと、パフォーマンス測定値に基づいて、カーネルの所望のパフォーマンスを達成する特定のシーケンスをシーケンスから選択することと、特定のシーケンスを用いてカーネルを実行することと、を含む。
【０００７】
添付の図面と併せて例として与えられる以下の説明から、より詳細な理解が得られるであろう。
【図面の簡単な説明】
【０００８】
【図１】並列プロセッサ上で実行されるアプリケーションのコンカレンシーファクタを決定する方法の概要を示す図である。
【図２】図１の方法の一実施形態の詳細を示す図である。
【図３Ａ】アプリケーション１について観測された結果を示す図である。
【図３Ｂ】アプリケーション２について観測された結果を示す図である。
【図４】１つ以上の開示された実施形態を実装可能な例示的なシステムのブロック図である。
【発明を実施するための形態】
【０００９】
グラフィックスプロセッシングユニット（ＧＰＵ）等の並列プロセッサで実行されるカーネルは、いくつかのワークグループを含む。ワークグループは、カーネルのソフトウェア要素であり、同時に及び／又は連続して実行することができる。これらのワークグループは、カーネルを実行する場合に、所定の順序で実行されることがよくある。同時にディスパッチされるワークグループの最大数は、レジスタファイルのリソース制限と、計算ユニット（ＣＵ）制限当たりのウェーブフロントの最大数と、に依存する場合がある。しかしながら、これは、メモリアクセス速度や枝分岐（branch divergence）等のアプリケーション特性及び要件を考慮していない。システムのリソースで許可される数のワークグループを同時に実行することは、メモリ及び制御フローの分岐等のような限られたリソースの競合によって、最高のパフォーマンス又は最高のエネルギー効率が得られない場合がある。
【００１０】
実行中のカーネルの所望のパフォーマンスを達成するために、同時にディスパッチ及び実行するワークグループの数を選択する方法及びシステムが開示される。アプリケーションの実行における現在のカーネルの少なくとも一部は、ミニカーネルのシーケンスとして実行される。シーケンス内の各ミニカーネルは、同時に実行されるいくつかのワークグループを含む。ミニカーネル内で同時に実行されるワークグループの数は、ミニカーネルのコンカレンシーファクタとして定義される。ミニカーネルは、ミニカーネルの各シーケンスにおいて順次実行される。一例として、限定するものではないが、カーネルは、合計で１２８のワークグループを含むと仮定する。カーネルは、１２８のシーケンシャルミニカーネルとして実行することができ、各ミニカーネルは、１つのワークグループを含む。代替として、カーネルは、６４のシーケンシャルミニカーネルとして実行することができ、各ミニカーネルは、同時に実行する２つのワークグループを含む。代替として、カーネルは、３２のシーケンシャルミニカーネルとして実行することができ、各ミニカーネルは、同時に実行する４つのワークグループを含む。代替として、カーネルは、同時に実行する１２８のワークグループを含む１つのミニカーネルとしてカーネルを実行することができる。後者の代替案は、カーネル自体の実行と同じである。
【００１１】
上で定義したように、ミニカーネルで同時に実行されるワークグループの数は、そのミニカーネルのコンカレンシーファクタと呼ばれ得る。したがって、例えば、合計で１２８のワークグループを、それぞれ１つのワークグループを含む１２８の順次実行されるミニカーネルに分割されるカーネルでは、各ミニカーネルのコンカレンシーファクタは１である。また、合計で１２８のワークグループを、それぞれ４つのワークグループを含む３２の順次実行されるミニカーネルに分割されるカーネルでは、各ミニカーネルのコンカレンシーファクタは４である、等であってよい。したがって、一実施形態で、カーネル又はカーネルの一部は、ミニカーネルのシーケンスとして実行することができ、所定のシーケンス内の各ミニカーネルは、共通のコンカレンシーファクタを有する。さらに、カーネル又はカーネルの一部を繰り返し実行することができ、各繰り返しは、共通のコンカレンシーファクタを有するミニカーネルのシーケンスとして実行され、共通のコンカレンシーファクタは、繰り返し毎に変化する。限定するとみなされるべきではないが、一例として、各繰り返しにおける共通のコンカレンシーファクタは、２の累乗であってもよい。したがって、例えば、１２８のワークグループを有するカーネルは、ミニカーネルのシーケンスとして実行することができるので、１つのシーケンスの共通のコンカレンシーファクタは、８、１６、３２、６４、１２８の他のシーケンスについてそれぞれ共通のコンカレンシーファクタを有し、１、他に２、他に４等である。
【００１２】
上記の各例では、各ミニカーネルは、同じ数のワークグループを含む、すなわち、全てのミニカーネルは、共通のコンカレンシーファクタを有する。しかし、これは必須ではなく、限定的であるとみなされない。代替として、カーネルは、異なる数のワークグループを有するミニカーネルのシーケンスに分割されてもよく、ワークグループの数の合計は、カーネル内のワークグループの総数である。例えば、合計で１２８のワークグループを有するカーネルは、５０のワークグループ、４０のワークグループ及び３８のワークグループを含む３つの順次実行されるミニカーネルとして実行することができる。換言すれば、カーネルは、５０、４０及び３８のコンカレンシーファクタを有する３つのミニカーネルのシーケンスとして実行することができる。代替として、同じカーネルを、９２のワークグループと３６のワークグループとを含む２つの順次実行されるミニカーネルとして実行することができる。したがって、一実施形態では、カーネル又はカーネルの一部を繰り返し実行することができ、各繰り返しは、様々なコンカレンシーファクタを有するミニカーネルのシーケンスとして実行される。前述したように、カーネル内のワークグループの総数と、ミニカーネルのシーケンス内の各ミニカーネルのコンカレンシーファクタとが与えられると、かかるミニカーネルを構築する多くの方法が存在する可能性がある。例えば、限定するものではないが、１２８のワークグループカーネルが、４のコンカレンシーファクタをそれぞれ含む３２のシーケンシャルミニカーネルとして実行する場合、１２８のワークグループを、４つのワークグループの３２のミニカーネルに分割する方法が存在する。一実施形態では、かかる可能性の全てを試すことができる。代替として、可能な分割の総数のサブセットが試されてもよく、このサブセットは、１つ以上の追加の基準に基づいて選択される。かかる基準の例として、限定するものではないが、カーネル内のワークグループの合計は、１次元、２次元、３次元又はこれらより高次元の抽象的な数学的空間に分布するとイメージされてもよい。各ワークグループは、空間の軸に沿った座標のセットによって、指定又はインデックスされ得る。全ての可能性から試行されるミニカーネルの分割数を低減するために、次の追加の基準又は制限が課されてもよい。すなわち、各ミニカーネルは、空間内で連続しているか又は隣接しているワークグループのみを含んでもよい。１つの例として、限定するものではないが、１次元空間内に配置された１５のワークグループを含むカーネルを考える。これらのワークグループは、番号１、２、３、…、１５でインデックスされ、直線、すなわち単一の軸に沿って配列されるように視覚化されてもよい。このカーネルを、それぞれ３つ、６つ、２つ及び４つのワークグループを含む４つのミニカーネルに分割することが望ましいと仮定する。追加の基準によれば、３つのワークグループのミニカーネルは、１、２、３のインデックスが付けられたワークグループを含んでもよい。但し、インデックスが７、８、９のワークグループが含まれている場合がある。しかしながら、これらのワークグループが全て連続しているとは限らないので、１、２及び７のインデックスが付けられたワークグループを含まない。同様に、ワークグループ７，８，１１、又は、ワークグループ７，９，１１を含まない場合がある。別の例として、全てのミニカーネルが同じ数のワークグループを含まなければならないという追加の基準が課された場合に、試行する可能性のある分割数が非常に少なくなる場合がある。例えば、それぞれ５つのワークグループを含む３つのミニカーネルに分割された１５ののワークグループの１次元のカーネルを考える。また、各ミニカーネルのワークグループは連続していなければならない。この場合、ワークグループ１〜５を含むミニカーネルと、ワークグループ６〜１０を含む他のミニカーネルと、ワークグループ１１〜１５を含む第３のミニカーネルと、の全ての基準を満たす分割は１つのみである。これらの基準は、高次元の抽象空間に配置されたワークグループを含むカーネルを容易に一般化することができる。
【００１３】
したがって、所望のパフォーマンスを達成するために並列プロセッサ上で実行するアプリケーション内のカーネルの１つ以上のコンカレンシーファクタを選択する方法は、以下のように進めることができる。カーネル又はカーネルの少なくとも一部を繰り返し実行することができる。各繰り返しは、ミニカーネルの別個のシーケンスとして実行されてもよく、各ミニカーネルは、同時に実行されるワークグループの数を示すコンカレンシーファクタを有する。ミニカーネルのこのようなシーケンス毎に、パフォーマンス測定値を決定することができる。パフォーマンス測定値に基づいて、カーネルの所望のパフォーマンスを達成する特定のシーケンスが選択される。ミニカーネルの特定のシーケンスでカーネルを実行する。図１〜４を用いて、これらの方法の要素を以下に詳細に説明する。
【００１４】
図１は、ＧＰＵ等の並列プロセッサ上で実行するアプリケーションのコンカレンシーファクタを決定する方法の一実施形態の概要を示す図である。方法は、（１１０）で開始する。アプリケーションの各カーネルが実行されると、例えば、後述するように、現在のカーネルに対してミニカーネルの特定のシーケンスが決定される（１２０）。現在のカーネルは、ミニカーネルの決定された特定のシーケンスで実行される（１３０）。現在のカーネルの実行が完了すると、アプリケーションの実行を完了するために実行される残りのカーネルがあるか否かを判別するためのチェックが実行される（１４０）。実行される残りのカーネルがある場合、新たなアプリケーションカーネルが呼び出され、その実行が開始される（１５０）。方法は（１２０）に戻り、ミニカーネルの新たな特定のシーケンスが、この次のカーネルに対して決定される。
【００１５】
（１２０）〜（１３０）〜（１４０）〜（１５０）〜（１６０）間のループは、（１４０）において、実行される残りのカーネルがないことがチェックによって明らかになるまで繰り返される。この場合、アプリケーションの実行が終了する（１６０）。アプリケーションの実行結果は、例えばディスプレイデバイスを含む出力デバイスによってユーザに提供されてもよい。
【００１６】
図２は、カーネルのミニカーネルの特定のシーケンスを決定する方法の一実施形態の詳細を示す図である。アプリケーション実行中の現在のカーネル又はこのカーネルの少なくとも一部は、ミニカーネルのシーケンスとして実行され、各ミニカーネルは、コンカレンシーファクタを含む（２１０）。一般に、各ミニカーネルのコンカレンシーファクタは、他の全てのミニカーネルのコンカレンシーファクタから独立し得る。
【００１７】
いくつかの実施態様において、シーケンス毎に、パフォーマンス測定値の組み合わせに基づいて、パフォーマンス測定値が決定される（２２０）。パフォーマンス測定値の非限定的な例には、例えばカーネル実行時間若しくはアプリケーション実行時間等の実行時間、温度、エネルギー散逸率、電力効率、エネルギー効率、例えばソフトエラー率によって測定される信頼性、メモリ等のリソースに対する競合の測定値、又は、計算ユニットの感度（compute-unit sensitivity）、のうち少なくとも１つが含まれる。計算ユニットの感度は、パフォーマンス測定値の変化を、実行中のいくつかの計算ユニットの対応する変化で割ったものとして定義することができる。計算ユニットの感度は、計算挙動（compute behavior）、メモリ挙動（memory behavior）、１つ以上のランタイム統計、又は、実行中のワークグループ数、のうち少なくとも１つに基づいて決定されてもよい。１つの非限定的な例として、計算ユニットの感度は、計算挙動、メモリ挙動、１つ以上のランタイム統計、又は、実行中のワークグループの数、のうち少なくとも１つの線形関数としてモデル化されてもよい。この線形関数の係数は、既知のカーネルのパフォーマンス統計及び計算ユニットの感度に関する回帰モデルによって決定される定数であってもよい。予測された計算ユニットの感度は、コンカレンシー（concurrency）がハイ（ＨＩＧＨ）、ミディアム（ＭＥＤＩＵＭ）又はロー（ＬＯＷ）であるかどうかを判別するために、閾値と比較されてもよい。この分類に応じて、同時に実行するワークグループの最大数を決定することができる。変形例では、他のコンカレンシーカテゴリも可能である。
【００１８】
図２を継続し、ミニカーネルの全ての所望のシーケンスが実行され、これらのパフォーマンス測定値が得られると、試行された全てのシーケンスのパフォーマンス測定値に基づいて、カーネルの所望のパフォーマンスを達成する特定のシーケンスが選択される（２３０）。カーネルは特定のシーケンスで実行される（２４０）。所望のパフォーマンスを達成する例は、限定的に解釈されないが、例えばカーネル実行時間若しくはアプリケーション実行時間等の実行時間を最小にすること、温度若しくはエネルギー散逸率を制限する等の熱的制限内でプロセッサ若しくはプロセッサを含むシステムを維持すること、プロセッサ若しくはプロセッサを含むシステムの信頼性を最大にすること、エネルギー効率を最大にすること、及び、電力効率を最大にすること、のうち１つ以上を含む。信頼性を最大にすることは、ソフトエラーの発生率を最小にすることを含んでもよい。所望のパフォーマンスを達成する別の例は、キャッシュメモリ等のメモリの使用のために、ワークグループ間の競合を最小にすることを含む。さらなる例として、同時に達成される上述の例の任意のサブセットを、所望のパフォーマンスを達成するものとして選択することができる。
【００１９】
図３Ａ及び図３Ｂは、並列プロセッサ上で実行するアプリケーションのカーネルのコンカレンシーファクタを決定する２つの例を示しているが、これらに限定されるものではない。ここで示される結果は、ＧＰＵ上で２つの異なるアプリケーションを実行することによって得られた実際の実験結果である。図３Ａは、１つのアプリケーション（アプリケーション１）の結果を示し、図３Ｂは、他のアプリケーション（アプリケーション２）の同様の結果を示している。図３Ａ及び図３Ｂの両方において、各アプリケーションのカーネルの少なくとも一部は、各シーケンスのミニカーネルが全て同じ数のワークグループ（すなわち、同じコンカレンシーファクタ）を有するミニカーネルのシーケンスとして実行される。垂直軸に沿った縦線の高さは、水平軸上の対応する数によって示される共通のコンカレンシーファクタを有するシーケンスで得られるパフォーマンス測定値（本実施例では、カーネル実行時間）を示している。これらの例では、所望のパフォーマンスを達成することは、カーネル実行時間を最小にすることを含む。
【００２０】
異なる共通のコンカレンシーファクタを用いたパフォーマンス測定値の変化は、図３Ａ及び図３Ｂに示す２つのアプリケーションで異なる。図３Ａの例では、（３０５）で示すように、共通のコンカレンシーファクタが最大検査値（すなわち、１２８）である場合に、最小カーネル実行時間（所望のパフォーマンス）が得られる。一方、図３Ｂでは、（３１０）で示すように、コンカレンシーファクタが６４の場合に所望のパフォーマンスが得られる。この場合、最大の検査されたコンカレンシーファクタ（ここでは、５１２）よりも低いコンカレンシーファクタで所望のパフォーマンスが得られる。これらについての可能な説明は、限定的に解釈されないが、以下の通りである。コンカレンシーファクタが１から増加すると、同時に実行するワークグループの数が増えることによって実行時間が減少する。これと同時に、同時に実行するワークグループの数が増えると、メモリ等のリソースに対するワークグループ間の競合が増加する。この競合は、実行時間を増加させる傾向がある。同時に実行するワークグループの数がいくつかの数（この例では６４）を超えると、競合の影響が同時実行の影響を支配し、実行時間が、コンカレンシーファクタの増加とともに増える。
【００２１】
図２に戻ると、ここに示された例では、所望のパフォーマンスを達成する特定のミニカーネルシーケンスは、アプリケーションの並列要求（parallelism demands）が経時的に変化するにつれて、アプリケーションの実行中にカーネルが呼び出される毎に決定される。これは、カーネルの少なくとも一部の実行（２１０）、パフォーマンス測定値の決定（２２０）、所望のパフォーマンスを達成する特定のシーケンスの選択（２３０）、及び、特定のシーケンスでのカーネルの実行（２４０）を行うことによって達成することができ、これらの全ては、アプリケーションの実行中に新たなアプリケーションカーネルが呼び出される毎に実行される。非限定的な例として、これは、グラフアルゴリズム又はイレギュラーなアプリケーションの場合である。
【００２２】
選択された特定のシーケンスは、カーネルの実行中に一定に維持されてもよい。代替の実施形態は、カーネルの少なくとも一部の実行（２１０）、決定（２２０）、選択（２３０）及び実行（２４０）を行うことを含んでもよい。これらの全ては、計算環境の変化に応じて、カーネルの実行中に動的に行われる。非限定的な例として、カーネルの実行として使用される選択された特定のミニカーネルシーケンスは、パフォーマンス統計及びカーネルフェーズの変更に基づいて、カーネル実行中に変更され得る。
【００２３】
図４は、１つ以上の開示された実施形態を実装可能な例示的なデバイス又はシステム４００のブロック図である。システム４００は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータを含むことができる。システム４００は、プロセッサ４０２と、メモリ４０４と、ストレージ４０６と、１つ以上の入力デバイス４０８と、アプリケーションの実行結果を提供するように構成された１つ以上の出力デバイス４１０と、を含む。出力デバイス４１０は、視覚的ディスプレイを含むことができる。また、システム４００は、オプションとして、入力ドライバ４１２及び出力ドライバ４１４を含むことができる。システム４００は、図４に示されていない追加のコンポーネントを含んでもよいことを理解されたい。
【００２４】
プロセッサ４０２は、中央処理装置（ＣＰＵ）、グラフィックスプロセッシングユニット（ＧＰＵ）、同じダイ上に配置されたＣＰＵ及びＧＰＵ、又は、１つ以上のプロセッサコアを含むことができ、各プロセッサコアは、ＣＰＵ又はＧＰＵであってもよい。メモリ４０４は、プロセッサ４０２と同じダイ上に配置されてもよいし、プロセッサ４０２とは別に配置されてもよい。メモリ４０４は、例えばランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ若しくはキャッシュ等の揮発性又は不揮発性メモリを含むことができる。
【００２５】
ストレージ４０６は、例えばハードディスクドライブ、ソリッドステートドライブ、光ディスク若しくはフラッシュドライブ等の固定又は取り外し可能な記憶装置を含むことができる。入力デバイス４０８は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリックスキャナ、又は、ネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／若しくは受信のための無線ローカルエリアネットワークカード）を含むことができる。出力デバイス４１０は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、１つ以上のライト、アンテナ、又は、ネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／若しくは受信のための無線ローカルエリアネットワークカード）を含むことができる。
【００２６】
入力ドライバ４１２は、プロセッサ４０２及び入力デバイス４０８と通信し、プロセッサ４０２が入力デバイス４０８から入力を受信することを可能にする。出力ドライバ４１４は、プロセッサ４０２及び出力デバイス４１０と通信し、プロセッサ４０２が出力デバイス４１０に出力を送信することを可能にする。入力ドライバ４１２及び出力ドライバ４１４は、オプションのコンポーネントであって、入力ドライバ４１２及び出力ドライバ４１４が存在しない場合にはデバイス４００が同じ方法で動作することに留意されたい。
【００２７】
システム４００は、上述した方法の１つ以上の実施形態を実装することによって、アプリケーション内のカーネルのコンカレンシーファクタを決定するように構成することができる。並列プロセッサ４０２は、１つ以上のカーネルとしてアプリケーションを実行するように構成されてもよい。メモリ４０４又はストレージ４０６は、並列プロセッサ４０２と情報を交換し、アプリケーションを記憶し、アプリケーションを並列プロセッサ４０２内にロードするように構成されてもよい。並列プロセッサ４０２は、ミニカーネルのシーケンスとしてカーネルの少なくとも一部を実行するように構成されてもよい。各ミニカーネルは、同時に実行されるいくつかのワークグループを含み、ワークグループの数は、ミニカーネルのコンカレンシーファクタとして定義されてもよい。並列プロセッサ４０２は、ミニカーネルの各シーケンスのパフォーマンス測定値を決定し、パフォーマンス測定値に基づいて、カーネルの所望のパフォーマンスを達成する特定のシーケンスをシーケンスから選択し、特定のシーケンスでカーネルを実行する、ように構成されてもよい。
【００２８】
並列プロセッサ４０２は、アプリケーションの実行中に新たなアプリケーションカーネルが呼び出される毎に、上述した、カーネルの少なくとも一部を実行すること、決定すること、選択すること及び実行することを行うように構成されてもよい。並列プロセッサ４０２は、アプリケーションの実行中に動的に、カーネルの少なくとも一部を実行すること、決定すること、選択すること及び実行することを行うように構成されてもよい。
【００２９】
並列プロセッサ４０２は、実行時間を最小にすること、熱的制限内でシステムを維持すること、電力効率及びエネルギー効率の少なくとも１つを最大にすること、システムの信頼性を最大にすること、並びに、第１メモリ、第２メモリ又はこれら両方のメモリの使用のためにワークグループ間の競合を最小にすること、のうち少なくとも１つによって、カーネルの所望のパフォーマンスを達成する特定のシーケンスを選択するように構成されてもよい。
【００３０】
並列プロセッサ４０２は、パフォーマンス測定値として計算ユニットの感度を測定するように構成されてもよい。並列プロセッサ４０２は、計算挙動、メモリ挙動、１つ以上のランタイム統計、又は、実行するワークグループの数、のうち少なくとも１つに基づいて、計算ユニットの感度を決定するように構成されてもよい。並列プロセッサ４０２は、計算挙動、メモリ挙動、１つ以上のランタイム統計、又は、実行するワークグループの数、のうち少なくとも１つの線形関数として計算ユニットの感度を決定するように構成されてもよい。
【００３１】
並列プロセッサ４０２は、連続して同時に実行するワークグループを含むミニカーネルのシーケンスとして、カーネルの少なくとも一部を実行するように構成されてもよい。並列プロセッサ４０２は、ミニカーネルのシーケンスとしてカーネルの少なくとも一部を実行するように構成されてもよく、少なくとも１つのシーケンス内の全てのミニカーネルは、共通のコンカレンシーファクタを含む。共通のコンカレンシーファクタは、２の累乗であってもよい。
【００３２】
本明細書の開示に基づいて多くの変形が可能であることを理解されたい。特徴及び要素は、特定の組み合わせで上述したように説明されているが、各特徴又は要素は、他の特徴及び要素なしに単独で、又は、他の特徴及び要素の有無にかかわらず様々な組み合わせで使用されてもよい。
【００３３】
提供される方法は、汎用コンピュータ、プロセッサ又はプロセッサコアに実装されてもよい。適切なプロセッサは、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアに関連する１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路、任意の他のタイプの集積回路（ＩＣ）、及び／又は、状態機械を含むことができる。かかるプロセッサは、処理されたハードウェア記述言語（ＨＤＬ）命令の結果と、ネットリストを含む他の中間データ（コンピュータ可読媒体に記憶することが可能な命令等）の結果と、を用いて製造プロセスを構成することによって、製造されてもよい。かかる処理の結果は、本発明の態様を実施するプロセッサを製造するために、半導体製造プロセスで使用されるマスクワークであってもよい。
【００３４】
本明細書で提供される方法又はフロー図は、汎用コンピュータ又はプロセッサによる実行のために、コンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア又はファームウェアに実装されてもよい。コンピュータ可読記憶媒体の例は、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、ＣＤ−ＲＯＭディスク及びデジタル多目的ディスク（ＤＶＤ）等の光媒体を含む。
【図１】
0006659724.tif 000002
【図２】
0006659724.tif 000003
【図３Ａ】
0006659724.tif 000004
【図３Ｂ】
0006659724.tif 000005
【図４】
0006659724.tif 000006