[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

JP5532849B2 - コンピュータ、プロセス間通信プログラム、およびプロセス間通信方法 - Google Patents

コンピュータ、プロセス間通信プログラム、およびプロセス間通信方法 Download PDF

Info

Publication number
JP5532849B2
JP5532849B2 JP2009265598A JP2009265598A JP5532849B2 JP 5532849 B2 JP5532849 B2 JP 5532849B2 JP 2009265598 A JP2009265598 A JP 2009265598A JP 2009265598 A JP2009265598 A JP 2009265598A JP 5532849 B2 JP5532849 B2 JP 5532849B2
Authority
JP
Japan
Prior art keywords
server
destination
transmission
communication
processes
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2009265598A
Other languages
English (en)
Other versions
JP2011108202A (ja
Inventor
彰 成瀬
耕一 久門
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2009265598A priority Critical patent/JP5532849B2/ja
Priority to US12/950,614 priority patent/US8655940B2/en
Publication of JP2011108202A publication Critical patent/JP2011108202A/ja
Application granted granted Critical
Publication of JP5532849B2 publication Critical patent/JP5532849B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/546Xcast

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)

Description

本発明はネットワークを介したプロセス間の通信を行うコンピュータ、プロセス間通信プログラム、およびプロセス間通信方法に関する。
近年、HPC(High Performance Computing)システムとして、小規模のコンピュータを多数接続して並列処理を実行するクラスタシステムがある。特にIA(インテル・アーキテクチャ)サーバを高速ネットワークで接続したクラスタシステムは、PC(Personal Computer)クラスタシステムと呼ばれ、幅広く使われている。
クラスタシステムで並列プログラムを実行する場合、並列プログラムの実行により起動されるプロセスは、複数のサーバに分散して実行される。そのため、プロセス間でデータ交換が必要なときは、サーバ間通信が必要になる。従い、クラスタシステムの処理性能向上に、サーバ間通信性能の向上が重要である。サーバ間通信で高性能を実現するには、InfiniBand・Myrinetなどの高性能なネットワークに加え、高性能な通信ライブラリを用意することも重要である。クラスタシステムでは、MPI(Message Passing Interface)という通信API(Application Program Interface)で記述された並列プログラムが実行されることが多く、様々なMPI通信ライブラリが実装・提供されている。
並列プログラムにおけるプロセス間の通信パターンはプログラム次第であり多種多様であるが、その中でも特に重要視される通信パターンの1つに、全対全通信がある。全対全通信は、その名の通り、すべてのプロセスがすべてのプロセスとデータ送受する通信パターンである。MPIでは関数”MPI_Alltoall()”に全対全通信機能が実装されている。
全対全通信を実現する通信アルゴリズムは様々なものがある。その中で、比較的データサイズが大きく、ネットワークバンド幅で性能が制限を受けるケースでは、Ringアルゴリズムが使われることが多い。
特表2009−519504号公報
ところで、IAプロセッサなどのプロセッサのマルチコア化が進展した結果、クラスタシステムを構成するサーバはマルチコアプロセッサを搭載することが一般的となった。マルチコアプロセッサでは、プロセッサコアごとにプロセスが実行されることが多い。例えば、4コアCPUを2個(総コア数8個)搭載したサーバで構成されるクラスタシステムでは、並列プログラム実行時に1サーバ当たり8個のプロセスが実行されることも珍しくない。以下、サーバ1台当たりのプロセス数を、ローカルプロセス数と呼ぶこととする。
しかし、Ringアルゴリズムなど、現在の通信アルゴリズムの多くは1サーバ当たり1プロセスを前提として発案・実装されており、マルチコアプロセッサが実装されたサーバによるクラスタシステムに適用するには不適切である。実際、サーバ数16で、ローカルプロセス数を1,2,4,8と変え、Ringアルゴリズムで全対全通信を行ったときの実効ネットワークバンド幅を測定すると、ローカルプロセス数が多いときには実効ネットワークバンド幅が低下することが分かる。実効ネットワークバンド幅が低下するのは、ローカルプロセス数が2以上の場合にRingアルゴリズムで全対全通信を行うと、ネットワークスイッチ内でHOL(Head-Of-Line)ブロッキングと呼ばれる競合が発生するためである。HOLブロッキングとは、複数の入力ポートから同一の出力ポートへ同時にパケット転送するときに発生するものであり、出力ポートのバッファが競合するためにパケット転送が遅延される現象である。
このように従来の全対全のプロセス間通信アルゴリズムは、複数のプロセスが実行されるサーバによるクラスタシステムにとって適切なアルゴリズムではない。その結果、そのようなクラスタシステムで既存のアルゴリズムを用いてプロセス間通信を行うと、システム全体の性能を十分に発揮させることができなかった。
本発明はこのような点に鑑みてなされたものであり、複数のプロセスが実行されるサーバによるクラスタシステムにおける効率的な全対全のプロセス間通信が可能なコンピュータ、プロセス間通信プログラム、およびプロセス間通信方法を提供することを目的とする。
上記課題を解決するために、以下の機能を有するコンピュータが提供される。
コンピュータは、クラスタシステムを構成する複数のサーバのうちの1つとして機能し、複数のサーバそれぞれで実行されるプロセス間の通信を行う。そのために、コンピュータは、送信先サーバ決定手段、送信先プロセス決定手段、およびデータ送信手段を有する。
送信先サーバ決定手段は、全対全のプロセス間通信時に複数のサーバそれぞれで繰り返し行われる送信先サーバ決定における同一回の送信先サーバ決定において、複数のサーバが互いに異なるサーバを送信先サーバとして決定するような送信先サーバ決定手順が予め定義されており、コンピュータで実行される自プロセスからの全対全のプロセス間通信要求に応答し、送信先サーバ決定手順に従って送信先サーバを繰り返し決定する。送信先プロセス決定手段は、送信先サーバが決定されるごとに、決定された送信先サーバで動作しているプロセスを順番に送信先プロセスとして決定する。データ送信手段は、送信先プロセスが決定されるごとに、自プロセスの実行により送信用のデータが格納された送信用バッファから送信先プロセスに対する送信データを取得し、送信先サーバ内の決定された送信先プロセスの実行時に送信データを読み取り可能とするように、送信先サーバに対して取得した送信データを送信する。
複数のプロセスが実行されるサーバによるクラスタシステムにおいて、効率的な全対全のサーバ間通信が可能となる。
第1の実施の形態の機能を示すブロック図である。 本実施の形態のシステム構成例を示す図である。 本実施の形態に用いるコンピュータのハードウェア構成例を示す図である。 全対全通信の動作イメージを示す図である。 ネットワークスイッチ内の通信経路を示す図である。 ネットワークスイッチによるパケットの受信状況を示す図である。 ネットワークスイッチにおけるHOLブロッキング発生状態を示す図である。 サーバの機能を示すブロック図である。 プロセス間通信制御部の全対全通信機能を示すブロック図である。 全対全通信処理の手順を示すフローチャートである。 第2の実施の形態における2-Level Ringアルゴリズムによるプロセス決定を行う処理記述例を示す図である。 Ringアルゴリズムによるプロセス間通信の状態遷移を示す第1の図である。 Ringアルゴリズムによるプロセス間通信の状態遷移を示す第2の図である。 4番目のステップ(Step=3)における競合の発生状況を示す図である。 Ringアルゴリズムの各通信ステップの実行時間を示す図である。 2-Level Ringアルゴリズムによるプロセス間通信の状態遷移を示す第1の図である。 2-Level Ringアルゴリズムによるプロセス間通信の状態遷移を示す第2の図である。 2-Level RingアルゴリズムとRingアルゴリズムとの実効ネットワークバンド幅の測定結果を示す図である。 第3の実施の形態におけるサーバの機能を示すブロック図である。 プロセスID管理テーブル記憶部のデータ構造例を示す図である。 第3の実施の形態における2-Level Ringアルゴリズムによるプロセス決定を行う処理記述例を示す図である。
以下、本実施の形態について図面を参照して説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態の機能を示すブロック図である。コンピュータAは、クラスタシステムを構成する複数のサーバのうちの1つとして機能する。すなわち、複数のサーバ6−1,6−2,・・・とコンピュータAとがネットワークスイッチ5で接続され、クラスタシステムとして動作する。コンピュータAおよび複数のサーバ6−1,6−2,・・・は、それぞれで実行されるプロセス間の通信を行う。
コンピュータAは、複数のプロセス1−1,1−2,1−3,・・・が動作している。同様に、サーバ6−1,6−2,・・・でも複数のプロセスが動作している。サーバ6−1,6−2,・・・内に複数のプロセッサ6a−1,6a−2,6b−1,6b−2に実装されている。各プロセッサ6a−1,6a−2,6b−1,6b−2は、複数のプロセッサコアを有し、プロセッサコアそれぞれがプロセスを実行している。図1の例では、サーバ6−1,6−2,・・・内のプロセスを円形で示している。
このようにコンピュータAおよび複数のサーバ6−1,6−2,・・・では、複数のプロセスが動作し、各プロセスが、クラスタシステムで実行すべき計算処理を実行する。各プロセスは、所定の計算処理が終了すると、プロセス間通信によりデータの送受信を行う。このプロセス間通信の1つに全対全通信がある。
コンピュータAのプロセス1−1,1−2,1−3,・・・は、送信用バッファ2−1,2−2,2−3,・・・と受信用バッファ3−1,3−2,3−3,・・・を介して、データの受け渡しを行う。送信用バッファ2−1,2−2,2−3,・・・と受信用バッファ3−1,3−2,3−3,・・・とは、例えばコンピュータAの主記憶装置内の記憶領域の一部である。
全対全通信を実行するタイミングになると、プロセス1−1,1−2,1−3,・・・の実行により、送信するデータが送信用バッファ2−1,2−2,2−3,・・・に格納される(計算処理中に使用していたバッファをそのまま送信用バッファとすることもある)。その後、プロセス1−1,1−2,1−3,・・・から全対全のプロセス間通信要求が出される。
プロセス1−1,1−2,1−3,・・・のそれぞれから全対全のプロセス間通信要求が出力されると、プロセス1−1,1−2,1−3,・・・それぞれに対応する全対全通信手段4−1,4−2,4−3,・・・が起動される。全対全通信手段4−1,4−2,4−3,・・・は、対応するプロセス1−1,1−2,1−3,・・・から出力されたデータを他のプロセスに送信し、他のプロセスから受信したデータをプロセス1−1,1−2,1−3,・・・に渡す。なお、全対全通信手段4−1,4−2,4−3,・・・は同じ機能を有する。そこで、以下、代表的に全対全通信手段4−1の機能について詳細に説明する。
全対全通信手段4−1は、送信先サーバ決定手段4a、送信先プロセス決定手段4b、データ送信手段4c、受信元サーバ決定手段4d、受信元プロセス決定手段4e、およびデータ受信手段4fを有する。
送信先サーバ決定手段4aは、コンピュータAで実行される自プロセス(プロセス1−1)からの全対全のプロセス間通信要求に応答し、予め定義された送信先サーバ決定手順に従って送信先サーバを繰り返し決定する。送信先サーバ決定手順には、全対全のプロセス間通信時に複数のサーバそれぞれで繰り返し行われる送信先サーバ決定における同一回の送信先サーバ決定において、複数のサーバが互いに異なるサーバを送信先サーバとして決定するように定義されている。
例えば、送信先サーバ決定手順としては、複数のサーバそれぞれに付与されたサーバ番号を所定の配列で並べ、コンピュータAに付与されたサーバ番号と他のサーバ番号との配列上の相対的位置関係に基づいて送信先サーバを決定するように定義される。このような送信先サーバ決定手順であれば、コンピュータAおよび各サーバ6−1,6−2,・・・が共通の送信先サーバ決定手順で送信先サーバを決定しても、同一回の送信先サーバ決定において、互いに異なるサーバを送信先サーバとして決定できる。すなわち、コンピュータAおよび各サーバ6−1,6−2,・・・は、それぞれ異なるサーバ番号を有している。そのため、自己のサーバ番号を基準とした配列上の相対的位置関係を特定した場合、それぞれ異なるサーバ番号の位置が特定される。その結果、コンピュータAおよび各サーバ6−1,6−2,・・・において、互いに異なるサーバを送信先サーバとして決定できる。なお、自己のサーバ番号を基準とした送信先サーバ決定手順を用いた場合、1つのコンピュータA内の各全対全通信手段4−1,4−2,4−3,・・・は、同一回の送信先サーバ決定において共通のサーバを送信先サーバとして決定することとなる。
コンピュータAに付与されたサーバ番号と他のサーバ番号との配列上の相対的位置関係に基づいて送信先サーバを決定するような送信先サーバ決定手順として、例えばサーバ番号を環状に配置するものがある。具体的には、複数のサーバそれぞれに付与されたサーバ番号を昇順で並べると共に、サーバ番号の最大値の次順をサーバ番号の最小値とする配列とする。送信先サーバ決定手順には、コンピュータAに付与されたサーバ番号から配列の並びに沿って一定方向にサーバ番号を順次決定し、決定したサーバ番号で示されるサーバを送信先サーバとすることが定義される。
送信先プロセス決定手段4bは、送信先サーバが決定されるごとに、送信先サーバで動作しているプロセスを順番に送信先プロセスとして決定する。例えば、送信先プロセス決定手段4bは、予め定義された送信先プロセス決定手順に従って、全対全のプロセス間通信要求を出力した自プロセス(プロセス1−1)に対する送信先サーバを繰り返し決定する。送信先プロセス決定手順では、複数のプロセス1−1,1−2,1−3,・・・それぞれに対する送信先プロセス決定が繰り返し行われる。そして送信先サーバ決定手順では、同一回の送信先プロセス決定において、複数のプロセスプロセス1−1,1−2,1−3,・・・それぞれに対して、送信先サーバ内の互いに異なるプロセスを送信先プロセスとして決定するように定義されている。なお、複数のプロセス1−1,1−2,1−3,・・・それぞれに対する送信先プロセス決定は、複数のプロセス1−1,1−2,1−3,・・・それぞれから出力される全対全のプロセス間通信要求に応じて行われる。
例えば、送信先プロセス決定手順では、複数のプロセスそれぞれに付与されたプロセス番号を所定の配列で並べることが定義される。さらに送信先プロセス決定手順では、全対全のプロセス間通信要求を出力した自プロセス(プロセス1−1)に付与されたプロセス番号と他のプロセスのプロセス番号との配列上の相対的位置関係に基づき送信先プロセスを決定するように定義される。このような送信先プロセス決定手順であれば、全対全通信手段4−1,4−2,4−3,・・・が共通の送信先プロセス決定手順で送信先プロセスを決定しても、同一回の送信先プロセス決定において、互いに異なるプロセスを送信先プロセスとして決定できる。すなわち、全対全通信手段4−1,4−2,4−3,・・・は、それぞれ異なる自プロセスのプロセス番号を有しているため、そのプロセス番号を基準とした配列上の相対的位置関係を特定した場合、それぞれ異なるプロセス番号の位置が特定される。その結果、全対全通信手段4−1,4−2,4−3,・・・において、互いに異なるプロセスを送信先プロセスとして決定できる。
自プロセスのプロセス番号と他のプロセス番号との配列上の相対的位置関係に基づいて送信先プロセスを決定するような送信先プロセス決定手順として、例えばプロセス番号を環状に配置するものがある。具体的には、送信先サーバ内の複数のプロセスそれぞれに付与された送信先サーバ内でプロセスを一意に識別するローカルプロセス番号を昇順で並べると共に、ローカルプロセス番号の最大値の次順をプロセス番号の最小値とする配列とする。送信先プロセス決定手順には、自プロセスに付与されたプロセス番号から配列の並びに沿って一定方向にプロセス番号を順次決定し、決定したプロセス番号で示される送信先サーバ内のプロセスを送信先プロセスとすることが定義される。
データ送信手段4cは、送信先プロセスが決定されるごとに、自プロセスにより送信用のデータが格納された送信用バッファ2−1から送信先プロセスに対する送信データを取得する。そしてデータ送信手段4cは、送信先サーバ内の決定された送信先プロセスの実行時に送信データを読み取り可能とするように、送信先サーバに対して取得した送信データを送信する。
受信元サーバ決定手段4dは、コンピュータAで実行される自プロセス(プロセス1−1)からの全対全のプロセス間通信要求に応答し、予め定義された受信元サーバ決定手順に従って受信元サーバを繰り返し決定する。受信元サーバ決定手順には、全対全のプロセス間通信時に複数のサーバそれぞれで繰り返し行われる受信元サーバ決定における同一回の受信元サーバ決定において、複数のサーバが互いに異なるサーバを受信元サーバとして決定するように定義されている。
受信元プロセス決定手段4eは、受信元サーバが決定されるごとに、受信元サーバで動作しているプロセスを順番に受信元プロセスとして決定する。
データ受信手段4fは、受信元プロセスが決定されるごとに、受信元サーバ内の決定された受信元プロセスから送信される受信データを取得し、取得した受信データを受信用バッファ3−1に格納する。
このような全対全通信手段4−1,4−2,4−3,・・・と同様の通信手段が、他のサーバ6−1,6−2,・・・にも設けられている。すると、クラスタシステム内の各プロセスが全対全のプロセス間通信を開始すると、それぞれのプロセスに関する同一回の送信先サーバ決定では、異なるサーバ内のプロセスに対しては互いに異なるサーバが送信先サーバとして決定される。次に、各プロセスのデータの送信先となる送信先プロセスとして、送信先サーバ内のプロセスが決定される。そして、各プロセスの出力したデータが、そのプロセスに対して決定された送信先プロセスに対して送信される。
このように、異なるサーバで実行される各プロセスに関する同一回の送信先サーバ決定では、異なるサーバが送信先サーバに決定されるため、送信したデータのネットワークスイッチ5での転送において出力ポートの競合が抑制される。出力ポートの競合が発生しなければ、HOLブロッキングの発生も抑制され、全対全のプロセス間通信の処理効率が向上する。
ここで、全対全通信手段4−1,4−2,4−3,・・・において送信先プロセスのみではなく受信元プロセスの決定も行っているのは、受信元プロセスからのデータを即座に受け取れるように、データ受信手段4f内のバッファを用意しておくためである。すなわちデータ受信手段4fは、受信元プロセスが決定されると、その受信元プロセスから送られるデータを優先的に取得するためのバッファを確保する。これにより、コンピュータ間の他の通信が発生し、他のデータの受信があったとしても、受信元プロセスから送られたデータを即座に受信し、プロセス用に設けられた受信用バッファに格納できる。その結果、全対全のプロセス間通信の処理効率を向上させることができる。
〔第2の実施の形態〕
次に、第2の形態の詳細を説明する。第2の実施の形態は、各プロセスのプロセス番号を、そのプロセスが実行されるサーバのサーバ番号と、そのプロセスのサーバ内でのローカルプロセス番号から算出できるようにすることで、受信元・送信先プロセスの決定を容易にしたものである。なお、第2の実施の形態では、サーバ番号をサーバIDとよび、プロセス番号をプロセスIDと呼ぶこととする。
図2は、本実施の形態のシステム構成例を示す図である。本実施の形態に係るクラスタシステムでは、ネットワークスイッチ500を介して複数のサーバ100,200,300,400が接続されている。
各サーバ100,200,300,400は、それぞれプロセッサ110,210,310,410と通信インタフェース120,220,320,420とを有している。プロセッサ110は複数のプロセッサコア111,112を有する。同様にプロセッサ210は複数のプロセッサコア211,212を有し、プロセッサ310は複数のプロセッサコア311,312を有し、プロセッサ410は複数のプロセッサコア411,412を有する。
各サーバ100,200,300,400には、サーバIDが割り振られている。サーバ100のサーバIDは「0」、サーバ200のサーバIDは「1」、サーバ300のサーバIDは「2」、サーバ400のサーバIDは「3」である。
また各サーバ100,200,300,400内のプロセッサに含まれるプロセッサコアで実行されるプロセスには、サーバ内でのローカルプロセスIDが割り振られる。図2では、プロセッサコアを示す円の中に、そのプロセッサコアで実行されるプロセスのローカルプロセスIDが示されている。
各プロセスには、クラスタシステム内でプロセスを一意に識別するためのプロセスIDも定義される。第2の実施の形態では、プロセスが実行されるサーバのサーバIDにローカルプロセス数(サーバ当たりのプロセス数)を乗算し、乗算結果にプロセスのローカルプロセスIDの値を加算した結果が、プロセスIDとなる。
次にサーバ100,200,300,400のハードウェア構成について説明する。
図3は、本実施の形態に用いるコンピュータのハードウェア構成例を示す図である。サーバ100は、複数のプロセッサコア111,112を有するプロセッサ110によって装置全体が制御されている。プロセッサ110には、バス108を介してRAM(Random Access Memory)102と複数の周辺機器が接続されている。
RAM102は、サーバ100の主記憶装置として使用される。RAM102には、プロセッサ110に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM102には、プロセッサ110による処理に必要な各種データが格納される。
バス108に接続されている周辺機器としては、ハードディスクドライブ(HDD:Hard Disk Drive)103、グラフィック処理装置104、入力インタフェース105、光学ドライブ装置106、および通信インタフェース120がある。
HDD103は、内蔵したディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。HDD103は、サーバ100の二次記憶装置として使用される。HDD103には、OSのプログラム、アプリケーションプログラム、および各種データが格納される。なお、二次記憶装置としては、フラッシュメモリなどの半導体記憶装置を使用することもできる。
グラフィック処理装置104には、モニタ11が接続されている。グラフィック処理装置104は、プロセッサ110からの命令に従って、画像をモニタ11の画面に表示させる。モニタ11としては、CRT(Cathode Ray Tube)を用いた表示装置や液晶表示装置などがある。
入力インタフェース105には、キーボード12とマウス13とが接続されている。入力インタフェース105は、キーボード12やマウス13から送られてくる信号をプロセッサ110に送信する。なお、マウス13は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
光学ドライブ装置106は、レーザ光などを利用して、光ディスク14に記録されたデータの読み取りを行う。光ディスク14は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク14には、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。
通信インタフェース120は、ネットワークスイッチ500に接続されている。通信インタフェース120は、ネットワークスイッチ500を介して、他のサーバ200,300,400との間でデータの送受信を行う。
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。なお図3にはサーバ100のハードウェア構成を示したが、他のサーバ200,300,400も同様のハードウェアで実現できる。
このような構成のサーバ100,200,300,400では、プロセッサコアごとのプロセスが生成される。各プロセスを生成したプロセッサコアが演算処理を実行する。大規模な演算を行う場合、演算処理が分割され、分割された個々の処理が各プロセスに振り分けられる。各プロセスを実行するプロセッサコアにより、振り分けられた演算処理が並列に実行される。各プロセスを実行するプロセッサコアは互いに通信し、演算結果を他のプロセスを実行するプロセッサコアと交換する。このようなデータ交換の中で、全対全通信が行われることがある。全対全通信では、各プロセスを実行するプロセッサコアが、他のすべてのプロセスを実行するプロセッサコアとの間で通信を行う。
図4は、全対全通信の動作イメージを示す図である。図4の例では、N個(Nは1以上の自然数)のプロセス間で全対全通信を行う場合における、時間経過に伴う各プロセスの処理内容の変遷を示している。各プロセスの白抜きの部分は、計算処理を実行している時間帯を示している。また各プロセスの網掛の部分は、通信処理を実行している時間帯を示している。
各プロセスを実行するプロセッサコアは、所定の計算部分に関する計算処理が終了すると、他のプロセスとの間の全対全通信に対応する関数を呼び出す。例えば、全対全通信用のMPI関数が読み出される。
全対全のプロセス間通信のうち、異なるサーバに属するプロセス間通信は、ネットワークスイッチ500を経由して実行される。ネットワークスイッチ500では、1つの通信ポートから出力するデータが、別の複数の通信ポートに同時に入力されると、HOLブロッキングが発生する。以下、図5〜図7を参照して、HOLブロッキングの発生状況について説明する。
図5は、ネットワークスイッチ内の通信経路を示す図である。図5には、ネットワークスイッチ500における4台のサーバ100,200,300,400それぞれに接続された通信ポート510,520,530,540間の通信経路が示されている。通信ポート510にはサーバ100が接続され、通信ポート520にはサーバ200が接続され、通信ポート530にはサーバ300が接続され、通信ポート540にはサーバ400が接続されているものとする。
ネットワークスイッチ500の各通信ポート510,520,530,540は、入力ポート511,521,531,541と出力ポート512,522,532,542とを有する。入力ポート511,521,531,541には、接続されたサーバから他のサーバに送信するパケットが入力される。出力ポート512,522,532,542からは、接続されたサーバに対して他のサーバから送信されたパケットが出力される。入力ポート511,521,531,541にはバッファが設けられている。入力ポート511,521,531,541内のバッファには、入力されたパケットを一次的に蓄えることができる。同様に、出力ポート512,522,532,542にはバッファが設けられている。出力ポート512,522,532,542内のバッファには、出力するパケットを一次的に蓄えることができる。
通信ポート510の入力ポート511からは、他の通信ポート520,530,540の出力ポート522,532,542への通信経路が設けられている。通信ポート520の入力ポート521からは、他の通信ポート510,530,540の出力ポート512,532,542への伝送路が設けられている。通信ポート530の入力ポート531からは、他の通信ポート510,520,540の出力ポート512,522,542への伝送路が設けられている。通信ポート540の入力ポート541からは、他の通信ポート510,520,530の出力ポート512,522,532への伝送路が設けられている。
クラスタシステムのプロセスを実行する全プロセッサコアが全対全通信を開始すると、ネットワークスイッチ500を介した通信が発生する。ここで、サーバ100,300から同時に、サーバ200宛のパケット21,22が送信された場合を想定する。2台のサーバ100,300から送信されたパケット21,22は、それぞれネットワークスイッチ500の入力ポート511,531に入力される。
図6は、ネットワークスイッチによるパケットの受信状況を示す図である。サーバ100から送信されたパケット21は、ネットワークスイッチ500の入力ポート511のバッファに格納される。また、サーバ300から送信されたパケット22は、ネットワークスイッチ500の入力ポート531のバッファに格納される。ネットワークスイッチ500は、パケットの宛先に基づいて、入力されたパケットを送出するポートを判断する。図6の例では、2つのパケット21,22共にサーバ200宛である。そのためネットワークスイッチ500では、パケット21,22を送出するポートとして、サーバ200が接続された通信ポート520が選択される。この場合、1つの入力ポートが出力ポート522の使用権を獲得する。そして、ネットワークスイッチ500は、使用権を獲得した入力ポートのバッファに格納されたパケットを、出力ポート522に転送する。
図7は、ネットワークスイッチにおけるHOLブロッキング発生状態を示す図である。図7の例では、入力ポート511が使用権を獲得し、パケット21が出力ポート522に転送されている。出力ポート522が空くまでは入力ポート531からのパケット22の転送はできない。そこで、入力ポート531に格納されているパケット22は、ネットワークスイッチ500によってブロックされる。このように、出力ポートの競合によってパケットの転送がブロックされる現象が、HOLブロッキングである。
このようなHOLブロッキングの発生を抑制するには、出力ポートの競合の発生を抑制することが重要である。そこで第2の実施の形態では、出力ポートの競合の発生が抑制されるアルゴリズムによって、各サーバ100,200,300,400における全対全のプロセス間通信を実行する際のデータの送受信相手を順次決定する。以下、第2の実施の形態におけるデータの送受信相手の決定アルゴリズムを、「2-Level Ringアルゴリズム」と称する。
以下、2-Level Ringアルゴリズムを実現するための各サーバ100,200,300,400の機能について説明する。
図8は、サーバの機能を示すブロック図である。サーバ100は、プロセス131,132、プロセス131,132ごとの送信用バッファ141,151、プロセス131,132ごとの受信用バッファ142,152、およびプロセス間通信制御部160を有する。
プロセス131,132は、クラスタシステムにおける並列演算用にプロセッサコア111,112で実行される。プロセス131,132は、計算処理実行用に設けられたプログラムをプロセッサコア111,112が実行することで、サーバ100内に生成される。
プロセス131には、送信用バッファ141と受信用バッファ142とが関連付けられている。送信用バッファ141は、プロセス131が、次の演算ステップに引き渡すデータの格納用の記憶機能である。例えばRAM102の記憶領域の一部が、送信用バッファ141として使用される。送信用バッファ141には、プロセス131自身が次の演算ステップで使用するデータと、他のプロセスが次の演算ステップで使用するデータとが含まれる。
受信用バッファ142は、プロセス131による次の演算ステップの実行に使用するデータの格納用の記憶領域である。例えばRAM102の記憶領域の一部が、受信用バッファ142として使用される。受信用バッファ142には、プロセス131自身の演算により生成されたデータと、他のプロセスの演算により生成されたデータとが含まれる。
プロセス131と同様に、プロセス132にも送信用バッファ151と受信用バッファ152とが関連付けられている。送信用バッファ151の機能は、送信用バッファ141と同じである。受信用バッファ152の機能は、受信用バッファ142と同じである。
プロセス間通信制御部160は、プロセス間で受け渡されるデータの転送を制御する。具体的には、プロセス間通信制御部160は、送信用バッファ141,151内のデータを、サーバ100,200,300,400内のいずれかのプロセス宛に転送する。他のサーバ200,300,400上で実行されるプロセス宛にデータを送信する場合、プロセス間通信制御部160は、送信対象のデータを含むパケットを生成し、ネットワークスイッチ500経由でパケットを送信する。
また、プロセス間通信制御部160は、サーバ100,200,300,400内のいずれかのプロセスの実行により送信されたデータを、受信用バッファ142,152に格納する。なおプロセス間通信制御部160は、他のサーバ200,300,400内のプロセスの実行により送信されたデータは、ネットワークスイッチ500経由で入力されたパケットから取得する。
このような機能のサーバ100において、例えばプロセス131が全対全通信を実行する場合、プロセス131を実行するプロセッサコア111によりプロセス間通信制御部160に対して、全対全通信要求が出力される。全対全通信要求の出力は、例えばMPIでは関数”MPI_Alltoall()”の呼び出し処理である。プロセス間通信制御部160では、全対全通信要求に応答して、「2-Level Ringアルゴリズム」によるプロセス131と他のプロセスとの間のデータ通信を実行する。
図9は、プロセス間通信制御部の全対全通信機能を示すブロック図である。プロセス間通信制御部160は、全対全通信要求に応答して、全対全通信要求を出力したプロセス用の全対全通信部160a,160bを起動する。以下、プロセス131の実行により出力された全対全通信要求に応じた全対全通信について、詳細に説明する。
なお、プロセス131を実行するプロセッサコア111は、全対全通信要求を出力する前に、予め送信データを送信用バッファ141に格納しておく。具体的には、送信用バッファ141は、クラスタシステムで計算処理を実行している各プロセスのプロセスIDに対応する記憶領域が設けられている。プロセス131を実行するプロセッサコア111は、各プロセスに引き渡すデータを、データの送信相手のプロセスIDに対応する記憶領域に格納する。なお、プロセス131を実行するプロセッサコア111は、プロセス131自身が次の演算ステップで使用するデータについても、自己のプロセスIDに対応する記憶領域に格納する。プロセス131を実行するプロセッサコア111は、送信用バッファ141への各プロセス宛のデータの格納が完了した後、プロセス間通信制御部160に対して全対全通信要求を出力する(計算処理中に使用していたバッファをそのまま送信用バッファとすることもある)。
プロセス間通信制御部160は、全対全通信要求に応じて、全対全通信部160aを起動する。例えば全対全通信部160aは、プロセス131を実行しているプロセッサコア111が全対全通信用のプログラムを実行することで実現される。
全対全通信部160aは、全対全通信用のアルゴリズム(2-Level Ringアルゴリズム)に基づくデータ通信を実行する。そのために全対全通信部160aは、受信元・送信先サーバ決定部161、受信元・送信先プロセス決定部162、データ送信部163、およびデータ受信部164を有する。
受信元・送信先サーバ決定部161は、全対全通信要求が出されると、データの受信元となるサーバ(受信元サーバ)とデータの送信先となるサーバ(送信先サーバ)との組を順次決定する。受信元・送信先サーバ決定部161は、決定した受信元サーバと送信先サーバとの組を、受信元・送信先プロセス決定部162に通知する。例えば受信元・送信先サーバ決定部161は、受信元サーバと送信先サーバとを示す各変数に、決定した受信元サーバと送信先サーバとのサーバIDを設定する。受信元サーバと送信先サーバとを示す各変数の内容を受信元・送信先プロセス決定部162が読み取ることで、決定した受信元サーバと送信先サーバとの組が受信元・送信先プロセス決定部162に通知される。
受信元・送信先サーバ決定部161は、決定した受信元サーバと送信先サーバとの間のデータの送受信の完了通知を受信元・送信先プロセス決定部162から受け取ると、次の受信元サーバと送信先サーバとの組を決定する。受信元サーバと送信先サーバとの組の決定は、送信用バッファ141内のすべてのデータの送信および受信用バッファ142へのすべてのプロセスからのデータの受信が完了するまで繰り返される。受信元・送信先サーバ決定部161は、送信用バッファ141内のすべてのデータの送信および受信用バッファ142へのすべてのプロセスに関するデータの受信が完了すると、全対全通信の完了がプロセス131を実行するプロセッサコア111に通知される。
受信元サーバと送信先サーバとの組の決定順は、クラスタシステムで計算処理を行うすべてのプロセスの全対全通信が発生した場合に、1台のサーバを送信先サーバとするプロセスが、異なるサーバ上に存在しないように決定される。例えば受信元・送信先サーバ決定部161は、2-Level Ringアルゴリズムに従って受信元サーバと送信先サーバとを順番に決定する。
2-Level Ringアルゴリズムにおけるサーバ決定部分では、受信元・送信先サーバ決定部161は、1回目の決定では、受信元サーバおよび送信先サーバとして、自己のサーバ100のサーバIDを決定する。受信元・送信先サーバ決定部161は、2回目以降の決定では、直前に決定した受信元サーバのサーバIDから「1」を減算した値をサーバIDとするサーバを、次の受信元サーバとして決定する。ただし受信元・送信先サーバ決定部161は、直前に決定した受信元サーバのサーバIDが「0」であれば、サーバIDが最大値のサーバを、次の受信元サーバとして決定する。また、受信元・送信先サーバ決定部161は、直前に決定した送信先サーバのサーバIDに「1」を加算した値をサーバIDとするサーバを、次の送信先サーバとして決定する。ただし受信元・送信先サーバ決定部161は、直前に決定した送信先サーバのサーバIDがサーバIDの最大値であれば、サーバIDが「0」のサーバを、次の送信先サーバとして決定する。
受信元・送信先プロセス決定部162は、受信元・送信先サーバ決定部161で決定された受信元サーバと送信先サーバとの組に基づいて、データの受信元となるプロセス(受信元プロセス)とデータの送信先となるプロセス(受信先プロセス)との組を決定する。このとき受信元プロセスは、受信元サーバ内のプロセスから決定される。また送信先プロセスは、送信先サーバ内のプロセスから決定される。受信元・送信先プロセス決定部162は、決定した受信元プロセスをデータ受信部164に通知する。また受信元・送信先プロセス決定部162は、決定した送信先プロセスをデータ送信部163に通知する。例えば受信元・送信先プロセス決定部162は、受信元プロセスと送信先プロセスとを示す各変数に、決定した受信元プロセスと送信先プロセスとのプロセスIDを設定する。受信元プロセスを示す変数の内容をデータ受信部164が読み取ることで、決定した受信元プロセスがデータ受信部164に通知される。また送信先プロセスを示す変数の内容をデータ送信部163が読み取ることで、決定した送信先プロセスがデータ送信部163に通知される。
受信元・送信先プロセス決定部162は、決定した受信元プロセスと送信先プロセスとの間のデータの送受信の完了通知をデータ送信部163およびデータ受信部164から受け取ると、次の受信元プロセスと送信先プロセスとの組を決定する。受信元プロセスと送信先プロセスとの組の決定は、受信元・送信先プロセス決定部162で決定された受信元サーバ内の各プロセスからのデータ受信と、送信先サーバ内の各プロセスへのデータ送信が完了するまで繰り返される。受信元・送信先プロセス決定部162は、決定された受信元サーバ内の各プロセスからのデータ受信と、決定された送信先サーバ内の各プロセスへのデータ送信が完了すると、完了したことを受信元・送信先サーバ決定部161に通知する。
受信元プロセスの決定順は、サーバ100内の複数のプロセスの全対全通信が発生した場合に、サーバ100内の複数のプロセスが、1つのプロセスを同時に受信元としないように決定される。また送信先プロセスの決定順は、サーバ100内の複数のプロセスから1つのプロセスを同時に送信先としないように決定される。例えば受信元・送信先プロセス決定部162は、2-Level Ringアルゴリズムに従って受信元プロセスと送信先プロセスとを順番に決定する。
2-Level Ringアルゴリズムにおける1回目のプロセス決定では、受信元・送信先プロセス決定部162は、受信元・送信先プロセスとして、全対全通信要求を出力したプロセス131とローカルプロセスIDが同じプロセスを決定する。受信元・送信先プロセス決定部162は、2回目以降の決定では、直前に決定した受信元プロセスのプロセスIDから「1」を減算した値をプロセスIDとするプロセスを、次の受信元プロセスとして決定する。ただし受信元・送信先プロセス決定部162は、直前に決定した受信元プロセスのプロセスIDが「0」であれば、プロセスIDが最大値のプロセスを、次の受信元プロセスとして決定する。また、受信元・送信先プロセス決定部162は、直前に決定した送信先プロセスのプロセスIDに「1」を加算した値をプロセスIDとするプロセスを、次の送信先プロセスとして決定する。ただし受信元・送信先プロセス決定部162は、直前に決定した送信先プロセスのプロセスIDがプロセスIDの最大値であれば、プロセスIDが「0」のプロセスを、次の送信先プロセスとして決定する。
データ送信部163は、受信元・送信先プロセス決定部162で決定された送信先プロセスを実行するプロセッサコアに対してデータを送信する。具体的には、データ送信部163は、決定された送信先プロセスのプロセスIDに対応するデータを、送信用バッファ141から読み出す。次に、データ送信部163は、送信先プロセスのプロセスIDに基づいて、送信先プロセスが動作しているサーバを判断する。第2の実施の形態では、プロセスIDをローカルプロセス数で除算した商が、そのプロセスIDで示されるプロセスが動作しているサーバのサーバIDとなる。
データ送信部163は、送信先プロセスが他のサーバで動作していれば、送信先プロセスが実行されるサーバを宛先としたメッセージを生成する。データ送信部163は、ネットワークの伝送プロトコルに従って、生成したメッセージを伝送するパケットを生成する。生成されたパケットには、送信先プロセスに送信すべきデータが含まれる。データ送信部163は、生成したパケットを、ネットワークスイッチ500に対して出力する。すると、ネットワークスイッチ500により、宛先となるサーバへパケットが転送される。
また送信先プロセスが、データを送信するプロセス131自身であれば、データ送信部163は、データ受信部164にデータを渡す。さらに送信先プロセスがサーバ100内の別のプロセス132であれば、データ送信部163は、プロセス132用の全対全通信部160bにデータを渡す。
データ送信部163は、送信先プロセスに対応するデータの送信が完了すると、送信完了を受信元・送信先プロセス決定部162に通知する。
データ受信部164は、受信元・送信先プロセス決定部162で決定された受信元プロセスから出力されたデータを受信する。具体的には、データ受信部164は、受信元プロセスのプロセスIDに基づいて、受信元プロセスが動作しているサーバを判断する。そしてデータ受信部164は、受信元プロセスが動作しているサーバから、受信元プロセスが送信したデータが入力されるのを待つ。データが入力されると、データ受信部164は入力されたデータを、受信用バッファ142内の受信元プロセスのプロセスIDに対応する記憶領域に格納する。
データ受信部164は、受信元プロセスが他のサーバで動作していれば、受信元プロセスが実行されるサーバから、受信元プロセスが出力したデータを含むパケットを受信する。この際、データ受信部164は、ネットワークを経由して受信するメッセージを一時的に蓄えるメッセージバッファ領域内に、受信元プロセスから出力されたデータを含むメッセージを格納する領域を確保しておく。受信元プロセスから送信されたデータを含むパケットが送信元サーバから入力されると、データ受信部164は、パケットを解析してメッセージを生成し、そのメッセージを予め確保しておいたメッセージバッファ領域に格納する。そしてデータ受信部164は、メッセージバッファ領域に格納したメッセージからデータ抽出し、受信用バッファ142内の受信元プロセスのプロセスIDに対応する記憶領域に格納する。
また受信元プロセスが、データを受信するプロセス131自身であれば、データ受信部164は、データ送信部163からデータを取得する。さらに受信元プロセスがサーバ100内の別のプロセス132であれば、データ受信部164は、プロセス132用の全対全通信部160bからデータを取得する。
なお、プロセス132用の全対全通信部160bについても、全対全通信部160aと同様の機能を有している。
また、図1に示した第1の実施の形態の機能のうち、全対全通信手段4−1,4−2,4−3,・・・の機能は、図9に示した第2の実施の形態に係るサーバ100では、全対全通信部160aで実現されている。具体的には、送信先サーバ決定手段4aと受信元サーバ決定手段4dの機能は、受信元・送信先サーバ決定部161で実現されている。送信先プロセス決定手段4bと受信元プロセス決定手段4eの機能は、受信元・送信先プロセス決定部162で実現されている。データ送信手段4cの機能は、データ送信部163で実現されている。データ受信手段4fの機能は、データ受信部164で実現されている。
次に、プロセス間通信制御部160によって実行される全対全通信処理の手順を説明する。
図10は、全対全通信処理の手順を示すフローチャートである。以下、図10に示す処理をステップ番号に沿って説明する。
〔ステップS11〕プロセス間通信制御部160は、プロセス131,132を実行するプロセッサコア111,112から全対全通信要求が出力されたか否かを判断する。全対全通信要求が出力された場合、処理がステップS12に進められる。全対全通信要求が出力されていなければ、ステップS11の処理が繰り返され、全対全通信要求が出力されるのを待つ。
〔ステップS12〕プロセス間通信制御部160は、全対全通信要求を出力したプロセスの全対全通信を行う全対全通信部を起動する。ここでは、プロセス131から全対全通信要求が出力されたものとする。この場合、全対全通信部160aが起動される。起動された全対全通信部160aでは、受信元・送信先サーバ決定部161が、受信元サーバと送信先サーバとの組を、2-Level Ringアルゴリズムに従って順次決定する。受信元・送信先サーバ決定部161は、受信元サーバと送信先サーバとの組を決定するごとに、決定結果を受信元・送信先プロセス決定部162に通知する。
〔ステップS13〕受信元・送信先プロセス決定部162は、受信元・送信先サーバ決定部161で決定された受信元サーバと送信先サーバとの組を受け取ると、受信元プロセスと送信先プロセスとの組を、2-Level Ringアルゴリズムに従って順次決定する。このとき決定される受信元プロセスは、受信元サーバ内のプロセスである。受信元・送信先プロセス決定部162は、決定した送信先プロセスのプロセスIDを、データ送信部163に通知する。また受信元・送信先プロセス決定部162は、決定した受信元プロセスのプロセスIDを、データ受信部164に通知する。
〔ステップS14〕データ送信部163とデータ受信部164とがプロセス間通信を実行する。すなわちデータ送信部163は、決定された送信先プロセスのプロセスIDに対応するデータを送信用バッファ141から取得し、決定された送信先プロセスに対して送信する。データ送信部163は、データの送信が完了すると、送信が完了したことを受信元・送信先プロセス決定部162に通知する。またデータ受信部164は、決定された受信元プロセスのデータを受信し、決定された受信元プロセスのプロセスIDに対応する受信用バッファ142内の記憶領域に、受信したデータを格納する。データ受信部164は、データの受信が完了すると、受信が完了したことを受信元・送信先プロセス決定部162に通知する。
〔ステップS15〕受信元・送信先プロセス決定部162は、データ送信部163とデータ受信部164とによる通信が完了したか否かを判断する。具体的には、受信元・送信先プロセス決定部162は、データ送信部163から送信完了の通知を受け取り、かつデータ受信部164から受信完了の通知を受け取った場合に、通信完了と判断する。通信が完了すると、処理がステップS16に進められる。通信が完了していなければステップS15の処理が繰り返される。
〔ステップS16〕受信元・送信先プロセス決定部162は、決定した受信元プロセスと送信先プロセスとの間の通信が完了すると、決定されている受信元サーバと送信先サーバのすべてのプロセスとの間での通信が完了したか否かを判断する。具体的には、受信元サーバ内の各プロセスからのデータの受信が完了し、送信先サーバ内の各プロセスに対するデータの送信が完了している場合に、受信元・送信先サーバの全プロセスとの通信完了と判断される。受信元・送信先サーバの全プロセスとの通信が完了すると、処理がステップS17に進められる。受信元・送信先サーバのプロセスのうち通信を行っていないプロセスがあれば処理がステップS13に進められ、未通信のプロセスが受信元・送信先プロセスとして決定される。
〔ステップS17〕受信元・送信先サーバの全プロセスとの通信が完了すると、受信元・送信先サーバ決定部161は、クラスタシステムを構成するすべてのサーバとの通信が完了したか否かを判断する。すべてのサーバとの間で、データの送信および受信それぞれの通信が完了していれば、全対全通信処理が終了する。未通信のサーバがあれば、処理がステップS12に進められ、未通信のサーバが受信元・送信先サーバとして決定される。
このような手順で2-Level Ringアルゴリズムによる全対全通信が実行される。全対全通信は、例えば関数”MPI_Alltoall()”によって呼び出すことができる。この場合、2-Level Ringアルゴリズムにより受信元・送信先プロセスを決定する処理記述を呼び出す関数が予め定義される。その場合、全対全通信要求として関数の呼び出しが行われる。関数が呼び出されると、関数に対応する処理記述に基づく処理が実行される。
図11は、第2の実施の形態における2-Level Ringアルゴリズムによるプロセス決定を行う処理記述例を示す図である。図11に示すように、2-Level Ringアルゴリズムは、例えばfor文で処理を記述することができる。ここで、図11中の各変数には、以下の情報が設定される(”:”の左が変数名、”:”の右が設定される内容)。
Ns:サーバ数
Nl:ローカルプロセス数(サーバ1台当たりのプロセス数)
Np:総プロセス数(Np=Ns×Nl)
Is:自サーバID(0≦Is<Ns)
Il:自ローカルプロセスID(0≦Il<Nl)
Ip:自プロセスID(Ip=Is×Nl+Il)
Is_src:受信元サーバID
Is_dst:送信先サーバID
Ip_src:受信元プロセスID
Ip_dst:送信先プロセスID
処理記述の1行目から3行目には、受信元サーバと送信先サーバとを決定する手順が記述されている。
1行目には、for文による繰り返し処理が定義されている。変数sには初期値として「0」が設定される。変数sは、for文内の処理が1回繰り返されるごとに、インクリメントされる(S++)。そして、変数sの値がサーバ数(Ns)未満の間、2行目から7行目の処理が繰り返される。
2行目には、受信元サーバを決定する式が定義されている。自サーバID(Is)に対し、変数sの値を減算されると共にサーバ数(Ns)が加算される。その加減算の結果をサーバ数(Ns)で除算した余りが、受信元サーバID(Is_src)に設定される。
3行目には、送信先サーバを決定する式が定義されている。自サーバID(Is)に対し、変数sの値とサーバ数(Ns)とを加算する。その加算の結果をサーバ数(Ns)で除算した余りが、送信先サーバID(Is_dst)に設定される。
処理記述の4行目から6行目には、受信元プロセスと送信先プロセスとを決定する手順が記述されている。なお、4行目から6行目の処理は、1行目のfor文内の処理の一部である。
4行目には、for文による繰り返し処理が定義されている。変数lには初期値として「0」が設定される。変数lは、for文内の処理が1回繰り返されるごとに、インクリメントされる(l++)。そして、変数lの値がローカルプロセス数(Nl)未満の間、5行目〜7行目の処理が繰り返される。
5行目には、受信元プロセスを決定する式が定義されている。5行目に定義された式では、受信元サーバID(Is_src)にローカルプロセス数(Nl)が乗算される。また、自ローカルプロセスID(Il)に対し、変数lの値が減算されると共にローカルプロセス数(Nl)が加算され、加減算の結果がローカルプロセス数(Nl)で除算される。除算の余りを先の乗算結果に加算した値が、受信元プロセスID(Ip_src)に設定される。
6行目には、送信先プロセスを決定する式が定義されている。6行目に定義された式では、送信先サーバID(Is_dst)にローカルプロセス数(Nl)が乗算される。また、自ローカルプロセスID(Il)に対し、変数lの値とローカルプロセス数(Nl)とが加算され、加算の結果がローカルプロセス数(Nl)で除算される。除算の余りを先の乗算結果に加算した値が、送信先プロセスID(Is_dst)に設定される。
7行目には、通信処理を実行する関数呼び出しが定義されている。通信処理の関数呼び出しでは、データの受信元として受信元プロセスID(Ip_src)が指定され、データの送信先として送信先プロセスID(Is_dst)が指定される。
このような処理記述に従って処理が実行されることで、2-Level Ringアルゴリズムによるプロセスを行った全対全通信が実行される。2-Level Ringアルゴリズムを用いる全対全通信を行うことで、HOLブロッキングの発生が抑制される。以下、Ringアルゴリズムと比較して、2-Level Ringアルゴリズムの優位性について説明する。
まず、図12、図13を参照して、Ringアルゴリズムによる全対全通信を行った場合のプロセス間通信の状態遷移について示す図である。
図12は、Ringアルゴリズムによるプロセス間通信の状態遷移を示す第1の図である。なお図12では、サーバ100,200,300,400を矩形で表し、各サーバ100,200,300,400内で実行されるプロセスを円形で表している。各プロセスを示す円形内には、プロセスIDが示されている。
Ringアルゴリズムでは、データの送信先とするプロセスのプロセスIDが環状に並べられる。例えばプロセスIDが昇順で並べられ、値が最大のプロセスID「7」の次は、値が最小のプロセスID「0」であるものと定義される。図12の例では、プロセスが、プロセスIDの順に時計回りに配置されている。そこで、以下の説明では、受信元プロセスおよび送信先プロセスを、全対全通信要求を出力したプロセスからの図12上での相対位置によって示す。
図12に示すように8つのプロセスそれぞれに対応するプロセスIDが環状に並べられているものとし、Ringアルゴリズムによる全対全通信を行うと、すべての通信を完了するのに8ステップ要する。図12には、ステップ番号0〜3のステップの通信状態が示されている。
ステップ番号0のステップ(Step=0)では、全対全通信要求を出力したプロセス自身が、受信元プロセスおよび送信先プロセスとなる。
ステップ番号1のステップ(Step=1)では、全対全通信要求を出力したプロセスのプロセスIDから反時計回りに1個ずれた位置のプロセスIDに対応するプロセスが、受信元プロセスとされる。また、全対全通信要求を出力したプロセスのプロセスIDから時計回りに1個ずれた位置のプロセスIDに対応するプロセスが、送信先プロセスとされる。
ステップ番号2のステップ(Step=2)では、全対全通信要求を出力したプロセスから反時計回りに2個ずれた位置のプロセスが、受信元プロセスとされる。また、全対全通信要求を出力したプロセスから時計回りに2個ずれた位置のプロセスが、送信先プロセスとされる。
ステップ番号3のステップ(Step=3)では、全対全通信要求を出力したプロセスから反時計回りに3個ずれた位置のプロセスが、受信元プロセスとされる。また、全対全通信要求を出力したプロセスから時計回りに3個ずれた位置のプロセスが、送信先プロセスとされる。
図13は、Ringアルゴリズムによるプロセス間通信の状態遷移を示す第2の図である。図13には、ステップ番号4〜7のステップの通信状態が示されている。
ステップ番号4のステップ(Step=4)では、全対全通信要求を出力したプロセスから反時計回りに4個ずれた位置のプロセスが、受信元プロセスとされる。また、全対全通信要求を出力したプロセスから時計回りに4個ずれた位置のプロセスが、送信先プロセスとされる。
ステップ番号5のステップ(Step=5)では、全対全通信要求を出力したプロセスから反時計回りに5個ずれた位置のプロセスが、受信元プロセスとされる。また、全対全通信要求を出力したプロセスから時計回りに5個ずれた位置のプロセスが、送信先プロセスとされる。
ステップ番号6のステップ(Step=6)では、全対全通信要求を出力したプロセスから反時計回りに6個ずれた位置のプロセスが、受信元プロセスとされる。また、全対全通信要求を出力したプロセスから時計回りに6個ずれた位置のプロセスが、送信先プロセスとされる。
ステップ番号7のステップ(Step=7)では、全対全通信要求を出力したプロセスから反時計回りに7個ずれた位置のプロセスが、受信元プロセスとされる。また、全対全通信要求を出力したプロセスから時計回りに7個ずれた位置のプロセスが、送信先プロセスとされる。
図12、図13に示した例では、サーバ1台当たりのプロセス数は2である。このように、1台のサーバで複数のプロセスが動作している状況でRingアルゴリズムによる全対全通信を行うと、4番目のステップ(Step=3)と6番目のステップ(Step=5)とのそれぞれの通信において、出力ポート使用の競合が発生する。なお図12、図13の4番目のステップ(Step=3)と6番目のステップ(Step=5)とでは、競合する通信同士を同じ線種(実線、破線、点線、一点鎖線)で表している。
図14は、4番目のステップ(Step=3)における競合の発生状況を示す図である。図14では、プロセス間で受け渡すデータを送信するプロセスと受信するプロセスへのデータの転送経路を線で示している。競合する通信の転送経路は、互いに同じ線種(実線、破線、点線、一点鎖線)で表されている。
ネットワークスイッチ500内では、各出力ポート512,522,532,542に対して、異なる入力ポートからパケットが同時に転送される場合、出力ポートにおいて競合が発生する。例えば、サーバ100内のプロセスID「1」のプロセスを実行するプロセッサコアから、サーバ300内のプロセスID「4」のプロセスへデータ転送が行われている。またサーバ200内のプロセスID「2」のプロセスを実行するプロセッサコアから、サーバ300内のプロセスID「4」のプロセスへデータ転送が行われている。この2つのデータ転送は、サーバ300に接続された通信ポート530の出力ポート532を経由する。このとき、データの受信元となるプロセスが異なるサーバ上に存在する。そのため出力ポート532の使用権を獲得の競合が発生する可能性がある。
図14の例では、すべての出力ポート512,522,532,542で競合が発生する可能性がある。競合が発生すると、同じ出力ポートへパケットを転送しようとする入力ポートの一方のみが先に出力ポートの使用権を獲得する。使用権を獲得できなかった入力ポートではHOLブロッキングが発生する。
図12〜図14に示した例では、理解しやすくするために総プロセス数を8としているが、実際のクラスタシステムでは、プロセス数はもっと多数であることが多い。実際に、総プロセス数128のクラスタシステム上にて、Ringアルゴリズムの各通信ステップの実行時間を測定した。
図15は、Ringアルゴリズムの各通信ステップの実行時間を示す図である。図15には、総プロセス数128(サーバ数16×ローカルプロセス数8)のクラスタシステム上にて、Ringアルゴリズムの各通信ステップの通信の実行時間を測定した結果が示されている。サーバには、8コアのIAサーバを使用した。通信には、DDR(Double Data Rate)のInfiniBandに準拠した機器を使用した。プロセス間送受信のデータサイズは、1MBとした。
図15中の横軸には、通信のステップ番号が示されている。縦軸には、通信ステップ番号が8の倍数(ステップ番号「0」を除く)のときの通信の実行時間で正規化した、通信の通信時間が示されている。すなわち、通信ステップ番号が8の倍数のときの通信の実行時間を単位時間(1.0)とし、他のステップの通信の実行時間が、単位時間の何倍になるのかが示されている。
通信ステップ番号が8の倍数のときの通信の実行時間を基準としているのは、通信ステップ番号がローカルプロセス数8の倍数のときには、出力ポート使用の競合およびHOLブロッキングが発生しないと考えられるためである。すなわち、通信ステップ番号がローカルプロセス数8の倍数のときは、各サーバ内の各プロセスが共通のサーバに対してデータが送信される。そうすると、各サーバから送信されるパケットの送信先となるサーバが異なるため、出力ポート使用の競合およびHOLブロッキングが発生しない。例えば、図12、図13に示した例では、ローカルプロセス数が「2」である。ステップ番号が2の倍数となる2,4,6の各ステップでは、出力ポート使用の競合およびHOLブロッキングは発生していない。
図15を参照すると分かるように、通信ステップ番号がローカルプロセス数の倍数でないときには、実行時間が長くなっている。これはネットワークスイッチ500内で出力ポート使用の競合によりHOLブロッキングが発生しているためであると考えられる。すなわち、HOLブロッキングの発生により、通信効率が低下しているのが分かる。
なお図15の例において、ステップ番号が7以下、121以上の通信の実行時間は、通信ステップ番号が8の倍数のときの通信の実行時間よりも短い。これはステップ番号が7以下、121以上の通信では、同じサーバ内でのプロセス間の通信が存在し、ネットワークスイッチを経由したプロセス間通信が他のステップよりも少ないためである。
このように、Ringアルゴリズムによる全対全通信は、マルチコアのプロセッサを実装したサーバで構成されるクラスタシステムにとって適切なアルゴリズムではない。
次に、図16、図17を参照して、2-Level Ringアルゴリズムによるプロセス間通信状況の遷移を説明する。
図16は、2-Level Ringアルゴリズムによるプロセス間通信の状態遷移を示す第1の図である。なお図16では、サーバ100,200,300,400を矩形で表し、各サーバ100,200,300,400内で実行されるプロセスを円形で表している。各プロセスを示す円形内には、そのプロセスのプロセスIDが示されている。また、各プロセスを示す円形の左上に、そのプロセスのローカルプロセスIDが示されている。
2-Level Ringアルゴリズムでは、各サーバのサーバIDが環状に並べられる。例えばサーバIDが昇順で並べられ、値が最大のサーバID「3」の次は、値が最小のサーバID「0」であるものと定義される。図16の例では、サーバが、サーバIDの順に時計回りに配置されている。そこで、以下の説明では、受信元サーバおよび送信先サーバを、全対全通信要求を出力したプロセスが実行されているサーバからの図16上での相対位置によって示す。
また、2-Level Ringアルゴリズムでは、データの送信先とするプロセスのローカルプロセスIDが、サーバごとに環状に並べられる。例えばローカルプロセスIDが昇順で並べられ、値が最大のローカルプロセスID「1」の次は、値が最小のローカルプロセスID「0」であるものと定義される。
図16に示すように4つのサーバおよび8つのプロセスが環状に並べられているものとし、2-Level Ringアルゴリズムによる全対全通信を行うと、すべての通信を完了するのに8ステップ要する。図12には、ステップ番号0〜3のステップの通信状態が示されている。
ステップ番号0のステップ(Step=0)では、全対全通信要求を出力したプロセス自身が、受信元プロセスおよび送信先プロセスとなる。
ステップ番号1のステップ(Step=1)では、全対全通信要求を出力したプロセスが動作しているサーバ内の他のプロセスが、受信元プロセスおよび送信先プロセスとされる。
ステップ番号2のステップ(Step=2)では、全対全通信要求を出力したプロセスが動作しているサーバから反時計回りに1個ずれた位置のサーバが、受信元サーバとなる。また全対全通信要求を出力したプロセスが動作しているサーバから時計回りに1個ずれた位置のサーバが、送信先サーバとなる。さらに全対全通信要求を出力したプロセスと同じローカルプロセスIDを有する受信元サーバ内のプロセスが、受信元プロセスとなる。そして、全対全通信要求を出力したプロセスと同じローカルプロセスIDを有する送信先サーバ内のプロセスが、送信先プロセスとなる。
ステップ番号3のステップ(Step=3)では、受信元サーバと送信先サーバとは、ステップ番号2のステップと同じである。また全対全通信要求を出力したプロセスと同じローカルプロセスIDを有する受信元サーバ内のプロセスの次の順のプロセスが、受信元プロセスとなる。そして、全対全通信要求を出力したプロセスと同じローカルプロセスIDを有する送信先サーバ内のプロセスの次の順のプロセスが、送信先プロセスとなる。
図17は、2-Level Ringアルゴリズムによるプロセス間通信の状態遷移を示す第2の図である。図17には、ステップ番号4〜7のステップの通信状態が示されている。
ステップ番号4のステップ(Step=4)では、全対全通信要求を出力したプロセスが動作しているサーバから反時計回りに2個ずれた位置のサーバが、受信元サーバとなる。また全対全通信要求を出力したプロセスが動作しているサーバから時計回りに2個ずれた位置のサーバが、送信先サーバとなる。さらに全対全通信要求を出力したプロセスのローカルプロセスIDと同じローカルプロセスIDの受信元サーバ内のプロセスが、受信元プロセスとなる。そして、全対全通信要求を出力したプロセスのローカルプロセスIDと同じローカルプロセスIDの送信先サーバ内のプロセスが、送信先プロセスとなる。
ステップ番号5のステップ(Step=5)では、受信元サーバと送信先サーバとは、ステップ番号4のステップと同じである。また全対全通信要求を出力したプロセスと同じローカルプロセスIDを有する受信元サーバ内のプロセスの次の順のプロセスが、受信元プロセスとなる。そして、全対全通信要求を出力したプロセスと同じローカルプロセスIDを有する送信先サーバ内のプロセスの次の順のプロセスが、送信先プロセスとなる。
ステップ番号6のステップ(Step=6)では、全対全通信要求を出力したプロセスが動作しているサーバから反時計回りに3個ずれた位置のサーバが、受信元サーバとなる。また全対全通信要求を出力したプロセスが動作しているサーバから時計回りに3個ずれた位置のサーバが、送信先サーバとなる。さらに全対全通信要求を出力したプロセスのローカルプロセスIDと同じローカルプロセスIDの受信元サーバ内のプロセスが、受信元プロセスとなる。そして、全対全通信要求を出力したプロセスのローカルプロセスIDと同じローカルプロセスIDの送信先サーバ内のプロセスが、送信先プロセスとなる。
ステップ番号7のステップ(Step=7)では、受信元サーバと送信先サーバとは、ステップ番号6のステップと同じである。また全対全通信要求を出力したプロセスと同じローカルプロセスIDを有する受信元サーバ内のプロセスの次の順のプロセスが、受信元プロセスとなる。そして、全対全通信要求を出力したプロセスと同じローカルプロセスIDを有する送信先サーバ内のプロセスの次の順のプロセスが、送信先プロセスとなる。
このように2-Level Ringアルゴリズムにより全対全通信を行えば、異なるサーバで実行される複数のプロセスが、同時に1つのサーバにデータ転送を行うことが抑制され、出力ポートの使用の競合の発生が抑制される。その結果、HOLブロッキングの発生も抑制され、通信の実行時間も短縮される。
図18は、2-Level RingアルゴリズムとRingアルゴリズムとの実効ネットワークバンド幅の測定結果を示す図である。図18の例では、サーバには、8コアのIAサーバを使用した。通信には、DDR(Double Data Rate)のInfiniBandに準拠した機器を使用した。サーバ数は16とした。プロセス間送受信のデータサイズは、1MBとした。このようなハードウェア構成で、ローカルプロセス数を、1,2,4,8とした場合の全対全通信時の実効ネットワークバンド幅を測定した。実効ネットワークバンド幅の単位は、「ギガバイト(GB)/秒(s)」である。なおローカルプロセス数を1,2,4とする場合、サーバ内のプロセッサコアの一部だけが計算処理用のプロセスを実行している。
ローカルプロセス数が1の場合、2-Level RingアルゴリズムとRingアルゴリズムとの間に、実効ネットワークバンド幅の有意な差異は見られない。ローカルプロセス数が複数になると、2-Level Ringアルゴリズムの方がRingアルゴリズムよりも実効ネットワークバンド幅が明らかに高くなる。ローカルプロセス数が増えるに従って、2-Level RingアルゴリズムとRingアルゴリズムとの実効ネットワークバンド幅の差が増加する。
図18では、Ringアルゴリズムによる全対全通信から2-Level Ringアルゴリズムによる全対全通信に通信アルゴリズムを変更した場合の性能向上率を示している。性能向上率は、Ringアルゴリズムの実効ネットワークバンド幅から2-Level Ringアルゴリズムの実効ネットワークバンド幅への増加量を、Ringアルゴリズムの実効ネットワークバンド幅に対する割合(パーセンテージ)で示したものである。図18に示すように、ローカルプロセス数が増加する程、性能向上率が向上している。
ローカルプロセス数が多いときにRingアルゴリズムにおける実効ネットワークバンド幅が低下するのは、ネットワークスイッチ内でHOLブロッキングが発生するためであるものと考えられる。図15で示したように、ステップ番号がローカルプロセス数の倍数のときにはHOLブロッキングは発生しないが、それ以外のステップ番号ではHOLブロッキングが発生する可能性がある。実際に、サーバ数が16、ローカルプロセス数が8、総プロセス数が128の場合にRingアルゴリズムの各ステップの実行時間を測定したところ、ステップ番号がローカルプロセス数の倍数でないときには実際に実行時間が長くなっていることが分かる。Ringアルゴリズムは、1台のサーバで複数のプロセスを実行するクラスタシステムにとって適切なアルゴリズムではない。
それに対し、2-Level Ringアルゴリズムでは、全対全通信におけるHOLブロッキングの発生を抑止できる。その結果、図18に示すように、ローカルプロセス数が増加しても、ネットワークバンド幅の低下を最小限に抑えることが可能となる。
以上説明したように、従来のアルゴリズムは各プロセスがどのサーバのプロセスであるかを考慮しないため、ある通信ステップにおいてネットワークスイッチ内で競合が発生する可能性があった。それに対して、2-Level Ringアルゴリズムは各プロセスがどのサーバのプロセスであるかを考慮したアルゴリズムであり、どの通信ステップにおいても、あるサーバの各プロセスは、同じサーバのプロセスからデータを受信する。その結果、ネットワークスイッチ500内で出力ポート使用の競合が発生せず、本来の通信性能を得ることができる。総プロセス数128(サーバ数16× ローカルプロセス数8)のクラスタシステムにあれば、2-Level Ringアルゴリズムは、Ringアルゴリズムに対して実効ネットワークバンド幅が22.5%向上することが確認されている(図18参照)。
しかも2-Level Ringアルゴリズムでは、送信先プロセスの決定において、複数のプロセスが1つのプロセスを重複して送信先プロセスとしないようにしている。1つのサーバ内でデータを受信するプロセスに偏りがあると、サーバの処理効率が低下する。すなわち、データを受信するプロセスに偏りがあると、データを受信しないプロセスが発生し、そのプロセスを実行しているプロセッサコアの処理能力に余裕が生まれる。処理能力を使い切っていないプロセッサコアが発生するということは、サーバ全対の処理効率の低下を意味する。2-Level Ringアルゴリズムによれば、全対全通信時のサーバ内のプロセッサコア間の処理の均等化が図られるため、サーバの処理効率の低下が防止される。
さらに、第2の実施の形態では、受信元プロセスを決定しておき、受信元プロセスから送られるデータを優先的に受信できるようにしている。すなわち、受信元プロセスから送られるデータを含むメッセージを格納するバッファが用意されるため、受信側のバッファ不足によるそのメッセージの転送の待ちの発生が抑止される。その結果、全対全のプロセス間通信を優先的に効率よく実行可能となる。
〔第3の実施の形態〕
次に第3の実施の形態について説明する。第3の実施の形態は、各サーバのプロセスに対するプロセスIDの割当がマッピングテーブルで管理されている場合の2-Level Ringアルゴリズムの例である。
第2の実施の形態では、各プロセスのプロセスIDが、そのプロセスが動作しているサーバのサーバIDにローカルプロセス数を乗算し、乗算結果にそのプロセスのローカルプロセスIDを加算して得られる値である。第2の実施の形態では、このようにプロセスIDがサーバIDとローカルプロセスIDとから規則的に求められることを前提としている。しかし、プロセスIDの割当に特別な規則性を持たせず、マッピングテーブルで管理することも可能である。そのような場合、マッピングテーブルを参照して、受信元プロセスおよび送信先プロセスを決定する。
図19は、第3の実施の形態におけるサーバの機能を示すブロック図である。第3の実施の形態における第2の実施の形態と相違する要素は、受信元・送信先プロセス決定部162aとプロセスID管理テーブル記憶部165である。そこで受信元・送信先プロセス決定部162aとプロセスID管理テーブル記憶部165以外の要素は、図8に示した第2の実施の形態のブロック図と同じ符号を付し、説明を省略する。
第3の実施の形態における受信元・送信先プロセス決定部162aは、受信元プロセスと送信先プロセスとのプロセスIDとを決定する処理の詳細が、第2の実施の形態における受信元・送信先プロセス決定部162と異なる。受信元・送信先プロセス決定部162aが実行する他の要素との間の各種情報の受け渡し処理については、第2の実施の形態における受信元・送信先プロセス決定部162と同様である。
受信元・送信先プロセス決定部162aは、受信元プロセスを決定する際に、まず受信元サーバ内の受信元プロセスとするプロセスのローカルプロセスIDを決定する。そして、受信元・送信先プロセス決定部162aは、決定したローカルプロセスIDに対応するプロセスIDを、プロセスID管理テーブル記憶部165から取得する。受信元・送信先プロセス決定部162aは、取得したプロセスIDに対応するプロセスを、受信元プロセスとする。
また、受信元・送信先プロセス決定部162aは、送信先プロセスを決定する際に、まず送信先サーバ内の送信先プロセスとするプロセスのローカルプロセスIDを決定する。そして、受信元・送信先プロセス決定部162aは、決定したローカルプロセスIDに対応するプロセスIDを、プロセスID管理テーブル記憶部165から取得する。受信元・送信先プロセス決定部162aは、取得したプロセスIDに対応するプロセスを、送信先プロセスとする。
プロセスID管理テーブル記憶部165は、プロセスIDに対応付けて、そのプロセスIDが割り振られたプロセスが実行されているサーバのサーバID、およびそのプロセスのローカルプロセスIDを記憶する記憶機能である。例えば、RAMはHDDの記憶領域の一部が、プロセスID管理テーブル記憶部165として使用される。
図20は、プロセスID管理テーブル記憶部のデータ構造例を示す図である。プロセスID管理テーブル記憶部165には、プロセスID管理テーブル165aが格納されている。プロセスID管理テーブル165aには、プロセスID、サーバID、およびローカルプロセスIDの欄が設けられている。
プロセスIDの欄には、クラスタシステム内の各プロセスを識別するためのプロセスIDが設定される。サーバIDの欄には、プロセスIDが割り当てられたプロセスが動作しているサーバのサーバIDが設定される。ローカルプロセスIDの欄には、プロセスIDが割り当てられたプロセスのサーバ内のローカルプロセスIDが設定される。
図21は、第3の実施の形態における2-Level Ringアルゴリズムによるプロセス決定を行う処理記述例を示す図である。図21に示すように、第3の実施の形態における2-Level Ringアルゴリズムは、例えばfor文で処理を記述することができる。ここで、図21中の各変数のうち、Ip、Il_src、Il_dst以外の変数に設定される内容は第2の実施の形態と同様である。第3の実施の形態では、Ipに自プロセスIDが設定されるが、その値は0以上、Np未満の任意の値である。Il_srcには、受信元プロセスのローカルプロセスID(受信元ローカルプロセスID)が設定される。Il_dstには、送信先プロセスのローカルプロセスID(送信先ローカルプロセスID)が設定される。
処理記述の1行目から3行目には、受信元サーバと送信先サーバとを決定する手順が記述されている。1行目から3行目の内容は、図11に示した第2の実施の形態の処理と同様である。
4行目には、for文による繰り返し処理が定義されている。変数lには初期値として「0」が設定される。変数lは、for文内の処理が1回繰り返されるごとに、インクリメントされる(l++)。そして、変数lの値がローカルプロセス数(Nl)未満の間、5行目〜9行目の処理が繰り返される。
5行目には、受信元ローカルプロセスIDを決定する式が定義されている。5行目に定義された式では、自ローカルプロセスID(Il)に対し、変数lの値が減算されると共にローカルプロセス数(Nl)が加算され、加減算の結果がローカルプロセス数(Nl)で除算される。除算の余りが、受信元ローカルプロセスID(Il_src)に設定される。
6行目には、送信先ローカルプロセスIDを決定する式が定義されている。6行目に定義された式では、自ローカルプロセスID(Il)に対し、変数lの値とローカルプロセス数(Nl)とが加算され、加算の結果がローカルプロセス数(Nl)で除算される。除算の余りが、送信先ローカルプロセスID(Il_dst)に設定される。
7行目には、受信元プロセスを決定する式が定義されている。5行目に定義された式では、受信元サーバID(Is_src)と受信元ローカルプロセスID(Il_src)とをパラメータで指定した関数Get_Ip()の呼び出しを行っている。関数Get_Ip()は、プロセスID管理テーブルを参照し、サーバIDとローカルプロセスIDからプロセスIDを決定する処理である。関数Get_Ip()の処理結果が、受信元プロセスID(Ip_src)に設定される。
8行目には、送信先プロセスを決定する式が定義されている。8行目に定義された式では、送信先サーバID(Is_dst)と送信先ローカルプロセスID(Il_dst)とをパラメータで指定した関数Get_Ip()の呼び出しを行っている。関数Get_Ip()の処理結果が、受信元プロセスID(Ip_src)に設定される。
9行目には、通信処理を実行する関数呼び出しが定義されている。通信処理の関数呼び出しでは、データの受信元として受信元プロセスID(Ip_src)が指定され、データの送信先として送信先プロセスID(Is_dst)が指定される。
このようにして、プロセスIDをテーブルで管理している場合においても、2-Level Ringアルゴリズムによる適切なプロセスを送信先として決定できる。
〔その他の応用例〕
第2の実施の形態では1台のサーバに、2つのコアを有するプロセッサが1つ搭載されている場合の例を示したが、サーバには4コアなどの多数のコアを有するプロセッサを搭載可能である。また各サーバに、マルチコアプロセッサを複数搭載することもできる。例えば、サーバに4コアのプロセッサを2個搭載することもできる。この場合、総コア数は8となり、並列プログラム実行時にサーバ1台当たり8個のプロセスが実行される。このように1台当たりのプロセス数が多数であっても、第2の実施の形態と同様のアルゴリズム(2-LEVEL Ring アルゴリズム)で全対全通信を行えば、ネットワークスイッチでのHOLブロッキングの発生を抑止できる。
さらに、1台のサーバにシングルコアのプロセッサが複数搭載されている場合も、1台のサーバで複数のプロセスが実行される。このような場合も2-Level Ringアルゴリズムによる全対全のプロセス間通信により、通信効率を向上させることができる。
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、サーバが有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、フレキシブルディスク(FD)、磁気テープなどがある。光ディスクには、DVD、DVD−RAM、CD−ROM/RWなどがある。光磁気記録媒体には、MO(Magneto-Optical disc)などがある。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CD−ROMなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
また、上記の処理機能の少なくとも一部を、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、PLD(Programmable Logic Device)などの電子回路で実現することもできる。
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の2以上の構成(特徴)を組み合わせたものであってもよい。
以上説明した実施の形態の主な技術的特徴は、以下の付記の通りである。
(付記1) クラスタシステムを構成する複数のサーバのうちの1つとして機能し、複数のサーバそれぞれで実行されるプロセス間の通信を行うコンピュータにおいて、
全対全のプロセス間通信時に複数のサーバそれぞれで繰り返し行われる送信先サーバ決定における同一回の送信先サーバ決定において、複数のサーバが互いに異なるサーバを送信先サーバとして決定するような送信先サーバ決定手順が予め定義されており、前記コンピュータで実行される自プロセスからの全対全のプロセス間通信要求に応答し、前記送信先サーバ決定手順に従って送信先サーバを繰り返し決定する送信先サーバ決定手段と、
送信先サーバが決定されるごとに、決定された送信先サーバで動作しているプロセスを順番に送信先プロセスとして決定する送信先プロセス決定手段と、
送信先プロセスが決定されるごとに、前記自プロセスの実行により送信用のデータが格納された送信用バッファから送信先プロセスに対する送信データを取得し、送信先サーバ内の決定された送信先プロセスの実行時に送信データを読み取り可能とするように、送信先サーバに対して取得した送信データを送信するデータ送信手段と、
を有するコンピュータ。
(付記2) 前記送信先プロセス決定手段は、前記コンピュータで実行される複数のプロセスそれぞれの実行により出力される全対全のプロセス間通信要求に応じて、複数のプロセスそれぞれに対して繰り返し行われる送信先プロセス決定における同一回の送信先プロセス決定において、複数のプロセスそれぞれに対して、送信先サーバ内の互いに異なるプロセスを送信先プロセスとして決定するような送信先プロセス決定手順が予め定義されており、前記送信先サーバ決定手順に従って、前記全対全のプロセス間通信要求を出力した前記自プロセスに対する送信先サーバを繰り返し決定することを特徴とする付記1記載のコンピュータ。
(付記3) 前記送信先サーバ決定手段は、前記送信先サーバ決定手順に従って、複数のサーバそれぞれに付与されたサーバ番号を所定の配列で並べ、前記コンピュータに付与されたサーバ番号と他のサーバ番号との前記配列上の相対的位置関係に基づいて送信先サーバを決定することを特徴とする付記1または2記載のコンピュータ。
(付記4) 前記送信先サーバ決定手段は、前記送信先サーバ決定手順に従って、複数のサーバそれぞれに付与されたサーバ番号を昇順で並べると共に、サーバ番号の最大値の次順をサーバ番号の最小値とする配列とし、前記コンピュータに付与されたサーバ番号から前記配列の並びに沿って一定方向にサーバ番号を順次決定し、決定したサーバ番号で示されるサーバを送信先サーバとすることを特徴とする付記3記載のコンピュータ。
(付記5) 前記送信先プロセス決定手段は、前記送信先プロセス決定手順に従って、複数のプロセスそれぞれに付与されたプロセス番号を所定の配列で並べ、前記全対全のプロセス間通信要求を出力した前記自プロセスに付与されたプロセス番号と他のプロセスのプロセス番号との前記配列上の相対的位置関係に基づき送信先プロセスを決定することを特徴とする付記2または3記載のコンピュータ。
(付記6) 前記送信先プロセス決定手段は、前記送信先プロセス決定手順に従って、送信先サーバ内の複数のプロセスそれぞれに付与された送信先サーバ内でプロセスを一意に識別するローカルプロセス番号を昇順で並べると共に、ローカルプロセス番号の最大値の次順をローカルプロセス番号の最小値とする配列とし、全対全のプロセス間通信要求を出力した前記自プロセスに付与されたプロセス番号から前記配列の並びに沿って一定方向にプロセス番号を順次決定し、決定したプロセス番号で示される送信先サーバ内のプロセスを送信先プロセスとすることを特徴とする付記5記載のコンピュータ。
(付記7) 全対全のプロセス間通信時に複数のサーバそれぞれで繰り返し行われる受信元サーバ決定における同一回の受信元サーバ決定において、複数のサーバが互いに異なるサーバを受信元サーバとして決定するような受信元サーバ決定手順が予め定義されており、前記コンピュータで実行される自プロセスからの全対全のプロセス間通信要求に応答し、前記受信元サーバ決定手順に従って受信元サーバを繰り返し決定する受信元サーバ決定手段と、
受信元サーバが決定されるごとに、受信元サーバで動作しているプロセスを順番に受信元プロセスとして決定する受信元プロセス決定手段と、
受信元プロセスが決定されるごとに、受信元サーバ内の決定された受信元プロセスから送信される受信データを取得し、取得した受信データを受信用バッファに格納するデータ受信手段と、
をさらに有することを特徴とする付記1記載のコンピュータ。
(付記8) クラスタシステムを構成する複数のサーバのうちの1つとして機能するコンピュータに対し、複数のサーバそれぞれで実行されるプロセス間の通信を実行させるプロセス間通信プログラムにおいて、
前記コンピュータに、
全対全のプロセス間通信時に複数のサーバそれぞれで繰り返し行われる送信先サーバ決定における同一回の送信先サーバ決定において、複数のサーバが互いに異なるサーバを送信先サーバとして決定するような送信先サーバ決定手順が予め定義されており、前記コンピュータで実行される自プロセスからの全対全のプロセス間通信要求に応答し、前記送信先サーバ決定手順に従って送信先サーバを繰り返し決定し、
送信先サーバが決定されるごとに、決定された送信先サーバで動作しているプロセスを順番に送信先プロセスとして決定し、
送信先プロセスが決定されるごとに、前記自プロセスの実行により送信用のデータが格納された送信用バッファから送信先プロセスに対する送信データを取得し、送信先サーバ内の決定された送信先プロセスの実行時に送信データを読み取り可能とするように、送信先サーバに対して取得した送信データを送信する、
処理を実行させるプロセス間通信プログラム。
(付記9) クラスタシステムを構成する複数のサーバのうちの1つとして機能するコンピュータで、複数のサーバそれぞれで実行されるプロセス間の通信を実行するプロセス間通信方法において、
前記コンピュータが、
全対全のプロセス間通信時に複数のサーバそれぞれで繰り返し行われる送信先サーバ決定における同一回の送信先サーバ決定において、複数のサーバが互いに異なるサーバを送信先サーバとして決定するような送信先サーバ決定手順が予め定義されており、前記コンピュータで実行される自プロセスからの全対全のプロセス間通信要求に応答し、前記送信先サーバ決定手順に従って送信先サーバを繰り返し決定し、
送信先サーバが決定されるごとに、決定された送信先サーバで動作しているプロセスを順番に送信先プロセスとして決定し、
送信先プロセスが決定されるごとに、前記自プロセスの実行により送信用のデータが格納された送信用バッファから送信先プロセスに対する送信データを取得し、送信先サーバ内の決定された送信先プロセスの実行時に送信データを読み取り可能とするように、送信先サーバに対して取得した送信データを送信する、
ことを特徴とするプロセス間通信方法。
1−1,1−2,1−3,・・・ プロセス
2−1,2−2,2−3,・・・ 送信用バッファ
3−1,3−2,3−3,・・・ 受信用バッファ
4−1,4−2,4−3,・・・ 全対全通信手段
4a 送信先サーバ決定手段
4b 送信先プロセス決定手段
4c データ送信手段
4d 受信元サーバ決定手段
4e 受信元プロセス決定手段
4f データ受信手段
5 ネットワークスイッチ
6−1,6−2,・・・ サーバ
6a−1,6b−1,6a−2,6b−2 プロセッサ
A コンピュータ

Claims (6)

  1. クラスタシステムを構成する複数のサーバのうちの1つとして機能し、複数のサーバそれぞれで実行されるプロセス間の通信を行うコンピュータにおいて、
    全対全のプロセス間通信時に複数のサーバそれぞれで繰り返し行われる送信先サーバ決定における同一回の送信先サーバ決定において、複数のサーバが互いに異なるサーバを送信先サーバとして決定するような送信先サーバ決定手順が予め定義されており、前記コンピュータで実行される複数のプロセスのうちの自プロセスからの全対全のプロセス間通信要求に応答し、前記送信先サーバ決定手順に従って送信先サーバを繰り返し決定する送信先サーバ決定手段と、
    前記複数のプロセスそれぞれに対して繰り返し行われる送信先プロセス決定における同一回の送信先プロセス決定において、前記複数のプロセスそれぞれに対して、送信先サーバ内の互いに異なるプロセスを送信先プロセスとして決定するような送信先プロセス決定手順が予め定義されており、送信先サーバが決定されるごとに、前記送信先サーバ決定手順に従って、前記全対全のプロセス間通信要求を出力した前記自プロセスに対する該送信先サーバ内の送信先プロセスを繰り返し決定する送信先プロセス決定手段と、
    送信先サーバ内の送信先プロセスが決定されるごとに、前記自プロセスの実行により送信用のデータが格納された送信用バッファから送信先プロセスに対する送信データを取得し、送信先プロセスの実行時に該送信先サーバにおいて該送信データを読み取り可能とするように、送信先サーバに対して送信データを送信するデータ送信手段と、
    を有するコンピュータ。
  2. 前記送信先サーバ決定手段は、前記送信先サーバ決定手順に従って、複数のサーバそれぞれに付与されたサーバ番号を所定の配列で並べ、前記コンピュータに付与されたサーバ番号と他のサーバ番号との前記配列上の相対的位置関係に基づいて送信先サーバを決定することを特徴とする請求項1記載のコンピュータ。
  3. 前記送信先プロセス決定手段は、前記送信先プロセス決定手順に従って、複数のプロセスそれぞれに付与されたプロセス番号を所定の配列で並べ、前記全対全のプロセス間通信要求を出力した前記自プロセスに付与されたプロセス番号と他のプロセスのプロセス番号との前記配列上の相対的位置関係に基づき送信先プロセスを決定することを特徴とする請求項1または2記載のコンピュータ。
  4. 全対全のプロセス間通信時に複数のサーバそれぞれで繰り返し行われる受信データの送信元サーバ決定における同一回の送信元サーバ決定において、複数のサーバが互いに異なるサーバを送信元サーバとして決定するような送信元サーバ決定手順が予め定義されており、前記コンピュータで実行される自プロセスからの全対全のプロセス間通信要求に応答し、前記送信元サーバ決定手順に従って送信元サーバを繰り返し決定する送信元サーバ決定手段と、
    送信元サーバが決定されるごとに、送信元サーバで動作しているプロセスを順番に送信元プロセスとして決定する送信元プロセス決定手段と、
    送信元プロセスが決定されるごとに、送信元サーバ内の決定された送信元プロセスから送信される受信データを取得し、取得した受信データを受信用バッファに格納するデータ受信手段と、
    をさらに有することを特徴とする請求項1乃至3のいずれかに記載のコンピュータ。
  5. クラスタシステムを構成する複数のサーバのうちの1つとして機能するコンピュータに対し、複数のサーバそれぞれで実行されるプロセス間の通信を実行させるプロセス間通信プログラムにおいて、
    前記コンピュータに、
    全対全のプロセス間通信時に複数のサーバそれぞれで繰り返し行われる送信先サーバ決定における同一回の送信先サーバ決定において、複数のサーバが互いに異なるサーバを送信先サーバとして決定するような送信先サーバ決定手順が予め定義されており、前記コンピュータで実行される複数のプロセスのうちの自プロセスからの全対全のプロセス間通信要求に応答し、前記送信先サーバ決定手順に従って送信先サーバを繰り返し決定し、
    前記複数のプロセスそれぞれに対して繰り返し行われる送信先プロセス決定における同一回の送信先プロセス決定において、前記複数のプロセスそれぞれに対して、送信先サーバ内の互いに異なるプロセスを送信先プロセスとして決定するような送信先プロセス決定手順が予め定義されており、送信先サーバが決定されるごとに、前記送信先サーバ決定手順に従って、前記全対全のプロセス間通信要求を出力した前記自プロセスに対する該送信先サーバ内の送信先プロセスを繰り返し決定し、
    送信先サーバ内の送信先プロセスが決定されるごとに、前記自プロセスの実行により送信用のデータが格納された送信用バッファから該送信先プロセスに対する送信データを取得し、該送信先プロセスの実行時に該送信先サーバにおいて該送信データを読み取り可能とするように、該送信先サーバに対して該送信データを送信する、
    処理を実行させるプロセス間通信プログラム。
  6. クラスタシステムを構成する複数のサーバのうちの1つとして機能するコンピュータで、複数のサーバそれぞれで実行されるプロセス間の通信を実行するプロセス間通信方法において、
    前記コンピュータが、
    全対全のプロセス間通信時に複数のサーバそれぞれで繰り返し行われる送信先サーバ決定における同一回の送信先サーバ決定において、複数のサーバが互いに異なるサーバを送信先サーバとして決定するような送信先サーバ決定手順が予め定義されており、前記コンピュータで実行される複数のプロセスのうちの自プロセスからの全対全のプロセス間通信要求に応答し、前記送信先サーバ決定手順に従って送信先サーバを繰り返し決定し、
    前記複数のプロセスそれぞれに対して繰り返し行われる送信先プロセス決定における同一回の送信先プロセス決定において、前記複数のプロセスそれぞれに対して、送信先サーバ内の互いに異なるプロセスを送信先プロセスとして決定するような送信先プロセス決定手順が予め定義されており、送信先サーバが決定されるごとに、前記送信先サーバ決定手順に従って、前記全対全のプロセス間通信要求を出力した前記自プロセスに対する該送信先サーバ内の送信先プロセスを繰り返し決定し、
    送信先サーバ内の送信先プロセスが決定されるごとに、前記自プロセスの実行により送信用のデータが格納された送信用バッファから該送信先プロセスに対する送信データを取得し、該送信先プロセスの実行時に該送信先サーバにおいて該送信データを読み取り可能とするように、該送信先サーバに対して該送信データを送信する、
    ことを特徴とするプロセス間通信方法。
JP2009265598A 2009-11-20 2009-11-20 コンピュータ、プロセス間通信プログラム、およびプロセス間通信方法 Expired - Fee Related JP5532849B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2009265598A JP5532849B2 (ja) 2009-11-20 2009-11-20 コンピュータ、プロセス間通信プログラム、およびプロセス間通信方法
US12/950,614 US8655940B2 (en) 2009-11-20 2010-11-19 Computer for performing inter-process communication, computer-readable medium storing inter-process communication program, and inter-process communication method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009265598A JP5532849B2 (ja) 2009-11-20 2009-11-20 コンピュータ、プロセス間通信プログラム、およびプロセス間通信方法

Publications (2)

Publication Number Publication Date
JP2011108202A JP2011108202A (ja) 2011-06-02
JP5532849B2 true JP5532849B2 (ja) 2014-06-25

Family

ID=44062883

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009265598A Expired - Fee Related JP5532849B2 (ja) 2009-11-20 2009-11-20 コンピュータ、プロセス間通信プログラム、およびプロセス間通信方法

Country Status (2)

Country Link
US (1) US8655940B2 (ja)
JP (1) JP5532849B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5595327B2 (ja) * 2011-05-06 2014-09-24 株式会社Pfu 情報処理装置、情報処理方法及びプログラム
JP6325433B2 (ja) * 2014-12-25 2018-05-16 日本電信電話株式会社 予備系システム、およびセッション制御方法
JP6623939B2 (ja) * 2016-06-06 2019-12-25 富士通株式会社 情報処理装置、通信手順決定方法、および通信プログラム
CN109002364B (zh) * 2018-06-29 2021-03-30 Oppo(重庆)智能科技有限公司 进程间通信的优化方法、电子装置以及可读存储介质
JP7440739B2 (ja) 2019-11-25 2024-02-29 富士通株式会社 情報処理装置および並列演算プログラム
JP7434039B2 (ja) 2020-04-08 2024-02-20 キヤノン株式会社 情報処理装置、及び情報処理装置におけるコンテナとプロセスとの間の通信を制御する制御方法

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2601591B2 (ja) * 1991-11-26 1997-04-16 富士通株式会社 並列計算機およびその全対全通信方法
US5859981A (en) * 1995-07-12 1999-01-12 Super P.C., L.L.C. Method for deadlock-free message passing in MIMD systems using routers and buffers
US6456838B1 (en) * 1999-02-17 2002-09-24 Verizon Laboratories Inc. Generic approach to generating permutations for all-to-all personalized exchange for self-routing multistage interconnection networks
US7016971B1 (en) * 1999-05-24 2006-03-21 Hewlett-Packard Company Congestion management in a distributed computer system multiplying current variable injection rate with a constant to set new variable injection rate at source node
US6789256B1 (en) * 1999-06-21 2004-09-07 Sun Microsystems, Inc. System and method for allocating and using arrays in a shared-memory digital computer system
US7418470B2 (en) * 2000-06-26 2008-08-26 Massively Parallel Technologies, Inc. Parallel processing systems and method
US8325761B2 (en) * 2000-06-26 2012-12-04 Massivley Parallel Technologies, Inc. System and method for establishing sufficient virtual channel performance in a parallel computing network
JP2004054680A (ja) * 2002-07-22 2004-02-19 Fujitsu Ltd 並列効率計算方法
US20040019890A1 (en) * 2002-07-23 2004-01-29 Sun Microsystems, Inc., A Delaware Corporation Distributing and executing tasks in peer-to-peer distributed computing
US7395536B2 (en) * 2002-11-14 2008-07-01 Sun Microsystems, Inc. System and method for submitting and performing computational tasks in a distributed heterogeneous networked environment
US7533141B2 (en) * 2003-01-24 2009-05-12 Sun Microsystems, Inc. System and method for unique naming of resources in networked environments
US7457303B2 (en) * 2003-06-06 2008-11-25 International Business Machines Corporation One-bounce network
US20050108518A1 (en) * 2003-06-10 2005-05-19 Pandya Ashish A. Runtime adaptable security processor
US7299334B2 (en) * 2003-07-15 2007-11-20 Xiv Ltd. Storage system configurations
US7380039B2 (en) * 2003-12-30 2008-05-27 3Tera, Inc. Apparatus, method and system for aggregrating computing resources
US7433931B2 (en) * 2004-11-17 2008-10-07 Raytheon Company Scheduling in a high-performance computing (HPC) system
US8244882B2 (en) * 2004-11-17 2012-08-14 Raytheon Company On-demand instantiation in a high-performance computing (HPC) system
US7437595B2 (en) * 2005-02-07 2008-10-14 International Business Machines Corporation Row fault detection system
BRPI0520582A2 (pt) * 2005-10-11 2009-06-13 Ericsson Telefon Ab L M método para gerar árvores de distribuição em uma rede
US7958513B2 (en) * 2005-11-17 2011-06-07 International Business Machines Corporation Method, system and program product for communicating among processes in a symmetric multi-processing cluster environment
US8555295B2 (en) * 2006-07-06 2013-10-08 Nec Corporation Cluster system, server cluster, cluster member, method for making cluster member redundant and load distributing method
JP5055942B2 (ja) * 2006-10-16 2012-10-24 富士通株式会社 計算機クラスタ
US8296457B2 (en) * 2007-08-02 2012-10-23 International Business Machines Corporation Providing nearest neighbor point-to-point communications among compute nodes of an operational group in a global combining network of a parallel computer
US8200992B2 (en) * 2007-09-24 2012-06-12 Cognitive Electronics, Inc. Parallel processing computer systems with reduced power consumption and methods for providing the same
US8122228B2 (en) * 2008-03-24 2012-02-21 International Business Machines Corporation Broadcasting collective operation contributions throughout a parallel computer
JP4569846B2 (ja) * 2008-04-02 2010-10-27 日本電気株式会社 I/oノード制御方式及び方法
US10216692B2 (en) * 2009-06-17 2019-02-26 Massively Parallel Technologies, Inc. Multi-core parallel processing system
US9081501B2 (en) * 2010-01-08 2015-07-14 International Business Machines Corporation Multi-petascale highly efficient parallel supercomputer
US20110202682A1 (en) * 2010-02-12 2011-08-18 Microsoft Corporation Network structure for data center unit interconnection
US8489674B2 (en) * 2010-03-11 2013-07-16 Yahoo! Inc. Distributed publish/subscribe system
US8427980B2 (en) * 2010-07-21 2013-04-23 Hewlett-Packard Development Company, L. P. Methods and apparatus to determine and implement multidimensional network topologies

Also Published As

Publication number Publication date
US20110125824A1 (en) 2011-05-26
JP2011108202A (ja) 2011-06-02
US8655940B2 (en) 2014-02-18

Similar Documents

Publication Publication Date Title
JP5280135B2 (ja) データ転送装置
JP5532849B2 (ja) コンピュータ、プロセス間通信プログラム、およびプロセス間通信方法
US9244880B2 (en) Automatic construction of deadlock free interconnects
US9009648B2 (en) Automatic deadlock detection and avoidance in a system interconnect by capturing internal dependencies of IP cores using high level specification
US7552312B2 (en) Identifying messaging completion in a parallel computer by checking for change in message received and transmitted count at each node
US8478926B1 (en) Co-processing acceleration method, apparatus, and system
US7958513B2 (en) Method, system and program product for communicating among processes in a symmetric multi-processing cluster environment
KR101713405B1 (ko) 한정된 시스템 내에서 네트워크 데이터 흐름을 최적화하는 방법
CN108647104B (zh) 请求处理方法、服务器及计算机可读存储介质
US20180285294A1 (en) Quality of service based handling of input/output requests method and apparatus
TW201428464A (zh) 分散式晶片層次的電力系統
US9092275B2 (en) Store operation with conditional push of a tag value to a queue
KR102681251B1 (ko) 입/출력 저장 명령의 처리
WO2024183588A1 (zh) 一种分布式存储卸载方法、装置、电子设备及非易失性可读存储介质
KR20100050819A (ko) 반도체 메모리 시스템의 동작 방법
US20080159315A1 (en) Ring network with variable token activation
JP2014048965A (ja) 情報処理装置,処理方法及びプログラム
US8055817B2 (en) Efficient handling of queued-direct I/O requests and completions
CN115421787A (zh) 指令执行方法、装置、设备、系统、程序产品及介质
US10846125B2 (en) Memory access optimization in a processor complex
US10284501B2 (en) Technologies for multi-core wireless network data transmission
US12166685B2 (en) Method for implementing collective communication, computer device, and communication system
CN118550857B (zh) 一种数据传输方法、装置、电子设备以及存储介质
CN119341916A (zh) 带宽自适应均衡方法、装置、设备、存储介质及程序产品
US20240354106A1 (en) Self-synchronizing remote memory operations in a data center or multiprocessor system

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120815

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130918

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131001

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131127

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140107

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140310

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140401

R150 Certificate of patent or registration of utility model

Ref document number: 5532849

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140414

LAPS Cancellation because of no payment of annual fees