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