(57)【要約】【課題】無駄なプログラムの実行完了待ち時間を防止し、並列度を上げることができるマルチコアシステムを提供することを課題とする。【解決手段】第１のプログラムを実行することにより第１のデータを書き込み、その書き込み完了後に書き込み完了通知を通知する第１のコア（５０２）と、第２のプログラムを実行することにより前記書き込まれた第１のデータを参照する第２のコア（５０３）と、前記第１のプログラムの実行により前記第１のコアから前記書き込み完了通知が通知されると、前記第１のプログラムが実行完了する前に前記第２のプログラムの実行開始を前記第２のコアに指示するスケジューラ（５６２）とを有することを特徴とするマルチコアシステムが提供される。【選択図】図５
2010152733.tif 000002
【特許請求の範囲】
【請求項１】
第１のプログラムを実行することにより第１のデータを書き込み、その書き込み完了後に書き込み完了通知を通知する第１のコアと、
第２のプログラムを実行することにより前記書き込まれた第１のデータを参照する第２のコアと、
前記第１のプログラムの実行により前記第１のコアから前記書き込み完了通知が通知されると、前記第１のプログラムが実行完了する前に前記第２のプログラムの実行開始を前記第２のコアに指示するスケジューラと
を有することを特徴とするマルチコアシステム。
【請求項２】
前記スケジューラは、前記第１のプログラム及び前記第２のプログラムの前記第１のデータの依存関係に応じて、前記第２のプログラムの実行開始を前記第２のコアに指示することを特徴とする請求項１記載のマルチコアシステム。
【請求項３】
前記スケジューラは、前記第２のプログラムを実行することにより参照するデータのすべての書き込み完了通知が通知されると、前記第２のプログラムの実行開始を前記第２のコアに指示することを特徴とする請求項１又は２記載のマルチコアシステム。
【請求項４】
前記書き込み完了通知は、ハードウェアの信号線により通知されることを特徴とする請求項１〜３のいずれか１項に記載のマルチコアシステム。
【請求項５】
前記書き込み完了通知は、ソフトウェアのプロトコルにより通知されることを特徴とする請求項１〜３のいずれか１項に記載のマルチコアシステム。
【請求項６】
さらに、前記第１のプログラムにより書き込まれた第１のデータが前記第２のプログラムにより参照されることを示す、前記第１のプログラム及び前記第２のプログラムの前記第１のデータの依存関係を記憶するプログラム実行管理テーブルを有し、
前記スケジューラは、前記プログラム実行管理テーブルに応じて、前記第２のプログラムの実行開始を前記第２のコアに指示することを特徴とする請求項２記載のマルチコアシステム。
【請求項７】
さらに、前記第１のプログラムを実行することにより前記第１のデータの書き込みが完了したか否かを記憶するスコアボードを有し、
前記スケジューラは、前記第１のコアから前記書き込み完了通知が通知されると、前記第１のプログラムを実行することにより前記第１のデータの書き込みが完了したことを前記スコアボードに記録することを特徴とする請求項１〜６のいずれか１項に記載のマルチコアシステム。
【請求項８】
前記スケジューラは、割り込み信号により前記第２のプログラムの実行開始を前記第２のコアに指示することを特徴とする請求項１〜７のいずれか１項に記載のマルチコアシステム。
【請求項９】
前記第１のコア及び前記第２のコアは、それぞれプロセッサであることを特徴とする請求項１〜８のいずれか１項に記載のマルチコアシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコアシステムに関する。
【背景技術】
【０００２】
マルチコアシステムは、同時実行可能なプログラムを別のコアで同時に実行することができる。複数のプログラムは、それらが扱うデータ間に依存性が無い場合に別のコアで同時に実行できる。しかし、データの依存性がある場合は、依存性のあるデータを参照するプログラムは、そのデータを書き込むプログラムが実行完了するまで実行開始を待つ必要がある。そのため、実行完了待ち時間が発生し、マルチコアシステムの並列度を下げる要因となっている。
【０００３】
特開平６−８９１８８号公報には、コンパイラの自動並列化機能により、マイクロタスク内のローカルデータの終値保証が必要となるループを排他制御や同期制御を用いないで並列化し、オーバーヘッドを抑止することにより、プログラム全体の処理効率を向上させる自動並列化処理方式が開示されている。
【０００４】
また、特開平１１−１２０１５６号公報には、複数のプロセッサと記憶装置からなるマルチプロセッサシステムにおけるデータ通信方式において、通信バッファを介してデータを分割して送受信する方式が開示されている。
【０００５】
【特許文献１】特開平６−８９１８８号公報
【特許文献２】特開平１１−１２０１５６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本発明の目的は、無駄なプログラムの実行完了待ち時間を防止し、並列度を上げることができるマルチコアシステムを提供することである。
【課題を解決するための手段】
【０００７】
本発明のマルチコアシステムは、第１のプログラムを実行することにより第１のデータを書き込み、その書き込み完了後に書き込み完了通知を通知する第１のコアと、第２のプログラムを実行することにより前記書き込まれた第１のデータを参照する第２のコアと、前記第１のプログラムの実行により前記第１のコアから前記書き込み完了通知が通知されると、前記第１のプログラムが実行完了する前に前記第２のプログラムの実行開始を前記第２のコアに指示するスケジューラとを有することを特徴とする。
【発明の効果】
【０００８】
第１のプログラムの実行による第１のデータの書き込み完了後において、第１のプログラムが実行完了する前に第２のプログラムの実行を開始することができるので、無駄な第１のプログラムの実行完了待ち時間を防止し、並列度を上げることができる。
【発明を実施するための最良の形態】
【０００９】
（参考技術）
図１は、マルチコアシステムの構成例を示す図である。マルチコアシステムは、第１のコア１０１、第２のコア１０２、第３のコア１０３、共有メモリ１０４、及び割り込みコントローラ（ＩＲＣ）１０５を有する。共有メモリ１０４は、プログラム実行管理テーブル１４１及びプログラム（プログラムＡ，Ｂ，Ｃを含む）１４２を記憶する。第１のコア１０１は、ＯＳ（ドライバ）１１１及び制御プログラム１１２を記憶する。第２のコア１０２は、ＯＳ（ドライバ）１２１及びプログラム１２２を記憶する。第３のコア１０３は、ＯＳ（ドライバ）１３１及びプログラム１３２を記憶する。プログラム１２２及び１３２は、それぞれ共有メモリ１０４からロードして実行するプログラムＡ，Ｂ及びＣのうちのいずれか１つである。バス１０６には、第１のコア１０１、第２のコア１０２、第３のコア１０３、共有メモリ１０４及び割り込みコントローラ１０５が接続される。割り込みコントローラ１０５は、第１のコア１０１、第２のコア１０２及び／又は第３のコア１０３に割り込み信号ＩＲＱを出力することができる。
【００１０】
図２は、図１のマルチコアシステムの処理例を示すタイムチャートである。図２、図３及び図７のデータ１〜データ６において、実線はデータ書き込みを示し、破線はデータ参照を示す。プログラムＡでは、データ１及びデータ２が参照され、データ３及びデータ４が書き込まれる。その後に実行されるプログラムＢでは、データ３が参照され、データ５が書き込まれる。その後に実行されるプログラムＣでは、データ５が参照され、データ６が書き込まれる。
【００１１】
プログラムＢでは、プログラムＡにより書き込まれたデータ３を参照するため、プログラムＢはプログラムＡの実行完了を待ってから実行を開始する必要がある。そのため、プログラムＢを実行可能な他のコアが存在するにもかかわらず、無駄な実行完了待ち時間２０１が発生する。また、プログラムＣでは、プログラムＢにより書き込まれたデータ５を参照するため、プログラムＣはプログラムＢの実行完了を待ってから実行を開始する必要がある。上記の関係がデータの依存関係である。
【００１２】
第１のコア１０１は、制御プログラム１１２を実行することにより、共有メモリ１０４内のプログラム実行管理テーブル１４１からプログラムＡ，Ｂ，Ｃ間のデータの依存関係情報１５０を読み出し、次のプログラムを実行すべきコア１０２又は１０３を決定する。
【００１３】
プログラムＡは、第２のコア１０２により実行される。第２のコア１０２は、共有メモリ１０４からプログラムＡをロードし、プログラムＡをプログラム１２２として実行開始し、実行が完了すると、実行完了通知１５２をバス１０６を介して割り込みコントローラ（ＩＲＣ）１０５に出力する。すると、割り込みコントローラ（ＩＲＣ）１０５は、割り込み信号ＩＲＱにより実行完了通知を第１のコア１０１に出力する。すると、第１のコア１０１は、制御プログラム１１２の処理により、実行待ち状態の例えば第２のコア１０２に次のプログラムＢを割り当てる指示データ１５１をバス１０６を介して割り込みコントローラ（ＩＲＣ）１０５に出力する。すると、割り込みコントローラ（ＩＲＣ）１０５は、割り込み信号ＩＲＱにより、次のプログラムＢの実行開始を第２のコア１０２に指示する。すると、第２のコア１０２は、共有メモリ１０４からプログラムＢをロードし、プログラムＢをプログラム１２２として実行開始し、実行が完了すると、実行完了通知１５２をバス１０６を介して割り込みコントローラ（ＩＲＣ）１０５に出力する。すると、割り込みコントローラ（ＩＲＣ）１０５は、割り込み信号ＩＲＱにより実行完了通知を第１のコア１０１に出力する。すると、第１のコア１０１は、制御プログラム１１２の処理により、実行待ち状態の例えば第２のコア１０２に次のプログラムＣを割り当てる指示データ１５１をバス１０６を介して割り込みコントローラ（ＩＲＣ）１０５に出力する。すると、割り込みコントローラ（ＩＲＣ）１０５は、割り込み信号ＩＲＱにより、次のプログラムＣの実行開始を第２のコア１０２に指示する。すると、第２のコア１０２は、共有メモリ１０４からプログラムＣをロードし、プログラムＣをプログラム１２２として実行開始し、実行が完了すると、実行完了通知１５２をバス１０６を介して割り込みコントローラ（ＩＲＣ）１０５に出力する。すると、割り込みコントローラ（ＩＲＣ）１０５は、割り込み信号ＩＲＱにより実行完了通知を第１のコア１０１に出力する。
【００１４】
以上のように、マルチコアシステムは、第１のコア１０１をマルチコア制御用コアとして、残りの第２のコア１０２及び第３のコア１０３をターゲットプログラムの実行用コアとして割り当てる。制御用コア１０１は、プログラムの依存関係や実行順序が登録されているプログラム実行管理テーブル１４１を参照し、このスケジュールに従って実行待ち状態のプログラム実行用のコア１０２又は１０３にプログラムを順に割り当てる。実行用コア１０２又は１０３は、これに従いプログラムを実行する。実行プログラム（バイナリコード）１４２とプログラム実行管理テーブル１４１の情報は、プログラム（タスク）間で共有するデータの依存関係を抽出して並列に実行可能なプログラムを生成できるマルチコア用コンパイラ４０１（図４）及びリンカを用いて生成される。
【００１５】
制御用コア１０１はプログラム実行管理テーブル１４１を参照し、実行待ち状態にある例えば第２のコア１０２に対して次に実行するプログラムＡの実行を指示する。指示は、割り込みコントローラ（ＩＲＣ）１０５を介して行われ、割り込みコントローラ（ＩＲＣ）１０５がターゲットとなる第２のコア１０２に対して次のプログラムＡの起動を通知する。プログラムＡの実行を指示された第２のコア１０２は、やがてプログラムＡの実行を完了すると、実行完了を割り込みコントローラ（ＩＲＣ）１０５に通知する。割り込みコントローラ（ＩＲＣ）１０５は、制御用コア１０１に対して割り込み、ターゲットとなった第２のコア１０２が指定されたプログラムＡの実行を完了したことを通知する。この実行完了通知の前に、制御用コア１０１は、次の実行可能なプログラムＢがあれば、実行待ち状態にある例えば第３のコア１０３に対して、このプログラムＢの実行を指示することができる。ただし、プログラムＡ及びプログラムＢの間にデータ依存関係がある場合は、プログラムＢはプログラムＡの実行完了を待ってから実行される必要がある。このようなシーケンスを繰り返して、プログラムの実行が行われる。このようなケースのうち、プログラムＡ及びプログラムＢの間にデータ依存関係がある場合のタイムチャートを図２に示す。このケースのように、実際にはプログラムＢが参照するデータ３の書き込みが完了しているにもかかわらず、プログラムＡの実行が完了することを待ってから、プログラムＢを実行する必要があり、無駄な待ち時間２０１が発生している。
【００１６】
図３は、図２のプログラムＡ，Ｂ，Ｃをシングルコアが実行する場合のタイムチャートである。コアは、プログラムＡを実行することにより、データ１及びデータ２を参照し、データ３及びデータ４を書き込む。プログラムＡの実行完了後、コアは、プログラムＢを実行し、データ３を参照し、データ５を書き込む。プログラムＢの実行完了後、コアは、プログラムＣを実行し、データ５を参照し、データ６を書き込む。
【００１７】
図２のマルチコアシステムの処理は、図３のシングルコアの処理と比較して、マルチコア構成のメリットを生かせていないことが分かる。
【００１８】
図４は、図１のマルチコアシステムの処理例を示すフローチャートである。ステップ４０２では、コンパイラ４０１は、プログラム間で共有するデータの依存関係を抽出して並列に実行可能なプログラムＡ，Ｂ，Ｃを生成する。
【００１９】
次に、ステップ４０３では、第１のコア１０１は、プログラムを実行させるコアを選定し、割り込みコントローラ（ＩＲＣ）１０５に通知する。例えば、プログラムＡを実行させるコアとして第２のコア１０２を選定する。
【００２０】
次に、ステップ４０４では、割り込みコントローラ（ＩＲＣ）１０５は、プログラムを実行させるコア１０２又は１０３を起動する。例えば、第２のコア１０２を起動する。
【００２１】
次に、ステップ４０５では、起動された第２のコア１０２又は第３のコア１０３は、プログラムを実行開始する。例えば、第２のコア１０２は、プログラムＡを実行開始する。
【００２２】
次に、ステップ４０６では、第２のコア１０２又は第２のコア１０３は、プログラムの実行完了を割り込みコントローラ（ＩＲＣ）１０５に通知する。例えば、第２のコア１０２は、プログラムＡの実行完了を通知する。
【００２３】
次に、ステップ４０７では、割り込みコントローラ（ＩＲＣ）１０５は、第１のコア１０１に割り込み、プログラムを実行完了したコアを通知する。例えば、割り込み信号ＩＲＱにより、第２のコア１０２がプログラムＡの実行を完了した旨を第１のコア１０１に通知する。
【００２４】
次に、ステップ４０８では、第１のコア１０１は、プログラムの実行完了が通知されたか否かを判定する。実行完了が通知されていなければ、ステップ４０３に戻る。ステップ４０３では、次のプログラムを実行させるコアを選定する。ただし、データ依存関係がある場合には、次のプログラムを実行すべきコアを選定することができず、プログラムの実行完了通知を待ってから、次のプログラムを実行させるコアを選定する。
【００２５】
以上のように、プログラムＡ，Ｂ，Ｃが扱うデータ間にデータの依存性がある場合は、依存性のあるデータを参照するプログラムは、そのデータを書き込むプログラムが実行完了するまで実行開始を待つ必要がある。しかし、本質的にはそのデータを書き込むプログラムが実行完了せずとも、そのデータの書き込みが完了した時点で、そのデータを参照するプログラムは直ちに実行を開始することが可能である。そのため、本質的には必要の無い、無駄な実行完了待ち時間２０１が発生し、並列度を下げる要因となっている。以下、上記の課題を解決するための実施形態を説明する。
【００２６】
（実施形態）
図５は、本発明の実施形態によるマルチコアシステムの構成例を示す図である。図５のマルチコアシステムは、図１のマルチコアシステムに対して、割り込みコントローラ５０５内のプログラム実行管理テーブル５６１及びスケジューラ５６２、第２のコア５０２のプログラム５２２内の書き込み完了通知部５２３、並びに第３のコア５０３のプログラム５３２内の書き込み完了通知部５３３が追加されている。
【００２７】
マルチコアシステムは、第１のコア５０１、第２のコア５０２、第３のコア５０３、共有メモリ５０４、及び割り込みコントローラ（ＩＲＣ）５０５を有する。共有メモリ５０４は、プログラム実行管理テーブル５４１及びプログラム（プログラムＡ，Ｂ，Ｃを含む）５４２を記憶する。第１のコア５０１は、ＯＳ（ドライバ）５１１及び制御プログラム５１２を記憶する。第２のコア５０２は、ＯＳ（ドライバ）５２１及びプログラム５２２を記憶する。プログラム５２２は、書き込み完了通知部５２３を有する。第３のコア５０３は、ＯＳ（ドライバ）５３１及びプログラム５３２を記憶する。プログラム５３２は、書き込み完了通知部５３３を有する。プログラム５２２及び５３２は、それぞれ共有メモリ５０４からロードして実行するプログラムＡ，Ｂ及びＣのうちのいずれか１つである。バス５０６には、第１のコア５０１、第２のコア５０２、第３のコア５０３、共有メモリ５０４及び割り込みコントローラ５０５が接続される。割り込みコントローラ５０５は、第１のコア５０１、第２のコア５０２及び／又は第３のコア５０３に割り込み信号ＩＲＱを出力することができる。第１のコア５０１、第２のコア５０２及び第３のコア５０３は、例えばプロセッサ（ＤＳＰを含む）である。ＤＳＰは、デジタルシグナルプロセッサである。上記のプログラムＡ，Ｂ，Ｃは、それぞれタスク及び／又はスレッドを含む。
【００２８】
プログラム実行管理テーブル５４１及び５６１は、プログラムＡ，Ｂ，Ｃ間のデータ依存関係を記憶する。書き込み完了通知部５２３及び５３３は、データの書き込みが完了すると書き込み完了通知を割り込みコントローラ（ＩＲＣ）５０５内のスケジューラ５６２に通知する。スケジューラ５６２は、実行中のプログラムと、次に実行するプログラムのデータ依存関係を監視し、データ書き込みが完了したことを通知する書き込み完了通知を受けて、次に実行するプログラムが参照するデータが全て書き込み完了していれば、次のプログラム実行を第２のコア５０２又は第３のコア５０３に指示する。
【００２９】
図６は、図５の割り込みコントローラ（ＩＲＣ）５０５の構成例を示す図である。割り込みコントローラ（ＩＲＣ）５０５は、スケジューラ５６２、メモリ６０１、スコアボード６０２及び割り込み制御部６０３を有する。また、割り込みコントローラ（ＩＲＣ）５０５は、書き込み完了通知６１１及び実行完了通知６１２を入力し、割り込み信号ＩＲＱを出力する。具体的には、スケジューラ５６２は、書き込み完了通知６１１を直接入力する。また、スケジューラ５６２は、割り込み制御部６０３を介して、実行完了通知６１２を入力し、割り込み信号ＩＲＱを出力する。書き込み完了通知６１１及び実行完了通知６１２は、第２のコア５０２又は第３のコア５０３からバス５０６を介して入力される。スケジューラ５６２、メモリ６０１、スコアボード６０２及び割り込み制御部６０３は、相互にデータの入出力を行うことができる。メモリ６０１は、プログラム実行管理テーブル５６１を記憶する。
【００３０】
プログラム実行管理テーブル５６１は、図２を参照しながら説明したプログラムＡ，Ｂ，Ｃ間のデータ依存関係を記憶する。例えば、プログラム実行管理テーブル５６１は、プログラムＡにより書き込まれたデータ３がプログラムＢにより参照されることを示す、プログラムＡ及びプログラムＢのデータ３の依存関係を記憶する。スケジューラ５６２は、プログラム実行管理テーブル５６１に応じて、例えばプログラムＢの実行開始を第３のコア５０３に指示する。
【００３１】
スコアボード６０２は、各プログラムＡ，Ｂ，Ｃにおいて各データの書き込みが完了したか否かを記憶する。例えば、スコアボード６０２は、プログラムＡを実行することによりデータ３の書き込みが完了したか否かを記憶する。スケジューラ５６２は、スコアボード６０２のプログラムＡの欄において、データ３の書き込みが完了していないときにはデータ３の欄を「１」にし、データ３の書き込みが完了したときにはデータ３の欄を「０」にする。すなわち、スケジューラ５６２は、例えば第２のコア５０２からプログラムＡのデータ３の書き込み完了通知６１１が通知されると、プログラムＡを実行することによりデータ３の書き込みが完了したことをスコアボード６０２に記録する。
【００３２】
図７は、図５のマルチコアシステムの処理例を示すタイムチャートである。データ１〜データ６において、実線はデータ書き込みを示し、破線はデータ参照を示す。図２と同様に、プログラムＡでは、データ１及びデータ２が参照され、データ３及びデータ４が書き込まれる。その後に実行されるプログラムＢでは、データ３が参照され、データ５が書き込まれる。その後に実行されるプログラムＣでは、データ５が参照され、データ６が書き込まれる。
【００３３】
プログラムＢでは、プログラムＡにより書き込まれたデータ３を参照するため、プログラムＢは、プログラムＡの実行完了前に、プログラムＡにおけるデータ３の書き込み完了後に実行を開始する。プログラムＢは、プログラムＡの実行完了前に、実行を開始することができるので、図２のような実行完了待ち時間２０１を防止することができる。また、プログラムＣでは、プログラムＢにより書き込まれたデータ５を参照するため、プログラムＣはプログラムＢにおけるデータ５の書き込み完了後に実行を開始する。上記の関係がデータの依存関係である。このデータ依存関係は、プログラム実行管理テーブル５４１及び５６１に記憶される。
【００３４】
第１のコア５０１は、制御プログラム５１２を実行することにより、共有メモリ５０４内のプログラム実行管理テーブル５４１からプログラムＡ，Ｂ，Ｃ間のデータの依存関係を読み出し、プログラムを実行すべき初期のコア５０２又は５０３を決定する。
【００３５】
プログラムＡは、例えば第２のコア５０２により実行される。第２のコア５０２は、共有メモリ５０４からプログラムＡをロードし、プログラムＡをプログラム５２２として実行開始する。第２のコア５０２は、プログラムＡ内の書き込み完了通知部５２３の処理により、プログラムＡのデータ３の書き込みが完了すると、書き込み完了通知６１１を割り込みコントローラ（ＩＲＣ）５０５に出力する。すると、割り込みコントローラ（ＩＲＣ）５０５は、プログラム実行管理テーブル５６１及びスコアボード６０２を参照し、割り込み信号ＩＲＱにより、次のプログラムＢの実行開始を実行待ち状態の第３のコア５０３に指示する。割り込みコントローラ（ＩＲＣ）５０５は、プログラム実行管理テーブル５６１を参照することにより、実行待ち状態の次のプログラムＢを実行させるコアを決定することができる。また、割り込みコントローラ（ＩＲＣ）５０５は、スコアボード６０２を参照することにより、次のプログラムＢで参照するデータのすべてが書き込み完了したか否かを判断し、すべての書き込みが完了すると、第３のコア５０３に実行開始を指示することができる。
【００３６】
上記の指示により、第３のコア５０３は、共有メモリ５０４からプログラムＢをロードし、プログラムＢをプログラム５３２として実行開始する。プログラムＢは、プログラムＡの実行完了前において、プログラムＡのデータ３の書き込み完了後に実行を開始することができるので、図２の実行完了待ち時間２０１を防止することができる。
【００３７】
次に、第２のコア５０２は、プログラムＡの実行が完了すると、実行完了通知６１２をバス５０６を介して割り込みコントローラ（ＩＲＣ）５０５に出力する。すると、割り込みコントローラ（ＩＲＣ）５０５は、割り込み信号ＩＲＱによりプログラムＡの実行完了通知を第１のコア５０１に出力する。
【００３８】
次に、第３のコア５０３は、プログラムＢの実行が完了すると、実行完了通知６１２をバス５０６を介して割り込みコントローラ（ＩＲＣ）５０５に出力する。すると、割り込みコントローラ（ＩＲＣ）５０５は、割り込み信号ＩＲＱによりプログラムＢの実行完了通知を第１のコア５０１に出力する。それと共に、割り込みコントローラ（ＩＲＣ）５０５は、プログラム実行管理テーブル５６１及びスコアボード６０２を参照し、割り込み信号ＩＲＱにより、次のプログラムＣの実行開始を実行待ち状態の第２のコア５０２に指示する。この際、割り込みコントローラ（ＩＲＣ）５０５は、次のプログラムＣで参照するデータのすべてが書き込み完了したときに、第２のコア５０２に実行開始を指示する。
【００３９】
上記の指示により、第２のコア５０２は、共有メモリ５０４からプログラムＣをロードし、プログラムＣをプログラム５２２として実行開始する。次に、第２のコア５０２は、プログラムＣの実行が完了すると、実行完了通知６１２をバス５０６を介して割り込みコントローラ（ＩＲＣ）５０５に出力する。すると、割り込みコントローラ（ＩＲＣ）５０５は、割り込み信号ＩＲＱによりプログラムＣの実行完了通知を第１のコア５０１に出力する。
【００４０】
以上のように、本実施形態のマルチコアシステムでは、始めにプログラマはプログラム間で共有するデータ領域に対して、書き込み完了を示すコードを予め埋め込んでおく。コンパイラ８０１（図８）及びリンカでは、図４の場合に加えて、この書き込み完了コードを解読し、プログラム実行管理テーブル５４１及び５６１にデータ依存関係のある共有データ領域についての情報も記録しておく。スケジューラ５６２を内蔵した割り込みコントローラ（（ＩＲＣ）５０５は最初に共有メモリ５０４のプログラム実行管理テーブル５４１を参照し、次に実行すべきプログラムＡを導出し、実行待ち状態にある例えば第２のコア５０２に対してプログラムＡの実行を指示する。ターゲットとなった第２のコア５０２は、プログラムＡの実行中に、ソースコードに埋め込まれた共有データ領域への書き込み完了の指示があれば、これをスケジューラ５６２に通知する。スケジューラ５６２は、次に実行するプログラムＢが先行するプログラムＡの共有データ領域を参照している（データ依存関係がある）場合においても、この共有データ領域の書き込み完了通知６１１を持って、先行プログラムＡの実行完了を待たずとも、後続のプログラムＢを他の実行待ち状態にある例えば第３のコア５０３に実行を指示することが可能となる。プログラムＡにおいて依存関係にあるデータ３の書き込みが終わった時点で、後続のプログラムＢを実行することにより、図２の無駄な待ち時間２０１が解消されていることが分かる。
【００４１】
図６に示すように、高速な割り込み制御を行うために、スケジューラ５６２を割り込みコントローラ（ＩＲＣ）５０５内部に実装している。割り込みコントローラ（ＩＲＣ）５０５内のローカルメモリ６０１には、プログラム実行管理テーブル５６１が設けられる。プログラム実行管理テーブル５６１は、共有メモリ５０４内のプログラム実行管理テーブル５４１をコピーしたものである。スケジューラ５６２は、プログラム実行管理テーブル５６１を参照することにより、次に実行するプログラムを算出し、割り込み信号ＩＲＱを使用して、実行待ち状態にあるコアに対してプログラムの実行を指示する機能を有する。また、スケジューラ５６２は、プログラム実行管理テーブル５６１に記録された共有データ領域情報を参照して、このプログラムが書き込みを行う共有メモリ領域情報を、スコアボード６０２に記録する。
【００４２】
スケジューラ５６２は、プログラムを実行中のコアから共有データ領域への書き込み完了通知６１１を検出すると、スコアボード６０２から該当するデータの書き込み未完了情報をクリアし、次に実行すべきプログラムを選択する際には、プログラム実行管理テーブル５６１とスコアボード６０２を参照し、次に実行するプログラムが存在し、共有データ領域の依存関係が解消されていれば、他の実行完了待ちのコアに対して、この次に実行すべきプログラムの実行を、割り込み信号ＩＲＱを介して指示する。
【００４３】
なお、スケジューラ５６２は、必ずしも割り込みコントローラ（ＩＲＣ）５０５に内蔵されていなくてよい。また、スケジューラ５６２は、必ずしもハードウェアによる実装を必要とするものではなく、ソフトウェアでも実装可能である。
【００４４】
図８は、図５のマルチコアシステムの処理例を示すフローチャートである。ステップ８０２では、コンパイラ８０１は、プログラム間で共有するデータの依存関係を抽出して並列に実行可能なプログラムＡ，Ｂ，Ｃを生成する。
【００４５】
次に、ステップ８０３では、第１のコア５０１は、プログラムを実行させるコアの初期設定を行い、割り込みコントローラ（ＩＲＣ）５０５に通知する。例えば、プログラムＡを実行させるコアとして第２のコア５０２を選定する。
【００４６】
次に、ステップ８０４では、割り込みコントローラ（ＩＲＣ）５０５は、プログラムを実行させるコアを選定する。例えば、第２のコア５０２を選定する。
【００４７】
次に、ステップ８０５では、割り込みコントローラ（ＩＲＣ）５０５は、ステップ８０９でプログラムの実行完了通知６１２が第２のコア５０２又は第３のコア５０３から通知されたか否かを判定する。実行完了通知６１２が通知されていなければステップ８０６へ進み、実行完了通知６１２が通知されていれば、割り込みコントローラ（ＩＲＣ）５０５は、第１のコア５０１に上記のプログラムの実行完了通知を通知する。
【００４８】
ステップ８０６では、割り込みコントローラ（ＩＲＣ）５０５は、プログラムを実行させるコアを起動する。例えば、第２のコア５０２を起動する。
【００４９】
次に、ステップ８０７では、起動された第２のコア５０２又は第３のコア５０３は、プログラムを実行開始する。例えば、第２のコア５０２は、プログラムＡを実行開始する。
【００５０】
次に、ステップ８０８では、実行中の第２のコア５０２又は第３のコア５０３は、共有データの書き込みが完了すると、書き込み完了通知６１１を割り込みコントローラ（ＩＲＣ）５０５に通知する。例えば、第２のコア５０２は、プログラムＡのデータ３の書き込みを完了すると、書き込み完了通知６１１を割り込みコントローラ（ＩＲＣ）５０５に通知する。ここで、書き込み完了通知部５２３及び５３３は、各共有データの書き込みが完了する度に、書き込み完了通知６１１を割り込みコントローラ（ＩＲＣ）５０５に通知する。その後、ステップ８０９及び８１０へ進む。
【００５１】
ステップ８１０では、割り込みコントローラ（ＩＲＣ）５０５は、データの依存関係を監視する。具体的には、割り込みコントローラ（ＩＲＣ）５０５は、第２のコア５０２又は第３のコア５０３からプログラム中のデータの書き込み完了通知６１１が通知されると、スコアボード６０２に当該プログラムの当該データの書き込みが完了した旨を記録する。
【００５２】
次に、ステップ８１１では、割り込みコントローラ（ＩＲＣ）５０５は、プログラム実行管理テーブル５６１及びスコアボード６０２を参照し、データの依存関係が解消されているか否かを判定する。次のプログラムで参照されるデータの書き込みがすべて完了していれば、データの依存関係が解消されていると判定することができる。データの依存関係が解消されていなければ、ステップ８１０へ戻り、割り込みコントローラ（ＩＲＣ）５０５は、データの依存関係を監視する。データ依存関係が解消されていれば、ステップ８０４へ戻り、割り込みコントローラ（ＩＲＣ）５０５は、プログラム実行管理テーブル５６１を参照し、次のプログラムを実行させるコアを選定する。例えば、次のプログラムＢを実行させるコアとして第３のコア５０３が選定される。
【００５３】
ステップ８０９では、第２のコア５０２又は第３のコア５０３は、プログラムの実行を完了すると、実行完了通知６１２を割り込みコントローラ（ＩＲＣ）５０５に通知し、ステップ８０５に戻る。ステップ８０５では、割り込みコントローラ（ＩＲＣ）５０５は、プログラムの実行完了により、次に実行すべきプログラムがある場合には、そのプログラムの実行開始を第２のコア５０２又は第３のコア５０３に指示する。
【００５４】
以上のように、本実施形態では、プログラムが安全にデータ書き込みの完了を認識するために、プログラム開発者がプログラムの中に、この完了を宣言する記述を追加する。プログラムを実行中の第２のコア５０２又は第３のコア５０３は、プログラム実行中にデータ書き込みが完了すると、書き込み完了通知６１１を割り込みコントローラ（ＩＲＣ）５０５に通知する。割り込みコントローラ（ＩＲＣ）５０５は、データ書き込みの完了をリアルタイムに認識し、このデータを参照するプログラムの実行を開始することができる。
【００５５】
本実施形態のマルチコアシステムは、プログラムＡを実行することによりデータ３を書き込み、その書き込み完了後に書き込み完了通知６１１を通知するコア５０２と、プログラムＢを実行することにより前記書き込まれたデータ３を参照するコア５０３とを有する。スケジューラ５６２は、プログラムＡの実行によりコア５０２から書き込み完了通知６１１が通知されると、プログラムＡが実行完了する前にプログラムＢの実行開始をコア５０３に指示する。
【００５６】
スケジューラ５６２は、プログラムＡ及びプログラムＢのデータ３の依存関係に応じて、プログラムＢの実行開始をコア５０３に指示する。
【００５７】
また、スケジューラ５６２は、プログラムＢを実行することにより参照するデータのすべての書き込み完了通知６１１が通知されると、プログラムＢの実行開始をコア５０３に指示する。
【００５８】
スケジューラ５６２がハードウェアである場合には、書き込み完了通知６１１は、ハードウェアの信号線により通知される。
【００５９】
また、スケジューラ５６２がソフトウェアである場合には、書き込み完了通知６１１は、ソフトウェアのプロトコルにより通知される。
【００６０】
プログラム実行管理テーブル５６１は、プログラムＡにより書き込まれたデータ３がプログラムＢにより参照されることを示す、プログラムＡ及びプログラムＢのデータ３の依存関係を記憶する。スケジューラ５６２は、プログラム実行管理テーブル５６１に応じて、プログラムＢの実行開始をコア５０３に指示する。
【００６１】
スコアボード６０２は、プログラムＡを実行することによりデータ３の書き込みが完了したか否かを記憶する。スケジューラ５６２は、コア５０２から書き込み完了通知６１１が通知されると、プログラムＡを実行することによりデータ３の書き込みが完了したことをスコアボード６０２に記録する。
【００６２】
スケジューラ５６２は、割り込み信号ＩＲＱによりプログラムＢの実行開始をコア５０３に指示する。例えば、コア５０２及びコア５０３は、それぞれプロセッサである。
【００６３】
本実施形態によれば、プログラムＡの実行によるデータ３の書き込み完了後において、プログラムＡが実行完了する前にプログラムＢの実行を開始することができるので、無駄なプログラムＡの実行完了待ち時間を防止し、並列度を上げることができる。
【００６４】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【図面の簡単な説明】
【００６５】
【図１】マルチコアシステムの構成例を示す図である。
【図２】図１のマルチコアシステムの処理例を示すタイムチャートである。
【図３】図２のプログラムＡ，Ｂ，Ｃをシングルコアが実行する場合のタイムチャートである。
【図４】図１のマルチコアシステムの処理例を示すフローチャートである。
【図５】本発明の実施形態によるマルチコアシステムの構成例を示す図である。
【図６】図５の割り込みコントローラ（ＩＲＣ）の構成例を示す図である。
【図７】図５のマルチコアシステムの処理例を示すタイムチャートである。
【図８】図５のマルチコアシステムの処理例を示すフローチャートである。
【符号の説明】
【００６６】
５０１  第１のコア
５０２  第２のコア
５０３  第３のコア
５０４  共有メモリ
５０５  割り込みコントローラ（ＩＲＣ）
５０６  バス
５６１  プログラム実行管理テーブル
５６２  スケジューラ
【図１】
2010152733.tif 000003
【図２】
2010152733.tif 000004
【図３】
2010152733.tif 000005
【図４】
2010152733.tif 000006
【図５】
2010152733.tif 000007
【図６】
2010152733.tif 000008
【図７】
2010152733.tif 000009
【図８】
2010152733.tif 000010