(57)【特許請求の範囲】
【請求項１】
コンピューターシステムのプロセスにおいてスケジューラーによって実行される方法であって、
前記方法は、
利用可能になる第１のスケジューリングノードにおける第１の複数のプロセッシングリソースのうちの１つに応答して、前記第１のスケジューリングノードに対応する第１のスケジューリングコレクションにおいて実行する第１のタスクを検索するステップと、
前記第１のスケジューリングコレクションにおいて実行する第１のタスクが見つからないことに応答して、前記第１の複数のプロセッシングリソースのうちの前記１つを用いて、第２の複数のプロセッシングリソースを含む第２のスケジューリングノードに対応する第２のスケジューリングコレクションの第２のタスクを実行するステップであって、前記スケジューラーのための前記第１及び第２のスケジューリングノードは、前記コンピューターシステムのコンポーネントのそれぞれに対する１つまたは複数の実行メトリックに基づいて識別され、前記第１及び第２のスケジューリングコレクションは、少なくとも前記第１及び第２のスケジューリングノード間の実行コストを比較することによって、前記１つまたは複数の実行メトリックに基づいて少なくとも部分的な検索順位にマッピングされる、ステップと
を備えることを特徴とする方法。
【請求項２】
前記第１のスケジューリングコレクションにおいて前記第１のタスクを見つけたことに応答して、前記第１の複数のプロセッシングリソースのうちの前記１つを用いて前記第１のタスクを実行するステップを更に含むことを特徴とする請求項１記載の方法。
【請求項３】
前記第１のスケジューリングコレクションにおいて前記第１のタスクを求めてスケジュールグループの第１のセットを検索するステップを更に含むことを特徴とする請求項１記載の方法。
【請求項４】
前記第２のスケジューリングコレクションにおいて前記第２のタスクを求めてスケジュールグループの第２のセットを検索するステップを更に含むことを特徴とする請求項３記載の方法。
【請求項５】
前記第１の複数のプロセッシングリソースのうちの前記１つは、第１の仮想プロセッサ及び第１のハードウェアスレッドを含むことを特徴とする請求項１記載の方法。
【請求項６】
前記第１のスケジューリングコレクションにおいて実行する第１のタスクが見つからないことに応答して、前記第１のスケジューリングノードを前記第２のスケジューリングノードに関係づける少なくとも１つの実行メトリックに基づいて前記第２のスケジューリングコレクションにおいて前記第２のタスクを検索するステップを更に含むことを特徴とする請求項１記載の方法。
【請求項７】
前記第１の複数のプロセッシングリソースに対応するローカルコレクションにおいて実行する第３のタスクを検索するステップと、
前記ローカルコレクションにおいて前記実行する第３のタスクを見つけたことに応答して、前記第１の複数のプロセッシングリソースのうちの前記１つを用いて前記第３のタスクを実行するステップと
を更に含むことを特徴とする請求項１記載の方法。
【請求項８】
前記第１のスケジューリングコレクションにおいて前記実行する第１のタスクを検索するステップは更に、
前記第１のスケジューリングコレクションにおけるスケジュールグループのセットにおいて認識されたタスクを検索するステップであって、前記認識されたタスクは、ブロックされていない実行コンテキストに含まれるタスクである、ステップと、
前記スケジュールグループのセットにおいて、実行するための認識されたタスクが見つからないことに応答して、前記スケジュールグループのセットにおいて非認識のタスクを検索するステップであって、前記非認識のタスクは、ブロックされている実行コンテキストに含まれるタスクである、ステップと、
を含むことを特徴とする請求項１記載の方法。
【請求項９】
コンピューター実行可能命令を格納するコンピューター読取可能な記憶媒体であって、
前記コンピューター実行可能命令は、コンピューターシステムによって実行されると、前記コンピューターシステムに、
前記コンピューターシステム上で実行しているプロセスにおいて、前記コンピューターシステムのコンポーネントのそれぞれに対する１つまたは複数の実行メトリックに基づいて識別される第１のスケジューリングノード及び第２のスケジューリングノードにそれぞれ対応する第１のスケジューリングコレクション及び第２のスケジューリングコレクションを持つスケジューラーを生成するステップであって、前記第１及び第２のスケジューリングノードは、第１及び第２の複数のプロセッシングリソースをそれぞれ含む、ステップと、
少なくとも前記第１及び第２のスケジューリングノード間の実行コストを比較することによって、前記第１及び第２のスケジューリングコレクションを前記１つまたは複数の実行メトリックに基づいて少なくとも部分的な検索順位にマッピングするステップと、
第１の認識されたタスクが前記第１のスケジューリングコレクションにおいて見つけられたことに応答して、前記第１の複数のプロセッシングリソースの一つを用いて前記第１の認識されたタスクを前記第１のスケジューリングコレクションから実行するステップであって、前記第１の認識されたタスクは、ブロックされていない実行コンテキストに含まれるタスクである、ステップと、
前記第１の認識されたタスクが前記第１のスケジューリングコレクションにおいて見つけられなかったことに応答して、前記第１の複数のプロセッシングリソースの一つを用いて第２の認識されたタスクを前記第２のスケジューリングコレクションから実行するステップと
を含む方法を実行させることを特徴とするコンピューター読取可能な記憶媒体。
【請求項１０】
前記方法は、
前記第１の認識されたタスクが前記第１のスケジューリングコレクションにおいて見つけられるかどうかを判定するために前記第１のスケジューリングコレクションにおいて第１の複数のスケジュールグループを検索するステップを更に含むことを特徴とする請求項９記載のコンピューター読取可能な記憶媒体。
【請求項１１】
前記方法は、
前記第２の認識されたタスクが前記第２のスケジューリングコレクションにおいて存在するかどうかを判定するために前記第２のスケジューリングコレクションにおいて第２の複数のスケジュールグループを検索するステップを更に含むことを特徴とする請求項１０記載のコンピューター読取可能な記憶媒体。
【請求項１２】
前記方法は、
前記第１の認識されたタスクが前記第１のスケジューリングコレクションにおいて見つけられず、及び前記第２の認識されたタスクが前記第２のスケジューリングコレクションにおいて見つけられなかったことに応答して、前記第１の複数のプロセッシングリソースの一つを用いて第１の非認識のタスクを前記第２のスケジューリングコレクションから実行するステップであって、前記第１の非認識のタスクは、ブロックされている実行コンテキストに含まれるタスクである、ステップを更に含むことを特徴とする請求項９記載のコンピューター読取可能な記憶媒体。
【請求項１３】
前記方法は、
前記１つまたは複数の実行メトリックに基づいて前記第１のスケジューリングノード及び前記第２のスケジューリングノードを識別するステップを更に含むことを特徴とする請求項９記載のコンピューター読取可能な記憶媒体。
【請求項１４】
前記１つまたは複数の実行メトリックは、不均等メモリアクセス（ＮＵＭＡ）距離を含むことを特徴とする請求項１３記載のコンピューター読取可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スケジューラーにおけるスケジューリングコレクションに関する。
【背景技術】
【０００２】
コンピューターシステムで実行されるプロセスの中には、コンピューターシステムで実行するプロセスのタスクをスケジューリングすることができるタスクスケジューラーがある。これらのスケジューラーは、プロセスのタスクがどのように実行されるべきかを決定する様々なアルゴリズムで動作することができる。複数のプロセッシングリソースを有するコンピューターシステムでは、プロセッシングリソースは、スケジューラーで実行するタスクを検索する際に互いに競合するかもしれない。コンテンションによって、スケジューラーでプロセスを実行する際にコンピューターシステムの効率が悪くなる傾向があり、プロセッシングリソースの数がコンピューターシステムにおいて増加するにつれて、通常、コンテンションの量は増加する。結果として、コンピューターシステムのプロセッシングリソースの数が増加するにつれて、プロセッシングリソースのコンテンションが、スケジューラーのスケーラビリティを制限するかもしれない。
【発明の概要】
【課題を解決するための手段】
【０００３】
この概要は、詳細な説明において更に記載されている単純化された形式の概念の選択を導くために提供されている。この概要は、請求された本発明の重要な特徴または基本的特徴を識別することを意図していないし、請求された本発明の範囲を限定するために用いられることも意図していない。
【０００４】
コンピューターシステムのプロセスにおけるスケジューラーは、該スケジューラー内の各スケジューリングノードのためのそれぞれのスケジューリングコレクションを含む。スケジューラーは、スケジュールグループのセットを備えた各スケジューリングコレクションに存在し、各インクルードのスケジュールグループは、プロセスのタスクのセットを含む。スケジューリングコレクションは、１つまたは複数の実行メトリックに基づいて少なくとも部分的な検索順位（オーダー）へマッピングされる。スケジューリングノード内のプロセッシングリソースが利用可能になると、プロセッシングリソースは、スケジューリングノードに対応するスケジューリングコレクションにおいて、実行するタスクを見つけようとする。プロセッシングリソースが、スケジューリングコレクションにおいて実行するタスクが見つからない場合、プロセッシングリソースは、検索順位で特定される順位で他のスケジューリングコレクションにおいて、実行するタスクを見つけようとする。
【０００５】
添付の図面は、実施形態への更なる理解を与えるために含まれていて、この明細書の一部に組み込まれていてかつこの明細書の一部を構成する。図面は、実施形態を示していて、明細書と共に、実施形態の原理を説明するのに役立つ。他の実施形態及び実施形態の意図された利点の多くは、以下の詳細な説明を参照してよりよく理解できるようになるので、すぐに理解できるだろう。図面の要素は、必ずしも互いに関連して適合されているわけではない。同様の参照番号は、対応する同様の部分を示す。
【図面の簡単な説明】
【０００６】
【図１】ランタイム環境においてスケジューリングコレクションを有するスケジューラーの実施形態を示すブロック図である。
【図２】スケジューラーにおいてスケジューリングコレクションを生成しかつ配置させる方法の実施形態を示すフローチャートである。
【図３Ａ】スケジューリングコレクションのマッピングの実施形態を示す図である。
【図３Ｂ】スケジューリングコレクションのマッピングの実施形態を示す表である。
【図４】実行するタスクを選択する方法の実施形態を示すフローチャートである。
【図５Ａ】スケジューリングコレクションの実施形態を示すブロック図である。
【図５Ｂ】スケジューリングコレクションの実施形態を示すブロック図である。
【図６Ａ】スケジューリングコレクションを有するスケジューラーを含むランタイム環境を実施するよう構成されたコンピューターシステムの実施形態を示すブロック図である。
【図６Ｂ】スケジューリングコレクションを有するスケジューラーを含むランタイム環境を実施するよう構成されたコンピューターシステムの実施形態を示すブロック図である。
【発明を実施するための形態】
【０００７】
以下の詳細な説明において、添付の図面が参照される。添付の図面は、本明細書の一部を形成し、添付の図面において、説明の目的で本発明を実施することができる特定の実施形態が示されている。これに関し、「上部」、「底部」、「前部」「後部」「先頭の」、「末尾の」等の用語は、説明されている図（または複数の図）の方向に関して用いられている。実施形態の構成要素は多くの異なる方向に位置することができるので、方向の用語は、説明のために用いられていて、決して限定ではない。他の実施形態を利用することができ、構造の変更または論理的な変更を本発明の要旨を逸脱しない範囲で行うことができることが理解されるべきである。従って、以下の詳細な説明は、限定する意味と理解されるべきでなく、本発明の範囲は添付の特許請求の範囲により画定される。
【０００８】
本明細書において説明されている様々な例示的な実施形態の特徴は、特に断りのない限り、互いに組み合わせることができると理解されるべきである。
【０００９】
図１は、ランタイム環境１０のプロセス１２における実行コンテキストスケジューラー２２の実施形態を示すブロック図である。スケジューラー２２は、スケジューリングコレクション４０（１）−４０（Ｌ）のセットを含む。ここで、Ｌは２以上の整数であって、Ｌ番目のスケジューリングコレクション４０を示す。各スケジューリングコレクション４０（１）−４０（Ｌ）は、それぞれのスケジューリングノード３０（１）−３０（Ｌ）に対応している。
【００１０】
ランタイム環境１０は、図６Ａ及び図６Ｂに示されかつ更に詳細に以下に説明されるコンピューターシステム１００の実施形態１００Ａ及び１００Ｂなどの、コンピューターシステムにおける動作のランタイムモードを示し、コンピューターシステムは命令を実行している。コンピューターシステムは、図６Ａに示されかつ更に詳細に以下に説明されるランタイムプラットフォーム１２２などのランタイムプラットフォームから、ランタイム環境１０を生成する。
【００１１】
ランタイム環境１０は、少なくとも１つの呼び出されたプロセス１２、リソース管理層１４及びハードウェアスレッド１６（１）−１６（Ｍ）のセットを含む。ここで、Ｍは２以上の整数であって、Ｍ番目のハードウェアスレッド１６を示す。ランタイム環境１０によって、プロセス１２からのタスクが、リソース管理層１４及びハードウェアスレッド１６（１）−１６（Ｍ）を用いて、プロセス１２と共存するあらゆる他のプロセス（図示せず）からのタスクとともに実行される。ランタイム環境１０は、リソース管理層１４に関連して動作し、プロセス１２が、コンピューターシステム（例えば、ハードウェアスレッド１６（１）−１６（Ｍ））のプロセッサ及び他のリソースを得られるようにする。
【００１２】
ランタイム環境１０は、スケジューラー２２を生成するスケジューラー機能を含む。１つの実施形態では、スケジューラー機能は、スケジューラーのアプリケーションプログラミングインターフェース（ＡＰＩ）として実施される。他の実施形態では、スケジューラー機能は、他の適切なプログラミングコンストラクトを用いて実施することができる。呼び出されると、スケジューラー機能は、プロセス１２においてスケジューラー２２を生成し、スケジューラー２２が、１つまたは複数のハードウェアスレッド１６（１）−１６（Ｍ）による実行のためにプロセス１２のタスクをスケジューリングするよう動作する。ランタイム環境１０は、きめ細かい並列処理を利用することができる。該並列処理は、スケジューラー機能が提供する便利さを知っているアプリケーション開発者またはライブラリ開発者によって、付随するツールを用いて自分たちのプログラム（例えば、プロセス１２）において示されている。
【００１３】
プロセス１２は、１つまたは複数の実行コンテキスト（即ち、スレッド）をホストするプロセッシングリソース及び他のリソースの割り当てを含む。プロセス１２は、リソース管理層１４からコンピューターシステムのプロセッシングリソース及び他のリソース（例えば、ハードウェアスレッド１６（１）−１６（Ｍ））にアクセスできるようになる。プロセス１２は、プロセッシングリソース及び他のリソースを用いてタスクを実行させる。
【００１４】
プロセス１２は、可変長のタスク群で作業を生成し、各タスクは、スケジューラー２２の実行コンテキストに関連している。各タスクは、コンピューターシステムによって実行されると、作業の単位を行なう一連の命令を含む。各実行コンテキストは、スレッドを形成し、該スレッドは、割当られたプロセッシングリソース上の関連するタスクを実行する。各実行コンテキストは、プログラム状態情報及びマシン状態情報を含む。実行コンテキストは、実行するタスクがこれ以上ない場合に、終了することができる。各タスクについて、ランタイム環境１０及び／またはプロセス１２は、スケジューラー２２にタスクを割り当てて実行のためにスケジューリングされるかまたはそうでなければスケジューラー２２を用いずにタスクを実行させる。
【００１５】
プロセス１２は、スタックモデルまたはインタープリターモデルなどの、任意の適切な実行モデルに基づいて、コンピューターシステムにおいて動作するよう構成することができ、アプリケーション、ライブラリ機能、またはオペレーティングシステムサービスなどの、任意の適切なコードのタイプを表すことができる。プロセス１２は、定義済みのメモリアドレス空間を含む割当られたリソースのセットに関連するプログラム状態及びマシン状態にある。プロセス１２は、ランタイム環境１０においてあらゆる共存しているプロセスから自律的にまたはほぼ自律的に実行する。従って、プロセス１２は、共存しているプロセスのプログラム状態または共存しているプロセスに割り当てられたあらゆるリソースのマシン状態を悪い方向に変えない。同様に、共存しているプロセスは、プロセス１２のプログラム状態またはプロセス１２に割り当てられたあらゆるリソースのマシン状態を悪い方向に変えない。
【００１６】
リソース管理層１４は、１つまたは複数のハードウェアスレッド１６をプロセス１２に割り当てることで、プロセッシングリソースをプロセス１２に割り当てる。リソース管理層１４は、図１の実施形態においてコンピューターシステムのオペレーティングシステム（図１に図示せず）と別個に存在する。他の実施形態では、リソース管理層１４またはリソース管理層１４のいくつかの機能もしくは全ての機能は、オペレーティングシステムに含まれていてもよい。
【００１７】
ハードウェアスレッド１６は、コンピューターシステムの１組のプロセッサパッケージまたは１つもしくは複数のプロセッサパッケージ（例えば、図６に示しかつ更に詳細に以下に説明されるプロセッサパッケージ１０２）の実行コアにある。各ハードウェアスレッド１６は、他の実行コアから独立してまたはほぼ独立して命令を実行するよう構成されていて、マシン状態を含む。ハードウェアスレッド１６は、単一のプロセッサパッケージに含まれていてもよいし、または複数のプロセッサパッケージに分散されていてもよい。プロセッサパッケージの各実行コアは、１つまたは複数のハードウェアスレッド１６を含むことができる。
【００１８】
プロセス１２は、スケジューラー２２をランタイム環境１０が提供するスケジューラー機能を介して黙示的にまたは明示的に生成させる。プロセス１２がコンピューターシステムにおいて利用可能なＡＰＩまたはプログラミング言語機能を用いる場合、スケジューラー２２を黙示的に生成することができる。ＡＰＩまたはプログラミング言語機能に応じて、ランタイム環境１０は、デフォルトのポリシーを用いてスケジューラー２２を生成する。スケジューラー２２を明示的に作成するために、プロセス１２は、ランタイム環境１０が提供するスケジューラー機能を呼び出すことができ、スケジューラー２２についてのポリシーを特定する。
【００１９】
スケジューラー２２は、リソース管理層１４と相互作用して、プロセス１２にトランスペアレントな方法でコンピューターシステムのリソースについて交渉する。リソース管理層１４は、スケジューラー２２の需要と供給及びあらゆるポリシーに基づいてスケジューラー２２にハードウェアスレッド１６を割り当てる。
【００２０】
図１に示した実施形態では、スケジューラー２２は、仮想プロセッサ３２を生成することでプロセッシングリソースを管理し、仮想プロセッサ３２は、基本的なハードウェアスレッド１６の抽象的概念を形成する。スケジューラー２２は、各仮想プロセッサ３２をハードウェアスレッド１６にマッピングすることでハードウェアスレッド１６上に仮想プロセッサ３２を多重化する。スケジューラー２２は、２つ以上の仮想プロセッサ３２を特定のハードウェアスレッド１６にマッピングすることができるが、１つのハードウェアスレッド１６だけを各仮想プロセッサ３２にマッピングする。他の実施形態では、スケジューラー２２は、他の適切な方法でプロセッシングリソースを管理し、プロセス１２の命令をハードウェアスレッド１６に実行させる。
【００２１】
ランタイム環境１０は、コンピューターシステムの基本的なトポロジーについての知識を用いてスケジューラー２２を生成する。ランタイム環境１０は、リソース管理層１４及び／またはスケジューラー２２にコンピューターシステムのノード情報を提供する。ノード情報は、コンピューターシステムのハードウェアのノードを直接識別するか、またはコンピューターシステムのトポロジーに関する十分な情報を含んでいて、リソース管理層１４及び／またはスケジューラー２２が、１つまたは複数の実行メトリックに基づいてハードウェアリソースをスケジューリングノード３０に区分できるようにする。実行メトリックは、コンピューターシステムのプロセッシングリソース（例えば、ハードウェアスレッド１６）、メモリリソース、並びに／または他のリソースの速度、タイプ、及び／もしくはコンフィグレーションを含むことができる。
【００２２】
例えば、コンピューターシステムのトポロジーがキャッシュコヒーレンシのある不均等メモリアクセス（ＮＵＭＡ）アーキテクチャを含む実施形態では、ノード情報は、２つまたはそれ以上のＮＵＭＡノードのセットを特定することができ、各ＮＵＭＡノードは、ハードウェアスレッド１６及びローカルメモリのセットを含む。ノード情報はまた、ＮＵＭＡノード同士の間のメモリアクセスを説明する情報（例えば、ＮＵＭＡ距離またはメモリアクセストポロジーもしくはメモリアクセス時間）を含むことができる。
【００２３】
別の例では、ノード情報は、プロセッシングリソース（例えば、ハードウェアスレッド１６）の速度、タイプ及び／またはコンフィグレーションを説明することができ、プロセッシングリソースをプロセッシングリソースの特徴同士の間の類似点または相違点に基づいてグループ化できるようになる。これらの特徴は、１つまたは複数のプロセッシングリソースの命令セットの一種を含み、異なるタイプの命令セットを有するプロセッシングリソースのセットを用いて異なるノードを形成することができるようになる。
【００２４】
ランタイム環境１０は、スケジューラー２２にノード情報に基づいて２つ以上のスケジューリングノード３０（１）−３０（Ｌ）のセットを含ませる。各スケジューリングノード３０は、仮想プロセッサ３２及びハードウェアスレッド１６の形で、割当られたプロセッシングリソースを含む。スケジューリングノード３０（１）は、仮想プロセッサ３０（１）−３０（Ｎ1）を含み、これらは、ハードウェアスレッド１６（１）−１６（ｍ1）にマッピングを行う。ここで、Ｎ1は、１以上の整数であって（Ｎ1）番目の仮想プロセッサ３０示し、ｍ1は、Ｍ以下であって（ｍ1）番目のハードウェアスレッド１６を示す。スケジューリングノード３０（Ｌ）は、仮想プロセッサ３０（１）−３０（ＮL）を含み、これらは、ハードウェアスレッド１６（ｍm）−１６（Ｍ）にマッピングする。ここで、ＮLは、１以上の整数であって、（ＮL）番目の仮想プロセッサ３０を示し、ｍmは、Ｍ以下であってかつｍ1より大きく、（ｍm）番目のハードウェアスレッド１６を示す。
【００２５】
スケジューラー２２は、各スケジューリングノード３０のためのスケジューリングコレクション４０を生成する。従って、スケジューリングコレクション４０（１）−４０（Ｌ）は、矢印３７（１）−３７（Ｌ）で示すようにそれぞれのスケジューリングノード３０（１）−３０（Ｌ）に対応する。スケジューラー２２は、１つまたは複数の実行メトリックに基づいて全検索順位または部分的な検索順位にスケジューリングコレクション４０をマッピングし、以下の更なる詳細な説明において記述するように、プロセッシングリソースが利用可能になると、実行するタスクを検索する検索順位を用いる。
【００２６】
スケジューラー２２の実行コンテキストのセットは、それぞれ関連するタスク３６を有する実行コンテキスト３４のセットを含む。タスク３６は、各スケジューリングノード３０におけるかつ各スケジューリングコレクション４０においてそれぞれの仮想プロセッサ３２、ゼロまたは１以上の実行可能な実行コンテキスト３８のセット、及びゼロまたは１以上のブロックされている（即ち、待ち依存の）実行コンテキスト４０のセットによって、実行されている。各実行コンテキスト３４、３８及び４０は、実行コンテキスト３４、３８及び４０が実行中か実行可能であるか（例えば、ブロックされなくなるかまたはスケジューラー２２に追加されるのに応じて）またはブロックされているかを示す状態情報を含む。実行中の実行コンテキスト３４は、仮想プロセッサ３２にアタッチされており、現在実行している。実行可能な実行コンテキスト３８は、関連するタスク３９を含み、利用可能な仮想プロセッサ３２によって実行される準備ができている。ブロックされている実行コンテキスト４０は、関連するタスク４１を含んでおり、別の実行コンテキスト３４、３８または４０で生成されているかまたは生成されるデータ、メッセージまたはイベントを待っている。
【００２７】
仮想プロセッサ３２で実行している各実行コンテキスト３４は、その実行の途中で、追加のタスク４２を生成することができ、追加のタスク４２は、任意の適切な方法（例えば、作業キューに追加される（図１に図示せず））で構成される。作業は、１つの実施形態では、実行環境１０で提供される複数のアプリケーションプログラミングインターフェース（複数のＡＰＩ）を用いてまたはプログラミング言語の特徴及び対応するツールを用いてのいずれかで生成することができる。プロセッシングリソースがスケジューラー２２に利用可能である場合、タスクは、実行コンテキスト３４または３８に割り当てられ、実行コンテキスト３４または３８は、新しいタスクをピックアップする前に仮想プロセッサ３２上で該タスクを完了まで実行する。仮想プロセッサ３２で実行している実行コンテキスト３４はまた、別の実行コンテキスト４０が用いることができるデータ、メッセージまたはイベントを生成することによって、他の実行コンテキスト４０をブロックしない。
【００２８】
スケジューラー２２の各タスクを認識することができ（例えば、認識されたタスク３６及び３９）、各タスクは、実行コンテキスト３４または３８がタスクにアタッチされているかまたはアタッチすることができ、該タスクは準備ができているということを示す。認識されたタスクは、通常ブロックされていない実行コンテキスト及びスケジューリングされたエージェントを含む。認識されていないタスクは、非認識と称される。非認識タスク（例えば、タスク４２）は、親タスクの実行によって生成される子タスクとして生成することができ、並列のコンストラクトで生成することができる（例えば、並列、並列の、開始する、及び、完了する）。スケジューラー２２の各スケジューリングコレクション４０は、以下に説明される図５Ａの実施形態において説明されるような依存したタスク（即ち、非認識タスク）のためのワークスティーリングキューのリストとともに、実行コンテキストを備えた（即ち、認識されたタスク）、論理的に独立したタスクのための１つまたは複数の同期されたコレクション（例えば、スタック及び／またはキュー）に構成することができる。
【００２９】
仮想プロセッサ３２で実行している実行コンテキスト３４の完了、ブロッキング、または他の中断（例えば、明示的なイールド（ｙｉｅｌｄｉｎｇ）または強制的なプリエンプション）で、仮想プロセッサ３２は、別の認識されたタスク３９または非認識タスク４２を実行するために利用可能になる。スケジューラー２２は、実行可能な実行コンテキスト３８または非認識タスク４２を検索して、実行のために利用可能な仮想プロセッサ３２にアタッチする。スケジューラー２２の全ての実行コンテキスト３８が実行されるまで、スケジューラー２２は、実行のための利用可能な仮想プロセッサ３２に実行コンテキスト３８をアタッチし続ける。
【００３０】
スケジューリングノード３０の仮想プロセッサ３２が利用可能になると、仮想プロセッサ３２は、スケジューリングノード３０に対応しているスケジューリングコレクション４０において、実行するタスクを見つけようとする。仮想プロセッサ３２は、スケジューリングコレクション４０において実行するタスクを見つけない場合、仮想プロセッサ３２は、検索順位で特定される順位で他のスケジューリングコレクション４０において、実行するタスクを見つけようとする。１つの実施形態では、スケジューラー２２は、設定可能な遅延パラメータを含むことができ、該遅延パラメータは、利用可能な仮想プロセッサ３２に他のスケジューリングコレクション４０の検索を遅延させて他の利用可能な仮想プロセッサ３２とのコンテンションを最小化しようとする。遅延パラメータはまた、利用可能な仮想プロセッサ３２のスケジューリングノード３０に対応するスケジューリングコレクション４０に対する作業の検索に優先順位をつけるために用いることができる。
【００３１】
図２は、スケジューラー２２においてスケジューリングコレクション４０を生成して配置させる方法の実施形態を示すフローチャートである。図２の方法は、図１のスケジューラー２２の実施形態を参照して説明される。
【００３２】
図２において、ランタイム環境１０、及び／またはリソース管理層１４は、ブロック５２において示されるように１つまたは複数の実行メトリックに基づいてスケジューリングノード３０を識別する。実行メトリックは、コンピューターシステム内の命令を実行する任意の適切な手段であってもよく、コンピューターシステム内のプロセッシングリソース及び他のリソースの処理速度特性、処理スループット特性及びメモリレイテンシー特性を含むことができる。コンピューターシステムの様々な構成要素のセットについて決定された実行メトリックを用いて、ランタイム環境１０、及び／または、リソース管理層１４は、コンピューターシステムのプロセッシングリソース及び他のリソースを区分し、該区分を用いてスケジューラー２２のためのスケジューリングノード３０を識別する。スケジューリングノード３０は各々、コンピューターシステムの処理リソース及び他のリソースの類似のセットまたは異なるセットからなるグループを含む。
【００３３】
１つの例では、コンピューターシステムは、複数のハードウェアスレッド１６を含むプロセッサを含むことができる。この例では、ランタイム環境１０、及び／または、リソース管理層１４は、各プロセッサパッケージを別個のノードに区分して、各ノードのためのスケジューリングノード３０を生成することができる。
【００３４】
別の例では、ＮＵＭＡシステムにおいて、プロセッサ同士の間のメモリレイテンシーの相違及びメモリの異なる部分が実行メトリックとして用いられて、コンピューターシステムをＮＵＭＡノードに区分して各ＮＵＭＡノードのためのスケジューリングノード３０を生成することができる。ＮＵＭＡノードは、各々プロセッシングリソース及びローカルメモリのセットを有することができ、そこで、ＮＵＭＡ内のプロセッシングリソースによるローカルメモリへのアクセスは、該プロセッシングリソースによる別のＮＵＭＡノード内のローカルメモリへのアクセスより速い。
【００３５】
さらなる例では、ランタイム環境１０、及び／または、リソース管理層１４は、コンピューターシステムのプロセッサリソースのセットを任意にまたは部分的に任意にノードに区分することができ、各ノードのためのスケジューリングノード３０を生成することができる。
【００３６】
また別の例では、ランタイム環境１０、及び／または、リソース管理層１４は、異なるタイプまたは異なる速度のプロセッシングリソースを、ノードに区分することができ、各ノードは多くの同じタイプのプロセッシングリソースまたは多くの同じ速度のプロセッシングリソースを含む。ランタイム環境１０、及び／または、リソース管理層１４は、各ノードのためのスケジューリングノード３０を生成する。
【００３７】
ランタイム環境１０、リソース管理層１４、及び／または、スケジューラー２２は、ブロック５４において示すように、各スケジューリングノード３０のためのそれぞれのスケジューリングコレクション４０を生成する。図１に示すように、スケジューラー２２は、スケジューリングコレクション４０（１）−４０（Ｌ）を生成し、スケジューリングコレクション４０（１）−４０（Ｌ）は、それぞれスケジューリングノード３０（１）−３０（Ｌ）に対応している。各スケジューリングコレクション４０は、タスクを格納するためのコンピューターシステムのメモリにおいてデータ構造を形成し、データ構造は、対応するスケジューリングノード３０が提供している仮想プロセッサ３２及び他のスケジューリングノード３０が提供している仮想プロセッサ３２で検索可能である。
【００３８】
ランタイム環境１０、リソース管理層１４、及び／または、スケジューラー２２は、ブロック５６において示すように、１つまたは複数の実行メトリックに基づいて全検索順位または部分的な検索順位にスケジューリングコレクション４０（１）−４０（Ｌ）をマッピングする。スケジューラー２２は、実行メトリックを用いて、異なるスケジューリングノード３０同士の間で実行コストを比較する。実行コストは、ノード距離に関して説明することができる。異なるノード距離は、所与のスケジューリングノード３０と他のスケジューリングノード３０との間の異なる実行特徴を表す。ノード距離については、所与のスケジューリングノード３０に関してより低い実行コストを有するスケジューリングノード３０は、所与のスケジューリングノード３０により近いと説明され、所与のスケジューリングノード３０に関してより高い実行コストを有するスケジューリングノード３０は、所与のスケジューリングノード３０からより遠いと説明される。スケジューラー２２は、１つの実施形態において、ノード距離を用いて、スケジューリングコレクション４０（１）−４０（Ｌ）を全検索順位または部分的な検索順位にマッピングする。
【００３９】
検索順位を生成するために、スケジューラー２２は、スケジューリングコレクション４０のセットをノード距離に基づいて１つまたは複数のスケジューリングコレクション４０のサブセットにグループ化する。各スケジューリングコレクション４０は、対応するスケジューリングノード３０から、ゼロのノード距離を有する。従って、各スケジューリングコレクション４０は、対応するスケジューリングノード３０のためのスケジューリングコレクション４０（例えば、レベル０のサブセット）の第１のレベルのサブセットを形成する。スケジューリングコレクション４０の次のレベルのサブセット（例えば、レベル１のサブセット）のために、スケジューラー２２は、所与のスケジューリングノード３０から最も近い範囲のノード距離を有する１つまたは複数のスケジューリングコレクション４０のセットをグループ化する。次に、スケジューラー２２は、所与のスケジューリングノード３０から次に最も近い範囲のノード距離を有する１つまたは複数のスケジューリングコレクション４０のセットを、スケジューリングコレクション４０の次のレベルのサブセット（例えば、レベル２のサブセット）にグループ化する。スケジューリングコレクション４０のセット内の全ての所望のスケジューリングコレクション４０が検索順位に組み込まれるまで、スケジューラー２２は、所与のスケジューリングノード３０から連続した範囲のノード距離を有する１つまたは複数のスケジューリングコレクション４０のセットを、スケジューリングコレクション４０の連続したレベルのサブセットにグループ化し続ける。
【００４０】
スケジューリングコレクション４０の検索順位は、スケジューリングノード３０において利用可能なプロセッシングリソース（即ち、仮想プロセッサ３２）によって用いられて実行するタスクを検索する。検索順位は、サブセット（例えば、所与のスケジューリングノード３０から同じノード距離または類似したノード距離を有するスケジューリングノード３０のサブセットに対応する２つ以上のスケジューリングコレクション４０のサブセット）のうちの少なくともいくつかにおいて２つ以上のスケジューリングコレクション４０をグループ化することによって、部分的な検索順位を特定することができる。部分的な検索順位が特定される場合には、プロセッシングリソースは、ラウンドロビン方式の順位または他の適切な順位でスケジューリングコレクション４０のサブセットを検索することができる。検索順位は、また、各サブセットにおいて１つだけスケジューリングコレクション４０をグループ化することによって、または２つもしくはそれ以上のスケジューリングコレクション４０の各サブセットの検索順位を特定することによって、全検索順位を特定してもよい。
【００４１】
図３Ａ乃至３Ｂはそれぞれ、４つのハードウェアスレッド１６のセットをそれぞれ含む４つのプロセッサパッケージを有するＮＵＭＡコンピューターシステム６１における部分的な検索順位６０の実施形態を示す図及び表である。それぞれのローカルメモリは、各プロセッサ（図示せず）に接続している。プロセッサパッケージの各ハードウェアスレッド１６は、類似した実行メトリックを有するので、各プロセッサパッケージは、図３Ａ−３Ｂの例においてレベル０のノードを形成する。従って、レベル０のスケジューリングノード３０（１）は、ハードウェアスレッド１６（１）−１６（４）を含み、レベル０のスケジューリングノード３０（２）はハードウェアスレッド１６（５）−１６（８）を含み、レベル０のスケジューリングノード３０（３）は、ハードウェアスレッド１６（９）−１６（１２）を含み、レベル０のスケジューリングノード３０（４）は、ハードウェアスレッド１６（９）−１６（１２）を含む。レベル０スケジューリングノードの３０（１）−３０（４）は、スケジューリングコレクション４０（１）−４０（４）のそれぞれのレベル０のサブセットに対応する。
【００４２】
図３Ａに示したように、スケジューリングノード３０（１）−（２）は、ノード３０（１）−３０（２）の間の相互接続６２（１）を共有し、スケジューリングノード３０（１）−（３）は、ノード３０（１）−３０（３）の間の相互接続６２（２）を共有し、スケジューリングノード３０（２）−（４）は、ノード３０（２）−３０（４）の間の相互接続６２（３）を共有し、スケジューリングノード３０（３）−（４）は、ノード３０（３）−３０（４）の間の相互接続６２（４）を共有する。相互接続６２（１）−６２（４）は全て、図３Ａの例において同じ速度特性及び同じ帯域幅特性を有すると見なされる。
【００４３】
相互接続６２を共有する任意の２つのノード３０同士の間のノード距離は、相互接続６２を共有していない任意の２つのノード３０同士の間のノード距離より短い。例えば、ノード３０（１）は、相互接続６２（１）及び６２（３）の両方、または、相互接続６２（２）及び６２（４）の両方のいずれかを用いてノード３０（４）にアクセスする。同様に、ノード３０（２）は、相互接続６２（１）及び６２（２）の両方、または相互接続６２（３）及び６２（４）の両方を用いてノード３０（３）にアクセスする。
【００４４】
ノード３０（１）から、スケジューリングコレクション４０のレベル１のサブセットは、スケジューリングノード３０（２）−３０（３）に対応するスケジューリングコレクション４０（２）−４０（３）を含み、スケジューリングコレクション４０のレベル２のサブセットは、スケジューリングノード３０（４）に対応するスケジューリングコレクション４０（４）を含む。
【００４５】
ノード３０（２）から、スケジューリングコレクション４０のレベル１のサブセットは、スケジューリングノード３０（１）−３０（４）に対応するスケジューリングコレクション４０（１）−４０（４）を含み、スケジューリングコレクション４０のレベル２のサブセットは、スケジューリングノード３０（３）に対応するスケジューリングコレクション４０（３）を含む。
【００４６】
ノード３０（３）から、スケジューリングコレクション４０のレベル１のサブセットは、スケジューリングノード３０（１）−３０（４）に対応するスケジューリングコレクション４０（１）−４０（４）を含み、スケジューリングコレクション４０のレベル２のサブセットは、スケジューリングノード３０（２）に対応するスケジューリングコレクション４０（２）を含む。
【００４７】
ノード３０（４）から、スケジューリングコレクション４０のレベル１のサブセットは、スケジューリングノード３０（２）−３０（３）に対応するスケジューリングコレクション４０（２）−４０（３）を含み、スケジューリングコレクション４０のレベル２のサブセットは、スケジューリングノード３０（１）に対応するスケジューリングコレクション４０（１）を含む。
【００４８】
図２を再度参照すると、スケジューラー２２は、ブロック５８において示したように、それぞれのタスクのセットをスケジューリングコレクション４０（１）−４０（Ｍ）に配置する。スケジューラー２２に示される１つまたは複数のタスクの各セットは、プロセス１２によって明示的に、またはランタイム環境１０によって暗示的に生成することができる（例えば、親のないエージェントを生成することによってまたはオペレーティングシステム実行コンテキストをスケジューラー２２の実行コンテキストに導入することによって）。スケジューラー２２は、任意の適切なアルゴリズムに基づいてまたはスケジューリングノード３０のトポロジーに基づいて、スケジューリングコレクション４０にタスクのセットを挿入する。例えば、スケジューラー２２は、ラウンドロビン方式の順位でスケジューリングコレクション４０にタスクのセットを挿入することができる。別の例として、スケジューラー２２は、スケジューリングノード３０の所望のトポロジーに対応するスケジューリングコレクションにタスクのセットを挿入することができる。
【００４９】
図４は、実行するタスクを選択する方法の実施形態を示すフローチャートである。図４の方法は、図１のスケジューラー２２の実施形態を参照して説明される。
【００５０】
スケジューラー２２は、ブロック７２において示すように、仮想プロセッサ３２が利用可能になるかどうかを判断する。スケジューラー２２は、プロセス１２を実行させながら、連続してこの機能を実行することができる。仮想プロセッサ３２で実行している実行コンテキスト３４の完了、ブロッキング、または他の中断（例えば、明示的なイールドまたは強制的なプリエンプション）で、仮想プロセッサ３２は利用可能になって新しいタスクを実行する。
【００５１】
スケジューラー２２は、仮想プロセッサ３２が利用可能になると判断すると、実行する利用可能な仮想プロセッサ３２のためのタスクの検索を開始する。スケジューラー２２は、ブロック７４において示すように、最初にスケジューリングコレクション４０の第１のサブセットにおいて実行するタスクを見つけようとする。スケジューリングコレクション４０の第１のサブセットは、利用可能な仮想プロセッサ３２を含むスケジューリングノード３０に対応しているスケジューリングコレクション４０である。スケジューラー２２は、任意の適切な方法で第１のサブセットを検索することができる。
【００５２】
実行可能なタスクが第１のサブセットにおいて見つけられた場合、ブロック７６に示すように、スケジューラー２２は、タスクを仮想プロセッサ３２によって実行させる。仮想プロセッサ３２は、前の実行コンテキスト３４の続きとしてタスクを実行しようとする。続きとしてタスクを実行することができない場合、仮想プロセッサ３２は、タスクによって表される実行コンテキストへ全オペレーティングシステムのコンテキストの切り替えを行なう。
【００５３】
実行可能なタスクが第１のサブセットにおいて見つけられない場合、ブロック７８に示すように、スケジューラー２２は、スケジューリングコレクション４０の別のサブセットが検索順位によって特定されているかどうかを判断する。第１のレベルのサブセットが検索順位によって特定される唯一のサブセットである場合、実行可能なタスクが見つけられるまで、スケジューラー２２は第１のサブセットを検索し続ける。
【００５４】
別のサブセットが検索順位で特定された場合、ブロック８０において示すように、スケジューラー２２は、次のサブセットの１つまたは複数のスケジューリングコレクション４０において実行するタスクを見つけようとする。実行可能なタスクが次のサブセットのスケジューリングコレクション４０において見つけられる場合、ブロック８２において示すように、スケジューラー２２は、タスクを仮想プロセッサ３２に実行させる。実行可能なタスクがスケジューリングコレクション４０の次のサブセットにおいて見つけられない場合、スケジューラー２２はブロック７８の機能を繰り返す。スケジューラー２２は、実行可能なタスクが見つけられるまでまたは検索順位で特定される全てのサブセットが検索されるまで、特定の検索順位でスケジューリングコレクション４０のサブセットを検索し続ける。
【００５５】
上記の実施形態では、スケジューラー２２は、次のサブセットに取り掛かる前に、繰り返してスケジューリングコレクション４０の上記のサブセットのうちの１つまたは複数を検索するように構成されていてもよい。スケジューラー２２はまた、１つまたは複数の遅延パラメータに基づいて１つまたは複数のサブセットの検索を遅延させるよう構成されていてもよい。
【００５６】
上記の実施形態では、スケジューリングノード３０は、対応するスケジューリングコレクション４０を事実上所有する。プロセス１２のいくつかの実行ポイントで、所与のスケジューリングノード３０の全てのプロセッシングリソースは、所与のスケジューリングノード３０に対応するスケジューリングコレクション４０以外のスケジューリングコレクション４０が提供している実行タスクであってもよい。このシナリオでは、所与のスケジューリングノード３０の所有されたスケジューリングコレクション４０は、スケジューリングコレクション４０になり、スケジューリングコレクション４０から、所与のスケジューリングノード３０のほとんどのプロセッシングリソースはタスクを実行していてかつスケジューリングノード３０はランブリングノードになる。ランブリングノードが後で元々所有するスケジューリングコレクション４０が提供しているタスクを実行しているプロセッシングリソースを有する場合、ランブリングノードは再び元々所有するスケジューリングコレクション４０の所有者になる。
【００５７】
図５Ａ乃至５Ｂは、スケジューリングコレクション４０のそれぞれの実施形態４０Ａ及び４０Ｂを示すブロック図である。
【００５８】
図５Ａは、スケジュールグループ９０（１）−９０（Ｐ）のセットを含むスケジューリングコレクション４０の実施形態４０Ａを示すブロック図である。ここで、Ｐは１以上の整数であって、Ｐ番目のスケジュールグループ９０を示す。スケジュールグループ９０（１）−９０（Ｐ）のセットは、矢印９６で示すようなスケジューリングリングに配される。各スケジュールグループ９０は、実行可能なコレクション９２、作業キュー９３、及び０または１以上のワークスティーリングキュー９４のセットを含む。各実行可能なコレクション９２は、実行可能なタスクまたは実行コンテキストのリストを含む。実行コンテキストがブロックされないようになるかまたは新しい実行可能な実行コンテキスト（おそらく生成された要求）がプロセス１２によってスケジューラー２２に示されると、スケジューラー２２は実行コンテキストを実行可能なコレクション９２に加える。作業キュー９３は、矢印９５で示すようにワークスティーリングキュー９４のリストを含み、ワークスティーリングキュー９３からのタスクを実行している実行コンテキストを追跡する。各ワークスティーリングキュー９４は、割り当てられた実行コンテキストを備えていない１つまたは複数の認識されていないタスクを含む。
【００５９】
スケジューラー２２は、いつでも（例えば、他のタスクを実行するのに応じて）０または１以上のスケジュールグループ９０のそれぞれのセットをスケジューリングコレクション４０Ａ（図１）に配置する。各スケジュールグループ９０は、プロセス１２のタスクのセットを含む。かかる実施形態において、スケジューラー２２は、別のスケジューリングコレクション４０または４０Ａにおいてタスクを検索する前に、スケジューリングコレクション４０Ａにおいて各スケジュールグループ９０を検索することができる。
【００６０】
スケジューラー２２は、利用可能な仮想プロセッサ３２が最近実行可能なタスクを得たスケジュールグループ９０において、またはインデックス９７（例えば、ラウンドロビン方式のインデックス）で示されたスケジュールグループ９０において、実行するタスクを見つけようとすることができる。各スケジュールグループ９０において、スケジューラー２２は、（例えば、ラウンドロビン方式の順位で）他のスケジュールグループ９０において認識されたタスクを検索する前に、スケジュールグループ９０の実行可能なコレクション９２において認識されたタスクを検索することができる。認識されたタスクが見つからない場合、スケジューラー２２は、他のスケジュールグループ９０（例えば、ラウンドロビン方式の順位で）において認識されていないタスクを検索する前に、スケジュールグループ９０のワークスティーリングキュー９４において認識されていないタスクを検索することができる。スケジューラー２２は、インデックス９７を更新して実行可能なタスクが見つかったスケジュールグループ９０を識別することができる。
【００６１】
プロセス１２は、スケジューラー２２のスケジュールグループ９０を用いて、作業、公正さ、及び進捗のローカリティのための構造を提供することができる。各スケジュールグループ９０のタスクは、論理的に関連する作業（例えば、共通のルートのタスクに由来するタスクのコレクション）、ハードウェアトポロジー（例えば、非均等型メモリアーキテクチャ（ＮＵＭＡ））、またはこれらの組合せによりグループ化することができる。
【００６２】
図５Ｂは、スケジューリングコレクション４０の実施形態４０Ｂを示すブロック図であり、スケジューリングコレクション４０は、それぞれの仮想プロセッサ３２（１）−３２（Ｎ）に対応しているタスク４４（１）−４４（Ｎ）のローカルコレクションを含む。
【００６３】
１つまたは複数のスケジューリングコレクション４０がローカルコレクション４４を含む実施形態において、スケジューラー２２の実行コンテキストのセットはまた、それぞれのローカルコレクション４４（１）−４４（Ｎ）において実行可能な実行コンテキスト４６（１）−４６（Ｎ）のセットを含む。各実行コンテキスト４６は、タスク３６の実行によってブロックされていない関連するタスク４７を有し、タスク３６は実行されたかまたは、実行コンテキスト４６を含むローカルコレクション４４に対応している仮想プロセッサ３２で実行中である。
【００６４】
スケジューラー２２は、最初に、スケジューリングコレクション４０Ｂにおいてほかの場所を検索する前に、利用可能な仮想プロセッサ３２に対応したローカルコレクション４４においてタスクを見つけようとすることができる。ローカルコレクション４４は、スケジューラー２２が、ハードウェアスレッド１６によって生じるかもしれないメモリローカリティ及び他の効果を利用できるようにする。プロセス１２を実行する際に、スケジューラー２２は、ブロックされないようになる各待ち依存の実行を、実行コンテキストをブロックされないようにする仮想プロセッサ３２に対応しているローカルコレクション４４に割り当てることができる。仮想プロセッサ３２が利用可能になると、仮想プロセッサ３２は、対応するローカルコレクション４４において最近追加された実行コンテキストを実行しようとし、仮想プロセッサ３２に対応しているメモリ階層に格納されたデータを利用しようとする。
【００６５】
実行可能なタスクが、利用可能な仮想プロセッサ３２に対応しているローカルコレクション４４において見つけられない場合、スケジューラー２２は、スケジューリングノード３０の別の仮想プロセッサ３２に対応しているローカルコレクション４４において実行可能なタスクを見つけようとすることができる。スケジューラー２２は、ラウンドロビン方式の順位でまたは他の適切な順位で、他の仮想プロセッサ３２に対応しているローカルコレクション４４にアクセスして、実行可能なタスクが見つけられるローカルコレクション４４において最も長い間使われていない追加された実行コンテキストを実行することができる。
【００６６】
他の実施形態では、他のスケジューリングコレクション４０は、スケジューリングコレクション４０Ａ（図５Ａ）のスケジュールグループ９０及びスケジューリングコレクション４０Ｂ（図５Ｂ）のローカルコレクション４４の両方を含むことができる。
【００６７】
図６Ａ乃至６Ｂは、スケジューリングコレクション４０を備えたスケジューラー２２を含むランタイム環境１０を実施するよう構成されたコンピューターシステム１００の実施形態１００Ａ及び１００Ｂをそれぞれ示すブロック図である。
【００６８】
図６Ａに示すように、コンピューターシステム１００Ａは、１つまたは複数のプロセッサパッケージ１０２、メモリシステム１０４、０または１以上の入力デバイス／出力デバイス１０６、０または１以上のディスプレイデバイス１０８、０または１以上の周辺デバイス１１０、及び０または１以上のネットワークデバイス１１２を含む。プロセッサパッケージ１０２、メモリシステム１０４、入力デバイス／出力デバイス１０６、ディスプレイデバイス１０８、周辺デバイス１１０、及びネットワークデバイス１１２は、任意の適切なタイプ、数及び構成のコントローラー、バス、インターフェース、及び／または他の有線接続もしくは無線接続を含む相互接続１１４のセットを用いて通信を行う。
【００６９】
コンピューターシステム１００Ａは、汎用または特定の目的のために構成された任意の適切な処理デバイスを表す。コンピューターシステム１００Ａの例は、サーバ、パーソナルコンピューター、ラップトップコンピューター、タブレットコンピューター、携帯情報端末（ＰＤＡ）、携帯電話、及びオーディオデバイス／ビデオデバイスを含む。コンピューターシステム１００Ａの構成要素（即ち、プロセッサパッケージ１０２、メモリシステム１０４、入力デバイス／出力デバイス１０６、ディスプレイデバイス１０８、周辺デバイス１１０、ネットワークデバイス１１２、及び相互接続１１４）は、共通の筐体（図示せず）に含まれていてもよいしまたは任意の適切な数の別個の筐体（図示せず）に含まれていてもよい。
【００７０】
プロセッサパッケージ１０２は、ハードウェアスレッド１６（１）−１６（Ｍ）を含む。プロセッサパッケージ１０２の各ハードウェアスレッド１６は、メモリシステム１０４に格納された命令にアクセスして実行するよう構成されている。命令は、基本入出力システム（ＢＩＯＳ）またはファームウェア（図示せず）、オペレーティングシステム（ＯＳ）、ランタイムプラットフォーム１２２、アプリケーション１２４、及びリソース管理層１４（図１にも示されている）を含むことができる。各ハードウェアスレッド１６は、入力／出力デバイス１０６、ディスプレイデバイス１０８、周辺デバイス１１０、及び／または、ネットワークデバイス１１２から受信した情報と連動してまたは当該情報に応じて、命令を実行することができる。
【００７１】
コンピューターシステム１００Ａは、ＯＳ１２０をブートして実行する。ＯＳ１２０は、プロセッサパッケージ１０２が実行可能な命令を含み、コンピューターシステム１００Ａの構成要素を管理し、アプリケーション１２４が該構成要素にアクセスして使用できるようにする機能のセットを提供する。１つの実施形態では、ＯＳ１２０は、ウィンドウズ（商標登録）のオペレーティングシステムである。他の実施形態では、ＯＳ１２０は、コンピューターシステム１００Ａでの使用に適した別のオペレーティングシステムである。
【００７２】
リソース管理層１４は、ＯＳ１２０とともに実行可能な命令を含み、図１を参照して上記に説明したようにハードウェアスレッド１６を含むコンピューターシステム１００Ａのリソースを割り当てる。リソース管理層１４は、１つまたは複数のアプリケーション１２４が利用可能な機能のライブラリとしてまたはＯＳ１２０の統合された部分としてコンピューターシステム１００Ａに含むことができる。
【００７３】
ランタイムプラットフォーム１２２は、ＯＳ１２０及びリソース管理層１４とともに実行可能な命令を含み、ランタイム環境１０を生成してアプリケーション１２４にランタイム機能を提供する。これらのランタイム機能は、図１を参照して上記に更に詳細に説明したようなスケジューラー機能を含む。ランタイム機能は、アプリケーション１２４の一部として、１つまたは複数のアプリケーション１２４に利用可能な機能のライブラリとして、またはＯＳ１２０及び／もしくはリソース管理層１４の統合された部分として、コンピューターシステム１００Ａに含むことができる。
【００７４】
各アプリケーション１２４は、ＯＳ１２０、リソース管理層１４、及び／またはランタイムプラットフォーム１２２と連動して実行可能な命令を含み、所望の動作をコンピューターシステム１００Ａによって実行させる。各アプリケーション１２４は、上記に説明したようにプロセス１２などの１つまたは複数のプロセスを表し、該プロセスは、ランタイムプラットフォーム１２２によって提供されるようなスケジューラー２２を用いて実行することができる。
【００７５】
メモリシステム１０４は、命令及びデータを格納するよう構成された、任意の適切なタイプ、数、及び構成の揮発性の記憶装置または不揮発性の記憶装置を含む。メモリシステム１０４の記憶装置は、ＯＳ１２０、リソース管理層１４、ランタイムプラットフォーム１２２、及びアプリケーション１２４を含むコンピューター実行可能命令を格納するコンピューター読取可能な記憶媒体を表す。命令は、本明細書において説明されたＯＳ１２０、リソース管理層１４、ランタイムプラットフォーム１２２及びアプリケーション１２４の機能及び方法を実行するコンピューターシステムによって実行可能である。メモリシステム１０４の記憶装置の例は、ハードディスクデバイス、ランダムアクセスメモリ（ＲＡＭ）、リードオンリメモリ（ＲＯＭ）、フラッシュメモリドライブ及びフラッシュメモリカード、並びに磁気ディスク及び光ディスクを含む。
【００７６】
メモリシステム１０４は、プロセッサパッケージ１０２、入力デバイス／出力デバイス１０６、ディスプレイデバイス１０８、周辺デバイス１１０、及びネットワークデバイス１１２から受信した命令及びデータを格納する。メモリシステム１０４は、プロセッサパッケージ１０２、入力デバイス／出力デバイス１０６、表示デバイス１０８、周辺デバイス１１０、及びネットワークデバイス１１２に対して格納された命令及びデータを与える。
【００７７】
入力デバイス／出力デバイス１０６は、ユーザからコンピューターシステム１００Ａへの命令またはデータを入力しかつコンピューターシステム１００Ａからユーザへの命令及びデータを出力するよう構成された任意の適切なタイプ、数、及び構成の入力デバイス／出力デバイスを含む。入力デバイス／出力デバイス１０６の例は、キーボード、マウス、タッチパッド、タッチスクリーン、ボタン、ダイヤル、ノブ、及びスイッチを含む。
【００７８】
ディスプレイデバイス１０８は、コンピューターシステム１００Ａのユーザにテキスト情報及び／またはグラフィック情報を出力するよう構成された任意の適切なタイプ、数、及び構成のディスプレイデバイスを含む。ディスプレイデバイス１０８の例は、モニタ、ディスプレイスクリーン、及びプロジェクタを含む。
【００７９】
周辺デバイス１１０は、コンピューターシステム１００Ａの１つまたは複数の他の構成要素で動作して一般的な処理機能または特定の処理機能を実行するよう構成された、任意の適切なタイプ、数、及び構成の周辺デバイスを含む。
【００８０】
ネットワークデバイス１１２は、コンピューターシステム１００Ａが１つまたは複数のネットワーク（図示せず）と通信できるよう構成された任意の適切なタイプ、数、及び構成のネットワークデバイスを含む。ネットワークデバイス１１２は、コンピューターシステム１００Ａが情報をネットワークに送信できるようにするかまたはコンピューターシステム１００Ａが情報をネットワークから受信できるようにする任意の適切なネットワーキングプロトコル及び／またはネットワーク構成により動作することができる。
【００８１】
図６Ｂは、コンピューターシステム１００の実施形態１００Ｂを示すブロック図である。コンピューターシステム１００Ｂはまた、少なくともプロセッサパッケージ１０２及びメモリシステム１０４を含む。プロセッサパッケージ１０２は、プロセッサパッケージ１０２（１）−１０２（Ｒ）を含み、メモリシステム１０４は、メモリデバイス１２８（１）−１２８（Ｒ）のセットを含む。ここで、Ｒは２以上の整数であって、Ｒ番目のプロセッサパッケージ１０２及びＲ番目のメモリデバイス１２８のセットを表す。ＯＳ１２０、ランタイムプラットフォーム１２２、アプリケーション１２４、及びリソース管理層１４は、各々、メモリデバイス１０４（１）−１０４（Ｒ）のうちの任意の適切なデバイスに格納することができる。
【００８２】
図６Ｂの実施形態では、各プロセッサパッケージ１０２（１）‐１０２（Ｒ）及びメモリデバイスのそれぞれのセット１２８（１）−１２８（Ｒ）が、ノードを形成する。ノードは、ノードの相互接続１３０の任意の適切なタイプ、数、及び／または組み合わせに相互接続されている。相互接続１３０の速度及び／または帯域幅は、ノード同士の間で変えることができる。
【００８３】
各プロセッサパッケージ１０２は、ハードウェアスレッド１６（１）−１６（４）のセットを含み、各ハードウェアスレッドは、Ｌ１（レベル１）キャッシュ（図示せず）を含む。各プロセッサパッケージ１０２も、それぞれのハードウェアスレッド１６（１）（１）−１６（１）（４）に対応するＬ２（レベル２）キャッシュ１３２（１）−１３２（４）のセットを含む。各プロセッサパッケージ１０２は更に、ハードウェアスレッド１６（１）−１６（４）のセット、システムリソースインターフェース１３６、クロスバースイッチ１３８、メモリコントローラー１４０、及びノードインターフェース１４２が利用可能なＬ３（レベル３）キャッシュを含む。システムリソースインターフェース１３６は、ノードリソース（図示せず）にアクセスできる。クロスバースイッチ１３８は、メモリコントローラー１４０及びノードインターフェース１４２とシステムリソースインターフェース１３６を相互接続する。メモリコントローラー１４０は、メモリデバイス１２８に接続している。ノードインターフェース１４２は、１つまたは複数のノード相互接続１３０に接続している。
【００８４】
ノードはローカルメモリ（即ち、メモリデバイス１０４のセット）を含むので、ノードのプロセッサパッケージ１０２によるローカルメモリへのアクセスは、他のノードのメモリへのアクセスより速い。更に、他のノードのメモリへのアクセスは、ノード同士の間の相互接続１３０の接続速度、帯域幅、キャッシュトポロジー、及び／または、ＮＵＭＡノードの距離によって決まる。例えば、いくつかのノードは、アドバンストマイクロデバイセズ社のハイパートランスポートバスまたはインテル社のＣＳＩバスなどの、相対的に速い相互接続１３０に接続することができ、一方他のノードは１つまたは複数の相対的に遅い相互接続１３０に接続することができる。
【００８５】
他の実施形態では、各プロセッサパッケージ１０２は、他の構成及び／または数のキャッシュを含むことができる。例えば、各ハードウェアスレッド１６は、他の実施形態において２つまたはそれ以上のＬ１キャッシュを含むことができ、Ｌ２キャッシュ及び／またはＬ３キャッシュは、他の実施形態において共有されていてもよいし共有されていなくてもよい。別の例として、他の実施形態は、追加のキャッシュ（例えば、レベル４（Ｌ４）キャッシュ）もしくはより少ないキャッシュを含んでいてもよいし、またはキャッシュを含まなくてもよい。
【００８６】
図１乃至５Ｂにおいて上記で説明した実施形態を参照すると、コンピューターシステム１００Ｂのメモリレイテンシー及び相互接続レイテンシーは、スケジューリングノード３０を形成する際にランタイム環境１０、リソース管理層１４、及び／またはスケジューラー３０が考慮することができるノード距離を提供する。例えば、ランタイム環境１０、リソース管理層１４、及び／または、スケジューラー２２は、対応しているスケジューリングコレクション４０とともに、コンピューターシステム１００Ｂにおいて各ノードのためのスケジューリングノード３０を生成することができる。ランタイム環境１０、リソース管理層１４、及び／または、スケジューラー２２は、ノード同士の間の相互接続トポロジーに基づいて、スケジューリングコレクション４０を部分的な検索順位または全検索順位にマッピングすることができる。例えば、相対的に速い相互接続１３０に接続された任意の２つのノードは、同じスケジューリングノード及びスケジューリングコレクションのサブセットレベルへグループ化することができ、相対的に遅い相互接続１３０を有する及びノードは、相対的に速い相互接続１３０を含むスケジューリングノード及びスケジューリングコレクションのサブセットレベルより上位のスケジューリングノード及びスケジューリングコレクションのサブセットレベルへグループ化することができる。
【００８７】
検索順位で実行可能なタスクを求めてスケジューリングコレクション４０を検索することによって、ノードのプロセッシングリソースは、コンピューターシステム１００Ｂにおけるメモリローカリティの効果を利用する可能性を増大させる。同じスケジューリングコレクション４０からのタスクは、別のスケジューリングコレクション４０からのタスクよりノードのローカルメモリの階層に存在する共通のデータを有する可能性が高いかもしれない。
【００８８】
潜在的なローカリティの利点に加えて、上記の実施形態におけるスケジューリングノード及びスケジューリングコレクションの使用は、実行するタスクを検索するプロセッシングリソース同士の間のコンテンションを減らす能力をスケジューラーに与えることができる。異なったスケジューリングノードにおけるプロセッシングリソースは、異なった対応するスケジューリングコレクションにおいて実行可能なタスクの検索を開始する。そのように検索することによって、スケジューラーのタスクのコレクションに配されるロックまたは他の同期コンストラクトの数を減少することができる。
【００８９】
スケジューラーはまた、実行可能なタスクについての局所化された検索の結果として、多数のプロセッシングリソースを有するコンピューターシステムにも適合することができる。更に、スケジュールグループにおいてラウンドロビン方式の検索キュー及びワークスティーリングキューを用いて、公正さ及び進捗を維持しながら、スケジューラーは作業のローカリティを提供することができる。
【００９０】
本明細書において特定の実施形態が示されかつ説明されてきたが、様々な代わりの実施例及び／または等価な実施例によって、本発明の範囲から逸脱することなしに、示されかつ説明された特定の実施形態に代替されることを、当業者は認めることができる。本出願は、本明細書において検討された特定の実施形態のあらゆる適応形または変化形を含めることを意図している。従って、本発明は本発明の特許請求の範囲及び均等物によってだけ限定されることが意図されている。
【図１】
0005597195.tif 000002
【図２】
0005597195.tif 000003
【図３Ａ】
0005597195.tif 000004
【図３Ｂ】
0005597195.tif 000005
【図４】
0005597195.tif 000006
【図５Ａ】
0005597195.tif 000007
【図５Ｂ】
0005597195.tif 000008
【図６Ａ】
0005597195.tif 000009
【図６Ｂ】
0005597195.tif 000010