(57)【要約】  ＣＰＵ（１１１−１）が、起動指示を受け付けた対象アプリの実行時間に関する制約を記憶装置から特定する。ＣＰＵ（１１１−１）が、特定された制約が性能劣化条件を満たすか否かを判断することにより、リアルタイム制約の強いアプリか否かを判断する。ＣＰＵ（１１１−１）が、特定された制約が性能劣化条件を満たすと判断された場合、リアルタイム制約が強いアプリであるため対象アプリを所定コアであるＣＰＵ（１１１−３）に直ちに割り当てる。ＣＰＵ（１１１−１）が、特定された制約が所定条件を満たさないと判断された場合、リアルタイム制約が弱いアプリであるため、グループ（Ｇ１〜Ｇｎ）のうちのいずれかのグループ（図１ではグループ（Ｇ３））のグループマスタＣＰＵに対象アプリの割当指示を通知する。
2013008325.tif 000002
【特許請求の範囲】
【請求項１】
複数のコア群を有するマルチコアプロセッサと、アプリケーションごとに実行時間に関する制約を記憶する記憶装置と、を備えるマルチコアプロセッサシステムであって、
前記マルチコアプロセッサのうちの第１の特定コアが、
前記アプリケーションのうち、起動指示を受け付けた対象アプリケーションの実行時間に関する制約を前記記憶装置から特定する制約特定手段と、
前記制約特定手段により特定された制約が性能劣化条件を満たすか否かを判断する判断手段と、
前記判断手段により前記特定された制約が前記性能劣化条件を満たすと判断された場合、前記対象アプリケーションを前記マルチコアプロセッサのうちの所定コアに割り当てる割当手段と、
前記判断手段により前記特定された制約が前記性能劣化条件を満たさないと判断された場合、前記複数のコア群のうちのいずれかのコア群の第２の特定コアに前記対象アプリケーションの割当指示を通知する通知手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
【請求項２】
前記マルチコアプロセッサのうちのいずれかのコアが、
前記マルチコアプロセッサの各コアでのアプリケーションの実行の有無に基づいて、前記所定コアを決定する決定手段を備えることを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項３】
前記マルチコアプロセッサのコアごとに前記コアで実行中のアプリケーションの割り当て時刻が記憶装置に記憶され、
前記いずれかのコア群の第２の特定コアが、
前記通知手段によって通知された前記割当指示を受け付けると、前記いずれかのコア群のうち、実行中のアプリケーションの負荷量が最小のコアを特定する負荷特定手段と、
前記負荷特定手段により特定された最小のコアに前記対象アプリケーションを割り当てるコア群内割当手段と、
前記コア群内割当手段による前記割り当て後に、前記記憶装置内の前記最小のコアに関する前記割り当て時刻を更新する更新手段と、
を備えることを特徴とする請求項２に記載のマルチコアプロセッサシステム。
【請求項４】
前記決定手段は、
前記コアで実行中のアプリケーションに関する前記更新手段による更新後の割り当て時刻に基づいて、前記所定コアを決定することを特徴とする請求項３に記載のマルチコアプロセッサシステム。
【請求項５】
前記所定コアが、
前記割当手段による前記対象アプリケーションの割り当てを受け付けると、前記所定コアで実行中のアプリケーションを前記所定コアの属するコア群の他のコアに移行させる移行指示を前記所定コアが属するコア群の第２の特定コアに通知する移行通知手段を備え、
前記所定コアが属するコア群の第２の特定コアが、
前記所定コアで実行中のアプリケーションを前記所定コアの属するコア群の他のコアに移行させる移行処理を実行する移行処理実行手段を備えることを特徴とする請求項１〜４のいずれか一つに記載のマルチコアプロセッサシステム。
【請求項６】
前記マルチコアプロセッサで共有する共有資源を備え、
前記所定コアが、
前記割当手段による前記対象アプリケーションの割り当てを受け付けると、前記所定コアから前記共有資源へのアクセスの比率を前記対象アプリケーションの割り当ての受付前よりも高くするアクセス比率設定手段を備えることを特徴とする請求項１〜５のいずれか一つに記載のマルチコアプロセッサシステム。
【請求項７】
前記所定コアが属するコア群で共有するキャッシュを備え、
前記所定コアが属するコア群のうちの他のコアが、
前記割当手段により前記対象アプリケーションが前記所定コアに割り当てられると、前記キャッシュへアクセスを行わないキャッシュモード設定手段を備えることを特徴とする請求項１〜６のいずれか一つに記載のマルチコアプロセッサシステム。
【請求項８】
アプリケーションごとに実行時間に関する制約を記憶する記憶装置にアクセス可能な複数のコア群を有するマルチコアプロセッサのうちの第１の特定コアが、
前記アプリケーションのうち、起動指示を受け付けた対象アプリケーションの実行時間に関する制約を前記記憶装置から特定し、
特定された制約が性能劣化条件を満たすか否かを判断し、
前記特定された制約が前記性能劣化条件を満たすと判断された場合、前記対象アプリケーションを前記マルチコアプロセッサのうちの所定コアに割り当て、
前記特定された制約が前記性能劣化条件を満たさないと判断された場合、前記複数のコア群のうちのいずれかのコア群の第２の特定コアに前記対象アプリケーションの割当指示を通知する、
処理を実行することを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションの割り当てを制御するマルチコアプロセッサシステム、および制御方法に関する。
【背景技術】
【０００２】
従来、マルチコアプロセッサシステムにおいて、マルチコアプロセッサがマスタＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）とスレーブＣＰＵを有し、マスタＣＰＵがスレーブＣＰＵにアプリケーション（以下、「アプリ」と称する。）を割り当てる技術が知られている。【０００３】
また、関連する技術としては、たとえば、複数のＣＰＵが、キャッシュメモリを共有する場合、各ＣＰＵが実行している処理の優先度に応じて、各ＣＰＵが使用可能なキャッシュメモリの容量を動的に割り当てる技術が知られている。【０００４】
また、たとえば、マルチコアプロセッサがマスタＣＰＵと複数のスレーブＣＰＵを有し、複数のスレーブＣＰＵは、グループに群分けされ、マスタＣＰＵからの指示により動作する技術が知られている。また、たとえば、あるＣＰＵ（またはＣＰＵ群）で実行中の処理を他のＣＰＵ（または他のＣＰＵ群）に移行させる技術が知られている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平７−１２１４８８号公報
【特許文献２】特開平７−２４８９６７号公報
【特許文献３】特開２０００−７６２０５号公報
【特許文献４】特許第３４２９５８２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、複数のスレーブＣＰＵをマスタＣＰＵによって全体のスケジューリングを行う場合、マスタＣＰＵがスケジューリング計算によって過負荷状態となり、スケジューリングに時間がかかる問題点がある。また、マルチコアプロセッサを複数のＣＰＵごとにグルーピングし、全体マスタＣＰＵとグループマスタＣＰＵとでスケジューリングを行う場合、２回のスケジューリングを行うため、スケジューリングに時間がかかる問題点がある。２回のスケジューリングとは、全体マスタＣＰＵがいずれのグループに割り当てるかと、グループマスタがグループ内のいずれのＣＰＵに割り当てるかである。【０００７】
本発明は、上述した従来技術による問題点を解消するため、スケジューリングによるアプリの実行性能の劣化を防止することができるマルチコアプロセッサシステム、および制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、アプリケーションごとに実行時間に関する制約を記憶する記憶装置にアクセス可能な複数のコア群を有するマルチコアプロセッサのうちの第１の特定コアが、前記アプリケーションのうち、起動指示を受け付けた対象アプリケーションの実行時間に関する制約を前記記憶装置から特定し、特定された制約が性能劣化条件を満たすか否かを判断し、前記特定された制約が前記性能劣化条件を満たすと判断された場合、前記対象アプリケーションを前記マルチコアプロセッサのうちの所定コアに割り当て、前記特定された制約が前記性能劣化条件を満たさないと判断された場合、前記複数のコア群のうちのいずれかのコア群の第２の特定コアに前記対象アプリケーションの割当指示を通知するマルチコアプロセッサシステム、および制御方法が提案される。
【発明の効果】
【０００９】
本発明の一側面によれば、スケジューリングによるアプリの実行性能の劣化を防止することができるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、本発明の一実施例を示す説明図である。
【図２】図２は、アプリテーブルの一例を示す説明図である。
【図３】図３は、ＣＰＵテーブルの一例を示す説明図である。
【図４】図４は、ディスパッチ先ＣＰＵ情報の一例を示す説明図である。
【図５】図５は、実施例１にかかるマルチコアプロセッサシステム１００の機能ブロックの一例を示す説明図である。
【図６】図６は、リアルタイム制約の強いアプリの割当例を示す説明図である。
【図７】図７は、リアルタイム制約の弱いアプリの割当例を示す説明図である。
【図８】図８は、ディスパッチ先ＣＰＵ情報４００の更新例を示す説明図である。
【図９】図９は、ディスパッチ先ＣＰＵ情報４００の更新の他の例を示す説明図である。
【図１０】図１０は、全体マスタＣＰＵが行う処理手順の一例を示すフローチャートである。
【図１１】図１１は、実施例１にかかるグループマスタＣＰＵが行う処理手順の一例を示すフローチャートである。
【図１２】図１２は、実施例１にかかる各ＣＰＵが行う処理手順の一例を示すフローチャートである。
【図１３】図１３は、実施例１にかかるスレーブＣＰＵが行う処理手順の一例を示すフローチャートである。
【図１４】図１４は、実施例２で用いるＣＰＵテーブルの一例を示す説明図である。
【図１５】図１５は、キャッシュモード設定情報の一例を示す説明図である。
【図１６】図１６は、実施例２にかかるマルチコアプロセッサシステム１００の機能ブロックの一例を示す説明図である。
【図１７】図１７は、設定後のキャッシュモード設定情報１５００の一例を示す説明図である。
【図１８】図１８は、アクセス比率を上げる例を示す説明図である。
【図１９】図１９は、実施例２にかかるグループマスタＣＰＵが行う処理手順の一例を示すフローチャートである。
【図２０】図２０は、実施例２にかかるスレーブＣＰＵが行う処理手順の一例を示すフローチャートである。
【図２１】図２１は、図１に示したマルチコアプロセッサシステム１００の適用例を示す図である。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、本発明にかかるマルチコアプロセッサシステム、および制御方法の実施の形態を詳細に説明する。ここで、マルチコアプロセッサシステムおいて、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００１２】
図１は、本発明の一実施例を示す説明図である。マルチコアプロセッサシステム１００では、マルチコアプロセッサの複数のＣＰＵはグループＧ１〜Ｇｎ（ｎ≧１）にあらかじめグループ化されている。たとえば、グループＧ１には、ＣＰＵ１１１−１〜ＣＰＵ１１１−ｋが属し、グループＧｍ（１＜ｍ≦ｎ）には、ＣＰＵ１１ｍ−１〜ＣＰＵ１１ｍ−ｋが属している。グループＧ（ｍ＋１）には、ＣＰＵ１１（ｍ＋１）−１〜ＣＰＵ１１（ｍ＋１）−ｋが属し、グループＧｎには、ＣＰＵ１１ｎ−１〜ＣＰＵ１１ｎ−ｋが属している。ｋは、２，４，８などの所定値であり、マルチコアプロセッサシステム１００の設計者があらかじめ決定していることとする。
【００１３】
ＣＰＵ１１１−１は、マルチコアプロセッサの全体を制御する全体マスタＣＰＵであり、かつグループＧ１に属するＣＰＵ１１１−２〜１１１−ｋを制御するグループマスタＣＰＵである。ＣＰＵ１１１−２〜１１１−ｋはスレーブＣＰＵである。また、グループＧ２〜Ｇｎには、それぞれグループマスタＣＰＵであるＣＰＵ１１ｍ−１，１１（ｍ＋１）−１，１１ｎ−１があり、各グループＧ２〜Ｇｎを制御している。ＣＰＵ１１１−２〜１１１−ｋ，ＣＰＵ１１ｍ−２〜１１ｍ−ｋ，１１（ｍ＋１）−２〜１１（ｍ＋１）−ｋ，１１ｎ−２〜１１ｎ〜−ｋは、スレーブＣＰＵである。
【００１４】
共有メモリ１０２などの記憶装置は、アプリごとに実行時間に関する制約（以下、「リアルタイム制約」と称する。）が記述されたテーブルを有している。リアルタイム制約とは、たとえば、起動指示を受け付けてから何［ｍｓ］以内に実行を終了しなければならないかについてである。たとえば、アプリＡの制約は起動指示を受け付けてから３［ｍｓ］以内に実行を終了することとする。たとえば、アプリＢの制約は起動指示を受け付けてから１［ｓ］以内に実行を終了することとする。
【００１５】
まず、全体マスタＣＰＵであるＣＰＵ１１１−１が、起動指示を受け付けた対象アプリの実行時間に関する制約を記憶装置から特定する。たとえば、アプリＡが対象アプリであるとする。そして、ＣＰＵ１１１−１が、特定された制約が性能劣化条件を満たすか否かを判断する。性能劣化条件とは、たとえば、いずれかのグループのグループマスタＣＰＵに割当指示が通知され、グループマスタＣＰＵがグループ内のいずれかのＣＰＵにアプリが割り当てられた場合に性能が劣化してしまう条件である。具体的には、割当時間とアプリの実行時間の合計時間が制約を遵守できるか否かの条件である。性能劣化条件は、あらかじめアプリの設計時にシミュレーションにより決定されていることとする。
【００１６】
ここで、性能劣化条件が満たされるアプリは、リアルタイム制約の強いアプリとし、所定条件が満たされないアプリは、リアルタイム制約の弱いアプリとする。リアルタイム制約の強いアプリであると、割当時間の影響が大きく、アプリの性能が劣化する可能性がある。リアルタイム制約の弱いアプリであると、割当時間の影響がリアルタイム制約の強いアプリと比較して小さいため、割当時間によってアプリの性能が劣化する可能性が低い。たとえば、性能劣化条件が５０［ｍｓ］以内であるとする。たとえば、アプリＡの制約は３［ｍｓ］であるので、アプリＡの制約は５０［ｍｓ］以内である。よって、アプリＡの制約は性能劣化条件を満たしていると判断される。すなわち、アプリＡは、リアルタイム制約の強いアプリである。
【００１７】
ＣＰＵ１１１−１が、特定された制約が性能劣化条件を満たすと判断された場合、対象アプリをマルチコアプロセッサのうちの所定ＣＰＵに割り当てる。図１では、所定ＣＰＵがＣＰＵ１１１−３であるとし、アプリＡがＣＰＵ１１１−１に割り当てられている。たとえば、アプリＢの制約は１［ｓ］であるので、アプリＢの制約は５０［ｍｓ］より大きい。よって、アプリＡの制約は所定条件を満たしていないと判断される。すなわち、アプリＢは、リアルタイム制約の弱いアプリである。
【００１８】
ＣＰＵ１１１−１が、特定された制約が所定条件を満たさないと判断された場合、グループＧ１〜ＧｎのうちのいずれかのグループのグループマスタＣＰＵに対象アプリの割当指示を通知する。図１では、グループＧ（ｍ＋１）のＣＰＵ１１（ｍ＋１）−１に割当指示が通知され、ＣＰＵ１１（ｍ＋１）−１が、ＣＰＵ１１（ｍ＋１）−２にアプリＢを割り当てている。また、本実施の形態では、ＣＰＵの処理単位をアプリとしているが、これに限らず、たとえば、スレッドであってもよい。
【００１９】
つぎに、マルチコアプロセッサシステム１００について詳細に説明する。マルチコアプロセッサシステム１００は、ＣＰＵ１１１−１〜１１１−ｋ，１１ｍ−１〜１１ｍ−ｋ，１１（ｍ＋１）−１〜１１（ｍ＋１）−ｋ，１１ｎ−１〜１１ｎ−ｋと、有している。さらに、マルチコアプロセッサシステム１００は、共有メモリ１０２と、メモリコントローラ１０３と、Ｉ／Ｏ１０５と、Ｉ／Ｆ１０４と、を有している。また、各部はバス１０１によってそれぞれ接続されている。
【００２０】
ＣＰＵ１１１−１〜１１１−ｋ，１１ｍ−１〜１１ｍ−ｋ，１１（ｍ＋１）−１〜１１（ｍ＋１）−ｋ，１１ｎ−１〜１１ｎ−ｋは、それぞれＯＳ１３１−１〜１３１−ｋ，１３ｍ−１〜１３ｍ−ｋ，１３（ｍ＋１）−１〜１３（ｍ＋１）−ｋ，１３ｎ−１〜１３ｎ−ｋを実行している。
【００２１】
ＯＳ１３１−１は、マルチコアプロセッサの全体のマスタＯＳであり、グループＧ１のマスタＯＳである。ＯＳ１３１−１は、ウエイトキュー１４０を有している。ＯＳ１３１−１は、ウエイトキュー１４０にアプリが積まれると、該アプリの起動指示を受け付けたと判断する。ＯＳ１３２−１，１３３−１，１３４−１は、それぞれグループＧ２，３，４のマスタＯＳである。
【００２２】
ＯＳ１３１−１〜１３１−ｋ，１３ｍ−１〜１３ｍ−ｋ，１３（ｍ＋１）−１〜１３（ｍ＋１）−ｋ，１３ｎ−１〜１３ｎ−ｋは、図示していないが、それぞれランキューを有している。各ランキューには各ＣＰＵに割り当てられたアプリのコンテキスト情報のポインタが積まれる。コンテキスト情報とは、たとえば、ロードされたアプリの実行状態や該アプリ内の変数などが含まれる情報である。各ＯＳはランキュー内のコンテキスト情報のポインタを取得し、アプリのコンテキスト情報にアクセスすることで、アプリを直ぐに実行することができる。
【００２３】
各ＣＰＵが有する１次キャッシュはＯＳが実行するアプリから共有メモリ１０２への書込処理を一時的に記憶する。各１次キャッシュは、共有メモリ１０２から読み出されたデータを一時的に記憶する。グループＧ１〜Ｇｎのそれぞれに属するＣＰＵが有する１次キャッシュは、スヌープ回路によって接続されている。スヌープ回路は、各グループに属するＣＰＵが有する１次キャッシュで共有するデータがいずれかの１次キャッシュで更新された場合、該更新を検出し、他の１次キャッシュの該データも更新する。
【００２４】
グループＧ１〜Ｇｎでは、それぞれに属するＣＰＵが２次キャッシュ１２１〜１２ｎを共有している。２次キャッシュ１２１〜１２ｎは、キャッシュメモリとキャッシュコントローラとを有している。２次キャッシュ１２１〜１２ｎでは、各グループに属するＣＰＵが有する１次キャッシュから追い出されたデータを記憶する。２次キャッシュ１２１〜１２ｎは、１次キャッシュよりも、記憶容量が大きくかつＣＰＵからのアクセス速度が遅い。２次キャッシュ１２１〜１２ｎは共有メモリ１０２より、記憶容量が小さくかつＣＰＵからのアクセス速度が速い。
【００２５】
共有メモリ１０２は、たとえば、ＲＯＭ、ＲＡＭ、フラッシュＲＯＭが挙げられる。ＲＯＭは、ブートプログラムなどのプログラムを記憶している。ＲＡＭは、ＣＰＵ１１１−１〜ＣＰＵ１１ｎ−ｋのワークエリアとして使用される。フラッシュＲＯＭは、ＯＳなどのシステムソフトウェアやアプリのプログラムを記憶している。フラッシュＲＯＭは、たとえば、マルチコアプロセッサシステム１００に内蔵されていてもよいし、メモリカード、ＳＤカードなどの記録媒体であってもよい。メモリコントローラ１０３は、共有メモリ１０２へのアクセスを制御する。
【００２６】
Ｉ／Ｏ１０５は、たとえば、ディスプレイやキーボードなどが挙げられる。ディスプレイは、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイは、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。キーボードは、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボードは、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２７】
Ｉ／Ｆ１０４は、無線通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークＮＷに接続され、ネットワークＮＷを介して他の携帯端末に接続される。そして、Ｉ／Ｆ１０４は、ネットワークＮＷと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１０４には、たとえば、無線通信用のモデムやＬＡＮアダプタなどを採用することができる。
【００２８】
（実施例１）
まず、実施例１では、リアルタイム制約が強いアプリは直ちに実行させるために所定ＣＰＵに割り当て、リアルタイム制約が弱いアプリはいずれかのＣＰＵ群に割当指示を通知する例を示す。これにより、全体マスタＣＰＵの負荷を軽減することができる。実施例１では、ｎ＝４であり、ｍ＝２であり、ｋ＝４である例を示す。
【００２９】
また、実施例１では、各アプリのリアルタイム制約に関してあらかじめ解析済であるとし、アプリごとにリアルタイム制約の強弱を示すフラグが登録されたアプリテーブルが記憶装置に記憶されていることとする。図２にアプリテーブルの一例を示す。
【００３０】
（アプリテーブル）
図２は、アプリテーブルの一例を示す説明図である。アプリテーブル２００は、アプリＩＤ、アプリフラグ、負荷量のフィールドを有している。各フィールドに値が設定されることで、アプリ情報（たとえば、２０１−１，２０１−２）がレコードとして記憶される。
【００３１】
アプリＩＤのフィールドには、アプリの識別情報が登録される。アプリフラグのフィールドには、リアルタイム制約の強弱を示すフラグが登録されている。たとえば、アプリフラグのフィールドに０が登録されていれば、リアルタイム制約が弱いことを示し、アプリフラグのフィールドに１が登録されていれば、リアルタイム制約が強いことを示すとする。負荷量のフィールドには、アプリの単位時間当たりのＣＰＵの使用量が登録される。アプリテーブル２００は、共有メモリ１０２に記憶されていることとする。
【００３２】
（ＣＰＵテーブル）
図３は、ＣＰＵテーブルの一例を示す説明図である。ＣＰＵテーブル３００は、各ＣＰＵに割り当てられたアプリの最新の割当時刻を記憶する時刻情報を有している。ＣＰＵテーブル３００は、ＣＰＵＩＤ、時刻、フラグ、割当アプリのフィールドを有している。各フィールドに値が設定されることで、ＣＰＵ情報（たとえば、３０１−１，３０１−２）がレコードとして記憶される。
【００３３】
ＣＰＵＩＤのフィールドには、ＣＰＵの識別情報が登録される。時刻のフィールドには、アプリまたはスレッドがディスパッチされた最新の時刻が登録される。フラグのフィールドには、各ＣＰＵで現在実行中のアプリのうち、アプリフラグが１であるアプリを実行中であるか否かを示す値が登録される。フラグのフィールドに１が登録されている場合、リアルタイム制約が強いアプリを実行中であり、フラグのフィールドに０が登録されている場合、リアルタイム制約が強くないアプリを実行中である。割当アプリのフィールドには、ＣＰＵに割り当てられたアプリの識別情報が設定される。ＣＰＵテーブル３００は、共有メモリ１０２に記憶されていることとする。
【００３４】
（ディスパッチ先ＣＰＵ情報）
図４は、ディスパッチ先ＣＰＵ情報の一例を示す説明図である。ディスパッチ先ＣＰＵ情報４００は、リアルタイム制約が強いアプリが起動された場合に該アプリを割り当てる割当先のＣＰＵの識別情報が登録されている。図１では、所定ＣＰＵと称している。ディスパッチ先ＣＰＵ情報４００は、ディスパッチ先ＣＰＵ情報４００に登録された割当先のＣＰＵによって更新される。ディスパッチ先ＣＰＵ情報４００は、共有メモリ１０２に記憶されていることとする。
【００３５】
（実施例１にかかるマルチコアプロセッサシステム１００の機能ブロック図例）
図５は、実施例１にかかるマルチコアプロセッサシステム１００の機能ブロックの一例を示す説明図である。全体マスタＯＳであるＯＳ１３１−１は、アプリ特性解析部５０１と、割当部５０２と、グループ間割当部５０３と、を有している。具体的には、たとえば、アプリ特性解析部５０１〜グループ間割当部５０３の処理が、ＯＳにコーディングされている。ＣＰＵ１１１−１が、ＲＯＭやフラッシュＲＯＭなどの記憶装置に記憶されたＯＳ１３１−１を読み出し、ＯＳ１３１−１にコーディングされている処理を実行する。これにより、アプリ特性解析部５０１〜グループ間割当部５０３の処理が実現される。
【００３６】
グループマスタＯＳであるＯＳ１３ｉ（ｉ＝１〜４）−１は、受付部５２１−ｉと、コア群内割当部５２２−ｉと、更新部５２３−ｉを有している。具体的には、たとえば、受付部５２１−ｉ〜更新部５２３−ｉの処理が、ＯＳ１３ｉ−１にコーディングされている。ＣＰＵ１１ｉ−１が、ＲＯＭやフラッシュＲＯＭなどの記憶装置に記憶されたＯＳ１３ｉ−１を読み出し、ＯＳ１３ｉ−１にコーディングされている処理を実行する。これにより、受付部５２１−ｉ〜更新部５２３−ｉの処理が実現される。
【００３７】
スレーブＯＳであるＯＳ１３ｊ（ｊ＝１〜４）−ｌ（ｌ＝２〜４）は、受付部５３１−ｊｌと、決定部５３２−ｊｌと、を有している。具体的には、たとえば、受付部５３１−ｊｌ〜決定部５３２−ｊｌの処理が、ＯＳ１３ｊ−ｌにコーディングされている。ＣＰＵ１１ｊ−ｌが、ＲＯＭやフラッシュＲＯＭなどの記憶装置に記憶されたＯＳ１３ｊ−ｌを読み出し、ＯＳ１３ｊ−ｌにコーディングされている処理を実行する。これにより、受付部５３１−ｊｌ〜決定部５３２−ｊｌの処理が実現される。ここで、各部の詳細な例について、図６〜８を用いて説明する。
【００３８】
図６は、リアルタイム制約の強いアプリの割当例を示す説明図である。アプリ特性解析部５０１は、起動指示のあった対象アプリのリアルタイム制約が強いか弱いかを解析する。具体的には、たとえば、アプリ特性解析部５０１は、受付部５１１と、制約特定部５１２と、判断部５１３と、を有している。受付部５１１は、対象アプリの起動指示を受け付ける。図６の例では、対象アプリがアプリＡである。具体的には、たとえば、受付部５１１は、ウエイトキュー１４０にアプリが積まれると、該対象アプリの起動指示を受け付けたと判断する。
【００３９】
制約特定部５１２は、対象アプリの制約に関するアプリ情報を特定する。具体的には、たとえば、制約特定部５１２は、アプリテーブル２００から、対象アプリに関するアプリ情報を特定し、特定したアプリ情報のアプリフラグのフィールドに設定された値を特定する。ここで、アプリＡに関するアプリ情報２０１−１のアプリフラグのフィールドには１が設定されていることが特定される。
【００４０】
つぎに、判断部５１３は、対象アプリがリアルタイム制約の強いアプリであるか否かを判断する。具体的には、たとえば、判断部５１３は、制約特定部５１２により特定されたアプリフラグのフィールドに設定された値が１であれば、対象アプリをリアルタイム制約が強いアプリであると判断する。また、具体的には、たとえば、判断部５１３は、特定したアプリフラグのフィールドに設定された値が０であれば、対象アプリをリアルタイム制約が弱いアプリであると判断する。
【００４１】
ここで、アプリＡに関するアプリ情報２０１−１のアプリフラグのフィールドには１が設定されているため、アプリＡはリアルタイム制約の強いアプリであると判断される。
【００４２】
割当部５０２は、アプリ特性解析部５０１により対象アプリがリアルタイム制約の強いアプリであると判断された場合、所定ＣＰＵに対象アプリを割り当てる。具体的には、たとえば、割当部５０２は、ディスパッチ先ＣＰＵ情報４００に登録された識別情報が示すＣＰＵ１１２−２に対象アプリを割り当てる。さらに、具体的には、たとえば、割当部５０２は、割り当て結果をＣＰＵテーブル３００に出力する。
【００４３】
図７は、リアルタイム制約の弱いアプリの割当例を示す説明図である。図７では、アプリ特性解析部５０１について、図６で説明した処理例と同一処理であるため、詳細な説明を省略する。図７では、対象アプリがアプリＢである。アプリテーブル２００内のアプリＢに関するアプリ情報２０１−２のアプリフラグのフィールドには０が設定されている。よって、アプリＢはリアルタイム制約の弱いアプリであると判断される。
【００４４】
グループ間割当部５０３は、アプリ特性解析部５０１により対象アプリがリアルタイム制約の弱いアプリであると判断された場合、グループＧ１〜Ｇ４のうちのいずれかのグループのグループマスタＣＰＵに対象アプリの割当指示を通知する。具体的には、たとえば、グループ間割当部５０３は、グループ特定部５１４と通知部５１５を有している。
【００４５】
グループ特定部５１４は、グループＧ１〜Ｇ４のうち、グループＧ１〜Ｇ４のそれぞれが属するＣＰＵで実行中のアプリの負荷量の合計値が最小のグループを特定する。具体的には、たとえば、グループ特定部５１４は、グループＧ１〜Ｇ４の各グループマスタＣＰＵに対して、グループＧ１〜Ｇ４のそれぞれが属するＣＰＵで実行中のアプリの負荷量の合計値の算出を依頼して、算出結果を取得することとしてもよい。または、たとえば、各グループマスタＣＰＵが、グループに属するＣＰＵで実行中のアプリの負荷量の合計値を定期的に全体マスタＯＳ（ＯＳ１３１−１）に通知していることとしてもよい。そして、具体的には、たとえば、グループ特定部５１４は、負荷量の合計値が最小であるグループを特定する。
【００４６】
図７では、グループＧ１に属するＣＰＵで実行中のアプリの負荷量の合計値は、８０［％］である。図７では、グループＧ２に属するＣＰＵで実行中のアプリの負荷量の合計値は、５０［％］である。図７では、グループＧ３に属するＣＰＵで実行中のアプリの負荷量の合計値は、７０［％］である。図７では、グループＧ４に属するＣＰＵで実行中のアプリの負荷量の合計値は、２０［％］である。よって、負荷量の合計値が最小であるグループとしてグループＧ４が特定される。
【００４７】
通知部５１５は、グループ特定部５１４により特定されたグループのグループマスタＣＰＵに対象アプリの割当指示を通知する。具体的には、たとえば、通知部５１５は、ＣＰＵ１１１−１とＣＰＵ１１４−１とのＣＰＵ間通信によって割当指示を通知する。図７では、アプリＢの割当指示がＣＰＵ１１４−１によりＣＰＵ１１４−２（ｉ＝４，ｋ＝２）に通知されている。
【００４８】
受付部５２１−４は、グループ間割当部５０３により通知された対象アプリの割当指示を受け付ける。具体的には、たとえば、受付部５２１−４は、ＣＰＵ間通信により全体マスタＣＰＵから割当指示を受け付ける。
【００４９】
コア群内割当部５２２−４は、受付部５２１−４により対象アプリの割当指示を受け付けると、グループに属するＣＰＵのうち、いずれかのＣＰＵに対象アプリを割り当てる。具体的には、たとえば、コア群内割当部５２２−４は、グループＧ４内に属するＣＰＵごとに実行中のアプリの負荷量の合計値を特定する。そして、たとえば、コア群内割当部５２２−４は、グループＧ４内に属するＣＰＵごとに実行中のアプリを特定する。そして、たとえば、コア群内割当部５２２−４は、ＣＰＵごとに特定したアプリの負荷量を、アプリテーブル２００を参照することで取得する。そして、たとえば、コア群内割当部５２２−４は、ＣＰＵごとに負荷量の合計値を算出し、負荷量の合計値が最小であるＣＰＵを特定する。そして、たとえば、コア群内割当部５２２−４は、特定したＣＰＵに対象アプリを割り当てる。
【００５０】
更新部５２３−４は、コア群内割当部５２２−４による割当結果に基づいてＣＰＵテーブル３００を更新する。具体的には、たとえば、更新部５２３−４は、ＣＰＵテーブル３００からＣＰＵ１１４−２に関するＣＰＵ情報を特定する。そして、具体的には、たとえば、更新部５２３−４は、ＣＰＵ情報の時刻のフィールドに現時刻を設定し、ＣＰＵ情報の割当アプリのフィールドに対象アプリの識別情報を設定する。
【００５１】
図７では、グループＧ４のＣＰＵ１１４−１にはアプリが割り当てられているが、ＣＰＵ１１４−２〜１１４−４にはアプリが割り当てられていない。そのため、ＣＰＵ１１４−２が負荷量の合計値が最小であるＣＰＵとして特定され、アプリＢが割り当てられている。
【００５２】
図８は、ディスパッチ先ＣＰＵ情報４００の更新例を示す説明図である。ディスパッチ先ＣＰＵ情報４００に識別情報が設定されたＯＳ１３２−２（ｊ＝２，ｌ＝２）の受付部５３１−２２が、ディスパッチ先ＣＰＵ情報４００に識別情報の更新指示を受け付ける。具体的には、たとえば、各スレーブＯＳが、アプリの実行を終了すると、該更新指示をディスパッチ先ＣＰＵ情報４００に識別情報が設定されたＯＳ１３２−２に通知し、受付部５３１−２２が該更新指示を受け付けることとする。
【００５３】
決定部５３２−２２は、受付部５３１−２２が該更新指示を受け付けると、各ＣＰＵでのアプリの実行の有無に基づいて割当部５０２での割当先のＣＰＵ（上述の所定ＣＰＵ）を決定する。具体的には、たとえば、決定部５３２−２２は、ＣＰＵテーブル３００を参照し、割当アプリのフィールドに何も設定されていないＣＰＵをアイドル状態のＣＰＵとして特定する。ここで、ＣＰＵがアイドル状態であるとは、いずれのアプリも割り当てられていないことを示している。
【００５４】
そして、具体的には、たとえば、決定部５３２−２２は、アイドル状態のＣＰＵを有するグループごとにグループに属しているＣＰＵに関するＣＰＵテーブル３００のＣＰＵ情報を特定する。具体的には、たとえば、決定部５３２−２２は、アイドル状態のＣＰＵを有するグループごとに特定したＣＰＵ情報のフラグのフィールドが０であるか否かを判断する。これにより、決定部５２３−２２は、アイドル状態のＣＰＵを有するグループのうち、リアルタイム制約の強いアプリを実行していないグループがあるか否かを判断することができる。
【００５５】
そして、リアルタイム制約の強いアプリを実行していないグループがある場合、たとえば、決定部５３２−２２は、該グループのうち、アイドル状態のＣＰＵが最も多いグループを特定する。そして、決定部５３２−２２は、特定したグループのうちの、アイドル状態のＣＰＵの識別情報をディスパッチ先ＣＰＵ情報４００に登録する。これにより、ディスパッチ先ＣＰＵ情報４００が、マルチコアプロセッサの各ＣＰＵでのアプリの実行状態に応じて更新される。
【００５６】
図８では、アイドル状態のＣＰＵを有するグループは、グループＧ２〜Ｇ４である。グループＧ４のＣＰＵ１１４−３では、リアルタイム制約の強いアプリを実行しているが、グループＧ２，Ｇ３の各ＣＰＵでは、リアルタイム制約の強いアプリを実行していない。グループＧ２，Ｇ３のうち、アイドル状態のＣＰＵ数が多いのはグループＧ３であるため、グループＧ３のうちのアイドル状態のＣＰＵ１１３−２が割当部５０２での割当先のＣＰＵに決定される。そして、ＣＰＵ１１３−２の識別情報が、ディスパッチ先ＣＰＵ情報４００に新たに設定されている。
【００５７】
図９は、ディスパッチ先ＣＰＵ情報４００の更新の他の例を示す説明図である。図９では、アイドル状態のＣＰＵが無い場合について説明する。具体的には、たとえば、決定部５３２−２２は、アイドル状態のＣＰＵが存在しないと判断した場合、リアルタイム制約が強いアプリを実行していないグループがあるか否かを判断する。
【００５８】
具体的には、たとえば、決定部５３２−２２は、リアルタイム制約が強いアプリを実行していないグループがないと判断した場合、アプリが割り当てられてから最も時間が経過しているＣＰＵを特定する。具体的には、たとえば、決定部５３２−２２は、最も時間が経過しているか否かについてＣＰＵテーブル３００を参照し、各ＣＰＵ情報の時刻のフィールドに設定された時刻を取得する。そして、たとえば、決定部５３２−２２は、ＣＰＵ情報ごとの取得した時刻と現時刻との差分を算出することにより、各ＣＰＵで実行中のアプリが割り当てられてからの経過時間（「ＣＰＵに関する経過時間」と称する。）を特定することができる。そして、決定部５３２−２２は、特定したＣＰＵに関する経過時間が最大であるＣＰＵの識別情報をディスパッチ先ＣＰＵ情報４００に設定する。
【００５９】
図９では、たとえば、ＣＰＵ１３３−１に関する経過時間が、３［ｓ］であり、ＣＰＵ１３３−２に関する経過時間が、１０［ｓ］である。そして、たとえば、ＣＰＵ１３３−２に関する経過時間が最大であると判断されると、ディスパッチ先ＣＰＵ情報４００にＣＰＵ１３３−２の識別情報があらたに登録される。ここで、たとえば、全体マスタＣＰＵやグループマスタＣＰＵについては、あらかじめディスパッチ先ＣＰＵ情報４００に識別情報が登録されるＣＰＵの対象外としておくとよい。これにより、全体マスタＣＰＵやグループマスタＣＰＵの負荷を軽減させることができる。
【００６０】
（全体マスタＣＰＵが行う処理手順）
図１０は、全体マスタＣＰＵが行う処理手順の一例を示すフローチャートである。まず、全体マスタＣＰＵが、アプリの起動指示を受け付けたか否かを判断し（ステップＳ１００１）、アプリの起動指示を受け付けていないと判断した場合（ステップＳ１００１：Ｎｏ）、ステップＳ１００１へ戻る。
【００６１】
全体マスタＣＰＵが、アプリの起動指示を受け付けたと判断した場合（ステップＳ１００１：Ｙｅｓ）、起動指示を受け付けたアプリがリアルタイム制約の強いアプリであるか否かを判断する（ステップＳ１００２）。全体マスタＣＰＵが、リアルタイム制約の強いアプリであると判断した場合（ステップＳ１００２：Ｙｅｓ）、ディスパッチ先ＣＰＵ情報４００に登録されている識別情報が示すＣＰＵにアプリを割り当て（ステップＳ１００３）、一連の処理を終了する。
【００６２】
ステップＳ１００２において、全体マスタＣＰＵが、リアルタイム制約の強いアプリでないと判断した場合（ステップＳ１００２：Ｎｏ）、複数のグループのうち、グループに属するＣＰＵの負荷量の合計値が最小のグループを特定する（ステップＳ１００４）。そして、全体マスタＣＰＵが、特定したグループに割当指示を通知し（ステップＳ１００５）、一連の処理を終了する。
【００６３】
（実施例１にかかるグループマスタＣＰＵが行う処理手順）
図１１は、実施例１にかかるグループマスタＣＰＵが行う処理手順の一例を示すフローチャートである。まず、グループマスタＣＰＵが、アプリの割当指示を受け付けたか否かを判断する（ステップＳ１１０１）。グループマスタＣＰＵが、アプリの割当指示を受け付けていないと判断した場合（ステップＳ１１０１：Ｎｏ）、ステップＳ１１０１へ戻る。
【００６４】
グループマスタＣＰＵが、アプリの割当指示を受け付けたと判断した場合（ステップＳ１１０１：Ｙｅｓ）、グループ内で負荷量が最小のＣＰＵを特定する（ステップＳ１１０２）。グループマスタＣＰＵが、アプリを特定したＣＰＵに割り当て（ステップＳ１１０３）、特定したＣＰＵに関するＣＰＵテーブル３００の時刻情報を更新し（ステップＳ１１０４）、ステップＳ１１０１へ戻る。
【００６５】
（実施例１にかかる各ＣＰＵが行う処理手順）
図１２は、実施例１にかかる各ＣＰＵが行う処理手順の一例を示すフローチャートである。まず、ＣＰＵが、イベントが発生したか否かを判断する（ステップＳ１２０１）。ＣＰＵが、イベントが発生していないと判断した場合（ステップＳ１２０１：Ｎｏ）、ステップＳ１２０１へ戻る。
【００６６】
ＣＰＵが、アプリの割り当てを受け付けた場合（ステップＳ１２０１：割り当て）、割り当てられたアプリの実行を開始し（ステップＳ１２０２）、ステップＳ１２０１へ戻る。ＣＰＵが、アプリの実行が終了した場合（ステップＳ１２０１：実行終了）、ディスパッチ先ＣＰＵ情報４００に識別情報が登録されているＣＰＵにディスパッチ先ＣＰＵ情報４００の更新指示を通知し（ステップＳ１２０３）、ステップＳ１２０１へ戻る。
【００６７】
また、たとえば、ディスパッチ先ＣＰＵ情報４００として、全体マスタＣＰＵやグループマスタＣＰＵを設定しないようにあらかじめ決定しておくことで、図で示す処理を全体マスタＣＰＵやグループマスタＣＰＵが行わなくてよくなる。これにより、全体マスタＣＰＵやグループマスタＣＰＵの負荷を軽減させることができる。
【００６８】
（実施例１にかかるスレーブＣＰＵが行う処理手順）
図１３は、実施例１にかかるスレーブＣＰＵが行う処理手順の一例を示すフローチャートである。まず、スレーブＣＰＵが、ディスパッチ先ＣＰＵ情報４００の更新指示を受け付けたか否かを判断する（ステップＳ１３０１）。
【００６９】
スレーブＣＰＵが、ディスパッチ先ＣＰＵ情報４００の更新指示を受け付けていないと判断した場合（ステップＳ１３０１：Ｎｏ）、ステップＳ１３０１へ戻る。スレーブＣＰＵが、ディスパッチ先ＣＰＵ情報４００の更新指示を受け付けたと判断した場合（ステップＳ１３０１：Ｙｅｓ）、アイドル状態のＣＰＵを特定する（ステップＳ１３０２）。
【００７０】
そして、スレーブＣＰＵが、アイドル状態のＣＰＵが存在するか否かを判断し（ステップＳ１３０３）、アイドル状態のＣＰＵが存在すると判断した場合（ステップＳ１３０３：Ｙｅｓ）、ステップＳ１３０４へ移行する。そして、スレーブＣＰＵが、アイドル状態のＣＰＵを有するグループのうち、リアルタイム制約の強いアプリを実行していないグループがあるか否かを判断する（ステップＳ１３０４）。
【００７１】
スレーブＣＰＵが、リアルタイム制約の強いアプリを実行していないグループがあると判断した場合（ステップＳ１３０４：Ｙｅｓ）、リアルタイム制約の強いアプリを実行していないグループのうち、アイドル状態のＣＰＵが最も多いグループを特定する（ステップＳ１３０５）。そして、スレーブＣＰＵが、特定したグループに属するＣＰＵのうち、アイドル状態のＣＰＵの識別情報をディスパッチ先ＣＰＵ情報４００に登録し（ステップＳ１３０６）、一連の処理を終了する。
【００７２】
ステップＳ１３０４において、スレーブＣＰＵが、リアルタイム制約の強いアプリを実行していないグループがないと判断した場合（ステップＳ１３０４：Ｎｏ）、アイドル状態のＣＰＵが最も多いグループを特定する（ステップＳ１３０７）。スレーブＣＰＵが、特定したグループに属するアイドル状態のＣＰＵのうちのいずれかのＣＰＵの識別情報をディスパッチ先ＣＰＵ情報４００に登録し（ステップＳ１３０８）、一連の処理を終了する。
【００７３】
ステップＳ１３０３において、スレーブＣＰＵが、アイドル状態のＣＰＵが存在しないと判断した場合（ステップＳ１３０３：Ｎｏ）、リアルタイム制約が強いアプリを実行していないグループがあるか否かを判断する（ステップＳ１３０９）。
【００７４】
スレーブＣＰＵが、リアルタイム制約が強いアプリを実行していないグループがあると判断した場合（ステップＳ１３０９：Ｙｅｓ）、ステップＳ１３１０へ移行する。スレーブＣＰＵが、リアルタイム制約が強いアプリを実行していないＣＰＵの中で、負荷が最小のＣＰＵの識別情報をディスパッチ先ＣＰＵ情報４００に登録し（ステップＳ１３１０）、一連の処理を終了する。
【００７５】
ステップＳ１３０９において、スレーブＣＰＵが、リアルタイム制約が強いアプリを実行していないグループがないと判断した場合（ステップＳ１３０９：Ｎｏ）、ステップＳ１３１１に移行する。スレーブＣＰＵが、アプリが割り当てられてから最も時間が経過しているＣＰＵの識別情報をディスパッチ先ＣＰＵ情報４００に登録し（ステップＳ１３１１）、一連の処理を終了する。
【００７６】
（実施例２）
実施例２では、リアルタイム制約が強い対象アプリを割り当て時において、対象アプリの実行時にリアルタイム制約を違反することを防止させるために、対象アプリの割当先ＣＰＵの性能を劣化させないように制御する例を示す。
【００７７】
たとえば、グループＧ１〜Ｇ４ごとにそれぞれ２次キャッシュ１２１〜１２４を有している場合、同一グループ内の複数のＣＰＵが同時に２次キャッシュ１２１〜１２４へのアクセスを行うと、アクセスの競合が発生することにより、ＣＰＵの性能が劣化する。そこで、実施例２では、リアルタイム制約が強い対象アプリの割り当て時に、対象アプリの割当先ＣＰＵが属するグループの割当先ＣＰＵを除くＣＰＵに割当先ＣＰＵが用いる２次キャッシュを利用させないようにする。これにより、対象アプリの割当先ＣＰＵの性能劣化を防止することができ、対象アプリの実行時にリアルタイム制約を違反することを防止することができる。
【００７８】
複数のＣＰＵが同時に共有メモリ１０２へのアクセスを行うと、アクセスの競合が発生することにより、ＣＰＵの性能が劣化する。そこで、実施例２では、リアルタイム制約が強い対象アプリの割り当て時に、対象アプリの割当先ＣＰＵの共有メモリ１０２へのアクセス比率を該割り当て前よりも高くする。これにより、対象アプリの割当先ＣＰＵの性能劣化を防止することができ、対象アプリの実行時にリアルタイム制約を違反することを防止することができる。
【００７９】
実施例２では、実施例１で説明した処理、部、テーブルと同一の処理、部、テーブルについては同一の符号を付し、詳細な説明を省略する。実施例２であらたに利用するＣＰＵテーブルとキャッシュモード設定情報についてそれぞれ図１４，１５で説明する。
【００８０】
（実施例２で用いるＣＰＵテーブル）
図１４は、実施例２で用いるＣＰＵテーブルの一例を示す説明図である。ＣＰＵテーブル１４００は、ＣＰＵＩＤ、時刻、フラグ、割当アプリ、バス優先度のフィールドを有している。各フィールドに値が設定されることで、ＣＰＵ情報（たとえば、１４０１−１，１４０１−２）がレコードとして記憶される。
【００８１】
ＣＰＵＩＤのフィールドには、ＣＰＵの識別情報が登録される。時刻のフィールドには、アプリが割り当てられた最新の時刻が登録される。フラグのフィールドには、各ＣＰＵで現在実行中のアプリのうち、アプリフラグが１であるアプリを実行中であるか否かを示す値が登録される。フラグのフィールドに１が登録されている場合、リアルタイム制約が強いアプリを実行中であり、フラグのフィールドに０が登録されている場合、リアルタイム制約が強くないアプリを実行中である。割当アプリのフィールドには、ＣＰＵに割り当てられたアプリの識別情報が設定される。バス優先度のフィールドには、ＣＰＵのバス優先度が登録される。リアルタイム制約が強いアプリを実行中であるＣＰＵのバス優先度はリアルタイム制約が弱いアプリよりも大きい値が設定される。バス優先度のフィールドに登録されるデフォルト値は、１である。ＣＰＵテーブル１４００は、共有メモリ１０２に記憶されていることとする。
【００８２】
（キャッシュモード設定情報）
図１５は、キャッシュモード設定情報の一例を示す説明図である。キャッシュモード設定情報１５００は２次キャッシュ１２１〜１２４ごとにあるが、図１５では、グループＧ２の２次キャッシュ１２２で用いる例について説明する。
【００８３】
キャッシュモード設定情報１５００は２次キャッシュ１２２を共有するＣＰＵ１１２−１〜１１２−４が２次キャッシュ１２２を利用するか否かが設定される情報である。キャッシュモード設定情報１５００は、ＣＰＵＩＤ、キャッシュモードのフィールドを有している。各フィールドに情報が設定されることで、利用情報（たとえば、１５０１−１〜１５０１−４）がレコードとして記憶される。
【００８４】
ＣＰＵＩＤのフィールドには、２次キャッシュ１２２を共有するＣＰＵ１１２−１〜１１２−４の識別情報が登録されている。キャッシュモードのフィールドには、ｎｏｎ−ｃａｃｈｅ、またはｃａｃｈｅのいずれかが設定される。キャッシュモードのフィールドにｎｏｎ−ｃａｃｈｅが設定されている場合、ＣＰＵ１１２−ｘ（ｘ＝１〜４）が２次キャッシュ１２２を利用しないことを示す。キャッシュモードのフィールドにｃａｃｈｅが設定されている場合、ＣＰＵ１１２−ｘ（ｘ＝１〜４）が２次キャッシュ１２２を利用することを示す。キャッシュモードのフィールドのデフォルトの設定はｃａｃｈｅとし、キャッシュモード設定情報１５００のキャッシュモードのフィールドに対しては、２次キャッシュ１２２を共有するＣＰＵ１１２−ｘ（ｘ＝１〜４）であれば設定の変更が可能であるとする。
【００８５】
たとえば、２次キャッシュ１２２のキャッシュコントローラがキャッシュモード設定情報１５００を有していることとする。２次キャッシュ１２２のキャッシュコントローラは、キャッシュモード設定情報１５００に沿って２次キャッシュ１２２のキャッシュメモリにデータを記憶させる。
【００８６】
（実施例２にかかるマルチコアプロセッサシステム１００の機能ブロック図例）
図１６は、実施例２にかかるマルチコアプロセッサシステム１００の機能ブロックの一例を示す説明図である。まず、図１６で示す全体マスタＯＳであるＯＳ１３１−１は、図５で示した例と同一であるため詳細な説明を省略する。
【００８７】
グループマスタＯＳであるＯＳ１３ｉ−１は、受付部５２１−ｉと、コア群内割当部５２２−ｉと、更新部５２３−ｉと、移行処理実行部５２４−ｉを有している。具体的には、たとえば、受付部５２１−ｉ〜移行処理実行部５２４−ｉの処理が、ＯＳ１３ｉ−１にコーディングされている。ＣＰＵ１１ｉ−１が、ＲＯＭやフラッシュＲＯＭなどの記憶装置に記憶されたＯＳ１３ｉ−１を読み出し、ＯＳ１３ｉ−１にコーディングされている処理を実行する。これにより、受付部５２１−ｉ〜移行処理実行部５２４−ｉの処理が実現される。コア群内割当部５２２−ｉの詳細な処理については、実施例１で説明した処理と同一であるため、詳細な説明を省略する。
【００８８】
スレーブＯＳであるＯＳ１３ｊ−ｌは、受付部５３１−ｊｌと、決定部５３２−ｊｌと、キャッシュモード設定部５３４−ｊｌと、移行通知部５３３−ｊｌと、アクセス比率設定部５３５−ｊｌと、を有している。具体的には、たとえば、受付部５３１−ｊｌ〜アクセス比率設定部５３５−ｊｌの処理が、ＯＳ１３ｊ−ｌにコーディングされている。ＣＰＵ１１ｊ−ｌが、ＲＯＭやフラッシュＲＯＭなどの記憶装置に記憶されたＯＳ１３ｊ−ｌを読み出し、ＯＳ１３ｊ−ｌにコーディングされている処理を実行する。これにより、受付部５３１−ｊｌ〜アクセス比率設定部５３５−ｊｌの処理が実現される。受付部５３１−ｊｌと決定部５３２−ｊｌの詳細な処理については、実施例１で説明した処理と同一であるため、詳細な説明を省略する。
【００８９】
具体的な例としては、図６で挙げたように、アプリＡがリアルタイム制約の強いアプリであり、割当部５０２が、アプリＡをＣＰＵ１１２−２（ｊ＝２，ｌ＝２）に割り当てたこととする。
【００９０】
キャッシュモード設定部５３４−２２は、割当部５０２による対象アプリの割り当てを受け付けると、同一グループＧ２に属する他のＣＰＵが２次キャッシュ１２２へアクセスを行わないように設定する。具体的には、たとえば、キャッシュモード設定部５３４−２２は、同一グループＧ２に属する他のＣＰＵ１１２−１，１１２−３，１１２−４へキャッシュモードをｎｏｎ−ｃａｃｈｅモードに変更させる変更指示をＣＰＵ間通信により通知する。
【００９１】
また、受付部５３１−２２が、ＣＰＵ間通信により通知されたｎｏｎ−ｃａｃｈｅモードに変更させる変更指示を受け付けると、キャッシュモード設定部５３４−２２は、２次キャッシュ１２２上のデータを共有メモリ１０２へ退避させる。そして、キャッシュモード設定部５３４−２２は、ＣＰＵ１１２−２のキャッシュモードを変更する。具体的には、たとえば、キャッシュモード設定部５３４−２２は、２次キャッシュ１２２に記憶されている実行中のアプリに関するデータを各データの論理アドレスに基づいて特定する。そして、たとえば、キャッシュモード設定部５３４−２２は、特定したデータを２次キャッシュ１２２から退避させる。そして、キャッシュモード設定部５３４−２２は、キャッシュモード設定情報１５００にアクセスして、ＣＰＵ１１２−２に関する利用情報を特定する。そして、特定した利用情報のキャッシュモードのフィールドにｎｏｎ−ｃａｃｈｅを設定する。
【００９２】
図１７は、設定後のキャッシュモード設定情報１５００の一例を示す説明図である。たとえば、アプリＡはＣＰＵ１１２−２に割り当てられたため、ＣＰＵ１１２−１，１１２−３，１１２−４に関する利用情報のキャッシュモードのフィールドがｎｏｎ−ｃａｃｈｅに設定される。そして、２次キャッシュ１２２のキャッシュコントローラがキャッシュモード設定情報１５００の変化を検出し、キャッシュモード設定情報１５００に基づいてデータを２次キャッシュのキャッシュメモリに記憶させるか否かを制御する。
【００９３】
図１６の説明に戻る。移行通知部５３３−２２は、割当部５０２による対象アプリの割り当てを受け付けると、実行中のアプリをすべて同一グループ内の他のＣＰＵに移行させる移行指示をグループマスタＣＰＵであるＣＰＵ１１２−１に通知する。具体的に、たとえば、移行通知部５３３−２２が、移行元ＣＰＵである情報を含む移行指示をＣＰＵ間通信でグループマスタＣＰＵに通知する。
【００９４】
受付部５２１−２は、移行指示を受け付けると、移行処理実行部５２４−２は、移行指示の通知元ＣＰＵで実行中のアプリおよび実行待機状態のアプリをすべてグループＧ２内の他のＣＰＵに移行させる移行処理を実行する。具体的には、たとえば、受付部５２１−２は、ＣＰＵ間通信でＣＰＵから通知される移行指示を受け付ける。具体的には、たとえば、移行処理実行部５２４−２は、移行元ＣＰＵの１次キャッシュに含まれるデータを共有メモリ１０２に書き出す。そして、具体的には、たとえば、移行処理実行部５２４−２は、マイグレートする対象となるアプリのコンテキスト情報のポインタを移行先ＣＰＵにＣＰＵ間通信で通知する。これにより、リアルタイム制約の強い対象アプリが、他のアプリの実行と競合することなく実行される。
【００９５】
アクセス比率設定部５３５−２２は、割当部５０２による対象アプリの割り当てを受け付けると、ＣＰＵ１１２−２から共有メモリ１０２へのアクセス比率を対象アプリの割当前のアクセス比率よりも高くする。たとえば、アクセス比率のデフォルト値を１とし、リアルタイム制約の強いアプリを実行するＣＰＵのアクセス比率の値を１０とする。具体的には、たとえば、アクセス比率設定部５３５−２２は、ＣＰＵ１１２−２に関するアクセス比率を１０に設定する変更指示をメモリコントローラ１０３に通知する。変更指示には、たとえば、ＣＰＵ１１２−２の識別情報と、変更後のアクセス比率の値が含まれていることとする。
【００９６】
さらに、たとえば、アクセス比率設定部５３５−２２は、ＣＰＵテーブル３００を参照し、ＣＰＵ１１２−２のＣＰＵ情報を特定する。そして、たとえば、アクセス比率設定部５３５−２２は、特定したＣＰＵ情報のバス優先度のフィールドの値を１０に設定する。
【００９７】
図１８は、アクセス比率を上げる例を示す説明図である。メモリコントローラ１０３は、リクエストキュー１８００に登録されているアクセスのリクエスト順にタイムスライスで各ＣＰＵからのアクセスを制御する。ここでは、たとえば、メモリコントローラ１０３が各ＣＰＵに対応するレジスタを有し、該レジスタに各ＣＰＵのアクセス比率が設定されていることとする。そして、メモリコントローラ１０３が、各ＣＰＵに対応するレジスタの値に基づいて各ＣＰＵからのリクエストキュー１８００へのリクエストの登録を制御する。
【００９８】
たとえば、メモリコントローラ１０３は、各ＣＰＵからのアクセス比率の変更指示を受け付けると、変更指示に含まれるＣＰＵの識別情報に基づいて、ＣＰＵに関するレジスタの値を変更指示に含まれるアクセス比率に変更する。リクエストキュー１８００の中の各ボックスがアクセスリクエストである。メモリコントローラ１０３は、リクエストキュー１８００の右側からアクセスリクエストを受け付け、左側から順にアクセスリクエストを処理することとする。たとえば、リクエストキュー１８００内のボックスのうち、各ＣＰＵの符号が付されたボックスが各ＣＰＵからのアクセスリクエストである。
【００９９】
対象アプリの割当前には、アクセス比率がすべて１であるため、各ＣＰＵからのアクセスリクエストが１個ずつリクエストキュー１８００に登録される。対象アプリの割当後には、ＣＰＵ１１２−２からのアクセス比率が高くなり、リクエストキュー１８００内のボックスのうち、１１２−２が付されているボックスが１０個続いている。
【０１００】
（実施例２にかかるグループマスタＣＰＵの処理手順）
図１９は、実施例２にかかるグループマスタＣＰＵが行う処理手順の一例を示すフローチャートである。まず、グループマスタＣＰＵが、イベントが発生したか否かを判断する（ステップＳ１９０１）。グループマスタＣＰＵが、イベントが発生していないと判断した場合（ステップＳ１９０１：Ｎｏ）、ステップＳ１９０１へ戻る。
【０１０１】
グループマスタＣＰＵが、アプリの割当指示を受け付けたと判断した場合（ステップＳ１９０１：割当指示）、グループ内で負荷量が最小のＣＰＵを特定する（ステップＳ１９０２）。グループマスタＣＰＵが、アプリを特定したＣＰＵに割り当て（ステップＳ１９０３）、特定したＣＰＵに関するＣＰＵテーブルの時刻情報を更新し（ステップＳ１９０４）、ステップＳ１９０１へ戻る。ここで、時刻情報とは、ＣＰＵテーブルの時刻のフィールドの値を示している。
【０１０２】
グループマスタＣＰＵが、移行指示を受け付けたと判断した場合（ステップＳ１９０１：移行指示）、グループ内で負荷量が最小のＣＰＵを特定する（ステップＳ１９０５）。そして、グループマスタＣＰＵが、移行指示の通知元を移行元にし、特定したＣＰＵを移行先にして移行処理を実行する（ステップＳ１９０６）。グループマスタＣＰＵが、移行終了を移行指示の通知元に通知し（ステップＳ１９０７）、ステップＳ１９０１へ戻る。
【０１０３】
（実施例２にかかるスレーブＣＰＵが行う処理手順）
図２０は、実施例２にかかるスレーブＣＰＵが行う処理手順の一例を示すフローチャートである。まず、スレーブＣＰＵが、イベントが発生したか否かを判断する（ステップＳ２００１）。スレーブＣＰＵが、イベントが発生していないと判断した場合（ステップＳ２００１：Ｎｏ）、ステップＳ２００１へ戻る。
【０１０４】
スレーブＣＰＵが、キャッシュモードの変更指示を受け付けたと判断した場合（ステップＳ２００１：変更指示）、ｎｏｎ  ｃａｃｈｅモードへの変更であるか否かを判断する（ステップＳ２００２）。スレーブＣＰＵが、ｎｏｎ  ｃａｃｈｅモードへの変更であると判断した場合（ステップＳ２００２：Ｙｅｓ）、２次キャッシュ上のデータを共有メモリ１０２へ退避する（ステップＳ２００３）。
【０１０５】
そして、スレーブＣＰＵが、キャッシュモードを変更し（ステップＳ２００４）、ステップＳ２００１へ戻る。ステップＳ２００２において、スレーブＣＰＵが、ｎｏｎ  ｃａｃｈｅモードへの変更でないと判断した場合（ステップＳ２００２：Ｎｏ）、ステップＳ２００４へ移行する。
【０１０６】
ステップＳ２００１において、スレーブＣＰＵが、アプリの実行終了を受け付けたと判断した場合（ステップＳ２００１：実行終了）、実行が終了したアプリはリアルタイム制約の強いアプリであるか否かを判断する（ステップＳ２００５）。スレーブＣＰＵが、実行が終了したアプリはリアルタイム制約の強いアプリでないと判断した場合（ステップＳ２００５：Ｎｏ）、ステップＳ２００１へ戻る。
【０１０７】
スレーブＣＰＵが、実行が終了したアプリはリアルタイム制約の強いアプリであると判断した場合（ステップＳ２００５：Ｙｅｓ）、グループの中の他のＣＰＵにｃａｃｈｅ  ｍｏｄｅへの変更を通知する（ステップＳ２００６）。スレーブＣＰＵが、バス優先度をデフォルト値に変更する変更指示をメモリコントローラ１０３へ通知し（ステップＳ２００７）、ステップＳ２００１へ戻る。
【０１０８】
ステップＳ２００１において、スレーブＣＰＵが、アプリの割り当てを受け付けたと判断した場合（ステップＳ２００１：割り当て）、リアルタイム制約の強いアプリの割り当てであるか否かを判断する（ステップＳ２００８）。スレーブＣＰＵが、リアルタイム制約の強いアプリの割り当てでないと判断した場合（ステップＳ２００８：Ｎｏ）、ステップＳ２０１３へ移行する。
【０１０９】
スレーブＣＰＵが、リアルタイム制約の強いアプリの割り当てであると判断した場合（ステップＳ２００８：Ｙｅｓ）、同一グループの他のＣＰＵにｎｏｎ  ｃａｃｈｅモードへの変更指示を通知する（ステップＳ２００９）。つぎに、スレーブＣＰＵが、バス優先度を指定値へ変更する変更指示をメモリコントローラ１０３へ通知し（ステップＳ２０１０）、実行中のアプリを同一グループの他のＣＰＵに移行させる移行指示をグループマスタＣＰＵへ通知する（ステップＳ２０１１）。
【０１１０】
そして、スレーブＣＰＵが、移行完了したか否かを判断する（ステップＳ２０１２）。具体的には、グループマスタＣＰＵが、移行完了を通知するため、スレーブＣＰＵは、移行完了の通知を受け付けたか否かによって移行完了したか否かを判断する。
【０１１１】
そして、スレーブＣＰＵが、移行完了していないと判断した場合（ステップＳ２０１２：Ｎｏ）、ステップＳ２０１２へ戻る。スレーブＣＰＵが、移行完了したと判断した場合（ステップＳ２０１２：Ｙｅｓ）、割り当てられたアプリの実行を開始し（ステップＳ２０１３）、ステップＳ２００１へ戻る。
【０１１２】
（マルチコアプロセッサシステム１００の適用例）
図２１は、図１に示したマルチコアプロセッサシステム１００の適用例を示す図である。図２１において、ネットワークＮＷは、サーバ２１０１，２１０２とクライアント２１３１〜２１３４とが通信可能なネットワークＮＷであり、たとえば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネット、携帯電話網などで構成される。
【０１１３】
サーバ２１０２は、クラウド２１２０を構成するサーバ群（サーバ２１２１〜２１２５）の管理サーバである。クライアント２１３１〜２１３４のうち、クライアント２１３１はノート型パソコン、クライアント２１３２はデスクトップ型パソコン、クライアント２１３３は携帯電話機（スマートフォン、ＰＨＳ（Ｐｅｒｓｏｎａｌ  Ｈａｎｄｙｐｈｏｎｅ  Ｓｙｓｔｅｍ）でもよい）、クライアント２１３４はタブレット型端末である。図２１のサーバ２１０１，２１０２，２１２１〜２１２５、クライアント２１３１〜２１３４は、たとえば、図１に示したコンピュータにより実現される。
【０１１４】
また、本実施の形態は、図１に示した各ＣＰＵ、および共有メモリ１０２がそれぞれ異なるコンピュータ（たとえば図２１の携帯電話機やサーバ）に搭載され、複数のコンピュータがネットワークＮＷを介して分散型の並列処理をおこなう構成に適用することもできる。
【０１１５】
以上説明したように、リアルタイム制約が強いアプリの場合、いずれかのグループのグループマスタコアに割当指示し、グループマスタＣＰＵに割り当てを行わせると、スケジューリング時間で性能が劣化してしまう。そこで、対象アプリを所定ＣＰＵに割り当てて、直ちに実行させる。これにより、対象アプリがスケジューリングによる影響で性能が劣化することを防止することができる。さらに、複数のアプリの起動指示が同時に発生した場合、全体マスタＣＰＵがスケジューリングにかける負荷を減らすことができる。
【０１１６】
また、マルチコアプロセッサの各ＣＰＵでのアプリケーションの実行の有無に基づいて、所定ＣＰＵを決定する。これにより、リアルタイム制約が強いアプリが他のアプリとＣＰＵ上で競合せずに実行させることができ、アプリの性能劣化を防止することができる。
【０１１７】
また、リアルタイム制約が弱いアプリの場合、いずれかのグループのグループマスタＣＰＵに割当指示し、グループマスタコアに割り当てを行わせることで、全体マスタＣＰＵの負荷を軽減させることができる。
【０１１８】
また、アプリが割り当てられてから最も時間が経過しているＣＰＵを所定ＣＰＵに決定する。最も時間が経過しているＣＰＵであれば、リアルタイム制約の強いような緊急性の高いアプリケーションが実行されている可能性が低いため、リアルタイム制約の強いアプリを優先して実行させることができる。
【０１１９】
また、リアルタイム制約が強いアプリが所定ＣＰＵに割り当てられた場合、所定ＣＰＵから共有資源へのアクセス比率を該アプリの割当前よりも高くする。これにより、所定ＣＰＵと他のＣＰＵとが共有資源でアクセス競合するのを防止することができ、アクセス競合によるアプリの実行性能が劣化するのを防止することができる。
【０１２０】
また、リアルタイム制約が強いアプリが所定ＣＰＵに割り当てられた場合、所定ＣＰＵが属するグループで共有する２次キャッシュを、所定ＣＰＵを除く他のＣＰＵに利用させないようにする。これにより、２次キャッシュへのアクセスが競合しないため、アクセス競合によるアプリの実行性能が劣化するのを防止することができる。
【０１２１】
なお、本実施の形態で説明した制御方法は、あらかじめ用意された制御プログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１２２】
ＣＰＵ  １１１−１〜１１１−４，１１２−１〜１１２−４，１１３−１〜１１３−４，１１４−１〜１１４−４
５０２  割当部
５１２  制約特定部
５１３  判断部
５１５  通知部
５２２−ｉ  コア群内割当部
５２３−ｉ  更新部
５２４−ｉ  移行処理実行部
５３２−ｊｌ  決定部
５３３−ｊｌ  移行通知部
５３４−ｊｌ  キャッシュモード設定部
５３５−ｊｌ  アクセス比率設定部
Ａ，Ｂ  アプリ
【図１】
2013008325.tif 000003
【図２】
2013008325.tif 000004
【図３】
2013008325.tif 000005
【図４】
2013008325.tif 000006
【図５】
2013008325.tif 000007
【図６】
2013008325.tif 000008
【図７】
2013008325.tif 000009
【図８】
2013008325.tif 000010
【図９】
2013008325.tif 000011
【図１０】
2013008325.tif 000012
【図１１】
2013008325.tif 000013
【図１２】
2013008325.tif 000014
【図１３】
2013008325.tif 000015
【図１４】
2013008325.tif 000016
【図１５】
2013008325.tif 000017
【図１６】
2013008325.tif 000018
【図１７】
2013008325.tif 000019
【図１８】
2013008325.tif 000020
【図１９】
2013008325.tif 000021
【図２０】
2013008325.tif 000022
【図２１】
2013008325.tif 000023
【国際調査報告】
2013008325.tif 000024
2013008325.tif 000025