(57)【要約】【課題】大規模な多次元配列データに対しても高速にフーリエ変換を実行すること。【解決手段】本発明は、ダイナミック型のメモリデバイスを使用したメモリシステム上に格納された多次元配列データにアクセスする方法であって、多次元配列データのうち少なくとも二次元以上のインデクスの下位ビットを、メモリデバイスのページ内アドレスを表すカラムアドレスに均等に割り振ってメモリアドレスを生成する。【選択図】      図２
2005189970.tif 000002
【特許請求の範囲】
【請求項１】
ダイナミック型のメモリデバイスを使用したメモリシステム上に格納された多次元配列データにアクセスする方法であって、
前記多次元配列データのうち少なくとも二次元以上のインデクスの下位ビットを、前記メモリデバイスのページ内アドレスを表すカラムアドレスに均等に割り振ってメモリアドレスを生成する多次元配列アクセス方法。
【請求項２】
請求項１に記載の多次元配列アクセス方法において、
前記カラムアドレスに割り振り可能なように前記下位ビットを決定し、前記インデクスにおけるこの下位ビット以外のビットである上位ビットを、ロウアドレスに割り振ってメモリアドレスを生成する多次元配列アクセス方法。
【請求項３】
ダイナミック型のメモリデバイスを使用したメモリシステム上に格納された多次元配列データにアクセスする装置であって、
前記多次元配列データのうち少なくとも二次元以上のインデクスの下位ビットを、前記メモリデバイスのページ内アドレスを表すカラムアドレスに均等に割り振ってメモリアドレスを生成する多次元配列アクセス装置。
【請求項４】
請求項３に記載の多次元配列アクセス装置において、
前記カラムアドレスに割り振り可能なように前記下位ビットを決定し、前記インデクスにおけるこの下位ビット以外のビットである上位ビットを、ロウアドレスに割り振ってメモリアドレスを生成する多次元配列アクセス装置。
【請求項５】
請求項３または請求項４に記載の多次元配列アクセス装置によって生成されたメモリアドレスを用いて、着目している次元以外のインデクスを固定し、着目している次元の配列のインデクスのみを変化させて前記多次元配列データからなる一次元スキャンラインを取り出し、同一ページにアクセスする場合、前記多次元配列データへのアクセスが連続的になるように、前記カラムアドレスを連続的に与えるようにしたメモリ制御装置。
【請求項６】
請求項３または請求項４に記載の多次元配列アクセス装置と、
請求項５に記載のメモリ制御装置と、
請求項５に記載のメモリ制御装置によって取り出された一次元スキャンラインを、フーリエ変換に必要なスキャンラインとして格納する格納手段と、
前記格納手段に格納されたスキャンラインに基づいてフーリエ変換演算を行う演算手段と
を備えたフーリエ変換装置。
【請求項７】
請求項６に記載のフーリエ変換装置において、
前記格納手段に格納されたスキャンラインを読み出し、この読み出したスキャンラインを前記演算手段に出力するとともに、前記演算手段から演算結果を取り込み、この取り込んだ演算結果を前記格納手段に書き込む２つのバッファメモリを更に備え、
一方のバッファメモリが、前記演算装置へのスキャンラインの出力、または前記演算装置からの演算結果の取り込みを行っている間に、他方のバッファメモリが、前記格納手段からのスキャンラインの読み出し、または前記格納手段への演算結果の書き込みを行うようにしたフーリエ変換装置。
【請求項８】
請求項７に記載のフーリエ変換装置において、
前記スキャンラインを読み出したバッファメモリのアドレスのビット順を上下反転させるプリビット反転手段と、
前記演算装置から演算結果を取り込んだバッファメモリのアドレスのビット順を上下反転させるポストビット反転手段と
のうちの何れか１つを更に備えたフーリエ変換装置。
【請求項９】
請求項６乃至８のうち何れか１項に記載のフーリエ変換装置において、
前記フーリエ変換演算に必要な回転因子を記憶したデータテーブルを更に備え、
前記演算手段は、前記データテーブルに記憶された回転因子を用いて前記フーリエ変換演算を行うようにしたフーリエ変換装置。
【請求項１０】
請求項６乃至９のうち何れか１項に記載のフーリエ変換装置において、
スキャン方向に対応したカウントアップの順番を定義し、定義結果に基づいて前記メモリアドレス生成装置が前記下位ビットを前記カラムアドレスに均等に割り振ってメモリアドレスを生成するように前記多次元配列アクセス装置を制御するコントローラを更に備えたフーリエ変換装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、多次元配列アクセス方法、多次元配列アクセス装置、メモリ制御装置、およびフーリエ変換装置に係り、更に詳しくは、コンピュータによって実行される科学技術計算等で用いられる大規模な多次元配列データに対してアクセスする方法と装置、該アクセス時においてメモリを制御する装置、および該アクセスする方法を適用してフーリエ変換を施す装置に関する。
【背景技術】
【０００２】
科学技術計算は自然界の三次元空間を解析空間とし、空間周波数によって解析することによって一般的に行われている。
【０００３】
特に量子力学では、電子の波動関数を三次元空間上の平面波を基底関数として記述する解法が良く用いられる。この場合、１０００原子程度の系の電子状態を解析するのに２５６３個のデータを必要とする。これは１データを複素数の倍精度浮動小数点数を用いて表す２５６Ｍバイトのメモリサイズとなる。高速フーリエ変換（以下、「ＦＦＴ」と称する。）は定義通りに計算する離散フーリエ変換の手法と比較して、演算回数がＮ２からＮｌｏｇ２Ｎへと激減するため、非常に広く採用されている手法である。このような高速フーリエ変換に関する公知資料としては、下記非特許文献１が詳しい。
【０００４】
しかし、多次元配列データの場合には、各スキャン方向に対して、最低一度ずつフーリエ変換する必要があり、多次元配列データに対するメモリアクセスが処理時間を律速してしまい、演算回数を減少した効果が充分に発揮されないことが多い。
【０００５】
一般的にＰＣなどの汎用コンピュータなどの主記憶をはじめとして、ある程度大容量のメモリシステムは、ＳＤＲＡＭ（シンクロナスＤＲＡＭ）のようなビット単価の安く、実装効率の優れたダイナミック型ＲＡＭ（ＤＲＡＭ）が使用されている。
【０００６】
ＤＲＡＭ型メモリの特徴は、デバイス全体が二次元構造を採っていて、アドレスの上位をロウ（Ｒｏｗ）アドレスとして与え、同一のロウアドレスのデータを全て読み出してメモリデバイス内部のバッファに格納し、次に下位アドレスをカラム（Ｃｏｌｕｍｎ）アドレスとして与えるとバッファ上の所望のアドレスにアクセスできる。従って、上位アドレスが変化せず下位アドレスのみが変化するような場合には、新たにロウアドレスを与える必要がなく、カラムアドレスのみ与えればよいので高速にアクセスできる。
【０００７】
しかしながら、前回のアクセスと上位アドレスが異なる場合には、新たにロウアドレスを与えてロウデータを読み出す必要が生ずるため、アクセス時間が極端に増大してしまう。
【０００８】
一般的に、ＰＣのような汎用コンピュータのメモリシステム等は、このようなＤＲＡＭ型デバイスの特徴を充分考慮し、例えばメモリシステムとキャッシュメモリ間のデータ転送などメモリデバイスに対して連続アドレスにアクセスされるように設計されている。
【０００９】
ところが、多次元配列として定義されたデータは各次元のインデクスを用い、例えば三次元配列インデックス（Ｉｚ、Ｉｙ、Ｉｘ）は、下記のような一次元配列のインデクス  
一次元インデックス＝Ｎｘ＊Ｎｙ＊Ｉｚ＋Ｎｚ＊Ｉｙ＋Ｉｘ  
ここで、Ｎｘ、Ｎｙ、Ｎｚ：Ｘ軸、Ｙ軸、Ｚ軸方向に関する配列サイズ  
Ｉｘ、Ｉｙ、Ｉｚ:Ｘ軸、Ｙ軸、Ｚ軸方向に関する配列インデックス  
に一旦展開され、生成した一次元インデックスを用いてメモリアドレスが生成される。
【００１０】
従って、メモリ上の配置が一次元インデックスと一致するため、Ｘ軸に沿ってスキャンする、すなわち、ＩｚやＩｙを固定してＩｘをインクリメントないしはデクリメントして連続アクセスする場合には高速にアクセスできる。
【００１１】
ところが、Ｙ軸やＺ軸に沿ってスキャンする場合には、例えばＹ軸に関してスキャンする場合、Ｙ軸に沿って隣に位置するデータがＩｙが１つ異なるだけでＮｘ離れた場所に配置されている。そのため、ストライドＮｘが大きいとメモリの同一ロウアドレスに存在しないので、メモリアクセスの効率が著しく低下し、しいては本来システムが備えている能力が充分に発揮されないという非常に好ましくない結果をもたらしてしまう。
【００１２】
さらにＺ軸の場合にはストライドがＮｘ＊Ｎｙとなり、さらにこの傾向は顕著である。実際、科学技術計算における配列データのサイズＮｉ（ｉ＝ｘ、ｙ、ｚ、・・・）は多くの場合、メモリのページサイズを遙かに超えるために高速処理の大きな障壁となっている。実際、メモリのページサイズは高々数１００Ｋバイト程度である一方、配列データ全体のサイズが数１００Ｍバイトを超えるような場合も珍しくないため、このような負の効果の影響は非常に大きいものとなっている。
【００１３】
ＰＣのような汎用コンピュータの場合にはキャッシュメモリを具備している。これにより、キャッシュメモリに取り込まれたデータに対してフーリエ変換を施すことが可能となるため、キャッシュメモリのヒット率を改善するために様々な手段を講じることも可能である。しかしながら、キャッシュメモリのラインサイズやウェイ数などの構成に大きく依存してしまうため、一般的な解決策とはなり難い。
【００１４】
また、キャッシュメモリのサイズは高々数Ｍバイトであり、キャッシュメモリのサイズを遥かに超えるようなサイズの多次元配列データに対してフーリエ変換を施す場合には、結局のところ何度かキャッシュメモリと主記憶との間でストライドの大きな連続データの転送が引き起こされるため、多次元配列データを処理する際の根本的な解決策にはなりえない。
【００１５】
また、ベクトル型スーパーコンピュータでは、フーリエ変換を施すスキャン方向がメモリに対して連続並びになるように、データを並び替えてスキャン軸の置換を施してからフーリエ変換を行い、演算修了後に再度逆置換を施し、データ並びを元に戻すという手法が採られることもある。しかしながら、このようにデータ置換を行うことは本来必要な演算ではなく、あくまで前処理・後処理であって、本来余分な処理である。このようなデータ置換によるオーバーヘッドはデータサイズの増大と供に著しく増大する。
【００１６】
なお、ソフトウェアによる多次元配列データに対するアクセスへの対処としては、ＰＣなどの比較的小規模のコンピュータでは、キャッシュメモリのヒット率を上げるように、データアクセス順などが工夫されている。また、スーパーコンピュータのような大型計算機では、スキャン軸のトランスフォーム（転置）を適時実施してアクセスしやすい方向にデータ並びを揃えて行われている。
【非特許文献１】http://momonga.t.u-tokyo.ac.jp/~ooura/fftman/index.html（特に「1.2 Cooley-Tukey 型 FFT」）
【発明の開示】
【発明が解決しようとする課題】
【００１７】
上述したように、多次元配列データはメモリ上では一次元配列として配置されるため、多次元配列では１つの次元以外は概念上隣に位置するデータがメモリ上に連続的に配置することができない。
【００１８】
従って、多次元配列データにアクセスする場合、隣のデータに対して連続アクセスしても、必ずしもメモリに対する連続アクセスにならず、メモリアクセスの効率が著しく下がってしまい、演算回路が高速になっても、その性能が充分に発揮できず、処理速度向上の妨げになっている。特に大規模な多次元フーリエ変換は各方向に対して一回ずつデータをスキャンする必要があるので、個々のスキャン方向に対するメモリアクセス速度が大きく異なってしまい、その傾向が顕著となる。
【００１９】
本発明はこのような事情に鑑みてなされたものであり、その第１の目的は、多次元配列データに対してフーリエ変換を行う場合、スキャンする方向に依存することなく、一定速度でメモリにアクセスできるようにし、もって、大規模な多次元配列データに対しても高速なフーリエ変換を可能とする多次元配列アクセス方法および装置を提供することにある。
【００２０】
また、その第２の目的は、上記多次元配列アクセス方法を適用してメモリにアクセスする場合に、メモリに連続的にアドレスを与えるようにすることによって、データアクセスに切れ目がないようにするメモリ制御装置を提供することにある。
【００２１】
更に、その第３の目的は、上記多次元配列アクセス方法を適用することによって、大規模な多次元配列データに対しても高速にフーリエ変換を行うことが可能なフーリエ変換装置を提供することにある。
【課題を解決するための手段】
【００２２】
上記の目的を達成するために、本発明では、以下のような手段を講じる。
【００２３】
すなわち、請求項１の発明の多次元配列アクセス方法は、ダイナミック型のメモリデバイスを使用したメモリシステム上に格納された多次元配列データにアクセスする方法であって、多次元配列データのうち少なくとも二次元以上のインデクスの下位ビットを、メモリデバイスのページ内アドレスを表すカラムアドレスに均等に割り振ってメモリアドレスを生成する。
【００２４】
請求項２の発明は、請求項１の発明の多次元配列アクセス方法において、カラムアドレスに割り振り可能なように下位ビットを決定し、インデクスにおけるこの下位ビット以外のビットである上位ビットを、ロウアドレスに割り振ってメモリアドレスを生成する。
【００２５】
請求項３の発明の多次元配列アクセス装置は、ダイナミック型のメモリデバイスを使用したメモリシステム上に格納された多次元配列データにアクセスする装置であって、多次元配列データのうち少なくとも二次元以上のインデクスの下位ビットを、メモリデバイスのページ内アドレスを表すカラムアドレスに均等に割り振ってメモリアドレスを生成する。
【００２６】
請求項４の発明は、請求項３の発明の多次元配列アクセス装置において、カラムアドレスに割り振り可能なように下位ビットを決定し、インデクスにおけるこの下位ビット以外のビットである上位ビットを、ロウアドレスに割り振ってメモリアドレスを生成する。
【００２７】
請求項５の発明のメモリ制御装置は、請求項３または請求項４の発明の多次元配列アクセス装置によって生成されたメモリアドレスを用いて、着目している次元以外のインデクスを固定し、着目している次元の配列のインデクスのみを変化させて多次元配列データからなる一次元スキャンラインを取り出し、同一ページにアクセスする場合、多次元配列データへのアクセスが連続的になるように、カラムアドレスを連続的に与える。
【００２８】
請求項６の発明のフーリエ変換装置は、請求項３または請求項４に記載の多次元配列アクセス装置と、請求項５に記載のメモリ制御装置と、請求項５の発明のメモリ制御装置によって取り出された一次元スキャンラインを、フーリエ変換に必要なスキャンラインとして格納する格納手段と、格納手段に格納されたスキャンラインに基づいてフーリエ変換演算を行う演算手段とを備えている。
【００２９】
請求項７の発明は、請求項６の発明のフーリエ変換装置において、格納手段に格納されたスキャンラインを読み出し、この読み出したスキャンラインを演算手段に出力するとともに、演算手段から演算結果を取り込み、この取り込んだ演算結果を格納手段に書き込む２つのバッファメモリを更に備えている。そして、一方のバッファメモリが、演算装置へのスキャンラインの出力、または演算装置からの演算結果の取り込みを行っている間に、他方のバッファメモリが、格納手段からのスキャンラインの読み出し、または格納手段への演算結果の書き込みを行う。
【００３０】
請求項８の発明は、請求項７の発明のフーリエ変換装置において、スキャンラインを読み出したバッファメモリのアドレスのビット順を上下反転させるプリビット反転手段と、演算装置から演算結果を取り込んだバッファメモリのアドレスのビット順を上下反転させるポストビット反転手段とのうちの何れか１つを更に備えている。
【００３１】
請求項９の発明は、請求項６乃至８のうち何れか１項の発明のフーリエ変換装置において、フーリエ変換演算に必要な回転因子を記憶したデータテーブルを更に備えている。そして、演算手段は、データテーブルに記憶された回転因子を用いてフーリエ変換演算を行う。
【００３２】
請求項１０の発明は、請求項６乃至９のうち何れか１項の発明のフーリエ変換装置において、スキャン方向に対応したカウントアップの順番を定義し、定義結果に基づいてメモリアドレス生成装置が下位ビットをカラムアドレスに均等に割り振ってメモリアドレスを生成するように多次元配列アクセス装置を制御するコントローラを更に備えている。
【００３３】
本発明は、上述したような手段によって、同一のロウアドレスのデータに最も高速にアクセスできるというダイナミック型のメモリデバイスの特性を最大限に活用し、多次元配列データに対してフーリエ変換を施すデータをメモリから取り出す場合、各次元の配列インデクスに対して適切なスクランブルを施してメモリアドレスを生成することができる。
【００３４】
更には、格納手段と演算手段との間に２つのバッファメモリを備え、演算手段の稼働率を高めたり、ビット反転手段を備えることによって、ＦＦＴアルゴリズムに伴うアドレスビット順の反転などを行っている。
【００３５】
これによって、スキャン方向に依らず一定のアクセス速度でメモリにアクセスすることが可能となる。
【発明の効果】
【００３６】
本発明の多次元配列アクセス方法および装置によれば、多次元配列データに対してフーリエ変換を行う場合、スキャンする方向に依存することなく、一定速度でメモリにアクセスすることが可能となる。
【００３７】
また、本発明のメモリ制御装置によれば、上記多次元配列アクセス方法を適用してメモリにアクセスする場合に、メモリに連続的にアドレスを与えることができ、データアクセスに切れ目がないようにすることが可能となる。
【００３８】
更に、本発明のフーリエ変換装置は、このような多次元アクセス方法を適用しているので、大規模な多次元配列データに対しても高速にフーリエ変換を行うことが可能となる。
【発明を実施するための最良の形態】
【００３９】
以下に、本発明を実施するための最良の形態について図面を参照しながら説明する。
【００４０】
本発明の実施例を図１から図６を用いて説明する。
【００４１】
図１は、本実施例に係るフーリエ変換装置の構成例を示す機能ブロック図である。
【００４２】
すなわち、本実施例に係るフーリエ変換装置１０は、マクロシーケンスコントローラ１２と、インデクスレジスタ１４と、アドレススクランブラ１６と、メモリ制御装置１８と、メモリモジュール２０と、フーリエ変換演算器２２と、ビットリバーサルアドレスジェネレータ２４とを備えている。ここで、アドレススクランブラ１６は、本発明における多次元アクセス方法を適用した多次元配列アクセス装置に該当する。また、メモリ制御装置１８は、本発明におけるメモリ制御装置に該当する。
【００４３】
このような構成をなすフーリエ変換装置１０において、データサイズは三次元、すなわちＸ軸，Ｙ軸，Ｚ軸のそれぞれに対して２５６個（８ビット）、すなわち合計２５６３個の複素数からなる三次元データに対する三次元ＦＦＴを行う場合を例に説明する。なお、図中に示す「／ｎ」（ｎは整数）は、転送されるデータのビット数を示す。たとえば、「／８」は、８ビットのデータが転送されることを示している。
【００４４】
マクロシーケンスコントローラ１２は、三次元データのスキャン方向を決定し、このスキャン方向に対応したカウントアップの順番を定義する。例えば、スキャン方向をＸ軸→Ｙ軸→Ｚ軸の順とする。なお、この順番は任意に定義でき、Ｙ軸→Ｚ軸→Ｘ軸の順としたり、Ｚ軸→Ｘ軸→Ｙ軸の順とすることも可能である。さて、スキャン方向をＸ軸→Ｙ軸→Ｚ軸とした場合、一次元ＦＦＴを行うために、Ｘ軸、Ｙ軸、およびＺ軸に沿ってスキャンラインを取り出す。そして、このように定義した定義結果を、インデクスレジスタ１４に出力する。
【００４５】
インデクスレジスタ１４は、マクロシーケンスコントローラ１２から出力された定義結果に基づいてスキャンラインを決定する。定義結果が、Ｘ軸→Ｙ軸→Ｚ軸の順とされている場合には、まず、Ｙ軸とＺ軸とを固定し、Ｘ軸のデータのみをスキャンする。そして、Ｙ軸とＺ軸とを固定した状態でＸ軸の全てのインデクス（０〜２５５まで）のデータスキャンを終えると、Ｙ軸のインデクスをインクリメントし、また同様にＹ軸とＺ軸とを固定した状態でＸ軸のデータのみをスキャンする。このようにしてＺ軸を固定した状態におけるＹ軸の全てのインデクスについてもデータスキャンを終えると、Ｚ軸のインデクスをインクリメントし、同様にしてデータをスキャンして行く。これによってスキャンラインを決定する。図２（ａ）は、定義結果が、Ｘ軸→Ｙ軸→Ｚ軸の順とされた場合におけるインデクスレジスタ１４の構成例を示す概念図である。図中に示すＲ／Ｉは、実数Ｒか虚数Ｉかを示す識別子である。図２（ａ）に示すように、インデクスレジスタ１４はそれぞれ８ビットからなるＸ軸インデクス、Ｙ軸インデクス、およびＺ軸インデクスと、１ビットの前記識別子との合計２５ビットからなる。
【００４６】
アドレススクランブラ１６は、図２（ａ）に示すような各次元軸のインデクスをもとにスクランブルを施し、一次元インデクスを生成する。スクランブルの方法は、図２に示すように、Ｘ、Ｙ、Ｚ各軸のインデクスの下位ビットを均等にカラムアドレスに割り振り、余った上位ビットをロウアドレスに割り振って、図２（ｂ）に示すようなメモリアドレスを生成する。
【００４７】
図２に示す例は、カラムアドレスとして１０ビットを備えている例である。１０ビットのカラムアドレスにＸ，Ｙ，Ｚ各軸のインデクスを割り振ることが可能なビット数は３であるので、この場合下位ビット（０，１，２）は３となり、残りの５ビット（３，４，５，６，７）が上位ビットとなる。
【００４８】
メモリ制御装置１８は、アドレススクランブラ１６によって生成されたメモリアドレスを用いて、着目している次元以外のインデクスを固定し、着目している次元の配列のインデクスのみを変化させて一次元スキャンラインを取り出し、同一ページにアクセスする場合、多次元配列データへのアクセスが連続的になるように、カラムアドレスを連続的に与える。
【００４９】
メモリモジュール２０は、メモリ制御装置１８によって取り出された一次元スキャンラインを、フーリエ変換に必要なスキャンラインとして格納する。本実施例の場合、データ１個につき実数部と虚数部それぞれ８バイトであるので、計１６バイトのサイズとなる。したがって、２５６３個の複素数データを格納するには、全体では２５６Ｍバイトのメモリ容量となる。従って、１６バイトのサイズメモリデバイスとしてＳＤＲＭを用いた２５６Ｍバイトのメモリモジュールを使用する。
【００５０】
フーリエ変換演算器２２は、ＦＦＴ演算部２５と、フーリエ変換回転因子テーブル格納部２６と、バッファメモリ部２８とを備えている。
【００５１】
更にバッファメモリ部２８は、バッファメモリＵとバッファメモリＶとからなる２つのバッファメモリを備えており、メモリモジュール２０に格納されたスキャンラインを読み出し、この読み出したスキャンラインをライトポート２９を介してＦＦＴ演算部２５に出力する。また、ＦＦＴ演算部２５によってなされたフーリエ変換演算の演算結果をリードポート３０を介して取り込み、この取り込んだ演算結果をメモリモジュール２０に書き込む。
【００５２】
そして、図３に示すように、フェーズＵでは、バッファメモリＵが、ＦＦＴ演算部２５へのスキャンラインの出力ａ、およびＦＦＴ演算部２５からの演算結果の取り込みｂを行っている間に、バッファメモリＶが、メモリモジュール２０からのスキャンラインの読み出しｃ、およびメモリモジュール２０への演算結果の書き込みｄを行う。一方、フェーズＶでは、その逆に、バッファメモリＶが、ＦＦＴ演算部２５へのスキャンラインの出力ｅ、およびＦＦＴ演算部２５からの演算結果の取り込みｆを行っている間に、バッファメモリＵが、メモリモジュール２０からのスキャンラインの読み出しｇ、およびメモリモジュール２０への演算結果の書き込みｈを行う。
【００５３】
このように、一方のバッファメモリがＦＦＴ演算部２５とのデータ授受を行っている場合には、他方のバッファメモリはメモリモジュール２０とのデータ授受を行うようにすることによって、図４のタイミングチャートに示すように、メモリモジュール２０とバッファメモリ部２８間のデータ転送と、ＦＦＴ演算部２５によるフーリエ変換演算とを並行して実行できるようにしている。
【００５４】
図４においてＲはバッファメモリによるメモリモジュール２０からのスキャンラインの読み出し、Ｗはバッファメモリからメモリモジュール２０への演算結果の書き込みを示す。また、ＵおよびＶはバッファメモリＵおよびバッファメモリＶを示す。更に、ＥはＦＦＴ演算部２５によるフーリエ変換演算を示す。したがって、ＲＵは、バッファメモリＵによるスキャンラインの読み出しを示し、ＥＵは、バッファメモリＵからのスキャンラインに基づくフーリエ変換演算を示している。
【００５５】
バッファメモリ部２８は、メモリモジュール２０との間では６４ビットのデータ転送を行う。また、ＦＦＴ演算部２５は一回のフーリエ変換演算においてデータを２個必要とし、データを２個生成する。従って、ＦＦＴ演算部２５に見合う速度でデータを供給するため、２つのライトポート２９と、２つのリードポート３０と、それらおのおのに対応した４つの図示しないポートメモリを備えている。
【００５６】
ＦＦＴ演算部２５は、図４のタイミングチャートのｉに示すように、バッファメモリＵおよびバッファメモリＶから出力されたおのおののスキャンラインに基づくフーリエ変換演算ＥＵおよびＥＶと、図中ｊに示すような演算結果のバッファメモリ２８への返信とを行う。なお、フーリエ変換演算を行う場合には、フーリエ変換回転因子が必要となる。フーリエ変換回転因子は、テーブルデータとしてフーリエ変換回転因子テーブル格納部２６に格納されており、ＦＦＴ演算部２５は、フーリエ変換演算を行う場合には、フーリエ変換回転因子テーブル格納部２６に格納されたテーブルデータの値を読み出して行う。
【００５７】
フーリエ変換演算のアルゴリズムとしては、例えばCooley-Tukeyのような公知のアルゴリズムを使用する。もちろん、これに限定されることはなく、他のアルゴリズムに基づくものであっても適用可能である。
【００５８】
ところで、例えば、非特許文献１に記載されているように、フーリエ変換演算がなされた演算結果は、データの反転処理が必要なことが知られている。そこで、本実施例に係るフーリエ変換演算１０では、ビットリバーサルアドレスジェネレータ２４を備えている。
【００５９】
ビットリバーサルアドレスジェネレータ２４は、スキャンラインを読み出したバッファメモリ部２８のアドレスのビット順を上下反転させるか、またはＦＦＴ演算部２５からの演算結果を取り込んだバッファメモリ部２８のアドレスのビット順を上下反転させる。すなわち、前者は、フーリエ変換演算前に反転処理を行う場合であり、後者は、フーリエ変換演算後に反転処理を行う場合である。フーリエ変換の演算前あるいは演算後の何れのタイミングで反転処理を行っても良い。
【００６０】
次に、以上のように構成した本実施例に係るフーリエ変換装置の動作について、図５および図６に示すフローチャートを用いて説明する。
【００６１】
本実施例に係るフーリエ変換装置１０によって三次元配列データのフーリエ変換を行う場合には、マクロシーケンスコントローラ１２によって、三次元データのスキャン方向が決定される（Ｓ１）。そして、このスキャン方向に対応したカウントアップの順番が定義される（Ｓ２）。定義された定義結果は、マクロシーケンスコントローラ１２からインデクスレジスタ１４へと出力される。ここでは、Ｘ軸、Ｙ軸、Ｚ軸の順にスキャンするものとする。
【００６２】
次に、インデクスレジスタ１４では、マクロシーケンスコントローラ１２から出力された定義結果に基づいてスキャンラインが決定され、データスキャンが行われる（Ｓ３）。
【００６３】
ステップＳ３でなされたデータスキャンに基づいて、アドレススクランブラ１６によって、図２（ａ）に示すような各次元軸のインデクスをもとにスクランブルが施され、図２（ｂ）に示すようなメモリアドレスが生成される（Ｓ４）。具体的なスクランブルの方法としては、図２に示すように、Ｘ、Ｙ、Ｚ各軸のインデクスの下位ビットが均等にカラムアドレスに割り振られ、更に余った上位ビットがロウアドレスに割り振られることによってなされる。
【００６４】
メモリ制御装置１８では、ステップＳ４で生成されたメモリアドレスを用いて、着目している次元以外のインデクスが固定される一方、着目している次元の配列のインデクスのみが変化されることによって一次元スキャンラインが取り出される。更に、同一ページにアクセスする場合には、多次元配列データへのアクセスが連続的になるように、カラムアドレスが連続的に与えられる（Ｓ５）。
【００６５】
ステップＳ５においてメモリ制御装置１８によって取り出された一次元スキャンラインは、メモリモジュール２０に格納される（Ｓ６）。
【００６６】
ステップＳ６においてメモリモジュール２０に格納されたスキャンラインは、バッファメモリ部２８によって読み出され、更にライトポート２９を介してバッファメモリ部２８からＦＦＴ演算部２５に出力される（Ｓ７）。
【００６７】
するとＦＦＴ演算部２５では、ステップＳ７で出力されたスキャンラインと、フーリエ変換回転因子テーブル格納部２６に格納されたテーブルデータとを用いて、フーリエ変換演算が行われ（Ｓ８）、この演算結果がリードポート３０を介してバッファメモリ部２８へと戻される（Ｓ９）。このようにしてバッファメモリ部２８に戻された演算結果は、メモリモジュール２０に書き込まれる（Ｓ１０）。
【００６８】
なお、本実施例に係るフーリエ変換装置１０では、バッファメモリ部２８は、２つのバッファメモリ、すなわちバッファメモリＵとバッファメモリＶとが備えられており、図３に示すように、フェーズＵでは、バッファメモリＵからＦＦＴ演算部２５へのスキャンラインの出力ａ、およびＦＦＴ演算部２５からの演算結果の取り込みｂが行われる間に、バッファメモリＶではメモリモジュール２０からのスキャンラインの読み出しｃ、およびメモリモジュール２０への演算結果の書き込みｄが行われる。また、フェーズＶでは、その逆に、バッファメモリＶではＦＦＴ演算部２５へのスキャンラインの出力ｅ、およびＦＦＴ演算部２５からの演算結果の取り込みｆが行われる間に、バッファメモリＵではメモリモジュール２０からのスキャンラインの読み出しｇ、およびメモリモジュール２０への演算結果の書き込みｈが行われる。
【００６９】
このように、一方のバッファメモリがＦＦＴ演算部２５とのデータ授受を行っている場合には、他方のバッファメモリはメモリモジュール２０とのデータ授受が行われる。すなわち図４のタイミングチャートに示すように、メモリモジュール２０とバッファメモリ部２８間のデータ転送と、ＦＦＴ演算部２５によるフーリエ変換演算とが並行して実行されるので、ＦＦＴ演算部２５が効果的に利用され、処理の高速化が図られる。
【００７０】
なお、フーリエ変換演算がなされた演算結果は、データの反転処理が必要となる。そこで本実施例では、ビットリバーサルアドレスジェネレータ２４によって、バッファメモリ部２８のアドレスのビット順がフーリエ変換演算前か、あるいはフーリエ変換演算後のタイミングにおいて上下反転されることによってなされている。
【００７１】
次に、Ｙ軸のインデクスがインクリメントされ（Ｓ１１）、ステップＳ５からステップＳ１０までの処理が行われる。そして、Ｙ軸の全てのインデクスに対してステップＳ５からステップＳ１０までの処理が行われた場合（Ｓ１２：Ｙｅｓ）には、更にＺ軸のインデクスがインクリメントされ（Ｓ１３）、ステップＳ５からステップＳ１２までの処理が行われる。そして、Ｚ軸のインデクスに対してステップＳ５からステップＳ１２までの処理が行われた場合（Ｓ１４：Ｙｅｓ）には処理を完了する。
【００７２】
上述したような処理を、スキャン軸を変えてＹ軸とＺ軸についても行えば、三次元フーリエ変換演算が完了する。
【００７３】
上述したように、本実施例に係るフーリエ変換装置においては、上記のような作用により、同一のロウアドレスのデータに最も高速にアクセスできるというダイナミック型のメモリデバイスの特性を最大限に活用して、多次元配列データに対してフーリエ変換を行う場合、フーリエ変換を施すデータをメモリから取り出す際に、各次元の配列インデクスに対して適切なスクランブルを施してメモリアドレスを生成することができる。これによって、スキャン方向に依存することなく一定のアクセス速度でメモリにアクセスすることが可能となる。
【００７４】
メモリアクセス速度が全体処理を律速する場合には、本実施例に係るフーリエ変換装置は、上述したようなスクランブルを実施しない場合と比較して、Ｘ軸スキャンによるフーリエ変換演算ではほぼ同一の性能、Ｙ軸スキャンとＺ軸スキャンによるフーリエ変換演算では、１個のデータアクセスに対して６サイクル以上必要であるから、下式に示すように、少なくとも４倍以上の性能向上を図ることが可能となる。  
（１＋６＋６）／（１＋１＋１）＝４．６７
上記実施例では、３次元配列データのフーリエ変換を例に説明したが、４次元配列以上のデータのフーリエ変換に適用することも可能であることは言うまでもない。
【００７５】
以上、本発明を実施するための最良の形態について、添付図面を参照しながら説明したが、本発明はかかる構成に限定されない。特許請求の範囲の発明された技術的思想の範疇において、本発明の多次元配列アクセス方法、多次元配列アクセス装置、メモリ制御装置をフーリエ変換以外の計算、例えば行列計算や多次元ウェーブレット変換計算に適用するなど、当業者であれば、各種の変更例及び修正例に想到し得るものであり、それら変更例及び修正例についても本発明の技術的範囲に属するものと了解される。
【図面の簡単な説明】
【００７６】
【図１】本実施例に係るフーリエ変換装置の構成例を示す機能ブロック図。
【図２】アドレススクランブルを説明するための概念図。
【図３】２つのバッファメモリによるデータ転送のタイミングを説明するための図。
【図４】ＦＦＴ演算部とバッファメモリとの間のデータ転送のタイミングを示すタイミングチャート。
【図５】本実施例に係るフーリエ変換装置の動作例を示すフローチャート（その１）。
【図６】本実施例に係るフーリエ変換装置の動作例を示すフローチャート（その２）。
【符号の説明】
【００７７】
１０…フーリエ変換装置、１２…マクロシーケンスコントローラ、１４…インデクスレジスタ、１６…アドレススクランブラ、１８…メモリ制御装置、２０…メモリモジュール、２２…フーリエ変換演算器、２４…ビットリバーサルアドレスジェネレータ、２５…ＦＦＴ演算部、２６…フーリエ変換回転因子テーブル格納部、２８…バッファメモリ部、２９…ライトポート、３０…リードポート
【図１】
2005189970.tif 000003
【図２】
2005189970.tif 000004
【図３】
2005189970.tif 000005
【図４】
2005189970.tif 000006
【図５】
2005189970.tif 000007
【図６】
2005189970.tif 000008