(57)【要約】【課題】通信処理を高速化する並列処理装置及びノード間通信方法を提供する。【解決手段】クロスコンパイラは、並列プロセスに含まれる複数のプロセスにそれぞれ割り当てられた第１識別情報に対して１つの論理通信領域番号を生成する。領域変換部１４２及びアドレス取得部１４３は、第１識別情報及び並列プロセスを表す第２識別情報を基に論理通信領域番号に対応する第２識別情報毎に割り当てられたメモリ領域が特定可能な対応情報を保持し、第１識別情報、第２識別情報及び論理通信領域番号を含む通信指示を受信し、対応情報を基に、取得した論理通信領域番号に対応するメモリ領域を取得する。通信制御部１４１は、アドレス取得部１４３により取得されたメモリ領域を用いて通信を行う。【選択図】図４
2018014057.tif 000002
【特許請求の範囲】
【請求項１】
並列プロセスに含まれる複数のプロセスにそれぞれ割り当てられた第１識別情報に対して１つの論理通信領域番号を生成する生成部と、
前記第１識別情報及び前記並列プロセスを表す第２識別情報を基に前記論理通信領域番号に対応する前記第２識別情報毎に割り当てられたメモリ領域が特定可能な対応情報を保持し、前記第１識別情報、前記第２識別情報及び前記論理通信領域番号を含む通信指示を受信し、前記対応情報を基に、取得した前記論理通信領域番号に対応するメモリ領域を取得する取得部と、
前記取得部により取得された前記メモリ領域を用いて通信を行う通信部と
を有することを特徴とする並列処理装置。
【請求項２】
前記並列プロセスが実行された場合に、各前記第１識別情報に対して割り当てる前記メモリ領域を決定するメモリ領域決定部と、
前記メモリ領域決定部により各前記第１識別情報に対する割り当てが決定された各前記メモリ領域と前記論理通信領域番号とを対応させて前記対応情報を生成する対応情報生成部と
をさらに備えたことを特徴とする請求項１に記載の並列処理装置。
【請求項３】
前記取得部は、
前記論理通信領域番号と前記第２識別情報毎に割り当てられた物理通信領域番号との対応を表す第１対応情報を保持し、前記第１対応情報を基に、取得した前記論理通信領域番号に対応する前記物理通信領域番号を特定する特定部と、
前記物理通信領域番号と前記メモリ領域との対応を表す第２対応情報を保持し、前記特定部により特定された前記物理通信領域番号及び前記第２対応情報を基に、前記メモリ領域を抽出する抽出部と
を備えたことを特徴とする請求項１又は２に記載の並列処理装置。
【請求項４】
前記取得部は、前記対応情報として前記第１識別情報及び前記第２識別情報を基に、前記論理通信領域番号に対応する前記メモリ領域が特定可能な１つの対応テーブルを有する
ことを特徴とする請求項１又は２に記載の並列処理装置。
【請求項５】
並列プロセスに含まれる複数のプロセスにそれぞれ割り当てられた第１識別情報に対して１つの論理通信領域番号を生成し、
前記第１識別情報、前記並列プロセスを表す第２識別情報及び前記論理通信領域番号を含む通信指示を受信し、
受信した前記通信指示から前記第１識別情報、前記第２識別情報及び前記論理通信領域番号を取得し、
前記第１識別情報及び前記第２識別情報を基に前記論理通信領域番号に対応する前記第２識別情報に割り当てられたメモリ領域が特定可能な対応情報を用いて、取得した前記論理通信領域番号に対応するメモリ領域を取得し、
取得した前記メモリ領域を用いて通信を行う
ことを特徴とするノード間通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列処理装置及びノード間通信方法に関する。
【背景技術】
【０００２】
情報処理システムである並列計算機システム、その中でも特にＨＰＣ（High  Performance  Computing）システムでは、近年、高性能化のために計算ノード数が１０万ノードを超えるシステムが開発されている。ここで、計算ノードとは、情報処理を実行する処理部の単位であり、例えば、演算処理部であるＣＰＵ（Central  Processing  Unit）などが計算ノードの一例である。
【０００３】
エクサスケール時代のＨＰＣシステムは、コア数及びノード数共に膨大な数になると推測される。コア数及びノード数は、例えば１００万のオーダのコアになることが考えられる。また、１つのアプリケーションの並列プロセス数も最大１００万オーダになると推測される。
【０００４】
このような高性能なＨＰＣシステムでは、低遅延且つ高バンド幅の高速通信ネットワークデバイスである高性能インターコネクトが計算ノード間の通信に利用されることが多い。加えて、高性能インターコネクトは、通信先のメモリに直接アクセスできるＲＤＭＡ（Remote  Direct  Memory  Access）機能を搭載していることが一般的である。高性能インターコネクトは、エクサスケール時代のＨＰＣシステムでも重要な技術の１つとして位置づけられ、より高い性能、より使いやすい機能を目指した開発が進められている。
【０００５】
高性能インターコネクトの利用形態の１つとして、特に通信の低遅延を求めるアプリケーションでは、ＲＤＭＡ通信機構の片側通信が多く利用される。以下では、ＲＤＭＡ通信機構の片側通信を、「ＲＤＭＡ通信」と呼ぶ場合がある。ＲＤＭＡ通信では、通信先のソフトウェアや並列計算機システムの通信バッファを経由しなくとも、複数の計算ノードに分散したプロセスのデータ領域間で直接通信することが可能である。このため、通常のネットワークデバイスで行われる通信ソフトウェアによる通信バッファとデータ領域のコピーが、ＲＤＭＡ通信では行われず、低遅延な通信が実現される。なお、ＲＤＭＡ通信では、アプリケーションのデータ領域（メモリ）間で直接通信するため、通信端点間で予めメモリ領域の情報が交換される。以下では、ＲＤＭＡ通信に用いられるメモリ領域を、「通信領域」という場合がある。
【０００６】
また、今後はプログラムの生産性向上及び通信の利便性向上の観点から、並列プロセス内で共通のグローバルメモリアドレス空間を定義し、グローバルアドレスを用いて通信を行う通信ライブラリ及びプログラム言語が多用されると考えられる。グローバルアドレスとは、グローバルメモリアドレス空間を表すアドレスである。グローバルアドレスを用いて通信を行うプログラム言語としては、Ｕｎｉｆｉｅｄ  Ｐａｒａｌｌｅｌ  Ｃ（ＵＰＣ）及びＣｏａｒｒａｙ  ＰｒｔｒａｎなどのＰａｒｔｉｔｉｏｎｅｄ  Ｇｌｏｂａｌ  Ａｄｄｒｅｓｓ  Ｓｐａｃｅ（ＰＧＡＳ）系の言語がある。これらの言語で記述された分散プロセスによる並列プログラムのソースコードでは、自プロセス以外の他プロセスが有するデータに対して自プロセスが有するデータのごとくアクセスできる。このため、通信のための煩雑な処理をソースコードに記述しなくてもよくなり、プログラムの生産性が向上する。
【０００７】
従来のプログラミング言語では、大規模なデータ配列を分割して複数のプロセスに配置した場合、他のプロセスが有するデータにアクセスするには、アクセス先のプロセスに対するＭＰＩ（Message  Passing  Interface）などによる通信がソースコードに記述される。しかし、ＰＧＡＳ系のプログラミング言語では、各プロセスは、他のプロセスや配置されている変数や部分配列についても、自プロセスに配置されている変数や部分配列と同様な記述でアクセスできる。このアクセスは、プロセス間通信にあたるが、通信はソースプログラムから隠蔽されているため、通信を意識しない並列プログラミングが可能であり、プログラム生産性を向上させることができる。
【０００８】
また、従来は計算ノードあたりのＣＰＵコア数が少なかったため、従来のＨＰＣプログラムでは、１つのユーザプロセスが１つの計算ノードを占有する使用方法が主流であった。しかし、計算コア数の増大及びメモリ容量の増大に伴い、複数のユーザプロセスが１台の計算ノードを共有して実行する形態が増加すると考えられる。これは、ＰＧＡＳ系言語についても同様で、ＰＧＡＳ系言語で記述された複数のユーザプログラム毎のグローバルアドレスが１台の計算ノードに混在することが求められている。
【０００９】
また、高性能のＨＰＣシステムにおいてＲＤＭＡ通信を行う場合、並列プロセスの各プロセスに通し番号を割り当て、その通し番号に対応する処理を表すランク毎に、あるデータ配列を分割して割り当てた分散配列は、グローバルアドレスを用いて管理される。分散配列における各ランクに割り当てられたデータは、部分配列と呼ばれる。部分配列は、例えば、全て又は一部のランクに割り当てられ、各ランクの部分配列のサイズは同一でも異なっていてもよい。そして、部分配列はメモリに格納され、各部分配列を格納するメモリ領域を単に「領域」という。この領域が、ＲＤＭＡ通信の通信領域となる。それぞれの領域には領域番号が割り当てられているが、同じ分散配列の部分配列であっても、ランク毎に領域番号は異なる。ＲＤＭＡ通信を始める前の準備として、全ランクは分散配列の部分配列の領域番号及びオフセットを交換する。そして、各ランクは、分散配列名、部分配列の先頭要素番号、部分配列の要素数、部分配列に対応するランクのランク番号、領域番号及びオフセット情報を通信領域管理テーブルにより管理する。
【００１０】
特定のランクは、分散配列の中の所定の配列要素にアクセスするには、通信領域管理テーブルを検索して所定の配列要素を所有するランク及び領域番号を取得し、所定の配列要素が存在する領域を特定する。次に、特定のランクは、各ランクを処理する計算ノードを示すランク管理テーブルから所定の配列要素を所有するランクを処理する計算ノードを特定する。そして、特定した計算ノードの特定した領域にオフセットを加えた位置から、所定の配列要素の型にしたがったＲＤＭＡ通信を行って所定の配列要素にアクセスする。
【００１１】
ここで、ＲＤＭＡ通信に関する従来技術として、ＲＤＭＡエンジンがＲＤＭＡ領域識別子を物理的又は仮想アドレスへ変換してデータ転送を行う従来技術がある。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２００９−１８１５８５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
しかしながら、並列プロセス内の複数のランクが、データ配列を分散共有する場合、各ランクが所有する部分配列の通信領域番号や通信領域におけるアドレスオフセットなどが他の全てのランクに通知され情報交換が行われる。これは、配列データの部分配列の通信領域がランクによって異なるためである。ランク数が少ない場合、この情報交換にかかるコストや、管理テーブルが消費するメモリ領域は小さい。しかし、１０万を超える計算ノードを所有する並列計算機システムでは、以下のような問題が発生する。
【００１４】
例えば、各ランクは通信毎に通信領域管理テーブルを参照するが、これは並列計算機システムにおける通信レイテンシを増加させる。１回の通信に対する通信レイテンシの増加はさほど大きくはないが、ＨＰＣアプリケーションでは、この通信領域管理テーブルを参照の繰り返し回数が膨大となる。そのため、通信管理テーブルの参照による通信レイテンシの増加が、並列計算機システムにおけるジョブ全体の実行性能を劣化させる。
【００１５】
また、通信領域管理テーブルでは、通信領域数とプロセス数とを乗算した数のエントリ数が確保されることになる。この点、１０万ノードを超える大規模並列プロセスでは、通信領域管理テーブルを格納するために大きなメモリ領域が使用され、プログラムの実行メモリ領域を減少させる要因となる。
【００１６】
また、例えば、ＲＤＭＡエンジンによりＲＤＭＡ領域識別子が物理的又は仮想アドレスへ変換される従来技術を用いても、各ランクにおける部分配列の通信領域を統一することは困難であり、通信処理を高速化することは困難である。
【００１７】
開示の技術は、上記に鑑みてなされたものであって、通信処理を高速化する並列処理装置及びノード間通信方法を提供することを目的とする。
【課題を解決するための手段】
【００１８】
本願の開示する並列処理装置及びノード間通信方法の一つの態様において、生成部は、並列プロセスに含まれる複数のプロセスにそれぞれ割り当てられた第１識別情報に対して１つの論理通信領域番号を生成する。取得部は、前記第１識別情報及び前記並列プロセスを表す第２識別情報を基に前記論理通信領域番号に対応する前記第２識別情報毎に割り当てられたメモリ領域が特定可能な対応情報を保持し、前記第１識別情報、前記第２識別情報及び前記論理通信領域番号を含む通信指示を受信し、前記対応情報を基に、取得した前記論理通信領域番号に対応するメモリ領域を取得する。通信部は、前記取得部により取得された前記メモリ領域を用いて通信を行う。
【発明の効果】
【００１９】
本願の開示する並列処理装置及びノード間通信方法の一つの態様によれば、通信処理を高速化することができるという効果を奏する。
【図面の簡単な説明】
【００２０】
【図１】図１は、ＨＰＣシステムの一例を表す構成図である。
【図２】図２は、計算ノードのハードウェア構成図である。
【図３】図３は、管理ノードのソフトウェア構成を表す図である。
【図４】図４は、実施例１に係る計算ノードのブロック図である。
【図５】図５は、分散共有配列を説明するための図である。
【図６】図６は、ランク計算ノード対応表の一例の図である。
【図７】図７は、通信領域管理テーブルの一例の図である。
【図８】図８は、テーブル選択機構の一例の図である。
【図９】図９は、実施例１に係る計算ノードによるアクセス先のメモリアドレスの特定処理を説明するための図である。
【図１０】図１０は、ＲＤＭＡ通信の準備処理のフローチャートである。
【図１１】図１１は、グローバルアドレス機構の初期化の処理のフローチャートである。
【図１２】図１２は、通信領域登録処理のフローチャートである。
【図１３】図１３は、ＲＤＭＡ通信を用いたデータコピー処理のフローチャートである。
【図１４】図１４は、リモート間コピーの処理のフローチャートである。
【図１５】図１５は、一部のランクに分散共有配列が割り当てられた場合の通信領域管理テーブルの一例の図である。
【図１６】図１６は、部分配列のサイズがランク毎に異なる場合の通信領域管理テーブルの一例の図である。
【図１７】図１７は、実施例２に係る計算ノードのブロック図である。
【図１８】図１８は、実施例２に係る計算ノードによるアクセス先のメモリアドレスの特定処理を説明するための図である。
【図１９】図１９は、変数管理テーブルの一例の図である。
【図２０】図２０は、２つの共有変数をまとめて管理する場合の変数管理テーブルの一例の図である。
【発明を実施するための形態】
【００２１】
以下に、本願の開示する並列処理装置及びノード間通信方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する並列処理装置及びノード間通信方法が限定されるものではない。
【実施例１】
【００２２】
図１は、ＨＰＣシステムの一例を表す構成図である。図１に示すように、ＨＰＣシステム１００は、管理ノード２と複数の計算ノード１を有する。ここで、図１では、管理ノード２を１つしか図示していないが、実際には、ＨＰＣシステム１００は、複数の管理ノード２を有する場合がある。このＨＰＣシステム１００が、「並列処理装置」の一例にあたる。
【００２３】
計算ノード１は、利用者が指示する計算処理を実行するためのノードである。計算ノード１は、並列プログラムを実行し演算処理を行う。計算ノード１は、他の計算ノード１とインターコネクトで接続される。そして、計算ノード１は、並列プログラムの実行に際し、例えば、他の計算ノード１との間でＲＤＭＡ通信を行う。
【００２４】
ここで、並列プログラムは、複数の計算ノード１に割り当てられ、それぞれの計算ノード１がプログラムを実行することで１連の処理を実行するプログラムである。そして、各計算ノード１が並列プログラムを実行することにより、各計算ノード１がそれぞれプロセスを生成する。各計算ノード１が生成したプロセスをまとめたものを並列プロセスという。この並列プロセスの識別情報が、「第２識別情報」にあたる。各計算ノード１が、並列プログラムを実行した場合のそれぞれの計算ノード１が実行する処理を「ジョブ」という場合がある。
【００２５】
また、１つの並列プロセスを構成する各プロセスには、通し番号が付けられる。以下では、プロセスに振られた通し番号を「ランク」という。このランクが、「第１識別情報」の一例にあたる。また、以下では、ランクに対応するプロセスのことも「ランク」と呼ぶ場合がある。１つの計算ノード１が、１つのランクを実行してもよいし、複数のランクを実行してもよい。
【００２６】
管理ノード２は、計算ノード１の運用管理を含むシステム全体の管理を行う。管理ノード２は、例えば、計算ノード１の異常発生を監視し、異常発生時には対処となる処理を実行する。
【００２７】
また、管理ノード２は、計算ノード１に対してジョブの割り当てを行う。例えば、管理ノード２には、図示していない端末装置が接続される。ここで、端末装置は、実行するジョブの内容を指示する操作者が使用するコンピュータである。管理ノード２は、操作者からの実行するジョブの内容及び実行依頼の入力を端末装置から受ける。ジョブの内容には、実行に用いる並列プログラムやデータ、ジョブ種、使用するコア数、使用するメモリ容量及びジョブの実行に要する最大時間などが含まれる。管理ノード２は、実行依頼を受けると、計算ノード１に並列プログラムの実行要求を送信する。その後、管理ノード２は、ジョブの処理結果を計算ノード１から受信する。
【００２８】
図２は、計算ノードのハードウェア構成図である。ここでは、計算ノード１を例に説明するが、本実施例では、管理ノード２も同様の構成を有する。
【００２９】
図２に示すように、計算ノード１は、ＣＰＵ１１、メモリ１２、インターコネクトアダプタ１３、Ｉ／Ｏ（Input/Output）バスアダプタ１４、システムバス１５、Ｉ／Ｏバス１６、ネットワークアダプタ１７、ディスクアダプタ１８及びディスク１９を有する。
【００３０】
ＣＰＵ１１は、システムバス１５を介して、メモリ１２、インターコネクトアダプタ１３及びＩ／Ｏバスアダプタ１４と接続する。ＣＰＵ１１は、計算ノード１の装置全体を制御する。ＣＰＵ１１は、マルチコアプロセッサであってもよい。ＣＰＵ１１が、並列プログラムを実行することで実現する機能の少なくとも一部を、ＡＳＩＣ（Application  Specific  Integrated  Circuit）又はＤＳＰ（Digital  Processing  Unit）などの電子回路で実現してもよい。また、ＣＰＵ１１は、後述するインターコネクトアダプタ１３を介して他の計算ノード１及び管理ノード２と通信を行う。また、ＣＰＵ１１は、後述するディスク１９からＯＳ（Operating  System）のプログラムやアプリケーションプログラムを含む各種プログラムを実行することでプロセスを生成する。
【００３１】
メモリ１２は、計算ノード１の主記憶装置である。メモリ１２は、ＣＰＵ１１によりディスク１９から読み出されたＯＳのプログラムやアプリケーションプログラムを含む各種プログラムが展開される。また、メモリ１２は、ＣＰＵ１１が実行する処理に用いる各種データを格納する。メモリ１２としては、例えば、ＲＡＭ（Random  Access  Memory）などが用いられる。
【００３２】
インターコネクトアダプタ１３は、他の計算ノード１と接続するためのインタフェースを有する。インターコネクトアダプタ１３は、他の計算ノード１に繋がるインターコネクトルータやスイッチに接続する。例えば、インターコネクトアダプタ１３は、他の計算ノード１のインターコネクトアダプタ１３との間でＲＤＭＡ通信を行う。
【００３３】
Ｉ／Ｏバスアダプタ１４は、ネットワークアダプタ１７及びディスク１９に接続するためのインタフェースである。Ｉ／Ｏバスアダプタ１４は、Ｉ／Ｏバス１６を介してネットワークアダプタ１７及びディスクアダプタ１８と接続する。ここで、図２では、周辺機器としてネットワークアダプタ１７及びディスク１９を例示しているが、これ以外にも周辺機器が接続されてもよい。また、インターコネクトアダプタが、Ｉ／Ｏバスに接続されていてもよい。
【００３４】
ネットワークアダプタ１７は、システムの内部ネットワークに接続するためのインタフェースを有する。例えば、ＣＰＵ１１は、ネットワークアダプタ１７を介して管理ノード２と通信を行う。
【００３５】
ディスクアダプタ１８は、ディスク１９に接続するためのインタフェースを有する。ディスクアダプタ１８は、ＣＰＵ１１からのデータの書き込み命令及び読み出し命令にしたがい、ディスク１９に対してデータの書き込み又は読み出しを行う。
【００３６】
ディスク１９は、計算ノード１の補助記憶装置である。ディスク１９は、例えば、ハードディスクである。ディスク１９には、ＯＳのプログラム及びアプリケーションプログラムを含む各種プログラム、並びに、各種データが格納される。
【００３７】
ここで、計算ノード１は、例えば、Ｉ／Ｏバスアダプタ１４、Ｉ／Ｏバス１６、ネットワークアダプタ１７、ディスクアダプタ１８及びディスク１９を有さなくてもよい。その場合、例えば、ディスク１９などを有し計算ノード１に変わりＩ／Ｏ処理を実行するＩ／ＯノードなどがＨＰＣシステム１００に搭載されてもよい。また、管理ノード２は、例えば、インターコネクトアダプタ１３を有さない構成をとることもできる。
【００３８】
次に、図３を参照して、管理ノード２が有するソフトウェアについて説明する。図３は、管理ノードのソフトウェア構成を表す図である。
【００３９】
管理ノード２は、上位ソフトウェアソースコード２１及びグローバルアドレス通信のためのライブラリのヘッダを表すグローバルアドレス通信ライブラリヘッダファイル２２をディスク１９に有する。上位ソフトウェアとは、並列プログラムを含むアプリケーションである。管理ノード２は、上位ソフトウェアソースコード２１を端末装置から取得してもよい。
【００４０】
さらに、管理ノード２は、クロスコンパイラ２３を有する。クロスコンパイラ２３は、ＣＰＵ１１により実行される。そして、管理ノード２は、クロスコンパイラ２３により、グローバルアドレス通信ライブラリヘッダファイル２２を用いて上位ソフトウェアソースコード２１をコンパイルし、上位ソフトウェア実行形式コード２４を生成する。上位ソフトウェア実行形式コード２４は、例えば、並列プログラムの実行形式コードである。
【００４１】
この時、クロスコンパイラ２３は、グローバルアドレスで共有する変数や分散共有配列毎に論理的な通信領域番号である論理通信領域番号を決定する。ここで、グローバルアドレスとは、並列プロセス内で共通なグローバルメモリアドレス空間を表すアドレスである。また、分散共有配列とは、並列プロセスで用いる所定のデータ配列を各ランクに分散共有させた状態の仮想的な一次元配列であり、連番の要素番号によって各ランクで用いられる通信領域が示される。クロスコンパイラ２３は、論理通信領域番号としてすべてのランクで同一の論理通信領域番号を使用する。
【００４２】
そして、クロスコンパイラ２３は、決定した変数や論理通信領域番号を生成した上位ソフトウェア実行形式コード２４に埋め込む。そして、クロスコンパイラ２３は、生成した上位ソフトウェア実行形式コード２４をディスク１９に格納する。このクロスコンパイラ２３が、「生成部」の一例にあたる。
【００４３】
管理ノード管理ソフトウェア２５は、管理ノード２が実行する計算ノード１の運用管理などの各種処理を実現するためのソフトウェア群である。ＣＰＵ１１は、管理ノード管理ソフトウェア２５を実行することで、計算ノード１の運用管理などの各種処理を実現する。例えば、ＣＰＵ１１は、管理ノード管理ソフトウェア２５を実行することで、操作者から指定されたジョブを計算ノード１に実行させる。その場合、ＣＰＵ１１により実行されることで、管理ノード管理ソフトウェア２５は、並列プロセスの識別情報である並列プロセス番号及びその並列プロセスを実行する各計算ノード１に割り当てられるランク番号を決定する。このランク番号が、「第１識別情報」の一例にあたる。また、並列プロセス番号が、「第２識別情報」の一例にあたる。さらに、ＣＰＵ１１は、管理ノード管理ソフトウェア２５を実行することで、上位ソフトウェア実行形式コード２４を並列プロセス番号及び各計算ノード１に割り当てるランク番号とともに計算ノード１へ送信する。
【００４４】
次に、図４を参照して、本実施例に係る計算ノード１について詳細に説明する。図４は、実施例１に係る計算ノードのブロック図である。本実施例に係る計算ノード１は、図４に示すように、アプリケーション実行部１０１、グローバルアドレス通信管理部１０２、ＲＤＭＡ管理部１０３及びＲＤＭＡ通信部１０４を有する。アプリケーション実行部１０１、グローバルアドレス通信管理部１０２、ＲＤＭＡ管理部１０３及び統括管理部１０５の機能は、図２におけるＣＰＵ１１及びメモリ１２により実現される。ここでは、上位ソフトウェアとして並列プログラムを実行する場合について説明する。
【００４５】
計算ノード１は、図５に示すような分散共有配列を用いて並列プログラムを実行する。図５は、分散共有配列を説明するための図である。図５に示す分散共有配列２００には、ランクが１０個あり、各ランクに要素数が１０の部分配列が割り当てられる場合の例である。
【００４６】
ここでは、分散共有配列２００に対して要素番号が連番で０から９９までふられる。本実施例では、分散共有配列を各ランクで均等に分割した場合、すなわち、各ランクに割り当てられる部分配列がいずれも同じ大きさの場合で説明する。この場合、分散共有配列２００の先頭から要素数１０ずつが部分配列としてランク＃０〜＃９まで割り当てられる。さらに、上述したように、本実施例では、クロスコンパイラ２３によって分散共有配列毎に論理通信領域番号は一意に決められており、例えば、ランク＃０〜＃９の論理通信領域番号はいずれもＰ２である。さらにこの場合、オフセットは０としている。ただし、実際にはオフセットは、どのような値でもよい。
【００４７】
統括管理部１０５は、計算ノード１の統括管理を行うための計算ノード管理ソフトウェアを実行し、タイミング調整などの計算ノード１全体の統括管理を行う。また、統括管理部１０５は、上位ソフトウェア実行形式コード２４として並列プログラムの実行コードを実行依頼とともに管理ノード２から取得する。さらに、統括管理部１０５は、並列プロセス番号及びその並列プロセスを実行する各計算ノード１に割り当てられたランク番号を管理ノード２から取得する。
【００４８】
統括管理部１０５は、並列プロセス番号及び各計算ノード１のランク番号をアプリケーション実行部１０１へ出力する。また、統括管理部１０５は、ユーザプロセスからＲＤＭＡ通信部１０４が有するＲＤＭＡ−ＮＩＣ（Network  Interface  Controller）などのハードウェアへのアクセス権の設定などのＲＤＭＡ通信に用いるハードウェアに対する初期化を行う。さらに、統括管理部１０５は、ＲＤＭＡ通信に用いるハードウェアを有効に設定する。
【００４９】
また、統括管理部１０５は、実行タイミングの調整などを行い、並列プログラムの実行コードをアプリケーション実行部１０１に実行させる。その後、統括管理部１０５は、並列プログラムの実行結果をアプリケーション実行部１０１から取得する。そして、統括管理部１０５は、取得した実行結果を管理ノード２へ送信する。
【００５０】
アプリケーション実行部１０１は、並列プロセス番号及び各計算ノードのランク番号の入力を統括管理部１０５から受ける。さらに、アプリケーション実行部１０１は、並列プログラムの実行形式コードの入力を統括管理部１０５から実行依頼とともに受ける。そして、アプリケーション実行部１０１は、取得した並列プログラムの実行形式コードを実行することで、プロセスを形成し、並列プログラムを実行する。
【００５１】
並列プログラムの実行後、アプリケーション実行部１０１は、実行結果を取得する。そして、アプリケーション実行部１０１は、実行結果を統括管理部１０５へ出力する。
【００５２】
また、アプリケーション実行部１０１は、ＲＤＭＡ通信の準備として、以下の処理を実行する。アプリケーション実行部１０１は、形成した並列プロセスの並列プロセス番号及び自プロセスのランク番号を取得する。そして、アプリケーション実行部１０１は、取得した並列プロセス番号及びランク番号をグローバルアドレス通信管理部１０２へ出力する。次に、アプリケーション実行部１０１は、グローバルアドレス機構の初期化をグローバルアドレス通信管理部１０２に通知する。
【００５３】
さらに、グローバルアドレス機構の初期化の完了後、アプリケーション実行部１０１は、通信領域番号変換テーブル１４４の初期化の指示をグローバルアドレス通信管理部１０２に通知する。
【００５４】
次に、アプリケーション実行部１０１は、ランクと計算ノード１との対応を表す図６に示すランク計算ノード対応表２０１を生成する。図６は、ランク計算ノード対応表の一例の図である。ランク計算ノード対応表２０１は、各ランクを処理する計算ノード１を表すテーブルである。ランク計算ノード対応表２０１には、ランク番号に対応させて計算ノード１の番号が登録される。例えば、図６のランク計算ノード対応表２０１では、ランク＃１が計算ノードｎ１により処理されていることが分かる。アプリケーション実行部１０１は、生成したランク計算ノード対応表２０１をグローバルアドレス通信管理部１０２へ出力する。
【００５５】
次に、アプリケーション実行部１０１は、静的に獲得するグローバルアドレス変数や配列のメモリ領域を取得する。これにより、アプリケーション実行部１０１は、各分散共有配列を共有する各ランクに割り当てるメモリ領域を決定する。そして、アプリケーション実行部１０１は、獲得したメモリ領域の先頭アドレス、領域のサイズ及び統括管理部１０５から取得したコンパイル時に決定された論理通信領域番号をグローバルアドレス通信管理部１０２に送信し、通信領域の登録を指示する。
【００５６】
そして、通信領域の登録が完了後、アプリケーション実行部１０１は、実行する並列プログラムに対応する全ランクでの登録終了を待つために全ランクを同期させる。本実施例では、アプリケーション実行部１０１は、プロセス間同期処理によって各ランクの登録処理の終了を認識する。これにより、アプリケーション実行部１０１は、通信領域情報の交換を用いた場合に比べて、容易に且つ高速に同期を行うことができる。なお、動的に獲得する変数や配列領域については、アプリケーション実行部１０１は、適切なタイミングで登録及びランク間の同期を行う。プロセス間同期処理は、ソフトウェアで実現されても、ハードウェアで実現されてもよい。
【００５７】
その後、ＲＤＭＡ通信によりデータの送受信を行う場合、アプリケーション実行部１０１は、ＲＤＭＡ通信におけるアクセス先の情報をグローバルアドレス通信管理部１０２へ送信する。ここで、アクセス先の情報には、使用する分散共有配列の識別情報及び要素番号の情報が含まれる。このアプリケーション実行部１０１が、「メモリ領域決定部」の一例にあたる。
【００５８】
グローバルアドレス通信管理部１０２は、グローバルアドレス通信ライブラリを有する。また、グローバルアドレス通信管理部１０２は、図７に示す通信領域管理テーブル２１０を有する。図７は、通信領域管理テーブルの一例の図である。通信領域管理テーブル２１０は、配列名が「Ａ」である分散共有配列が、並列プロセスを実行する全てのランクに部分配列が均等に割り当てられていることを表す。そして、通信領域管理テーブル２１０は、各ランクに割り当てられた部分配列要素数が「１０」であり、論理通信領域番号が「Ｐ２」であることを表す。すなわち、図７は、図５の分散共有配列２００の配列名を「Ａ」としたものにあたる。このように本実施例に係る計算ノード１は、例えば、１つの分散共有配列に対して１つのエントリを有する通信領域管理テーブル２１０を使用することができる。すなわち、本実施例に係る計算ノード１は、分散共有配列を共有するランク毎にエントリを有するテーブルを用いる場合に比べてメモリ１２の使用量を抑えることができる。
【００５９】
グローバルアドレス通信管理部１０２は、グローバルアドレス機構の初期化の通知をアプリケーション実行部１０１から受ける。グローバルアドレス通信管理部１０２は、未使用の通信領域番号変換テーブル１４４があるか否かを判定する。
【００６０】
ここで、通信領域番号変換テーブル１４４とは、後述するＲＤＭＡ通信部１０４が、ＲＤＭＡ通信を行う場合に論理通信領域番号を物理通信領域番号に変換するためのテーブルである。通信領域番号変換テーブル１４４は、ＲＤＭＡ通信部１０４にハードウェアとして設けられる。すなわち、通信領域番号変換テーブル１４４は、ＲＤＭＡ通信部１０４の資源を使用する。そのため、使用可能な通信領域番号変換テーブル１４４の数はＲＤＭＡ通信部１０４の有する資源によって決定されることが好ましい。そして、グローバルアドレス通信管理部１０２は、使用可能な通信領域番号変換テーブル１４４の上限数を予め記憶しておき、既に使用した通信領域番号変換テーブル１４４の数が上限数に達した場合に、未使用の通信領域番号変換テーブル１４４が無いと判定する。
【００６１】
未使用の通信領域番号変換テーブル１４４がある場合、グローバルアドレス通信管理部１０２は、並列プロセス番号及びランク番号の組み合わせと一意に対応させる通信領域番号変換テーブル１４４にテーブル番号を割り当てる。そして、グローバルアドレス通信管理部１０２は、各テーブル番号に対応する並列プロセス番号及びランク番号を領域変換部１４２が有するテーブル選択用レジスタへの設定をＲＤＭＡ管理部１０３に指示する。
【００６２】
テーブル選択用レジスタの設定が完了後、グローバルアドレス通信管理部１０２は、通信領域番号変換テーブル１４４の初期化の指示をアプリケーション実行部１０１から受ける。そして、グローバルアドレス通信管理部１０２は、通信領域番号変換テーブル１４４の初期化をＲＤＭＡ管理部１０３に指示する。
【００６３】
その後、グローバルアドレス通信管理部１０２は、先頭アドレス、領域サイズ及び統括管理部１０５から取得したコンパイル時に決定された論理通信領域番号とともに、通信領域の登録の指示をアプリケーション実行部１０１から受ける。そして、グローバルアドレス通信管理部１０２は、先頭アドレス、領域サイズ及び統括管理部１０５から取得したコンパイル時に決定された論理通信領域番号をＲＤＭＡ管理部１０３へ送信し、通信領域の登録を指示する。
【００６４】
また、ＲＤＭＡ通信によりデータの送受信を行う場合、グローバルアドレス通信管理部１０２は、アクセス先の情報の入力をアプリケーション実行部１０１から受ける。例えば、グローバルアドレス通信管理部１０２は、アクセス先の情報として分散共有配列の識別情報及び要素番号の情報を取得する。
【００６５】
そして、グローバルアドレス通信管理部１０２は、通信元及び通信先のグローバルアドレスを用いたＲＤＭＡ通信によるデータのコピー処理を開始する。グローバルアドレス通信管理部１０２は、アプリケーションがコピーしたい配列の要素へのオフセットを計算して求め、また、コピーしたい配列の要素の数からデータ転送サイズを決定する。グローバルアドレス通信管理部１０２は、通信領域管理テーブル２１０を用いてグローバルアドレスからランク番号を取得する。次に、グローバルアドレス通信管理部１０２は、ランク計算ノード対応表２０１からＲＤＭＡ通信の通信元及び通信先の計算ノード１のネットワークアドレスを取得する。次に、グローバルアドレス通信管理部１０２は、取得したネットワークアドレスから、自ノードを含む通信かリモート間コピーかを判定する。
【００６６】
自ノードを含む通信の場合、グローバルアドレス通信管理部１０２は、通信元及び通信先のグローバルアドレス、並びに、並列プロセス番号をＲＤＭＡ管理部１０３に通知する。
【００６７】
リモート間コピーの場合、グローバルアドレス通信管理部１０２は、通信元及び通信先のグローバルアドレス、並びに、並列プロセス番号を、リモート間コピーの通信元となる計算ノード１のＲＤＭＡ管理部１０３に通知する。このグローバルアドレス通信管理部１０２が、「対応情報生成部」の一例にあたる。
【００６８】
ＲＤＭＡ管理部１０３は、ＲＤＭＡ通信部１０４を制御するルート権限を有する。ＲＤＭＡ管理部１０３は、テーブル番号に対応する並列プロセス番号及びランク番号のテーブル選択用レジスタへの設定の指示をグローバルアドレス通信管理部１０２から受ける。そして、ＲＤＭＡ管理部１０３は、領域変換部１４２のテーブル選択用レジスタにテーブル番号に対応させて並列プロセス番号及びランク番号を登録する。
【００６９】
ここで、図８は、テーブル選択機構の一例の図である。テーブル選択機構１４６は、グローバルアドレスに対応する通信領域番号変換テーブル１４４を選択するための回路である。テーブル選択機構１４６は、レジスタ４０１、テーブル選択用レジスタ４１１〜４１４、コンパレータ４２１〜４２４及びセレクタ４２５を有する。
【００７０】
テーブル選択用レジスタ４１１〜４１４は、それぞれ特定のテーブル番号に対応する。図８は４つのテーブル選択用レジスタ４１１〜４１４がある場合であり、例えば、テーブル選択用レジスタ４１１〜４１４は、それぞれテーブル番号が１番〜４番の通信領域番号変換テーブル１４４に対応する。ＲＤＭＡ管理部１０３は、それぞれが対応する通信領域番号変換テーブル１４４の番号に合わせて、並列プロセス番号及びランク番号をテーブル選択用レジスタ４１１〜４１４に登録する。領域変換部１４２におけるテーブル選択機構１４６については、後で詳細に説明する。
【００７１】
その後、ＲＤＭＡ管理部１０３は、通信領域番号変換テーブル１４４の初期化の指示をグローバルアドレス通信管理部１０２から受ける。そして、ＲＤＭＡ管理部１０３は、設定を行ったテーブル選択用レジスタ４１１〜４１４に対応する領域変換部１４２が有する通信領域番号変換テーブル１４４の全エントリを未使用の状態に初期化する。
【００７２】
ＲＤＭＡ管理部１０３は、各部分配列の先頭アドレス、領域サイズ及び統括管理部１０５から取得したコンパイル時に決定された論理通信領域番号とともに、通信領域の登録の指示をグローバルアドレス通信管理部１０２から受信する。そして、ＲＤＭＡ管理部１０３は、使用可能な物理通信領域テーブル１４５があるか否かを判定する。この物理通信領域テーブル１４５は、物理通信領域番号から先頭アドレス及び領域サイズを特定するためのテーブルである。物理通信領域テーブル１４５は、アドレス取得部１４３にハードウェアとして設けられる。そのため、使用可能な物理通信領域テーブル１４５のサイズはＲＤＭＡ通信部１０４の有する資源によって決定されることが好ましい。そして、ＲＤＭＡ管理部１０３は、使用可能な物理通信領域テーブル１４５のサイズの上限値を予め記憶しておき、既に使用した物理通信領域テーブル１４５のサイズが上限値に達した場合に、使用可能な物理通信領域テーブル１４５が無いと判定する。
【００７３】
使用可能な物理通信領域テーブル１４５がある場合、ＲＤＭＡ管理部１０３は、グローバルアドレス通信管理部１０２から受信した各部分配列の先頭アドレス及び領域サイズをそれぞれアドレス取得部１４３に設けられた物理通信領域テーブル１４５に登録する。そして、ＲＤＭＡ管理部１０３は、各先頭アドレス及びサイズを登録したエントリを物理通信領域番号として取得する。すなわち、ＲＤＭＡ管理部１０３は、ランク毎に物理通信領域番号を取得する。
【００７４】
さらに、ＲＤＭＡ管理部１０３は、並列プロセス番号及びランク番号により表される各ランクのグローバルアドレスで特定される通信領域番号変換テーブル１４４を選択する。そして、ＲＤＭＡ管理部１０３は、選択した通信領域番号変換テーブル１４４における受信した論理通信領域番号が示すエントリに、選択した通信領域番号変換テーブル１４４に対応するランクに応じた物理通信領域番号を格納する。
【００７５】
ＲＤＭＡ通信によりデータの送受信を行う場合、ＲＤＭＡ管理部１０３は、通信元及び通信先のグローバルアドレス、並びに、並列プロセス番号をグローバルアドレス通信管理部１０２から取得する。そして、ＲＤＭＡ管理部１０３は、取得した通信元及び通信先のグローバルアドレス、並びに、並列プロセス番号を通信レジスタに設定する。さらに、ＲＤＭＡ管理部１０３は、分散共有配列の識別情報及び要素番号を含むアクセス先の情報をＲＤＭＡ通信部１０４へ出力する。その後、ＲＤＭＡ管理部１０３は、通信方向にしたがった通信コマンドをＲＤＭＡ通信部１０４のコマンドレジスタに書き込み、通信を起動する。
【００７６】
ＲＤＭＡ通信部１０４は、ＲＤＭＡ通信を行うハードウェアであるＲＤＭＡ−ＮＩＣ（Network  Interface  Controller）を有する。ＲＤＭＡ−ＮＩＣは、通信制御部１４１、領域変換部１４２及びアドレス取得部１４３を有する。
【００７７】
通信制御部１４１は、通信に用いる情報を格納する通信レジスタ及びコマンドを格納するコマンドレジスタを有する。通信制御部１４１は、コマンドレジスタに通信コマンドが書き込まれると、通信コマンドにしたがって、通信レジスタに格納された通信元及び通信先のグローバルアドレス、並びに、並列プロセス番号を用いてＲＤＭＡ通信を行う。
【００７８】
例えば、自ノードがデータ送信元となる場合、通信制御部１４１は、データを取得するメモリアドレスを以下の方法で求める。すなわち、通信制御部１４１は、取得した分散共有配列の識別情報及び要素番号を含むアクセス先の情報を用いて、指定された要素番号を所有するランク番号及び論理通信領域番号を取得する。次に、通信制御部１４１は、並列プロセス番号、ランク番号及び論理通信領域番号を領域変換部１４２へ出力する。
【００７９】
その後、通信制御部１４１は、アクセス先の先頭アドレス及びサイズの入力をアドレス取得部１４３から受ける。そして、通信制御部１４１は、先頭アドレス及びサイズに通信パケットに格納されたオフセットを結合し、アクセス先のメモリアドレスを求める。この場合、データの送信元であるので、アクセス先のメモリアドレスはデータの読み出すメモリアドレスとなる。
【００８０】
次に、通信制御部１４１は、通信パケットヘッダに並列プロセス番号、通信先のグローバルアドレスを表すランク番号及び論理通信領域番号、並びに、オフセットを通信パケットのヘッダにセットする。そして、通信制御部１４１は、求めたアクセス先のメモリアドレスから決められたサイズ分だけデータを読み出し、読み出したデータに通信パケットヘッダを付加させた通信パケットを通信先の計算ノード１のネットワークアドレスに向けてインターコネクトアダプタ１３を介して送信する。
【００８１】
また、自ノードがデータ受信先となる場合、通信制御部１４１は、インターコネクトアダプタ１３を介して並列プロセス番号、グローバルアドレスを表すランク番号及び論理通信領域番号、オフセット、並びに、データを含む通信パケットを受信する。そして、通信制御部１４１は、通信パケットのヘッダから並列プロセス番号、並びに、グローバルアドレスを表すランク番号及び論理通信領域番号を抽出する。
【００８２】
次に、通信制御部１４１は、並列プロセス番号、ランク番号及び論理通信領域番号を領域変換部１４２へ出力する。その後、通信制御部１４１は、アクセス先の先頭アドレス及びサイズの入力をアドレス取得部１４３から受ける。そして、通信制御部１４１は、取得したサイズと通信パケットから抽出したオフセットから通信領域のサイズを超えていないことを確認する。通信領域のサイズを超えている場合、ＲＤＭＡ通信部１０４は、エラーパケットをＲＤＭＡ管理部１０３に返信する。
【００８３】
次に、通信制御部１４１は、先頭アドレス及びサイズに通信パケットにオフセットを加算し、アクセス先のメモリアドレスを求める。この場合、データの受信先であるので、アクセス先のメモリアドレスはデータを格納するメモリアドレスとなる。そして、通信制御部１４１は、求めたアクセス先のメモリアドレスにデータを格納する。この通信制御部１４１が、「通信部」の一例にあたる。
【００８４】
領域変換部１４２は、ＲＤＭＡ管理部１０３により登録された通信領域番号変換テーブル１４４を記憶する。また領域変換部１４２は、図８に示すテーブル選択機構１４６を有する。この通信領域番号変換テーブル１４４が、「第１対応情報」の一例にあたる。
【００８５】
ＲＤＭＡ通信によるデータの送受信を行う場合、領域変換部１４２は、並列プロセス番号、ランク番号及び論理通信領域番号を通信制御部１４１から取得する。次に、領域変換部１４２は、並列プロセス番号及びランク番号に応じて通信領域番号変換テーブル１４４を選択する。
【００８６】
ここで、図８を参照して、通信領域番号変換テーブル１４４の選択について詳細に説明する。領域変換部１４２は、通信制御部１４１から取得した並列プロセス番号及びランク番号をレジスタ４０１に格納する。
【００８７】
コンパレータ４２１は、レジスタ４０１に格納された値とテーブル選択用レジスタ４１１に格納された値を比較する。値が一致した場合、コンパレータ４２１は、一致したことを表す信号をセレクタ４２５へ出力する。また、コンパレータ４２２は、レジスタ４０１に格納された値とテーブル選択用レジスタ４１２に格納された値を比較する。値が一致した場合、コンパレータ４２２は、一致したことを表す信号をセレクタ４２５へ出力する。また、コンパレータ４２３は、レジスタ４０１に格納された値とテーブル選択用レジスタ４１３に格納された値を比較する。値が一致した場合、コンパレータ４２３は、一致したことを表す信号をセレクタ４２５へ出力する。また、コンパレータ４２４は、レジスタ４０１に格納された値とテーブル選択用レジスタ４１４に格納された値を比較する。値が一致した場合、コンパレータ４２４は、一致したことを表す信号をセレクタ４２５へ出力する。ここで、並列プロセス番号及びランク番号に対応する通信領域番号変換テーブル１４４が登録されていなければ、ＲＤＭＡ通信部１０４は、エラーパケットをＲＤＭＡ管理部１０３に返信する。
【００８８】
セレクタ４２５は、コンパレータ４２１から一致したことを表す信号を受けた場合、１番の通信領域番号変換テーブル１４４を選択する信号を出力する。また、セレクタ４２５は、コンパレータ４２２から一致したことを表す信号を受けた場合、１２番の通信領域番号変換テーブル１４４を選択する信号を出力する。また、セレクタ４２５は、コンパレータ４２３から一致したことを表す信号を受けた場合、３番の通信領域番号変換テーブル１４４を選択する信号を出力する。また、セレクタ４２５は、コンパレータ４２４から一致したことを表す信号を受けた場合、４番の通信領域番号変換テーブル１４４を選択する信号を出力する。そして、領域変換部１４２は、セレクタ４２５から出力された番号に応じた通信領域番号変換テーブル１４４を選択する。
【００８９】
その後、領域変換部１４２は、論理通信領域番号に対応する物理通信領域番号を選択した通信領域番号変換テーブル１４４から取得する。そして、領域変換部１４２は、取得した物理通信領域番号をアドレス取得部１４３へ出力する。この領域変換部１４２が、「特定部」の一例にあたる。
【００９０】
アドレス取得部１４３は、物理通信領域テーブル１４５を記憶する。この物理通信領域テーブル１４５が、「第２対応情報」の一例にあたる。アドレス取得部１４３は、物理通信領域番号の入力を領域変換部１４２から受ける。そして、アドレス取得部１４３は、取得した物理通信領域番号に対応する先頭アドレス及びサイズを物理通信領域テーブル１４５から取得する。その後、アドレス取得部１４３は、取得した先頭アドレス及びサイズを通信制御部１４１へ出力する。
【００９１】
次に、図９を参照して、アクセス先のメモリアドレスの特定の処理についてまとめて説明する。図９は、実施例１に係る計算ノードによるアクセス先のメモリアドレスの特定処理を説明するための図である。ここでは、パケットヘッダ３００を有する通信パケットについてのアクセス先を求める場合で説明する。パケットヘッダ３００は、並列プロセス番号３０１、ランク番号３０２、論理通信領域番号３０３及びオフセット３０４を含む。
【００９２】
テーブル選択機構１４６は、領域変換部１４２に含まれる機構である。テーブル選択機構１４６は、パケットヘッダ３００の中の並列プロセス番号３０１及びランク番号３０２を通信制御部１４１から取得する。そして、テーブル選択機構１４６は、並列プロセス番号３０１及びランク番号３０２で表されるランクに対応する通信領域番号変換テーブル１４４を選択する。
【００９３】
領域変換部１４２は、テーブル選択機構１４６により選択された通信領域番号変換テーブル１４４を用いて、論理通信領域番号３０３に対応する物理通信領域番号をアドレス取得部１４３に出力する。
【００９４】
アドレス取得部１４３は、領域変換部１４２から出力された物理通信領域番号を物理通信領域テーブル１４５に用いて、物理通信領域番号に対応する先頭アドレス及びサイズを出力する。
【００９５】
通信制御部１４１は、アドレス取得部１４３が出力した先頭アドレス及びサイズを基にメモリアドレスを求める。そして、通信制御部１４１は、メモリアドレスに対応するメモリ１２の領域にアクセスする。
【００９６】
次に、図１０を参照して、ＲＤＭＡ通信の準備処理の流れについて説明する。図１０は、ＲＤＭＡ通信の準備処理のフローチャートである。
【００９７】
統括管理部１０５は、実行する並列プログラムに割り当てられた並列プロセス番号及び並列プロセスを実行する各計算ノード１に割り当てられるランク番号を管理ノード２から受信する（ステップＳ１）。統括管理部１０５は、並列プロセス番号及び各ランク番号をアプリケーション実行部１０１へ出力する。アプリケーション実行部１０１は、並列プログラムを実行しプロセスを形成する。さらに、アプリケーション実行部１０１は、並列プロセス番号及び各ランク番号をグローバルアドレス通信管理部１０２に送信する。さらに、アプリケーション実行部１０１は、グローバルアドレス機構の初期化をグローバルアドレス通信管理部１０２へ指示する。アプリケーション実行部１０１は、グローバルアドレス機構の初期化をＲＤＭＡ管理部１０３に指示する。
【００９８】
ＲＤＭＡ管理部１０３は、グローバルアドレス機構の初期化の指示をアプリケーション実行部１０１から受ける。ＲＤＭＡ管理部１０３は、グローバルアドレス機構の初期化を実行する（ステップＳ２）。グローバルアドレス機構の初期化については、後で詳細に説明する。
【００９９】
次に、アプリケーション実行部１０１は、グローバルアドレス機構の初期化完了後にランク計算ノード対応表２０１を生成する（ステップＳ３）。
【０１００】
次に、アプリケーション実行部１０１は、通信領域登録処理をグローバルアドレス通信管理部１０２に指示する。グローバルアドレス通信管理部１０２は、通信領域登録処理をＲＤＭＡ管理部１０３に指示する。グローバルアドレス通信管理部１０２は、通信領域登録処理を実行する（ステップＳ４）。通信領域登録処理については、後で詳細に説明する。
【０１０１】
次に、図１１を参照して、グローバルアドレス機構の初期化の処理の流れについて説明する。図１１は、グローバルアドレス機構の初期化の処理のフローチャートである。この図１１に記載したフローチャートの処理は、図１０におけるステップＳ２の一例にあたる。
【０１０２】
ＲＤＭＡ管理部１０３は、未使用の通信領域番号変換テーブル１４４があるか否かを判定する（ステップＳ１１）。未使用の通信領域番号変換テーブル１４４がない場合（ステップＳ１１：否定）、ＲＤＭＡ管理部１０３は、エラー応答を発行しグローバルアドレス機構の初期化の処理を終了する。この場合、計算ノード１は、エラー通知を発行し、グローバルアドレスを用いたＲＤＭＡ通信の準備処理を終了する。
【０１０３】
これに対して、未使用の通信領域番号変換テーブル１４４がある場合（ステップＳ１１：肯定）、ＲＤＭＡ管理部１０３は、各並列プロセス番号及びランク番号に対応する通信領域番号変換テーブル１４４のそれぞれのテーブル番号を決定する（ステップＳ１２）。
【０１０４】
次に、ＲＤＭＡ管理部１０３は、領域変換部１４２のテーブル選択機構１４６に設けられたテーブル選択用レジスタ４１１〜４１４に、対応する通信領域番号変換テーブル１４４に応じた並列ジョブ番号及びランク番号を設定する（ステップＳ１３）。
【０１０５】
次に、ＲＤＭＡ管理部１０３は、領域変換部１４２が有する各テーブル番号に対応する通信領域番号変換テーブル１４４を初期化する（ステップＳ１４）。
【０１０６】
さらに、ＲＤＭＡ管理部１０３及び統括管理部１０５は、ユーザプロセスからＲＤＭＡ通信のためのハードウェアへのアクセス権の設定などのその他のＲＤＭＡ機構の初期化を実行する（ステップＳ１５）。
【０１０７】
次に、図１２を参照して、通信領域登録処理の流れについて説明する。図１２は、通信領域登録処理のフローチャートである。この図１２に記載したフローチャートの処理は、図１０におけるステップＳ４の一例にあたる。
【０１０８】
ＲＤＭＡ管理部１０３は、物理通信領域テーブル１４５の空きがあるか否かを判定する（ステップＳ２１）。物理通信領域テーブル１４５の空きが無い場合（ステップＳ２１：否定）、ＲＤＭＡ管理部１０３は、エラー応答を発行し通信領域登録処理を終了する。この場合、計算ノード１は、エラー通知を発行し、グローバルアドレスを用いたＲＤＭＡ通信の準備処理を終了する。
【０１０９】
これに対して、物理通信領域テーブル１４５の空きがある場合（ステップＳ２１：肯定）、ＲＤＭＡ管理部１０３は、先頭アドレス及びサイズに対応する物理通信領域番号を決定する。さらに、ＲＤＭＡ管理部１０３は、アドレス取得部１４３が有する物理通信領域テーブル１４５の決定した物理通信領域番号のエントリに対応させて先頭アドレス及びサイズを登録する（ステップＳ２２）。
【０１１０】
次に、ＲＤＭＡ管理部１０３は、並列プロセス番号及びランク番号に対応する通信領域番号変換テーブル１４４の分散共有配列に割り当てられた論理通信領域番号に対応するエントリに物理通信領域番号を登録する（ステップＳ２３）。
【０１１１】
次に、図１３を参照して、ＲＤＭＡ通信を用いたデータコピーの処理について説明する。図１３は、ＲＤＭＡ通信を用いたデータコピー処理のフローチャートである。
【０１１２】
グローバルアドレス通信管理部１０２は、通信パケットに含まれるグローバルアドレスからランク番号を抽出する（ステップＳ１０１）。
【０１１３】
グローバルアドレス通信管理部１０２は、抽出したランク番号でランク計算ノード対応表２０１を参照し、ランクに対応したネットワークアドレスを抽出する（ステップＳ１０２）。
【０１１４】
次に、グローバルアドレス通信管理部１０２は、通信元及び通信先アドレスからリモート間コピーか否かを判定する（ステップＳ１０３）。リモート間コピーでない場合（ステップＳ１０３：否定）、すなわち、自ノードを含む通信の場合、グローバルアドレス通信管理部１０２は、以下の処理を実行する。
【０１１５】
グローバルアドレス通信管理部１０２は、ＲＤＭＡ管理部１０３を介して、通信元及び通信先のグローバルアドレス、並列プロセス番号、並びに、サイズを、ＲＤＭＡ管理部１０３を介してハードウェアレジスタに設定する（ステップＳ１０４）。
【０１１６】
次に、グローバルアドレス通信管理部１０２は、ＲＤＭＡ管理部１０３を介して、通信方向にしたがった通信コマンドをハードウェアレジスタに書き込み、通信を起動する。ＲＤＭＡ通信部１０４は、ＲＤＭＡ通信を用いたデータコピーを実行する（ステップＳ１０５）。
【０１１７】
一方、リモート間コピーの場合（ステップＳ１０３：肯定）、グローバルアドレス通信管理部１０２は、リモート間コピー処理を実行する（ステップＳ１０６）。
【０１１８】
次に、図１４を参照して、リモート間コピーの処理について説明する。図１４は、リモート間コピーの処理のフローチャートである。この図１４に記載したフローチャートの処理は、図１３におけるステップＳ１０６の一例にあたる。
【０１１９】
グローバルアドレス通信管理部１０２は、ＲＤＭＡ通信を用いた通信のデータ送信元をリモート間コピーのデータ送信元とし、データ受信先を自ノードのワーク用グローバルメモリ領域に設定する（ステップＳ１１１）。
【０１２０】
次に、グローバルアドレス通信管理部１０２は、設定した通信元及び通信先における第１コピー処理（ＲＤＭＡ  ＧＥＴ処理）を実行する（ステップＳ１１２）。このステップＳ１１２は、例えば、図１３のステップＳ１０４及びＳ１０５の処理で実現される。
【０１２１】
次に、グローバルアドレス通信管理部１０２は、ＲＤＭＡ通信を用いた通信のデータ送信元を自ノードのワーク用グローバルメモリ領域とし、通信先をリモート間コピーのデータ受信先に設定する（ステップＳ１１３）。
【０１２２】
次に、グローバルアドレス通信管理部１０２は、設定した通信元及び通信先における第２コピー処理（ＲＤＭＡ  ＰＵＴ処理）を実行する（ステップＳ１１４）。このステップＳ１１４は、例えば、図１３のステップＳ１０４及びＳ１０５の処理で実現される。
【０１２３】
以上に説明したように、本実施例に係るＨＰＣシステムは、分散並列配列の部分配列が割り振られた全てのランクに対応させて一意の論理通信領域番号を割り当てる。そして、ＨＰＣシステムは、ハードウェアを用いてグローバルアドレスを基に、論理通信領域番号を各ランクに割り当てられた物理領域番号に変換することで、論理通信領域番号を用いて生成されたパケットのＲＤＭＡ通信を実現する。これにより、通信の度に各ランクに割り当てられた通信領域の物理通信領域番号を示す通信領域管理テーブルを参照しなくてもよくなり、通信処理を高速化することができる。
【０１２４】
また、本実施例に係るＨＰＣシステムは、通信領域管理テーブルを持たなくてもよくなるため、メモリ領域の使用率を下げることができ、並列プログラムの実行メモリ領域をより多く確保することができる。
【０１２５】
（変形例）
次に、実施例１に係るＨＰＣシステム１００の変形例を説明する。実施例１では、分散共有配列として並列プロセスを実行する全てのランクに均等に部分配列を割り当てた場合で説明したが、部分配列の割り当て方はこれに限らない。
【０１２６】
例えば、分配共有配列が並列プロセスを実行するランクのうちの一部のランクに割り当てられた場合、グローバルアドレス通信管理部１０２は、図１５に示す通信領域管理テーブル２１１及びランクリスト２１２を有する。図１５は、一部のランクに分散共有配列が割り当てられた場合の通信領域管理テーブルの一例の図である。通信領域管理テーブル２１１は、配列名が「Ａ」である分散共有配列の各ランクに割り当てられた部分配列要素数が「１０」であり、論理通信領域番号が「Ｐ２」であることを表す。また、通信領域管理テーブル２１１のランクポインタは、ランクリスト２１２のエントリのいずれかを指す。すなわち、配列名が「Ａ」の分散共有配列は、ランクリスト２１２に登録されていないランクには割り当てられていない。この場合も、論理通信領域番号は分散共有配列に対して一意に決められるので、割り当てられていないプロセスのグローバルアドレス通信管理部１０２は、論理通信領域番号を通信領域管理テーブル２１１に登録しなくてもよい。この場合でも、グローバルアドレス通信管理部１０２は、通信領域管理テーブル２１１及びランクリスト２１２を用いることで、割り当てられているプロセスとのＲＤＭＡ通信を行うことができる。
【０１２７】
また、例えば、部分配列のサイズがランク毎に異なる場合、グローバルアドレス通信管理部１０２は、図１６に示す通信領域管理テーブル２１３を有する。図１６は、部分配列のサイズがランク毎に異なる場合の通信領域管理テーブルの一例の図である。通信領域管理テーブル２１３は、配列名が「Ａ」である分散共有配列の各ランクに異なるサイズの部分配列が割り当てられたことを表す。この場合、配列名が「Ａ」の分散共有配列では、部分配列先頭要素番号の欄に領域番号が登録されることを示す特別なエントリ２１４が登録される。また、この場合も配列名が「Ａ」である分散共有配列を共有しないランクを外すことができる。この場合、グローバルアドレス通信管理部１０２は、通信領域管理テーブル２１３を用いることでＲＤＭＡ通信を行うことができる。
【０１２８】
さらに、グローバルアドレス通信管理部１０２は、図７，１５及び１６で示した通信領域管理テーブル２１０，２１１及び２１３を混在させたテーブルを用いてＲＤＭＡ通信を行うこともできる。
【０１２９】
以上に説明したように、変形例に係るＨＰＣシステム１００は、部分配列の一部が分散共有配列を共有していない場合や部分配列のサイズがランク毎に異なる場合にも、論理通信領域番号を用いたＲＤＭＡ通信を行うことができる。このように、本変形例に係るＨＰＣシステム１００は、分散共有配列のランクへの割り当て方法に依らず、通信処理を高速化することができる。またこの場合も、各ランクそれぞれの物理通信領域を示す通信領域管理テーブルを持たなくてもよいため、メモリ領域の使用率を下げることができ、並列プログラムの実行メモリ領域をより多く確保することができる。
【実施例２】
【０１３０】
図１７は、実施例２に係る計算ノードのブロック図である。本実施例に係る計算ノードは、実施例１における通信領域番号変換テーブル１４４と物理通信領域テーブル１４５とをまとめた通信領域テーブル１４７を使用してアクセス先のメモリアドレスを特定する。以下では、各部の実施例１と同じ機能については説明を省略する。
【０１３１】
アドレス取得部１４３は、グローバルアドレス通信管理部１０２により決定されたテーブル番号に対応する複数の通信領域テーブル１４７を有する。通信領域テーブル１４７は、論理通信領域番号に対応するエントリに先頭アドレスとサイズが登録されたテーブルである。ここで、通信領域テーブル１４７は、ハードウェアで実現される。この通信領域テーブル１４７が、「対応テーブル」の一例にあたる。また、アドレス取得部１４３は、図８のテーブル選択機構１４６を有する。
【０１３２】
図１８は、実施例２に係る計算ノードによるアクセス先のメモリアドレスの特定処理を説明するための図である。ここでは、パケットヘッダ３１０を有する通信パケットの通信を行う場合のアクセス先のメモリアドレスの取得について説明する。アドレス取得部１４３は、パケットヘッダ３１０に格納された並列プロセス番号３１１、ランク番号３１２及び論理通信領域番号３１３を通信制御部１４１から取得する。次に、アドレス取得部１４３は、テーブル選択機構１４６を用いて使用する並列プロセス番号３１１及びランク番号３１２に対応する通信領域テーブル１４７のテーブル番号を取得する。
【０１３３】
次に、アドレス取得部１４３は、取得したテーブル番号に対応する通信領域テーブル１４７を選択する。そして、アドレス取得部１４３は、選択した通信領域テーブル１４７に論理通信領域番号を用いて、論理通信領域番号に対応した先頭アドレス及びサイズを出力する。
【０１３４】
通信制御部１４１は、アドレス取得部１４３から出力された先頭アドレス及びサイズにオフセット３１４を用いてアクセス先のメモリアドレスを求める。そして、通信制御部１４１は、メモリ１２上の求めたメモリアドレスにアクセスする。
【０１３５】
以上に説明したように、本実施例に係るＨＰＣシステムは、論理通信領域番号を物理通信領域番号に変換せずに、アクセス先のメモリアドレスを特定することができる。これにより、通信処理をより早くすることができる。
【０１３６】
また、以上の説明では、通信元と通信先のランクが同一である場合やランクが異なっていても計算ノードが同一である場合でも、ＲＤＭＡ通信部１０４が有するＲＤＭＡ−ＮＩＣなどの通信ハードウェアのループバックによって通信が行われる。ただし、このような場合には、論理通信領域番号から先頭アドレス及びサイズを取得してアクセス先のメモリアドレスを特定しＲＤＭＡ通信を行う処理に、ソフトウェアによる共有メモリや計算ノード１内でのプロセス間通信を使用してもよい。
【０１３７】
さらに、以上では、分散共有配列を各ランクが共有する場合のデータ通信について説明したが、これに限らず、各ランクが共有する値でメモリ１２に格納される情報であれば他の値についても論理通信領域番号を用いた通信を行うことができる。
【０１３８】
例えば、変数を各ランクで共有する場合、各ランクが有する変数はメモリアドレスで表される。そこで、配列名を変数名として、グローバルアドレス通信管理部１０２は、分散共有配列の場合と同様に通信領域管理テーブル２１３と同様のテーブルで、変数を管理することができる。
【０１３９】
この場合も、クロスコンパイラ２３は、各ランクが有する変数を示す値として論理通信領域番号を与える。
【０１４０】
グローバルアドレス通信管理部１０２は、各ランクにおける変数を示すメモリアドレスの領域番号を取得する。そして、グローバルアドレス通信管理部１０２は、図１９に示す変数管理テーブル２２１を生成する。図１９は、変数管理テーブルの一例の図である。変数の場合、サイズを一定にすることは困難である。そこで、部分配列のサイズが異なる場合と同様に、グローバルアドレス通信管理部１０２は、領域番号を表す特別なエントリ２２２を登録した後に、その変数名を有する変数の部分配列先頭要素番号及びランク番号を登録する。
【０１４１】
そして、グローバルアドレス通信管理部１０２及びＲＤＭＡ管理部１０３は、分散共有配列の場合と同様に、並列プロセス番号、ランク番号及び論理通信領域番号を用いて論理通信領域番号からアクセス先のメモリアドレスを求める各種テーブルを作成する。そして、グローバルアドレス通信管理部１０２は、変数管理テーブル２２１を用いてランクを特定する。さらに、ＲＤＭＡ通信部１０４は、論理通信領域番号からアクセス先のメモリアドレスを求める各種テーブルを用いてＲＤＭＡ通信を行う。
【０１４２】
また、変数１つで１つのメモリ領域を確保した場合、資源が枯渇する可能性がある。そこで、ランク内の共有変数をまとめるメモリ領域を確保し、オフセットで管理することもできる。例えば、共有変数ＸとＹの２つがある場合、グローバルアドレス通信管理部１０２は、図２０に示す変数管理テーブル２２３を生成し、それを用いてＲＤＭＡ通信を実行する。図２０は、２つの共有変数をまとめて管理する場合の変数管理テーブルの一例の図である。この場合、変数管理テーブル２２３は、領域番号を示す特別なエントリ２２４を有する。また、変数管理テーブル２２３は、変数名に対して、オフセット及びランク番号が登録される。さらに、変数管理テーブル２２３は、領域の区切りを示す特別なエントリ２２５を有する。
【０１４３】
この場合も、グローバルアドレス通信管理部１０２及びＲＤＭＡ管理部１０３は、分散共有配列の場合と同様に、並列プロセス番号、ランク番号及び論理通信領域番号を用いて論理通信領域番号からアクセス先のメモリアドレスを求める各種テーブルを作成する。そして、グローバルアドレス通信管理部１０２は、変数管理テーブル２２３を用いてランクを特定する。さらに、ＲＤＭＡ通信部１０４は、論理通信領域番号からアクセス先のメモリアドレスを求める各種テーブルを用いてＲＤＭＡ通信を行う。
【符号の説明】
【０１４４】
１  計算ノード
２  管理ノード
１１  ＣＰＵ
１２  メモリ
１３  インターコネクトアダプタ
１４  Ｉ／Ｏバスアダプタ
１５  システムバス
１６  Ｉ／Ｏバス
１７  ネットワークアダプタ
１８  ディスクアダプタ
１９  ディスク
２１  上位ソフトウェアソースコード
２２  グローバルアドレス通信ライブラリヘッダファイル
２３  クロスコンパイラ
２４  上位ソフトウェア実行形式コード
２５  管理ノード管理ソフトウェア
１００  ＨＰＣシステム
１０１  アプリケーション実行部
１０２  グローバルアドレス通信管理部
１０３  ＲＤＭＡ管理部
１０４  ＲＤＭＡ通信部
１０５  統括管理部
１４１  通信制御部
１４２  領域変換部
１４３  アドレス取得部
１４４  通信領域番号変換テーブル
１４５  物理通信領域テーブル
１４６  テーブル選択機構
１４７  通信領域テーブル
２０１  ランク計算ノード対応表
２１０，２１１，２１３  通信領域管理テーブル
２１２  ランクリスト
２２１，２２３  変数管理テーブル
４０１  レジスタ
４１１〜４１４  テーブル選択用レジスタ
４２１〜４２４  コンパレータ
４２５  セレクタ
【図１】
2018014057.tif 000003
【図２】
2018014057.tif 000004
【図３】
2018014057.tif 000005
【図４】
2018014057.tif 000006
【図５】
2018014057.tif 000007
【図６】
2018014057.tif 000008
【図７】
2018014057.tif 000009
【図８】
2018014057.tif 000010
【図９】
2018014057.tif 000011
【図１０】
2018014057.tif 000012
【図１１】
2018014057.tif 000013
【図１２】
2018014057.tif 000014
【図１３】
2018014057.tif 000015
【図１４】
2018014057.tif 000016
【図１５】
2018014057.tif 000017
【図１６】
2018014057.tif 000018
【図１７】
2018014057.tif 000019
【図１８】
2018014057.tif 000020
【図１９】
2018014057.tif 000021
【図２０】
2018014057.tif 000022