(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022191052
(43)【公開日】2022-12-27
(54)【発明の名称】情報処理システム、情報処理装置、及びコマンド実行方法
(51)【国際特許分類】
G06F 9/54 20060101AFI20221220BHJP
G06F 9/445 20180101ALI20221220BHJP
【FI】
G06F9/54 Z
G06F9/445
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2021099671
(22)【出願日】2021-06-15
(71)【出願人】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100103894
【弁理士】
【氏名又は名称】家入 健
(72)【発明者】
【氏名】井ノ上 大輝
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376AE51
(57)【要約】
【課題】ユーザ利便性を向上可能な情報処理システム、情報処理装置、及びコマンド実行方法を提供すること。
【解決手段】情報処理システム1は、情報処理装置10と、情報処理装置20とを備える。情報処理装置10は、複数のMPI(Message Passing Interface)プログラムを実行することを指示する実行コマンドを入力する入力部11と、複数のMPIプログラムを、情報処理装置10において実行される第1のMPIプログラムと、情報処理装置20において実行される第2のMPIプログラムとに分類し、第1のMPIプログラムを実行する演算部12と、第2のMPIプログラムの実行内容を特定する情報を情報処理装置20に送信する通信部13と、を備える。情報処理装置20は、送信された情報を受信する通信部21と、受信した情報に基づいて、第2のMPIプログラムを実行する演算部22と、を備える。
【選択図】
図1
【特許請求の範囲】
【請求項1】
第1の情報処理装置と、第2の情報処理装置とを備え、
前記第1の情報処理装置は、
複数のMPI(Message Passing Interface)プログラムを実行することを指示する実行コマンドを入力する入力部と、
前記複数のMPIプログラムを、前記第1の情報処理装置において実行される第1のMPIプログラムと、前記第2の情報処理装置において実行される第2のMPIプログラムとに分類し、前記第1のMPIプログラムを実行する第1の演算部と、
前記第2のMPIプログラムの実行内容を特定する情報を前記第2の情報処理装置に送信する第1の通信部と、を備え、
前記第2の情報処理装置は、
前記情報を受信する第2の通信部と、
前記情報に基づいて、前記第2のMPIプログラムを実行する第2の演算部と、を備える情報処理システム。
【請求項2】
前記実行コマンドは、前記複数のMPIプログラムのうちの第3のMPIプログラムが出力した出力結果を使用して第4のMPIプログラムを実行することを示す第1のオプションを含み、
前記第1の演算部は、前記第1のオプションに基づいて、前記第1のMPIプログラムが、前記第3のMPIプログラム及び前記第4のMPIプログラムを含むか否かを判定し、前記第1のMPIプログラムが、前記第3のMPIプログラム及び前記第4のMPIプログラムを含むと判定する場合、前記出力結果を、前記第1の情報処理装置の受信バッファに送信し、前記第1の情報処理装置の受信バッファから取得したデータを入力データとして前記第4のMPIプログラムを実行する、請求項1に記載の情報処理システム。
【請求項3】
前記第1の通信部は、前記第1のMPIプログラムが、前記第3のMPIプログラムを含み、前記第4のMPIプログラムを含まないと判定された場合、前記出力結果を、前記第2の情報処理装置の受信バッファに送信し、
前記第2の演算部は、前記第2の情報処理装置の受信バッファから取得したデータを入力データとして前記第4のMPIプログラムを実行する、請求項2に記載の情報処理システム。
【請求項4】
前記実行コマンドは、前記出力結果を、ファイルに出力するのか否かを指定する第2のオプションを含み、
前記第1の演算部は、前記第2のオプションが、前記出力結果を、ファイルに出力することを示し、かつ前記第1のMPIプログラムが、前記第3のMPIプログラム及び前記第4のMPIプログラムを含むと判定した場合、前記出力結果をファイルに出力し、前記出力されたファイルのうち、前記入力データに使用される出力結果を前記第1の情報処理装置の受信バッファに送信する、請求項3に記載の情報処理システム。
【請求項5】
前記第1の通信部は、前記第2のオプションが、前記出力結果を、ファイルに出力することを示し、かつ前記第1のMPIプログラムが、前記第3のMPIプログラムを含み、前記第4のMPIプログラムを含まないと判定された場合、前記出力結果をファイルに出力し、前記出力されたファイルのうち、前記入力データに使用される出力結果を前記第2の情報処理装置の受信バッファに送信する、請求項4に記載の情報処理システム。
【請求項6】
前記実行コマンドが、前記複数のMPIプログラムの各々が処理する対象データがストリームデータであるか否かを示す第3のオプションを含み、
前記第1の演算部は、前記第3のオプションに基づいて、前記対象データのうち、重複しない所定のデータ量ずつのデータを入力データとして前記第1のMPIプログラムに入力して、前記第1のMPIプログラムを実行し、
前記第1の通信部は、前記第3のオプションに関する情報を前記第2の通信部に送信し、
前記第2の演算部は、前記第3のオプションに基づいて、前記対象データのうち、重複しない所定のデータ量ずつのデータを入力データとして前記第2のMPIプログラムに入力して、前記第2のMPIプログラムを実行する、請求項1~5のいずれか1項に記載の情報処理システム。
【請求項7】
情報処理装置であって、
複数のMPI(Message Passing Interface)プログラムを実行することを指示する実行コマンドを入力する入力部と、
前記複数のMPIプログラムを、前記情報処理装置において実行される第1のMPIプログラムと、他の情報処理装置において実行される第2のMPIプログラムとに分類し、前記第1のMPIプログラムを実行する演算部と、
前記第2のMPIプログラムの実行内容を特定する情報を前記他の情報処理装置に送信する通信部と、を備える情報処理装置。
【請求項8】
情報処理装置であって、
複数のMPI(Message Passing Interface)プログラムを実行することを指示する実行コマンドが入力された他の情報処理装置から、前記複数のMPIプログラムのうち、前記情報処理装置において実行される第1のMPIプログラムの実行内容を特定する情報を受信する通信部と、
前記情報に基づいて、前記第1のMPIプログラムを実行する演算部と、を備える情報処理装置。
【請求項9】
情報処理装置により実行されるコマンド実行方法であって、
複数のMPI(Message Passing Interface)プログラムを実行することを指示する実行コマンドを入力し、
前記複数のMPIプログラムを、前記情報処理装置において実行される第1のMPIプログラムと、他の情報処理装置において実行される第2のMPIプログラムとに分類し、前記第1のMPIプログラムを実行し、
前記第2のMPIプログラムの実行内容を特定する情報を前記他の情報処理装置に送信する、コマンド実行方法。
【請求項10】
情報処理装置により実行されるコマンド実行方法であって、
複数のMPI(Message Passing Interface)プログラムを実行することを指示する実行コマンドが入力された他の情報処理装置から、前記複数のMPIプログラムのうち、前記情報処理装置において実行される第1のMPIプログラムの実行内容を特定する情報を受信し、
前記情報に基づいて、前記第1のMPIプログラムを実行する、コマンド実行方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、情報処理システム、情報処理装置、及びコマンド実行方法に関する。
【背景技術】
【0002】
大規模な演算が必要な自然科学計算が実行される場合、複数のコンピュータ装置がネットワークで接続され、複数のコンピュータ装置を用いて大規模な演算が実行される、分散メモリ型並列計算機が広く利用される。分散メモリ型並列計算機では、ノードと呼ばれる各コンピュータ装置のプロセッサ上で、プロセッサが、プロセスを実行し、コンピュータ装置間でメッセージ交換を行ないながら、大規模な演算を実行する。分散メモリ型並列計算機に含まれるコンピュータ装置は、コンピュータ装置間のメッセージ交換を、MPI(Message Passing Interface)と呼ばれる標準化された規格を用いて実行する。
【0003】
また、コンピュータ装置は、汎用的な処理に利用されるCPU(Central Processing Unit)、特定処理に特化したGPU(Graphics Processing Unit)及びベクトルプロセッサ等のリソースを使用して各種処理を実行する。そのため、コンピュータ装置を利用するユーザは、様々なリソースのうち、実行する処理に適したリソースを用いて、例えば、MPIに対応したプログラムを示すMPIプログラムを実行することにより、効率的にMPIプログラムを実行する。
【0004】
上記内容に関連して、特許文献1には、複数の計算ノードを備え、複数の計算ノードが、同時に使用する並列プログラムであって、MPIプログラムに対応する並列プログラムを実行するクラスタシステムが開示されている。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
ところで、コンピュータ装置等の情報処理装置に複数のMPIプログラムを実行させる場合、ユーザは、複数のプログラムの各々を実行するためのコマンドが記述されたMPIプログラムを用意する。そして、ユーザは、当該MPIプログラムを実行するためのコマンドを情報処理装置に実行させることで、複数のMPIプログラムを実行する。ユーザが、例えば、複数のプログラムのうちのいずれかについて、コマンドを変更したい場合、ユーザは、複数のプログラムを実行するために用意したMPIプログラムの記述内容を変更する必要があり、ユーザに手間がかかってしまう。
【0007】
そこで、ユーザは、情報処理装置に複数のMPIプログラムを実行させる場合でも、複数のMPIプログラムのいずれかについてのコマンドを容易に変更できるように、複数のMPIプログラムを1つずつ実行することが想定される。しかしながら、ユーザが1つずつMPIプログラムを実行する場合、ユーザは、実行中のMPIプログラムの実行完了を待って、次のMPIプログラムを実行しなければならない。そのため、ユーザは、実行中のMPIプログラムの実行完了を待たなければならず、ユーザに負担がかかってしまう。このように、ユーザが、複数のMPIプログラムを実行する場合、ユーザは、プログラムを変更したり、各プログラムの実行完了を待ったりしなければならず、ユーザに負担がかかってしまう。したがって、ユーザが複数のMPIプログラムを実行する場合でもユーザに負担がかからないユーザ利便性の高い情報処理装置及び情報処理システムが望まれる。
【0008】
本開示の目的は、このような課題を解決するためになされたものであり、ユーザ利便性を向上可能な情報処理システム、情報処理装置、及びコマンド実行方法を提供することにある。
【課題を解決するための手段】
【0009】
本開示の一態様にかかる情報処理システムは、
第1の情報処理装置と、第2の情報処理装置とを備え、
前記第1の情報処理装置は、
複数のMPI(Message Passing Interface)プログラムを実行することを指示する実行コマンドを入力する入力部と、
前記複数のMPIプログラムを、前記第1の情報処理装置において実行される第1のMPIプログラムと、前記第2の情報処理装置において実行される第2のMPIプログラムとに分類し、前記第1のMPIプログラムを実行する第1の演算部と、
前記第2のMPIプログラムの実行内容を特定する情報を前記第2の情報処理装置に送信する第1の通信部と、を備え、
前記第2の情報処理装置は、
前記情報を受信する第2の通信部と、
前記情報に基づいて、前記第2のMPIプログラムを実行する第2の演算部と、を備える。
【0010】
本開示の一態様にかかる情報処理装置は、
複数のMPI(Message Passing Interface)プログラムを実行することを指示する実行コマンドを入力する入力部と、
前記複数のMPIプログラムを、前記情報処理装置において実行される第1のMPIプログラムと、他の情報処理装置において実行される第2のMPIプログラムとに分類し、前記第1のMPIプログラムを実行する演算部と、
前記第2のMPIプログラムの実行内容を特定する情報を前記他の情報処理装置に送信する通信部と、を備える。
【0011】
本開示の他の態様にかかる情報処理装置は、
複数のMPI(Message Passing Interface)プログラムを実行することを指示する実行コマンドが入力された他の情報処理装置から、前記複数のMPIプログラムのうち、前記情報処理装置において実行される第1のMPIプログラムの実行内容を特定する情報を受信する通信部と、
前記情報に基づいて、前記第1のMPIプログラムを実行する演算部と、を備える。
【0012】
本開示の一態様にかかるコマンド実行方法は、
情報処理装置により実行されるコマンド実行方法であって、
複数のMPI(Message Passing Interface)プログラムを実行することを指示する実行コマンドを入力し、
前記複数のMPIプログラムを、前記情報処理装置において実行される第1のMPIプログラムと、他の情報処理装置において実行される第2のMPIプログラムとに分類し、前記第1のMPIプログラムを実行し、
前記第2のMPIプログラムの実行内容を特定する情報を前記他の情報処理装置に送信する。
【0013】
本開示の他の態様にかかるコマンド実行方法は、
情報処理装置により実行されるコマンド実行方法であって、
複数のMPI(Message Passing Interface)プログラムを実行することを指示する実行コマンドが入力された他の情報処理装置から、前記複数のMPIプログラムのうち、前記情報処理装置において実行される第1のMPIプログラムの実行内容を特定する情報を受信し、
前記情報に基づいて、前記第1のMPIプログラムを実行する。
【発明の効果】
【0014】
本開示によれば、ユーザ利便性を向上可能な情報処理システム、情報処理装置、及びコマンド実行方法を提供できる。
【図面の簡単な説明】
【0015】
【
図1】実施の形態1にかかる情報処理システムの構成例を示すブロック図である。
【
図2】実施の形態2にかかる情報処理システムの構成例を示すブロック図である。
【
図3】実施の形態2にかかる情報処理システムの動作例を説明するための図である。
【
図4】実施の形態2にかかる情報処理システムの動作例を示すフローチャートである。
【
図6】実施の形態2の情報処理装置の動作例を説明するための図である。
【
図7】実施の形態2の情報処理装置の動作例を説明するための図である。
【
図8】実施の形態2の情報処理装置の動作例を説明するための図である。
【
図9】実施の形態2の情報処理装置の動作例を説明するための図である。
【
図10】入力されるコマンドの一例を示す図である。
【
図11】入力されるコマンドの一例を示す図である。
【
図12】各実施の形態にかかる情報処理装置等のハードウェア構成を例示するブロック図である。
【発明を実施するための形態】
【0016】
以下、図面を参照して本開示の実施の形態について説明する。なお、以下の記載及び図面は、説明の明確化のため、適宜、省略及び簡略化がなされている。また、以下の各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【0017】
(実施の形態1)
図1を用いて、実施の形態1にかかる情報処理システム1の構成例について説明する。
図1は、実施の形態1にかかる情報処理システムの構成例を示すブロック図である。情報処理システム1は、MPIプログラムを実行する情報処理システムである。情報処理システム1は、情報処理装置10と、情報処理装置20とを備える。情報処理装置10及び20は、MPIプログラムを実行可能な装置である。情報処理装置10及び20は、ネットワークを介して接続し、通信を行う。情報処理装置10は、情報処理システム1において、第1の情報処理装置と称されてもよい。情報処理装置20は、情報処理システム1において、第2の情報処理装置と称されてもよい。
【0018】
情報処理装置10は、入力部11と、演算部12と、通信部13とを備える。
入力部11は、複数のMPIプログラムを実行することを指示する実行コマンドを入力する。
【0019】
演算部12は、複数のMPIプログラムを、情報処理装置10において実行される第1のMPIプログラムと、情報処理装置20において実行される第2のMPIプログラムとに分類する。演算部12は、情報処理装置10において実行される第1のMPIプログラムを実行する。
通信部13は、情報処理装置20において実行される第2のMPIプログラムの実行内容を特定する情報を情報処理装置20に送信する。
【0020】
情報処理装置20は、通信部21と、演算部22とを備える。
通信部21は、情報処理装置20において実行される第2のMPIプログラムの実行内容を特定する情報を通信部13から受信する。なお、情報処理システム1において、通信部13は、第1の通信部と称されてもよく、通信部21は、第2の通信部と称されてもよい。
【0021】
演算部22は、通信部21が受信した情報に基づいて、第2のMPIプログラムを実行する。なお、情報処理システム1において、演算部12は、第1の演算部と称されてもよく、演算部22は、第2の演算部と称されてもよい。
【0022】
以上のように、情報処理装置10は、複数のMPIプログラムを実行することを指示する実行コマンドを入力し、情報処理装置10で実行されるMPIプログラム及び情報処理装置20で実行されるMPIプログラムに分類する。情報処理装置10は、情報処理装置20で実行されるMPIプログラムの実行内容を特定する情報を情報処理装置20に送信する。情報処理装置20は、情報処理装置10から受信した、情報処理装置20で実行されるMPIプログラムの実行内容を特定する情報に基づいて、MPIプログラムを実行する。このように、情報処理システム1によれば、ユーザは、複数のMPIプログラムを実行させたい場合でも、1つの実行コマンドで実行可能となる。そのため、情報処理システム1によれば、ユーザは、複数のMPIプログラムを実行するためのコマンドを利用することで、複数のMPIプログラムをまとめた一つのMPIプログラムを用意する必要がない。また、情報処理システム1によれば、ユーザは、各MPIプログラムの実行完了を待つ必要もない。したがって、実施の形態1にかかる情報処理システム1によれば、ユーザ利便性を向上できる。
【0023】
(実施の形態2)
続いて、実施の形態2について説明する。実施の形態2は、実施の形態1を具体的にした実施の形態である。まず、実施の形態2の詳細を説明する前に、具体例を挙げて、本実施の形態の課題事項について整理する。
【0024】
MPIプログラムを実行するシステムは、例えば、host1及びhost2のような名称が付された2つ情報処理装置がネットワークを介して接続されており、互いに通信可能な構成をしている。2つの情報処理装置は、それぞれ、以下に示す実行コマンドを入力可能に構成され、以下の実行コマンドに従って、指定された情報処理装置において、指定されたMPIプログラムが実行される。なお、以下の実行コマンドは、MPIプログラムを実行するシステムの一例であるNEC Auroraにおいて、当該システムに対応するメッセージ通信ライブラリであるNECMPIに対応するMPIプログラムが実行される実行コマンドの一例である。また、以降の説明では、実行コマンドを、単に「コマンド」として記載することがある。
<コマンド例1>
<コマンド例2>
<コマンド例3>
【0025】
上記コマンドのうち、mpirunは、MPIの実行プログラム(MPIプログラム)の起動コマンドであり、MPIプログラムを起動することを表している。-hostは、MPIプロセスが起動されるホスト(情報処理装置)を指定する引数であり、-hostの次に記載されたホスト名の情報処理装置で、指定されたMPIプログラムが実行されることを表している。-vhは、ベクトルホストを表している。-veは、ベクトルエンジンを表している。-npは、MPIプログラムを実行するプロセス(MPIプロセス)の数を指定する引数で、-npの次に記載された数のプロセスにより、MPIプログラムが実行されることを表している。なお、以降の説明では、引数を、オプションと称して記載することがある。
【0026】
上記内容を踏まえてまとめると、コマンド例1は、host1の情報処理装置のベクトルホストにおいて、4つのプロセスでa.outという名称のプログラムを実行するコマンドを表している。コマンド例2は、host1の情報処理装置のベクトルエンジンにおいて、4つのプロセスでb.outという名称のプログラムを実行することを表している。コマンド例3は、host2の情報処理装置のベクトルエンジンにおいて、4つのプロセスでc.outという名称のプログラムを実行することを表している。
【0027】
これらのコマンドは、ネットワークで接続された、いずれかの情報処理装置において、リモートで実行可能に構成される。例えば、上記した3つのコマンドが、host1の情報処理装置に入力された場合、host1の情報処理装置が、コマンド例1及び2に含まれるプログラム(a.out及びb.out)を実行する。host1の情報処理装置は、コマンド例3に含まれるプログラム(c.out)を実行することを、host2の情報処理装置に送信する。host2の情報処理装置は、host1の情報処理装置から受信した内容に基づいてc.outを実行する。
【0028】
例えば、上記した3つのコマンドが、host2の情報処理装置に入力された場合、host2の情報処理装置は、コマンド例1及び2に含まれるa.out及びb.outのプログラムを実行することを、host1の情報処理装置に送信する。host1の情報処理装置は、host2の情報処理装置から受信した内容に基づいてa.out及びb.outを実行する。host2の情報処理装置は、コマンド例3に含まれるプログラム(c.out)を実行する。
【0029】
ところで、ユーザが、複数のMPIプログラムの実行を1つのコマンドで実現する場合、ユーザは、各MPIプログラムを実行するコマンドを記述したMPIプログラムを用意する。そして、ユーザが、当該MPIプログラムを実行するコマンドをhost1又はhost2の情報処理装置に入力することで、実行されたMPIプログラムに設定された複数のMPIプログラムが実行される。具体的には、ユーザが、例えば、a.out、b.out及びc.outを含む複数のMPIプログラムを1つのコマンドで実行したい場合、コマンド例1~3で示した3つのコマンドを記述したd.outというプログラムを用意する。そして、ユーザがd.outを実行するためのコマンドをhost1又はhost2の情報処理装置に入力することで、a.out、b.out及びc.outが実行される。
【0030】
上記コマンド例1~3で示したように、MPIプログラムを実行するためのコマンドには、MPIプログラムが実行されるhost(情報処理装置)、当該hostにおけるハードウェア、及び当該ハードウェアリソースの指定が必要である。一般的に、プログラムにより実行される内部処理は、それぞれ、適したハードウェアリソースがあり、適したハードウェアリソースにおいて処理されることで、効率的なMPIプログラムの実行を実現する。そのため、最適なハードウェアリソースを、各MPIプログラムの実行に割り当てることが重要となる。しかしながら、大規模な情報処理システムにおいて、最適なハードウェアリソースを、各MPIプログラムを実行する際に割り当てることは容易ではない。そのため、ユーザは、各MPIプログラムに割り当てるハードウェアリソースを容易に変更できるように、コマンド例1~3のコマンドを記述した3つのプログラム(a.out、b.out及びc.out)を内包するd.outを用意せずに、各々を1つずつ実行することが想定される。
【0031】
ユーザが、a.out、b.out及びc.outの各々を1つずつ実行する場合、ユーザは、a.outを実行するためのコマンドを入力し、a.outの実行完了を待ち、b.outを実行するためのコマンドを入力する。そして、ユーザは、b.outの実行完了を待ち、c.outを実行するためのコマンドを入力する。この場合、ユーザは、各MPIプログラムの実行完了まで待って、次のMPIプログラムを実行するためのコマンドを入力する必要があり、ユーザに負担がかかってしまう。そこで、本実施の形態では、複数のMPIプログラムを1つのコマンドで実行可能とし、かつ、各MPIプログラムに割り当てるハードウェアリソースを容易に変更可能な構成を実現する。
【0032】
また、ユーザが、例えば、a.outが実行されたときに出力される出力結果を用いて、b.outを実行したい場合、ユーザは、a.outに出力結果を出力するファイル等を指定し、さらに、b.outに入力されるファイル等を指定する必要がある。つまり、ユーザは、a.outの出力結果が出力されるファイルと、b.outに入力されるファイルとが一致するように、a.out及びb.outのプログラミングをしなければならい。そのため、ユーザが、例えば、a.outが実行されたときに出力される出力結果を用いて、b.outを実行したい場合等、プログラム間で入出力データを連結したい場合、a.out及びb.outの内容を変更しなければならず、ユーザの負担になる。そこで、本実施の形態では、MPIプログラムの内容を変更せずに、複数のMPIプログラムの間で入出力データを指定(連結)可能な構成を実現する。
【0033】
さらに、近年、気象情報、株取引情報、及びIoT(Internet Of Things)のセンサ情報等、時系列的に、発生し続けるストリームデータ(ストリーミングデータとも称される)が注目されている。ストリームデータは、全てのデータが揃っているバッチデータとは異なり、時間とともに新しいデータが発生し続けるデータである。そのため、MPIプログラムを用いて、ストリームデータを処理することのニーズが高まってきているが、MPIプログラムでは、ストリームデータのサポートができていない。また、このようなニーズに応えるために、ストリームデータに対応するためのライブラリを実装し、ライブラリを用いて、特定の手続きの下、プログラミングを行うという提案(例えば、MPIStreams)が検討されつつある。しかしながら、このライブラリを用いたプログラミングを行うことは容易ではなく、ユーザの熟練度を高める必要があるが、ユーザの熟練度を高めるためには、多大な時間を要するため、ストリームデータに対応するMPIプログラムを実現することが難しい。そこで、本実施の形態では、上記したライブラリを実装しなくても、MPIプログラムがストリームデータを実行可能な構成を実現する。言い換えると、本実施の形態では、プログラミングを行うユーザのスキルに依存せずに、MPIプログラムがストリームデータを処理可能な構成を実現する。
【0034】
<情報処理システムの構成例>
図2を用いて、実施の形態2にかかる情報処理システム100の構成例を説明する。
図2は、実施の形態2にかかる情報処理システムの構成例を示すブロック図である。情報処理システム100は、MPIプログラムを実行可能な情報処理システムである。情報処理システム100は、情報処理装置30と、情報処理装置40とを備える。なお、情報処理システム100は、2つの情報処理装置(情報処理装置30及び40)を備える構成であるが、3つ以上の情報処理装置を備えてもよい。
【0035】
情報処理装置30及び40は、ネットワークNを介して、互いに接続される。情報処理装置30及び40は、ネットワークNを介して、互いに通信可能に構成される。情報処理装置30及び40は、MPIプログラムを実行可能な情報処理装置である。情報処理装置30及び40は、コンピュータ装置でもよく、サーバ装置でもよい。情報処理装置30及び40は、MPIプログラムを実行するためのコマンドを入力可能に構成され、MPIプログラムを実行するために、互いに連携をして、入力されたコマンドに含まれるMPIプログラムを実行する。なお、本実施の形態では、情報処理装置30には、host1という名称が設定されており、情報処理装置40には、host2という名称が設定されていることとして説明する。
【0036】
<情報処理装置の構成例>
次に、情報処理装置30及び40の構成例について説明する。情報処理装置30及び40の構成例は、基本的に同様である。そのため、情報処理装置30の構成例を用いて、MPIプログラムの実行を指示するコマンド(実行コマンド)を入力する場合の情報処理装置30及び40の構成例について説明する。その後、情報処理装置40の構成例を用いて、MPIプログラムの実行を指示するコマンドに基づいてMPIプログラムを実行する場合の情報処理装置30及び40の構成例について説明する。
【0037】
情報処理装置30は、入力部31と、演算部32と、通信部33と、記憶部34とを備える。また、情報処理装置30は、入力装置301と、出力装置302と接続されている。なお、入力装置301及び出力装置302は、情報処理装置30の外部に設けられてもよいし、内部に設けられてもよい。
【0038】
入力部31は、入力装置301を介して、ユーザが入力したコマンドを入力する。入力装置301は、例えば、マウス及びキーボード等を含むように構成される。ユーザが入力装置301に、コマンドを入力した場合、入力部31は、ユーザが入力したコマンドを、入力装置301から取得することで、情報処理装置30に入力する。
【0039】
本実施の形態では、上述した各課題を解決するために、新規の引数(オプション)である拡張オプションを導入する。入力部31は、拡張オプションを含むコマンド入力可能に構成される。以下、新規オプションの説明及び入力部31の構成例の詳細を説明する。以降の説明では、前提として、a.out、b.out及びc.outはMPIプログラムを表しており、a.out及びb.outが情報処理装置30の記憶部34に格納され、c.outが情報処理装置40の記憶部44に格納されていることとする。なお、以下に示す拡張オプションは、一例であるため、他の拡張オプションとして定義されてもよい。
【0040】
まず、複数のMPIプログラムを1つのコマンドで実行できるコマンドを導入する。また、複数のプログラムの各々の実行を指定できるように、-alias拡張オプションを導入する。例えば、ユーザが、入力装置301に、複数のMPIプログラムを実行することを指示するコマンドであって、-alias拡張オプションを含むコマンドを入力した場合、入力部31は、入力装置301を介して、当該コマンドを情報処理装置30に入力する。なお、本実施の形態では、各行が指定するMPIプログラムを実行するための拡張オプションが-aliasであることとして説明するが、当該拡張オプションは、-aliasに限られず、異なる拡張オプションが定義されてもよい。
【0041】
-alias拡張オプションを含み、複数のMPIプログラムを実行するためのコマンドの一例を以下に示す。
<コマンド例4>
【0042】
コマンド例4は、-aliasが記載された各行が、それぞれ、a.out、b.out、及びc.outを実行することを表している。コマンド例4のうち、mpirun及び-aliasが記載された、上から2つの行には、「\」が付与されている。このように、mpirun、及びa.out、及びb.outの各々を実行することを示す-aliasの行の最後に「\」を設定することで、mpirunを実行し、さらに、3つの-aliasの行が指定するMPIプログラムを実行することを表した1つのコマンドを実現する。
【0043】
-alias拡張オプションは、プログラム実行単位に対する別名を表しており、「a」を実行することで、「mpirun -host host1 -vh -np 4 ./a.out」コマンドが実行されることを表している。各-aliasが記載された行には、「-host host1 -vh -np 4 ./a.out」のように、各プログラムに割り当てるハードウェアリソースを設定する形式となっている。そのため、上記コマンドにより、複数のMPIプログラムを1つのコマンドで実行可能としつつ、各プログラムに割り当てるハードウェアリソースを変更可能とする。
【0044】
次に、複数のMPIプログラムの間で入出力データを指定できるように、-from拡張オプション及び-to拡張オプションを導入する。言い換えると、-from拡張オプション及び-to拡張オプションにより、複数のMPIプログラムの間で入出力データを連結させる。-from拡張オプションは、-fromの次に記載されたMPIプログラムが出力した出力結果を使用して、MPIプログラムを実行することを示すオプションである。言い換えると、-from拡張オプションは、-fromの次に記載されたMPIプログラムが出力した出力結果を入力データとしてMPIプログラムを実行することを示している。-to拡張オプションは、-toの次に記載されたMPIプログラムに、実行したMPIプログラムの出力結果を入力することを指定するオプションである。言い換えると、-to拡張オプションは、-toの次に記載されたMPIプログラムが、実行したMPIプログラムの出力結果を使用してMPIプログラムを実行することを示すオプションである。なお、本実施の形態では、複数のMPIプログラムの間で入出力データを指定する拡張オプションが-to及び-fromであることとして説明するが、当該拡張オプションは、-to及び-fromに限られず、異なる拡張オプションが定義されてもよい。
【0045】
例えば、ユーザが、入力装置301に、複数のMPIプログラムを実行することを指示するコマンドであって、-from拡張オプションを含むコマンドを入力した場合、入力部31は、入力装置301を介して、当該コマンドを情報処理装置30に入力する。例えば、ユーザが、入力装置301に、複数のMPIプログラムを実行することを指示するコマンドであって、-to拡張オプションを含むコマンドを入力した場合、入力部31は、入力装置301を介して、当該コマンドを情報処理装置30に入力する。
【0046】
-from拡張オプション及び-to拡張オプションを含むコマンドの一例を以下に示す。
<コマンド例5>
【0047】
コマンド例5は、mpirun及び-aliasが記載された2つの行に、「\」が設定されている。そのため、コマンド例5は、a.out、b.out及びc.outを実行する1つのコマンドであることを表している。1つ目の-aliasが記載された行には、「-to b」が記載されている。これは、a.outが出力した出力結果をb.outに入力することを表している。言い換えると、1つ目の-aliasが記載された行は、a.outが出力した出力結果を使用して、b.outを実行することを表している。また、3つ目の-aliasが記載された行には、「-from a」が記載されている。これは、a.outが出力した出力結果を入力データとしてc.outに当該入力データを入力することを表している。言い換えると、3つ目の-aliasが記載された行は、a.outが出力した出力結果を使用して、c.outを実行することを表している。
【0048】
また、-to拡張オプション及び-from拡張オプションに付随して、-to及び-fromに関連する出力結果の送信処理に関連する-direct拡張オプションを導入する。-direct拡張オプションは、バッファ間で直接転送するのか、バッファ間でファイルを介して転送するのかを指定するオプションである。言い換えると、-direct拡張オプションは、-to及び-fromに関連する出力結果を、ファイルに出力するのか否かを指定するオプションである。-direct拡張オプションは、-directの次に、設定値を設定することで、有効であるのか、無効であるのかを指定するオプションである。-directの次に、「1」が設定されている場合、-direct拡張オプションが有効であることを示し、-to及び-fromに関連する出力結果を、バッファ間で直接転送することを示している。また、-directの次に、「0」が設定されている場合、-direct拡張オプションが無効であることを示し、-to及び-fromに関連する出力結果を、出力結果をファイルに出力し、出力されたファイルに基づいてデータを送受信することを表している。なお、本実施の形態では、-to及び-fromに関連する出力結果の送信処理を直接転送するのかを指定する拡張オプションが-directであることとして説明するが、当該拡張オプションは、-directに限られず、異なる拡張オプションが定義されてもよい。また、本実施の形態では、-directが有効であるのか無効であるのかを示す設定値が、「1」又は「0」であることとして説明するが、「1」又は「0」の代わりに、「ON」又は「OFF」が使用されてもよく、異なる設定値としてもよい。
【0049】
例えば、ユーザが、入力装置301に、複数のMPIプログラムを実行することを指示するコマンドであって、-direct拡張オプションを含むコマンドを入力した場合、入力部31は、入力装置301を介して、当該コマンドを情報処理装置30に入力する。
【0050】
-direct拡張オプションを含むコマンドの一例を以下に示す。
<コマンド例6>
【0051】
コマンド例6は、mpirun及び-aliasが記載された2つの行に、「\」が設定されている。そのため、コマンド例6は、a.out、b.out及びc.outを実行する1つのコマンドであることを表している。1つ目の-aliasが記載された行には、「-to b」が記載されている。これは、a.outの出力結果をb.outに入力することを表している。3つ目の-aliasが記載された行には、「-from a」が設定されている。これは、a.outの出力結果を、c.outの入力データとして入力することを表している。また、コマンド例6には、-directの次に、有効であることを示す「1」が設定されている。これは、a.outの出力結果が出力される送信バッファから、b.outに入力されるデータを格納する受信バッファに直接転送されることを表している。同様に、コマンド例6では、a.outの出力結果が送信バッファから、c.outに入力されるデータを格納する受信バッファに直接転送されることを表している。
【0052】
なお、-directの次に、無効であることを示す「0」が設定されている場合、a.outの出力結果をファイルに出力し、出力されたファイルのうち、指定された出力結果が、b.out及びc.outの受信バッファに転送されることを表す。また、コマンド例6では、-directが、各MPIプログラムの実行を指定する-aliasの行よりも上に設定されている。そのため、コマンド例6は、全てのMPIプログラムに対して、-direct拡張オプションが有効であることを示す。なお、各MPIプログラムに対して、-direct拡張オプションが有効であるのか否かが設定されてもよい。
【0053】
次に、MPIプログラムがストリームデータを実行できるように、-stream拡張オプションを導入する。-stream拡張オプションは、MPIプログラムが処理する対象データがストリームデータであるか否かを示す拡張オプションである。-stream拡張オプションは、-streamの次に、設定値を設定することで、有効であるのか、無効であるのかを指定するオプションである。-streamの次に、「1」が設定されている場合、-stream拡張オプションが有効であることを示し、MPIプログラムが処理する対象データがストリームデータであることを表す。また、-streamの次に、「0」が設定されている場合、-stream拡張オプションが無効であることを示し、MPIプログラムが処理する対象データがストリームデータではないことを表す。言い換えると、-streamの次に、無効であることを示す「0」が設定されている場合、MPIプログラムが処理する対象データがバッチデータであることを表す。なお、本実施の形態では、MPIプログラムが処理する対象データがストリームデータであるか否かを示す拡張オプションが-streamであることとして説明するが、当該拡張オプションは、-streamに限られず、異なる拡張オプションが定義されてもよい。また、本実施の形態では、-streamが有効であるのか無効であるのかを示す設定値が、「1」又は「0」であることとして説明するが、「1」又は「0」の代わりに、「ON」又は「OFF」が使用されてもよく、異なる設定値としてもよい。
【0054】
例えば、ユーザが、入力装置301に、複数のMPIプログラムを実行することを指示するコマンドであって、-stream拡張オプションを含むコマンドを入力した場合、入力部31は、入力装置301を介して、当該コマンドを情報処理装置30に入力する。
【0055】
-stream拡張オプションを含むコマンドの一例を以下に示す。
<コマンド例7>
【0056】
コマンド例7は、mpirun及び-aliasが記載された2つの行に、「\」が設定されている。そのため、コマンド例7は、a.out、b.out及びc.outを実行する1つのコマンドであることを表している。コマンド例7には、-streamの次に、有効であることを示す「1」が設定されている。これは、a.out、b.out及びc.outが処理する対象データがストリームデータであることを表している。なお、-streamの次に、無効であることを示す「0」が設定されている場合、a.out、b.out及びc.outが処理する対象データがストリームデータでなく、バッチデータであることを表す。また、コマンド例7では、-streamが、各MPIプログラムの実行を指定する-aliasの行よりも上に設定されている。そのため、コマンド例7は、全てのMPIプログラムに対して、-stream拡張オプションが有効であることを示す。なお、各MPIプログラムに対して、-stream拡張オプションが有効であるのか否かが設定されてもよい。
【0057】
演算部32は、入力部31に入力されたコマンドを解析する。演算部32は、入力部31に入力されたコマンドに、拡張オプションが含まれるか否かを判定する。演算部32は、入力部31に入力されたコマンドに、拡張オプションが含まれていないと判定すると、入力部31に入力されたコマンドに設定された1つのMPIプログラムを実行する。演算部32は、入力部31に入力されたコマンドに、拡張オプションが含まれていると判定すると、拡張オプションに応じた処理を実行する。
【0058】
演算部32は、入力されたコマンドに拡張オプションが含まれている場合、入力されたコマンドに含まれるMPIプログラム毎に、MPIプログラムの実行内容を設定した設定ファイルを生成する。コマンド例4を用いて説明すると、コマンド例4には、a.out、b.out及びc.outが含まれるため、演算部32は、a.outのための設定ファイル、b.outのための設定ファイル、及びc.outのための設定ファイルを生成する。演算部32は、a.outのための設定ファイルに、拡張オプションを含む引数(オプション)、及び各引数の設定値を設定してもよい。もしくは、演算部32は、a.outのための設定ファイルに、「-alias a -host host1 -vh -np 4 ./a.out」のように、入力されたコマンドのうち、a.outに関連するコマンド内容を抽出して、抽出されたコマンド内容を設定してもよい。演算部32は、a.outのための設定ファイルと同様にして、b.outのための設定ファイル、及びc.outのための設定ファイルに、実行内容を特定可能な情報を設定する。演算部32は、情報処理装置40において実行されるMPIプログラムのための設定ファイルを、通信部33を介して、情報処理装置40に送信する。
【0059】
また、演算部32は、各設定ファイルを出力装置302に出力可能に構成されている。出力装置302は、例えば、ディスプレイ等を含むように構成される。演算部32が、例えば、入力装置301を介して、ユーザから設定ファイルの出力要求を受信した場合、設定ファイルを出力装置302に出力する。
【0060】
演算部32は、複数のMPIプログラムを実行することを指示するコマンドが入力された場合、情報処理装置30において実行されるMPIプログラムと、情報処理装置40において実行されるMPIプログラムとに分類する。演算部32は、入力されたコマンドが、-alias拡張オプションを含む場合、1つのコマンドで複数のMPIプログラムが実行されると判定してもよい。
【0061】
演算部32は、情報処理装置40において実行されるMPIプログラムを識別する情報を、例えば、実行プログラムテーブルに設定してもよい。MPIプログラムを識別する情報は、MPIプログラムのファイル名でもよい。もしくは、演算部32は、情報処理装置30において実行されるMPIプログラムを識別する情報を、実行プログラムテーブルに設定してもよい。演算部32は、コマンドに設定された、各MPIプログラムを識別する情報と、各MPIプログラムを実行するホスト名(例えば、host1又はhost2)とを対応付けて、実行プログラムテーブルに設定してもよい。演算部32は、実行プログラムテーブルを、通信部33を介して、情報処理装置40に送信する。
【0062】
演算部32は、-from拡張オプション及び-to拡張オプションを含むコマンドが入力された場合、-from拡張オプション及び-to拡張オプションにより入出力データを連結するMPIプログラムが実行される情報処理装置を特定する。つまり、演算部32は、-from拡張オプション及び-to拡張オプションにより入出力データを連結する連結元のMPIプログラム及び連結先のMPIプログラムが実行される情報処理装置を特定する。演算部32は、実行プログラムテーブルに基づいて、-from及び-toに関連するMPIプログラムが情報処理装置30で実行されるMPIプログラムに含まれるのか、情報処理装置40で実行されるMPIプログラムに含まれるのかを判定する。
【0063】
演算部32は、連結元のMPIプログラム及び連結先のMPIプログラムが情報処理装置30で実行される場合、連結元のMPIプログラムに対して送信バッファを設定し、連結先のMPIプログラムに対して受信バッファを設定する。演算部32は、連結元のMPIプログラム及び連結先のMPIプログラムの少なくとも1つが情報処理装置40で実行される場合、通信部33を介して、演算部42に対して、送信バッファ及び受信バッファの少なくとも1つを設定することを要求する。演算部32は、通信部33を介して、例えば、バッファ設定要求を情報処理装置40に送信することで、演算部42に対して、送信バッファ及び受信バッファの少なくとも1つを設定することを要求する。
【0064】
コマンド例5を用いて説明すると、コマンド例5には、「-alias a -host host1 -vh -np 4 ./a.out -to b\」が記載されている。そのため、演算部32は、-toにより連結されるMPIプログラムが、a.out及びb.outであることを特定する。演算部32は、実行プログラムテーブルに基づいて、a.out及びb.outが、host1である情報処理装置30で実行されるMPIプログラムに含まれるのか否かを実行プログラムテーブルに基づいて判定する。
【0065】
コマンド例5では、演算部32は、実行プログラムテーブルにc.outを設定するため、a.out及びb.outが、host1である情報処理装置30で実行されるMPIプログラムに含まれると判定する。演算部32は、a.outのために、記憶部34に送信バッファを設定し、b.outのために、記憶部34に受信バッファを設定する。演算部32は、a.outの出力結果が送信バッファに出力されるようにa.outを実行する。
【0066】
演算部32は、a.outの出力結果が送信バッファに出力されると、出力結果を受信バッファに送信する。演算部32は、出力結果が格納された受信バッファから取得したデータを入力データとしてb.outを実行する。演算部32は、送信バッファから受信バッファに出力結果が送信されることを待って、次の処理を実行する。なお、演算部32は、a.outの出力結果を受信バッファに送信する送信処理を-direct拡張オプションを用いて行う。-diret拡張オプションを用いた送信処理については、後述する。
【0067】
コマンド例5を用いてさらに説明すると、コマンド例5には、「-alias c -host host1 -ve -np 4 ./c.out -from a」が記載されている。そのため、演算部32は、-fromにより連結されるMPIプログラムが、a.out及びc.outであることを特定する。演算部32は、a.out及びc.outが、host1である情報処理装置30で実行されるMPIプログラムに含まれるのか否かを、実行プログラムテーブルの内容に基づいて判定する。
【0068】
コマンド例5では、演算部32は、実行プログラムテーブルにc.outを設定するため、a.outが、host1である情報処理装置30で実行されるMPIプログラムに含まれると判定する。演算部32は、c.outがhost1である情報処理装置30で実行されるMPIプログラムに含まれないと判定する。演算部32は、a.outのために、記憶部34に送信バッファを設定する。演算部32は、c.outのために受信バッファを設定することを要求するバッファ設定要求を、通信部33を介して、情報処理装置40に送信する。演算部32は、a.outの出力結果が送信バッファに出力されるようにa.outを実行する。
【0069】
演算部32は、a.outの出力結果が送信バッファに出力されると、通信部33を介して、出力結果を、情報処理装置40が設定した受信バッファに送信する。つまり、演算部32は、通信部33を介して、連結元のMPIプログラムであるa.outの出力結果を、連結先のMPIプログラムのために設定された受信バッファに送信する。演算部32は、送信バッファから受信バッファに出力結果が送信されることを待って、次の処理を実行する。
【0070】
演算部32は、-direct拡張オプションを含むコマンドが入力された場合、-from拡張オプション及び-to拡張オプションにより指定された入出力データの送信処理を、-directが有効か無効かに応じた処理で実行する。演算部32は、各MPIプログラムを実行する際に、設定ファイルを確認し、-direct拡張オプションの設定値が有効であることを示す「1」であるか否かを判定する。
【0071】
-directの次に、-directの次に、「1」が設定され、拡張オプションが有効であり、受信バッファが情報処理装置30に設定される場合、演算部32は、送信バッファから受信バッファに転送する。言い換えると、-direct拡張オプションが、出力結果をファイルに出力することを示さない場合、演算部32は、送信バッファから受信バッファに、連結元のMPIプログラムの出力結果を連結先のMPIプログラムが読み込む受信バッファに転送する。-direct拡張オプションが有効であり、受信バッファが情報処理装置40に設定される場合、演算部32は、通信部33に、RDMA(Remote Direct Memory Access)方式で、送信バッファから受信バッファに転送することを指示する。RDMA方式は、OS(Operating System)を介さずに、メモリからメモリに高速にデータを転送できる方式である。
【0072】
-directの次に、「0」が設定され、-direct拡張オプションが無効であり、受信バッファが情報処理装置30に設定される場合、演算部32は、連結元のMPIプログラムの出力結果を送信バッファから取得して、出力結果をファイルに書き出して出力する。演算部32は、出力されたファイルのうち、連結先のMPIプログラムの入力データに使用される出力結果のデータを指定して、送信バッファから受信バッファに転送する。つまり、演算部32は、連結元のMPIプログラムの出力結果のうち、連結先のMPIプログラムが使用するデータのみを受信バッファに送信する。なお、-direct拡張オプションが無効であり、受信バッファが情報処理装置30に設定される場合、演算部32は、送信バッファに出力された出力結果を、受信バッファに送信してもよい。そして、演算部32は、連結先のMPIプログラムを実行する場合、連結先のMPIプログラムに入力されるデータのみを受信バッファから取得して連結先のMPIプログラムを実行してもよい。
【0073】
-direct拡張オプションが無効であり、受信バッファが情報処理装置40に設定される場合、演算部32は、連結元のMPIプログラムの出力結果を送信バッファから取得して、出力結果をファイルに書き出して出力する。演算部32は、出力されたファイルのうち、連結先のMPIプログラムの入力データに使用される出力結果のデータを、通信部33に指示する。演算部32は、送信バッファから受信バッファに出力結果が送信されることを待って、次の処理を実行する。なお、-direct拡張オプションが無効であり、受信バッファが情報処理装置40に設定される場合、演算部32は、通信部33を介して、送信バッファに出力された出力結果を、受信バッファに送信してもよい。そして、演算部32は、出力結果のうち、連結先のMPIプログラムが読み込むデータ範囲を、通信部33を介して、連結先のMPIプログラムを実行する情報処理装置40に送信してもよい。この場合、演算部42は、受信バッファから、受信したデータ範囲のデータを取得して、連結先のMPIプログラムを実行してもよい。
【0074】
演算部32は、-stream拡張オプションを含むコマンドが入力され、-streamの次に「1」が設定されている場合、情報処理装置30において実行されるMPIプログラムが処理する対象データがストリームデータであると判定する。つまり、演算部32は、-stream拡張オプションが有効である場合、情報処理装置30において実行されるMPIプログラムが処理する対象データがストリームデータであると判定する。演算部32は、各MPIプログラムを実行する際に、設定ファイルを確認し、-stream拡張オプションの設定値が有効であることを示す「1」であるか否かを判定する。
【0075】
-stream拡張オプションが有効である場合、演算部32は、各MPIプログラムが処理する対象データのうち、重複しない所定のデータ量ずつを入力データ(処理データ)として、各MPIプログラムに入力して、当該MPIプログラムを実行する。
【0076】
演算部32は、-stream拡張オプションを含むコマンドが入力され、-streamの次に「0」が設定されている場合、情報処理装置30において実行されるMPIプログラムが処理する対象データがストリームデータでなく、バッチデータであることを認識する。つまり、-stream拡張オプションが無効である場合、情報処理装置30において実行されるMPIプログラムが処理する対象データがバッチデータであることを認識する。
【0077】
-stream拡張オプションが無効である場合、演算部32は、各MPIプログラムが処理する全ての対象データを、情報処理装置30において実行されるMPIプログラムに入力して、当該MPIプログラムを実行する。
【0078】
通信部33は、実行プログラムテーブル、及び情報処理装置40において実行されるMPIプログラムのための設定ファイルを情報処理装置40に送信する。つまり、通信部33は、実行プログラムテーブル及び設定ファイルを送信することで、情報処理装置40において実行されるMPIプログラムの実行内容を特定する情報を情報処理装置40に送信する。
【0079】
通信部33は、連結元のMPIプログラムが情報処理装置30で実行されるMPIプログラムであり、連結先のMPIプログラムが情報処理装置40で実行されるMPIプログラムである場合、バッファ設定要求を情報処理装置40に送信する。バッファ設定要求は、連結先のMPIプログラムのために受信バッファを設定することを要求する信号である。
【0080】
通信部33は、連結元のMPIプログラムが情報処理装置30で実行されるMPIプログラムであり、連結先のMPIプログラムが情報処理装置40で実行されるMPIプログラムである場合、連結元のMPIプログラムの出力結果を受信バッファに転送する。
【0081】
通信部33は、-direct拡張オプションが有効であり、受信バッファが情報処理装置40に設定される場合、連結元のMPIプログラムの出力結果を、連結先のMPIプログラムのために設定された受信バッファに、RDMA方式で転送する。
【0082】
通信部33は、-direct拡張オプションが無効であり、受信バッファが情報処理装置40に設定される場合、演算部32から指示されたデータを、送信バッファから受信バッファに転送する。つまり、通信部33は、連結元のMPIプログラムの出力結果のうち、連結先のMPIプログラムの入力データに使用される出力結果のみを情報処理装置40の受信バッファに送信する。
【0083】
記憶部34は、情報処理装置30において実行されるMPIプログラムを格納する。記憶部34は、演算部32の制御に応じて、送信バッファ及び受信バッファとして使用されるメモリ領域を設定する。記憶部34は、情報処理装置30において実行されるMPIプログラムが処理する対象データを記憶する。記憶部34は、当該対象データが設定されたファイルを記憶する。なお、対象データが設定されたファイルは、入力部31が、入力装置301を介して、入力して、記憶部34に記憶されてもよいし、記憶部34に予め記憶されてもよい。
【0084】
次に、情報処理装置40の構成例について説明する。情報処理装置40は、情報処理装置30において入力されたコマンドに基づいて、MPIプログラムを実行する。情報処理装置30及び40は、基本的に同様の構成をしている。そのため、情報処理装置30は、以下に説明する情報処理装置40の構成も備え、情報処理装置40は、情報処理装置30の構成も備える。なお、以降の説明では、情報処理装置40の構成について、情報処理装置30と同様の構成についての説明は適宜割愛される。
【0085】
情報処理装置40は、入力部41と、演算部42と、通信部43と、記憶部44とを備える。
入力部41は、情報処理装置30の入力部31と同様の構成であるため、説明を割愛する。
【0086】
次に、演算部42の構成について説明する前に、通信部43について説明する。
通信部43は、実行プログラムテーブル、及び情報処理装置40において実行されるMPIプログラムのための設定ファイルを情報処理装置30の通信部33から受信する。つまり、通信部43は、実行プログラムテーブル及び設定ファイルを受信することで、情報処理装置40において実行されるMPIプログラムの実行内容を特定する情報を情報処理装置30から受信する。
【0087】
通信部43は、連結元のMPIプログラムが情報処理装置30で実行されるMPIプログラムであり、連結先のMPIプログラムが情報処理装置40で実行されるMPIプログラムである場合、連結元のMPIプログラムの出力結果を受信する。
【0088】
通信部43は、-direct拡張オプションが有効であり、受信バッファが情報処理装置40に設定される場合、連結元のMPIプログラムの出力結果をRDMA方式で、通信部33から受信する。
【0089】
通信部43は、-direct拡張オプションが無効であり、受信バッファが情報処理装置40に設定される場合、連結元のMPIプログラムの出力結果のうち、演算部32が指定したデータを、通信部33から受信する。つまり、通信部43は、連結元のMPIプログラムの出力結果のうち、連結先のMPIプログラムの入力データに使用される出力結果のみを、通信部33から受信する。
【0090】
次に、演算部42について説明する。
演算部42は、情報処理装置40において実行されるMPIプログラムの実行内容を特定する情報に基づいて、当該MPIプログラムを実行する。具体的には、演算部42は、実行プログラムテーブルに基づいて、実行するMPIプログラムを特定する。また、演算部42は、特定したMPIプログラムの設定ファイルに基づいて、情報処理装置40において実行されるMPIプログラムの実行内容を特定する。演算部42は、特定した実行内容に基づいてMPIプログラムを実行する。
【0091】
演算部42は、通信部43がバッファ設定要求を受信した場合、バッファ設定要求に基づいて、送信バッファ及び受信バッファのうち、少なくとも1つを記憶部44に設定する。
【0092】
演算部42は、連結元のMPIプログラムが情報処理装置30で実行されるMPIプログラムであり、連結先のMPIプログラムが情報処理装置40で実行されるMPIプログラムである場合、受信バッファから連結元のMPIプログラムの出力結果を取得する。演算部42は、取得した出力結果を入力データとして、連結先のMPIプログラムを実行する。
【0093】
演算部42は、MPIプログラムを実行する際、設定ファイルの内容に基づいて、MPIプログラムが処理する対象データがストリームデータであるか否かを判定する。-stream拡張オプションが有効である場合、演算部42は、MPIプログラムが処理する対象データのうち、重複しない所定のデータ量ずつを入力データ(処理データ)として、MPIプログラムに入力して、当該MPIプログラムを実行する。
【0094】
記憶部44は、情報処理装置40において実行されるMPIプログラムが格納される。記憶部44は、演算部42の制御に応じて、送信バッファ及び受信バッファとして使用されるメモリ領域を設定する。記憶部44は、情報処理装置30において実行されるMPIプログラムが処理する対象データを記憶する。記憶部44は、当該対象データが設定されたファイルを記憶する。なお、対象データが設定されたファイルは、入力部41が、入力装置401を介して、入力して、記憶部44に記憶されてもよいし、記憶部44に予め記憶されてもよい。
【0095】
<情報処理システムの動作例>
続いて、情報処理システム100の動作例について説明する。
まず、
図3を用いて、情報処理システム100の動作概要について説明する。
図3は、実施の形態2にかかる情報処理システムの動作例を説明するための図である。
【0096】
入力部31は、入力装置301を介して、ユーザが入力したコマンドを入力する(ステップS1)。ユーザが、入力装置301に、例えば、
図3の上側に記載されているコマンド例8を入力する。host1である情報処理装置30の入力部31は、入力装置301を介して、ユーザが入力したコマンドを入力する。
【0097】
host1である情報処理装置30の演算部32は、入力されたコマンドを解析する(ステップS2)。演算部32は、入力部31に入力されたコマンドに、拡張オプションがあるかを判定する。入力されたコマンドには、-alias拡張オプションを含むコマンドが入力されている。そのため、演算部32は、1つのコマンドにより、複数のMPIプログラムの実行を指示していることを判定してもよい。演算部32は、host1である情報処理装置30において実行されるMPIプログラムと、host2である情報処理装置40において実行されるMPIプログラムとに分類する。
【0098】
host1である情報処理装置30の演算部32は、情報処理装置30において実行されるMPIプログラムを実行し、host2である情報処理装置40の演算部42は、情報処理装置40において実行されるMPIプログラムを実行する(ステップS3)。演算部32及び演算部42は、入力されたコマンドに含まれる、-alias以外の拡張オプションに応じた処理を実行する。
【0099】
続いて、情報処理システム100の動作例の詳細を説明する。
図4及び
図5を用いて、host1である情報処理装置30にコマンドが入力されて、MPIプログラムが実行されるまでの動作例を説明する。
図4は、実施の形態2にかかる情報処理システムの動作例を示すフローチャートである。
【0100】
入力部31は、入力装置301を介して、ユーザが入力したコマンドを入力する(ステップS11)。ユーザが、入力装置301に、例えば、コマンド例8で示すコマンドを入力する。host1である情報処理装置30の入力部31は、入力装置301を介して、ユーザが入力したコマンドを入力する。
【0101】
演算部32は、入力されたコマンドを解析し、拡張オプションがあるかを判定する(ステップS12)。
拡張オプションがある場合(ステップS12のYES)、演算部32は、ステップS14以降を実行する。
拡張オプションがない場合(ステップS12のNO)、演算部32は、mpirunを呼び出し、1つのMPIプログラムを実行する。なお、実行されるMPIプログラムが、情報処理装置40で実行されるMPIプログラムである場合、演算部32は、通信部33を介して、情報処理装置40に、実行されるMPIプログラムの実行内容を特定する情報を送信する。演算部42が、通信部43を介して、MPIプログラムの実行内容を特定する情報を取得して、当該情報に応じて、MPIプログラムを実行する。
【0102】
ステップS14において、演算部32は、入力されたコマンドにより実行されるMPIプログラム毎に、設定ファイルを生成する(ステップS14)。コマンド例8の場合、実行されるMPIプログラムは、a.out、b.out及びc.outであるため、a.out、b.out及びc.outのそれぞれに対して、設定ファイルを生成する。
【0103】
ここで、
図5を用いて、設定ファイルの一例について説明する。
図5は、設定ファイルの一例を示す図である。
図5は、コマンド例8が入力された場合に生成される、a.outの設定ファイルの一例を示している。設定ファイルには、a.outに関連する拡張オプションと、各拡張オプションの設定値とが対応付けて設定される。また、設定ファイルには、a.outの実行内容に関連する引数(オプション)と、各引数の設定値とが対応付けて設定される。
【0104】
コマンド例8のうち、a.outに関連する拡張オプションは、-stream、-direct、-alias、及び-toであり、各設定値は、それぞれ、1、1、a、bである。そのため、演算部32は、各拡張オプションと、各拡張オプションの設定値とを対応付けて設定ファイルに設定する。また、演算部32は、a.outの実行内容に関連する拡張オプション以外の引数(オプション)と、各引数の設定値とを対応付けて設定する。なお、-vhのように、設定値がない引数については、設定値が設定されなくてもよいし、設定値がないことを示す設定値が設定されてもよい。
【0105】
また、演算部32は、入力されたコマンドに、-from拡張オプション及び-to拡張オプションが含まれている場合、入出力データが連結されるMPIプログラムがあるため、連結元のMPIプログラム及び連結先のMPIプログラムの情報を設定ファイルに追加する。例えば、コマンド例8を用いると、-to拡張オプションが、a.out及びb.outに対応付けられたコマンドとなっている。そのため、演算部32は、a.outが連結元のMPIプログラムであり、b.outが連結先のMPIプログラムであることが分かるように、b.outの設定ファイルに、例えば、「from a」を設定する。演算部32は、同様に、c.outの設定ファイルに、例えば、「from b」を設定する。演算部32は、入力されたコマンドに、-from拡張オプションが含まれている場合、-from拡張オプションが設定されたMPIプログラムの設定ファイルに、例えば、「to c」等、連結先のMPIプログラムの情報を設定する。
【0106】
図4に戻り、説明を続ける。
ステップS15において、演算部32は、MPIプログラムを分類する(ステップS15)。1つのコマンドにより複数のMPIプログラムが実行される場合、演算部32は、コマンドに含まれる複数のMPIプログラムを、情報処理装置30において実行されるMPIプログラムと、情報処理装置40において実行されるMPIプログラムとに分類する。
【0107】
演算部32は、実行プログラムテーブルを生成する(ステップS16)。演算部32は、情報処理装置40において実行されるMPIプログラムを識別する情報を、実行プログラムテーブルに設定する。MPIプログラムを識別する情報は、MPIプログラムのファイル名でもよい。なお、演算部32は、情報処理装置30において実行されるMPIプログラムを識別する情報を、実行プログラムテーブルに設定してもよい。
【0108】
通信部33は、実行プログラムテーブル、及び実行プログラムテーブルに設定されたMPIプログラムの設定ファイルを、情報処理装置40の通信部43に送信する(ステップS17)。通信部33は、実行プログラムテーブル、及び実行プログラムテーブルに設定されたMPIプログラムの設定ファイルを送信することで、情報処理装置40において実行されるMPIプログラムの実行内容を特定する情報を送信する。コマンド例8を用いると、演算部32は、実行プログラムテーブルに、c.outを設定する。そのため、通信部33は、実行プログラムテーブル、及びc.outの設定ファイルを通信部43に送信する。
【0109】
演算部32及び演算部42は、送信バッファ及び受信バッファを設定する(ステップS19)。演算部32は、-from拡張オプション及び-to拡張オプションを含むコマンドが入力された場合、-from拡張オプション及び-to拡張オプションにより入出力データを連結するMPIプログラムが実行される情報処理装置を特定する。
【0110】
連結元のMPIプログラム及び連結先のMPIプログラムが情報処理装置30で実行される場合、演算部32は、連結元のMPIプログラムのために、記憶部34に送信バッファを設定し、連結先のMPIプログラムのために、記憶部34に受信バッファを設定する。
【0111】
連結元のMPIプログラムが情報処理装置30で実行され、連結先のMPIプログラムが情報処理装置40で実行される場合、演算部32は、連結元のMPIプログラムのために送信バッファを設定する。演算部32は、連結先のMPIプログラムのための受信バッファを設定することを要求するバッファ設定要求を、通信部33を介して、情報処理装置40に送信する。演算部42は、バッファ設定要求に基づいて、受信バッファを設定する。
【0112】
連結元のMPIプログラム及び連結先のMPIプログラムが情報処理装置40で実行される場合、演算部32は、送信バッファ及び受信バッファについての設定を要求するバッファ設定要求を、通信部33を介して情報処理装置40に送信する。つまり、演算部32は、連結元のMPIプログラムのための送信バッファ及び連結先のMPIプログラムのための受信バッファを設定することを、通信部33及び通信部43を介して演算部42に送信する。演算部42は、連結元のMPIプログラムのための送信バッファ及び連結先のMPIプログラムのための受信バッファを設定する。
【0113】
連結元のMPIプログラムが情報処理装置40で実行され、連結先のMPIプログラムが情報処理装置30で実行される場合、演算部32は、連結先のMPIプログラムのために受信バッファを設定する。演算部32は、連結元のMPIプログラムのための送信バッファを設定することを要求するバッファ設定要求を、通信部33を介して、情報処理装置40に送信する。演算部42は、バッファ設定要求に基づいて、送信バッファを設定する。
【0114】
演算部32及び演算部42は、それぞれ、情報処理装置30及び40で実行されるMPIプログラムを実行する(ステップS19)。
【0115】
続いて、
図6~
図9を用いて、ステップS19において、演算部32及び42が、MPIプログラムを実行する動作例の説明を行う。
図6~
図9は、実施の形態2の情報処理装置の動作例を説明するための図である。
【0116】
まず、
図6について説明する。
図6は、ステップS19において、演算部32が、a.outを実行するときの動作例を示す。演算部32及び42は、それぞれ、情報処理装置30及び40において実行されるMPIプログラムの各々に対して、
図6に示す動作を実行する。コマンド例8を例にして説明すると、演算部32は、a.out及びb.outを実行し、演算部42は、c.outを実行する。そのため、演算部32は、b.outに対しても、
図6を実行し、演算部42は、c.outに対して、
図6に示す動作を実行する。なお、b.out及びc.outに対して実行される動作は、a.outに対して実行される動作と同様であるため、説明を割愛する。
【0117】
演算部32は、設定ファイルを読み込む(ステップS21)。演算部32は、設定ファイルを読み込み、設定ファイルに設定された内容から、連結元のMPIプログラム及び連結先のMPIプログラムに関する情報を取得する。具体的には、演算部32は、設定ファイルに-from拡張オプションが設定されている場合、-from拡張オプションの設定値から、連結元のMPIプログラムを特定する。また、演算部32は、設定ファイルに-to拡張オプションが設定されている場合、-to拡張オプションの設定値から、連結先のMPIプログラムを特定する。また、演算部32は、設定ファイルに-direct拡張オプションが設定されている場合、-direct拡張オプションが有効であるのか否かについての情報も取得する。
【0118】
演算部32は、データ取得準備を行い(ステップS22)、データ取得を行い(ステップS23)、MPIプログラムのソースコードに記述された所定の演算を実行する(ステップS24)。ステップS22において、演算部32は、設定ファイルに設定された内容から、a.outが処理する対象データがストリームデータであるのか否かを判定する。具体的には、演算部32は、設定ファイルに-stream拡張オプションが設定されている場合、-stream拡張オプションの設定値が「1」であれば、a.outが処理する対象データがストリームデータであると判定する。ステップS24では、各MPIプログラムのソースプログラムに記述された演算が実行される。なお、ステップS22及びS23の詳細については後述する。
【0119】
演算部32は、演算結果の出力及び転送準備を行い(ステップS25)、演算部32及び通信部33は、演算結果の出力及び転送を行う(ステップS26)。ステップS25及びS26の詳細については後述する。
【0120】
演算部32は、終了判定及び設定ファイルの更新を行う(ステップS27)。演算部32は、MPIプログラムの終了判定及び設定ファイルの更新を行う。例えば、a.outが処理する対象データがストリームデータである場合等、MPIプログラムを終了しない場合、演算部32は、ステップS21に戻り処理を続ける。
【0121】
次に、
図7について説明する。
図7は、
図6を用いて説明した動作例を記述したa.outのソースプログラムの一例を示す図である。
図7に示すように、a.outのソースプログラムは、上から順に、各種変数の設定を行う記述と、a.outを実行するための初期化準備に関する関数の記述と、ステップS21~S27において実行される動作に関する関数の記述と、を含む。
【0122】
ステップS21の動作に関する関数として、例えば、MPI_File_open関数が使用される。ステップS22の動作に関する関数として、例えば、MPI_File_setview関数が使用される。ステップS23の動作に関する関数として、例えば、MPI_File_read関数が使用される。ステップS25の動作に関する関数として、例えば、MPI_File_set_view関数が使用される。ステップS26の動作に関する関数として、例えば、MPI_File_write関数が使用される。ステップS27の動作に関する関数として、例えば、MPI_File_close関数が使用される。
【0123】
次に、
図8を用いて、
図6のステップS22及びS23で実行される動作の詳細を説明する。
図8のうち、ステップS221~S225は、ステップS22の詳細動作であり、ステップS231~S233は、ステップS23の詳細動作である。
【0124】
演算部32は、設定ファイルを読み込み(ステップS221)、MPIプログラム(a.out)が処理する対象データがストリームデータであるか否かを判定する(ステップS222)。ステップS222において、演算部32は、設定ファイルを確認し、-stream拡張オプションの設定値が有効であることを示す「1」であるか否かを判定する。
【0125】
MPIプログラムが処理する対象データがストリームデータではない場合(ステップS222のNO)、演算部32は、バッチデータの読み込み設定を行う(ステップS223)。演算部32は、記憶部34からa.outが処理する対象データを一度で全て読み込む設定を行う。
【0126】
一方、MPIプログラムが処理する対象データがストリームデータである場合(ステップS222のYES)、演算部32は、ストリームデータの読み込み設定を行う(ステップS224)。演算部32は、MPIプログラムが処理する対象データのうち、処理が行われていない対象データから所定のデータ量のデータを読み込む設定を行う。演算部32は、例えば、MPIプログラムが処理する対象データのうち、処理が行われていない対象データの開始位置及び読み込むデータサイズの設定を行う。データサイズの指定には、例えば、num_sizeという変数が使用されてもよい。開始位置の指定には、例えば、num_posという変数が使用されてもよい。
【0127】
ステップS225において、演算部32は、連結元のMPIプログラムがあるかを判定する(ステップS225)。演算部32は、ステップS21において、連結元のMPIプログラムを特定したか否かに基づいて、連結元のMPIプログラムがあるかを判定する。
【0128】
連結元のMPIプログラムがない場合(ステップS225のNO)、演算部32は、指定されたファイルを記憶部34から検索し、当該ファイルからa.outが処理する入力データを読み込む(ステップS231)。
【0129】
一方、連結元のMPIプログラムがある場合(ステップS225のYES)、演算部32は、受信バッファから、連結元のMPIプログラムが出力した出力結果のうち、MPIプログラム(a.out)が処理する入力データを読み込む(ステップS232)。演算部32は、ステップS224の設定に基づいて、変数num_pos及び変数num_sizeで指定された位置及びデータサイズのデータを入力データとして受信バッファから読み込む。なお、受信バッファに、データが格納されていない場合、連結元のMPIプログラムを実行する演算部と通信を行い、MPIプログラム(a.out)が処理する入力データを受信バッファに送信することを要求してもよい。
【0130】
ステップS233において、演算部32は、データ取得を終了する(ステップS233)。演算部32は、入力データを読み込んだ後、読み込んだデータの位置を記録し、入力データが変更できないように設定する。また、演算部32は、入力データのアドレス等の確認を行い、次の処理の準備を行う。
【0131】
次に、
図9を用いて、
図6のステップS25及びS26で実行される動作の詳細を説明する。
図9のうち、ステップS251~S255は、ステップS25の詳細動作であり、ステップS261~S263は、ステップS26の詳細動作である。
【0132】
演算部32は、設定ファイルを読み込み(ステップS251)、MPIプログラム(a.out)が処理する対象データがストリームデータであるか否かを判定する(ステップS252)。ステップS252において、演算部32は、設定ファイルを確認し、-stream拡張オプションの設定値が有効であることを示す「1」であるか否かを判定する。
【0133】
MPIプログラムが処理する対象データがストリームデータではない場合(ステップS252のNO)、演算部32は、演算結果の出力設定を行う(ステップS253)。演算部32は、例えば、演算結果を出力する出力ファイルの指定等を出力設定として行う。演算部32は、MPIプログラムが処理する対象データがバッチデータであるため、a.outの演算結果を一度に全てを出力ファイルに出力するように出力設定を行う。
【0134】
一方、MPIプログラムが処理する対象データがストリームデータである場合(ステップS252のYES)、演算部32は、演算結果の出力設定を行う(ステップS254)。演算部32は、例えば、演算結果を出力する出力ファイルの指定等を出力設定として行う。MPIプログラムが処理する対象データがストリームデータであり、出力ファイルには、既に演算結果が出力されている可能性がある。そのため、演算部32は、a.outの演算結果を、出力ファイルを出力する開始位置及び出力するデータサイズの指定等を出力設定として行う。データサイズの指定には、例えば、num_sizeという変数が使用されてもよい。開始位置の指定には、例えば、num_posという変数が使用されてもよい。
【0135】
また、MPIプログラム(a.out)に、連結先のMPIプログラムがある可能性があるため、演算部32は、ステップS21において、設定ファイルから読み込んだ情報に基づいて、連結先のMPIプログラムを特定する。演算部32は、連結先のMPIプログラムを特定した場合、送信バッファに演算結果を出力する出力設定を行う。演算部32は、送信バッファに、既に演算結果が出力されている可能性があるため、a.outの演算結果を、送信バッファのどの位置からどの範囲で出力するのかを指定するために、開始位置及び出力範囲の指定等を出力設定として行う。
【0136】
ステップS255において、演算部32は、連結先のMPIプログラムがあるかを判定する(ステップS255)。演算部32は、ステップS21において、連結先のMPIプログラムを特定したか否かに基づいて、連結元のMPIプログラムがあるかを判定する。
【0137】
連結先のMPIプログラムがない場合(ステップS255のNO)、演算部32は、指定されたファイルにa.outの演算結果を出力する(ステップS261)。
【0138】
一方、連結先のMPIプログラムがある場合(ステップS255のYES)、演算部32及び通信部33は、指定されたファイルに演算結果を出力し、演算結果を出力結果として、連結先のMPIプログラムの受信バッファに転送する(ステップS262)。演算部32は、ステップS21において、設定ファイルから読み込んだ情報に基づいて、連結先のMPIプログラムを特定する。演算部32は、ステップS21において、設定ファイルから読み込んだ情報に基づいて、-direct拡張オプションが有効であるのか無効であるのかを特定する。
【0139】
演算部32は、MPIプログラム(a.out)の演算結果を、出力結果として送信バッファに出力する。演算部32は、ステップS254の設定に基づいて、変数num_pos及び変数num_sizeで指定された位置及びデータサイズに出力結果を送信バッファに出力する。-direct拡張オプションが有効であり、連結先のMPIプログラムが情報処理装置30で実行される場合、演算部32は、MPIプログラム(a.out)の出力結果を、送信バッファから受信バッファに転送する。
【0140】
-direct拡張オプションが有効であり、受信バッファが情報処理装置40に設定される場合、通信部33は、MPIプログラム(a.out)の出力結果を、送信バッファから、情報処理装置40に設定された受信バッファにRDMA方式で転送する。
【0141】
-direct拡張オプションが無効であり、受信バッファが情報処理装置30に設定される場合、演算部32は、MPIプログラム(a.out)の出力結果を送信バッファから取得して、出力結果をファイルに書き出して出力する。演算部32は、出力されたファイルのうち、連結先のMPIプログラムの入力データに使用される出力結果のデータを指定して、送信バッファから受信バッファに転送する。
【0142】
-direct拡張オプションが無効であり、受信バッファが情報処理装置40に設定される場合、演算部32は、MPIプログラム(a.out)の出力結果を送信バッファから取得して、出力結果をファイルに書き出して出力する。演算部32は、出力されたファイルのうち、連結先のMPIプログラムの入力データに使用される出力結果のデータを、通信部33に指示する。通信部33は、演算部32が指示したデータを、送信バッファから受信バッファに転送する。
【0143】
ステップS263において、演算部32は、出力及び転送を終了する(ステップS263)。演算部32は、出力したデータ及び転送したデータの位置の記録を行う。
【0144】
以上のように、情報処理システム100によれば、ユーザは、1つのコマンドで、複数のMPIプログラムを実行できる。そのため、ユーザは、複数のMPIプログラムを実行するためのコマンドをまとめた一つのMPIプログラムを用意する必要がない。また、ユーザは、各MPIプログラムの実行完了を待つ必要もない。したがって、実施の形態2にかかる情報処理システム100によれば、ユーザ利便性を向上できる。
【0145】
また、情報処理システム100によれば、ユーザのプログラミングコストを抑えたMPIプログラムの実行が可能となる。具体的には、本実施の形態の課題として、複数のMPIプログラムを1つのコマンドで実行したい場合、ユーザは、複数のMPIプログラムを実行するためのコマンドが記述されたMPIプログラムを用意する必要があることを説明した。また、複数のMPIプログラムを実行するハードウェアリソースを変更することも考慮すると、ユーザは、複数のMPIプログラムを1つずつ実行するが、各MPIプログラムの実行完了を待つ必要があった。
【0146】
これに対して、情報処理システム100を用いることにより、複数のMPIプログラムを1つのコマンドで実行可能となる。さらに、情報処理システム100を用いることにより、連結元のMPIプログラムが出力した出力結果を利用して、連結先のMPIプログラムを実行できる。そのため、ユーザは、連結元のMPIプログラムの出力結果の出力ファイルと、連結先のMPIプログラムに入力される入力元の入力ファイルとを意識したMPIプログラムを作成しなくてもよい。
【0147】
また、情報処理システム100に入力されるコマンドは、ハードウェアリソースを変数として利用するコマンドである。そのため、情報処理システム100を用いることにより、1つのコマンドで複数のMPIプログラムを実行できるだけでなく、各MPIプログラムの実行に割り当てるハードウェア、及びハードウェアリソースを容易に変更できる。
【0148】
さらに、情報処理システム100は、上述した-stream拡張オプションに対応した処理を実行できる。そのため、情報処理システム100を用いることにより、例えば、MPIStreams等のストリームデータに対応するためのライブラリを実装しなくても、ストリームデータをMPIプログラムで実行できる。また、情報処理システム100を用いることにより、ユーザが、当該ライブラリに対応したプログラミングの熟練度を向上させることなく、各MPIプログラムがストリームデータを処理できる。言い換えると、情報処理システム100を用いることにより、ストリームデータに対応するためのライブラリに応じたプログラミングスキルが高くないユーザでも、ストリームデータを処理可能となる。そのため、情報処理システム100によれば、ユーザは、MPIプログラム間の入出力データが連携されたMPIプログラム、及びストリームデータに対応するためのMPIプログラムを作成する必要がない。したがって、実施の形態2にかかる情報処理システム100によれば、ユーザ利便性を向上できるだけでなく、ユーザのプログラミングコストを抑えたMPIプログラムの実行が可能となる。
【0149】
(変形例1)
上述した実施の形態2では、-from拡張オプション及び-to拡張オプションでは、連結元のMPIプログラム及び連結先のMPIプログラムの指定が1つであることとして説明されたが、複数のMPIプログラムを指定可能としてもよい。
【0150】
ユーザが、例えば、以下のコマンド例9を入力する。
<コマンド例9>
【0151】
コマンド例9のうち、上から3行目では、-from拡張オプションが設定されている。そして、コマンド例9のうち、上から3行目では、-fromの設定値として、b及びaが設定されている。コマンド例9のように、-from及び-toの設定値が複数設定されていたとしても、入力部31は、-from及び-toの設定値が複数設定されたコマンドを入力可能としてもよい。そして、演算部32は、送信バッファ及び受信バッファを複数設定可能としてもよい。コマンド例9を用いて説明すると、-fromの設定値が、b及びaであるため、演算部32は、a.out及びb.outのために2つの送信バッファを設定可能としてもよい。
【0152】
また、演算部32及び通信部33は、-from及び-toの設定値が複数設定された場合、-from及び-toの設定値の順序で、受信バッファに出力結果を転送してもよい。コマンド例9を用いて説明すると、-fromの設定値が、b及びaであるため、演算部32及び通信部33は、a.outの出力結果を送信バッファから受信バッファに転送し、その後、a.outの出力結果を送信バッファから受信バッファに転送してもよい。
【0153】
このように、コマンドに入力された順序に応じて入出力データを転送可能とすれば、ユーザは、各MPIプログラムにおいて、入力されるデータの順序を考慮したプログラミングを行わなくてもよくなる。したがって、実施の形態2を変形例1のように変形することで、実施の形態2よりも、ユーザ利便性を向上できる。
【0154】
(変形例2)
上述した実施の形態2において、-from拡張オプション及び-to拡張オプションに付随して、送信バッファから受信バッファを設定した演算部が非同期で処理可能とする拡張オプションがさらに導入されてもよい。また、送信バッファの出力位置及び出力範囲、並びに受信バッファの読み込み位置及び読み込み範囲を指定する拡張オプションがさらに導入されてもよい。
【0155】
図10を用いて入力されるコマンドの一例について説明する。
図10は、入力されるコマンドの一例を示す図である。ユーザが、例えば、
図10に示すコマンド例10のコマンドを入力する。コマンド例10のうち、上から1行目では、-async拡張オプションが設定されている。-async拡張オプションは、連結元のMPIプログラムと連結先のMPIプログラムとが非同期で実行されることを表す拡張オプションである。
【0156】
例えば、-to拡張オプションでは、送信バッファ及び受信バッファが設定される。-async拡張オプションがコマンドに設定されていない場合及び-async拡張オプションが無効である場合、送信バッファを設定した演算部は、当該演算部、又は対応する通信部が送信バッファから受信バッファにデータ転送が完了することを待って、次の処理を行う。これに対して、-async拡張オプションがコマンドに設定されており、かつ有効である場合、送信バッファを設定した演算部は、当該演算部、又は対応する通信部が送信バッファから受信バッファにデータ転送を開始すると、次の処理を行う。なお、-asyncの設定値が「1」の場合、-async拡張オプションが有効であることを示し、-asyncの設定値が「0」の場合、-async拡張オプションが無効であることを示す。
【0157】
また、コマンド例10のうち、上から1行目では、-recv_buff_row拡張オプション及び-send_buff_row拡張オプションが設定されている。-recv_buff_row拡張オプションは、受信バッファのサイズを指定する拡張オプションである。-send_buff_row拡張オプションは、送信バッファのサイズを指定する拡張オプションである。演算部32は、-recv_buff_row拡張オプション及び-send_buff_row拡張オプションがコマンドに設定されている場合、指定されたサイズの送信バッファ及び受信バッファを記憶部34に設定する。また、連携元のMPIプログラム及び連携先のMPIプログラムが情報処理装置40で実行される場合、通信部33は、バッファ設定要求に、-recv_buff_row拡張オプション及び-send_buff_rowにより指定されたサイズを設定して情報処理装置40に送信する。なお、演算部42は、バッファ設定要求に含まれる、指定されたサイズの送信バッファ及び受信バッファを記憶部44に設定する。
【0158】
なお、コマンド例10では、-recv_buff_row及び-send_buff_rowの設定値として、「-1」が設定されている。この場合、送信バッファ及び受信バッファのサイズを、変数num_posに設定された位置までのサイズの2倍の値とすることを表している。言い換えると、送信バッファ及び受信バッファに関連するMPIプログラムが実行されている間に、データ転送が開始されたとしても、実行されているMPIプログラムのデータに影響を与えないためである。なお、変数num_posは、送信バッファ及び受信バッファに関連するMPIプログラムが読み込む開始位置及び出力する開始位置を指定する変数である。
【0159】
このように、-from拡張オプション及び-to拡張オプションに付随して、-async拡張オプション及び-recv_buff_row拡張オプション及び-send_buff_row拡張オプションにも対応可能とすれば、情報処理システム100の性能を向上できる。
【0160】
(変形例3)
上述した実施の形態2において、各MPIプログラムが実行されている間に、MPIプログラムによりデータがどのように処理されているかを中間ファイルに出力可能としてもよい。
図11を用いて入力されるコマンドの一例について説明する。
図11は、入力されるコマンドの一例を示す図である。ユーザが、例えば、
図11に示すコマンド例11のコマンドを入力する。コマンド例11のうち、上から1行目では、-save_file_mini拡張オプションが設定されている。-save_file_mini拡張オプションは、MPIプログラムによりデータがどのように処理されているかを中間ファイルに出力することを指定する拡張オプションである。なお、-save_file_miniの設定値が「1」の場合、-save_file_mini拡張オプションが有効であることを示し、-save_file_miniの設定値が「0」の場合、-save_file_mini拡張オプションが無効であることを示す。
【0161】
演算部32は、-save_file_miniの設定値が「1」の場合、
図6を用いて説明した各MPIプログラムを実行しているときのデータ処理内容をファイルに出力する。実施の形態2を変形例3のように変形することで、データ処理内容をログとして出力でき、デバッグ等のデータ確認作業を容易にできる。
【0162】
(他の実施形態)
上述した実施の形態にかかる情報処理装置10、20、30及び40(以下、情報処理装置10等と称する)は次のようなハードウェア構成を有していてもよい。
図12は、各実施の形態にかかる情報処理装置等のハードウェア構成を例示するブロック図である。
【0163】
図12を参照すると、情報処理装置10等は、ネットワーク・インターフェース1201、プロセッサ1202、及びメモリ1203を含む。ネットワーク・インターフェース1201は、情報処理システムに含まれる他の情報処理装置と通信するために使用される。
【0164】
プロセッサ1202は、メモリ1203からソフトウェア(コンピュータプログラム)を読み出して実行することで、上述した実施の形態においてフローチャートを用いて説明された情報処理装置10等の処理を実行する。プロセッサ1202は、例えば、マイクロプロセッサ、MPU(Micro Processing Unit)、又はCPU(Central Processing Unit)であってもよい。プロセッサ1202は、複数のプロセッサを含んでもよい。
【0165】
メモリ1203は、揮発性メモリ及び不揮発性メモリの組み合わせによって構成される。メモリ1203は、プロセッサ1202から離れて配置されたストレージを含んでもよい。この場合、プロセッサ1202は、図示されていないI/O(Input/Output)インターフェースを介してメモリ1203にアクセスしてもよい。
【0166】
図12の例では、メモリ1203は、ソフトウェアモジュール群を格納するために使用される。プロセッサ1202は、これらのソフトウェアモジュール群をメモリ1203から読み出して、当該ソフトウェアモジュール群による指示に応じた処理を実行することで、上述した実施の形態において説明された情報処理装置10等の動作を実現できる。
【0167】
図12を用いて説明したように、情報処理装置10等が有するプロセッサの各々は、図面を用いて説明されたアルゴリズムをコンピュータに行わせるための命令群を含む1または複数のプログラムを実行する。
【0168】
上述の例において、プログラムは、コンピュータに読み込まれた場合に、実施の形態で説明された1又はそれ以上の機能をコンピュータに行わせるための命令群(又はソフトウェアコード)を含む。プログラムは、非一時的なコンピュータ可読媒体又は実体のある記憶媒体に格納されてもよい。限定ではなく例として、コンピュータ可読媒体又は実体のある記憶媒体は、random-access memory(RAM)、read-only memory(ROM)、フラッシュメモリ、solid-state drive(SSD)又はその他のメモリ技術、CD-ROM、digital versatile disc(DVD)、Blu-ray(登録商標)ディスク又はその他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ又はその他の磁気ストレージデバイスを含む。プログラムは、一時的なコンピュータ可読媒体又は通信媒体上で送信されてもよい。限定ではなく例として、一時的なコンピュータ可読媒体又は通信媒体は、電気的、光学的、音響的、またはその他の形式の伝搬信号を含む。
【0169】
また、本開示は上述した実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。また、本開示は、それぞれの実施の形態を適宜組み合わせて実施されてもよい。
【0170】
さらに、上記の実施の形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
(付記1)
第1の情報処理装置と、第2の情報処理装置とを備え、
前記第1の情報処理装置は、
複数のMPI(Message Passing Interface)プログラムを実行することを指示する実行コマンドを入力する入力部と、
前記複数のMPIプログラムを、前記第1の情報処理装置において実行される第1のMPIプログラムと、前記第2の情報処理装置において実行される第2のMPIプログラムとに分類し、前記第1のMPIプログラムを実行する第1の演算部と、
前記第2のMPIプログラムの実行内容を特定する情報を前記第2の情報処理装置に送信する第1の通信部と、を備え、
前記第2の情報処理装置は、
前記情報を受信する第2の通信部と、
前記情報に基づいて、前記第2のMPIプログラムを実行する第2の演算部と、を備える情報処理システム。
(付記2)
前記実行コマンドは、前記複数のMPIプログラムのうちの第3のMPIプログラムが出力した出力結果を使用して第4のMPIプログラムを実行することを示す第1のオプションを含み、
前記第1の演算部は、前記第1のオプションに基づいて、前記第1のMPIプログラムが、前記第3のMPIプログラム及び前記第4のMPIプログラムを含むか否かを判定し、前記第1のMPIプログラムが、前記第3のMPIプログラム及び前記第4のMPIプログラムを含むと判定する場合、前記出力結果を、前記第1の情報処理装置の受信バッファに送信し、前記第1の情報処理装置の受信バッファから取得したデータを入力データとして前記第4のMPIプログラムを実行する、付記1に記載の情報処理システム。
(付記3)
前記第1の通信部は、前記第1のMPIプログラムが、前記第3のMPIプログラムを含み、前記第4のMPIプログラムを含まないと判定された場合、前記出力結果を、前記第2の情報処理装置の受信バッファに送信し、
前記第2の演算部は、前記第2の情報処理装置の受信バッファから取得したデータを入力データとして前記第4のMPIプログラムを実行する、付記2に記載の情報処理システム。
(付記4)
前記実行コマンドは、前記出力結果を、ファイルに出力するのか否かを指定する第2のオプションを含み、
前記第1の演算部は、前記第2のオプションが、前記出力結果を、ファイルに出力することを示し、かつ前記第1のMPIプログラムが、前記第3のMPIプログラム及び前記第4のMPIプログラムを含むと判定した場合、前記出力結果をファイルに出力し、前記出力されたファイルのうち、前記入力データに使用される出力結果を前記第1の情報処理装置の受信バッファに送信する、付記3に記載の情報処理システム。
(付記5)
前記第1の通信部は、前記第2のオプションが、前記出力結果を、ファイルに出力することを示し、かつ前記第1のMPIプログラムが、前記第3のMPIプログラムを含み、前記第4のMPIプログラムを含まないと判定された場合、前記出力結果をファイルに出力し、前記出力されたファイルのうち、前記入力データに使用される出力結果を前記第2の情報処理装置の受信バッファに送信する、付記4に記載の情報処理システム。
(付記6)
前記第1の通信部は、前記第2のオプションが、前記出力結果を、ファイルに出力することを示さない場合であって、前記第1のMPIプログラムが、前記第3のMPIプログラムを含み、前記第4のMPIプログラムを含まないと判定された場合、前記出力結果を、RDMA(Remote Direct Memory Access)方式で、前記第2の情報処理装置の受信バッファに送信する、付記4又は5に記載の情報処理システム。
(付記7)
前記実行コマンドが、前記複数のMPIプログラムの各々が処理する対象データがストリームデータであるか否かを示す第3のオプションを含み、
前記第1の演算部は、前記第3のオプションに基づいて、前記対象データのうち、重複しない所定のデータ量ずつのデータを入力データとして前記第1のMPIプログラムに入力して、前記第1のMPIプログラムを実行し、
前記第1の通信部は、前記第3のオプションに関する情報を前記第2の通信部に送信し、
前記第2の演算部は、前記第3のオプションに基づいて、前記対象データのうち、重複しない所定のデータ量ずつのデータを入力データとして前記第2のMPIプログラムに入力して、前記第2のMPIプログラムを実行する、付記1~6のいずれか1項に記載の情報処理システム。
(付記8)
前記第1の演算部は、前記複数のMPIプログラムの各々について、前記複数のMPIプログラムの各々の実行内容を設定した複数の設定ファイルを生成し、前記複数の設定ファイルの各々を出力装置に出力可能に構成される、付記1~7のいずれか1項に記載の情報処理システム。
(付記9)
情報処理装置であって、
複数のMPI(Message Passing Interface)プログラムを実行することを指示する実行コマンドを入力する入力部と、
前記複数のMPIプログラムを、前記情報処理装置において実行される第1のMPIプログラムと、他の情報処理装置において実行される第2のMPIプログラムとに分類し、前記第1のMPIプログラムを実行する演算部と、
前記第2のMPIプログラムの実行内容を特定する情報を前記他の情報処理装置に送信する通信部と、を備える情報処理装置。
(付記10)
情報処理装置であって、
複数のMPI(Message Passing Interface)プログラムを実行することを指示する実行コマンドが入力された他の情報処理装置から、前記複数のMPIプログラムのうち、前記情報処理装置において実行される第1のMPIプログラムの実行内容を特定する情報を受信する通信部と、
前記情報に基づいて、前記第1のMPIプログラムを実行する演算部と、を備える情報処理装置。
(付記11)
情報処理装置により実行されるコマンド実行方法であって、
複数のMPI(Message Passing Interface)プログラムを実行することを指示する実行コマンドを入力し、
前記複数のMPIプログラムを、前記情報処理装置において実行される第1のMPIプログラムと、他の情報処理装置において実行される第2のMPIプログラムとに分類し、前記第1のMPIプログラムを実行し、
前記第2のMPIプログラムの実行内容を特定する情報を前記他の情報処理装置に送信する、コマンド実行方法。
(付記12)
情報処理装置により実行されるコマンド実行方法であって、
複数のMPI(Message Passing Interface)プログラムを実行することを指示する実行コマンドが入力された他の情報処理装置から、前記複数のMPIプログラムのうち、前記情報処理装置において実行される第1のMPIプログラムの実行内容を特定する情報を受信し、
前記情報に基づいて、前記第1のMPIプログラムを実行する、コマンド実行方法。
(付記13)
情報処理装置にコマンド実行方法を実行させるコマンド実行プログラムであって、
前記コマンド実行方法は、
複数のMPI(Message Passing Interface)プログラムを実行することを指示する実行コマンドを入力し、
前記複数のMPIプログラムを、前記情報処理装置において実行される第1のMPIプログラムと、他の情報処理装置において実行される第2のMPIプログラムとに分類し、前記第1のMPIプログラムを実行し、
前記第2のMPIプログラムの実行内容を特定する情報を前記他の情報処理装置に送信する、ことを含むコマンド実行プログラム。
(付記14)
情報処理装置にコマンド実行方法を実行させるコマンド実行プログラムであって、
前記コマンド実行方法は、
複数のMPI(Message Passing Interface)プログラムを実行することを指示する実行コマンドが入力された他の情報処理装置から、前記複数のMPIプログラムのうち、前記情報処理装置において実行される第1のMPIプログラムの実行内容を特定する情報を受信し、
前記情報に基づいて、前記第1のMPIプログラムを実行する、ことを含むコマンド実行プログラム。
【符号の説明】
【0171】
1、100 情報処理システム
10、20、30、40 情報処理装置
11、31、41 入力部
12、22、32、42 演算部
13、21、33、43 通信部
34、44 記憶部
301、401 入力装置
302、402 出力装置