特許第6234484号(P6234484)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧

特許6234484チップ上のデータをプリフェッチするためのコンピュータ・システム、コンピュータ・プログラム、およびコンピュータ実装方法
<>
  • 特許6234484-チップ上のデータをプリフェッチするためのコンピュータ・システム、コンピュータ・プログラム、およびコンピュータ実装方法 図000002
  • 特許6234484-チップ上のデータをプリフェッチするためのコンピュータ・システム、コンピュータ・プログラム、およびコンピュータ実装方法 図000003
  • 特許6234484-チップ上のデータをプリフェッチするためのコンピュータ・システム、コンピュータ・プログラム、およびコンピュータ実装方法 図000004
  • 特許6234484-チップ上のデータをプリフェッチするためのコンピュータ・システム、コンピュータ・プログラム、およびコンピュータ実装方法 図000005
  • 特許6234484-チップ上のデータをプリフェッチするためのコンピュータ・システム、コンピュータ・プログラム、およびコンピュータ実装方法 図000006
  • 特許6234484-チップ上のデータをプリフェッチするためのコンピュータ・システム、コンピュータ・プログラム、およびコンピュータ実装方法 図000007
  • 特許6234484-チップ上のデータをプリフェッチするためのコンピュータ・システム、コンピュータ・プログラム、およびコンピュータ実装方法 図000008
  • 特許6234484-チップ上のデータをプリフェッチするためのコンピュータ・システム、コンピュータ・プログラム、およびコンピュータ実装方法 図000009
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6234484
(24)【登録日】2017年11月2日
(45)【発行日】2017年11月22日
(54)【発明の名称】チップ上のデータをプリフェッチするためのコンピュータ・システム、コンピュータ・プログラム、およびコンピュータ実装方法
(51)【国際特許分類】
   G06F 12/08 20160101AFI20171113BHJP
   G06F 9/38 20060101ALI20171113BHJP
【FI】
   G06F12/08 505B
   G06F12/08 565
   G06F12/08 509F
   G06F9/38 310A
   G06F9/38 370X
【請求項の数】20
【全頁数】15
(21)【出願番号】特願2015-560809(P2015-560809)
(86)(22)【出願日】2014年2月12日
(65)【公表番号】特表2016-513829(P2016-513829A)
(43)【公表日】2016年5月16日
(86)【国際出願番号】IB2014058939
(87)【国際公開番号】WO2014136002
(87)【国際公開日】20140912
【審査請求日】2017年2月7日
(31)【優先権主張番号】13/785,369
(32)【優先日】2013年3月5日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
(74)【代理人】
【識別番号】100108501
【弁理士】
【氏名又は名称】上野 剛史
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】プラスキー、ブライアン、ロバート
(72)【発明者】
【氏名】クリゴウスキー、クリストファー、アンソニー
(72)【発明者】
【氏名】シャム、チュン−ルン、ケビン
(72)【発明者】
【氏名】ブサバ、ファディ、ユスフ
(72)【発明者】
【氏名】カルラフ、スティーブン
【審査官】 後藤 彰
(56)【参考文献】
【文献】 特開2009−258984(JP,A)
【文献】 特開2008− 15668(JP,A)
【文献】 特開2010−217992(JP,A)
【文献】 特開2008− 59057(JP,A)
【文献】 米国特許第6470427(US,B1)
【文献】 米国特許出願公開第2004/0148491(US,A1)
【文献】 米国特許出願公開第2011/0296431(US,A1)
【文献】 米国特許出願公開第2011/0113199(US,A1)
【文献】 米国特許出願公開第2010/0241811(US,A1)
【文献】 米国特許出願公開第2007/0156971(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/08
G06F 9/38
(57)【特許請求の範囲】
【請求項1】
チップ上のデータをプリフェッチするためのコンピュータ・システムであって、
前記チップ上に設けられ、特定のアプリケーションを含む複数のアプリケーションを選択的に実行するように構成された親コアと、
前記チップ上に設けられる少なくとも1つのスカウト・コアを含み、
実行されている前記特定のアプリケーションに基づいて前記親コアを監視するために構成されるプリフェッチ・コードの記憶位置を示すプリフェッチ・コード開始アドレスを前記親コアによって保存するステップと、
保存された前記プリフェッチ・コード開始アドレスに基づいて送られるブロードキャスト割込み信号を前記親コアによって前記スカウト・コアへ送るステップと、
前記ブロードキャスト割込み信号の受信に基づいて前記プリフェッチ・コードを実行して前記スカウト・コアによって前記親コアを監視するステップと、
を含む方法を実行するように構成される、コンピュータ・システム。
【請求項2】
前記親コアが前記親コアで発生するタスク・スワップに基づいて前記プリフェッチ・コード開始アドレスを保存する、請求項1に記載のコンピュータ・システム。
【請求項3】
前記親コアが命令を発行する前記特定のアプリケーションに基づいて前記プリフェッチ・コード開始アドレスを保存する、請求項1に記載のコンピュータ・システム。
【請求項4】
前記ブロードキャスト割込み信号が前記スカウト・コアによってデフォルトのプリフェッチ・コードがロードされるべきであることを示し、前記1つのスカウト・コアの内部に設けられる設計状態が前記デフォルトのプリフェッチ・コードの位置を提供する、請求項1ないし3のいずれかに記載のコンピュータ・システム。
【請求項5】
前記ブロードキャスト割込み信号が前記プリフェッチ・コード開始アドレスの位置および割込み通知を提供する、請求項1ないし4のいずれかに記載のコンピュータ・システム。
【請求項6】
ロード・プリフェッチ・バスが前記親コアと前記スカウト・コアとの間に設けられ、前記ブロードキャスト割込み信号が前記ロード・プリフェッチ・バスを通じて送られる、請求項1ないし5のいずれかに記載のコンピュータ・システム。
【請求項7】
前記親コアを前記スカウト・コアに接続する共有キャッシュをさらに備え、フェッチ要求バスが前記親コアを前記共有キャッシュと前記スカウト・コアとに接続するために提供される、請求項1ないし6のいずれかに記載のコンピュータ・システム。
【請求項8】
少なくとも1つのスカウト・コアと親コアとを有するチップ上のデータをプリフェッチするためのコンピュータ・プログラムであって、
親コアによって実行されている特定のアプリケーションに基づいて前記親コアを監視するために構成されるプリフェッチ・コードの記憶位置を示すプリフェッチ・コード開始アドレスを前記親コアによって保存するステップと、
前記プリフェッチ・コード開始アドレスに基づいて送られるブロードキャスト割込み信号を前記親コアによって前記スカウト・コアへ送るステップと、
前記ブロードキャスト割込み信号の受信に基づいて前記プリフェッチ・コードを実行して前記スカウト・コアによって前記親コアを監視するステップと、
を実行させる、コンピュータ・プログラム。
【請求項9】
前記親コアが前記親コアで発生するタスク・スワップに基づいて前記プリフェッチ・コード開始アドレスを保存する、請求項8に記載のコンピュータ・プログラム。
【請求項10】
前記親コアが命令を発行する前記特定のアプリケーションに基づいて前記プリフェッチ・コード開始アドレスを保存する、請求項8に記載のコンピュータ・プログラム。
【請求項11】
前記ブロードキャスト割込み信号が前記スカウト・コアによってデフォルトのプリフェッチ・コードがロードされるべきであることを示し、前記スカウト・コアの内部に設けられる設計状態が前記デフォルトのプリフェッチ・コードの位置を提供する、請求項8ないし10のいずれかに記載のコンピュータ・プログラム。
【請求項12】
前記ブロードキャスト割込み信号が前記プリフェッチ・コード開始アドレスの位置および割込み通知を提供する、請求項8ないし11のいずれかに記載のコンピュータ・プログラム。
【請求項13】
ロード・プリフェッチ・バスが前記親コアと前記スカウト・コアとの間に設けられ、前記ブロードキャスト割込み信号が前記ロード・プリフェッチ・バスを通じて送られる、請求項8ないし12のいずれかに記載のコンピュータ・プログラム。
【請求項14】
少なくとも1つのスカウト・コアと親コアとを有するチップ上のデータをプリフェッチするためのコンピュータ実装方法であって、
前記親コアによって実行されている前記特定のアプリケーションに基づいて前記親コアを監視するために構成されるプリフェッチ・コードの記憶位置を示すプリフェッチ・コード開始アドレスを前記親コアによって保存するステップと、
前記プリフェッチ・コード開始アドレスに基づいて送られるブロードキャスト割込み信号を前記親コアによって前記スカウト・コアへ送るステップと、
前記ブロードキャスト割込み信号の受信に基づいて前記プリフェッチ・コードを実行して前記スカウト・コアによって前記親コアを監視するステップと、
を含む、コンピュータ実装方法。
【請求項15】
前記親コアが前記親コアで発生するタスク・スワップに基づいて、前記プリフェッチ・コード開始アドレスを保存する、請求項14に記載の方法。
【請求項16】
前記親コアが命令を発行する前記特定のアプリケーションに基づいて前記プリフェッチ・コード開始アドレスを保存する、請求項14に記載の方法。
【請求項17】
前記ブロードキャスト割込み信号が前記スカウト・コアによってデフォルトのプリフェッチ・コードがロードされるべきであることを示し、前記スカウト・コアの内部に設けられる設計状態が前記デフォルトのプリフェッチ・コードの位置を提供する、請求項14ないし16のいずれかに記載の方法。
【請求項18】
前記ブロードキャスト割込み信号が前記プリフェッチ・コード開始アドレスの位置および割込み通知を提供する、請求項14ないし17のいずれかに記載の方法。
【請求項19】
ロード・プリフェッチ・バスが前記親コアと前記スカウト・コアとの間に設けられ、前記ブロードキャスト割込み信号が前記ロード・プリフェッチ・バスを通じて送られる、請求項14ないし18のいずれかに記載の方法。
【請求項20】
前記親コアを前記スカウト・コアに接続する共有キャッシュを備え、フェッチ要求バスが、前記親コアを前記共有キャッシュと前記スカウト・コアに接続するために提供される、請求項14ないし19のいずれかに記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般に、親コアとスカウト・コア(scout core)とを有するマルチコア・チップに関し、より詳細には、マルチコア・チップにおける親コアのための特定のプリフェッチ・アルゴリズムに関する。
【背景技術】
【0002】
複数のコアが単一のチップ上に設けられ得る。1つのアプローチにおいて、親コアと同一のチップ上の第2のコアは、スカウト・コアとして提供され得る。既存のスカウト・コアを活用または利用する1つのアプローチでは、スカウト・コアは共有キャッシュから親コアのプライベート・キャッシュにデータをプリフェッチするために使用される。このアプローチは、親コアがキャッシュ・ミスに遭遇する場合に特に有益となり得る。キャッシュ・ミスは、特定のラインのデータが親コアのディレクトリの検索を生じさせ、要求されたラインのキャッシュが存在しない場合に発生する。ミッシング・キャッシュ・ラインを取得するための1つの典型的なアプローチは、より上位レベルのキャッシュに対するフェッチ動作を開始することである。スカウト・コアは、親コアによって必要とされるデータをプリフェッチするために使用される機構を提供する。
【0003】
様々なアプリケーションは異なる振る舞いをし、結果として1つのプリフェッチ・アルゴリズムまたはアプローチがキャッシュ・コンテンツにアクセスする待ち時間を常に改善するとは限らないことがあることに留意されたい。具体的には、例えば、親コアがいくつかの異なるアプリケーションを実行している場合、それらの異なるアプリケーションを監視するために使用されるプリフェッチ・アルゴリズムは、実行されている特定のアプリケーションに応じてキャッシュ・コンテンツにアクセスするための様々な待ち時間を提供し得る。例えば、まばらに配置されたデータベースを検索するように設計されたアプリケーションは、画像の色補正を実行するように設計されたアプリケーションと比較すると、異なる振る舞いをし得る(例えば、プリフェッチ・アルゴリズムは、キャッシュ・コンテンツにアクセスする、より長い待ち時間またはより短い待ち時間を提供し得る)。
【発明の概要】
【発明が解決しようとする課題】
【0004】
本発明の目的の一つは、チップ上のデータをプリフェッチするためのコンピュータ・システム、コンピュータ・プログラム、およびコンピュータ実装方法を提供することである。
【課題を解決するための手段】
【0005】
本発明の態様は、少なくとも1つのスカウト・コアと親コアとを有するチップ上のデータをプリフェッチするための方法、システム、およびコンピュータ・プログラムに関する。本方法は、親コアによってプリフェッチ・コード開始アドレスを保存するステップを含む。プリフェッチ・コード開始アドレスはプリフェッチ・コードの記憶位置を示す。プリフェッチ・コードは親コアによって実行されている特定のアプリケーションに基づいて親コアを監視するために特に構成される。本方法はブロードキャスト割込み信号を親コアによってスカウト・コアへ送るステップを含む。ブロードキャスト割込み信号は保存されたプリフェッチ・コード開始アドレスに基づいて送られる。本方法は、スカウト・コアによって実行されるプリフェッチ・コードによって親コアを監視することを含む。スカウト・コアはブロードキャスト割込み信号の受信に基づいてプリフェッチ・コードを実行する。
【0006】
本発明の実施形態が、添付の図面を参照して例としてのみ記述される。
【図面の簡単な説明】
【0007】
図1】一実施形態に係るマルチコア・チップを示す図である。
図2】一実施形態に係る中央処理(CP)チップを示す図である。
図3】代替的な実施形態に係る中央処理チップを示す図である。
図4】設計スカウト・プリロード命令を示す図である。
図5】親コアからスカウト・コアへプリフェッチ・コードをロードするための例示的な方法を説明するためのプロセスフローを示す図である。
図6】親コアのオペレーティング・システムが遭遇するタスク・スワップの期間中にプリフェッチ・コードをロードするための例示的な方法を説明するためのプロセスフローを示す図である。
図7】親コアにおいて実行される特定のアプリケーションによってプリフェッチ・コードをロードするための例示的な方法を説明するためのプロセスフローを示す図である。
図8】一実施形態に係るコンピュータ・プログラム製品を示す図である。
【発明を実施するための形態】
【0008】
改善されたプリフェッチ効率を有するマルチコア・チップにおけるスカウト・コアによって親コアのためのデータをプリフェッチするための一実施形態が開示される。1つの例示的な実施形態において、マルチコア・チップは親コアと少なくとも1つのスカウト・コアとを含む。親コアはプリフェッチ・コード開始アドレスを保存(save)する。プリフェッチ・コード開始アドレスは特定のプリフェッチ・コードがどこに記憶されているかを示す。プリフェッチ・コードは親コアによって実行されている特定のアプリケーションに基づいて親コアを監視するために特に構成される。スカウト・コアは、特定のプリフェッチ・コードを実行することによって、親コアを監視する。特定のプリフェッチ・コードは、親コアが選択的に実行する特定のアプリケーションに対応し得る(例えば、あるアプリケーションが、そのアプリケーションに関連付けられる特定のプリフェッチ・コードを有しない場合、スカウト・コアは、代わりに事実上またはデフォルトのプリフェッチ・コードを実行し得る)。親コアによって実行される様々なアプリケーションは異なる振る舞いをし、したがって、一般的なプリフェッチ・アルゴリズム(例えば、特定のアプリケーションに合わせて作られていないプリフェッチ・アルゴリズム)は、親コアが実行している特定のアプリケーションによっては、待ち時間を常に改善するとは限らないことがあることに留意されたい。例示的な実施形態において開示されるようなアプローチにより、スカウト・コアは、親コアが実行する特定のアプリケーションを監視するために特に合わせて作られている特定のプリフェッチ・コードを使用して、親コアを監視することが可能になる。親コアは、親コアが実行している特定のアプリケーションに基づいてプリフェッチ・コードを切り替えるために、ブロードキャスト割込み信号をスカウト・コアへ送信し得る。
【0009】
図1は、一実施形態に係るコンピューティング・システム10の一例を図示する。コンピューティング・システム10は、少なくとも1つの中央処理(CP)チップ20を含む。図1に示されるような例示的な実施形態においては、3個の中央処理チップ20が示されるが、任意の個数の中央処理チップ20が同様に使用され得ることが理解されるべきである。例えば、1つのアプローチにおいて、コンピューティング・システム10は、8個の中央処理チップ20を含んでもよい。別のアプローチにおいて、コンピューティング・システム10は、最大で12個または16個の中央処理チップ20を含んでもよい。各中央処理チップ20は、共有キャッシュ22およびシステム・メモリ24と通信する。
【0010】
ここで、図1図2を参照すると、各中央処理チップ20は、命令の読み出しおよび実行のための複数のコア30を含む。例えば、図2に示されるような例示的な実施形態において、各中央処理チップ20は、親コア32とスカウト・コア34とを含むが、複数の親コア32およびスカウト・コア34が中央処理チップ20上に設けられ得ることが理解される。例えば、1つのアプローチにおいて、中央処理チップ20は、各々がスカウト・コア34と通信する4つの親コア32(すなわち、合計8個のコア)を含み得る。中央処理チップ120を図示する図3に示されるような代替的な実施形態において、親コア132は、複数のスカウト・コア134と通信し得る。例えば、1つのアプローチにおいて、中央処理チップ120は、各々が3個のスカウト・コア134と通信する2つの親コア132(すなわち、合計8個のコア)を提供され得る。
【0011】
図2を再び参照すると、各コア30は、それぞれ命令Iキャッシュ40およびデータDキャッシュ42も含む。図2に示されるような例示的な実施形態において、コア30は、それぞれレベル1(L1)キャッシュのみを含むが、様々な実施形態において、コア30はレベル2(L2)キャッシュも同様に含み得ることが理解されるべきである。各コア30は、共有キャッシュ50に動作可能に結合される。図2に示されるような実施形態において、共有キャッシュ50はL2キャッシュであるが、共有キャッシュ50は同様にレベル3(L3)キャッシュであってもよいことが理解されるべきである。
【0012】
データ・リターン・バス60は、親コア32と共有キャッシュ50との間に提供され、データ・リターン・バス62は、スカウト・コア34と共有キャッシュ50との間に提供される。フェッチ要求バス64は、親コア32を共有キャッシュ50およびスカウト・コア34に接続し、フェッチ要求バス64において、データが親コア32から共有キャッシュ50およびスカウト・コア34へ送られる。フェッチ要求バス66は、スカウト・コア34を共有キャッシュ50に接続し、スカウト・コア34は、フェッチ要求バス66を通じて共有キャッシュ50を監視する。フェッチ要求バス66は、スカウト・コア34のためのフェッチについても使用され得る。これは、親コア32のためにフェッチするフェッチ要求バス64と同様の振る舞いである。このようなフェッチは、分析されているデータ全体がローカルDキャッシュ42に収まらない場合には、分析のためにさらなるデータをロードする必要が潜在的にあると共に、1つまたは複数のプリフェッチ・アルゴリズムのスカウト・コア34へのロードのために必要とされ得る。ロード・プリフェッチ・バス68は、親コア32とスカウト・コア34との間に設けられる。親コア32は、プリフェッチ・コードと、プリフェッチ・コードが記憶されている場所を示す特定のプリフェッチ・コード開始アドレスとをロードするように、ロード・プリフェッチ・バス68を通じてスカウト・コア34に通知する。プリフェッチ・コードは、例えば、スカウト・コアのL1 Iキャッシュ40、共有キャッシュ50、共有キャッシュ22(図1)、またはシステム・メモリ24(図1)などの、メモリ・アドレスでアクセス可能である、コンピューティング・システム10内の多種多様な位置に記憶され得る。
【0013】
ここで、図3を参照すると、データ・リターン・バス160は、親コア132と共有キャッシュ150との間に提供され、データ・リターン・バス162は、複数のスカウト・コア134と共有キャッシュ150との間に提供される。フェッチ要求バス164は、親コア132を共有キャッシュ150に接続し、フェッチ要求バス164において、データは親コア132から共有キャッシュ150へ送られる。フェッチ要求バス166は、スカウト・コア134ごとに提供され、スカウト・コア134を共有キャッシュ150に接続する。フェッチ要求バス166を通じて送られるデータは、スカウト・コア134相互間で異なる。ロード・プリフェッチ・バス168は、各スカウト・コア134に接続され、親コア132と各スカウト・コア134との間に設けられる。フェッチ監視バス170は、スカウト・コア134ごとに提供され、共有キャッシュ150とスカウト・コア134のうちの1つとの間に設けられる。フェッチ要求バス166とは異なり、フェッチ監視バス170を通じて送られるデータは、スカウト・コア134相互間で異なってもよく、または異ならなくてもよい。
【0014】
図2に戻ると、共有キャッシュ50は、スカウト・コア34が親コア32を監視し得るように、ハブまたは接続部として動作する。スカウト・コア34は、親コア32内で発生する少なくとも1つの特定のデータ・パターンについて親コア32を監視する。具体的には、スカウト・コア34は、親コア32を監視するために使用されるプリフェッチ・コードを実行する。プリフェッチ・コードは、1つまたは複数の特定のデータ・パターンが親コア32内で発生したかを判定し、特定のデータ・パターンに基づいて、フェッチ要求を共有キャッシュ50へ送る。スカウト・コア34は、一般に、スカウト・コア34に設けられるIキャッシュ40にプリフェッチ・コードを記憶する。
【0015】
特定のデータ・パターンは、親コア32を離れるコンテンツ要求(例えば、親コア32のIキャッシュ40またはDキャッシュ42に存在しない特定のラインのキャッシュについての要求)、または親コア32のチェックポイント・アドレスであり得る。例えば、特定のデータ・パターンがキャッシュ・ミス(例えば、親コア32のIキャッシュ40またはDキャッシュ42におけるキャッシュのミッシング・ライン)である場合、予測されるミッシング・キャッシュ・ラインについてのプリフェッチは、スカウト・コア34によってフェッチ要求バス66を通じて共有キャッシュ50へ送られ得る。特定されるデータ・パターンが親コア32のチェックポイント・アドレスである場合、スカウト・コア34は、親コア32を監視し、特定のイベント(例えば、ガベージ・コレクションまたはコンテキスト・スイッチ)の完了時に、スカウト・コア34は、その特定のイベントに関連付けられるキャッシュ・ラインを獲得するために、プリフェッチ要求を共有キャッシュへ送る。
【0016】
スカウト・コア34は、親コア32が実行している特定のアプリケーションに基づいて、特定のプリフェッチ・コードを選択的に実行するように構成される。例えば、親コア32がアプリケーション「A」、アプリケーション「B」、およびアプリケーション「C」を次から次へ連続的に実行する(例えば、親コア32が、まずアプリケーション「A」を、次いでアプリケーション「B」を、次いでアプリケーション「C」を実行する)場合、スカウト・コア34は、アプリケーション「A」を監視するためにプリフェッチ・コード「A」を、アプリケーション「B」を監視するためにプリフェッチ・コード「B」を、アプリケーション「C」を監視するためにプリフェッチ・コード「C」を実行し得る。つまり、特定のプリフェッチ・コードは、親コア32が対応するアプリケーションを実行する間、親コア32を監視するように特に構成される(例えば、プリフェッチ・コード「A」は、アプリケーション「A」を監視する)。これは、特定のプリフェッチ・コードが、親コア32によって実行される特定のアプリケーションに応じて、異なる振る舞いをし得るためである。例えば、まばらに配置されたデータベースを検索するように設計されたアプリケーションは、画像の色補正を実行するように設計されたアプリケーションと比較すると、異なる振る舞いをし得る(例えば、プリフェッチ・アルゴリズムは、キャッシュ・コンテンツにアクセスする、より長い待ち時間またはより短い待ち時間を提供し得る)。あるアプリケーションが、そのアプリケーションに関連付けられる特定のプリフェッチ・コードを有しない場合、スカウト・コア34は、代わりに事実上またはデフォルトのプリフェッチ・コードを実行し得ることに留意されたい。スカウト・コア34の内部に設けられる設計状態(architected state)は、デフォルトのプリフェッチ・コードが記憶されている位置をスカウト・コア34に提供する。
【0017】
親コア32は、一般に、1つのアプリケーションから別のアプリケーションへ比較的高速で(例えば、最高で100,000回/秒の速度で)切り替える間に、様々なアプリケーションを連続的に(すなわち、一度に1つのアプリケーションを)実行し、これは、マルチ・タスキングと呼ばれる。具体的には、親コア32は、任意の個数のアプリケーションを実行し得る。ある特定のアプリケーションが親コア32の制御を別のアプリケーションに譲る場合、これは、タスク・スワップと呼ばれる。親コア32のオペレーティング・システムが遭遇するタスク・スワップの期間中、親コア32は、実行されていた現在のアプリケーションに関連付けられる、親コア32内に位置するプリフェッチ・アドレス48(図3において148として図示される)を保存する。プリフェッチ・アドレス48は、実行されていた現在のアプリケーションに関連付けられるプリフェッチ・コード開始アドレスがどこに保存されているかを示す。次いで、親コア32は、新たなアプリケーションをロードし、この新たなアプリケーションに関連付けられるプリフェッチ・コード開始アドレスでプリフェッチ・アドレス48を更新し得る。次いで、親コア32は、ロード・プリフェッチ・バス68を通じてスカウト・コア34へブロードキャスト割込み信号を送り得る。ブロードキャスト割込み信号は、プリフェッチ・コード開始アドレスの位置および割込み通知を提供する。親コア32がロードした新たなアプリケーションに関連付けられる特定のプリフェッチ・コードが存在しない場合には、親コア32は、デフォルトのプリフェッチ・コードがスカウト・コア34によってロードされるべきであることを示すブロードキャスト割込み信号をスカウト・コア34へ送る。
【0018】
親コア32によるタスク・スワップに加えて、ブロードキャスト割込み信号は、親コア32において実行される特定のアプリケーションによっても起動され得る。つまり、親コア32において実行される特定のアプリケーションは、スカウト・コア34が特定のプリフェッチ・コードをロードすべきであることを示す命令を発行し得る。ここで、図4を参照すると、設計スカウト・プリロード命令(architected scout preload instruction)70は、親コア32において実行される特定のアプリケーションによって発行され得る。設計スカウト・プリロード命令70は、親コア32において実行される特定のアプリケーションに関連付けられるプリフェッチ・コード開始アドレスを示す。例えば、親コア32がアプリケーション「A」を実行している場合、アプリケーション「A」によって発行される設計スカウト・プリロード命令70は、アプリケーション「A」に対応する特定のプリフェッチ・コードがどこに保存されているかを示す。
【0019】
設計スカウト・プリロード命令は、実行されるべき演算を特定するための命令コード72、ならびにベース・レジスタ74、指標レジスタ76、および特定のプリフェッチ・コードが保存されている開始アドレスの位置を特定するオフセット78を含む。設計スカウト・プリロード命令70は、プリフェッチ・コードと共にプリロードされるべき特定のスカウト・コア番号80も示す(例えば、図3を参照すると、特定のスカウト・コア番号80は、スカウト・コア1、スカウト・コア2、またはスカウト・コア3を示し得る)。設計スカウト・プリロード命令70の各フィールド(例えば、命令コード72、ベース・レジスタ74、指標レジスタ76、オフセット78およびスカウト・コア番号80)は、マルチビット・フィールドであり得る。フィールドごとのビットの個数は、異なり得る。図2および図4の双方を参照すると、親コア32は、設計スカウト・プリロード命令70を実行する。次いで、親コア32は、設計スカウト・プリロード命令70によって示されるプリフェッチ・コード開始アドレスと共にプリフェッチ・アドレス48を保存する。
【0020】
図2を再び参照すると、ブロードキャスト割込み信号の受け取り時に、スカウト・コア34の命令パイプラインはフラッシュされる。次いで、スカウト・コア34は、親コア32からロード・プリフェッチ・バス68を通じて送られるプリフェッチ・コード開始アドレスによって示されるプリフェッチ・コードを実行して、命令ストリームを再開し得る。
【0021】
ここで、図5を参照すると、親コア32からスカウト・コア34へプリフェッチ・コードをロードするための例示的な方法200を説明するプロセスフロー図である。図2図5を全体的に参照すると、方法200は、ブロードキャスト割込み信号が、親コア32からスカウト・コア34へロード・プリフェッチ・バス68(または、複数のスカウト・コア134が親コア132に接続される場合には、ロード・プリフェッチ・バス168)を通じて送られるブロック202において開始する。ブロードキャスト割込み信号は、プリフェッチ・コード開始アドレスの位置および割込み通知を提供する。次いで、方法200は、ブロック204へ進み得る。
【0022】
ブロック204において、スカウト・コア34は、割込み通知を示すブロードキャスト割込み信号を、ロード・プリフェッチ・バス68を通じて受け取る。次いで、方法200は、ブロック206へ進み得る。
【0023】
ブロック206において、スカウト・コア34の命令パイプラインがフラッシュされ、スカウト・コア34は、親コア32からロード・プリフェッチ・バス68を通じて送られたプリフェッチ・コード開始アドレスによって示されるプリフェッチ・コードを実行する。その結果、方法200は、終了する。
【0024】
図6は、親コア32のオペレーティング・システムが遭遇するタスク・スワップによってブロードキャスト割込み信号を起動することを説明する例示的な方法300である。図2図3および図6を全体的に参照すると、方法300は、親コア32がタスク・スワップに遭遇したかが判定されるブロック302において開始する。親コア32がタスク・スワップに遭遇する場合には、方法300は、ブロック304へ進み得る。
【0025】
ブロック304において、親コア32は、実行されている現在のアプリケーションに関連付けられるプリフェッチ・アドレス48を保存する。次いで、方法300は、ブロック306へ進み得る。
【0026】
ブロック306において、親コア32は、新たなアプリケーションをロードし、この新たなアプリケーションに関連付けられるプリフェッチ・コード開始アドレスでプリフェッチ・アドレス48を更新する。次いで、方法300は、ブロック308へ進み得る。
【0027】
ブロック308において、親コア32は、ブロードキャスト割込み信号を、ロード・プリフェッチ・バス68を通じてスカウト・コア34へ送る。ブロードキャスト割込み信号は、プリフェッチ・コード開始アドレスの位置および割込み通知を提供する。その結果、方法300は、終了し得る。
【0028】
図7は、親コア32において実行される特定のアプリケーションによってブロードキャスト割込み信号を起動することを説明する例示的な方法400である。図2図3図4および図7を全体的に参照すると、方法400は、親コア32が設計スカウト・プリロード命令70(図4)を発行する特定のアプリケーションを実行するブロック402において開始する。次いで、方法400は、ブロック404へ進み得る。
【0029】
ブロック404において、親コア32は、設計スカウト・プリロード命令70を実行する。次いで、方法400は、ブロック406へ進み得る。
【0030】
ブロック406において、親コア32は、設計スカウト・プリロード命令70によって特定されるプリフェッチ・コード開始アドレスと共にプリフェッチ・アドレス48を保存する。次いで、方法400は、ブロック408へ進み得る。
【0031】
ブロック408において、親コア32は、ブロードキャスト割込み信号およびプリフェッチ・コード開始アドレスを、ロード・プリフェッチ・バス68を通じてスカウト・コア34へ送る。その結果、方法400は、終了し得る。
【0032】
当業者によって認識されるように、本発明の1つまたは複数の態様は、システム、方法またはコンピュータ・プログラム製品として具現化され得る。したがって、本発明の1つまたは複数の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコード等を含む)、または、本明細書において「回路」、「モジュール」もしくは「システム」と全て一般に呼ばれ得る、ソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形を取り得る。さらに、本発明の1つまたは複数の態様は、コンピュータ読取可能なプログラム・コードが具現化された1つまたは複数のコンピュータ読取可能な媒体において具現化されるコンピュータ・プログラム製品の形を取り得る。
【0033】
1つまたは複数のコンピュータ読取可能な媒体の任意の組み合わせが利用され得る。コンピュータ読取可能な媒体は、コンピュータ読取可能な記憶媒体であり得る。コンピュータ読取可能な記憶媒体は、例えば、電子、磁気、光学、電磁気、赤外線または半導体のシステム、装置、もしくはデバイス、またはこれらの任意の適切な組み合わせとし得るが、これらに限定されない。コンピュータ読取可能な記憶媒体のより具体的な例(包括的でないリスト)は、以下のものを含む:1つもしくは複数のワイヤを有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM:random access memory)、読み出し専用メモリ(ROM:read−only memory)、消去可能プログラム可能読み出し専用メモリ(EPROM:erasable programmable read−only memory)もしくはフラッシュ・メモリ)、光ファイバ、ポータブル・コンパクト・ディスク読み出し専用メモリ(CD−ROM:compact disc read−only memory)、光学式記憶デバイス、磁気記憶デバイス、またはこれらの任意の適切な組み合わせ。本文書の文脈において、コンピュータ読取可能な記憶媒体は、命令実行システム、装置、またはデバイスによる使用のための、またはこれらに関連するプログラムを包含または記憶することができる任意の有形の媒体であり得る。
【0034】
ここで、図8を参照すると、一例において、コンピュータ・プログラム製品700は、例えば、1つまたは複数の記憶媒体702を含み、この媒体は、本明細書において説明される実施形態の1つまたは複数の態様を提供し、容易にするために、コンピュータ読取可能なプログラム・コード手段またはロジック704を記憶すべく、有形または非一時的あるいはその両方であり得る。
【0035】
有形の媒体(電子メモリ・モジュール(RAM)、フラッシュ・メモリ、コンパクト・ディスク(CD)、DVD、磁気テープなどを含むが、これらに限定されない)上に作成および記憶される場合、プログラム・コードは、しばしば「コンピュータ・プログラム製品」と呼ばれる。コンピュータ・プログラム製品媒体は、典型的に、好適にはコンピュータ・システム内の処理回路によって、その処理回路による実行のために読取可能である。そのようなプログラム・コードは、例えば、実行される場合に本発明の態様を実行する命令をアセンブルするために、コンパイラまたはアセンブラを使用して作成され得る。
【0036】
実施形態は、少なくとも1つのスカウト・コアと親コアとを有するチップ上のデータをプリフェッチするための方法、システム、およびコンピュータ・プログラム製品に関する。本方法は、親コアによってプリフェッチ・コード開始アドレスを保存することを含む。プリフェッチ・コード開始アドレスは、プリフェッチ・コードがどこに記憶されているかを示す。プリフェッチ・コードは、親コアによって実行されている特定のアプリケーションに基づいて、親コアを監視するために特に構成される。本方法は、親コアによってブロードキャスト割込み信号を少なくとも1つのスカウト・コアへ送ることを含む。ブロードキャスト割込み信号は、保存されているプリフェッチ・コード開始アドレスに基づいて送られる。本方法は、少なくとも1つのスカウト・コアによって実行されるプリフェッチ・コードによって親コアを監視することを含む。スカウト・コアは、ブロードキャスト割込み信号を受け取ることに基づいて、プリフェッチ・コードを実行する。
【0037】
一実施形態において、本方法は、親コアで発生するタスク・スワップに基づいて親コアがプリフェッチ・コード開始アドレスを保存することをさらに含む。
【0038】
一実施形態において、本方法は、命令を発行する特定のアプリケーションに基づいて親コアがプリフェッチ・コード開始アドレスを保存することをさらに含む。
【0039】
一実施形態において、本方法は、デフォルトのプリフェッチ・コードが少なくとも1つのスカウト・コアによってロードされるべきであることをブロードキャスト割込み信号が示すことをさらに含む。スカウト・コアの内部に設けられる設計状態は、デフォルトのプリフェッチ・コードの位置を提供する。
【0040】
一実施形態において、本方法は、ブロードキャスト割込み信号がプリフェッチ・コード開始アドレスの位置および割込み通知を提供することをさらに含む。
【0041】
一実施形態において、本方法は、ロード・プリフェッチ・バスが親コアと少なくとも1つのスカウト・コアとの間に設けられることをさらに含む。ブロードキャスト割込み信号は、ロード・プリフェッチ・バスを通じて送られる。
【0042】
一実施形態において、本方法は、親コアを少なくとも1つのスカウト・コアに接続する共有キャッシュをさらに含む。フェッチ要求バスは、親コアを共有キャッシュと少なくとも1つのスカウト・コアとの双方に接続するために提供される。
【0043】
技術的な効果および利点は、親コア32が実行する特定のアプリケーションを監視するために特に合わせて作られるプリフェッチ・コードを使用して、スカウト・コア34が親コア32を監視することを可能にすることを含む。親コア32は、親コア32が実行しているアプリケーションに基づいて特定のプリフェッチ・コードを切り替えるために、ロード・プリフェッチ・バス68を通じてスカウト・コア34へブロードキャスト割込み信号を送り得る。したがって、上記に議論されるようなアプローチは、コンピューティング・システム10のプリフェッチ効率を向上させる。
【0044】
本明細書において使用される専門用語は、特定の実施形態を説明する目的のために過ぎず、実施形態を限定することを意図されない。本明細書において、単数形の「a」、「an」および「the」は、そうでないことを文脈が明確に示さない限り、複数形も含むことが意図される。本明細書において使用される場合、「含む(comprises)」または「備える(comprising)」あるいはその両方は、記述された特徴、整数、ステップ、演算、要素、または構成要素あるいはこれら全ての存在を特定するが、1つまたは複数の他の特徴、整数、ステップ、演算、要素、構成要素、またはこれらのグループあるいはこれら全ての存在を排除しないことがさらに理解されるであろう。
【0045】
特許請求の範囲における全てのミーンズ・プラス・ファンクション要素またはステップ・プラス・ファンクション要素の対応する構造、材料、動作、および均等物は、具体的に請求項に記載されるように、請求項に記載された他の要素との組み合わせにおいて機能を実行するための任意の構造、材料、または動作を含むことが意図される。実施形態の説明は、例示および説明の目的のために提示されてきたが、網羅的であることまたは実施形態を開示された形式に限定することは意図されない。多くの変形およびバリエーションは、実施形態の範囲および思想を逸脱することなく、当業者に明らかとなるであろう。実施形態は、原理および実際的な適用例を最も良く説明し、他の当業者が実施形態を予期される特定の使用例に適している様々な変形例と共に理解することを可能にするために選択および説明された。
【0046】
実施形態の態様についての演算を実行するためのコンピュータ・プログラム・コードは、Java(R)、Smalltalk(R)、C++等などを含むオブジェクト指向プログラミング言語と、「C」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語とを含む1つまたは複数のプログラミング言語の任意の組み合わせにおいて記述され得る。プログラム・コードは、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロンのソフトウェア・パッケージとして、部分的にユーザのコンピュータ上および部分的に遠隔コンピュータ上で、または完全に遠隔コンピュータもしくはサーバ上で実行され得る。後者のシナリオにおいて、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN:local area network)もしくは広域ネットワーク(WAN:wide area network)を含む任意のタイプのネットワークを通じてユーザのコンピュータに接続されてもよく、または、この接続は、(例えば、インターネット・サービス・プロバイダを使用してインターネットを通じて)外部のコンピュータと行われ得る。
【0047】
実施形態の態様は、実施形態に係る方法、装置(システム)およびコンピュータ・プログラム製品のフローチャート図または概略図あるいはその両方を参照しつつ、上述される。フローチャート図またはブロック図あるいはその両方の各ブロックと、フローチャート図またはブロック図あるいはその両方のブロックの組み合わせとは、コンピュータ・プログラム命令によって実装され得ることが理解されるであろう。このようなコンピュータ・プログラム命令は、コンピュータまたは他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて特定される機能/動作を実装するための手段を生成するように、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。
【0048】
このようなコンピュータ・プログラム命令は、コンピュータ読取可能な媒体に記憶された命令がフローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて特定される機能/動作を実装する命令を含む製品を作り出すように、コンピュータ読取可能な媒体に記憶され、コンピュータ、他のプログラム可能なデータ処理装置、または他のデバイスに特定の手法で機能するように命令するものであってよい。
【0049】
コンピュータ・プログラム命令は、コンピュータまたは他のプログラム可能な装置上で実行される命令がフローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて特定される機能/動作を実装するためのプロセスを提供するように、コンピュータ実装プロセスを作り出すべく、コンピュータ、他のプログラム可能なデータ処理装置、またはデバイスにロードされ、コンピュータ、他のプログラム可能な装置または他のデバイス上で一連の動作ステップを実行させるものであってよい。
【0050】
図面中のフローチャートおよびブロック図は、様々な実施形態に係るシステム、方法、およびコンピュータ・プログラム製品の取り得る実装のアーキテクチャ、機能性、および動作を図示する。この点において、フローチャートまたはブロック図の各ブロックは、特定の論理機能を実装するための1つまたは複数の実行可能な命令を含むコードのモジュール、セグメント、または一部を表し得る。いくつかの代替的な実装においては、ブロックに記載される機能が、図面に記載された順序とは異なる順序で生じ得ることにも留意されたい。例えば、連続して示される2つのブロックは、実際には、実質的に同時に実行されることがあり、または、関連する機能性に応じて、複数のブロックが逆の順序で実行されることもある。ブロック図またはフローチャート図あるいはその両方の各ブロックと、ブロック図またはフローチャート図あるいはその両方のブロックの組み合わせとは、特定の機能または動作を実行する専用のハードウェアベースのシステムによって、または専用ハードウェアとコンピュータ命令との組み合わせによって実装されることができることにも留意されよう。
図1
図2
図3
図4
図5
図6
図7
図8