(57)【特許請求の範囲】
【請求項１】
スレッドをマルチコアプロセッサにおける１つまたは複数の異種プロセッサコア上に割り振る方法であって、
サイクル・パー・インストラクション・（ＣＰＩ）レートを、ある期間にわたって完了される命令に対するクロックサイクルの総数の比率によって少なくとも部分的に決定すること、
前記スレッドが割り当てられた第１の異種プロセッサコアを含む複数の前記異種プロセッサコアに関係する前記ＣＰＩレートを含むリアルタイムコンピューティングデータを監視すること、
前記監視されたリアルタイムコンピューティングデータに少なくとも部分的に基づいて前記スレッドを前記異種プロセッサコアのうちの１つまたは複数に割り振ること、
を含み、
前記リアルタイムコンピューティングデータを監視することが、前記スレッドがスレッド完了目標期限より遅れているかを決定することを含み、
前記スレッドを割り振ることが、前記ＣＰＩレートとターゲットＣＰＩレートとの比較結果、前記スレッドの実行に関係するデータを含む実行プロファイル、前記スレッドのキャッシュフットプリント、及び前記スレッドが前記スレッド完了目標期限より遅れているかどうかに少なくとも部分的に基づき、
前記スレッドを割り振ることが、前記スレッドが、実行の間、より速い異種プロセッサコアに割り振られて実行を完了するように、前記スレッドを前記第１の異種プロセッサコアから、前記複数の異種プロセッサコアのうち前記第１の異種プロセッサコアとは異なる第２の異種プロセッサコアへ割り振ることを含み、
前記スレッドは、前記第２の異種プロセッサコアが有さない機能である強化されたグラフィックス機能の利益を前記第１の異種プロセッサコアから得て、
前記スレッドは、前記第１の異種プロセッサコアが有さない機能である強化された数学的計算機能の利益を前記第２の異種プロセッサコアから得る、方法。
【請求項２】
前記第２の異種プロセッサコアによって前記スレッドを実行することをさらに含む、請求項１に記載の方法。
【請求項３】
前記スレッドを割り振ることが、前記スレッドを前記第２の異種プロセッサコアに動的に割り振ることを含む、請求項１に記載の方法。
【請求項４】
前記監視されたリアルタイムコンピューティングデータをスレッド割振りソフトウェアツールに送ることをさらに含み、
前記スレッドを前記異種プロセッサコアのうちの１つまたは複数に割り振ることは、前記監視されたリアルタイムコンピューティングデータに基づいて前記スレッド割振りソフトウェアツールによって前記スレッドを前記第２の異種プロセッサコアに割り振ることを含む、請求項１に記載の方法。
【請求項５】
前記リアルタイムコンピューティングデータが、前記スレッドが特定の時点で前記第１の異種プロセッサコアから前記第２の異種プロセッサコアに割り振られるべきであることを命令する１つまたは複数のチェックポイントを含み、
前記スレッドを割り振ることが前記１つまたは複数のチェックポイントに少なくとも部分的に基づく、請求項１に記載の方法。
【請求項６】
スレッドをマルチコアプロセッサにおける第１の異種プロセッサコアから第２の異種プロセッサコアに割り振る方法であって、
前記第１の異種プロセッサコアに関連するクロックサイクルの総数を監視すること、
前記第１の異種プロセッサコアによって完了される命令の総数を監視すること、
特定の期間にわたって完了される命令に対するクロックサイクルの総数の比率に少なくとも部分的に基づいてサイクル・パー・インストラクション（ＣＰＩ）値を計算すること、
前記スレッドがスレッド完了目標期限より遅れているかのリアルタイムコンピューティングデータの監視に基づく決定、前記計算されたＣＰＩ値とターゲットＣＰＩ値との比較結果、前記スレッドの実行に関係するデータを含む実行プロファイル、及び前記スレッドのキャッシュフットプリントに少なくとも部分的に基づいて前記スレッドを前記第１の異種プロセッサコアから前記第２の異種プロセッサコアに割り振ることを含み、
前記スレッドを割り振ることが、前記スレッドが、実行の間、より速い異種プロセッサコアに割り振られて実行を完了するように、前記スレッドを前記第１の異種プロセッサコアから前記第２の異種プロセッサコアへ割り振ることを含み、
前記スレッドは、前記第２の異種プロセッサコアが有さない機能である強化されたグラフィックス機能の利益を前記第１の異種プロセッサコアから得て、
前記スレッドは、前記第１の異種プロセッサコアが有さない機能である強化された数学的計算機能の利益を前記第２の異種プロセッサコアから得る、方法。
【請求項７】
前記割り振ることが、前記ＣＰＩ値が前記ターゲットＣＰＩ値と等しいことに少なくとも部分的に基づく、請求項６に記載の方法。
【請求項８】
前記割り振ることが、前記ＣＰＩ値が前記ターゲットＣＰＩ値を超えることに少なくとも部分的に基づく、請求項６に記載の方法。
【請求項９】
前記ターゲットＣＰＩ値が、前記スレッドに関連するソフトウェアアプリケーションの実行前に定義される、請求項６に記載の方法。
【請求項１０】
前記ターゲットＣＰＩ値が、前記スレッドに関連するソフトウェアアプリケーションの実行中に定義される、請求項６に記載の方法。
【請求項１１】
前記リアルタイムコンピューティングデータが、前記スレッドが少なくとも１つのチェックポイントに関連付けられた特定の時点で前記第１の異種プロセッサコアから前記第２の異種プロセッサコアに割り振られるべきであることを命令する前記少なくとも１つのチェックポイントを含み、
前記割り振ることが、前記少なくとも１つのチェックポイントに関連する前記特定の時点に少なくとも部分的に基づく、請求項６に記載の方法。
【請求項１２】
機械可読命令が記憶された記憶媒体であって、１つまたは複数の処理ユニットによる前記機械可読命令の実行に応答して、前記機械可読命令は、コンピューティングプラットフォームが、
サイクル・パー・インストラクション・（ＣＰＩ）レートを、ある期間にわたって完了される命令に対するクロックサイクルの総数の比率によって少なくとも部分的に決定すること、
スレッドを処理するマルチコアプロセッサにおける第１の異種プロセッサコアに関係する前記ＣＰＩレートを含むリアルタイムコンピューティングデータを監視すること、
前記監視されたリアルタイムコンピューティングデータに少なくとも部分的に基づいて前記スレッドを前記マルチコアプロセッサにおける第２の異種プロセッサコアに割り振ること、
を動作可能にし、
前記監視が、前記スレッドがスレッド完了目標期限より遅れているかどうかについての判定を含み、
前記スレッドを割り振ることが、前記ＣＰＩレートとターゲットＣＰＩレートとの比較結果、前記スレッドの実行に関係するデータを含む実行プロファイル、前記スレッドのキャッシュフットプリント、及び前記スレッドが前記スレッド完了目標期限より遅れたかどうかに少なくとも部分的に基づき、
前記スレッドを割り振ることが、前記スレッドが、実行の間、より速いプロセッサコアに割り振られて実行を完了するように、前記スレッドを前記第１の異種プロセッサコアから、前記第２の異種プロセッサコアへ割り振られることを含み、
前記スレッドは、前記第２の異種プロセッサコアが有さない機能である強化されたグラフィックス機能の利益を前記第１の異種プロセッサコアから得て、
前記スレッドは、前記第１の異種プロセッサコアが有さない機能である強化された数学的計算機能の利益を前記第２の異種プロセッサコアから得る、記憶媒体。
【請求項１３】
前記リアルタイムコンピューティングデータを受け取るように構成されたスレッド割振りソフトウェアツールをさらに備え、前記スレッド割振りソフトウェアツールが、前記リアルタイムコンピューティングデータに少なくとも部分的に基づいて前記スレッドを前記第２の異種プロセッサコアに割り振るように構成された、請求項１２に記載の記憶媒体。
【請求項１４】
前記スレッドを割り振ることが、前記監視されたリアルタイムコンピューティングデータに少なくとも部分的に基づいて前記スレッドを前記第２の異種プロセッサコアに動的に割り振ることを含む、請求項１２に記載の記憶媒体。
【請求項１５】
第１の異種プロセッサコアと、
第２の異種プロセッサコアとを備えるマルチコアプロセッサであって、
サイクル・パー・インストラクション・（ＣＰＩ）レートを、ある期間にわたって完了される命令に対するクロックサイクルの総数の比率によって少なくとも部分的に決定し、
スレッドを処理する前記第１の異種プロセッサコアに関係する前記ＣＰＩレートを含むリアルタイムコンピューティングデータを監視し、前記監視されたリアルタイムコンピューティングデータに少なくとも部分的に基づいて前記スレッドを前記第２の異種プロセッサコアに割り振り、前記スレッドが前記第２の異種プロセッサコアに割り振られた後で前記第２の異種プロセッサコアによって前記スレッドを実行し、
前記リアルタイムコンピューティングデータを監視するために、前記スレッドがスレッド完了目標期限より遅れているかを決定するように構成され、
前記スレッドを割り振るために、前記スレッドを割り振ることが、前記ＣＰＩレートとターゲットＣＰＩレートとの比較結果、前記スレッドの実行に関係するデータを含む実行プロファイル、前記スレッドのキャッシュフットプリント、及び前記スレッド完了目標期限より遅れたかどうかに少なくとも部分的に基づくように構成され、
前記スレッドを割り振ることが、前記スレッドが、実行の間、より速いプロセッサコアに割り振られて実行を完了するように、前記スレッドを前記第１の異種プロセッサコアから前記第２の異種プロセッサコアへ割り振ることを含み、
前記第１の異種プロセッサコアは、前記第２の異種プロセッサコアが有さない機能である強化されたグラフィックス機能の利益を前記スレッドに与えるように構成され、
前記第２の異種プロセッサコアは、前記第１の異種プロセッサコアが有さない機能である強化された数学的計算機能の利益を前記スレッドに与えるように構成される、マルチコアプロセッサ。
【発明の詳細な説明】
【背景技術】
【０００１】
関連出願の相互参照
本出願は、参照によりその開示全体が本明細書に組み込まれる、２００９年９月１１日に出願された「ＴＨＲＥＡＤ  ＳＨＩＦＴ：ＡＬＬＯＣＡＴＩＮＧ  ＴＨＲＥＡＤＳ  ＴＯ  ＣＯＲＥＳ」という名称の米国特許出願第１２／５５７，９７１号に対する優先権を主張する。
【０００２】
本発明は、参照によりその開示全体が本明細書に組み込まれる、２００９年４月２１日に出願されたＷｏｌｆｅ他による「ＴＨＲＥＡＤ  ＭＡＰＰＩＮＧ  ＩＮ  ＭＵＬＴＩ−ＣＯＲＥ  ＰＲＯＣＥＳＳＯＲＳ」という名称の同時係属の米国特許出願第１２／４２７，６０２号、２００９年９月１１日に出願されたＷｏｌｆｅ他による「ＭＡＰＰＩＮＧ  ＯＦ  ＣＯＭＰＵＴＥＲ  ＴＨＲＥＡＤＳ  ＯＮＴＯ  ＨＥＴＥＲＯＧＥＮＥＯＵＳ  ＲＥＳＯＵＲＣＥＳ」という名称の米国特許出願第１２／５５７，９８５号、および／または、２００９年９月１１日に出願されたＷｏｌｆｅ他による「ＣＡＣＨＥ  ＰＲＥＦＩＬＬ  ＯＮ  ＴＨＲＥＡＤ  ＭＩＧＲＡＴＩＯＮ」という名称の同時係属の米国特許出願第１２／５５７，８６４号に関するものとすることができる。
【０００３】
本開示は、マルチコアコンピュータシステムに関し、より詳細には、マルチコアコンピュータシステムに関係するリアルタイムコンピューティングデータに少なくとも部分的に基づいてスレッドのコア割振りを効率的に調整することに関する。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本開示は一般に、マルチコアコンピュータ処理に関する。
【０００５】
具体的には、本開示は、リアルタイムコンピューティングデータに基づいてスレッドのコア割振りを調整することに関する。
【課題を解決するための手段】
【０００６】
本開示の第１の態様では、一般に、スレッドを異種プロセッサコア上に割り振る方法について述べる。このような方法は、異種プロセッサコア（複数可）に関係するリアルタイムコンピューティングデータを監視すること、および、監視されたリアルタイムコンピューティングデータに少なくとも部分的に基づいてスレッドを異種プロセッサコア（複数可）に割り振ることを含むことができる。
【０００７】
第１の態様のいくつかの例では、この方法はまた、割り振られたそれぞれの異種プロセッサコアによってスレッドを実行することを含むことができる。いくつかの例では、リアルタイムコンピューティングデータを監視することは、スレッドがスレッド完了目標期限より遅れているのがいつかを決定することを含むことができる。いくつかの例では、スレッドを割り振ることは、スレッドがスレッド完了目標期限より遅れたかどうかに少なくとも部分的に基づくことができる。いくつかの例では、リアルタイムコンピューティングデータは、スレッドがスレッド完了目標期限より遅れていることを示す情報を含むことができる。
【０００８】
第１の態様のいくつかの例では、リアルタイムコンピューティングデータは、サイクル・パー・インストラクション（ＣＰＩ：ｃｙｃｌｅｓ  ｐｅｒ  ｉｎｓｔｒｕｃｔｉｏｎ）レートを含むことができる。いくつかの例では、ＣＰＩレートは、ある期間にわたって完了される命令ごとのクロックサイクルの総数の比率によって少なくとも部分的に決定することができる。
【０００９】
第１の態様のいくつかの例はまた、ＣＰＩレートをターゲットＣＰＩレートと比較することを含むことができる。このような例では、スレッドを割り振ることは、ＣＰＩレートとターゲットＣＰＩレートとの比較に少なくとも部分的に基づくことができる。いくつかの例では、スレッドを割り振ることは、スレッドを異種プロセッサコア（複数可）に動的に割り振ることを含むことができる。
【００１０】
第１の態様のいくつかの例では、この方法はまた、監視されたリアルタイムコンピューティングデータをスレッド割振りソフトウェアツールに送ること、および、監視されたリアルタイムコンピューティングデータに基づいてスレッド割振りツールソフトウェアによってスレッドを所定の異種プロセッサコアに割り振ることを含むことができる。
【００１１】
いくつかの例では、リアルタイムコンピューティングデータは、スレッドが所定の時点で第１の異種プロセッサコアから第２の異種プロセッサコアに割り振られるべきであることを命令するチェックポイント（複数可）を含むことができる。このような例では、スレッドを割り振ることは、チェックポイント（複数可）に少なくとも部分的に基づくことができる。
【００１２】
第１の態様のいくつかの例では、この方法はまた、複数のスレッドのそれぞれを異種プロセッサコア（複数可）に独立して割り振ることを含むことができる。このような例では、スレッドは複数のスレッドを含むことができ、各スレッドはリアルタイムコンピューティングデータに関連する。
【００１３】
本開示の第２の態様では、一般に、スレッドを第１の異種プロセッサコアから第２の異種プロセッサコアに割り振る方法について述べる。このような方法は、第１の異種プロセッサコアに関連するクロックサイクルの総数を監視すること、第１の異種プロセッサコアによって完了される命令の総数を監視すること、所定の期間にわたって完了される命令ごとのクロックサイクルの総数の比率に少なくとも部分的に基づいてＣＰＩ値を計算すること、および、ＣＰＩ値に少なくとも部分的に基づいてスレッドを第２の異種プロセッサコアに割り振ることを含むことができる。
【００１４】
第２の態様のいくつかの例では、この方法はまた、スレッドを割り振る前に、ＣＰＩ値を、スレッド割振り前のターゲットＣＰＩ値と比較することを含むことができる。このような例では、割り振ることは、ＣＰＩ値がターゲットＣＰＩ値と等しいことに少なくとも部分的に基づくことができる。いくつかの例は、ＣＰＩ値を、スレッド割振り前のターゲットＣＰＩ値と比較することを含むことができる。このような例では、割り振ることは、ＣＰＩ値がターゲットＣＰＩ値を超えることに少なくとも部分的に基づくことができる。いくつかの例では、ターゲットＣＰＩ値は、スレッドに関連するソフトウェアアプリケーションの実行前および／または実行中に定義することができる。
【００１５】
第２の態様のいくつかの例では、リアルタイムコンピューティングデータは、スレッドが所定の時点で第１の異種プロセッサコアから第２の異種プロセッサコアに割り振られるべきであることを命令するチェックポイント（複数可）を含むことができる。このような例では、割り振ることは、チェックポイント（複数可）に関連する所定の時点に少なくとも部分的に基づくことができる。
【００１６】
本開示の第３の態様では、一般に、機械可読命令が記憶された記憶媒体などの物品について述べる。このような機械可読命令が処理ユニット（複数可）によって実行されたとき、機械可読命令は、コンピューティングプラットフォームが、スレッドを処理する第１の異種プロセッサコアに関係するリアルタイムコンピューティングデータを監視すること、および、監視されたリアルタイムコンピューティングデータに少なくとも部分的に基づいてスレッドを第２の異種プロセッサコアに割り振ることを、可能にすることができる。
【００１７】
第３の態様のいくつかの例では、機械可読命令はさらに、コンピューティングプラットフォームが、スレッドがスレッド完了目標期限より遅れているかどうか判定することを可能にすることができる。このような例では、スレッドを割り振ることは、スレッドがスレッド完了目標期限より遅れたかどうかに少なくとも部分的に基づくことができる。
【００１８】
第３の態様のいくつかの例では、この物品はまた、リアルタイムコンピューティングデータを受け取って、リアルタイムコンピューティングデータに少なくとも部分的に基づいてスレッドを所定の異種プロセッサコアに割り振るように構成されたスレッド割振りソフトウェアツールを備えることができる。いくつかの例では、機械可読命令はさらに、コンピューティングプラットフォームが、監視されたリアルタイムコンピューティングデータに少なくとも部分的に基づいてスレッドを第２の異種プロセッサコアに動的に割り振ることを可能にすることができる。
【００１９】
本開示の第４の態様は、一般に、マルチコアプロセッサについて述べる。このようなマルチコアプロセッサは、第１の異種プロセッサコアと第２の異種プロセッサコアとを備えることができる。マルチコアプロセッサは、スレッドを処理する第１の異種プロセッサコアに関係するリアルタイムコンピューティングデータを監視し、監視されたリアルタイムコンピューティングデータに少なくとも部分的に基づいてスレッドを第２の異種プロセッサコアに割り振り、スレッドが第２の異種プロセッサコアに割り振られた後で第２の異種プロセッサコアによってスレッドを実行するように構成することができる。
【００２０】
いくつかの例では、マルチコアプロセッサは異種ハードウェアを備えるように、第１のプロセッサコアは、第１の機能を有することができ、第２のプロセッサコアは、第１の機能とは異なる第２の機能を有することができる。いくつかの例では、第１の機能および第２の機能はそれぞれ、グラフィックスリソース、数学的計算リソース、命令セット、アクセラレータ、ＳＳＥ、キャッシュサイズ、および／または分岐予測器に対応する。
【００２１】
以上の概要は、例示に過ぎず、決して限定的なものとはしない。図面および後続の詳細な記述を参照することにより、前述の例示的な態様、実施形態、および特徴に加えて、さらに他の態様、実施形態、および特徴が明らかになるであろう。
【００２２】
本開示の前述のおよび他の特徴は、添付の図面と共に後続の記述および添付の特許請求の範囲を読めばより完全に明らかになるであろう。これらの図面が本開示によるいくつかの実施形態のみを示し、したがってその範囲を限定するものと考えるべきでないことを理解した上で、添付の図面を使用して本開示をさらに具体的かつ詳細に述べる。
【図面の簡単な説明】
【００２３】
【図１】本開示の少なくともいくつかの実施形態により構成された、複数の異種コアを有する例示的なマルチコアシステムを示すブロック図である。
【図２】本開示の少なくともいくつかの実施形態により構成された、複数の異種プロセッサコアのうちの少なくとも１つにスレッドを割り振る例示的な方法を示すフローチャートである。
【図３】本開示の少なくともいくつかの実施形態により構成された、スレッドを第１の異種プロセッサコアから第２の異種プロセッサコアに割り振る例示的な方法を示すフローチャートである。
【図４】本開示の少なくともいくつかの実施形態により構成された、機械可読命令を含む記憶媒体を備える例示的な物品を示す概略図である。
【図５】本開示の少なくともいくつかの実施形態により構成された、スレッド割振り実装形態のために配置することのできる例示的なコンピューティングデバイスを示すブロック図である。
【発明を実施するための形態】
【００２４】
後続の詳細な記述では、本明細書の一部をなす添付の図面を参照する。図面では、文脈によって別段に定められない限り、同様の記号は通常、同様のコンポーネントを識別する。詳細な記述、図面、および特許請求の範囲で述べる例示的な実施形態は、限定的なものとはしない。ここに提示する主題の趣旨または範囲を逸脱することなく、他の実施形態を利用してもよく、他の変更を加えてもよい。本明細書に概説し図に示す本開示の態様を、様々な異なる構成で配置、代用、結合、および設計することができ、これらが全て明示的に企図され本開示の一部をなすことは、容易に理解されるであろう。
【００２５】
本開示は、とりわけ、マルチコアコンピュータシステムに関係する方法、システム、デバイス、および／または装置を対象とし、より詳細には、マルチコアコンピュータシステムに関係するリアルタイムコンピューティングファクタに少なくとも部分的に基づいてスレッドのコア割振りを効率的に調整することを対象とする。
【００２６】
本開示は、いくつかのコンピュータシステムが複数のプロセッサコアを備えることができることを企図する。異種ハードウェアを有するマルチコアシステムでは、いくつかのコアが、他のコアには利用可能でないある種のハードウェア機能を有することができる。いくつかの例示的なコンピュータシステムでは、少なくとも１つのスレッド（一連の命令とすることができ、他のスレッドと並列で実行することができる）を適切なコアに割り当てることができる。スレッド割振りを利用して、スレッドを適切なコアに関連付けることができる。いくつかの例示的なコンピュータシステムでは、スレッドの実行中に、スレッドをあるコアから別のコアに再割当てすることができる。本開示は一般にスレッドに言及するが、プロセスやタスクなどのマッピングを含めることも本開示の範囲内である。
【００２７】
例示的な一実施形態では、スレッドに関連するデータを使用して、いつスレッドを別のコアに割り振るべきか、および／または、どのコアにスレッドを割り振るべきかを決定することができる。例えば、システムは、スレッドに関係するリアルタイムコンピューティングデータを使用して、スレッドが目標期限より遅れているかどうか判定することができる。スレッドが目標期限より遅れている場合は、例えばスレッドをより速いコアに移行させることができる。
【００２８】
図１は、本開示の少なくともいくつかの実施形態により構成された、複数の異種コアを有する例示的なマルチコアシステムを示すブロック図である。例示的なマルチコアシステム１００は、複数のプロセッサコア１０２、１０４、および／または１０６を備えることができる。例示的な一実施形態では、マルチコアシステム１００は、異なる機能をそれぞれが有する１つまたは複数のコア１０２、１０４、および／または１０６を備えることができる。言い換えれば、マルチコアシステム１００は、異種ハードウェアを備えることができる。例えば、あるコア１０２は、強化されたグラフィックスリソースを備えることができ、別のコア１０４は、強化された数学的計算リソースを備えることができ、別のコア１０６は大容量キャッシュを備えることができる。
【００２９】
図１に示すように、ソフトウェアアプリケーション１０８が、いくつかのスレッド（または、プロセッサおよび／もしくはタスク）を含むことができる。リアルタイムコンピューティングファクタに基づいてスレッドを適切なコアに効率的に割り振るために、ソフトウェアアプリケーション１０８に動作可能に接続されたスレッド割振りシステム１１２によって、本明細書に述べるスレッド割振り方法を実施することができる。いくつかの実施形態では、リアルタイムコンピューティング監視システム１１０もまたスレッド割振りシステム１１２に動作可能に結合させて、スレッド１１４、１１６、および／または１１８を１つまたは複数のコア１０２、１０４、および／または１０６に効率的に割り振るのを助けることができ、これについては以下により詳細に述べる。
【００３０】
図１の例示的な実施形態では、スレッド割振りシステム１１２は、スレッドを適切なコアに割り振ることができる。具体的には、スレッド割振りシステム１１２は、第１のスレッド（スレッド＃１）１１４をコア１０２にマッピングすることができ、第２のスレッド（スレッド＃２）１１６をコア１０４にマッピングすることができ、第３のスレッド（スレッド＃３）１１８をコア１０６にマッピングすることができる。
【００３１】
いくつかの例示的な実施形態では、強化されたグラフィックス機能の利益を当初得ることができるスレッドを、強化されたグラフィックスリソースを有するコア上で当初実行することができる。強化された数学的計算機能の利益をスレッドが後で得ることができるという予想に少なくとも部分的に基づいて、スレッドに関係するデータを、強化された数学的計算を有するコアに送って、その実行を完了させることができる。
【００３２】
いくつかの例示的な実施形態では、コアは、異なる命令セット、異なるアクセラレータ（例えばＤＳＰ（ディジタル信号プロセッサ）および／もしくは異なるＳＳＥ（ストリーミングＳＩＭＤ（単一命令、複数データ）エクステンション）、より大きい、かつ／もしくはより小さいキャッシュ（Ｌ１およびＬ２キャッシュなど）、異なる分岐予測器（プログラムの命令フロー中の条件付き分岐に進む可能性が高いか否かを決定するプロセッサ部分）、ならびに／またはその他を含むことができる。コア間のこれらおよび／または他の違いに少なくとも部分的に基づいて、異なるコアが、いくつかのタスクのために異なる機能を提供することができる。
【００３３】
いくつかの例示的な実施形態では、コアのハードウェア機能に少なくとも部分的に基づいて、スレッドを個々のコアに割り振る（例えばスレッド割振りシステム１１２を利用して）ことができる。例えば、大きいＬ１キャッシュ（メモリ）需要に関連するスレッドを、大きいＬ１ハードウェアを備えるコアに割り振ることができる。同様に、大きいＳＳＥ（命令セット）需要に関連するスレッドを、ネイティブＳＳＥハードウェア実装を備えるコアに割り振ることができる。これらの例は限定ではなく、任意のハードウェア特性、命令セット、ならびに／または、コアおよび／もしくはスレッドの特性に少なくとも部分的に基づいてスレッドを割り振ることができることは理解されるであろう。さらに、本開示は、スレッドがハードウェア機能に基づいて割り振られない場合には代わりにソフトウェアエミュレーションを使用してスレッドを処理できることも企図するが、これはこのスレッドに対する処理時間を増加させる。
【００３４】
いくつかの例示的な実施形態では、スレッドを異なるコアに割り振るかどうか、および／または、いつそのような割振りを実施するかを決定することは、スレッドの事前実行に関係するデータを含むことのできる実行プロファイルの、少なくとも一部を評価することを含むことができる。いくつかの例示的な実施形態では、実行プロファイルは、参照により組み込まれる米国特許出願公開第２００７／００５０６０５号に開示されている、フリーズドライゴーストページ実行プロファイル生成方法（ｆｒｅｅｚｅ−ｄｒｉｅｄ  ｇｈｏｓｔ  ｐａｇｅ  ｅｘｅｃｕｔｉｏｎ  ｐｒｏｆｉｌｅ  ｇｅｎｅｒａｔｉｏｎ  ｍｅｔｈｏｄ）を使用して生成することができる。この方法は、シャドウプロセッサ、またはいくつかの実施形態ではシャドウコアを使用して、スレッドの少なくとも一部の実行を事前にシミュレートし、この実行に関係する性能統計および測定値を生成することができる。
【００３５】
いくつかの例示的な実施形態では、プログラムが実行されるときに情報を収集するようにプロセッサおよび／またはキャッシュを構成することができる。例えば、このような情報は、プログラムがどのキャッシュラインを参照するかを含むことができる。いくつかの例示的な実施形態では、キャッシュ使用に関するデータを評価して、どのスレッドを置換すべきか判定することができる（例えば、残りのスレッドプロセスのラインの数をカウントすることによって）。例示的な一実施形態では、性能カウンタは、実行中のスレッドのライン排除（ｅｖｉｃｔｉｏｎ）を追跡するように構成することができ、かつ／または、この情報を使用して、どのタスクをフラッシュアウトしてより優先順位の高いタスクを開始できるかを決定することができる。性能カウンタはまた、タスク開始以後のライン排除を追跡するように構成することもできる。
【００３６】
例示的なマルチコアシステムは、本開示による使用に適合された性能カウンタを備えることができる。性能カウンタには、様々なコアを動作可能に結合することができる。性能カウンタは、例えば、コンピュータシステム内のハードウェア関連アクティビティの数を示すカウントを記憶するように構成することができる。性能カウンタによって収集されたデータを使用して、スレッド割振り（例えばあるコアから別のコアへの）を少なくとも部分的に決定することができる。
【００３７】
いくつかの例示的な実施形態は、特定のタスクに対するキャッシュフットプリントのサイズを考慮することができる。いくつかの例示的な実施形態では、ブルームフィルタを使用して、スレッドに対してキャッシュフットプリントがどれくらい大きいかを特徴付けることができる。例示的なブルームフィルタは、要素が集合のメンバであるかどうかテストするのに使用できる、空間効率のよい確率的データ構造とすることができる。いくつかの例示的なブルームフィルタを使用するとき、偽陽性はあり得るが、偽陰性はあり得ない。いくつかの例示的なブルームフィルタでは、要素を集合に追加することはできるが、除去することはできない（ただしこれはカウンティングフィルタによって対処することができる）。いくつかの例示的なブルームフィルタでは、要素が集合に追加されればされるほど、偽陽性の確率は高くなる。空のブルームフィルタは、全て０にセットされたｍビットのビット配列とすることができる。加えて、ｋ個の異なるハッシュ関数を定義することができ、各ハッシュ関数は、何らかの集合要素を一様ランダム分布によってｍ個の配列位置のうちの１つにマッピングまたはハッシュすることができる。要素を追加するには、要素をｋ個のハッシュ関数のそれぞれに供給してｋ個の配列位置を得ることができる。これらの位置におけるビットを１にセットすることができる。要素を照会する（例えば要素が集合中にあるかどうかテストする）には、要素をｋ個のハッシュ関数のそれぞれに供給してｋ個の配列位置を得ることができる。いくつかの例示的なブルームフィルタでは、これらの位置のうちのいずれかにおけるビットが０である場合は、要素は集合中にない。要素が集合中にあるとすれば、要素が挿入されたときにｋ個の配列位置における全てのビットが１にセットされたであろう。いくつかの例示的なブルームフィルタでは、ｋ個の配列位置における全てのビットが１である場合は、要素が集合中にあるか、または他の要素の挿入中にビットが１にセットされたかのいずれかである。
【００３８】
いくつかの例示的な実施形態では、ブルームフィルタを使用して、キャッシュのどの位置が現在のスレッドによって使用されているかを追跡することができる。例えば、スレッドが初めてコア上にスケジュールされるとき、フィルタを空にすることができる。キャッシュラインがスレッドによって使用される度に、キャッシュラインをフィルタ集合に追加することができる。キャッシュデータ移行のコストを評価するために、一連のクエリを使用してスレッドフットプリントを推定することができる。いくつかの例示的な実施形態では、フィルタ中の「１」ビットの数の単純なポピュレーションカウントを使用して、スレッドのキャッシュフットプリントを推定することができる。いくつかの例示的な実施形態では、カウンティングブルームフィルタを使用することができる。カウンティングブルームフィルタでは、各フィルタ要素は、キャッシュラインがスレッドによって使用されるときにインクリメントでき、キャッシュラインが無効化されるときにデクリメントできる、カウンタとすることができる。
【００３９】
いくつかの例示的な実施形態では、スレッド移行のためのキャッシュデータをプリフェッチすることができる。プリフェッチは、当技術分野で知られているようにハードウェアプリフェッチャによって実施することができる。このようなプリフェッチャの１つが、参照により組み込まれる米国特許第７，３１８，１２５号に開示されている。すなわち、システムがスレッドを新しいコアに送る準備をしているとき、現在のコアからの参照を新しいコアに送って移行に備えることができる。このように、新しいコアを移行に備えて「ウォームアップ」させることができる。いくつかの実施形態では、移行させるスレッドに関係するデータのほぼ全てを、新しいコアによってプリフェッチすることができる。いくつかの他の例示的な実施形態では、移行させるスレッドに関係するデータの一部を、新しいコアによってプリフェッチすることができる。例えば、キャッシュミス、ヒット、および／またはライン排除をプリフェッチすることができる。いくつかの例示的な実施形態では、データを新しいコアにキャッシュする（それにより、最終的には必要とされないかもしれないデータで新しいコアを満たす）のではなく、データを例えばサイド／ストリームバッファにプリフェッチすることができる。
【００４０】
本明細書において、「キャッシュヒット」は、キャッシュされている参照データへの試みの成功、ならびに対応するデータを指すことができる。本明細書において、「キャッシュミス」は、キャッシュ内に見つからなかった参照データへの試み、ならびに対応するデータを指すことができる。本明細書において、「ライン排除」は、キャッシュ中に別のデータのための空間を作るなどの目的で、キャッシュされたラインをキャッシュから除去することを指すことができる。ライン排除はまた、書き戻し動作を含むこともでき、それにより、キャッシュ中の修正されたデータが、キャッシュから除去される前にメインメモリまたはより高いキャッシュレベルに書き込まれる。
【００４１】
図２は、本開示の少なくともいくつかの実施形態により構成された、複数の異種プロセッサコアのうちの少なくとも１つにスレッドを割り振る例示的な方法２００を示すフローチャートである。例示的な方法２００は、処理動作２０２および／または２０４のうちの１つまたは複数を含むことができる。処理は動作２０２で開始することができ、動作２０２は、１つまたは複数の異種プロセッサコアに関係するリアルタイムコンピューティングデータを監視することを含むことができ、各異種プロセッサコアはスレッドを処理するように適合される。処理は、動作２０２から動作２０４に移ることができる。動作２０４は、監視されたリアルタイムコンピューティングデータに少なくとも部分的に基づいて、スレッドを１つまたは複数の異種プロセッサコアに割り振ることを含むことができる。
【００４２】
いくつかの実施形態では、監視動作２０２は、スレッドがスレッド完了目標期限より遅れているかどうか判定することを含むことができ、割振り動作２０４は、スレッドがスレッド完了目標期限より遅れたかどうかに少なくとも部分的に基づくことができる。いくつかの他の実施形態では、リアルタイムコンピューティングデータは、スレッドがスレッド完了目標期限より遅れているという判定を含むことができる。
【００４３】
いくつかの実施形態では、監視動作２０２（別のプロセッサコア上の別個のハードウェアによって実施されてよい）は、スレッド処理と同時に行うことができ、あるいは断続的に行うことができる（すなわち、チェックポイントにおいてまたはスケジューリング中断において行われる）。スレッドは、任意の時点で、実行されていてよく、あるいはサスペンド（すなわち一時停止）されてよい。いくつかの例では、スレッドは、完了の期限を有することができ、別のコアに再割振りされるまで１つのコア上で実行されている可能性が高いものとすることができる。いくつかの実施形態では、リアルタイムデータを同時に評価することができる。いくつかの例では、スレッドをサスペンドすることができ、リアルタイムデータを評価することができ、スレッドを同じコアまたは異なるコアに再割振りすることができる。
【００４４】
例示的な一実施形態では、リアルタイムコンピューティングデータは、ＣＰＩレートを含むことができ、ＣＰＩレートは、所定の期間にわたって完了される命令ごとのクロックサイクルの総数の比率として少なくとも部分的に決定することができる。別の例示的な実施形態では、ＣＰＩレートをターゲットＣＰＩレートと比較することができ、割振り動作２０４は、ＣＰＩレートとターゲットＣＰＩレートとの比較に少なくとも部分的に基づくことができる。さらに別の例示的な実施形態では、割振り動作２０４は動的に行うことができる。
【００４５】
さらに別の実施形態では、リアルタイムコンピューティングデータは、スレッドが所定の時点である異種プロセッサコアから別の異種プロセッサコアに割り振られるべきであることを命令する少なくとも１つのチェックポイントを含むことができ、割振り動作２０４は、少なくとも１つのチェックポイントに少なくとも部分的に基づくことができる。
【００４６】
別の実施形態では、方法２００はさらに、リアルタイムコンピューティングデータをスレッド割振りソフトウェアツールに送ることを含むことができる。スレッド割振りソフトウェアツールは、スレッドを所定の異種プロセッサコアに割り振るように構成することができる。別の実施形態では、スレッドは複数のスレッドとすることができ、複数のスレッドのそれぞれはリアルタイムコンピューティングデータに関連することができ、各スレッドは独立して異種プロセッサコアに割り振ることができる。
【００４７】
図３は、本開示の少なくともいくつかの実施形態により構成された、スレッドを第１の異種プロセッサコアから第２の異種プロセッサコアに割り振る例示的な方法３００を示すフローチャートである。例示的な方法３００は、処理動作３０２、３０４、および／または３０６のうちの１つまたは複数を含むことができる。
【００４８】
処理は動作３０２で開始することができ、動作３０２は、スレッドを処理する第１の異種プロセッサコアに関連するクロックサイクルの総数、および／または、第１の異種プロセッサコアによって完了される命令の総数のうちの、１つまたは複数を監視することを含むことができる。処理は動作３０２から動作３０４に進むことができ、動作３０４は、ある期間にわたって完了される命令ごとのクロックサイクルの総数の比率に少なくとも部分的に基づいて、ＣＰＩ（ｃｙｃｌｅｓ  ｐｅｒ  ｉｎｓｔｒｕｃｔｉｏｎ）値を計算することを含むことができる。次いで処理は動作３０４から動作３０６に進むことができ、動作３０６は、ＣＰＩ値に少なくとも部分的に基づいてスレッドを第２の異種プロセッサコアに割り振ることを含むことができる。
【００４９】
例示的な一実施形態では、方法はさらに、割振り動作３０６の前にＣＰＩ値をターゲットＣＰＩ値と比較することを含むことができ、割振り動作３０６は、ＣＰＩ値がターゲットＣＰＩ値にほぼ等しいことに少なくとも部分的に基づくことができる。別の実施形態では、方法はさらに、割振り動作３０６の前にＣＰＩ値をターゲットＣＰＩ値と比較することを含むことができ、割振り動作３０６は、ＣＰＩ値がターゲットＣＰＩ値を超えることに少なくとも部分的に基づくことができる。
【００５０】
別の実施形態では、ターゲットＣＰＩ値は、スレッドに関連するソフトウェアアプリケーションの実行前または実行中に定義することができる。
【００５１】
さらに別の実施形態では、リアルタイムコンピューティングデータは、スレッドを所定の時点である異種プロセッサコアから別の異種プロセッサコアに割り振るべきであることを命令するように構成された１つまたは複数のチェックポイントを含むことできる。このようにして、割振り動作３０６は、少なくとも１つのチェックポイントに関連する所定の時点に少なくとも部分的に基づくことができる。
【００５２】
図４は、本開示の少なくともいくつかの実施形態により構成された、機械可読命令を含む記憶媒体４００を備える例示的な物品の概略図である。機械可読命令が１つまたは複数の処理ユニットによって実行されたとき、機械可読命令は、コンピューティングプラットフォームが、スレッドを処理する第１の異種プロセッサコアに関係するリアルタイムコンピューティングデータを監視すること（動作４０２）、リアルタイムコンピューティングデータに少なくとも部分的に基づいてスレッドを第２の異種プロセッサコアに割り振ること（動作４０４）を、動作可能にすることができる。
【００５３】
いくつかの実施形態では、機械可読命令はさらに、コンピューティングプラットフォームが、スレッドがスレッド完了目標期限より遅れているかどうか判定することを、動作可能にできるよう構成することができる。このようにして、割振り動作４０４は、スレッドがスレッド完了目標期限より遅れたかどうかに少なくとも部分的に基づくことができる。
【００５４】
別の実施形態では、この物品はさらに、リアルタイムコンピューティングデータを受け取るように構成されたスレッド割振りソフトウェアツールを備えることができる。スレッド割振りソフトウェアツールは、スレッドを所定の異種プロセッサコアに割り振るように構成することができる。
【００５５】
いくつかの実施形態では、機械可読命令はさらに、コンピューティングプラットフォームが、監視されたリアルタイムコンピューティングデータに少なくとも部分的に基づいてスレッドを別の異種プロセッサコアに動的に割り振ることを、動作可能にするよう構成することができる。
【００５６】
いくつかの実施形態では、マルチコアプロセッサが、第１の異種プロセッサコアおよび第２の異種プロセッサコアを備えることができる。このようなマルチコアプロセッサは、スレッドを処理する第１の異種プロセッサコアに関係するリアルタイムコンピューティングデータを監視し、監視されたリアルタイムコンピューティングデータに少なくとも部分的に基づいてスレッドを第２の異種プロセッサコアに割り振り、スレッドが第２の異種プロセッサコアに割り振られた後でスレッドを第２の異種プロセッサコアによって実行するように構成することができる。
【００５７】
図５は、本開示の少なくともいくつかの実施形態による、スレッド割振りのために配置された例示的なコンピューティングデバイス９００を示すブロック図である。非常に基本的な構成９０１では、コンピューティングデバイス９００は通常、１つまたは複数のプロセッサ９１０と、システムメモリ９２０とを備えることができる。プロセッサ９１０とシステムメモリ９２０との間の通信には、メモリバス９３０を使用することができる。
【００５８】
所望の構成に応じて、プロセッサ９１０は、マイクロプロセッサ（μＰ）、マイクロコントローラ（μＣ）、ディジタル信号プロセッサ（ＤＳＰ）、またはこれらの任意の組合せを含めて（ただしこれらに限定されない）、任意のタイプのものとすることができる。プロセッサ９１０は、レベル１キャッシュ９１１およびレベル２キャッシュ９１２など１つまたは複数のレベルのキャッシングと、プロセッサコア９１３と、レジスタ９１４とを含むことができる。プロセッサコア９１３は、演算論理ユニット（ＡＬＵ）、浮動小数点ユニット（ＦＰＵ）、ディジタル信号処理コア（ＤＳＰコア）、またはこれらの任意の組合せを含むことができる。メモリコントローラ９１５をプロセッサ９１０と共に使用することもでき、あるいはいくつかの実装形態では、メモリコントローラ９１５は、プロセッサ９１０内部の部分とすることができる。
【００５９】
所望の構成に応じて、システムメモリ９２０は、揮発性メモリ（ＲＡＭなど）、不揮発性メモリ（ＲＯＭやフラッシュメモリなど）、またはこれらの任意の組合せを含めて（ただしこれらに限定されない）、任意のタイプのものとすることができる。システムメモリ９２０は通常、オペレーティングシステム９２１、１つまたは複数のアプリケーション９２２、およびプログラムデータ９２４を含む。アプリケーション９２２は、リアルタイムコンピューティングデータを監視して、監視されたリアルタイムコンピューティングデータに少なくとも部分的に基づいてスレッドを少なくとも１つの異種ハードウェアコンポーネントに割り振るように構成することのできる、スレッド割振りアルゴリズム９２３を含むことができる。プログラムデータ９２４は、スレッドを適切な異種ハードウェアコンポーネントに割り振るのに有用とすることのできる、スレッド割振りデータ９２５を含むことができる。いくつかの実施形態では、アプリケーション９２２は、本明細書に述べた様々な方法に従ってスレッドを効率的に割り振ることができるように、オペレーティングシステム９２１上でプログラムデータ９２４と共に動作するように構成することができる。この説明した基本構成は、図５では破線９０１内のコンポーネントによって示される。
【００６０】
コンピューティングデバイス９００は、追加の特徴または機能を有することができ、基本構成９０１と任意の必要なデバイスおよびインタフェースとの間の通信を容易にするための追加のインタフェースを有することができる。例えば、バス／インタフェースコントローラ９４０を使用して、記憶装置インタフェースバス９４１を介した基本構成９０１と１つまたは複数のデータ記憶デバイス９５０との間の通信を容易にすることができる。データ記憶デバイス９５０は、取外し可能記憶デバイス９５１、取外し不可能記憶デバイス９５２、またはこれらの組合せとすることができる。取外し可能記憶装置デバイスおよび取外し不可能記憶デバイスの例は、少数を挙げると、フレキシブルディスクドライブやハードディスクドライブ（ＨＤＤ）などの磁気ディスクデバイスと、コンパクトディスク（ＣＤ）ドライブやディジタル多用途ディスク（ＤＶＤ）ドライブなどの光学ディスクドライブと、固体ドライブ（ＳＳＤ）と、テープドライブとを含む。例示的なコンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報を記憶するための任意の方法または技術で実現された、揮発性および不揮発性、取外し可能および取外し不可能な媒体を含むことができる。
【００６１】
システムメモリ９２０、取外し可能記憶装置９５１、および取外し不可能記憶装置９５２は全て、コンピュータ記憶媒体の例である。コンピュータ記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、もしくは他のメモリ技術、ＣＤ−ＲＯＭ、ディジタル多用途ディスク（ＤＶＤ）、もしくは他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、もしくは他の磁気記憶デバイス、または、所望の情報を記憶するのに使用できコンピューティングデバイス９００によってアクセスできる他の任意の媒体を含むが、これらに限定されない。このようなコンピュータ記憶媒体はいずれも、デバイス９００の一部とすることができる。
【００６２】
コンピューティングデバイス９００はまた、バス／インタフェースコントローラ９４０を介した様々なインタフェースデバイス（例えば出力インタフェース、周辺インタフェース、および通信インタフェース）から基本構成９０１への通信を容易にするためのインタフェースバス９４２を備えることができる。例示的な出力デバイス９６０は、グラフィックス処理ユニット９６１およびオーディオ処理ユニット９６２を含み、これらは、１つまたは複数のＡ／Ｖポート９６３を介して表示装置やスピーカなど様々な外部デバイスに通信するように構成することができる。例示的な周辺インタフェース９７０は、シリアルインタフェースコントローラ９７１またはパラレルインタフェースコントローラ９７２を含み、これらは、１つまたは複数の入出力ポート９７３を介して、入力デバイス（例えばキーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイス等）などの外部デバイスと、または他の周辺デバイス（例えばプリンタ、スキャナ等）と通信するように構成することができる。例示的な通信デバイス９８０は、ネットワークコントローラ９８１を含み、これは、１つまたは複数の通信ポート９８２を介しネットワーク通信を通じた１つまたは複数の他のコンピューティングデバイス９９０との通信を容易にするように構成することができる。通信接続は、通信媒体の一例である。通信媒体は通常、搬送波や他のトランスポート機構などの被変調データ信号の中のコンピュータ可読命令、データ構造、プログラムモジュール、または他のデータによって具体化することができ、任意の情報送達媒体を含む。「被変調データ信号」は、信号中の情報が符号化されるようにしてその１つまたは複数の特性が設定または変更される信号とすることができる。限定ではなく例として、通信媒体は、有線ネットワークや直接有線接続などの有線媒体と、音響、無線周波数（ＲＦ）、赤外線（ＩＲ）などのワイヤレス媒体および他のワイヤレス媒体とを含むことができる。本明細書におけるコンピュータ可読媒体という用語は、記憶媒体と通信媒体の両方を含むことができる。
【００６３】
コンピューティングデバイス９００は、セルホン、パーソナルデータアシスタント（ＰＤＡ）、パーソナルメディアプレーヤデバイス、ワイヤレスウェブウォッチデバイス、パーソナルヘッドセットデバイス、特定用途向けデバイス、またはこれらの機能のいずれかを含むハイブリッドデバイスなど、小さいフォームファクタのポータブル（またはモバイル）電子デバイスの一部として実現することができる。コンピューティングデバイス９００はまた、ラップトップコンピュータ構成と非ラップトップコンピュータ構成の両方を含めたパーソナルコンピュータとして実現することもできる。
【００６４】
本明細書に述べた主題は、異なる他のコンポーネント内に含まれるかまたはそれらに接続された、異なるコンポーネントを例示することがある。描写したこのようなアーキテクチャは例に過ぎず、実際には、同じ機能を達成する他の多くのアーキテクチャを実現することができることを理解されたい。概念的な意味では、同じ機能を達成するためのどんなコンポーネント構成も、所望の機能が達成されるように効果的に「関連付けられる（ａｓｓｏｃｉａｔｅｄ）」。したがって、特定の機能を達成するために結合された本明細書における任意の２つのコンポーネントは、アーキテクチャまたは媒介コンポーネントにかかわらず、所望の機能が達成されるように相互に「関連付けられる（ａｓｓｏｃｉａｔｅｄ  ｗｉｔｈ）」と見なすことができる。同様に、そのように関連付けられる任意の２つのコンポーネントはまた、所望の機能を達成するために相互に「動作可能に接続される」または「動作可能に結合される」と見なすことができ、そのように関連付けることのできる任意の２つのコンポーネントはまた、所望の機能を達成するために相互に「動作可能に結合可能」と見なすことができる。動作可能に結合可能の具体的な例は、物理的に対合可能な、かつ／もしくは物理的に対話するコンポーネント、および／または、ワイヤレスに対話可能な、かつ／もしくはワイヤレスに対話するコンポーネント、および／または、論理的に対話する、かつ／もしくは論理的に対話可能なコンポーネントを含むが、これらに限定されない。
【００６５】
本明細書におけるほぼどんな複数および／または単数の用語の使用に関しても、当業者なら、文脈および／または適用例に適切なように複数から単数へ、かつ／または単数から複数へ変換することができる。本明細書では、明確にするために、様々な単数／複数の置換を明白に示す場合がある。
【００６６】
一般に、本明細書において、特に添付の特許請求の範囲（例えば添付の特許請求の範囲の本文）において使用される用語が概して「オープンな」用語として意図されることは、当業者には理解されるであろう（例えば、用語「含む（備える）（ｉｎｃｌｕｄｉｎｇ）」は「含む（備える）がそれに限定されない」と解釈すべきであり、用語「有する（ｈａｖｉｎｇ）」は「少なくとも有する」と解釈すべきであり、用語「含む（備える）（ｉｎｃｌｕｄｅｓ）」は「含む（備える）がそれに限定されない」と解釈すべきである等）。さらに、導入請求項記述の特定の数が意図される場合、そのような意図は請求項中で明示的に記述されることになり、そのような記述がない場合は、そのような意図がないことは、当業者には理解されるであろう。例えば、理解の助けとして、後続の特許請求の範囲は、請求項記述を導入するために導入句「少なくとも１つ」および「１つまたは複数」の使用を含む場合がある。しかし、このような句の使用は、同じ請求項が導入句「１つまたは複数」または「少なくとも１つ」、および「ａ」や「ａｎ」などの不定冠詞を含むときであっても、不定冠詞「ａ」または「ａｎ」による請求項記述の導入によって、そのような導入請求項記述を含むいずれか特定の請求項がそのような記述を１つだけ含むことに限定されることを意味すると解釈すべきではない（例えば、「ａ」および／または「ａｎ」は通常、「少なくとも１つ」または「１つまたは複数」を意味すると解釈すべきである）。同じことは、請求項記述を導入するのに使用される定冠詞の使用にも当てはまる。加えて、導入請求項記述の特定の数が明示的に記述される場合でも、そのような記述は通常、少なくとも記述された数を意味すると解釈すべきであることは、当業者なら認識するであろう（例えば、他の修飾語を伴わない「２つの記述」だけの記述は通常、少なくとも２つの記述か、２つまたは複数の記述を意味する）。さらに、「Ａ、Ｂ、およびＣのうちの少なくとも１つ、等」のような慣例が使用される場合、一般にこのような構造は、当業者がその慣例を理解することになる意味において意図される（例えば、「Ａ、Ｂ、およびＣのうちの少なくとも１つを有するシステム」は、Ａのみを有する、Ｂのみを有する、Ｃのみを有する、ＡとＢを共に有する、ＡとＣを共に有する、ＢとＣを共に有する、および／またはＡ、Ｂ、Ｃを共に有する、等のシステムを含むことになるが、これらに限定されない）。「Ａ、Ｂ、またはＣのうちの少なくとも１つ、等」のような慣例が使用される場合、一般にこのような構造は、当業者がその慣例を理解することになる意味において意図される（例えば、「Ａ、Ｂ、またはＣのうちの少なくとも１つを有するシステム」は、Ａのみを有する、Ｂのみを有する、Ｃのみを有する、ＡとＢを共に有する、ＡとＣを共に有する、ＢとＣを共に有する、および／またはＡ、Ｂ、Ｃを共に有する、等のシステムを含むことになるが、これらに限定されない）。さらに、２つまたはそれ以上の代替の用語を提示するほぼどんな離接語および／または句も、記述中であろうと特許請求の範囲中であろうと図面中であろうと、用語のうちの１つ、用語のうちのいずれか、または両方の用語を含む可能性を企図するものと理解すべきであることは、当業者には理解されるであろう。例えば、句「ＡまたはＢ」は、「Ａ」または「Ｂ」または「ＡおよびＢ」の可能性を含むものと理解されることになる。
【００６７】
様々な態様および実施形態を本明細書に開示したが、他の態様および実施形態も当業者には明らかであろう。本明細書に開示した様々な態様および実施形態は、例示目的のものであって限定するものとはせず、真の範囲および趣旨は、後続の特許請求の範囲によって示される。
【図１】
0005615361.tif 000002
【図２】
0005615361.tif 000003
【図３】
0005615361.tif 000004
【図４】
0005615361.tif 000005
【図５】
0005615361.tif 000006