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