(57)【要約】【課題】球面調和関数変換の計算時間を短縮化することを目的とする。【解決手段】球面調和関数を用いて行う球面のシミュレーションを行う並列計算機システムにおいて、スペクトル空間のデータを東西波数により複数個のデータに分割されたスペクトルデータを保持する記憶部と、分割された各スペクトルデータの逆ルジャンドル陪関数変換によるフーリエ係数データへの変換を、球面における緯度方向について、分割された計算領域について実行する演算部と、演算部により変換されたフーリエ係数データを、演算部による次の球面における緯度方向について、分割された計算領域の逆ルジャンドル陪関数変換が開始してから、他の計算ノードに通信経路を介して送信する通信部と、を含む、互いに通信経路を介して接続された複数の計算ノードを有する並列計算機システムが提供される。【選択図】図１２
2011107916.tif 000002
【特許請求の範囲】
【請求項１】
球面調和関数を用いて行う球面のシミュレーションを行う並列計算機システムにおいて、
スペクトル空間のデータを東西波数により複数個のデータに分割されたスペクトルデータを保持する記憶部と、
前記分割された各スペクトルデータの逆ルジャンドル陪関数変換によるフーリエ係数データへの変換を、前記球面における緯度方向について、分割された計算領域について実行する演算部と、
前記演算部により変換されたフーリエ係数データを、前記演算部による次の前記球面における緯度方向について、分割された計算領域の逆ルジャンドル陪関数変換が開始してから、他の計算ノードに通信経路を介して送信する通信部と、
を含む、互いに通信経路を介して接続された複数の計算ノードを有することを特徴とする並列計算機システム。
【請求項２】
前記並列計算機システムにおいて、
前記演算部によるフーリエ係数データへの変換を、前記通信部によるフーリエ係数データの送信先である計算ノードが同一である計算領域毎に、緯度方向について分割して実行することを特徴とする請求項１記載の並列計算機システム。
【請求項３】
前記並列計算機システムにおいて、
前記演算部によるフーリエ係数データへの変換のうち、前記通信部によるフーリエ係数データの送信先である計算ノードが自計算ノードであり、前記通信経路を介した通信が不要である前記緯度方向についての分割された計算領域の逆ルジャンドル陪関数変換を、最後に実行することを特徴とする請求項１記載の並列計算機システム。
【請求項４】
前記並列計算機システムにおいて、
前記演算部によるフーリエ係数データへの変換を、前記通信部によるフーリエ係数データの送信先である計算ノードが同一である計算領域毎に、緯度方向について分割して実行する場合に、緯度方向について分割された計算領域について、緯度方向の位置の降順又は昇順に、計算及び通信を実行することを特徴とする請求項２の列計算機システム。
【請求項５】
互いに通信経路を介して接続された複数の計算ノードを有するとともに、球面調和関数を用いて行う球面のシミュレーションを行う並列計算機システムの制御方法において、
前記計算ノードの演算部が、スペクトル空間のデータを東西波数により複数個のデータに分割された各スペクトルデータの逆ルジャンドル陪関数変換によるフーリエ係数データへの変換を、前記球面における緯度方向について、分割された計算領域について実行し、
前記計算ノードの演算部が、前記変換されたフーリエ係数データを、次の前記球面における緯度方向について、分割された計算領域の逆ルジャンドル陪関数変換を実行し、
前記計算ノードの通信部が、前記次の前記球面における緯度方向について分割された計算領域の逆ルジャンドル陪関数変換の実行を開始してから、他の計算ノードに通信経路を介して送信することを特徴とする制御方法。
【請求項６】
前記計算ノードの演算部が、前記フーリエ係数データへの変換を、前記通信部によるフーリエ係数データの送信先である計算ノードが同一である計算領域毎に、緯度方向について分割して実行することを特徴とする請求項５記載の制御方法。
【請求項７】
前記計算ノードの演算部が、前記フーリエ係数データへの変換のうち、前記通信部によるフーリエ係数データの送信先である計算ノードが自計算ノードであり、前記通信経路を介した通信が不要である前記緯度方向についての分割された計算領域の逆ルジャンドル陪関数変換を、最後に実行することを特徴とする請求項５記載の制御方法。
【請求項８】
前記計算ノードの演算部が、前記演算部によるフーリエ係数データへの変換を、前記通信部によるフーリエ係数データの送信先である計算ノードが同一である計算領域毎に、緯度方向について分割して実行する場合に、緯度方向について分割された計算領域について、緯度方向の位置の降順又は昇順に、計算及び通信を実行することを特徴とする請求項６の制御方法。
【請求項９】
互いに通信経路を介して接続された複数の計算ノードを有する並列計算機に、球面調和関数を用いて行う球面のシミュレーションを実行させるための制御プログラムであって、
前記計算ノードの演算部に、スペクトル空間のデータを東西波数により複数個のデータに分割された各スペクトルデータの逆ルジャンドル陪関数変換によるフーリエ係数データへの変換を、前記球面における緯度方向について、分割された計算領域について実行させる手順と、
前記計算ノードの演算部に、前記変換されたフーリエ係数データを、次の前記球面における緯度方向について、分割された計算領域の逆ルジャンドル陪関数変換を実行させる手順と、
前記計算ノードの通信部に、前記次の前記球面における緯度方向について分割された計算領域の逆ルジャンドル陪関数変換の実行を開始してから、他の計算ノードに通信経路を介して送信させる手順と、を実行させることを特徴とする制御プログラム。
【請求項１０】
球面調和関数を用いて行う球面のシミュレーションを行う並列計算機システムにおいて、
フーリエ空間のデータを東西波数又は経度方向に分割された複数個のデータに分割されたフーリエ係数データを保持する記憶部と、
前記フーリエ係数データのルジャンドル陪関数変換演算によるスペクトルデータへの変換を、前記分割された各フーリエ係数データごとに実行する演算部と、
前記演算部によるルジャンドル陪関数変換に使用されるフーリエ係数データの送信を、前記演算部が以前に受信したフーリエ係数データに関するルジャンドル陪関数変換が開始するのと同時のタイミングで開始する通信部と、
を含む、互いに通信経路を介して接続された複数の計算ノードを有することを特徴とする並列計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、球面調和関数変換を行う並列計算機システム、並列計算機システムの制御方法及び制御プログラムに関する。
【背景技術】
【０００２】
気象予報や気候予測等の科学技術計算の分野では、大規模な計算機シミュレーションが行われる。そのような計算機シミュレーションにおいては、ネットワークで接続された複数の情報処理装置を含む並列計算機システムが用いられる。
【０００３】
気象予報等では、並列計算機システムにより３次元である地球表面の球面モデルをシミュレーションする方法が用いられる。全地球規模の気象予報等を行う際の球面モデルのシミュレーションにおいて用いられる手法に、球面スペクトル変換法がある。
【０００４】
球面スペクトル変換法は、球面上で定義された関数を、球面調和関数を用いて解く数値解析法である。球面スペクトル変換法では、展開関数を使うので、差分法において偏微分を差分近似することに伴う誤差が無い。したがって、球面スペクトル変換法では、差分法に比べて高精度の解が得られる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−３４８４９３号公報
【非特許文献】
【０００６】
【非特許文献１】石岡圭一、「スペクトル法による数値計算入門」、東京大学出版会、ｐ.１１７―１３０，２００４．１１．２２
【非特許文献２】Ｊｕａｎｇ，Ｈ．−Ｍ，  ２００４：  Ａ  Ｒｅｄｕｃｅｄ  Ｓｐｅｃｔｒａｌ  Ｔｒａｎｓｆｏｒｍ  ｆｏｒ  ｔｈｅ  ＮＣＥＰ  Ｓｅａｓｏｎａｌ  Ｆｏｒｅｃａｓｔ  Ｇｌｏｂａｌ  Ｓｐｅｃｔｒａｌ  Ａｔｍｏｓｐｈｅｒｉｃ  Ｍｏｄｅｌ．  Ｍｏｎ．  Ｗｅａ．  Ｒｅｖ．，  １３２，１０１９−１０３５．
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ここで、球面調和関数変換の数値演算においては、ルジャンドル陪関数変換部分と、フーリエ変換部分の数値演算を含む。しかしながら、球面調和関数変換の数値演算におけるルジャンドル陪関数変換の計算量が、大きい点が問題となる。例えば、ルジャンドル陪関数変換における計算量は、Ｎを一次元あたりの自由度としたとき、水平面上の計算量は、ランダウの記号Ｏを用いて、Ｏ（Ｎ3）となる。そのため、ルジャンドル陪関数変換の計算量が多いため、球面調和関数の数値演算時間は、差分法等の局所的な計算手法（計算量はＯ（Ｎ2））と比べ、球面上の格子点を増やした場合の高解像度における計算量の差が大きくなるという問題があった。また、球面スペクトル変換法では、スペクトル変換に伴う通信量の大きい転置型の通信が必要である点も、並列計算においては計算時間に与える影響が大きい。
【０００８】
開示の並列計算機システムは、計算時間を短縮化することを目的とする。
【課題を解決するための手段】
【０００９】
開示の並列計算機システムは、球面調和関数を用いて行う球面のシミュレーションを行い、スペクトル空間のデータを東西波数により複数個のデータに分割されたスペクトルデータを保持する記憶部と、分割された各スペクトルデータの逆ルジャンドル陪関数変換によるフーリエ係数データへの変換を、球面における緯度方向について、分割された計算領域について実行する演算部と、演算部により変換されたフーリエ係数データを、演算部による次の球面における緯度方向について、分割された計算領域の逆ルジャンドル陪関数変換が開始してから、他の計算ノードに通信経路を介して送信する通信部と、を含む、互いに通信経路を介して接続された複数の計算ノードを有する。
【発明の効果】
【００１０】
開示の並列計算機システムは、計算時間を短縮化することができる。
【図面の簡単な説明】
【００１１】
【図１】数値解析を実行する情報処理装置のハードウェア構成の一例を示す図である。
【図２】プロセッサコアの構成の一例を示す図である。
【図３Ａ】並列計算機システムの一例を示す図である。
【図３Ｂ】ソフトウェアを実行する演算処理装置により実現される機能構成の一例を示す図である。
【図４】球面調和関数変換の概略を示した図である。
【図５】複数ノードによる球面調和関数変換の一例を示す図である。
【図６Ａ】４ノードによる逆ルジャンドル陪関数変換を行うケースにおいて、１つのノードが実行する計算の一例を示すタイムチャートである。
【図６Ｂ】４ノードによる逆ルジャンドル陪関数変換を行うケースにおいて、１つのノードが実行する計算の一例を示すタイムチャートである。
【図６Ｃ】４ノードによる逆ルジャンドル陪関数変換を行うケースにおいて、１つのノードが実行する計算の一例を示すタイムチャートである。
【図７】４ノードによる逆ルジャンドル陪関数変換を行うケースにおいて、４ノードが並列実行する計算の一例を示すタイムチャートである。
【図８】４ノードによる逆ルジャンドル陪関数変換を行うケースにおいて、４ノードが並列実行する通信処理の一例を示すタイムチャートである。
【図９Ａ】４ノードによるルジャンドル陪関数変換を行うケースにおいて、１つのノードが実行する計算の一例を示すタイムチャートである。
【図９Ｂ】４ノードによるルジャンドル陪関数変換を行うケースにおいて、１つのノードが実行する計算の一例を示すタイムチャートである。
【図１０】４ノードによるルジャンドル陪関数変換を行うケースにおいて、４つのノードが並列実行する計算の一例を示すタイムチャートである。
【図１１】ルジャンドル陪関数変換を含む数値解析処理フローの一例を示す図である。
【図１２】逆ルジャンドル陪関数変換を含む数値解析処理フローの一例を示す図である。
【図１３】図６Ｂに示す逆ルジャンドル陪関数変換処理フローの一例を示す図である。
【図１４】図６Ｃに示す逆ルジャンドル陪関数変換処理フローの一例を示す図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照して、数値解析方法及び数値解析を実行する並列計算機システムの一実施形態を説明する。
【００１３】
＜ハードウェア及びソフトウェア構成の説明＞
図１は、数値解析を実行する計算ノードとしての情報処理装置のハードウェア構成の一例を示す図である。図１に示す情報処理装置１００は、演算処理部１１０、記憶部１２０、通信部１３０、外部記憶装置１４０、ドライブ装置１５０、入力部１６０、出力部１７０、及びシステムバス１９０を有する。
【００１４】
演算処理部１１０は、演算を行うプロセッサコア１０〜４０、Ｌ２（Ｌｅｖｅｌ２）キャッシュ（２次キャッシュ）本体の制御を行うＬ２キャッシュコントローラ５０、Ｌ２キャッシュ本体であるＬ２キャッシュＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）６０、及びメモリアクセス制御部７０を有する。演算処理部１１０は、システムバス１９０を介して、通信部１３０、外部記憶装置１４０、ドライブ装置１５０、入力部１６０、出力部１７０に接続される。Ｌ２キャッシュコントローラ５０及びＬ２キャッシュＲＡＭ６０は、Ｌ２キャッシュと称される。
【００１５】
演算処理部１１０は、記憶部１２０に記憶されたプログラム９００を実行することで、記憶部１２０又は入力部１６０からデータを受け取り、受け取ったデータを演算する装置である。そして、演算処理部１１０は、演算したデータを、記憶部１２０や出力部１７０に出力する。演算処理部１１０は、例えば、演算処理装置としてのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。演算処理部１１０は、プログラム９００を実行することで、図５〜１４を用いて後述される球面調和関数の数値演算機能を実現する。
【００１６】
図２は、プロセッサコアの構成の一例を示す図である。プロセッサコア１０は、命令制御部（ＩＵ：Ｉｎｓｔｒｕｃｔｉｏｎ  Ｕｎｉｔ）１２、命令実行部（ＥＵ：Ｅｘｅｃｕｔｉｏｎ  Ｕｎｉｔ）１４、Ｌ１キャッシュコントローラ１６、Ｌ１キャッシュＲＡＭ１８を有する。なお、図２では、プロセッサコア１０について説明するが、プロセッサコア１０について説明される機能と同じ機能を、図１に示す他のプロセッサコア２０〜４０も同様に有する。なお、図１に示されるプロセッサコアの個数は、４個であるが、この個数に制限されることなく、情報処理装置１００は、４個以上のプロセッサコアを有してもよい。
【００１７】
命令制御部１２は、Ｌ１（Ｌｅｖｅｌ１）キャッシュＲＡＭ１８から読み出した命令をデコードする。そして、命令実行に使用されるオペランドを格納するソースレジスタ及び当該命令実行の結果を格納するディスティネーションレジスタを特定するレジスタアドレスを、「演算制御信号」として命令実行部１４に供給する。デコードする命令は、例えば、Ｌ１キャッシュＲＡＭ１８へのロード命令、ストア命令等である。命令制御部１２は、データ要求信号をＬ１キャッシュコントローラ１６に供給することで、Ｌ１キャッシュＲＡＭ１８から命令を読み出す。
【００１８】
命令実行部１４は、命令実行部１４の内部にある、レジスタアドレスで特定されるレジスタからデータを取り出し、デコードした命令に従って演算を実行する。命令実行部１４は、デコードされた命令に従って、ロード命令又はストア命令のデコード結果を、「データ要求信号」としてＬ１キャッシュコントローラ１６に供給する。Ｌ１キャッシュコントローラ１６は、ロード命令に従って、データを命令実行部１４に供給する。命令実行部１４は、命令の実行を終了すると、演算完了信号を命令制御部１２に供給して、次の演算制御信号を受け取る。
【００１９】
プロセッサコア１０のＬ１キャッシュコントローラ１６は、キャッシュデータ要求信号ＣＲＱを、Ｌ２キャッシュコントローラ５０に供給する。そして、プロセッサコア１０は、完了通知であるキャッシュデータ応答信号ＣＲＳ、及び、データ又は命令を、Ｌ２キャッシュコントローラ５０から受け取る。
【００２０】
また、Ｌ１キャッシュコントローラ１６は、命令制御部１２及び命令実行部１４と独立して動作することができる。そのため、命令制御部１２及び命令実行部１４が所定の処理を実行中に、Ｌ１キャッシュコントローラ１６は、他のプロセッサコアへのデータ又は命令の送受信を、命令制御部１２及び命令実行部１４と独立して行うことができる。
【００２１】
図１に示すＬ２キャッシュコントローラ５０は、Ｌ１キャッシュＲＡＭ及び記憶部１２０へのデータの読み出し（ロード）要求又は書き込み（ストア）要求を行い、又は、Ｌ２キャッシュＲＡＭ６０へのデータのロード又はストアを行う。Ｌ２キャッシュコントローラ５０は、例えば、ＭＥＳＩプロトコルに従って、Ｌ１キャッシュ又は記憶部１２０に記憶されたデータと、Ｌ２キャッシュに保持されたデータとの整合性を維持するように、データのロード又はストアを行う。
【００２２】
Ｌ２キャッシュＲＡＭ６０は、記憶部１２０が記憶するデータの一部を保持する。また、Ｌ２キャッシュＲＡＭ６０は、Ｌ１キャッシュが保持するデータを包含する。
【００２３】
メモリアクセス制御部７０、記憶部１２０からのデータのロード、記憶部１２０へのデータのストア、及び記憶部１２０のリフレッシュなどの動作を制御する回路である。メモリアクセス制御部７０は、Ｌ２キャッシュコントローラ５０から受け取ったロード命令又はストア命令に従って、記憶部１２０に対して、ロード又はストアを行う。
【００２４】
システムバス１９０は、演算処理部１１０と、他の接続装置とを繋ぐバスである。システムバス１９０は、例えば、ＡＧＰ（Ａｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ）又はＰＣＩ  Ｅｘｐｒｅｓｓ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）などの規格に従って機能する回路である。
【００２５】
記憶部１２０は、例えば、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。外部記憶装置１４０は、磁気ディスクを有するディスクアレイ、又はフラッシュメモリを用いたＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等である。外部記憶装置１４０は、記憶部１２０に格納されるプログラム及びデータを記憶することができる。
【００２６】
通信部１３０は、図３Ａを用いて後述される通信経路としてのネットワーク１１００と接続し、データを送受信するＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃｏｎｔｒｏｌｌｅｒ）等の通信装置である。通信部１３０は、プロセッサコア１０〜４０を介さずにデータ転送を行うことができる。そのため、通信部１３０は、プロセッサコアの演算処理と全く別個に通信処理を行うことができる。そのようなデータ転送を行うために、通信部１３０は、例えば、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）方式のデータ転送を実行してもよい。
【００２７】
ドライブ装置１５０は、例えば、フロッピー（登録商標）ディスクやＣＤ−ＲＯＭ、ＤＶＤなどの記憶媒体１９５を読み書きする装置である。ドライブ装置１５０は、記憶媒体１９５を回転させるモータや記憶媒体１９５上でデータを読み書きするヘッド等を含む。なお、記憶媒体１９５は、プログラム９００を格納することができる。ドライブ装置１５０は、ドライブ装置１５０にセットされた記憶媒体１９５からプログラム９００を読み出す。演算処理部１１０は、ドライブ装置１５０により読み出されたプログラム９００を、記憶部１２０及び／又は外部記憶装置１４０に格納する。入力部１６０は、例えば、指示入力装置としてのキーボードやマウス等である。出力部１７０は、例えば、表示装置としてのディスプレイである。
【００２８】
球面調和関数の数値演算を実行する情報処理装置は、ルジャンドル陪関数変換又はフーリエ変換を並列して実行可能な演算処理部１１０を有する。
計算ノードとしての各情報処理装置は、演算結果を相互に通信するため、データ通信可能なように構成される。そのような、ハードウェア構成として、例えば、情報処理装置を複数有する並列計算機システムがある。
【００２９】
また、単一の演算処理装置であっても、プログラム９００を実行することで、複数のプロセスやスレッドを並列実行することによって、プロセッサコアを複数有する情報処理装置のように振舞うことができる。球面調和関数の数値演算を行うための２つの態様である、（１）情報処理装置を複数有する並列計算機システム（２）複数のプロセスやスレッドを並列実行する演算処理装置について、図３Ａ及び図３Ｂを用いて説明する。
【００３０】
図３Ａは、並列計算機システムの一例を示す図である。並列計算機システムとは、ネットワーク接続された複数の情報処理装置を有するシステムである。図３Ａに示される並列計算機システム１０００は、複数のノード１００Ａ〜１００Ｚを有し、各ノードはネットワーク１１００を介して相互に接続されている。なお、ノード１００Ａ〜１００Ｚとは、図１に示した情報処理装置１００と同じハードウェア構成を有しても良い。ネットワーク１１００は、例えば、イーサネット（登録商標）規格に従う伝送路である。
【００３１】
図３Ａに示すノード間の通信には、通信部１３０を介してＭＰＩ（Ｍｅｓｓａｇｅ  Ｐａｓｓｉｎｇ  Ｉｎｔｅｒｆａｃｅ）を用いても良い。ＭＰＩは、各々がメモリを有するノードでデータをやりとりする際に用いるメッセージ通信操作の規格である。ＭＰＩでは、例えば、各ノードで実行される処理の開始又は処理の終了を、他のノードで実行される処理の開始又は終了と同期付けるためのメッセージが規定されている。ＭＰＩの規定によるメッセージ通信については、図６Ａ〜図１０を用いて後述する。
【００３２】
図３Ｂは、ソフトウェアを実行することで演算処理装置により実現される機能構成の一例を示す図である。図３Ｂに示される機能構成は、図３Ａに示されるノードにより実現される機能構成である。図３Ｂに示される機能構成は、複数のノード２５０Ａ〜２５０Ｚを有する。これらは、演算処理装置により実現されるプロセス又はスレッド等と呼ばれるデータ処理の機能構成である。図３Ａに示すノードがそれぞれ、プログラム９００を実行することで、図３Ａに示すノードは、プロセスである複数のノード２５０Ａ〜２５０Ｚという機能構成を実現する。
【００３３】
図３Ｂに示すノード間の通信は、プロセス間通信２９０により行われても良い。プロセス間通信２９０は、複数のプロセス間で情報をやりとりするための仕組みである。図３Ｂに示すノード間のプロセス間通信２９０は、図３Ａに示すネットワーク上を介して実現される。通常、プロセスはそれぞれ固有の仮想アドレス空間を持っており、互いに影響を与えないように動作する。プロセス間通信は、複数のプロセスを連携させたい場合に、アドレス空間を超えて、プロセス同士が情報をやりとりしたり、共有したりするものである。プロセス間通信を実装するためには、メッセージキュー、ソケット、パイプ、セマフォ等の同期、共有メモリ、ＲＰＣ（Ｒｅｍｏｔｅ  Ｐｒｏｃｅｄｕｒｅ  Ｃａｌｌ）等の技術が適用可能である。
【００３４】
なお、以下に記載の「ノード」は、後述される球面調和関数変換の演算処理を実行する演算部と、演算結果を格納する記憶部と、演算結果を他の「ノード」に送信する通信部とを有する処理部として機能する。そして、「ノード」は、特に特定しない限り、図３Ａに示す複数の情報処理装置、及び、図３Ｂに示す複数のプロセスのいずれかを意味する。したがって、後述される球面調和関数変換の演算処理は、情報処理装置、及び演算処理装置のいずれかにより実行される。
【００３５】
また、球面調和関数変換の演算処理による演算結果の転置通信を行う通信機能は、通信部１３０により実現される。
【００３６】
＜球面調和関数変換＞
シミュレーションの数値解法としてスペクトル変換法がある。スペクトル変換法は、変数を直交関数に展開して解く方法であるが、地球上の大気現象の解析には、球面調和関数に展開して解くスペクトル変換法がある。
【００３７】
例えば、気象予報モデルでは、運動方程式、連続方程式、エネルギー方程式、状態方程式等からなる方程式系を解く。スペクトル変換法では、方程式系の気圧、気温、風速等の変数に対して球面調和関数正変換を行う。（単に「正変換」又は「球面調和関数順変換」若しくは「順変換」ともいう。）スペクトル空間において変数の空間微分の演算等を行う。なお、球面調和関数正変換とは、実空間からスペクトル空間への変換を言う。
【００３８】
スペクトル空間での演算後、球面調和関数逆変換を行い、実空間において運動方程式の移流項などの非線形項の計算や、モデルの解像度以下の現象の効果をモデルに取り入れるためのパラメタリゼーションと呼ばれる計算等を行う。なお、球面調和関数の逆変換とは、スペクトル空間から実空間への変換を言う。
【００３９】
上述のような演算処理は、シミュレーションが終了するまで時間ステップごとに繰り返えされる。すなわち、正変換と逆変換は時間ステップごとに毎回行われ、実空間とスペクトル空間を行き来することになる。
【００４０】
このように、気象予報モデルのシミュレーションを実行するためには、球面調和関数の正変換、逆変換を用いる。以下に、球面調和関数の正変換と、球面調和関数の逆変換について説明する。
【００４１】
実空間は、球面の経度方向における格子点位置ｋ＝０，１，．．．，Ｋ及び球面の緯度方向における格子点位置ｊ＝１，２，．．．，Ｊの格子点の関数ｇ（λk，μj）により定義される。球面上で定義された関数ｇ（λk，μj）は、球面調和関数Ｙnm（λk，μj）によって下記式（１）に示すように展開される。
【００４２】
【数１】
2011107916.tif 000003
【００４３】
ここで、λkは経度方向の格子点の位置を表し、μjはルジャンドル多項式のゼロ点であるガウス緯度の位置を表し、（λk，μj）は球座標上に定義された格子点の位置を表す。関数ｇ（λk，μj）は、例えば、温度、圧力、風向等の状態を有する。ｎは、緯度方向における格子点の位置ｊに対応する波数を示し、ｍは経度方向における格子点の位置ｋに対応する波数を示す。球面調和関数Ｙnm（λk，μj）の展開係数Ｓnmは、スペクトル空間における状態を示す。以下、ｎを「南北波数」又は「位数（ｄｅｇｒｅｅ）」、ｍを「東西波数」又は「次数（ｏｒｄｅｒ）」と呼ぶこととする。
【００４４】
球面調和関数Ｙnm（λk，μj）は、ルジャンドル関数Ｐnmと、複素指数関数ｅimλkとを用いて下記式（２）のように定義される。
【００４５】
【数２】
2011107916.tif 000004
【００４６】
式（２）に示すように、球面調和関数Ｙnm（λk，μj）は、ルジャンドル関数Ｐnmと複素指数関数ｅimλkｅimλkの積で定義される。そのため、状態Ｓnmから関数ｇ（λk，μj）を求める逆変換では、式（１）及び式（２）より、以下に示す式（３Ａ）及び式（３Ｂ）が導出される。ｇを実数の場合、Ｓnmはｍ≧０の範囲のみを求めればよく、実際には（３Ｄ）を解くことになる。
なお、式（３Ｂ）に示すように、逆ルジャンドル陪関数変換の処理は、波数ｍ毎に分割可能である。そのため、複数ノードが逆ルジャンドル陪関数変換を行う場合、各ノードは、球面について波数ｍ毎に分割された計算領域について逆ルジャンドル陪関数変換を行う。
【００４７】
また、球面調和関数の展開係数Ｓnmから実空間の変数ｇ（λk，μj）を求める逆変換では、式（４）及び式（５）を用いる。
【００４８】
【数３】
2011107916.tif 000005
【００４９】
ｇが実数の場合、ｓnmはｍ≧０の範囲のみを求めればよく、実際には以下のフーリエ逆変換（３Ｃ）、ルジャンドル逆変換（３Ｄ）を解くことになる。なお、Ｇm、ｓnmは複素数である。
【００５０】
【数４】
2011107916.tif 000006
【００５１】
式（５）で、ωjは、数値積分のための重みで、「ガウス重み」と呼ばれるものである。式（４）及び式（５）に示されるように、実空間からスペクトル空間への正変換では、式（４）に示すフーリエ変換を行い、その後に、式（５）に示すルジャンドル陪関数変換を行うことで、スペクトル空間の解が得られる。
【００５２】
図４は、球面調和関数変換を説明するための模式図である。図４では、球体３０５に基づく実データ３０４との関係が示される。図４に示すスペクトルデータ３０１は、南北波数ｎ及び東西波数ｍにより規定されるスペクトル空間のデータであり、スペクトル空間のデータを東西波数により複数個のデータに分割されたスペクトルデータである。球体３０５上の空間は、球面の経度方向におけるλk及び球面の緯度方向におけるμjの格子点の位置の関数ｇ（λk，μj）を用いて、実空間の実データ３０４として定義される。
【００５３】
スペクトルデータ３０１から実データ３０４への球面調和関数の逆変換は、以下のステップにより計算される。
【００５４】
ステップ１ａ：ルジャンドル陪関数逆変換（ＩＬＴ（Ｉｎｖｅｒｓｅ  Ｌｅｇｅｎｄｒｅ  ｔｒａｎｓｆｏｒｍａｔｉｏｎ）
ノードによる逆ルジャンドル陪関数変換により、ＳnmからＧm（μj）を求める。このステップにより、スペクトルデータ３０１は、第１のフーリエ係数３０２に変換される。
【００５５】
ステップ２ａ：経度から緯度へのデータ転置通信
複数ノード間で、転置通信が行われる。各ノードは、経度波数ｍによって分割された計算領域について逆ルジャンドル倍関数変換を行う。一方、各ノードが算出さしたＧm（μj）は、フーリエ変換においてはフーリエ係数として用いられる。そのため、あるノードは、他のノードに算出したＧm（μj）を送信する。このように、ノードで数値解析後に得られた解を、全ノード間で置き換える通信処理を「転置通信」と呼ぶ。
【００５６】
このステップにより、Ｇm（μj）は、第１のフーリエ係数３０２のように経度方向に割り当てられたノードから、第１のフーリエ係数３０２のように緯度方向に割り当てられたノードに送信される。その際に、例えばＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓによるデータ転送を行うことで、データ転送時の演算処理部の負荷が軽減され、通信部１３０による通信と演算処理部１１０による計算の同時実行が可能になる。
【００５７】
ステップ３ａ：逆フーリエ変換（ＩＦＴ（Ｉｎｖｅｒｓｅ  Ｆｏｕｒｉｅｒ  Ｔｒａｎｓｆｏｒｍ）
逆フーリエ変換により、Ｇm（μj）からｇ（λk，μj）を求める。このステップにより、転置後の第２のフーリエ係数３０３は、実データ３０４に変換される。
このように、フーリエ係数は、フーリエ空間のデータを東西波数又は経度方向に分割された複数個のデータを意味する。
【００５８】
実データ３０４からスペクトルデータ３０１への球面調和関数の正変換は、以下のステップにより図３Ａ〜図３Ｂに示す複数のノードにより計算される。
【００５９】
ステップ１ｂ：フーリエ変換（ＦＴ（Ｆｏｕｒｉｅｒ  Ｔｒａｎｓｆｏｒｍ））
ノードによるフーリエ変換により、ｇ（λk，μj）からＧm（μj）を求める。このステップにより、実データ３０４は、第２のフーリエ係数３０３に変換される。
【００６０】
ステップ２ｂ：緯度から経度へのデータ転置通信
複数ノード間で、転置通信が行われる。このステップにより、Ｇm（μj）は、第２のフーリエ係数３０３のように緯度方向に割り当てられたノードから、第１のフーリエ係数３０２のように経度方向に割り当てられたノードに送信される。
【００６１】
ステップ３ｂ：ルジャンドル陪関数変換（Ｌｅｇｅｎｄｒｅ  ｔｒａｎｓｆｏｒｍａｔｉｏｎ（ＬＴ））
ルジャンドル陪関数変換（ＬＴ）により、Ｇm（μj）からＳnmを求める。このステップにより、第１のフーリエ係数３０２は、スペクトルデータ３０１に変換される。
【００６２】
＜球面調和関数変換の並列化＞
上記のルジャンドル陪関数変換及びフーリエ変換は、計算領域を分けることで、多数のノードで並列実行することができる。
【００６３】
［逆変換の並列化］
球面調和関数変換の並列化の一例として、式（１）における南北波数ｎの打ち切り波数をＮ（ｍ）＝Ｍとした場合における１次元並列実装方法について説明する。
【００６４】
図５は、本実施形態の複数ノードによる球面調和関数変換のデータ分割の一例を説明する模式図である。図５の横軸は、経度方向の格子点の位置を表し、図５の縦軸は、緯度方向の格子点の位置を表す。図５に示す例では、経度方向の解像度をＭ＝１５、緯度方向の解像度をＪ＝１６とする。球面調和関数演算を行うノード数は、４である。
【００６５】
ルジャンドル陪関数ではｎ≧ｍのみに値を持つ。上記ステップ１ａでは、ノード毎の計算処理の均等化のために、（Ｍ−１）／２と（Ｍ−１）／２＋１の中間に関して対称な計算領域についてのルジャンドル陪関数変換処理が、各ノードに割り当てられる。つまり、図４のスペクトルデータ４０１に示す例では、Ｍ＝１５であるため、ｍ＝（１５−１）／２＝７と、ｍ＝（１５−１）／２＋１＝８との中間に関して対称な計算領域についてのルジャンドル陪関数変換処理が、各ノードに割り当てられる。このように、計算処理量が各ノードに均等になるように割り当てられることで、複数ノードによる並列実行が可能になる。
【００６６】
東西波数ｍに関する計算領域に分割して、４つのノードそれぞれに割り当てられるルジャンドル陪関数変換処理を示す式を、下記に示す。
【００６７】
【数５】
2011107916.tif 000007
【００６８】
【数６】
2011107916.tif 000008
【００６９】
【数７】
2011107916.tif 000009
【００７０】
【数８】
2011107916.tif 000010
【００７１】
図５のスペクトルデータ４０１には、式（３Ｄ−１）に示すように、経度波数ｍが、０，１，１４，１５である計算領域についてのルジャンドル陪関数変換が、ノード０の演算対象であることが示される。
【００７２】
図５のスペクトルデータ４０１には、式（３Ｄ−２）に示すように、経度波数ｍが、２，３，１２，１３である計算領域についてのルジャンドル陪関数変換が、ノード１の演算対象であることが示される。
【００７３】
図５のスペクトルデータ４０１には、式（３Ｄ−３）に示すように、経度波数ｍが、４，５，１０，１１である計算領域についてのルジャンドル陪関数変換が、ノード２の演算対象であることが示される。
【００７４】
図５のスペクトルデータ４０１には、式（３Ｄ−４）に示すように、経度波数ｍが、６，７，８，９である計算領域についてのルジャンドル陪関数変換が、ノード３の演算対象であることが示される。
【００７５】
なお、式（３Ｄ−１）〜式（３Ｄ−４）では、４つのノードにルジャンドル陪関数変換を割り当てるために、東西波数ｍに関して分割された式を示した。一方で、ノード０からノードＮｐ−１までのＮｐノードで並列化した場合のノードｉの計算領域について一般化した式（６）は、次のように示すことができる。
【００７６】
【数９】
2011107916.tif 000011
【００７７】
ここで、Ｃｉは、ノードｉに割り当てられる経度波数ｍに関する計算領域を示す部分集合であり、以下の関係を満たす。
Ｃ0∪Ｃ1∪・・・Ｃi-1∪Ｃi∪Ｃi+1・・・∪ＣNp-1＝｛ｍ｜０≦ｍ≦Ｍ｝
Ｃ0∩Ｃ1∩・・・Ｃi-1∩Ｃi∩Ｃi+1・・・∩ＣNp-1＝φ
【００７８】
上記関係は、スペクトルデータ４０１において、（Ｍ−１）／２と（Ｍ−１）／２＋１の中間に関して対称になるように計算領域の割り付けが行われる他、様々なデータ分割方法を含む。例えば、気象モデルでしばしば用いられる、Ｒｅｄｕｃｅｄ  Ｓｐｅｃｔｒａｌ  Ｔｒａｎｓｆｏｒｍ法（上記非特許文献２）では、処理の高速化を考慮し、計算領域を限定する方法が示される。ここでは、ノード間の処理の均一化を行う場合、ノードに割り付けられる計算領域は、（Ｍ−１）／２と（Ｍ−１）／２＋１の中間に関して対称であり、且つ左右方向に対してサイクリックな割り付けにすると、ノード間の処理が均一化され易い。
【００７９】
図５の第１のフーリエ係数４０２は、逆ルジャンドル陪関数変換後のフーリエ空間を示す。なお、これら逆ルジャンドル陪関数変換により得られた波数毎のフーリエ係数は、図１に示されたＬ２キャッシュＲＡＭ６０又は記憶部１２０、又は、図２に示されたＬ１キャッシュＲＡＭ１８に保持される。南北波数ｎは、実空間の緯度方向の位置の値に変換されている。ステップ２ａの転置通信が行われ、あるノードは、逆ルジャンドル陪関数変換結果であるＧm（μj）を、他の全てのノードに送信する。
【００８０】
図５の第２のフーリエ係数４０３は、転置通信後のフーリエ空間である。なお、これら転置通信により得られた波数毎のフーリエ係数は、図１に示されたＬ２キャッシュＲＡＭ６０又は記憶部１２０、又は、図２に示されたＬ１キャッシュＲＡＭ１８に保持される。図５に示す例では、１≦ｊ≦１６であり、フーリエ変換では、全ての東西波数に関するフーリエ係数を演算に使用するため、ノード０〜３は、以下の計算領域についての逆フーリエ変換処理が割り当てられる。
ノード０：０≦ｍ≦Ｍ、１≦ｊ≦４
ノード１：０≦ｍ≦Ｍ、５≦ｊ≦８
ノード２：０≦ｍ≦Ｍ、９≦ｊ≦１２
ノード３：０≦ｍ≦Ｍ、１３≦ｊ≦１６
【００８１】
各ノードは、上記のように割り当てられた逆フーリエ変換処理を実行することで、以下の実空間領域について、ｇ（λk，μj）を算出する。なお、これら算出されたｇは、図１に示されたＬ２キャッシュＲＡＭ６０又は記憶部１２０、又は、図２に示されたＬ１キャッシュＲＡＭ１８に保持される。なお、後述する正変換においても同様に、各ノードで実行され又は転置通信されるフーリエ変換又はルジャンドル陪関数変換の演算結果は、図１に示されたＬ２キャッシュＲＡＭ６０又は記憶部１２０、又は、図２に示されたＬ１キャッシュＲＡＭ１８に保持される。
【００８２】
図５の実空間データ４０４は、逆フーリエ変換後の実空間である。
【００８３】
なお、Ｎｐ個のノードであるノード０からノードＮP−１において、フーリエ変換を並列実行させる場合のノードｋの計算領域は下記式（７）のように定義される。
【００８４】
【数１０】
2011107916.tif 000012
【００８５】
＜正変換の並列化＞
図４を用いて説明したように、球面調和関数の正変換は、球面調和関数の逆変換の手順を逆に行う変換である。よって、実空間データ４０４から第２のフーリエ係数４０３へフーリエ変換（ＦＴ）する際に、各ノードに割り当てられる計算領域は、図５を用いて説明した逆変換においてフーリエ変換を行ったときに割り当てられた計算領域と同じである。例えば、図５の実空間データ４０４に示すように、各ノードには、以下の計算領域が割り当てられ、各ノードは割り当てられた計算領域について、式（４）の計算を実行する。
ノード０：０≦ｋ≦Ｋ、１≦ｊ≦４
ノード１：０≦ｋ≦Ｋ、５≦ｊ≦８
ノード２：０≦ｋ≦Ｋ、９≦ｊ≦１２
ノード３：０≦ｋ≦Ｋ、１３≦ｊ≦１６
【００８６】
なお、Ｎｐ個のノードであるノード０からノードＮＰ−１に対して、フーリエ変換を並列実行させる場合、ノードｋの計算領域は、上記式（７）により定義される。
【００８７】
第１のフーリエ係数４０２からスペクトルデータ４０１にルジャンドル陪関数変換（ＬＴ）する際に各ノードに割り当てられる計算領域も、逆変換において逆ルジャンドル陪関数変換を行ったときに割り当てられた計算領域と同じである。よって、東西波数ｍに関する計算領域は分割され、分割された計算領域についての逆ルジャンドル陪関数変換処理が、４つのノードそれぞれに割り当てられる。その場合、各ノードに割り当てられる計算処理は、以下のようになる。
【００８８】
【数１１】
2011107916.tif 000013
【００８９】
【数１２】
2011107916.tif 000014
【００９０】
【数１３】
2011107916.tif 000015
【００９１】
【数１４】
2011107916.tif 000016
【００９２】
上記した逆ルジャンドル陪関数変換を実行するノードの並列化は、４つのノードに対して行われた。なお、Ｎｐ個のノードであるノード０からノードＮｐ−１に対して、逆ルジャンドル陪関数変換計算を並列実行させる場合、ノードｉの計算領域は下式（８）のように定義される。
【００９３】
【数１５】
2011107916.tif 000017
【００９４】
＜転置通信と数値解析処理のオーバーラップ方法＞
［逆変換］
一実施形態では、ステップ１ａにおける逆ルジャンドル陪関数変換と、ステップ２ａにおける転置通信を分割し、逆ルジャンドル陪関数変換計算と転置通信をオーバーラップさせることで通信による遅延を隠蔽する。以下に、（ａ）ＩＬＴ計算と転置通信の分割方法、（ｂ）オーバーラップ方法、（ｃ）オーバーラップの効率化について述べる。
【００９５】
（ａ）ＩＬＴ計算と転置通信の分割方法
逆ルジャンドル陪関数変換と転置通信をオーバーラップさせるためには、逆ルジャンドル陪関数変換と転置通信のそれぞれが利用するデータが独立である必要がある。以下に説明する例では、Ｎｐ個のノードであるノード０からノードＮｐ−１に対して逆ルジャンドル陪関数変換処理を割り当てるために、式（６）に示したノードｉの計算を以下に示す式（９）のように、ｃａｌｃ（０）からｃａｌｃ（Ｎｐ−１）まで分割する。
【００９６】
【数１６】
2011107916.tif 000018
【００９７】
ｃａｌｃ（０）からｃａｌｃ（Ｎｐ−１）までの全てを計算することで、式（６）と同じ計算結果を得られる。また、ｃａｌｃ（ｋ）に関する緯度方向の位置ｊに関する計算領域は、式（７）で表される転置通信後のノードｋの緯度方向の位置ｊに関する計算領域と同じである。
【００９８】
ここで, ｃａｌｃ（ｋ）に着目すると, 緯度方向の位置jに関する計算領域が, 式(７)で表される転置通信後のノード kの緯度方向の位置jに関する計算領域と一致することとなる。すなわち、ｃａｌｃ（ｋ）（０≦ｋ≦Ｎｐ−１）の計算結果の送信をｃｏｍｍ（ｋ）（０≦ｋ≦Ｎｐ−１）と呼ぶこととすると、ｃｏｍｍ（ｋ）の送信先はノードｋとなる。
【００９９】
式（３Ｄ）に示すように、逆ルジャンドル陪関数変換の処理は、波数ｍ毎に分割可能である。しかしながら、分割する波数の組のサイズを小さくしすぎると、ステップ２ａにおける転置通信において、ある１つのノードからノードｋへのデータ転置通信の回数が複数になり、通信開始のためのレイテンシが悪化するため、ノード全体の処理時間が長くなる。そのため、本実施形態では、式（７）に従うように計算領域を規定し、例えば、式（３Ｄ−１）〜式（３Ｄ−４）に示すように、ｃａｌｃ（０）からｃａｌｃ（Ｎｐ−１）まで分割した。このように、本実施形態では、ある１つのノードからノードｋへのデータ転置通信は１回で終了することによって、通信開始を行う際レイテンシを最小化し、ノード全体の処理時間を短縮することができる。
【０１００】
（ｂ）オーバーラップ方法
一実施形態では、全体の計算終了を待たずして、計算の終わったｃａｌｃ（ｋ）の計算結果であるＧm（μj）（ｍ∈Ｃ＿ｉ，ｉｊ／Ｎｐ＋１≦ｊ≦Ｊ（ｋ＋１）／Ｎｐ）の送信を行う。（ａ）で示した逆ルジャンドル陪関数変換の分割では、ｃａｌｃ（ｘ）の結果の転置通信であるｃｏｍｍ（ｘ）とｃａｌｃ（ｋ）（ｋ＜ｘ−１、ｋ＞ｘ＋１）は、独立に実行可能である。これは、、ある計算ｃａｌｃ（ｘ）の結果は、ｃａｌｃ（ｋ）（ｋ＜ｘ−１、ｋ＞ｘ＋１）により書き換えらず、また、計算結果を他のノードに転置通信を行っても、逆ルジャンドル陪関数変換に何ら影響を与えないためである。
【０１０１】
図６Ａ〜図６Ｃは、４ノードによる逆ルジャンドル陪関数変換を行うケースにおいて、１つのノードが実行する計算の一例を示すタイムチャートである。図６Ａは、ルジャンドル陪関数変換の計算時間が、ルジャンドル陪関数変換結果の通信時間より長いケースを示す。図６Ｂは、ルジャンドル陪関数変換の計算時間が、ルジャンドル陪関数変換結果の通信時間より短いケースを示す。
【０１０２】
図６Ａに示す処理４１１は、ノードが全ての計算処理を実行した後に、全ての計算結果を送信する処理を示す。処理４１１では、計算処理「ｃａｌｃ０」〜「ｃａｌｃ３」の後に、送信処理「ｃｏｍｍ１」〜「ｃｏｍｍ３」が実行される。一方、図６Ａに示す処理４１２は、計算領域に関する計算処理が１つ完了するとすぐに、完了した計算結果を送信する処理を示す。処理４１２では、次の計算領域に関する計算処理と、前の計算領域に関する計算処理結果の送信処理が重複することで、計算処理及び送信処理の合計処理時間は、処理４１１の合計処理時間より短い。言い換えれば、「ｃｏｍｍ１」〜「ｃｏｍｍ３」に係る通信処理時間が、「ｃａｌｃ０」〜「ｃａｌｃ２」に係る計算処理時間で隠蔽又はマスクされる。
【０１０３】
図６Ｂに示す処理４２１は、ノードが全ての計算処理を実行した後に、全ての計算結果を送信する処理を示す。処理４２１では、計算処理「ｃａｌｃ０」〜「ｃａｌｃ３」の後に、送信処理「ｃｏｍｍ１」〜「ｃｏｍｍ３」が実行される。一方、図６Ｂに示す処理４２２は、計算領域に関する計算処理が１つ完了するとすぐに、完了した計算結果を送信する処理を示す。そして、処理４２２では、送信処理の終了タイミングに同期して、次の計算領域に関する計算処理を開始する処理がノードによりなされる。なお、このような同期処理は、ＭＰＩの関数である、ＭＰＩ＿Ｂａｒｒｉｅｒによって行うことができる。
【０１０４】
図６Ｂに示す処理４２１及び処理４２２は、図６Ａに示す処理４１２と異なり、送信時間が計算時間より長い例が示される。一方、図６Ｂに示す処理４２２は、図６Ａに示す処理４１２と同様に、次の計算領域に関する計算処理と、前の計算領域に関する計算処理結果の送信処理が重複することで、計算処理及び送信処理の合計処理時間は、処理４１１の合計処理時間より短い。
【０１０５】
図６Ｃに示す処理４３１は、ノードが全ての計算処理を実行した後に、全ての計算結果を送信する処理を示す。処理４３１では、計算処理「ｃａｌｃ０」〜「ｃａｌｃ３」の後に、送信処理「ｃｏｍｍ１」〜「ｃｏｍｍ３」が実行される。一方、図６Ｃに示す処理４３２は、受信側ノードの計算結果受信を確認せずに、次の計算処理を、送信処理と並列して実行する処理である。なお、このような同期処理は、ＭＰＩに従うノンブロッキング通信により行うことができる。例えば、計算結果の送信側ノードは、計算結果（例えば、ｃｏｍｍ３）をＭＰＩにより（例えば、ＭＰＩ＿Ｂａｒｒｉｅｒ）送ることで、受信側ノードの受信処理完了を待たずに次の計算処理（例えば、ｃａｌｃ１）を開始する。なお、処理４３２のように受信側ノードと送信側ノードとの同期処理を最後の計算結果送信後とすることで、処理４２２より、合計処理時間は短くなる場合がある。
【０１０６】
なお、処理４１２及び処理４２２及び処理４３２のように、計算処理と送信処理とを並列実行は、図１及び図２に示す処理部と、通信部とが別個の装置であり、それぞれ独立して実行することによって行われる。
【０１０７】
このように、計算時間と送信時間とを重複するように処理することで、通信時間を全体の処理時間から隠蔽され、並列計算による並列処理の効果が得られることで、計算ノードの有効利用が可能になる。そして、全体の処理時間を短縮することができる。
【０１０８】
（ｃ）オーバーラップの効率化
本発明のアルゴリズムでは、（ａ）の方法で分割した計算に関して必ずしもｊ＝１から計算せずに、任意のノードｋに関してｃａｌｃ（ｋ）を最後に実行するようにｃａｌｃ（０）からｃａｌｃ（Ｎｐ−１）を降順、または昇順に実行する。つまり、降順の場合、ノードｘについては、ｃａｌｃ（ｘ−１）から計算を開始し、ｃａｌｃ（ｘ−２）→ｃａｌｃ（ｘ−３）→・・・の降順に計算を進める。
【０１０９】
但し、ノード０の場合にはｃａｌｃ（Ｎｐ−１）から計算を開始する。また、ｃａｌｃ（０）の計算の後は、ｃａｌｃ（Ｎｐ−１）の計算を行う。昇順の場合、ノードｘについては、ｃａｌｃ（ｘ＋！）から計算を開始し、ｃａｌｃ（ｘ＋２）→ｃａｌｃ（ｘ＋３）→・・・の昇順に計算を進める。但し、ノードＮｐ−１の場合にはｃａｌｃ（０）から計算を開始する。また、ｃａｌｃ（Ｎｐ−１）の計算の後は、ｃａｌｃ（０）の計算を行う。
【０１１０】
図７は、４ノードによる逆ルジャンドル陪関数変換を行うケースにおいて、４ノードが並列実行する計算の一例を示すタイムチャートである。図７に示す処理５０１は、４つのノードが全ての計算処理を実行した後に、全ての計算結果を送信する処理を示す。図７に示す処理５０２は、各ノードが式（３Ｄ−１）〜式（３Ｄ−４）による計算領域の割り当てがなされた後に、各ノードが式（９）に示す分割方法でルジャンドル陪関数演算処理を実行すると共に、他ノードへの計算結果の送信を行う処理を示す。図７に示されるように、処理５０１と比して、処理５０２は、計算及び通信の処理時間を短縮することができる。
【０１１１】
図８は、４ノードによる逆ルジャンドル陪関数変換を行うケースにおいて、任意のノードｋに関してｃａｌｃ（ｋ）を最後に実行するようにｃａｌｃ（０）からｃａｌｃ（Ｎｐ−１）を降順に実行した場合において、４ノードが並列実行を行う通信処理の一例を示すタイムチャートである。図８においては、矢印の向きにノード間の通信が行われる。例えば、矢印５１１は、ノード０からノード３への通信において、ノード０にとってのｃｏｍｍ３を表す。矢印５１２は、ノード０からノード２への通信において、ノード０にとってのｃｏｍｍ２を表す。矢印５１３は、ノード０からノード１への通信において、ノード０にとってのｃｏｍｍ２を表す。
【０１１２】
また、矢印５２１は、ノード１からノード０への通信において、ノード１にとってのｃｏｍｍ０を表す。矢印５２２は、ノード１からノード３への通信において、ノード１にとってのｃｏｍｍ３を表す。矢印５２３は、ノード１からノード２への通信において、ノード１にとってのｃｏｍｍ２を表す。
【０１１３】
さらに、矢印５３１は、ノード２からノード１への通信において、ノード２にとってのｃｏｍｍ１を表す。矢印５３２は、ノード２からノード０への通信において、ノード２にとってのｃｏｍｍ０を表す。矢印５３３は、ノード２からノード３への通信において、ノード２にとってのｃｏｍｍ３を表す。
【０１１４】
また、矢印５４１は、ノード３からノード２への通信において、ノード３にとってのｃｏｍｍ２を表す。矢印５４２は、ノード３からノード１への通信において、ノード３にとってのｃｏｍｍ１を表す。矢印５４３は、ノード３からノード０への通信において、ノード３にとってのｃｏｍｍ０を表す。
【０１１５】
上述の処理手順により、ノードｋにとってｃａｌｃ（ｋ）は計算結果の通信が必要のないデータを扱うため、最後の計算のための通信は必要ない。これにより、全ての通信は計算量の大きいルジャンドル陪関数変換の計算とオーバーラップ実行され、総処理時間の短縮につながる。また、図８に示されるように、１つの通信フェーズにおいて、２つの計算結果を受信しないように各ノードは受信又は送信し、また、全ての通信フェーズにおいて全ノードが１つの送信と１つの受信を行う。このようにして、開示の数値解析方法は、通信負荷のノード間不均衡が生まれず通信を効率よく実行することが可能になる。
【０１１６】
［正変換］
一実施形態では、上記ステップ３ｂにおける演算と、ステップ２ｂにおける通信を分割し、分割した計算と通信をオーバーラップして実行することで通信による遅延を隠蔽される。以下に、（ａ）計算と通信の分割方法、（ｂ）オーバーラップ方法、（ｃ）オーバーラップの効率化について述べる。
【０１１７】
（ａ）計算と通信の分割方法
計算と通信をオーバーラップさせるためには、計算と通信のそれぞれが利用するデータが独立である必要がある。以下に説明する例では、ノード（０）からノード（ＮＰ−１）までのＮｐノードで並列化した場合、式（８）に示したノードｉの計算を以下のように、ｃａｌｃ（０）からｃａｌｃ（Ｎｐ−１）までＮＰ分割する。
【０１１８】
【数１７】
2011107916.tif 000019
【０１１９】
ｃａｌｃ（０）からｃａｌｃ（Ｎｐ−１）までの全てを計算し、計算結果を以下のように足し合わせることで式（８）と同等の演算が完了する。
【０１２０】
【数１８】
2011107916.tif 000020
【０１２１】
実際にはｃａｌｃ（０）からｃａｌｃ（Ｎｐ−１）を順番に行っていくので、例えば、ｃａｌｃ（ｘ）の次にｃａｌｃ（ｋ）を行う場合には、以下の式（１１−１）のようにそれまでの計算結果との足し算をｃａｌｃ（ｋ）として同時に行う。
【０１２２】
【数１９】
2011107916.tif 000021
【０１２３】
ここで、ｃａｌｃ（ｋ）に着目すると、緯度方向における位置ｊに関する計算領域が、式（７）で表される転置通信前のノードｋの緯度方向における位置ｊに関する計算領域と一致している。すなわち、ｃａｌｃ（ｋ）（０≦ｋ≦Ｎｐ−１）の計算に必要なデータの受信をｃｏｍｍ（ｋ）（０≦ｋ≦Ｎｐ−１）と呼ぶこととすると、ｃｏｍｍ（ｋ）の送信元はノードｋとなる。そして、ノードｋから他のノードへのデータの転送は１回で終了することになる。
【０１２４】
（ｂ）オーバーラップ方法
本実施形態に係る方法では、計算に必要なＧm（μj）の通信を全て終了した後に、式（８）の計算を行うのではなく、全通信の終了を待たずにｃａｌｃ（ｋ）の計算に必要なデータＧm（μj）（ｍ∈Ｃi，ｉＪ／Ｎｐ＋１≦ｊ≦Ｊ（ｋ＋１）／Ｎｐ）の通信が終了したｃａｌｃ（ｋ）の計算を開始する。
【０１２５】
（ａ）で示した計算の分割により、ある通信ｃｏｍｍ（ｘ）のデータはｃａｌｃ（ｋ）（ｋ＜ｘ−１，ｋ＞ｘ＋１）では参照されない。よって、ｃｏｍｍ（ｘ）の通信データを用いたｃａｌｃ（ｘ）と、ｃｏｍｍ（ｋ）（ｋ＜ｘ−１，ｋ＞ｘ＋１）を独立に実行可能であるため、全通信終了前のｃａｌｃ（ｋ）の通信実行は実現される。
【０１２６】
図９Ａ及び図９Ｂは、４ノードによるルジャンドル陪関数変換を行うケースにおいて、１つのノードが実行する計算の一例を示すタイムチャートである。図９Ａは、ルジャンドル陪関数変換の計算時間が、ルジャンドル陪関数変換結果の通信時間より長いケースを示す。図９Ｂは、ルジャンドル陪関数変換の計算時間が、ルジャンドル陪関数変換結果の通信時間より短いケースを示す。
【０１２７】
図９Ａに示す処理６０１は、ノードが全てのルジャンドル陪関数変換に必要なデータの受信した後に、全てのルジャンドル陪関数変換処理を実行する処理を示す。図９Ａに示す処理６０２は、計算領域に関するルジャンドル陪関数変換に必要なデータを受信するとすぐに、計算領域に関するルジャンドル陪関数変換処理を行う。処理６０２では、次の計算領域に関する計算処理と、次の計算領域に必要なデータの受信処理が重複することで、計算処理及び送信処理の合計処理時間は、処理６０１の合計処理時間より短い。
【０１２８】
図９Ｂに示す処理６１１は、ノードが全てのルジャンドル陪関数変換に必要なデータの受信した後に、全てのルジャンドル陪関数変換処理を実行する処理を示す。図９Ｂに示す処理６１２は、計算領域に関するルジャンドル陪関数変換に必要なデータを受信するとすぐに、計算領域に関するルジャンドル陪関数変換処理を行う。そして、処理６１２では、受信処理の終了タイミングに同期して、次の計算領域に関する計算処理を開始する処理がノードによりなされる。なお、このような同期処理は、ＭＰＩ＿Ｂａｒｒｉｅｒにより行うことができる。
【０１２９】
図９Ｂに示す処理６１２は、図９Ａに示す処理６０２と同様に、計算領域に関する計算処理と、次の計算領域に関する必要なデータの受信処理が重複することで、計算処理及び送信処理の合計処理時間は、処理６１１の合計処理時間より短い。
【０１３０】
図１０は、４ノードによるルジャンドル陪関数変換を行うケースにおいて、４つのノードが並列実行する計算の一例を示すタイムチャートである。図１０に示す処理７０１は、４つのノードが全ての通信処理を実行した後に、全ての計算処理を開始する処理を示す。図７に示す処理７０２は、各ノードが式（５−１）〜式（５−４）による計算領域の割り当てがなされた後に、各ノードが式（１０）に示す分割方法でルジャンドル陪関数変換を実行すると共に、他ノードからのデータの受信を行う処理を示す。図１０に示されるように、処理７０１と比して、処理７０２は、計算及び通信の総処理時間を短縮することができる。
【０１３１】
このように、球面調和関数の正変換においても、計算時間と送信時間とを重複するように処理することで、通信時間を全体の処理時間から隠蔽され、並列計算による個数効果が得られることで、計算ノードの有効利用が可能になる。そして、全体の処理時間を短縮することができる。
【０１３２】
（ｃ）オーバーラップの効率化
【０１３３】
本実施形態では、（ａ）の方法で分割した計算に関して必ずしもｊ＝１から計算せずに、任意のノードｋに関してｃａｌｃ（ｋ）を最初に実行するようにｃａｌｃ（０）からｃａｌｃ（Ｎｐ−１）を降順、または昇順に実行する。つまり、降順の場合、ノード（ｘ）については、ｃａｌｃ（ｘ）から計算を開始し、ｃａｌｃ（ｘ−１）→ｃａｌｃ（ｘ−２）→・・・の降順に計算を進める。ｃａｌｃ（０）の計算の後は、ｃａｌｃ（Ｎｐ−１）の計算を行う。昇順の場合、ノード（ｘ）については、ｃａｌｃ（ｘ）から計算を開始し、ｃａｌｃ（ｘ＋１）→ｃａｌｃ（ｘ＋２）→・・・の昇順に計算を進める。ｃａｌｃ（Ｎｐ−１）の計算の後は、ｃａｌｃ（０）の計算を行う。
【０１３４】
上述の処理手順により、ノード（ｋ）にとってｃａｌｃ（ｋ）は計算結果の通信が必要のないデータを扱うため、最初の計算のための通信は必要ない。これにより、全ての通信は計算量の大きいルジャンドル陪関数変換の計算とオーバーラップ実行され、処理の効率化の向上につながる。また、全ての通信フェーズにおいて常に全ノードが１つの送信と１つの受信を行うことにより、通信負荷のノード間不均衡が生まれず通信を効率よく実行することが可能になる。
【０１３５】
図１１は、ルジャンドル陪関数変換を含む数値解析処理フローの一例を示す図である。図１２は、逆ルジャンドル陪関数変換を含む数値解析処理フローの一例を示す図である。
【０１３６】
図１１及び図１２に示される処理はシミュレーションが終了するまで時間ステップごとに繰り返される。すなわち、球面調和関数正変換と球面調和関数逆変換は時間ステップごとに毎回行われ、実空間とスペクトル空間を行き来することになる。
【０１３７】
図１１に示す数値解析処理フローでは、まず、各ノードは、ルジャンドル陪関数変換を行う際の計算領域が割り当てられる（Ｓ８０１）。言い換えれば、各ノードの記憶領域に、各ノードが数値計算する計算領域、並びに、運動方程式、連続方程式、エネルギー方程式、状態方程式等の方程式系の各変数が格納される。このような割り当て処理は、図３Ａに示すノードのいずれかが、式（７）に従う計算領域を定義したファイルを、各ノードに転送することによって行ってもよい。
【０１３８】
各ノードはフーリエ変換することで、ｇからＧｍを求める（Ｓ８０２）。各ノードは、Ｓ８０１で割り当てられた計算領域についてのルジャンドル陪関数変換の対象となるフーリエ変換の演算結果を、他のノードへ送信する（Ｓ８０３）。各ノードはＳ８０３の送信処理と共に、送信されたフーリエ変換結果を用いてルジャンドル陪関数変換する（Ｓ８０４）。各ノードは、割り当てられた計算領域についてのルジャンドル陪関数変換が終了したか否かを判断する（Ｓ８０５）。
【０１３９】
ルジャンドル陪関数変換が終了していない場合（Ｓ８０５  Ｎｏ）、Ｓ８０３を再度実行する。ルジャンドル陪関数変換が終了した場合（Ｓ８０５  Ｙｅｓ）、各ノードは、ルジャンドル陪関数変換処理の終了後、スペクトル空間において変数の空間微分の演算等を行う（Ｓ８０６）。
【０１４０】
図１２に示す数値解析処理フローでは、まず、各ノードは、逆ルジャンドル陪関数変換のための計算領域が割り当てられる（Ｓ８５１）。言い換えれば、各ノードの記憶領域に、各ノードが数値計算する計算領域、並びに、運動方程式、連続方程式、エネルギー方程式、状態方程式等の方程式系の各変数が格納される。なお、このステップは、Ｓ８０１で行われても良い。ステップＳ８５１に示す割り当て処理は、図３Ａに示すノードのいずれかが、式（９）に従う計算領域を定義したファイルを、各ノードに転送することによって行ってもよい。
【０１４１】
各ノードは、他のノードでフーリエ変換の対象となる計算領域について逆ルジャンドル陪関数変換を実行する（Ｓ８５２）。各ノードは、Ｓ８５２の式（９）によって分割された計算処理と共に、分割された計算領域についてのルジャンドル陪関数演算結果を、他のノードへ送信する（Ｓ８５３）。各ノードは、Ｓ８５１で割り当てられた計算領域についてルジャンドル倍関数変換を終了したか否かを判断する（Ｓ８５４）。
【０１４２】
ルジャンドル陪関数変換が終了していない場合（Ｓ８５４  Ｎｏ）、Ｓ８５２を再度実行する。ルジャンドル陪関数変換が終了した場合（Ｓ８５４  Ｙｅｓ）、各ノードは、実空間において運動方程式の移流項などの非線形項の計算等を行う。
【０１４３】
図１３は、図６Ｂに示す逆ルジャンドル陪関数変換処理フローの一例を示す図である。
【０１４４】
図１３に示す数値解析処理フローでは、ノードｘにおける処理の流れを規定する。逆ルジャンドル陪関数変換結果の送信先ノードを識別する番号ｉ＝ｘ−１とする（Ｓ８６１）。このとき、ｘは自然数であり、ｘの最大値は、ノードの数（Ｎｐ）から１を引いた数である。次に、各ノードは、ｉ≧０を満たすか否かを判断する（Ｓ８６２）。ｉ≧０を満たさない場合（Ｓ８６２  Ｎｏ）、ノードの番号ｉは、Ｎｐ−１に設定される（Ｓ８６４）。ｉ≧０を満たす場合（Ｓ８６２  Ｙｅｓ）、ノードは、ｃａｌｃ（ｉ）を実行する（Ｓ８６３）。ノードは、ｃｏｍｍ（ｉ）を開始する（Ｓ８６５）。言い換えれば、送信先ノードｉに、ｃａｌｃ（ｉ）による演算結果送信する。
【０１４５】
次に、各ノードは、ｉ−１≧０を満たすか否かを判断する（Ｓ８６６）。ｉ−１≧０を満たさない場合（Ｓ８６６  Ｎｏ）、ノードの番号ｉは、Ｎｐ−１に設定される（Ｓ８６８）。ｉ−１≧０を満たす場合（Ｓ８６６  Ｙｅｓ）、ノードは、ｃａｌｃ（ｉ−１）を実行する（Ｓ８６７）。ノードは、ｃｏｍｍ（ｉ）の送信終了に同期して（Ｓ８５９）、各ノードは、ｉ−１＝ｘを満たすか否かを判断する（Ｓ８７０）。ｉ−１＝ｘを満たさない場合（Ｓ８７０  Ｎｏ）、ノードの番号ｉは、ｉ−１に設定される（Ｓ８７１）。ｉ−１＝ｘを満たす場合（Ｓ８７０  Ｙｅｓ）、ノードは、図１２に示すステップＳ８５３である逆フーリエ変換を行う。
【０１４６】
ステップＳ８７１の処理が実行されると、再びｃｏｍｍ（ｉ）の通信処理が開始される（Ｓ８６５）。Ｓ８６６で、ｉ−１≧０を満たさない場合、ノードの番号ｉは、Ｎｐ−１に設定されることで、ノード番号が最も大きなノードに結果を送信する対象である計算領域のルジャンドル陪関数演算が実行され、再度降順で処理が実行される。
【０１４７】
図１４は、図６Ｃに示す逆ルジャンドル陪関数変換を行う場合における処理フローの一例を示す図である。
【０１４８】
図１４に示す数値解析処理フローでは、ステップＳ８６１〜Ｓ８６９、及びＳ８７１は、図１３を用いて説明したため、説明を省略する。ステップＳ８７１では、Ｓ８７０と異なり、同期処理を実行することなく、ｉのデクリメントを実行する。このようにすることで、先行処理の通信処理の終了を待たずにルジャンドル陪関数変換が実行されることになる。ステップＳ８８２では、最後に全てのｃｏｍｍの通信処理に同期して、その後、図１２に示すステップＳ８５３の処理である逆フーリエ変換が行われることが示される。
【０１４９】
なお、上記式（１）では、球面上の緯度、経度に関する球面調和関数について示したが、緯度、経度に加え高さの次元を加えた３次元計算についても適用可能である。例えば、３次元の場合、球面調和関数は、以下の式１２で示される。
【０１５０】
【数２０】
2011107916.tif 000022
【０１５１】
ここで、ｒｉは高度方向の格子点を表し、格子点数はＮｒとなる。
【０１５２】
また、上記した球面調和関数変換は、複数の変数を同時に球面調和関数変換する際にも適用可能である。例えば、下式１３に示すような球面調和関数変換がある。
【０１５３】
【数２１】
2011107916.tif 000023
【０１５４】
ここで、ｖｉは１つの変数を表し、Ｎｖａｒは全変数の数となる。
【０１５５】
さらに、上記した球面調和関数変換は、緯度または経度の他、高さ方向についても分割する２次元並列化についても適用可能である。高度方向の分割数をＱとした場合に、例えば、分割されたデータのｘ番目の部分の球面調和関数変換は、下記に示す式１４により示される。下記式を緯度及び経度方向に関してＰ分割して解くことができる。この場合使用する全ノード数はＰ×Ｑである。
【０１５６】
【数２２】
2011107916.tif 000024
【０１５７】
ここで、ｒｉは高度方向の格子点を表し、格子点数はＮｒとなる。
【０１５８】
以上の実施形態に関し、更に以下の付記を開示する。
［付記１］
球面調和関数を用いて行う球面のシミュレーションを行う並列計算機システムにおいて、
スペクトル空間のデータを東西波数により複数個のデータに分割されたスペクトルデータを保持する記憶部と、
前記分割された各スペクトルデータの逆ルジャンドル陪関数変換によるフーリエ係数データへの変換を、前記球面における緯度方向について、分割された計算領域について実行する演算部と、
前記演算部により変換されたフーリエ係数データを、前記演算部による次の前記球面における緯度方向について、分割された計算領域の逆ルジャンドル陪関数変換が開始してから、他の計算ノードに通信経路を介して送信する通信部と、
を含む、互いに通信経路を介して接続された複数の計算ノードを有することを特徴とする並列計算機システム。（１）
［付記２］
前記並列計算機システムにおいて、
前記演算部によるフーリエ係数データへの変換を、前記通信部によるフーリエ係数データの送信先である計算ノードが同一である計算領域毎に、緯度方向について分割して実行することを特徴とする付記１記載の並列計算機システム。（２）
［付記３］
前記並列計算機システムにおいて、
前記演算部によるフーリエ係数データへの変換のうち、前記通信部によるフーリエ係数データの送信先である計算ノードが自計算ノードであり、前記通信経路を介した通信が不要である前記緯度方向についての分割された計算領域の逆ルジャンドル陪関数変換を、最後に実行することを特徴とする付記１記載の並列計算機システム。（３）
［付記４］
前記並列計算機システムにおいて、
前記演算部によるフーリエ係数データへの変換を、前記通信部によるフーリエ係数データの送信先である計算ノードが同一である計算領域毎に、緯度方向について分割して実行する場合に、緯度方向について分割された計算領域について、緯度方向の位置の降順又は昇順に、計算及び通信を実行することを特徴とする付記２の列計算機システム。（４）
［付記５］
互いに通信経路を介して接続された複数の計算ノードを有するとともに、球面調和関数を用いて行う球面のシミュレーションを行う並列計算機システムの制御方法において、
前記計算ノードの演算部が、スペクトル空間のデータを東西波数により複数個のデータに分割された各スペクトルデータの逆ルジャンドル陪関数変換によるフーリエ係数データへの変換を、前記球面における緯度方向について、分割された計算領域について実行し、
前記計算ノードの演算部が、前記変換されたフーリエ係数データを、次の前記球面における緯度方向について、分割された計算領域の逆ルジャンドル陪関数変換を実行し、
前記計算ノードの通信部が、前記次の前記球面における緯度方向について分割された計算領域の逆ルジャンドル陪関数変換の実行を開始してから、他の計算ノードに通信経路を介して送信することを特徴とする制御方法。（５）
［付記６］
前記計算ノードの演算部が、前記フーリエ係数データへの変換を、前記通信部によるフーリエ係数データの送信先である計算ノードが同一である計算領域毎に、緯度方向について分割して実行することを特徴とする付記５記載の制御方法。（６）
［付記７］
前記計算ノードの演算部が、前記フーリエ係数データへの変換のうち、前記通信部によるフーリエ係数データの送信先である計算ノードが自計算ノードであり、前記通信経路を介した通信が不要である前記緯度方向についての分割された計算領域の逆ルジャンドル陪関数変換を、最後に実行することを特徴とする付記５記載の制御方法。（７）
［付記８］
前記計算ノードの演算部が、前記演算部によるフーリエ係数データへの変換を、前記通信部によるフーリエ係数データの送信先である計算ノードが同一である計算領域毎に、緯度方向について分割して実行する場合に、緯度方向について分割された計算領域について、緯度方向の位置の降順又は昇順に、計算及び通信を実行することを特徴とする付記６の制御方法。（８）
［付記９］
互いに通信経路を介して接続された複数の計算ノードを有する並列計算機に、球面調和関数を用いて行う球面のシミュレーションを実行させるための制御プログラムであって、
前記計算ノードの演算部に、スペクトル空間のデータを東西波数により複数個のデータに分割された各スペクトルデータの逆ルジャンドル陪関数変換によるフーリエ係数データへの変換を、前記球面における緯度方向について、分割された計算領域について実行させる手順と、
前記計算ノードの演算部に、前記変換されたフーリエ係数データを、次の前記球面における緯度方向について、分割された計算領域の逆ルジャンドル陪関数変換を実行させる手順と、
前記計算ノードの通信部に、前記次の前記球面における緯度方向について分割された計算領域の逆ルジャンドル陪関数変換の実行を開始してから、他の計算ノードに通信経路を介して送信させる手順と、を実行させることを特徴とする制御プログラム。（９）
［付記１０］
前記計算ノードの演算部に、前記フーリエ係数データへの変換を、前記通信部によるフーリエ係数データの送信先である計算ノードが同一である計算領域毎に、緯度方向について分割して実行させることを特徴とする付記９記載の制御プログラム。
［付記１１］
前記計算ノードの演算部に、前記フーリエ係数データへの変換のうち、前記通信部によるフーリエ係数データの送信先である計算ノードが自計算ノードであり、前記通信経路を介した通信が不要である前記緯度方向についての分割された計算領域の逆ルジャンドル陪関数変換を、最後に実行させることを特徴とする付記９記載の制御プログラム。
［付記１２］
前記計算ノードの演算部に、前記演算部によるフーリエ係数データへの変換を、前記通信部によるフーリエ係数データの送信先である計算ノードが同一である計算領域毎に、緯度方向について分割して実行する場合に、緯度方向について分割された計算領域について、緯度方向の位置の降順又は昇順に、計算及び通信を実行させることを特徴とする付記９記載の制御プログラム。
［付記１３］
球面調和関数を用いて行う球面のシミュレーションを行う並列計算機システムにおいて、
フーリエ空間のデータを東西波数又は経度方向に分割された複数個のデータに分割されたフーリエ係数データを保持する記憶部と、
前記フーリエ係数データのルジャンドル陪関数変換演算によるスペクトルデータへの変換を、前記分割された各フーリエ係数データごとに実行する演算部と、
前記演算部によるルジャンドル陪関数変換に使用されるフーリエ係数データの送信を、前記演算部が以前に受信したフーリエ係数データに関するルジャンドル陪関数変換が開始するのと同時のタイミングで開始する通信部と、
を含む、互いに通信経路を介して接続された複数の計算ノードを有することを特徴とする並列計算機システム。（１０）
［付記１４］
各前記計算ノードの通信部が各前記分割されたフーリエ係数データの通信を実施し、
各前記計算ノードの演算部がフーリエ係数データのルジャンドル陪関数変換演算によるスペクトルデータへの変換を各別個の前記計算ノードから受信したフーリエ係数データごとに実施する際に、各前記計算ノードの通信部からその他の１ノード以上の前記計算ノードへの通信が一回で済むようにデータを送信することを特徴とする付記１３記載の並列計算機システム。
［付記１５］
各前記計算ノードの通信部が各前記分割されたフーリエ係数データの通信を実施し、
各前記計算ノードの演算部がフーリエ係数データのルジャンドル陪関数変換演算によるスペクトルデータへの変換を各別個の前記計算ノードから受信したフーリエ係数データごとに実施する際に、各前記計算ノードの演算部は必要なフーリエ係数データの送信元が自計算ノードであるデータから最初に計算を開始することで、全てのフーリエ係数データの通信をルジャンドル陪関数変換演算と同時実行させることを特徴とする付記１３記載の並列計算機システム。
［付記１６］
各前記計算ノードの通信部が各前記分割されたフーリエ係数データの通信を実施し、
各前記計算ノードの演算部がフーリエ係数データのルジャンドル陪関数変換演算によるスペクトルデータへの変換を各別個の前記計算ノードから受信したフーリエ係数データごとに実施する際に、緯度方向に関して降順または昇順に計算および通信を実施することを特徴とする付記１３記載の並列計算機システム。
［付記１７］
互いに通信経路を介して接続された複数の計算ノードを有するとともに、球面調和関数を用いて行う球面のシミュレーションを行う並列計算機システムの制御方法において、
前記計算ノードの演算部が、フーリエ空間のデータを東西波数又は経度方向に分割された複数個のデータに分割されたフーリエ係数データのルジャンドル陪関数変換演算によるスペクトルデータへの変換を、前記分割された各フーリエ係数データごとに実行し、
前記計算ノードの通信部が、前記演算部によるルジャンドル陪関数変換に使用されるフーリエ係数データの送信を、前記演算部が以前に受信したフーリエ係数データに関するルジャンドル陪関数変換が開始するのと同時のタイミングで開始することを特徴とする制御方法。
［付記１８］
互いに通信経路を介して接続された複数の計算ノードを有する並列計算機に、球面調和関数を用いて行う球面のシミュレーションを実行させるための制御プログラムであって、
前記計算ノードの演算部に、フーリエ空間のデータを東西波数又は経度方向に分割された複数個のデータに分割されたフーリエ係数データのルジャンドル陪関数変換演算によるスペクトルデータへの変換を、前記分割された各フーリエ係数データごとに実行させ、
前記計算ノードの通信部が、前記演算部によるルジャンドル陪関数変換に使用されるフーリエ係数データの送信を、前記演算部が以前に受信したフーリエ係数データに関するルジャンドル陪関数変換が開始するのと同時のタイミングで開始することを実行させることを特徴とする制御プログラム。
【符号の説明】
【０１５９】
１０    プロセッサコア
１２    命令制御部
１４    命令実行部
１６    Ｌ１キャッシュコントローラ
１８    Ｌ１キャッシュＲＡＭ
５０    Ｌ２キャッシュコントローラ
６０    Ｌ２キャッシュＲＡＭ
７０    メモリアクセス制御部
１００    情報処理装置
１１０    演算処理部
１２０    記憶部
１３０    通信部
１４０    外部記憶装置
１５０    ドライブ装置
１６０    入力部
１７０    出力部
１９０    システムバス
１９５    記憶媒体
９００    プログラム
１０００    並列計算機システム
１１００    ネットワーク
ｊ    緯度方向における格子点の位置
ｋ    経度方向における格子点の位置
ｍ    東西波数
ｎ    南北波数
【図１】
2011107916.tif 000025
【図２】
2011107916.tif 000026
【図３Ａ】
2011107916.tif 000027
【図３Ｂ】
2011107916.tif 000028
【図４】
2011107916.tif 000029
【図５】
2011107916.tif 000030
【図６Ａ】
2011107916.tif 000031
【図６Ｂ】
2011107916.tif 000032
【図６Ｃ】
2011107916.tif 000033
【図７】
2011107916.tif 000034
【図８】
2011107916.tif 000035
【図９Ａ】
2011107916.tif 000036
【図９Ｂ】
2011107916.tif 000037
【図１０】
2011107916.tif 000038
【図１１】
2011107916.tif 000039
【図１２】
2011107916.tif 000040
【図１３】
2011107916.tif 000041
【図１４】
2011107916.tif 000042