(57)【特許請求の範囲】
【請求項１】
複数のプロセッサと、各プロセッサに対応して設けられた２次キャッシュと、各プロセッサに内蔵された１次キャッシュと、各プロセッサと該２次キャッシュを介して接続された相互結合網と、該相互結合網を介して各プロセッサがアクセス可能な複数のメモリモジュールとを有する共有メモリ型スカラ並列計算機における多次元フーリエ変換の並列処理方法であって、
該複数のメモリモジュールに格納された変換すべき多次元データを該複数のプロセッサの数と同じ数の複数の２次元データに分割して、対応する２次元データのフーリエ変換を、まず複数の行を各プロセッサの作業域にコピーすることでＬ１キャッシュに保持して、行ベクトルの変換を繰り返し行うことで、各プロセッサの２次キャッシュメモリに該２次元データを格納する分割ステップと、
該２次キャッシュメモリに格納される該２次元データを複数列分各プロセッサの作業域にコピーして、Ｌ１キャッシュに保持し、列ベクトルの変換を繰り返し行うことで各プロセッサで２次元フーリエ変換する２次元フーリエ変換ステップと、
上記２次元フーリエ変換ステップを必要な回数繰り返し、必要に応じて、残った１次元分のフーリエ変換を、該１次元及び２次元要素を前記相互結合網を介して、各プロセッサの作業域にコピーし、Ｌ１キャッシュ上で、各プロセッサに分担して処理させる１次元フーリエ変換ステップと、
を備えることを特徴とする並列処理方法を情報装置に実現させるプログラムを格納した、情報装置読み取り可能な記録媒体。
【請求項２】
前記２次元フーリエ変換ステップにおいて、前記２次キャッシュメモリから、ある次元方向のベクトルデータを複数本ずつ１次キャッシュメモリにコピーして、順次処理を行うことを特徴とする請求項１に記載の記録媒体。
【請求項３】
前記多次元フーリエ変換は、３次元フーリエ変換であることを特徴とする請求項１に記載の記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、共有メモリ型スカラ並列計算機における多次元フーリエ変換の並列処理方法に関する。
【０００２】
【従来の技術】
ベクトル計算機向け多次元フーリエ変換は、ベクトル長をなるべく大きくすることを目標にして開発されている。特に３次元フーリエ変換など、高次のフーリエ変換を行う時には、ベクトル長をｎ１×ｎ２（ｎ１、ｎ２は、フーリエ変換を行うべきデータの１つの次元方向の長さ）にとるアルゴリズムを採用していた。
【０００３】
また、ＲＩＳＣのスカラプロセッサでは、データをキャッシュに保存して再利用することが、性能を引き出す上でのキーポイントとなる。このため、１次元目のフーリエ変換を行う時には、１次元目のデータが３次元目になるような転置を行ってからフーリエ変換を行い、変換後再度転置を行ってもとに戻す方法を使っていた。
【０００４】
また、３次元フーリエ変換で利用する１次元フーリエ変換も内部でベクトル長を長くする方式を採用していた。
【０００５】
【発明が解決しようとする課題】
しかしながら、共有メモリ型スカラ並列計算機においては、１次キャッシュメモリや２次キャッシュメモリに格納されているデータを有効に利用して計算しないと、共有メモリとプロセッサ間の通信が頻繁に起こり、大きなオーバヘッドとなってしまう。
【０００６】
本発明の課題は、キャッシュメモリを有効に利用した多次元フーリエ変換の並列処理方法を提供することである。
【０００７】
【課題を解決するための手段】
本発明の並列処理方法は、複数のプロセッサを有する共有メモリ型スカラ並列計算機における多次元フーリエ変換の並列処理方法であって、変換すべき多次元データを該複数のプロセッサの数と同じ数の複数の２次元データに分割して、各プロセッサの２次キャッシュメモリに格納する分割ステップと、該２次キャッシュメモリに格納される該２次元データを各プロセッサで２次元フーリエ変換する２次元フーリエ変換ステップと、上記２次元フーリエ変換ステップを必要な回数繰り返し、必要に応じて、残った１次元分のフーリエ変換を各プロセッサに分担して処理させる１次元フーリエ変換ステップとを備えることを特徴とする。
【０００８】
本発明によれば、多次元フーリエ変換において、２次キャッシュメモリに格納されているデータを有効に利用してフーリエ変換ができるので、共有メモリとのデータのやりとりを頻繁に行う必要が無く、効率の良い並列処理を行うことができる。
【０００９】
【発明の実施の形態】
ＲＩＳＣのスカラプロセッサをつなぐメモリは、共有してアクセスできるＳＭＰマシンでは、各プロセッサにキャッシュがある。更に１次キャッシュ、２次キャッシュがある。
【００１０】
図１は、共有メモリ型スカラ並列計算機のハードウェア構成例を示す図である。
共有メモリ型スカラ並列計算機は、複数のプロセッサ１０−１、１０−２、・・・１０−ｎが２次キャッシュメモリ１３−１、１３−２、・・・１３−ｎを介して相互結合網１２に接続される。各プロセッサ１０−１、１０−２、・・・１０−ｎは、その内部あるいは、２次キャッシュメモリ１３−１、１３−２、・・・１３−ｎよりプロセッサ側に１次キャッシュメモリが設けられる。また、各プロセッサ１０−１、１０−２、・・・１０−ｎに共有となっているメモリモジュール１１−１、１１−２、・・・１１−ｎは、相互結合網１２を介してプロセッサ１０−１、１０−２、・・・１０−ｎがアクセス可能となってる。プロセッサ１０−１、１０−２、・・・１０−ｎがデータ処理を行う場合には、まず、メモリモジュール１１−１、１１−２、・・・１１−ｎから１つのプロセッサが担当するデータを２次キャッシュメモリ１３−１、１３−２、・・・１３−ｎに格納し、更に、２次キャッシュメモリから処理単位となるデータを１次キャッシュメモリにコピーして処理を行う。
【００１１】
処理が終わると、１次キャッシュメモリから２次キャッシュメモリに処理データが格納され、２次キャッシュメモリ内のデータが全て処理し終わると、メモリモジュール１１−１、１１−２、・・・１１−ｎの内、最初にデータを持ってきたメモリモジュールに対してデータの更新を行う。また、次のデータ処理を行う場合には、上述したように、メモリモジュールから各プロセッサが担当する分のデータを２次キャッシュメモリに格納し、１次キャッシュメモリに処理単位のデータを持ってきて、プロセッサが処理を行う。このような処理を繰り返して、並列にデータ処理を完了する。このとき、各プロセッサが処理した後のデータをメモリモジュールに書き込み、次の処理のために、再びメモリモジュールからデータを読み込む際、各プロセッサが自分のタイミングでデータの読み込みを行っていたのでは、データ更新された後のデータを読み込むべきところを、データ更新される前のデータを読み込んでしまう可能性が有る。したがって、このときには、全てのプロセッサがメモリモジュールにデータ更新し終わるまで、他のプロセッサがメモリモジュールからデータを読み込まないようにする必要がある。このように、プロセッサのメモリモジュールからのデータの読み込みを制限して、全体のプロセッサの処理の同期をとることをバリア同期（Barrier Ｓynchronization）を取るという。
【００１２】
本実施形態では、以下の方法で並列化を行う。
３次元目を均等に分割して各ＰＥで１次元及び２次元のフーリエ変換を行う。このとき、３次元目の各次元要素に対する２次元データに対して２次元フーリエ変換を行う。１次元目と２次元目に関するフーリエ変換をＬ２キャッシュ（２次キャッシュメモリ）を有効利用して２次元フーリエ変換として行い、更に、この変換で行う１次元フーリエ変換を数本まとめて作業域にコピーして行うことでＬ１キャッシュ（１次キャッシュメモリ）を有効に利用する。更に、Ｌ２キャッシュからＬ１キャッシュへの展開を効率よく行うために作業域を連続域に確保して、連続アクセス中心のアルゴリズムを利用する。
【００１３】
最後に、３次元目に関しては各プロセッサにデータを配分してフーリエ変換を行うことで並列に処理する。
図２は、本発明の実施形態の処理の流れを示すフローチャートである。
【００１４】
まず、ステップＳ１において、３次元目のデータ要素を各プロセッサに分担させる。そして、ステップＳ２において、分担した３次元目のデータに対応した２次元でのフーリエ変換を行う。そして、以下で、各プロセッサで２次元データの行方向のフーリエ変換を行い、このとき行方向を数本例えば４本程度束ねて作業用配列（１次キャッシュメモリ）にコピーして処理を行う。
【００１５】
まず、ステップＳ３において、各プロセッサで対応する３次元目の要素に対する２次元フーリエ変換が終わったか否かを判断する。判断がＹＥＳの場合には、ステップＳ８に進む。判断がＮＯの場合には、ステップＳ４に進み、２次元目に関する（行ベクトル）のフーリエ変換を数本束ねて作業域にコピーしてから２次キャッシュ（Ｌ２キャッシュ）メモリ上で行う。そして、ステップＳ５において、２次元目の変換は全て終わったか否かの判断を行う。判断がＮＯの場合には、ステップＳ４に戻って変換処理を続ける。
【００１６】
ステップＳ５の判断がＹＥＳの場合には、ステップＳ６に進む。ステップＳ６においては、１次元目に関する（行ベクトル）フーリエ変換を数本束ねて作業域にコピーしてから（Ｌ１キャッシュ上で）行う。
【００１７】
ステップＳ７においては、１次元目の変換は全て終わったか否かが判断される。判断がＮＯの場合には、ステップＳ６に戻って、処理を続ける。ステップＳ７における判断がＹＥＳの場合には、ステップＳ３に戻る。
【００１８】
ステップＳ３の判断がＹＥＳの場合には、ステップＳ８に進んで、１次元及び２次元要素を各プロセッサに均等に配分する。そして、ステップＳ９において、各プロセッサで３次元目のデータを割り当てられた１次元及び２次元要素の中から数本作業域にコピーして、多重１次元フーリエ変換を行う。そして、ステップＳ１０において、多重１次元フーリエ変換が終わったか否かを判断し、判断がＮＯの場合には、ステップＳ９に戻って処理を続け、判断がＹＥＳの場合には、処理を終了する。
【００１９】
なお、上記、フローチャートでは、３次元フーリエ変換について示したが、本実施形態は、その他の次元でも適用可能である。
図３〜図６は、本実施形態の動作を説明する図である。
【００２０】
なお、これらの図では、３次元フーリエ変換を４スレッド（プロセッサ）で実行する場合に限定して説明するが、同様の方法がもっと多数のスレッドあるいは他の次元のフーリエ変換などにも適用できることは当業者によれば容易に理解されるであろう。
【００２１】
まず、図３に示されるように、２５６×２５６×２５６の複素３次元データを４スレッドでフーリエ変換する場合、この複素３次元データを３次元目の方向で４つに分割する。今の場合、３次元目の方向を６４＋６４＋６４＋６４に分解する。そして、以下の配列（２次キャッシュメモリ）にそれぞれのデータを格納する。
スレッド１：Ｃ（１：２５６、１：２５６、１：６４）
スレッド２：Ｃ（１：２５６、１：２５６、６５：１２８）
スレッド３：Ｃ（１：２５６、１：２５６、１２９：１９２）
スレッド４：Ｃ（１：２５６、１：２５６、１９３：２５６）
なお、ここで、１：２５６という記号は、インデックスが１〜２５６の変数値を配列に設定するという意味である。また、Ｃ（ｘ、ｙ、ｚ）において、ｘが１次元目、ｙが２次元目、ｚが３次元目である。
【００２２】
そして、各スレッドで１次元目及び２次元目のフーリエ変換を行う。スレッド１では、３次元目が１〜６４までを担当する。最初、スレッド１では、３次元目が１の２次元データに対して２次元フーリエ変換を行う。
【００２３】
図４は、各スレッドにおいて、２次元フーリエ変換を行う場合の作業域の利用方法を説明する図である。
フーリエ変換を行うとき、Ｌ１キャッシュに全データがのるように、作業域（Ｌ１キャッシュ）に複数本のデータをコピーして計算する。そして、結果を元の領域に返却する。この返却する領域は、Ｌ２キャッシュ上で連続領域となる。そして、参照・書き込まれたデータは、Ｌ２キャッシュに残るようになる。
【００２４】
これを繰り返して行方向のフーリエ変換を最初に行う。次に、列方向のフーリエ変換を行う。このとき、２５６×２５６の行方向のアクセスでＬ２キャッシュ上にあるデータを再利用でき効率がよい。
【００２５】
図５は、列方向の処理の仕方を説明する図である。
作業域（１次キャッシュメモリ）の大きさは、行ベクトルを複数本コピーしたときと同じ大きさでよい。
【００２６】
すなわち、図４の例で言えば、２次元データの２次元目の方向を４本ずつにわけ、作業域にコピーして１次元目の方向の処理を行い。１次元目方向について全て演算が終了した後に、今度は、１次元目方向を４本ずつにわけて、作業域にコピーし、２次元目方向について演算を行う。
【００２７】
そして、この操作を３次元目が１〜６４について繰り返し行う。
最後に、３次元目のデータに関して、各スレッドで並列にフーリエ変換を行う。
【００２８】
図６は、３次元目の方向のフーリエ変換の様子を説明する図である。
すなわち、スレッド１〜スレッド４までで２次元フーリエ変換が終了したデータを共有メモリに格納し、逐次共有メモリから各スレッドが担当するデータをＬ２キャッシュにコピーして演算を行う。
【００２９】
このときはＬ２キャッシュを効率よく使うことはできないが、Ｌ１キャッシュにデータを載せて計算を行うため、２次元フーリエ変換を行うときに使った作業域に数本のベクトルをコピーして３次元目の方向のフーリエ変換を行う。
【００３０】
１次キャッシュメモリが１２８ｋｂ、２次キャッシュメモリが８Ｍｂであるとすると、１次キャッシュの大きさとして、例えば、フーリエ変換の長さが
〜２５６のとき、１３本
〜５１２のとき、１０本
〜１０２４のとき、７本
これ以上のとき、３本
というように、作業域に読み込むベクトルの本数を決定して作業域に読み込み、演算を実行する。
【００３１】
また、４次元フーリエ変換の場合には、上記した２次元フーリエ変換を１次元目と２次元目について行った後、３次元目と４次元目について行うようにする。これ以上の次元についても同様であって、偶数次元の場合には、上記した２次元フーリエ変換を繰り返し行えばよく、奇数次元の場合には、２次元フーリエ変換を適当回数行った後、残った１次元について各スレッドで変換を行えばよい。このための詳細な処理方法については、当業者によれば容易に実現可能であろう。
【００３２】
なお、上記実施形態の説明において、フーリエ変換の演算方法については、説明しなかったが、これは、当業者によれば公知の技術であると考えられるので、当業者の知識によれば、上記実施形態は容易に実現されるであろう。
【００３３】
なお、本発明の実施形態は、上記説明から分かるように、共有メモリ型スカラ並列計算機のアルゴリズムとして与えられるので、このアルゴリズムをプログラムとして実現することになる。あるいは、該並列計算機をフーリエ変換専用機として使用する場合には、ＲＯＭなどにプログラムを書き込んでおくことも可能であるが、汎用の並列計算機として使用する場合には、本発明の実施形態のアルゴリズムは、ＣＤ−ＲＯＭ等の可搬記録媒体や、ハードディスクなどの記録媒体にプログラムとして記録しておき、必要に応じて、プログラムをプロセッサにロードして使用する形態が考えられる。
【００３４】
このような場合、本発明の実施形態のアルゴリズムを実現するプログラムは、可搬記録媒体などを使って、ユーザに配布が可能である。
（付記１）複数のプロセッサを有する共有メモリ型スカラ並列計算機における多次元フーリエ変換の並列処理方法であって、
変換すべき多次元データを該複数のプロセッサの数と同じ数の複数の２次元データに分割して、各プロセッサの２次キャッシュメモリに格納する分割ステップと、
該２次キャッシュメモリに格納される該２次元データを各プロセッサで２次元フーリエ変換する２次元フーリエ変換ステップと、
上記２次元フーリエ変換ステップを必要な回数繰り返し、必要に応じて、残った１次元分のフーリエ変換を各プロセッサに分担して処理させる１次元フーリエ変換ステップと、
を備えることを特徴とする並列処理方法を情報装置に実現させるプログラムを格納した、情報装置読み取り可能な記録媒体。
【００３５】
（付記２）前記２次元フーリエ変換ステップにおいて、前記２次キャッシュメモリから、ある次元方向のベクトルデータを複数本ずつ１次キャッシュメモリにコピーして、順次処理を行うことを特徴とする付記１に記載の記録媒体。
【００３６】
（付記３）前記多次元フーリエ変換は、３次元フーリエ変換であることを特徴とする付記１に記載の記録媒体。
（付記４）複数のプロセッサを有する共有メモリ型スカラ並列計算機における多次元フーリエ変換の並列処理方法であって、
変換すべき多次元データを該複数のプロセッサの数と同じ数の複数の２次元データに分割して、各プロセッサの２次キャッシュメモリに格納する分割ステップと、
該２次キャッシュメモリに格納される該２次元データを各プロセッサで２次元フーリエ変換する２次元フーリエ変換ステップと、
上記２次元フーリエ変換ステップを必要な回数繰り返し、必要に応じて、残った１次元分のフーリエ変換を各プロセッサに分担して処理させる１次元フーリエ変換ステップと、
を備えることを特徴とする並列処理方法。
【００３７】
（付記５）複数のプロセッサを有する共有メモリ型スカラ並列計算機における多次元フーリエ変換の並列処理装置であって、
変換すべき多次元データを該複数のプロセッサの数と同じ数の複数の２次元データに分割して、各プロセッサの２次キャッシュメモリに格納する分割手段と、
該２次キャッシュメモリに格納される該２次元データを各プロセッサで２次元フーリエ変換する２次元フーリエ変換手段と、
上記２次元フーリエ変換ステップを必要な回数繰り返し、必要に応じて、残った１次元分のフーリエ変換を各プロセッサに分担して処理させる１次元フーリエ変換手段と、
を備えることを特徴とする並列処理装置。
【００３８】
【発明の効果】
本発明によれば、高性能かつスケーラビリティのある並列多次元フーリエ変換が実現できる。
【図面の簡単な説明】
【図１】共有メモリ型スカラ並列計算機のハードウェア構成例を示す図である。
【図２】本発明の実施形態の処理の流れを示すフローチャートである。
【図３】本実施形態の動作を説明する図（その１）である。
【図４】本実施形態の動作を説明する図（その２）である。
【図５】本実施形態の動作を説明する図（その３）である。
【図６】本実施形態の動作を説明する図（その４）である。
【符号の説明】
１０−１〜１０−ｎ      プロセッサ
１１−１〜１１−ｎ      メモリモジュール
１２      相互結合網
１３−１〜１３−ｎ      ２次キャッシュメモリ
【図１】
0003639207.tif 000002
【図２】
0003639207.tif 000003
【図３】
0003639207.tif 000004
【図４】
0003639207.tif 000005
【図５】
0003639207.tif 000006
【図６】
0003639207.tif 000007