(57)【特許請求の範囲】
【請求項１】
メモリを介在して並列演算を行う複数の演算ブロックが直列に接続された並列演算処理装置であって、
先頭の演算ブロックは、
少なくとも演算されるデータの所在を示すアドレスである初期アドレス値と、該初期アドレスに基づく演算処理に続く次の演算処理に用いるアドレスを指定するための値であるステップ値と、演算値とから構成されるパラメータデータを受け付けるパラメータデータ受付手段と、
前記受け付けたパラメータデータに基づき、前記初期アドレス値で指定されるアドレスのデータを前記メモリから読み込むデータ読み込み手段と、
前記読み込んだデータと前記演算値により所定の演算を実行し、前記演算の結果を前記データを読み込んだアドレス値の示すアドレスに書き戻すメモリ演算手段と、
前記アドレス値に前記ステップ値を加算して当該アドレス値を更新し、当該更新したアドレス値が前記先頭の演算ブロックに割り当てられたメモリの領域内であるかを判断して、領域内であると判断した場合に、前記更新したアドレス値で指定されたアドレスのデータを読み込み、領域を越えたと判断した場合に、当該領域からはみ出した分の残りアドレス値と前記ステップ値と前記演算値からなる引渡しパラメータデータを次段の演算ブロックに出力する判断手段と、
前記判断手段が出力した後に、次のパラメータデータを取得する次パラメータデータ取得手段と
を備え、
第２およびそれ以降の演算ブロックは、
前段の演算ブロックから出力された前記引渡しパラメータデータを受け付ける引渡しパラメータデータ受付手段、前記データ読み込み手段、前記メモリ演算手段、および、前記判断手段を備える
ことを特徴とする並列演算処理装置。
【請求項２】
少なくとも入力アドレス値と次に指定するアドレスを設定する入力ステップ値と入力演算値から構成される入力パラメータデータを複数格納する入力部をさらに備え、
前記先頭の演算ブロックは、前記入力パラメータデータを前記パラメータデータとして受け付けて演算を行い、
最後の演算ブロックは、当該演算ブロックの前記メモリの領域からはみ出した前記残りアドレス値を前記入力部に書き込戻す処理を行う
ことを特徴とする請求項１に記載の並列演算処理装置。
【請求項３】
前記入力パラメータデータは前記ステップ値の大きさに基づき並べ変えて入力することを特徴とする請求項２に記載の並列演算処理装置。
【請求項４】
前記パラメータデータのアドレス値と予め設定した特定パターンを比較し、比較の結果、入力パラメータデータが特定パターンと一致する場合には、演算部は演算処理を行わないことを特徴とする請求項２に記載の並列演算処理装置。
【請求項５】
メモリを介在して並列演算を行う複数の演算ブロックが直列に接続された並列算術演算処理方法であって、
先頭の演算ブロックにより実行する、
少なくとも演算されるデータの所在を示すアドレスである初期アドレス値と、該初期アドレスに基づく演算処理に続く次の演算処理に用いるアドレスを指定するための値であるステップ値と、演算値とから構成されるパラメータデータを受け付けるパラメータデータ受付ステップと、
前記受け付けたパラメータデータに基づき、前記初期アドレス値で指定されるアドレスのデータを前記メモリから読み込むデータ読み込みステップと、
前記読み込んだデータと前記演算値により所定の演算を実行し、前記演算の結果を前記データを読み込んだアドレス値の示すアドレスに書き戻すメモリ演算ステップと、
前記アドレス値に前記ステップ値を加算して当該アドレス値を更新し、当該更新したアドレス値が前記先頭の演算ブロックに割り当てられたメモリの領域内であるかを判断して、領域内であると判断した場合に、前記更新したアドレス値で指定されたアドレスのデータを読み込み、領域を越えたと判断した場合に、当該領域からはみ出した分の残りアドレス値と前記ステップ値と前記演算値からなる引渡しパラメータデータを次段の演算ブロックに出力する判断ステップと、
前記次段の演算ブロックに出力した後に、次のパラメータデータを取得する次パラメータデータ取得ステップと、
第２およびそれ以降の演算ブロックにより実行する、
前段の演算ブロックから出力された前記引渡しパラメータデータを受け付ける引渡しパラメータデータ受付ステップ、前記データ読み込みステップ、前記メモリ演算ステップ、および、前記判断ステップからなる
ことを特徴とする並列算術演算処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリを介在したハードウェアによる並列算術演算処理の技術に関する。
【背景技術】
【０００２】
近年、ソフトウェアで処理していた複雑な処理をハードウェアで実現するようになり、さらなる高速化処理が求められ、ハードウェアの利点である並列化処理の実装が要求されている。例えば画像処理、信号処理、高速通信処理、暗号処理など様々な技術分野において並列処理を実装したハードウェア化が進められている。
【０００３】
図１３は、従来のソフトウェアにより演算を行う処理演算装置の構成図である。図１３は基本的なブロック構成を示しており、入力機能１３１、演算機能１３２、メモリ部１３３、出力機能１３４などの４つのブロックから構成される。入力機能１３１および出力機能１３４はメモリ構造を有し必要なデータ格納する。そのメモリとして外部メモリ（ＤＤＲメモリなど）が考えられる。
【０００４】
また、メモリ部１３３はハードウェア内蔵のメモリである。例えば素因数分解などで用いる篩の計算を行う場合、入力機能１３１に保存するパラメータデータのパラメータはメモリアドレス値（ｒ）、ステップ値（ｐ）、演算値（Ｌ）の３つにより構成されている（以後パラメータデータを（ｒ，ｐ，Ｌ）と示す）。これらのパラメータを使用して演算機能１３２がメモリ部１３３に格納されているデータを制御して演算を行う。
【０００５】
従来の演算機能１３２のソフトウェアによる演算フローについて説明する。
（１）パラメータデータ（ｒ，ｐ，Ｌ）を演算機能１３２で受信する。
（２）パラメータデータの示すメモリ部１３３のアドレス（ｒ）からデータを演算内部に読込み（リード）をする。
（３）上記（２）で読込んだデータと（１）で受信した（Ｌ）値の演算処理（例えば（１）＋（２）の加算処理）を実施する。
（４）上記（３）の演算処理結果を元のアドレス（ｒ）（（２）で示したアドレス）に書込み（ライト）をする。
（５）上記（４）のアドレスに対して（１）の（ｐ）パタメータ内容に従いステップ値を加算する（ｒ＝ｒ＋ｐ）。
（６）ステップ値を加算されたアドレスにおいて上記（２）〜（５）の処理を繰り返す。ただし、メモリ部１３３のメモリ領域を超えた時点で本パラメータ処理は終了。また、最後にメモリ領域を超え、はみ出たアドレスを入力機能１３１のパラメータデータを反映させて書き戻する。はみ出たアドレスに基づいて次メモリ空間用で使用するようにパラメータデータを書き換える。
（７）入力機能１３１の全入力パラメータデータに対して（１）〜（６）までの処理を繰り返す。
（８）最後にメモリ部１３３の値を予め設定した閾値と比較し、閾値以上の場合、そのアドレスを出力値として出力結果として出力機能１３４に出力する。このように篩の計算では演算対象の空間をメモリアドレス空間として定義し、入力パラメータによってどの空間（アドレス）部分が、条件（閾値）を超えるかを演算処理する方法が用いられている。
【０００６】
しかしながら、従来の方法では、パラメータが増加すると膨大な処理時間が必要になる。つまり１つのパラメータに必要な処理時間×パラメータ数分の時間が必要となる。
そこでハードウェアを用いた並列化を考えられる。しかし、パラメータ単位での並列化では、同一時刻に内部メモリアクセスの競合が発生する場合があり、効率的な処理が実現できない問題が生じる。図１４は、図１３の（１）〜（８）までの処理に対してパラメータ単位での並列化処理をハードウェアで実現した場合の図である。
【０００７】
図１４は入力部１４１、演算部１４２、メモリ部１４３、出力部などの４つのブロックから構成される。しかし演算部１４２が複数の演算ブロック（＃１〜＃ｎ）により並列化（＃ｎ並列化）し、各演算ブロックへのパラメータデータの分配用に第１選択部１４５（ｓｅｌ１）と入力部１へのパラメータデータの書込み調停用の第２選択部１４６（ｓｅｌ２）を追加している。
【０００８】
ところが、個々の演算ブロックがパラメータ単位に動作した場合、終了時の次アドレス領域で使用するアドレス値を入力部１４１に書き戻す時に、同一時刻に内部メモリアクセスの競合が発生する場合がある。そのため、調停回路が必須となり、第２選択部１４６を含む周辺回路の制御回路が膨大なサイズになる。
【０００９】
また、第１選択部１４５および第２選択部１４６の調停回路により調停制御された時点で現状処理の無効化処理（パイプライン部分の無効化：値の再読み直し等）が発生し、処理性能に影響する。つまり処理時間が長くなってしまう。
【００１０】
特許文献１によれば、複数のプロセッサが協調して共通のメモリ空間を使用するシステムを利用して、他のプロセッサからの要求が使用中の場合に、要求アドレスにベースレジスタの値を加算してアドレス変換しメモリ空間を確保することでアドレス衝突を避ける提案がされている。なお、衝突時に共有空間にアクセスするスレッド（ソフトウェアの実行単位）に対しては、先ず自らローカルメモリにコピーしておき共有空間が空いている場合に戻して処理を行う。故にコピー先アドレスは、共有メモリとオフセットの空間がある方式である。
【００１１】
特許文献２によれば、複数のプロセッサが非同期に共有領域のメモリにアクセスの競合を避けるために、スケジューリングを行ってタイムテーブルを作成しアクセスを制御する提案がされている。なお、共有空間にアクセスするスレッドは非同期である。故に、一度スケジューリングテーブルに登録し、そのスケジューラの制御により共有メモリへのアクセスを交通整理することを特徴とした方式である。。
【００１２】
特許文献３によれば、アクセス要求が競合する場合、優先順位により定められた順番によってアクセスを許可する提案がされているが、アクセスの競合時には、優先順位の高い方から逐次処理されることを特徴とした方式である。
【特許文献１】特開平９−１４６９０４号公報
【特許文献２】特開２０００−１４８５７７号公報
【特許文献３】特開平８−０１６４５４号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
本発明は上記のような実情に鑑てなされたものであり、ローカルと共有と分離したメモリ空間ではなく、全共有空間のみのメモリ空間を使用する。またメモリ衝突がなく、調停回路が不要であり、パイプライン処理を中断せずに並列化処理ができる並列演算処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明のひとつの態様であるメモリを介在して並列演算を行う複数の演算ブロックからなる並列演算処理装置であって、各演算ブロックは、上記メモリ領域を分割した領域である分割メモリ毎に対応する演算部を設け、少なくともアドレス値と次に指定するアドレスを設定するステップ値と演算値から構成されるパラメータデータに基づき上記演算部が上記アドレス値に上記ステップ値を加算して上記アドレス値を更新し、上記アドレス値で指定される上記分割メモリからデータを読み込み、上記データと上記演算値により所定の演算を実行し、上記演算の結果を当該アドレス値の示すアドレスに書き戻すメモリ演算処理をし、上記アドレス値が上記分割メモリの領域内であれば上記ステップ値をさらに上記アドレス値に加算して上記メモリ演算処理を繰り返し、上記領域を越えたときは当該分割メモリの領域からはみ出した分の残りアドレス値と上記ステップ値と上記演算値からなる引渡しパラメータデータを出力し次段に渡す構成である。
【００１５】
好ましくは、少なくとも入力アドレス値と次に指定するアドレスを設定する入力ステップ値と入力演算値から構成される入力パラメータデータを複数格納する入力部と、上記入力パラメータデータを上記パラメータデータとして読み込み演算を行う上記演算部を備えた第１演算ブロックと、上記引渡しパラメータデータを上記パラメータデータとして入力とする上記演算部を備えた第２演算ブロックと、上記引渡しパラメータデータを上記パラメータデータとして入力し、当該演算ブロックの上記分割メモリ領域からはみ出した上記残りアドレス値を上記入力部に書込戻す処理を行う第３演算ブロックと、を具備する構成としてもよい。
【００１６】
好ましくは、上記入力パラメータデータは上記ステップ値に基づいて入力する構成としてもよい。
好ましくは、上記パラメータデータのアドレス値と予め設定した特定パターンを比較しその結果に基づいて上記演算を行う構成としてもよい。
【００１７】
本発明の他の態様であるメモリを介在して並列演算を行う複数の演算ブロックからなる並列算術演算処理方法であって、各演算ブロックは、上記メモリ領域を分割した領域である分割メモリ毎に対応して設けられた演算部にて、少なくともアドレス値と次に指定するアドレスを設定するステップ値と演算値から構成されるパラメータデータに基づき上記アドレス値に上記ステップ値を加算して上記アドレス値を更新し、上記アドレス値で指定される上記分割メモリからデータを読み込み、上記データと上記演算値により所定の演算を実行し、上記演算の結果を当該アドレス値の示すアドレスに書き戻すメモリ演算処理をし、上記アドレス値が上記分割メモリの領域内であれば上記ステップ値をさらに上記アドレス値に加算して上記メモリ演算処理を繰り返し、上記領域を越えたときは当該分割メモリの領域からはみ出した分の残りアドレス値と上記ステップ値と上記演算値からなる引渡しパラメータデータを出力し次段に渡すことを特徴とする。
【００１８】
上記構成によれば、演算ブロックを並列数分（１〜ｎ）用意し、メモリ部が全メモリ容量を並列数で均等に分割し、先頭演算ブロック（＃１）の処理が終了すると次段演算ブロック（＃２）のハードウェアに処理をバトンタッチし、先頭ブロックハードウェア部は、次のパラメータデータに対する処理を開始するように構成し、＃２では処理が完了後に次段演算ブロック（＃３）に処理をバトンタッチする。このように最終段の演算ブロック（＃ｎ）まで順次バトンタッチ処理を行う。その結果、メモリ部での同一時間の同一アドレスアクセス衝突（処理の競合）を防ぐことができ、効率的にパイプライン処理と並列化処理を行うことができる。
【発明の効果】
【００１９】
本発明によれば、ハードウェアの担当ブロックを明確化することで、メモリ部での同一時間の同一アドレスアクセス衝突（処理の競合）を防ぐことができる。このことから、調停回路が不要となると共に、効率的なパイプライン処理と並列化処理を実現できる。
【発明を実施するための最良の形態】
【００２０】
以下図面に基づいて、本発明の実施形態について詳細を説明する。
（実施例１）
図１は本発明を実施するための構成を示すブロック図である。並列演算処理装置のパイプライン処理と並列化処理を実現するユニットである入力部１、演算部２、メモリ部３について説明する。
【００２１】
図１において、入力部１には入力用のパラメータデータ（入力パラメータデータ）が格納されている。また、演算ブロック＃１〜＃ｎは、各演算部２とメモリ部３は、演算ブロックごとに割り当てられるように設けられている。つまり各演算部２（２ａ〜２ｎ）とメモリ部３に割り当てられたメモリ領域（分割メモリ３ａ〜３ｎ）から構成されている。ここで同図に示す＃１〜＃ｎは演算ブロックの個数（ハードウェアの並列数）を示す。
【００２２】
本処理フローでは篩の計算を例として説明をするが、利用方法はこれに限定されるものではない。篩の計算を簡単に説明すると、入力パラメータデータ（入力アドレス値:ｒ、入力ステップ値:ｐ、入力演算値:Ｌ）の導き方は、素数（Ｐ０）としたとき、多項式（５次式：ＡＸ＾５＋ＢＸ＾４＋ＣＸ＾３＋ＤＸ＾２に＋ＥＸ＾１＋Ｆ）をｍｏｄ（Ｐ０）で因数分解した結果の中に、１次式が出てきたら、その定数項をｒとする。例えば、因数分解結果の一次式が（Ｘ−４３）とすると、ｒ＝４３、ｐ＝ｐ０となる。
多項式ＡＸ＾５＋ＢＸ＾４＋ＣＸ＾３＋ＤＸ＾２に＋ＥＸ＾１＋Ｆ）のＸにｒを代入した値がｐの倍数になっていることが必要十分条件である。
【００２３】
なお、Ｌはｌｏｇ２（ｐ）を整数で丸めたものである。例えば、ｐ＝４３＝００１０１０１１（２進）であり、上位側ビットからサーチし最初の”１”のビット位置がｌｏｇ値となる。この場合、４３の最初”１”の位置は、ａ５アドレス（最下位アドレスをａ０とカウント）であり、Ｌ＝５となる。
【００２４】
上記のように導かれた入力アドレス値（ｒ）と入力ステップ値（ｐ）と入力演算値（Ｌ）が入力部１のメモリに格納されている。
本実施例ではパラメータデータを（ｒ，ｐ，Ｌ）のように示す。また入力部１には複数の入力パラメータデータを格納している。
【００２５】
図１の各ブロックの処理との関係について図２を用いて説明する。
図２は本発明の演算部ブロックの演算処理を示した図である。同図を縦方向に見た場合、左から演算ブロック＃１（第１演算ブロック）、次が演算ブロック＃２（第２演算ブロック）・・・最後が演算ブロック＃Ｎ（第３演算ブロック）を示す。
【００２６】
（演算ブロック＃１の処理）
モジュールＭ１では入力部１から入力パラメータデータを先頭の演算ブロック＃１（第１演算ブロック）が受信する。例えば外部メモリに登録されているパラメータデータの中から必要なパラメータデータを演算ブロック＃１の演算部２ａにコピーする（パラメータデータはデータベース（ＤＢ）のように格納される）。ここで最初の入力パラメータデータを（ｒ１，ｐ１，Ｌ１）と示す。
【００２７】
モジュールＭ２ａではパラメータデータ（ｒ１，ｐ１，Ｌ１）に基づいて受信処理アドレスを計算する（ｒ１＝ｒ１＋ｐ１）。ここで最初の処理を行う場合はステップ値の加算を行わずモジュールＭ３ａに移行する。
【００２８】
モジュールＭ３ａではアドレスが演算ブロック＃１に割り当てられたメモリ＃１  ３ａの領域なのかを判断する。領域範囲内であればモジュールＭ４ａの処理に移行する。モジュールＭ３ａの２回目（ｒ１＝ｒ１＋２ｐ１）以降の処理の場合は、領域外を示していればモジュールＭ１とモジュールＭ２ｂの処理に移行する。
【００２９】
モジュールＭａ４とメモリ＃１  ３ａでは加算処理が行われる。パラメータデータ内容に従い演算ブロック＃１のメモリ＃１  ３ａからアドレス（ｒ１）を指定しデータ（（ｒ１）ｄ）を読み込む（同図のリード（Ｒ））。その後メモリ演算処理を実施する。例えば、加算処理の場合であれば（ｒ１）ｄ値＋入力値（Ｌ）を演算する。演算結果を元アドレス（ｒ１の示すアドレス）にライト（同図のＷ）して、モジュールＭ２ａの処理をする。
【００３０】
次に再び上記説明したモジュールＭ３ａ処理をする場合は、次段演算ブロック＃２にはみ出した値（ｒ１−Ｓ：はみ出した分の残りアドレス値）とパラメータ値（ｐ１，Ｌ１）を引き渡す（引渡しパラメータデータ）。そして、次のパラメータデータを取得する処理に移行する。つまり、モジュールＭ２ｂに引渡しパラメータデータを引渡し、新しいパラメータデータを取得するためにモジュールＭ１の処理をする。ここでモジュールＭ２ｂは演算ブロック＃２に含まれており、引渡しパラメータデータは（ｒ１−Ｓ，ｐ１，Ｌ１）に変換され演算ブロック＃２に引き渡される。なお上記”Ｓ”は各メモリ部３内の領域を示し、Ｓ（演算ブロック＃１のメモリ＃１の領域）＋Ｓ（演算ブロック＃２のメモリ＃２の領域）＋・・・＋Ｓ（演算ブロック＃Ｎのメモリ＃Ｎの領域）がメモリ部３の領域に含まれる（詳細は後述する）。
上記処理を入力部１に格納されている全てパラメータデータに対して繰り返し実施する。
【００３１】
（演算ブロック＃２の処理）
モジュールＭ２ｂでは、演算ブロック＃２（第２演算ブロック）が演算ブロック＃１から処理を引継ぎ、処理を開始する。基本的な動作は演算ブロック＃１の処理で説明した内容と同一処理である。ただし演算ブロック＃２の場合はメモリへのアクセス（リード：Ｒ、ライト：Ｗ）は演算ブロック＃２に割り当てられたメモリ＃２  ３ｂを使用する。
【００３２】
（演算ブロック＃３〜＃Ｎの処理）
演算ブロック＃３（第２演算ブロック）以降の動作は前段から処理が引き渡された時点で処理を開始し、演算ブロック＃１と同様の処理をする。メモリ部３は各演算ブロックに割り当てられたメモリ領域（３ｃ〜３ｎ）を使用する。また、最後演算ブロック＃Ｎ（第３演算ブロック）は、はみ出したアドレス値をパラメータデータとしてモジュールＭ１に書き戻す。
【００３３】
（アドレス空間）
図３はアドレス空間を示すアドレスマップである。篩の計算では各演算ブロックに割り当てるメモリ領域が均等であることが望ましい。そのため処理対象全て体のアドレス空間（全てのメモリ部３）を“ＡＳ”アドレスとした場合に、全体量（ＡＳ）をＮで割った商（Ｓ）をそれぞれ演算ブロックの該当領域として取り扱う。各演算ブロックでの割り当てられた担当箇所（メモリ領域：Ｓ）は、演算ブロック＃１→メモリ＃１、演算ブロック＃２→メモリ＃２、・・・演算ブロック＃Ｎ→メモリ＃Ｎとなる。ここで演算ブロックの個数はデバイスのメモリ量と演算ブロックで使用するゲート数から導く。
【００３４】
（パイプライン処理）
図４はパイプライン処理の動作を示した図である。本処理は図２で説明したモジュールＭ４ａ〜４ｎとメモリ３ａ〜３ｎのメモリ演算処理のアクセスに適用するパイプライン処理である。本例のパイプライン処理は、アドレス値（ｒ１）からのデータのリードをして、演算処理（（ｒ１）ｄ＋Ｌ１）をし、演算結果をＭ５（メモリ３ａ）にライトする３ステージ構成である。これらの処理を並列化することで、１クロックで各演算ブロックの処理を並列処理（パイプライン処理）を実現することができる。
【００３５】
クロックＴ０でアドレス値（ｒ１）を読込み（ステージ１）。次にクロックＴ１からＴ２間では、演算ブロック＃１のメモリ部３からデータを演算部に読込み、演算処理（加算）を行う（ステージ２）。Ｔ２からＴ３間では、演算ブロック＃１のメモリ部３に演算結果を書き戻す（ステージ３）。
【００３６】
ステージ１ではアドレス値（ｒ）にステップ値（ｐ）を加算してアドレス値を変更していく（同図ｒ，ｒ＋ｐ，ｒ＋２ｐ・・・ｒ＋ｎ＊ｐ）。ステージ２では、ステージ１で読み込んだアドレス値に基づいてメモリからデータを読み込み演算を行う（データ読み込み：（ｒ）ｄ，（ｒ＋ｐ）ｄ，（ｒ＋２＊ｐ）ｄ・・・（ｒ＋ｎ＊ｐ）ｄ）（演算（加算）：（ｒ）ｄ＋Ｌ，（ｒ＋ｐ）ｄ＋Ｌ，（ｒ＋２＊ｐ）ｄ＋Ｌ・・・（ｒ＋ｎ＊ｐ）ｄ＋Ｌ）。ステージ３ではステージ２で演算した結果をメモリに書き戻す（書き込み：（ｒ）ｄ＋Ｌ，（ｒ＋ｐ）ｄ＋Ｌ，（ｒ＋２＊ｐ）ｄ＋Ｌ・・・（ｒ＋ｎ＊ｐ）ｄ＋Ｌ）。このようにステージごとの処理をクロックごとに繰り返すことでパイプライン処理を実現する。
【００３７】
（演算ブロック数とパラメータデータ数の関係）
図５は、演算ブロック（並列処理ハード）数とパラメータデータ数の関係について示した図である。扱うパラメータ数（ｎ）と演算ブロック数（Ｎ）との差が少ないと並列ハード処理の効果は少ないが、扱うパラメータ数（ｎ）が膨大になるほど、全演算ブロックが動作している時間が長くなり、効果的な並列処理ができる。
【００３８】
各演算ブロックの処理を時間軸で表すと、演算ブロック＃１にパラメータデータ１（ｒ１，ｐ１，Ｌ１）を受信してから演算ブロック＃１のメモリ領域を越えるまでパラメータデータ１の処理が行われる。演算ブロック＃２にパラメータデータ１に関する処理がバトンタッチ（引継ぎ）される。そして演算ブロック＃２はパラメータデータ１の処理を引継ぎ処理を開始する。演算ブロック＃１は新しいパラメータデータ２（ｒ２，ｐ２，Ｌ２）を読み込み、パラメータデータ２の処理を開始する。上記のように各演算ブロックが割り当てられたメモリ領域を越えるごとに次の演算ブロックに処理をバトンタッチする。
【００３９】
また、同図にある両矢印Ａの部分は全ての演算ブロックが処理をしていないブロックである。両矢印Ｂの範囲は全ての演算ブロックが同時に処理を行っている部分である。両矢印Ｃの範囲は各パラメータデータの処理を終了していく状態を示している。範囲Ａでは演算ブロック数がＮ個であれば、演算ブロック＃Ｎ−１個目までのパラメータデータ１〜Ｎ−１分の処理時間を必要とする。範囲Ｂでは（ｎ−（２×（Ｎ−１）））個目までのパラメータ分の処理時間となる。範囲Ｃでは範囲Ａと略同じ時間が必要である。しかし、範囲Ａ、Ｃの処理にかかる時間はパラメータデータ数が演算ブロックに比べて多い場合、全体の処理からすれば問題にならない時間であるので、見た目には並列処理（範囲Ｂ）を行っているように見える。
【００４０】
（実施例２）
図６はパラメータデータの順番に関して示したものである。個々の処理はアドレス値（ｒ）にステップ値（ｐ）を加算してアドレス値を変更している。このことからステップ値の大きなものからにパラメータデータを並べ替えて用いる。この場合、後段のハードウェアに処理が早く伝わる。そこで、例えば入力部１にデータベース構成などで保存されているパラメータデータ１をステップ値をキーにして、大きい値から順に並び替える。また、アドレス値の優先順位も２番目として並び替えることでさらに効率のよいハードウェアの並列化を実現できる。
なお、上記では並び替える方法を説明したが、並び替えなくても同じ効果が得られれば限定しない。
【００４１】
（実施例３）
図７（ａ）は、各演算ブロック間に中間バッファ４ａ、４ｂ・・・を設けた図である。本中間バッファ４を設けることで、次段ブロックが処理中においても前段演算ブロック処理が一時的に停止（ｐａｕｓｅ）しないようにすることが可能であり、処理の高速化を図ることができる。
【００４２】
図６で説明した処理を前もって行う場合には中間バッファ４ａ、４ｂ・・・は絶対に必要ではないが、１）ステップ値が小さくアドレス値が大きい時、２）ステップ値が大くいアドレス値が小さいとき、３）ステップ値が小さくアドレス値も小さいときには前段の演算ブロックの処理が終了し、次段の演算ブロックの処理が終了しないため待たなければならないことがある。その場合に中間バッファ４を設けて調整をする。図７（ｂ）は中間バッファ４ａは引渡しパラメータデータ（ｒ−Ｓ，ｐ，Ｌ）を一時的に保持し、モジュールＭ３ｂの次データの要求によってモジュールＭ２ｂに引渡しパラメータデータを渡す。各演算ブロックの中間バッファ４ｂ・・・は同様の処理を行う。
【００４３】
（実施例４）
図８は図２に対して範囲内データであるが、特定パターン（ネガティブリスト）と同一パターンを間引く処理を付加した図である。本機能を設けることで不要処理を極力排除し処理速度を向上することができる。
【００４４】
同図に示すモジュールＭ８１ａ〜Ｍ８１ｎは、入力されたパラメータデータ（ｒ，ｐ，Ｌ）に、予め設定した特定アドレス値を検出したときに、該当するアドレスに関する処理をしないようにマスク処理をする。
【００４５】
例えば、モジュールＭ８１ａでアドレス値を取得して、上記ネガティブリストにアドレス値と同じ特定パターンが存在する場合、次の演算処理に移行せずにモジュールＭ２ａに移行し、存在しない場合はモジュールＭ４ａの処理を行う。モジュールＭ２ａに移行するときはステップ値の加算をしてから移行する。また、アドレス値は変化するため全ての演算ブロック＃１〜＃Ｎに搭載する。
【００４６】
なお、ステップ値と演算値に関しては、演算ブロックごとに変化しない（不変である）ため、演算ブロック＃１のみに実装する（演算ブロック＃２以降は不要となる）。ステップ値と演算値の特定パターンをマスクするモジュールＭ８２はモジュールＭ１の次段に搭載する。特定パターンとして予め設定したステップ値または演算値に該当するパラメータデータを取得した場合はモジュールＭ１に移行し新しいパラメータデータを取得する。なお、さらに図７に示したのような中間バッファ（４ｘ）を設けてもかまわない。
【００４７】
（実施例５）
図９は図２に対してアドレス判定を行い、ダイレクトに該当演算処理部に転送する機能を設けた図である。本機能を設けることでダイレクト処理転送を実現し不要処理を極力排除し処理速度を向上することができる。
【００４８】
モジュールＭ３ａ〜Ｍ３ｎのアドレス判断の結果を利用してモジュールＭ９１（Ｍ９１ａ、Ｍ９１ｂ、Ｍ９１ｃ・・・）で移行先演算ブロックを選択する。モジュールＭ９１はセレクタなどで構成し、各演算ブロックに割り当てられたメモリ領域を越えている場合に、そのアドレス値に基づいて選択された演算ブロックに処理をバトンタッチする。モジュールＭ９１と同様な処理を各演算ブロックのアドレス判断の出力に設ける。ただし演算ブロック＃１であれば出力である移行先は、演算ブロック＃２〜＃Ｎと全メモリ領域の範囲外を指定し、演算ブロック＃２であれば演算ブロック＃３〜＃Ｎと全メモリ領域の範囲外を指定するようにして各演算ブロックに配置する。
【００４９】
モジュールＭ９２（Ｍ９２１〜Ｍ９２ｎ−１）は入力順を決める処理を行う。演算ブロック＃２では特に設ける必要はないが、演算ブロック＃３以降には必要となる。各演算ブロックの出力が同時に入力されても、一度バッファで受けてデータを保持し、リングカウンタなどを用いて入力順を決めてから各演算ブロックに入力する。
上記構成にすることで、図５の範囲Ａ、Ｃの時間を短縮することができる。
【００５０】
（実施例６）
図１０は並列数の拡張性に関して示した図である。全ての演算ブロックが同一であるため、実現できる演算ブロックの個数は、１つの演算ブロックの内部メモリ容量とゲート規模と並列数で計算することができる。
【００５１】
大容量デバイスを選択した場合、既存回路の後段に追加ブロックを接続するだけで容易に並列数を増やすことができ拡張性に優れている。
なお、同図では、既存のデバイスを使用する場合にはＮ個並列した実装であったが、デイバス変更により並列数を追加（＃追加１、２）した場合の参考例である。このように拡張することが簡単にできるため設計時間を短縮することができる。
【００５２】
（実施例７）
図１１は使用モジュールの拡張性について示した図である。異なる算術処理を実行したい場合は、演算処理部の算出演算ブロックのみを変更することで実現が可能であり、異なる算術ブロックを組み合わせることで多種多様な並列演算処理の実現が容易である。
同図では、多種多様の算術演算として＃１（和算）、＃２（積算）、＃３（引算）、＃４（割算）にした例である。
【００５３】
（実施例８）
図１２は大規模メモリ空間における動作について示した図である。上記説明した並列演算処理装置の演算ブロック＃１〜＃Ｎまでの処理を＃Ｓ１とし、さらにその先に演算ブロックを複数有する＃Ｓ１と同じような処理＃Ｓ２を設け、処理＃Ｓ３〜＃Ｓｎのように処理を拡張設置する。
【００５４】
初段に設けた並列演算処理装置＃Ｓ１から入力パラメータデータを演算部２ａに読み込み、初段の並列演算処理装置の出力の引渡しパラメータデータを次段の並列演算処理装置の入力とする。そして次段の並列演算処理装置＃Ｓ２・・・の出力の引渡しパラメータデータを次段の入力として、最終段に設けた並列演算処理装置＃Ｓｎの演算部の出力を用いて初段に設けた並列演算処理装置のモジュールＭ１へパラメータデータ書き戻す。
【００５５】
このように構成することで、大規模なメモリ空間での処理も可能になる。１回の処理＃Ｓ１（本ハードウェアの演算ブロックｎ個が行う１回の処理）完了時に最終段回路からはみ出したアドレス値をパラメータデータに書き戻す機能を搭載することで、２回目の処理（次空間の処理）についても共通ハードにて実施できる。このことから、ハードウェアを効率的に活用すると共に大規模なメモリ空間においても本ハードでの処理が可能である。
また、本発明は、上記実施の形態に限定されるものでなく、本発明の要旨を逸脱しない範囲内で種々の改良、変更が可能である。
【００５６】
（付記１）
メモリを介在して並列演算を行う複数の演算ブロックからなる並列演算処理装置であって、
各演算ブロックは、前記メモリ領域を分割した領域である分割メモリ毎に対応する演算部を設け、少なくともアドレス値と次に指定するアドレスを設定するステップ値と演算値から構成されるパラメータデータに基づき前記演算部が前記アドレス値に前記ステップ値を加算して前記アドレス値を更新し、前記アドレス値で指定される前記分割メモリからデータを読み込み、前記データと前記演算値により所定の演算を実行し、前記演算の結果を当該アドレス値の示すアドレスに書き戻すメモリ演算処理をし、前記アドレス値が前記分割メモリの領域内であれば前記ステップ値をさらに前記アドレス値に加算して前記メモリ演算処理を繰り返し、前記領域を越えたときは当該分割メモリの領域からはみ出した分の残りアドレス値と前記ステップ値と前記演算値からなる引渡しパラメータデータを出力し次段に渡すことを特徴とする並列演算処理装置。
（付記２）
少なくとも入力アドレス値と次に指定するアドレスを設定する入力ステップ値と入力演算値から構成される入力パラメータデータを複数格納する入力部と、前記入力パラメータデータを前記パラメータデータとして読み込み演算を行う前記演算部を備えた第１演算ブロックと、
前記引渡しパラメータデータを前記パラメータデータとして入力とする前記演算部を備えた第２演算ブロックと、
前記引渡しパラメータデータを前記パラメータデータとして入力し、当該演算ブロックの前記分割メモリ領域からはみ出した前記残りアドレス値を前記入力部に書込戻す処理を行う第３演算ブロックと、
を具備することを特徴とする付記１に記載の並列演算処理装置。
（付記３）
前記入力パラメータデータは前記ステップ値に基づいて入力することを特徴とする付記２に記載の並列演算処理装置。
（付記４）
前記演算ブロック間に前記引渡しパラメータデータを格納する中間バッファを設けることを特徴とする付記２に記載の並列演算処理装置。
（付記５）
前記パラメータデータのアドレス値と予め設定した特定パターンを比較しその結果に基づいて前記演算を行うことを特徴とする付記２に記載の並列演算処理装置。
（付記６）
前記第１演算ブロックに入力する前記入力パラメータデータの前記ステップ値と前記演算値を予め設定した特定パターンと比較しその結果に基づいて前記演算を行うことを特徴とする付記５に記載の並列演算処理装置。
（付記７）
前記演算ブロックの出力後に前記引渡しパラメータデータを前記演算ブロックに渡すために前記引渡しパラメータデータのアドレス値に基づいて渡し先を選択する選択部を設けるとともに、前記演算ブロックの入力前に前記引渡しパラメータデータを格納し入力の順番を調停する調停部を設けることを特徴とする付記２に記載の並列演算処理装置。
（付記８）
前記演算ブロック毎の前記演算部の前記演算は異なる演算を行うことを特徴とする付記２に記載の並列演算処理装置。
（付記９）
前記分割メモリ領域は同じサイズであることを特徴とする付記２に記載の並列演算処理装置。
（付記１０）
付記２の前記並列演算処理装置を複数直列に接続し、初段に設けた前記並列演算処理装置の前記入力部から前記入力パラメータデータを前記演算部に読み込み、前記初段の前記並列演算処理装置の出力の前記引渡しパラメータデータを次段の前記並列演算処理装置の入力とし、前記次段の前記並列演算処理装置の出力の前記引渡しパラメータデータを次段の入力として、最終段に設けた前記並列演算処理装置の前記演算部の出力を用いて前記初段に設けた前記並列演算処理装置の前記入力部へのパラメータデータを書き戻すことを特徴とする請求項２に記載の並列演算処理装置。
（付記１１）
前記入力パラメータの入力順をステップ値の大きい順にすることを特徴とする付記３に記載の並列演算処理装置。
（付記１２）
前記選択部の渡し先に前記入力部への書き戻しを設けることを特徴とする付記７に記載の並列演算処理装置。
（付記１３）
前記調停部は入力順に処理する制御を行うことを特徴とする付記７に記載の並列演算処理装置。
（付記１４）
メモリを介在して並列演算を行う複数の演算ブロックからなる並列算術演算処理方法であって、
各演算ブロックは、前記メモリ領域を分割した領域である分割メモリ毎に対応して設けられた演算部にて、少なくともアドレス値と次に指定するアドレスを設定するステップ値と演算値から構成されるパラメータデータに基づき前記アドレス値に前記ステップ値を加算して前記アドレス値を更新し、
前記アドレス値で指定される前記分割メモリからデータを読み込み、前記データと前記演算値により所定の演算を実行し、
前記演算の結果を当該アドレス値の示すアドレスに書き戻すメモリ演算処理をし、
前記アドレス値が前記分割メモリの領域内であれば前記ステップ値をさらに前記アドレス値に加算して前記メモリ演算処理を繰り返し、前記領域を越えたときは当該分割メモリの領域からはみ出した分の残りアドレス値と前記ステップ値と前記演算値からなる引渡しパラメータデータを出力し次段に渡すこと
を特徴とする並列算術演算処理方法。
【図面の簡単な説明】
【００５７】
【図１】本発明の実施例を示す図である。
【図２】本発明の実施例の処理を示す図である。
【図３】本発明の実施例のアドレス空間マップ
【図４】本発明の実施例のパイプライン処理図、
【図５】本発明の並列処理ハード数と入力パラメータデータ数の関係を示す図である。
【図６】本発明の入力パラメータデータに関する図である。
【図７】（ａ）本発明のハード演算ブロック間に中間バッファを設けた概略図である。（ｂ）本発明のハード演算ブロック間に中間バッファを設けた図である。
【図８】本発明のネガティブリストにおる判定処理を示した図である。
【図９】本発明のアドレス判定を行いダイレクトに演算処理部に転送する機能を設けたときの処理を示す図である。
【図１０】並列数の拡張性について示した図である。
【図１１】拡張性について示した図である。
【図１２】大規模メモリ空間における動作を示した図である。
【図１３】従来例を示す図である。
【図１４】本発明の従来例を示す図である。
【符号の説明】
【００５８】
１      入力部
２      演算部
３      メモリ部
４      中間バッファ
１３１      入力機能
１３２      演算機能
１３３      メモリ部
１３４      出力機能
１４１      入力部
１４２      演算部
１４３      メモリ部
１４４      出力部
１４５      第１選択部
１４６      第２選択部
【図１】
0004520949.tif 000002
【図２】
0004520949.tif 000003
【図３】
0004520949.tif 000004
【図４】
0004520949.tif 000005
【図５】
0004520949.tif 000006
【図６】
0004520949.tif 000007
【図７】
0004520949.tif 000008
【図８】
0004520949.tif 000009
【図９】
0004520949.tif 000010
【図１０】
0004520949.tif 000011
【図１１】
0004520949.tif 000012
【図１２】
0004520949.tif 000013
【図１３】
0004520949.tif 000014
【図１４】
0004520949.tif 000015