(57)【特許請求の範囲】
【請求項１】
同期処理を行うマスタノードあるいはタスク処理を行うワーカノードとなる複数の計算ユニットをネットワークで接続し、並列計算を行う並列計算機システムであって、
前記マスタノードは、
全ての前記ワーカノードにおけるタスク処理が基本処理時間以内に完了することを期待したマスタ判定時刻を設定し、
複数の前記ワーカノードに対して処理開始通知を送信し、
前記マスタ判定時刻において、前記ワーカノードからの処理未完了通知を受信しているかを確認し、受信している場合には、複数の前記ワーカノードに対して処理延長通知を送信し、受信していない場合には複数の前記ワーカノードに対して同期完了通知を送信し、
前記ワーカノードは
前記マスタノードから前記処理開始通知または前記同期完了通知を受信した場合に、前記基本処理時間を用いてワーカ判定時刻を設定し、
前記ワーカ判定時刻において、タスク処理が完了していない場合は、前記マスタノードへ処理未完了通知を送信し、タスク処理が完了している場合は前記マスタノードからの同期完了通知を待つ、
ことを特徴とする並列計算機システム。
【請求項２】
請求項１記載の並列計算機システムであって、
前記マスタノードは、
少なくとも一つの前記ワーカノードにおけるタスク処理が前記基本処理時間までに完了しなかった場合に、補正処理時間を用いて前記マスタ判定時刻を再設定し、
前記ワーカノードは
前記マスタノードから前記処理延長通知を受信した場合に、前記補正処理時間を用いて前記ワーカ判定時刻を再設定し、
ことを特徴とする並列計算機システム。
【請求項３】
請求項２記載の並列計算機システムであって、
前記マスタノードは、
前記同期完了通知または前記処理開始通知を送信する際に、前記基本処理時間の情報も併せて送信し、
前記処理延長通知を送信する際に、前記補正処理時間の情報も併せて送信する、
ことを特徴とする並列計算機システム。
【請求項４】
請求項２記載の並列計算機システムであって、
前記マスタノードは、
前記基本処理時間、または前記補正処理時間の値を更新することが可能である、
ことを特徴とする並列計算機システム。
【請求項５】
請求項１記載の並列計算機システムであって、
前記計算ユニットは、処理部、記憶部、及び前記ネットワークに接続される複数の通信制御部を備え、
ことを特徴とする並列計算機システム。
【請求項６】
請求項５記載の並列計算機システムであって、
前記通信制御部の一つは、前記マスタノートと前記ワーカノード間の前記処理開始通知、前記処理未完了通知、前記処理延長通知、及び前記同期完了通知の送受信に用いる、
ことを特徴とする並列計算機システム。
【請求項７】
請求項５記載の並列計算機システムであって、
前記計算ユニットの前記記憶部は、当該計算ユニットが前記マスタノード、或いは前記ワーカノードの何れであるかを識別するマスタ・ワーカ情報を記憶する記憶領域を備える、
ことを特徴とする並列計算機システム。
【請求項８】
請求項７記載の並列計算機システムであって、
前記マスタノードとして動作する前記計算ユニットから、前記ワーカノードが実行すべきプログラムを受信した前記計算ユニットは、前記記憶領域に前記マスタ・ワーカ情報を記憶する、
ことを特徴とする並列計算機システム。
【請求項９】
処理部と記憶部を備え、同期処理を行うマスタノードあるいはタスク処理を行うワーカノードとなる複数の計算ユニットをネットワークで接続し、並列計算を行う並列計算機システムの前記処理部で実行されるプログラムであって、
前記マスタノードとなる前記計算ユニットの前記処理部を、
全ての前記ワーカノードにおけるタスク処理が基本処理時間以内に完了することを期待したマスタ判定時刻を設定し、
複数の前記ワーカノードに対して処理開始通知を送信し、
前記マスタ判定時刻において、前記ワーカノードからの処理未完了通知を受信しているかを確認し、受信している場合には、複数の前記ワーカノードに対して処理延長通知を送信し、受信していない場合には複数の前記ワーカノードに対して同期完了通知を送信するよう動作させ、
前記ワーカノードとなる前記計算ユニットの前記処理部を、
前記マスタノードから前記処理開始通知または前記同期完了通知を受信した場合に、前記基本処理時間を用いてワーカ判定時刻を設定し、
前記ワーカ判定時刻において、タスク処理が完了していない場合は、前記マスタノードへ処理未完了通知を送信し、タスク処理が完了している場合は前記マスタノードからの同期完了通知を待つよう動作させる、
ことを特徴とするプログラム。
【請求項１０】
請求項９記載のプログラムであって、
前記マスタノードとなる前記計算ユニットの前記処理部を、
少なくとも一つの前記ワーカノードにおけるタスク処理が前記基本処理時間までに完了しなかった場合に、補正処理時間を用いて前記マスタ判定時刻を再設定するよう動作させ、
前記ワーカノードとなる前記計算ユニットの前記処理部を
前記マスタノードから前記処理延長通知を受信した場合に、前記補正処理時間を用いて前記ワーカ判定時刻を再設定するよう動作させる、
ことを特徴とするプログラム。
【請求項１１】
請求項１０記載のプログラムであって、
前記マスタノードとなる前記計算ユニットの前記処理部を、
前記同期完了通知または前記処理開始通知を送信する際に、前記基本処理時間の情報も併せて送信し、
前記処理延長通知を送信する際に、前記補正処理時間の情報も併せて送信するよう動作させる、
ことを特徴とするプログラム。
【請求項１２】
請求項１０記載のプログラムであって、
前記マスタノードとなる前記計算ユニットの前記処理部を、
前記基本処理時間、または前記補正処理時間の値を所定の計算法によって更新するよう動作させる、
ことを特徴とするプログラム。
【請求項１３】
請求項９記載のプログラムであって、
前記計算ユニットの前記処理部は、
当該計算ユニットが前記マスタノード、或いは前記ワーカノードの何れであるかを識別するマスタ・ワーカ情報を前記記憶部に記憶するよう動作させる、
ことを特徴とするプログラム。
【請求項１４】
請求項１３記載のプログラムであって、
前記マスタノードとして動作する前記計算ユニットの前記処理部を、
前記ワーカノードとなる前記計算ユニットに、前記ワーカノードが実行すべきプログラムとその初期値を送信するよう動作させる、
ことを特徴とするプログラム。
【請求項１５】
請求項１４記載のプログラムであって、
前記ワーカノードとなる前記計算ユニットの前記処理部に、
前記プログラムとその初期値を受信した際、前記記憶部にワーカノードであることを示す前記マスタ・ワーカ情報を記憶するよう動作させる、
ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列処理と同期処理を繰り返す計算処理をマスタノードとワーカノードを用いて行う並列計算機システム、そのバリア同期に関するものである。
【背景技術】
【０００２】
近年のストレージ、ネットワークをはじめとするＩＴ機器の目覚ましい発展により、扱う問題規模、処理すべきデータ規模は益々大きくなり、例えば高速フーリエ変換処理、遺伝的アルゴリズムを用いた処理、シミュレーション処理など、を実行する、より高い処理性能を有する計算機システムに対する強い要求がある。一方、マイクロプロセッサの動作周波数が頭打ちとなった２００４年以降、計算機システムの処理性能向上へのアプローチは高周波数化から大並列化へと大きく変化した。このため、今後の計算機システムにおいては並列処理技術が益々重要になる。
【０００３】
大規模並列処理を行う計算機システムは、複数のサーバを高速なネットワークで連結させたコンピュータクラスタと呼ばれる構成をとるのが一般的である。このコンピュータクラスタは計算処理の流れを管理するマスタノードと、実際に計算処理を実行する複数のワーカノード（スレーブノードとも呼ばれる）から構成されるのが一般的であり、これをマスタ・ワーカ方式という。マスタ・ワーカ方式はマスタノードからワーカノードへの計算処理（以下、タスク）割当てと、ワーカノード上でのタスク処理と、全てのワーカノードへ割当てたタスク処理が完了することを待ち合わせる同期処理（バリア同期と呼ばれる）によって並列処理を実現する。ここで、同期処理はプログラムにおける演算順序を保証する上で重要な役割を持ち、一般的にタスク処理を完了したワーカノードからマスタノードへの通信処理（同期通信と呼ばれる）と、マスタノード上でのフラグ管理やカウンタによる全てのタスク処理が完了したかのチェック（以下、集計処理と呼ぶ）によって実現される。なお、タスク処理とは、ワーカノードがある同期ポイントから次の同期ポイントまでに完了すべき処理を指している。
【０００４】
この様な処理技術に関し、例えば下記に示す先行技術文献がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−５１９６６号公報
【特許文献２】特開２００５−７１２８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
並列処理においては上述した同期処理が処理性能向上における大きな阻害要因となる。これは並列数を増やす、すなわちワーカノード数を増やすほど、同期処理におけるマスタノードへの負荷が増大し、同期処理時間が増大するためである。特に高速フーリエ変換処理やシミュレーション処理、遺伝的アルゴリズムを用いた処理などにおいては、非常に多くのワーカノードを用いてタスク処理と同期処理を数ミリ秒間隔といった短い時間で何度も繰り返す処理を行うために、その同期処理に伴うオーバヘッド（すなわち同期オーバヘッド）は無視できない。
【０００７】
また、今後の数十万ノード以上の大規模計算システムにおいてはこの同期オーバヘッドが処理性能向上の大きな足かせとなる。例えば、同期オーバヘッド（すなわち同期処理時間）は上述した同期通信時間と集計処理時間の和で算出できるが、マスタノード上での1ワーカノードあたりの集計処理時間を１０ナノ秒とすると１００万ワーカノードでは集計処理時間だけで１０ミリ秒が必要となり、演算効率が非常に悪くなることがわかる。
【０００８】
ノード数の増大に伴う同期処理時間（同期オーバヘッド）の増加は、同期通信と集計処理による同期処理を行う計算機システムにおいて本質的な課題であり、例えばワーカノードの階層化を行い、かつ特定のマスタノードを用いない特許文献１による同期技術などでも解決されない。上記の課題に対し、特許文献２の同期技術（以下、従来技術）がある。この従来技術は一定時間間隔ごとに時刻を基準として同期を行うことにより、同期通信と集計処理を完全に排除し、ノード数と同期処理時間を非依存とした同期技術である。
【０００９】
従来技術では破綻なく同期を行うために、各ワーカノードのタスク処理における最悪ケースの処理時間よりも大きな時間間隔を確保し、同期時刻を設定する。ここで最悪ケースとは、タスク処理において処理時間を最長化する分岐先が選択され、かつ全てのメモリアクセスがキャッシュミスした状況が該当する。そのため、従来技術はタスクの処理時間ばらつきが小さく、かつタスク処理を所定時間内に完了できるように最適化したプログラミングを行うリアルタイムシミュレーションにおいては有効である。しかし、タスク処理時間のばらつきが比較的大きなアプリケーションに対しては、滅多に発生しない最悪ケースの処理時間を考慮した大きな同期時間間隔の設定が必要となるため、従来技術では同期オーバヘッドが増大する課題があった。すなわち、従来技術ではタスク処理時間のばらつきが比較的大きなアプリケーションに対して同期オーバヘッドが増大する課題があった。
【００１０】
本発明の目的は、上述した従来技術における課題を解決し、同期オーバヘッドの増大を阻止し、高速な並列処理を実行可能な並列計算機システム、およびプログラムを提供することにある。
【課題を解決するための手段】
【００１１】
上記の目的を達成するため、本発明においては、同期処理を行うマスタノードあるいはタスク処理を行うワーカノードとなる複数の計算ユニットをネットワークで接続し、並列計算を行う並列計算機システムであって、マスタノードは、全てのワーカノードにおけるタスク処理が基本処理時間以内に完了することを期待したマスタ判定時刻を設定し、複数のワーカノードに対して処理開始通知を送信し、マスタ判定時刻において、ワーカノードからの処理未完了通知を受信しているかを確認し、受信している場合には、複数のワーカノードに対して処理延長通知を送信し、受信していない場合には複数のワーカノードに対して同期完了通知を送信し、ワーカノードは、マスタノードから処理開始通知または同期完了通知を受信した場合に、基本処理時間を用いてワーカ判定時刻を設定し、ワーカ判定時刻において、タスク処理が完了していない場合は、マスタノードへ処理未完了通知を送信し、タスク処理が完了している場合はマスタノードからの同期完了通知を待つ構成の並列計算機システムを提供する。
【００１２】
また、上記の目的を達成するため、本発明においては、上記の並列計算機システムであって、マスタノードは、少なくとも一つのワーカノードにおけるタスク処理が基本処理時間までに完了しなかった場合に、補正処理時間を用いてマスタ判定時刻を再設定し、ワーカノードは、マスタノードから処理延長通知を受信した場合に、補正処理時間を用いてワーカ判定時刻を再設定する構成の並列計算機システムを提供する。
【００１３】
更に、上記の目的を達成するため、本発明においては、処理部と記憶部を備え、同期処理を行うマスタノードあるいはタスク処理を行うワーカノードとなる複数の計算ユニットをネットワークで接続し、並列計算を行う並列計算機システムの処理部で実行されるプログラムであって、マスタノードとなる計算ユニットの処理部を、全てのワーカノードにおけるタスク処理が基本処理時間以内に完了することを期待したマスタ判定時刻を設定し、複数のワーカノードに対して処理開始通知を送信し、マスタ判定時刻において、ワーカノードからの処理未完了通知を受信しているかを確認し、受信している場合には、複数のワーカノードに対して処理延長通知を送信し、受信していない場合には複数のワーカノードに対して同期完了通知を送信するよう動作させ、ワーカノードとなる計算ユニットの処理部を、マスタノードから処理開始通知または同期完了通知を受信した場合に、基本処理時間を用いてワーカ判定時刻を設定し、ワーカ判定時刻において、タスク処理が完了していない場合は、マスタノードへ処理未完了通知を送信し、タスク処理が完了している場合はマスタノードからの同期完了通知を待つよう動作させるプログラムを提供する。
【００１４】
また、更に、上記の目的を達成するため、本発明の上記のプログラムは、マスタノードとなる計算ユニットの処理部を、少なくとも一つのワーカノードにおけるタスク処理が基本処理時間までに完了しなかった場合に、補正処理時間を用いてマスタ判定時刻を再設定するよう動作させ、ワーカノードとなる計算ユニットの処理部を、マスタノードから処理延長通知を受信した場合に、補正処理時間を用いてワーカ判定時刻を再設定するよう動作させるプログラムを提供する。
【発明の効果】
【００１５】
各ワーカノードにおけるタスク処理時間のばらつきが比較的大きなアプリケーションをワーカノード数が極めて大きな並列計算機システムを用いて実行する場合において、その同期オーバヘッドを削減し、高速な並列処理を実現する。
【図面の簡単な説明】
【００１６】
【図１】第１の実施例にかかる並列計算機システムの一構成を示す図である。
【図２】第１の実施例にかかる、同期判定時刻までに全てのワーカノードがタスク処理を完了した場合の動作を示すタイムチャート図である。
【図３】第１の実施例にかかる、同期判定時刻までに一部のワーカノードがタスク処理を完了しなかった場合の動作を示すタイムチャート図である。
【図４】第１の実施例にかかる、計算機システムにおいて同期判定時刻までに全てのワーカノードが処理を完了した場合のタイムチャートを示す図である。
【図５】第１の実施例にかかる、計算機システムにおいて同期判定時刻までに一部のワーカノードが処理を完了しなかった場合のタイムチャートを示す図である。
【図６】第１の実施例にかかる、マスタノードのフローチャートを示す図である。
【図７】第１の実施例にかかる、ワーカノードのフローチャートを示す図である。
【図８Ａ】第１の実施例にかかる、計算ユニットの構成を示す図である。
【図８Ｂ】第１の実施例にかかる、計算ユニットの構成を示す図である。
【図９】第１の実施例にかかる、Ｈｙｐｅｒｖｉｓｏｒが有するタスク処理状況情報を示す図である。
【図１０】第１の実施例にかかる、Ｈｙｐｅｒｖｉｓｏｒが有する割込間隔情報を示す図である。
【図１１】第１の実施例にかかる、タスク処理のテーブルを示す図である。
【図１２】第１の実施例にかかる、アルゴリズムのフローチャートを示す図である。
【発明を実施するための形態】
【００１７】
本発明においては、ある所定の時刻を設定し、その時刻までにタスク処理が完了しなかったワーカノードのみが処理未完了通知をマスタノードへ送信し、マスタノードがワーカノードのタスク処理状況を把握することを可能とする。これにより、マスタノードは一部のワーカノードがタスク処理を完了していない場合は処理時間を延長する通知（処理延長通知）を全てのワーカノードへ送信し、その同期時刻を遅らせることが可能となり、タスク処理状況に応じた適応的な同期時刻設定が可能となる。また、前記ある所定の時刻においてマスタノードが全てのワーカノードのタスク処理が完了していることを把握した場合には、全てのワーカノードへ同期完了通知を送信し、これを受けたワーカノードは次の所定の時刻を設定して次のタスク処理を開始する。
【００１８】
そして、本発明においては、マスタノードから全ワーカノードへの同期完了通知および処理延長通知の通信と、ワーカノードからマスタノードへの処理未完了通知の通信を新たに実施することで、タスク処理状況に応じた適応的な同期時刻設定を可能とし、上記の課題を解決する。ここで、前者の同期完了通知および処理延長通知はブロードキャストによる通信であるため、その通信時間はワーカノード数に依存せず、高速に行うことができる。一方、後者の処理未完了通知についても、処理が完了していないワーカノードからのみの通信であり、さらにマスタノードはその通知を１つ受信するだけで処理時間延長を判定できるため、その通信時間はワーカノード数に依存せず、高速に行うことができる。そのため、新たに追加となる通信に要する時間、すなわち本方式における同期オーバヘッドは、従来技術による同期オーバヘッドより非常に小さく、全体として従来技術よりもその同期オーバヘッドを小さくすることができる。そして、ワーカノード数と同期オーバヘッドを非依存としつつ、比較的処理時間のばらつきが大きなアプリケーションに対しても、小さな同期オーバヘッドで並列計算を実行することが可能となる。
【００１９】
以下、本発明の実施の形態を図面に従い説明する。
【実施例１】
【００２０】
図１に第１の実施例が適用される並列計算機システム１００の構成を示す。本実施例にかかる並列計算機システム１００は、複数の計算ユニット１１０と、それらを接続するネットワーク１２０から構成される。計算ユニット１１０は一般的なサーバ（計算機）であり、内部の構成は図８を用いて後で詳述する。またネットワーク１２０も同様に一般的なものであり、例えばＥｔｈｅｒｎｅｔ（登録商標）、インフィニバンド(ＩｎｆｉｎｉＢａｎｄ)などで実現する。また、本実施例にかかる並列計算機システム１００は図１に示すように計算ユニット１１０のうち１台をマスタノード（１１０−Ｍ）とし、その他をワーカノード（１１０−Ｗ）とするマスタ・ワーカ方式によって並列計算を実行する。
【００２１】
本実施例の対象はこの並列計算機システム１００を用いて並列計算を行う上で必須となるバリア同期の同期方式とその実現手段である。以下、本実施例にかかるバリア同期方式とその実現手段について説明する。
【００２２】
まず、本実施例にかかるバリア同期方式について説明する。
本実施例にかかるバリア同期方式では、全てのワーカノードにおけるタスク処理が所定時間（これを基本処理時間Ｔと定義する）以内に終わることを期待して、ある同期判定時刻を設定し、前記同期判定時刻におけるワーカノードのタスク処理状況によって、マスタノードが同期判定を行う。タスク処理状況の把握は、ワーカノードが基本処理時間Ｔ以内にタスク処理を完了しなかった場合にのみ、マスタノードへ処理未完了通知を送信することで行う。すなわち、同期判定時刻までにマスタノードに通知がなければ全てのワーカノードにおけるタスク処理が完了したと判定する。
【００２３】
図２、図３に本実施例にかかるバリア同期方式の概要を示す。図２は同期判定時刻までに全てのワーカノードがタスク処理を完了した場合の動作タイムチャート２００を示している。この場合、同期判定時刻２で同期を完了し、次のタスク処理へ進む。
一方、図３には同期判定時刻までに一部のワーカノードがタスク処理を完了しなかった場合の動作タイムチャート３００を示している。この場合、所定延長時間（これを補正処理時間ΔＴと定義する）だけ同期判定時刻２を延長した同期判定時刻２’を設定し、同期判定時刻２’にて再度同期判定を行う。図３の例では同期判定時刻２’にて同期を完了し、次のタスク処理へ進む。ここで、基本処理時間Ｔおよび補正処理時間ΔＴはアプリケーションのプログラム中に記述される設定値である。
以上が本実施例にかかる同期方式の概要である。
【００２４】
以下、バリア同期方式の詳細を説明する。本実施例におけるバリア同期方式は、（ａ）同期判定時刻までに全てのワーカノードが処理を完了した場合と、（ｂ）同期判定時刻までに一部のワーカノードが処理を完了しなかった場合の二つの場合がある。
【００２５】
なお、以下の説明において、実行するプログラムは高速フーリエ変換処理、シミュレーション処理、遺伝的アルゴリズムを用いた処理などを想定し、これらの処理は、下記特徴を有することとする。
・全ワーカノードが同一のプログラムを実行するＳＰＭＤ（Ｓｉｎｇｌｅ  Ｐｒｏｇｒａｍ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）型である。
・同期完了後の中間結果データ転送処理などの通信先が予め固定されている。
・ワーカノードはタスク処理と同期処理を規定回数繰り返す。
【００２６】
（ａ）の説明
まず、図４を用いて、バリア同期方式において、同期判定時刻までに全てのワーカノードが処理を完了した場合の、並列計算機システム１００の動作について説明する。図４の４００は同期判定時刻までに全てのワーカノードが処理を完了した場合の詳細タイムチャートである。並列計算機システム１００における、マスタノード（Ｍ）とワーカノード（Ｗ１、Ｗ２、Ｗ３）が行う同期処理に関する処理と通信（実線矢印）を時系列で示している。本実施例においてワーカノード数はいくつでもよいが、ここでは簡単化して説明するためワーカノード数を３つとして説明する。
【００２７】
まず、図４において、並列処理プログラムが実行されると、マスタノードは基本処理時間Ｔと補正処理時間ΔＴを並列処理プログラムより取得する（時刻４５０）。本実施例において基本処理時間Ｔと補正処理時間ΔＴは大きな特徴であり、重要なパラメータである。基本処理時間Ｔと補正処理時間ΔＴはアプリケーションのプログラマが設定するパラメータであり、並列処理プログラム中に記述されている。
【００２８】
次に、マスタノードは全ワーカノードへ通信４０２を行う（時刻４５２）。通信４０２ではワーカノードへワーカノードが実行すべきプログラムとその初期値などを送信するという従来技術同様の通信である。ここで初期値とはプログラムにおけるワーカノードごとの入力パラメータであり、入力データに関する情報や中間結果データの送受信あて先情報などである。
マスタノードから通信４０２を受信したワーカノードは取得した情報を元にプロセスを起動し、タスク処理開始の準備を行う。
【００２９】
次にマスタノードは全ワーカノードへ通信４０４を行う（時刻４５４）。通信４０４はブロードキャストによる処理開始通知と基本処理時間Ｔの送信であり、本実施例においてはこの処理開始通知と後述する同期完了通知を送信する際に、基本処理時間Ｔの情報を一緒に送信する。基本処理時間Ｔの送信は後述するワーカノード側の同期判定時刻に関する設定を可能とし、処理開始通知はワーカノードが次の処理を行うためのトリガとなる役割がある。
【００３０】
通信４０４の後、マスタノードはワーカノードがタスク処理を基本処理時間Ｔ以内に完了しなかった場合に、ワーカノードからの処理未完了通知を確実に受信できる時刻（これをマスタ判定時刻と定義する）を算出し、その時刻まで待機する。マスタ判定時刻は通信４０４を行った直後の時刻と、ブロードキャストによる通信４０４がワーカノードへ到達する遅延時間の最大値（ブロードキャストの最悪遅延時間Ｔ＿ｎｗ１）と、基本処理時間Ｔと、ワーカノードが送信した処理未完了通知がマスタノードへ到達する遅延時間の最悪値（マスタノードとワーカノード間通信の最悪遅延時間Ｔ＿ｎｗ２）を用いて算出できる。
【００３１】
図４の例では、マスタ判定時刻１＝（時刻４５４）＋Ｔ＿ｎｗ１＋Ｔ＋Ｔ＿ｎｗ２と算出できる。ここで、Ｔ＿ｎｗ１とＴ＿ｎｗ２はマスタノードと、マスタノードに対してネットワーク距離的に最も遠い位置にあるワーカノード間の通信において、ブロードキャスト通信と１対１通信のそれぞれのケースについて、（通過するネットワークスイッチの最大ホップ数）×（ネットワークスイッチの1ホップあたりの最大遅延時間）＋（ノード上での通信終端処理の最大遅延時間）を算出することで得ることができる。これはよく知られた最悪遅延時間の算出方法である。
【００３２】
一方、通信４０４を受信したワーカノードはマスタノードへタスク処理状況を報告する時刻（これをワーカ判定時刻と定義する）を算出し、その時刻までタスク処理を行う。ここで、ワーカ判定時刻は通信４０４を受信した直後の時刻と基本処理時間Ｔから算出できる。例えば、あるワーカノードが通信４０４を最悪遅延時間で受信したとすると、そのワーカノードにおいてはワーカ判定時刻１＝（時刻４５６）＋Ｔと算出される。ここで、ワーカ判定時刻１はワーカノードごとに若干のばらつきが生じるが、特に問題はない。なぜなら、全てのワーカノードにおけるワーカ判定時刻１は（ワーカ判定時刻１＋Ｔ＿ｎｗ２ ≦ マスタ判定時刻１）の条件を満たしており、マスタノードがワーカノードからの処理未完了通知をマスタ判定時刻１までに確実に受信できるためである。
【００３３】
ワーカ判定時刻１に到達した時点でワーカノードはタスク処理の状況をマスタノードへ通知する。ここで本実施例において、ワーカノードはタスク処理が完了していない場合のみマスタノードへ処理未完了通知を送信し、タスク処理が完了している場合はマスタノードからの同期完了通知を待つ。すなわち、図４の例では全てのワーカノードはマスタノードへ何も送信せず、同期完了通知を待つことになる。
【００３４】
一方、時刻がマスタ判定時刻１に到達すると、マスタノードはワーカノードから処理未完了通知を受信しているかを確認する。本実施例においてマスタノードは、処理未完了通知を受信していない場合には全てのワーカノードにおいてタスク処理が完了したと判定し、１つ以上の処理未完了通知を受信していた場合にはタスク処理が完了していないワーカノードがあると判定する。すなわち、図４の例では処理未完了通知を受信していないため、全てのワーカノードにおいてタスク処理が完了したと判定する。
【００３５】
ここで、このワーカ判定時刻１におけるワーカノードの通知の仕組みとマスタ判定時刻１におけるマスタノードの判定の仕組みが、本実施例にかかるバリア同期方式の大きな特徴であり、この特徴が同期オーバヘッドをノード数に非依存とすることを可能とする。なぜなら、ある所定時刻までに必ず通知が来ることが保障されていた場合、前記処理時刻において全ての処理完了通知を得ていることと、処理未完了通知を１つも得ていないことは等価だからである。
【００３６】
全てのワーカノードにおいてタスク処理が完了したと判定したマスタノードは基本処理時間Tと補正処理時間ΔTの更新を行う。基本処理時間Tと補正処理時間ΔTを更新するアルゴリズムについては様々なものが適用可能であり、例えば補正処理時間ΔTは固定であるとして、当該タスク処理区間において一度でも処理未完了通知を受信していた場合は、基本処理時間Tを補正処理時間ΔTだけ加えた値に更新するなどがある。
【００３７】
その後、マスタノードは全ワーカノードへ通信４０６を行う（時刻４５８）。通信４０６はブロードキャストによる同期完了通知と基本処理時間Ｔの送信である。同期完了通知にはワーカノードが次のタスク処理を行うためのトリガとなる役割があり、基本処理時間Ｔはワーカノードが次のタスク処理のためのワーカ判定時刻を算出するために必要である。その後、マスタノードはマスタ判定時刻２を算出し、その時刻まで待機する。また、通信４０６を受信したワーカノードはワーカ判定時刻２を算出し、その時刻までタスク処理を行う。
【００３８】
以上が実施例１にかかるバリア同期方式において、同期判定時刻までに全てのワーカノードが処理を完了した場合の並列計算機システム１００の動作である。
【００３９】
（ｂ）の説明
次に、図５を用いて、バリア同期方式において、同期判定時刻までに一部のワーカノードが処理を完了しなかった場合の並列計算機システム１００の動作について説明する。図５の５００は同期判定時刻までに一部のワーカノードが処理を完了しなかった場合の並列計算機システム１００の動作を示すタイムチャートである。図の見方は図４と同様であり、図４と同一のものには同一の符号を付している。
【００４０】
図５においてワーカ判定時刻１までの動作は、図４に示した同期判定時刻までに全てのワーカノードが処理を完了した場合のシステム全体の動作と同様であるため、説明を省略する。以下、ワーカ判定時刻１からの動作について説明する。
【００４１】
ワーカ判定時刻１に到達した時点でワーカノードはタスク処理の状況をマスタノードへ通知する。図５の例ではワーカノード２（Ｗ２）のタスク処理が未完了であるため、ワーカノード２のみがマスタノードへ処理未完了通知（通信５０２）を送信する。送信が完了すると、ワーカノードは未完了のタスク処理を再開する。
【００４２】
時刻がマスタ判定時刻１に到達すると、マスタノードはワーカノードから処理未完了通知を受信しているかを確認する。図５のタイムチャート５００では処理未完了通知を受信しているため、タスク処理が完了していないワーカノードがあると判定し、マスタノードは全ワーカノードへ通信５０４を行う（時刻５５８）。通信５０４はブロードキャストによる処理延長通知と補正処理時間ΔTの送信である。処理延長通知によりワーカノードはタスク処理時間が延長されたことを認識でき、補正処理時間ΔＴはワーカノードがワーカ判定時刻を補正するために必要である。
【００４３】
その後マスタノードは延長後のマスタ判定時刻であるマスタ判定時刻１’を算出し、その時刻まで待機する。マスタ判定時刻１’は通信５０４を行った直後の時刻と、ブロードキャストの最悪遅延時間Ｔ＿ｎｗ１と、補正処理時間ΔＴと、マスタノードとワーカノード間通信の最悪遅延時間Ｔ＿ｎｗ２の和として算出でき、マスタ判定時刻１’＝（時刻５５８）＋Ｔ＿ｎｗ１＋ΔＴ＋Ｔ＿ｎｗ２として求められる。
【００４４】
一方、通信５０４を受信したワーカノードは延長後のワーカ判定時刻であるワーカ判定時刻１’を算出し、その時刻までタスク処理を行う。ワーカ判定時刻１’は通信５０４を受信した直後の時刻と補正処理時間ΔＴから算出でき、例えば通信５０４を最悪遅延時間で受信したワーカノードにおいては、ワーカ判定時刻１’＝ （時刻５６０）＋ΔＴとして求められる。ワーカ判定時刻１’についてもワーカ判定時刻１と同様にその時刻はワーカノードごとにばらつくが、特に問題はない。
【００４５】
ここで、このワーカ判定時刻１とマスタ判定時刻１をワーカ判定時刻１’とマスタ判定時刻１’へ補正する仕組みが本実施例にかかる同期方式の大きな特徴であり、この特徴が最悪ケースの処理時間を想定した同期間隔を設定する従来技術に対し、その同期オーバヘッドを大きく削減することを可能とする。
【００４６】
ワーカ判定時刻１’に到達した時点でワーカノードはタスク処理の状況をマスタノードへ通知する。ここでは全てのワーカノードがタスク処理を完了しているために、マスタノードへの処理未完了通知は送信されない。そのため、マスタ判定時刻１’において、マスタノードは全てのワーカノードがタスク処理を完了したと判定する。そして、基本処理時間Tと補正処理時間ΔTの更新を行い、全ワーカノードへ通信４０６を行う（時刻５６２）。通信４０６はブロードキャストによる同期完了通知と基本処理時間Tの送信である。その後、マスタノードはマスタ判定時刻２’を算出し、その時刻まで待機する。また、通信４０６を受信したワーカノードはワーカ判定時刻２’を算出し、その時刻までタスク処理を行う。
【００４７】
以上が実施例１にかかるバリア同期方式において、同期判定時刻までに一部のワーカノードが処理を完了しなかった場合の並列計算機システム１００の動作である。
【００４８】
以上までに、実施例１にかかる並列計算機システム１００のバリア同期に関する動作について説明した。以下、図６、図７に示すマスタノードとワーカノードのフローチャートの各処理ステップと、図４、図５に示した各時刻における処理との対応について述べ、実施例１にかかるバリア同期方式を実現するマスタノードとワーカノードのそれぞれの動作を説明する。
【００４９】
まず、図６を用いて実施例１にかかるマスタノードの動作を示す。
並列処理プログラムが実行されると、まずステップＳＴ６００として基本処理時間Tと補正処理時間ΔTの取得を行う。これは時刻４５０の動作に対応する。次にステップＳＴ６０２としてマスタノードは全ワーカノードへワーカノードが実行すべきプログラムとその初期値を送信する。これは時刻４５２の動作に対応する。次に、ステップＳＴ６０４として全ワーカノードへ処理開始通知を送信する。このとき基本処理時間Tの情報も一緒に送信する。その後、ステップＳＴ６０６としてマスタ判定時刻を算出し、タイマへ設定する。これは時刻４５４の動作に対応する。次に、ステップＳＴ６０８としてマスタ判定時刻まで待機し、マスタ判定時刻にてステップＳＴ６１０としてワーカノードから処理未完了通知を受信したかを確認する。これはマスタ判定時刻１の動作に対応する。
【００５０】
ここで、ワーカノードから処理未完了通知を受信していない場合、ステップＳＴ６１２として基本処理時間Tと補正処理時間ΔTを更新し、さらにステップＳＴ６２０として全ワーカノードへ同期完了通知を送信する。このとき基本処理時間Tの情報も一緒に送信する。その後、ステップＳＴ６２２としてプログラム中の全ての処理を完了したかを判定し、全て完了したならば終了し、全て完了していないならばステップＳＴ６２４として次のタスク処理のマスタ判定時刻を設定する。そしてステップＳＴ６０８へ戻る。
【００５１】
これは図４の時刻４５８、図５の時刻５６２の動作に対応する。一方、ステップＳＴ６１０にてワーカノードから処理未完了通知を受信していた場合は、ステップＳＴ６３０として全ワーカノードへ処理延長通知を送信する。このとき、補正処理時間ΔTの情報も一緒に送信する。その後、ステップＳＴ６３２として延長後のマスタ判定時刻を算出して、タイマへ設定する。そしてステップＳＴ６０８へ戻る。これは時刻５５８の動作に対応する。
【００５２】
次に図７を用いて実施例１にかかるワーカノードの動作を示す。            
ワーカノードは、まず、ステップＳＴ７０２としてマスタノードからワーカノードが実行すべきプログラムとその初期値を取得する。これは時刻４５２の動作に対応する。次に、ステップＳＴ７０４としてマスタノードから処理開始通知を受信するまで待機する。マスタノードから処理開始通知を受信すると、一緒に送信されてきた基本処理時間Tの情報を用いて、ステップ７０６としてワーカ判定時刻を算出し、タイマへ設定する。これは時刻４５６の動作に対応する。次に、ステップＳＴ７０８としてワーカ判定時刻までタスク処理を行い、ワーカ判定時刻にてステップＳＴ７１０としてタスク処理が完了しているかを確認する。これはワーカ判定時刻１の動作に対応する。
【００５３】
ここで、既にタスク処理が完了している場合、ステップＳＴ７２０としてマスタノードから同期完了通知を受信するまで待機する。マスタノードから同期完了通知を受信した場合は、ステップＳＴ７２６へ移行する。そして、プログラム中の全ての処理を完了したかを判定し、全て完了したならば終了し、全て完了していないならば、ステップＳＴ７２８として同期完了通知と共に送信されてきた基本処理時間Tの情報を用いて次のタスク処理のワーカ判定時刻を設定する。そしてステップＳＴ７０８へ戻る。これは図４の時刻４６０、図５の時刻５６４の動作に対応する。
【００５４】
一方、ステップＳＴ７１０にてタスク処理が完了していなかった場合、ステップＳＴ７３０へ移行してマスタノードへ処理未完了通知を送信し、ステップＳＴ７３２として未完了のタスク処理を再開する。これはワーカ判定時刻１の動作に対応する。ステップＳＴ７３４としてマスタノードからの処理延長通知を受信するとステップＳＴ７３６へ移行し、処理延長通知と共に送信されてきた補正処理時間ΔTの情報を用いて延長後のワーカ判定時刻を算出し、タイマへ設定する。そしてステップＳＴ７０８へ戻る。これは時刻５６０の動作に対応する。
【００５５】
以上が実施例１にかかるマスタノードとワーカノードの動作である。これにより、従来技術の課題を解決し、比較的処理時間のばらつきが大きなアプリケーションに対しても、小さな同期オーバヘッドで並列計算を実行することが可能である。
【００５６】
以上、実施例１にかかるバリア同期方式について説明した。以下、図８Ａ、図８Ｂを用いて、図１の計算ユニット１１０上で上記のバリア同期方式を実現する手段の一具体的構成を説明する。
【００５７】
図８Ａは本実施例にかかる計算ユニット１１０の構成図である。計算ユニット１１０は図示を省略した内部バス等で相互に接続された処理部として機能するプロセッサ８１０、通信制御部８２０−ａ、ｂ、インターバルタイマ８３０、及び記憶部であるメモリ８４０を有している。プロセッサ８１０はメモリ８４０に記憶された各種プログラムを実行するデバイスであり、中央処理部(Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ：ＣＰＵ)とも呼ばれる。
【００５８】
通信制御部８２０−ａ、８２０−ｂはネットワーク１２０と計算ユニット１１０とのインタフェースとなるユニットであり、他計算ユニットとの1対1通信およびブロードキャスト通信などの機能を提供する。通信制御部８２０−ａ、８２０−ｂはネットワーク１２０からデータを受信すると、メモリ８４０へ受信データを書き込み、プロセッサ８１０へ通信があったことを示す割込通知（通信割込と呼ぶ）を送信する。通信割込を受けたプロセッサ８１０は現在の処理を中断して通信割込処理を実行し、通信割込処理が終了すると中断しておいた処理を続行する。本実施例における計算ユニット１１０は通信制御部８２０−ａ、８２０−ｂを２つ有している。本実施例では２つある通信制御部８２０−ａ、８２０−ｂの内、片方を図４、図５に示した通信４０４、通信４０６、通信５０２、通信５０４など同期に関する通信を行う専用デバイスとして用いる。この理由は後述するが、ここでは通信制御部８２０−ａを同期に関する通信を行う専用デバイスに選択したとして以下の説明を行う。
【００５９】
インターバルタイマ８３０は、内部または外部のクロックに同期してカウントアップする実時間カウンタ８３２を有する。この実時間カウンタ８３２はプロセッサ８１０から読み出し可能である。また、インターバルタイマ８３０は割込間隔設定レジスタ８３４を有し、これを用いてタイマ割込時間間隔を設定することができ、インターバルタイマ８３０は割込間隔設定レジスタ８３４に設定された時間が経過するとプロセッサ８１０へタイマ割込をかける。プロセッサ８１０はタイマ割込を受けると、現在の処理を中断してタイマ割込処理を実行し、タイマ割込処理が終了すると中断しておいた処理を続行する。タイマ割込処理では、割込間隔設定レジスタ８３４を再設定し、再びタイマ割込が発生するようにする。
【００６０】
メモリ８４０は並列処理プログラム８４２、オペレーティングシステム（以下、ＯＳ）８４４とハイパーバイザ（Ｈｙｐｅｒｖｉｓｏｒ）８５０を有する。並列処理プログラム８４２はアプリケーションのプログラマが作成した実行対象となるプログラムである。ＯＳ８４４は割込処理や通信制御部８２０などの各種デバイスの制御を実行するプログラムであり、Ｗｉｎｄｏｗｓ（登録商標）やＬｉｎｕｘなど既存のＯＳである。
【００６１】
ハイパーバイザ８５０はＯＳ８４４からハードウェアを仮想化，または一部機能を隠ぺいするためのものであり、本実施例においては特に割込処理、バリア同期処理、分散並列処理をＯＳ８４４から隠ぺいする。すなわち、本実施例に係るバリア同期方式を実現するために必要な追加処理のみをハイパーバイザ８５０が行い、それ以外の割込処理については従来通りＯＳ８４４が行う。
【００６２】
そのため、図８Ｂに示すように、本実施例にかかるハイパーバイザ８５０は割込処理プログラム８５２、分散並列処理制御部８８０に加え、通信制御設定部８５４、バリア同期制御部８６０、タイマ割込制御部８７０を有する。
【００６３】
図８Ｂに示すように、割込処理プログラム８５２はインターバルタイマ８３０、通信制御部８２０からの割込に対する処理や、並列処理プログラム８４２における基本処理時間Ｔの設定や後述するタスク処理完了フラグ情報９０２の書き込みなど本実施例に必須のシステムコールに対する処理を行い、これ以外の割込処理についてはＯＳ８４４へ依頼する。
【００６４】
図８Ｂの通信制御設定部８５４は通信制御部８２０への設定を行う。本実施例にかかる通信制御設定部８５４はマスタ・ワーカ情報８８２の値に応じて通信制御部８２０への設定値を切り替える特徴がある。
【００６５】
バリア同期制御部８６０は本実施例にかかるバリア同期方式を実現するための制御部であり、同期制御プログラム８６２とタスク処理状況情報８６４と間隔最適化プログラム８６６を有する。同期制御プログラム８６２は上述したマスタノードにおける処理時間の延長判定処理やタスク処理状況情報８６４へのアクセスなど、バリア同期を実現するためのプログラムである。
【００６６】
図９に示すように、タスク処理状況情報８６４はタスク処理の状況に関する情報であり、タスク処理完了フラグ情報９０２と処理未完了通知情報９０４から構成される。タスク処理完了フラグ情報９０２はワーカノードがタスク処理を完了したか否かを示すフラグであり、ワーカノードがタスク処理を完了した時点で同期制御プログラム８６２を介してフラグが立てられる。処理未完了通知情報９０４はワーカノードから処理未完了通知を受信したか否かを示す情報であり、ワーカノードから処理未完了通知があった場合は通信制御部８２０−ａによってこのメモリ領域に書き込まれる。間隔最適化プログラム８６６は割込時間間隔情報８７６にある基本処理時間Ｔ、補正処理時間ΔＴの値を、より同期オーバヘッドを小さくする最適な値に更新するためのプログラムである。
【００６７】
図８Ｂのタイマ割込制御部８７０はインターバルタイマ８３０に対するタイマ割込の間隔設定を行う制御部であり、タイマ設定プログラム８７２と割込時間間隔情報８７６を有する。タイマ設定プログラム８７２は割込時間間隔情報８７６を用いてインターバルタイマ８３０のタイマ割込をマスタ判定時刻またはワーカ判定時刻に発生させるためのプログラムである。
【００６８】
図１０に示すように、割込時間間隔情報８７６は、基本処理時間Ｔの情報である基本処理時間１００２、補正処理時間ΔＴの情報である補正処理時間１００４、ブロードキャストの最悪遅延時間Ｔ＿ｎｗ１の情報であるＢＣ最悪遅延時間１００６、マスタノードとワーカノード間通信の最悪遅延時間Ｔ＿ｎｗ２の情報であるＭＷ最悪遅延時間１００８、タイマ割込間隔１０１０というマスタ判定時刻とワーカ判定時刻の算出に関する情報を有する。
【００６９】
図８Ｂの分散並列処理制御部８８０は、複数ノードを用いた一般的な分散並列処理の基本機能を提供する基盤であり、マスタ・ワーカ情報８８２を有する。マスタ・ワーカ情報８８２は当該計算ユニットがマスタノードであるのかワーカノードであるのかを示す識別情報である。
【００７０】
以上が本実施例１にかかる計算ユニット１１０の構成の一例である。以下、計算ユニット１１０を用いて、図６、図７に示したマスタノードとワーカノードの動作を実現する具体的手段を説明する。
【００７１】
まず、マスタノードの動作の実現手段について示す。図６に示したマスタノードの動作を実現するには、本実施例の特徴となる次の６つの手段を実現できればよい。ここで、括弧内の符号はマスタノードの動作における関連する図６中のステップを示している。
（Ｍ−１）基本処理時間Ｔ、補正処理時間ΔＴの取得手段（ＳＴ６００）
（Ｍ−２）マスタ・ワーカの識別手段（ＳＴ６０２）
（Ｍ−３）処理開始・同期完了・処理延長の通知手段（ＳＴ６０４、ＳＴ６２０、ＳＴ６３０）
（Ｍ−４）マスタ判定時刻にタイマ割込を得る手段（ＳＴ６０６、ＳＴ６０８、ＳＴ６２４、ＳＴ６３２）
（Ｍ−５）全ワーカノードの処理完了の判定手段（ＳＴ６１０）
（Ｍ−６）基本処理時間Tと補正処理時間ΔTの更新手段（ＳＴ６１２）
以下、（Ｍ−１）〜（Ｍ−６）までの実現手段を示す。
【００７２】
（Ｍ−１）の実現手段
基本処理時間Ｔと補正処理時間ΔＴの取得については、これらを割込時間間隔情報８７６の基本処理時間１００２および補正処理時間１００４に設定するためのアプリケーション・プログラム・インタフェース（ＡＰＩ）を用意し、アプリケーションのプログラマに公開することにより、実行時に並列処理プログラム８４２から得られる。並列処理プログラム８４２から得られなかった場合は基本処理時間１００２および補正処理時間１００４のデフォルト値を採用する。
【００７３】
（Ｍ−２）の実現手段
本実施例においてマスタノードとワーカノードではその動作が異なる。そのため、計算ユニット１１０がマスタノードであるのか、ワーカノードであるのかを事前に認識する必要がある。本実施例において計算ユニット１１０がマスタノードであることは分散並列処理制御部８８０のプログラムにてステップＳＴ６０２を行う際に識別可能であり、このときにマスタ・ワーカ情報８８２へその識別情報を書き込む。この情報を参照することで計算ユニット１１０はマスタノードであることを識別可能である。
【００７４】
（Ｍ−３）の実現手段
本実施例にかかるマスタノードは処理開始通知、同期完了通知、処理延長通知という３種類のブロードキャスト通信を行う。前記３種の通知については、処理開始、同期完了、処理延長ごとに識別コードを設定し、データとして送信することで受信側にて識別可能である。送信についてはＯＳ８４４の基本機能を使用して通信制御部８２０−ａへブロードキャストによる送信を依頼し、これを受けた通信制御部８２０−ａが送信を実行する。ここで、処理開始と同期完了の通知を行う際には、識別コードに加えて基本処理時間Ｔの情報も一緒に送信する。また、処理延長の通知を行う際には、識別コードに加えて補正処理時間ΔＴの情報も一緒に送信する。
【００７５】
（Ｍ−４）の実現手段
マスタノードについては基本処理時間Ｔに基づくマスタ判定時刻（ＳＴ６０６、ＳＴ６２４）と補正処理時間ΔＴに基づくマスタ判定時刻（ＳＴ６３２）の２種類のタイマ割込間隔がある。
【００７６】
前者については、タイマ設定プログラム８７２が割込時間間隔情報８７６を参照し、タイマ割込間隔１０１０＝（Ｔ＋Ｔ＿ｎｗ１＋Ｔ＿ｎｗ２）を計算することで得られる。また、後者についても同様にタイマ設定プログラム８７２が割込時間間隔情報８７６を参照し、タイマ割込間隔１０１０＝（ΔＴ＋Ｔ＿ｎｗ１＋Ｔ＿ｎｗ２）を計算することで得られる。上記より得られたタイマ割込間隔１０１０をインターバルタイマ８３０の割込間隔設定レジスタ８３４に設定することでマスタ判定時刻にタイマ割込を得ることができる。なお、ブロードキャストの最悪遅延時間Ｔ＿ｎｗ１、マスタノードとワーカノード間通信の最悪遅延時間Ｔ＿ｎｗ２は並列計算システム１００の設計値であるため、割込時間間隔情報８７６のＢＣ最悪遅延時間１００６およびＭＷ最悪遅延時間１００８に予め設定しておく。
【００７７】
（Ｍ−５）の実現手段
ここでは処理未完了通知情報９０４を得る手段と、この情報を基に全ワーカノードの処理完了判定を行う手段を示す。
【００７８】
まず、処理未完了通知情報９０４を得る手段を示す。処理未完了通知情報９０４はワーカ判定時刻に処理が完了しなかったワーカノードから送信される処理未完了通知である。本実施例にかかるハイパーバイザ８５０は、この情報を通信制御部８２０−ａを介して効率よく得られるようにするために、（１）で述べたステップＳＴ６０２において自身がマスタノードであると認識した段階で、通信制御設定部８５４を起動する。そして、通信制御設定部８５４は通信制御部８２０−ａに対し、次の設定を行う。
（Ｍ−５−１）外部からデータを受信してもプロセッサ８１０に割込通知（通信割込）を送信しない。
（Ｍ−５−２）受信データの書込み先を処理未完了通知情報９０４のアドレス領域とする。
【００７９】
（Ｍ−５−１）は処理未完了通知の収集に伴う処理時間オーバヘッドの削減を目的としたものである。処理未完了通知はワーカ判定時刻に処理が完了しなかったワーカノードから送信されるため、最悪ケースにおいては全ワーカノードからの処理未完了通知が送信される可能性がある。この場合、通信制御部８２０−ａが受信した数だけ割込通知をあげたとすると、プロセッサ８１０は膨大な回数の通信割込処理を実行する必要があり、ワーカノード数に依存した大きな処理時間が必要となる。これはマスタノードが処理延長通知を送信する時間が遅れることにつながり、大きな処理時間オーバヘッドとなる。そのため、（Ｍ−５−１）の設定を行うことで、前記大きな処理時間オーバヘッドの発生を回避する。
【００８０】
ここで、（Ｍ−５−１）の設定を行うことはプロセッサ８１０が外部からデータを受信したことを検出できない状態にするため、通常は問題である。しかしながら、本実施例におけるマスタノードは、同期に関する受信データがワーカノードからの処理未完了通知のみであり、また、この処理未完了通知があった場合、少なくともマスタ判定時刻までには受信しているという２つの特徴を有している。そのため、本実施例にかかるマスタノードにおいては（Ｍ−５−１）の設定を行っても問題なく処理未完了通知を受信可能であり、また通信制御部８２０−ａを同期に関する通信を行うための専用インタフェースとし、通信制御部８２０−ｂをその他の通信のためのインタフェースとすることで、その他の通信も問題なく行うことができる。
【００８１】
さらに、本実施例におけるワーカノードからマスタノードへの処理未完了通知の送信（通信５０２）には片方向通信を用いることが好ましい。これは、片方向通信には再送しないという特徴があり、これを用いることでマスタ判定時刻以降に処理未完了通知がマスタノードへ届かないことを保証できるためである。例えば、処理未完了通知が大量に発生し、ネットワーク１２０上または計算ユニット１１０上でパケットロスが発生した場合を考える。このとき、ワーカノードが処理未完了通知を再送したとし、それがマスタ判定時刻以降の処理延長通知後にマスタノードに到達したとすると、マスタノードは受信した処理未完了通知が、前の処理完了判定のものであるのか、現在の処理完了判定のものであるのかを判別する必要がある。これはマスタノードの判定処理を複雑化するため好ましくない。さらに本実施例におけるマスタノードは、ワーカノードが送信する全ての処理未完了通知を受ける必要はなく、１つ以上受けられればよい。以上より、本実施例においては片方向通信を用いることが好ましい。なお、片方向通信の例としてはＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）やＲＤＭＡ（Ｒｅｍｏｔｅ  Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）などがある。
【００８２】
（Ｍ５−２）は使用するメモリ領域の抑制を目的としたものである。ワーカノード数が膨大である場合、全ての処理未完了通知を受けるためには非常に大きなメモリ領域を確保する必要がある。しかし、本実施例における同期方式ではマスタ判定時刻までに処理未完了通知を１つでも受信したかのみ分かればよい。そのため、必要なメモリ領域は処理未完了通知データを１つ格納できる領域のみであり、（Ｍ−５−２）の設定を行うことでメモリ領域の使用量を大きく削減できる。
【００８３】
以上により、本実施例にかかる計算ユニット１１０のマスタノードは処理未完了通知情報９０４を通信制御部８２０−ａを介して効率よく得ることができる。
【００８４】
次に処理未完了通知情報９０４を基に全ワーカノードの処理完了判定を行う手段を示す。本実施例にかかる計算ユニット１１０では、全ワーカノードの処理完了判定を同期制御プログラム８６２が行い、これはリセット処理と判定処理からなる。
【００８５】
まず、リセット動作として、同期制御プログラム８６２は通信４０４、通信５０４、通信４０６の直前に処理未完了通知情報９０４をクリアする操作を行う。これは処理未完了通知情報９０４の初期化、または前のステップＳＴ６１０で参照した処理未完了通知情報９０４の削除を目的とし、これにより次に実行するステップＳＴ６１０の全ワーカノードの処理完了判定を正しく行うことができるようになる。
【００８６】
次に、判定処理であるが、これはマスタ判定時刻から開始される。まず、マスタ判定時刻になり、インターバルタイマ８３０からのタイマ割込を受けたプロセッサ８１０は同期制御プログラム８６２を実行する。同期制御プログラム８６２はタスク処理状況情報８６４にある処理未完了通知情報９０４を参照し、処理未完了通知のデータがある場合は一部のワーカノードがタスク処理を完了していないと判定し、処理未完了通知のデータが無い場合は全ワーカノードがタスク処理を完了したと判定する。そして、同期制御プログラム８６２は上記判定結果に基づき、通信５０４を行うか、または間隔最適化プログラム８６６を呼び出し、基本処理時間Ｔと補正処理時間ΔＴを更新した上で通信４０６を行う。
【００８７】
以上により、本実施例にかかる計算ユニット１１０のマスタノードは全ワーカノードの処理完了判定を行うことができる。
【００８８】
（Ｍ−６）の実現手段
最後に、基本処理時間Tと補正処理時間ΔTの更新手段を示す。基本処理時間Tと補正処理時間ΔTの更新は間隔最適化プログラム８６６が行う。ステップＳＴ６１０にて全ワーカノードがタスク処理を完了したと判定されると、同期制御プログラム８６２にて間隔最適化プログラム８６６が呼び出され、所定のアルゴリズムにて算出された基本処理時間Tと補正処理時間ΔTの値によって割込時間間隔情報８７６にある基本処理時間１００２と補正処理時間１００６の値が更新される。
【００８９】
アルゴリズムの一例を次に述べる。本アルゴリズムに使用するパラメータとしては当該タスク処理における処理時間延長回数Ｎ＿ａｄｊと、当該タスク処理までの処理時間延長継続回数Ｎ＿ｓｔｇ、処理時間無延長継続回数Ｎ＿ｓｔｇ＿ｎがあり、これを元に基本処理時間Ｔ、補正処理時間ΔＴを修正する。ここで、処理時間延長回数Ｎ＿ａｄｊは当該タスク処理において何回処理時間延長がされたかを示し、補正処理時間ΔＴの修正量に影響する。また処理時間延長継続回数Ｎ＿ｓｔｇは直近のタスク処理において何回連続して処理時間延長があったかを、処理時間無延長継続回数Ｎ＿ｓｔｇ＿ｎは直近のタスク処理において何回連続して処理時間延長がなかったかをそれぞれ示し、基本処理時間Ｔの修正量に影響する。
【００９０】
図１１のテーブル１１００に示すように、例えば、同期ポイントで区切られた異なる５つのタスク処理（タスク処理ＩＤの１〜５）があり、これらがタスク処理ＩＤ１から５まで順番に処理されており、各タスク処理における処理時間延長回数Ｎ＿ａｄｊがそれぞれ５回、１回、５回、０回、０回であったとき、処理時間延長継続回数Ｎ＿ｓｔｇは１回、２回、３回、０回、０回、処理時間無延長継続回数Ｎ＿ｓｔｇ＿ｎは０回、０回、０回、１回、２回となる。
【００９１】
本アルゴリズムにおいて補正処理時間ΔＴを更新する方法の概要を以下に示す。
（Ｍ−６−１）処理時間延長回数Ｎ＿ａｄｊによって増減を決定する。
【００９２】
補正処理時間ΔＴを適切に設定することで各タスク処理時間のばらつきに速やかに追従することが可能となる。処理時間延長回数Ｎ＿ａｄｊはタスク処理時間のばらつきに対する補正処理時間ΔＴの適切さを判定する指標であり、これが大きければ補正処理時間ΔＴが小さすぎ、これが“１”であれば補正処理時間ΔＴが大きすぎると判断できる。図１１では上記判断基準に「処理時間延長回数Ｎ＿ａｄｊが“０”のときは判断不能として変更しない」という条件を加えた場合の補正処理時間ΔＴの更新例を示している。
【００９３】
本アルゴリズムにおいて基本処理時間Ｔを更新する方法の概要を以下に示す。
（Ｍ−６−２）処理時間延長継続回数Ｎ＿ｓｔｇと処理時間無延長継続回数Ｎ＿ｓｔｇ＿ｎによって増減を決定する。
【００９４】
処理時間延長継続回数Ｎ＿ｓｔｇが規定回数以上であれば基本処理時間Ｔが過小評価されていると判断してＴを増加させ、逆に処理時間無延長継続回数Ｎ＿ｓｔｇ＿ｎが規定回数以上であれば基本処理時間Ｔが過大評価されていると判断してＴを削減する。これにより、基本処理時間Ｔを適切な値に収束させることができる。図１１にはＮ＿ｓｔｇが２以上でＴを増加、Ｎ＿ｓｔｇ＿ｎが２以上でＴを削減する基本処理時間Ｔの更新例を示している。
【００９５】
（Ｍ−６−３）削減方法には補正処理時間ΔＴに依存したものと、依存しないものの２つを用いる。
基本処理時間Ｔを増加させる場合、補正処理時間ΔＴと処理時間延長回数Ｎ＿ａｄｊの積によって目標値の指標を容易に算出可能であるが、基本処理時間Ｔを削減する場合は目標値の指標算出は困難である。そこで本アルゴリズムでは補正処理時間ΔＴがタスク処理における処理時間ばらつきの大きさを反映した値となるように制御されている点に着目し、この補正処理時間ΔＴを用いて基本処理時間Ｔを更新することとする。
【００９６】
しかし、この方法だけでは補正処理時間ΔＴが小さいときにタスク処理時間が突然大幅に小さくなると、この変化量に基本処理時間Ｔが追従するまでに大きな時間が必要となり、その間の同期オーバヘッドが増大する。そこで、このようなケースの対策として、処理時間無延長継続回数Ｎ＿ｓｔｇ＿ｎが大きい場合に基本処理時間Ｔを単純に半分にするなどの補正処理時間ΔＴに依存しない大幅な削減を行う。これにより、基本処理時間Ｔを削減するケースにおいても同期オーバヘッドを増やすことなく速やかに追従することが可能となる。
【００９７】
本アルゴリズムのフローチャートを図１２に示す。ここでは更新前の基本処理時間、すなわちｎ−１番目の基本処理時間をＴ[ｎ−１]、更新後の基本処理時間、すなわちｎ番目の基本処理時間をＴ[ｎ]として説明する。また補正処理時間ΔＴについても同様である。
【００９８】
まず、基本処理時間Ｔについての更新のために、ＳＴ１２００として処理時間延長継続回数Ｎ＿ｓｔｇ＿ｎに着目し、予め設定した第１の閾値ＴＨｓｔｇ１との比較を行う。Ｎ＿ｓｔｇ＿ｎがＴＨｓｔｇ１より大きい場合にはＳＴ１２１０へ移行し、ΔＴに依存しない削減手段（Ｔ[ｎ]＝Ｔ[ｎ−１]／２）を適用する。Ｎ＿ｓｔｇ＿ｎがＴＨｓｔｇ１より小さい場合にはＳＴ１２０２へ移行し、Ｎ＿ｓｔｇ＿ｎと予め設定した第２の閾値ＴＨｓｔｇ２との比較を行う。Ｎ＿ｓｔｇ＿ｎがＴＨｓｔｇ２より大きい場合にはＳＴ１２１２へ移行し、ΔＴに依存した削減手段（Ｔ[ｎ]＝Ｔ[ｎ−１]−ΔＴ[ｎ−１]）を適用する。Ｎ＿ｓｔｇ＿ｎがＴＨｓｔｇ２より小さい場合にはＳＴ１２０４へ移行し、Ｎ＿ｓｔｇと予め設定した第３の閾値ＴＨｓｔｇ３との比較を行う。Ｎ＿ｓｔｇがＴＨｓｔｇ３より大きい場合にはＳＴ１２１４へ移行し、Ｔを増加させる手段（Ｔ[ｎ]＝Ｔ[ｎ−１]＋ΔＴ[ｎ−１]／２）を適用する。Ｎ＿ｓｔｇがＴＨｓｔｇ３より小さい場合にはＳＴ１２１６へ移行し、Ｔを変更しない手段（Ｔ[ｎ]＝Ｔ[ｎ−１]）を適用する。以上により基本処理時間Ｔの更新が完了する。
【００９９】
次に補正処理時間ΔＴの更新を行う。まず、ＳＴ１２２０として処理時間延長回数Ｎ＿ａｄｊの値をチェックする。Ｎ＿ａｄｊが“０”であるならばＳＴ１２３０へ移行し、ΔＴを変更しない手段（ΔＴ[ｎ]＝ΔＴ[ｎ−１]）を適用する。
Ｎ＿ａｄｊが“０”でないならば、ＳＴ１２２２へ移行し、“１”であるかをチェックする。Ｎ＿ａｄｊが“１”であるならばＳＴ１２３２へ移行し、ΔＴを削減する手段（ΔＴ[ｎ]＝ΔＴ[ｎ−１]／２）を適用する。Ｎ＿ａｄｊが“１”でないならば、ＳＴ１２３４へ移行し、Ｎ＿ａｄｊを基にΔＴを増減させる手段（ΔＴ[ｎ]＝ΔＴ[ｎ−１]×Ｎ＿ａｄｊ）／４）を適用する。ここで、ΔＴ[ｎ−１]×Ｎ＿ａｄｊは直前のタスク処理における総延長時間を示しており、本例では総延長時間の１／４をΔＴ[ｎ]として設定している。
【０１００】
すなわちタスク処理における処理時間延長回数Ｎ＿ａｄｊが４回程度になるように制御している。処理時間延長回数Ｎ＿ａｄｊが１以下のとき、補正処理時間ΔＴが非常に大きくなっている懸念があり、本実施例にかかるバリア同期方式の同期オーバヘッド増大につながる。これに対し、各ワーカノードにおいてタスク処理の処理時間延長１回に必要な処理時間（本実施例にかかるバリア同期方式の同期オーバヘッドとも言える）は通常のバリア同期方式における集計処理１ノード分程度であるため、処理時間延長が数回分程度では数十ナノ秒程度であり無視できるほど小さい。すなわち、本実施例においては処理時間延長回数Ｎ＿ａｄｊが数回程度になるように制御するのが好ましい。
【０１０１】
以上に述べた基本処理時間Ｔ、および補正処理時間ΔＴの更新アルゴリズムにより、様々なプログラムにおいて適切に基本処理時間Ｔおよび補正所時間ΔＴを設定でき、同期オーバヘッドを小さく保つことが可能となる。なお、基本処理時間Ｔおよび補正処理時間ΔＴをユーザーが指定しているケースにおいては、あえて基本処理時間Tと補正処理時間ΔTを更新しないことも可能である。
【０１０２】
以上に示した（Ｍ−１）〜（Ｍ−６）の実現手段により、本実施例にかかる計算ユニット１１０は図４に示すマスタノードの動作を実現する。
【０１０３】
次に、図７を用いて、ワーカノードの動作の実現手段について示す。図７に示したワーカノードの動作を実現するには本実施例の特徴となる次の７つの手段を実現できればよい。ここで、括弧内の符号はワーカノードの動作における関連するステップを示している。
（Ｗ−１）マスタ・ワーカの識別手段（ＳＴ７０２）
（Ｗ−２）処理開始・同期完了・処理延長の取得手段（ＳＴ７０４、ＳＴ７２０、ＳＴ７３４）
（Ｗ−３）ワーカ判定時刻にタイマ割込を得る手段（ＳＴ７０６、ＳＴ７２８、ＳＴ７３６）
（Ｗ−４）タスク処理の実行手段（ＳＴ７０８）
（Ｗ−５）タスク処理完了の判定手段（ＳＴ７１０）
（Ｗ−６）処理未完了通知の送信手段（ＳＴ７３０）
（Ｗ−７）タスク処理の再開手段（ＳＴ７３２）
以下、（Ｗ−１）〜（Ｗ−７）までの実現手段を示す。
【０１０４】
（Ｗ−１）の実現手段
本実施例においてマスタノードとワーカノードではその動作が異なる。そのため、計算ユニット１１０がマスタノードであるのか、ワーカノードであるのかを事前に認識する必要がある。本実施例において計算ユニット１１０がワーカノードであることは分散並列処理制御部８８０のプログラムにてステップＳＴ７０２を行う際に識別可能であり、このときにマスタ・ワーカ情報８８２へその識別情報を書き込む。この情報を参照することで計算ユニット１１０はワーカノードであることが識別可能である。
【０１０５】
（Ｗ−２）の実現手段
本実施例にかかるワーカノードは処理開始通知、同期完了通知、処理延長通知という３種類のブロードキャスト通信を受信する。前記３種の通知についてはデータとして送られてくる識別コードにより識別可能である。受信については通信制御部８２０−ａからの割込通知を受けたプロセッサ８１０が、現在の処理を中断し、割込処理プログラム８５２が割込処理内容を解釈してＯＳ８４４へ割込処理を委託し、ＯＳ８５０が通信割込処理を行うことで通知データを取得する。その後、同期制御プログラム８６２が起動され、通知データが処理開始または同期完了の通知であった場合には、一緒に送られている基本処理時間Ｔの情報を基本処理時間１００２へ設定し、さらにタスク処理完了フラグ情報９０２のフラグクリアを行う。一方、処理延長の通知であった場合には、一緒に送られている補正処理時間ΔＴの情報を補正処理時間１００４へ設定する。
【０１０６】
（Ｗ−３）の実現手段
ワーカノードについては基本処理時間Ｔに基づくワーカ判定時刻（ＳＴ７０６、ＳＴ７２８）と補正処理時間ΔＴに基づくワーカ判定時刻（ＳＴ７３６）の２種類のタイマ割込間隔がある。
【０１０７】
前者については、処理開始通知または同期完了通知を受けた後に起動されるタイマ設定プログラム８７２が基本処理時間１００２を参照し、タイマ割込間隔１０１０＝Ｔとして得られる。また、後者については処理延長通知を受けた直後に起動されるタイマ設定プログラム８７２が補正処理時間８７６を参照し、タイマ割込間隔１０１０＝ΔＴとして得られる。上記より得られたタイマ割込間隔１０１０をインターバルタイマ８３０の割込間隔設定レジスタ８３４に設定することでワーカ判定時刻にタイマ割込を得ることができる。
【０１０８】
（Ｗ−４）の実現手段
タスク処理は並列処理プログラム８４２によって実行される。タイマ設定を完了した段階で、ハイパーバイザ８５０のタイマ割込処理が終了し、並列処理プログラム８４２が開始される。並列処理プログラム８４２は次のタイマ割込が発生するまで実行される。並列処理プログラム８４２は計算処理が同期ポイントに到達した（すなわちタスク処理を完了した）時点で、タスク処理完了フラグ情報９０２のフラグを立て、待機する。なお、タスク処理完了フラグ情報９０２のフラグのクリアは、上述した処理開始通知または同期完了通知を受けた直後に起動される同期制御プログラム８６２によって行われている。
【０１０９】
（Ｗ−５）の実現手段
タスク処理完了の判定は同期制御プログラム８６２が行う。ワーカ判定時刻となり、タイマ割込を受けたプロセッサ８１０は並列処理プログラム８４２を中断し、同期制御プログラム８６２を実行する。同期制御プログラム８６２はタスク処理完了フラグ情報９０２を参照し、フラグが立っているならばタスク処理完了と判定して割込処理を終了する。一方、フラグが立っていないならばタスク処理未完了と判定し、処理未完了通知をマスタノードへ送信する。
【０１１０】
（Ｗ−６）の実現手段
処理未完了通知の送信は同期制御プログラム８６２がＯＳ８４４の基本機能を使用して通信制御部８２０−ａへ1対1通信による送信を依頼し、これを受けた通信制御部８２０−ａが送信を実行することで行われる。ここでの通信方式はワーカノードからマスタノードへの片方向通信で行うのが望ましい。
【０１１１】
（Ｗ−７）の実現手段
タスク処理の再開はハイパーバイザ８５０のタイマ割込処理完了後に行われる。具体的には処理未完了通知を通信制御部８２０−ａへ依頼した後、ハイパーバイザ８５０のタイマ割込処理は終了し、中断されていた並列処理プログラム８４２が再開され、タスク処理が再開される。
【０１１２】
以上に示した（Ｗ−１）〜（Ｗ−７）の実現手段により、本実施例にかかる計算ユニット１１０は図７に示すワーカノードの動作を実現する。
なお、上記に示したバリア同期制御部８６０、タイマ割込制御部８７０、通信制御設定部８５４の動作はマスタノードとワーカノードとで異なるが、これはマスタ・ワーカ情報８８２を参照することにより、当該計算ユニット１１０がどちらの役割かが判定可能であるため、適切に動作可能である。
【０１１３】
以上に説明した本実施例にかかるハイパーバイザ８５０を用いた計算ユニット１１０とネットワーク１２０を用いることで、本実施例にかかるバリア同期方式を実現できる。これにより、各ワーカノードにおけるタスク処理時間のばらつきが比較的大きなアプリケーションをノード数が極めて大きな並列計算機システム１００を用いて実行する場合において、その同期オーバヘッドを大きく削減した高速な並列処理が可能となる。
【０１１４】
なお、以上の実施例は説明を簡単にするために並列計算機システム１００が均一の計算機ユニット１１０群から構成されることを前提として行った。しかし、本発明に係るバリア同期方式においては、ネットワーク通信に関する２つの最悪遅延時間（最悪遅延時間Ｔ＿ｎｗ１、最悪遅延時間Ｔ＿ｎｗ２）が予め分かっており、かつ計算ユニットが２つの通信制御部を有していれば実現可能である。すなわち、計算ユニット１１０と、それとは異なる計算ユニット１５０、計算ユニット１６０などを組合せても、全ての計算ユニットが２つの通信制御部を有しているならば、それぞれの計算ユニットにおける最悪遅延時間Ｔ＿ｎｗ１、最悪遅延時間Ｔ＿ｎｗ２を予め算出することによって、本発明に係るバリア同期方式を実現する並列計算機システムを構成可能である。
【０１１５】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。上記した実施例は本発明を分かりやすく説明するために詳細に説明したのであり、必ずしも説明の全ての構成を備えるものに限定されものではない。
【０１１６】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよいし、プロセスがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Solid State Drive）等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体におくことができるし、必要に応じてネットワーク等を介してダウンロードすることも可能であることは言うまでもない。
【産業上の利用可能性】
【０１１７】
本発明は、並列処理と同期処理を繰り返す計算処理をマスタノードとワーカノードを用いて行う並列計算機システム、そのバリア同期プログラムとして極めて有用である。
【符号の説明】
【０１１８】
１００  並列計算機システム
１１０  計算ユニット
１１０−Ｍ  マスタノード
１１０−Ｗ  ワーカノード
１２０  ネットワーク
２００、３００、４００、５００  タイムチャート
８１０  プロセッサ
８２０−ａ，８２０−ｂ  通信制御部
８３０  インターバルタイマ
８３２  実時間カウンタ
８３４  割込間隔設定レジスタ
８４０  メモリ
８４２  並列処理プログラム
８４４  ＯＳ
８５０  Ｈｙｐｅｒｖｉｓｏｒ
８５２  割込処理プログラム
８５４  通信制御設定部
８６０  バリア同期制御部
８６２  同期制御プログラム
８６４  タスク処理状況情報
８６６  間隔最適化プログラム
８７０  タイマ割込制御部
８７２  タイマ設定プログラム
８７６  割込時間間隔情報
８８０  分散並列処理制御部
８８２  マスタ・ワーカ情報
９０２  タスク処理完了フラグ情報
９０４  処理未完了通知情報
１００２  基本処理時間
１００４  補正処理時間
１００６  ＢＣ最悪遅延時間
１００８  ＭＷ最悪遅延時間
１０１０  タイマ割込間隔
１１００  タスク処理テーブル
【図１】
0005568048.tif 000002
【図２】
0005568048.tif 000003
【図３】
0005568048.tif 000004
【図４】
0005568048.tif 000005
【図５】
0005568048.tif 000006
【図６】
0005568048.tif 000007
【図７】
0005568048.tif 000008
【図８Ａ】
0005568048.tif 000009
【図８Ｂ】
0005568048.tif 000010
【図９】
0005568048.tif 000011
【図１０】
0005568048.tif 000012
【図１１】
0005568048.tif 000013
【図１２】
0005568048.tif 000014