(57)【要約】【課題】チップ上のデータをプリフェッチするためのコンピュータ・システム、コンピュータ・プログラム、およびコンピュータ実装方法を提供する。【解決手段】少なくとも１つのスカウト・コアと親コアとを有するチップ上のデータをプリフェッチするための方法は、親コアによってプリフェッチ・コード開始アドレスを保存するステップを含む。プリフェッチ・コード開始アドレスは、プリフェッチ・コードの記憶位置を示す。プリフェッチ・コードは、親コアによって実行されている特定のアプリケーションに基づいて、親コアを監視するために特に構成される。本方法は、親コアによってブロードキャスト割込み信号をスカウト・コアへ送るステップを含む。ブロードキャスト割込み信号は、プリフェッチ・コード開始アドレスに基づいて送られる。本方法は、スカウト・コアによって実行されるプリフェッチ・コードによって親コアを監視するステップを含む。スカウト・コアは、ブロードキャスト割込み信号の受信に基づいて、プリフェッチ・コードを実行する。【選択図】図５
2016513829.tif 000002
【特許請求の範囲】
【請求項１】
チップ上のデータをプリフェッチするためのコンピュータ・システムであって、
前記チップ上に設けられ、特定のアプリケーションを含む複数のアプリケーションを選択的に実行するように構成された親コアと、
前記チップ上に設けられる少なくとも１つのスカウト・コアを含み、
実行されている前記特定のアプリケーションに基づいて前記親コアを監視するために構成されるプリフェッチ・コードの記憶位置を示すプリフェッチ・コード開始アドレスを前記親コアによって保存するステップと、
保存された前記プリフェッチ・コード開始アドレスに基づいて送られるブロードキャスト割込み信号を前記親コアによって前記スカウト・コアへ送るステップと、
前記ブロードキャスト割込み信号の受信に基づいて前記プリフェッチ・コードを実行して前記スカウト・コアによって前記親コアを監視するステップと、
を含む方法を実行するように構成される、コンピュータ・システム。
【請求項２】
前記親コアが前記親コアで発生するタスク・スワップに基づいて前記プリフェッチ・コード開始アドレスを保存する、請求項１に記載のコンピュータ・システム。
【請求項３】
前記親コアが命令を発行する前記特定のアプリケーションに基づいて前記プリフェッチ・コード開始アドレスを保存する、請求項１に記載のコンピュータ・システム。
【請求項４】
前記ブロードキャスト割込み信号が前記スカウト・コアによってデフォルトのプリフェッチ・コードがロードされるべきであることを示し、前記１つのスカウト・コアの内部に設けられる設計状態が前記デフォルトのプリフェッチ・コードの位置を提供する、請求項１ないし３のいずれかに記載のコンピュータ・システム。
【請求項５】
前記ブロードキャスト割込み信号が前記プリフェッチ・コード開始アドレスの位置および割込み通知を提供する、請求項１ないし４のいずれかに記載のコンピュータ・システム。
【請求項６】
ロード・プリフェッチ・バスが前記親コアと前記スカウト・コアとの間に設けられ、前記ブロードキャスト割込み信号が前記ロード・プリフェッチ・バスを通じて送られる、請求項１ないし５のいずれかに記載のコンピュータ・システム。
【請求項７】
前記親コアを前記スカウト・コアに接続する共有キャッシュをさらに備え、フェッチ要求バスが前記親コアを前記共有キャッシュと前記スカウト・コアとに接続するために提供される、請求項１ないし６のいずれかに記載のコンピュータ・システム。
【請求項８】
少なくとも１つのスカウト・コアと親コアとを有するチップ上のデータをプリフェッチするためのコンピュータ・プログラムであって、
親コアによって実行されている特定のアプリケーションに基づいて前記親コアを監視するために構成されるプリフェッチ・コードの記憶位置を示すプリフェッチ・コード開始アドレスを前記親コアによって保存するステップと、
前記プリフェッチ・コード開始アドレスに基づいて送られるブロードキャスト割込み信号を前記親コアによって前記スカウト・コアへ送るステップと、
前記ブロードキャスト割込み信号の受信に基づいて前記プリフェッチ・コードを実行して前記スカウト・コアによって前記親コアを監視するステップと、
を実行させる、コンピュータ・プログラム。
【請求項９】
前記親コアが前記親コアで発生するタスク・スワップに基づいて前記プリフェッチ・コード開始アドレスを保存する、請求項８に記載のコンピュータ・プログラム。
【請求項１０】
前記親コアが命令を発行する前記特定のアプリケーションに基づいて前記プリフェッチ・コード開始アドレスを保存する、請求項８に記載のコンピュータ・プログラム。
【請求項１１】
前記ブロードキャスト割込み信号が前記スカウト・コアによってデフォルトのプリフェッチ・コードがロードされるべきであることを示し、前記スカウト・コアの内部に設けられる設計状態が前記デフォルトのプリフェッチ・コードの位置を提供する、請求項８ないし１０のいずれかに記載のコンピュータ・プログラム。
【請求項１２】
前記ブロードキャスト割込み信号が前記プリフェッチ・コード開始アドレスの位置および割込み通知を提供する、請求項８ないし１１のいずれかに記載のコンピュータ・プログラム。
【請求項１３】
ロード・プリフェッチ・バスが前記親コアと前記スカウト・コアとの間に設けられ、前記ブロードキャスト割込み信号が前記ロード・プリフェッチ・バスを通じて送られる、請求項８ないし１２のいずれかに記載のコンピュータ・プログラム。
【請求項１４】
少なくとも１つのスカウト・コアと親コアとを有するチップ上のデータをプリフェッチするためのコンピュータ実装方法であって、
前記親コアによって実行されている前記特定のアプリケーションに基づいて前記親コアを監視するために構成されるプリフェッチ・コードの記憶位置を示すプリフェッチ・コード開始アドレスを前記親コアによって保存するステップと、
前記プリフェッチ・コード開始アドレスに基づいて送られるブロードキャスト割込み信号を前記親コアによって前記スカウト・コアへ送るステップと、
前記ブロードキャスト割込み信号の受信に基づいて前記プリフェッチ・コードを実行して前記スカウト・コアによって前記親コアを監視するステップと、
を含む、コンピュータ実装方法。
【請求項１５】
前記親コアが前記親コアで発生するタスク・スワップに基づいて、前記プリフェッチ・コード開始アドレスを保存する、請求項１４に記載の方法。
【請求項１６】
前記親コアが命令を発行する前記特定のアプリケーションに基づいて前記プリフェッチ・コード開始アドレスを保存する、請求項１４に記載の方法。
【請求項１７】
前記ブロードキャスト割込み信号が前記スカウト・コアによってデフォルトのプリフェッチ・コードがロードされるべきであることを示し、前記スカウト・コアの内部に設けられる設計状態が前記デフォルトのプリフェッチ・コードの位置を提供する、請求項１４ないし１６のいずれかに記載の方法。
【請求項１８】
前記ブロードキャスト割込み信号が前記プリフェッチ・コード開始アドレスの位置および割込み通知を提供する、請求項１４ないし１７のいずれかに記載の方法。
【請求項１９】
ロード・プリフェッチ・バスが前記親コアと前記スカウト・コアとの間に設けられ、前記ブロードキャスト割込み信号が前記ロード・プリフェッチ・バスを通じて送られる、請求項１４ないし１８のいずれかに記載の方法。
【請求項２０】
前記親コアを前記スカウト・コアに接続する共有キャッシュを備え、フェッチ要求バスが、前記親コアを前記共有キャッシュと前記スカウト・コアに接続するために提供される、請求項１４ないし１９のいずれかに記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、親コアとスカウト・コア（scout core）とを有するマルチコア・チップに関し、より詳細には、マルチコア・チップにおける親コアのための特定のプリフェッチ・アルゴリズムに関する。
【背景技術】
【０００２】
複数のコアが単一のチップ上に設けられ得る。１つのアプローチにおいて、親コアと同一のチップ上の第２のコアは、スカウト・コアとして提供され得る。既存のスカウト・コアを活用または利用する１つのアプローチでは、スカウト・コアは共有キャッシュから親コアのプライベート・キャッシュにデータをプリフェッチするために使用される。このアプローチは、親コアがキャッシュ・ミスに遭遇する場合に特に有益となり得る。キャッシュ・ミスは、特定のラインのデータが親コアのディレクトリの検索を生じさせ、要求されたラインのキャッシュが存在しない場合に発生する。ミッシング・キャッシュ・ラインを取得するための１つの典型的なアプローチは、より上位レベルのキャッシュに対するフェッチ動作を開始することである。スカウト・コアは、親コアによって必要とされるデータをプリフェッチするために使用される機構を提供する。
【０００３】
様々なアプリケーションは異なる振る舞いをし、結果として１つのプリフェッチ・アルゴリズムまたはアプローチがキャッシュ・コンテンツにアクセスする待ち時間を常に改善するとは限らないことがあることに留意されたい。具体的には、例えば、親コアがいくつかの異なるアプリケーションを実行している場合、それらの異なるアプリケーションを監視するために使用されるプリフェッチ・アルゴリズムは、実行されている特定のアプリケーションに応じてキャッシュ・コンテンツにアクセスするための様々な待ち時間を提供し得る。例えば、まばらに配置されたデータベースを検索するように設計されたアプリケーションは、画像の色補正を実行するように設計されたアプリケーションと比較すると、異なる振る舞いをし得る（例えば、プリフェッチ・アルゴリズムは、キャッシュ・コンテンツにアクセスする、より長い待ち時間またはより短い待ち時間を提供し得る）。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の目的の一つは、チップ上のデータをプリフェッチするためのコンピュータ・システム、コンピュータ・プログラム、およびコンピュータ実装方法を提供することである。
【課題を解決するための手段】
【０００５】
本発明の態様は、少なくとも１つのスカウト・コアと親コアとを有するチップ上のデータをプリフェッチするための方法、システム、およびコンピュータ・プログラムに関する。本方法は、親コアによってプリフェッチ・コード開始アドレスを保存するステップを含む。プリフェッチ・コード開始アドレスはプリフェッチ・コードの記憶位置を示す。プリフェッチ・コードは親コアによって実行されている特定のアプリケーションに基づいて親コアを監視するために特に構成される。本方法はブロードキャスト割込み信号を親コアによってスカウト・コアへ送るステップを含む。ブロードキャスト割込み信号は保存されたプリフェッチ・コード開始アドレスに基づいて送られる。本方法は、スカウト・コアによって実行されるプリフェッチ・コードによって親コアを監視することを含む。スカウト・コアはブロードキャスト割込み信号の受信に基づいてプリフェッチ・コードを実行する。
【０００６】
本発明の実施形態が、添付の図面を参照して例としてのみ記述される。
【図面の簡単な説明】
【０００７】
【図１】一実施形態に係るマルチコア・チップを示す図である。
【図２】一実施形態に係る中央処理（ＣＰ）チップを示す図である。
【図３】代替的な実施形態に係る中央処理チップを示す図である。
【図４】設計スカウト・プリロード命令を示す図である。
【図５】親コアからスカウト・コアへプリフェッチ・コードをロードするための例示的な方法を説明するためのプロセスフローを示す図である。
【図６】親コアのオペレーティング・システムが遭遇するタスク・スワップの期間中にプリフェッチ・コードをロードするための例示的な方法を説明するためのプロセスフローを示す図である。
【図７】親コアにおいて実行される特定のアプリケーションによってプリフェッチ・コードをロードするための例示的な方法を説明するためのプロセスフローを示す図である。
【図８】一実施形態に係るコンピュータ・プログラム製品を示す図である。
【発明を実施するための形態】
【０００８】
改善されたプリフェッチ効率を有するマルチコア・チップにおけるスカウト・コアによって親コアのためのデータをプリフェッチするための一実施形態が開示される。１つの例示的な実施形態において、マルチコア・チップは親コアと少なくとも１つのスカウト・コアとを含む。親コアはプリフェッチ・コード開始アドレスを保存（save）する。プリフェッチ・コード開始アドレスは特定のプリフェッチ・コードがどこに記憶されているかを示す。プリフェッチ・コードは親コアによって実行されている特定のアプリケーションに基づいて親コアを監視するために特に構成される。スカウト・コアは、特定のプリフェッチ・コードを実行することによって、親コアを監視する。特定のプリフェッチ・コードは、親コアが選択的に実行する特定のアプリケーションに対応し得る（例えば、あるアプリケーションが、そのアプリケーションに関連付けられる特定のプリフェッチ・コードを有しない場合、スカウト・コアは、代わりに事実上またはデフォルトのプリフェッチ・コードを実行し得る）。親コアによって実行される様々なアプリケーションは異なる振る舞いをし、したがって、一般的なプリフェッチ・アルゴリズム（例えば、特定のアプリケーションに合わせて作られていないプリフェッチ・アルゴリズム）は、親コアが実行している特定のアプリケーションによっては、待ち時間を常に改善するとは限らないことがあることに留意されたい。例示的な実施形態において開示されるようなアプローチにより、スカウト・コアは、親コアが実行する特定のアプリケーションを監視するために特に合わせて作られている特定のプリフェッチ・コードを使用して、親コアを監視することが可能になる。親コアは、親コアが実行している特定のアプリケーションに基づいてプリフェッチ・コードを切り替えるために、ブロードキャスト割込み信号をスカウト・コアへ送信し得る。
【０００９】
図１は、一実施形態に係るコンピューティング・システム１０の一例を図示する。コンピューティング・システム１０は、少なくとも１つの中央処理（ＣＰ）チップ２０を含む。図１に示されるような例示的な実施形態においては、３個の中央処理チップ２０が示されるが、任意の個数の中央処理チップ２０が同様に使用され得ることが理解されるべきである。例えば、１つのアプローチにおいて、コンピューティング・システム１０は、８個の中央処理チップ２０を含んでもよい。別のアプローチにおいて、コンピューティング・システム１０は、最大で１２個または１６個の中央処理チップ２０を含んでもよい。各中央処理チップ２０は、共有キャッシュ２２およびシステム・メモリ２４と通信する。
【００１０】
ここで、図１〜図２を参照すると、各中央処理チップ２０は、命令の読み出しおよび実行のための複数のコア３０を含む。例えば、図２に示されるような例示的な実施形態において、各中央処理チップ２０は、親コア３２とスカウト・コア３４とを含むが、複数の親コア３２およびスカウト・コア３４が中央処理チップ２０上に設けられ得ることが理解される。例えば、１つのアプローチにおいて、中央処理チップ２０は、各々がスカウト・コア３４と通信する４つの親コア３２（すなわち、合計８個のコア）を含み得る。中央処理チップ１２０を図示する図３に示されるような代替的な実施形態において、親コア１３２は、複数のスカウト・コア１３４と通信し得る。例えば、１つのアプローチにおいて、中央処理チップ１２０は、各々が３個のスカウト・コア１３４と通信する２つの親コア１３２（すなわち、合計８個のコア）を提供され得る。
【００１１】
図２を再び参照すると、各コア３０は、それぞれ命令Ｉキャッシュ４０およびデータＤキャッシュ４２も含む。図２に示されるような例示的な実施形態において、コア３０は、それぞれレベル１（Ｌ１）キャッシュのみを含むが、様々な実施形態において、コア３０はレベル２（Ｌ２）キャッシュも同様に含み得ることが理解されるべきである。各コア３０は、共有キャッシュ５０に動作可能に結合される。図２に示されるような実施形態において、共有キャッシュ５０はＬ２キャッシュであるが、共有キャッシュ５０は同様にレベル３（Ｌ３）キャッシュであってもよいことが理解されるべきである。
【００１２】
データ・リターン・バス６０は、親コア３２と共有キャッシュ５０との間に提供され、データ・リターン・バス６２は、スカウト・コア３４と共有キャッシュ５０との間に提供される。フェッチ要求バス６４は、親コア３２を共有キャッシュ５０およびスカウト・コア３４に接続し、フェッチ要求バス６４において、データが親コア３２から共有キャッシュ５０およびスカウト・コア３４へ送られる。フェッチ要求バス６６は、スカウト・コア３４を共有キャッシュ５０に接続し、スカウト・コア３４は、フェッチ要求バス６６を通じて共有キャッシュ５０を監視する。フェッチ要求バス６６は、スカウト・コア３４のためのフェッチについても使用され得る。これは、親コア３２のためにフェッチするフェッチ要求バス６４と同様の振る舞いである。このようなフェッチは、分析されているデータ全体がローカルＤキャッシュ４２に収まらない場合には、分析のためにさらなるデータをロードする必要が潜在的にあると共に、１つまたは複数のプリフェッチ・アルゴリズムのスカウト・コア３４へのロードのために必要とされ得る。ロード・プリフェッチ・バス６８は、親コア３２とスカウト・コア３４との間に設けられる。親コア３２は、プリフェッチ・コードと、プリフェッチ・コードが記憶されている場所を示す特定のプリフェッチ・コード開始アドレスとをロードするように、ロード・プリフェッチ・バス６８を通じてスカウト・コア３４に通知する。プリフェッチ・コードは、例えば、スカウト・コアのＬ１  Ｉキャッシュ４０、共有キャッシュ５０、共有キャッシュ２２（図１）、またはシステム・メモリ２４（図１）などの、メモリ・アドレスでアクセス可能である、コンピューティング・システム１０内の多種多様な位置に記憶され得る。
【００１３】
ここで、図３を参照すると、データ・リターン・バス１６０は、親コア１３２と共有キャッシュ１５０との間に提供され、データ・リターン・バス１６２は、複数のスカウト・コア１３４と共有キャッシュ１５０との間に提供される。フェッチ要求バス１６４は、親コア１３２を共有キャッシュ１５０に接続し、フェッチ要求バス１６４において、データは親コア１３２から共有キャッシュ１５０へ送られる。フェッチ要求バス１６６は、スカウト・コア１３４ごとに提供され、スカウト・コア１３４を共有キャッシュ１５０に接続する。フェッチ要求バス１６６を通じて送られるデータは、スカウト・コア１３４相互間で異なる。ロード・プリフェッチ・バス１６８は、各スカウト・コア１３４に接続され、親コア１３２と各スカウト・コア１３４との間に設けられる。フェッチ監視バス１７０は、スカウト・コア１３４ごとに提供され、共有キャッシュ１５０とスカウト・コア１３４のうちの１つとの間に設けられる。フェッチ要求バス１６６とは異なり、フェッチ監視バス１７０を通じて送られるデータは、スカウト・コア１３４相互間で異なってもよく、または異ならなくてもよい。
【００１４】
図２に戻ると、共有キャッシュ５０は、スカウト・コア３４が親コア３２を監視し得るように、ハブまたは接続部として動作する。スカウト・コア３４は、親コア３２内で発生する少なくとも１つの特定のデータ・パターンについて親コア３２を監視する。具体的には、スカウト・コア３４は、親コア３２を監視するために使用されるプリフェッチ・コードを実行する。プリフェッチ・コードは、１つまたは複数の特定のデータ・パターンが親コア３２内で発生したかを判定し、特定のデータ・パターンに基づいて、フェッチ要求を共有キャッシュ５０へ送る。スカウト・コア３４は、一般に、スカウト・コア３４に設けられるＩキャッシュ４０にプリフェッチ・コードを記憶する。
【００１５】
特定のデータ・パターンは、親コア３２を離れるコンテンツ要求（例えば、親コア３２のＩキャッシュ４０またはＤキャッシュ４２に存在しない特定のラインのキャッシュについての要求）、または親コア３２のチェックポイント・アドレスであり得る。例えば、特定のデータ・パターンがキャッシュ・ミス（例えば、親コア３２のＩキャッシュ４０またはＤキャッシュ４２におけるキャッシュのミッシング・ライン）である場合、予測されるミッシング・キャッシュ・ラインについてのプリフェッチは、スカウト・コア３４によってフェッチ要求バス６６を通じて共有キャッシュ５０へ送られ得る。特定されるデータ・パターンが親コア３２のチェックポイント・アドレスである場合、スカウト・コア３４は、親コア３２を監視し、特定のイベント（例えば、ガベージ・コレクションまたはコンテキスト・スイッチ）の完了時に、スカウト・コア３４は、その特定のイベントに関連付けられるキャッシュ・ラインを獲得するために、プリフェッチ要求を共有キャッシュへ送る。
【００１６】
スカウト・コア３４は、親コア３２が実行している特定のアプリケーションに基づいて、特定のプリフェッチ・コードを選択的に実行するように構成される。例えば、親コア３２がアプリケーション「Ａ」、アプリケーション「Ｂ」、およびアプリケーション「Ｃ」を次から次へ連続的に実行する（例えば、親コア３２が、まずアプリケーション「Ａ」を、次いでアプリケーション「Ｂ」を、次いでアプリケーション「Ｃ」を実行する）場合、スカウト・コア３４は、アプリケーション「Ａ」を監視するためにプリフェッチ・コード「Ａ」を、アプリケーション「Ｂ」を監視するためにプリフェッチ・コード「Ｂ」を、アプリケーション「Ｃ」を監視するためにプリフェッチ・コード「Ｃ」を実行し得る。つまり、特定のプリフェッチ・コードは、親コア３２が対応するアプリケーションを実行する間、親コア３２を監視するように特に構成される（例えば、プリフェッチ・コード「Ａ」は、アプリケーション「Ａ」を監視する）。これは、特定のプリフェッチ・コードが、親コア３２によって実行される特定のアプリケーションに応じて、異なる振る舞いをし得るためである。例えば、まばらに配置されたデータベースを検索するように設計されたアプリケーションは、画像の色補正を実行するように設計されたアプリケーションと比較すると、異なる振る舞いをし得る（例えば、プリフェッチ・アルゴリズムは、キャッシュ・コンテンツにアクセスする、より長い待ち時間またはより短い待ち時間を提供し得る）。あるアプリケーションが、そのアプリケーションに関連付けられる特定のプリフェッチ・コードを有しない場合、スカウト・コア３４は、代わりに事実上またはデフォルトのプリフェッチ・コードを実行し得ることに留意されたい。スカウト・コア３４の内部に設けられる設計状態（ａｒｃｈｉｔｅｃｔｅｄ  ｓｔａｔｅ）は、デフォルトのプリフェッチ・コードが記憶されている位置をスカウト・コア３４に提供する。
【００１７】
親コア３２は、一般に、１つのアプリケーションから別のアプリケーションへ比較的高速で（例えば、最高で１００，０００回／秒の速度で）切り替える間に、様々なアプリケーションを連続的に（すなわち、一度に１つのアプリケーションを）実行し、これは、マルチ・タスキングと呼ばれる。具体的には、親コア３２は、任意の個数のアプリケーションを実行し得る。ある特定のアプリケーションが親コア３２の制御を別のアプリケーションに譲る場合、これは、タスク・スワップと呼ばれる。親コア３２のオペレーティング・システムが遭遇するタスク・スワップの期間中、親コア３２は、実行されていた現在のアプリケーションに関連付けられる、親コア３２内に位置するプリフェッチ・アドレス４８（図３において１４８として図示される）を保存する。プリフェッチ・アドレス４８は、実行されていた現在のアプリケーションに関連付けられるプリフェッチ・コード開始アドレスがどこに保存されているかを示す。次いで、親コア３２は、新たなアプリケーションをロードし、この新たなアプリケーションに関連付けられるプリフェッチ・コード開始アドレスでプリフェッチ・アドレス４８を更新し得る。次いで、親コア３２は、ロード・プリフェッチ・バス６８を通じてスカウト・コア３４へブロードキャスト割込み信号を送り得る。ブロードキャスト割込み信号は、プリフェッチ・コード開始アドレスの位置および割込み通知を提供する。親コア３２がロードした新たなアプリケーションに関連付けられる特定のプリフェッチ・コードが存在しない場合には、親コア３２は、デフォルトのプリフェッチ・コードがスカウト・コア３４によってロードされるべきであることを示すブロードキャスト割込み信号をスカウト・コア３４へ送る。
【００１８】
親コア３２によるタスク・スワップに加えて、ブロードキャスト割込み信号は、親コア３２において実行される特定のアプリケーションによっても起動され得る。つまり、親コア３２において実行される特定のアプリケーションは、スカウト・コア３４が特定のプリフェッチ・コードをロードすべきであることを示す命令を発行し得る。ここで、図４を参照すると、設計スカウト・プリロード命令（ａｒｃｈｉｔｅｃｔｅｄ  ｓｃｏｕｔ  ｐｒｅｌｏａｄ  ｉｎｓｔｒｕｃｔｉｏｎ）７０は、親コア３２において実行される特定のアプリケーションによって発行され得る。設計スカウト・プリロード命令７０は、親コア３２において実行される特定のアプリケーションに関連付けられるプリフェッチ・コード開始アドレスを示す。例えば、親コア３２がアプリケーション「Ａ」を実行している場合、アプリケーション「Ａ」によって発行される設計スカウト・プリロード命令７０は、アプリケーション「Ａ」に対応する特定のプリフェッチ・コードがどこに保存されているかを示す。
【００１９】
設計スカウト・プリロード命令は、実行されるべき演算を特定するための命令コード７２、ならびにベース・レジスタ７４、指標レジスタ７６、および特定のプリフェッチ・コードが保存されている開始アドレスの位置を特定するオフセット７８を含む。設計スカウト・プリロード命令７０は、プリフェッチ・コードと共にプリロードされるべき特定のスカウト・コア番号８０も示す（例えば、図３を参照すると、特定のスカウト・コア番号８０は、スカウト・コア１、スカウト・コア２、またはスカウト・コア３を示し得る）。設計スカウト・プリロード命令７０の各フィールド（例えば、命令コード７２、ベース・レジスタ７４、指標レジスタ７６、オフセット７８およびスカウト・コア番号８０）は、マルチビット・フィールドであり得る。フィールドごとのビットの個数は、異なり得る。図２および図４の双方を参照すると、親コア３２は、設計スカウト・プリロード命令７０を実行する。次いで、親コア３２は、設計スカウト・プリロード命令７０によって示されるプリフェッチ・コード開始アドレスと共にプリフェッチ・アドレス４８を保存する。
【００２０】
図２を再び参照すると、ブロードキャスト割込み信号の受け取り時に、スカウト・コア３４の命令パイプラインはフラッシュされる。次いで、スカウト・コア３４は、親コア３２からロード・プリフェッチ・バス６８を通じて送られるプリフェッチ・コード開始アドレスによって示されるプリフェッチ・コードを実行して、命令ストリームを再開し得る。
【００２１】
ここで、図５を参照すると、親コア３２からスカウト・コア３４へプリフェッチ・コードをロードするための例示的な方法２００を説明するプロセスフロー図である。図２〜図５を全体的に参照すると、方法２００は、ブロードキャスト割込み信号が、親コア３２からスカウト・コア３４へロード・プリフェッチ・バス６８（または、複数のスカウト・コア１３４が親コア１３２に接続される場合には、ロード・プリフェッチ・バス１６８）を通じて送られるブロック２０２において開始する。ブロードキャスト割込み信号は、プリフェッチ・コード開始アドレスの位置および割込み通知を提供する。次いで、方法２００は、ブロック２０４へ進み得る。
【００２２】
ブロック２０４において、スカウト・コア３４は、割込み通知を示すブロードキャスト割込み信号を、ロード・プリフェッチ・バス６８を通じて受け取る。次いで、方法２００は、ブロック２０６へ進み得る。
【００２３】
ブロック２０６において、スカウト・コア３４の命令パイプラインがフラッシュされ、スカウト・コア３４は、親コア３２からロード・プリフェッチ・バス６８を通じて送られたプリフェッチ・コード開始アドレスによって示されるプリフェッチ・コードを実行する。その結果、方法２００は、終了する。
【００２４】
図６は、親コア３２のオペレーティング・システムが遭遇するタスク・スワップによってブロードキャスト割込み信号を起動することを説明する例示的な方法３００である。図２〜図３および図６を全体的に参照すると、方法３００は、親コア３２がタスク・スワップに遭遇したかが判定されるブロック３０２において開始する。親コア３２がタスク・スワップに遭遇する場合には、方法３００は、ブロック３０４へ進み得る。
【００２５】
ブロック３０４において、親コア３２は、実行されている現在のアプリケーションに関連付けられるプリフェッチ・アドレス４８を保存する。次いで、方法３００は、ブロック３０６へ進み得る。
【００２６】
ブロック３０６において、親コア３２は、新たなアプリケーションをロードし、この新たなアプリケーションに関連付けられるプリフェッチ・コード開始アドレスでプリフェッチ・アドレス４８を更新する。次いで、方法３００は、ブロック３０８へ進み得る。
【００２７】
ブロック３０８において、親コア３２は、ブロードキャスト割込み信号を、ロード・プリフェッチ・バス６８を通じてスカウト・コア３４へ送る。ブロードキャスト割込み信号は、プリフェッチ・コード開始アドレスの位置および割込み通知を提供する。その結果、方法３００は、終了し得る。
【００２８】
図７は、親コア３２において実行される特定のアプリケーションによってブロードキャスト割込み信号を起動することを説明する例示的な方法４００である。図２〜図３、図４および図７を全体的に参照すると、方法４００は、親コア３２が設計スカウト・プリロード命令７０（図４）を発行する特定のアプリケーションを実行するブロック４０２において開始する。次いで、方法４００は、ブロック４０４へ進み得る。
【００２９】
ブロック４０４において、親コア３２は、設計スカウト・プリロード命令７０を実行する。次いで、方法４００は、ブロック４０６へ進み得る。
【００３０】
ブロック４０６において、親コア３２は、設計スカウト・プリロード命令７０によって特定されるプリフェッチ・コード開始アドレスと共にプリフェッチ・アドレス４８を保存する。次いで、方法４００は、ブロック４０８へ進み得る。
【００３１】
ブロック４０８において、親コア３２は、ブロードキャスト割込み信号およびプリフェッチ・コード開始アドレスを、ロード・プリフェッチ・バス６８を通じてスカウト・コア３４へ送る。その結果、方法４００は、終了し得る。
【００３２】
当業者によって認識されるように、本発明の１つまたは複数の態様は、システム、方法またはコンピュータ・プログラム製品として具現化され得る。したがって、本発明の１つまたは複数の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコード等を含む）、または、本明細書において「回路」、「モジュール」もしくは「システム」と全て一般に呼ばれ得る、ソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形を取り得る。さらに、本発明の１つまたは複数の態様は、コンピュータ読取可能なプログラム・コードが具現化された１つまたは複数のコンピュータ読取可能な媒体において具現化されるコンピュータ・プログラム製品の形を取り得る。
【００３３】
１つまたは複数のコンピュータ読取可能な媒体の任意の組み合わせが利用され得る。コンピュータ読取可能な媒体は、コンピュータ読取可能な記憶媒体であり得る。コンピュータ読取可能な記憶媒体は、例えば、電子、磁気、光学、電磁気、赤外線または半導体のシステム、装置、もしくはデバイス、またはこれらの任意の適切な組み合わせとし得るが、これらに限定されない。コンピュータ読取可能な記憶媒体のより具体的な例（包括的でないリスト）は、以下のものを含む：１つもしくは複数のワイヤを有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、読み出し専用メモリ（ＲＯＭ：ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、消去可能プログラム可能読み出し専用メモリ（ＥＰＲＯＭ：ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）もしくはフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読み出し専用メモリ（ＣＤ−ＲＯＭ：ｃｏｍｐａｃｔ  ｄｉｓｃ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、光学式記憶デバイス、磁気記憶デバイス、またはこれらの任意の適切な組み合わせ。本文書の文脈において、コンピュータ読取可能な記憶媒体は、命令実行システム、装置、またはデバイスによる使用のための、またはこれらに関連するプログラムを包含または記憶することができる任意の有形の媒体であり得る。
【００３４】
ここで、図８を参照すると、一例において、コンピュータ・プログラム製品７００は、例えば、１つまたは複数の記憶媒体７０２を含み、この媒体は、本明細書において説明される実施形態の１つまたは複数の態様を提供し、容易にするために、コンピュータ読取可能なプログラム・コード手段またはロジック７０４を記憶すべく、有形または非一時的あるいはその両方であり得る。
【００３５】
有形の媒体（電子メモリ・モジュール（ＲＡＭ）、フラッシュ・メモリ、コンパクト・ディスク（ＣＤ）、ＤＶＤ、磁気テープなどを含むが、これらに限定されない）上に作成および記憶される場合、プログラム・コードは、しばしば「コンピュータ・プログラム製品」と呼ばれる。コンピュータ・プログラム製品媒体は、典型的に、好適にはコンピュータ・システム内の処理回路によって、その処理回路による実行のために読取可能である。そのようなプログラム・コードは、例えば、実行される場合に本発明の態様を実行する命令をアセンブルするために、コンパイラまたはアセンブラを使用して作成され得る。
【００３６】
実施形態は、少なくとも１つのスカウト・コアと親コアとを有するチップ上のデータをプリフェッチするための方法、システム、およびコンピュータ・プログラム製品に関する。本方法は、親コアによってプリフェッチ・コード開始アドレスを保存することを含む。プリフェッチ・コード開始アドレスは、プリフェッチ・コードがどこに記憶されているかを示す。プリフェッチ・コードは、親コアによって実行されている特定のアプリケーションに基づいて、親コアを監視するために特に構成される。本方法は、親コアによってブロードキャスト割込み信号を少なくとも１つのスカウト・コアへ送ることを含む。ブロードキャスト割込み信号は、保存されているプリフェッチ・コード開始アドレスに基づいて送られる。本方法は、少なくとも１つのスカウト・コアによって実行されるプリフェッチ・コードによって親コアを監視することを含む。スカウト・コアは、ブロードキャスト割込み信号を受け取ることに基づいて、プリフェッチ・コードを実行する。
【００３７】
一実施形態において、本方法は、親コアで発生するタスク・スワップに基づいて親コアがプリフェッチ・コード開始アドレスを保存することをさらに含む。
【００３８】
一実施形態において、本方法は、命令を発行する特定のアプリケーションに基づいて親コアがプリフェッチ・コード開始アドレスを保存することをさらに含む。
【００３９】
一実施形態において、本方法は、デフォルトのプリフェッチ・コードが少なくとも１つのスカウト・コアによってロードされるべきであることをブロードキャスト割込み信号が示すことをさらに含む。スカウト・コアの内部に設けられる設計状態は、デフォルトのプリフェッチ・コードの位置を提供する。
【００４０】
一実施形態において、本方法は、ブロードキャスト割込み信号がプリフェッチ・コード開始アドレスの位置および割込み通知を提供することをさらに含む。
【００４１】
一実施形態において、本方法は、ロード・プリフェッチ・バスが親コアと少なくとも１つのスカウト・コアとの間に設けられることをさらに含む。ブロードキャスト割込み信号は、ロード・プリフェッチ・バスを通じて送られる。
【００４２】
一実施形態において、本方法は、親コアを少なくとも１つのスカウト・コアに接続する共有キャッシュをさらに含む。フェッチ要求バスは、親コアを共有キャッシュと少なくとも１つのスカウト・コアとの双方に接続するために提供される。
【００４３】
技術的な効果および利点は、親コア３２が実行する特定のアプリケーションを監視するために特に合わせて作られるプリフェッチ・コードを使用して、スカウト・コア３４が親コア３２を監視することを可能にすることを含む。親コア３２は、親コア３２が実行しているアプリケーションに基づいて特定のプリフェッチ・コードを切り替えるために、ロード・プリフェッチ・バス６８を通じてスカウト・コア３４へブロードキャスト割込み信号を送り得る。したがって、上記に議論されるようなアプローチは、コンピューティング・システム１０のプリフェッチ効率を向上させる。
【００４４】
本明細書において使用される専門用語は、特定の実施形態を説明する目的のために過ぎず、実施形態を限定することを意図されない。本明細書において、単数形の「ａ」、「ａｎ」および「ｔｈｅ」は、そうでないことを文脈が明確に示さない限り、複数形も含むことが意図される。本明細書において使用される場合、「含む（ｃｏｍｐｒｉｓｅｓ）」または「備える（ｃｏｍｐｒｉｓｉｎｇ）」あるいはその両方は、記述された特徴、整数、ステップ、演算、要素、または構成要素あるいはこれら全ての存在を特定するが、１つまたは複数の他の特徴、整数、ステップ、演算、要素、構成要素、またはこれらのグループあるいはこれら全ての存在を排除しないことがさらに理解されるであろう。
【００４５】
特許請求の範囲における全てのミーンズ・プラス・ファンクション要素またはステップ・プラス・ファンクション要素の対応する構造、材料、動作、および均等物は、具体的に請求項に記載されるように、請求項に記載された他の要素との組み合わせにおいて機能を実行するための任意の構造、材料、または動作を含むことが意図される。実施形態の説明は、例示および説明の目的のために提示されてきたが、網羅的であることまたは実施形態を開示された形式に限定することは意図されない。多くの変形およびバリエーションは、実施形態の範囲および思想を逸脱することなく、当業者に明らかとなるであろう。実施形態は、原理および実際的な適用例を最も良く説明し、他の当業者が実施形態を予期される特定の使用例に適している様々な変形例と共に理解することを可能にするために選択および説明された。
【００４６】
実施形態の態様についての演算を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋等などを含むオブジェクト指向プログラミング言語と、「Ｃ」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語とを含む１つまたは複数のプログラミング言語の任意の組み合わせにおいて記述され得る。プログラム・コードは、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロンのソフトウェア・パッケージとして、部分的にユーザのコンピュータ上および部分的に遠隔コンピュータ上で、または完全に遠隔コンピュータもしくはサーバ上で実行され得る。後者のシナリオにおいて、遠隔コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ：ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）もしくは広域ネットワーク（ＷＡＮ：ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ）を含む任意のタイプのネットワークを通じてユーザのコンピュータに接続されてもよく、または、この接続は、（例えば、インターネット・サービス・プロバイダを使用してインターネットを通じて）外部のコンピュータと行われ得る。
【００４７】
実施形態の態様は、実施形態に係る方法、装置（システム）およびコンピュータ・プログラム製品のフローチャート図または概略図あるいはその両方を参照しつつ、上述される。フローチャート図またはブロック図あるいはその両方の各ブロックと、フローチャート図またはブロック図あるいはその両方のブロックの組み合わせとは、コンピュータ・プログラム命令によって実装され得ることが理解されるであろう。このようなコンピュータ・プログラム命令は、コンピュータまたは他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて特定される機能／動作を実装するための手段を生成するように、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。
【００４８】
このようなコンピュータ・プログラム命令は、コンピュータ読取可能な媒体に記憶された命令がフローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて特定される機能／動作を実装する命令を含む製品を作り出すように、コンピュータ読取可能な媒体に記憶され、コンピュータ、他のプログラム可能なデータ処理装置、または他のデバイスに特定の手法で機能するように命令するものであってよい。
【００４９】
コンピュータ・プログラム命令は、コンピュータまたは他のプログラム可能な装置上で実行される命令がフローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて特定される機能／動作を実装するためのプロセスを提供するように、コンピュータ実装プロセスを作り出すべく、コンピュータ、他のプログラム可能なデータ処理装置、またはデバイスにロードされ、コンピュータ、他のプログラム可能な装置または他のデバイス上で一連の動作ステップを実行させるものであってよい。
【００５０】
図面中のフローチャートおよびブロック図は、様々な実施形態に係るシステム、方法、およびコンピュータ・プログラム製品の取り得る実装のアーキテクチャ、機能性、および動作を図示する。この点において、フローチャートまたはブロック図の各ブロックは、特定の論理機能を実装するための１つまたは複数の実行可能な命令を含むコードのモジュール、セグメント、または一部を表し得る。いくつかの代替的な実装においては、ブロックに記載される機能が、図面に記載された順序とは異なる順序で生じ得ることにも留意されたい。例えば、連続して示される２つのブロックは、実際には、実質的に同時に実行されることがあり、または、関連する機能性に応じて、複数のブロックが逆の順序で実行されることもある。ブロック図またはフローチャート図あるいはその両方の各ブロックと、ブロック図またはフローチャート図あるいはその両方のブロックの組み合わせとは、特定の機能または動作を実行する専用のハードウェアベースのシステムによって、または専用ハードウェアとコンピュータ命令との組み合わせによって実装されることができることにも留意されよう。
【図１】
2016513829.tif 000003
【図２】
2016513829.tif 000004
【図３】
2016513829.tif 000005
【図４】
2016513829.tif 000006
【図５】
2016513829.tif 000007
【図６】
2016513829.tif 000008
【図７】
2016513829.tif 000009
【図８】
2016513829.tif 000010
【国際調査報告】
2016513829.tif 000011