(57)【要約】【課題】並列アプリケーションの実行中に、並列アプリケーションの挙動を変えることなく、プロセス間通信の開始時刻を用いた演算を行う。【解決手段】演算処理装置は、プログラムを実行し、プログラムに含まれる第１のプロセスが第１のプロセス間通信を開始した第１の開始時刻に対して第１のシーケンス情報を付与する。そして、第１の開始時刻と第１のシーケンス情報とを主記憶装置に書き込む。第２のプロセスが第２のプロセス間通信を開始した第２の開始時刻に付与された第２のシーケンス情報の方が第１のシーケンス情報よりも新しい場合、通信制御装置４０１内の演算部４１１は、第１の開始時刻を用いた演算を行わない。一方、第２のシーケンス情報が第１のシーケンス情報に対応する場合、演算部４１１は、第１の開始時刻と第２の開始時刻とを用いた演算を行って演算結果を出力する。【選択図】図４
2015106311.tif 000002
【特許請求の範囲】
【請求項１】
演算処理装置と主記憶装置とに接続する通信制御装置であって、
前記演算処理装置が実行するプログラムに含まれる複数のプロセスのうち第１のプロセスが第１のプロセス間通信を開始した第１の開始時刻に対して前記演算処理装置が付与して、前記主記憶装置に書き込んだ第１のシーケンス情報よりも、前記複数のプロセスのうち第２のプロセスが第２のプロセス間通信を開始した第２の開始時刻に付与された第２のシーケンス情報の方が新しい場合、前記第１の開始時刻を用いた演算を行わず、前記第２のシーケンス情報が前記第１のシーケンス情報に対応する場合、前記第１の開始時刻と前記第２の開始時刻とを用いた演算を行って演算結果を出力する演算部、
を有することを特徴とする通信制御装置。
【請求項２】
前記第２のシーケンス情報よりも前記第１のシーケンス情報の方が新しく、前記第２のプロセスが第３のプロセス間通信を開始した第３の開始時刻に付与された第３のシーケンス情報が前記第１のシーケンス情報に対応する場合、前記演算部は、前記第２の開始時刻を用いた演算を行わず、前記第１の開始時刻と前記第３の開始時刻とを用いた演算を行って演算結果を出力することを特徴とする請求項１記載の通信制御装置。
【請求項３】
前記演算処理装置は、前記第１のプロセスを実行し、前記通信制御装置を介して接続された情報処理装置が有する演算処理装置は、前記第２のプロセスを実行することを特徴とする請求項１又は２記載の通信制御装置。
【請求項４】
プログラムを実行し、前記プログラムに含まれる複数のプロセスのうち第１のプロセスが第１のプロセス間通信を開始した第１の開始時刻に対して第１のシーケンス情報を付与する演算処理装置と、
前記第１の開始時刻と前記第１のシーケンス情報とを記憶する主記憶装置と、
前記複数のプロセスのうち第２のプロセスが第２のプロセス間通信を開始した第２の開始時刻に付与された第２のシーケンス情報の方が前記第１のシーケンス情報よりも新しい場合、前記第１の開始時刻を用いた演算を行わず、前記第２のシーケンス情報が前記第１のシーケンス情報に対応する場合、前記第１の開始時刻と前記第２の開始時刻とを用いた演算を行って演算結果を出力する通信制御装置と、
を有することを特徴とする情報処理装置。
【請求項５】
複数の情報処理装置を有する並列計算機システムであって、
前記複数の情報処理装置のうち少なくとも１つの情報処理装置は、
プログラムを実行し、前記プログラムに含まれる複数のプロセスのうち第１のプロセスが第１のプロセス間通信を開始した第１の開始時刻に対して第１のシーケンス情報を付与する演算処理装置と、
前記第１の開始時刻と前記第１のシーケンス情報とを記憶する主記憶装置と、
前記複数のプロセスのうち第２のプロセスが第２のプロセス間通信を開始した第２の開始時刻に付与された第２のシーケンス情報の方が前記第１のシーケンス情報よりも新しい場合、前記第１の開始時刻を用いた演算を行わず、前記第２のシーケンス情報が前記第１のシーケンス情報に対応する場合、前記第１の開始時刻と前記第２の開始時刻とを用いた演算を行って演算結果を出力する通信制御装置と、
を有することを特徴とする並列計算機システム。
【請求項６】
演算処理装置と通信制御装置と主記憶装置とを有する情報処理装置の制御プログラムであって、
前記演算処理装置が実行するプログラムに含まれる複数のプロセスのうち第１のプロセスが第１のプロセス間通信を開始した第１の開始時刻に対して前記演算処理装置が付与して、前記主記憶装置に書き込んだ第１のシーケンス情報よりも、前記複数のプロセスのうち第２のプロセスが第２のプロセス間通信を開始した第２の開始時刻に付与された第２のシーケンス情報の方が新しい場合、前記第１の開始時刻を用いた演算を行わず、前記第２のシーケンス情報が前記第１のシーケンス情報に対応する場合、前記第１の開始時刻と前記第２の開始時刻とを用いた演算を行って演算結果を出力する、
処理を前記通信制御装置内の演算処理装置に実行させることを特徴とする制御プログラム。
【請求項７】
複数の情報処理装置を有する並列計算機システムの制御方法であって、
前記複数の情報処理装置のうち少なくとも１つの情報処理装置が、
プログラムを実行し、
前記プログラムに含まれる複数のプロセスのうち第１のプロセスが第１のプロセス間通信を開始した第１の開始時刻に対して第１のシーケンス情報を付与し、
前記複数のプロセスのうち第２のプロセスが第２のプロセス間通信を開始した第２の開始時刻に付与された第２のシーケンス情報の方が前記第１のシーケンス情報よりも新しい場合、前記第１の開始時刻を用いた演算を行わず、前記第２のシーケンス情報が前記第１のシーケンス情報に対応する場合、前記第１の開始時刻と前記第２の開始時刻とを用いた演算を行って演算結果を出力する、
ことを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信制御装置、情報処理装置、並列計算機システム、制御プログラム、及び並列計算機システムの制御方法に関する。
【背景技術】
【０００２】
並列計算機システムにおける並列アプリケーションプログラムの実行時には、主にMessage Passing Interface（ＭＰＩ）を利用して、複数のプロセスの各々が演算処理とプロセス間通信処理とを繰り返しながら並列に処理を進める。このプロセス間通信処理は、並列計算機システムのあるノード内のプロセス間で行われるとともに、異なるノードのプロセス間でも行われる。このとき、演算処理時間がプロセス間で異なることで、通信処理の開始時刻がプロセス間で異なる場合がある。
【０００３】
例えば、図１に示すように、プロセスＰ０、プロセスＰ１、及びプロセスＰ２が並列アプリケーションプログラムを実行する場合、演算処理が早く完了したプロセスＰ０及びプロセスＰ１は、プロセスＰ２との通信処理をそれぞれ試行する。しかし、プロセスＰ２は、演算処理中であり通信処理を開始できないため、プロセスＰ０及びプロセスＰ１は、プロセスＰ２による演算処理の完了をそれぞれ待つ。この間、プロセスＰ０及びプロセスＰ１は、演算処理も通信処理も行わないため、並列計算機システムの利用効率が低下し、台数効果が悪化する。
【０００４】
この問題を解決するには、並列アプリケーションプログラムの開発者が各プロセスの演算処理時間を均等化するコード書き換えやパラメータチューニング等を行い、通信処理の開始時刻をプロセス間で揃える方法が考えられる。
【０００５】
通信処理の開始時刻がプロセス間で揃っているか否かを確認する方法として、同期待ち時間と呼ばれる値の多寡で確認する方法が知られている。同期待ち時間は、例えば、次のようにして求められる。
【０００６】
１．各プロセスの通信処理ごとに開始時刻を取得する。この開始時刻は、例えば、各プロセスの実行開始時点からの経過時間として取得することができる。
２．通信処理ごとに複数のプロセスの開始時刻の最大値を求める。
３．最大値と各プロセスの通信処理の開始時刻との差分を求め、プロセスごとに複数の通信処理に関する差分を積算し、同期待ち時間として記録する。
【０００７】
各プロセスの同期待ち時間は、すべての通信処理の開始時刻がプロセス間で一致すると０になり、プロセス間で開始時刻の差が大きいほど、並列アプリケーションプログラムの実行に要した経過時間に近づく。したがって、同期待ち時間が０に近いほど望ましい状態であると判断できる。
【０００８】
図１の１回目の通信処理では、プロセスＰ０、プロセスＰ１、及びプロセスＰ２の開始時刻はそれぞれ２０、１０、及び３０であり、開始時刻の最大値は、矢印１０１が示す３０である。そして、最大値３０とプロセスＰ０、プロセスＰ１、及びプロセスＰ２の開始時刻との差分は、それぞれ１０、２０、及び０となる。
【０００９】
２回目の通信処理では、プロセスＰ０、プロセスＰ１、及びプロセスＰ２の開始時刻はそれぞれ６０、７０、及び５０であり、開始時刻の最大値は、矢印１０２が示す７０である。そして、最大値７０とプロセスＰ０、プロセスＰ１、及びプロセスＰ２の開始時刻との差分は、それぞれ１０、０、及び２０となる。
【００１０】
したがって、１回目及び２回目の通信処理に関する差分を積算すると、プロセスＰ０、プロセスＰ１、及びプロセスＰ２の同期待ち時間はそれぞれ２０、２０、及び２０となる。この場合、並列アプリケーションプログラムの実行に要した経過時間は８０であり、そのうち２０が、他のプロセスによる演算処理の完了を待つための無駄な時間であったと解釈できる。
【００１１】
米国Ｃｒａｙ社の並列アプリケーション性能プロファイリングツールは、同期待ち時間を求めるためにＭＰＩの集団通信関数をフックし、通信処理の開始前にプロセス間同期インタフェース（ＭＰＩ＿Ｂａｒｒｉｅｒ関数）を自動的に呼び出す。そして、並列アプリケーション性能プロファイリングツールは、プロセスごとにＭＰＩ＿Ｂａｒｒｉｅｒ関数の経過時間の合計値を求める。
【００１２】
複数のプロセスが持つデータを対象として、データの総和、最大値、最小値等を求めるリダクション演算を行うリダクション演算装置も知られている（例えば、特許文献１を参照）。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２０１０−１２２８４８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
以下の説明では、並列アプリケーションプログラムを、単に、並列アプリケーションと記載する場合がある。
【００１５】
従来の並列計算機システムには、以下のような問題がある。
並列アプリケーション性能プロファイリングツールのように、同期待ち時間を求めるためにプロセス間同期インタフェースを呼び出す場合、各プロセスの処理に同期処理が加わるため、並列アプリケーションの挙動を大きく変えてしまうことがある。このため、同期処理を行うことなく、通信処理ごとに開始時刻の最大値を求めることが望ましい。
【００１６】
同期処理を行うことなく（非同期に）、通信処理ごとに開始時刻の最大値を求めるには、各プロセスが通信処理ごとに開始時刻を取得して主記憶領域に書き込んだ後に、並列アプリケーションの実行中又は実行後に最大値を計算する方法が考えられる。
【００１７】
並列アプリケーションの実行後に最大値を計算する場合、すべての通信処理の開始時刻のデータを記録するため、実行時間が長い並列アプリケーションでは並列アプリケーションが利用できる主記憶領域を圧迫する可能性がある。このような場合、並列アプリケーションの実行中に最大値を計算することが望ましい。
【００１８】
並列アプリケーションの実行中に最大値を計算する場合、すべての通信処理の開始時刻のデータを記録する必要はなく、過去の通信処理に関する差分の積算値を同期待ち時間として記録すれば足りる。したがって、実行時間が長い並列アプリケーションであっても主記憶領域を圧迫することはない。この場合、演算処理中に、ソフトウェア又はハードウェアの非同期通信インタフェースを利用して、各プロセスの通信処理の開始時刻を送受信する方法が考えられる。
【００１９】
しかし、ソフトウェアの非同期通信インタフェースを利用する方法では、最大値の計算はCentral Processing Unit（ＣＰＵ）によるソフトウェア処理のため、ＣＰＵ時間を消費することで並列アプリケーションの挙動が変わる可能性がある。
【００２０】
ハードウェアの非同期通信インタフェースを利用する方法では、各プロセスがネットワークインタフェースに実装されたネットワークリダクション機構に開始時刻のデータを転送し、最大値演算を指示することができる。
【００２１】
ここで、ある通信処理と次の通信処理との間の演算処理時間が非常に短い場合、稀にではあるが、ネットワークリダクション機構による最大値演算が完了しない可能性がある。ネットワークリダクション機構が同時に単一の最大値演算しか実行できない場合、各プロセスは、先行する最大値演算が完了するまで後続の最大値演算を指示できないため、並列アプリケーションの挙動が変わってしまう。
【００２２】
１つの側面において、本発明は、並列アプリケーションの実行中に、並列アプリケーションの挙動を変えることなく、プロセス間通信の開始時刻を用いた演算を行うことを目的とする。
【課題を解決するための手段】
【００２３】
１つの案では、演算処理装置と主記憶装置とに接続する通信制御装置は、演算部を含む。
【００２４】
第１のシーケンス情報は、演算処理装置が実行するプログラムに含まれる複数のプロセスのうち第１のプロセスが第１のプロセス間通信を開始した第１の開始時刻に対して演算処理装置が付与して、主記憶装置に書き込んだシーケンス情報である。複数のプロセスのうち第２のプロセスが第２のプロセス間通信を開始した第２の開始時刻に付与された第２のシーケンス情報の方が第１のシーケンス情報よりも新しい場合、演算部は、第１の開始時刻を用いた演算を行わない。
【００２５】
第２のシーケンス情報が第１のシーケンス情報に対応する場合、演算部は、第１の開始時刻と第２の開始時刻とを用いた演算を行って演算結果を出力する。
【発明の効果】
【００２６】
実施形態によれば、並列アプリケーションの実行中に、並列アプリケーションの挙動を変えることなく、プロセス間通信の開始時刻を用いた演算を行うことができる。
【図面の簡単な説明】
【００２７】
【図１】並列計算機システムにおけるプロセス間通信処理を示す図である。
【図２】プロセス間同期インタフェースを用いた場合のプロセス間通信処理を示す図である。
【図３】ネットワークリダクション機構を示す図である。
【図４】第１の通信制御装置の構成図である。
【図５】並列計算機システムの構成図である。
【図６】ノードの構成図である。
【図７】第２の通信制御装置の構成図である。
【図８】プロセス間通信の開始時刻を用いた演算処理のフローチャートである。
【図９】演算処理の第１の具体例を示すフローチャートである。
【図１０】演算処理の第２の具体例を示すフローチャートである。
【発明を実施するための形態】
【００２８】
以下、図面を参照しながら、実施形態を詳細に説明する。
並列アプリケーション性能プロファイリングツールのように、同期待ち時間を求めるためにプロセス間同期インタフェースを呼び出す場合、各プロセスの処理に同期処理が加わるため、並列アプリケーションの挙動を大きく変えてしまうことがある。
【００２９】
図２は、図１の並列アプリケーションにおいて、並列アプリケーション性能プロファイリングツールによりプロセス間同期インタフェースを呼び出す例を示している。この場合、各プロセスの通信処理が完了した後に、同期待ち時間を求める同期処理が行われるため、並列アプリケーションの実行に要した経過時間は、８０から１００に２５％増加している。並列アプリケーションにも依存するが、図２のように、経過時間が１０％以上増加する例は少なくない。このため、同期処理を行うことなく、通信処理ごとに開始時刻の最大値を求めることが望ましい。
【００３０】
同期処理を行うことなく（非同期に）、通信処理ごとに開始時刻の最大値を求めるには、各プロセスが通信処理ごとに開始時刻を取得して主記憶領域に書き込んだ後に、並列アプリケーションの実行中又は実行後に最大値を計算する方法が考えられる。
【００３１】
まず、並列アプリケーションの実行後に最大値を計算する場合、実行時間が長い並列アプリケーションでは並列アプリケーションが利用できる主記憶領域を圧迫する可能性がある。例えば、１００，０００個のプロセスが１日間走行する並列アプリケーションにおいて、１ｍｓあたり１回の頻度で通信処理が発生すると仮定する。通信処理ごとに８バイトの開始時刻のデータを記録すると、並列アプリケーションが終了する間際には、１プロセスあたり約６９１Ｍバイトの主記憶領域が開始時刻のデータで埋まることになる。
【００３２】
１ノードあたり３２Ｇバイトの主記憶装置を搭載した並列計算機システムにおいて、各ノード内で１６プロセスが並列に動作する場合、約１１Ｇバイトの主記憶領域が開始時刻のデータで埋まり、並列アプリケーションの実行に支障が出る可能性がある。このような場合、並列アプリケーションの実行中に最大値を計算することが望ましい。
【００３３】
並列アプリケーションの実行中に最大値を計算する場合、すべての通信処理の開始時刻のデータを記録する必要はなく、過去の通信処理に関する差分の積算値を同期待ち時間として記録すれば足りる。したがって、実行時間が長い並列アプリケーションであっても主記憶領域を圧迫することはない。この場合、演算処理中に、ソフトウェア又はハードウェアの非同期通信インタフェースを利用して、各プロセスの通信処理の開始時刻を送受信する方法が考えられる。
【００３４】
ソフトウェアの非同期通信インタフェースを利用する方法では、ＭＰＩのノンブロッキング通信インタフェース（ＭＰＩ＿Ｉｓｅｎｄ関数、ＭＰＩ＿Ｉｒｅｃｖ関数、ＭＰＩ＿Ｗａｉｔ関数等）により、プロセス間で開始時刻のデータを送受信することができる。しかし、最大値の計算はCentral Processing Unit（ＣＰＵ）によるソフトウェア処理のため、ＣＰＵ時間を消費することで並列アプリケーションの挙動が変わる可能性がある。
【００３５】
ハードウェアの非同期通信インタフェースを利用する方法では、各プロセスがネットワークインタフェースに実装されたネットワークリダクション機構に開始時刻のデータを転送し、最大値演算を指示することができる。ネットワークリダクション機構とは、通信ネットワークで接続された各ノードの各プロセスからデータを受信し、すべてのデータを対象として単一の演算を行った後、演算結果を各ノードで保持するためのハードウェア機構を指す。ネットワークリダクション機構による演算としては、例えば、データの総和、最大値、最小値等を求める演算が挙げられる。
【００３６】
例えば、各プロセスが、ある通信処理の完了時にその通信処理の開始時刻をネットワークリダクション機構に転送して最大値演算を指示した後、次の通信処理の開始時にネットワークリダクション機構から最大値を読み出すことができる。これにより、各プロセスの演算処理中にネットワークリダクション機構が最大値を計算することができる。
【００３７】
図３は、図１の並列アプリケーションにおいて、ネットワークリダクション機構３０１が最大値を計算する例を示している。この場合、ネットワークリダクション機構３０１は、２回目の演算処理中に、１回目の通信処理の開始時刻の最大値３０を計算する。そして、プロセスＰ０、プロセスＰ１、及びプロセスＰ２は、２回目の通信処理の開始時に、最大値３０と１回目の通信処理の開始時刻２０、１０、及び３０との差分１０、２０、及び０をそれぞれ求める。
【００３８】
ここで、ある通信処理と次の通信処理との間の演算処理時間が非常に短い場合、稀にではあるが、ネットワークリダクション機構による最大値演算が完了しない可能性がある。ネットワークリダクション機構が同時に単一の最大値演算しか実行できない場合、各プロセスは、先行する最大値演算が完了するまで後続の最大値演算を指示できないため、並列アプリケーションの挙動が変わってしまう。
【００３９】
ネットワークリダクション機構を利用する場合に、並列アプリケーションの挙動が変わることを防ぐ方法はいくつか考えられる。例えば、先行する最大値演算が完了するまで、ネットワークリダクション機構が後続の最大値演算の指示をスキップする方法が挙げられる。しかし、ネットワークリダクション機構による演算がプロセス間で同一時刻に完了するとは限らないため、プロセスごとにスキップした回数が異なる状況が発生し得る。このような状況で後続の最大値演算を行うと、１つの通信処理の開始時刻の最大値の代わりに、複数の異なる通信処理の開始時刻の最大値が計算されてしまう。
【００４０】
他の方法としては、ネットワークインタフェースに複数のネットワークリダクション機構を実装して、それらのネットワークリダクション機構を順番に使用する方法が挙げられる。しかし、ハードウェアの増加が非常に大きくなる。ネットワークリダクション機構による最大値演算が完了しないことは稀に発生する問題であるため、その解決のために大きなハードウェアコストをかけるのは現実的ではない。
【００４１】
なお、かかる問題は、並列アプリケーションにおいてプロセス間通信を開始した時刻の最大値を計算する場合に限らず、プロセス間通信を開始した時刻を用いた他の演算を行う場合においても生ずるものである。
【００４２】
図４は、実施形態の通信制御装置の構成例を示している。図４の通信制御装置４０１は、並列計算機システムの各ノードに対応する情報処理装置（コンピュータ）内に設けられ、演算部４１１を含む。
【００４３】
情報処理装置内の演算処理装置は、プログラムを実行し、プログラムに含まれる複数のプロセスのうち第１のプロセスが第１のプロセス間通信を開始した第１の開始時刻に対して第１のシーケンス情報を付与する。そして、第１の開始時刻と第１のシーケンス情報とを情報処理装置内の主記憶装置に書き込む。
【００４４】
複数のプロセスのうち第２のプロセスが第２のプロセス間通信を開始した第２の開始時刻に付与された第２のシーケンス情報の方が第１のシーケンス情報よりも新しい場合、通信制御装置４０１内の演算部４１１は、第１の開始時刻を用いた演算を行わない。一方、第２のシーケンス情報が第１のシーケンス情報に対応する場合、演算部４１１は、第１の開始時刻と第２の開始時刻とを用いた演算を行って演算結果を出力する。
【００４５】
シーケンス情報は、各プロセスが行う通信処理の順序を示す情報であり、複数のプロセスの間で、同じ順序の通信処理に対して同じシーケンス情報が付与される。例えば、第２のプロセスが行う１回目の通信処理に付与されるシーケンス情報は、第１のプロセスが行う１回目の通信処理に付与されるシーケンス情報と同じである。また、第２のプロセスが行う２回目の通信処理に付与されるシーケンス情報は、第１のプロセスが行う２回目の通信処理に付与されるシーケンス情報と同じである。
【００４６】
第１及び第２のプロセスの間で、それぞれの開始時刻に付与されたシーケンス情報を比較することで、２つの開始時刻が同じ順序の通信処理の開始時刻であるか否かを判定することができる。
【００４７】
そして、演算部４１１は、第２の開始時刻に付与された第２のシーケンス情報の方が第１の開始時刻に付与された第１のシーケンス情報よりも新しい場合、第１の開始時刻を用いた演算を行わない。このため、第１のプロセスは、古い開始時刻を用いた演算の完了を待つことなく、最新の開始時刻を用いた演算を演算部４１１に対して次々に指示することができる。したがって、並列アプリケーションの実行中に、並列アプリケーションの挙動を変えることなく、プロセス間通信の開始時刻を用いた演算を行うことができる。
【００４８】
図５は、実施形態の並列計算機システムの構成例を示している。図５の並列計算機システム５００は、ノード５０１−１〜ノード５０１−ｎのｎ個（ｎは１以上の整数）の計算ノードとディスクノード５０２とを含む。ノード５０１−１〜ノード５０１−ｎとディスクノード５０２は、通信ネットワーク５０３により互いに接続されている。
【００４９】
図６は、図５のノード５０１−ｉ（ｉ＝１〜ｎ）に対応する情報処理装置の構成例を示している。図６のノード５０１−ｉは、ＣＰＵ６０１、メモリ６０２、媒体駆動装置６０３、及び通信制御装置４０１を含む。ＣＰＵ６０１、メモリ６０２、媒体駆動装置６０３、及び通信制御装置４０１は、バス６０４により互いに接続されている。
【００５０】
メモリ６０２は主記憶装置に対応する。メモリ６４０２は、例えば、Read Only Memory（ＲＯＭ）、Random Access Memory（ＲＡＭ）等の半導体メモリであり、並列アプリケーションプログラム及びその処理に用いられるデータを記憶する。
【００５１】
ＣＰＵ６０１は演算処理装置（プロセッサ）に対応し、メモリコントローラ及びネットワークインタフェースコントローラを含むことができる。ＣＰＵ６０１は、例えば、メモリ６０２を利用して並列アプリケーションプログラムを実行する。ＣＰＵ６０１は、オペレーティングシステム（ＯＳ）及びネットワークインタフェースドライバ等のプログラムも実行することができる。
【００５２】
媒体駆動装置６０３は、可搬型記録媒体６０５を駆動し、その記録内容にアクセスする。可搬型記録媒体６０５は、メモリデバイス、フレキシブルディスク、光ディスク、光磁気ディスク等である。この可搬型記録媒体６０５は、Compact Disk Read Only Memory（ＣＤ−ＲＯＭ）、Digital Versatile Disk（ＤＶＤ）、Universal Serial Bus（ＵＳＢ）メモリ等であってもよい。ユーザ又はオペレータは、この可搬型記録媒体６０５に並列アプリケーションプログラム及びデータを格納しておき、それらをメモリ６０２にロードして使用することができる。
【００５３】
通信制御装置４０１は、図５の通信ネットワーク５０３に接続され、他のノードと通信するネットワークインタフェースである。ノード５０１−ｉは、並列アプリケーションプログラム及びデータを、並列計算機システムの外部の装置から通信制御装置４０１を介して受け取り、それらをメモリ６０２にロードして使用することができる。
【００５４】
なお、ノード５０１−ｉが図６のすべての構成要素を含む必要はなく、用途や条件に応じて一部の構成要素を省略することも可能である。例えば、可搬型記録媒体６０５を使用しない場合は、媒体駆動装置６０３を省略してもよい。
【００５５】
図５のディスクノード５０２は、例えば、図６のノード５０１−ｉの構成にディスク装置を追加した構成を有する。ディスク装置は、例えば、磁気ディスク装置、光ディスク装置、光磁気ディスク装置等であり、ハードディスクドライブであってもよい。ディスク装置は、並列アプリケーションプログラムの処理に用いられるデータを格納することができる。
【００５６】
ノード５０１−１〜ノード５０１−ｎは、例えば、ディスクノード５０２に格納されたデータを用いて並列アプリケーションを実行する。このとき、各ノード内には１つ以上のプロセスが生成され、ノード５０１−１〜ノード５０１−ｎ内の複数のプロセスは、ＭＰＩにより並列化されて、すべてのプロセスを対象とする集団通信を繰り返す。
【００５７】
なお、ノード５０１−１〜ノード５０１−ｎの各々にディスク装置が設けられている場合は、ディスクノード５０２を省略してもよい。
【００５８】
図７は、図６の通信制御装置４０１内の演算部４１１の構成例を示している。図７の演算部４１１は、ＣＰＵ７０１、メモリ７０２、インタフェース７０３、及びインタフェース７０４を含む。ＣＰＵ７０１、メモリ７０２、インタフェース７０３、及びインタフェース７０４は、バス７０５により互いに接続されている。
【００５９】
ＣＰＵ７０１は演算処理装置（プロセッサ）に対応し、メモリ７０２は主記憶装置に対応する。メモリ７０２は、例えば、ＲＯＭ、ＲＡＭ等の半導体メモリであり、制御プログラム及びデータを記憶する。メモリ７０２が記憶するデータには、図６のＣＰＵ６０１から転送されたデータ、他のノードから受信したデータ等が含まれる。ＣＰＵ７０１は、例えば、メモリ７０２を利用して制御プログラムを実行することで、ネットワークリダクション機構の演算を行って、演算結果をメモリ７０２に書き込む。
【００６０】
ユーザ又はオペレータは、図６の可搬型記録媒体６０５に制御プログラム及びデータを格納しておき、それらをメモリ７０２にロードして使用することができる。このように、制御プログラム及びデータを格納するコンピュータ読み取り可能な記録媒体は、メモリ７０２又は可搬型記録媒体６０５のような、物理的な（非一時的な）記録媒体である。
【００６１】
インタフェース７０３は、図６のバス６０４に接続されてＣＰＵ６０１と通信し、インタフェース７０４は、図５の通信ネットワーク５０３に接続されて他のノードと通信する。インタフェース７０４を介して、ネットワークリダクション機構の部分的な演算結果をノード間で送受信することで、演算が効率化される。演算部４１１は、制御プログラム及びデータを、並列計算機システムの外部の装置からインタフェース７０３又はインタフェース７０４を介して受け取り、それらをメモリ７０２にロードして使用することもできる。
【００６２】
なお、演算部４１１の構成は図７の構成には限られず、一部又は全部の処理を布線論理で実装することも可能である。
【００６３】
図８は、ノード５０１−１において行われる、プロセス間通信の開始時刻を用いた演算処理の例を示すフローチャートである。この例では、第１のプロセスは、並列アプリケーションの複数のプロセスのうち、ノード５０１−１内で生成されるプロセスである。第２のプロセスは、並列アプリケーションの複数のプロセスのうち、ノード５０１−１内で生成されるプロセス、又はノード５０１−２〜ノード５０１−ｎのいずれかで生成されるプロセスである。
【００６４】
ノード５０１−１内のＣＰＵ６０１は、第１のプロセスが第１のプロセス間通信を開始した第１の開始時刻に対して第１のシーケンス情報を付与する。そして、そのＣＰＵ６０１は、第１の開始時刻と第１のシーケンス情報とをノード５０１−１内のメモリ６０２に書き込み、第１の開始時刻と第１のシーケンス情報とを演算部４１１内のメモリ７０２へ転送する。ノード５０１−１内の通信制御装置４０１は、第１の開始時刻と第１のシーケンス情報とをノード５０１−２〜ノード５０１−ｎへ送信する。
【００６５】
第２のプロセスがノード５０１−１内で生成される場合、ノード５０１−１内のＣＰＵ６０１は、第２のプロセスが第２のプロセス間通信を開始した第２の開始時刻に対して第２のシーケンス情報を付与する。そして、そのＣＰＵ６０１は、第２の開始時刻と第２のシーケンス情報とをノード５０１−１内のメモリ６０２に書き込み、第２の開始時刻と第２のシーケンス情報とを演算部４１１内のメモリ７０２へ転送する。ノード５０１−１内の通信制御装置４０１は、第２の開始時刻と第２のシーケンス情報とをノード５０１−２〜ノード５０１−ｎへ送信する。
【００６６】
第２のプロセスがノード５０１−２内で生成される場合、ノード５０１−２内のＣＰＵ６０１は、第２のプロセスが第２のプロセス間通信を開始した第２の開始時刻に対して第２のシーケンス情報を付与する。そして、そのＣＰＵ６０１は、第２の開始時刻と第２のシーケンス情報とをノード５０１−２内のメモリ６０２に書き込み、第２の開始時刻と第２のシーケンス情報とを演算部４１１内のメモリ７０２へ転送する。ノード５０１−２内の通信制御装置４０１は、第２の開始時刻と第２のシーケンス情報とをノード５０１−１及びノード５０１−３〜ノード５０１−ｎへ送信する。
【００６７】
ノード５０１−３〜ノード５０１−ｎの各ＣＰＵ６０１も、同様にして、各プロセスがプロセス間通信を開始した開始時刻に対してシーケンス情報を付与する。そして、そのＣＰＵ６０１は、開始時刻とシーケンス情報とをメモリ６０２に書き込み、開始時刻とシーケンス情報とを演算部４１１内のメモリ７０２へ転送する。ノード５０１−３〜ノード５０１−ｎの通信制御装置４０１は、開始時刻とシーケンス情報とを他のノードへ送信する。
【００６８】
ノード５０１−１において、演算部４１１内のＣＰＵ７０１は、第２の開始時刻に付与された第２のシーケンス情報の方が第１のシーケンス情報よりも新しいか否かをチェックする（ステップ８０１）。
【００６９】
第２のシーケンス情報の方が第１のシーケンス情報よりも新しい場合（ステップ８０１，ＹＥＳ）、ＣＰＵ７０１は、第１の開始時刻を用いた演算を行わない。一方、ステップ８０１のチェック結果がＮＯの場合、ＣＰＵ７０１は、第２のシーケンス情報が第１のシーケンス情報に対応するか否かをチェックする（ステップ８０２）。
【００７０】
第２のシーケンス情報が第１のシーケンス情報に対応する場合（ステップ８０２，ＹＥＳ）、ＣＰＵ７０１は、少なくとも第１の開始時刻と第２の開始時刻とを用いた演算を行って、演算結果をメモリ７０２に書き込む（ステップ８０３）。
【００７１】
一方、ステップ８０２のチェック結果がＮＯの場合、ＣＰＵ７０１は、第２の開始時刻を用いた演算を行わず、第２のプロセスが第３のプロセス間通信を開始した第３の開始時刻と第３のシーケンス情報とを受信するまで待機する（ステップ８０４）。そして、第３のシーケンス情報が第１のシーケンス情報に対応する場合、ＣＰＵ７０１は、少なくとも第１の開始時刻と第３の開始時刻とを用いた演算を行って、演算結果をメモリ７０２に書き込む。
【００７２】
ノード５０１−２〜ノード５０１−ｎの各ノードの演算部４１１も、ノード５０１−１の演算部４１１と同様の演算処理を行うことができる。
【００７３】
図９は、図５のノード５０１−１〜ノード５０１−ｎの各ノード内で１つのプロセスが動作している場合に行われる、図８の演算処理の具体例を示すフローチャートである。
【００７４】
シーケンス情報としては、例えば、昇順の非負の整数であるシーケンス番号が用いられる。シーケンス番号は、ネットワークインタフェースドライバにより管理され、並列アプリケーションの開始時に０にリセットされる。各ノード５０１−ｉ（ｉ＝１〜ｎ）内のメモリ６０２は、プロセスがプロセス間通信を開始した開始時刻Ｔ（ｉ）と、そのプロセスのシーケンス番号Ｓ（ｉ）とを記憶する。
【００７５】
各ノード５０１−ｉ内のＣＰＵ６０１は、並列アプリケーションを実行することでプロセスを動作させ、ネットワークインタフェースドライバのプログラムを実行することでネットワークインタフェースドライバを動作させる。
【００７６】
ノード５０１−ｉ内のプロセスがプロセス間通信を開始したとき、そのプロセスは、ネットワークインタフェースドライバに対して演算処理を指示する（ステップ９０１）。次に、ＣＰＵ６０１は、ネットワークインタフェースドライバとして動作し、開始時刻Ｔ（ｉ）とシーケンス番号Ｓ（ｉ）とをメモリ６０２から読み出す（ステップ９０２）。次に、ＣＰＵ６０１は、読み出した開始時刻Ｔ（ｉ）とシーケンス番号Ｓ（ｉ）とを演算部４１１内のメモリ７０２に書き込み、演算部４１１内のＣＰＵ７０１に対して演算処理を指示する。そして、ＣＰＵ６０１は、メモリ６０２内のシーケンス番号Ｓ（ｉ）を１だけインクリメントする。
【００７７】
次に、ＣＰＵ７０１は、メモリ７０２に書き込まれた開始時刻Ｔ（ｉ）とシーケンス番号Ｓ（ｉ）とを他のノード５０１−ｊ（１≦ｊ≦ｎ，ｊ≠ｉ）へ送信する（ステップ９０３）。そして、ＣＰＵ７０１は、並列アプリケーションの全プロセスの開始時刻とシーケンス番号とがメモリ７０２に書き込まれているか否かをチェックする（ステップ９０４）。
【００７８】
いずれかのプロセスの開始時刻とシーケンス番号とが書き込まれていない場合（ステップ９０４，ＮＯ）、ＣＰＵ７０１は、他のノードから開始時刻とシーケンス番号とを受信したか否かをチェックする（ステップ９０８）。
【００７９】
他のノードから開始時刻とシーケンス番号とを受信していない場合（ステップ９０８，ＮＯ）、ＣＰＵ７０１は、ステップ９０４以降の処理を繰り返す。一方、他のノード５０１−ｋ（１≦ｋ≦ｎ，ｋ≠ｉ）から開始時刻Ｔ（ｋ）とシーケンス番号Ｓ（ｋ）とを受信した場合（ステップ９０８，ＹＥＳ）、ＣＰＵ７０１は、受信したシーケンス番号Ｓ（ｋ）とシーケンス番号Ｓ（ｉ）とを比較する（ステップ９０９）。
【００８０】
受信したシーケンス番号Ｓ（ｋ）がシーケンス番号Ｓ（ｉ）より小さい場合（ステップ９０９，ＮＯ）、ＣＰＵ７０１は、ステップ９０４以降の処理を繰り返す。一方、受信したシーケンス番号Ｓ（ｋ）がシーケンス番号Ｓ（ｉ）以上である場合（ステップ９０９，ＹＥＳ）、ＣＰＵ７０１は、受信した開始時刻Ｔ（ｋ）とシーケンス番号Ｓ（ｋ）とをメモリ７０２に書き込む（ステップ９１０）。そして、ＣＰＵ７０１は、再び、受信したシーケンス番号Ｓ（ｋ）とシーケンス番号Ｓ（ｉ）とを比較する（ステップ９１１）。
【００８１】
受信したシーケンス番号Ｓ（ｋ）がシーケンス番号Ｓ（ｉ）と一致する場合（ステップ９１１，ＮＯ）、ＣＰＵ７０１は、ステップ９０４以降の処理を繰り返す。こうして、全プロセスの開始時刻とシーケンス番号とがメモリ７０２に書き込まれると（ステップ９０４，ＹＥＳ）、ＣＰＵ７０１は、全プロセスの開始時刻の最大値を求め、メモリ７０２に書き込む（ステップ９０５）。
【００８２】
次に、ＣＰＵ７０１は、ＣＰＵ６０１に割り込み（ステップ９０６）、ＣＰＵ６０１は、ネットワークインタフェースドライバを動作させる。そして、ＣＰＵ６０１は、メモリ７０２から開始時刻の最大値を読み出してメモリ６０２に書き込み、メモリ７０２を初期化する（ステップ９０７）。これにより、メモリ７０２内の全プロセスの開始時刻とシーケンス番号とが消去される。
【００８３】
一方、受信したシーケンス番号Ｓ（ｋ）がシーケンス番号Ｓ（ｉ）より大きい場合（ステップ９１１，ＹＥＳ）、ＣＰＵ７０１は、ＣＰＵ６０１に割り込み、指示された演算処理を中止する旨を通知する（ステップ９１２）。この通知により、ＣＰＵ６０１は、メモリ７０２を初期化することなく、プロセスがネットワークインタフェースドライバに対して指示した演算処理を中止する。その後、プロセスがネットワークインタフェースドライバに対して次の演算処理を指示したとき、ＣＰＵ６０１は、改めてステップ９０１以降の処理を開始する。
【００８４】
図１０は、図５のノード５０１−１〜ノード５０１−ｎの各ノード内で複数のプロセスが動作している場合に行われる、図８の演算処理の具体例を示すフローチャートである。
【００８５】
シーケンス情報としては、例えば、昇順の非負の整数であるシーケンス番号が用いられる。シーケンス番号は、ネットワークインタフェースドライバにより管理され、並列アプリケーションの開始時に０にリセットされる。ノード５０１−１〜ノード５０１−ｎで動作するプロセスの総数をｐとし、ｍ番目のプロセスの識別情報をＰ（ｍ）とする（ｍ＝１〜ｐ）。各ノード５０１−ｉ（ｉ＝１〜ｎ）内のメモリ６０２は、ノード５０１−ｉ内の各プロセスがプロセス間通信を開始した開始時刻Ｔ（ｍ）と、そのプロセスのシーケンス番号Ｓ（ｍ）とを記憶する。
【００８６】
ノード５０１−ｉ内の複数のプロセスのうちプロセスＰ（ｒ）がプロセス間通信を開始したとき、プロセスＰ（ｒ）は、ネットワークインタフェースドライバに対して演算処理を指示する（ステップ１００１）。次に、ＣＰＵ６０１は、ネットワークインタフェースドライバとして動作し、プロセスＰ（ｒ）の開始時刻Ｔ（ｒ）とシーケンス番号Ｓ（ｒ）とをメモリ６０２から読み出す（ステップ１００２）。次に、ＣＰＵ６０１は、読み出した開始時刻Ｔ（ｒ）とシーケンス番号Ｓ（ｒ）とを演算部４１１内のメモリ７０２に書き込み、演算部４１１内のＣＰＵ７０１に対して演算処理を指示する。そして、ＣＰＵ６０１は、メモリ６０２内のシーケンス番号Ｓ（ｒ）を１だけインクリメントする。
【００８７】
次に、ＣＰＵ７０１は、メモリ７０２に書き込まれた開始時刻Ｔ（ｒ）とシーケンス番号Ｓ（ｒ）とを他のノード５０１−ｊ（１≦ｊ≦ｎ，ｊ≠ｉ）へ送信する（ステップ１００３）。
【００８８】
その後、ノード５０１−ｉ内の別のプロセスＰ（ｘ）がプロセス間通信を開始したとき、プロセスＰ（ｘ）は、ステップ１００１と同様に、ネットワークインタフェースドライバに対して演算処理を指示する。また、ＣＰＵ６０１は、ステップ１００２と同様に、プロセスＰ（ｘ）の開始時刻Ｔ（ｘ）とシーケンス番号Ｓ（ｘ）とをメモリ７０２に書き込み、メモリ６０２内のシーケンス番号Ｓ（ｘ）を１だけインクリメントする。そして、ＣＰＵ７０１は、ステップ１００３と同様に、メモリ７０２に書き込まれた開始時刻Ｔ（ｘ）とシーケンス番号Ｓ（ｘ）とを他のノード５０１−ｊ（１≦ｊ≦ｎ，ｊ≠ｉ）へ送信する。
【００８９】
次に、ＣＰＵ７０１は、並列アプリケーションの全プロセスの開始時刻とシーケンス番号とがメモリ７０２に書き込まれているか否かをチェックする（ステップ１００４）。いずれかのプロセスの開始時刻とシーケンス番号とが書き込まれていない場合（ステップ１００４，ＮＯ）、ＣＰＵ７０１は、他のノードから開始時刻とシーケンス番号とを受信したか否かをチェックする（ステップ１００８）。
【００９０】
他のノードから開始時刻とシーケンス番号とを受信していない場合（ステップ１００８，ＮＯ）、ＣＰＵ７０１は、ステップ１００４以降の処理を繰り返す。
【００９１】
この間に、ノード５０１−ｉ内の別のプロセスＰ（ｙ）がプロセス間通信を開始したとき、プロセスＰ（ｙ）は、ステップ１００１と同様に、ネットワークインタフェースドライバに対して演算処理を指示する。また、ＣＰＵ６０１は、ステップ１００２と同様に、プロセスＰ（ｙ）の開始時刻Ｔ（ｙ）とシーケンス番号Ｓ（ｙ）とをメモリ７０２に書き込み、メモリ６０２内のシーケンス番号Ｓ（ｙ）を１だけインクリメントする。そして、ＣＰＵ７０１は、ステップ１００３と同様に、メモリ７０２に書き込まれた開始時刻Ｔ（ｙ）とシーケンス番号Ｓ（ｙ）とを他のノード５０１−ｊ（１≦ｊ≦ｎ，ｊ≠ｉ）へ送信する。
【００９２】
一方、他のノード５０１−ｋ（１≦ｋ≦ｎ，ｋ≠ｉ）から開始時刻Ｔ（ｑ）とシーケンス番号Ｓ（ｑ）とを受信した場合（ステップ１００８，ＹＥＳ）、ＣＰＵ７０１は、ステップ１００９の処理を行う。
【００９３】
ステップ１００９において、ＣＰＵ７０１は、メモリ７０２に書き込まれたシーケンス番号のうち、ノード５０１−ｉ内の１つ以上のプロセスに対応するシーケンス番号の最大値を求める。そして、ＣＰＵ７０１は、受信したシーケンス番号Ｓ（ｑ）とシーケンス番号の最大値とを比較する。受信したシーケンス番号Ｓ（ｑ）がシーケンス番号の最大値より小さい場合（ステップ１００９，ＮＯ）、ＣＰＵ７０１は、ステップ１００４以降の処理を繰り返す。
【００９４】
一方、受信したシーケンス番号Ｓ（ｑ）がシーケンス番号の最大値以上である場合（ステップ１００９，ＹＥＳ）、ＣＰＵ７０１は、受信した開始時刻Ｔ（ｑ）とシーケンス番号Ｓ（ｑ）とをメモリ７０２に書き込む（ステップ１０１０）。そして、ＣＰＵ７０１は、再び、受信したシーケンス番号Ｓ（ｑ）とシーケンス番号の最大値とを比較する（ステップ１０１１）。
【００９５】
受信したシーケンス番号Ｓ（ｑ）がシーケンス番号の最大値と一致する場合（ステップ１０１１，ＮＯ）、ＣＰＵ７０１は、ステップ１００４以降の処理を繰り返す。ノード５０１−ｉ内の全プロセスの開始時刻とシーケンス番号とがメモリ７０２に書き込まれ、それらのシーケンス番号がシーケンス番号Ｓ（ｒ）と一致すると、ステップ１００９で求められるシーケンス番号の最大値はＳ（ｒ）となる。
【００９６】
並列アプリケーションの全プロセスの開始時刻とシーケンス番号とがメモリ７０２に書き込まれると（ステップ１００４，ＹＥＳ）、ＣＰＵ７０１は、全プロセスの開始時刻の最大値を求め、メモリ７０２に書き込む（ステップ１００５）。
【００９７】
次に、ＣＰＵ７０１は、ＣＰＵ６０１に割り込み（ステップ１００６）、ＣＰＵ６０１は、ネットワークインタフェースドライバを動作させる。そして、ＣＰＵ６０１は、メモリ７０２から開始時刻の最大値を読み出してメモリ６０２に書き込み、メモリ７０２を初期化する（ステップ１００７）。これにより、メモリ７０２内の全プロセスの開始時刻とシーケンス番号とが消去される。
【００９８】
一方、受信したシーケンス番号Ｓ（ｑ）がシーケンス番号の最大値より大きい場合（ステップ１０１１，ＹＥＳ）、ＣＰＵ７０１は、ＣＰＵ６０１に割り込み、指示された演算処理を中止する旨を通知する（ステップ１０１２）。この通知により、ＣＰＵ６０１は、メモリ７０２を初期化することなく、プロセスＰ（ｒ）がネットワークインタフェースドライバに対して指示した演算処理を中止する。その後、プロセスＰ（ｒ）又は別のプロセスがネットワークインタフェースドライバに対して次の演算処理を指示したとき、ＣＰＵ６０１は、改めてステップ１００１以降の処理を開始する。
【００９９】
図９又は図１０の演算処理によれば、演算部４１１は、演算処理を指示されても、最新のシーケンス番号を持つ全プロセスの開始時刻がメモリ７０２に書き込まれるまで、開始時刻を用いた演算を行わない。そして、ノード５０１−ｉ内のプロセスのシーケンス番号がインクリメントされて、受信したシーケンス番号と同じになったとき、そのシーケンス番号を持つ全プロセスの開始時刻を用いた演算処理が行われる。
【０１００】
このように、常に最新のシーケンス番号を持つ開始時刻を対象として演算処理が行われ、各プロセスは、古い開始時刻を用いた演算処理の完了を待つことなく、最新の開始時刻を用いた演算処理を演算部４１１に対して次々に指示することができる。したがって、並列アプリケーションの実行中に、並列アプリケーションの挙動を変えることなく、プロセス間通信の開始時刻を用いた演算を行うことができる。
【０１０１】
また、通信制御装置４０１内に１つの演算部４１１を設ければよく、複数のネットワークリダクション機構を設ける必要がないため、ハードウェアの増加を抑えることができる。特に、大規模並列計算機システムにおいて、図９又は図１０の演算処理による大きな効果が期待できる。
【０１０２】
図４及び図７の通信制御装置４０１、図５の並列計算機システム５００、及び図６のノード５０１−ｉの構成は一例に過ぎず、並列計算機システムの用途や条件に応じて一部の構成要素を省略又は変更してもよい。
【０１０３】
図８〜図１０のフローチャートは一例に過ぎず、並列計算機システムの構成や条件に応じて一部の処理を省略又は変更してもよい。例えば、図９又は図１０の演算処理において、シーケンス番号以外の通信処理の順序を示す情報をシーケンス情報として用いることもできる。また、図９のステップ９０５又は図１０のステップ１００５において、ＣＰＵ７０１は、開始時刻の最大値を求める代わりに、開始時刻の総和、開始時刻の最小値等の他の数値を求めることもできる。
【０１０４】
開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができるであろう。
【０１０５】
図４乃至図１０を参照しながら説明した実施形態に関し、さらに以下の付記を開示する。
（付記１）
演算処理装置と主記憶装置とに接続する通信制御装置であって、
前記演算処理装置が実行するプログラムに含まれる複数のプロセスのうち第１のプロセスが第１のプロセス間通信を開始した第１の開始時刻に対して前記演算処理装置が付与して、前記主記憶装置に書き込んだ第１のシーケンス情報よりも、前記複数のプロセスのうち第２のプロセスが第２のプロセス間通信を開始した第２の開始時刻に付与された第２のシーケンス情報の方が新しい場合、前記第１の開始時刻を用いた演算を行わず、前記第２のシーケンス情報が前記第１のシーケンス情報に対応する場合、前記第１の開始時刻と前記第２の開始時刻とを用いた演算を行って演算結果を出力する演算部、
を有することを特徴とする通信制御装置。
（付記２）
前記第２のシーケンス情報よりも前記第１のシーケンス情報の方が新しく、前記第２のプロセスが第３のプロセス間通信を開始した第３の開始時刻に付与された第３のシーケンス情報が前記第１のシーケンス情報に対応する場合、前記演算部は、前記第２の開始時刻を用いた演算を行わず、前記第１の開始時刻と前記第３の開始時刻とを用いた演算を行って演算結果を出力することを特徴とする付記１記載の通信制御装置。
（付記３）
前記演算処理装置は、前記第１のプロセスを実行し、前記通信制御装置を介して接続された情報処理装置が有する演算処理装置は、前記第２のプロセスを実行することを特徴とする付記１又は２記載の通信制御装置。
（付記４）
前記第１のシーケンス情報は、前記複数のプロセスのうち、前記第１のプロセスを実行する前記演算処理装置が実行する第４のプロセスが、第４のプロセス間通信を開始した第４の開始時刻に付与された第４のシーケンス情報に対応するか、又は前記第４のシーケンス情報よりも新しいことを特徴とする付記３記載の通信制御装置。
（付記５）
前記演算処理装置は、前記第１のプロセス及び前記第２のプロセスを実行することを特徴とする付記１又は２記載の通信制御装置。
（付記６）
プログラムを実行し、前記プログラムに含まれる複数のプロセスのうち第１のプロセスが第１のプロセス間通信を開始した第１の開始時刻に対して第１のシーケンス情報を付与する演算処理装置と、
前記第１の開始時刻と前記第１のシーケンス情報とを記憶する主記憶装置と、
前記複数のプロセスのうち第２のプロセスが第２のプロセス間通信を開始した第２の開始時刻に付与された第２のシーケンス情報の方が前記第１のシーケンス情報よりも新しい場合、前記第１の開始時刻を用いた演算を行わず、前記第２のシーケンス情報が前記第１のシーケンス情報に対応する場合、前記第１の開始時刻と前記第２の開始時刻とを用いた演算を行って演算結果を出力する通信制御装置と、
を有することを特徴とする情報処理装置。
（付記７）
複数の情報処理装置を有する並列計算機システムであって、
前記複数の情報処理装置のうち少なくとも１つの情報処理装置は、
プログラムを実行し、前記プログラムに含まれる複数のプロセスのうち第１のプロセスが第１のプロセス間通信を開始した第１の開始時刻に対して第１のシーケンス情報を付与する演算処理装置と、
前記第１の開始時刻と前記第１のシーケンス情報とを記憶する主記憶装置と、
前記複数のプロセスのうち第２のプロセスが第２のプロセス間通信を開始した第２の開始時刻に付与された第２のシーケンス情報の方が前記第１のシーケンス情報よりも新しい場合、前記第１の開始時刻を用いた演算を行わず、前記第２のシーケンス情報が前記第１のシーケンス情報に対応する場合、前記第１の開始時刻と前記第２の開始時刻とを用いた演算を行って演算結果を出力する通信制御装置と、
を有することを特徴とする並列計算機システム。
（付記８）
演算処理装置と通信制御装置と主記憶装置とを有する情報処理装置の制御プログラムであって、
前記演算処理装置が実行するプログラムに含まれる複数のプロセスのうち第１のプロセスが第１のプロセス間通信を開始した第１の開始時刻に対して前記演算処理装置が付与して、前記主記憶装置に書き込んだ第１のシーケンス情報よりも、前記複数のプロセスのうち第２のプロセスが第２のプロセス間通信を開始した第２の開始時刻に付与された第２のシーケンス情報の方が新しい場合、前記第１の開始時刻を用いた演算を行わず、前記第２のシーケンス情報が前記第１のシーケンス情報に対応する場合、前記第１の開始時刻と前記第２の開始時刻とを用いた演算を行って演算結果を出力する、
処理を前記通信制御装置内の演算処理装置に実行させることを特徴とする制御プログラム。
（付記９）
複数の情報処理装置を有する並列計算機システムの制御方法であって、
前記複数の情報処理装置のうち少なくとも１つの情報処理装置が、
プログラムを実行し、
前記プログラムに含まれる複数のプロセスのうち第１のプロセスが第１のプロセス間通信を開始した第１の開始時刻に対して第１のシーケンス情報を付与し、
前記複数のプロセスのうち第２のプロセスが第２のプロセス間通信を開始した第２の開始時刻に付与された第２のシーケンス情報の方が前記第１のシーケンス情報よりも新しい場合、前記第１の開始時刻を用いた演算を行わず、前記第２のシーケンス情報が前記第１のシーケンス情報に対応する場合、前記第１の開始時刻と前記第２の開始時刻とを用いた演算を行って演算結果を出力する、
ことを特徴とする制御方法。
【符号の説明】
【０１０６】
１０１、１０２  矢印
３０１  ネットワークリダクション機構
４０１  通信制御装置
４１１  演算部
５００  並列計算機システム
５０１−１〜５０１−ｎ、５０１−ｉ  ノード
５０２  ディスクノード
５０３  通信ネットワーク
６０１、７０１  ＣＰＵ
６０２、７０２  メモリ
６０３  媒体駆動装置
６０４、７０５  バス
６０５  可搬型記録媒体
７０３、７０４  インタフェース
【図１】
2015106311.tif 000003
【図２】
2015106311.tif 000004
【図３】
2015106311.tif 000005
【図４】
2015106311.tif 000006
【図５】
2015106311.tif 000007
【図６】
2015106311.tif 000008
【図７】
2015106311.tif 000009
【図８】
2015106311.tif 000010
【図９】
2015106311.tif 000011
【図１０】
2015106311.tif 000012
【手続補正書】
【提出日】平成26年9月1日(2014.9.1)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００５０
【補正方法】変更
【補正の内容】
【００５０】
メモリ６０２は主記憶装置に対応する。メモリ６０２は、例えば、Read Only Memory（ＲＯＭ）、Random Access Memory（ＲＡＭ）等の半導体メモリであり、並列アプリケーションプログラム及びその処理に用いられるデータを記憶する。
【手続補正２】
【補正対象書類名】図面
【補正対象項目名】図９
【補正方法】変更
【補正の内容】
【図９】
2015106311.tif 000013
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】図１０
【補正方法】変更
【補正の内容】
【図１０】
2015106311.tif 000014