(57)【特許請求の範囲】
【請求項１】
配列の要素に対する演算を並列で実行する複数の処理装置
を有し、
前記複数の処理装置の各々が、
当該処理装置に配置された要素のうち第１の所定数の要素に対して、第１の軸方向の演算を実行し、
演算後の前記第１の所定数の要素を当該処理装置の記憶装置に保存し、
前記複数の処理装置のうち少なくとも一部の処理装置が、
前記複数の処理装置の各々から、前記第１の所定数の要素以外の要素を取得し、
取得した前記要素に対して前記第１の軸方向の演算を実行し、
前記複数の処理装置の各々に、演算後の前記要素を第２の所定数ずつ配置する、
処理を実行する並列計算機システム。
【請求項２】
前記複数の処理装置の各々は、
前記複数の処理装置の間における全対全通信によって前記第１の所定数の要素を取得する
処理をさらに実行する請求項１記載の並列計算機システム。
【請求項３】
前記複数の処理装置の各々は、
第２の軸方向における要素の数を、前記複数の処理装置の数で除することで商を算出し、
前記第１の軸方向における要素の数に、第３の軸方向における要素の数と、算出した前記商とを乗じることで前記第１の所定数を算出する、
処理をさらに実行する請求項１又は２記載の並列計算機システム。
【請求項４】
前記複数の処理装置の各々は、
第２の軸方向における要素の数に第３の軸方向における要素の数を乗じることで算出された数を、前記複数の処理装置の数で除することで商を算出し、
前記第１の軸方向における要素の数に、算出した前記商を乗じることで前記第１の所定数を算出する、
処理をさらに実行する請求項１又は２記載の並列計算機システム。
【請求項５】
前記第１の所定数は前記第２の所定数より多い
請求項１乃至４のいずれか１つ記載の並列計算機システム。
【請求項６】
配列の要素に対する演算を並列で実行する複数の処理装置を含む並列計算機システムにおいて、
前記複数の処理装置の各々が、
当該処理装置に配置された要素のうち第１の所定数の要素に対して、第１の軸方向の演算を実行し、
演算後の前記第１の所定数の要素を当該処理装置の記憶装置に保存し、
前記複数の処理装置のうち少なくとも一部の処理装置が、
前記複数の処理装置の各々から、前記第１の所定数の要素以外の要素を取得し、
取得した前記要素に対して前記第１の軸方向の演算を実行し、
前記複数の処理装置の各々に、演算後の前記要素を第２の所定数ずつ配置する、
処理を実行する演算方法。
【請求項７】
コンピュータに、
前記コンピュータに配置された要素のうち第１の所定数の要素に対して、第１の軸方向の演算を実行し、
演算後の前記第１の所定数の要素を前記コンピュータの記憶装置に保存し、
他の複数のコンピュータから、当該他の複数のコンピュータにおける前記第１の所定数の要素以外の要素を取得した場合、取得した前記要素に対して前記第１の軸方向の演算を実行し、
前記コンピュータ及び前記他の複数のコンピュータの各々に、演算後の前記要素を第２の所定数ずつ配置する、
処理を実行させるための演算プログラム。
【請求項８】
情報処理装置であって、
記憶装置と、
前記情報処理装置に配置された要素のうち第１の所定数の要素に対して、第１の軸方向の演算を実行し、演算後の前記第１の所定数の要素を前記記憶装置に保存し、他の複数の情報処理装置から、当該他の複数の情報処理装置における前記第１の所定数の要素以外の要素を取得した場合、取得した前記要素に対して前記第１の軸方向の演算を実行し、前記情報処理装置及び前記他の複数の情報処理装置の各々に、演算後の前記要素を第２の所定数ずつ配置する配置部と、
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列分散処理に関する。
【背景技術】
【０００２】
高速フーリエ変換（Fast Fourier Transform。以下、ＦＦＴと呼ぶ）は離散フーリエ変換を高速で実行する技術であり、３次元ＦＦＴは様々な物理的問題の解析に利用される重要な計算技術である。スーパーコンピュータ等の並列計算機システムの高性能化に伴い、３次元ＦＦＴを高速で行う技術に注目が集まっている。
【０００３】
近年の並列計算機システムにおいては、性能を向上させるため多数のＣＰＵ（Central Processing Unit）が並列で動作しており、各ＣＰＵ上のプロセスが数値データを他のプロセスと交換しながら処理を進めることで全体的な処理を完成させる。３次元ＦＦＴを並列計算機システムに実行させる場合には、計算の対象となる３次元の配列（例えばユーザにより指定されたデータであり、グローバル配列と呼ばれる）を分割し、分割によって生成されたローカル配列を各プロセスに割り当てる。代表的な分割方法として、１軸分散（板状分割とも呼ばれる）、２軸分散（柱状分割とも呼ばれる）、及び３軸分散が知られている。
【０００４】
グローバル配列の分割には制約が存在する。例えば、各軸方向の要素数は、離散フーリエ変換のアルゴリズムの都合上２，３，５，或いは７程度の比較的小さな素因数に分解できることが好ましい。また、各軸方向において要素数をプロセス数で割り切れることが好ましい。そこで従来技術においては、例えば、各軸方向の要素数及びプロセス数が２の冪に設定される。しかし、要素数やプロセス数を２の冪ではない数に設定すべきケースが存在し、またデータ型が複素数型でなく実数型である場合には第１次元の要素数が２の冪にならない。そのため、要素数及びプロセス数が２の冪だけに制限されることは好ましくない。
【０００５】
また、科学技術計算で用いられる離散点の数は多様化しており、並列計算機システムも複雑化しているため、上記のような設定を採用すると一部のＣＰＵが使用されなくなるといった事態が生じることがある。
【０００６】
一方で、分割に関する制約を緩和する（すなわち、多様な要素数及びプロセス数を許容する）と、各プロセスが持つ要素数を等しくすることができないケースがしばしば発生する。特に上述の２軸分散及び３軸分散においては、計算の途中で各プロセスが持つ要素数が変化することが原因で、要素の配置を元に戻すためのデータ通信が発生する。３次元ＦＦＴの並列分散処理の場合、プロセス間のデータ通信に要する時間が全体の処理時間に占める割合が大きく、データ通信量の増加は並列分散処理の性能劣化をもたらす。
【０００７】
従来技術においては、このような問題には着目されていない。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０００−２００２６１号公報
【特許文献２】特開２００４−３４８４９３号公報
【非特許文献】
【０００９】
【非特許文献１】M. Eleftheriou, B.G. Fitch, A. Rayshubskiy, T.J.C. Ward, R.S. Germain,"Scalable framework for 3D FFTs on the Blue Gene/L supercomputer: implementation and early performance measurements", IBM Journal of Research and Development, IBM, 2005, 49, 457-464
【非特許文献２】M. Eleftheriou, B.G. Fitch, A. Rayshubskiy, T.J.C. Ward, R.S. Germain, "Performance measurements of the 3d FFT on the Blue Gene/L supercomputer", Euro-Par 2005 Parallel Processing, Springer, 2005, 795-803
【非特許文献３】Roland Schulz, "3D FFT with 2D decomposition", CS project report, 2008, [平成２７年３月３０日検索], インターネット
【非特許文献４】Ning Li, Sylvain Laizet, "2DECOMP & FFT-A Highly Scalable 2D Decomposition Library and FFT Interface", Cray User Group 2010 conference, 2010, 1-13, [平成２７年３月３０日検索], インターネット
【非特許文献５】Daisuke Takahashi, "FFTE: A Fast Fourier Transform Package", [平成２７年３月３０日検索], インターネット
【非特許文献６】T.V.T. Duy, T. Ozaki, "A decomposition method with minimum communication amount for parallelization of multi-dimensional FFTs", CoRR abs/1302.6189, 2013, [平成２７年３月３０日検索], インターネット
【非特許文献７】"OpenFFT An open Source Parallel Package for 3-D FFTs", [平成２７年３月３０日検索], インターネット
【発明の概要】
【発明が解決しようとする課題】
【００１０】
本発明の目的は、１つの側面では、並列計算機システムが３次元配列に対する３次元ＦＦＴを実行する場合において、３次元配列の分割に関する制約の緩和と性能の向上とを両立するための技術を提供することである。
【課題を解決するための手段】
【００１１】
本発明に係る並列計算機システムは、配列の要素に対する演算を並列で実行する複数の処理装置を有する。そして、複数の処理装置の各々が、当該処理装置に配置された要素のうち第１の所定数の要素に対して、第１の軸方向の演算を実行し、演算後の第１の所定数の要素を当該処理装置の記憶装置に保存し、複数の処理装置のうち少なくとも一部の処理装置が、複数の処理装置の各々から、第１の所定数の要素以外の要素を取得し、取得した要素に対して第１の軸方向の演算を実行し、複数の処理装置の各々に、演算後の要素を第２の所定数ずつ配置する処理を実行する。
【発明の効果】
【００１２】
１つの側面では、並列計算機システムが３次元配列に対する３次元ＦＦＴを実行する場合において、３次元配列の分割に関する制約の緩和と性能の向上とを両立できるようになる。
【図面の簡単な説明】
【００１３】
【図１】図１は、１軸分散の一例を示す図である。
【図２】図２は、各プロセスが持つローカル配列のサイズを示す図である。
【図３】図３は、２軸分散の一例を示す図である。
【図４】図４は、２軸分散の一例を示す図である。
【図５】図５は、２軸分散の一例を示す図である。
【図６】図６は、各プロセスが持つローカル配列のサイズを示す図である。
【図７】図７は、３軸分散の一例を示す図である。
【図８】図８は、配列の割り当ての一例を示す図である。
【図９】図９は、配列の割り当ての一例を示す図である。
【図１０】図１０は、直接網とグローバル配列との関係を示す図である。
【図１１】図１１は、全対全通信の通信量とメッセージサイズとの関係を示す図である。
【図１２】図１２は、本実施の形態の概要について説明するための図である。
【図１３】図１３は、本実施の形態の概要について説明するための図である。
【図１４】図１４は、本実施の形態の概要について説明するための図である。
【図１５】図１５は、本実施の形態の概要について説明するための図である。
【図１６】図１６は、本実施の形態における並列計算機システムの一例を示す図である。
【図１７】図１７は、各軸方向におけるプロセスの数を示す図である。
【図１８】図１８は、正変換のＦＦＴの処理フローを示す図である。
【図１９】図１９は、要素の配置の一例を示す図である。
【図２０】図２０は、要素の配置の一例を示す図である。
【図２１】図２１は、正変換のＦＦＴの処理フローを示す図である。
【図２２】図２２は、要素の配置の一例を示す図である。
【図２３】図２３は、要素の配置の一例を示す図である。
【図２４】図２４は、要素の配置の一例を示す図である。
【図２５】図２５は、正変換のＦＦＴの処理フローを示す図である。
【図２６】図２６は、要素の配置の一例を示す図である。
【図２７】図２７は、要素の配置の一例を示す図である。
【図２８】図２８は、要素の配置の一例を示す図である。
【図２９】図２９は、逆変換のＦＦＴの処理フローを示す図である。
【図３０】図３０は、逆変換のＦＦＴの処理フローを示す図である。
【図３１】図３１は、逆変換のＦＦＴの処理フローを示す図である。
【図３２】図３２は、本実施の形態の効果について説明するための図である。
【発明を実施するための形態】
【００１４】
［グローバル配列の分割］
まず、グローバル配列の分割に関する基本的な事項を説明する。以下では、３次元ＦＦＴの対象であるグローバル配列のＸ方向の要素数をＮ１、Ｙ方向の要素数をＮ２、Ｚ方向の要素数をＮ３とする。Ｘ方向のプロセス数（すなわち分割数）をＮＤ１、Ｙ方向のプロセス数をＮＤ２、Ｚ方向のプロセス数をＮＤ３とする。グローバル配列を分割することで得られるローカル配列のＸ方向の要素数をＮＰ１、Ｙ方向の要素数をＮＰ２、Ｚ方向の要素数をＮＰ３とする。また、自然数ＮをＰで割ったときの余りがゼロであることを、ｍｏｄ（Ｎ，Ｐ）＝０と表す。
【００１５】
３次元ＦＦＴにおいては、Ｘ方向のＦＦＴ、Ｙ方向のＦＦＴ、及びＺ方向のＦＦＴが行われる。通常、各軸方向のＦＦＴを行う場合には、その軸方向のデータをプロセス間の通信によって一旦特定のプロセスに配置し、その特定のプロセスがその軸方向のＦＦＴを実行する。以下では、Ｘ方向のＦＦＴを実行するためのデータをＸ方向データと呼び、Ｙ方向のＦＦＴを実行するためのデータをＹ方向データと呼び、Ｚ方向のＦＦＴを実行するためのデータをＺ方向データと呼ぶ。
【００１６】
第１に、１軸分散について説明する。図１に、１軸分散の一例を示す。図１においては、グローバル配列１００１に対して３次元ＦＦＴが実行される。グローバル配列内の立方体は要素を表す。グローバル配列１００１は、板状のローカル配列１００２乃至１００５に分割される。プロセス０がローカル配列１００２を担当し、プロセス１がローカル配列１００３を担当し、プロセス２がローカル配列１００４を担当し、プロセス３がローカル配列１００５を担当する。ローカル配列１００２乃至１００５の各々はＹ方向データ及びＺ方向データを持つ。従って、ローカル配列１００２乃至１００５の各々に対して、１回目の１次元ＦＦＴがＹ方向において行われ、次に２回目の１次元ＦＦＴがＺ方向において行われる。
【００１７】
グローバル配列１００１はＸ方向に垂直な面によって分割されているので、Ｘ方向データが複数のプロセスに分散されている。そこで、全対全通信（all-to-all communication）を実行し、各プロセスがＸ方向データを持つようにする。そして、３回目の１次元ＦＦＴがＸ方向において行われる。
【００１８】
その後、既に行われた全対全通信とは逆方向の全対全通信を実行すれば、データの配置を元に戻すことができる。Ｙ方向データ及びＺ方向データが分散して配置された状態を許容することができる場合には、通信を省略することができる。但し、その場合にはＹ方向の要素数及びＺ方向の要素数がプロセス数で割り切れることを前提とすることが多い。
【００１９】
１次元の分割においては、グローバル配列のサイズがＮ3である場合にはプロセス数がＮ以上であってもデータをＮ以上に分割できないため、プロセス数の増加による性能向上を見込めない。実際には、Ｎの大きさは数千以下であることが一般的であるが、近年の大規模なスーパーコンピュータは数万プロセスが動作する。さらに、直接網ネットワークとの適合性及びメッセージ長が性能にもたらす影響を考慮すると、１軸分散より多軸分散の方が好ましいと考えられる。
【００２０】
一例として、１０×９×８のグローバル配列をＺ方向に垂直な面で分割することを考える。まず、Ｚ方向のプロセス数が８よりも多い場合、Ｎ３＝８であるので分割することができない。例えば、プロセス数が４である場合には分割することできる。しかし、データを再配置してＸ方向に分割したデータを出力する場合に、Ｎ１＝１０を４で割り切ることができないことが原因で、データの取り扱いが難しくなる。これはＹ方向についても同様である。図２に、ＭＰＩ（Message Passing Interface）におけるalltoallvの通信の前後に各プロセスが持つローカル配列のサイズを示す。図２の例においてプロセス数は４である。Ｚ方向分割とは、Ｚ方向に垂直な面での分割であり、Ｘ方向分割とはＸ方向に垂直な面での分割である。Ｚ方向分割の場合、各プロセスが持つローカル配列のサイズは同じである。しかしながら、Ｘ方向分割の場合には、各プロセスが持つローカル配列のサイズは同じではない。具体的には、プロセス３が持つローカル配列のサイズが他のプロセスが持つローカル配列のサイズより小さい。
【００２１】
ローカル配列のサイズが不均一になることは、負荷が不均一になり並列化で性能向上を図ることができなくなるという点で好ましくない。また、どれだけ要素数が増える可能性があるかをユーザが事前に見積もったうえで、作業用領域の配列（或いは、出力用の別配列）を用意することになる。これは、汎用的で使いやすいインタフェースのルーチンを設計するという点で好ましくない。なお、ＦＦＴ関連の機能においては入力配列と出力配列とを兼用する（すなわち、In-place処理が採用される）ことが多い。しかし、ローカル配列のサイズが不均一になる場合にもIn-place処理を実現する場合には、データの配置を元に戻すための通信を行うことになる。
【００２２】
第２に、２軸分散について説明する。２軸分散においては、例えば図３に示すように、グローバル配列が柱状のローカル配列に分割される。図３においては、同じプロセスが持つ要素には同じ色が付けられている。まず、各ローカル配列に対してＸ方向のＦＦＴが実行される。次に、ＸＹ平面上のプロセスの間で全対全通信を実行することで、図４に示すようにデータの割り当てが変更される。そして、各ローカル配列に対してＹ方向のＦＦＴが実行される。次に、ＹＺ平面上のプロセスの間で全対全通信を実行することで、図５に示すようにデータの割り当てが変更される。そして、各ローカル配列に対してＺ方向のＦＦＴが実行される。
【００２３】
この場合、入力されたデータがＸ方向の柱状に分割されていたのに対し、出力されるデータはＺ方向の柱状に分割されることになる。従って、出力されるデータもＸ方向の柱状に分割されていることが好ましい場合には、データの配置を変更するための通信を行うことになる。
【００２４】
図６に、２軸分散の場合に各プロセスが持つローカル配列のサイズを示す。図６の例は、１０×９×８のグローバル配列を３×４のプロセスグリッドで分割する例である。図６においては、Ｘ方向の柱については、各プロセスのローカル配列のサイズは同じであるが、Ｙ方向及びＺ方向の柱については、各プロセスのローカル配列のサイズは同じではない。このように配列のサイズが異なると、例えば汎用的なソフトウエアを提供しようとする場合に技術的に大きな問題となる。特に、入力データのデータ型が複素数型ではなく実数型である場合、第１次元の出力要素数がＮ１（実数）からＮ１／２＋１（複素数）に変わるため、分割の数に関する強い制約になる。例えばＮ１＝８１９２である場合、出力要素数は第１次元の方向において複素数で４０９７であるので、プロセス数は素因数である１７又は２４１に限定される。以上のような事情から、２軸分散においては以下のような制約を満たすことを前提とする場合がある。
【００２５】
ｍｏｄ（Ｎ２，ＮＤ２）＝０
ｍｏｄ（Ｎ３，ＮＤ３）＝０
ｍｏｄ（Ｎ１，ＮＤ２）＝０
ｍｏｄ（Ｎ２，ＮＤ３）＝０
【００２６】
第３に、３軸分散について説明する。図７に、３軸分散の一例を示す。図７に示すように、３軸分散においてはＸ方向、Ｙ方向、及びＺ軸方向のいずれについても分割が行われる。プロセス０乃至７の各々には、直方体又は立方体の形状のローカル配列が割り当てられる。
【００２７】
各軸方向で行われるＦＦＴは基本的には同じであるため、ここではＺ方向を例にして説明する。Ｚ方向プロセスグループのみを考えた場合、３軸分散におけるＺ方向のＦＦＴは１軸分散におけるＺ方向のＦＦＴに相当する。Ｚ方向プロセスグループとは、Ｚ方向に並んだプロセスのことであり、図７の例では、プロセス０とプロセス４が同じＺ方向プロセスグループに属し、プロセス１とプロセス５が同じＺ方向プロセスグループに属し、プロセス２とプロセス６が同じＺ方向プロセスグループに属し、プロセス３とプロセス７が同じＺ方向プロセスグループに属する。
【００２８】
しかし、或るＺ方向プロセスグループについてのＹ方向の要素数Ｎ２ＰをＮＤ３で割り切ることができない場合、図２に示したように、ローカル配列のサイズが不均一になる。そこで、例えば、Ｚ方向のＦＦＴ多重度（＝Ｎ１Ｐ×Ｎ２Ｐ＝（Ｎ１／ＮＤ１）×（Ｎ２／ＮＤ２））をＺ方向プロセスグループに属するプロセスに分配するという方式が採用される。その場合にもローカル配列のサイズが不均一になる可能性があるため、ｍｏｄ（Ｎｉ，ＮＤｉ）＝０、ｉ＝１，２，３の条件に加え、以下の３つの条件が課される。
【００２９】
ｍｏｄ（Ｎ１Ｐ×Ｎ２Ｐ，ＮＤ３）＝０
ｍｏｄ（Ｎ２Ｐ×Ｎ３Ｐ，ＮＤ１）＝０
ｍｏｄ（Ｎ３Ｐ×Ｎ１Ｐ，ＮＤ２）＝０
【００３０】
このような条件が満されてない場合、ローカル配列のサイズが不均一になる。例えば、図８に示すグローバル配列に対してプロセス０乃至９がＺ方向のＦＦＴを実行することを考える。グローバル配列のサイズは８×８×１０であるとする。Ｚ方向のＦＦＴを実行するため全対全通信を実行しデータを並び替えると、例えば図９のようになる。図９においては、各プロセスがＺ方向データを持つようになっているが、Ｚ軸方向のＦＦＴ多重度８×８＝６４を１０で割り切ることができないため、プロセス９が持つ要素数が他のプロセスが持つ要素数より少なくなっている。具体的には、プロセス０乃至８が持つ要素数は７０であり、プロセス９が持つ要素数は１０である。このような配置を元に戻すためには、全対全通信を再度行うことになる。そのため、Ｘ方向、Ｙ方向、及びＺ方向のいずれについても要素を等分配できない場合には、合計６回の全対全通信を行うことになる。従って、３軸分散の場合は１軸分散及び２軸分散の場合と比較して、通信量が多くなる傾向がある。
【００３１】
なお、３軸分散においてＸ方向やＹ方向の分割数を１とみなすことで、上述の方法とは異なる１軸分散及び２軸分散を行うことも可能である。これらの方法は３軸分散の特殊ケースであるので、分割に関する制約及び通信量の特徴は３軸分散で説明した内容と基本的に同じである。上述の１軸分散及び２軸分散と比較すると、要素数の不均一の程度を小さくすることができる一方、配置を元に戻すための通信を省略することが難しい。
【００３２】
なお、ネットワークの形状に合わせてデータを分散することができるため、特に直接網の場合に多軸分散方式にメリットが有る。一例として、図１０に、スーパーコンピュータ「京」のネットワーク（以下、このネットワークのトポロジを「６次元メッシュ／トーラス」と呼ぶ）とグローバル配列との関係を示す。図１０においては、６次元形状がＸＹＺａｂｃで表される。例えば１２×１６の２次元形状が指定された場合、Ｘａｂ＝２×２×３を第１次元に割り当て、ＹＺｃ＝２×４×２を第２次元に割り当てることができる。
【００３３】
但し、間接網である場合に必ずしも多軸分散が有効でないわけではない。上で述べたとおり１軸分散の場合には一辺の要素数以上のプロセスを使用することはできない。また、図１１に示すように、１軸分散では全対全通信におけるメッセージ長が短くなるため、通信効率が低下する。図１１において、縦軸は全対全通信の通信効率（各ノードの単位時間当たりの通信量）を表し、横軸はメッセージのサイズを示す。この例では、８×４×８のＴｏｆｕインターコネクトの通信量と、８×４×８のＩｎｆｉｎｉＢａｎｄ  ＱＤＲ（Quad Data Rate）の通信量とが、いずれも、メッセージサイズが小さいほど少なく、メッセージサイズが大きいほど多い。すなわち、メッセージ長が短くなるほど通信効率が低下する。
【００３４】
よって、多軸分散にすることによってプロセス間の通信量が増えたとしても、それを上回る程度に通信効率を改善できる場合には、間接網であっても多軸分散が有効な方法となり得る。
【００３５】
［本実施の形態の概要］
上で述べた１軸分散及び２軸分散については、ローカル配列のサイズが不均一にならないようにすることが難しいため、本実施の形態においては３軸分散を採用する。３軸分散の場合、通常はＦＦＴの後にデータの配置を元に戻す処理を実行するので、各方向のＦＦＴ及び通信を作業用配列のサイズに応じて分割して行うことが可能である。これにより、要素数が増加する可能性を考慮して作業用配列を用意しなくてもよくなり、インタフェースが簡素化する。また、本実施の形態においては、ＦＦＴ後にデータの配置を元に戻す処理を一部の要素についてのみ実行することで通信量を削減し、並列計算機システムの性能を向上させる。
【００３６】
図１２乃至図１５を用いて、本実施の形態の概要について説明する。Ｘ方向のＦＦＴについては、従来技術と同様の処理を行うので説明を省略し、Ｙ方向及びＺ方向の３×４プロセスグリッドで１０×９×８のグローバル配列を２軸分割する例を示す。各プロセスは１０×３×２＝６０の要素を持つ。すなわち、ｍｏｄ（Ｎ２，ＮＤ２）＝０且つｍｏｄ（Ｎ３，ＮＤ３）＝０が成立する。
【００３７】
正変換のＦＦＴをＸ方向、Ｙ方向、Ｚ方向の順に適用してから逆変換のＦＦＴをＺ方向、Ｙ方向、Ｘ方向の順に適用して元の配置に戻す場合、Ｚ方向の正変換とＺ方向の逆変換との間では要素の並びに制約が無い。そこで、まずＺ方向プロセスグループの処理について説明する。
【００３８】
Ｚ方向については、１つのＺ方向プロセスグループが処理する配列のサイズを１０×３×８の直方体であるとみなし、各プロセスが処理する配列のサイズを１０×３×２であるとみなすことができる。１０×３×８の配列は、グローバル配列の１／３に相当する。Ｚ方向プロセスグループのＦＦＴ多重度は１０×３＝３０であり、３０を４で割り切ることはできない。従来は３０＝８＋８＋８＋６として各プロセスに要素を割り当てていたので要素数が不均一であったが、本実施の形態においては、まず２８＝７＋７＋７＋７として各プロセスに要素（大ブロック）を割り当て、Ｚ方向のＦＦＴを実行させる。各プロセスは、ＦＦＴ後の要素を自プロセスが管理する出力配列に格納する。次に、残りの２要素（小ブロック）を、Ｚ方向プロセスグループのうち少なくとも一部のプロセス（例えば、２つのプロセス）に割り当て、そのプロセスにＺ方向のＦＦＴを実行させる。そして、その２要素の配置を元に戻すための通信を行う。結果として、Ｚ方向プロセスグループにおけるプロセス０乃至３が担当するローカル配列は、図１２のようになる。このような配置であれば、プロセス０乃至３の各々が持つ要素の数は同じである。
【００３９】
Ｙ方向については、１つのＹ方向プロセスグループが処理する配列のサイズを１０×９×２の直方体であるとみなし、各プロセスが処理する配列のサイズを１０×３×２であるとみなすことができる。１０×９×２の配列は、グローバル配列の１／４に相当する。Ｙ方向のＦＦＴ多重度は１０×２＝２０であり、２０を３で割り切ることはできない。従来は２０＝７＋７＋６として各プロセスに要素を割り当てていたので要素数が不均一であったが、本実施の形態においては、まず１８＝６＋６＋６として各プロセスに要素（大ブロック）を割り当て、そのプロセスにＹ方向のＦＦＴを実行させる。各プロセスは、ＦＦＴ後の要素を自プロセスが管理する出力配列に格納する。次に、残りの２要素（小ブロック）を、Ｙ方向のプロセスグループのうち少なくとも一部のプロセス（例えば、２つのプロセス）に割り当て、そのプロセスにＹ方向のＦＦＴを実行させる。そして、その２要素の配置を元に戻すための通信を行う。
【００４０】
なお、Ｙ方向のＦＦＴの結果は、Ｚ方向の要素の並びを崩さないという条件が満たされるように各プロセスに配置されなければならない。この条件によれば、元の１０×３×２の配列においてＺ方向に隣り合っていた要素については、Ｙ方向のＦＦＴ結果の格納時にもＺ方向に隣り合うようになる。結果として、Ｙ方向プロセスグループにおけるプロセス１０乃至１２が担当するローカル配列は、図１３のようになる。このような配置であれば、プロセス１０乃至１２の各々が持つ要素の数は同じである。
【００４１】
図１４に、Ｙ方向ＦＦＴ後の配列サイズ及びＺ方向ＦＦＴ後の配列サイズを示す。図１４に示すように、Ｙ方向ＦＦＴ後に一部の要素について戻し通信が行われると、各プロセスが持つ要素の数は同じになる。同様に、Ｚ方向ＦＦＴ後に一部の要素について戻し通信が行われると、各プロセスが持つ要素の数は同じになる。
【００４２】
なお、通信用の作業領域が小さい場合には、大ブロックについての処理を分割することも可能である。図１５に、大ブロックの処理をさらに場合における要素の配置を示す。この例では、１８＝（４＋２）＋（４＋２）＋（４＋２）として各プロセスに要素が割り当てられている。通常は、メッセージ長が短くなり通信効率が悪化することを避けるため分割は行われない。しかしながら、メッセージ長が十分な長さであれば通信効率は安定しているため、分割が性能に悪影響を及ぼすことが無い。むしろ、階層的メモリ構造を有するＣＰＵの場合には処理のブロック化により性能が改善されることがあり、また、一括通信方式では困難であった通信と演算のオーバーラップが可能になる。
【００４３】
［本実施の形態の具体的内容］
図１６に、本実施の形態における並列計算機システムの一例を示す。ノード１００乃至６００は、例えば直接網である通信ネットワーク７００を介して接続される。通信ネットワーク７００の形状は、例えば６次元メッシュ／トーラスであるが、この形状には限られない。また、図１６においてはノードの数が６であるが、数に限定は無い。
【００４４】
なお、通信ネットワークの構成は、直接網と間接網とに大別される。多次元の格子状にノードが接続されたネットワークは直接網と呼ばれる。例えばスーパーコンピュータ「京」のＴｏｆｕネットワークは直接網である。一方、ネットワークスイッチ等のスイッチ機構を介してノードが接続されるネットワークは間接網と呼ばれる。例えば、ファットツリー型のネットワークやクロスバー型のネットワークは間接網である。
【００４５】
ノード１００は、ＣＰＵ１１０と、ＣＰＵ１２０と、ＣＰＵ１１０及びＣＰＵ１２０に使用される共有メモリ１３０とを有する。ＣＰＵ１１０は、キャッシュメモリ１１１と、コア１１２乃至１１７とを有する。ＣＰＵ１２０は、キャッシュメモリ１２１と、コア１２２乃至１２７とを有する。図１６においてはＣＰＵ１１０及びＣＰＵ１２０のコアの数は６であるが、数に限定は無い。
【００４６】
本実施の形態におけるプロセスを実現するためのプログラム（例えばＭＰＩのプログラム）は、別途設けられた記憶装置に格納されており、実行時には共有メモリ１３０或いは別途設けられたメインメモリ等にロードされる。ＣＰＵ１１０及びＣＰＵ１２０は、プログラムの実行によって１又は複数のプロセスを実現する。
【００４７】
なお、ノード２００の構成はノード１００の構成と同様であるので、説明を省略する。また、ノード３００乃至６００の構成は、ノード１００及びノード２００の構成と同様である。
【００４８】
次に、図１７乃至図３２を用いて、本実施の形態における並列計算機システムの動作について説明する。ここでは、図１７に示すように、ＮＤ１＝３、ＮＤ２＝４、ＮＤ３＝３として３６個のプロセスに配列を割り当てるものとする。そして、Ｎ１Ｐ＝Ｎ１／ＮＤ１、Ｎ２Ｐ＝Ｎ２／ＮＤ２、Ｎ３Ｐ＝Ｎ３／ＮＤ３が成立する。
【００４９】
まず、正変換のＦＦＴについて説明する。
【００５０】
並列計算機システムにおいて動作するプロセスの各々は、自プロセスが処理を担当するデータ（すなわち、ローカル配列の要素）の入力を受け付け（図１８：ステップＳ１）、自プロセスが管理する記憶領域（ここでは、共有メモリにおける一部の領域）に格納する。データは、例えばユーザによって入力される。
【００５１】
各プロセスは、同じＸ方向プロセスグループに属するプロセスとの間で、要素の配置を変更するためのデータ通信を実行する（ステップＳ３）。例えば図１７の例であれば、プロセス０乃至２は同じＸ方向プロセスグループに属し、プロセス３乃至５は同じＸ方向プロセスグループに属し、プロセス６乃至８は同じＸ方向プロセスグループに属し、プロセス９乃至１１は同じＸ方向プロセスグループに属し、プロセス１２乃至１４は同じＸ方向プロセスグループに属し、プロセス１５乃至１７は同じＸ方向プロセスグループに属し、プロセス１８乃至２０は同じＸ方向プロセスグループに属し、プロセス２１乃至２３は同じＸ方向プロセスグループに属し、プロセス２４乃至２６は同じＸ方向プロセスグループに属し、プロセス２７乃至２９は同じＸ方向プロセスグループに属し、プロセス３０乃至３２は同じＸ方向プロセスグループに属し、プロセス３３乃至３５は同じＸ方向プロセスグループに属する。
【００５２】
ステップＳ３におけるデータ通信は、例えば全対全通信である。図１９に、データ通信の実行前における要素配置の一例を示す。図１９においては、データ１９００がプロセス０に配置され、データ１９０１がプロセス１に配置され、データ１９０２がプロセス２に配置されている。図１９の例では、Ｘ方向データがプロセス０乃至２に分散されているため、この状態ではプロセス０乃至２はＸ方向のＦＦＴを実行することができない。そこで、ステップＳ３におけるデータ通信によって配列の要素を交換し、各プロセスがＸ方向データを持つようにする。図２０に、データ通信の実行後における要素配置の一例を示す。図２０の例では、各プロセスはデータ１９０１乃至１９０２それぞれの一部を持っており、各プロセスにＸ方向データが配置されている。
【００５３】
図１８の説明に戻り、各プロセスは、自プロセスが持つ要素に対してＸ方向のＦＦＴを実行する（ステップＳ５）。
【００５４】
但し、このままでは、Ｙ方向のＦＦＴ及びＺ方向のＦＦＴを実行することができない。そこで、各プロセスは、同じＸ方向プロセスグループに属するプロセスとの間で、要素の配置を元に戻すためのデータ通信を実行する（ステップＳ７）。そして、各プロセスは、Ｘ方向ＦＦＴ後の要素を自プロセスが管理する記憶領域（ここでは、出力配列の領域）に格納する。処理は端子Ａを介して図２１のステップＳ９の処理に移行する。
【００５５】
ステップＳ７におけるデータ通信は、例えば全対全通信であり、ステップＳ３におけるデータ通信の逆方向の通信である。ステップＳ７におけるデータ通信によって、要素は再び図１９に示すように配置される。
【００５６】
図２１の説明に移行し、各プロセスは、第１の計算式に従い、自プロセスが持つ要素から、大ブロックに属する要素と小ブロックに属する要素とを特定する（ステップＳ９）。第１の計算式とは、例えば、Ｎ２Ｐ×Ｎ３Ｐ×Ｎ１Ｐblockという計算式である。ここで、Ｎ１Ｐblock＝ＦＬＯＯＲ（Ｎ１Ｐ／ＮＤ２）とする。ＦＬＯＯＲ（）は、小数点以下の値を切り捨てる関数である。前者の式によって、大ブロックに属する要素の数を算出できる。自プロセスが持つ要素の中から、算出した数の要素が大ブロックに属する要素として特定される。大ブロックに属する要素以外の要素が小ブロックに属する要素である。なお、上記第１の計算式には、Ｚ方向の要素の並びを崩さないという条件が反映されている。
【００５７】
各プロセスは、同じＹ方向プロセスグループに属するプロセスとの間で、大ブロックに属する要素の配置を変更するためのデータ通信を実行する（ステップＳ１１）。例えば図１７の例であれば、プロセス０、３、６及び９は同じＹ方向プロセスグループに属し、プロセス１、４、７及び１０は同じＹ方向プロセスグループに属し、プロセス２、５、８及び１１は同じＹ方向プロセスグループに属し、プロセス１２、１５、１８及び２１は同じＹ方向プロセスグループに属し、プロセス１３、１６、１９及び２２は同じＹ方向プロセスグループに属し、プロセス１４、１７、２０及び２３は同じＹ方向プロセスグループに属し、プロセス２４、２７、３０及び３３は同じＹ方向プロセスグループに属し、プロセス２５、２８、３１及び３４は同じＹ方向プロセスグループに属し、プロセス２６、２９、３２及び３５は同じＹ方向プロセスグループに属する。ステップＳ１１におけるデータ通信は、例えば全対全通信である。
【００５８】
各プロセスは、自プロセスが持つ、大ブロックのうち担当する部分に対してＹ方向のＦＦＴを実行する（ステップＳ１３）。そして、各プロセスは、Ｙ方向ＦＦＴ後の要素を自プロセスが管理する記憶領域（ここでは、出力配列の領域）に格納する（ステップＳ１５）。
【００５９】
各プロセスは、同じＹ方向プロセスグループに属するプロセスとの間で、小ブロックに属する要素の配置を変更するためのデータ通信を実行する（ステップＳ１７）。ステップＳ１７におけるデータ通信は、例えばＭＰＩにおけるalltoallvの通信或いは全対全通信である。
【００６０】
図２２に、ステップＳ１１におけるデータ通信の実行前におけるデータ配置の一例を示す。図２２においては、データ２２００がプロセス０に配置され、データ２２０１がプロセス３に配置され、データ２２０２がプロセス６に配置され、データ２２０３がプロセス９に配置されている。図２２の例では、Ｙ方向データが４つのプロセスに分散されているため、この状態ではプロセス０、３、６、及び９はＹ方向のＦＦＴを実行することができない。そこで、ステップＳ１１におけるデータ通信によって大ブロックの要素を交換し、各プロセスがＹ方向データを持つようにする。また、ステップＳ１７におけるデータ通信によって小ブロックに属する要素の配置を変更し、４つのプロセスの少なくとも一部にＹ方向データを集める。
【００６１】
図２３に、データ通信の実行後におけるデータ配置の一例を示す。図２３の例では、各プロセスは大ブロックのＹ方向データ及び小ブロックのＹ方向データを持つ。図２３の例では、各プロセスが小ブロックのＹ方向データを持つが、一部のプロセスが持つようにしてもよい。また、図２３に示すように、必ずしも各プロセスが同じ数の要素を持つわけではない。
【００６２】
図２１の説明に戻り、小ブロックに属する要素を持つプロセスは、自プロセスが持つ、小ブロックのうち担当する部分に対してＹ方向のＦＦＴを実行する（ステップＳ１９）。
【００６３】
各プロセスは、同じＹ方向プロセスグループに属するプロセスとの間で、小ブロックに属する要素の配置を元に戻すためのデータ通信を実行する（ステップＳ２１）。そして、各プロセスは、Ｙ方向ＦＦＴ後の要素を自プロセスが管理する記憶領域（ここでは、出力配列の領域）に格納する。処理は端子Ｂを介して図２５のステップＳ２３の処理に移行する。なお、ステップＳ２１におけるデータ通信は、例えばＭＰＩにおけるalltoallvの通信或いは全対全通信であり、ステップＳ１７におけるデータ通信の逆方向の通信である。ステップＳ２１におけるデータ通信によって、要素は図２４に示すように配置される。図２４の例においては、各プロセスが持つ要素の数は同じである。
【００６４】
図２５の説明に移行し、各プロセスは、第２の計算式に従い、自プロセスが持つ要素から、大ブロックに属する要素と小ブロックに属する要素とを特定する（ステップＳ２３）。第２の計算式とは、例えば、Ｎ３Ｐ×Ｍblockという計算式である。ここで、Ｍblock＝ＦＬＯＯＲ（（Ｎ１Ｐ＊Ｎ２Ｐ）／ＮＤ３）とする。前者の式によって、大ブロックに属する要素の数を算出できる。自プロセスが持つ要素の中から、算出した数の要素が大ブロックに属する要素として特定される。大ブロックに属する要素以外の要素が小ブロックに属する要素である。
【００６５】
各プロセスは、同じＺ方向プロセスグループに属するプロセスとの間で、大ブロックに属する要素の配置を変更するためのデータ通信を実行する（ステップＳ２５）。例えば図１７の例であれば、プロセス０、１２、及び２４は同じＺ方向プロセスグループに属し、プロセス１、１３、及び２５は同じＺ方向プロセスグループに属し、プロセス２、１４、及び２６は同じＺ方向プロセスグループに属し、プロセス３、１５、及び２７は同じＺ方向プロセスグループに属し、プロセス４、１６、及び２８は同じＺ方向プロセスグループに属し、プロセス５、１７、及び２９は同じＺ方向プロセスグループに属し、プロセス６、１８、及び３０は同じＺ方向プロセスグループに属し、プロセス７、１９、及び３１は同じＺ方向プロセスグループに属し、プロセス８、２０、及び３２は同じＺ方向プロセスグループに属し、プロセス９、２１、及び３３は同じＺ方向プロセスグループに属し、プロセス１０、２２、及び３４は同じＺ方向プロセスグループに属し、プロセス１１、２３、及び３５は同じＺ方向プロセスグループに属する。ステップＳ２５におけるデータ通信は、例えば全対全通信である。
【００６６】
各プロセスは、自プロセスが持つ、大ブロックのうち担当する部分に対してＺ方向のＦＦＴを実行する（ステップＳ２７）。そして、各プロセスは、Ｚ方向ＦＦＴ後の要素を自プロセスが管理する記憶領域（ここでは、出力配列の領域）に格納する（ステップＳ２９）。
【００６７】
各プロセスは、同じＺ方向プロセスグループに属するプロセスとの間で、小ブロックに属する要素の配置を変更するためのデータ通信を実行する（ステップＳ３１）。ステップＳ３１におけるデータ通信は、例えばＭＰＩにおけるalltoallvの通信或いは全対全通信である。
【００６８】
図２６に、ステップＳ２５におけるデータ通信の実行前におけるデータ配置の一例を示す。図２６においては、データ２６００がプロセス０に配置され、データ２６０１がプロセス１２に配置され、データ２６０２がプロセス２４に配置されている。図２６の例では、Ｚ方向データが３つのプロセスに分散されているため、この状態ではプロセス０、１２、及び２４はＺ方向のＦＦＴを実行することができない。そこで、ステップＳ２５におけるデータ通信によって大ブロックの要素を交換し、各プロセスがＺ方向データを持つようにする。また、ステップＳ３１におけるデータ通信によって小ブロックに属する要素の配置を変更し、３つのプロセスの少なくとも一部にＺ方向データを集める。
【００６９】
図２７に、データ通信の実行後におけるデータ配置の一例を示す。図２７の例では、プロセス０は大ブロックのＺ方向データ及び小ブロックのＺ方向データを持っており、プロセス１２及び２４は大ブロックのＺ方向データを持っている。図２７の例では、プロセス０が小ブロックのＺ方向データを持っているが、他のプロセスが持つようにしてもよい。また、図２７に示すように、必ずしも各プロセスが同じ数の要素を持つわけではない。
【００７０】
図２５の説明に戻り、小ブロックに属する要素を持つプロセスは、自プロセスが持つ、小ブロックのうち担当する部分に対してＺ方向のＦＦＴを実行する（ステップＳ３３）。
【００７１】
各プロセスは、同じＺ方向プロセスグループに属するプロセスとの間で、小ブロックに属する要素の配置を元に戻すためのデータ通信を実行する（ステップＳ３５）。そして、各プロセスは、Ｚ方向ＦＦＴ後の要素を自プロセスが管理する記憶領域（ここでは、出力配列の領域）に格納する。そして処理を終了する。なお、ステップＳ３５におけるデータ通信は、例えばＭＰＩにおけるalltoallvの通信或いは全対全通信であり、ステップＳ３１におけるデータ通信の逆方向の通信である。ステップＳ３１におけるデータ通信によって、要素は図２８に示すように配置される。図２８の例においては、各プロセスが持つ要素の数は同じである。
【００７２】
次に、逆変換のＦＦＴについて説明する。逆変換のＦＦＴは、基本的には、正変換のＦＦＴの逆の処理である。
【００７３】
並列計算機システムにおいて動作するプロセスの各々は、正変換後の要素配置でデータ（すなわち、ローカル配列の要素）の入力を受け付け（図２９：ステップＳ４１）、自プロセスが管理する記憶領域（ここでは、共有メモリにおける一部の領域）に格納する。
【００７４】
各プロセスは、第２の計算式に従い、自プロセスが持つ要素から、大ブロックに属する要素と小ブロックに属する要素とを特定する（ステップＳ４３）。
【００７５】
各プロセスは、同じＺ方向プロセスグループに属するプロセスとの間で、小ブロックに属する要素の配置を変更するためのデータ通信を実行する（ステップＳ４５）。ステップＳ４５におけるデータ通信は、例えばＭＰＩにおけるalltoallvの通信或いは全対全通信である。
【００７６】
小ブロックに属する要素を持つプロセスは、自プロセスが持つ、小ブロックのうち担当する部分に対してＺ方向のＦＦＴを実行する（ステップＳ４７）。
【００７７】
各プロセスは、同じＺ方向プロセスグループに属するプロセスとの間で、小ブロックに属する要素の配置を元に戻すためのデータ通信を実行する（ステップＳ４９）。そして、各プロセスは、Ｚ方向ＦＦＴ後の要素を自プロセスが管理する記憶領域（ここでは、出力配列の領域）に格納する。なお、ステップＳ４９におけるデータ通信は、例えばＭＰＩにおけるalltoallvの通信或いは全対全通信であり、ステップＳ４５におけるデータ通信の逆方向の通信である。
【００７８】
各プロセスは、自プロセスが持つ、大ブロックのうち担当する部分に対してＺ方向のＦＦＴを実行する（ステップＳ５１）。そして、各プロセスは、Ｚ方向ＦＦＴ後の要素を自プロセスが管理する記憶領域（ここでは、出力配列の領域）に格納する（ステップＳ５３）。
【００７９】
各プロセスは、同じＺ方向プロセスグループに属するプロセスとの間で、大ブロックに属する要素の配置を元に戻すためのデータ通信を実行する（ステップＳ５５）。ステップＳ５５におけるデータ通信は、例えば全対全通信である。処理は端子Ｃを介して図３０のステップＳ５７に移行する。
【００８０】
図３０の説明に移行し、各プロセスは、第１の計算式に従い、自プロセスが持つ要素から、大ブロックに属する要素と小ブロックに属する要素とを特定する（ステップＳ５７）。
【００８１】
各プロセスは、同じＹ方向プロセスグループに属するプロセスとの間で、小ブロックに属する要素の配置を変更するためのデータ通信を実行する（ステップＳ５９）。ステップＳ５９におけるデータ通信は、例えばＭＰＩにおけるalltoallvの通信或いは全対全通信である。
【００８２】
小ブロックに属する要素を持つプロセスは、自プロセスが持つ、小ブロックのうち担当する部分に対してＹ方向のＦＦＴを実行する（ステップＳ６１）。
【００８３】
各プロセスは、同じＹ方向プロセスグループに属するプロセスとの間で、小ブロックに属する要素の配置を元に戻すためのデータ通信を実行する（ステップＳ６３）。そして、各プロセスは、Ｙ方向ＦＦＴ後の要素を自プロセスが管理する記憶領域（ここでは、出力配列の領域）に格納する。なお、ステップＳ６３におけるデータ通信は、例えばＭＰＩにおけるalltoallvの通信或いは全対全通信であり、ステップＳ５９におけるデータ通信の逆方向の通信である。
【００８４】
各プロセスは、自プロセスが持つ、大ブロックのうち担当する部分に対してＹ方向のＦＦＴを実行する（ステップＳ６５）。そして、各プロセスは、Ｙ方向ＦＦＴ後の要素を自プロセスが管理する記憶領域（ここでは、出力配列の領域）に格納する（ステップＳ６７）。
【００８５】
各プロセスは、同じＹ方向プロセスグループに属するプロセスとの間で、大ブロックに属する要素の配置を元に戻すためのデータ通信を実行する（ステップＳ６９）。ステップＳ６９におけるデータ通信は、例えば全対全通信である。処理は端子Ｄを介して図３１のステップＳ７１に移行する。
【００８６】
図３１の説明に移行し、各プロセスは、同じＸ方向プロセスグループに属するプロセスとの間で、要素の配置を変更するためのデータ通信を実行する（ステップＳ７１）。ステップＳ７１におけるデータ通信は、例えば全対全通信である。
【００８７】
各プロセスは、自プロセスが持つ要素に対してＸ方向のＦＦＴを実行する（ステップＳ７３）。
【００８８】
各プロセスは、同じＸ方向プロセスグループに属するプロセスとの間で、要素の配置を元に戻すためのデータ通信を実行する（ステップＳ７５）。そして、各プロセスは、Ｘ方向ＦＦＴ後の要素を自プロセスが管理する記憶領域（ここでは、出力配列の領域）に格納する。そして処理を終了する。なお、ステップＳ７５におけるデータ通信は、例えば全対全通信であり、ステップＳ７１におけるデータ通信の逆方向の通信である。
【００８９】
図３２を用いて、本実施の形態の効果について説明する。１軸分散或いは２軸分散によってグローバル配列を単純分割する場合と、ＦＦＴ多重度をプロセス間で分割する場合とが比較されている。比較の項目は、全対全通信の通信量、制約の強さ、及び全プロセス数がＮＰである場合のメッセージ長である。本実施の形態の方法に該当する部分には網掛けが付されている。ＮＳとは、図１５を用いて説明した、大ブロックの処理の分割数である。
【００９０】
図３２に示すように、本実施の形態によれば、要素の並びを元に戻す通信を通常どおり実行する方法と比べると、全対全通信の通信量を減らすことができるようになる。また、グローバル配列の分割に関する制限を緩和することができるようになる。さらに、大ブロックの処理を分割すれば、処理のブロック化により性能が改善されることがあり、また、一括通信方式では困難であった通信と演算のオーバーラップが可能になることがある。
【００９１】
以上のように、本実施の形態においては、出力配列の要素数がプロセス間で不均一にならないように要素が配置され、また、そのための通信方法が工夫されている。これにより、各軸方向の要素数及び分割数に課せられる制約を緩和して汎用性を高めることが可能になり、また、通信量を抑えることで高い性能で計算を行うことができるようになる。
【００９２】
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、処理フローにおいては、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
【００９３】
また、上で示した分割態様は一例に過ぎない。例えば、小ブロックに属する要素の配置については、上で示した例に限られるわけではない。
【００９４】
以上述べた本発明の実施の形態をまとめると、以下のようになる。
【００９５】
本実施の形態の第１の態様に係る並列計算機システムは、（Ａ）配列の要素に対する演算を並列で実行する複数の処理装置を有する。そして、複数の処理装置の各々が、（ａ１）当該処理装置に配置された要素のうち第１の所定数の要素に対して、第１の軸方向の演算を実行し、（ａ２）演算後の第１の所定数の要素を当該処理装置の記憶装置に保存し、複数の処理装置のうち少なくとも一部の処理装置が、（ａ３）複数の処理装置の各々から、第１の所定数の要素以外の要素を取得し、（ａ４）取得した要素に対して第１の軸方向の演算を実行し、（ａ５）複数の処理装置の各々に、演算後の要素を第２の所定数ずつ配置する処理を実行する。
【００９６】
このようにすれば、各処理装置に同じ数の要素を保存することができ、配列の分割に関する制約の緩和と並列計算機システムの性能向上とを両立できるようになる。
【００９７】
また、複数の処理装置の各々は、（ａ６）複数の処理装置の間における全対全通信によって第１の所定数の要素を取得する処理をさらに実行してもよい。このようにすれば、第１の軸方向の演算の対象となる要素を揃えることができるようになる。
【００９８】
また、複数の処理装置の各々は、（ａ７）第２の軸方向における要素の数を、複数の処理装置の数で除することで商を算出し、（ａ８）第１の軸方向における要素の数に、第３の軸方向における要素の数と、算出した商とを乗じることで第１の所定数を算出する処理をさらに実行してもよい。このようにすれば、第１の所定数を可能な限り大きくすることができるので、通信量削減の効果が高くなる。
【００９９】
また、複数の処理装置の各々は、（ａ９）第２の軸方向における要素の数に第３の軸方向における要素の数を乗じることで算出された数を、複数の処理装置の数で除することで商を算出し、（ａ１０）第１の軸方向における要素の数に、算出した商を乗じることで第１の所定数を算出する処理をさらに実行してもよい。このようにすれば、第１の所定数を可能な限り大きくすることができるので、通信量削減の効果が高くなる。
【０１００】
また、第１の所定数は第２の所定数より多くてもよい。このようにすれば、通信量がより少なくなるので、通信量の増加による性能劣化を抑制できるようになる。
【０１０１】
また、演算は３次元高速フーリエ変換であってもよい。
【０１０２】
また、配列は３次元配列であってもよい。
【０１０３】
本実施の形態の第２の態様に係る演算方法は、コンピュータにより実行される。そして、本演算方法は、（Ｂ）コンピュータに配置された要素のうち第１の所定数の要素に対して、第１の軸方向の演算を実行し、（Ｃ）演算後の第１の所定数の要素をコンピュータの記憶装置に保存し、（Ｄ）他の複数のコンピュータから、当該他の複数のコンピュータにおける第１の所定数の要素以外の要素を取得した場合、取得した要素に対して第１の軸方向の演算を実行し、（Ｅ）コンピュータ及び他の複数のコンピュータの各々に、演算後の要素を第２の所定数ずつ配置する処理を含む。
【０１０４】
なお、上記方法による処理をプロセッサに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【０１０５】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１０６】
（付記１）
配列の要素に対する演算を並列で実行する複数の処理装置
を有し、
前記複数の処理装置の各々が、
当該処理装置に配置された要素のうち第１の所定数の要素に対して、第１の軸方向の演算を実行し、
演算後の前記第１の所定数の要素を当該処理装置の記憶装置に保存し、
前記複数の処理装置のうち少なくとも一部の処理装置が、
前記複数の処理装置の各々から、前記第１の所定数の要素以外の要素を取得し、
取得した前記要素に対して前記第１の軸方向の演算を実行し、
前記複数の処理装置の各々に、演算後の前記要素を第２の所定数ずつ配置する、
処理を実行する並列計算機システム。
【０１０７】
（付記２）
前記複数の処理装置の各々は、
前記複数の処理装置の間における全対全通信によって前記第１の所定数の要素を取得する
処理をさらに実行する付記１記載の並列計算機システム。
【０１０８】
（付記３）
前記複数の処理装置の各々は、
第２の軸方向における要素の数を、前記複数の処理装置の数で除することで商を算出し、
前記第１の軸方向における要素の数に、第３の軸方向における要素の数と、算出した前記商とを乗じることで前記第１の所定数を算出する、
処理をさらに実行する付記１又は２記載の並列計算機システム。
【０１０９】
（付記４）
前記複数の処理装置の各々は、
第２の軸方向における要素の数に第３の軸方向における要素の数を乗じることで算出された数を、前記複数の処理装置の数で除することで商を算出し、
前記第１の軸方向における要素の数に、算出した前記商を乗じることで前記第１の所定数を算出する、
処理をさらに実行する付記１又は２記載の並列計算機システム。
【０１１０】
（付記５）
前記第１の所定数は前記第２の所定数より多い
付記１乃至４のいずれか１つ記載の並列計算機システム。
【０１１１】
（付記６）
前記演算は３次元高速フーリエ変換である
付記１乃至５のいずれか１つ記載の並列計算機システム。
【０１１２】
（付記７）
前記配列は３次元配列である
付記１乃至６のいずれか１つ記載の並列計算機システム。
【０１１３】
（付記８）
配列の要素に対する演算を並列で実行する複数の処理装置を含む並列計算機システムにおいて、
前記複数の処理装置の各々が、
当該処理装置に配置された要素のうち第１の所定数の要素に対して、第１の軸方向の演算を実行し、
演算後の前記第１の所定数の要素を当該処理装置の記憶装置に保存し、
前記複数の処理装置のうち少なくとも一部の処理装置が、
前記複数の処理装置の各々から、前記第１の所定数の要素以外の要素を取得し、
取得した前記要素に対して前記第１の軸方向の演算を実行し、
前記複数の処理装置の各々に、演算後の前記要素を第２の所定数ずつ配置する、
処理を実行する演算方法。
【０１１４】
（付記９）
コンピュータに、
前記コンピュータに配置された要素のうち第１の所定数の要素に対して、第１の軸方向の演算を実行し、
演算後の前記第１の所定数の要素を前記コンピュータの記憶装置に保存し、
他の複数のコンピュータから、当該他の複数のコンピュータにおける前記第１の所定数の要素以外の要素を取得した場合、取得した前記要素に対して前記第１の軸方向の演算を実行し、
前記コンピュータ及び前記他の複数のコンピュータの各々に、演算後の前記要素を第２の所定数ずつ配置する、
処理を実行させるための演算プログラム。
【０１１５】
（付記１０）
情報処理装置であって、
記憶装置と、
前記情報処理装置に配置された要素のうち第１の所定数の要素に対して、第１の軸方向の演算を実行し、演算後の前記第１の所定数の要素を前記記憶装置に保存し、他の複数の情報処理装置から、当該他の複数のコンピュータにおける前記第１の所定数の要素以外の要素を取得した場合、取得した前記要素に対して前記第１の軸方向の演算を実行し、前記情報処理装置及び前記他の複数の情報処理装置の各々に、演算後の前記要素を第２の所定数ずつ配置する配置部と、
を有する情報処理装置。
【符号の説明】
【０１１６】
１００，２００，３００，４００，５００，６００  ノード
７００  通信ネットワーク
１１０，１２０，２１０，２２０  ＣＰＵ
１１１，１２１，２１１，２２１  キャッシュメモリ
１１２，１１３，１１４，１１５，１１６，１１７，１２２，１２３，１２４，１２５，１２６，１２７，２１２，２１３，２１４，２１５，２１６，２１７，２２２，２２３，２２４，２２５，２２６，２２７  コア
１３０，２３０  共有メモリ
【図１】
0006511937.tif 000002
【図２】
0006511937.tif 000003
【図３】
0006511937.tif 000004
【図４】
0006511937.tif 000005
【図５】
0006511937.tif 000006
【図６】
0006511937.tif 000007
【図７】
0006511937.tif 000008
【図８】
0006511937.tif 000009
【図９】
0006511937.tif 000010
【図１０】
0006511937.tif 000011
【図１１】
0006511937.tif 000012
【図１２】
0006511937.tif 000013
【図１３】
0006511937.tif 000014
【図１４】
0006511937.tif 000015
【図１５】
0006511937.tif 000016
【図１６】
0006511937.tif 000017
【図１７】
0006511937.tif 000018
【図１８】
0006511937.tif 000019
【図１９】
0006511937.tif 000020
【図２０】
0006511937.tif 000021
【図２１】
0006511937.tif 000022
【図２２】
0006511937.tif 000023
【図２３】
0006511937.tif 000024
【図２４】
0006511937.tif 000025
【図２５】
0006511937.tif 000026
【図２６】
0006511937.tif 000027
【図２７】
0006511937.tif 000028
【図２８】
0006511937.tif 000029
【図２９】
0006511937.tif 000030
【図３０】
0006511937.tif 000031
【図３１】
0006511937.tif 000032
【図３２】
0006511937.tif 000033