(57)【特許請求の範囲】
【請求項１】
処理すべきデータが格納された第１のデータ記憶部と、
処理すべきデータが格納される第２および第３のデータ記憶部と、
入力データの演算処理を終了する前に新たな入力データの演算処理を開始することが可能であり、かつ、演算処理完了後にその演算処理を完了したデータの次の関数への受け渡しが可能な複数のパイプラインド関数演算部と、
前記第２および第３のデータ記憶部から処理すべきデータをデータ順に応じて互い違いに読み出し、この読み出したデータに対して前記パイプラインド関数演算部で行う演算とは別個の主演算を行い、その演算処理結果のデータを読み出し元のデータ記憶部に書き込む主演算部と、
前記パイプラインド関数演算部の中から前記第１のデータ記憶部に格納されている処理すべきデータに対して実行すべきパイプラインド関数演算部を第１のパイプラインド関数演算群として選択のうえその実行順序を指定する一方、前記第２および第３のデータ記憶部に格納されている前記主演算部での演算処理結果のデータに対して実行すべきパイプラインド関数演算部を第２のパイプラインド関数演算群として選択のうえその実行順序を指定する主制御部と、
この主制御部によって指定された実行順序に従って前記第１のパイプラインド関数演算群のパイプラインド関数演算部を縦続接続させ、その処理データの受け渡しを制御する一方、前記第１のデータ記憶部から処理すべきデータを読み出して前記第１のパイプラインド関数演算群に入力すると共にこの第１のパイプラインド関数演算群からの演算処理結果のデータを前記主演算部で処理すべきデータとして前記第２および第３のデータ記憶部にデータ順に応じて互い違いに書き込む機能と、前記主制御部によって指定された実行順序に従って前記第２のパイプラインド関数演算群のパイプラインド関数演算部を縦続接続させ、その処理データの受け渡しを制御する一方、前記主演算部での演算処理結果のデータを前記第２および第３のデータ記憶部からデータ順に応じて互い違いに読み出して前記第２のパイプラインド関数演算群に入力すると共にこの第２のパイプラインド関数演算群からの演算処理結果のデータを前記第１のデータ記憶部に書き込む機能とを有する関数制御部と
を備えたことを特徴とする演算処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、画像処理などに用いて好適な演算処理装置に関するものである。
【０００２】
【従来の技術】
本出願人が開発を進めている画像処理装置では、画像データに対して拡大，縮小，回転，ＦＦＴ（高速フーリエ変換），ＤＣＴ（離散コサイン変換），相関計算などの主演算の他に、オフセット除去などの前処理や正規化処理などの後処理を行っている。例えば、位相限定方式のパターンマッチング装置等で、ＦＦＴ処理を行う前に画像データにオフセット分を除去する前処理や、複素数を位相情報に変換する後処理を行っている。
【０００３】
図６にこの画像処理装置の要部構成を示す。同図において、１は主制御部、２はＦＦＴ処理を行う主演算部、３はデータ記憶部、４−１〜４−Ｎは関数演算部である。データ記憶部３には処理すべき多数のデータが格納されている。関数演算部４−１〜４−Ｎは現在演算中の入力データの演算処理を終了してからでないと新たな入力データの演算処理を開始することはできない。
【０００４】
この画像処理装置では次のようにしてＦＦＴ処理が行われる。主制御部１は、主演算部２でのＦＦＴ処理の前に、データ記憶部３に格納されている処理すべきデータに対して関数演算部４−１〜４−Ｎを利用して前処理を行わせる。この場合、主制御部１は、関数演算部４−１〜４−Ｎの中から実行すべき関数演算部を制御信号線Ｓ１〜ＳＮを介して選択する。ここでは、例えば、その実行順序を４−１→４−２→４−３として、関数演算部４−１，４−２，４−３を選択するものとする。
【０００５】
次に、主制御部１は、データ記憶部３から１番目のデータを読み出し、データバスＤＢを介して関数演算部４−１へ送る。関数演算部４−１での演算処理が終了すれば、その演算処理結果をデータバスＤＢを介してデータ記憶部３へ書き込んだうえ、データバスＤＢを介して関数演算部４−２へ送る。関数演算部４−２での演算処理が終了すれば、その演算処理結果をデータバスＤＢを介してデータ記憶部３へ書き込んだうえ、データバスＤＢを介して関数演算部４−３へ送る。関数演算部４−３での演算処理が終了すれば、その演算処理結果のデータを前処理完了データとしてデータ記憶部３に書き込む。そして、２番目のデータをデータ記憶部３から読み出し、１番目のデータと同様の演算シーケンスを施し、処理すべき全てのデータが完了するまでこの演算シーケンスを繰り返す。
【０００６】
なお、１つのデータの前処理が完了（データ記憶部３への書き込み）してから、次のデータの前処理を開始（関数演算部４−１へのデータの供与）する理由の１つとして、複数の関数演算部４が同時にアクティブになると、データバスＤＢ上でデータ同士の衝突が発生し動作できなくなる虞れがあることが挙げられる。
【０００７】
Ｋ個のデータの前処理が完了すると、主演算部２は、主制御部１の指示に従い、データ記憶部３に格納されている前処理完了データを読み出し、この前処理完了データに対してＦＦＴ処理を施し、このＦＦＴ処理を施したデータ（ＦＦＴ完了データ）をデータ記憶部３に書き込む。
全てのデータのＦＦＴ処理が完了すると、主制御部１は、データ記憶部３に格納されているＦＦＴ完了データに対し、関数演算部４−１〜４−Ｎの中から実行すべき関数演算部およびその実行順序を指定のうえ、前処理と同様にして後処理を行わせる。
【０００８】
【発明が解決しようとする課題】
しかしながら、このような従来の画像処理装置では、前処理や後処理に必要な関数演算部が増える毎に、（個々の関数の処理時間）×処理データ数（通常は処理対象の画素数）の処理時間が加算されるため、処理時間が比例して増加してしまい、多数の関数を用いる画像処理を高速化することが困難であった。
【０００９】
例えば、Ｋ個のデータについて前処理を行う場合、同期回路での処理を想定すると、次のような処理の流れになる。なお、以下では、データ記憶部３からのリードおよびライト動作は通常同時には処理できず、実際にはそれぞれ１サイクルずつ加算される場合もあるが、説明の簡略化のめ、リードおよびライトサイクルの時間は関数演算部での演算処理時間（サイクル数）Ｓｎに含まれているものとする。
【００１０】
データ１：リード（０）→関数演算部４−１での演算処理（Ｓ１）→関数演算部４−２での演算処理（Ｓ１＋Ｓ２）→関数演算部４−３での演算処理（Ｓ１＋Ｓ２＋Ｓ３）→データ１：ライト（Ｓ１＋Ｓ２＋Ｓ３）→データ２：リード（Ｓ１＋Ｓ２＋Ｓ３）→関数演算部４−１での演算処理（２Ｓ１＋Ｓ２＋Ｓ３）→関数演算部４−２での演算処理（２Ｓ１＋２Ｓ２＋Ｓ３）→関数演算部４−３での演算処理（２Ｓ１＋２Ｓ２＋２Ｓ３）・・・・データＫ：ライト（Ｋ・（Ｓ１＋Ｓ２＋Ｓ３））
【００１１】
すなわち、この例では、Ｋ個のデータについて前処理を行う場合、Ｋ・（Ｓ１＋Ｓ２＋Ｓ３）の処理時間を必要とする。
ここで、ｎ個の関数を実行する必要があり、それぞれの関数での演算処理時間をＳｎ、処理する必要のあるデータ数をＫとすると、従来タイプの画像処理装置での前処理時間（あるいは後処理時間）Ｔ０は、下記（１）式で表される。
【００１２】
【数１】
0003790060.tif 000002
【００１３】
このような式になるため、従来においては、前処理や後処理の関数で演算処理時間がかかるものや、処理関数の個数に比例して、全体の処理時間が増加してしまい、画像データのようにデータが多大で様々な演算処理を行う画像処理装置の高速化を実現することが困難となっていた。
【００１４】
本発明はこのような課題を解決するためになされたもので、その目的とするところは、多数の関数を用いる多大なデータ処理を高速で行うことの可能な演算処理装置を提供することにある。
【００１５】
【課題を解決するための手段】
このような目的を達成するために、第１のデータ記憶部と、第２のデータ記憶部と、第３のデータ記憶部と、複数のパイプラインド関数演算部と、主演算部と、主制御部と、関数制御部とを設け、パイプラインド関数演算部の中から第１のデータ記憶部に格納されている処理データに対して実行すべきパイプラインド関数演算部を第１のパイプラインド関数演算群として選択のうえその実行順序を指定するものとし、この指定された実行順序に従って第１のパイプラインド関数演算群のパイプラインド関数演算部を縦続接続させ、第１のデータ記憶部から処理すべきデータを読み出して第１のパイプラインド関数演算群に入力すると共にこの第１のパイプラインド関数演算群からの演算処理結果のデータを主演算部で処理すべきデータとして第２および第３のデータ記憶部にデータ順に応じて互い違いに書き込むようにし、この第２および第３のデータ記憶部から処理すべきデータをデータ順に応じて互い違いに読み出し、この読み出したデータに対して主演算を行い、その演算処理結果のデータを読み出し元のデータ記憶部に書き込むようにし、また、第２および第３のデータ記憶部に格納されている主演算部での演算処理結果のデータに対して実行すべきパイプラインド関数演算部を第２のパイプラインド関数演算群として選択のうえその実行順序を指定するものとし、この指定された実行順序に従って第２のパイプラインド関数演算群のパイプラインド関数演算部を縦続接続させ、主演算部での演算処理結果のデータを第２および第３のデータ記憶部からデータ順に応じて互い違いに読み出して第２のパイプラインド関数演算群に入力すると共にこの第２のパイプラインド関数演算群からの演算処理結果のデータを第１のデータ記憶部に書き込むようにしたものである。
【００２１】
この発明によれば、第１のデータ記憶部から処理すべきデータが読み出され、第１のパイプラインド関数演算群に入力され、この第１のパイプラインド関数演算群からの演算処理結果のデータがデータ順に応じて互い違いに第２および第３のデータ記憶部に書き込まれる。また、第１および第２のデータ記憶部に書き込まれたデータがデータ順に応じて互い違いに読み出されて主演算部による演算が行われ、この主演算部での演算処理結果のデータが読み出し元のデータ記憶部に書き込まれる。第１および第２のデータ記憶部に書き込まれた主演算部での演算処理結果のデータは、データ順に応じて互い違いに第２のパイプラインド関数演算群に入力され、この第２のパイプラインド関数演算群からの演算処理結果のデータが第１のデータ記憶部に書き込まれる。
【００２２】
ここで、第１および第２のパイプラインド関数演算群は、そのパイプラインド関数演算群を構成するパイプラインド関数部およびその実行順序が主制御部により指定され、この指定された実行順序に従って第１および第２のパイプラインド関数演算群のパイプラインド関数演算部が縦続接続される。この縦続接続されたパイプラインド関数演算部の各々は、現在演算中の入力データの演算処理を終了する前に新たな入力データの演算処理を開始することが可能であり、かつ、演算処理完了後にその演算処理を完了したデータの次の関数への受け渡しが可能であり、パイプライン関数演算部での処理時間Ｓｎより遥かに小さい投入待ち時間Ｘ（Ｘ＜＜Ｓｎ）でもって第１および第２のパイプラインド関数演算群へ次々にデータを入力することができる。
【００２３】
また、第２および第３のデータ記憶部では主演算部との間でデータの読み出しと書き込みとが短時間で切り替わる可能性があるが、第１のデータ記憶部ではデータの読み出しと書き込みとが短時間で切り替わらない。
また、主演算部と第３のデータ記憶部（第２のデータ記憶部）との間で主演算処理を行っている間に、第２のデータ記憶部（第３のデータ記憶部）からの第２のパイプラインド演算関数群を介する第１のデータ記憶部への演算処理結果のデータの書き込み、第１のデータ記憶部からの第１のパイプラインド演算関数群を介する第２のデータ記憶部（第３のデータ記憶部）への演算処理結果のデータの書き込みを行うことができる。
【００２４】
【発明の実施の形態】
以下、本発明を実施の形態に基づき詳細に説明する。
〔参考例１〕
図１はこの発明の説明に入る前の参考例１の要部を示すブロック図である。同図において、図６と同一符号は同一或いは同等構成要素を示し、その説明は省略する。
【００２５】
この参考例１では、従来の関数演算部４−１〜４−Ｎに代えて、１入力１出力のパイプラインド関数演算部５−１〜５−Ｎを使用している。また、主制御部１とパイプラインド関数演算部５−１〜５−Ｎとの間に関数制御部６を設け、主制御部１より関数制御部６に対して実行すべきパイプラインド関数演算部（パイプラインド関数演算群）およびその実行順序を指定するようにしている。
【００２６】
パイプラインド関数演算部５（５−１〜５−Ｎ）は、現在演算中の入力データの演算処理を終了する前に新たな入力データの演算処理を開始することが可能な関数演算部（例えば、四則演算などの関数処理用）であり、１番目の処理対象データを入力後、その演算処理結果がまだ出力されていなくても（１データの関数演算に必要な時間Ｓｎが経過していなくても）、すぐ次のサイクルに２番目の処理対象データの入力が可能である。また、このパイプラインド関数演算部５には、ある関数で演算が完了後、次の関数への受け渡しが可能なようにハンドシェーク信号を出力するようなインターフェイスを構成しておく。
【００２７】
関数制御部６は、基本的にはマルチプレクサで構成されており、主制御部１によって選択されたパイプラインド関数演算群のパイプラインド関数演算部を指定された実行順序に従って縦続接続させ、その処理データの受け渡しを制御する一方、データ記憶部３から処理すべきデータを読み出してそのパイプラインド関数演算群に入力すると共に、このパイプラインド関数演算群からの演算処理結果のデータをデータ記憶部３に書き込む機能を有している。
【００２８】
この画像処理装置では次のようにしてＦＦＴ処理が行われる。主制御部１は、主演算部２でのＦＦＴ処理の前に、データ記憶部３に格納されている処理すべデータに対してパイプラインド関数演算部５−１〜５−Ｎを利用して前処理を行わせる。
【００２９】
この場合、主制御部１は、関数制御部６に対して、パイプラインド関数演算部５−１〜５−Ｎの中から前処理に際して実行すべきパイプラインド関数演算部を第１のパイプラインド関数演算群として選択のうえ、その実行順序を指定する。ここでは、例えば、パイプラインド関数演算部５−１，５−２，５−３を第１のパイプラインド関数演算群として選択し、その実行順序を５−１→５−２→５−３とするものとする。
【００３０】
関数制御部６は、この主制御部１によって指定された実行順序に従って第１のパイプラインド関数演算群のパイプラインド関数演算部５−１，５−２，５−３を縦続接続させ、データ記憶部３から処理すべき１番目のデータを読み出して第１のパイプラインド関数演算群に入力する。この第１のパイプラインド関数演算群に入力されたデータは、パイプラインド関数演算部５−１→５−２→５−３の順に演算処理され、最後のパイプラインド関数演算部５−３からの演算処理結果のデータが前処理完了データとしてデータ記憶部３に書き込まれる。
【００３１】
ここで、関数制御部６は、データ記憶部３から処理すべき１番目のデータを読み出した後、次のサイクルで２番目のデータを読み出して第１のパイプラインド関数演算群に投入する。すなわち、データ記憶部３から１番目のデータを読み出して第１のパイプラインド関数演算群に投入した後、パイプラインド関数演算部での処理時間Ｓｎより遥かに短い投入待ち時間Ｘ（Ｘ＜＜Ｓｎ）でもって、データ記憶部３から２番目のデータを読み出して第１のパイプラインド関数演算群に投入する。
【００３２】
第１のパイプラインド関数演算群に投入された２番目のデータは、１番目のデータと同様にしてパイプラインド関数演算部５−１→５−２→５−３の順に演算処理され、最後のパイプラインド関数演算部５−３からの演算処理結果のデータが処理完了データとしてデータ記憶部３に書き込まれる。以下、同様の演算シーケンスを施し、処理すべき全てのデータが完了するまでこの演算シーケンスを繰り返す。
【００３３】
全てのデータの前処理が完了すると、主演算部２は、主制御部１の指示に従い、データ記憶部３に格納されている前処理完了データを読み出し、この前処理完了データに対してＦＦＴ処理を施し、このＦＦＴ処理を施したデータ（ＦＦＴ完了データ）をデータ記憶部３に書き込む。
【００３４】
全てのデータのＦＦＴ処理が完了すると、主制御部１は、関数制御部６に対して、パイプラインド関数演算部５−１〜５−Ｎの中から後処理に際して実行すべきパイプラインド関数演算部を第２のパイプラインド関数演算群として選択のうえ、その実行順序を指定する。
【００３５】
関数制御部６は、この主制御部１によって選択された第２のパイプラインド関数演算群のパイプラインド関数演算部を指定された実行順序に従って縦続接続させ、前処理と同様にして、データ記憶部３に格納されているＦＦＴ完了データを第２のパイプラインド関数演算群へ次々に投入して後処理を行わせ、その後処理完了データをデータ記憶部３に書き込む。
【００３６】
この参考例１では、指定された実行順序に従ってパイプラインド関数演算群のパイプラインド関数演算部を縦続接続させ、この縦続接続させたパイプラインド関数演算部にデータを通して行くので、すなわち複数の関数演算が連続的にパイプライン処理されるので、バスの衝突等が発生することがない。このため、パイプラインド関数演算群におけるパイプラインド関数演算部の個数をｎ個とし、それぞれのパイプラインド関数演算部での処理時間をＳｎ、処理すべきデータ数をＫ個とすると、全てのデータをパイプラインド関数演算群によって演算処理する時間（前処理時間／後処理時間）Ｔｎは、下記（２）式で表される。
【００３７】
【数２】
0003790060.tif 000003
【００３８】
この（２）式と前述した従来タイプの（１）式とを比較して分かるように、この参考例１では、関数の必要数や画素数が増加しても、それに殆ど影響されずに、極めて高速に前処理や後処理を行うことが可能となる。
【００３９】
〔実例〕
例えば、５１２×５１２画素の画像データがあり、これをＦＦＴ処理（主演算：処理時間２０ｍｓ）する場合を考えてみる。ＦＦＴ処理前に、予めオフセット分を除去し（前処理関数１：減算、処理時間４０ｎｓ）、それを増幅するものとする（前処理関数２：乗算、処理時間８０ｎｓ）。また、ＦＦＴ処理結果の最大値を用いて正規化し（後処理関数１：除算、処理時間３８０ｎｓ）、ある値以下を０にする（後処理関数２：しきい値処理、処理時間２０ｎｓ）ものとする。これらの個々の処理関数の処理時間は、従来タイプの場合も参考例１の場合（新タイプ）も、同じ時間とする。また、主演算処理も同処理時間とする。
【００４０】
ここで、従来タイプも新タイプも、共に動作周波数５０ＭHz（１サイクル＝２０ｎｓ）と仮定すると、それぞれの全処理時間ＴＡおよびＴＢは次のようになる。
【００４１】
〔従来タイプ：ＴＡ〕
前処理：５１２×５１２×（４０＋８０）ｎｓ≒３１．５ｍｓ
主演算：２０ｍｓ
後処理：５１２×５１２×（３８０＋２０）ｎｓ≒１０４．９ｍｓ
ＴＡ＝３１．５ｍｓ＋２０ｍｓ＋１０４．９ｍｓ＝１５６．４ｍｓ
【００４２】
〔新タイプ：ＴＢ〕
前処理：（５１２×５１２−１）×２０ｎｓ＋（４０＋８０）ｎｓ≒５．２４ｍｓ
主演算：２０ｍｓ
後処理：（５１２×５１２−１）×２０ｎｓ＋（３８０＋２０）ｎｓ≒５．２４ｍｓ
ＴＢ＝５．２４ｍｓ＋２０ｍｓ＋５．２４ｍｓ＝３０．５ｍｓ
【００４３】
この場合、従来タイプの全処理時間ＴＡと新タイプの全処理時間ＴＢとの差はＴＡ−ＴＢ＝１２５．９ｍｓであり、新タイプの方が従来タイプよりも５倍以上高速に処理できることが確認できる。
【００４４】
ここで、特筆すべきは点は前処理および後処理に要する時間で、新タイプでは従来タイプに比べ、６〜２０倍以上高速に処理可能となっている。この実例では、前処理よりも後処理の方が処理時間にして３．３倍大きいため、従来タイプでは後処理の方が３．３倍処理時間を必要としている。一方、新タイプでは、縦続接続可能なインターフェイスを持つパイプラインド関数演算部を用いた処理構成のため、殆ど処理時間の増加にはつながっていない。これは処理対象データ（ここでは、５１２×５１２）が多いほど、その影響度は少なくなる。
【００４５】
関数単体の処理時間が増加しても影響が少ないのと同様に、処理関数の増加に対しても新タイプでは影響が少ない。そのため、新タイプでは、複雑な多数の関数処理が必要となるような前処理や後処理でも、処理時間の増加を殆ど伴わずに実行可能である。
【００４６】
〔参考例２〕
参考例１では、データ記憶部３において、データの読み出しと書き込みとが交互に頻繁に切り替えられる。このため、データ記憶部３としては、データの読み出しと書き込みとの切り替えに際して殆ど待ち時間の生じない高性能の大容量メモリを使用する必要があり、高価となる。データの読み出しと書き込みとの切り替えに際して比較的待ち時間が生じる安価な大容量メモリをデータ記憶部３として使用すると、処理速度の劣化につながり、高速処理が阻害される。
【００４７】
そこで、この参考例２では、データ記憶部３として高性能の大容量メモリを使用しなくてもよいようにして（データ記憶部３として比較的待ち時間が生じる安価な大容量メモリの使用を可能として）、コストパフォーマンスの向上を図る。
【００４８】
図２はこの参考例２の要部を示すブロック図である。この参考例２では、データ記憶部３を第１のデータ記憶部とし、この第１のデータ記憶部３とは別に第２のデータ記憶部７を設けている。第１のデータ記憶部３としては、データの読み出しと書き込みとの切り替えに際して比較的待ち時間が生じる安価な大容量メモリを使用する。第２のデータ記憶部７としては、データの読み出しと書き込みとの切り替えに際して殆ど待ち時間の生じない高性能の小容量メモリを使用する。また、主演算部２は大容量の第１のデータ記憶部３に対してではなく、小容量の第２のデータ記憶部７に対してアクセス可能に設ける。
【００４９】
この画像処理装置では次のようにしてＦＦＴ処理が行われる。主制御部１は、主演算部２でのＦＦＴ処理の前に、第１のデータ記憶部３に格納されている処理すべきデータに対してパイプラインド関数演算部５−１〜５−Ｎを利用して前処理を行わせる。
【００５０】
この場合、主制御部１は、関数制御部６に対して、パイプラインド関数演算部５−１〜５−Ｎの中から前処理に際して実行すべきパイプラインド関数演算部を第１のパイプラインド関数演算群として選択のうえ、その実行順序を指定する。
【００５１】
関数制御部６は、主制御部１によって指定された実行順序に従って第１のパイプラインド関数演算群のパイプラインド関数演算部を縦続接続させ、第１のデータ記憶部３から処理すべき１番目のデータを読み出して第１のパイプラインド関数演算群に入力する。この第１のパイプラインド関数演算群に入力されたデータは、縦続接続されたパイプラインド関数演算部により順次演算処理され、この第１のパイプラインド関数演算群からの演算処理結果のデータが前処理完了データとして第２のデータ記憶部７に書き込まれる。
【００５２】
ここで、関数制御部６は、第１のデータ記憶部３から処理すべき１番目のデータを読み出した後、次のサイクルで２番目のデータを読み出して第１のパイプラインド関数演算群に投入する。第１のパイプラインド関数演算群に投入された２番目のデータは、１番目のデータと同様にして、縦続接続されたパイプラインド関数演算部により順次演算処理され、この第１のパイプラインド関数演算群からの演算処理結果のデータが前処理完了データとして第２のデータ記憶部７に書き込まれる。
【００５３】
第２のデータ記憶部７に２つの前処理完了データが溜まると、主演算部２は、主制御部１の指示に従い、第２のデータ記憶部７に格納されている２つの前処理完了データを読み出し、この前処理完了データに対してＦＦＴ処理を施し、このＦＦＴ処理を施したデータ（ＦＦＴ完了データ）を第２のデータ記憶部７に書き込む。
【００５４】
第２のデータ記憶部７における前処理完了データのＦＦＴ処理が終了すると、主制御部１は、関数制御部６に対して、パイプラインド関数演算部５−１〜５−Ｎの中から後処理に際して実行すべきパイプラインド関数演算部を第２のパイプラインド関数演算群として選択のうえ、その実行順序を指定する。
【００５５】
関数制御部６は、主制御部１によって指定された実行順序に従って第２のパイプラインド関数演算群のパイプラインド関数演算部を縦続接続させ、前処理と同様にして、第２のデータ記憶部７に格納されているＦＦＴ完了データを第２のパイプラインド関数演算群へ次々に投入し、後処理を行わせた後、第１のデータ記憶部３に書き込む。
【００５６】
そして、関数制御部６は、第１のデータ記憶部３に全ての後処理完了データを書き込んだ後、主制御部１によって指定される実行順序に従って第１のパイプラインド関数演算群のパイプラインド関数演算部を縦続接続させ、第１のデータ記憶部３に格納されている処理すべきデータの第１のパイプラインド関数演算群への投入を再開する。
【００５７】
以下、同様にして、第１のパイプラインド関数演算群を用いての前処理、主演算部２でのＦＦＴ処理、第２のパイプラインド関数演算群を用いての後処理を繰り返すことによって、第１のデータ記憶部３に格納されている全ての処理すべきデータに対して前処理→ＦＦＴ処理→後処理を施す。
【００５８】
この参考例２では、第１のデータ記憶部３において、データの読み出しと書き込みとを短時間で切り替える必要がなく、第１のデータ記憶部３としてデータの読み出しと書き込みとの切り替えに際して比較的待ち時間が生じる安価な大容量メモリを使用することができる。
【００５９】
また、この参考例２では、第２のデータ記憶部７は主演算部２でのＦＦＴ処理のためにデータの読み出しと書き込みとが短時間に切り替わる場合でも殆ど待ち時間の生じない高性能のメモリを必要とするが、第２のデータ記憶部７に格納された前処理完了データは主演算部２によってＦＦＴ処理が施された後、ＦＦＴ完了データとして第２のデータ記憶部７に格納されるものの、すぐに関数制御部６によって読み出され第２のパイプラインド関数演算群に投入されるので、第２のデータ記憶部７のメモリ容量は小容量でよい。
【００６０】
これにより、第２のデータ記憶部７の追加によるコストアップ分が第１のデータ記憶部３のコストダウン分に吸収され、コストパフォーマンスが向上する。また、この参考例２では、第１のデータ記憶部３に他の装置からアクセスがある場合（例えば、画像入力部からの画像データ入力や画像出力部への画像データの出力など）でも、主演算部２での待ち時間が発生せず、処理速度が劣化しない。
【００６１】
〔実施の形態１〕
参考例２では、第２のデータ記憶部７に前処理完了データを書き込んでいる間や第２のデータ記憶部７からＦＦＴ完了データを読み出している間は、主演算部２でのＦＦＴ処理を実行することができず、全演算処理に要する時間が長くなる。そこで、この実施の形態１では、データの転送時間の無駄を削減して、全演算処理に要する時間を短縮する。
【００６２】
図３はこの実施の形態１の要部を示すブロック図である。この実施の形態１では、データ記憶部３を第１のデータ記憶部とし、この第１のデータ記憶部３とは別に第２のデータ記憶部７と第３のデータ記憶部８を設けている。第１のデータ記憶部３としては、データの読み出しと書き込みとの短時間の切り替えに際して比較的待ち時間が生じる安価な大容量メモリを使用する。第２のデータ記憶部７および第３のデータ記憶部８としては、データの読み出しと書き込みとの短時間の切り替えに際して殆ど待ち時間の生じない高性能の小容量メモリを使用する。また、主演算部２は大容量の第１のデータ記憶部３に対してではなく、小容量の第２のデータ記憶部７と第３のデータ記憶部８に対してアクセス可能に設ける。
【００６３】
この画像処理装置では次のようにしてＦＦＴ処理が行われる。主制御部１は、主演算部２でのＦＦＴ処理の前に、データ記憶部３に格納されている処理すべきデータに対してパイプラインド関数演算部５−１〜５−Ｎを利用して前処理を行わせる。
【００６４】
この場合、主制御部１は、関数制御部６に対して、パイプラインド関数演算部５−１〜５−Ｎの中から前処理に際して実行すべきパイプラインド関数演算部を第１のパイプラインド関数演算群として選択のうえ、その実行順序を指定する。
【００６５】
関数制御部６は、主制御部１によって指定された実行順序に従って第１のパイプラインド関数演算群のパイプラインド関数演算部を縦続接続させ、第１のデータ記憶部３から処理すべき１番目のデータを読み出して第１のパイプラインド関数演算群に入力する。この第１のパイプラインド関数演算群に入力されたデータは、縦続接続されたパイプラインド関数演算部ににより順次演算処理され、この第１のパイプラインド関数演算群からの演算処理結果のデータが前処理完了データ（１番目の前処理完了データ）として第２のデータ記憶部７に書き込まれる（図４（ａ）参照）。
【００６６】
ここで、関数制御部６は、第１のデータ記憶部３から処理すべき１番目の処理データを読み出した後、次のサイクルで２番目の処理すべきデータを読み出して第１のパイプラインド関数演算群に投入する。第１のパイプラインド関数演算群に投入された２番目のデータは、１番目のデータと同様にして、縦続接続されたパイプラインド関数演算部により順次演算処理され、この第１のパイプラインド関数演算群からの演算処理結果のデータが前処理完了データ（２番目の前処理完了データ）として第３のデータ記憶部８に書き込まれる（図４（ｂ）参照）。
【００６７】
一方、主演算部２は、主制御部１からの指示に従い、第２のデータ記憶部７に格納されている１番目の前処理完了データを読み出し、この１番目の前処理完了データに対してＦＦＴ処理を施す。すなわち、この場合、１番目の前処理完了データに対してＦＦＴ処理が行われている間に、空いている転送経路を利用して、２番目の前処理完了データが先読みされて第３のデータ記憶部８に書き込まれることになる。
【００６８】
次に、主演算部２は、主制御部１からの指示に従い、第３のデータ記憶部８に格納されている２番目の前処理完了データを読み出し、この２番目の前処理完了データに対してＦＦＴ処理を施す。この２番目の前処理完了データに対してＦＦＴ処理が行われている間に、関数制御部６は、空いている転送経路を利用して、第２のデータ記憶部７に格納されている１番目のＦＦＴ完了データを第２のパイプラインド関数演算群に投入し、後処理を行わせて、第１のデータ記憶部３に１番目の後処理完了データとして書き込む。そして、この後、関数制御部６は、第１のデータ記憶部３に格納されている３番目の処理すべきデータを第１のパイプラインド関数演算群に投入し、前処理を行わせて、第２のデータ記憶部７に３番目の前処理完了データとして書き込む（図４（ｃ）参照）。
【００６９】
次に、主演算部２は、主制御部１からの指示に従い、第２のデータ記憶部７に格納されてい３番目の前処理完了データを読み出し、この３番目の前処理完了データに対してＦＦＴ処理を施す。この３番目の前処理完了データに対してＦＦＴ処理が行われている間に、関数制御部６は、空いている転送経路を利用して、第３のデータ記憶部８に格納されている２番目のＦＦＴ完了データを第２のパイプラインド関数演算群に投入し、後処理を行わせて、第１のデータ記憶部３に２番目の後処理完了データとして書き込む。そして、この後、関数制御部６は、第１のデータ記憶部３に格納されている４番目の処理すべきデータを第１のパイプラインド関数演算群に投入し、前処理を行わせて、第３のデータ記憶部８に４番目の前処理完了データとして書き込む（図４（ｄ）参照）。
【００７０】
以下、同様にして、図４（ｃ），図４（ｄ）の処理を交互に行い、第１のパイプラインド関数演算群を用いての前処理、主演算部２でのＦＦＴ処理、第２のパイプラインド関数演算群を用いての後処理を繰り返すことによって、第１のデータ記憶部３に格納されている全ての処理すべきデータに対して前処理→ＦＦＴ処理→後処理を施す。
【００７１】
この実施の形態１では、主演算部２と第３のデータ記憶部８との間でＦＦＴ処理を行っている間に、第２のデータ記憶部７からの第２のパイプラインド演算関数群を介する第１のデータ記憶部３への後処理完了データの書き込み、第１のデータ記憶部３からの第１のパイプラインド演算関数群を介する第２のデータ記憶部７への前処理完了データの書き込みを行うことができる。
【００７２】
また、主演算部２と第２のデータ記憶部７との間でＦＦＴ処理を行っている間に、第３のデータ記憶部８からの第２のパイプラインド演算関数群を介する第１のデータ記憶部３への後処理完了データの書き込み、第１のデータ記憶部３からの第１のパイプラインド演算関数群を介する第３のデータ記憶部８への前処理完了データの書き込みを行うことができる。
【００７３】
これにより、データの転送時間の無駄が削減され、主演算部２でのＦＦＴ処理が休みなく行われるものとなり、全演算処理にかかる時間が短縮されるようになる。
【００７４】
また、この実施の形態３では、第１のデータ記憶部３において、データの読み出しと書き込みとの切り替えが頻繁に繰り返されるように思われるが、「前処理のデータ転送時間＋後処理のデータ転送時間」＜主演算時間とすれば、第１のデータ記憶部３でのデータの読み出しと書き込みとを短時間で切り替える必要はなく、第１のデータ記憶部３としてデータの読み出しと書き込みとの短時間の切り替えに際して比較的待ち時間が生じる安価な大容量メモリを使用することができる。
【００７５】
また、この実施の形態１では、第２のデータ記憶部７（第３のデータ記憶部８）は主演算部２でのＦＦＴ処理のためにデータの読み出しと書き込みとを短時間で切り替える場合でも殆ど待ち時間の生じない高性能のメモリを必要とするが、第２のデータ記憶部７および第３のデータ記憶部８に格納された前処理完了データは主演算部２によってＦＦＴ処理が施された後、ＦＦＴ完了データとして第２のデータ記憶部７および第３のデータ記憶部８に格納されるものの、すぐに関数制御部６によって読み出され第２のパイプラインド関数演算群に投入されるので、第２のデータ記憶部７および第３のデータ記憶部８のメモリ容量は小容量でよい。
【００７６】
なお、この実施の形態１では、説明を簡単とするために、第１のデータ記憶部３から１つずつデータが読み出され、前処理された後、互い違いに第２のデータ記憶部７および第３のデータ記憶部８へ書き込まれるものとしたが、実際にはその投入時間を１サイクルずらした２つのデータがペアとして前処理された後、互い違いに第２のデータ記憶部７および第３のデータ記憶部８へ書き込まれる。主演算部２はこの２つの前処理完了データを読み出してＦＦＴ処理を施す。また、その投入時間を１サイクルずらした２つのＦＦＴ完了データがペアとして第２のデータ記憶部７および第３のデータ記憶部８から互い違いに読み出され、後処理された後、第１のデータ記憶部３に書き込まれる。
【００７７】
〔参考例２と実施の形態１の処理時間の比較〕
参考例２（図２）において、第１のデータ記憶部３から第２のデータ記憶部７への転送をＴＲ、第２のデータ記憶部７から第１のデータ記憶部３への転送をＴＷ、主演算部２でのＦＦＴ処理をＦＦＴとすると、その処理状況は図５（ａ）に示すようになる。
【００７８】
実施の形態１（図３）において、第１のデータ記憶部３から第２のデータ記憶部７および第３のデータ記憶部８への転送をＴＲ、第２のデータ記憶部７および第３のデータ記憶部８から第１のデータ記憶部３への転送をＴＷ、主演算部２でのＦＦＴ処理をＦＦＴとすると、その処理状況は図５（ｂ）に示すようになる。
【００７９】
図５（ａ）でも図５（ｂ）でもＦＦＴ，ＴＲ，ＴＷの時間幅はそれぞれ同じとする（但し、ＴＲ＋ＴＷ＜＜ＦＦＴ）。すると、ＦＦＴ１〜ＦＦＴ１２８（２次元ＦＦＴの半分の時間（横方向か縦方向のみ））の時間は、図５（ａ）の場合には１２８（ＴＲ＋ＦＦＴ＋ＴＷ）、図５（ｂ）の場合にはＴＲ＋１２８ＦＦＴ＋ＴＷとなる。
【００８０】
この場合、図５（ａ）と図５（ｂ）との差は１２７ＴＲ＋１２７ＴＷとなり、おおよそ１２７ＴＲ＋１２７ＴＷだけ図５（ｂ）、すなわち実施の形態１の方が高速に処理できることになる。
【００８１】
パイプライン関数の処理時間はＴＲ，ＴＷにほとんど含まれてしまう（実際は各パイプライン関数の段数の和だけＴＲ，ＴＷが増加する）。例えば、転送処理に２５６サイクルかかって、パイプライン関数に乗算（３段パイプライン）、加算（２段パイプライン）が転送と同時に縦続接続処理されているとすると、ＴＲ’＝ＴＲ＋３＋２＝２６１サイクルという具合になる。
【００８２】
なお、実施の形態１では、説明を簡単とするためにパイプラインド関数演算部５−１〜５−Ｎは１入力１出力としたが、一部の関数は２入力１出力、３入力１出力などとすることができる（例えば、２画像の差分を算出するような関数）。この場合、第１のパイプラインド関数演算群や第２のパイプラインド関数演算群において、その先頭のパイプラインド関数演算部のみを複数入力１出力とする。複数入力１出力とした場合、他の入力を待つ必要があるので、投入待ち時間Ｘは、入力数をｍとした場合、ＭＡＸ（Ｘｍ）となる。
【００８３】
また、実施の形態１では、主演算部２においてＦＦＴ処理を行うものとしたが、拡大，縮小，回転，ＤＣＴ，相関計算など各種の主演算に置き換えることが可能である。また、主演算は、パイプライン処理可能な演算であってもよい。しかし、完全にパイプライン処理できるのであれば、それは主演算ではなくパイプラインド関数演算群で実現可能である。ＦＦＴ処理の場合は、全体で考えると１入力１出力で処理することができず、途中で複数経路に分かれるなど複雑な処理となる。主演算部２としては、ＦＦＴ処理のように、１入力１出力で処理することができない複雑な演算が適している。
【００８４】
また、実施の形態１は画像処理装置への適用例として説明したが、本発明は画像処理に限られるものではなく、各種の演算処理に適用可能である。
【００８５】
【発明の効果】
以上説明したことから明らかなように本発明によれば、第１のデータ記憶部から処理すべきデータが読み出され、第１のパイプラインド関数演算群に入力され、この第１のパイプラインド関数演算群からの演算処理結果のデータがデータ順に応じて互い違いに第２および第３のデータ記憶部に書き込まれ、また、第１および第２のデータ記憶部に書き込まれたデータがデータ順に応じて互い違いに読み出されて主演算部による演算が行われ、この主演算部での演算処理結果のデータが読み出し元のデータ記憶部に書き込まれ、第１および第２のデータ記憶部に書き込まれた主演算部での演算処理結果のデータが、データ順に応じて互い違いに第２のパイプラインド関数演算群に入力され、この第２のパイプラインド関数演算群からの演算処理結果のデータが第１のデータ記憶部に書き込まれるものとなり、ここで、第１および第２のパイプラインド関数演算群は、そのパイプラインド関数演算群を構成するパイプラインド関数部およびその実行順序が主制御部により指定され、この指定された実行順序に従って第１および第２のパイプラインド関数演算群のパイプラインド関数演算部が縦続接続されるので、パイプライン関数演算部での処理時間Ｓｎより遥かに小さい投入待ち時間Ｘ（Ｘ＜＜Ｓｎ）でもって第１および第２のパイプラインド関数演算群へ次々にデータを入力することができ、多数の関数を用いる多大なデータ処理を高速で行うことができるようになる。
【００８９】
また、第２および第３のデータ記憶部では主演算部との間でデータの読み出しと書き込みとが短時間で切り替わる可能性があるが、第１のデータ記憶部ではデータの読み出しと書き込みとが短時間で切り替わらず、第１のデータ記憶部としてデータの読み出しと書き込みとの短時間の切り替えに際して比較的待ち時間が生じる安価な大容量メモリを使用することができる。また、第２のデータ記憶部（第３のデータ記憶部）としてはデータの読み出しと書き込みの短時間の切り替わりが生じても待ち時間が殆ど生じない高性能のメモリを必要とするが、第２のデータ記憶部（第３のデータ記憶部）に格納された主演算部で処理すべきデータは主演算部によって主演算が施された後、処理演算結果のデータとして第２のデータ記憶部（第３のデータ記憶部）に格納されるものの、すぐに関数制御部によって読み出され第２のパイプラインド関数演算群に投入されるので、第２のデータ記憶部（第３のデータ記憶部）のメモリ容量は小容量でよい。これにより、第２および第３のデータ記憶部の追加によるコストアップ分が第１のデータ記憶部のコストダウン分に吸収され、コストパフォーマンスが向上する。
【００９０】
また、主演算部と第３のデータ記憶部（第２のデータ記憶部）との間で主演算処理を行っている間に、第２のデータ記憶部（第３のデータ記憶部）からの第２のパイプラインド演算関数群を介する第１のデータ記憶部への演算処理結果のデータの書き込み、第１のデータ記憶部からの第１のパイプラインド演算関数群を介する第２のデータ記憶部（第３のデータ記憶部）への演算処理結果のデータの書き込みを行うことができ、データの転送時間の無駄を削減して、全演算処理に要する時間を短縮することができる。
【図面の簡単な説明】
【図１】  本発明の説明に入る前の参考例１の要部を示すブロック図である。
【図２】  本発明の説明に入る前の参考例２の要部を示すブロック図である。
【図３】  本発明の一実施の形態（実施の形態１）の要部を示すブロック図である。
【図４】  実施の形態１における処理動作を説明する図である。
【図５】  参考例２と実施の形態１の処理時間の比較を説明する図である。
【図６】  従来の画像処理装置の要部を示すブロック図である。
【符号の説明】
１…主制御部、２…主演算部、３…データ記憶部（第１のデータ記憶部）、５−１〜５−Ｎ…パイプラインド関数演算部、６…関数制御部、７…第２のデータ記憶部、８…第３のデータ記憶部。
【図１】
0003790060.tif 000004
【図２】
0003790060.tif 000005
【図３】
0003790060.tif 000006
【図５】
0003790060.tif 000007
【図４】
0003790060.tif 000008
【図６】
0003790060.tif 000009