(57)【特許請求の範囲】
【請求項１】
ＬＵ分解を並列で実行する複数の処理部
を有し、
前記複数の処理部の各々が、
第１サイズの行列での行列積が完了してから前記複数の処理部のうち他の処理部との通信が完了するまでの時間である第１の時間を計測する計測部と、
前記計測部により計測された前記第１の時間が所定時間以上である場合、行列積に使用する行列のサイズを、前記第１サイズより小さい第２サイズに変更する変更部と、
を有する並列計算機。
【請求項２】
前記複数の処理部の各々が、
行列積を実行する計算部と、
前記他の処理部との通信を、前記計算部による行列積と並列で実行する通信部と、
前記計算部による行列積が終了するたびに、前記通信部による通信の進行を継続させるための処理を実行する通信制御部と、
をさらに有する請求項１記載の並列計算機。
【請求項３】
前記他の処理部との通信は、
次の行列積に使用する行列及び当該行列のパネル分解時に取得したピボットデータを前記他の処理部から受信するための通信、および、前記次の行列積に使用する行列及び当該行列のパネル分解時に取得したピボットデータを前記他の処理部に送信するための通信の少なくともいずれかを含む、
請求項１又は２記載の並列計算機。
【請求項４】
前記変更部は、
行方向のサイズ及び列方向のサイズの少なくともいずれかを小さくすることにより、行列のサイズを前記第１サイズから前記第２サイズに変更する、
請求項１乃至３のいずれか１つ記載の並列計算機。
【請求項５】
前記計測部は、
前記第１の時間を計測した後、前記第１サイズの行列で次の行列積演算を完了してから前記他の処理部との通信が完了までの時間である第２の時間をさらに計測し、
前記変更部は、
前記計測部により計測された前記第１の時間が前記所定時間以上であり且つ前記計測部により計測された前記第２の時間が前記所定時間以上である場合、行列積に使用する行列のサイズを前記第２サイズに変更する、
請求項１記載の並列計算機。
【請求項６】
ＬＵ分解を並列で実行する複数の処理部を有する並列計算機において実行される、並列ＬＵ分解方法であって、
前記複数の処理部の各々が、
第１サイズの行列での行列積が完了してから前記複数の処理部のうち他の処理部との通信が完了するまでの時間である第１の時間を計測し
計測された前記第１の時間が所定時間以上である場合、行列積に使用する行列のサイズを、前記第１サイズより小さい第２サイズに変更する、
処理を実行する並列ＬＵ分解方法。
【請求項７】
プロセッサに、
第１サイズの行列での行列積が完了してから他のプロセッサとの通信が完了するまでの時間である第１の時間を計測し、
計測された前記第１の時間が所定時間以上である場合、行列積に使用する行列のサイズを、前記第１サイズより小さい第２サイズに変更する、
処理を実行させる並列ＬＵ分解プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列計算技術に関する。
【背景技術】
【０００２】
物理学に現れる問題を定式化して数値計算によって解く場合、連立一次方程式を解くことに帰着することが多い。このような連立一次方程式をコンピュータシステムが解く際の計算性能を測定するためのベンチマークとして、Ｌｉｎｐａｃｋベンチマークが知られている。ＬｉｎｐａｃｋベンチマークはＴＯＰ５００のランク付けに使用されているため、連立一次方程式をコンピュータシステムによって高速に解く技術が注目されている。なお、Ｌｉｎｐａｃｋ自体は数値計算を行うためのソフトウエアライブラリであり、特に並列計算機システムにおける複数のノード（例えばプロセス或いはプロセッサコア等）が密行列の連立一次方程式を並列で解くためのライブラリがＨＰＬ（High-Performance Linpack）である。
【０００３】
通常、連立一次方程式Ａｘ＝ｂの計算においては、最初に行列Ａが上三角行列及び下三角行列に分解され（この分解はＬＵ分解と呼ばれる）、その後にｘが求められる。従って、ＬＵ分解の実行時間を短縮することができれば、連立一次方程式を解くのに要する時間を短縮することができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平７−２７１７６０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明の目的は、１つの側面では、並列計算機によるＬＵ分解の実行時間を短縮するための技術を提供することである。
【課題を解決するための手段】
【０００６】
本発明に係る並列計算機は、ＬＵ分解を並列で実行する複数の処理部を有する。そして、複数の処理部の各々が、第１サイズの行列での行列積が完了してから複数の処理部のうち他の処理部との通信が完了するまでの時間である第１の時間を計測する計測部と、計測部により計測された第１の時間が所定時間以上である場合、行列積に使用する行列のサイズを、第１サイズより小さい第２サイズに変更する変更部とを有する。
【発明の効果】
【０００７】
１つの側面では、並列計算機によるＬＵ分解の実行時間を短縮できるようになる。
【図面の簡単な説明】
【０００８】
【図１】図１は、並列計算機の構成を示す図である。
【図２】図２は、ノードのハードウエア構成図である。
【図３】図３は、ノードの機能ブロック図である。
【図４】図４は、本実施の形態において使用される記号について説明するための図である。
【図５】図５は、本実施の形態において使用される記号について説明するための図である。
【図６】図６は、本実施の形態において使用される記号について説明するための図である。
【図７】図７は、ＬＵ分解の進行について説明するための図である。
【図８】図８は、プロセスグリッドを示す図である。
【図９】図９は、分割された行列Ａを示す図である。
【図１０】図１０は、各プロセスに割り当てられたブロックを示す図である。
【図１１】図１１は、並列計算機において実行される処理の処理フローを示す図である。
【図１２】図１２は、処理の内容を説明するための図である。
【図１３】図１３は、処理の内容を説明するための図である。
【図１４】図１４は、並列計算機において実行される処理の処理フローを示す図である。
【図１５】図１５は、Ｕja及びＣjaについての更新処理の処理フローを示す図である。
【図１６】図１６は、プロセスＰ２及びＰ３が実行する処理の内容を説明するための図である。
【図１７】図１７は、プロセスＰ２及びＰ３が実行する処理の内容を説明するための図である。
【図１８】図１８は、処理の内容を説明するための図である。
【図１９】図１９は、処理の内容を説明するための図である。
【図２０】図２０は、処理の内容を説明するための図である。
【図２１】図２１は、処理の内容を説明するための図である。
【図２２】図２２は、処理の内容を説明するための図である。
【図２３】図２３は、通信と行列積の計算との並列処理について説明するための図である。
【図２４】図２４は、通信制御処理の処理フローを示す図である。
【図２５】図２５は、通信制御処理の処理フローを示す図である。
【図２６】図２６は、通信制御処理の処理フローを示す図である。
【図２７】図２７は、行列積の一例を示す図である。
【図２８Ａ】図２８Ａは、単位ブロック毎の行列積の一例を示す図である。
【図２８Ｂ】図２８Ｂは、単位ブロック毎の行列積の一例を示す図である。
【図２９Ａ】図２９Ａは、単位ブロック毎の行列積の一例を示す図である。
【図２９Ｂ】図２９Ｂは、単位ブロック毎の行列積の一例を示す図である。
【図３０】図３０は、待ち時間の短縮について説明するための図である。
【図３１】図３１は、待ち時間の短縮について説明するための図である。
【図３２】図３２は、待ち時間の短縮について説明するための図である。
【発明を実施するための形態】
【０００９】
図１に、本実施の形態における並列計算機１の構成を示す。並列計算機１は、物理的な処理ユニットであるノードｎ０乃至ｎ７を有する。ノードｎ０乃至ｎ７の各々はインターコネクト１００に接続されており、計算に使用するデータ等をインターコネクト１００を介して他のノードと交換する。ノードｎ０乃至ｎ７は、例えば連立一次方程式を解く等のジョブを、協調して動作することで処理する。なお、図１においてはノードの数は８であるが、数に限定は無い。
【００１０】
図２に、ノードｎ０のハードウエア構成図を示す。ノードｎ０は、ＣＰＵ（Central Processing Unit）１０１と、メモリ１０２と、通信部１０３と、バス１０４とを有する。ＣＰＵ１０１と、メモリ１０２と、通信部１０３とは、バス１０４によって接続される。本実施の形態における処理を実行するためのプログラムは、メモリ１０２にロードされＣＰＵ１０１によって実行されることで、図３に示すような各種機能を実現する。通信部１０３は、ＣＰＵ１０１とは独立して動作し、他のノードにデータを送信及び他のノードからデータを受信する処理を実行する。なお、ノードｎ０以外のノードのハードウエア構成図はノードｎ０のハードウエア構成図と同じである。
【００１１】
図３に、ノードｎ０の機能ブロック図を示す。ノードｎ０は、計測部１５１と、変更部１５２と、計算部１５３と、通信制御部１５４とを有する。なお、ノードｎ０以外のノードの機能ブロック図はノードｎ０の機能ブロック図と同じである。
【００１２】
計測部１５１は、行列積が完了した時点から通信が終了するまでの待ち時間を計測する。変更部１５２は、行列積の計算に使用する行列のサイズを変更する。計算部１５３は、行列の処理（例えば行列積の計算等）を実行する。通信制御部１５４は、通信部１０３による通信の実行を制御（具体的には、送信の開始、受信の開始、送信完了の確認及び受信完了の確認など）する。
【００１３】
図４乃至図６を用いて、本実施の形態において使用される記号について説明する。図４には、ＬＵ分解の対象である行列Ａが示されている。行列Ａを幅がＮＢである正方形のブロックに分割した場合において、ｊ（ｊは０以上の整数）番目の対角部分のブロックをＢjと呼ぶ。Ｂjの下の列ブロック（列パネルとも呼ばれる）をＬjと呼び、Ｂjの右の行ブロック（行パネルとも呼ばれる）をＵjと呼ぶ。ＬjとＵjとで囲まれた右下部分をＣjと呼ぶ。
【００１４】
また、図５に示すように、Ｕjの左端部分のブロックをＵjaと呼び、ＵjのうちＵja以外の部分をＵjbと呼ぶ。Ｃjの左端の列ブロックをＣjaと呼び、ＣjのうちＣja以外の部分をＣjbと呼ぶ。
【００１５】
また、図６に示すように、Ｂjの下三角行列をＢjLと呼ぶ。
【００１６】
ＬＵ分解を実行する場合、行列Ａは幅ＮＢのブロックに分割され、複数のノードにブロックが分配される。各ノードは割り当てられたブロックに対して行列積の計算等を実行するが、全体としては、図７に示すように、矢印の方向にＬＵ分解が進行する。そのため、ＬＵ分解においては、ノード間で行列の要素を交換するための通信が実行される。
【００１７】
以下では、説明を簡単にするため、図１に示した８台のノードで並列計算を実行することを考える。そして、ノードｎ０において動作するプロセスをＰ０とし、ノードｎ１において動作するプロセスをＰ１とし、ノードｎ２において動作するプロセスをＰ２とし、ノードｎ３において動作するプロセスをＰ３とし、ノードｎ４において動作するプロセスをＰ４とし、ノードｎ５において動作するプロセスをＰ５とし、ノードｎ６において動作するプロセスをＰ６とし、ノードｎ７において動作するプロセスをＰ７とする。
【００１８】
図８に、プロセスグリッドを示す。図８に示すように、プロセスＰ０乃至Ｐ７は論理的に２次元のプロセスグリッドに割り当てられる。図２の例では、８個のプロセスが２＊４の２次元に割り当てられている。行列Ａのブロックは、各プロセスに対してサイクリックに割り当てられる。
【００１９】
行列Ａは図９に示すように分割され、各ブロックはプロセスＰ０乃至Ｐ７に割り当てられる。具体的には、ブロック００、ブロック２０、ブロック４０、ブロック６０、ブロック０４、ブロック２４、ブロック４４及びブロック６４はプロセスＰ０に割り当てられる。ブロック１０、ブロック３０、ブロック５０、ブロック７０、ブロック１４、ブロック３４、ブロック５４及びブロック７４はプロセスＰ１に割り当てられる。ブロック０１、ブロック２１、ブロック４１、ブロック６１、ブロック０５、ブロック２５、ブロック４５及びブロック６５はプロセスＰ２に割り当てられる。ブロック１１、ブロック３１、ブロック５１、ブロック７１、ブロック１５、ブロック３５、ブロック５５及びブロック７５はプロセスＰ３に割り当てられる。ブロック０２、ブロック２２、ブロック４２、ブロック６２、ブロック０６、ブロック２６、ブロック４６及びブロック６６はプロセスＰ４に割り当てられる。ブロック１２、ブロック３２、ブロック５２、ブロック７２、ブロック１６、ブロック３６、ブロック５６及びブロック７６はプロセスＰ５に割り当てられる。ブロック０３、ブロック２３、ブロック４３、ブロック６３、ブロック０７、ブロック２７、ブロック４７及びブロック６７はプロセスＰ６に割り当てられる。ブロック１３、ブロック３３、ブロック５３、ブロック７３、ブロック１７、ブロック３７、ブロック５７及びブロック７７はプロセスＰ７に割り当てられる。
【００２０】
図１０に、各プロセスに割り当てられたブロックを示す。各プロセスは、割り当てられたブロック及び他のプロセスから受信したブロックを用いて行列の処理（例えば行列積）を実行する。このような割り当ては、並列計算の開始前に行われる。
【００２１】
次に、図１１乃至図３２を用いて、並列計算機１の動作を説明する。
【００２２】
まず、並列計算機１における各ノードのプロセスは、処理対象のブロックを特定するための変数ｊをｊ＝０と設定する（図１１：ステップＳ１）。
【００２３】
プロセスＰ０及びＰ１は、Ｂj及びＬjについてパネル分解を実行する（ステップＳ３）。例えば図１２に示すように、パネル分解においては、プロセスＰ０とプロセスＰ１とが行交換のための通信を実行し、ピボットの行交換の情報はピボットデータとして保存される。また、パネル分解においては消去の処理が実行される。パネル分解はよく知られた技術であるので、ここでは詳細な説明を省略する。
【００２４】
並列計算機１における各ノードのプロセスは、ステップＳ３の処理後のＢj及びＬj、並びに、ステップＳ３において取得したピボットデータを、同じ行のプロセスの間で送受信する（ステップＳ５）。
【００２５】
ステップＳ５においては、例えば図１３に示すように送受信が行われる。具体的には、プロセスＰ０はプロセスＰ２に対する送信を行い、プロセスＰ２はプロセスＰ０から受信したデータをプロセスＰ４に送信し、プロセスＰ４はプロセスＰ２から受信したデータをプロセスＰ６に送信し、プロセスＰ６はプロセスＰ４からデータを受信する。また、プロセスＰ１はプロセスＰ３に対する送信を行い、プロセスＰ３はプロセスＰ１から受信したデータをプロセスＰ５に送信し、プロセスＰ５はプロセスＰ３から受信したデータをプロセスＰ７に送信し、プロセスＰ７はプロセスＰ５からデータを受信する。これにより、プロセスＰ０、プロセスＰ２、プロセスＰ４及びプロセスＰ６はピボットデータとブロック００、ブロック２０、ブロック４０及びブロック６０とを保持する。プロセスＰ１、プロセスＰ３、プロセスＰ５及びプロセスＰ７はピボットデータとブロック１０、ブロック３０、ブロック５０及びブロック７０とを保持する。ＨＰＬにおいては、この送信方法はＩｎｃｒｅａｓｉｎｇ−ｒｉｎｇと呼ばれる。
【００２６】
並列計算機１における各ノードのプロセスは、行列積の単位ブロックサイズＭ１及びＮ１を設定する（ステップＳ７）。Ｍ１は列方向（すなわち上下方向）のブロックサイズであり、Ｎ１は行方向（すなわち左右方向）のブロックサイズである。単位ブロックサイズは行列積の演算性能を考慮して設定されるが、ステップＳ７においては、初期的にＭ１＝Ｎ１＝ＮＢと設定される。処理は端子Ａを介して図１４のステップＳ９に移行する。
【００２７】
図１４の説明に移行し、Ｕja及びＣjaを保持しているプロセスＰ２及びＰ３は、Ｕja及びＣjaについての更新処理を実行する（図１４：ステップＳ９）。Ｕja及びＣjaについての更新処理については、図１５及び図１６を用いて説明する。なお、ステップＳ９の更新処理は、ステップＳ１１においてＢj+1およびＬj+1のパネル分解を実行するための準備段階の処理として行われる。
【００２８】
まず、プロセスＰ２及びＰ３は、Ｌjのパネル分解時に取得したピボットデータによって、Ｕja及びＣjaについて行交換を実行する（図１５：ステップＳ３１）。図１６（ａ）に示すように、ＵjaとＣjaの一部とはプロセスＰ２に配置され、Ｃjaの一部がプロセスＰ３に配置されている。ステップＳ３１においては、Ｕja及びＣjaについて、プロセスＰ２とＰ３とが通信を行いつつ行交換を実行する。
【００２９】
プロセスＰ２は、Ｂjを用いてＵjaの更新計算を実行する（ステップＳ３３）。図１６（ｂ）に示すように、Ｕja（すなわちブロック０１）を保持しているのはプロセスＰ２であるので、本処理はプロセスＰ３においては実行されない。
【００３０】
プロセスＰ２は、ステップＳ３３の処理後のＵjaを、同じ列のプロセスに送信（ここではブロードキャスト）する（ステップＳ３５）。すなわち、図１６（ｃ）に示すように、プロセスＰ２からプロセスＰ３に対してＵjaが送信される。
【００３１】
プロセスＰ２及びＰ３は、ステップＳ３３の処理後のＵja等に基づき、行列積Ｃja→Ｃja−ＬjＵjaを実行する（ステップＳ３７）。そして呼び出し元の処理に戻る。ステップＳ３７の処理によって更新されるＣjaは、図１６（ｄ）において破線で囲まれた部分に相当する。
【００３２】
図１４の説明に戻り、プロセスＰ２及びＰ３は、Ｂj+1及びＬj+1についてパネル分解を実行する（ステップＳ１１）。パネル分解については、ステップＳ３において説明したとおりである。例えば図１７に示すように、プロセスＰ２とプロセスＰ３とが行交換のための通信を実行し、ピボットの行交換の情報はピボットデータとして保存される。また、パネル分解においては消去の処理が実行される。
【００３３】
各プロセスは、Ｌjのパネル分解時に取得したピボットデータによって、Ｕjb及びＣjbについて行交換を実行する（ステップＳ１３）。例えば図１８に示すように、太線で囲まれた部分がＵjbに相当し、Ｕjbの下に位置するブロックはＣjbに相当する。ステップＳ１３においては、Ｕjb及びＣjbについて、プロセスＰ０とＰ１とが通信を行いつつ行交換を実行し、プロセスＰ２とＰ３とが通信を行いつつ行交換を実行し、プロセスＰ４とＰ５とが通信を行いつつ行交換を実行し、プロセスＰ６とＰ７とが通信を行いつつ行交換を実行する。
【００３４】
プロセスＰ０、プロセスＰ２、プロセスＰ４及びプロセスＰ６は、ＢjLを用いてＵjbの更新計算を実行する（ステップＳ１５）。Ｕjbは、図１９において太線で囲まれた部分に相当し、ＢjLは、図１９において破線で囲まれた部分に相当する。ステップＳ１５においては、ＢjLＸ＝Ｕjbが解かれ、元のＵjbがＸで置き換えられる。ここで、ＢjLは下三角行列であるので、Ｕjbの各列について後退代入を行えばよい。
【００３５】
プロセスＰ０、プロセスＰ２、プロセスＰ４及びプロセスＰ６は、ステップＳ１５の処理後のＵjbを、同じ列のプロセスに送信（ここではブロードキャスト）する（ステップＳ１７）。すなわち、図２０に示すように、プロセスＰ０からプロセスＰ１に対してＵjbの一部が送信され、プロセスＰ２からプロセスＰ３に対してＵjbの一部が送信され、プロセスＰ４からプロセスＰ５に対してＵjbの一部が送信され、プロセスＰ６からプロセスＰ７に対してＵjbの一部が送信される。
【００３６】
各プロセスは、通信と行列積Ｃjb←Ｃjb−ＬjＵjbの計算との並列処理を実行する（ステップＳ１９）。ステップＳ１９の処理については、図２１乃至図２９Ｂを用いて説明する。なお、通信と行列積の計算とを並列で実行する技術はＬｏｏｋ−ａｈｅａｄと呼ばれる。
【００３７】
まず、図２１を用いて、ステップＳ１９において実行される通信について説明する。ステップＳ１９においては、プロセスＰ２及びＰ３が、Ｂj+1及びＬj+1、並びに、Ｌj+1のパネル分解時に取得したピボットデータを、プロセスＰ４及びＰ５に送信する。プロセスＰ４及びＰ５は、プロセスＰ２及びＰ３から受信したデータをプロセスＰ６及びＰ７に送信する。プロセスＰ６及びＰ７は、プロセスＰ４及びＰ５から受信したデータをプロセスＰ０及びＰ１に送信する。プロセスＰ０及びＰ１は、プロセスＰ６及びＰ７からデータを受信する。これにより、プロセスＰ０、プロセスＰ２、プロセスＰ４及びプロセスＰ６はピボットデータとブロック２１、ブロック４１及びブロック６１とを保持する。プロセスＰ１、プロセスＰ３、プロセスＰ５及びプロセスＰ７はピボットデータとブロック１１、ブロック３１、ブロック５１及びブロック７１とを保持する。
【００３８】
図２２を用いて、ステップＳ１９において通信と並列で実行される行列積について説明する。実行される行列積はＣjb←Ｃjb−ＬjＵjbであり、Ｕjbは図２２におけるブロック０２、ブロック０３、ブロック０４、ブロック０５、ブロック０６及びブロック０７に相当し、Ｌjは図２２におけるブロック１０、ブロック２０、ブロック３０、ブロック４０、ブロック５０、ブロック６０及びブロック７０に相当する。そして、Ｃjbは図２２において破線で囲まれた部分に相当する。
【００３９】
通信と行列積の計算とは並列で実行されるが、本実施の形態においては、行列積の計算に使用する行列のサイズを変更することで、ステップＳ１９の処理が終了するまでに要する時間を短縮する。この方法について、図２３乃至図２９Ｂを用いて説明する。
【００４０】
まず、計算部１５３は、行列積の計算が完了したか又は通信が完了したか判定する（図２３：ステップＳ４１）。行列積の計算及び通信が完了していない場合（ステップＳ４１：Ｎｏルート）、通信制御部１５４は、通信制御処理を実行する（ステップＳ４３）。通信制御処理については、図２４乃至図２６を用いて説明する。
【００４１】
まず、通信制御部１５４は、自プロセスが通信の中間プロセスであるか判定する（図２４：ステップＳ７１）。通信の中間プロセスとは、Ｂj+1、Ｌj+1及びピボットデータの送信と受信の両方を実行するプロセスであり、例えば図２１の例であれば、プロセスＰ４乃至Ｐ７である。
【００４２】
自プロセスが通信の中間プロセスである場合（ステップＳ７１：Ｙｅｓルート）、通信制御部１５４は、今回の呼び出しが初回の呼び出しであるか判定する（ステップＳ７３）。今回の呼び出しが初回の呼び出しである場合（ステップＳ７３：Ｙｅｓルート）、通信制御部１５４は、例えば通信ライブラリであるＭＰＩ（Message Passing Interface）における通信ルーチンＭＰＩ＿Ｉｒｅｃｖを呼び出すことにより、通信部１０３に受信を開始させる（ステップＳ７５）。ＭＰＩ＿Ｉｒｅｃｖを呼び出すと、制御はすぐにＣＰＵ１０１に戻されるので、通信の制御のためにＣＰＵ１０１が長時間占有されることはなく、計算部１５３は、受信の完了を待つ間、行列積の計算を継続できる。
【００４３】
通信制御部１５４は、メモリ１０２におけるＣＦＬＡＧをＣＦＬＡＧ＝１と設定し、メモリ１０２におけるＥＦＬＡＧをＥＦＬＡＧ＝０と設定する（ステップＳ７７）。そして呼び出し元の処理に戻る。
【００４４】
ＣＦＬＡＧは通信の状態を管理するためのフラグであり、「ＣＦＬＡＧ＝１」は受信中であることを表し、「ＣＦＬＡＧ＝２」は送信中であることを表し、「ＣＦＬＡＧ＝０」は通信が完了したことを表す。
【００４５】
ＥＦＬＡＧは通信が完了したか否かを上位ルーチンに通知するためのフラグであり、「ＥＬＦＡＧ＝０」は通信が完了していないことを表す。「ＥＬＦＡＧ＝１」は通信が完了したことを表す。
【００４６】
一方、今回の呼び出しが初回の呼び出しではない場合（ステップＳ７３：Ｎｏルート）、通信制御部１５４は、ＣＦＬＡＧ＝１であるか判定する（ステップＳ７９）。
【００４７】
ＣＦＬＡＧ＝１である場合（ステップＳ７９：Ｙｅｓルート）、通信制御部１５４は、受信が終了したか判定する（ステップＳ８１）。なお、ＭＰＩにおける通信ルーチンＭＰＩ＿ｔｅｓｔを呼び出せば、指定した通信が終了したか否かを示す情報が返却されるので、これによって受信が終了したか否かが確認される。ＭＰＩ＿Ｉｒｅｃｖと同様、ＭＰＩ＿ｔｅｓｔの場合も制御はすぐにＣＰＵ１０１に戻されるので、通信の制御のためにＣＰＵ１０１が長時間占有されることはない。
【００４８】
受信が終了していない場合（ステップＳ８１：Ｎｏルート）、通信制御部１５４は、メモリ１０２におけるＥＦＬＡＧをＥＦＬＡＧ＝０と設定し（ステップＳ８３）、呼び出し元の処理に戻る。
【００４９】
一方、受信が終了した場合（ステップＳ８１：Ｙｅｓルート）、通信制御部１５４は、ＭＰＩにおける通信ルーチンＭＰＩ＿Ｉｓｅｎｄを呼び出すことにより、通信部１０３に送信を開始させる（ステップＳ８５）。ＭＰＩ＿Ｉｒｅｃｖ及びＭＰＩ＿ｔｅｓｔと同様、ＭＰＩ＿Ｉｓｅｎｄの場合も制御はすぐにＣＰＵ１０１に戻されるので、通信の制御のためにＣＰＵ１０１が長時間占有されることはなく、計算部１５３は、送信の完了を待つ間、行列積の計算を継続できる。
【００５０】
通信制御部１５４は、メモリ１０２におけるＣＦＬＡＧをＣＦＬＡＧ＝２と設定し、メモリ１０２におけるＥＦＬＡＧをＥＦＬＡＧ＝０と設定する（ステップＳ８７）。そして呼び出し元の処理に戻る。
【００５１】
一方、ＣＦＬＡＧ＝０である場合（ステップＳ７９：Ｎｏルート）、通信制御部１５４は、送信が終了したか判定する（ステップＳ８９）。なお、ＭＰＩにおける通信ルーチンＭＰＩ＿ｔｅｓｔを呼び出せば、指定した通信が終了したか否かを示す情報が返却されるので、これによって送信が終了したか否かが確認される。
【００５２】
送信が終了していない場合（ステップＳ８９：Ｎｏルート）、通信制御部１５４は、メモリ１０２におけるＥＦＬＡＧをＥＦＬＡＧ＝０と設定し（ステップＳ９１）、呼び出し元の処理に戻る。
【００５３】
一方、送信が終了した場合（ステップＳ８９：Ｙｅｓルート）、通信制御部１５４は、メモリ１０２におけるＣＦＬＡＧをＣＦＬＡＧ＝０と設定し、メモリ１０２におけるＥＦＬＡＧをＥＦＬＡＧ＝１と設定する（ステップＳ９３）。そして呼び出し元の処理に戻る。
【００５４】
一方、自プロセスが通信の中間プロセスではない場合（ステップＳ７１：Ｎｏルート）、通信制御部１５４は、自プロセスが通信の先頭プロセスであるか判定する（ステップＳ９５）。通信の先頭プロセスとは、Ｂj+1、Ｌj+1及びピボットデータの送信のみを実行するプロセスであり、例えば図２１の例であればプロセスＰ２及びＰ３である。
【００５５】
自プロセスが通信の先頭プロセスである場合（ステップＳ９５：Ｙｅｓルート）、処理は端子Ｃを介して図２５のステップＳ９７の処理に移行する。一方、自プロセスが通信の先頭プロセスではない場合（ステップＳ９５：Ｎｏルート）、処理は端子Ｄを介して図２６のステップＳ１１１の処理に移行する。
【００５６】
端子Ｃ以降の処理について説明する。通信制御部１５４は、今回の呼び出しが初回の呼び出しであるか判定する（図２５：ステップＳ９７）。今回の呼び出しが初回の呼び出しである場合（ステップＳ９７：Ｙｅｓルート）、通信制御部１５４は、例えばＭＰＩにおける通信ルーチンＭＰＩ＿Ｉｓｅｎｄを呼び出すことにより、通信部１０３に送信を開始させる（ステップＳ９９）。ＭＰＩ＿Ｉｓｅｎｄを呼び出すと、制御はすぐにＣＰＵ１０１に戻されるので、通信の制御のためにＣＰＵ１０１が長時間占有されることはなく、計算部１５３は、送信の完了を待つ間、行列積の計算を継続できる。
【００５７】
通信制御部１５４は、メモリ１０２におけるＣＦＬＡＧをＣＦＬＡＧ＝２と設定し、メモリ１０２におけるＥＦＬＡＧをＥＦＬＡＧ＝０と設定する（ステップＳ１０１）。そして処理は端子Ｅを介して呼び出し元の処理に戻る。
【００５８】
一方、今回の呼び出しが初回の呼び出しではない場合（ステップＳ９７：Ｎｏルート）、通信制御部１５４は、送信が終了したか判定する（ステップＳ１０３）。なお、ＭＰＩにおける通信ルーチンＭＰＩ＿ｔｅｓｔを呼び出せば、指定した通信が終了したか否かを示す情報が返却されるので、これによって送信が終了したか否かが確認される。
【００５９】
送信が終了していない場合（ステップＳ１０３：Ｎｏルート）、通信制御部１５４は、メモリ１０２におけるＥＦＬＡＧをＥＦＬＡＧ＝０と設定し（ステップＳ１０５）、処理は端子Ｅを介して呼び出し元の処理に戻る。
【００６０】
一方、送信が終了した場合（ステップＳ１０３：Ｙｅｓルート）、通信制御部１５４は、メモリ１０２におけるＣＦＬＡＧをＣＦＬＡＧ＝０と設定し、メモリ１０２におけるＥＦＬＡＧをＥＦＬＡＧ＝１と設定する（ステップＳ１０７）。そして処理は端子Ｅを介して呼び出し元の処理に戻る。
【００６１】
端子Ｄ以降の処理について説明する。通信制御部１５４は、今回の呼び出しが初回の呼び出しであるか判定する（図２６：ステップＳ１１１）。今回の呼び出しが初回の呼び出しである場合（ステップＳ１１１：Ｙｅｓルート）、通信制御部１５４は、例えばＭＰＩにおける通信ルーチンＭＰＩ＿Ｉｒｅｃｖを呼び出すことにより、通信部１０３に受信を開始させる（ステップＳ１１３）。ＭＰＩ＿Ｉｒｅｃｖを呼び出すと、制御はすぐにＣＰＵ１０１に戻されるので、通信の制御のためにＣＰＵ１０１が長時間占有されることはなく、計算部１５３は、受信の完了を待つ間、行列積の計算を継続できる。
【００６２】
通信制御部１５４は、メモリ１０２におけるＣＦＬＡＧをＣＦＬＡＧ＝１と設定し、メモリ１０２におけるＥＦＬＡＧをＥＦＬＡＧ＝０と設定する（ステップＳ１１５）。そして処理は端子Ｆを介して呼び出し元の処理に戻る。
【００６３】
一方、今回の呼び出しが初回の呼び出しではない場合（ステップＳ１１１：Ｎｏルート）、通信制御部１５４は、受信が終了したか判定する（ステップＳ１１７）。なお、ＭＰＩにおける通信ルーチンＭＰＩ＿ｔｅｓｔを呼び出せば、指定した通信が終了したか否かを示す情報が返却されるので、これによって受信が終了したか否かが確認される。
【００６４】
受信が終了していない場合（ステップＳ１１７：Ｎｏルート）、通信制御部１５４は、メモリ１０２におけるＥＦＬＡＧをＥＦＬＡＧ＝０と設定し（ステップＳ１１９）、処理は端子Ｆを介して呼び出し元の処理に戻る。
【００６５】
一方、受信が終了した場合（ステップＳ１１７：Ｙｅｓルート）、通信制御部１５４は、メモリ１０２におけるＣＦＬＡＧをＣＦＬＡＧ＝０と設定し、メモリ１０２におけるＥＦＬＡＧをＥＦＬＡＧ＝１と設定する（ステップＳ１２１）。そして処理は端子Ｆを介して呼び出し元の処理に戻る。
【００６６】
以上のような処理によって、プロセス間の通信が制御される。なお、実際のデータ（例えば行列の要素など）の転送は通信部１０３により行われるので、通信部１０３が通信を行う間、ＣＰＵ１０１は通信制御のための若干の処理に要する時間を除いて、計算に専念することができる。
【００６７】
図２３の説明に戻り、計算部１５３は、１つの単位ブロック（Ｍ１＊Ｎ１）についての行列積を計算する（ステップＳ４５）。そしてステップＳ４１の処理に戻る。
【００６８】
例えば図２７に示すような行列積を実行する例を考える。この場合、単位ブロックはブロック２２、ブロック４２、ブロック６２、ブロック２６、ブロック４６及びブロック６６であるので、図２８Ａ及び図２８Ｂに示すように、６回に分けて行列積が実行される。すなわち、行列積Ｃj22←Ｃj22−Ｌj20Ｕj02と、行列積Ｃj42←Ｃj42−Ｌj40Ｕj02と、行列積Ｃj62←Ｃj62−Ｌj60Ｕj02と、行列積Ｃj26←Ｃj26−Ｌj20Ｕj06と、行列積Ｃj46←Ｃj46−Ｌj40Ｕj06と、行列積Ｃj66←Ｃj66−Ｌj60Ｕj06とが実行される。ここで、上付きの数字はブロックの番号を表す。
【００６９】
一方、行列積の計算又は通信が完了した場合（ステップＳ４１：Ｙｅｓルート）、計算部１５３は、未実行の行列積が有る場合には未実行の行列積を実行する（ステップＳ４７）。未実行の行列積が無い場合には、ステップＳ４７の処理はスキップされる。なお、未実行の行列積が有る場合とは、行列積の計算よりも通信の方が早く終わった場合である。
【００７０】
計測部１５１は、変数Ｔ０に現在の時刻を設定する（ステップＳ４９）。なお、ステップＳ４７の処理を実行した場合には行列積の計算よりも通信の方が早く終わったので、本ステップをスキップしてもよい。
【００７１】
通信制御部１５４は、ＥＦＬＡＧ＝０であるか判定する（ステップＳ５１）。ＥＦＬＡＧ＝０である場合（ステップＳ５１：Ｙｅｓルート）、通信制御部１５４は、通信制御処理を実行する（ステップＳ５３）。通信制御処理については上で説明したとおりであるので、ここでは説明を省略する。
【００７２】
一方、ＥＦＬＡＧ＝０ではない場合（ステップＳ５１：Ｎｏルート）、通信は完了している。従って、計測部１５１は、変数Ｔ１に現在の時刻を設定する（ステップＳ５５）。なお、ステップＳ４７の処理を実行した場合には行列積の計算よりも通信の方が早く終わったので、本ステップをスキップしてもよい。
【００７３】
計測部１５１は、行列積が完了してから通信が完了するまでの時間（すなわち、ＣＰＵ１０１の待ち時間）ＴＴをＴＴ＝Ｔ１−Ｔ０によって算出する（ステップＳ５７）。
【００７４】
変更部１５２は、Ｔp＞Ｔminが成立し且つＴＴ＞Ｔminが成立するか判定する（ステップＳ５９）。Ｔpは前回のＴＴであり、初回の処理である場合にはＴp＞Ｔminは成立しないと判定される。Ｔminは所定の時間であり、予め管理者によって設定される。
【００７５】
Ｔp＞Ｔmin又はＴＴ＞Ｔminが成立しない場合（ステップＳ５９：Ｎｏルート）、ステップＳ６３の処理に移行する。一方、Ｔp＞Ｔminが成立し且つＴＴ＞Ｔminが成立する場合（ステップＳ５９：Ｙｅｓルート）、変更部１５２は、単位ブロックの行方向のサイズＮ１をＮ１＝ＭＡＸ（１，Ｎ１＊ｐ）と設定する（ステップＳ６１）。ＭＡＸ（１，Ｎ１＊ｐ）は１とＮ１＊ｐとのうちより大きい方の値を返す関数である。ｐは所定の割合であり、例えば０．５から０．８程度の値である。なお、ここではＮ１を小さくしているが、Ｍ１を小さくした方が計算の性能が上がる場合、Ｍ１を小さくしてもよい。
【００７６】
また、ＴＴの条件だけでなくＴpの条件をも確認することで、ＴＴが何らかの要因で一時的に長くなった場合に誤って単位ブロックのサイズを小さくすることを防ぐことができるようになる。
【００７７】
計測部１５１は、ＴpをＴp＝ＴＴと設定する（ステップＳ６３）。そして呼び出し元の処理に戻る。
【００７８】
図１４の説明に戻り、各プロセスは、ｊを１インクリメントし（ステップＳ２１）、ｊ＞（行方向のブロック数−１）が満たされるか判定する（ステップＳ２３）。行方向のブロック数とは、行列Ａの行方向（すなわち左右方向）における、幅ＮＢのブロックの数である。ｊ＞（行方向のブロック数−１）が満たされない場合（ステップＳ２３：Ｎｏルート）、ステップＳ９の処理に戻る。一方、ｊ＞（行方向のブロック数−１）が満たされる場合（ステップＳ２３：Ｙｅｓルート）、処理は終了する。
【００７９】
例えば、図２７に示した行列積について、ステップＳ６１の処理によって行方向のサイズを半分にしたとする。この場合、図２８Ａに示した３回の行列積によって得られた結果は、図２９Ａに示した６回の行列積によって得られるようになり、図２８Ｂに示した３回の行列積によって得られた結果は、図２９Ｂに示した６回の行列積によって得られるようになる。図２９Ａ及び図２９Ｂにおいて、上付きの括弧内の数字は、ＮＢ＊ＮＢのブロック内でのブロックの番号を表す。例えば、Ｃj22(1)はＣj22の左半分のブロックを表し、Ｃj22(2)はＣj22右半分のブロックを表す。
【００８０】
行列積の実行回数を増やせば、１回の行列積が終了するたびに実行される通信制御処理（ステップＳ４３）をより高頻度で行えるようになる。これにより、通信が滞りなく進行するようになるので、行列積の完了後通信が完了するまでの待ち時間を短縮できるようになる。
【００８１】
図７で示したように、ＬＵ分解の計算では、処理が進行するにしたがって行列積の計算に使用する行列のサイズが小さくなっていく。これにより計算と通信のバランスが変化していく。
【００８２】
通信と行列積との計算とを並列で実行する場合に、処理の前半（すなわち、ｊが比較的小さい時）には全体の行列のサイズが大きい。このため、ブロックサイズＭ１及びＮ１を大きめに設定しても、１つのプロセスが計算する単位ブロックの数が十分多く、全ての通信は行列積の計算の裏で実行され、ＣＰＵ１０１が通信の完了を待つことはない。
【００８３】
図３０に、ＣＰＵ１０１の待ち時間が生じない場合の例を示す。図３０においては、図２１で示した通信のうち、Ｐ２、Ｐ４、Ｐ６及びＰ０で行う通信が示されている。Ｐ６を例として動作を説明する。ＣＰＵ１０１は、最初に受信開始を通信部１０３に指示し、そして行列積を実行する。１つの単位ブロック分の行列積を完了した後、受信の終了を確認するが、まだ通信は完了していないため、次の単位ブロックの行列積を実行する。行列積が完了して受信の終了を確認したところ、受信が終了していたため、次のノードへの送信を指示し、次の行列積を実行する。行列積が完了して送信の終了を確認したところ、送信は完了していたため、残りの行列積計算を実行する。
【００８４】
これに対し、処理の後半（すなわち、ｊが比較的大きい時）では、全体の行列のサイズが小さくなるため、行列積を計算対象の単位ブロックの数が少なくなり、通信の完了前に全ての単位ブロックの行列積の計算が完了してしまう。このとき、通信で受け取ったデータが無ければ次の行列積を実行できないので、通信が完了しないとＣＰＵ１０１は計算を始めることができず、通信の完了を待つことになる。
【００８５】
図３１に、ＣＰＵ１０１の待ち時間が生じる場合の例を示す。Ｐ６を例として動作を説明する。図３１においては、Ｐ６が計算すべき行列積の単位ブロックが２つしかない。ＣＰＵ１０１は最初に受信開始を通信部１０３に指示し、そして行列積を実行する。１つの単位ブロックの行列積が完了した後、受信の終了を確認するが、まだ通信は完了していないため、次の単位ブロックの行列積を実行する。行列積が完了して受信の終了を確認したところ、受信が完了していたため、次のノードへの送信を指示する。ここで、次の行列積の計算に使用する単位ブロックが無いため、ＣＰＵ１０１の計算対象が存在せず、通信完了を待つことになる。
【００８６】
特に大規模なシステムにおいては、通信の先頭ノードから末端のノードまでの間のノードの数が多くなるので、ＣＰＵ１０１が通信の完了を待つ時間が長くなる。ブロックサイズを小さくすれば、通信制御処理を実行する頻度が高くなるので、通信完了までの待ち時間を減らせることができる。しかし、行列積の計算には、行列のサイズが大きいほど計算効率が高くなるという性質がある。従って、単純に単位ブロックのサイズを小さくした場合には、行列積の計算時間が長くなるので、ＬＵ分解全体の実行時間を短縮することはできない。
【００８７】
このような問題に対して、本実施の形態においては、実際に発生した待ち時間がＴminより長くなった段階で、単位ブロックのサイズが小さくされる。すなわち、図３２に示すように、ＬＵ分解の後半においては、比較的小さな単位ブロックで行列積の計算が実行されるようになる。一方で、待ち時間が発生しない、ＬＵ分解の前半においては、比較的大きな単位ブロックで行列積が実行されるので、計算効率を落とすことなく行列積を実行することができる。これにより、全体としては、ＬＵ分解の実行時間が短縮されるようになる。
【００８８】
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で説明したノードｎ０乃至ｎ７の機能ブロック構成は実際のプログラムモジュール構成に一致しない場合もある。
【００８９】
また、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
【００９０】
以上述べた本発明の実施の形態をまとめると、以下のようになる。
【００９１】
本実施の形態の第１の態様に係る並列計算機は、（Ａ）ＬＵ分解を並列で実行する複数の処理部を有する。そして、複数の処理部の各々が、（ａ１）第１サイズの行列での行列積が完了してから複数の処理部のうち他の処理部との通信が完了するまでの時間である第１の時間を計測する計測部と、（ａ２）計測部により計測された第１の時間が所定時間以上である場合、行列積に使用する行列のサイズを、第１サイズより小さい第２サイズに変更する変更部とを有する。
【００９２】
行列積に使用する行列のサイズが小さくなれば、１回の行列積にかかる時間は短くなるので、１回の行列積が完了した際に行う通信制御を頻繁に行えるようになる。これにより、通信がより早く完了するようになるので、第１の時間が短縮し、結果としてＬＵ分解の実行時間を短縮できるようになる。
【００９３】
また、複数の処理部の各々が、（ａ３）行列積を実行する計算部と、（ａ４）他の処理部との通信を、計算部による行列積と並列で実行する通信部と、（ａ５）計算部による行列積が終了するたびに、通信部による通信の進行を継続させるための処理を実行する通信制御部とをさらに有してもよい。これにより、通信の進行が滞ることを抑制できるようになる。また、通信時間を隠蔽できるので、ＬＵ分解の実行時間を短縮できるようになる。
【００９４】
また、他の処理部との通信は、次の行列積に使用する行列及び当該行列のパネル分解時に取得したピボットデータを他の処理部から受信するための通信、および、次の行列積に使用する行列及び当該行列のパネル分解時に取得したピボットデータを他の処理部に送信するための通信の少なくともいずれかを含んでもよい。これにより、次の行列積を迅速に開始できるようになる。
【００９５】
また、上で述べた変更部は、（ａ２１）行方向のサイズ及び列方向のサイズの少なくともいずれかを小さくすることにより、行列のサイズを第１サイズから第２サイズに変更してもよい。これにより、実行時間の短縮により寄与する形で行列積を実行できるようになる。
【００９６】
また、上で述べた計測部は、（ａ１１）第１の時間を計測した後、第１サイズの行列で次の行列積演算を完了してから他の処理部との通信が完了までの時間である第２の時間をさらに計測してもよい。そして、上で述べた変更部は、（ａ２２）計測部により計測された第１の時間が所定時間以上であり且つ計測部により計測された第２の時間が所定時間以上である場合、第１サイズより小さい第２サイズに変更してもよい。これにより、何らかの要因により一時的に第１の時間が長くなってしまったような場合に誤って行列のサイズを小さくしてしまうことを防げるようになる。
【００９７】
本実施の形態の第２の態様に係る並列ＬＵ分解方法は、ＬＵ分解を並列で実行する複数の処理部を有する並列計算機において実行される。そして、本並列ＬＵ分解方法は、複数の処理部の各々が、（Ｂ）第１サイズの行列での行列積が完了してから複数の処理部のうち他の処理部との通信が完了するまでの時間である第１の時間を計測し、（Ｃ）計測された第１の時間が所定時間以上である場合、行列積に使用する行列のサイズを、第１サイズより小さい第２サイズに変更する処理を含む。
【００９８】
なお、上記方法による処理をプロセッサに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【００９９】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１００】
（付記１）
ＬＵ分解を並列で実行する複数の処理部
を有し、
前記複数の処理部の各々が、
第１サイズの行列での行列積が完了してから前記複数の処理部のうち他の処理部との通信が完了するまでの時間である第１の時間を計測する計測部と、
前記計測部により計測された前記第１の時間が所定時間以上である場合、行列積に使用する行列のサイズを、前記第１サイズより小さい第２サイズに変更する変更部と、
を有する並列計算機。
【０１０１】
（付記２）
前記複数の処理部の各々が、
行列積を実行する計算部と、
前記他の処理部との通信を、前記計算部による行列積と並列で実行する通信部と、
前記計算部による行列積が終了するたびに、前記通信部による通信の進行を継続させるための処理を実行する通信制御部と、
をさらに有する付記１記載の並列計算機。
【０１０２】
（付記３）
前記他の処理部との通信は、
次の行列積に使用する行列及び当該行列のパネル分解時に取得したピボットデータを前記他の処理部から受信するための通信、および、前記次の行列積に使用する行列及び当該行列のパネル分解時に取得したピボットデータを前記他の処理部に送信するための通信の少なくともいずれかを含む、
付記１又は２記載の並列計算機。
【０１０３】
（付記４）
前記変更部は、
行方向のサイズ及び列方向のサイズの少なくともいずれかを小さくすることにより、行列のサイズを前記第１サイズから前記第２サイズに変更する、
付記１乃至３のいずれか１つ記載の並列計算機。
【０１０４】
（付記５）
前記計測部は、
前記第１の時間を計測した後、前記第１サイズの行列で次の行列積演算を完了してから前記他の処理部との通信が完了までの時間である第２の時間をさらに計測し、
前記変更部は、
前記計測部により計測された前記第１の時間が前記所定時間以上であり且つ前記計測部により計測された前記第２の時間が前記所定時間以上である場合、行列積に使用する行列のサイズを前記第２サイズに変更する、
付記１記載の並列計算機。
【０１０５】
（付記６）
ＬＵ分解を並列で実行する複数の処理部を有する並列計算機において実行される、並列ＬＵ分解方法であって、
前記複数の処理部の各々が、
第１サイズの行列での行列積が完了してから前記複数の処理部のうち他の処理部との通信が完了するまでの時間である第１の時間を計測し
計測された前記第１の時間が所定時間以上である場合、行列積に使用する行列のサイズを、前記第１サイズより小さい第２サイズに変更する、
処理を実行する並列ＬＵ分解方法。
【０１０６】
（付記７）
プロセッサに、
第１サイズの行列での行列積が完了してから他のプロセッサとの通信が完了するまでの時間である第１の時間を計測し、
計測された前記第１の時間が所定時間以上である場合、行列積に使用する行列のサイズを、前記第１サイズより小さい第２サイズに変更する、
処理を実行させる並列ＬＵ分解プログラム。
【符号の説明】
【０１０７】
１  並列計算機    １００  インターコネクト
ｎ０，ｎ１，ｎ２，ｎ３，ｎ４，ｎ５，ｎ６，ｎ７  ノード
１０１  ＣＰＵ    １０２  メモリ
１０３  通信部    １０４  バス
１５１  計測部    １５２  変更部
１５３  計算部    １５４  通信制御部
【図１】
0006607078.tif 000002
【図２】
0006607078.tif 000003
【図３】
0006607078.tif 000004
【図４】
0006607078.tif 000005
【図５】
0006607078.tif 000006
【図６】
0006607078.tif 000007
【図７】
0006607078.tif 000008
【図８】
0006607078.tif 000009
【図９】
0006607078.tif 000010
【図１０】
0006607078.tif 000011
【図１１】
0006607078.tif 000012
【図１２】
0006607078.tif 000013
【図１３】
0006607078.tif 000014
【図１４】
0006607078.tif 000015
【図１５】
0006607078.tif 000016
【図１６】
0006607078.tif 000017
【図１７】
0006607078.tif 000018
【図１８】
0006607078.tif 000019
【図１９】
0006607078.tif 000020
【図２０】
0006607078.tif 000021
【図２１】
0006607078.tif 000022
【図２２】
0006607078.tif 000023
【図２３】
0006607078.tif 000024
【図２４】
0006607078.tif 000025
【図２５】
0006607078.tif 000026
【図２６】
0006607078.tif 000027
【図２７】
0006607078.tif 000028
【図２８Ａ】
0006607078.tif 000029
【図２８Ｂ】
0006607078.tif 000030
【図２９Ａ】
0006607078.tif 000031
【図２９Ｂ】
0006607078.tif 000032
【図３０】
0006607078.tif 000033
【図３１】
0006607078.tif 000034
【図３２】
0006607078.tif 000035