(57)【要約】  ＣＰＵ（＃０）は、第１の処理を実行する。第１の処理実行中に、ＣＰＵ（＃０）は、通知部（２０２）によって、第２の処理の実行要求と第１の処理が完了する推定時刻までの残余の時間を通知する。ＣＰＵ（＃１）は、取得部（２０３）によって第２の処理の実行要求と第１の処理が完了する推定時刻までの残余の時間を取得する。ＣＰＵ（＃１）は、第２の処理を実行し、通知部（２０６）によって、第２の処理を開始した時刻に残余の時間を加えた第１の処理の完了推定時刻以後に、第２の処理の結果をＣＰＵ（＃０）へ通知する。
2012001777.tif 000002
【特許請求の範囲】
【請求項１】
マルチコアのうち第１の処理を実行する第１のコアから、第２の処理の実行要求と前記実行要求が実行される時刻から前記第１の処理が完了する推定時刻までの残余の時間とを第２のコアにより取得する取得手段と、
前記取得手段によって取得された前記第２の処理を開始した時刻に前記残余の時間を加えた第１の処理の完了推定時刻以後に、前記第２の処理の結果を前記第２のコアから前記第１のコアへ通知する通知手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
【請求項２】
前記第１の処理の完了推定時刻より前に、前記第２のコアにより第２の処理を完了した場合、前記残余の時間から前記第２の処理の完了にかかった時間を減じた待機時間を算出する算出手段と、
前記算出手段による算出時点の時刻から前記算出手段によって算出された前記待機時間が経過したことを前記第２のコアにより検出する検出手段と、をさらに備え、
前記通知手段は、
前記検出手段によって前記待機時間が経過したことが検出された場合、前記第２の処理の結果を前記第２のコアから前記第１のコアへ通知することを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項３】
前記取得手段は、
第３の処理を実行中の第３のコアにより、前記第２のコアが前記第１のコアに前記第２の処理の結果を通知した時に、前記第２の処理の結果を用いて前記第１のコアが実行する第４の処理が完了する前記第４の処理の推定時間を取得し、
前記通知手段は、
前記取得手段による前記第４の処理の推定時間の取得時点の時刻に前記第４の処理の推定時間を加えた前記第４の処理の完了推定時刻以後に、前記第３の処理の結果を前記第３のコアから前記第１のコアへ通知することを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項４】
前記第４の処理の完了推定時刻より前に、前記第３のコアにより第３の処理を完了した場合、前記第４の処理の推定時間から、前記取得手段による前記第４の処理の推定時間の取得時点から前記第３の処理の完了までの経過時間を減じた待機時間を算出する算出手段と、
前記算出手段による算出時点の時刻から前記算出手段によって算出された前記待機時間が経過したことを前記第３のコアにより検出する検出手段と、をさらに備え、
前記通知手段は、
前記検出手段によって前記待機時間が経過したことが検出された場合、前記第３のコアが前記第３の処理の結果を前記第１のコアへ通知することを特徴とする請求項３に記載のマルチコアプロセッサシステム。
【請求項５】
前記取得手段は、
前記第２のコアが複数存在する場合、複数の前記第２のコアが前記第１のコアに前記第２の処理の結果を通知した時に、前記第３のコアにより、前記第２のコアごとに存在する前記第４の処理の推定時間を取得し、
前記通知手段は、
前記取得手段による前記第４の処理の推定時間の取得時点の時刻に前記第４の処理の推定時間の合計を加えた前記第４の処理の完了推定時刻以後に、前記第３の処理の結果を前記第３のコアから前記第１のコアへ通知することを特徴とする請求項３に記載のマルチコアプロセッサシステム。
【請求項６】
前記第４の処理の完了推定時刻より前に、前記第３のコアにより第３の処理を完了した場合、前記第４の処理の推定時間の合計から、前記取得手段による前記第４の処理の推定時間の取得時点から前記第３の処理の完了までの経過時間を減じた待機時間を算出する算出手段と、
前記算出手段による算出時点の時刻から前記算出手段によって算出された前記待機時間が経過したことを前記第３のコアにより検出する検出手段と、をさらに備え、
前記通知手段は、
前記検出手段によって前記待機時間が経過したことが検出された場合、前記第３の処理の結果を前記第３のコアから前記第１のコアへ通知することを特徴とする請求項５に記載のマルチコアプロセッサシステム。
【請求項７】
マルチコアのうち第１の処理を実行する第１のコアから、第２の処理の実行要求と前記実行要求が実行される時刻から前記第１の処理が完了する推定時刻までの残余の時間とを第２のコアにより取得する取得工程と、
前記取得工程によって取得された前記第２の処理を開始した時刻に前記残余の時間を加えた第１の処理の完了推定時刻以後に、前記第２の処理の結果を前記第２のコアから前記第１のコアへ通知する通知工程と、
を前記第２のコアが実行することを特徴とする通信制御方法。
【請求項８】
マルチコアのうち第１の処理を実行する第１のコアから、第２の処理の実行要求と前記実行要求が実行される時刻から前記第１の処理が完了する推定時刻までの残余の時間とを第２のコアにより取得する取得工程と、
前記取得工程によって取得された前記第２の処理を開始した時刻に前記残余の時間を加えた第１の処理の完了推定時刻以後に、前記第２の処理の結果を前記第２のコアから前記第１のコアへ通知する通知工程と、
を前記第２のコアに実行させることを特徴とする通信制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コア間の通信を制御するマルチコアプロセッサシステム、通信制御方法、および通信制御プログラムに関する。
【背景技術】
【０００２】
従来、マルチコアプロセッサでの並列処理の一つの形態として、一つの処理が親処理となり、親処理を実行するコアから、他のコアに対して子処理を非同期に実行する形態が存在する。子処理を実行するコアは、処理が完了すると親処理を実行するコアに子処理の結果を通知し、親処理を実行するコアは、結果を用いて処理を継続する。このような並列処理の形態は、親子間の通信が子の起動と終了のタイミングに限られるため、コア間でキャッシュのコヒーレント機構を持たないマルチコアプロセッサシステムや、共有メモリを持たないような疎な結合のマルチコアプロセッサに適している。【０００３】
また、一つのコアで親処理を同時に一つだけ実行するようにし、それ以外のコアでは親処理から指示された子処理のみを実行するようにすることで、親処理から他のコアを制御することができる。この動作は、マルチコアプロセッサでそれぞれのプロセッサの能力が異なる非対称型のマルチコアプロセッサや、マルチコアプロセッサに対応したＯＳを搭載していないマルチコアプロセッサシステムでの並列処理の実現に適している。特に組込機器の分野では、並列処理を行う処理を複数同時に起動するケースはまだ少なく、単純なハードウェアで実現できるため、マルチコアプロセッサに対応したＯＳも不要なこの並列処理の形態が非常に適している。【０００４】
前述の他のコアの制御方法の一つとして、処理の完了する推定時間を予測しておき、推定時間を利用することで、効率的にマルチコアプロセッサを運用することができる。たとえば、他のコアからタスクがすべて終了すると予想される時間を収集し、収集された予測時間から処理を割り当てるコアを決定するという技術が開示されている（たとえば、下記特許文献１を参照。）。【０００５】
また、他の推定時間を利用する技術として、たとえば、リアルタイム性が要求されるシステムにおいて、ハードウェアやソフトウェアの遅延を予測し、予測された遅延時間を考慮してタイマを設定する。遅延時間が考慮されたタイマによる割り込み発生時にパケット送信することで、処理要求時間内にパケットを送信できるという技術が開示されている（たとえば、下記特許文献２を参照。）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平９−１６０８９０号公報
【特許文献２】特開２００１−１５６８４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述した従来技術では、子処理が完了したコアがコア間通信によって、親処理を実行中のコアに子処理の完了や子処理の結果を通知する。通知を受けた親処理を実行中のコアは、一旦親処理を中断し、割り込みに対応する処理や、通知された内容の受信処理、親処理等への復帰処理を実行する。このように、処理の中断、再開によるオーバーヘッドが発生するという問題があった。また、処理中に別の処理が挟まるため、キャッシュメモリの内容が別の処理の内容に書き変わってしまい、親処理復帰時にキャッシュのヒット率が低下し、処理効率が低下するという問題があった。【０００８】
前述の問題点は、コア数が多くなり多くの子処理を実行する場合、子処理の数に比例して通信の頻度が増加すると、より顕著となる。子処理の数が増加するにつれ、親処理が頻繁に子処理からの通信に妨害されるようになり、親処理を実行するコアの処理効率が低下するという問題があった。【０００９】
本発明は、上述した従来技術による問題点を解消するため、親処理を実行するコアが処理の途中で割り込まれることなく、処理効率を向上できるマルチコアプロセッサシステム、通信制御方法、および通信制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、開示のマルチコアプロセッサシステムは、マルチコアのうち第１の処理を実行する第１のコアから、第２の処理の実行要求と実行要求が実行される時刻から第１の処理が完了する推定時刻までの残余の時間とを第１のコアとは異なる第２のコアにより取得し、第２の処理を開始した時刻に残余の時間を加えた第１の処理の完了推定時刻以後に、第２の処理の結果を第２のコアから第１のコアへ通知する。
【発明の効果】
【００１１】
本マルチコアプロセッサシステム、通信制御方法、および通信制御プログラムによれば、親処理を実行するコアが処理の途中で割り込まれず、キャッシュメモリが不用意に書き変わられることを防ぎ、処理効率を向上できるという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】実施の形態１と実施の形態２にかかるマルチコアプロセッサシステム１００のハードウェアを示すブロック図である。
【図２】実施の形態１にかかるマルチコアプロセッサシステム１００の機能を示すブロック図である。
【図３】実施の形態１にかかるキャッシュメモリを有効活用できる親子間の処理の動作パターンを示す説明図である。
【図４】実施の形態１にかかるコア間通信のタイミングを制御するための設計時と実行時に行う処理を示す説明図である。
【図５】実施の形態１にかかるコア間通信のタイミングを制御した際の親子間の処理の実行例を示す説明図である。
【図６】プロファイルテーブル２０１の記憶内容の一例を示す説明図である。
【図７】実施の形態１にかかるコア間通信のタイミングを制御した際の親子間の処理を示すフローチャートである。
【図８】実施の形態２にかかるマルチコアプロセッサシステム１００の機能を示すブロック図である。
【図９】実施の形態２にかかるキャッシュメモリを有効活用できる親子間の処理の動作パターンを示す説明図である。
【図１０】実施の形態２にかかるコア間通信のタイミングを制御するための設計時と実行時に行う処理を示す説明図である。
【図１１】実施の形態２にかかるコア間通信のタイミングを制御した際の親子間の処理の実行例１を示す説明図である。
【図１２】実施の形態２にかかるコア間通信のタイミングを制御した際の親子間の処理の実行例２を示す説明図である。
【図１３】実施の形態２にかかるコア間通信のタイミングを制御した際の親子間の処理を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下に添付図面を参照して、本発明にかかるマルチコアプロセッサシステム、通信制御方法、および通信制御プログラムの好適な実施の形態を詳細に説明する。
【００１４】
（マルチコアプロセッサシステム１００のハードウェア）
図１は、実施の形態１と実施の形態２にかかるマルチコアプロセッサシステム１００のハードウェアを示すブロック図である。図１において、マルチコアプロセッサシステム１００は、ＣＰＵを複数搭載するＣＰＵｓ１０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０３と、を含む。また、マルチコアプロセッサシステム１００は、フラッシュＲＯＭ１０４と、フラッシュＲＯＭコントローラ１０５と、フラッシュＲＯＭ１０６と、を含む。また、マルチコアプロセッサシステム１００は、ユーザやその他の機器との入出力装置として、ディスプレイ１０７と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）１０８と、キーボード１０９と、を含む。また、各部はバス１１０によってそれぞれ接続されている。
【００１５】
ここで、ＣＰＵｓ１０１は、マルチコアプロセッサシステム１００の全体の制御を司る。ＣＰＵｓ１０１は、シングルコアのプロセッサを並列して接続したすべてのＣＰＵを指している。ＣＰＵｓ１０１は、ＣＰＵ＃０〜ＣＰＵ＃３を含む。ＣＰＵ＃０〜ＣＰＵ＃３は、それぞれ専用のキャッシュメモリを有する。また、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、シングルコアのプロセッサであるＣＰＵが並列されている形態を例にあげて説明する。
【００１６】
ＲＯＭ１０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ１０３は、ＣＰＵｓ１０１のワークエリアとして使用される。フラッシュＲＯＭ１０４は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、ＯＳを更新する場合、マルチコアプロセッサシステム１００は、Ｉ／Ｆ１０８によって新しいＯＳを受信し、フラッシュＲＯＭ１０４に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００１７】
フラッシュＲＯＭコントローラ１０５は、ＣＰＵｓ１０１の制御に従ってフラッシュＲＯＭ１０６に対するデータのリード／ライトを制御する。フラッシュＲＯＭ１０６は、フラッシュＲＯＭコントローラ１０５の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム１００を使用するユーザがＩ／Ｆ１０８を通して取得した画像データ、映像データなどである。フラッシュＲＯＭ１０６は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００１８】
ディスプレイ１０７は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ１０７は、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。
【００１９】
Ｉ／Ｆ１０８は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク１１１に接続され、ネットワーク１１１を介して他の装置に接続される。そして、Ｉ／Ｆ１０８は、ネットワーク１１１と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１０８には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２０】
キーボード１０９は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード１０９は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２１】
（実施の形態１にかかるマルチコアプロセッサシステム１００の機能）
次に、実施の形態１にかかるマルチコアプロセッサシステム１００の機能について説明する。図２は、実施の形態１にかかるマルチコアプロセッサシステム１００の機能を示すブロック図である。マルチコアプロセッサシステム１００は、通知部２０２と、取得部２０３と、算出部２０４と、検出部２０５と、通知部２０６と、取得部２０７と、を含む。この制御部となる機能（通知部２０２〜取得部２０７）は、記憶装置に記憶されたプログラムをＣＰＵ♯０、ＣＰＵ＃１が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図１に示したＲＯＭ１０２、ＲＡＭ１０３、フラッシュＲＯＭ１０４、フラッシュＲＯＭ１０６などである。または、Ｉ／Ｆ１０８を経由して他のＣＰＵが実行することにより、その機能を実現してもよい。
【００２２】
また、図２では、ＣＰＵ＃０の機能として、通知部２０２、取得部２０７が含まれ、ＣＰＵ＃１の機能として取得部２０３〜通知部２０６が含まれる。これはＣＰＵ＃０が特定の処理を実行し、特定の処理を親処理として、親処理から呼び出される子処理をＣＰＵ＃１が実行することを想定している。したがって、親処理をＣＰＵ＃１が実行し、子処理をＣＰＵ＃０が実行する場合であれば、ＣＰＵ＃１の機能として通知部２０２、取得部２０７が含まれ、ＣＰＵ＃０の機能として取得部２０３〜通知部２０６が含まれていてもよい。
【００２３】
また、本実施の形態での処理とは、プログラムの実行単位となるスレッドそのものであってもよいし、スレッド内の１関数でもよいし、関数内の１部分であってもよい。関数内の１部分として、たとえば、処理は、特定の条件を満たすまで繰り返すコード部分を指していてもよい。
【００２４】
また、マルチコアプロセッサシステム１００は、ＲＡＭ１０３等に格納されているプロファイルテーブル２０１にアクセス可能である。プロファイルテーブル２０１は、プロファイル等によって取得した、処理が完了する推定時間を格納している。プロファイルテーブル２０１の詳細は、図６にて後述する。
【００２５】
通知部２０２は、マルチコアのうち第１の処理を実行する第１のコアにより、第２の処理の実行要求と実行要求が実行される時刻から第１の処理が完了する推定時刻までの残余の時間とを第２のコアに通知する機能を有する。第１の処理とは、たとえば、親処理であり、第２の処理は子処理である。たとえば、通知部２０２は、親処理を実行するＣＰＵ＃０により、子処理の実行要求と実行要求の時刻から親処理が完了するまでの残余の時間Ａ１を、ＣＰＵ＃１に通知する。なお、通知した内容は、ＣＰＵ＃０のレジスタ、キャッシュメモリなどに記憶されてもよい。
【００２６】
取得部２０３は、第１のコアから、第２の処理の実行要求と実行要求が実行される時刻から第１の処理が完了する推定時刻までの残余の時間とを第１のコアとは異なる第２のコアにより取得する機能を有する。たとえば、取得部２０３は、ＣＰＵ＃０から、子処理の実行要求と実行要求の時刻から親処理が完了するまでの残余の時間Ａ１を、ＣＰＵ＃１により取得する。なお、取得した内容は、ＣＰＵ＃１のレジスタ、キャッシュメモリなどに記憶される。
【００２７】
算出部２０４は、第１の処理の完了推定時刻より前に、第２のコアにより第２の処理を完了した場合、残余の時間から第２の処理の完了にかかった時間を減じた待機時間を算出する機能を有する。たとえば、算出部２０４は、親処理が完了する推定時刻より前に、ＣＰＵ＃１により子処理を完了した場合、残余の時間Ａ１から子処理の完了にかかった時間Ｃ１を減じた待機時間（Ａ１−Ｃ１）を算出する。なお、算出値は、ＣＰＵ＃１のレジスタ、キャッシュメモリなどに記憶される。
【００２８】
検出部２０５は、算出部２０４による算出時点の時刻から算出部２０４によって算出された待機時間が経過したことを第２のコアにより検出する機能を有する。たとえば、検出部２０５は、ＣＰＵ＃１の待機時間の算出後から、待機時間（Ａ１−Ｃ１）が経過したことをＣＰＵ＃１により検出する。具体的な検出方法としては、ＯＳの機能であるタイマを利用してもよいし、ＣＰＵ＃１等のクロックパルスを計数するカウンタを利用してもよい。本実施の形態では、ＯＳの機能であるタイマを利用し、タイマに算出された待機時間を設定し、タイマが満了したことで、待機時間が経過したことを検出する。なお、検出されたという情報は、ＣＰＵ＃１のレジスタ、キャッシュメモリなどに記憶される。
【００２９】
通知部２０６は、取得部２０３によって取得された第２の処理を開始した時刻に残余の時間を加えた第１の処理の完了推定時刻以後に、第２の処理の結果を第２のコアから第１のコアへ通知する機能を有する。また、通知部２０６は、検出部２０５によって待機時間が経過したことが検出された場合に、第２のコアから第１のコアへ通知してもよい。たとえば、通知部２０６により、子処理を開始した時刻に残余の時間Ａ１を加えた第１の処理の完了推定時刻以後に、子処理の結果をＣＰＵ＃１によりＣＰＵ＃０へ通知する。なお、通知した内容は、ＣＰＵ＃１のレジスタ、キャッシュメモリなどに記憶されてもよい。
【００３０】
取得部２０７は、通知部２０６によって通知された結果を取得する機能を有する。たとえば、取得部２０７により、ＣＰＵ＃１によって通知した子処理の結果をＣＰＵ＃０により取得する。なお、取得した内容は、ＣＰＵ＃０のレジスタ、キャッシュメモリなどに記憶される。
【００３１】
図３は、実施の形態１にかかるキャッシュメモリを有効活用できる親子間の処理の動作パターンを示す説明図である。図３では、時刻ｔ０にてＣＰＵ＃０は親処理を実行しており、ＣＰＵ＃１〜ＣＰＵ＃３は親処理からの実行要求を受けて子処理１〜子処理３を実行している。具体的には、ＣＰＵ＃１は、時刻ｔ１にて子処理１を実行し、ＣＰＵ＃２は、時刻ｔ２にて子処理２を実行し、ＣＰＵ＃３は、時刻ｔ３にて子処理３を実行している。
【００３２】
図３では、ＣＰＵ＃１、ＣＰＵ＃２が、親処理が待ちとなる時刻ｔ４より前に処理が完了した場合を想定している。ＣＰＵ＃１、ＣＰＵ＃２は、親処理が待ちとなる時刻ｔ４まで待機し、時刻ｔ４にてＣＰＵ＃０に子処理１、子処理２の結果を通知する。通知を受けたＣＰＵ＃０は、時刻ｔ４から時刻ｔ５にかけてＣＰＵ＃１、ＣＰＵ＃２に対応する割り込み処理をまとめて行い、時刻ｔ５から時刻ｔ６にかけて子処理１と子処理２の結果の受信処理を行い、時刻ｔ６から時刻ｔ７にかけて復帰処理を行う。子処理３を実行しているＣＰＵ＃３は、子処理３が完了した時刻ｔ８の時点で、時刻ｔ４を越えているため、そのままＣＰＵ＃０に子処理３の結果を通知する。
【００３３】
このように、ＣＰＵ＃０が時刻ｔ０から時刻ｔ４の間で親処理を実行している間に子処理が完了した場合、子処理を実行しているＣＰＵは、親処理がまだ実行中であるとして待機する。これにより、ＣＰＵ＃０の親処理の処理途中の状態を保存しているキャッシュメモリの内容が一旦割り込み処理や子処理の結果で書き変えられてしまうのを防ぐことができる。また、割り込み処理が親処理の終了時にまとめて行われるため、割り込み回数を減らすことができる。
【００３４】
図４は、実施の形態１にかかるコア間通信のタイミングを制御するための設計時と実行時に行う処理を示す説明図である。図４では、図３にて示した動作を実現するために要求される設計時の処理と実行時の処理とを示している。符号４０１にて示す処理群が、設計時と実行時に行われる処理４０３〜処理４０６を示しており、符号４０２にて示す説明図が、処理４０３〜処理４０６に対応する処理の内容を示している。設計時に行われる処理として処理４０３、処理４０４があり、実行時に行われる処理として処理４０５、処理４０６がある。
【００３５】
処理４０３にて、プロファイラまたは設計者は、親子間の処理の通信動作をパターン化する。たとえば、プロファイラは、特定の処理から呼び出された処理が存在した場合に、前者の処理を親処理として、後者の処理を子処理として記憶しておく。符号４０２で示す説明図では、ＣＰＵ＃０で実行する処理を親処理、ＣＰＵ＃１で実行する処理を子処理として記憶する。続けて、処理４０４にて、プロファイラは、シミュレーションなどで動かした結果から、親処理の完了する推定時間（Ａ）を取得する。
【００３６】
実行時には、処理４０５にて、親処理が実行されるＣＰＵが子処理の実行要求をする時に、子処理を実行するＣＰＵに対して親処理の完了する推定時間（Ａ）を通知する。符号４０２で示す説明図では、ＣＰＵ＃０が通知４０７にて子処理１の実行要求と親処理の完了する推定時間（Ａ）をＣＰＵ＃１に通知する。続けて、処理４０６にて、子処理を実行するＣＰＵは、親処理が完了したタイミングを見計らって親処理を実行するＣＰＵに子処理の結果を通知する。符号４０２で示す説明図では、ＣＰＵ＃１が通知４０８にてＣＰＵ＃０に子処理１の結果を通知する。
【００３７】
図５は、実施の形態１にかかるコア間通信のタイミングを制御した際の親子間の処理の実行例を示す説明図である。図５では、図４にて設計時の処理を行い、コア間通信のタイミングを制御した際の親子間の処理の実行例を示している。時刻ｔ０にて、ＣＰＵ＃０は、親処理を起動し、時刻ｔ１にてＣＰＵ＃１に対して子処理１の実行要求と、時刻ｔ１から親処理が完了する推定時刻ｔ６までの残余の時間Ａ１をＣＰＵ＃１に通知する。続けて、ＣＰＵ＃０は、時刻ｔ２にてＣＰＵ＃３に対して子処理３の実行要求と、時刻ｔ２から親処理が完了する推定時刻ｔ６までの残余の時間Ａ３をＣＰＵ＃３に通知する。続けて、ＣＰＵ＃０は、時刻ｔ３にてＣＰＵ＃２に対して子処理２の実行要求と、時刻ｔ３から親処理が完了する推定時刻ｔ６までの残余の時間Ａ２をＣＰＵ＃２に通知する。
【００３８】
時刻ｔ１にて通知を取得したＣＰＵ＃１は、子処理１を実行する。ＣＰＵ＃２も時刻ｔ３にて子処理２を実行し、ＣＰＵ＃３も時刻ｔ２にて子処理３を実行する。時刻ｔ４にて、ＣＰＵ＃１が子処理１を完了する。時刻ｔ４では、残余の時間Ａ１＞子処理１にかかった時間Ｃ１となり、ＣＰＵ＃０が親処理を完了していないため、ＣＰＵ＃１は、Ａ１からＣ１を減じた待機時間Ａ１−Ｃ１を算出し、タイマに待機時間Ａ１−Ｃ１を設定する。設定後、ＣＰＵ＃１は、タイマが満了するまで子処理１を実行するスレッドをスリープさせる。
【００３９】
同様に、時刻ｔ５にて、ＣＰＵ＃２が子処理２を完了する。時刻ｔ４でも、残余の時間Ａ２＞子処理２にかかった時間Ｃ２となり、ＣＰＵ＃０が親処理を完了していないため、ＣＰＵ＃２は、Ａ２からＣ２を減じた待機時間Ａ２−Ｃ２を算出し、タイマに待機時間Ａ２−Ｃ２を設定する。設定後、ＣＰＵ＃２は、タイマが満了するまでスレッドをスリープさせる。
【００４０】
時刻ｔ６にて、ＣＰＵ＃１とＣＰＵ＃２のタイマが満了すると、ＣＰＵ＃１とＣＰＵ＃２は、スレッドをスリープから再開させ、親処理を実行するＣＰＵ＃０に、それぞれ、子処理１の結果、子処理２の結果を通知する。ＣＰＵ＃０は、時刻ｔ６から時刻ｔ７にかけてＣＰＵ＃１、ＣＰＵ＃２に対応する割り込み処理をまとめて行い、時刻ｔ７から時刻ｔ８にかけて子処理１と子処理２の結果の受信処理を行い、時刻ｔ８から時刻ｔ９にかけて復帰処理を行う。時刻ｔ９以降では、ＣＰＵ＃０は処理を特に行わないため、待機状態となる。
【００４１】
時刻ｔ１０にて、ＣＰＵ＃３が子処理３を完了する。時刻ｔ１０では、残余の時間Ａ３≦子処理３にかかった時間Ｃ３となり、ＣＰＵ＃０が親処理を完了しているため、ＣＰＵ＃３は、即座に子処理３の結果をＣＰＵ＃０に通知する。通知を受けたＣＰＵ＃０は、時刻ｔ１０から時刻ｔ１１にかけてＣＰＵ＃３に対応する割り込み処理を行い、時刻ｔ１１から時刻ｔ１２にかけて子処理１と子処理２の結果の受信処理を行い、時刻ｔ１２から時刻ｔ１３にかけて復帰処理を行う。ＣＰＵ＃１〜ＣＰＵ＃３から通知を受け取ったＣＰＵ＃０は、時刻ｔ１３から時刻ｔ１４にかけて子処理１〜子処理３の結果を用いた処理を実行する。
【００４２】
図６は、プロファイルテーブル２０１の記憶内容の一例を示す説明図である。プロファイルテーブル２０１は、親処理名、親処理の完了する推定時間（Ａ）、子処理名、子処理の結果を用いた処理の推定時間（Ｂ）という４つのフィールドを有する。
【００４３】
親処理名フィールドは、親処理の関数名、または関数の実コードが格納されたアドレスを格納する。親処理の完了する推定時間フィールドは、プロファイラなどで計測した親処理の完了する推定時間を格納する。子処理名フィールドは、親処理名フィールドに格納された親処理に対応する子処理を格納する。子処理の結果を用いた処理の推定時間（Ｂ）フィールドは、プロファイラなどで計測した子処理の結果を用いた処理が完了する推定時間を格納する。子処理の結果を用いた処理の推定時間については、後述する実施の形態２にて利用されるマルチコアプロセッサシステム１００にて使用される。
【００４４】
たとえば、マルチコアプロセッサシステム１００で実行されるソフトウェアであるＷｅｂブラウザの処理の一部として、ＨＴＭＬ（Ｈｙｐｅｒ  Ｔｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）文書を解析する関数“ｐａｒｓｅ＿ｈｔｍｌ（）”が親処理となる場合を想定する。Ｗｅｂブラウザをシミュレーションなどで実行し、プロファイラなどで“ｐａｒｓｅ＿ｈｔｍｌ（）”にかかった時間を計測する。図６の例では、２０［ｍｓｅｃ］を得たため、設計者などによって親処理の完了する推定時間（Ａ）に２０［ｍｓｅｃ］が格納される。
【００４５】
また、ＨＴＭＬ文書内に、画像が存在する場合、“ｐａｒｓｅ＿ｈｔｍｌ（）”関数は、子処理として対応する関数を呼び出す。たとえば、ＪＰＥＧ（Ｊｏｉｎｔ  Ｐｈｏｔｏｇｒａｐｈｉｃ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）画像が存在した場合、“ｐａｒｓｅ＿ｈｔｍｌ（）”関数は“ｄｅｃｏｄｅ＿ｊｐｅｇ（）”関数を子処理として呼び出す。また、ＰＮＧ（Ｐｏｒｔａｂｌｅ  Ｎｅｔｗｏｒｋ  Ｇｒａｐｈｉｃｓ）画像が存在した場合、“ｐａｒｓｅ＿ｈｔｍｌ（）”関数は“ｄｅｃｏｄｅ＿ｐｎｇ（）”関数を子処理として呼び出す。このように、親処理から呼び出される関数が子処理名フィールドに登録される。
【００４６】
子処理であった“ｄｅｃｏｄｅ＿ｊｐｅｇ（）”関数、“ｄｅｃｏｄｅ＿ｐｎｇ（）”関数は、終了後に、たとえば、画像の格納アドレスや、画像のサイズなどを親処理となる“ｐａｒｓｅ＿ｈｔｍｌ（）”関数に通知する。通知を受けた“ｐａｒｓｅ＿ｈｔｍｌ（）”関数は、画像の格納アドレスや、画像のサイズをＨＴＭＬ文書の解析結果に取り込む処理を行う。シミュレーション時、この取り込み処理に２［ｍｓｅｃ］かかったとすると、設計者などによって子処理の結果を用いた処理の推定時間（Ｂ）に２［ｍｓｅｃ］が格納される。
【００４７】
図７は、実施の形態１にかかるコア間通信のタイミングを制御した際の親子間の処理を示すフローチャートである。図７に表示される親子間の処理では、親処理をＣＰＵ＃０が実行し、子処理をＣＰＵ＃１〜ＣＰＵ＃３が実行する。説明の簡略化のため、子処理をＣＰＵ＃１が実行するとして説明を行う。
【００４８】
ＣＰＵ＃０は、親処理を実行する（ステップＳ７０１）。親処理を実行中に子処理を呼び出す処理が発生すると、ＣＰＵ＃０は、子処理のパラメータに親処理の推定時間Ａを追加する（ステップＳ７０２）。追加後、ＣＰＵ＃０は、子処理の実行要求をＣＰＵ＃１に通知する（ステップＳ７０３）。
【００４９】
子処理の実行要求を取得したＣＰＵ＃１は、子処理を実行する（ステップＳ７０４）。ＣＰＵ＃１は、子処理完了後、子処理にかかった処理時間Ｃを取得する（ステップＳ７０５）。取得後、ＣＰＵ＃１は、パラメータに追加された推定時間Ａが子処理の処理時間Ｃより大きいかを判断する（ステップＳ７０６）。
【００５０】
推定時間Ａが子処理の処理時間Ｃより大きい場合（ステップＳ７０６：Ｙｅｓ）、ＣＰＵ＃１は、（推定時間Ａ−子処理の処理時間Ｃ）後にスレッドをスリープから復帰するようにタイマを設定し（ステップＳ７０７）、スレッドをスリープさせる（ステップＳ７０８）。ステップＳ７０８の処理によるスリープからの復帰後、または、推定時間Ａが子処理の処理時間Ｃ以下である場合（ステップＳ７０６：Ｎｏ）、ＣＰＵ＃１は、ＣＰＵ＃０に子処理の結果を通知し（ステップＳ７０９）、終了する。通知を受けたＣＰＵ＃０は、子処理の結果を用いた処理を実行し（ステップＳ７１０）、処理を終了する。
【００５１】
以上説明したように、マルチコアプロセッサシステム、通信制御方法、および通信制御プログラムによれば、第１のコアによる第１の処理の完了の推定時間と第２の処理の実行要求を第２のコアが取得し、推定時間後に特定のコアに第２の処理の結果を通知する。これにより、マルチコアプロセッサシステムは、第１のコアが第１の処理の実行中に第２の処理の結果を受け取ることがなくなり、第１のコアのキャッシュメモリの内容が別の処理の内容に書き変わらないため、処理効率を向上させることができる。
【００５２】
また、マルチコアプロセッサシステムは、第１の処理の完了の推定時刻より前に、第２のコアが第２の処理を完了した場合、第１の処理の完了の推定時刻が経過したことを検出した場合に、特定のコアに第２の処理の結果を通知してもよい。これにより、マルチコアプロセッサシステムは、第１のコアのキャッシュメモリの内容が別の処理の内容に書き変わらず、処理効率を向上させることができる。
【００５３】
また、第１の処理の完了の推定時間より前に第２の処理を完了した第２のコアが複数存在する場合、第２の処理の結果が第１の処理の完了の推定時間経過後に一斉に通知されることになる。したがって、第１のコアでは、第２の処理の結果の割り込み処理や受信処理をまとめて行うことができるため、割り込み処理回数が削減され、処理効率を向上させることができる。
【００５４】
また、本実施の形態１では、第２の処理についての推定時間を準備しておかなくてもよい。したがって、比較的処理時間が予測しやすい処理を第１の処理に割り振ることで、第１の処理の完了の推定時間の精度を上げることができる。処理時間が予測しやすい処理としては、たとえば、条件分岐が少ない処理などである。
【００５５】
（実施の形態２にかかる概要説明）
実施の形態１では、親処理の途中にて子処理の結果が割り込むことはないが、子処理の結果を用いた処理を実行中に、他の子処理の結果が割り込んでしまう場合があった。実施の形態２にかかるマルチコアプロセッサシステム１００では、子処理の結果を用いた処理を実行中にも、他の子処理の結果が割り込まない形態を提供する。
【００５６】
次に、実施の形態２にかかるマルチコアプロセッサシステム１００の機能について説明する。図８は、実施の形態２にかかるマルチコアプロセッサシステム１００の機能を示すブロック図である。マルチコアプロセッサシステム１００は、通知部８０１と、取得部８０２と、取得部８０３と、取得部８０４と、通知部８０５と、通知部８０６と、取得部８０７と、取得部８０８と、算出部８０９と、検出部８１０と、通知部８１１と、を含む。この制御部となる機能（通知部８０１〜通知部８１１）は、記憶装置に記憶されたプログラムをＣＰＵ♯０〜ＣＰＵ＃３が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図１に示したＲＯＭ１０２、ＲＡＭ１０３、フラッシュＲＯＭ１０４、フラッシュＲＯＭ１０６などである。または、Ｉ／Ｆ１０８を経由して他のＣＰＵが実行することにより、その機能を実現してもよい。
【００５７】
また、図８では、ＣＰＵ＃０の機能として、通知部８０１、取得部８０８が含まれ、ＣＰＵ＃１の機能として取得部８０２、通知部８０５が含まれ、ＣＰＵ＃２の機能として取得部８０３、通知部８０６が含まれる。また、ＣＰＵ＃３の機能として、取得部８０４、取得部８０７、算出部８０９〜通知部８１１が含まれる。
【００５８】
これはＣＰＵ＃０が特定の処理を実行し、特定の処理を親処理として、親処理から呼び出される子処理１をＣＰＵ＃１が実行し、子処理２をＣＰＵ＃２が実行し、子処理３をＣＰＵ＃３が実行することを想定している。さらに、子処理１と子処理２のうち少なくともどちらか一方の処理は、親処理より速く完了し、子処理３は、親処理より遅く完了することを想定している。
【００５９】
また、たとえば、親処理をＣＰＵ＃１が実行し、子処理をＣＰＵ＃０が実行する場合であれば、ＣＰＵ＃１の機能として通知部８０１、取得部８０８が含まれ、ＣＰＵ＃０の機能として取得部８０２、通知部８０５が含まれていてもよい。また、実施の形態２にかかるマルチコアプロセッサシステム１００は、プロファイルテーブル２０１にアクセス可能である。また、取得部８０８は、取得部２０７と等しい機能を有するため、説明を省略する。
【００６０】
通知部８０１は、通知部２０２にて通知した内容に加え、第２の処理の結果を用いた処理の推定時間を通知する機能を有する。たとえば、通知部８０１は、親処理を実行するＣＰＵ＃０により、子処理１の実行要求と実行要求の時刻から親処理が完了するまでの残余の時間Ａと子処理１の結果を用いた処理が完了する推定時間Ｂ１をＣＰＵ＃１に通知する。なお、通知した内容は、ＣＰＵ＃０のレジスタ、キャッシュメモリなどに記憶されてもよい。
【００６１】
取得部８０２〜取得部８０４は、取得部２０３にて取得した内容に加え、第２の処理の結果を用いた処理の推定時間を取得する機能を有する。たとえば、取得部８０２は、ＣＰＵ＃０から、子処理１の実行要求と実行要求の時刻から親処理が完了するまでの残余の時間Ａ１と子処理１の結果を用いた処理が完了する推定時間Ｂ１を、ＣＰＵ＃１により取得する。なお、取得した内容は、たとえば、ＣＰＵ＃１のレジスタ、キャッシュメモリなどに記憶される。
【００６２】
通知部８０５、通知部８０６は、通知部２０６に加え、第２の処理の結果を用いた処理の推定時間を第１のコアとは異なる他のコアに通知する機能を有する。たとえば、通知部８０５は、ＣＰＵ＃１により子処理１の結果をＣＰＵ＃０へ通知し、さらに、子処理１の結果を用いた処理の推定時間Ｂ１をＣＰＵ＃２やＣＰＵ＃３に通知する。なお、通知した内容は、たとえば、ＣＰＵ＃１のレジスタ、キャッシュメモリなどに記憶されてもよい。
【００６３】
取得部８０７は、第３の処理を実行中の第３のコアにより、第２のコアが第１のコアに第２の処理の結果を通知した時に、第２の処理の結果を用いて第１のコアが実行する第４の処理の推定時間を取得する機能を有する。たとえば、取得部８０７は、第３の処理として子処理３を実行中のＣＰＵ＃３により、子処理１の結果を用いてＣＰＵ＃０が実行する処理の推定時間Ｂ１を取得する。
【００６４】
また、取得部８０７は、第２のコアが複数存在する場合、複数の第２のコアが第１のコアに第２の処理の結果を通知した時に、第３のコアにより、第２のコアごとに存在する第４の処理の推定時間を取得してもよい。たとえば、取得部８０７は、ＣＰＵ＃１とＣＰＵ＃２がＣＰＵ＃０にそれぞれ子処理１の結果と子処理２の結果を通知した時に、ＣＰＵ＃３により、子処理１の結果を用いた処理の推定時間Ｂ１と子処理２の結果を用いた処理の推定時間Ｂ２を取得する。なお、取得した内容は、ＣＰＵ＃３のレジスタ、キャッシュメモリなどに記憶される。
【００６５】
算出部８０９は、第４の処理の完了推定時刻より前に、第３のコアにより第３の処理を完了した場合、第４の処理の推定時間から、取得部８０７による第４の処理の推定時間の取得時点から第３の処理の完了までの経過時間を減じた待機時間を算出する機能を有する。たとえば、算出部８０９は、子処理１の結果を用いた処理の完了推定時刻より前に、ＣＰＵ＃３により子処理３を完了した場合、子処理１の結果を用いた処理の推定時間Ｂ１から、子処理３の完了までの経過時間Ｄ３を減じた待機時間（Ｂ１−Ｄ３）を算出する。
【００６６】
また、算出部８０９は、第２のコアが複数存在する場合、第３のコアにより第４の処理の推定時間の合計から、取得手段による第４の処理の推定時間の集合の取得時点から第３の処理の完了までの経過時間を減じた待機時間を算出してもよい。たとえば、算出部８０９は、ＣＰＵ＃３により子処理１と子処理２の結果を用いた処理の推定時間の合計Ｂ１＋Ｂ２から、経過時間Ｄ３を減じた待機時間（Ｂ１＋Ｂ２−Ｄ３）を算出してもよい。なお、算出値は、ＣＰＵ＃３のレジスタ、キャッシュメモリなどに記憶される。
【００６７】
検出部８１０は、算出部８０９による算出時点の時刻から算出部８０９によって算出された待機時間が経過したことを第３のコアにより検出する。たとえば、検出部８１０は、ＣＰＵ＃３の待機時間の算出後から、待機時間（Ｂ１−Ｄ３）が経過したことをＣＰＵ＃３により検出する。なお、検出されたという情報は、ＣＰＵ＃３のレジスタ、キャッシュメモリなどに記憶される。
【００６８】
通知部８１１は、取得部８０７による第４の処理の推定時間の取得時点の時刻に第４の処理の推定時間を加えた第４の処理の完了推定時刻以後に、第３の処理の結果を第３のコアから第１のコアへ通知する機能を有する。また、通知部８１１は、検出部８１０によって待機時間が経過したことが検出された場合に第３のコアから第１のコアへ通知してもよい。たとえば、通知部８１１は、子処理１の結果を用いた処理の推定時間Ｂ１を取得した時点から、推定時間Ｂ１を加えた時刻以後に、子処理３の結果をＣＰＵ＃３からＣＰＵ＃０へ通知する。なお、通知した内容は、ＣＰＵ＃３のレジスタ、キャッシュメモリなどに記憶されてもよい。
【００６９】
図９は、実施の形態２にかかるキャッシュメモリを有効活用できる親子間の処理の動作パターンを示す説明図である。図９でも、図３と同様に、時刻ｔ０にてＣＰＵ＃０は親処理を実行しており、ＣＰＵ＃１〜ＣＰＵ＃３は親処理からの実行要求を受けて子処理１〜子処理３を実行している。具体的には、ＣＰＵ＃１は、時刻ｔ１にて子処理１を実行し、ＣＰＵ＃２は、時刻ｔ２にて子処理２を実行し、ＣＰＵ＃３は、時刻ｔ３にて子処理３を実行している。
【００７０】
図９では、ＣＰＵ＃１〜ＣＰＵ＃３が、親処理が待ちとなる時刻ｔ４より後に処理が完了し、さらに、ＣＰＵ＃１〜ＣＰＵ＃３のうち、時刻ｔ５にてＣＰＵ＃２が最も速く処理を終了した場合を想定している。時刻ｔ５では、親処理が完了し、ＣＰＵ＃０は待機状態であるため、ＣＰＵ＃２は、即座に子処理２の結果をＣＰＵ＃０に通知する。
【００７１】
ＣＰＵ＃０は、時刻ｔ５から時刻ｔ６にかけてＣＰＵ＃２に対応する割り込み処理を行い、時刻ｔ６から時刻ｔ７にかけて子処理２の結果の受信処理を行い、時刻ｔ７から時刻ｔ８にかけて復帰処理を行う。続けて、ＣＰＵ＃０は、時刻ｔ８から時刻ｔ１０にかけて子処理２の結果を用いた処理を実行する。
【００７２】
時刻ｔ９にて、ＣＰＵ＃１は子処理１を完了する。時刻ｔ９ではＣＰＵ＃０が子処理２の結果を用いた処理を実行中であるため、ＣＰＵ＃１は、ＣＰＵ＃０が子処理２の結果を用いた処理を完了する時刻ｔ１０まで待機し、時刻ｔ１０にて、子処理１の結果を通知する。通知を受けたＣＰＵ＃０は、時刻ｔ１０から時刻ｔ１１にかけてＣＰＵ＃１に対応する割り込み処理を行い、時刻ｔ１１から時刻ｔ１２にかけて子処理１の結果の受信処理を行い、時刻ｔ１２から時刻ｔ１３にかけて復帰処理を行う。復帰処理後、時刻ｔ１３から時刻ｔ１４にかけて、ＣＰＵ＃０は、子処理１の結果を用いた処理を実行する。
【００７３】
このように、ＣＰＵ＃０が時刻ｔ８から時刻ｔ１０の間にて子処理の結果を用いた処理を実行している間に他の子処理が完了した場合、他の子処理を完了したＣＰＵは、子処理の結果を用いた処理がまだ実行中であるとして待機する。これにより、ＣＰＵ＃０の子処理の結果を用いた処理の途中を保存しているキャッシュ内容が一旦割り込み処理や他の子処理の結果で書き変えられてしまうのを防ぐことができる。また、図３と同様に、割り込み処理が親処理の終了時にまとめて行われる場合は、割り込み回数を減らすことができる。
【００７４】
図１０は、実施の形態２にかかるコア間通信のタイミングを制御するための設計時と実行時に行う処理を示す説明図である。図１０では、図９にて示した動作を実現するために要求される設計時の処理と実行時の動作を示している。符号１００１にて示す処理群が、設計時と実行時に行われる処理１００３〜処理１００６を示し、符号１００２にて示す説明図が、処理１００３〜処理１００６に対応する処理の内容を示している。設計時に行われる処理として処理１００３、処理１００４があり、実行時に行われる処理として処理１００５、処理１００６がある。
【００７５】
処理１００３にて、プロファイラまたは設計者は、親子間の処理の通信動作をパターン化する。たとえば、プロファイラは、特定の処理から呼び出された処理が存在した場合に、前者の処理を親処理として、後者の処理を子処理として記憶しておく。符号１００２で示す説明図では、プロファイラはＣＰＵ＃０で実行する処理を親処理、ＣＰＵ＃１〜ＣＰＵ＃３で実行する処理を子処理１〜子処理３として記憶する。続けて、処理１００４にて、プロファイラは、シミュレーションなどで動かした結果から、親処理の完了する推定時間（Ａ）と子処理の結果を用いた処理の完了する推定時間（Ｂ）を取得する。
【００７６】
実行時には、処理１００５にて、親処理が実行されるＣＰＵが子処理の実行要求をする時に、子処理を実行するＣＰＵに対して親処理の完了する推定時間（Ａ）と子処理の結果を用いた処理の完了する推定時間（Ｂ）を通知する。符号１００２で示す説明図では、ＣＰＵ＃０が通知１００７にて子処理１の実行要求と親処理の完了する推定時間（Ａ）と子処理１の結果を用いた処理の完了する推定時間（Ｂ１）をＣＰＵ＃１に通知する。同様に、ＣＰＵ＃０は、通知１００８にて子処理２の実行要求と時間（Ａ）と時間（Ｂ２）をＣＰＵ＃２に通知し、ＣＰＵ＃０は、通知１００９にて子処理３の実行要求と時間（Ａ）と時間（Ｂ３）をＣＰＵ＃３に通知する。
【００７７】
続けて、処理１００６にて、子処理を実行するＣＰＵは、親処理が完了した、または、子処理の結果を用いた処理が完了したタイミングを見計らって親処理を実行するＣＰＵに子処理の結果を通知する。符号１００２で示す説明図では、ＣＰＵ＃０が親処理を完了したタイミングで、ＣＰＵ＃２が通知１０１０にてＣＰＵ＃０に子処理２の結果を通知する。また、ＣＰＵ＃０が子処理２の結果を用いた処理を完了したタイミングで、ＣＰＵ＃１が通知１０１１にてＣＰＵ＃０に子処理１の結果を通知する。
【００７８】
図１１は、実施の形態２にかかるコア間通信のタイミングを制御した際の親子間の処理の実行例１を示す説明図である。図１１では、図１０にて設計時の処理を行い、コア間通信のタイミングを制御した際の親子間の処理の実行例の１つ目を示している。時刻ｔ０にて、ＣＰＵ＃０は、親処理を起動し、時刻ｔ１にてＣＰＵ＃１に対して子処理１の実行要求と、時刻ｔ１から親処理が完了する推定時刻ｔ４までの残余の時間Ａ１と、子処理１の結果を用いた処理１１０１の推定時間Ｂ１をＣＰＵ＃１に通知する。
【００７９】
続けて、ＣＰＵ＃０は、時刻ｔ２にてＣＰＵ＃２に対して子処理２の実行要求と、時刻ｔ２から親処理が完了する推定時刻ｔ４までの残余の時間Ａ２と、子処理２の結果を用いた処理１１０２の推定時間Ｂ２をＣＰＵ＃２に通知する。続けて、ＣＰＵ＃０は、時刻ｔ３にてＣＰＵ＃３に対して子処理３の実行要求と、時刻ｔ３から親処理が完了する推定時刻ｔ４までの残余の時間Ａ３と、子処理３の結果を用いた処理１１０３の推定時間Ｂ３をＣＰＵ＃３に通知する。
【００８０】
時刻ｔ４にてＣＰＵ＃０は、親処理を完了する。時刻ｔ４の時点では、ＣＰＵ＃１〜ＣＰＵ＃３から通知を受け取っていないため、通知を受け取るまで待機する。時刻ｔ５にて、ＣＰＵ＃１は、子処理１を完了する。時刻ｔ５では、残余の時間Ａ１≦子処理１にかかった時間Ｃ１となり、親処理が完了しているため、ＣＰＵ＃１は、即座に子処理１の結果をＣＰＵ＃０に通知する。また、ＣＰＵ＃１は、他の子処理を実行しているＣＰＵ＃２、ＣＰＵ＃３に対して、子処理１の結果を用いた処理の推定時間Ｂ１を通知する。
【００８１】
通知を受けたＣＰＵ＃０は、時刻ｔ５から時刻ｔ６にかけてＣＰＵ＃１に対応する割り込み処理を行い、時刻ｔ６から時刻ｔ７にかけて子処理１の結果の受信処理を行い、時刻ｔ７から時刻ｔ８にかけて復帰処理を行う。ＣＰＵ＃１から通知を受け取ったＣＰＵ＃０は、時刻ｔ８から時刻ｔ１０にかけて子処理１の結果を用いた処理１１０１を実行する。
【００８２】
また、通知を受けたＣＰＵ＃２、ＣＰＵ＃３は、時刻ｔ５から時刻ｔ６にかけてＣＰＵ＃１に対応する割り込み処理を行い、時刻ｔ６から時刻ｔ７にかけて時間Ｂ１の受信処理を行い、時刻ｔ７から時刻ｔ８にかけて復帰処理を行う。復帰後、ＣＰＵ＃２は子処理２を続行し、ＣＰＵ＃３は子処理３を続行する。
【００８３】
時刻ｔ９にて、ＣＰＵ＃２は、子処理２を完了する。時刻ｔ９では、子処理１の結果を用いた処理１１０１の推定時間Ｂ１＞時間Ｂ１を取得した時刻ｔ５から子処理２の完了までの時間Ｄ２となり、ＣＰＵ＃０が子処理１の結果を用いた処理１１０１を完了していない。したがって、ＣＰＵ＃２は、Ｂ１からＤ２を減じた待機時間Ｂ１−Ｄ２を算出し、タイマに待機時間Ｂ１−Ｄ２を設定する。設定後、ＣＰＵ＃２は、タイマが満了するまでスレッドをスリープさせる。
【００８４】
時刻ｔ１０にて、ＣＰＵ＃２のタイマが満了すると、ＣＰＵ＃２は、スレッドをスリープから復帰させ、ＣＰＵ＃０に子処理２の結果を通知する。また、ＣＰＵ＃２は、他の子処理を実行するＣＰＵ＃１、ＣＰＵ＃３に対して、子処理２の結果を用いた処理１１０２の推定時間Ｂ２を通知する。
【００８５】
通知を受けたＣＰＵ＃０は、時刻ｔ１０から時刻ｔ１１にかけてＣＰＵ＃２に対応する割り込み処理を行い、時刻ｔ１１から時刻ｔ１２にかけて子処理２の結果の受信処理を行い、時刻ｔ１２から時刻ｔ１３にかけて復帰処理を行う。復帰処理後、時刻ｔ１３から時刻ｔ１４にかけて、ＣＰＵ＃０は、子処理２の結果を用いた処理を実行する。
【００８６】
また、通知を受けたＣＰＵ＃３は、時刻ｔ１０から時刻ｔ１１にかけてＣＰＵ＃２に対応する割り込み処理を行い、時刻ｔ１１から時刻ｔ１２にかけて時間Ｂ２の受信処理を行い、時刻ｔ１２から時刻ｔ１３にかけて復帰処理を行う。復帰後、ＣＰＵ＃３は、子処理３を続行する。また、ＣＰＵ＃１も通知を受け取るが、子処理１が完了し、実行中の処理が存在しないため、通知は破棄される。
【００８７】
時刻ｔ１４にて、ＣＰＵ＃０は、子処理２の結果を用いた処理１１０２を完了する。時刻ｔ１４の時点では、ＣＰＵ＃０は、子処理３の結果を取得していないため、子処理３の結果を取得するまで待機する。
【００８８】
時刻ｔ１５にて、ＣＰＵ＃３は、子処理３を完了する。時刻ｔ１５では、子処理２の結果を用いた処理１１０２の推定時間Ｂ２≦時間Ｂ２を取得した時刻ｔ１０から子処理３の完了までの時間Ｄ３となり、ＣＰＵ＃０は子処理２の結果を用いた処理１１０２を完了している。したがって、ＣＰＵ＃３は、即座に子処理３の結果をＣＰＵ＃０に通知する。また、ＣＰＵ＃３は、他の子処理を実行するＣＰＵ＃１、ＣＰＵ＃２に対して、子処理３の結果を用いた処理の推定時間Ｂ３を通知する。
【００８９】
通知を受けたＣＰＵ＃０は、時刻ｔ１５から時刻ｔ１６にかけてＣＰＵ＃３に対応する割り込み処理を行い、時刻ｔ１６から時刻ｔ１７にかけて子処理３の結果の受信処理を行い、時刻ｔ１７から時刻ｔ１８にかけて復帰処理を行う。復帰処理後、時刻ｔ１８から時刻ｔ１９にかけて、ＣＰＵ＃０は、子処理３の結果を用いた処理１１０３を実行する。また、ＣＰＵ＃１、ＣＰＵ＃２も通知を受け取るが、それぞれ子処理１、子処理２が完了し、実行中の処理が存在しないため、通知は破棄される。
【００９０】
図１２は、実施の形態２にかかるコア間通信のタイミングを制御した際の親子間の処理の実行例２を示す説明図である。図１２では、図１０にて設計時の処理を行い、コア間通信のタイミングを制御した際の親子間の処理の実行例の２つ目を示している。図１１で示した実行例１との違いとしては、親処理が完了する間に子処理が複数完了している点である。
【００９１】
時刻ｔ０にて、ＣＰＵ＃０は、親処理を起動し、時刻ｔ１にてＣＰＵ＃１に対して子処理１の実行要求と、時刻ｔ１から親処理が完了する推定時刻ｔ６までの残余の時間Ａ１と、子処理１の結果を用いた処理１１０１の推定時間Ｂ１をＣＰＵ＃１に通知する。
【００９２】
続けて、ＣＰＵ＃０は、時刻ｔ２にてＣＰＵ＃２に対して子処理２の実行要求と、時刻ｔ２から親処理が完了する推定時刻ｔ６までの残余の時間Ａ２と、子処理２の結果を用いた処理１１０２の推定時間Ｂ２をＣＰＵ＃２に通知する。続けて、ＣＰＵ＃０は、時刻ｔ３にてＣＰＵ＃３に対して子処理３の実行要求と、時刻ｔ３から親処理が完了する推定時刻ｔ６までの残余の時間Ａ３と、子処理３の結果を用いた処理１１０３の推定時間Ｂ３をＣＰＵ＃３に通知する。
【００９３】
時刻ｔ４にて、ＣＰＵ＃１は、子処理１を完了する。時刻ｔ４では、残余の時間Ａ１＞子処理１にかかった時間Ｃ１となり、親処理が完了していないため、ＣＰＵ＃１は、Ａ１からＣ１を減じた待機時間Ａ１−Ｃ１を算出し、タイマに待機時間Ａ１−Ｃ１を設定する。設定後、ＣＰＵ＃１は、タイマが満了するまでスレッドをスリープさせる。
【００９４】
時刻ｔ５にて、ＣＰＵ＃２は、子処理２を完了する。時刻ｔ５では、残余の時間Ａ２＞子処理２にかかった時間Ｃ２となり、親処理が完了していないため、ＣＰＵ＃２は、Ａ２からＣ２を減じた待機時間Ａ２−Ｃ２を算出し、タイマに待機時間Ａ２−Ｃ２を設定する。設定後、ＣＰＵ＃２は、タイマが満了するまでスレッドをスリープさせる。
【００９５】
時刻ｔ６にて、ＣＰＵ＃１とＣＰＵ＃２のタイマが満了すると、ＣＰＵ＃１とＣＰＵ＃２は、スレッドをスリープから復帰させ、親処理を実行するＣＰＵ＃０に、それぞれ、子処理１の結果、子処理２の結果を通知する。また、ＣＰＵ＃１は、他の子処理を実行するＣＰＵ＃２、ＣＰＵ＃３に対して、子処理１の結果を用いた処理１１０１の推定時間Ｂ１を通知する。同様に、ＣＰＵ＃２は、他の子処理を実行するＣＰＵ＃１、ＣＰＵ＃３に対して、子処理２の結果を用いた処理１１０２の推定時間Ｂ２を通知する。
【００９６】
通知を受けたＣＰＵ＃０は、時刻ｔ６から時刻ｔ７にかけてＣＰＵ＃１、ＣＰＵ＃２に対応する割り込み処理をまとめて行い、時刻ｔ７から時刻ｔ８にかけて子処理１と子処理２の結果の受信処理を行い、時刻ｔ８から時刻ｔ９にかけて復帰処理を行う。復帰処理後、時刻ｔ９から時刻ｔ１１にかけて、ＣＰＵ＃０は、子処理１の結果を用いた処理１１０１と子処理２の結果を用いた処理１１０２を連続して実行する。また、ＣＰＵ＃１、ＣＰＵ＃２も通知を受け取るが、それぞれ子処理１、子処理２が完了し、実行中の処理が存在しないため、通知は破棄される。
【００９７】
通知を受けたＣＰＵ＃３は、時刻ｔ６から時刻ｔ７にかけてＣＰＵ＃１、ＣＰＵ＃２に対応する割り込み処理をまとめて行う。続けて、ＣＰＵ＃３は、時刻ｔ７から時刻ｔ８にかけて子処理１の結果を用いた処理１１０１の推定時間Ｂ１と子処理２の結果を用いた処理１１０２の推定時間Ｂ２の受信処理を行い、時刻ｔ８から時刻ｔ９にかけて復帰処理を行う。復帰処理後、時刻ｔ９から時刻ｔ１０にかけて、ＣＰＵ＃３は、子処理３を続行する。
【００９８】
時刻ｔ１０にて、ＣＰＵ＃３は子処理３を完了する。時刻１０では、子処理１の結果を用いた処理１１０１の推定時間Ｂ１＋子処理２の結果を用いた処理１１０２の推定時間Ｂ２＞時間Ｂ１と時間Ｂ２を取得した時刻ｔ６から子処理３の完了までの時間Ｄ３となる。この不等式の関係より、ＣＰＵ＃０は子処理１の結果を用いた処理１１０１と子処理２の結果を用いた処理１１０２を完了していない。したがって、ＣＰＵ＃３は、Ｂ１＋Ｂ２からＤ３を減じた待機時間Ｂ１＋Ｂ２−Ｄ３を算出し、タイマに待機時間Ｂ１＋Ｂ２−Ｄ３を設定する。設定後、ＣＰＵ＃３は、タイマが満了するまでスレッドをスリープさせる。
【００９９】
時刻ｔ１１にて、ＣＰＵ＃３のタイマが満了すると、ＣＰＵ＃３は、スレッドをスリープから復帰させ、ＣＰＵ＃０に子処理３の結果を通知する。また、ＣＰＵ＃３は、他の子処理を実行するＣＰＵ＃１、ＣＰＵ＃２に対して、子処理３の結果を用いた処理１１０３の推定時間Ｂ３を通知する。
【０１００】
通知を受けたＣＰＵ＃０は、時刻ｔ１１から時刻ｔ１２にかけてＣＰＵ＃３に対応する割り込み処理を行い、時刻ｔ１２から時刻ｔ１３にかけて子処理３の結果の受信処理を行い、時刻ｔ１３から時刻ｔ１４にかけて復帰処理を行う。復帰処理後、時刻ｔ１４から時刻ｔ１５にかけて、ＣＰＵ＃０は、子処理３の結果を用いた処理を実行する。また、ＣＰＵ＃１、ＣＰＵ＃２も通知を受け取るが、それぞれ子処理１、子処理２が完了し、実行中の処理が存在しないため、通知は破棄される。
【０１０１】
図１３は、実施の形態２にかかるコア間通信のタイミングを制御した際の親子間の処理を示すフローチャートである。図１３に表示される親子間の処理は、親処理をＣＰＵ＃０が実行し、子処理をＣＰＵ＃１〜ＣＰＵ＃３が実行する。説明の簡略化のため、子処理をＣＰＵ＃１が実行するとして説明を行う。
【０１０２】
ＣＰＵ＃０は、親処理を実行する（ステップＳ１３０１）。親処理を実行中に子処理を呼び出す処理が発生すると、ＣＰＵ＃０は、子処理のパラメータに親処理の推定時間Ａと子処理の結果を用いた処理の推定時間Ｂを追加する（ステップＳ１３０２）。追加後、ＣＰＵ＃０は、子処理の実行要求をＣＰＵ＃１に通知する（ステップＳ１３０３）。
【０１０３】
子処理の実行要求を取得したＣＰＵ＃１は、子処理を実行する（ステップＳ１３０４）。ＣＰＵ＃１は、子処理完了後、子処理の途中で、他の子処理を実行するＣＰＵから推定時間Ｂの通知を受けたかを判断する（ステップＳ１３０５）。他の子処理を実行するＣＰＵとは、本実施の形態では、ＣＰＵ＃２、ＣＰＵ＃３である。
【０１０４】
他の子処理を実行するＣＰＵから推定時間Ｂの通知を受けていない場合（ステップＳ１３０５：Ｎｏ）、ＣＰＵ＃１は、子処理の処理時間Ｃを取得する（ステップＳ１３０６）。取得後、ＣＰＵ＃１は、パラメータに追加された推定時間Ａが子処理の処理時間Ｃより大きいかを判断する（ステップＳ１３０７）。推定時間Ａが子処理の処理時間Ｃより大きい場合（ステップＳ１３０７：Ｙｅｓ）、ＣＰＵ＃１は、（推定時間Ａ−子処理の処理時間Ｃ）後にスレッドを復帰するようにタイマを設定し（ステップＳ１３０８）、スレッドをスリープさせる（ステップＳ１３１３）。
【０１０５】
ステップＳ１３１３の処理によるスリープからの復帰後、または、推定時間Ａが子処理の処理時間Ｃ以下である場合（ステップＳ１３０７：Ｎｏ）、ＣＰＵ＃１は、ＣＰＵ＃０に子処理の結果を通知する（ステップＳ１３１４）。子処理の結果を通知後、ＣＰＵ＃１は、ＣＰＵ＃０を除く他のＣＰＵに、自身の推定時間Ｂを通知し（ステップＳ１３１５）、終了する。ステップＳ１３１４にて通知を受けたＣＰＵ＃０は、通知を受けた子処理の結果を用いた処理を実行し（ステップＳ１３１６）、処理を終了する。
【０１０６】
他の子処理を実行するＣＰＵから推定時間Ｂの通知を受けていた場合（ステップＳ１３０５：Ｙｅｓ）、ＣＰＵ＃１は、最後に通知を受けてからの経過時間Ｄを取得する（ステップＳ１３０９）。取得後、ＣＰＵ＃１は、最後の通知で同時に受け取った推定時間Ｂの合計を算出する（ステップＳ１３１０）。
【０１０７】
なお、各子処理を完了したＣＰＵからの通信は、若干ずれることもあり、厳密には同時でない場合もありうる。しかし、実際には、各ＣＰＵは通信により割り込みが入った時に割り込み処理を行ってから受信処理を行うので、全プロセッサが１チップに収まっているような物理的に近い距離にあるケースでは通信のずれを割り込みオーバーヘッドで吸収することができる。結果、若干ずれて通知が行われても、各ＣＰＵは、まとめて受信処理を行うことができる。
【０１０８】
合計を算出後、ＣＰＵ＃１は、推定時間Ｂの合計が経過時間Ｄより大きいかを判断する（ステップＳ１３１１）。推定時間Ｂの合計が経過時間Ｄより大きい場合（ステップＳ１３１１：Ｙｅｓ）、ＣＰＵ＃１は、（推定時間Ｂ−経過時間Ｄ）後にスレッドを復帰するようにタイマを設定し（ステップＳ１３１２）、ステップＳ１３１３の処理に移行する。推定時間Ｂの合計が経過時間Ｄ以下である場合（ステップＳ１３１１：Ｎｏ）、ＣＰＵ＃１は、ステップＳ１３１４の処理に移行する。
【０１０９】
以上説明したように、マルチコアプロセッサシステム、通信制御方法、および通信制御プログラムによれば、第３の処理を実行中の第１および第２のコア以外の第３のコアが、第２の処理の結果を用いた第４の処理の完了する推定時間を取得する。第３のコアは、第３の処理の結果を第４の処理の完了する推定時間以後に、第１のコアへ通知する。これにより、マルチコアプロセッサシステムは、第１のコアが他の処理の結果を用いた処理を行っている場合であっても、キャッシュメモリを書き変えずに済み、処理効率を向上させることができる。
【０１１０】
また、マルチコアプロセッサシステムは、第４の処理の完了の推定時刻より前に、第３の処理を完了した場合、第４の処理の完了の推定時刻を経過したことを検出した場合に、第３の処理の結果を第１のコアに通知してもよい。これにより、マルチコアプロセッサシステムは、第１のコアが他の処理の結果を用いた処理を行っている場合であっても、第１のコアのキャッシュメモリの内容が別の処理の内容に書き変わらず、処理効率を向上させることができる。また、第４の処理の完了の推定時刻を経過したことを検出することで、第１のコアの空き時間を発生させずに済み、処理効率を向上させることができる。
【０１１１】
また、マルチコアプロセッサシステムは、第３の処理の完了の推定時刻より前に第２の処理を完了した第２のコアが複数存在する場合、第４の処理群の完了推定時刻以後に、第３の処理の結果を第１のコアに通知してもよい。これにより、マルチコアプロセッサシステムは、第１のコアが第４の処理群を行っている場合であっても、第１のコアのキャッシュメモリの内容が別の処理の内容に書き変わらず、処理効率を向上させることができる。特に、コア数が多くなり、子処理の結果を用いた処理が多くなる場合に有効である。
【０１１２】
また、マルチコアプロセッサシステムは、第４の処理群の完了の推定時刻より前に、第３の処理を完了した場合、第４の処理群の完了の推定時刻を経過したことを検出した場合に、第３の処理の結果を第１のコアに通知してもよい。これにより、マルチコアプロセッサシステムは、第１のコアが第４の処理を行っている場合であっても、第１のコアのキャッシュメモリの内容が別の処理の内容に書き変わらず、処理効率を向上させることができる。また、第４の処理群の完了の推定時刻を経過したことを検出することで、第１のコアの空き時間を発生させずに済み、処理効率を向上させることができる。
【０１１３】
また、マルチコアプロセッサシステムは、実施の形態１と実施の形態２を混在して運用することも可能である。第１のコアが第２のコアに第２の処理の実行要求を通知する際に、第２の処理の結果を用いた第４の処理の推定時間をパラメータに追加するか否かによって、第２のコアは、取得した処理が実施の形態１または実施の形態２であるかを判断することができる。
【０１１４】
なお、本実施の形態で説明した通信制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本通信制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本通信制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１１５】
＃０、＃１、＃２、＃３  ＣＰＵ
１０３  ＲＡＭ
１１０  バス
２０１  プロファイルテーブル
２０２  通知部
２０３  取得部
２０４  算出部
２０５  検出部
２０６  通知部
２０７  取得部
８０１  通知部
８０２  取得部
８０３  取得部
８０４  取得部
８０５  通知部
８０６  通知部
８０７  取得部
８０８  取得部
８０９  算出部
８１０  検出部
８１１  通知部
【図１】
2012001777.tif 000003
【図２】
2012001777.tif 000004
【図３】
2012001777.tif 000005
【図４】
2012001777.tif 000006
【図５】
2012001777.tif 000007
【図６】
2012001777.tif 000008
【図７】
2012001777.tif 000009
【図８】
2012001777.tif 000010
【図９】
2012001777.tif 000011
【図１０】
2012001777.tif 000012
【図１１】
2012001777.tif 000013
【図１２】
2012001777.tif 000014
【図１３】
2012001777.tif 000015
【国際調査報告】
2012001777.tif 000016
2012001777.tif 000017