(57)【要約】マルチカーネル波面スケジューラを実装するためのシステム、装置、及び方法が開示されている。システムは、１つまたは複数のメモリに結合された少なくとも並列プロセッサを含み、並列プロセッサは、コマンドプロセッサ及び複数の計算ユニットを含む。コマンドプロセッサは、計算ユニット上で実行するように複数のカーネルを起動する。各計算ユニットには、実行ユニットで実行するように複数のカーネルからの波面をスケジュールするためのマルチレベルスケジューラが含まれる。第１のレベルのスケジューラは、カーネルの優先度に基づいて波面をグループ化することにより、スケジューリンググループを作成する。したがって、同じ優先度を有するカーネルからの波面は、第１のレベルのスケジューラによって同じスケジューリンググループにグループ化される。次に、第１のレベルのスケジューラは、複数のスケジューリンググループから、実行するように最も優先度の高いスケジューリンググループを選択する。そして、第２のレベルのスケジューラは、第１のレベルのスケジューラによって選択されたスケジューリンググループから実行するように波面をスケジュールする。【選択図】図５
2021526257.tif 000002
【特許請求の範囲】
【請求項１】
複数の計算ユニットと、
前記複数の計算ユニットに結合されたコマンドプロセッサであって、前記コマンドプロセッサは、カーネルを前記複数の計算ユニットにディスパッチするように構成される、前記コマンドプロセッサと、を備え、
前記複数の計算ユニットの各計算ユニットは、
前記コマンドプロセッサから、複数のカーネルの複数の波面を受信し、
前記複数の波面の波面を、少なくとも部分的に共通の基準に基づいて複数のスケジューリンググループにグループ化し、
前記複数のスケジューリンググループから所定のスケジューリンググループを選択し、
前記所定のスケジューリンググループからのみ実行するように波面をスケジュールするように構成される、システム。
【請求項２】
前記共通の基準は、カーネル及び優先度のうちの少なくとも１つである、請求項１に記載のシステム。
【請求項３】
各計算ユニットは、同じ優先度を有する波面を同じスケジューリンググループにグループ化するように構成される、請求項２に記載のシステム。
【請求項４】
各計算ユニットは、 
前記計算ユニット上でのリソース競合を示す、計算ユニットのストールサイクル、キャッシュミス率、メモリアクセス遅延、及びリンク使用率の少なくとも１つを含む１つまたは複数の条件を監視し、
監視されている前記１つまたは複数の条件に基づいて、リソース競合の第１の測定値を生成し、
リソース競合の前記第１の測定値が第１の閾値より大きいと判定することに応じて、最も優先度の低いスケジューリンググループをスケジュール解除されたキューに移動するようにさらに構成され、
前記スケジュール解除されたキューに格納されたスケジューリンググループからの波面は、前記計算ユニット上で実行するようにスケジュールされないようにされる、請求項１に記載のシステム。
【請求項５】
各計算ユニットは、
前記最も優先度の低いスケジューリンググループを前記スケジュール解除されたキューに移動した後、所定の時間待機し、
監視されている前記１つまたは複数の条件に基づいて、リソース競合の第２の測定値を生成し、
リソース競合の前記第２の測定値が前記第１の閾値より大きいと判定することに応じて、次に優先度の低いスケジューリンググループを前記スケジュール解除されたキューに移動するように構成される、請求項４に記載のシステム。
【請求項６】
各計算ユニットは、
前記最も優先度の低いスケジューリンググループを前記スケジュール解除されたキューに移動した後、所定の時間待機し、
監視されている前記１つまたは複数の条件に基づいて、リソース競合の第２の測定値を生成し、
リソース競合の前記第２の測定値が第２の閾値未満であると判定することに応じて、最も優先度の高いスケジューリンググループを前記スケジュール解除されたキューから移動するように構成される、請求項４に記載のシステム。
【請求項７】
各計算ユニットは、前記複数のスケジューリンググループから最も優先度の高いスケジューリンググループを選択するようにさらに構成される、請求項１に記載のシステム。
【請求項８】
複数のカーネルの複数の波面を受信することと、
前記複数の波面の波面を、少なくとも部分的に共通の基準に基づいて複数のスケジューリンググループにグループ化することと、
前記複数のスケジューリンググループから所定のスケジューリンググループを選択することと、
前記所定のスケジューリンググループからのみ実行するように波面をスケジュールすることと、を含む、方法。
【請求項９】
前記共通の基準は、カーネル及び優先度のうちの少なくとも１つである、請求項８に記載の方法。
【請求項１０】
同じ優先度を有するカーネルからの波面を同じスケジューリンググループにグループ化することをさらに含む、請求項９に記載の方法。
【請求項１１】
前記計算ユニット上のリソース競合を示す１つまたは複数の条件を監視することであって、前記１つまたは複数の条件は、計算ユニットのストールサイクル、キャッシュミス率、メモリアクセス遅延、及びリンク使用率のうちの少なくとも１つを含む、前記監視することと、
監視されている前記１つまたは複数の条件に基づいて、リソース競合の第１の測定値を生成することと、
リソース競合の前記第１の測定値が第１の閾値より大きいと判定することに応じて、最も優先度の低いスケジューリンググループをスケジュール解除されたキューに移動することと、をさらに含み、前記スケジュール解除されたキューに格納されたスケジューリンググループからの波面は、前記計算ユニット上で実行するようにスケジュールされないようにされる、請求項８に記載の方法。
【請求項１２】
前記最も優先度の低いスケジューリンググループを前記スケジュール解除されたキューに移動した後、所定の時間待機することと、
監視されている前記１つまたは複数の条件に基づいて、リソース競合の第２の測定値を生成することと、
リソース競合の前記第２の測定値が、前記第１の閾値より大きいと判定することに応じて、次に優先度の低いスケジューリンググループを前記スケジュール解除されたキューに移動することと、をさらに含む、請求項１１に記載の方法。
【請求項１３】
前記最も優先度の低いスケジューリンググループを前記スケジュール解除されたキューに移動した後、所定の時間待機することと、
監視されている前記１つまたは複数の条件に基づいて、リソース競合の第２の測定値を生成することと、
リソース競合の前記第２の測定値が、第２の閾値未満であると判定することに応じて、最も優先度の高いスケジューリンググループを前記スケジュール解除されたキューから移動することと、をさらに含む、請求項１１に記載の方法。
【請求項１４】
前記複数のスケジューリンググループから最も優先度の高いスケジューリンググループを選択することをさらに含む、請求項８に記載の方法。
【請求項１５】
メモリと、
前記メモリに結合されているプロセッサと、を備え、
前記プロセッサは、
複数のカーネルの複数の波面を受信し、
前記複数の波面の波面を、少なくとも部分的に共通の基準に基づいて複数のスケジューリンググループにグループ化し、
前記複数のスケジューリンググループから所定のスケジューリンググループを選択し、
前記所定のスケジューリンググループからのみ実行するように波面をスケジュールするように構成される、装置。
【請求項１６】
前記共通の基準は、カーネル及び優先度のうちの少なくとも１つである、請求項１５に記載の装置。
【請求項１７】
前記プロセッサは、同じ優先度を有するカーネルからの波面を同じスケジューリンググループにグループ化するように構成される、請求項１６に記載の装置。
【請求項１８】
前記プロセッサは、 
前記プロセッサ上のリソース競合を示す、計算ユニットのストールサイクル、キャッシュミス率、メモリアクセス遅延、及びリンク使用率のうちの少なくとも１つを含む１つまたは複数の条件を監視し、
監視されている前記１つまたは複数の条件に基づいて、リソース競合の第１の測定値を生成し、
リソース競合の前記第１の測定値が第１の閾値より大きいと判定することに応じて、最も優先度の低いスケジューリンググループをスケジュール解除されたキューに移動するようにさらに構成され、
前記スケジュール解除されたキューに格納されたスケジューリンググループからの波面は、前記プロセッサ上で実行するようにスケジュールされないようにされる、請求項１５に記載の装置。
【請求項１９】
前記プロセッサは、
前記最も優先度の低いスケジューリンググループを前記スケジュール解除されたキューに移動した後、所定の時間待機し、
監視されている前記１つまたは複数の条件に基づいて、リソース競合の第２の測定値を生成し、
リソース競合の前記第２の測定値が前記第１の閾値より大きいと判定することに応じて、次に優先度の低いスケジューリンググループを前記スケジュール解除されたキューに移動するようにさらに構成される、請求項１８に記載の装置。
【請求項２０】
前記プロセッサは、
前記最も優先度の低いスケジューリンググループを前記スケジュール解除されたキューに移動した後、所定の時間待機し、
監視されている前記１つまたは複数の条件に基づいて、リソース競合の第２の測定値を生成し、
リソース競合の前記第２の測定値が第２の閾値未満であると判定することに応じて、最も優先度の高いスケジューリンググループを前記スケジュール解除されたキューから移動するようにさらに構成される、請求項１８に記載の装置。
【発明の詳細な説明】
【背景技術】
【０００１】
本発明は、ローレンスリバモアナショナルセキュリティ（米国エネルギー省（ＤＯＥ）から授与された、主要契約番号：ＤＥ−ＡＣ５２−０７ＮＡ２７３４４、サブ契約番号：Ｂ６２０７１７）によるＰａｔｈＦｏｒｗａｒｄ  Ｐｒｏｊｅｃｔの下、政府の助成を受けて行われたものである。米国政府は、本発明に一定の権利を有する。
【０００２】
関連技術の説明
最新のプロセッサ（グラフィックス処理装置（ＧＰＵ）など）には、各プロセスが複数のカーネルを起動する可能性がある、複数のプロセスの同時実行をサポートする構造が含まれている。その結果、複数のプロセスからの複数のカーネルを同じプロセッサで同時に実行できる。本明細書で使用される場合、「カーネル」は、１つまたは複数の実行可能プログラム命令である。通常、このようなカーネルは関数として識別され、複数のデータ要素上で操作する場合、カーネルの複数のインスタンスが並行して実行される。このような各インスタンスは、実行の「スレッド」と呼ばれる。このようなスレッドのグループは、本明細書では「ワープ」または「ウェーブフロント（波面）」とも呼ばれる。通常、ＧＰＵカーネルには複数のワープまたは波面がある。単一のプロセスまたは複数のプロセスから複数のカーネルを同時に実行すると、これらのカーネルがプロセッサの共有リソースをめぐって競合することになる。このようなシナリオでは、これらの共有リソースへのアクセスを求める複数のカーネルからの干渉により、全体的なパフォーマンスが低下する可能性がある。さらに、同じカーネルのワークグループとは異なり、異なるカーネルのワークグループは完全に異なるエンティティであり、共通性がないため、異なるカーネルを同時に実行すると、共有リソースの競合が悪化する可能性がある。
【０００３】
添付図面と共に以下の説明を参照することによって、本明細書に記載される方法及び機構の利点をより良く理解することができよう。
【図面の簡単な説明】
【０００４】
【図１】コンピューティングシステムの一実施態様のブロック図である。
【図２】コンピューティングシステムの別の実施態様のブロック図である。
【図３】計算ユニットの一実施態様のブロック図である。
【図４】所定の計算ユニットのための波面スケジューリングの一実施態様のブロック図である。
【図５】実行するように複数のカーネルからの波面をスケジュールするための方法の一実施態様を示す一般化された流れ図である。
【図６】優先度情報が考慮されていないか利用できない場合に、複数のカーネルからワークグループをスケジュールするための方法の一実施態様を示す一般化された流れ図である。
【図７】リソース競合に基づいて波面スケジューリングを動的に抑制するための方法の一実施態様を示す一般化された流れ図である。
【図８】実行するように複数のカーネルからの波面をスケジュールするための方法の一実施態様を示す一般化された流れ図である。
【発明を実施するための形態】
【０００５】
以下の説明では、本明細書で提示される方法及び機構の完全な理解をもたらすために、多数の特定の詳細が示される。しかしながら、当業者は、それらの特定の詳細なしに様々な実施態様を実践し得ることを認識するべきである。いくつかの例では、本明細書で説明されるアプローチを曖昧にすることを回避するために、周知の構造、コンポーネント、信号、コンピュータプログラム命令、及び技術が詳細には示されていない。例示の簡潔性及び明確さのために、図に示される要素は、必ずしも縮尺通りに描かれていないことは理解されよう。例えば、要素のいくつかの寸法は、他の要素に対して誇張されてよい。
【０００６】
マルチカーネル波面スケジューラを実装するための様々なシステム、装置、及び方法が本明細書に開示されている。システムは、１つまたは複数のメモリに結合された複数の計算ユニットを備えた少なくとも１つのプロセッサを含む。一部の実施態様では、システムに複数のプロセッサが含まれている。例えば、一実施態様では、システムは、中央処理装置（ＣＰＵ）及びグラフィックス処理装置（ＧＰＵ）を含む。他の実施態様では、システムには他の数及び／または種類のプロセッサが含まれる。様々な実施態様を説明する際に、ＣＰＵは、本明細書では第１のプロセッサと呼ばれ、ＧＰＵは、本明細書では第２のプロセッサと呼ばれる。第１のプロセッサは、実施態様に応じて任意の種類のプロセッサで実装される。さらに、第２のプロセッサは、実施態様に応じて任意の種類のプロセッサで実装される。
【０００７】
一実施態様では、複数のプロセスが第１のプロセッサで実行されており、各プロセスが１つまたは複数のカーネルを呼び出して第２のプロセッサで実行される可能性がある。第２のプロセッサで呼び出されるカーネルには、通常、複数の波面が含まれている。一実施態様では、第２のプロセッサは、コマンドプロセッサ及び複数の計算ユニットを含む。コマンドプロセッサは、第２のプロセッサのさまざまな計算ユニットでカーネルを起動する。一実施態様では、各計算ユニットは、計算ユニット上で起動及び実行されるカーネルの波面をスケジュールするためのマルチレベルスケジューラを含む。マルチレベルスケジューラは、波面実行の前進を保証しながら、計算ユニット上で実行されている複数のカーネル間のリソース競合を減らすのに役立つ方法で波面をスケジュールする。
【０００８】
一実施態様では、第１のレベルのスケジューラは、波面のカーネルの優先度に基づいて、波面をスケジューリンググループにグループ化する。たとえば、最優先のカーネルの場合、これらのカーネルのすべての波面は、第１のスケジューリンググループにグループ化される。第２に優先度の高いカーネルの場合、これらのカーネルのすべての波面が第２のスケジューリンググループにグループ化される。第３に優先度の高いカーネルの場合、これらのカーネルのすべての波面は第３のスケジューリンググループにグループ化され、以下同様に続く。次に、第１のレベルのスケジューラは、複数のスケジューリンググループから、最もスケジューリングの優先度が高いスケジューリンググループを選択する。次に、第２のレベルのスケジューラは、第１のレベルのスケジューラによって選択されたスケジューリンググループから波面をスケジュールする。実施態様に応じて、第２のレベルのスケジューラは、ラウンドロビンポリシー、最も古いウェーブフロントの第１のポリシー、または第１のレベルのスケジューラによって選択されたスケジューリンググループからスケジュールする波面フロントを選択するための別のポリシーを使用する。
【０００９】
一実施態様では、各計算ユニットは、計算ユニット上のリソース使用率を示す１つまたは複数の条件を監視するための制御ロジックを含む。制御ロジックは、監視されている１つまたは複数の条件に基づいてリソース競合の測定値を生成する。リソース競合の測定値が第１の閾値よりも大きい場合、スケジューラは最も優先度の低いスケジューリンググループをスケジュール解除されたキューに移動して、このグループが実行するようにスケジュールされないようにする。次に、制御ロジックは、リソース競合の後続の測定値を生成する前に、所定の時間待機する。後続の測定値がまだ第１の閾値よりも大きい場合、スケジューラは次に優先度の低いスケジューリンググループをスケジュール解除されたキューに移動する。ただし、その後のリソース競合の測定値が第２の閾値未満の場合、スケジューラは最も優先度の高いスケジューリンググループをスケジュール解除されたキューから移動して、このグループが実行するようにスケジュールできるようにする。制御ロジックとスケジューラは、条件を監視し、所定の時間待機し、リソース競合の測定値と１つまたは複数の閾値との比較に基づいて、キュー間でスケジューリンググループを移行するかどうかを決定するこの操作パターンを続行する。
【００１０】
ここで、図１を参照して、コンピューティングシステム１００の一実施態様のブロック図を示す。一実施態様では、コンピューティングシステム１００は、少なくともプロセッサ１０５Ａ〜１０５Ｎ、入出力（Ｉ／Ｏ）インターフェース１２０、バス１２５、メモリコントローラ（複数可）１３０、ネットワークインターフェース１３５、及びメモリデバイス１４０（複数可）を含む。他の実施態様では、コンピューティングシステム１００は、他のコンポーネントを含み、及び／またはコンピューティングシステム１００は異なって配列される。プロセッサ１０５Ａ〜１０５Ｎは、システム１００に含まれる任意の数のプロセッサを表す。
【００１１】
一実施態様では、プロセッサ１０５Ａは、中央処理装置（ＣＰＵ）などの汎用プロセッサである。この実施態様では、プロセッサ１０５Ｎは、高度に並列化されたアーキテクチャを備えたデータ並列プロセッサである。データ並列プロセッサには、グラフィックス処理装置（ＧＰＵ）、デジタル信号プロセッサ（ＤＳＰ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）などが含まれる。いくつかの実施態様では、プロセッサ１０５Ａ〜１０５Ｎは、複数のデータ並列プロセッサを含む。一実施態様では、プロセッサ１０５Ａ〜１０５Ｎの１つ以上は、複数の計算ユニットを含む。各計算ユニットには、計算ユニット上でのリソース競合を減らす方法で実行するように複数のカーネルからの波面をスケジュールするためのマルチレベルスケジューラが含まれる。各計算ユニットはまた、リソースの競合を監視し、監視されたリソースの競合の測定値が閾値より大きい場合、波面のスケジューリンググループを抑制する。
【００１２】
メモリコントローラ（複数可）１３０は、プロセッサ１０５Ａ〜１０５Ｎ及びＩ／Ｏインターフェース１２０に結合されたＩ／Ｏデバイス（図示せず）によってアクセス可能な任意の数及び種類のメモリコントローラを表す。メモリコントローラ１３０（複数可）は、任意の数及び種類のメモリデバイス（複数可）１４０に結合される。メモリデバイス（複数可）１４０は、任意の数及び種類のメモリデバイスを表す。例えば、メモリデバイス（複数可）１４０におけるメモリの種類には、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、または強誘電体ランダムアクセスメモリ（ＦｅＲＡＭ）などが含まれる。
【００１３】
Ｉ／Ｏインターフェース１２０は、任意の数及び種類のＩ／Ｏインターフェース（例えば、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）バス、ＰＣＩ−Ｅｘｔｅｎｄｅｄ（ＰＣＩ−Ｘ）、ＰＣＩＥ（ＰＣＩ  Ｅｘｐｒｅｓｓ）バス、ギガビットイーサネット（ＧＢＥ）バス、ユニバーサルシリアルバス（ＵＳＢ））を表す。様々な種類の周辺機器デバイス（図示せず）は、Ｉ／Ｏインターフェース１２０に結合される。そのような周辺機器デバイスは、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティック、または他の種類のゲームコントローラ、メディア記録デバイス、外部記憶装置、及びネットワークインターフェースカードなどを含む（がそれらに限定されない）。ネットワークインターフェース１３５は、ネットワーク上でネットワークメッセージを送受信するために使用される。
【００１４】
様々な実施態様では、コンピューティングシステム１００は、コンピュータ、ラップトップ、モバイルデバイス、ゲームコンソール、サーバ、ストリーミングデバイス、ウェアラブルデバイス、または様々な他の種類のコンピューティングシステムもしくはコンピューティングデバイスのいずれかである。コンピューティングシステム１００のコンポーネントの数は、実施態様ごとに変わることに留意されたい。例えば、他の実施態様では、図１に示された数よりも多くのまたは少ない各々のコンポーネントが存在する。また、他の実施態様では、コンピューティングシステム１００は、図１に示されていない他のコンポーネントを含むことに留意されたい。加えて、他の実施態様では、コンピューティングシステム１００は、図１に示された以外の方式において構造化される。
【００１５】
ここで、図２に目を向けると、コンピューティングシステム２００の別の実施態様のブロック図が示される。一実施態様では、システム２００は、ＧＰＵ２０５、システムメモリ２２５、及びローカルメモリ２３０を含む。システム２００はまた、図を曖昧にすることを回避するために示されない他のコンポーネントを含む。ＧＰＵ２０５は、少なくともコマンドプロセッサ２３５、制御ロジック２４０、ディスパッチユニット２５０、計算ユニット２５５Ａ〜２５５Ｎ、メモリコントローラ２２０、全体データ共有部２７０、レベル１（Ｌ１）キャッシュ２６５、及びレベル２（Ｌ２）キャッシュ２６０を含む。他の実施態様では、ＧＰＵ２０５は他のコンポーネントを含み、図示されたコンポーネントのうちの１つ以上を省略し、図２に１つのインスタンスのみが示されている場合でも、コンポーネントの複数のインスタンスを有し、及び／または他の適切な方法で編成される。
【００１６】
様々な実施態様において、コンピューティングシステム２００は、様々な種類のソフトウェアアプリケーションのいずれかを実行する。所定のソフトウェアアプリケーションを実行する一環として、コンピューティングシステム２００のホストＣＰＵ（図示せず）は、ＧＰＵ２０５上で実行されるカーネルを起動する。コマンドプロセッサ２３５は、ホストＣＰＵからカーネルを受信し、ディスパッチユニット２５０を使用して、計算ユニット２５５Ａ〜２５５Ｎにカーネルをディスパッチする。制御ロジック２４０は、ＧＰＵ２０５の様々なリソースを監視し、ディスパッチユニット２５０が、リソース使用率に基づいて計算ユニット２５５Ａ〜２５５Ｎに波面をディスパッチする方法を決定するのを助ける。計算ユニット２５５Ａ〜２５５Ｎ上で実行されるカーネル内のスレッドは、ＧＰＵ２０５内の全体データ共有部２７０、Ｌ１キャッシュ２６５、及びＬ２キャッシュ２６０からデータを読み出し、それらにデータを書き込む。図２には示されないが、一実施態様では、計算ユニット２５５Ａ〜２５５Ｎはまた、各計算ユニット２５５Ａ〜２５５Ｎ内に１つまたは複数のキャッシュ及び／またはローカルメモリを含む。
【００１７】
ここで図３を参照すると、計算ユニット３００の一実施態様のブロック図が示される。一実施態様では、計算ユニット３００は、第１のレベルのスケジューラ３１０、第２のレベルのスケジューラ３２０、単一命令、複数データ（ＳＩＭＤ）ユニット３２５Ａ〜３２５Ｎ、スケジューリングキュー３３０、スケジュール解除されたキュー３４０、制御ロジック３５０、及びキャッシュサブシステム３５５を含む。第１のレベルのスケジューラ３１０及び第２のレベルのスケジューラ３２０は、計算ユニット３００上のリソース競合を低減するのに役立つ、複数のカーネルの波面のための２レベルのスケジューリングスキームを実装するために使用される。
【００１８】
他の実施態様では、計算ユニット３００は他のコンポーネントを含み、及び／または配置が異なる。ＳＩＭＤユニット３２５Ａ〜３２５Ｎは、波面を実行するための任意の数のＳＩＭＤユニットを表す。スケジューリングキュー３３０は、ＳＩＭＤユニット３２５Ａ〜３２５Ｎでスケジュールすることができる波面のスケジューリンググループを格納するための任意の数のキューを表す。スケジュール解除されたキュー３４０は、ＳＩＭＤユニット３２５Ａ〜３２５Ｎでスケジュールすることが許可されていないスケジューリンググループを格納するための任意の数のキューを表す。計算ユニット３００は、図を曖昧にすることを回避するために示されない他のコンポーネントも含むことに留意されたい。
【００１９】
一実施態様では、第１のレベルのスケジューラ３１０は、波面のカーネルの優先度に基づいて、波面をスケジューリンググループにグループ化する。たとえば、最優先のカーネルの場合、これらのカーネルのすべての波面は、第１のスケジューリンググループにグループ化される。第２に優先度の高いカーネルの場合、これらのカーネルのすべての波面は第２のスケジューリンググループにグループ化され、以下同様に続く。次に、第１のレベルのスケジューラ３１０は、複数のスケジューリンググループから、最もスケジューリングの優先度が高いスケジューリンググループを選択する。次に、第２のレベルのスケジューラ３２０は、第１のレベルのスケジューラ３１０によって選択されたスケジューリンググループから波面をスケジュールする。実施態様に応じて、第２のレベルのスケジューラ３２０は、ラウンドロビンポリシー、最も古い波面の第１のポリシー、または第１のレベルのスケジューラ３１０によって選択されたスケジューリンググループからどの波面をスケジュールするかを選択するための別のポリシーを使用する。別の実施態様では、優先度情報が利用できない場合、第１のレベルのスケジューラ３１０は、同じカーネルからの波面を同じスケジューリンググループにグループ化する。次に、第１のレベルのスケジューラ３１０は、最も古いカーネルに対応するスケジューリンググループを選択する。
【００２０】
一実施態様では、計算ユニット３００は、計算ユニット３００上のリソース使用率を示す１つまたは複数の条件を監視するための制御ロジック３５０を含む。さまざまな実施態様では、監視される条件には、計算ユニットのストールサイクル、キャッシュミス率、メモリアクセス遅延、リンク使用率、及び／またはその他の条件が含まれる。制御ロジック３５０は、監視されている１つまたは複数の条件に基づいて、リソース競合の測定値を生成する。リソース競合の測定値が第１の閾値よりも大きい場合、制御ロジック３５０は、最も優先度の低いスケジューリンググループをスケジューリングキュー３３０からスケジュール解除されたキュー３４０に移動して、このグループが実行するようにスケジュールされないようにする。次に、制御ロジック３５０は、リソース競合の後続の測定値を生成する前に、所定の時間待機する。後続の測定値がまだ第１の閾値よりも大きい場合、制御ロジック３５０は、次に優先度の低いスケジューリンググループをスケジューリングキュー３３０からスケジュール解除されたキュー３４０に移動する。しかしながら、リソース競合の後続の測定値が第２の閾値未満である場合、制御ロジック３５０は、最も優先度の高いスケジューリンググループをスケジュール解除されたキュー３４０から移動し、スケジューリングキュー３３０に戻し、このグループが実行するようにスケジュールできるようにする。制御ロジック３５０は、監視条件のこの動作パターンを継続し、所定の時間待機し、次に、リソース競合の測定値と１つまたは複数の閾値との比較に基づいて、キュー間でスケジューリンググループを移行するかどうかを決定する。
【００２１】
ここで図４に目を向けると、所与の計算ユニットに対する波面スケジューリングの一実施態様のブロック図が示されている。所定の計算ユニットは、複数のカーネルの波面を受信する。一実施態様では、スケジューラ（図示せず）は、優先度に基づいて波面をスケジューリンググループにグループ化する。この説明のため、所定の計算ユニットのスケジューリングロジックに対して優先度情報を利用できると仮定する。他の実施態様では、優先度情報が利用できない場合、複数のカーネルからの波面をスケジューリンググループにグループ化するための他の手法が使用される。図４００の左側は、１つの特定のシナリオにおいて所与の計算ユニット上で起動されている異なるカーネルの優先度を示している。各カーネルには任意の数の波面が含まれ、その数はカーネルごとに異なる。
【００２２】
図４００に示すように、カーネルＡの優先度は５であり、これは、この例示的なシナリオで所定の計算ユニットにディスパッチされるカーネルの中で最も優先度が高い。また、図４００に示すように、カーネルＢとカーネルＣの優先度は４、カーネルＥとカーネルＤの優先度は３、カーネルＨ、カーネルＦ、カーネルＧの優先度は２、カーネルＩとカーネルＪの優先度は１であり、カーネルＫの優先度は０である。図４００の右側は、所定の計算ユニットで実行されるカーネルが利用できるときのタイミング図を示す。
【００２３】
タイムスロットｔ０の間、カーネルＡは所定の計算ユニットで実行される。したがって、第１のレベルのスケジューラはカーネルＡからの波面を使用してスケジューリンググループを作成し、次に第２のレベルのスケジューラはこのスケジューリンググループからの波面を所与の計算ユニットで実行するようにスケジュールする。次のタイムスロットｔ１の間、カーネルＢ、カーネルＣ、及びカーネルＤは所定の計算ユニットで実行されている。第１のレベルのスケジューラは、カーネルＢとカーネルＣの波面のスケジューリンググループを作成する。というのも、これらのカーネルの優先度は同じであるためである。カーネルＢとカーネルＣはカーネルＤよりも優先度が高いため、第１のレベルのスケジューラは、スケジューリングのためにカーネルＢとカーネルＣのスケジューリンググループを選択する。次に、第２のレベルのスケジューラは、タイムスロットｔ１の間に実行されるカーネルＢ及びカーネルＣのスケジューリンググループから波面を選択する。カーネルＤは第１のレベルのスケジューラによって選択されなかったため、カーネルＤからの波面はタイムスロットｔ１の間は実行されない。
【００２４】
次のタイムスロットｔ２の間、カーネルＥとカーネルＤは所定の計算ユニットで実行されている。同じサイクルで利用できる優先度の高いカーネルがないため、カーネルＤからの波面をタイムスロットｔ２でスケジュールできるようになる。したがって、第１のレベルのスケジューラは、カーネルＥ及びカーネルＤからの波面のスケジューリンググループを作成し、第２のレベルのスケジューラは、タイムスロットｔ２の間に計算ユニット上で実行されるように、このスケジューリンググループからの波面をスケジュールする。タイムスロットｔ３では、カーネルＥからの波面がまだスケジュールされておらず、２つの新しいカーネルＦとカーネルＧが所定の計算ユニット上で実行されている。カーネルＥはカーネルＦ及びカーネルＧよりも優先度が高いため、第１のレベルのスケジューラはカーネルＥに対応するスケジューリンググループを選択し、第２のレベルのスケジューラはこのスケジューリンググループからの波面をタイムスロットｔ２の間に計算ユニット上で実行されるようにスケジュールする。
【００２５】
タイムスロットｔ４の間、カーネルＨの他、前のタイムスロットｔ３で完了しなかったカーネルＦとカーネルＧも、所定の計算ユニット上で実行されている。利用可能なすべてのカーネルＨ、カーネルＦ、及びカーネルＧは同じ優先度（優先度２）であるため、第１のレベルのスケジューラはカーネルＨ、カーネルＦ、及びカーネルＧの単一のスケジューリンググループを作成し、第２のレベルのスケジューラはカーネルＨ、カーネルＦ、及びカーネルＧからの波面をタイムスロットｔ４の間に、所定の計算ユニットで実行されるようにスケジュールする。タイムスロットｔ５の間、タイムスロットｔ４でスケジューリングできなかったカーネルＨからの波面がまだある。また、カーネルＪは、タイムスロットｔ５の所定の計算ユニット上で実行されている。カーネルＨはカーネルＪよりも優先度が高いため、第１のレベルのスケジューラはカーネルＨに対応するスケジューリンググループを選択し、次に第２のレベルのスケジューラはカーネルＨからの波面をタイムスロットｔ５の間に所定の計算ユニット上で実行されるようにスケジュールする。
【００２６】
次に、タイムスロットｔ６で、カーネルＩの他、タイムスロットｔ５で選択されなかったカーネルＪが計算ユニット上で実行されている。カーネルＩとカーネルＪの優先度は同じであるため、第１のレベルのスケジューラはカーネルＩとカーネルＪの波面のスケジューリンググループを作成し、第２のレベルのスケジューラはカーネルＩとカーネルＪからの波面をタイムスロットｔ６の間に計算ユニット上で実行されるようにスケジュールする。タイムスロットｔ７では、カーネルＫは、所定の計算ユニット上で実行されている唯一のカーネルである。したがって、第１のレベルのスケジューラは、カーネルＫの波面のスケジューリンググループを作成し、次に、第２のレベルのスケジューラは、カーネルＫからの波面を、タイムスロットｔ７の間に所定の計算ユニット上で実行されるようにスケジュールする。図４００に示されるスケジューリング決定のパターンは、所定の計算ユニット上で起動される追加のカーネルの、任意の後続の時間スロットに対して継続することができることに留意されたい。
【００２７】
ここで図５を参照すると、実行するように複数のカーネルからの波面をスケジュールするための方法５００の一実施態様が示されている。説明のために、本実施態様でのステップ、及び図６〜図７のステップを順番に示す。しかし、記載の方法の様々な実施態様では、記載する要素のうちの１つ以上が、同時に、示されるのとは異なる順序で実行されるか、または、全体的に省略されていることに留意されたい。他の追加の要素も必要に応じて実行される。本明細書に記載される様々なシステムまたは装置はいずれも、方法５００を履行するように構成されている。
【００２８】
波面スケジューラは、コマンドプロセッサから複数のカーネルの複数の波面を受信する（ブロック５０５）。第１のレベルのスケジューラは、同じ優先度を有するカーネルからの波面を同じスケジューリンググループにグループ化することによって、それぞれが同じ優先度を有するカーネルからの波面を含む、複数のスケジューリンググループを作成する（ブロック５１０）。次に、第１のレベルのスケジューラは、複数のスケジューリンググループから、最もスケジューリングの優先度が高いスケジューリンググループを選択する（ブロック５１５）。次に、第１のレベルのスケジューラは、選択されたスケジューリンググループが、現在のサイクルで実行する準備ができている波面を有するかどうかを判定する（条件付きブロック５２０）。選択されたスケジューリンググループに、現在のサイクルで実行する準備ができている波面がない場合（条件付きブロック５２０、「いいえ」の行程）、第１のレベルのスケジューラは、複数のスケジューリンググループから、次に高いスケジューリングの優先度のスケジューリンググループを選択する（ブロック５２５）。ブロック５２５の後、方法５００は条件付きブロック５２０に戻る。選択されたスケジューリンググループが現在のサイクルで実行する準備ができている波面を有する場合（条件付きブロック５２０、「はい」の行程）、第２のレベルのスケジューラは、第１のレベルのスケジューラによって選択されたスケジューリンググループから実行するように波面をスケジュールする（ブロック５３０）。実施態様に応じて、第２のレベルのスケジューラは、最も古いカーネルの第１のスケジューリング、ラウンドロビンポリシー、または任意のその他のスケジューリングポリシーを使用して、第１のレベルのスケジューラによって選択されたスケジューリンググループからの波面をスケジュールする。また、第２のレベルのスケジューラは、波面が、選択されたスケジューリンググループ以外のスケジューリンググループから実行するようにスケジュールされないようにする（ブロック５３５）。ブロック５３５の後、方法５００は終了する。
【００２９】
ここで図６を参照すると、優先度情報が考慮されていないか利用できない場合に、複数のカーネルからワークグループをスケジュールするための方法６００の一実施態様が示されている。波面スケジューラは、コマンドプロセッサから複数のカーネルの複数の波面を受信する（ブロック６０５）。次に、第１のレベルのスケジューラは、同じカーネルからの波面を同じスケジューリンググループにグループ化することによって、それぞれが単一のカーネルからの波面を含む、複数のスケジューリンググループを作成する（ブロック６１０）。次に、第１のレベルのスケジューラは、複数のスケジューリンググループから、スケジューリングのために最も古いカーネルに対応するスケジューリンググループを選択する（ブロック６１５）。次に、第２のレベルのスケジューラは、第１のレベルのスケジューラによって選択されたスケジューリンググループから実行するように波面をスケジュールする（ブロック６２０）。また、第２のレベルのスケジューラは、選択されたスケジューリンググループ以外のスケジューリンググループからの波面が実行するようにスケジュールされないようにする（ブロック６２５）。ブロック６２５の後に、方法６００は終了する。
【００３０】
ここで図７に目を向けると、リソース競合に基づいて波面スケジューリングを動的に抑制するための方法７００の一実施態様が示されている。計算ユニットのスケジューラは、抑制なしで波面をスケジュールすることによって動作を開始する（ブロック７０５）。スケジューラは、計算ユニットのリソース使用率に関連する１つまたは複数の条件を監視する（ブロック７１０）。さまざまな実施態様では、監視される条件には、計算ユニットのストールサイクル、キャッシュミス率、メモリアクセス遅延、リンク使用率、及び／またはその他の条件が含まれる。１つまたは複数の条件が、リソース競合が第１の閾値を超えて増加したことを示している場合（条件付きブロック７１５、「はい」行程）、スケジューラは最も優先度の低いスケジューリンググループを抑制し、そのスケジューリンググループをスケジュール解除されたスケジューリンググループキューに入れる（ブロック７２０）。「スケジュール解除されたスケジューリンググループキュー」は、本明細書では「スケジュール解除されたキュー」とも呼ばれることに留意されたい。一実施態様では、閾値は事前定義されている。別の実施態様では、閾値はプログラム可能である。１つまたは複数の条件が、リソース競合が第１の閾値以下であることを示している場合（条件付きブロック７１５、「いいえ」の行程）、方法７００はブロック７０５に戻る。
【００３１】
ブロック７２０の後、スケジューラは、所定の時間待機し（ブロック７２５）、次に、もう一度、スケジューラは、リソース競合を示す１つまたは複数の条件を監視する（ブロック７３０）。１つまたは複数の条件が、リソース競合がまだ第１の閾値を超えていることを示している場合（条件付きブロック７３５、「はい」の行程）、スケジューラは、次に優先度の低いスケジューリンググループ（つまり、通常のスケジューリングキューに残っている最も優先度の低いスケジューリンググループ）をスケジュール解除されたキューに移動することによって、次に優先度の低いスケジューリンググループを抑制する。（ブロック７４０）。ブロック７４０の後、方法７００はブロック７２５に戻る。
【００３２】
１つまたは複数の条件が、リソース競合が第１の閾値以下に低下したことを示している場合（条件付きブロック７３５、「いいえ」の行程）、スケジューラは、１つまたは複数の条件が、リソース競合が第２の閾値を下回っていることを示しているかどうかを判定する（条件付きブロック７４５）。１つまたは複数の条件が、リソース競合が第２の閾値を下回っていることを示している場合（条件付きブロック７４５、「はい」の行程）、スケジューラはスケジュール解除されたキューから最も優先度の高いスケジューリンググループを取得し、それを通常のスケジューリングキューに戻す（ブロック７５０）。スケジュール解除されたキューが空の場合（条件付きブロック７５５、「はい」の行程）、方法７００はブロック７０５に戻る。スケジュール解除されたキューにまだ１つまたは複数のスケジューリンググループがある場合（条件付きブロック７５５、「いいえ」の行程）、または１つまたは複数の条件が、リソース競合が第２の閾値以上であることを示している場合（条件付きブロック７４５、「いいえ」の行程）、方法７００はブロック７２５に戻る。
【００３３】
ここで図８に目を向けると、実行するように複数のカーネルからの波面をスケジュールするための方法の一実施態様が示されている。プロセッサ（例えば、ＧＰＵ）の計算ユニットは、複数のカーネルの複数の波面を受信する（ブロック８０５）。計算ユニットは、受信された波面の波面を、少なくとも部分的に共通の基準または属性に基づいてスケジューリンググループにグループ化する（ブロック８１０）。たとえば、一実施態様では、波面に共通の基準または属性は、カーネル及び優先度のうちの少なくとも１つである。次に、計算ユニットは、複数のスケジューリンググループから１つのスケジューリンググループを選択する（ブロック８１５）。次に、計算ユニットは、選択されたスケジューリンググループからのみ実行するように波面をスケジュールする（ブロック８２０）。ブロック８２０の後、方法８００は終了する。方法８００のステップ８１５及び８２０は、所定の選択されたスケジューリンググループからの波面が完了した後に繰り返すことができることに留意されたい。
【００３４】
様々な実施態様において、ソフトウェアアプリケーションのプログラム命令を使用して、本明細書に記載される方法及び／または機序を実装する。例えば、汎用または専用プロセッサによって実行可能なプログラム命令が企図される。様々な実施態様において、そのようなプログラム命令は、高水準のプログラミング言語によって表わされる。他の実施態様では、プログラム命令は、高水準のプログラミング言語から、バイナリ、中間、または他の形式にコンパイルされる。代替で、プログラム命令は、ハードウェアの動作または設計を記述するように書き込まれる。このようなプログラム命令をＣなどの高水準のプログラミング言語によって表す。代替で、Ｖｅｒｉｌｏｇなどのハードウェア設計言語（ＨＤＬ）が使用される。様々な実施態様において、プログラム命令は、様々な非一時的なコンピュータ可読記憶媒体のいずれかに格納される。記憶媒体は、プログラム実行のためにプログラム命令をコンピューティングシステムに提供するために使用される間にコンピューティングシステムによってアクセス可能である。一般的に言うと、そのようなコンピューティングシステムは、プログラム命令を実行するように構成された少なくとも１つまたは複数のメモリ及び１つまたは複数のプロセッサを含む。
【００３５】
上記実施態様が、実施態様の非限定的な例にすぎないことを強調しておく。上記の開示が一旦完全に理解されると、多くの変形及び修正が当業者にとって明らかになるであろう。以下の特許請求の範囲は、全てのそのような変形及び修正を包含すると解釈されることが意図される。
【図１】
2021526257.tif 000003
【図２】
2021526257.tif 000004
【図３】
2021526257.tif 000005
【図４】
2021526257.tif 000006
【図５】
2021526257.tif 000007
【図６】
2021526257.tif 000008
【図７】
2021526257.tif 000009
【図８】
2021526257.tif 000010
【国際調査報告】
2021526257.tif 000011
2021526257.tif 000012