(57)【特許請求の範囲】
【請求項１】
並列計算機システムにおいて並列計算処理を行う複数の情報処理装置のうちの一の情報処理装置であって、
前記複数の情報処理装置のうち自情報処理装置以外の情報処理装置のそれぞれから取得した、ファイルサーバに次に読み込み又は書き込みを要求するデータのデータ長と、自情報処理装置が次に前記ファイルサーバに読み込み又は書き込みを要求するデータのデータ長と、前記複数の情報処理装置のそれぞれの位置情報とに基づき前記複数の情報処理装置の重心位置を算出する算出部と、
算出した前記重心位置に応じて前記複数の情報処理装置のうちからデータ中継を行う情報処理装置を決定する決定部と、
決定した前記データ中継を行う情報処理装置が自情報処理装置である場合、前記複数の情報処理装置のそれぞれが次に読み込み又は書き込みを要求するデータをまとめて前記ファイルサーバとの間で転送する転送部と、
を有する情報処理装置。
【請求項２】
前記転送部は、
決定した前記データ中継を行う情報処理装置が自情報処理装置でない場合、前記データ中継を行う情報処理装置から自情報処理装置が次に読み込み又は書き込みを要求したデータを取得する、
請求項１に記載の情報処理装置。
【請求項３】
複数の情報処理装置により並列計算処理を行う並列計算機システムであって、
前記複数の情報処理装置の各情報処理装置は、
前記複数の情報処理装置のうち自情報処理装置以外の情報処理装置のそれぞれから取得した、ファイルサーバに次に読み込み又は書き込みを要求するデータのデータ長と、自情報処理装置が次に前記ファイルサーバに読み込み又は書き込みを要求するデータのデータ長と、前記複数の情報処理装置のそれぞれの位置情報とに基づき前記複数の情報処理装置の重心位置を算出する算出部と、
算出した前記重心位置に応じて前記複数の情報処理装置のうちからデータ中継を行う情報処理装置を決定する決定部と、
決定した前記データ中継を行う情報処理装置が自情報処理装置である場合、前記複数の情報処理装置のそれぞれが次に読み込み又は書き込みを要求するデータをまとめて前記ファイルサーバとの間で転送する転送部と、を有する、
並列計算機システム。
【請求項４】
複数の情報処理装置により並列計算処理を行う並列計算機システムにおいてファイルサーバとの通信処理をコンピュータに実行させるファイルサーバ通信プログラムであって、
前記複数の情報処理装置のうち自情報処理装置以外の情報処理装置のそれぞれから取得した、ファイルサーバに次に読み込み又は書き込みを要求するデータのデータ長と、自情報処理装置が次に前記ファイルサーバに読み込み又は書き込みを要求するデータのデータ長と、前記複数の情報処理装置のそれぞれの位置情報とに基づき前記複数の情報処理装置の重心位置を算出し、
算出した前記重心位置に応じて前記複数の情報処理装置のうちからデータ中継を行う情報処理装置を決定し、
決定した前記データ中継を行う情報処理装置が自情報処理装置である場合、前記複数の情報処理装置のそれぞれが次に読み込み又は書き込みを要求するデータをまとめて前記ファイルサーバとの間で転送する、
ファイルサーバ通信プログラム。
【請求項５】
複数の情報処理装置により並列計算処理を行う並列計算機システムにおいてファイルサーバとの通信処理をコンピュータが実行するファイルサーバ通信方法であって、
前記複数の情報処理装置のうち自情報処理装置以外の情報処理装置のそれぞれから取得した、ファイルサーバに次に読み込み又は書き込みを要求するデータのデータ長と、自情報処理装置が次に前記ファイルサーバに読み込み又は書き込みを要求するデータのデータ長と、前記複数の情報処理装置のそれぞれの位置情報とに基づき前記複数の情報処理装置の重心位置を算出し、
算出した前記重心位置に応じて前記複数の情報処理装置のうちからデータ中継を行う情報処理装置を決定し、
決定した前記データ中継を行う情報処理装置が自情報処理装置である場合、前記複数の情報処理装置のそれぞれが次に読み込み又は書き込みを要求するデータをまとめて前記ファイルサーバとの間で転送する、
ファイルサーバ通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、並列計算機システム、ファイルサーバ通信プログラム及びファイルサーバ通信方法に関する。
【背景技術】
【０００２】
近年、複数のコンピュータ（以下、「計算ノード」ともいう。）を高速ネットワークなどで接続してクラスタを構築した、ＨＰＣ（High Performance Computing）システムの実現が図られている（例えば、特許文献１〜３参照）。このようなクラスタ型の並列計算機システムにて並列処理プログラムを実行する場合、並列プロセスを複数の計算ノードに分散して起動させる。並列プロセス間でデータ交換を行う場合、複数の計算ノード及びファイルサーバ間の通信の性能が、並列計算機システムに影響を及ぼす。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００９−２３８２５２号公報
【特許文献２】特開２０１１−１７５５７３号公報
【特許文献３】特開平６−７５９３０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、近年、並列計算機システムが扱うデータ量は増加の一途を辿っており、それに伴ってデータを蓄えるためのファイルサーバの台数や容量が増加している。また、計算ノード数が増大し、複数の計算ノード及びファイルサーバ間の通信回数が増加している。
【０００５】
よって、複数の計算ノードのそれぞれが個別にファイルサーバに対してデータの読み込みや書き込みを行うと、複数の計算ノード及びファイルサーバ間の通信回数の増大により、各計算ノードの処理の負荷の増大がボトルネックになり、複数の計算ノード及びファイルサーバ間におけるデータの転送処理が遅延する場合がある。
【０００６】
そこで、複数の計算ノードのうちの特定の計算ノードのみがファイルサーバと通信を行うことでファイルサーバとの間の通信回数を減らすことが考えられる。しかしながら、各計算ノード及びファイルサーバ間の転送データのデータ長にはバラツキがある。このため、データ量が大きいデータをファイルサーバへ転送する計算ノードから離れた計算ノードがファイルサーバと通信を行うと、並列計算機システムにおけるデータ転送の負荷が大きくなるという課題がある。
【０００７】
そこで、一側面では、本発明は、並列計算機システムにおけるデータ転送の負荷を軽減することを目的とする。
【課題を解決するための手段】
【０００８】
一つの案では、並列計算機システムにおいて並列計算処理を行う複数の情報処理装置のうちの一の情報処理装置であって、前記複数の情報処理装置のうち自情報処理装置以外の情報処理装置のそれぞれから取得した、ファイルサーバに次に読み込み又は書き込みを要求するデータのデータ長と、自情報処理装置が次に前記ファイルサーバに読み込み又は書き込みを要求するデータのデータ長と、前記複数の情報処理装置のそれぞれの位置情報とに基づき前記複数の情報処理装置の重心位置を算出する算出部と、算出した前記重心位置に応じて前記複数の情報処理装置のうちからデータ中継を行う情報処理装置を決定する決定部と、決定した前記データ中継を行う情報処理装置が自情報処理装置である場合、前記複数の情報処理装置のそれぞれが次に読み込み又は書き込みを要求するデータをまとめて前記ファイルサーバとの間で転送する転送部と、を有する情報処理装置が提供される。
【発明の効果】
【０００９】
一側面によれば、並列計算機システムにおけるデータ転送の負荷を軽減することができる。
【図面の簡単な説明】
【００１０】
【図１】一実施形態にかかる並列計算システムにおける個別Ｉ／Ｏ要求を示す図。
【図２】一実施形態にかかる並列計算システムにおける一括Ｉ／Ｏ要求を示す図。
【図３】一実施形態にかかる計算ノードの構成の一例を示す図。
【図４】一実施形態にかかるジョブプロセス実行処理の一例を示すフローチャート。
【図５】一実施形態にかかる並列ｒｅａｄ処理の一例を示すフローチャート。
【図６】一実施形態にかかる重心算出と配布処理の一例を示すフローチャート。
【図７】一実施形態にかかるオフセット最小値計算と配布処理の一例を示すフローチャート。
【図８】一実施形態にかかるファイルのデータ構造とAll reduce通信で共有するリストの一例を示す図。
【図９】一実施形態にかかるオフセットとデータ長の最大値計算と配布処理の一例を示すフローチャート。
【図１０】一実施形態にかかる中継バッファ獲得処理の一例を示すフローチャート。
【図１１】一実施形態にかかる一括ｒｅａｄ処理の一例を示すフローチャート。
【図１２】一実施形態にかかる自ノードデータ受信処理の一例を示すフローチャート。
【図１３】一実施形態にかかるｒｅａｄ時の自ノードデータｃｏｐｙ処理の一例を示すフローチャート。
【図１４】一実施形態にかかる並列ｗｒｉｔｅ処理の一例を示すフローチャート。
【図１５】一実施形態にかかる自ノードデータ送信処理の一例を示すフローチャート。
【図１６】一実施形態にかかるｗｒｉｔｅ時の自ノードデータｃｏｐｙ処理の一例を示すフローチャート。
【図１７】一実施形態にかかる一括ｗｒｉｔｅ処理の一例を示すフローチャート。
【図１８】一実施形態にかかる計算ノードのハードウェア構成の一例を示す図。
【発明を実施するための形態】
【００１１】
以下、本発明の実施形態について添付の図面を参照しながら説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重複した説明を省く。
【００１２】
［並列計算システムの全体構成］
まず、本発明の一実施形態にかかる並列計算システム１の構成について、図１を参照しながら説明する。図１に示す本実施形態にかかる並列計算システム１は、計算ノード群１０、Ｉ／Ｏ（Input/Output）ノード２０及びファイルサーバ群３０を有する。
【００１３】
本実施形態にかかる並列計算システム１は、複数の計算ノードを高速ネットワークなどで接続してクラスタを構築し、ＨＰＣシステムの実現を図る。計算ノード群１０の計算ノード１１〜１９は、高速ネットワークの一例であるＴｏｆｕ（Torus fusion）ネットワークで接続され、クラスタを構築する。計算ノード群１０は、クラスタを構築するコンピュータ（情報処理装置）群の一例である。計算ノード群１０に含まれる計算ノードの数は、９台に限られず、例えば何万台の計算ノードが並列に接続されてもよい。
【００１４】
ジョブプロセススケジューラ９は、並列計算システム１に含まれる計算ノードのうちから選択した複数の計算ノードを計算ノード群１０として配置する。ジョブプロセススケジューラ９は、計算ノード群１０で所定のアプリケーションの並列計算処理プログラムを実行するために、並列プロセスを複数の計算ノード１１〜１９に分散して割当て（ジョブプロセスの割当て）、起動させる。計算ノード１１〜１９は、割り当てられたジョブプロセスの計算処理プログラムを実行する。これにより、計算ノード群１０にて所定のアプリケーションの並列計算処理が行われる。
【００１５】
Ｉ／Ｏノード２０は、Ｔｏｆｕネットワークで計算ノード群１０に接続され、高速ネットワークの一例であるＩＢ（InfiniBand）ネットワークでファイルサーバ群３０に接続されている。本実施形態では、ファイルサーバ群３０は、３台のファイルサーバ３１〜３３を有するが、ファイルサーバ−の台数はこれに限らない。ファイルサーバ群３０には、計算ノード１１〜１９等が使用するデータが格納されたファイルが保存されている。
【００１６】
Ｉ／Ｏノード２０は、計算ノード１１〜１９から、ファイルサーバ３１〜３３に読み込み（ｒｅａｄ）又は書き込み（Ｗｒｉｔｅ）を要求するＩ／Ｏ要求を受け付ける。Ｉ／Ｏノード２０は、ファイルサーバ３１〜３３のうち要求されたデータを保存している又は要求されたデータを保存するファイルサーバにアクセスする。Ｉ／Ｏノード２０は、ファイルサーバ３１〜３３に対する所定のデータの書き込みや読み込み、ファイルサーバ３１〜３３及び計算ノード１１〜１９間のデータ転送を行う。
【００１７】
ここで、計算ノード１１〜１９のＩ／Ｏ要求では、小さいデータの読み書きの要求が頻繁に発生する。よって、計算ノード１１〜１９のそれぞれが個別にデータの読み込みや書き込みを要求すると、計算ノード１１〜１９及びファイルサーバ間の通信回数が増える。これにより、計算ノード１１〜１９の負荷及びファイルサーバの負荷の増大がボトルネックになり、データの転送処理が遅延する場合がある。
【００１８】
また、計算ノード１１〜１９のそれぞれが個別に要求するデータの読み込み及び書き込みでは、小さいデータを一単位にデータの転送が行われるため、計算ノード１１〜１９及びファイルサーバ間にて小さなパケットで多数回通信することになる。データの通信時間は、（レイテンシ＋データ長）／バンド幅の理論値で求められる。よって、レイテンシの寄与による遅延が、使用したパケット数に比例する。よって、小さなパケットで多数回通信すると、実効バンド幅が低下し、データの転送処理が遅延する場合がある。
【００１９】
また、ファイルサーバ側でのメモリ領域が細分化されやすくなり、Ｉ／Ｏ要求に対してファイルサーバに記憶可能なメモリ領域が低下し、データ転送処理が遅延する場合がある。
【００２０】
そこで、本実施形態に係る並列計算機システム１では、各計算ノードがＩ／Ｏ要求したときのファイルサーバへのアクセスを、一の計算ノードが中継してまとめて行い、データの読み込み及び書き込みを一括して行う。これにより、Ｉ／Ｏノード２０及びファイルサーバの処理の負荷を軽減し、データ転送処理の遅延を回避する。
【００２１】
以下では、各計算ノードがＩ／Ｏ要求したときのファイルサーバへのアクセスを中継してまとめて行い、データの読み込み及び書き込みを一括して行う役割のノードを、「データ中継ノード」と呼ぶ。データ中継ノードが、各計算ノードのファイルサーバへのアクセス要求をまとめることで、ファイルサーバへの送受信回数を減らし、ファイルサーバの負荷を軽減することができる。
【００２２】
なお、データ中継ノードが、複数の計算ノード（自ノードを含む）から要求されるデータの読み込みや書き込みを一括して行う処理を、「一括Ｉ／Ｏ処理」ともいう。また、データ中継ノードが、複数の計算ノード（自ノードを含む）から要求されるデータを一括してファイルサーバから読み込む処理を、「一括ｒｅａｄ処理」ともいう。また、データ中継ノードが、複数の計算ノード（自ノードを含む）から要求されるデータを一括してファイルサーバへ書き込む処理を、「一括ｗｒｉｔｅ処理」ともいう。
【００２３】
［データ中継ノード］
データ中継ノードは、計算ノード１１〜１９のうちのいずれかの計算ノードであり、１１〜１９から選択される。図２では、第５の計算ノード１５がデータ中継ノードである。
【００２４】
データ中継ノードは、下記式（１）により算出される重心位置Ｇに基づき、計算ノード１１〜１９の位置とＩ／Ｏ要求（ファイルアクセス要求）の対象データのデータ長（データ量）とを考慮し、一括Ｉ／Ｏ処理が効率的に行える位置に配置される。
【００２５】
計算ノード１１〜１９がＩ／Ｏ要求を行うデータのデータ長のバラツキ及びデータ中継ノードとして機能する計算ノードの位置により、計算ノード１１〜１９からのデータの集約及び計算ノード１１〜１９へのデータの配布のコストが変動する。このため、データ集約及びデータ配布のコストの最小化が重要である。そこで、データ集約及びデータ配布時の負荷ができるだけ均一に近くなるように、計算ノード１１〜１９のうちからデータ中継ノードを決定することが好ましい。その際、データ中継ノードとして機能する計算ノードとその他の計算ノードとの通信による遅延（レイテンシ）を十分小さくしないと、レイテンシによって性能が低下する。以上から、本実施形態では、算出された重心位置Ｇに最も近い計算ノードを、データ中継ノードと決定する。
【００２６】
つまり、各計算ノードからＩ／Ｏ要求を受けたとき、要求対象データのデータ長及び各計算ノードの位置情報に基づき、データ中継ノードが選択される。下記式（１）では、計算ノードの位置情報の一例である座標ベクトル及びデータ長を「重み」と捉え、その「重み」から求められる「重心」の位置に近い計算ノードがデータ中継ノードとなる。
【００２７】
【数１】
0006503945.tif 000002
【００２８】
式（１）では、ｎ個の計算ノード１，２，...．，ｎがＩ／Ｏ要求を行う対象データのデータ長をそれぞれｄ（１），...，ｄ（ｎ）とし、各計算ノードの座標ベクトルをＸ（１），Ｘ（２），...．，Ｘ（ｎ）とする。例えば、図２では、計算ノード１１の座標ベクトルＸ（１）は座標（０、１）であり、計算ノード１１が要求するデータのデータ長がｄ（１）に入力される。
【００２９】
重心位置Ｇの計算は、All reduce通信を利用し、計算ノード１１〜１９の全計算ノードで実行される。All reduce通信では、各計算ノードのデータ長ｄと各計算ノードの座標ベクトルＸとの情報を全計算ノードで共有する。計算ノード１１〜１９のそれぞれは、全計算ノードのデータ長ｄ及びデータ長Ｘの情報を受信するまで待機し、すべての情報を受信したとき、式（１）に基づき重心位置Ｇを計算する。式（１）に基づき算出された重心位置Ｇに最も近い位置の計算ノードがデータ中継ノードとなる。データ中継ノードが決定したら、重心位置Ｇの計算に用いた情報は破棄してもよい。また、重心位置Ｇの計算及びデータ中継ノードの決定は、各計算ノードからのＩ／Ｏ要求に対する一括Ｉ／Ｏ処理の度に行われる。
【００３０】
データ中継ノード及び他の計算ノード間のデータの集約及びデータの配布は、All reduce通信を利用し、データ中継ノードが行うことにより、レイテンシを最小化する。例えば、データ中継ノードは、All reduce通信を利用して全計算ノードが要求するデータ（図２では、データ１〜２０）を集約し、以下のステップでデータの集約及びデータの配布を行う。
【００３１】
（ステップＳ１）
データ中継ノード（ここでは、計算ノード１５）は、全計算ノード１１〜１９（自ノードを含む）からＩ／Ｏ要求対象データ及びそのデータのデータ長を有するＩ／Ｏ要求を集約する。
【００３２】
（ステップＳ２）
データ中継ノードは、集約したＩ／Ｏ要求をＩ／Ｏノード２０に一括して送信する。Ｉ／Ｏノード２０は、Ｉ／Ｏ要求対象のデータ１〜１０、１１〜２０の読み込み又は書き込みを行うファイルサーバ３１，３２を特定し、データ１〜１０のＩ／Ｏ要求及びデータ１１〜２０のＩ／Ｏ要求を一括して転送する。
【００３３】
（ステップＳ３）
ファイルサーバ３１，３２は、Ｉ／Ｏ要求に応じたデータの書き込みを行うか、Ｉ／Ｏ要求に応じたデータの読み込みを行う。例えば、ファイルサーバ３１は、要求されたデータ１〜１０をＩ／Ｏノード２０に一括して転送し、ファイルサーバ３２は、要求されたデータ１１〜２０をＩ／Ｏノード２０に一括して転送する。Ｉ／Ｏノード２０は、データ１〜２０を一括してデータ中継ノードに転送する。一括して転送されたデータ１〜２０はデータ中継ノードの中継バッファ１０７（図３参照）に格納される。
【００３４】
（ステップＳ４）
データ中継ノードは、他の計算ノードがそれぞれ要求したデータ長のデータを各計算ノードに配布し（ＲＤＭＡ（Remote Direct Memory Access）転送）、自ノードが要求したデータ長のデータをコピーする。
【００３５】
このとき、データの集約及びデータの配布の際、中継バッファ１０７内のアドレスと、ファイルサーバ３１〜３３内のファイルのオフセットを１対１に対応させることで、計算ノード間でＲＤＭＡ転送するデータを最小限に抑えることができる。
【００３６】
［計算ノードの構成例］
図３には、計算ノード群１０の一例として４台の計算ノード１１〜１４が示されている。計算ノード１１〜１４の構成は、データ中継ノードとして機能する計算ノードに中継バッファ１０７がある点を除き同一である。図２では、計算ノード１２がデータ中継ノードである。この場合、計算ノード１２は、ジョブプロセス１００、専用ライブラリ１０１、ＭＰＩライブラリ１０４、ファイルシステム１０５及び中継バッファ１０７を有する。中継バッファ１０７は、ファイルサーバから一括して転送されたデータを一旦格納する。
【００３７】
ジョブプロセス１００、専用ライブラリ１０１、ＭＰＩライブラリ１０４及びファイルシステム１０５は、データ中継ノードとして機能する計算ノードであるか否かにかかわらず、全計算ノードが有する。
【００３８】
図３の並列計算システム１の例では、並列処理プログラムを実行する場合、ジョブプロセス１００を複数の計算ノード１１〜１４に分散して起動させる。ジョブプロセス１００が、４台の計算ノード上に分散して起動された場合、並列処理プログラムで規定されている計算処理において、データ交換のためのプロセス間通信が行われる。プロセス間通信では、ＭＰＩ（Message Passing Interface）と呼ばれる通信ＡＰＩ（Application Program Interface）で記述された並列処理プログラムが実行される。プロセス間通信では、ＭＰＩライブラリ１０４の該当サブルーチンが呼び出されてAllreduce通信が行われる。これにより、計算ノード１１〜１４のすべてにおいてデータの集約及びデータの配布等が完了したかを管理することができる。ＭＰＩライブラリ１０４は、後述される並列ｒｅａｄ処理、並列ｗｒｉｔｅ処理、並列計算処理が正しく進行できているかを管理する。Allreduce通信によるこのような並列処理の進行管理を「バリア同期」ともいう。
【００３９】
また、計算ノード１１〜１４からファイルサーバ３１〜３３へのＩ／Ｏ要求が生じると、これに応じて、計算ノード１１〜１４の専用ライブラリ１０１の該当サブルーチンが呼び出されて、重心位置Ｇの算出、データ中継ノードの決定が行われる。専用ライブラリ１０１のサブルーチンの機能（重心位置Ｇの算出機能及びデータ中継ノードの決定機能）は、算出部１０２、決定部１０３及び転送部１０６により実現される。
【００４０】
算出部１０２は、自計算ノードが次にファイルサーバに読み込み又は書き込みを要求するデータ長と、他計算ノードから取得した他計算ノードのそれぞれが読み込み又は書き込みを要求するデータ長と、全計算ノードの座標ベクトルとに基づき重心位置Ｇの位置を算出する。決定部１０３は、算出した重心位置Ｇに最も近い位置に配置された計算ノードをデータ中継ノードに決定する。
【００４１】
転送部１０６は、中継バッファ１０７とのデータ転送を行う。具体的には、転送部１０６は、自計算ノードがデータ中継ノードである場合、計算ノード１１〜１４のＩ／Ｏ要求に応じて各計算ノードが次に読み込み又は書き込みを要求するデータをまとめてファイルサーバ間で転送する。例えば、転送部１０６は、後述される図５のステップＳ３５、Ｓ３９及び図１４のステップＳ５１、Ｓ５３を行う。
【００４２】
転送部１０６は、自計算ノードがデータ中継ノードでない場合、ファイルサーバから一括して転送されたデータを保存する中継バッファ１０７から自計算ノードのＩ／Ｏ要求に応じたデータをＰＤＭＡ転送により取得する。自計算ノードがデータ中継ノードである場合、自計算ノードのＩ／Ｏ要求に応じたデータが中継バッファ１０７からコピーされる。
【００４３】
データ中継ノードに決定した計算ノードでは、専用ライブラリ１０１の該当サブルーチンが呼び出されて、データの読み込み及び書き込みが行われる。
【００４４】
データ中継ノードは、各計算ノードからデータの読み込みや書き込みを要求するＩ／Ｏ要求を集約し、全計算ノードからのＩ／Ｏ要求を集約したとき、Ｉ／Ｏノード２０に一括Ｉ／Ｏ処理を行う。
【００４５】
ファイルシステム１０５は、ＯＳ上で動作し、ファイルの読み込み及び書き込みを制御する。ファイルシステム１０５は、一括ｒｅａｄ処理及び一括ｗｒｉｔｅ処理を受けてそれらに応じた処理を実行する。
【００４６】
［ジョブプロセス実行処理例］
次に、本実施形態にかかるジョブプロセス実行処理について、図４を参照しながら説明する。図４は、一実施形態にかかるジョブプロセス実行処理の一例を示すフローチャートである。このジョブプロセス実行処理において、並列計算システム１によるファイルサーバ通信方法が実行される。
【００４７】
図４の処理が開始されると、計算ノード１１〜１４のそれぞれの専用ライブラリ１０１の該当サブルーチンが呼び出され、計算ノード１１〜１４のそれぞれの計算ノードが、以下のジョブプロセス実行処理を並列して実行する。まず、計算ノードは、ファイルハンドル（読み込み又は書き込みを要求するデータが格納されたファイル番号）を取得する（ステップＳ１０）。次に、計算ノードは、並列ｒｅａｄ処理（図５参照）を実行する（ステップＳ１１）。後述される並列ｒｅａｄ処理では、重心位置Ｇの計算、データ中継ノードの決定、データの一括ｒｅａｄ処理（一括読み込み処理）等が実行される。
【００４８】
次に、計算ノードは、並列ｒｅａｄ処理で取得したデータを使用して並列計算処理の一例である計算１の処理を実行する（ステップＳ１２）。次に、計算ノードは、並列ｗｒｉｔｅ処理（図１４参照）を実行する（ステップＳ１３）。
【００４９】
次に、計算ノードは、次のファイルハンドルを取得する（ステップＳ１４）。次に、計算ノードは、並列ｒｅａｄ処理を実行する（ステップＳ１５）。次に、計算ノードは、並列ｒｅａｄ処理で取得したデータを使用して計算Ｋの処理を実行する（ステップＳ１６）。次に、計算ノードは、並列ｗｒｉｔｅ処理を実行する（ステップＳ１７）。
【００５０】
同様にして、計算ノードは、次のファイルハンドルを取得し（ステップＳ１８）、並列ｒｅａｄ処理を実行し（ステップＳ１９）、取得したデータを使用して計算Ｋの処理を実行し（ステップＳ２０）、並列ｗｒｉｔｅ処理を実行し（ステップＳ２１）、本処理を終了する。
【００５１】
［並列ｒｅａｄ処理例］
次に、図４に示した本実施形態にかかる並列ｒｅａｄ処理の一例について、図５を参照しながら説明する。図５は、一実施形態にかかる並列ｒｅａｄ処理の一例を示すフローチャートである。なお、図５のステップＳ３６〜Ｓ３９は、データ中継ノードとして機能する計算ノードが実行し、ステップＳ３４、Ｓ３５は、データ中継ノードとして機能する計算ノード以外の計算ノード（他の計算ノード）が実行する。図５のその他のステップはすべての計算ノードが実行する。
【００５２】
また、全計算ノードが実行する重心位置Ｇの算出処理は各計算ノードの算出部の機能であり、全計算ノードが実行するデータ中継ノードの決定処理は各計算ノードの決定部の機能である。また、データ中継ノードとして機能する計算ノードが実行する一括ｒｅａｄ処理は、データ中継ノードとして機能する計算ノードの転送部の機能である。
【００５３】
図５の処理が呼び出されると、計算ノードは、図６に示す重心の算出と配布処理を実行する（ステップＳ３０）。
【００５４】
（重心の算出と配布処理例）
図６に示す重心の算出と配布処理の一例では、計算ノードは、自計算ノードの座標ベクトルＸに自ノードのデータ長ｄを乗算する（ステップＳ３０１）。次に、計算ノードは、乗算値（ｄ×Ｘ）を入力し、重心位置Ｇを出力とするAll reduce通信を実行する（ステップＳ３０２）。
【００５５】
これにより、例えば、図２の計算ノード１１，１２，１３、１４のそれぞれは、自計算ノードのデータ長と座標ベクトルの乗算値（ｄ×Ｘ）を送信し、全計算ノードの乗算値の加算値ｇを用いて式（１）に基づき、計算ノード群１０の重心位置Ｇを算出し（ステップＳ３０３）、図５のステップＳ３０に戻る。
【００５６】
（オフセット最小値計算と配布処理例）
図５に戻り、次に、計算ノードは、図７に示すオフセット最小値（最小オフセット）の計算と配布処理を実行する（ステップＳ３１）。
【００５７】
図７に示す重心の算出と配布処理の一例では、計算ノードは、自計算ノードのオフセットを入力とし、最小オフセットを出力とするAllreduce通信を実行し（ステップＳ３１１）、図５のステップＳ３１に戻る。
【００５８】
例えば、図８（ａ）に示すファイルハンドルＮｏ．１のファイルには、データの先頭を「０」として示したオフセットとファイルに保存されているデータのデータ長とが示されている。例えば、図８（ａ）では、計算ノード１１のジョブプロセス（プロセス１）は、オフセット「０」から１Ｍバイトのデータ長のデータの読み込みを要求しているとする。計算ノード１２のジョブプロセス（プロセス２）は、オフセット「１Ｍバイト」から１Ｍバイトのデータ長のデータの読み込みを要求しているとする。計算ノード１３のジョブプロセス（プロセス３）は、オフセット「２Ｍバイト」から１Ｍバイトのデータ長のデータの読み込みを要求しているとする。計算ノード１４のジョブプロセス（プロセス４）は、オフセット「１Ｍ（バイト）」から１Ｍバイトのデータ長のデータの読み込みを要求しているとする。
【００５９】
この状態で、Ｓ３１１において、４台の計算ノード１１〜１４がオフセットを入力し、Allreduce通信を実行すると、計算ノード１１〜１４は、図８（ｂ）に示すリスト５０を共通情報として保有できる。リスト５０には、プロセス５１、ファイルハンドル５２、オフセット５３、データ長５４の各情報が保存されている。これにより、ステップＳ３１１において最小オフセット「０」が全計算ノード１１〜１４に配布される。
【００６０】
（オフセットとデータ長の最大値計算と配布処理例）
図５に戻り、次に、計算ノードは、図９に示すオフセットとデータ長の最大値計算と配布処理を実行する（ステップＳ３２）。
【００６１】
図９に示すオフセットとデータ長の最大値計算と配布処理の一例では、計算ノードは、自計算ノードのデータ長をｄ（０）に入力する（ステップＳ３２１）。次に、計算ノードは、自計算ノードのオフセットをｄ（１）に入力する（ステップＳ３２２）。次に、自計算ノードのデータ長ｄ（０）及びオフセットｄ（１）を入力とし、オフセットとデータ長の最大値を出力とするAllreduce通信を実行し（ステップＳ３２３）、図５のステップＳ３２に戻る。
【００６２】
例えば、図８（ｂ）に示すリスト５０の場合、ステップＳ３２３においてオフセットの最大値「３Ｍ（バイト）」とデータ長「１Ｍ（バイト）」とが全計算ノード１１〜１４に配布される。
【００６３】
図５に戻り、次に、計算ノードは、自計算ノードの座標ベクトルが重心位置Ｇに最も近いかを判定する（ステップＳ３３）。計算ノードは、自計算ノードの座標ベクトルが重心位置Ｇに最も近い座標ベクトルではないと判定した場合、自計算ノードはデータ中継ノードではない（以下、「他の計算ノード」ともいう。）と判定する。この場合、他の計算ノードは、一括ｒｅａｄ処理が完了するまで待機する（ステップＳ３４）。
【００６４】
計算ノードは、自計算ノードの座標ベクトルが重心位置Ｇに最も近い座標ベクトルであると判定した場合、自計算ノードはデータ中継ノードであると判定し、図１０に示す中継バッファ獲得処理を実行する（ステップＳ３６）。
【００６５】
（中継バッファ獲得処理例）
図１０に示す一中継バッファ獲得処理の一例では、計算ノードは、(最大オフセット−最小オフセット）＋最大データ長を算出し、バッファ長に代入する（ステップＳ３６１）。例えば、図８（ｂ）のリスト５０の場合、バッファ長は、４Ｍバイト（＝（３Ｍ−０）＋１Ｍ）となる。
【００６６】
次に、計算ノードは、求めたバッファ長のメモリを中継バッファ１０７として割り当てる（ステップＳ３６２）。これにより、並列ｒｅａｄ処理に必要なバッファ長のメモリ領域が割り当てられた中継バッファ１０７が獲得される。
【００６７】
計算ノードは、中継バッファ１０７に一括保存されたデータのうち、他の計算ノードが要求するデータのＲＤＭＡ転送を可能にするために中継バッファ１０７をページ固定する（ステップＳ３６３）。次に、計算ノードは、中継バッファ１０７の先頭アドレスをすべての計算ノードに通知し（ステップＳ３６４）、図５のステップＳ３６に戻る。これにより、他の計算ノードは、オフセットとデータ長とからデータ中継ノードのオペレーティングシステムを用いずに、各計算ノードが要求するデータのみを中継バッファ１０７からダイレクトに転送することができる。これにより、高スループット及び低レイテンシの通信を行うことができる。
【００６８】
（一括Ｒｅａｄ処理例）
図５に戻り、次に、計算ノードは、図１１に示す一括Ｒｅａｄ処理を実行する（ステップＳ３７）。図１１に示す一括Ｒｅａｄ処理の一例では、計算ノードは、最小オフセットを読み出しオフセットに代入する（ステップＳ３７１）。次に、計算ノードは、バッファ長を読み出しデータ長に代入する（ステップＳ３７２）。次に、計算ノードは、ファイルハンドルにて指定されたファイルを、読み出しオフセット及び読み出しデータ長のデータをファイルサーバから読み込み（ステップＳ３７３）、図５のステップＳ３７に戻る。これにより、例えば、図８（ａ）に示すファイルハンドルＮｏ．１にて指定されたファイルのオフセット「０」から４Ｍバイトのデータを一括して読み込むことができる。
【００６９】
図５に戻り、次に、計算ノードは、一括Ｒｅａｄ処理完了の通知を送信する（ステップＳ３８）。一括Ｒｅａｄ処理完了の通知を受けたデータ中継ノード以外の計算ノード（他の計算ノード）は、図１２に示す自ノードデータ受信処理を実行する（ステップＳ３５）。
【００７０】
（自ノードデータ受信処理）
図１２に示す自ノードデータ受信処理の一例では、計算ノードは、「（自計算ノードのオフセット−最小オフセット）＋中継バッファ１０７の先頭アドレス」の計算結果をＲＤＭＡ開始位置とする（ステップＳ３５１）。次に、計算ノードは、ＲＤＭＡ開始位置から自計算ノードのデータ長分のデータをＲＤＭＡ転送にて読み込み（ステップＳ３５２）、図５のステップＳ３５に戻り、「２」に進む。
【００７１】
例えば、図８（ｂ）に示すリスト５０の場合、プロセス１を実行する他の計算ノードは、オフセット「０」に応じた中継バッファ１０７のアドレスから１ＭバイトのデータのみをＲＤＭＡ転送する。プロセス３を実行する他の計算ノードは、オフセット「２Ｍ（バイト）」に応じた中継バッファ１０７のアドレスから１ＭバイトのデータのみをＲＤＭＡ転送する。プロセス４を実行する他の計算ノードは、オフセット「３Ｍ（バイト）」に応じた中継バッファ１０７のアドレスから１ＭバイトのデータのみをＲＤＭＡ転送する。
【００７２】
一方、データ中継ノードの計算ノードは、一括Ｒｅａｄ処理完了の通知を送信後（ステップＳ３８）、図１３に示すｒｅａｄ時の自ノードデータｃｏｐｙ処理を実行する（ステップＳ３９）。
【００７３】
（ｒｅａｄ時の自ノードデータｃｏｐｙ処理）
図１３に示すｒｅａｄ時の自ノードデータｃｏｐｙ処理の一例では、計算ノードは、「（自ノードのオフセット−最小オフセット）＋中継バッファ１０７の先頭アドレス」の計算結果をｃｏｐｙ開始位置とする（ステップＳ３９１）。次に、計算ノードは、ｃｏｐｙ開始位置から自ノードデータ長分のデータをコピーし（ステップＳ３９２）、図５のステップＳ３９に戻り、「２」に進む。
【００７４】
図５に戻り、計算ノードは、受信完了時のバリア同期を行う（ステップＳ４０）。次に、計算ノードは、中継バッファ１０７のメモリ残量が予め定められた閾値よりも小さいかを判定する（ステップＳ４１）。
【００７５】
計算ノードは、中継バッファ１０７のメモリ残量が閾値よりも小さいと判定した場合、中継バッファ１０７をすべて開放し（ステップＳ４２）、本処理を終了する。他方、計算ノードは、中継バッファ１０７のメモリ残量が閾値以上であると判定した場合、そのまま本処理を終了する。
【００７６】
［並列ｗｒｉｔｅ処理例］
次に、図４に示した本実施形態にかかる並列ｗｒｉｔｅ処理の一例について、図１４を参照しながら説明する。図１４は、一実施形態にかかる並列ｗｒｉｔｅ処理の一例を示すフローチャートである。なお、図１４のステップＳ３６、Ｓ５２〜Ｓ５５は、データ中継ノードとして機能する計算ノードが実行し、ステップＳ５０、Ｓ５１は、データ中継ノードとして機能する計算ノード以外の計算ノード（他の計算ノード）が実行する。図１４のその他のステップはすべての計算ノードが実行する。
【００７７】
また、全計算ノードが実行する重心位置Ｇの算出処理は各計算ノードの算出部の機能であり、全計算ノードが実行するデータ中継ノードの決定処理は各計算ノードの決定部の機能である。また、データ中継ノードとして機能する計算ノードが実行する一括ｗｒｉｔｅ処理は、データ中継ノードとして機能する計算ノードの転送部の機能である。
【００７８】
図１４の処理が呼び出されると、計算ノードは、図６に示す重心の算出と配布処理を実行する（ステップＳ３０）。図６の重心の算出と配布処理については、並列ｒｅａｄ処理において説明したため、ここでは説明を省略する。
【００７９】
次に、計算ノードは、図７に示すオフセット最小値計算と配布処理を実行する（ステップＳ３１）。図７のオフセット最小値計算と配布処理については、並列ｒｅａｄ処理において説明したため、ここでは説明を省略する。
【００８０】
次に、計算ノードは、図９に示すオフセットとデータ長の最大値計算と配布処理を実行する（ステップＳ３２）。図９のオフセットとデータ長の最大値計算と配布処理については、並列ｒｅａｄ処理において説明したため、ここでは説明を省略する。
【００８１】
次に、計算ノードは、自計算ノードの座標ベクトルが重心位置Ｇに最も近いかを判定する（ステップＳ３３）。計算ノードは、自計算ノードの座標ベクトルが重心位置Ｇに最も近い座標ベクトルではないと判定した場合、自計算ノードはデータ中継ノード以外の他の計算ノードであると判定し、中継バッファ１０７の獲得処理完了の通知を受信するまで待機する（ステップＳ５０）。
【００８２】
計算ノードは、自計算ノードの座標ベクトルが重心位置Ｇに最も近い座標ベクトルであると判定した場合、自計算ノードはデータ中継ノードであると判定し、図１０に示す中継バッファ獲得処理を実行する（ステップＳ３６）。図１０の中継Ｉバッファ獲得処理については、並列ｒｅａｄ処理において説明したため、ここでは説明を省略する。
【００８３】
次に、計算ノードは、中継バッファ獲得処理完了の通知を送信する（ステップＳ５２）。中継バッファ獲得処理完了の通知を受けたデータ中継ノード以外の計算ノード（他の計算ノード）は、図１５に示す自ノードデータ送信処理を実行する（ステップＳ５１）。
【００８４】
（自ノードデータ送信処理）
図１５に示す自ノードデータ送信処理の一例では、計算ノードは、「（自ノードのオフセット−最小オフセット）＋中継バッファ１０７の先頭アドレス」の計算結果をＲＤＭＡ開始位置とする（ステップＳ５０１）。次に、計算ノードは、ＲＤＭＡ開始位置から自ノードデータ長分のデータをＲＤＭＡ転送にて書き込み（ステップＳ５０２）、図１４のステップＳ５１に戻り、「３」に進む。
【００８５】
一方データ中継ノードの計算ノードは、中継バッファ獲得処理完了の通知を送信後（ステップＳ５２）、図１６に示すｗｒｉｔｅ時の自ノードデータｃｏｐｙ処理を実行する（ステップＳ５３）。
【００８６】
（ｗｒｉｔｅ時の自ノードデータｃｏｐｙ処理）
図１６に示すｗｒｉｔｅ時の自ノードデータｃｏｐｙ処理の一例では、計算ノードは、「（自ノードのオフセット−最小オフセット）＋中継バッファ１０７の先頭アドレス」の計算結果をｃｏｐｙ開始位置とする（ステップＳ５１１）。次に、計算ノードは、ｃｏｐｙ開始位置から自ノードデータ長分のデータをコピーし（ステップＳ５１２）、図１４のステップＳ５３に戻り、「３」に進む。
【００８７】
図１４の「３」に続き、計算ノードは、全計算ノードが自ノードデータの中継バッファ１０７へのデータ格納を完了するまで待つ（ステップＳ５４）。
【００８８】
（一括Ｗｒｉｔｅ処理例）
次に、全計算ノードが自ノードデータの中継バッファ１０７へのデータ格納を完了した場合、計算ノードは、図１７に示す一括Ｗｒｉｔｅ処理を実行する（ステップＳ５５）。図１７に示す一括Ｗｒｉｔｅ処理の一例では、計算ノードは、最小オフセットを書き込みオフセットに代入する（ステップＳ５３１）。次に、計算ノードは、バッファ長を書き込みデータ長に代入する（ステップＳ５３２）。次に、計算ノードは、ファイルハンドルにて指定されたファイルに、書き込みオフセット及び書き込みデータ長で書き込み（ステップＳ５３３）、図１４のステップＳ５５に戻る。これにより、例えば、全計算ノードから要求されたデータが一括してファイルに書き込まれる。
【００８９】
次に、計算ノードは、中継バッファ１０７のメモリ残量が予め定められた閾値よりも小さいかを判定する（ステップＳ４１）。計算ノードは、中継バッファ１０７のメモリ残量が閾値よりも小さいと判定した場合、中継バッファ１０７をすべて開放し（ステップＳ４２）、本処理を終了する。他方、計算ノードは、中継バッファ１０７のメモリ残量が閾値以上であると判定した場合、そのまま本処理を終了する。
【００９０】
以上に説明したように、一実施形態にかかる並列計算システム１によれば、各計算ノードが実行するジョブプロセスからの入出力を、データ中継ノードに分担させる。これにより、ファイルサーバの負荷を減らすとともに、必要としている計算ノードへのデータの配布を効率化することができる。また、複数の計算ノード及びファイルサーバ間での小さなパケットによる多数回の通信を回避できる。さらに、ファイルサーバ側でのメモリ領域の細分化されにくくなり、Ｉ／Ｏ要求に対してファイルサーバに記憶可能なメモリ領域の低下を回避できる。これにより、並列計算機システム１におけるデータ転送の負荷を軽減できる。
【００９１】
（ハードウェア構成例）
最後に、本実施形態にかかる計算ノードのハードウェア構成について、図１８を参照して説明する。図１８は、本実施形態にかかる計算ノードのハードウェア構成の一例を示す。計算ノードは、入力装置１０１、表示装置１０２、外部Ｉ／Ｆ１０３、ＲＡＭ（Random Access Memory）１０４、ＲＯＭ（Read Only Memory）１０５、ＣＰＵ（Central Processing Unit）１０６、通信Ｉ／Ｆ１０７、及びＨＤＤ（Hard Disk Drive）１０８などを備え、それぞれがバスＢで相互に接続されている。
【００９２】
入力装置１０１は、計算ノードに各操作信号を入力するために用いられる。表示装置１０２は、ディスプレイなどを含み、各種のデータを表示する。通信Ｉ／Ｆ１０７は、計算ノードをＴｏｆｕネットワーク３等の高速ネットワークに接続するインタフェースである。これにより、計算ノードは、Ｔｏｆｕネットワーク３を介して他の計算ノードと連携して並列計算処理を行うことができる。
【００９３】
ＨＤＤ１０８は、プログラムやデータを格納している不揮発性の記憶装置である。ＨＤＤ１０８には、並列処理プログラム、重心位置Ｇを算出するプログラム、データ中継ノードを決定するプログラム等が記録されてもよい。
【００９４】
外部Ｉ／Ｆ１０３は、外部装置とのインタフェースである。これにより、計算ノードは、外部装置に読み取りや書き込みを行うことができる。ＲＯＭ１０５は、電源を切っても内部データを保持することができ、基本プログラム等を保持する不揮発性の半導体メモリである。ＲＡＭ１０４は、プログラムやデータを一時保持する揮発性のメモリである。ＣＰＵ１０６は、ＨＤＤ１０８やＲＯＭ１０５等から、プログラムやデータをＲＡＭ１０４上に読み出し、オペレーションシステムを用いて所定の処理を実行する。これにより、並列計算処理、一括ｒｅａｄ、一括ｗｒｉｔｅ処理等の計算ノードに搭載した機能を実現する。
【００９５】
以上、情報処理装置、並列計算機システム、ファイルサーバ通信プログラム及びファイルサーバ通信方法を上記実施形態により説明したが、本発明にかかる情報処理装置、並列計算機システム、ファイルサーバ通信プログラム及びファイルサーバ通信方法は上記実施形態に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能である。また、上記実施形態及び変形例が複数存在する場合、矛盾しない範囲で組み合わせることができる。
【００９６】
例えば、上記実施形態では、式（１）の重心位置Ｇを算出する際、Ｉ／Ｏ要求対象データのデータ長とともに各計算ノードの座標ベクトルをAllreduce通信により全計算ノードに配布した。しかしながら、各計算ノードは、予めすべての計算ノードの座標ベクトルの情報を記録してもよい。この場合、式（１）の重心位置Ｇを算出する際、各計算ノードは、Ｉ／Ｏ要求対象データのデータ長のみをAllreduce通信により配布すればよく、自計算ノードの座標ベクトルは配布しなくてもよい。
【００９７】
以上の説明に関し、更に以下の項を開示する。
（付記１）
並列計算機システムにおいて並列計算処理を行う複数の情報処理装置のうちの一の情報処理装置であって、
前記複数の情報処理装置のうち自情報処理装置以外の情報処理装置のそれぞれから取得した、ファイルサーバに次に読み込み又は書き込みを要求するデータのデータ長と、自情報処理装置が次に前記ファイルサーバに読み込み又は書き込みを要求するデータのデータ長と、前記複数の情報処理装置のそれぞれの位置情報とに基づき前記複数の情報処理装置の重心位置を算出する算出部と、
算出した前記重心位置に応じて前記複数の情報処理装置のうちからデータ中継を行う情報処理装置を決定する決定部と、
決定した前記データ中継を行う情報処理装置が自情報処理装置である場合、前記複数の情報処理装置のそれぞれが次に読み込み又は書き込みを要求するデータをまとめて前記ファイルサーバとの間で転送する転送部と、
を有する情報処理装置。
（付記２）
前記転送部は、
決定した前記データ中継を行う情報処理装置が自情報処理装置でない場合、前記データ中継を行う情報処理装置から自情報処理装置が次に読み込み又は書き込みを要求したデータを取得する、
付記１に記載の情報処理装置。
（付記３）
複数の情報処理装置により並列計算処理を行う並列計算機システムであって、
前記複数の情報処理装置の各情報処理装置は、
前記複数の情報処理装置のうち自情報処理装置以外の情報処理装置のそれぞれから取得した、ファイルサーバに次に読み込み又は書き込みを要求するデータのデータ長と、自情報処理装置が次に前記ファイルサーバに読み込み又は書き込みを要求するデータのデータ長と、前記複数の情報処理装置のそれぞれの位置情報とに基づき前記複数の情報処理装置の重心位置を算出する算出部と、
算出した前記重心位置に応じて前記複数の情報処理装置のうちからデータ中継を行う情報処理装置を決定する決定部と、
決定した前記データ中継を行う情報処理装置が自情報処理装置である場合、前記複数の情報処理装置のそれぞれが次に読み込み又は書き込みを要求するデータをまとめて前記ファイルサーバとの間で転送する転送部と、を有する、
並列計算機システム。
（付記４）
決定した前記データ中継を行う情報処理装置が自情報処理装置でない場合、前記データ中継を行う情報処理装置から自情報処理装置が次に読み込み又は書き込みを要求したデータを取得する、
付記３に記載の並列計算機システム。
（付記５）
複数の情報処理装置により並列計算処理を行う並列計算機システムにおいてファイルサーバとの通信処理をコンピュータに実行させるファイルサーバ通信プログラムであって、
前記複数の情報処理装置のうち自情報処理装置以外の情報処理装置のそれぞれから取得した、ファイルサーバに次に読み込み又は書き込みを要求するデータのデータ長と、自情報処理装置が次に前記ファイルサーバに読み込み又は書き込みを要求するデータのデータ長と、前記複数の情報処理装置のそれぞれの位置情報とに基づき前記複数の情報処理装置の重心位置を算出し、
算出した前記重心位置に応じて前記複数の情報処理装置のうちからデータ中継を行う情報処理装置を決定し、
決定した前記データ中継を行う情報処理装置が自情報処理装置である場合、前記複数の情報処理装置のそれぞれが次に読み込み又は書き込みを要求するデータをまとめて前記ファイルサーバとの間で転送する、
ファイルサーバ通信プログラム。
（付記６）
決定した前記データ中継を行う情報処理装置が自情報処理装置でない場合、前記データ中継を行う情報処理装置から自情報処理装置が次に読み込み又は書き込みを要求したデータを取得する、
付記５に記載のファイルサーバ通信プログラム。
（付記７）
複数の情報処理装置により並列計算処理を行う並列計算機システムにおいてファイルサーバとの通信処理をコンピュータが実行するファイルサーバ通信方法であって、
前記複数の情報処理装置のうち自情報処理装置以外の情報処理装置のそれぞれから取得した、ファイルサーバに次に読み込み又は書き込みを要求するデータのデータ長と、自情報処理装置が次に前記ファイルサーバに読み込み又は書き込みを要求するデータのデータ長と、前記複数の情報処理装置のそれぞれの位置情報とに基づき前記複数の情報処理装置の重心位置を算出し、
算出した前記重心位置に応じて前記複数の情報処理装置のうちからデータ中継を行う情報処理装置を決定し、
決定した前記データ中継を行う情報処理装置が自情報処理装置である場合、前記複数の情報処理装置のそれぞれが次に読み込み又は書き込みを要求するデータをまとめて前記ファイルサーバとの間で転送する、
ファイルサーバ通信方法。
（付記８）
決定した前記データ中継を行う情報処理装置が自情報処理装置でない場合、前記データ中継を行う情報処理装置から自情報処理装置が次に読み込み又は書き込みを要求したデータを取得する、
付記７に記載のファイルサーバ通信方法。
【符号の説明】
【００９８】
１：並列計算システム
２：Ｔｏｆｕネットワーク
３：ＩＢネットワーク
１０：計算ノード群
１１〜１９：計算ノード
２０：Ｉ／Ｏノード
３０：ファイルサーバ群
３１〜３３：ファイルサーバ
１００：ジョブプロセス
１０１：専用ライブラリ
１０２：算出部
１０３：決定部
１０４：ＭＰＩライブラリ
１０５：ファイルシステム
１０６：転送部
１０７：中継バッファ
【図１】
0006503945.tif 000003
【図２】
0006503945.tif 000004
【図３】
0006503945.tif 000005
【図４】
0006503945.tif 000006
【図５】
0006503945.tif 000007
【図６】
0006503945.tif 000008
【図７】
0006503945.tif 000009
【図８】
0006503945.tif 000010
【図９】
0006503945.tif 000011
【図１０】
0006503945.tif 000012
【図１１】
0006503945.tif 000013
【図１２】
0006503945.tif 000014
【図１３】
0006503945.tif 000015
【図１４】
0006503945.tif 000016
【図１５】
0006503945.tif 000017
【図１６】
0006503945.tif 000018
【図１７】
0006503945.tif 000019
【図１８】
0006503945.tif 000020