(57)【要約】【課題】プロセス間通信における通信待合せが発生すると、実行性能が低下すること。【解決手段】並列プログラムを構成する複数のプロセスを、１以上のプロセッサで並列実行する並列プロセス実行方法であって、それぞれのプロセスは、プロセス間通信処理中に待ち合わせが発生した場合、メモリを共有する他プロセスであってプロセス状態が「演算処理中」かつ「仕掛り通信処理有り」である他プロセスを探索する。そして、それぞれのプロセスは、上記探索した他プロセスの仕掛り状態の通信処理を他プロセスに代わって実行する。【選択図】図９
2018147126.tif 000002
【特許請求の範囲】
【請求項１】
並列プログラムを構成する複数のプロセスを、１以上のプロセッサで並列実行する並列プロセス実行方法であって、
それぞれの前記プロセスは、プロセス間通信処理中に待ち合わせが発生した場合、メモリを共有する他プロセスであってプロセス状態が「演算処理中」かつ「仕掛り通信処理有り」である他プロセスを探索し、前記探索した前記他プロセスの仕掛り状態の通信処理を前記他プロセスに代わって実行する、
並列プロセス実行方法。
【請求項２】
それぞれの前記プロセスは、初期化処理を実行し、
前記初期化処理では、
プロセス間共有メモリ領域に配置した通信制御データ、ロック変数、およびプロセス状態変数を初期化した後、全プロセスのバリア同期の処理を行う、
請求項１に記載の並列プロセス実行方法。
【請求項３】
それぞれの前記プロセスは、前記バリア同期の成立後に通信開始処理を実行し、
前記通信開始処理では、
前記プロセス状態変数を「通信処理中」に設定してデータ転送を開始し、前記データ転送が完了したか否かを確認し、データ転送が完了していれば、前記プロセス状態変数を「演算処理中」に設定し、データ転送が完了していなければ前記プロセス状態変数を「演算処理中」かつ「仕掛り通信処理有り」に設定する、
請求項２に記載の並列プロセス実行方法。
【請求項４】
それぞれの前記プロセスは、前記プロセス状態変数を「通信処理中」あるいは「演算実行中」に変更する前に、前記ロック変数によるロックを取得し、前記プロセス状態変数を「通信処理中」あるいは「演算実行中」に変更した後に、前記ロック変数によるロックを解放する、
請求項３に記載の並列プロセス実行方法。
【請求項５】
それぞれの前記プロセスは、前記通信開始処理の実行後に演算処理を実行し、前記演算処理を終えると、通信完了処理を実行し、
前記通信完了処理では、
前記プロセス状態変数を「通信処理中」に設定した後、仕掛り通信があるか否かを判定し、仕掛り通信がなければ前記プロセス状態変数を「演算実行中」に設定して前記通信完了処理を終了し、
仕掛り通信があれば、現在時刻を取得して保持した後、仕掛り通信のデータ転送処理を、継続可能か否かを判定し、継続可能であれば仕掛り通信のデータ転送処理を実施した後、再び仕掛り通信があるか否かの前記判定に戻り、
仕掛り通信のデータ転送処理を継続可能でない状態が前記取得した現在時刻から一定時間以上続いた場合、前記プロセス状態変数を「演算実行中」に設定した後、メモリを共有する他プロセスであってプロセス状態が「演算処理中」かつ「仕掛り通信処理有り」である他プロセスの探索を開始する、
請求項３または４に記載の並列プロセス実行方法。
【請求項６】
それぞれの前記プロセスは、メモリを共有する他プロセスであってプロセス状態が「演算処理中」かつ「仕掛り通信処理有り」である他プロセスの探索では、
前記他プロセスの前記ロック変数によるロックを取得した後、前記他プロセスの前記プロセス状態変数が「演算処理中」かつ「仕掛り通信処理有り」であるか否かを判定し、
前記他プロセスの前記プロセス状態変数が「演算処理中」かつ「仕掛り通信処理あり」であれば、前記他プロセスの前記仕掛り状態の通信処理を前記他プロセスに代わって実行した後、前記他プロセスの前記ロック変数によるロックを解放し、
前記他プロセスの前記プロセス状態変数が「演算処理中」かつ「仕掛り通信処理あり」でなければ、前記他プロセスの前記ロック変数によるロックを解放する、
請求項５に記載の並列プロセス実行方法。
【請求項７】
並列プログラムを構成する複数のプロセスを並列実行する１以上のプロセッサを有する情報処理装置であって、
それぞれの前記プロセスは、プロセス間通信処理中に待ち合わせが発生した場合、メモリを共有する他プロセスであってプロセス状態が「演算処理中」かつ「仕掛り通信処理有り」である他プロセスを探索し、前記探索した前記他プロセスの仕掛り状態の通信処理を前記他プロセスに代わって実行するように構成されている、
情報処理装置。
【請求項８】
１以上のプロセッサを有するコンピュータに、
並列プログラムを構成する複数のプロセスを並列実行させるためのプログラムであって、それぞれの前記プロセスは、プロセス間通信処理中に待ち合わせが発生した場合、メモリを共有する他プロセスであってプロセス状態が「演算処理中」かつ「仕掛り通信処理有り」である他プロセスを探索し、前記探索した前記他プロセスの仕掛り状態の通信処理を前記他プロセスに代わって実行する、
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列プロセス実行方法、情報処理装置、およびプログラムに関する。
【背景技術】
【０００２】
分散並列プログラムの実行において、非同期データ転送機能を利用し、演算処理と通信処理をオーバーラップさせ、実行性能を改善する手法が知られている。
【０００３】
しかし、演算処理と通信処理をオーバーラップさせるためには、データ転送専用のハードウェアを備える必要がある。また、転送対象となるデータ配置に制約（例えば、特殊なメモリ領域に配置する必要がある、連続領域のみに限定される、など）が存在することもある。そのため、実際にはオーバーラップ動作を実現できないことがある。
【０００４】
そこで、分散並列型プログラムの実行において、プロセス間通信の処理中に発生する通信待合せに着目し、性能改善の手法を講じた先行技術として特許文献１および特許文献２に記載の技術がある。
【０００５】
特許文献１に記載の技術では、全ての計算機に分散されているデータを１つ或いは全ての計算機に集めるＧａｔｈｅｒ通信、１つの計算機のデータを分割してそれぞれ他の計算機に分配するＳｃａｔｔｅｒ通信、それぞれの計算機にあるデータを分割しそれぞれ全ての計算機に分配するＡｌｌｔｏａｌｌ通信など、全プロセスが参加して行う集団通信を対象として、通信待合せ自体を発生させない様に通信相手を適切に選択（スケジューリング）するようにしている。
【０００６】
また特許文献２に記載の技術では、並列プログラムを構成する複数のプロセスを同時に実行開始し、また同時に実行終了するようにスケジューリングすることにより、データ交換のための同期待ち時間の増加を防止している。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平１１−１１０３６２号公報
【特許文献２】特開２００３−２５６２２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１および特許文献２に記載の技術は、特殊なスケジューラ等を使用してプロセス間通信における通信待合せ自体を防止することによって実行性能を改善している。そのため、特殊なスケジューラ等の使用を避けた汎用の情報処理装置では、プロセス間通信における通信待合せが発生し、実行性能が低下する。
【０００９】
本発明の目的は、上述した課題を解決する並列プロセス実行方法、情報処理装置、及びプログラムを提供することにある。
【課題を解決するための手段】
【００１０】
本発明の一形態に係る並列プロセス実行方法は、
並列プログラムを構成する複数のプロセスを、１以上のプロセッサで並列実行する並列プロセス実行方法であって、
それぞれの前記プロセスは、プロセス間通信処理中に待ち合わせが発生した場合、メモリを共有する他プロセスであってプロセス状態が「演算処理中」かつ「仕掛り通信処理有り」である他プロセスを探索し、前記探索した前記他プロセスの仕掛り状態の通信処理を前記他プロセスに代わって実行する。
【００１１】
本発明の他の形態に係る情報処理装置は、
並列プログラムを構成する複数のプロセスを並列実行する１以上のプロセッサを有する情報処理装置であって、
それぞれの前記プロセスは、プロセス間通信処理中に待ち合わせが発生した場合、メモリを共有する他プロセスであってプロセス状態が「演算処理中」かつ「仕掛り通信処理有り」である他プロセスを探索し、前記探索した前記他プロセスの仕掛り状態の通信処理を前記他プロセスに代わって実行するように構成されている。
【００１２】
本発明の他の形態に係るプログラムは、
１以上のプロセッサを有するコンピュータに、
並列プログラムを構成する複数のプロセスを並列実行させるためのプログラムであって、それぞれの前記プロセスは、プロセス間通信処理中に待ち合わせが発生した場合、メモリを共有する他プロセスであってプロセス状態が「演算処理中」かつ「仕掛り通信処理有り」である他プロセスを探索し、前記探索した前記他プロセスの仕掛り状態の通信処理を前記他プロセスに代わって実行する。
【発明の効果】
【００１３】
本発明は上述した構成を有するため、プロセス間通信における通信待合せが発生した場合であっても、実行性能を改善することができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の第１の実施形態に係る情報処理装置のブロック図である。
【図２】本発明の第１の実施形態における初期化処理の一例を示すフローチャートである。
【図３】本発明の第１の実施形態における通信開始処理の一例を示すフローチャートである。
【図４】本発明の第１の実施形態におけるプロセス状態変更処理の一例を示すフローチャートである。
【図５】本発明の第１の実施形態における通信完了処理の一例を示すフローチャートである。
【図６】本発明の第１の実施形態における他プロセスのデータ転送処理の代理実行の一例を示すフローチャートである。
【図７】本発明の第１の実施形態における効果を説明するための模式図である。
【図８】本発明の第１の実施形態における他の効果を説明するための模式図である。
【図９】本発明の第２の実施形態に係る情報処理装置のブロック図である。
【発明を実施するための形態】
【００１５】
[第１の実施形態]
次に本発明の第１の実施形態について図面を参照して詳細に説明する。
【００１６】
＜本実施形態が解決しようとする課題＞
分散並列プログラムの実行性能改善のため、非同期通信機能（例えば、ＭＰＩ（Ｍｅｓｓａｇｅ  Ｐａｓｓｉｎｇ  Ｉｎｔｅｒｆａｃｅ）のＭＰＩ＿ＩｓｅｎｄやＭＰＩ＿Ｉｒｅｃｖ等のＡＰＩ）を利用し、通信処理と計算処理（演算処理）を同時実行（オーバーラップ）させる手法がある。
【００１７】
通信処理と計算処理をオーバーラップさせるためには、システムの構成要素として、ＣＰＵとは独立して動作するデータ転送専用のハードウェア（インタコネクト装置、ネットワークインタフェースアダプタ、ＤＭＡ機構など）を備え、そのデータ転送専用ハードウェアのみで（ＣＰＵによる処理を必要としない）、データ転送処理を行う必要がある。
【００１８】
データ転送専用のハードウェアが利用できない場合は、ＣＰＵを用いて通信を行わなければならず、通信処理の実行中は演算処理を同時に行うことができない（オーバーラップ出来ない）。
【００１９】
また、データ転送専用ハードウェアが利用可能であっても、転送対象データが適切に配置されていない等の理由により、データ転送専用ハードウェアのみでデータ転送が完結できない場合は、送信側プロセスと受信側プロセスとの間でハンドシェークを行いながら、通信バッファを利用した通信処理を行わなければならない。この場合も通信処理と演算処理のオーバーラップを実現することができない。
【００２０】
通信と演算のオーバーラップが実現できない場合の対策として、ユーザプログラムの実行と並行して動作し、通信処理のみを行う専用のプロセス、あるいは、スレッドを動作させる方法が考えられる。この方式によれば、ユーザプログラムの演算処理と、通信処理専用プロセスあるいはスレッドの通信処理との同時実行が可能となり、オーバーラップ相当の動作は可能となる。
【００２１】
ただし、それら通信処理専用プロセスあるいはスレッドを動作させるためにはＣＰＵ資源を別途割当てなければならず、ユーザプログラムで利用可能なＣＰＵ数が減少する。その結果として、ユーザプログラムの演算処理性能が低下し、ついては、プログラム全体の実行性能低下の要因となる。
【００２２】
＜本実施形態による解決手段＞
分散並列プログラムの実行において、自プロセスの通信処理中に通信待合せが発生し、その通信待合せ時間が一定時間を超えた場合、メモリを共有する他プロセスの状態を参照し、その状態が「演算処理中」かつ「仕掛り状態の通信処理有り」の場合、その仕掛り状態の通信処理を代理実行する。
【００２３】
＜本実施形態の構成＞
図１は本発明の第１の実施形態に係る情報処理装置のブロック図である。図１を参照すると、分散並列プログラムは複数のプロセス１−１から構成されており、各プロセス１−１はノード間通信経路１−２で接続された複数のノード１−３上に分散配置される。また、各ノード１−３上には複数のプロセス１−１が配置される。ここで、各ノード１−３は、１以上のＣＰＵとメモリとを少なくとも有する計算機である。
【００２４】
各プロセス１−１は、プロセス固有メモリ領域１−４とプロセス間共有メモリ領域１−５とを備える。
【００２５】
プロセス固有メモリ領域１−４は、そのプロセス固有メモリ領域１−４を備えるプロセス１−１のみがアクセス可能なメモリ領域である。プロセス１−１は、他プロセス１−１に備わるプロセス固有メモリ領域１−４へはアクセスすることができない。一方、プロセス間共有メモリ領域１−５は、同一ノード１−３上の複数のプロセス１−１がアクセス可能なメモリ領域である。
【００２６】
プロセス間共有メモリ領域１−５には、通信対象とするユーザデータ１−６と、通信処理で利用する通信制御データ１−７とを配置する。
【００２７】
さらに、通信制御データ１−７には、その通信制御データ１−７を備えるプロセス１−１の状態を保持するプロセス状態変数１−８と、複数のプロセス１−１からの同時アクセスをガードするためのロック変数１−９と、その他の通信制御データとを含む。以下、「通信制御データ１−７」と記載する場合、通信制御データ１−７に含まれる、プロセス状態変数１−８およびロック変数１−９以外のその他の通信制御データを意味するものとする。
【００２８】
＜本実施形態の動作＞
次に本実施形態に係る情報処理装置の動作を説明する。
【００２９】
図２は初期化処理の動作の一例を示すフローチャートである。以下、図２を参照して、初期化処理の動作を説明する。
【００３０】
図２を参照すると、プロセス１−１は、初期化処理では、通信制御データ１−７の初期化処理２−１を行い、続いて、ロック変数１−９の初期化２−２、および、プロセス状態変数１−８の初期化２−３を行う。
【００３１】
ロック変数−９の初期化２−２では、ロック変数１−９を『ロック解放』にする。また、プロセス状態変数１−８の初期化２−３では、プロセス状態変数１−８を『演算処理中』にする。通信制御データ１−７の初期化処理２−１は、例えば、ＭＰＩ＿ＩｓｅｎｄやＭＰＩ＿Ｉｒｅｃｖ等のＡＰＩの初期化に相当する。
【００３２】
例えば、ＭＰＩ＿Ｉｒｅｃｖには、受信データ数を設定する引数、データ型を設定する引数、送信元を指定する引数、データの識別子を指定する引数、受信状態が設定される引数など幾つかの引数がある。また、例えば、ＭＰＩ＿Ｉｓｅｎｄには、送信データ数を設定する引数、データ型を設定する引数、送信先を指定する引数、データの識別子を指定する引数、現在処理中の要求の種別を示す引数など幾つかの引数がある。ＡＰＩの初期化では、これらの引数の初期化が行われる。なお、その他の通信制御データの初期化の処理内容については、対象とするシステムにより異なり、また、本発明の内容と独立した処理となるため、それ以上の説明は省略する。
【００３３】
初期化処理の最後のステップでは、全プロセス１−１のバリア同期処理２−４を行う。このバリア同期処理２−４の目的は、処理が先行するプロセス１−１が、他プロセス１−１の未初期化のロック変数１−９やプロセス状態変数１−８を参照するのを防止するためである。バリア同期の成立後、それぞれのプロセス１−１は通信開始処理を実行する。
【００３４】
図３は通信開始処理の動作の一例を示すフローチャートである。以下、図３を参照して、通信開始処理の動作を説明する。
【００３５】
図３を参照すると、プロセス１−１は、通信開始処理では、まず初めに自プロセス１−１の状態を『通信処理中』に変更する（３−１）。この操作により、自プロセス１−１が通信処理中に、他プロセス１−１が通信処理の代理実行を開始することを防止する。
【００３６】
次に、プロセス１−１は、自プロセス１−１の通信制御データ１−７を参照して、実際のデータ転送処理３−２を実施する（３−２）。このデータ転送処理３−２は、例えば、ＭＰＩ＿ＩｓｅｎｄやＭＰＩ＿Ｉｒｅｃｖ等のＡＰＩを実行する処理に相当する。データ転送処理の内容は、対象とするシステムにより異なり、また、本案の内容とは独立した処理となるため、それ以上の説明は省略する。
【００３７】
プロセス１−１は、データ転送処理３−２から戻った後、当該データ転送が完了か未完了かを判断する（３−３）。ここで、データ転送が未完了の場合、自プロセスの状態に『仕掛り通信処理有り』を追加する（３−４）。
【００３８】
プロセス１−１は、通信処理の最後では、自プロセスの情報を『演算処理中』に戻す（３−５）。
【００３９】
図４はプロセス状態の変更動作の一例を示すフローチャートである。以下、図４を参照して、プロセス状態の変更動作を説明する。
【００４０】
プロセス１−１は、プロセス状態を変更する際は、他プロセス１−１の処理との競合を防止するため、自プロセス１−１のロック変数１−９を用いて、ロックを取得し（４−１−１、および、４−２−１）、ロック区間でプロセス状態変数１−８の値を『通信処理中』に変更（４−１−２）、あるいは、『演算処理中』に変更する（４−２−２）。そして、プロセス１−１は、プロセス状態変更後にロックを解放する（４−１−３、および、４−２−３）。
【００４１】
図５は通信完了処理の動作の一例を示すフローチャートである。以下、図５を参照して、通信完了処理の動作を説明する。通信完了処理では、先の通信開始処理で開始した通信処理を完了させる。
【００４２】
図５を参照すると、初めに、プロセス１−１は、自プロセス１−１の状態を『通信処理中』に設定し（５−１）、他プロセス１−１が同時に代理実行を行うのを防止する。
【００４３】
次にプロセス１−１は、通信制御データ１−７を参照してデータ転送処理がすべて完了しているか否か（仕掛り通信があるか否か）を判定し（５−２）、完了している場合は、自プロセス１−１の状態を『演算処理中』に戻し（５−３）、処理を終える。
【００４４】
もし、データ転送処理が未完了の場合は、プロセス１−１は、通信制御データ１−７を参照して、仕掛り状態のデータ転送処理を試みる。
【００４５】
仕掛状態のデータ転送処理では、プロセス１−１は、後続処理で通信待合せ時間を判定するため、現在時刻を参照し保存する（５−４）。
【００４６】
次に、プロセス１−１は、データ転送処理の継続が可能かどうかを判定する（５−５）。これは、通信相手プロセス１−１との間でハンドシェークを行いながらデータ転送処理を行う際、通信相手プロセスからの応答（ＡＣＫ）が返信されていない場合は、データ転送処理を保留する必要があるためである。
【００４７】
データ転送処理の継続が可能な場合は、プロセス１−１は、通信制御データ１−７を参照して、自プロセス１−１のデータ転送処理を自ら行う（５−６）。このデータ転送処理中で、データ転送がすべて完了した場合、プロセス１−１は、自プロセス１−１のプロセス状態変数１−８から『仕掛り通信あり』の状態を削除する。その後、プロセス１−１は、データ転送処理がすべて完了したか否か、すなわち、仕掛り通信があるか否かを再度判断する（５−２）。
【００４８】
プロセス１−１は、データ転送処理が継続可能か否かの判定（５−５）において、データ転送処理の継続が不可能な場合、通信待合せとなる。
【００４９】
プロセス１−１は、通信待合せ処理においては、通信待合せ開始からの経過時間を判定し（５−７）、その経過時間が一定時間を超過した場合、他プロセスのデータ転送処理を代理実行する処理５−９に移行する。その際、自プロセス１−１のプロセス状態情報１−８を『通信処理中』から『演算処理中』に一時的に戻す（５−８）。この処理により、プロセス１−１が他プロセス１−１のデータ転送処理を代理実行している間、自プロセス１−１のデータ転送処理が継続可能となった場合、さらに別プロセス１−１が、自プロセス１−１のデータ転送処理を代理実行することが可能となる。
【００５０】
プロセス１−１は、データ転送処理の代理実行の処理５−９から戻った後、通信完了処理の先頭に戻り、自プロセス１−１の状態を『通信処理中』に戻し（５−１）、自プロセスのデータ転送処理が完了しているか否かの判定処理から再開する。
【００５１】
図６はプロセス１−１が他プロセスのデータ転送処理を代行実行する動作の一例を示すフローチャートである。以下、図６を参照して、プロセス１−１が他プロセスのデータ転送処理を代理実行する動作を説明する。
【００５２】
プロセス１−１は、データ転送処理の代理実行処理では、代理実行可能な仕掛り通信を持つプロセスを検出するため、自プロセス１−１と同一ノード１−３内の他プロセス１−１について、１プロセスずつロック変数１−９によるロックを取得しながらプロセス状態変数１−８を参照する（６−１、６−２、６−５）。
【００５３】
プロセス１−１は、他プロセス１−１のプロセス状態変数１−８を参照（６−２）した結果、プロセス状態が『演算処理中』かつ『仕掛り通信処理有り』となっている仕掛り通信を持つ他プロセス１−１を検出した場合、ロック区間中に、その通信処理を代理実行する（６−３）。この際、プロセス１−１は、他プロセス１−１の通信制御データ１−７を参照して、他プロセス１−１の仕掛り状態のデータ転送処理を遂行する。その後、プロセス１−１は、ロック変数１−９によるロックを解放し（６−４）、図６の処理を終了する。
【００５４】
＜本実施形態の効果＞
図７は、２プロセス（プロセスＡとプロセスＢ）が演算と通信を行った場合の本実施形態の効果を図示したものである。
【００５５】
図７の左図は、従来の動作である。演算処理時間の違いから、プロセスＢがプロセスＡに先行して通信完了処理を開始するが、通信相手プロセスＡが演算処理中であるため、データ転送処理を継続できず、通信待合せ状態となる。プロセスＢが通信処理を行えるのは、プロセスＡが演算処理を終え、通信完了処理を開始したタイミングとなる。その結果、両プロセスとも、演算処理と通信処理が同時に行われている（オーバーラップしている）区間は存在しない。
【００５６】
図７の右図は、本実施形態の動作である。プロセスＢが先行して通信完了処理を開始し、通信待合せとなる状況は、図７の左図の従来の動作と同様である。しかし、図７の右図では、プロセスＢは通信待合せ処理中にプロセスＡの通信処理を代理実行することができる。その結果、プロセスＡの観点では、演算処理と通信処理がオーバーラップしていることになり、演算処理に続く完了確認の段階では、すでにデータ転送処理が完了した状態であり、実行時間が短縮（改善）されている。
【００５７】
図８は、２プロセス（プロセスＡとプロセスＢ）が演算と通信を行った場合の本実施形態の別の効果を図示したものである。図８の左図は、図７の左図と同一の状態を示す。図８の右図は、プロセスＡとプロセスＢとの間で通信を行った場合の本実施形態の効果である。
【００５８】
図８の右図を参照すると、図７の右図の場合と同様に、先に完了確認を開始したプロセスＢは、プロセスＡの通信処理を代理実行する。この時、プロセスＡとプロセスＢが互いに通信相手である場合、プロセスＡの通信処理を代理実行することにより、結果として、自プロセス（プロセスＢ）の通信処理も同時に行っていることになる。したがって、このケースでは、プロセスＡとプロセスＢの両プロセスで実行時間を短縮（改善）することができる。
【００５９】
以上の様に、従来は通信処理と演算処理をオーバーラップさせることが出来なかったケースについても、本実施形態により、分散並列プログラムの実行性能改善が可能となる。
【００６０】
また、通信処理と計算処理のオーバーラップを実現するための通信専用プロセスや専用スレッドを実行する必要が無いため、ユーザプログラムの実行に割当てるＣＰＵ数は減少せず、ユーザプログラムの演算性能は低下しない。
【００６１】
さらに、自プロセスの通信待合せ処理中に他プロセスの通信処理を代理実行するため、他プロセスの状態判断や代理実行の処理は、実行性能低下の要因とはならない。
【００６２】
[第２の実施形態]
図９を参照すると、本発明の第２の実施形態に係る情報処理装置９−１は、並列プログラムを構成する複数のプロセス９−３を並列実行する１以上のプロセッサ９−２を有している。また、それぞれのプロセス９−３は、プロセス間通信処理中に待ち合わせが発生した場合、メモリを共有する他プロセス９−３であってプロセス状態が「演算処理中」かつ「仕掛り通信処理有り」である他プロセス９−３を探索するように構成されている。さらに、それぞれのプロセス９−３は、上記探索した他プロセス９−３の仕掛り状態の通信処理を他プロセス９−３に代わって実行するように構成されている。
【００６３】
このように構成された本実施形態に係る情報処理装置９−１は、以下のように動作する。即ち、プロセッサ９−２は、並列プログラムを構成する複数のプロセス９−３を並列実行する。その際、それぞれのプロセス９−３は、プロセス間通信処理中に待ち合わせが発生した場合、メモリを共有する他プロセス９−３であってプロセス状態が「演算処理中」かつ「仕掛り通信処理有り」である他プロセス９−３を探索し、上記探索した他プロセス９−３の仕掛り状態の通信処理を他プロセス９−３に代わって実行する。
【００６４】
このように本実施形態によれば、プロセス間通信における通信待合せが発生した場合であっても、実行性能を改善することができる。その理由は、それぞれのプロセス９−３は、プロセス間通信処理中に待ち合わせが発生した場合、メモリを共有する他プロセス９−３であってプロセス状態が「演算処理中」かつ「仕掛り通信処理有り」である他プロセス９−３を探索し、上記探索した他プロセス９−３の仕掛り状態の通信処理を他プロセス９−３に代わって実行するためである。
【産業上の利用可能性】
【００６５】
本発明は、分散並列プログラムの実行において、非同期データ転送を利用して演算処理と通信処理とをオーバーラップさせて性能を改善するために利用できる。
【符号の説明】
【００６６】
１−１…プロセス
１−２…ノード間通信経路
１−３…ノード
１−４…プロセス固有メモリ領域
１−５…プロセス間共有メモリ領域
１−６…ユーザデータ
１−７…通信制御データ
１−８…プロセス状態変数
１−９…ロック変数
９−１…情報処理装置
９−２…プロセッサ
９−３…プロセス
【図１】
2018147126.tif 000003
【図２】
2018147126.tif 000004
【図３】
2018147126.tif 000005
【図４】
2018147126.tif 000006
【図５】
2018147126.tif 000007
【図６】
2018147126.tif 000008
【図７】
2018147126.tif 000009
【図８】
2018147126.tif 000010
【図９】
2018147126.tif 000011