(57)【要約】  マルチコアプロセッサによる並列処理の高速化を実現する。  複数のコア（１ａ，１ｂ，・・・，１ｎ）それぞれの計算単位領域選択手段（１ａａ，１ｂａ，・・・，１ｎａ）が、計算領域（４）内の未計算の計算単位領域を順次選択する。また複数のコア（１ａ，１ｂ，・・・，１ｎ）それぞれの計算手段（１ａｂ，１ｂｂ，・・・，１ｎｂ）が、選択された計算単位領域内の計算を実行する。また計算手段（１ａｂ，１ｂｂ，・・・，１ｎｂ）が、複数のコア（１ａ，１ｂ，・・・，１ｎ）それぞれからアクセス可能な記憶装置（２）に計算結果（２ａ，２ｂ，・・・）を書き込む。コア（１ｎ）の計算結果送信手段（１ｎｃ）は、計算結果送信領域（４ａ，４ｂ，４ｃ，４ｄ）内の計算結果の記憶装置（２）からの取得および取得した計算結果の送信処理を、複数の計算結果送信領域（４ａ，４ｂ，４ｃ，４ｄ）について異なる時間帯に実行する。
2011058657.tif 000002
【特許請求の範囲】
【請求項１】
演算処理装置が計算を行う要素点の全体集合である計算領域が複数の計算単位領域に区切られ、少なくとも１つの前記計算単位領域を包含する計算結果送信領域が前記計算領域内に複数設けられており、前記計算領域内の計算を複数の演算処理部を有する演算処理装置で並列実行する並列計算装置であって、
前記演算処理装置内の複数の前記演算処理部それぞれに設けられ、前記計算領域内の未計算の前記計算単位領域を順次選択する計算単位領域選択手段と、
前記演算処理装置内の複数の前記演算処理部それぞれに設けられ、前記計算単位領域選択手段で選択された前記計算単位領域内の計算を実行し、複数の前記演算処理部それぞれからアクセス可能な記憶装置に計算結果を書き込む計算手段と、
前記演算処理装置内の少なくとも１つの前記演算処理部に設けられ、前記計算結果送信領域に属する前記計算単位領域内の前記計算結果の前記記憶装置からの取得および送信処理を、複数の前記計算結果送信領域について異なる時間帯に実行する計算結果送信手段と、
を有することを特徴とする並列計算装置。
【請求項２】
前記計算結果送信手段は、複数の前記演算処理装置内の１つの前記演算処理部のみに設けられていることを特徴とする請求の範囲第１項記載の並列計算装置。
【請求項３】
前記計算単位領域選択手段は、前記計算結果送信領域内の前記計算単位領域を優先的に選択することを特徴とする請求の範囲第１項記載の並列計算装置。
【請求項４】
前記計算結果送信手段は、内包するすべての前記計算単位領域の計算が終了した前記計算結果送信領域から順に、前記計算結果の前記記憶装置からの取得および送信相手への送信処理を実行することを特徴とする請求の範囲第１項記載の並列計算装置。
【請求項５】
前記計算結果送信手段は、内包するすべての前記計算単位領域の計算が終了した前記計算結果送信領域を検出すると、前記計算結果送信手段を有する前記演算処理部に前記計算手段の実行を中断させて、検出した前記計算結果送信領域内の前記計算結果の前記記憶装置からの取得および送信相手への送信処理を実行することを特徴とする請求の範囲第１項記載の並列計算装置。
【請求項６】
前記計算結果送信手段は、検出した前記計算結果送信領域内の前記計算結果の前記記憶装置からの取得および送信相手への送信処理が終了すると、前記計算結果送信手段を有する前記演算処理部に前記計算手段の実行を再開させることを特徴とする請求の範囲第５項記載の並列計算装置。
【請求項７】
前記計算結果送信手段は、複数の前記演算処理装置内の複数の前記演算処理部それぞれに設けられており、複数の前記計算結果送信手段それぞれが、前記計算結果送信領域内の前記計算結果の取得および送信処理を実行すべきか否かを所定のアルゴリズにより判断し、該当処理を実行すべきと判断した場合に、前記計算結果送信領域内の前記計算結果の取得および送信処理を実行することを特徴とする請求の範囲第１項記載の並列計算装置。
【請求項８】
前記計算結果送信手段は、前記計算結果送信領域内の最後に計算された前記計算単位領域の識別番号を前記演算処理部数で除算し、余りの値と一致する識別番号が付与された前記演算処理部が前記計算結果送信領域内の前記計算結果の取得および送信処理を実行すべきであると判断することを特徴とする請求の範囲第１項記載の並列計算装置。
【請求項９】
演算処理装置が計算を行う要素点の全体集合である計算領域が複数の計算単位領域に区切られ、少なくとも１つの前記計算単位領域を包含する計算結果送信領域が前記計算領域内に複数設けられており、前記計算領域内の計算を複数の演算処理部を有する演算処理装置に並列実行させる並列計算方法であって、
前記演算処理装置内の複数の前記演算処理部が、前記計算領域内の未計算の前記計算単位領域を順次選択し、
前記演算処理装置内の複数の前記演算処理部が、選択された前記計算単位領域内の計算を実行し、複数の前記演算処理部それぞれからアクセス可能な記憶装置に計算結果を書き込み、
前記演算処理装置内の少なくとも１つの前記演算処理部が、前記計算結果送信領域に属する前記計算単位領域内の前記計算結果の前記記憶装置からの取得および送信処理を、複数の前記計算結果送信領域について異なる時間帯に実行する、
ことを特徴とする並列計算方法。
【請求項１０】
演算処理装置が計算を行う要素点の全体集合である計算領域が複数の計算単位領域に区切られ、少なくとも１つの前記計算単位領域を包含する計算結果送信領域が前記計算領域内に複数設けられており、前記計算領域内の計算を複数の演算処理部を有する演算処理装置に並列実行させる並列計算プログラムであって、
前記演算処理装置に、
前記演算処理装置内の複数の前記演算処理部を用いて、前記計算領域内の未計算の前記計算単位領域を順次選択し、
前記演算処理装置内の複数の前記演算処理部を用いて、選択された前記計算単位領域内の計算を実行し、複数の前記演算処理部それぞれからアクセス可能な記憶装置に計算結果を書き込み、
前記演算処理装置内の少なくとも１つの前記演算処理部を用いて、前記計算結果送信領域に属する前記計算単位領域内の前記計算結果の前記記憶装置からの取得および送信処理を、複数の前記計算結果送信領域について異なる時間帯に実行する、
処理を実行させることを特徴とする並列計算プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は並列計算装置、並列計算方法、および並列計算プログラムに関する。
【背景技術】
【０００２】
近年、テクノロジーの進歩と共に、演算処理部であるコアを２つ有するデュアルコア、４つ有するクアッドコアといったコアを複数有するマルチコアのプロセッサ（例えばＣＰＵ：Central Processing Unit）が定着している。さらに複数コア化ともいわれるように、１つのＬＳＩ（Large Scale Integrated circuit）に数十コア搭載するプロセッサも現れ、今後ますます複数のコアを搭載するＬＳＩが開発されてくることが推測される。【０００３】
さらに昨今のＨＰＣ（High Performance Computing）分野におけるスーパーコンピュータはこういったＬＳＩを有する計算ノードを数千から数万用いて構成されるマルチノード（プロセス）・マルチコアが主流となりつつある。このようなスーパーコンピュータは従来から気象予報分野、遺伝子解析などの生体分野、ナノテクノロジー分野といった大規模シミュレーションに深く拘わっており、各種科学技術の発展に貢献している。【０００４】
また、マルチノード・マルチコアといった特徴をもつスーパーコンピュータが開発されると同時に、科学技術計算分野の大規模シミュレーション手法も各種考えられている。例えば、シミュレーションが並列実行されることによる各シミュレーションにおける基底（物理量を算出する位置である離散点の集合）の相違を保証するための技術が考えられている。【０００５】
ところでシステムのマルチノード化においては、インターコネクトによって結合されたプロセッサ間の通信時間が、実行対象であるアプリケーションプログラムの処理時間に悪影響を与える場合がある。そのため、通信処理を削減しアプリケーションプログラムの高速化を図ることが重要とされる。処理の高速化の技術としては、例えば、解析演算の境界値データをスレーブ装置間の制御で行うことで、マスタ装置の通信負荷の増大を防ぐ技術がある。このように、アプリケーションの計算アルゴリズムや並列化手法を計算ノードを複数有するマルチノード向けに改善し、処理の効率化が図られている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平１０−１５４１３６号公報
【特許文献２】特開２００２−１２３４９７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、従来の並列化手法の改善はマルチノードシステムの各ノードに実行させるプロセスの並列処理の高速化であり、マルチコアのプロセッサ内の各コアで実行させるスレッドの並列処理の高速化手法については十分に検討されていなかった。例えば、各コア（スレッド）に均等に処理を分担させるような、マルチノードの並列処理技術のマルチコアへの転用は行われているが、マルチコアの特徴を考慮した上での並列処理の高速化については考えられていなかった。【０００８】
本発明はこのような点に鑑みてなされたものであり、マルチコアプロセッサによる並列処理の高速化を実現することができる並列計算装置、並列計算方法、および並列計算プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、演算処理装置が計算を行う要素点の全体集合である計算領域内の計算を複数の演算処理部を有する演算処理装置で並列実行する並列計算装置が提供される。計算領域は複数の計算単位領域に区切られている。計算領域内には、少なくとも１つの計算単位領域を包含する計算結果送信領域が複数設けられている。演算処理装置内の複数の演算処理部それぞれには、計算領域内の未計算の計算単位領域を順次選択する計算単位領域選択手段が設けられている。演算処理装置内の複数の演算処理部それぞれには、計算単位領域選択手段で選択された計算単位領域内の計算を実行し、複数の演算処理部それぞれからアクセス可能な記憶装置に計算結果を書き込む計算手段が設けられている。演算処理装置内の少なくとも１つの演算処理部には、計算結果送信領域に属する計算単位領域内の計算結果の記憶装置からの取得および送信処理を、複数の計算結果送信領域について異なる時間帯に実行する計算結果送信手段が設けられている。【００１０】
また上記課題を解決するために、上記並列計算装置と同様の処理を行う並列計算方法が提供される。さらに上記課題を解決するために、上記並列計算装置と同様の処理をコンピュータに実行させる並列計算プログラムが提供される。
【発明の効果】
【００１１】
上記並列計算装置では、複数の計算結果送信領域に関する計算結果の複数のコアが行う同時送信による主記憶装置へのアクセスが防止され、処理効率が向上する。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態に係る並列計算装置の機能を示すブロック図である。
【図２】物理シミュレーションの解析空間を示す図である。
【図３】のりしろ交換の様子を示す図である。
【図４】のりしろ交換のためのプロセッサでのデータ通信を示す図である。
【図５】境界データのパッキングとアンパッキングとを示す図である。
【図６】プロセッサ数に応じたのりしろ領域の占有率を示す図である。
【図７】第２の実施の形態に用いるコンピュータのハードウェア構成例を示す図である。
【図８】プロセッサモジュールの内部構造の一形態を示す図である。
【図９】第２の実施の形態における物理シミュレーション時のプロセッサモジュール内での処理機能を示す図である。
【図１０】解析空間とブロックとの関係を示す図である。
【図１１】ブロック情報記憶部のデータ構造例を示す図である。
【図１２】のりしろ情報記憶部のデータ構造例を示す図である。
【図１３】第２の実施の形態におけるコアによる計算領域内の物理量計算処理の手順を示すフローチャートである。
【図１４】ブロック選択の優先順を示す図である。
【図１５】ブロック計算処理の手順を示すフローチャートである。
【図１６】計算領域内のすべてのブロックの物理量の計算終了後に複数のコアが同時にのりしろ交換処理を実行した場合のコアの処理内容の推移を示す図である。
【図１７】第２の実施の形態における各コアの処理内容の推移を示す図である。
【図１８】第３の実施の形態における物理シミュレーション時のプロセッサモジュール内での処理機能を示す図である。
【図１９】第３の実施の形態におけるのりしろ情報記憶部のデータ構造例を示す図である。
【図２０】第３の実施の形態に係るコアによる計算領域内の物理量計算処理の手順を示すフローチャートである。
【図２１】第３の実施の形態における各コアの処理内容の推移を示す図である。
【発明を実施するための形態】
【００１３】
以下、本実施の形態について図面を参照して説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係る並列計算装置の機能を示すブロック図である。ここで、並列計算装置が有するプロセッサ等の計算ノードが計算を行う要素点の全体集合を「計算領域」と定義する。計算領域４内の計算を複数の演算処理部としてのコア１ａ，１ｂ，・・・，１ｎを有する演算処理装置としてのプロセッサ１で並列実行する並列計算装置が提供される。
【００１４】
計算領域４は複数の計算単位領域に区切られている。また計算領域４には、少なくとも１つの計算単位領域を包含する計算結果送信領域４ａ，４ｂ，４ｃ，４ｄが複数設けられている。プロセッサ１内の複数のコア１ａ，１ｂ，・・・，１ｎそれぞれには、計算領域４内の未計算の計算単位領域を順次選択する計算単位領域選択手段１ａａ，１ｂａ，・・・，１ｎａが設けられている。またプロセッサ１内の複数のコア１ａ，１ｂ，・・・，１ｎそれぞれには、計算単位領域選択手段１ａａ，１ｂａ，・・・，１ｎａで選択された計算単位領域内の計算を実行する計算手段１ａｂ，１ｂｂ，・・・，１ｎｂが設けられている。さらに計算単位領域選択手段１ａａ，１ｂａ，・・・，１ｎａは、複数のコア１ａ，１ｂ，・・・，１ｎそれぞれからアクセス可能な記憶装置２に計算結果２ａ，２ｂ，・・・を書き込む。プロセッサ１内の少なくとも１つのコア１ｎには、計算結果送信領域４ａ，４ｂ，４ｃ，４ｄ内の計算結果の記憶装置２からの取得および送信処理を実行する計算結果送信手段１ｎｃが設けられている。計算結果送信手段１ｎｃによる計算結果取得および送信処理は、複数の計算結果送信領域４ａ，４ｂ，４ｃ，４ｄについて異なる時間帯に実行される。図１の例では、他のプロセッサ３ａ，３ｂ，３ｃ，３ｄに計算結果が送信される。
【００１５】
このような並列計算装置によれば、複数のコア１ａ，１ｂ，・・・，１ｎそれぞれの計算単位領域選択手段１ａａ，１ｂａ，・・・，１ｎａにより、計算領域４内の未計算の計算単位領域が順次選択される。また複数のコア１ａ，１ｂ，・・・，１ｎそれぞれの計算手段１ａｂ，１ｂｂ，・・・，１ｎｂにより、計算単位領域選択手段１ａａ，１ｂａ，・・・，１ｎａで選択された計算単位領域内の計算が実行される。また計算手段１ａｂ，１ｂｂ，・・・，１ｎｂにより、複数のコア１ａ，１ｂ，・・・，１ｎそれぞれからアクセス可能な記憶装置２に計算結果２ａ，２ｂ，・・・が書き込まれる。コア１ｎの計算結果送信手段１ｎｃにより、計算結果送信領域４ａ，４ｂ，４ｃ，４ｄ内の計算結果の記憶装置２からの取得および送信処理が、複数の計算結果送信領域４ａ，４ｂ，４ｃ，４ｄについて異なる時間帯に実行される。
【００１６】
このように、計算結果の送信が、複数の計算結果送信領域４ａ，４ｂ，４ｃ，４ｄについて異なる時間帯で実行されることで、計算結果の送信処理が、複数同時に実行されることによる処理効率の低下が防止される。例えば、計算結果送信領域４ａ，４ｂ，４ｃ，４ｄ内の計算単位領域の計算結果がプロセッサ３ａ，３ｂ，３ｃ，３ｄに送信されるものとする。このとき、計算結果を送信する場合、例えば送信対象の計算結果が、主記憶装置内の連続の記憶領域に格納される。そして計算結果が主記憶装置からプロセッサ３ａ，３ｂ，３ｃ，３ｄに送信される。ここで、仮に複数の送信処理が同時並行で実行された場合、主記憶装置への計算結果の書き出し処理による主記憶装置へのアクセスが競合して、個々の処理効率を低下させる。他方、図１に示した並列計算装置であれば、送信処理が同時並行で実行されることがないため、マルチコアのプロセッサ１における並列処理実行時の計算結果の送信を効率よく実行できる。
【００１７】
今後開発されるスーパーコンピュータは超並列化が進むものと考えられ、プロセッサのマルチコア化は処理の超並列化に大きく寄与する。超並列化が進むと、アプリケーションプログラムを領域分割し隣接する線または面を通信する局所通信により高速化を図ることがより重要になる。第１の実施の形態の技術を用いてマルチコアのプロセッサの処理効率を向上させることでプロセッサ間の通信が能力を向上させることができ、今後の超並列化の促進に寄与することができる。
【００１８】
〔第２の実施の形態〕
第２の実施の形態は、マルチコアプロセッサを用いた物理シミュレーションを実行する際に、プロセッサ間でのデータ交換の処理効率を向上させるものである。まず、物理シミュレーションにおいてプロセッサ間で交換されるデータについて説明する。
【００１９】
図２は、物理シミュレーションの解析空間を示す図である。多次元の物理シミュレーションの解析空間３０は、多次元の計算領域が格子で細かく区切られ、格子点（計算対象の要素点）における物理量が計算される。また解析空間３０は、複数の計算領域に分割される。各計算領域はプロセッサに割り当てられる。プロセッサは、割り当てられた計算領域内の空間内を対象として計算を行う。複数のプロセッサが個別の計算領域内の物理量を並列に計算をすることで、解析空間３０内の物理シミュレーションの並列計算が行われる。
【００２０】
差分法を用いた物理シミュレーションでは、シミュレーションの時刻を進めながら物理量が計算され、物理量の時間変化が解析される。計算される物理量は、電場、磁場、温度、風速など様々である。所定のシミュレーション時刻の解析空間３０内の物理量の計算は、直前のシミュレーション時刻における解析空間３０内の物理量を用いて実行される。このとき、１つの計算領域内の物理量の計算には、その計算領域内の直前のシミュレーション時刻の物理量に加え、隣接する領域（格子点）での直前のシミュレーション時刻の物理量（境界データ）が使用される。境界データには解析対象計算領域の周囲の物理量が反映されている。そのため、境界データを用いた演算を行うことで、計算領域間の互いの影響を反映させた解析が可能となる。
【００２１】
このように各計算領域内の物理量の計算を差分法で処理する場合、各プロセッサが担当する領域の境界データを隣接するプロセッサとお互いに交換しあう処理が行われる。このようなプロセッサ間での境界データの交換は「のりしろ交換」と呼ばれる。また１つの計算領域４０におけるのりしろ交換対象の領域は、のりしろ領域４１〜４４と呼ばれる。
【００２２】
図３は、のりしろ交換の様子を示す図である。シミュレーション時刻で１ステップ分の解析が終了すると、時刻を１ステップ進めた次のシミュレーション時刻の解析を行うために、計算領域４０，４０ａ，４０ｂ間でのりしろ交換が行われる。例えば、計算領域４０は、計算領域４０ａとの間でのりしろ交換をすべきのりしろ領域４１と、計算領域４０ｂとの間でのりしろ交換をすべきのりしろ領域４３とを有している。計算領域４０ａは、計算領域４０との間でのりしろ交換をすべきのりしろ領域４０ｘを有している。計算領域４０ｂは、計算領域４０との間でのりしろ交換をすべきのりしろ領域４０ｙを有している。
【００２３】
のりしろ領域４１，４３，４０ｘ，４０ｙは、送信領域と受信領域とに分かれる。各計算領域４０，４０ａ，４０ｂの外周に隣接する領域が受信領域となり、その受信領域の内側に隣接する領域が送信領域となる。各計算領域４０，４０ａ，４０ｂに対して計算された送信領域内の物理量が、境界データとして隣接する他の計算領域の受信領域に転送される。
【００２４】
複数のプロセッサで解析を行う場合、計算領域４０，４０ａ，４０ｂそれぞれの内部の領域の物理量は、個別のプロセッサで計算される。従ってのりしろ交換は、プロセッサ間の通信によって実現される。
【００２５】
図４は、のりしろ交換のためのプロセッサでのデータ通信を示す図である。のりしろ交換は、（１）送信領域内の境界データのパッキング、（２）パッキングされたデータの送信と受信、（３）受信したデータのアンパッキングといった３段階の処理が行われる。
【００２６】
ここでデータのパッキング処理とは、送信領域内の全てのブロックの演算が終了した場合に、のりしろ領域の内の送信領域に含まれる全てのブロックの物理量のデータを一塊にまとめる処理である。データを一塊にまとめるとは、データを連続した記憶領域に格納することである。
【００２７】
またデータのアンパッキング処理とは、他のプロセッサから受信した境界データを受信領域内の各ブロックの物理量に分離し、各ブロックの物理量の設定領域に格納する処理である。受信したデータ内の物理量を格納する領域が不連続であれば、アンパッキングにおいて不連続な領域に物理量を示す値が格納される。
【００２８】
図４に示すように複数のプロセッサ３１〜３３が通信路３４で接続されている場合を想定する。プロセッサ３２は、プロセッサ３１，３３との間でのりしろ交換を行う。このとき、プロセッサ３１は計算領域Ｘの計算を行い、プロセッサ３２は計算領域Ｙの計算を行い、プロセッサ３３は計算領域Ｚの計算を行うものとする。また計算領域Ｙは、計算領域Ｘ，Ｚに挟まれた位置の計算領域であるものとする。この場合、プロセッサ３２では、プロセッサ３１に送信するデータのパッキング、プロセッサ３１から受信したデータのアンパッキング、プロセッサ３３に送信するデータのパッキング、およびプロセッサ３３から受信したデータのアンパッキングが発生する。
【００２９】
次に、図２に示す計算領域４０のように、４面にのりしろ領域４１〜４４がある場合ののりしろ交換時のパッキング・アンパッキング処理について考える。
図５は、境界データのパッキングとアンパッキングとを示す図である。図５に示すように、計算領域４０は格子によってさらに分割されている。これにより、より細かな領域が生成される。この領域をブロックと呼ぶ。プロセッサ内のコアが、担当計算領域内のブロックごとの物理量を計算する。ブロックのサイズは、例えばコア内の一次または二次キャッシュメモリのサイズなどに応じて決められる。図５に示すように、のりしろ領域４１〜４４内にも複数のブロックが含まれる。
【００３０】
ここで、計算領域４０内のブロックは多次元配列である。一方、各ブロックの物理量を格納するメモリ空間５０は、アドレスが１次元である。そのため、のりしろ領域内の各ブロックの物理量を格納するメモリ空間５０上の配列は、不連続となる場合がある。
【００３１】
例えば、計算領域４０内の横方向ｘ番目、縦方向ｙ番目のブロックのデータを、ｐ[x][y]と表す。メモリ空間５０では、縦方向の番号が小さいブロックから順に、記憶領域のアドレスが割り当てられているものとする。すると、のりしろ領域４１，４３のように、横方向に連続した領域であれば、メモリからデータをまとめて読み出し、パッキングを行うことができる。アンパッキングの際には、受信した境界データをメモリ内の連続した領域に書き込めばよい。そのためのりしろ領域４１，４３のパッキング／アンパッキング処理は、短時間で実行可能である。
【００３２】
他方、のりしろ領域４２，４４のように、縦方向に連続した領域については、メモリ内の不連続の領域に各ブロックのデータが配置されている。ここで、メモリへのアクセス方式としてストライドアクセスと呼ばれる方式がある。ストライドアクセスでは、メモリからの読み込み時には、連続の所定長（例えば１ライン分）のデータをまとめてキャッシュメモリに転送する。ところが、メモリからキャッシュへののりしろ領域４２，４４のデータ読み出しについては、データが不連続であるためストライドアクセスとなりキャッシュラインのアラインが崩れるため、１ラインに不要なデータが入ってしまい、不要なデータでキャッシュメモリが圧迫される。その結果、キャッシュミスヒットが多くなる。そのため、のりしろ領域４２，４４については、メモリからのデータ読み出しアクセス回数が多くなり、パッキング／アンパッキング処理に時間がかかる。
【００３３】
ここで解析空間３０全体のデータ解析に要する時間と、データのパッキング／アンパッキング処理に要する時間との比率を考察する。まず、１つのブロック内の物理量を１つのプロセッサ（マルチプロセッサ内の１ブロック）が算出するのに要する時間を、τとする。
【００３４】
例えば計算領域を、一辺のブロック数をｎ（ｎは自然数）とする３次元であり、プロセッサ数をＰ（Ｐは自然数）とする。この場合、解析領域全体の物理量の計算に要する計算処理時間がτ（ｎ3／Ｐ）である。これに対し、データパッキング・アンパッキングの処理時間はτ（（ｎ3／Ｐ）2/3）程度となる。そのため、計算処理時間に対するデータパッキング・アンパッキング処理時間の比率はＰ1/3／ｎとなる。その結果、プロセッサ台数が千を超えるような超並列計算機では計算時間に対するデータパッキング・アンパッキングの処理時間の比率が増すことになる。
【００３５】
さらに一辺のブロック数がｎの多次元空間を考えた場合、超並列化が進みプロセッサ数が増加すると、領域分割したときの個々のプロセッサの担当領域は小さくなる。それに従い個々のプロセッサが処理する計算量は小さくなる。このとき、のりしろの幅はプロセッサ数とは無関係で固定値である。そのため、のりしろ交換の領域サイズの割合は全計算領域に対して大きくなり、のりしろ交換処理の比重は大きくなっていく。
【００３６】
図６は、プロセッサ数に応じたのりしろ領域の占有率を示す図である。図６の例では、１０，０００，０００の格子点がある空間（例えば、ｘ、ｙ、ｚの各軸方向にそれぞれ５００、５００、４０の格子点）を想定している。この空間をプロセッサ数に応じた計算領域に分割し、複数の計算領域それぞれの物理量を複数のプロセッサで並列計算する。各計算領域は、２次元平面（ｘ−ｙ平面）に並べられているものとする。また、のりしろ交換で送受信する領域の幅は、格子点３つ分であるものとする。
【００３７】
この場合、プロセッサ数が１６であれば、１プロセッサの計算格子点数は６２５０００であり、のりしろ領域内の格子点の割合は０．０９である。他方、プロセッサ数が１０２４であれば、１プロセッサの計算格子点数は９７６６であり、のりしろ領域内の格子点の割合は０．６２である。このように、プロセッサ数の増加に従って、のりしろ領域内の格子点が全体に占める割合が増加する。これはプロセッサ数が増加すれば、のりしろ交換に要する処理量が増加することを意味する。換言すると、のりしろ交換処理の負荷を軽減できれば、並列処理に使用するプロセッサ数を増加させることによる処理速度の向上効果が促進される。
【００３８】
そこで、マルチコアプロセッサにおけるのりしろ交換処理の負荷の軽減について考察する。前述のように、のりしろ交換の主な処理の一つはデータパッキング・アンパッキング処理である。この処理は計算処理が終了したのりしろ部分のデータを新たに通信用データに作成するデータコピーの処理である。データパッキング・アンパッキングの処理中にプロセッサ内で主に行われる詳細な処理は、ロード・ストア命令で行われる。ロード命令は、キャッシュメモリまたはメインメモリからのデータの読み込みを行う処理である。ストア命令は、キャッシュメモリまたはメインメモリへのデータの書き込みを行う処理である。
【００３９】
データパッキング・アンパッキング処理をマルチコア環境ですべてのコアを使って処理しようとすると、同時に複数のコアからのロード・ストアが多発する可能性がある。２次キャッシュが共有であるときは全コアからの同時アクセスによりキャッシュが圧迫される。パッキングしたデータをメモリに書き出すためのメモリへのアクセス集中も発生してしまう。
【００４０】
また、それぞれののりしろ領域のデータパッキング・アンパッキング処理では、例えば３次元空間の場合６面ののりしろ領域が処理対象となる。そのうち４面分のメモリアクセスについては、ストライドアクセスによってキャッシュラインのミスヒットが多発し、メモリへのアクセスがデータパッキング・アンパッキングの間に多くなる。その結果、プロセッサの使用効率の悪化を招く。つまり、データパッキング・アンパッキング処理のメモリアクセス処理が、全処理時間に大きく影響することが分かる。
【００４１】
特に従来の物理シミュレーションでは、のりしろ交換処理（データのパッキングと送信とデータアンパッキング）は計算領域すべてを計算した後に実行されていた。そのため、のりしろ交換領域が複数ある場合、それぞれのパッキング・アンパッキングを複数のコアで並列実行しても、パッキング・アンパッキングしたデータのメモリとの間の転送処理が重なり、処理効率が低下していた。
【００４２】
そこで第２の実施の形態では、データ送受信する際のデータパッキング・アンパッキングのメモリアクセス処理の効率を高め、システム全体での処理の効率化を図る。
図７は、第２の実施の形態に用いるコンピュータのハードウェア構成例を示す図である。コンピュータ１０は、複数のプロセッサモジュール１００，１００ａ，・・・を有している。プロセッサモジュール１００，１００ａ，・・・は互いにバス１４で接続されている。また、バス１４には、ハードディスクドライブ（ＨＤＤ:Hard Disk Drive）１１、光学ドライブ装置１２、および通信インタフェース１３が接続されている。
【００４３】
ＨＤＤ１１は、内蔵したディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ１１は、コンピュータ１０の二次記憶装置として使用される。ＨＤＤ１１には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、二次記憶装置としては、フラッシュメモリなどの半導体記憶装置を使用することもできる。
【００４４】
光学ドライブ装置１２は、レーザ光などを利用して、光ディスク１５に記録されたデータの読み取りを行う。光ディスク１５は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク１５には、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。
【００４５】
通信インタフェース１３は、ネットワーク２０に接続されている。通信インタフェース１３は、ネットワーク２０を介して、サーバ２１などの他のコンピュータとの間でデータの送受信を行う。
【００４６】
図８は、プロセッサモジュールの内部構造の一形態を示す図である。プロセッサモジュール１００は、プロセッサ１１０とメモリ１２０とを有している。プロセッサ１１０は、複数のコア１１１〜１１４とキャッシュメモリ１１５とを有している。各コア１１１〜１１４は、キャッシュメモリ１１５に接続されている。コア１１１〜１１４にはそれぞれ「＃０」〜「＃３」のコア番号が付与されている。
【００４７】
同様にプロセッサモジュール１００ａは、プロセッサ１１０ａとメモリ１２０ａとを有している。プロセッサ１１０ａは、複数のコア１１１ａ，１１２ａ，１１３ａ，１１４ａとキャッシュメモリ１１５ａとを有している。各コア１１１ａ，１１２ａ，１１３ａ，１１４ａは、キャッシュメモリ１１５に接続されている。コア１１１ａ，１１２ａ，１１３ａ，１１４ａにはそれぞれ「＃０」〜「＃３」のコア番号が付与されている。
【００４８】
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。
図９は、第２の実施の形態における物理シミュレーション時のプロセッサモジュール内での処理機能を示す図である。プロセッサモジュール１００では、コア１１１〜１１４ごとのスレッド１３１〜１３４が生成される。スレッド１３１〜１３４は、プロセッサ１１０が実行する処理の実行単位である。
【００４９】
スレッド１３１は、計算ブロック選択部１３１ａと計算部１３１ｂとを有する。計算ブロック選択部１３１ａは、プロセッサモジュール１００に割り当てられた計算領域の中から、スレッド１３１で計算するブロックを順次選択する。計算部１３１ｂは、計算ブロック選択部１３１ａが選択したブロック内の物理量を計算する。
【００５０】
スレッド１３１と同様に他のスレッド１３２，１３３，１３４も計算ブロック選択部１３２ａ，１３３ａ，１３４ａと計算部１３２ｂ，１３３ｂ，１３４ｂとを有している。またスレッド１３４のみ、のりしろ交換処理部１３４ｃを有している。
【００５１】
のりしろ交換処理部１３４ｃは、他のプロセッサモジュール１００ａ，・・・との間でのりしろ交換を行う。具体的には、のりしろ交換処理部１３４ｃは、送信領域のデータのパッキング、パッキングしたデータの転送、および受信したデータの受信領域へのアンパッキングを行う。
【００５２】
また、プロセッサモジュール１００は、情報の記憶機能として、ブロック情報記憶部１４１、のりしろ情報記憶部１４２、のりしろ交換コア情報記憶部１４３、および物理量記憶部１４４を有している。
【００５３】
ブロック情報記憶部１４１は、プロセッサモジュール１００が解析を担当する計算領域内の各ブロックについて、のりしろ領域内のブロックか否か、計算が終了したか否かといった情報を記憶する記憶機能である。例えばキャッシュメモリ１１５またはメモリ１２０の記憶領域の一部が、ブロック情報記憶部１４１として使用される。
【００５４】
のりしろ情報記憶部１４２は、のりしろ領域の状態を示す情報を記憶する記憶領域である。例えばキャッシュメモリ１１５またはメモリ１２０の記憶領域の一部が、のりしろ情報記憶部１４２として使用される。
【００５５】
のりしろ交換コア情報記憶部１４３は、のりしろ交換を実行するコアの識別子を記憶する記憶領域である。図９の例では、スレッド１３４を実行するコア１１４のＩＤ（コア＃３）が、のりしろ交換コア情報記憶部１４３に予め設定される。例えばキャッシュメモリ１１５またはメモリ１２０の記憶領域の一部が、のりしろ交換コア情報記憶部１４３として使用される。
【００５６】
物理量記憶部１４４は、プロセッサモジュール１００が解析を担当する計算領域内の各ブロックの物理量を記憶する記憶機能である。物理量記憶部１４４には、物理シミュレーションにおける現在の時刻より１ステップ前のシミュレーション時刻の物理量と、現在のシミュレーション時刻の物理量とが格納される。１ステップ前のシミュレーション時刻の物理量のうち、のりしろ領域内の受信領域の物理量は、他のプロセッサモジュールから取得した値である。受信領域以外の物理量は、各スレッド１３１〜１３４が算出した値である。現在のシミュレーション時刻の各ブロックの物理量としては、各スレッド１３１〜１３４によるブロックの物理量の計算結果が随時書き込まれる。例えばキャッシュメモリ１１５またはメモリ１２０の記憶領域の一部が、物理量記憶部１４４として使用される。
【００５７】
ここで、第２の実施の形態における解析空間内のブロックの分け方について説明する。
図１０は、解析空間とブロックとの関係を示す図である。図１０には、シミュレーションの解析空間３０を２次元配列の計算領域に分割した例である。計算領域４０は、２次元分割してプロセス並列処理を行ったときの１プロセス（１ノード）の処理領域を示す。解析空間３０は、複数の計算領域に分けられる。例えばプロセッサモジュール１００，１００ａ，・・・と同数の計算領域が生成される。プロセッサモジュール１００，１００ａ，・・・には、解析を担当する計算領域が割り当てられる。以下の説明では、プロセッサモジュール１００が解析を担当する領域として、計算領域４０が割り当てられているものとする。
【００５８】
解析空間３０は細かな格子で区切られている。プロセッサモジュール１００は、解析を担当する計算領域４０内の格子点における物理量を計算する。矩形の計算領域４０の上下左右の辺に沿って４つののりしろ領域が設定される。各のりしろ領域のうち、計算領域４０の外周に接する領域が受信領域であり、その内側の領域が送信領域４１ａ，４２ａ，４３ａ，４４ａである。のりしろ領域には識別子（のりしろＩＤ）が付与される。送信領域４１ａを含むのりしろ領域ののりしろＩＤは「１」である。送信領域４２ａを含むのりしろ領域ののりしろＩＤは「２」である。送信領域４３ａを含むのりしろ領域ののりしろＩＤは「３」である。送信領域４４ａを含むのりしろ領域ののりしろＩＤは「４」である。
【００５９】
計算領域４０は、複数のブロック（さいの目）に分割される。１つのブロックのサイズは、例えばコア１１１〜１１４内の一次キャッシュメモリのサイズに合わせられる。これによってブロック単位の計算処理の際に、ブロック内のデータをまとめてコア内のキャッシュメモリ上に格納でき、処理の効率化を図ることが可能となる。
【００６０】
図１０の例では、縦横１１個ずつのブロックに分割されている。従って、計算領域４０内のブロック数は１２１（１１×１１）となる。プロセッサモジュール１００内の各コア１１１〜１１４は、計算対象のブロックを順次選択し、選択したブロック内の格子点における物理量を計算する。
【００６１】
このような計算を実行するために、以下のようなデータがプロセッサモジュール１００内で保持される。
図１１は、ブロック情報記憶部のデータ構造例を示す図である。ブロック情報記憶部１４１には、ブロック管理テーブル１４１ａと処理ブロック数情報１４１ｂとが格納されている。ブロック管理テーブル１４１ａには、ブロックＩＤ、のりしろＩＤ、および計算処理終了フラグが設定されている。
【００６２】
ブロックＩＤの欄には、計算領域４０内のブロックの識別子（ブロックＩＤ）が設定される。ブロックＩＤの変数名は"bid"である。
のりしろＩＤの欄には、対応するブロックがのりしろの送信領域か否かを示す符号が設定される。のりしろの送信領域内のブロックの場合、のりしろＩＤの欄に、そのブロックが属するのりしろ領域のＩＤ（のりしろＩＤ）が設定される。なお、のりしろ領域に属さないブロックには、のりしろＩＤの欄に「−１」が設定される。各ブロックが属するのりしろを示すのりしろＩＤの変数名は"Blk[bid]"である。
【００６３】
計算処理終了フラグの欄には、対応するブロックの物理量の計算が終了したか否かを示すフラグ（計算処理終了フラグ）が設定される。計算が終了していない場合、計算処理終了フラグに「off」が設定される。計算が終了した場合、計算処理終了フラグに「on」が設定される。計算処理終了フラグの値は、シミュレーション時刻が１ステップ進められたときに、すべて「off」に初期化される。計算処理終了フラグの変数名は"down[bid]"である。
【００６４】
なお図１１の例では、ブロック情報記憶部１４１内に各ブロックの情報がテーブル形式のデータ構造で情報が記憶されているが、他のデータ構造であってもよい。例えば各ブロックＩＤから、そのブロックＩＤで示されるブロックののりしろＩＤと計算処理終了フラグへのポインタを設定することで、各情報を関連付けることもできる。
【００６５】
処理ブロック数情報１４１ｂは、物理量の計算処理が終了したブロックの総数（処理ブロック数）である。処理ブロック数は、シミュレーション時刻が１ステップ進められたときに、０に初期化される。処理ブロック数の変数名は"calcblknum"である。
【００６６】
図１２は、のりしろ情報記憶部のデータ構造例を示す図である。のりしろ情報記憶部１４２は、個々ののりしろに対して、いくつのブロックを処理したのかを表し、のりしろ交換コアに対してのりしろ交換のタイミングを認識させるための情報がテーブル形式で登録されている。のりしろ情報記憶部１４２には、のりしろ管理テーブル１４２ａが格納さえている。のりしろ管理テーブル１４２ａには、のりしろＩＤ、ブロック数、処理ブロック数、交換処理済フラグ、およびブロックＩＤの欄が設けられている。各欄の横方向に並べられた情報が互いに関連付けられ、のりしろ情報を示すレコードとなる。なお、のりしろ情報のレコードは、のりしろの数分登録される。第２の実施の形態では、図１０に示すようにのりしろの数は横（ｘ）方向の正負、縦（ｙ）方向の正負の４方向にのりしろ領域が設けられる。従って、のりしろ管理テーブル１４２ａには、４つのレコードが登録されている。
【００６７】
のりしろＩＤの欄には、のりしろ領域の識別子（のりしろＩＤ）が設定される。のりしろ管理テーブル内ののりしろＩＤの変数名は"hid"である。
ブロック数の欄には、対応するのりしろＩＤで示されるのりしろ領域の送信領域に属するブロック数が設定される。ブロック数の変数名は、"halo[hid].blknum"である。
【００６８】
処理ブロック数の欄には、対応するのりしろＩＤで示されるのりしろ領域の送信領域の属するブロックのうち、物理量の計算処理が終了したブロックの数（処理ブロック数）が設定される。第２の実施の形態では、図１０に示すように１つののりしろ領域の送信領域に属するブロック数は１１である。処理ブロック数の変数名は"halo[hid].calcnum"である。
【００６９】
交換処理済フラグの欄には、のりしろ領域のデータについて、隣接する計算領域が割り当てられたプロセッサとの間でのりしろ交換が終了したか否かを示すフラグ（交換処理済フラグ）が設定される。のりしろ交換が未終了であれば、交換処理済フラグには"off"が設定される。交換処理済みフラグの変数名は"halo[hid].down"である。
【００７０】
ブロックＩＤの欄には、対応するのりしろＩＤで示されるのりしろ領域の送信領域に属するブロックのブロックＩＤが設定される。のりしろ領域のブロックＩＤの変数名は"halo[hid].id[blocknum]"である。
【００７１】
なお図１２の例では、のりしろ情報記憶部１４２内にテーブル形式のデータ構造で情報が記憶されているが、他のデータ構造であってもよい。例えば各のりしろＩＤから、そののりしろＩＤで示されるのりしろのブロック数、処理ブロック数、交換処理済フラグ、およびブロックＩＤへのポインタを設定することで、各情報を関連付けることもできる。
【００７２】
以上のような構成のプロセッサモジュール１００によって、物理シミュレーションの時刻が１ステップ進められるごとに、計算領域４０内の物理量の計算およびのりしろ交換が行われる。その際、プロセッサ１１０内の各コア１１１〜１１４が、順次ブロックを選択して、そのブロック内の物理量を計算する。
【００７３】
図１３は、第２の実施の形態におけるコアによる計算領域内の物理量計算処理の手順を示すフローチャートである。なおこの処理の開始前には、計算対象のシミュレーション時刻の１ステップ前の時刻における計算領域４０内の格子点の物理量（あるいは物理量の初期値）が、物理量記憶部１４４に格納されている。また物理量記憶部１４４内のデータはキャッシュメモリ１１５に読み込まれている。以下、スレッド１３４が実行する場合を想定し、図１３に示す処理をステップ番号に沿って説明する。
【００７４】
［ステップＳ１１］計算ブロック選択部１３４ａと計算部１３４ｂとが連係して、１つのブロック内の全格子点の物理量を計算する。この処理の詳細は後述する（図１５参照）。
【００７５】
［ステップＳ１２］計算部１３４ｂは、処理したブロック数をカウントアップする。具体的には、計算部１３４ｂは、処理ブロック数を示す変数"calcblknum"の値をインクリメントする。
【００７６】
［ステップＳ１３］計算部１３４ｂは、処理したブロックがのりしろ領域内の送信領域に属するブロックか否かを判断する。具体的には計算部１３４ｂは、ブロック管理テーブル１４１ａにおける処理したブロックののりしろＩＤ（Blk[bid]）を参照する。参照したのりしろＩＤ（変数"blk[bid]"）の値が「−１」以外であれば、計算部１３４ｂは、処理したブロックがのりしろ領域の送信領域であると判断する。のりしろ領域の送信領域に属するブロックであれば、処理がステップＳ１４に進められる。のりしろ領域の送信領域に属するブロックでなければ、処理がステップＳ１５に進められる。
【００７７】
［ステップＳ１４］計算部１３４ｂは、処理したブロックが属するのりしろ領域の処理済ブロック数をカウントアップする。具体的には計算部１３４ｂは、ブロック管理テーブル１４１ａにおける処理したブロックののりしろＩＤ（Blk[bid]）を取得する。次に計算部１３４ｂは、取得したのりしろＩＤと同じのりしろＩＤ（hid）が設定されたレコードをのりしろ管理テーブル１４２ａから検索する。そして計算部１３４ｂは、検索で合致したレコードの処理ブロック数（halo[hid].calcnum）の値をインクリメントする。
【００７８】
［ステップＳ１５］計算部１３４ｂは、自身がのりしろ交換コアか否かを判断する。具体的には、のりしろ交換コア情報記憶部１４３に設定されているコアＩＤと、自身のコアＩＤとが一致した場合に、のりしろ交換コアであると判断する。のりしろ交換コアであれば、処理がステップＳ１６に進められる。のりしろ交換コアでなければ、処理がステップＳ２０に進められる。
【００７９】
［ステップＳ１６］のりしろ交換処理部１３４ｃは、すべてののりしろ領域に関してのりしろ交換済みか否かを判断する。具体的にはのりしろ交換処理部１３４ｃは、のりしろ管理テーブル１４２ａの各レコードにおける交換処理済フラグ（halo[hid].down）を参照する。少なくとも１つの交換処理済フラグが"off"であれば、のりしろ交換が未終了ののりしろ領域があると判断する。のりしろ交換を行っていないのりしろ領域があれば、処理がステップＳ１７に進められる。すべてののりしろ領域についてのりしろ交換が終了していれば、処理がステップＳ２０に進められる。
【００８０】
［ステップＳ１７］のりしろ交換処理部１３４ｃは、のりしろ交換が未終了ののりしろ領域について、送信領域内のすべてのブロックの計算が終了したか否かを判断する。具体的にはのりしろ交換処理部１３４ｃは、ステップＳ１６で交換処理済フラグが"off"であったのりしろ領域のブロック数（halo[hid].blknum）と処理済ブロック数（halo[hid].calcnum）とを比較し、一致した場合に計算が終了したと判断する。計算が終了したのりしろ領域がある場合、処理がステップＳ１８に進められる。計算が終了したのりしろ領域がなければ、処理がステップＳ２０に進められる。
【００８１】
［ステップＳ１８］のりしろ交換処理部１３４ｃは、計算が終了したのりしろ領域の送信領域に属するブロックの計算結果をパッキングする。具体的には、のりしろ交換処理部１３４ｃは、のりしろ管理テーブル１４２ａを参照し、ステップＳ１７において計算が終了したと判断したのりしろ領域のブロックＩＤ（halo[hid].id[blocknum]）を取得する。次にのりしろ交換処理部１３４ｃは、取得したブロックＩＤに対応するブロックの物理量を示すデータを物理量記憶部１４４から抽出し、メモリ１２０内の連続の記憶領域に格納する。
【００８２】
［ステップＳ１９］のりしろ交換処理部１３４ｃは、ステップＳ１８でパッキングしたデータを、該当のりしろ領域を介して隣接する計算領域が割り当てられた他のプロセッサを有するモジュールに送信する。送信されたデータは、送信先のプロセッサモジュールにおけるのりしろ交換部によってアンパッキングされる。その後、のりしろ交換処理部１３４ｃは、パッキングおよび送信処理を行ったのりしろ領域の交換済フラグ（halo[hid].down）を"on"に変更する。
【００８３】
［ステップＳ２０］計算部１３４ｂは、計算領域内のすべてのブロックを処理したか否かを判断する。具体的には計算部１３４ｂは、処理ブロック数情報１４１ｂに示される処理ブロック数（calcblknum）が、計算領域内のブロック数（図１０の例では１２１）に達した場合、すべてのブロックを処理したものと判断する。すべてのブロックの処理が終了していれば、計算処理を終了する。未処理のブロックがあれば、処理がステップＳ１１に進められる。
【００８４】
このように、のりしろ交換コア情報記憶部１４３にコアＩＤが設定されているコアのみが、のりしろ交換コアとしてのりしろ交換を実行する。すなわち、のりしろ交換コアは、のりしろ交換が未処理であり、のりしろ領域の送信領域の計算が終了したブロックの有無を判断し、該当するブロックを検出すると、のりしろ交換処理を開始する。のりしろ交換コアは今まで行ってきた計算処理を中断し、ほかのコアとは異なるのりしろ交換の処理を開始することとなる。他方、のりしろ交換コア以外のコアでは、ステップＳ１６〜Ｓ１９の処理は行われず、ブロック内の格子点の物理量計算が繰り返し行われる。
【００８５】
のりしろ交換処理では、まずデータのパッキング、パッキングしたデータの送信処理が行われる。送信相手のプロセッサモジュールにおいて、データの受信処理、および受信データのアンパッキングが行われる。こののりしろ交換の一連の処理が終了すると、のりしろ交換コアは、他に計算が終了しのりしろ交換が未処理ののりしろ領域があれば、同様に該当のりしろ領域ののりしろ交換処理を行う。他方、のりしろ交換の準備が整ったのりしろ領域がない場合は、のりしろ交換コアは、再び計算専用コアと同じ計算処理に戻る。
【００８６】
次に計算対象として選択するブロックの順番について説明する。
図１４は、ブロック選択の優先順を示す図である。第２の実施の形態では、計算領域４０内のブロックについて、選択する優先順が設けられる。のりしろ領域の送信領域に属するブロックは優先順が高く、それ以外のブロックは優先順が低い。計算ブロック選択部１３４ａは、優先順が高い領域のブロックを優先的に選択し、計算部１３４ｂに計算させる。
【００８７】
図１５は、ブロック計算処理の手順を示すフローチャートである。以下、図１５に示す処理をステップ番号に沿って説明する。
［ステップＳ３１］計算ブロック選択部１３４ａは、計算領域４０内の未処理のブロックを１つ選択する。具体的には計算ブロック選択部１３４ａは、ブロック管理テーブル１４１ａを参照し、計算処理終了フラグ（down[bid]）が"off"のブロックを１つ選択する。例えば計算ブロック選択部１３４ａは、ブロックＩＤの値が小さいブロックから順番にブロックを選択する。このとき計算ブロック選択部１３４ａは、選択対象のブロックＩＤが計算領域４０内のブロック数に達した後は、未処理のブロックがまだ存在すれば、再度ブロックＩＤの小さい順に未処理のブロックを選択する。
【００８８】
［ステップＳ３２］計算ブロック選択部１３４ａは、選択したブロックがのりしろ領域の送信領域に属するブロックか否かを判断する。具体的には計算ブロック選択部１３４ａは、選択したブロックののりしろＩＤ（Blk[bid]）を参照し、値が−１以外であれば、のりしろ領域内のブロックであると判断する。のりしろ領域内のブロックであれば、処理がステップＳ３４に進められる。のりしろ領域内のブロックでなければ、処理がステップＳ３３に進められる。
【００８９】
［ステップＳ３３］計算ブロック選択部１３４ａは、のりしろ領域の送信領域に属するすべてのブロックを処理したか否かを判断する。具体的には計算ブロック選択部１３４ａは、のりしろ管理テーブル１４２ａを参照する。そして計算ブロック選択部１３４ａは、すべてののりしろ領域について、ブロック数（halo[hid].blknum）と処理ブロック数（halo[hid].calcnum）とが一致している場合、すべての該当ブロックの処理が終了しているものと判断する。のりしろ領域の送信領域に属するすべてのブロックの処理が終了していれば、処理がステップＳ３４に進められる。のりしろ領域の送信領域に属する未処理のブロックが存在すれば、処理がステップＳ３１に進められる。
【００９０】
［ステップＳ３４］計算部１３４ｂは、ステップＳ３１で選択されたブロック内の格子点における物理量を計算する。例えば計算部１３４ｂは、物理量記憶部１４４からシミュレーション時刻がステップ前の時刻の、格子点とその周囲の物理量を取得する。そして、計算部１３４ｂは、取得した物理量から現在のシミュレーション時刻における格子点の物理量を算出する。さらに計算部１３４ｂは、算出した物理量を、物理量記憶部１４４に書き込む。
【００９１】
［ステップＳ３５］計算部１３４ｂは、計算したブロックの計算処理終了フラグ（down[bid]）を"on"に設定する。その後、ブロック計算処理が終了する。
このように、のりしろ領域内の送信領域に属するブロックの計算を優先的に実行し、かつ１つのコアのみがのりしろ交換処理を行うようにしたため、複数のコア１１１〜１１４が同時によって複数ののりしろ交換処理が同時並行して実行されることを防止できる。その結果、のりしろ交換のためのメモリ１２０へのアクセスが複数のコアで同時に発生することがなくなり、プロセッサ１１０とメモリ１２０との間のバスの空き待ちによる処理効率の低下を回避できる。
【００９２】
ここで、計算領域内のすべてのブロックの物理量の計算終了後に複数のコアが同時にのりしろ交換処理を実行した場合と、第２の実施の形態で示した手順で処理を実行した場合との処理の時間の違いについて説明する。
【００９３】
図１６は、計算領域内のすべてのブロックの物理量の計算終了後に複数のコアが同時にのりしろ交換処理を実行した場合のコアの処理内容の推移を示す図である。図１６の例では、２つのコアまでであれば同時にメモリアクセス可能なバス幅を有するメモリバスが用意されているものとする（メモリバス幅２）。また、１ブロック当たりのコアでの演算処理時間は１τであるものとする。
【００９４】
ここで仮にメモリアクセスの競合が発生しなければ、４つのコアによるパッキング処理に伴うメモリアクセスに要する時間は１τであるものとする。実際には、４コアが同時にメモリアクセスを行うとメモリアクセスの競合が発生し、各コアによるパッキング処理のためのメモリアクセスに２τの時間がかかる。図中、各コアをコアＩＤで示し、各コアの処理内容をコアＩＤの下に「Ｆ」「Ｍ」の記号で示している。「Ｆ」は計算処理を示し、「Ｍ」はメモリアクセスを示す（図１７、図２１においても同様）。
【００９５】
ここで計算領域内のすべてのブロックの物理量の計算終了後に４つののりしろ交換処理を同時に実行すると、各コア１１１〜１１４から同時にメモリ１２０へのアクセスが発生する。するとメモリアクセスの競合が発生し、各コアの処理効率が低下する。図１６の例では、本来１τで実行が終了できるのりしろデータのパッキングに、各コアが２τの時間を要している。その結果、４つのコアがパッキング処理に費やす時間は、８τとなる。パッキング処理を行ったコア数×処理時間をのべ時間とすると、のべ時間は３２τとなる。
【００９６】
図１７は、第２の実施の形態における各コアの処理内容の推移を示す図である。図１７の例では、のりしろ領域４１内の送信領域４１ａ、のりしろ領域４２内の送信領域４２ａ、のりしろ領域４３内の送信領域４３ａ、のりしろ領域４４内の送信領域４４ａ、のりしろ以外の領域の順で、各ブロックの物理量を計算している。この場合、のりしろ領域４１の送信領域４１ａの各ブロックの計算が終了すると、コアＩＤ「３」のコア１１４によって、のりしろ領域４１の送信領域４１ａ内のデータのパッキングが行われる。この間、他のコア１１１〜１１３は、のりしろ領域４２の送信領域４２ａ内のブロックの計算を行う。
【００９７】
コア１１４がパッキング処理をしている間、他のコア１１１〜１１３からメモリ１２０へのアクセスは発生しない。そのためコア１１４は、４τの時間でパッキング処理を終了できる。パッキング処理を終了したコア１１４は、のりしろ領域４２の送信領域４２ａのブロックの計算を行う。
【００９８】
その後も同様に、各のりしろ領域４２〜４４の送信領域４２ａ，４３ａ，４４ａのブロックの物理量の計算が終了するごとに、コア１１４によるパッキングが１τの時間で行われる。そして、すべての送信領域４１ａ，４２ａ，４３ａ，４４ａのパッキングが終了後に、のりしろ領域４１〜４４以外の領域のブロックの物理量の計算が行われる。
【００９９】
その結果、コアがパッキング処理に費やすのべ時間は、１６τとなる。これを図１６に示した結果と比較すると、パッキング処理に費やす時間が半分に短縮されていることがわかる。しかも、のりしろ領域の計算を先行して実行するため、全領域の計算終了時にはパッキング処理も終了しており、すぐに次の時間ステップの計算に移行することができる。
【０１００】
すなわち、マルチコアで処理してデータパッキングを行う際、メモリアクセスが生じる。そのメモリアクセスが複数のコアによって同時に行われると、処理の効率化が図れない。そこで、第２の実施の形態では、ある１つの特定コアがデータのパッキング処理を実行し、他のコアは通常の計算処理を行うようにしている。
【０１０１】
すなわち、並列処理のオーバーヘッドであるデータパッキング処理について、データが２次キャッシュメモリから追い出されメモリアクセスが生じマルチコアを用いてスレッド並列を行ってもプロセッサの利用効率をあげられない処理がある。この処理について、全コアが同時にメモリにアクセスしメモリバスに圧迫を与えずにある特定コアのみがデータパッキング・アンパッキング処理を行うことによりメモリアクセスが平準化され、マルチコアの利用効率を上げることが可能となる。
【０１０２】
また第２の実施の形態では、のりしろ交換領域の計算処理が終了すると、他の領域の計算処理の終了を待たずに、データパッキング処理を特定のコアが開始する。すなわち、送信領域の計算が終了したのりしろ領域から順に、特定のコアがデータパッキングと通信処理を開始する。その間、特定コア以外のコアは通常の計算処理を行う。これにより、のりしろ交換処理をブロック内の物理量の計算と並行して実行でき、処理効率が向上する。
【０１０３】
さらに第２の実施の形態では、全空間をブロックに分割し、各のりしろ領域のブロックをのりしろ領域でないブロックと選別し、処理したのりしろ空間のブロックをカウントすることによってのりしろ空間の計算処理が終了したか否かが判別される。その後、のりしろ空間の計算が終了した場合、のりしろ交換コアは計算処理を中段し、のりしろ交換のためのデータパッキング、通信処理を開始する。そして、通信処理が、終了するとのりしろ交換コアが通常の計算処理を再開する。このように、１つののりしろ領域ののりしろ交換処理が終了すると、のりしろ交換を行ったコアがブロック内の物理量の計算にすぐに復帰することで、プロセッサの処理効率を向上させることができる。
【０１０４】
〔第３の実施の形態〕
次に第３の実施の形態について説明する。第３の実施の形態は、パッキング処理を実行するコアを特定コアに限定しないことにより、特定のコアからのメモリアクセスを集中させずに分散化することを可能としたものである。なお第３の実施の形態に係るコンピュータシステムのハードウェア構成は、図７，図８に示した第２の実施の形態の構成と同様である。
【０１０５】
図１８は、第３の実施の形態における物理シミュレーション時のプロセッサモジュール内での処理機能を示す図である。第３の実施の形態では、図１８に示したプロセッサモジュール２００と同様の機能を有する複数のプロセッサモジュールが、図７，８に示したプロセッサモジュール１００，１００ａ，・・・に代えてコンピュータ１０内に実装される。
【０１０６】
プロセッサモジュール２００では、コアごとのスレッド２３１〜２３４が生成される。スレッド２３１は、計算ブロック選択部２３１ａ、計算部２３１ｂ、およびのりしろ交換処理部２３１ｃを有する。計算ブロック選択部２３１ａは、プロセッサモジュール２００に割り当てられた計算領域の中から、スレッド２３１で計算するブロックを順次選択する。計算部２３１ｂは、計算ブロック選択部２３１ａが選択したブロック内の物理量を計算する。のりしろ交換処理部２３１ｃは、他のプロセッサモジュールとの間でのりしろ交換を行う。
【０１０７】
スレッド２３１と同様に他のスレッド２３２，２３３，２３４も計算ブロック選択部２３２ａ，２３３ａ，２３４ａ、計算部２３２ｂ，２３３ｂ，２３４ｂ、およびのりしろ交換処理部２３２ｃ，２３３ｃ，２３４ｃを有している。このように、第２の実施の形態と異なり、第３の実施の形態では、全てのスレッド２３１〜２３４がのりしろ交換処理部２３２ｃ，２３３ｃ，２３４ｃを有する。
【０１０８】
また、プロセッサモジュール２００は、情報の記憶機能として、ブロック情報記憶部２４１、のりしろ情報記憶部２４２、および物理量記憶部２４４を有している。ブロック情報記憶部２４１、および物理量記憶部２４４に格納される情報は、それぞれ図９に示した第１の実施の形態のブロック情報記憶部１４１、および物理量記憶部１４４と同様である。すなわちブロック情報記憶部２４１には、図１１に示したブロック管理テーブル１４１ａと処理ブロック数情報１４１ｂとが格納される。また、図９に示した第２の実施の形態と比較すると、第３の実施の形態ではのりしろ交換コア情報記憶部１４３が不要となっている。
【０１０９】
のりしろ情報記憶部２４２は、のりしろ領域の状態を示す情報を記憶する記憶領域である。例えばキャッシュメモリ１１５またはメモリ１２０の記憶領域の一部が、のりしろ情報記憶部２４２として使用される。
【０１１０】
図１９は、第３の実施の形態におけるのりしろ情報記憶部のデータ構造例を示す図である。のりしろ情報記憶部２４２には、のりしろ管理テーブル２４２ａが格納されている。のりしろ管理テーブル２４２ａには、のりしろＩＤ、ブロック数、処理ブロック数、交換処理済フラグ、ブロックＩＤ、および最終計算ブロックＩＤの欄が設けられている。各欄の横方向に並べられた情報が互いに関連付けられ、のりしろ情報を示すレコードとなる。なお、のりしろ情報のレコードは、のりしろの数分登録される。のりしろＩＤ、ブロック数、処理ブロック数、交換処理済フラグ、およびブロックＩＤの各欄に設定される情報は、図１２に示したのりしろ管理テーブル１４２ａの同名の欄と同種の情報である。
【０１１１】
最終計算ブロックＩＤの欄には、のりしろ領域の最後に計算されたブロックのブロックＩＤ（最終計算ブロックＩＤ）が設定される。最終計算ブロックＩＤは、対応するのりしろ領域の送信領域内の全てのブロックの計算が終了したときに、そのブロックを計算したコアによって設定される。最終計算ブロックＩＤの変数名は"halo[hid].lastblock"である。
【０１１２】
次に第３の実施の形態に係る各コアによる計算領域内の物理量計算処理の手順について説明する。
図２０は、第３の実施の形態に係るコアによる計算領域内の物理量計算処理の手順を示すフローチャートである。以下、スレッド２３１を実行するコアによる処理として、図２０に示す処理をステップ番号に沿って説明する。
【０１１３】
［ステップＳ４１］計算ブロック選択部２３１ａと計算部２３１ｂとが連係して、１つのブロック内の全格子点の物理量を計算する。この処理の詳細は、図１５に示した第２の実施の形態のブロック計算処理と同様である。
【０１１４】
［ステップＳ４２］計算部２３１ｂは、処理したブロック数をカウントアップする。具体的には、計算部２３１ｂは、処理ブロック数を示す変数"calcblknum"の値をインクリメントする。
【０１１５】
［ステップＳ４３］計算部２３１ｂは、処理したブロックがのりしろ領域内の送信領域に属するブロックか否かを判断する。具体的には計算部２３１ｂは、ブロック情報記憶部２４１内のブロック管理テーブル１４１ａにおける処理したブロックののりしろＩＤ（Blk[bid]）を参照する。参照したのりしろＩＤ（変数"blk[bid]"）の値が「−１」以外であれば、計算部２３１ｂは、処理したブロックがのりしろ領域の送信領域であると判断する。のりしろ領域の送信領域に属するブロックであれば、処理がステップＳ４４に進められる。のりしろ領域の送信領域に属するブロックでなければ、処理がステップＳ４７に進められる。
【０１１６】
［ステップＳ４４］計算部２３１ｂは、処理したブロックが属するのりしろ領域の処理済ブロック数をカウントアップする。具体的には計算部２３１ｂは、ブロック管理テーブルにおける処理したブロックののりしろＩＤ（Blk[bid]）を取得する。次に計算部２３１ｂは、取得したのりしろＩＤと同じのりしろＩＤ（hid）が設定されたレコードをのりしろ管理テーブル１４２ａから検索する。そして計算部２３１ｂは、検索で合致したレコードの処理ブロック数（halo[hid].calcnum）の値をインクリメントする。
【０１１７】
［ステップＳ４５］計算部２３１ｂは、ステップＳ４１で計算したブロックが、のりしろ領域内の送信領域の最後のブロックか否かを判断する。具体的には、ステップＳ４４のカウントアップ処理後の処理ブロック数（halo[hid].calcnum）が、対応するのりしろ領域のブロック数（halo[hid].blknum）と同数になった場合、ステップＳ４１で計算したブロックが送信領域の最後のブロックであると判断する。送信領域の最後のブロックであれば、処理がステップＳ４６に進められる。送信領域の最後のブロックでなければ、処理がステップＳ４７に進められる。
【０１１８】
［ステップＳ４６］計算部２３１ｂは、ステップＳ４１で計算したブロックのブロックＩＤを、最終計算ブロックＩＤ（halo[hid].lastblock）としてのりしろ管理テーブル２４２ａに設定する。
【０１１９】
［ステップＳ４７］のりしろ交換処理部２３１ｃは、送信領域内のすべてのブロックの計算が終了したのりしろ領域があるか否かを判断する。具体的にはのりしろ交換処理部２３１ｃは、すべてののりしろ領域のブロック数（halo[hid].blknum）と処理済ブロック数（halo[hid].calcnum）とを比較し、一致した場合に計算が終了したと判断する。計算が終了したのりしろ領域がある場合、処理がステップＳ４８に進められる。計算が終了したのりしろ領域がなければ、処理がステップＳ５３に進められる。
【０１２０】
［ステップＳ４８］のりしろ交換処理部２３１ｃは、計算が終了したのりしろ領域について、のりしろ交換済みか否かを判断する。具体的にはのりしろ交換処理部２３１ｃは、のりしろ管理テーブル２４２ａ内の、計算が終了したのりしろ領域のレコードにおける交換処理済フラグ（halo[hid].down）を参照する。該当する交換処理済フラグが"off"であれば、のりしろ交換が未終了であると判断する。のりしろ交換が終了していないのりしろ領域があれば、処理がステップＳ４９に進められる。計算が終了した全てののりしろ領域についてのりしろ交換が終了していれば、処理がステップＳ５３に進められる。
【０１２１】
［ステップＳ４９］のりしろ交換処理部２３１ｃは、計算が終了したのりしろ領域ののりしろ交換を行うのりしろ交換コアを、所定のアルゴリズムで判定する。例えば、最後に計算したブロックのブロックＩＤ（最終計算ブロックＩＤ）をコア数で除算した余りによって、のりしろ交換コア判定を判定できる。
【０１２２】
具体的にはのりしろ交換処理部２３１ｃは、最終計算ブロックＩＤ（halo[hid].lastblock）をコア数（totalCoreNum）で除算し、余り（mod(halo[hid].lastblock, totalCoreNum)）を求める。のりしろ交換処理部２３１ｃは、得られた余りの値と等しい値のコアＩＤを、該当するのりしろ領域ののりしろ交換コアＩＤ（halo[hid].Packcore）と判定する。
【０１２３】
［ステップＳ５０］のりしろ交換処理部２３１ｃは、ステップＳ４９で決定されたのりしろ交換コアが、自分自身となるか否かを判断する。具体的にはのりしろ交換処理部２３１ｃは、ステップＳ４９で算出した余りの値と、のりしろ交換処理部２３１ｃを実行しているコアのコアＩＤ（コア＃０）とが一致するかを判断する。一致した場合、自分がのりしろ交換コアであると判断する。自身がのりしろ交換コアである場合、処理がステップＳ５１に進められる。自身はのりしろ交換コアではない場合、処理がステップＳ５３に進められる。
【０１２４】
［ステップＳ５１］のりしろ交換処理部２３１ｃは、計算が終了したのりしろ領域の送信領域に属するブロックの計算結果をパッキングする。具体的には、のりしろ交換処理部２３１ｃは、のりしろ管理テーブル２４２ａを参照し、ステップＳ５０で自身がのりしろ交換コアであると判断したのりしろ領域に属するブロックのブロックＩＤ（halo[hid].id[blocknum]）を取得する。次にのりしろ交換処理部２３１ｃは、取得したブロックＩＤに対応するブロックの物理量を示すデータを物理量記憶部１４４から抽出し、メモリ１２０内の連続の記憶領域に格納する。
【０１２５】
［ステップＳ５２］のりしろ交換処理部２３１ｃは、ステップＳ５１でパッキングしたデータを、該当のりしろ領域を介して隣接する計算領域が割り当てられた他のプロセッサを有するモジュールに送信する。送信されたデータは、送信先のプロセッサモジュールにおけるのりしろ交換部によってアンパッキングされる。その後、のりしろ交換処理部２３１ｃは、パッキングおよび送信処理を行ったのりしろ領域の交換済フラグ（halo[hid].down）を"on"に変更する。
【０１２６】
［ステップＳ５３］計算部２３１ｂは、計算領域内のすべてのブロックを処理したか否かを判断する。具体的には計算部２３１ｂは、処理ブロック数情報１４１ｂに示される処理ブロック数（calcblknum）が、計算領域内のブロック数に達した場合、すべてのブロックを処理したものと判断する。すべてのブロックの処理が終了していれば、計算処理を終了する。未処理のブロックがあれば、処理がステップＳ４１に進められる。
【０１２７】
このように、第３の実施の形態では、のりしろ領域の送信領域内の最後に計算されたブロックのブロックＩＤをコア数で除算したときの余りに応じて、のりしろ交換コアが決定される。これによりのりしろ交換のパッキング処理を、ほぼ各コアで均等に行うことが可能である。また、のりしろ交換を行わないコアでは計算処理が続行される。
【０１２８】
図２１は、第３の実施の形態における各コアの処理内容の推移を示す図である。図２１の処理を図１７に示した第２の実施の形態の処理と比較すると、第３の実施の形態ではデータパッキングを実行するコアが不定である点が異なっている。すなわち、各のりしろ領域内の送信領域に属するブロックのうち、最後に計算されたブロックのブロックＩＤに応じて、のりしろ交換コアが決定される。そのため、各コア１１１〜１１４が、等しい確率でのりしろ交換コアに決定されることとなる。すなわち、パッキングを行うコアを特定のコアに固定せず、すべてのコアにほぼ均等にパッキング処理を実行させることができる。
【０１２９】
また、第３の実施の形態では、のりしろ領域４１から順番に格子点の物理量の計算を行うことで、各のりしろ領域４１〜４４の送信領域に属するブロックの計算が終了する時刻がずれる。そのため、同時刻に複数のデータパッキング処理が重複して発生することが防止されている。
【０１３０】
なお１つののりしろ領域のデータパッキング中に、他ののりしろ領域の送信領域の計算が終了した場合、先に実行されているデータパッキングが終了するまで、他ののりしろ領域のデータパッキング処理を先のばしすることができる。例えば、各コアのステータス情報としてデータパッキング処理中か否かをキャッシュメモリに格納しておく。各コアは、ステップＳ５０でＹＥＳと判定した場合であっても、他のコアがデータパッキング中であれば、ステップＳ５１，Ｓ５２を実行せずにステップＳ５３に処理を進める。この場合、他のコアによるデータパッキング終了後に、のりしろ交換コアによるブロック計算処理が終了すると処理がステップＳ５１，Ｓ５２に進められ、のりしろ交換が行われる。これにより、データパッキングが複数のコアで重複した時間帯に発生することを、確実に防止できる。
【０１３１】
〔その他の応用例〕
なお図８に示したハードウェア構成では、１つのプロセッサモジュールに１つのプロセッサが実装されているが、１つのプロセッサモジュールに複数のプロセッサが実装される場合もある。この場合、１つのプロセッサモジュール内の各プロセッサに、計算領域が割り当てられ、プロセッサごとに計算領域内の格子点の物理量が計算される。そしてのりしろ交換は、異なるプロセッサモジュール内のプロセッサ間で行われると共に、同一プロセッサモジュール内のプロセッサ間でも行われる。同一プロセッサモジュール内の複数のプロセッサ間ののりしろ交換処理においても、上記第１〜第３の実施の形態に示したような手順で処理を実行することで、複数のコアによる重複したメモリアクセスを低減し、処理効率を向上させることができる。
【０１３２】
また上記の処理機能は、コンピュータによって実現することができる。その場合、コンピュータが有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ／ＲＷなどがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disc）などがある。
【０１３３】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１３４】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０１３５】
また、上記の処理機能の少なくとも一部を、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＰＬＤ（Programmable Logic Device）などの電子回路で実現することもできる。
【０１３６】
上記については単に本発明の原理を示すものである。さらに、多数の変形、変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応するすべての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【符号の説明】
【０１３７】
１，３ａ，３ｂ，３ｃ，３ｄ  プロセッサ
１ａ，１ｂ，・・・，１ｎ  コア
１ａａ，１ｂａ，・・・，１ｎａ  計算単位領域選択手段
１ａｂ，１ｂｂ，・・・，１ｎｂ  計算手段
１ｎｃ  計算結果送信手段
２  記憶装置
２ａ，２ｂ，・・・  計算結果
４  計算領域
４ａ，４ｂ，４ｃ，４ｄ  計算結果送信領域
【図１】
2011058657.tif 000003
【図２】
2011058657.tif 000004
【図３】
2011058657.tif 000005
【図４】
2011058657.tif 000006
【図５】
2011058657.tif 000007
【図６】
2011058657.tif 000008
【図７】
2011058657.tif 000009
【図８】
2011058657.tif 000010
【図９】
2011058657.tif 000011
【図１０】
2011058657.tif 000012
【図１１】
2011058657.tif 000013
【図１２】
2011058657.tif 000014
【図１３】
2011058657.tif 000015
【図１４】
2011058657.tif 000016
【図１５】
2011058657.tif 000017
【図１６】
2011058657.tif 000018
【図１７】
2011058657.tif 000019
【図１８】
2011058657.tif 000020
【図１９】
2011058657.tif 000021
【図２０】
2011058657.tif 000022
【図２１】
2011058657.tif 000023
【国際調査報告】
2011058657.tif 000024
2011058657.tif 000025