(57)【要約】  本発明の一態様によるマルチプロセッサシステムは、複数のプロセッサと、複数のプロセッサによる処理及び複数のプロセッサ間のデータ転送を制御する実行制御部と、データ転送の状態を示すデータ依存関係情報を含む内部データ記憶部と、を有する。実行制御部は、先行するデータ転送が実行登録された後に制御の流れが確定し、先行するデータ転送と同一の転送先への別のデータ転送が必要となったとき、そのデータ転送に関するデータ依存関係情報に基づきそのデータ転送をキャンセルする。
2008114443.tif 000002
【特許請求の範囲】
【請求項１】
マルチプロセッサシステムであって、
複数のプロセッサと、
前記複数のプロセッサによる処理及び前記複数のプロセッサ間のデータ転送を制御する実行制御部と、
前記データ転送の状態を示すデータ依存関係情報を含む内部データ記憶部と、
を有し、
前記実行制御部は、先行するデータ転送が実行登録された後に、前記プロセッサによる前記処理に対する制御の流れが確定し、前記先行するデータ転送と同一の転送先への別のデータ転送が必要となったとき、前記データ依存関係情報に基づき前記先行するデータ転送をキャンセルすることを特徴とするマルチプロセッサシステム。
【請求項２】
請求項１に記載のマルチプロセッサシステムであって、
前記実行制御部は、前記先行するデータ転送が実行可能となったとき、前記制御の流れが確定する前であっても前記先行するデータ転送の実行を開始することを特徴とするマルチプロセッサシステム。
【請求項３】
請求項１又は２に記載のマルチプロセッサシステムであって、
前記実行制御部は、前記制御の流れが確定した時に前記先行するデータ転送が未実行であるとき、前記先行するデータ転送の実行登録を削除することを特徴とするマルチプロセッサシステム。
【請求項４】
請求項１又は２に記載のマルチプロセッサシステムであって、
前記実行制御部は、前記制御の流れが確定した時に前記先行するデータ転送が実行中であるとき、前記先行するデータ転送の実行を中止することを特徴とするマルチプロセッサシステム。
【請求項５】
請求項１乃至４のいずれか一つに記載のマルチプロセッサシステムであって、
前記データ依存関係情報は、データ転送先のデータ毎に、データ転送の状態が未登録、未実行、実行中または実行完了であることを示すことを特徴とするマルチプロセッサシステム。
【請求項６】
請求項１乃至５のいずれか一つに記載のマルチプロセッサシステムであって、
前記内部データ記憶部は、実行されるデータ転送が登録される実行待ち情報と、前記実行されるデータ転送に係わる実行パラメータが登録される実行パラメータ情報とをさらに含むことを特徴とするマルチプロセッサシステム。
【請求項７】
請求項６に記載のマルチプロセッサシステムであって、
前記実行制御部は、前記実行待ち情報に、前記複数のプロセッサに実行させる処理及び前記複数のプロセッサ間のデータ転送を登録し、さらにその処理及びデータ転送の依存関係情報を登録することを特徴とするマルチプロセッサシステム。
【請求項８】
請求項６に記載のマルチプロセッサシステムであって、
前記実行制御部は、前記実行待ち情報に登録された依存関係をチェックして、実行可能となった処理またはデータ転送を実行させることを特徴とするマルチプロセッサシステム。
【請求項９】
請求項１に記載のマルチプロセッサシステムであって、
前記実行制御部は、前記別のデータ転送の実行登録時に、転送するデータのデータ依存関係情報をチェックして、前記先行するデータ転送をキャンセルすることを特徴とするマルチプロセッサシステム。
【請求項１０】
請求項１に記載のマルチプロセッサシステムであって、
前記実行制御部は、前記別のデータ転送の実行時に、転送するデータのデータ依存関係情報をチェックして、前記先行するデータ転送をキャンセルすることを特徴とするマルチプロセッサシステム。
【請求項１１】
請求項１に係るマルチプロセッサシステムであって、
前記制御の流れが確定したとき、前記先行するデータ転送を継続することを特徴とするマルチプロセッサシステム。
【請求項１２】
請求項１乃至１１のいずれか一つに記載のマルチプロセッサシステムであって、
前記複数のプロセッサ間のデータ転送を実行する少なくとも１つのデータ転送装置を有することを特徴とするマルチプロセッサシステム。
【請求項１３】
請求項１乃至１２のいずれか一つに記載のマルチプロセッサシステムであって、
前記実行制御部は、前記複数のマイクロプロセッサのうちの１つであることを特徴とするマルチプロセッサシステム。
【請求項１４】
請求項１に記載のマルチプロセッサシステムであって、
前記実行制御部は、前記制御の流れが確定した時に、前記先行するデータ転送が未実行であるときは、前記先行するデータ転送をキャンセルし、前記先行するデータ転送が実行中であるときは、前記先行するデータ転送を継続することを特徴とするマルチプロセッサシステム。
【請求項１５】
請求項６に記載のマルチプロセッサシステムであって、
前記内部データ記憶部の前記データ依存関係情報は、前記実行待ち情報と前記実行パラメータ情報とへのポインタを有することを特徴とするマルチプロセッサシステム。
【請求項１６】
請求項１に記載のマルチプロセッサシステムであって、
前記データ依存関係情報の状態は、前記先行するデータ転送が実行登録されたとき未実行に設定され、前記先行するデータ転送の実行が開始されたとき実行中に設定され、前記先行するデータ転送の実行が完了したとき実行完了に設定されることを特徴とするマルチプロセッサシステム。
【請求項１７】
請求項１２に記載のマルチプロセッサシステムであって、
前記少なくとも１つのデータ転送装置はＤＭＡコントローラであることを特徴とするマルチプロセッサシステム。
【請求項１８】
請求項１乃至１７のいずれか一つに記載のマルチプロセッサシステムであって、
複数のサブシステムが共通の通信路を介して通信する分散型プロセッサであることを特徴とするマルチプロセッサシステム。
【請求項１９】
複数のプロセッサと、前記複数のプロセッサ間のデータ転送の状態を示すデータ依存関係情報を含む内部データ記憶部とを有するマルチプロセッサシステムの制御方法であって、
先行するデータ転送を実行登録し、
前記複数のプロセッサによる処理に対する制御の流れが確定したか判定し、
前記制御の流れが確定し、前記先行するデータ転送と同一の転送先への別のデータ転送が必要となったとき、前記データ依存関係情報に基づき前記先行するデータ転送をキャンセルする
ことを特徴とする制御方法。
【請求項２０】
複数のプロセッサと、前記複数のプロセッサ間のデータ転送の状態を示すデータ依存関係情報を含む内部データ記憶部とを有するマルチプロセッサシステムを制御するコンピュータプログラムであって、前記複数のプロセッサのうちの少なくとも１つのプロセッサに、
先行するデータ転送を実行登録し、前記複数のプロセッサによる処理に対する制御の流れが確定したか判定し、前記制御の流れが確定し、前記先行するデータ転送と同一の転送先への別のデータ転送が必要となったとき、前記データ依存関係情報に基づき前記先行するデータ転送をキャンセルすることを、
実行させることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコア型マイクロプロセッサ等のマルチプロセッサシステム、マルチプロセッサシステムの制御方法、マルチプロセッサシステムにその制御方法を実行させるコンピュータプログラムに関する。
【背景技術】
【０００２】
複数のＣＰＵコアを備えたマイクロプロセッサ等のマルチプロセッサシステムが普及しつつある。複数のＣＰＵコアによりプログラムを並列実行することにより、システムの処理性能を飛躍的に向上させることができる。【０００３】
かかるマルチプロセッサシステムにおけるプログラムの実行を効率化するために、サーバ・クライアント型のコンピュータシステムにおいてクライアントからサーバに手続（関数）呼び出しの形式で処理を依頼する手法である遠隔手続呼び出しを応用することができる。さらに、遠隔手続呼び出しでは、クライアントは、サーバに処理を依頼した後、サーバによる処理の終了を待つ必要があるため、クライアントがサーバの処理の終了を待たずに処理を継続できる手法である非同期の遠隔手続呼び出しを応用することができる。すなわち、図１に示すように、１つのプロセッサから他の複数のプロセッサに対して非同期の手続呼び出しを行うことで、プログラムを並列処理することができる。【０００４】
図１は、非同期遠隔手続呼び出しを用いたプログラムの並列処理を説明するための図である。手続要求側プロセッサが手続実行側プロセッサに対して指定された手続（関数）の実行を指示する疑似命令として「start」を用い、指定された手続の完了を待つことを指示する疑似命令として「wait」を用いる。図１において、手続要求側プロセッサは、非同期の遠隔手続呼び出しを利用して、（手続実行側）プロセッサ１に手続（関数）Aを実行させ、プロセッサ２に手続Bを実行させ、プロセッサ３に手続Cを実行させている。また、手続要求側プロセッサは自分で手続Dを実行する。これにより、このマルチプロセッサシステムは４つの手続を並列に実行することができる。【０００５】
非同期の遠隔手続呼び出しを利用して並列処理を実行する場合、待ち順番が問題となる。図２は、非同期の遠隔手続呼び出しを利用して並列処理した場合の待ち順番の問題を説明するための図である。図２において、手続要求側プロセッサは、（手続実行側）プロセッサ１に手続（関数）AとCを実行させ、プロセッサ２に手続BとDを実行させる。このとき、プロセッサ１による手続Aの実行がプロセッサ２による手続Bの実行よりも先に終了すると想定して、手続AとBを起動した後、プロセッサ１による手続Aの終了を待って、プロセッサ１による手続Cを起動し、その後、プロセッサ２による手続Bの終了を待って、プロセッサ２による手続Dを起動するようにプログラムされている。【０００６】
しかし、実際に各手続を実行したところ、プロセッサ２による手続Bの実行がプロセッサ１による手続Aの実行より先に終了した場合、手続Bが終了しても手続Aが終了するまでプロセッサ２による手続Dは起動できず、プロセッサ２に無駄な待ち時間が生じることとなる。【０００７】
かかる問題を解決する手段として、図３に示したように、手続実行側プロセッサにおいて実行をキューイングすることができる。キューイングとは、例えば手続実行側プロセッサ１に対して手続要求側プロセッサから予め手続Cの実行を命令しておくが、手続Aの終了を条件として設定しておくことである。手続実行側プロセッサは、手続要求側プロセッサから指定された手続を実行するためのプログラム（手続呼出プログラム）を有し、ここで手続呼び出しの要求をキューイングすることで、手続要求側プロセッサは、例えば手続実行側プロセッサ１に対して、先行する手続Aの完了を待たずに次の手続Cの実行を要求できるようになる。これにより待ち順番の問題が解消し、無駄な待ち時間を削減することができる。【０００８】
なお、いくつかの実行ユニットと、それら実行ユニットの少なくとも１つに処理を発行するようにスケジューラを含むマイクロプロセッサにおいて、投機的実行であるかを判断するための情報をスケジューラがオペランド毎に付加する技術が提案されている（例えば、特許文献１参照）。【０００９】
また、プロセッサ毎にキャッシュメモリを有するマルチプロセッサシステムにおいて主記憶とのトランザクションを減少させるメモリシステム制御装置が提案されている（例えば、特許文献２参照）。
【特許文献１】特表２００５−５３７５６７号公報
【特許文献２】特開２００６−４８４０６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
非同期の遠隔手続呼び出しを利用したマルチプロセッサシステムにおいて、図４のような制御構造を有するプログラムを実行する場合を考える。このような制御構造は、次のようなプログラムに対応している。【００１１】
Y=A();
If (k) {
Y=B()
}
Z=C(Y)
ここで、条件kが成立した場合、プログラムブロックCにおいて、プログラムブロックBの処理結果B()が使用される。一方、条件kが成立しない場合、プログラムブロックCにおいて、プログラムブロックAの処理結果A()がそのまま使用される。こうして、処理の制御の流れが確定する。【００１２】
上記のプログラムでは、プログラムブロックAにおいて変数Yに値A()を書き込む。条件分岐kがあり、条件が成立した場合、ブロックBにおいて変数Yの値が別の値B()で上書きされる。条件が成立しない場合、変数Yの値はそのままプログラムブロックAにおいて書き込まれた値のままとなる。この変数Yの値は、プログラムブロックCで使用される。【００１３】
マルチプロセッサシステムでは、プログラムの各ブロックを複数のプロセッサに分散して実行するため、プログラムブロックA、B、Cが異なるプロセッサにより実行されると仮定する。この場合、各プログラムブロックの処理が終了したら、その処理結果を使用するプログラムブロックに処理結果をデータ転送することが必要となるが、プログラムブロックAとプログラムブロックBとの間に依存関係がなければ、この２つのプログラムブロックが実行される順序は特に制約されず、どちらのプログラムブロックの処理が先に終了するか分からない。このため、何の制約もせずにプログラムブロックの処理が終わり次第データ転送をするようにしたのでは、条件kが成立しプログラムブロックBの結果をプログラムブロックCで使用する場合であっても、プログラムブロックAが後に終了した場合、プログラムブロックCは、プログラムブロックBの処理結果を使用すべきであるにもかかわらず、プログラムブロックAの処理結果を使用してしまうこととなる。【００１４】
この場合に生じる問題を説明するため、さらに図５を参照する。図５は、データ転送時に生じる問題を説明するための図である。図５は、手続実行側プロセッサ１が関数（プログラムブロック）Aを実行し、手続実行側プロセッサ２が関数Bを実行し、手続実行側プロセッサ３が関数Cを実行することを示している。【００１５】
手続要求側プロセッサは、図５の左端に示したプログラムに従って、手続実行側プロセッサ１、２、３に各関数（プログラムブロック）の実行を命令する。なお、ここでは、説明を容易にするため、次のような疑似命令を使用してプログラムを表している。例えば、「start A()」は、手続実行側プロセッサ１に実行させる関数Aの実行登録を指示する疑似命令である。「start A→C'」は、関数Aの処理結果の関数Cへのデータ転送を実行登録することを指示する疑似命令である。「dep(A→C',A)」は、関数Aの処理結果の関数Cへのデータ転送が、関数Aの処理が終了してから実行されるべきことを示す依存関係を指示する疑似命令である。「wait(C')」は、プログラムブロックCへのデータ転送の完了を待つことを指示する疑似命令である。【００１６】
手続要求側プロセッサのプログラムに対応して、手続実行側プロセッサ１、２、３の手続呼び出しプログラムは、図５に示したように実行キューを登録する。すなわち、手続要求側プロセッサの「start A()」に対応して、プロセッサ１の実行キュー（A; NULL）が生じる。ここで、図５では、この実行キュー（A; NULL）を、２段ボックスの上段のボックスに実行されるべき関数Aを入れて表し、下段のボックスにその依存関係、すなわち前提として完了しているべき処理NULLを表している。ここで、NULLは、特に依存関係はないことを示す。同様に、「start B()」に対応して、プロセッサ２の実行キュー（B; NULL）が生じ、「wait(C')」と「start C()」に対応して、プロセッサ３の実行キュー（C; C'）が生じる。ここで、プロセッサ３実行キューの下段ボックスのC'は、プログラムブロックCに対するデータ転送が完了しているべきとの依存関係を示している。同様に、「start A→C'」と「dep(A→C', A)」に対応して、転送１実行キュー（A→C'; A）が生じる。「start B→C'」と「dep(B→C', B)」に対応して、転送２実行キュー（B→C'; B）が生じる。ここで、図３では、各手続実行側プロセッサについて手続呼び出しプログラムを示したが、図５では、図示を容易にするため、各手続実行側プロセッサの手続呼び出しプログラムを１つにまとめて示している点に注意を要する。【００１７】
次に、手続実行側プロセッサの動作を説明する。手続実行側プロセッサ１は、手続呼び出しプログラムのプロセッサ１実行キューに従って、関数Aを実行する。転送エンジン１は、手続呼び出しプログラムの転送１実行キューに従って、手続実行側プロセッサ１により関数Aの処理が完了すると、Aの処理結果をAから関数Cに転送する。一方、手続実行側プロセッサ２は、分岐条件kが成立すると、手続呼び出しプログラムのプロセッサ２実行キューに従って、関数Bを実行する。転送エンジン２は、手続呼び出しプログラムの転送２実行キューに従って、手続実行側プロセッサ２によりBの処理が完了すると、Bの処理結果をBから関数Cに転送する。【００１８】
この時、転送エンジン１によるAの処理結果のCへの転送が、転送エンジン２によるBの処理結果のCへの転送が完了した後に完了した場合、分岐条件kが成立しているにもかかわらず、関数Cにおいて、Aの処理結果が使われるという問題が生じる。この状況を、転送エンジン２から手続実行側プロセッサ３への矢印に×印を付すことにより示した。【００１９】
かかる問題を解消するため、図６に示したように、先行するデータ転送（この場合、A→C'）が終了してから、後続のデータ転送（この場合、B→C'）を開始すれば、関数Cは確実にAの処理結果を使用することができる。これは、手続要求側プロセッサの手続要求プログラムにおいて、「start B→C'」の依存関係として、「dep(B→C', B)」に「dep(B→C', A→C')」を追加することにより実現できる。【００２０】
この場合、まず、関数Aが終了したら、AからCにデータ転送を行う。分岐条件kの成否が確定したところで、Cにおいて使用する処理結果がAのものかBのものかが確定する。分岐条件kが成立しなければ、Aの処理結果を使うので、AからCへのデータ転送を継続し、それが完了したら、関数Cを実行する。分岐条件kが成立した場合、Bの処理結果を使い、Aの処理結果は使われないので、Bが終了したところで、AからCへのデータ転送がまだ終了していなければ、その終了を待ち、それが終了してから、BからCへのデータ転送を開始する。BからCへのデータ転送が終了してから、Cを実行する。【００２１】
しかし、この場合、分岐条件kが成立してBの処理結果が使われるとき、Bの処理が終了していても、AからCへの転送が終了していない場合には、BからCへのデータ転送が行えず、結果として関数Cの実行が遅れるという問題がある。【００２２】
図５を参照して説明した問題を解消するもう１つの方法は、図７に示したように、Cで使う処理結果がAかBか確定してから、それに応じて処理結果のデータ転送A→C'またはB→C'を開始すればよい。これは、手続要求側プロセッサの手続要求プログラムにおいて、分岐条件kが成立した場合にのみ「start A→C'; dep (A→C', A)」を実行することにより実現することができる。【００２３】
この場合、Aが終了してもAからCへのデータ転送を開始しない。そして、分岐条件kの成否が確定し、Cで使う処理結果がAかBか確定するまで待つ。分岐条件kが成立しない場合、Aの処理結果を使うことが確定するので、AからCへのデータ転送を開始する。一方、分岐条件kが成立した場合、Bの処理結果を使うことが確定するので、AからCへのデータ転送は行わず、BからCへのデータ転送のみを開始する。【００２４】
しかし、この場合、分岐条件kが成立せずBの処理結果が使われるとき、Aが終了していても、AからCへのデータ転送が行われず、分岐条件kの成否か確定するまで待つので、結果としてCの実行が遅れるという問題がある。
【課題を解決するための手段】
【００２５】
本発明の目的の１つは、プログラムに条件分岐が含まれる場合であっても、データ転送に係わる待ち時間を減少し、プログラムの実行時間を短縮することができるマルチプロセッサシステム、マルチプロセッサシステムの制御方法、この制御方法を実現するマルチプロセッサシステムのためのコンピュータプログラム、および、このコンピュータプログラムを記憶したコンピュータ読み取り可能記憶媒体に関する。【００２６】
本発明の一態様によるマルチプロセッサシステムは、複数のプロセッサと、前記複数のプロセッサによる処理及び前記複数のプロセッサ間のデータ転送を制御する実行制御部と、前記データ転送の状態を示すデータ依存関係情報を含む内部データ記憶部と、を有し、前記実行制御部は、先行するデータ転送が実行登録された後に、前記プロセッサによる前記処理に対する制御の流れが確定し、前記先行するデータ転送と同一の転送先への別のデータ転送が必要となったとき、前記データ依存関係情報に基づき前記先行するデータ転送をキャンセルすることを特徴とする。【００２７】
本発明の他の態様によると、複数のプロセッサと、前記複数のプロセッサ間のデータ転送の状態を示すデータ依存関係情報を含む内部データ記憶部とを有するマルチプロセッサシステムの制御方法であって、先行するデータ転送を実行登録し、前記複数のプロセッサによる処理に対する制御の流れが確定したか判定し、前記制御の流れが確定し、前記先行するデータ転送と同一の転送先への別のデータ転送が必要となったとき、前記データ依存関係情報に基づき前記先行するデータ転送をキャンセルすることを特徴とする。【００２８】
本発明のさらに他の態様によると、複数のプロセッサと、前記複数のプロセッサ間のデータ転送の状態を示すデータ依存関係情報を含む内部データ記憶部とを有するマルチプロセッサシステムを制御するコンピュータプログラムであって、前記複数のプロセッサのうちの少なくとも１つのプロセッサに、先行するデータ転送を実行登録し、前記複数のプロセッサによる処理に対する制御の流れが確定したか判定し、前記制御の流れが確定し、前記先行するデータ転送と同一の転送先への別のデータ転送が必要となったとき、前記データ依存関係情報に基づき前記先行するデータ転送をキャンセルすることを、実行させることを特徴とする。
【発明の効果】
【００２９】
命令の依存関係に基づいてデータ転送を制御するので、処理に対する制御の流れが変わる場合であっても、データ転送に係わる待ち時間を減少し、プログラムの実行時間を短縮することができる。
【図面の簡単な説明】
【００３０】
【図１】非同期手続呼び出しを用いた並列処理を示す図である。
【図２】待ち順番の問題を示す図である。
【図３】待ち順番の問題のキューイングによる解決を示す図である。
【図４】マルチプロセッサシステムにより実行される想定プログラムを示す図である。
【図５】条件分岐がある場合の問題点を示す図である。
【図６】従来の解決方法による問題点を示す図である。
【図７】従来の解決方法による別の問題点を示す図である。
【図８】本発明の一実施形態による集中型マルチプロセッサシステムを示す図である。
【図９】本発明による先行するデータ転送のキャンセルを示す図である。
【図１０】従来のマルチプロセッサシステムの構成を示すブロック図である。
【図１１】本発明の第１の実施形態によるマルチプロセッサシステムの構成を示すブロック図である。
【図１２】図１２Ａ〜Ｇは、本発明の第１の実施形態によるマルチプロセッサシステムの動作例１を示す図である。
【図１３】本発明の第１の実施形態によるマルチプロセッサシステムの動作例１を時系列で示す図である。
【図１４】図１４Ａ〜Ｄは、本発明の第１の実施形態によるマルチプロセッサシステムの動作例２を示す図である。
【図１５】本発明の第１の実施形態によるマルチプロセッサシステムの動作例２を時系列で示す図である。
【図１６】図１６Ａ〜Ｅは、本発明の第１の実施形態によるマルチプロセッサシステムの動作例３を示す図である。
【図１７】本発明の第１の実施形態によるマルチプロセッサシステムの動作例３を時系列で示す図である。
【図１８】図１８Ａ〜Ｃは、本発明の第１の実施形態によるマルチプロセッサシステムの動作を示す動作フロー図である。
【図１９】本発明の第１の実施形態によるマルチプロセッサシステムの、分岐条件が成立しない場合の動作を時系列で示す図である。
【図２０】本発明の第２の実施形態によるマルチプロセッサシステムの構成を示すブロック図である。
【図２１】図２１Ａ〜Ｂは、本発明の第２の実施形態によるマルチプロセッサシステムの動作を示す動作フロー図である。
【図２２】本発明の第２の実施形態によるマルチプロセッサシステムの動作例を時系列で示す図である。
【図２３】本発明の第３の実施形態によるマルチプロセッサシステムの動作を示す動作フロー図である。
【図２４】本発明の第３の実施形態によるマルチプロセッサシステムの動作例を時系列で示す図である。
【図２５】本発明の第４の実施形態によるマルチプロセッサシステムの構成を示すブロック図である。
【図２６】本発明の他の実施形態による分散型マルチプロセッサシステムを示す図である。
【符号の説明】
【００３１】
１００  集中型マルチプロセッサシステム
１０１、１０２、１０３  プロセッサ
１１１  メモリ
１２１、１２２  データ転送装置
１５０  システムバス
２００  分散型マルチプロセッサシステム
２０１、２０２、２０３  プロセッサ
２１１、２１２、２１３  メモリ
２２１、２２２、２２３  データ転送装置
２３１、２３２、２３３  通信装置
２５１、２５２、２５３  システムバス
３００  マルチプロセッサシステム
３１０  （プログラム）メモリ
３２０  実行制御部
３２１  実行登録部
３２２  依存関係チェック・実行開始部
３２３  実行完了部
３３０  内部データ
３３１  実行待ち情報
３３２  実行パラメータ情報
３４０  データ転送装置
３５０  プロセッサ
４００、５００、６００  マルチプロセッサシステム
４１０、５１０、６１０  （プログラム）メモリ
４２０、５２０、６２０  実行制御部
４２１、５２１、６２１  実行登録部
４２２、５２２、６２２  依存関係チェック・実行開始部
４２３、５２３、６２３  実行完了部
４３０、５３０、６３０  内部データ
４３１、５３１、６３１  実行待ち情報
４３２、５３２、６３２  実行パラメータ情報
４３３、５３３、６３３  データ依存関係情報
４４０、５４０  データ転送装置
４５０、５５０、６５０  プロセッサ
５２５  キャンセル制御部
【発明を実施するための最良の形態】
【００３２】
まず、本発明によるマルチプロセッサシステムのハードウェア面を説明する。図８は、本発明の並列プログラム実行装置の一実施形態のハードウェアである、集中型マルチプロセッサシステムを示すブロック図である。図８に示した集中型マルチプロセッサシステム１００は、複数のプロセッサ１０１、１０２、１０３等、メモリ１１１等、データ転送装置１２１、１２２等を含み、これらの構成要素は、共通のシステムバス１５０を介して命令、アドレス情報、データをやりとりすることができるように構成されている。各プロセッサ１０１、１０２、１０３は、与えられたプログラムを実行して、例えばメモリ１１１から読み出したデータを処理して他のプロセッサ１０１、１０２、１０３に転送したり、メモリ１１１に書き込んだりすることができる。メモリ１１１は、プロセッサ１０１、１０２、１０３等が実行するプログラムを記憶し、またプロセッサ１０１、１０２、１０３等が処理するデータやその処理結果のデータを記憶する。データ転送装置１２１、１２２等は、集中型マルチプロセッサシステム１００のプロセッサ１０１、１０２、１０３等の間、またはそれらが管理するメモリ１１１等の記憶領域の間におけるデータ転送を制御する。データ転送装置は、例えばＤＭＡコントローラである。【００３３】
次に、本発明のマルチプロセッサシステムについて説明する。図９は、本発明の一実施形態による、マルチプロセッサシステムの制御動作を説明するための図である。図９には、左から順に、手続要求側プロセッサ（における手続き要求プログラム）、（この手続き要求プログラムに対応する）手続き呼び出しプログラム、この手続き呼び出しプログラムに対応する手続実行側プロセッサ１、２、３のそれぞれの動作を示している。また、手続実行側プロセッサ１と２の動作の間に、転送エンジン１によるデータ転送が示され、さらに、手続実行側プロセッサ２と３の動作の間に、転送エンジン２によるデータ転送が示されている。手続実行側プロセッサ１、２、３は、例えば図８に示したプロセッサ１０１、１０２、１０３にそれぞれ対応している。また、転送エンジン１、２は、例えば図８に示したデータ転送装置１２１、１２２にそれぞれ対応している。また、手続実行側プロセッサ１、２、３と転送エンジン１、２の動作は、時間が図の上から下に進行するように描かれている。手続要求側プロセッサは、手続実行側プロセッサであるプロセッサ１０１、１０２、１０３のいずれかであってもよいし、マルチプロセッサシステム１００に設けられたその他のプロセッサ（図８には図示せず）であってもよい。【００３４】
手続要求側プロセッサのプログラムステップstart A()に対応して、手続呼び出しプログラムのプロセッサ１実行キュー(A; NULL)が生成される。ここで、NULLは、手続（関数）Aの実行に伴う依存関係はないことを意味している。このプロセッサ１実行キューに従って、手続実行側プロセッサ１は関数A()を実行する。なお、図９では、プロセッサ１実行キュー(A; NULL)は、２階建てのブロックとして示され、上段に実行すべき処理（この場合はプログラムブロックA）が示され、下段にその処理の依存関係（この場合はNULL）が示されている。その他の実行キューについても同様である。【００３５】
次に、手続要求側プロセッサのプログラムステップstart A→C'とそれに続くdep(A→C', A)に対応して、手続呼び出しプログラムの転送１実行キュー(A→C'; A)が生成される。これは、Aの実行が終了した後、関数A()を実行したプロセッサ１からそのデータを使用する関数C()を実行するプロセッサ３にデータ転送A→Cを行うべきことを示している。この転送１実行キューに従って、手続実行側プロセッサ１による関数A()の実行が終了すると、転送エンジン１は、プロセッサ１によるA()の処理結果を、関数C()を使用するプロセッサ３に転送するデータ転送を実行する。なお、データ転送は、例えば、プロセッサ１、３にキャッシュメモリ等が備えられている場合、そのキャッシュメモリ間で行われてもよく、プロセッサ１、３に割り当てられているメモリ１１１（図８参照）の記憶領域間で行われてもよい。あるいは、キャッシュメモリとメモリ１１１の記憶領域との間で行われてもよい。また、関数A()を実行したプロセッサ１とそのデータを使用して関数C()を実行するプロセッサ３の間のデータ転送を、単に関数A()とC()の間のデータ転送と言うこともあり、A()→C()及びA→C'等の記号で示すこともある。また、関数C()を実行するプロセッサ３へのデータ転送を単にC'と示すこともある。【００３６】
次に、If(k)文の中を説明する。分岐条件kが成立すると、プログラムステップcancel(A→C')により、転送エンジン１による関数A()の処理結果の関数C()へのデータ転送をキャンセルする。【００３７】
次に、プログラムステップstart B()に対応して、手続呼び出しプログラムのプロセッサ２実行キュー(B; NULL)が生成される。これにより、分岐条件kが成立すると、手続実行側プロセッサ２は、プロセッサ２実行キューに従って、Bを実行する。【００３８】
start B→C'とそれに続くdep(B→C'; B)に対応して、手続呼び出しプログラムの転送２実行キュー(B→C'; B, A→C')が生成される。転送エンジン２は、手続実行側プロセッサ２によるBの実行が終了し、かつ転送エンジン１によるデータ転送A→C'が終了すると、データ転送B→C'を実行する。ここで、依存条件A→C'は、手続要求側プロセッサの手続要求プログラムでは図示を省略した。【００３９】
If(k)文の後を説明する。手続要求側プロセッサのwait(C')とそれに続くstart C()に対応して、手続呼び出しプログラムのプロセッサ３実行キュー(C; C')が生成される。手続実行側プロセッサ３は、データ転送C'が終了すると、関数C()を実行する。【００４０】
このように、分岐条件kの成否が確定した時にデータ転送A→C'をキャンセルすることができるので、分岐条件kの成否の確定を待たずに転送エンジン１によるデータ転送A→C'を実行できる。その結果、図７を参照して説明した、分岐条件kの成否が確定するまでデータ転送A→C'の実行を待たねばならないという問題を解消することができる。また、データ転送A→C'を開始した後に分岐条件kが成立した時には、データ転送A→C'がキャンセルされるので、手続実行側プロセッサ２による関数B()の実行が終了しだい転送エンジン２によるデータ転送B→C'を実行することができる。その結果、図６を参照して説明した転送エンジン１によるデータ転送A→C'の終了を待たねばならないという問題も解消することができる。ここで、データ転送のキャンセルとは、データ転送の実行登録の削除と実行中のデータ転送の中止の両方を含むものとする。【００４１】
次に、図５、６、７を参照して説明した従来のマルチプロセッサシステムの構成を説明し、その後に本発明によるマルチプロセッサシステムの構成を説明する。図１０は、従来のマルチプロセッサシステム３００を示す図である。図１０には、（手続要求側プロセッサの）プログラム３１０を記憶するメモリ、実行制御部３２０、内部データ３３０、データ転送装置３４０、プロセッサ３５０が示されている。実行制御部３２０は、実行登録部３２１、相互関係チェック・実行開始部３２２、実行完了部３２３を有する。また、内部データは、実行待ち情報３３１と実行パラメータ情報３３２とを有する。【００４２】
図１０において、次のようなプログラムを実行するものと仮定する：
Y=A()；
Z=C(Y);
このプログラムを手続要求側プロセッサのプログラム（疑似コード、以下同様である）として記述したものが、プログラム３１０である。なお、プログラム３１０では、手続の依存関係は省略している。【００４３】
プログラム３１０に従って、実行制御部３２０の実行登録部３２１は、内部データ３３０の実行待ち情報３３１と実行パラメータ情報３３２とを実行登録する。実行待ち情報３３１は、手続（関数、データ転送等、以下同様である）とその依存関係情報が実行単位ごとに登録されている。図１０では、実行待ち情報３３１の上段に手続を示し、下段にその依存関係情報を示した。また、実行依存情報には、下で説明する実行パラメータ情報３３２へのポインタ（図１０では、実行待ち情報３３１から実行パラメータ情報への矢印で示した）を有している。ここでは、手続A()が依存関係情報なし（NULL）として登録されている。また、手続move Y from A（関数Aの処理結果の変数Yへのデータ転送、すなわちA→C'）がその依存関係情報A()とともに登録されている。また、手続C()がその依存関係情報move Y from A（A→C'）とともに登録されている。さらに、手続move Z from Cがその依存関係情報C()とともに登録されている。【００４４】
実行パラメータ情報３３２にはデータ転送の実行に必要なパラメータ（転送先・転送元アドレス、転送データサイズ等）が、データ転送の依頼毎に記憶される。ここでは、関数Aの結果を変数Yに転送するmove Y from Aに関するパラメータと、関数Cの結果を変数Zに転送するmove Z from Cに関するパラメータとが記憶されている。【００４５】
実行制御部３２０の依存関係チェック・実行開始部３２２は、プログラム３１０のdispatch ()命令により、各手続について実行待ち情報３３１の依存関係をチェックして、各手続の依存関係が満たされているかどうか判断して、実行可能な手続を見つけ、その手続の実行をデータ転送装置３４０またはプロセッサ３５０に依頼する。この処理がデータ転送である場合、依存関係チェック・実行開始部３２３は、内部データ３３０の実行パラメータ情報３３２として記憶されているパラメータ情報を参照して、そのデータ転送処理に係わるパラメータをデータ転送装置３４０に設定する。処理が終了すると、その処理を実行したデータ転送装置３４０またはプロセッサ３５０は、処理が終了したことを実行完了部３２３に通知する。その通知を受けて、実行完了部３２３は、実行待ち情報３３１と実行パラメータ情報を更新する。
［第１の実施形態］
図１１は、本発明の第１の実施形態によるマルチプロセッサシステム４００を示す図である。マルチプロセッサシステム４００は、図１０に示した従来のマルチプロセッサシステム３００と同様に、プログラム４１０を記憶するメモリ、実行制御部４２０、内部データ４３０、データ転送装置４４０、プロセッサ４５０を有している。実行制御部４２０は、図１０の実行制御部と同様に、実行登録部４２１、依存関係チェック・実行開始部４２２、実行完了部４２３を有しているが、実行登録部４２１は、実行制御及びデータ依存関係更新の点で、図１０に示した実行登録部３２１と異なる。依存関係チェック・実行開始部４２２は、依存関係更新の点で、図１０に示した依存関係チェック・実行開始部３２２と異なる。また、実行完了部４２３も、依存関係更新の点で、図１０に示した実行完了部３２３と異なる。【００４６】
内部データ４３０は、図１０の内部データと同様に、実行待ち情報４３１と実行パラメータ情報４３２とを有しており、これらは、図１０に示した実行待ち情報３３１、実行パラメータ情報３３２と基本的に同じである。マルチプロセッサシステム４００は、これらに加えて、データ依存関係情報４３３を有する。このデータ依存関係情報４３３は、未登録、未実行、実行中、実行完了のデータ転送の状態をデータ転送先のデータ毎に示している。同一の転送先データ（ここではデータY）については、同一の情報が参照される。また、データ依存関係情報４３３は、実行パラメータ情報４３２へのポインタを有している（データ依存関係情報４３３から実行パラメータ情報４３２への矢印で示した）。さらに、データ依存関係情報４３３は、（未実行、実行完了のものも含めて）実行待ち情報４３１のデータ転送に係わる依頼情報へのポインタを有する（データ依存関係情報４３３から実行待ち情報４３１への矢印で示した）。【００４７】
実行登録部４２１は、データ転送登録時に、データ依存関係情報４３３を参照して、以下の動作をする。データ依存関係情報４３３として記録された状態が「実行中」の場合、実行パラメータ情報を参照して、データ転送チャネルを特定し、実行しているデータ転送を中止して、そのデータ転送に係わる実行パラメータ情報を削除する。一方、データ依存関係情報４３３として記録された状態が「未実行」の場合、そのデータ転送に係わる実行登録をキャンセルして、実行パラメータ情報を削除する。その後、いずれの場合にも、実行パラメータ情報を設定して、実行登録部４２１は、データ依存関係情報４３３として記録されている状態を「未実行」に設定する。【００４８】
依存関係チェック・実行開始部４２２は、データ転送開始時にそのデータ転送に係わる実行登録を削除し、そのデータ転送に係わるデータ依存関係情報４３３の状態を「実行中」に設定する。そして、データ転送装置４４０にデータ転送を依頼する。【００４９】
実行完了部４２４は、データ転送完了時に、実行パラメータ情報を削除し、データ依存関係情報の状態を「実行完了」に設定する。【００５０】
これらの実行制御部４２０と内部データ４３０とを有することにより、本発明の一実施形態であるマルチプロセッサシステム４００は、先行するデータ転送をキャンセルすることができるので、プログラムに条件分岐が含まれる場合であっても、その分岐条件の成否にかかわらず、データ転送に係わる待ち時間をなくし、または少なくして、プログラムの実行時間を短縮することができる。【００５１】
以下、実行例を参照して、本発明の一実施形態によるマルチプロセッサシステム４００の動作をさらに詳しく説明する。【００５２】
まず、実行例１は、先行するデータ転送の実行が完了した後に分岐条件kの成立が確定し、後続のデータ転送を実行する場合である。この場合は、分岐条件の成立時に先行するデータ転送は完了しているので、特に先行するデータ転送をキャンセルすることなく、後続のデータ転送を実行することができる。【００５３】
次に、実行例２は、先行するデータ転送が登録されているが未実行である時に分岐条件kの成立が確定し、後続のデータ転送を実行する場合である。この場合は、分岐条件の成立時に、先行するデータ転送の実行登録を削除する。【００５４】
最後に、実行例３は、先行するデータ転送が実行中である時に分岐条件kの成立が確定し、後続のデータ転送を実行する場合である。この場合は、分岐条件の成立時に、先行するデータ転送を中止する必要がある。
［実行例１］
実行例１は、先行するデータ転送が実行完了後に、後続のデータ転送を登録する場合である。【００５５】
図１２Ａは、本発明の一実施形態によるマルチプロセッサシステム４００の動作を説明するための、実行例１の実行開始前の状態を示す図である。以下、実行例１−３を通して、マルチプロセッサシステム４００において次のプログラムを例として説明する。【００５６】
Y=A();
If (k) {
Y=B();
}
Z=C(Y);
これを実行制御プログラムで表したものがプログラム４１０である。プログラムの実行開始前には、内部データ４３０の実行待ち情報４３１、実行パラメータ情報４３２には情報が登録されておらず、データ依存関係情報４３３も「未登録」状態となっている。【００５７】
図１２Ｂは、実行例１において、プログラム４１０のプログラムステップstart A(); move Y from A;が実行登録された状態を示す図である。ここで、プログラムステップstart A();は、関数A()を実行待ち情報４３１に実行登録するための命令である。プログラムステップmove Y from A;は、関数A()の実行結果の変数Yとしてのデータ転送を実行待ち情報４３１に実行登録するとともに、実行パラメータ情報４３２にパラメータ登録するための命令である。実行登録部４２１は、これらのプログラムステップを読み、実行待ち情報４３１と実行パラメータ情報４３２に登録をする。ここで、move Y from Aはデータ転送の要求であるが、まだ実行されていないから、実行登録部４２１は、プログラムステップmove Y from Aに係わる実行パラメータ情報を設定し、データ依存関係情報４３３の状態を「未実行」に設定する。【００５８】
次のプログラムステップdispatch ();は、依存関係チェック・実行開始部４２２に対して、実行登録された処理の依存関係情報をチェックして、依存関係が満たされたものを実行することを要求する命令である。【００５９】
まず、依存関係を持たない関数A()の実行が開始されると、関数A()の実行待ち情報は削除される。関数A()の実行が完了すると、依存関係チェック・実行開始部４２２は、実行待ち情報４２１の依存関係をチェックして、手続move Y from Aの依存関係が満たされているかどうか判断し、満たされていれば、次にデータ転送move Y from Aが実行され、実行待ち情報４３１のmove Y from Aは削除される（図１２Ｃ参照）。この時、依存関係チェック・実行開始部４２２は、実行待ち情報４３１を削除するとともに、データYのデータ依存関係情報４３３の状態を「実行中」に設定する。実行パラメータ情報４３２はデータ転送move Y from Aが完了するか、中止されるまで残っている。そして、依存関係チェック・実行開始部４２２は、データ転送装置４４０にデータ転送を実行させる。【００６０】
データ転送装置４４０によるデータ転送の実行が完了すると（図１２Ｄ参照）、実行完了部４２３は、データ転送装置４４０からデータ転送が完了したとの通知を受け、実行（データ転送）パラメータ情報を削除する。また、データ依存関係情報４３３の状態を「実行完了」に設定する。【００６１】
次に、分岐条件kが成立すると、プログラム４１０のstart B(); move Y from B;が実行待ち情報４３１に登録される（図１２Ｅ参照）。move Y from Bはデータ転送の要求であるから、実行登録部４２１は、データ依存関係情報４３３を参照する。登録前、データ依存関係情報４３３の状態は、「実行完了」となっている（図１２Ｄに示したデータ依存関係情報４３３参照）。そこで、実行登録部４２１は、実行パラメータ情報を設定し、データ依存関係情報４３３の状態を「未実行」に設定する（図１２Ｅに示したデータ依存関係情報４３３を参照）。次の命令dispatch ()に基づき、依存関係チェック・実行開始部４２２は、実行待ち情報４３１の依存関係情報をチェックして、実行できる処理（この場合は関数B()）を実行する。【００６２】
関数B()の実行が完了すると（図１２Ｆ参照）、依存関係チェック・実行開始部４２２は、データ転送move Y from Bの依存関係が満たされたと判断する。その判断に基づき、依存関係チェック・実行開始部４２２は、データ転送move Y from Bの実行登録を削除し、データYに係わるデータ依存関係情報４３３の状態を「実行中」に設定し、データ転送装置４４０にデータ転送を実行させる。データ転送move Y from Bに係わる実行パラメータ情報４３２は残っている。【００６３】
データ転送装置４４０は、データ転送が完了すると（図１２Ｇ参照）、それを実行完了部４２３に通知する。この通知を受けて、実行完了部４２３は、実行（データ転送）パラメータ情報４３２を削除し、データ依存関係情報４３３の状態を「実行完了」に設定する。【００６４】
以上のプロセスにより、データYに対する関数B()の実行結果のデータ転送が完了する。それ以降のプログラムステップwait Y; start C(); move Z from C; dispatch ()が同様に実行されて、プログラム４１０の実行が完了する。【００６５】
図１３は、以上の並列実行制御部（実行制御部４２０と内部データ４３０、以下同様）における制御依存関係、（データYの）データ依存関係、及び各プロセッサとデータ転送装置の動作を時系列でまとめたものである。図１３においては、時間は図の上から下に向かって経過するように示している。プログラムのプログラムステップstart A(); move Y from Aが実行登録されると、関数A()の実行と、その実行が完了してからのデータ転送A→Cの実行とが、制御依存関係（実行待ち情報）として登録される。dispatch ()命令により、依存関係が満たされたものから実行される。プロセッサ１は、関数A()の実行開始を指示されると、A()を実行する。Yデータ依存関係は、データ転送A→Cが「未実行」であることを示している。プロセッサ１が関数A()の実行を完了すると、A()が完了してからデータ転送A→Cを実行するとの制御依存関係が満たされる。これにより、データ転送装置がデータ転送A→Cの実行を開始する。Yデータ依存関係は、データ転送A→Cの状態が実行中であることを示している。データ転送装置によるデータ転送A→Cが完了すると、Yデータ依存関係は、データ転送A→Cが実行完了したことを示す。【００６６】
次に、分岐条件kが成立して、プログラム中のプログラムステップstart B(); move Y from Bが実行登録されると、関数B()が実行されてからデータ転送B→Cが実行されるという制御依存関係が登録される。dispatch ()命令により、依存関係が満たされたものから実行される。プロセッサ２は、手続B()の実行開始を指示されると、手続B()を実行する。Yデータ依存関係の状態は、データ転送B→Cが「未実行」であることを示す。プロセッサ２が関数B()の実行を完了すると、B()が完了してからデータ転送B→Cを実行するとの制御依存関係が満たされる。これにより、データ転送装置がデータ転送B→Cの実行を開始する。Yデータ依存関係は、データ転送B→Cの状態は実行中であることを示している。データ転送装置によるデータ転送B→Cが完了すると、Yデータ依存関係がデータ転送B→Cが完了したことを示す。【００６７】
次に、プログラムステップwait Yに従ってデータYへのデータ転送が終わるまで待ち、プログラム中のプログラムステップstart C(); move Z from C;が実行登録されると、関数（手続）C()が制御依存関係として登録される。dispatch ()命令により、依存関係が満たされたものから実行される。プロセッサ２は、手続C()の実行開始を指示されると、手続C()を実行する。ここで処理されるプログラムステップmove Z from Cは、データZに関するものであるから、Yデータ依存関係には何も影響がなく、データ転送B→Cが実行完了したことを引き続き示していることに注意を要する。【００６８】
このように、実行例１においては、先行するデータ転送（move Y from A）が実行完了後に後続のデータ転送（move Y from B）が登録されるため、特に先行するデータ転送（move Y from A）をキャンセルする必要はないことが分かる。
［実行例２］
実行例２は、先行するデータ転送が未実行のときに、後続のデータ転送を登録する場合である。初期状態は、実行例１について図１２Ａを参照して説明した状態と同じである。図１４Ａは、実行例２において、プログラム４１０のstart A(); move Y from Aが実行登録された状態を示す図である。実行登録部４２１は、該当するプログラムステップを読み、実行待ち情報４３１と実行パラメータ情報４３２に登録をする。ここで、move Y from Aはデータ転送の要求であるが、これ以前に登録されている実行待ち情報４２１はないから、実行登録部４２１は、プログラムステップmove Y from Aに対応する実行パラメータ情報を設定し、データ依存関係情報４３３の状態を「未実行」に設定する。dispatch ()命令により、依存関係が満たされたものから実行される。【００６９】
まず、依存関係を持たない関数（手続）A()が実行される。A()の実行が開始されると、A()は実行待ち情報４３１から削除される。A()を実行中に分岐条件kが成立すると、分岐条件成立時のプログラムステップstart B(); move Y from Bが実行待ち情報として登録される（図１４Ｂ参照）。この後続のデータ転送move Y from Bを登録する時、実行登録部４２１は、データ依存関係情報４３３を参照して、先行するデータ転送move Y from Aに係わる状態が「未実行」であるから、実行待ち情報を参照して、先行するデータ転送（この場合move Y from A）の登録を削除（キャンセル）し、その実行パラメータ情報を削除する。そして、後続のデータ転送（この場合move Y from B）の実行パラメータ情報４３２を設定し、データ依存関係情報４３３を「未実行」に設定する（図１４Ｃ参照）。ここで、データ依存関係情報４３３の実行待ち情報４３１及び実行パラメータ情報４３２へのポインタは、move Y from Aからmove Y from Bに置き換えられる。dispatch ()命令により、依存関係が満たされたものから実行される。【００７０】
依存関係チェック・実行開始部４２２は、関数（手続）B()が実行可能であると判断し、プロセッサ４５０にB()の実行を依頼する。B()が完了すると、実行待ち情報４３１に登録されている手続move Y from Bの依存関係（B()の実行完了）が満たされる。依存関係チェック・実行開始部４２２は手続move Y from Bが実行可能であると判断して、その実行登録を削除し、データ依存関係情報４３３を「実行中」に設定する。そして、データ転送装置４４０にデータ転送move Y from Bを実行させる（図１４Ｄ参照）。【００７１】
データ転送装置４４０によるデータ転送move Y from Bが完了すると、その通知を受けた実行完了部４２３は、データ転送move Y from Bに係わる実行パラメータ情報４３２を削除して、データ依存関係情報４３３の状態を「実行完了」に設定する（図示せず）。その後のプログラムステップも同様に進行する。【００７２】
図１５は、以上の並列実行制御部における制御依存関係、（データYの）Yデータ依存関係、及び各プロセッサとデータ転送装置の動作を時系列でまとめたものである。図１５においては、時間は図の上から下に向かって経過するように示している。プログラムのプログラムステップstart A(); move Y from Aの各プログラムステップが実行登録されると、A()の実行と、その実行が完了してからのデータ転送A→Cの実行とが制御依存関係（実行待ち情報）として登録される。プロセッサ１は、A()の実行開始を指示されると、A()を実行する。Yデータ依存関係は、データ転送A→Cが「未実行」であることを示している。プロセッサ１が手続（関数）A()の実行を完了する前に分岐条件kの成立が確定すると、プログラムのstart B(); move Y from Bの各プログラムステップが実行登録される。この時点で、データ転送move Y from Aは、制御依存関係から削除される。プロセッサ２はB()の実行を開始する。プロセッサ２によるB()の実行が完了すると、データ転送move Y from Bに係わる依存関係B()が満たされるので、データ転送装置によりデータ転送B→Cが実行される。この時点で、制御依存関係は削除され、Yデータ依存関係は、データ転送B→Cが実行中であることを示す。プログラムステップwait Yに従ってデータ転送装置によるデータ転送B→Cが完了して、データYへのデータ転送が終わると、プログラム中のプログラムステップstart C(); move Z from Cが実行登録される。手続（関数）C()が制御依存関係として登録される。プロセッサ２は、手続C()の実行開始を指示されると、手続C()を実行する。ここで処理されるプログラムステップmove Z from Cは、データZに関するものであるから、Yデータ依存関係には何も影響がなく、データ転送B→Cが実行完了したことを引き続き示していることに注意を要する。【００７３】
このように、実行例２においては、先行するデータ転送（move Y from A）が実行前に後続のデータ転送（move Y from B）が登録されるため、特に先行するデータ転送（move Y from A）の実行登録が削除（キャンセル）され、後続のデータ転送が遅れることはない。
［実行例３］
実行例３は、先行するデータ転送が実行中のときに、後続のデータ転送を登録する場合である。初期状態は、実行例１について図１２Ａを参照して説明した状態と同じである。図１６Ａは、実行例３において、プログラム４１０のstart A(); move Y from Aが実行登録され、A()の実行が完了し、A→Cが実行されている時の状態を示す図である。実行待ち情報４３１のデータ転送A→Cは削除され、データ依存関係情報４３３は「実行中」に設定されている。データ転送装置４４０はデータ転送A→Cを実行中である。【００７４】
データ転送A→Cを実行中に分岐条件kが成立すると、分岐条件成立時のプログラムステップstart B(); move Y from Bが実行待ち情報として登録される（図１６Ｂ参照）。この後続のデータ転送move Y from Bを登録する時、実行登録部４２１は、データ依存関係情報４３３を参照して、その状態が「実行中」であるから、実行（データ転送）パラメータ情報を参照して、実行チャネル（この場合A→C）を特定して実行しているデータ転送を中止（キャンセル）する（図１６Ｃ参照）。図中、データ依存関係情報４３３、実行パラメータ情報４３２、データ転送装置４４０を結ぶ矢印は、実行登録部４２１によるデータ参照の順序を表している。次いで、実行パラメータ情報（この場合、move Y from A）を削除する。そして、後続のデータ転送（この場合move Y from B）の実行パラメータ情報４３２を設定し、データ依存関係情報４３３を「未実行」に設定する（図１６Ｄ参照）。ここで、データ依存関係情報の実行パラメータ情報４３２及び実行待ち情報４３１へのポインタは、move Y from Aからmove Y from Bに変更される。dispatch ()命令により、依存関係が満たされたものから実行される。【００７５】
手続B()が完了すると、実行待ち情報４３１に登録されている手続move Y from Bの依存関係（B()の実行完了）が満たされる。依存関係チェック・実行開始部４２２は手続move Y from Bが実行可能であると判断し、実行登録（この場合、move Y from B）を削除し、データYに係わるデータ依存関係情報４３３を「実行中」に設定する。そして、データ転送装置４４０にデータ転送move Y from Bを実行させる（図１６Ｅ参照）。【００７６】
データ転送装置４４０によるデータ転送move Y from Bが完了すると、その通知を受けた実行完了部４２３は、データ転送move Y from Bに係わる実行（データ転送）パラメータ情報４３２を削除して、データ依存関係情報４３３の状態を「実行完了」に設定する（図示せず）。その後のプログラムステップも同様である。【００７７】
図１７は、以上の並列実行制御部における制御依存関係、（データYの）Yデータ依存関係、及び各プロセッサとデータ転送装置の動作を時系列でまとめたものである。図１７においては、時間は図の上から下に向かって経過するように示している。プログラムのstart A(); move Y from Aの各プログラムステップが並列実行制御の制御依存関係に実行登録されると、A()の実行と、その実行が完了してからのデータ転送A→Cの実行とが制御依存関係（実行待ち情報）として登録される。プロセッサ１は、手続A()の実行開始を指示されると、A()を実行する。Yデータ依存関係は、データ転送A→Cが「未実行」であることを示している。dispatch ()命令により、依存関係が満たされたものから実行される。A()が実行可能と判断され、プロセッサ１が手続（関数）A()の実行を依頼される。プロセッサ１はA()を実行する。【００７８】
プロセッサ１でA()の実行が終了し、依存関係情報が更新される。依存関係がチェックされ、A()からC()へのデータ転送が実行可能と判断され、データ転送装置にA()からC()へのデータYの転送の実行開始を依頼する。データ転送装置はデータ転送A→Cの実行開始要求を受けてデータ転送A→Cを実行する。データYのデータ依存関係情報の状態を、データ転送A→Cが実行中であることを示すように変更する。【００７９】
このデータ転送中に分岐条件kの成立が確定すると、プログラムのstart B(); move Y from Bの各プログラムステップが並列実行制御の制御依存関係に実行登録される。この時、実行制御部は、Yデータの依存関係を確認し、その状態が実行中であるので、データ転送A→Cを中止し、Yデータの依存関係を未実行に変更する。また、実行パラメータを削除し、実行パラメータをBからCへの転送パラメータに設定する。【００８０】
依存関係がチェックされ、B()が実行可能と判断されると、プロセッサ２は、B()の実行を依頼される。プロセッサ２によるB()の実行が完了すると、依存関係情報が更新される。依存関係がチェックされ、データ転送move Y from Bに係わる依存関係B()が満たされるので、データ転送装置によりデータ転送B→Cが実行される。この時点で、制御依存関係B→Cは削除され、Yデータ依存関係は、データ転送B→Cが実行中であることを示す。データ転送装置によるデータ転送B→Cが完了すると、プログラムステップwait Yに従ってデータYへのデータ転送が終わり、プログラム中のプログラムステップstart C(); move Z from Cが実行登録されると、手続（関数）C()が制御依存関係として登録される。プロセッサ２は、手続C()の実行開始を指示されると、手続C()を実行する。ここで処理されるプログラムステップmove Z from Cは、データZに関するものであるから、Yデータ依存関係には何も影響がなく、データ転送B→Cが実行完了したことを示していることに注意を要する。【００８１】
このように、実行例３においては、先行するデータ転送（move Y from A）が実行中に後続のデータ転送（move Y from B）が登録されるため、特に先行するデータ転送（move Y from A）が中止（キャンセル）され、後続のデータ転送が遅れることはない。【００８２】
図１８Ａから図１８Ｃは、ここまで説明してきたマルチプロセッサシステム４００の実行制御部４２０による動作フローを示す図である。図１８Ａは、プログラムステップの内部データへの登録実行のプロセスを示している。【００８３】
ステップＳ１００において、プログラムを読み出す。ステップＳ１０２において、データ依存関係情報を参照する。【００８４】
ステップＳ１０４において、先行するデータ転送が実行中である場合、ステップＳ１０６において、実行パラメータ情報を参照して、実行チャネルを特定した上で、実行しているデータ転送を中止（キャンセル）する。そして、ステップＳ１０８において、中止したデータ転送の実行パラメータ情報を削除する。そして、ステップＳ１１０に進む。【００８５】
ステップＳ１０４において、先行するデータ転送が実行中でない場合は、そのままステップＳ１１０に進む。【００８６】
ステップＳ１１０において、先行するデータ転送が未実行である場合、ステップＳ１１２において、実行待ち情報を参照して、先行するデータ転送の実行登録をキャンセルする。ステップＳ１１４において、先行するデータ転送の実行パラメータ情報を削除する。ステップＳ１１６に進む。【００８７】
ステップＳ１１０において、先行するデータ転送が未実行でない場合は、そのままステップＳ１１６に進む。【００８８】
ステップＳ１１６において、新しく登録したデータ転送の実行パラメータ情報を設定する。次に、ステップＳ１１８において、データ依存情報を「未実行」に設定する。最後に、ステップＳ１２０において、実行待ち情報とその中の依存関係情報を登録する。【００８９】
図１８Ｂは、依存関係チェック及び実行開始に係わるプロセスを示している。なお、以下の説明では、処理されるプログラムステップは、データ転送に係わるものであるとする。【００９０】
ステップＳ１３０において、実行待ち、依存関係を読み出す。ステップＳ１３２において、依存関係がないか、依存関係が満たされていて実行可能な処理があるか判断する。実行可能な処理があれば、ステップ１３４において、その実行可能な手続の実行登録を削除し、ステップ１３６において、データ依存情報を「実行中」に設定する。ステップＳ１３８において、データ転送装置またはプロセッサに実行開始を指示する。【００９１】
図１８Ｃは、実行制御部４２０による実行完了に係わる処理を示している。ステップＳ１４０において、実行完了したデータ転送の実行パラメータを削除する。ステップＳ１４２において、データ転送したデータのデータ依存関係情報を「実行完了」に設定する。次に、ステップＳ１４４において、実行登録情報の依存関係を更新して、処理を終了する。【００９２】
図１９は、本発明の第１の実施形態によるマルチプロセッサシステム４００において、分岐条件が成立しない場合を示す図である。プログラムのプログラムステップstart A(); move Y from Aに基づき、制御依存関係とYデータ依存関係が実行登録される。これに応じて、プロセッサ１は、A()を実行する。この時、Yデータ依存関係は、データ転送A→Cが未実行であることを示している。プロセッサ１によるA()の実行が完了すると、データ転送装置はデータ転送A→Cを実行する。この時、Yデータ依存関係は、データ転送A→Cが実行中であることを示している。プログラムには、プログラムステップwait Yが含まれているので、データ転送A→Cが完了するのを待つ。データ転送装置によるデータ転送A→Cが完了すると、Yデータ依存関係はデータ転送A→Cの実行完了を示す。プログラムのプログラムステップstart C(); move Z from Cが実行登録されると、プロセッサ２がC()を実行する。【００９３】
以上説明した第１の実施形態では、先行するデータ転送をキャンセルすることを明示的に指定せず、実行登録時にデータ依存関係情報を参照し、同じデータを転送先とするデータ転送がないかチェックするものである。このようにすることで、先行するデータ転送のキャンセル動作を指定しなくてもよいので、従来使用していたプログラム資産をそのまま使用することができる。
［第２の実施形態］
以下に説明する第２の実施形態は、プログラム中に、先行するデータ転送をキャンセルすることを明示的に指定するものである。分岐条件の成立が確定した後、プログラム中に明示的にキャンセル動作を指定する。このようにすることで、実行制御部での処理が簡単になり、システム開発やメンテナンスに要するコストを削減することができる。【００９４】
以下、第１の実施形態と異なる部分に重点を置いて説明する。【００９５】
第１の実施形態では、実行制御部は、実行登録時にデータ依存関係を参照し、同じデータへのデータ転送がないかチェックしていたが、第２の実施形態ではチェックしない。第１の実施形態では、処理を登録するたびに、キャンセルすべきデータ転送がないか判断していたが、第２の実施形態では、その判断がなくなる替わりに、プログラムステップcancel()が要求されたときに、データ依存関係情報を参照して、同じデータへのデータ転送をチェックし、その前に登録されたデータ転送を必要に応じてキャンセルするものである。プログラム中にcancel()命令を挿入する場所を見つけるのは容易であり、プログラム開発の工数は増えないが、実行制御部の動作が簡単になるメリットがある。【００９６】
図２０は、本発明の第２の実施形態によるマルチプロセッサシステム５００を示す図である。マルチプロセッサシステム５００は、プログラム５１０を格納するメモリ、実行制御部５２０、内部データ５３０（実行制御部５２０と内部データ５３０とを併せて並列実行制御部と呼ぶ）、データ転送装置５４０、プロセッサ５５０（データ転送装置５４０とプロセッサ５５０を併せて実行ユニットと呼ぶ）を有する。実行制御部５２０は、実行登録部５２１、依存関係チェック・実行開始部５２２、実行完了部５２３を有し、さらにキャンセル制御部５２５を有している。内部データ５３０は、実行待ち情報／制御依存関係情報５３１、実行パラメータ情報５３２、データ依存関係情報５３３を有する。マルチプロセッサシステム５００においては、上で説明したように、プログラム５１０のif (k)文に、Yへのデータ転送をキャンセルする旨の命令cancel Yが含まれている。【００９７】
図２１Ａ及び２１Ｂは、マルチプロセッサシステム５００の実行制御部の動作フローを示す図である。【００９８】
図２１Ａは、プログラムステップの実行登録のプロセスを示している。ステップＳ２００において、プログラムを読み出す。そして、ステップＳ２０２において、実行待ち情報とその中の依存関係情報を登録して、処理を終了する。【００９９】
図２１Ｂは、キャンセル制御のプロセスを示す。ステップＳ２１０において、データ依存関係情報を参照する。【０１００】
ステップＳ２１２において、先行するデータ転送が実行中である場合、ステップＳ２１４において、実行パラメータ情報を参照して、実行チャネルを特定した上で、実行しているデータ転送を中止（キャンセル）する。そして、ステップＳ２１６において、中止したデータ転送の実行パラメータ情報を削除する。そして、ステップＳ２１８に進む。【０１０１】
ステップＳ２１２において、先行するデータ転送が実行中でない場合は、そのままステップＳ２１８に進む。【０１０２】
ステップＳ２１８において、先行するデータ転送が未実行である場合、ステップＳ２２０において、実行（データ転送）待ち情報を参照して、先行するデータ転送の実行（データ転送）登録をキャンセルする。次に、ステップＳ２２２において、先行するデータ転送の実行パラメータ情報を削除する。そして、ステップＳ２２４に進む。【０１０３】
ステップＳ２１８において、先行するデータ転送が未実行でない場合は、そのままステップＳ２２４に進む。【０１０４】
ステップＳ２２４において、新しく登録したデータ転送の実行（データ転送）パラメータ情報を設定する。次に、ステップＳ２２６において、データ依存情報を「未実行」に設定する。【０１０５】
これ以降、依存関係のチェックから実行完了までのプロセスは、図１８ＢのステップＳ１３０−Ｓ１３８、及び図１８ＣのステップＳ１４０−１４４と同一であるから、説明を省略する。【０１０６】
このように、第２の実施形態によるマルチプロセッサシステム５００の実行制御部５２０の動作フローは、図１８に示した実行登録のステップＳ１０２−Ｓ１１８を、キャンセル制御プロセスとして独立させたものである。【０１０７】
図２２は、分岐条件kが成立する場合における、並列実行制御部の制御依存関係、（データYの）Yデータ依存関係、及び各プロセッサとデータ転送装置の動作を時系列でまとめたものである。図２２においては、時間は図の上から下に向かって経過するように示している。【０１０８】
プログラムのstart A(); move Y from A;の各プログラムステップが実行登録されると、手続（関数）A()の実行と、その実行が完了してからのデータ転送A→Cの実行とが制御依存関係として登録される。プロセッサ１は、手続A()の実行開始を指示されると、手続A()を実行する。Yデータ依存関係は、データ転送A→Cが「未実行」であることを示している。dispatch ()命令により、依存関係が満たされたものから実行される。【０１０９】
依存関係がチェックされ、A()が実行可能と判断され、プロセッサ１へA()の実行が依頼される。プロセッサ１はA()の実行を開始する。【０１１０】
プロセッサ１がA()の実行を完了すると、依存関係情報が更新される。再度依存関係がチェックされ、A()からC()のデータ転送が実行可能と判断されると、データ転送装置はデータ転送A→Cの実行開始要求を受けてデータ転送A→Cを実行する。データYのデータ依存関係情報の状態をA→C実行中に変更する。【０１１１】
このデータ転送中に分岐条件kの成立が確定すると、B()の実行、及びB()からC()へのデータYのデータ転送が、並列実行制御の制御依存関係に登録される。次にプログラムステップcancel ()を読み出す。先行するデータ転送A→Cに係わるデータYのデータ依存情報が参照され（図２１ＢのステップＳ２１０参照）、データ転送が実行中であるから（同ステップＳ２１２参照）、データ転送装置によるデータ転送A→Cの実行が中止される（同ステップＳ２１４参照）。そして、データ転送A→Cに係わる実行パラメータが削除される（同ステップＳ２１６参照）。次に、新しいデータ転送B→Cに係わる実行パラメータが設定され（同ステップＳ２２４参照）、Yデータ依存情報が未実行に設定される（同ステップＳ２２６参照）。【０１１２】
依存関係がチェックされ、B()が実行可能と判断され、プロセッサ２へB()の実行が依頼される。プロセッサ２はB()の実行を開始する。【０１１３】
プロセッサ２によるB()の実行が完了すると、依存関係情報が更新される。依存関係がチェックされ、データ転送move Y from Bに係わる依存関係B()が満たされるので、データ転送装置によりデータ転送B→Cが実行される。この時点で、制御依存関係B→Cは削除され、Yデータ依存関係は、データ転送B→Cが実行中であることを示すように変更される。データ転送装置によるデータ転送B→Cが完了すると、プログラムステップwait Yに従ってデータYへのデータ転送が終わり、プログラム中のプログラムステップstart C(); move Z from Cが実行登録されると、関数C()が制御依存関係として登録される。プロセッサ２は、手続C()の実行開始を指示されると、手続C()を実行する。ここで処理されるプログラムステップmove Z from Cは、データZに関するものであるから、Yデータ依存関係には何も影響がなく、データ転送B→Cが実行完了したことを示していることに注意を要する。
［第３の実施形態］
この実施形態では、分岐条件kが成立して、先行するデータ転送が実行中であるが上書きされることが分かった場合、先行するデータ転送が終了するまで後続のデータ転送を待たせる。【０１１４】
実行中の先行するデータ転送を中断するためには、データ転送に関するパラメータをデータ転送が完了するまで保持しておかなければならず、記憶容量を消費するし実行制御も複雑になってしまう。そこで、実行中のデータ転送はキャンセルしなくても、実行前のデータ転送だけをキャンセルすることにより、データ転送に係る待ち時間を大幅に削減することができる。本実施形態では、転送開始前のデータ転送をキャンセルするものである。【０１１５】
第３の実施形態を第１の実施形態と比較しつつ説明する。並列実行制御装置及びデータ構造は第１の実施形態と基本的に同一であるが、実行制御部の動作フローが異なっている。【０１１６】
本実施形態の実行制御部の動作フローを図２３に示す。【０１１７】
ステップ３００において、プログラムを読み出す。ステップＳ３０２において、データ依存関係情報を参照する。【０１１８】
ステップＳ３０４において、先行するデータ転送が実行中である場合、ステップＳ３２０に進み、実行待ち情報とその中の依存関係情報を登録して処理を終了する。【０１１９】
ステップＳ３０４において、先行するデータ転送が実行中でない場合は、ステップＳ３１０に進み、先行するデータ転送が未実行であるか判断する。先行するデータ転送が未実行である場合、ステップＳ３１２において、実行待ち情報を参照して、先行するデータ転送の実行登録をキャンセルする。そして、ステップＳ３１４において、先行するデータ転送の実行パラメータ情報を削除する。ステップＳ３１６に進む。【０１２０】
ステップＳ３１０において、先行するデータ転送が未実行でない場合は、そのままステップＳ３１６に進む。【０１２１】
ステップＳ３１６において、新しく登録したデータ転送の実行パラメータ情報を設定する。次に、ステップＳ３１８において、データ依存情報を「未実行」に設定する。最後に、ステップＳ３２０において、実行待ち情報とその中の依存関係情報を登録して処理を終了する。【０１２２】
これ以降の動作フローは、図１８Ｂ、図１８Ｃを参照して説明した第１の実施形態の動作フローと同じである。【０１２３】
分岐条件が成立した場合の処理を図２４に示す。【０１２４】
プログラムのstart A(); move Y from A; dispatch ();により、関数A()と、A()からC()へのデータYのデータ転送とが、並列実行制御の制御依存関係に登録される。また、データYのデータ依存関係情報として、Yの転送状態を未実行に設定する。制御依存関係をチェックして、A()が実行可能と判断され、関数A()の実行がプロセッサ１に要求される。プロセッサ１は関数A()を実行する。【０１２５】
プロセッサ１でA()の実行が終了すると、依存関係情報が更新される。依存関係がチェックされA()からC()へのデータ転送が実行可能であると判断されると、そのデータ転送がデータ転送装置に要求される。データYのデータ依存関係情報を、データ転送A→Cが実行中であることを示すように設定する。【０１２６】
A()からC()への転送終了前に、分岐条件kが確定すると、関数B()と、B()からC()へのデータYのデータ転送とが、並列実行制御の制御依存関係に登録される。このとき、実行制御部はYデータの依存関係を確認し、その状態が未実行である場合は、A()からC()へのデータ転送の実行登録を削除する。実行中である場合は、そのまま実行を継続させる。【０１２７】
制御依存関係をチェックし、関数B()が実行可能と判断されると、プロセッサ２に関数B()の実行を要求する。プロセッサ２はB()を実行する。【０１２８】
プロセッサ２で関数B()の実行が終了すると、依存関係情報が更新される。この時点までにA()からC()へのデータ転送が終了していれば、依存関係をチェックしてB()からC()へのデータ転送が実行可能であると判断される。データ転送装置にB()からC()へのデータYのデータ転送の開始を要求する。A()からC()へのデータ転送が終了していなければ、B()からC()へのデータ転送は、A()からC()へのデータ転送が終了するまで待つ（このため、制御依存関係として、データ転送B→Cの依存関係としてデータ転送A→Cの完了を予め登録しておけばよい）。【０１２９】
B()からC()へのデータYの転送が終了したあと、依存関係情報が更新され、依存関係チェック後、C()が実行される。
［第４の実施形態］
図２５は、本発明の第４の実施形態による、マルチプロセッサシステム６００を示す図である。本実施形態のマルチプロセッサシステム６００は、実行ユニット中にプロセッサ６５０を有するが、データ転送を行う専用のデータ転送装置を持たない点で、上記の実施形態と異なる。データ転送は、プロセッサ６５０により行うことができる。【０１３０】
本願発明は、このような構成を採用することにより、専用のデータ転送装置がないハードウェアでも実施することができる。マルチプロセッサシステム６００の動作フロー及び各処理ステップは、上記の第１の実施形態から第３の実施形態で説明したものと同じである。
［第５の実施形態］
図２６は、本発明の並列プログラム実行装置の一実施形態のハードウェアを示す、分散型マルチプロセッサシステムを示すブロック図である。図２６に示した分散型マルチプロセッサシステム２００は、複数のプロセッサ２０１、２０２、２０３等、メモリ２１１、２１２、２１３等、データ転送装置２２１、２２２、２２３等、通信装置２３１、２３２、２３３等、を含み、これらの構成要素は、それぞれ共通のシステムバス２５１、２５２、２５３等を介して命令、アドレス情報、データをやりとりすることができるように構成されている。すなわち、プロセッサ２０１、メモリ２１１、データ転送装置２２１、通信装置２３１がシステムバス２５１を介して命令、アドレス情報、データをやりとりすることができるように構成され、１つのサブシステムを構成している。プロセッサ２０２、メモリ２１２、データ転送装置２２２、通信装置２３２がシステムバス２５２を介して命令、アドレス情報、データをやりとりすることができるように構成され、１つのサブシステムを構成している。さらに、プロセッサ２０３、メモリ２１３、データ転送装置２２３、通信装置２３３がシステムバス２５３を介して命令、アドレス情報、データをやりとりすることができるように構成され、１つのサブシステムを構成している。これらのサブシステムは、共通の通信路２６０を介して通信することができる。【０１３１】
例えばプロセッサ２０１を含むサブシステムにおいて、プロセッサ２０１は、与えられたプログラムを実行して、例えばメモリ２１１から読み出したデータを処理して、その結果をメモリ２１１に書き込んだりすることができる。メモリ２１１は、プロセッサ２０１が実行するプログラムを記憶し、また、プロセッサ２０１が処理するデータを記憶する。データ転送装置２２１は、分散型マルチプロセッサシステム２００の外部にある装置とメモリ２１１との間のデータ転送を制御する。通信装置２３１は、通信路２６０を介して、プロセッサ２０２、２０３等を含む他のサブシステムとの通信を制御する。他のサブシステムについても同様である。これらの構成要素は、本発明の並列プログラム実行装置の動作に係る部分を除いて、当業者の間で周知であるから、これ以上の説明は要しない。【０１３２】
このようにプロセッサ、データ転送装置、及びメモリを有する各サブシステムが、通信装置により共通の通信路を介して通信する構成を採用した分散型マルチプロセッサシステム２００においても、本発明の並列プログラム実行装置を実施できることは明らかである。【０１３３】
以上、本発明の実施の形態について詳述したが、本発明は特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形及び変更が可能である。
【産業上の利用可能性】
【０１３４】
本発明により、プログラムに条件分岐が含まれる場合であっても、その分岐条件の成否にかかわらず、データ転送に係わる待ち時間をなくし、または少なくして、プログラムの実行時間を短縮することができるマルチプロセッサシステムを提供することができる。
【図１】
2008114443.tif 000003
【図２】
2008114443.tif 000004
【図３】
2008114443.tif 000005
【図４】
2008114443.tif 000006
【図５】
2008114443.tif 000007
【図６】
2008114443.tif 000008
【図７】
2008114443.tif 000009
【図８】
2008114443.tif 000010
【図９】
2008114443.tif 000011
【図１０】
2008114443.tif 000012
【図１１】
2008114443.tif 000013
【図１２Ａ】
2008114443.tif 000014
【図１２Ｂ】
2008114443.tif 000015
【図１２Ｃ】
2008114443.tif 000016
【図１２Ｄ】
2008114443.tif 000017
【図１２Ｅ】
2008114443.tif 000018
【図１２Ｆ】
2008114443.tif 000019
【図１２Ｇ】
2008114443.tif 000020
【図１３】
2008114443.tif 000021
【図１４Ａ】
2008114443.tif 000022
【図１４Ｂ】
2008114443.tif 000023
【図１４Ｃ】
2008114443.tif 000024
【図１４Ｄ】
2008114443.tif 000025
【図１５】
2008114443.tif 000026
【図１６Ａ】
2008114443.tif 000027
【図１６Ｂ】
2008114443.tif 000028
【図１６Ｃ】
2008114443.tif 000029
【図１６Ｄ】
2008114443.tif 000030
【図１６Ｅ】
2008114443.tif 000031
【図１７】
2008114443.tif 000032
【図１８Ａ】
2008114443.tif 000033
【図１８Ｂ】
2008114443.tif 000034
【図１８Ｃ】
2008114443.tif 000035
【図１９】
2008114443.tif 000036
【図２０】
2008114443.tif 000037
【図２１Ａ】
2008114443.tif 000038
【図２１Ｂ】
2008114443.tif 000039
【図２２】
2008114443.tif 000040
【図２３】
2008114443.tif 000041
【図２４】
2008114443.tif 000042
【図２５】
2008114443.tif 000043
【図２６】
2008114443.tif 000044
【手続補正書】
【提出日】平成21年9月18日(2009.9.18)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
マルチプロセッサシステムであって、
複数のプロセッサと、
前記複数のプロセッサによる処理及び前記複数のプロセッサ間のデータ転送を制御する実行制御部と、
前記データ転送の状態を示すデータ依存関係情報を含む内部データ記憶部と、
を有し、
前記実行制御部は、先行するデータ転送が実行登録された後に、前記プロセッサによる前記処理に対する制御の流れが確定し、前記先行するデータ転送と同一の転送先への別のデータ転送が必要となったとき、前記データ依存関係情報に基づき前記先行するデータ転送をキャンセルすることを特徴とするマルチプロセッサシステム。
【請求項２】
請求項１に記載のマルチプロセッサシステムであって、
前記実行制御部は、前記先行するデータ転送が実行可能となったとき、前記制御の流れが確定する前であっても前記先行するデータ転送の実行を開始することを特徴とするマルチプロセッサシステム。
【請求項３】
請求項１又は２に記載のマルチプロセッサシステムであって、
前記実行制御部は、前記制御の流れが確定した時に前記先行するデータ転送が未実行であるとき、前記先行するデータ転送の実行登録を削除することを特徴とするマルチプロセッサシステム。
【請求項４】
請求項１又は２に記載のマルチプロセッサシステムであって、
前記実行制御部は、前記制御の流れが確定した時に前記先行するデータ転送が実行中であるとき、前記先行するデータ転送の実行を中止することを特徴とするマルチプロセッサシステム。
【請求項５】
請求項１乃至４のいずれか一つに記載のマルチプロセッサシステムであって、
前記内部データ記憶部は、実行されるデータ転送が登録される実行待ち情報と、前記実行されるデータ転送に係わる実行パラメータが登録される実行パラメータ情報とをさらに含むことを特徴とするマルチプロセッサシステム。
【請求項６】
請求項１乃至５のいずれか一つに記載のマルチプロセッサシステムであって、
前記複数のプロセッサ間のデータ転送を実行する少なくとも１つのデータ転送装置を有することを特徴とするマルチプロセッサシステム。
【請求項７】
複数のプロセッサと、前記複数のプロセッサ間のデータ転送の状態を示すデータ依存関係情報を含む内部データ記憶部とを有するマルチプロセッサシステムの制御方法であって、
先行するデータ転送を実行登録し、
前記複数のプロセッサによる処理に対する制御の流れが確定したか判定し、
前記制御の流れが確定し、前記先行するデータ転送と同一の転送先への別のデータ転送が必要となったとき、前記データ依存関係情報に基づき前記先行するデータ転送をキャンセルする
ことを特徴とする制御方法。
【請求項８】
複数のプロセッサと、前記複数のプロセッサ間のデータ転送の状態を示すデータ依存関係情報を含む内部データ記憶部とを有するマルチプロセッサシステムを制御するコンピュータプログラムであって、前記複数のプロセッサのうちの少なくとも１つのプロセッサに、
先行するデータ転送を実行登録し、前記複数のプロセッサによる処理に対する制御の流れが確定したか判定し、前記制御の流れが確定し、前記先行するデータ転送と同一の転送先への別のデータ転送が必要となったとき、前記データ依存関係情報に基づき前記先行するデータ転送をキャンセルすることを、
実行させることを特徴とするコンピュータプログラム。
【国際調査報告】
2008114443.tif 000045
2008114443.tif 000046
2008114443.tif 000047