(57)【特許請求の範囲】
【請求項１】
複数のプロセッサと複数のノード間接続制御装置とを備えたノードがノード間クロスバスイッチを介して複数接続され、ノード間のデータ転送を前記ノード間クロスバスイッチを介して行うマルチノードコンピュータシステムに於けるノード間データ転送方法であって、
前記各プロセッサが、自プロセッサと同一ノード内に存在する各ノード間接続制御装置の負荷が均等になるように、前記各ノード間接続制御装置に対してノード間データ転送命令を発行することを特徴とするノード間データ転送方法。
【請求項２】
請求項１記載のノード間データ転送方法に於いて、
前記各プロセッサが、自プロセッサと同一ノード内に存在する各ノード間接続制御装置に於ける未処理のノード間データ転送命令の数に応じて、前記各ノード間接続制御装置に対して発行するノード間データ転送命令の割合を変更することを特徴とするノード間データ転送方法。
【請求項３】
請求項２記載のノード間データ転送方法に於いて、
前記各ノード間接続制御装置が、自装置に対して発行されたノード間データ転送命令の数と、自装置で処理済みのノード間データ転送命令の数とをカウントし、
前記各プロセッサが、自プロセッサと同一ノード内に存在する各ノード間接続制御装置でカウントされた値に基づいて前記各ノード間接続制御装置に於ける未処理のノード間データ転送命令の数を求め、該求めた各ノード間接続制御装置に於ける未処理のノード間データ転送命令の数に応じて、前記各ノード間接続制御装置に対して発行するノード間データ転送命令の割合を変更することを特徴とするノード間データ転送方法。
【請求項４】
請求項１乃至３記載の何れか１つのノード間データ転送方法に於いて、
前記各ノード間接続制御装置が、自装置に対して発行されたノード間データ転送命令に従って他のノード内のノード間接続制御装置との間でデータをやり取りすることを特徴とするノード間データ転送方法。
【請求項５】
複数のプロセッサと複数のノード間接続制御装置とを備えたノードがノード間クロスバスイッチを介して複数接続され、ノード間のデータ転送を前記ノード間クロスバスイッチを介して行うマルチノードコンピュータシステムに於けるノード間データ転送装置であって、
前記各プロセッサが、自プロセッサと同一ノード内に存在する各ノード間接続制御装置の負荷が均等になるように、前記各ノード間接続制御装置に対してノード間データ転送命令を発行する構成を有することを特徴とするノード間データ転送装置。
【請求項６】
請求項５記載のノード間データ転送装置に於いて、
前記各プロセッサが、自プロセッサと同一ノード内に存在する各ノード間接続制御装置に於ける未処理のノード間データ転送命令の数に応じて、前記各ノード間接続制御装置に対して発行するノード間データ転送命令の割合を変更する構成を有することを特徴とするノード間データ転送装置。
【請求項７】
請求項６記載のノード間データ転送装置に於いて、
前記各ノード間接続制御装置が、自装置に対して発行されたノード間データ転送命令の数と、自装置で処理済みのノード間データ転送命令の数とをカウントする構成を有し、
前記各プロセッサが、自プロセッサと同一ノード内に存在する各ノード間接続制御装置でカウントされた値に基づいて前記各ノード間接続制御装置に於ける未処理のノード間データ転送命令の数を求め、該求めた各ノード間接続制御装置に於ける未処理のノード間データ転送命令の数に応じて、前記各ノード間接続制御装置に対して発行するノード間データ転送命令の割合を変更する構成を有することを特徴とするノード間データ転送装置。
【請求項８】
請求項７記載のノード間データ転送方装置に於いて、
前記各ノード間接続制御装置が、
自装置に対して発行されたノード間データ転送命令の数をカウントする命令受理カウンタと、
自装置で処理済みのノード間データ転送命令の数をカウントする命令処理カウンタとを備え、
前記各プロセッサが、
自プロセッサと同一ノード内に存在する各ノード間接続制御装置から命令受理カウンタ，命令処理カウンタのカウント値を取得し、該取得したカウント値に基づいて前記各ノード間接続制御装置に於ける未処理のノード間データ転送命令の数を求め、該求めた前記各ノード間接続制御装置に於ける未処理のノード間データ転送命令の数に応じて、前記各ノード間接続制御装置に対して発行するノード間データ転送命令の割合を変更する処理ＲＣＵ決定回路を備えたことを特徴とするノード間データ転送装置。
【請求項９】
請求項５乃至８記載の何れか１つのノード間転送装置に於いて、
前記各ノード間接続制御装置が、自装置に対して発行されたノード間データ転送命令に従って他のノード内のノード間接続制御装置との間でデータをやり取りする構成を有することを特徴とするノード間データ転送装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、複数のノードがノード間クロスバスイッチを介して接続されたマルチノードコンピュータシステムに関し、特に、ノード間のデータ転送速度を高速化するノード間データ転送技術に関する。
【０００２】
【従来の技術】
複数のノードがノード間クロスバスイッチを介して接続されたマルチノードコンピュータシステムに於いては、ノード内の命令処理性能を向上させるため、各ノードに複数のプロセッサ（ＣＰＵ）を設け、各プロセッサにて並列に命令を実行するということが一般的に行われている。しかし、ノード内の命令処理性能のみを向上させてもノード間データ転送性能が低いとマルチノードコンピュータシステムの性能を十分に発揮することができないため、ノード間データ転送性能をノード内の命令処理性能に見合ったものにすることが必要になる。
【０００３】
このため、従来からノード間データ転送性能を向上させる種々の技術が提案されている。例えば、特願２００１−２３１００３に於いては、各ノードにノード間のデータ転送を制御するノード間接続制御装置（ＲＣＵ）を複数台設け、各ノード間接続制御装置で、複数のプロセッサから出力されたノード間データ転送命令を分散して処理することにより、ノード間データ転送性能を向上させるようにしている。
【０００４】
【発明が解決しようとする課題】
ところで、上述した特願２００１−２３１００３に記載されている技術は、同一ノード内に存在する複数のノード間接続制御装置に対して１個のキューを設け、このキューに上記ノード内に存在する各プロセッサから発行されたノード間データ転送命令を発行順に登録するようにしている。そして、キューに登録されたノード間データ転送命令を、その登録順によって決まるノード間接続制御装置に割り当てるようにしている。例えば、ノード内に２台のノード間接続制御装置ＲＣＵ０，ＲＣＵ１が存在する場合は、キューへの登録順が第１番目，第２番目，第３番目，第４番目，…のノード間データ転送命令を、ノード間接続制御装置ＲＣＵ０，ＲＣＵ１，ＲＣＵ０，ＲＣＵ１，…に割り当てるようにしている。従って、各ノード間データ転送命令のデータ転送量が同一である場合は、各ノード間接続制御装置の負荷を均等にし、高いノード間データ転送性能を得ることができる。
【０００５】
しかし、ノード間データ転送命令の転送データ量に偏りがある場合は、或るノード間接続制御装置のみに負荷が集中し、ノード間データ転送性能が低下してしまうという問題がある。例えば、キューへの登録順が第１番目のノード間データ転送命令が転送データ量が多いものであったとすると、ノード間接続制御装置ＲＣＵ１に於いて登録順が第２番目のノード間データ転送命令に関する処理が完了しても、ノード間接続制御装置ＲＣＵ０では登録順が第１番目のノード間データ転送命令に関する処理を実行している。このため、ノード間接続制御装置ＲＣＵ１がノード間データ転送命令を処理可能な状態であるにも係わらず、登録順が第３番目以降のノード間データ転送命令をノード間接続制御装置に割り当てることができず、ノード間データ転送性能が低下してしまう。
【０００６】
そこで、本発明の目的は、ノード間データ転送命令の転送データ量に偏りがある場合であっても、高いノード間データ転送性能を得られるようにすることにある。
【０００７】
【課題を解決するための手段】
本発明のノード間データ転送方法は、上記目的を達成するため、
複数のプロセッサと複数のノード間接続制御装置とを備えたノードがノード間クロスバスイッチを介して複数接続され、ノード間のデータ転送を前記ノード間クロスバスイッチを介して行うマルチノードコンピュータシステムに於けるノード間データ転送方法であって、
前記各プロセッサが、自プロセッサと同一ノード内に存在する各ノード間接続制御装置の負荷が均等になるように、前記各ノード間接続制御装置に対してノード間データ転送命令を発行する。
【０００８】
この構成によれば、各ノード間接続制御装置の負荷が均等になるので、ノード間データ転送性能を高いものにすることができる。
【０００９】
より具体的には、本発明のノード間データ転送方法は、
前記各プロセッサが、自プロセッサと同一ノード内に存在する各ノード間接続制御装置に於ける未処理のノード間データ転送命令の数に応じて、前記各ノード間接続制御装置に対して発行するノード間データ転送命令の割合を変更することにより、各ノード間接続制御装置の負荷が均等になるようにしている。
【００１０】
また、上記ノード間データ転送方法を実施するのに好適な装置として、本発明のノード間データ転送装置は、
各ノード間接続制御装置が、
自装置に対して発行されたノード間データ転送命令の数をカウントする命令受理カウンタと、
自装置で処理済みのノード間データ転送命令の数をカウントする命令処理カウンタとを備え、
各プロセッサが、
自プロセッサと同一ノード内に存在する各ノード間接続制御装置から命令受理カウンタ，命令処理カウンタのカウント値を取得し、該取得したカウント値に基づいて前記各ノード間接続制御装置に於ける未処理のノード間データ転送命令の数を求め、該求めた前記各ノード間接続制御装置に於ける未処理のノード間データ転送命令の数に応じて、前記各ノード間接続制御装置に対して発行するノード間データ転送命令の割合を変更する処理ＲＣＵ決定回路を備えている。
【００１１】
【発明の実施の形態】
次に本発明の実施の形態について図面を参照して詳細に説明する。
【００１２】
【実施例の構成】
図１を参照すると、本発明の一実施例として、複数のノード１−０〜１−ｎがノード間クロスバスイッチ２を介して接続されたマルチノードコンピュータシステムが示されている。
【００１３】
ノード１−０は、複数台のプロセッサ（ＣＰＵ）１０−０〜１０−ｊと、２台のノード間接続制御装置（ＲＣＵ）２０−０，２０−１と、全てのＣＰＵ，ＲＣＵによって共有される共有メモリ３０とから構成されている。他のノードも、ノード１−０と同様の構成を有している。
【００１４】
ノード１−０内の共有メモリ３０上には、ＲＣＵ２０−０，２０−１それぞれに対する２個のキューＱ００，Ｑ０１と、ＣＰＵ１０−０〜１０−ｊ上で動作するユーザプログラムによって転送パラメータが書き込まれるパラメータ格納領域（図示せず）とが設けられている。
【００１５】
ノード１−０内の各ＣＰＵ１０−０〜１０−ｊは、自ＣＰＵが処理する命令を共有メモリ３０から読み出し、その命令に従った処理を行う一般的な機能に加え、ノード１−０内のＲＣＵ２０−０，２０−１の負荷に応じて、ＲＣＵ２０−０，２０−１に対して発行するノード間データ転送命令の割合を変更する機能を有する。
【００１６】
このような機能を有するＣＰＵ１０−０の構成例を図２のブロック図に示す。同図に示すように、ＣＰＵ１０−０は、命令制御部１１と、演算部１２と、処理ＲＣＵ決定回路１３１を有するメモリアクセス制御部１３とを備えている。メモリアクセス制御部１３と共有メモリ３０とはメモリアクセスパス１４によって接続されている。尚、他のＣＰＵもＣＰＵ１０−０と同様の構成を有する。
【００１７】
命令制御部１１は、自ＣＰＵ１０−０が処理する命令を、メモリアクセス制御部１３を介して共有メモリ３０から読み込み、その内容に従って演算部１２或いはメモリアクセス制御部１３に対して動作指示を出力する機能や、自ＣＰＵ１０−０上で動作するユーザプログラムが発行したノード間データ転送命令（命令コードと、補助情報と、後述する転送パラメータの格納アドレスとを含む）を検出したとき、その命令をメモリアクセス制御部１３に渡す機能等を有する。
【００１８】
演算部１２は、命令制御部１１からの動作指示の内容に従い、図示を省略した内部レジスタの内容を読み出して演算を行い、演算結果を内部レジスタに書き込む機能等を有する。
【００１９】
メモリアクセス制御部１３は、命令制御部１１からの動作指示の内容に従い、演算結果の共有メモリ３０への書き込みや、演算データの共有メモリ３０からの読み出しを行う機能を有する。
【００２０】
また、メモリアクセス制御部１３内の処理ＲＣＵ決定回路１３１は、一定時間毎に、自ＣＰＵ１０−０が存在するノード１−０内のＲＣＵ２０−０，２０−１の負荷に基づいて、ＲＣＵ２０−０，２０−１に対してどのような割合でＲＣＵリクエストを発行するのかを決定する機能を有する。
【００２１】
更に、メモリアクセス制御部１３は、命令制御部１１から渡されたノード間データ転送命令のフォーマットを、図３に示すようなメモリアクセスフォーマットに変換する機能を有する。同図に示すように、フォーマット変換後のノード間データ転送命令（ＲＣＵリクエスト）は、ノード間データ転送命令に通知先，通知元およびリクエスト補助情報を付加したものになっている。ここで、通知先フィールドには、自ノード１−０内に設けられているＲＣＵ２０−０，２０−１の内の、ＲＣＵリクエストの通知先にするＲＣＵのＲＣＵ番号が設定され、通知元フィールドには、ノード間データ転送命令の発行元のＣＰＵのＣＰＵ番号が設定される。尚、通知先フィールドには、処理ＲＣＵ決定回路１３１で決定されている割合でＲＣＵ２０−０，２０−１のＲＣＵ番号を設定する。
【００２２】
上記したようにして作成されたＲＣＵリクエストは、メモリアクセス制御部１３からメモリアクセスパス１４を介して共有メモリ３０に送られ、共有メモリ３０は、ＲＣＵリクエストの通知先フィールドに設定されているＲＣＵ番号のＲＣＵにＲＣＵリクエストを通知する。
【００２３】
ＲＣＵ２０−０は、自ノード１−０内のＣＰＵ１０−１〜１０−ｊから送られてきたＲＣＵリクエストに従って他のノードとの間でデータ転送を行う機能を有する。尚、他のＲＣＵも、ＲＣＵ２０−０と同様の構成，機能を有する。
【００２４】
図４を参照すると、ＲＣＵ２０−０は、命令受理カウンタ２１１及び命令処理カウンタ２１２を含むリクエスト処理部２１と、ポート番号生成回路２２１を含むノード間データ送受信部２２と、メモリアクセス制御部２３とから構成されている。
【００２５】
リクエスト処理部２１は、自ノード１−０内のＣＰＵ１０−０〜１０−ｊから送られてきたＲＣＵリクエストを共有メモリ３０，接続パス２５，メモリアクセス制御部２３を介して受け取ると、命令受理カウンタ２１１のカウント値（初期値は「０」）をインクリメント（本実施例では＋１）すると共に、上記ＲＣＵリクエストを共有メモリ３０上に設けられている自ＲＣＵ２０−０に対応するキューＱ００に格納する機能や、上記キューＱ００の先頭につながれているＲＣＵリクエストの内容に従ってノード間データ送受信部２２或いはメモリアクセス制御部２３に対して動作指示を出力すると共に、命令処理カウンタ２１２のカウント値をインクリメント（本実施例では＋１）する機能を有する。尚、命令受理カウンタ２１１，命令処理カウンタ２１２のカウント値は、同じノード内の各ＣＰＵから参照可能である。
【００２６】
ノード間データ送受信部２２は、信号線２４によりノード間クロスバスイッチ２と接続され、他ノードとのデータ或いは制御信号のやり取りを行う。ポート番号生成回路２２１は、転送先のノード番号，ＲＣＵ番号に基づいて、ノード間クロスバスイッチ２に於けるルーティング情報となるポート番号を生成する機能を有する。
【００２７】
メモリアクセス制御部２３は、接続パス２５を介して共有メモリ３０と接続されており、リクエスト処理部２１の指示に従って共有メモリ３０とのデータ或いは制御情報のやり取りを行う回路である。
【００２８】
更に、ＲＣＵ２０−０は、他のノードから送られてきたノード間の制御情報に従って、自ノード１−０内の共有メモリ３０からデータを読み出し、読み出したデータを要求元ノードへ転送、或いは要求元ノードから送られてきたデータを共有メモリ３０に書き込む機能を有する。ノード間データ転送では、データ転送に先立って、ノード間データ送受信部２２にはデータ転送の制御情報が信号線２４を通って送られる。送られてきた制御情報は、リクエスト処理部２１に送られ、リクエスト処理部２１は、メモリアクセス制御部２３，ノード間データ送受信部２２に対して制御情報に従った指示を出す。メモリアクセス制御部２３は、リクエスト処理部２１からの指示に従い、共有メモリ３０とのデータのやり取りを行う。ノード間データ送受信部２２も、リクエスト処理部２１の指示に従い、他ノードとの制御信号あるいはデータのやり取りを行う。尚、ポート番号生成回路２２１は、他ノードとの制御信号あるいはデータのやり取りを行う際、ノード間クロスバスイッチ２のルーティング情報である転送先ポート番号を生成する。
【００２９】
図５を参照すると、ノード間クロスバスイッチ２の一例が示されている。ノード間クロスバスイッチ２は、入力が８ポート、出力が８ポートの８×８クロスバで構成されている。図５は説明上、各ノードはデータ送信ノード５１〜５４、データ受信ノード５５〜５８と分けて書いてある。また、この例では、各ノード内のＲＣＵ数はＲＣＵ０、ＲＣＵ１の２つとしている。ノード間クロスバスイッチ２は、８つの入力ポートからそれぞれ８つの出力ポートにデータ転送を行うことができる。これは入力ポートに接続されたＲＣＵから送られる転送先ポート番号により行われる。例えば転送先ポート番号が０ならば出力０、つまりノード０のＲＣＵ０に転送し、転送先ポート番号が３ならば出力３、つまりノード１のＲＣＵ１に転送するという具合に、転送先ポート番号が示す値が出力ポートになり、そこに接続されているＲＣＵに転送することになる。このようにノード間クロスバスイッチ２は、転送先ポート番号の指定により全ての入力ポートからの制御情報、データを全ての出力ポートに送ることが可能な構成である。
【００３０】
【実施例の動作の説明】
次に本実施例の動作について説明する。
【００３１】
ノード間データ転送命令は、主に、リモートノードの共有メモリからデータを読み出し、読み出したデータをリモートノードからローカルノードへ転送し、ローカルノードの共有メモリにデータを書き込むリード転送命令と、ローカルノードの共有メモリからデータを読み出し、読み出したデータをローカルノードからリモートノードに転送し、リモートノードの共有メモリに書き込むライト転送命令があるが、本実施例ではライト転送について詳細に動作を説明する。
【００３２】
ＣＰＵ１０−０上で動作しているユーザプログラムは、ライト転送命令を発行する際、それに先立って、自ノード１−０内の共有メモリ３０上に設けられているパラメータ格納領域中の空き領域に転送パラメータを格納し、その後、上記転送パラメータの格納位置（パラメータ格納アドレス）を含むライト転送命令を発行する（図６のＳ６０１，Ｓ６０２）。
【００３３】
図８にパラメータ格納領域に格納される転送パラメータの一例を示す。この例は、多次元配列データの一部分（サブアレイ）を効率良く一括転送する２ディスタンス転送を行う際に使用する転送パラメータを示したものである。同図に示すように、サイズは、１２８Ｂ（バイト）であり、転送した結果正常終了か例外が発生したか等のステータスをメモリに書き込むアドレスを示す終了ステータス書き込みアドレスや、８Ｂデータを１つの要素とした時の全転送量を要素数換算で示す総転送要素数や、命令を発行するプロセッサがあるノード（ローカルノード）の転送開始アドレスや、ノード間転送における転送相手となるノード（リモートノード）のノード番号や、ノード間転送における転送相手となるＲＣＵのＲＣＵ番号や、リモートノード内の共有メモリ転送開始アドレスや、ローカルノード、リモートノードそれぞれの第１、第２の要素間距離（ディスタンス）や、第１、第２のディスタンスにおける転送要素数、などを含んでいる。
【００３４】
命令制御部１１は、ＣＰＵ１０−０上で動作しているユーザプログラムが発行したライト転送命令を検出すると、上記ライト転送命令を図３に示すメモリアクセスフォーマットに変換する（Ｓ６０３）。その際、通知先フィールドには、その時点に於いて処理ＲＣＵ決定回路１３１で決定されている割合（ＲＣＵリクエストをＲＣＵ２０−０，２０−１に発行する割合）に従ってＲＣＵ２０−０或いはＲＣＵ２０−１のＲＣＵ番号を設定する。例えば、ＲＣＵ２０−０：ＲＣＵ２０−１＝１：１であれば、或るＲＣＵリクエスト中の通知先フィールドには、ＲＣＵ２０−０のＲＣＵ番号を設定し、次のＲＣＵリクエスト中の通知先フィールドには、ＲＣＵ２０−１のＲＣＵ番号を設定するというように、交互にＲＣＵ２０−０，２０−１のＲＣＵ番号を設定する。また、ＲＣＵ２０−０：ＲＣＵ２０−１＝１：０であれば、全てのＲＣＵリクエスト中の通知先フィールドにＲＣＵ２０−０のＲＣＵ番号を設定する。
【００３５】
ここで、ＣＰＵ１０−０内の処理ＲＣＵ決定回路１３１の動作について説明する。処理ＲＣＵ決定回路１３１は、予め決められている一定時間毎に、ＲＣＵ２０−０，２０−１に対してカウント値の参照命令を発行する（図７，Ｓ７１）。これに応答して、ＲＣＵ２０−０，２０−１内のリクエスト処理部２１はそれぞれ、自処理部内の命令受理カウンタ２１１，命令処理カウンタ２１２のカウント値を、共有メモリ３０を介して参照要求元の処理ＲＣＵ決定回路１３１に返却する（Ｓ７２）。
【００３６】
これにより、処理ＲＣＵ決定回路１３１は、次式（１），（２）に示す演算を行い、ＲＣＵ２０−０，２０−１に於ける未処理のノード間データ転送命令の命令数Ｍ０，Ｍを求める（Ｓ７３）。
【００３７】
0003683211.tif 000002
【００３８】
その後、処理ＲＣＵ決定回路１３１は、ＲＣＵ２０−０，２０−１の未処理の命令数Ｍ０，Ｍ１に基づいて、ＲＣＵ２０−０，２０−１の負荷を均等にするための、ＲＣＵ２０−０，２０−１に対するＲＣＵリクエストの発行割合を決定する（Ｓ７４）。
【００３９】
この決定方法としては、種々の方法を採用することができ、例えば、Ｍ０＞Ｍ１の場合はＲＣＵ２０−０：ＲＣＵ２０−１＝０：１とし、Ｍ０＝Ｍ１の場合はＲＣＵ２０−０：ＲＣＵ２０−１＝１：１とし、Ｍ０＜Ｍ１の場合はＲＣＵ２０−０：ＲＣＵ２０−１＝１：０とする方法を採用することができる。また、これ以外にも、Ｍ０＞Ｍ１の場合はＲＣＵ２０−０：ＲＣＵ２０−１＝１：Ｋ（Ｍ０−Ｍ１）とし、Ｍ０＝Ｍ１の場合はＲＣＵ２０−０：ＲＣＵ２０−１＝１：１とし、Ｍ０＜Ｍ１の場合はＲＣＵ２０−０：ＲＣＵ２０−１＝Ｋ（Ｍ１−Ｍ０）：１とする方法を採用することもできる。尚、Ｋは、１以上の定数である。
【００４０】
尚、ノード内のＲＣＵ数が３台以上の場合は、例えば、次のような方法を採用することができる。最も未処理の命令数が少ないＲＣＵに対してのみＲＣＵリクエストを発行し、他のＲＣＵに対してはＲＣＵリクエストを発行しないようにする。また、未処理の命令数が最も少ないＲＣＵが複数台存在する場合には、未処理の命令数が最も少ない複数台のＲＣＵにＲＣＵリクエストを均等に発行し、それ以外のＲＣＵにはＲＣＵを発行しないようにする。
【００４１】
このようにして決定された発行割合に応じて、各ＲＣＵ２０−０，２０−１に対してＲＣＵリクエストを発行することにより、各ＲＣＵ２０−０，２０−１の負荷を均等にすることができる。即ち、未処理のノード間データ転送命令の命令数が少ないＲＣＵほど負荷が小さいと言え、処理ＲＣＵ決定回路１３１では、未処理の命令数が少ないＲＣＵに対するＲＣＵリクエストの発行数が多くなるように、ＲＣＵ２０−０，２０−１に対するＲＣＵリクエストの発行割合を決定しているので、ＲＣＵ２０−０，２０−１の負荷バランスをとることができる。
【００４２】
今、例えば、メモリアクセス制御部１３が、処理ＲＣＵ決定回路１３１で決定されたＲＣＵ２０−０，２０−１に対する発行割合に基づいて、ＣＰＵ１０−０上で動作しているユーザプログラムが発行したライト転送命令の発行先をＲＣＵ２０−０に決定したとすると、メモリアクセス制御部１３は、上記ライト転送命令を図３に示すようなメモリアクセスフォーマットに変換する。その際、通知先フィールドには、ＲＣＵ２０−０のＲＣＵ番号を設定する。その後、メモリアクセスフォーマットに変換したＲＣＵリクエストを、メモリアクセスパス１４を介して共有メモリ３０に送る。
【００４３】
共有メモリ３０では、ＲＣＵリクエスト中の通知先フィールドの内容に基づいて、ＲＣＵリクエストをＲＣＵ２０−０へルーティングする（図６，Ｓ６０４）。
【００４４】
ＲＣＵ２０−０内のメモリアクセス制御部２３は、上記ＲＣＵリクエストを受け付けると、受け付けたＲＣＵリクエストをリクエスト処理部２１に渡す。
【００４５】
これにより、リクエスト処理部２１は、ＲＣＵリクエスト中の命令コードフィールドの内容に基づいてライト転送であることを認識し、自ＲＣＵ２０−０に対応して設けられているキューＱ００に上記ＲＣＵリクエストを格納すると共に、命令受理カウンタ２１１のカウント値を＋１する（Ｓ６０５，Ｓ６０６）。やがて、キューＱ００に登録されている先行するＲＣＵリクエストが全て処理されて、上記ＲＣＵリクエストが処理される順番になると、メモリアクセス制御部２３に対して上記ＲＣＵリクエストのパラメータ格納アドレスフィールドに設定されているパラメータ格納アドレスを渡し転送パラメータを読み出すように指示すると共に、命令処理カウンタ２１２を＋１する（Ｓ６０７，Ｓ６０８）。
【００４６】
メモリアクセス制御部２３ではリクエスト処理部２１から渡されたパラメータ格納アドレスに従って共有メモリ３０から１２８Ｂ分の転送パラメータ（図８参照）を読み出し、リクエスト処理部２１に転送する。
【００４７】
リクエスト処理部２１は、転送されてきた転送パラメータの内容から、ローカルノード（ノード１−０）の共有メモリ転送開始アドレス、総転送要素数、ローカルノードの第１，第２ディスタンス、及び第１，第２ディスタンスの要素数をそれぞれ検出し、これらに基づいて、メモリアクセス制御部２３に対して、ローカルノードからリモートノードにライト転送すべきデータを共有メモリ３０から読み込むことを指示する（Ｓ６０９）。
【００４８】
メモリアクセス制御部２３ではこの指示に従いノード間転送すべき転送データを共有メモリ３０から読み出し、ノード間データ送受信部２２に送る。
【００４９】
ノード間データ送受信部２２では、メモリアクセス制御部２３から送られてきた転送データを一旦バッファ（図示せず）に蓄え、バッファに所定サイズの転送データが溜まったならば、そのことをリクエスト処理部２１に通知する。
【００５０】
これにより、リクエスト処理部２１は、転送パラメータに設定されたリモートノード番号（ノード１−ｎのノード番号とする）、リモートノード内に於けるＲＣＵ番号、リモートノード内共有メモリ転送開始アドレス、及びリモートノードの第１，第２ディスタンスをノード間データ送受信部２２に送り、データ転送を開始するように指示する。
【００５１】
これを受けたノード間データ送受信部２２は、データを送る前にリモートノード番号、リモートノード内共有メモリ転送開始アドレス、及びリモートノードの第１，第２ディスタンスを含む制御情報を、ノード間クロスバスイッチ２を介してリモートノード（ノード１−ｎ）に転送する。このとき、ノード間データ送受信部２２は、ポート番号生成回路２２１を使用して、制御情報や転送データをノード１−ｎに転送するために必要になる、ノード間クロスバスイッチ２のルーティング情報（ポート番号）を生成し、ノード間クロスバスイッチ２に出力する（Ｓ６１０）。
【００５２】
図９はポート番号生成回路２２１に於けるポート番号生成方法を示している。図５も同時に参照すると、ノード内のＲＣＵ数が１台の場合には、ノード０，１，２…が、それぞれポート０，１，２，…に対応するというように、ポート番号はノード番号と一致していた。しかし、本実施例のように、ノード内のＲＣＵ数が２台になると、１つのノードが２つのポートを使用することになるため、ノード番号を用いてポート番号を指定することはできない。そこで、本実施例では、図９に示すように、ポート番号生成回路２２１に於いて、二進数で表されているノード番号とＲＣＵ番号とを結合（ノード番号の後ろにＲＣＵ番号を結合）することにより、転送先のポート番号を生成するようにしている。例えば、ノード数が４台で、各ノード内に存在するＲＣＵ数が２台の場合は、ノード番号，ＲＣＵ番号をそれぞれ２桁，１桁の二進数で表すようにしておけば、両者を結合することにより、図９に示すように、各ＲＣＵに対してポート番号０（０００）2 〜７（１１１）2 を割り当てることができる。また、ノード数が２台で、各ノード内のＲＣＵ数が４台の場合は、ノード番号，ＲＣＵ番号をそれぞれ１桁，２桁の二進数で表すようにしておけば、両者を結合することにより、図９に示すように、各ＲＣＵに対してポート０（０００）2 〜７（１１１）2 を割り当てることができる。
【００５３】
制御情報及びポート番号をノード間クロスバスイッチ２に出力した後、ノード間データ送受信部２２はバッファに溜まっているデータを所定サイズずつ順次ノード間クロスバスイッチ２に出力する。ノード間クロスバスイッチ２は、ポート番号によりクロスバのスイッチを切り替え、所望のポートへ制御情報およびデータを転送する（Ｓ６１１）。
【００５４】
リモートノード１−ｎでは、送られた制御情報および転送データを、ノード番号に対応するＲＣＵ（ＲＣＵ２ｎ−０とする）内のノード間データ送受信部２２が受け取り、制御情報はリクエスト処理部２１に送られ、転送データはノード間データ送受信部２２内のバッファに一旦格納される。
【００５５】
制御信号を受け取ったリクエスト処理部２１では、その内容に基づいて、転送データを共有メモリ３ｎ内のどこに書き込むのかを示す共有メモリアドレスを生成し、更に、メモリアクセス制御部２３に対して上記共有メモリアドレスを含む、バッファ内転送データの読み出し指示を出力する。これに応答して、メモリアクセス制御部２３は、ノード間データ送受信部２２内のバッファから転送データを読み出し、それを読み出し指示によって指示されている共有メモリ３ｎ内の共有メモリアドレスに書き込む（Ｓ６１２）。
【００５６】
以上のようにノード間転送のライト転送は行われる。また、ノード間転送のリード転送においては、ローカルノードからリモートノードへデータ読み出し指示を伝え、リモートノードにおいて共有メモリからのデータの読み出しが行われ、読み出されたデータはローカルノードにノード間クロスバスイッチにて送られ、ローカルノードは送られたデータをローカルノード内の共有メモリに書き込むことにより実現する。
【００５７】
上述したように本実施例は、各ＲＣＵ毎にキューを持ち、各ＲＣＵは、それぞれ異なるノード間データ転送命令を並行して行うことになるため、転送性能としては（１台のＲＣＵの持つ転送性能）×（ＲＣＵ数）の性能が確保できることになる。また、ＣＰＵから出力されたフォーマット変換後のノード間データ転送命令（ＲＣＵリクエスト）は、各ＲＣＵ毎に設けられているキューの内の何れかのキューに蓄積され、蓄積順に順次処理されるため、ＣＰＵは、ノード間データ転送の終了を待たずに次のノード間データ転送命令を発行することができ、ノード間データ転送が途切れることはない。また、各ＲＣＵの負荷状況を見ながら、ノード間転送命令の発行先を決定することが可能なので、均一な負荷分散を行うことができる。
【００５８】
尚、上述した実施例においては、処理ＲＣＵ決定回路１３１は、一定時間毎に、ノード内に存在する各ＲＣＵに対してどのような割合でＲＣＵリクエストを発行するのかを決定するようにしたが、ノード間データ転送命令が発行される毎に、発行割合を決定するようにしても良い。
【００５９】
次に本発明の他の実施例について説明する。本実施例は、図６の流れ図に示したステップＳ６０１，Ｓ６０３の処理が前述した実施例と異なるだけであるので、以下ではステップＳ６０１，Ｓ６０３の代わりに行う処理について詳細に説明する。
【００６０】
本実施例では、ステップＳ６０１の代わりに次のような処理を行う。ＣＰＵ１０−０上で動作しているユーザプログラムは、ライト転送命令を発行する際、メモリアクセス制御部１３に対して、ライト転送命令（ＲＣＵリクエスト）の発行先のＲＣＵを問い合わせる。これにより、メモリアクセス制御部１３は、処理ＲＣＵ決定回路１３１がその時点で決定しているＲＣＵ２０−０，２０−１に対する命令の発行割合に基づいて、ＲＣＵ２０−０，２０−１の内のどちらにＲＣＵリクエストを発行するのか決定し、そのＲＣＵ番号をユーザプログラムに返却する。ユーザプログラムは、ＲＣＵ番号が返却されると、それに基づいてパラメータ格納領域に転送パラメータを格納する。本実施例の場合、パラメータ格納領域は、図１０に示すように、ＲＣＵ２０−０用領域と、ＲＣＵ２０−１用領域とに分割されている。ＲＣＵ２０−０用領域は、０Ｂ，２５６Ｂ，５１２Ｂ，…を先頭アドレスとする１２８Ｂの領域であり、ＲＣＵ２０−１用領域は、１２８Ｂ，３８４Ｂ，６４０Ｂ，…を先頭アドレスとする１２８Ｂの領域である。ユーザプログラムは、返却されたＲＣＵ番号がＲＣＵ２０−０を示すものである場合は、ＲＣＵ２０−０用領域の内の前回転送パラメータを格納した領域の次のＲＣＵ２０−０用領域に転送パラメータを格納し、ＲＣＵ番号がＲＣＵ２０−１を示すものである場合は、ＲＣＵ２０−１用領域の内の前回転送パラメータを格納した領域の次のＲＣＵ２０−１用領域に転送パラメータを格納する。以上が、ステップＳ６０１の代わりに行う処理である。
【００６１】
その後、前述したステップＳ６０２と同様の動作が行われ、ユーザプログラムが、上記転送パラメータの格納位置（パラメータ格納アドレス）を含むライト転送命令を発行する。
【００６２】
その後、前述したステップＳ６０３の代わりに、次のような処理が行われる。命令制御部１１は、ＣＰＵ１０−０上で動作しているユーザプログラムが発行したライト転送命令を検出すると、上記ライト転送命令を図３に示すメモリアクセスフォーマット（ＲＣＵリクエスト）に変換する。その際、上記ライト転送命令に含まれているパラメータ格納アドレスに基づいて、上記ＲＣＵリクエストの発行先のＲＣＵを決定し（パラメータ格納アドレスの下位８ｂｉｔ目が“０”であれば、発行先をＲＣＵ２０−０と決定し、下位８ｂｉｔ目が“１”である場合は発行先をＲＣＵ２０−１と決定する）、発行先にしたＲＣＵのＲＣＵ番号を、ＲＣＵリクエストの通知先フィールドに設定する。その後、ＲＣＵリクエストを共有メモリ３０に出力する。以上が、ステップ６０３で行う処理である。
【００６３】
その後、前述したステップＳ６０４〜Ｓ６１２と同様の処理が行われる。
【００６４】
尚、上述した実施例は、ノード内のＲＣＵ数を２台としたが、ノード内のＲＣＵ数が４台（ＲＣＵ０〜ＲＣＵ３）の場合は、パラメータ格納領域を、図１１に示すように、ＲＣＵ０用領域〜ＲＣＵ３用領域の４つの領域に分割し、発行先のＲＣＵの決定は、ライト転送命令の下位８，９ｂｉｔに基づいて行う。具体的には、下位８，９ｂｉｔが、“００”，“０１”，“１０”，“１１”である場合は、それぞれ発行先をＲＣＵ０，ＲＣＵ１，ＲＣＵ２，ＲＣＵ３と決定する。
【００６５】
【発明の効果】
以上説明したように本発明は、各ノード内に複数のノード間接続制御装置を設け、各ノード間接続制御装置の負荷が均等になるように、各ノード間接続制御装置に対してノード間転送命令を発行するようにしているので、各ノード間接続制御装置の負荷が均等になり、その結果、各ノード間転送命令のデータ転送量に偏りがある場合においてもノード間データ転送性能を高いものにすることができる。
【図面の簡単な説明】
【図１】本発明の一実施例のブロック図である。
【図２】プロセッサ（ＣＰＵ）１０−０の構成例を示すブロック図である。
【図３】メモリアクセスフォーマットに変換したノード間転送命令の一例を示した図である。
【図４】ノード間接続制御装置（ＲＣＵ）２０−０の構成例を示す図である。
【図５】ノード間クロスバスイッチ２を説明するための図である。
【図６】ライト転送時の動作を説明するための流れ図である。
【図７】処理ＲＣＵ決定回路１３１の動作を説明するための流れ図である。
【図８】転送パラメータの一例を示す図である。
【図９】ポート番号生成回路２２１の動作を説明するための図である。
【図１０】本発明の他の実施例を説明するための図である。
【図１１】本発明の他の実施例を説明するための図である。
【符号の説明】
１−０〜１−ｎ…ノード
１０−０〜１０−ｊ，１ｎ−０〜１ｎ−ｊ…プロセッサ（ＣＰＵ）
１１…命令制御部
１２…演算部
１３…メモリアクセス制御部
１３１…処理ＲＣＵ決定回路
１４…メモリアクセスパス
Ｑ００，Ｑ０１，Ｑｎ０，Ｑｎ１…キュー
２０−０，２０−１，２ｎ−０，２ｎ−１…ノード間接続制御装置（ＲＣＵ）
２１…リクエスト処理部
２１１…命令受理カウンタ
２１２…命令処理カウンタ
２２…ノード間データ送受信部
２２１…ポート番号生成回路
２３…メモリアクセス制御部
３０，３ｎ…共有メモリ
２…ノード間クロスバスイッチ
【図１】
0003683211.tif 000003
【図２】
0003683211.tif 000004
【図３】
0003683211.tif 000005
【図４】
0003683211.tif 000006
【図５】
0003683211.tif 000007
【図６】
0003683211.tif 000008
【図７】
0003683211.tif 000009
【図８】
0003683211.tif 000010
【図９】
0003683211.tif 000011
【図１０】
0003683211.tif 000012
【図１１】
0003683211.tif 000013