(57)【特許請求の範囲】
【請求項１】
実装対象処理を表す情報から、互いに非同期の関係にある複数の前段処理と、それら複数の前段処理の処理結果が同期して入力される後段処理と、をそれぞれ抽出する抽出手段と、
再構成可能回路を用いて前記実装対象処理を実装する実装方式として、
（１）前記複数の前段処理の各々のための各前段回路を前記再構成可能回路上に順に再構成し、それら再構成された各前段回路にそれぞれ対応する前段処理を実行させ、それら各前段回路の処理結果をメモリに格納し、前記各前段回路の処理が完了した後、前記後段処理を実行する後段回路を前記再構成可能回路上に再構成し、再構成された後段回路に対し、前記メモリに格納された前記各前段回路の処理結果を入力して処理を実行させる第１実装方式と、
（２）前記各前段回路と、前記後段回路と、前記各前段回路の処理結果が前記後段回路に入力される場合の同期を取る同期回路と、を同時に前記再構成可能回路上に再構成して動作させる第２の実装方式と、
を含む複数の実装方式を有し、それら複数の実装方式のうち選択された実装方式にて、前記再構成可能回路を用いて前記実装対象処理を実装する実装手段と、
前記複数の実装方式の各々につき、それぞれ、当該実装方式を採用した場合において指定されたデータ量のデータの処理に要する時間の推定値と、当該実装方式において前記再構成可能回路上に同時に再構成される回路の回路規模と、に基づき前記複数の実装方式のうちのいずれの実装方式を採用するかを判定し、判定した実装方式にて実装するように前記実装手段に指示する制御を行う制御手段と、
を備え、
前記実装手段は、前記第２の実装方式にて実装を行う場合、前記抽出手段の抽出の結果に従い、前記前段回路と前記後段回路との間に前記同期回路を設ける、ことを特徴とするデータ処理装置。
【請求項２】
前記複数の実装方式には、前記再構成可能回路上に同時に再構成される回路の回路規模の順位が規定されており、
前記制御手段は、指定された目標処理時間以内に前記指定されたデータ量のデータを処理できると前記推定値から推定される実装方式のうち、前記再構成可能回路上に同時に再構成される回路の回路規模が最も小さい実装方式を採用すると判定する、
ことを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
複数の実装対象処理を順に前記再構成可能回路に実行させる場合において、
前記複数の実装対象処理の各々にはそれぞれ個別に目標処理時間が指定されており、
前記制御手段は、前記複数の実装対象処理のうちの１つの実装対象処理について判定した実装方式で前記再構成可能回路を用いて当該実装対象処理を実装し、実際に前記指定されたデータ量のデータを処理させて、その処理に実際に要した時間を計測し、その時間を当該実装対象処理に指定された目標処理時間から減算した結果である余り時間を求め、この余り時間を加算することで次の実装対象処理に指定された目標処理時間を補正し、当該次の実装対象処理については、補正された目標処理時間に基づいて実装方式を判定する、
ことを特徴とする請求項２に記載のデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置に関する。
【背景技術】
【０００２】
内部の論理回路構成を再構成（変更）可能なＰＬＤ(ProgrammableLogic Device)やＦＰＧＡ(Field Programmable Gate Array)などの再構成可能回路（プログラマブル論理回路とも呼ばれる）が普及している。ＰＬＤやＦＰＧＡは、回路起動時に内部の論理回路構成を設定するものが一般的であるが、回路が動作中に論理回路構成を変更可能なものも開発されている。また、内部の論理回路構成を動的に再構成可能な動的再構成可能プロセッサ（ＤＲＰ：Dynamic Reconfigurable Processor）の利用が進んでいる。
【０００３】
実装対象の処理をＣ＋＋などの言語で記述した実装対象プログラムを、再構成可能回路上に構成する回路或いは回路の時系列的なパイプラインに自動的に変換する、すなわちそのような回路又はパイプラインを表す回路情報を生成するツールも考案されている。
【０００４】
再構成可能回路に実行させようとする処理内容の中には、ある処理（後段処理と呼ぶ）が、その処理より前に実行される異なる複数の処理（前段処理と呼ぶ）の結果を同期的に入力して処理するものが存在する。そして、それら複数の前段処理が、互いに非同期の関係にある出力を行う場合がある。異なる処理が互いに非同期の関係にある出力を行う場合とは、例えば、ある処理にはループが存在するのに別の処理にはループが存在しないため、両者に同じ入力データを与えても前者と後者とで入力から処理結果が得られるまでに遅延が異なってくる場合である。ループの存在する処理と存在しない処理とがクロックに従って処理を進める場合、ループがある方がループの分だけ処理が遅延するからこのような遅延の差が生じる。このため、このような処理内容を実行するための回路を再構成可能回路上に再構成する場合、それら各前段処理の回路の処理結果を互いに同期させて後段処理の回路に与えるための仕組みが必要になる。
【０００５】
特許文献１には、再構成可能プロセッサで、ループ処理を実装するのに適したハードウェア情報を提供する方式が提案されている。この方式では、繰り返しループ処理であると判断されると、そのループ処理を行うアルゴリズムの記述に対して入力バッファおよび出力バッファがリザーブされる。さらに、それらのバッファに対して入出力処理を行うアドレスカウンタを備えたＰＥ（プロセッサエレメント）がそれぞれリザーブされる。
【０００６】
特許文献２に記載された装置では、再構成可能なＰＥの処理内容と接続内容をコンテキストに応じて動的に切り替えることにより任意の処理を実行させる動的再構成回路が、コンテキストに基づいて、再構成されたＰＥの集合からの出力信号の出力元、出力信号の出力先、および出力信号を出力先に出力する条件からなるループ処理の内容を設定するコンフィグレーションデジスタ部と、設定されたループ処理を実行するとともに、ループ制御部によって実行されたループ処理の実行回数をカウントし、カウントされた実行回数および条件に基づいて、出力信号を出力先に出力するループ制御部および出力レジスタ部からなるカウンタ回路を備えている。
【０００７】
特許文献３に開示された方式では、条件分岐付きの演算処理が条件分岐なしの第１の処理と条件分岐付きの第２の処理に分割され、条件分岐なしの第１の処理が再構成可能な演算手段に割り当てられ、当該第１の処理に基づいてハードウェアの構成情報が生成され、当該構成情報に基づき再構成された演算手段により実行され、条件分岐付きの第２の処理がＣＰＵなどの演算手段に割り当てられ、ＣＰＵによって割り当てられた条件分岐付きの第２の処理が実行される。当該処理の結果を用いて、上記第１の処理の結果を修正し、条件分岐付き演算処理の結果が得られる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００５−３５３０６１号公報
【特許文献２】特開２００９−０７５８７５号公報
【特許文献３】特開２００４−０７０５２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明は、互いに非同期の関係にある複数の前段処理の処理結果を１つの後段処理が同期的に入力して処理するための実装方式を、複数の実装方式の中から選択して自動的に再構成可能回路に実装できるようにすることを目的とする。
【課題を解決するための手段】
【００１０】
請求項１に係る発明は、実装対象処理を表す情報から、互いに非同期の関係にある複数の前段処理と、それら複数の前段処理の処理結果が同期して入力される後段処理と、をそれぞれ抽出する抽出手段と、再構成可能回路を用いて前記実装対象処理を実装する実装方式として、（１）前記複数の前段処理の各々のための各前段回路を前記再構成可能回路上に順に再構成し、それら再構成された各前段回路にそれぞれ対応する前段処理を実行させ、それら各前段回路の処理結果をメモリに格納し、前記各前段回路の処理が完了した後、前記後段処理を実行する後段回路を前記再構成可能回路上に再構成し、再構成された後段回路に対し、前記メモリに格納された前記各前段回路の処理結果を入力して処理を実行させる第１実装方式と、（２）前記各前段回路と、前記後段回路と、前記各前段回路の処理結果が前記後段回路に入力される場合の同期を取る同期回路と、を同時に前記再構成可能回路上に再構成して動作させる第２の実装方式と、を含む複数の実装方式を有し、それら複数の実装方式のうち選択された実装方式にて、前記再構成可能回路を用いて前記実装対象処理を実装する実装手段と、前記複数の実装方式の各々につき、それぞれ、当該実装方式を採用した場合において指定されたデータ量のデータの処理に要する時間の推定値と、当該実装方式において前記再構成可能回路上に同時に再構成される回路の回路規模と、に基づき前記複数の実装方式のうちのいずれの実装方式を採用するかを判定し、判定した実装方式にて実装するように前記実装手段に指示する制御を行う制御手段と、を備え、前記実装手段は、前記第２の実装方式にて実装を行う場合、前記抽出手段の抽出の結果に従い、前記前段回路と前記後段回路との間に前記同期回路を設ける、ことを特徴とするデータ処理装置である。
【００１１】
請求項２に係る発明は、前記複数の実装方式には、前記再構成可能回路上に同時に再構成される回路の回路規模の順位が規定されており、前記制御手段は、指定された目標処理時間以内に前記指定されたデータ量のデータを処理できると前記推定値から推定される実装方式のうち、前記再構成可能回路上に同時に再構成される回路の回路規模が最も小さい実装方式を採用すると判定する、ことを特徴とする請求項１に記載のデータ処理装置である。
【００１２】
請求項３に係る発明は、複数の実装対象処理を順に前記再構成可能回路に実行させる場合において、前記複数の実装対象処理の各々にはそれぞれ個別に目標処理時間が指定されており、前記制御手段は、前記複数の実装対象処理のうちの１つの実装対象処理について判定した実装方式で前記再構成可能回路を用いて当該実装対象処理を実装し、実際に前記指定されたデータ量のデータを処理させて、その処理に実際に要した時間を計測し、その時間を当該実装対象処理に指定された目標処理時間から減算した結果である余り時間を求め、この余り時間を加算することで次の実装対象処理に指定された目標処理時間を補正し、当該次の実装対象処理については、補正された目標処理時間に基づいて実装方式を判定する、ことを特徴とする請求項２に記載のデータ処理装置である。
【発明の効果】
【００１３】
請求項１に係る発明によれば、互いに非同期の関係にある複数の前段処理の処理結果を１つの後段処理が同期的に入力して処理するための実装方式を、複数の実装方式の中から選択して自動的に再構成可能回路に実装できる。
【００１４】
請求項２に係る発明によれば、あらかじめ指定された目標処理時間を達成できる実装方式の中でも最も回路規模の小さい実装方式を判定することができる。
【００１５】
請求項３に係る発明によれば、実際のデータ処理が目標処理時間よりも時間に余裕ができた場合、次の実装対象処理について回路規模のより小さい実装方式が選択されやすくすることができる。
【図面の簡単な説明】
【００１６】
【図１】再構成可能回路を用いて実装すべき処理のソースコードの一例（特に実施形態の手法に関係ある部分）を示す図である。
【図２】図１に例示したソースコードの内の処理Ａ、Ｂ、Ｃの流れを模式的に示す図である。
【図３】第１方式の実装の仕方を説明するための図である。
【図４】第２方式の実装の仕方を説明するための図である。
【図５】第２方式の回路構成をより詳しく示す図である。
【図６】第２方式の他の例を説明するための図である。
【図７】第３方式の実装の仕方を説明するための図である。
【図８】各方式のコンフィギュレーションパイプラインを作成する装置の一例の機能ブロック図である。
【図９】内蔵する再構成可能回路を用いて処理を行うシステムの例を示す図である。
【図１０】実施形態のＤＲＰ内蔵システムの機能構成を説明するための図である。
【図１１】実装方式判定処理の処理手順の一例の一部を示すフローチャートである。
【図１２】実装方式判定処理の処理手順の一例の残りの部分を示すフローチャートである。
【図１３】並列化処理の処理手順の一例を示すフローチャートである。
【図１４】１つの方式のコンフィギュレーションの並列化の手順の一例を示すフローチャートである。
【図１５】複数の実装対象処理を順に実行していく場合の処理の例を示すフローチャートである。
【発明を実施するための形態】
【００１７】
まず、具体例を参照しつつ、この実施形態における再構成可能回路の再構成制御の基本概念を説明する。
【００１８】
図１に、再構成可能回路を用いて実装すべき処理（すなわち、本実施形態の実装方式選択制御の対象となる処理。以下、実装対象処理と呼ぶ）のソースコードの一例を示す。この例は、ラスター走査形式の画像データの処理の一例をＣ言語で記述したものであり、特に実施形態の制御の説明に必要な部分のみを表示している。
【００１９】
このコードでは、yがラスター走査の副走査方向の画素位置（座標）を示し、定数lineが副走査方向の画像幅（すなわち画像の総ライン数）を示す。また、xは主走査方向の画素位置を示し、定数pixelは主走査方向についての画像幅（すなわち１ラインの総画素数）を示す。したがって、外から２番目のｘを０から上限まで１ずつインクリメントするループにより、１ラインの各画素が順に走査（主走査）され、その主走査が最外側のｙを０から上限まで１ずつインクリメントするループによりライン数分だけ繰り返されることにより、対象の画像が１画素ずつラスター走査順に処理されていくことになる。すなわち、これら外側２つのループで、処理対象の画素が１つずつラスター走査順に切り替えられていくことになる。このラスター走査のループの中に、画像に対する実体的な処理が記述されている。
【００２０】
この例では、この実体的な画像処理は、図示のように処理Ａ、Ｂ、Ｃの３つの部分に分けることができる。処理Ａは、変数cに対し、現在の処理対象の画素（すなわちラスター走査順で(x+y*pixel)番目の画素）に関連する値（例えば画素値そのもの。この値は、num[]という配列に事前に登録されている）を代入する処理を含んでいる。この処理は、外から２番目のforループでxが１ずつ増えるごとに１回実行される。
【００２１】
処理Ｂは、変数jについてのforループであり、以下では、ラスター走査のループの中にあるループという意味で、内部ループと呼ぶ。処理Ｂは、現在の処理対象の画素のx座標に応じた補正値inter_lpを計算するものであり、この計算のためにjを０から９まで順にインクリメントしながら処理を繰り返すので、１つの画素についての処理結果inter_lpを得るのに１０回の計算が必要になる。処理Ａでは、１つの画素についての処理結果cを得るのに１回の計算でよいので、処理Ｂは１画素あたり処理Ａの１０倍の回数の計算を行うことになる。
【００２２】
処理Ｃは、この実装対象処理の出力となる配列out[]のうち、現在の処理対象の画素に対応する(x+y*pixel)番目の要素に対し、処理Ｂの処理結果inter_lpと処理Ａの処理結果cとを加算したものを代入する処理である。処理Ｃは、１画素ごと（すなわち外から２番目のループでxが１インクリメントされるごと）に１回の演算を行うものであり、１画素あたりの演算回数は処理Ａと同じである。
【００２３】
図１に例示したソースコードの内の処理Ａ、Ｂ、Ｃの流れを図２に模式的に示す。この図に示すように、処理Ｃにおいて、先行する２つの処理Ａ、Ｂそれぞれの処理結果が合流する。ここで、上述のように処理Ａと処理Ｂとでは１画素あたりに要する処理の回数が１０倍異なっており、仮にそれら両処理を同時に同一クロックに従って実行した場合、処理Ｂが１画素分の処理結果を算出する間に、処理Ａは１０画素分の処理結果を算出できる。このように処理ＡとＢとでは、１画素についての処理結果を得るのに要する時間（言い換えれば処理レート）が異なっている。このように、同じ処理単位（この例では画素）についての処理結果を得るのに要する時間（すなわち計算回数）が異なる処理同士の関係を「非同期」と呼ぶことにする。例示している処理ＡとＢのように、同じ処理単位についての処理結果を求めるのに、一方の処理には内部ループがあるのに、他方の処理には内部ループがない場合、両者の関係は非同期である。図１ではfor文の例を示しているが、内部ループを記述する構文はfor形式に限らず、do-while形式などの他の形式であってもよい。また、別の例として、一方の処理では画像を拡大するのに対し、他方の処理では画像を拡大せず原寸のまま処理する場合、前者は後者より画素数が増えるため、非同期の関係となる。一方の処理はデータの間引き又は画像の縮小を行い、他方の処理では原寸のまま処理する場合も、同様に非同期の関係となる。以下に説明するこの実施形態の制御は、後段の処理が前段の複数の処理からこのような非同期の関係にある処理結果を受け取って同期的に処理する場合一般に適用可能であるが、以下では説明を簡潔にするための、実装対象処理が内部ループを含む結果上述のような非同期の関係が生じている場合を代表例にとって説明する。
【００２４】
図１の例では、処理ＡとＢは非同期であるが、処理ＡとＣは同期の関係にあると言える。
【００２５】
一方、処理Ｃでは、それら非同期の関係にある処理Ａ、Ｂの処理結果を、１画素ごとに同期（合流）させて処理する。したがって、例えば処理Ａ、Ｂ、Ｃを１つの回路上に構成するとすれば、処理Ａの処理結果と処理Ｂの処理結果とを、処理Ｃの入力において同期させるために、図２に示すように処理Ａの処理結果を遅延させる必要がある。この遅延の量が多いと、再構成可能回路上にその遅延のための回路を再構成するのに多数の回路要素（ＰＥ：プロセッサエレメント）が必要となり、再構成可能回路上に１つのコンフィギュレーションとして再構成できない場合もでてくる。ここで、この明細書では、「コンフィギュレーション」という用語は、再構成可能回路上に同時に存在する論理回路のことを意味するものとして用いる。また、処理Ｂの内部ループ内に、Break文など、条件に応じてループを途中で離脱するポイントが設けられている場合、処理単位ごとに内部ループが実行される回数が異なってくるので、処理Ａと処理Ｂの処理結果を同期させるために必要な遅延の量が、処理単位ごとに異なってくることも考えられる。
【００２６】
この実施形態では、上述した関係にある処理Ａ、Ｂ、Ｃを、ＤＲＰ（ダイナミック・リコンフィギュラブル・プロセッサ）等の再構成可能回路を用いて実装する場合に、複数の異なる実装方式の中から、要求される条件の下で最適の方式を自動選択する。
【００２７】
それら複数の実装方式のうちの第１のもの（「第１方式」と呼ぶ）を、図３に示す。この第１方式では、処理Ａ、Ｂ、Ｃをそれぞれ別々のコンフィギュレーション（図中、「Ａ回路」、「Ｂ回路」、「Ｃ回路」と記す）とし、再構成可能回路上の論理回路をＡ、Ｂ、Ｃ回路の順に書き換えていく。
【００２８】
すなわち、まず再構成可能回路にＡ回路を書き込み（すなわち再構成可能回路上にＡ回路を再構成し）、そのＡ回路に対し、メモリから入力データを供給することで、Ａ回路に処理を実行させ、その処理結果をメモリに書き込ませる。
【００２９】
Ａ回路がある処理単位（例えば１画素、１ライン、１バンドなどのあらかじめ定められた量のデータ）の処理を終えると、再構成可能回路をＢ回路に書き換え、そのＢ回路にＡ回路の処理結果を入力して処理させる。ここで、Ｂ回路は、例えば、処理Ｂの内部ループのループ内の処理を実行する実体処理部分と、その部分をループ回数だけループ実行させる制御部分とを含んだものでよい。Ｂ回路が指定されたループ回数分のループを終えると、その処理結果がメモリに書き込まれる。なお、最終的な処理結果だけでなく、１回のループごとの処理結果をメモリに書き込み、次のループでメモリから読み出すような構成でもよい。
【００３０】
このようにして１つの処理単位についてのＢ回路の処理が終わると、再構成可能回路をＣ回路に書き換え、そのＣ回路にＡ回路の処理結果とＢ回路の処理結果を入力して処理させる。この処理の結果は、実装対象処理全体の処理結果として、メモリに書き込まれる。なお、図３ではすべて同じ「メモリ」と表示したが、Ａ回路に対する入力データを保持するメモリ、Ａ回路の処理結果を保持するメモリ、Ｂ回路の処理結果を保持するメモリ、及びＣ回路の処理結果を保持するメモリは、物理的に同一のメモリであってもよいし、物理的にそれぞれ異なるメモリであってもよい。例えば、Ａ回路に対する入力データとＣ回路が出力する実装対象処理の最終的な処理結果とは、再構成可能回路に処理を実行させる上位の装置の備えるメモリ（後述の図９の例ではメインメモリ２２）に保持し、実装対象処理の途中経過のデータであるＡ回路及びＢ回路の処理結果は、再構成可能回路と同じチップ内に埋め込まれた（或いは同じボード上に実装された）メモリ（図９の例ではローカルメモリ３６）に保持するようにしてもよい。
【００３１】
そして、Ｃ回路が１つの処理単位についての処理を終えると、まだ処理対象のデータが残っていれば、再構成可能回路を再びＡ回路に書き換え、以上に説明した書き換え及び処理実行を繰り返す。
【００３２】
以上のように、第１方式では、互いに非同期の関係にある処理ＡとＢ、及びそれら両者の処理結果を同期的に処理する処理Ｃを、別々のコンフィギュレーションとし、それら各コンフィギュレーションの間でＡ、Ｂ、Ｃの順に時系列的なパイプラインを構成する。この方式では、Ｃ回路は、Ａ回路とＢ回路の両方の処理が終わってから起動されるので、Ａ回路とＢ回路の処理結果の同期は自然に達成される。このように、１つの実装対象処理を１以上のコンフィギュレーションの時系列的な切替により実装する場合、それら１以上のコンフィギュレーションの順列をコンフィギュレーションパイプラインと呼ぶことにする。
【００３３】
次に、図４を参照して第２の実装方式（「第２方式」と呼ぶ）を説明する。第２方式では、図４に示すように、処理Ａ、Ｂ、Ｃを１つのコンフィギュレーションとして実装する。すなわち、第２方式のコンフィギュレーションパイプラインは１つのコンフィギュレーションのみから構成される。
【００３４】
図１の例では処理Ａと処理Ｃとは互いに同期しているのに対し、処理Ｂはそれら２つの処理とは非同期なので、図４の例では、Ａ回路とＣ回路は１つの回路ブロックとして示し、Ｂ回路（内部ループ）はそれとは別の回路ブロックとして示した。そして、Ａ回路とＢ回路との間の非同期性を吸収するために、Ａ回路の出力とＢ回路との間、及びＢ回路の出力とＣ回路の間にＦＩＦＯ（先入れ先出し）回路を設けている。Ａ回路には、メモリから入力データが供給される。入力されたデータをＡ、Ｂ、Ｃ回路が処理し、その処理結果がメモリに書き戻される。
【００３５】
図４に例示した第２方式のコンフィギュレーションの内部構成を、図５により詳細に示す。図４には、Ａ回路とＣ回路を１つのブロックで示したが、実際には、図５に示すようにＡ回路とＣ回路は別の回路として構成され、それら両者の間に同期のためのＦＩＦＯが設けられる。したがって、この第２方式のコンフィギュレーションには、Ａ回路・Ｂ回路間に第１のＦＩＦＯ（図には「ＦＩＦＯ１」と表記）が、Ａ回路・Ｃ回路間に第２のＦＩＦＯ（図には「ＦＩＦＯ２」と表記）が、Ｂ回路・Ｃ回路間に第３のＦＩＦＯ（図には「ＦＩＦＯ３」と表記）が、それぞれ設けられる。Ａ回路は、メモリＩＦ（インタフェース）を介してメモリに接続されており、メモリから入力データData0（この例では画像データ）を受け取る。Ａ回路の処理結果Data1は、ＦＩＦＯ１に書き込まれる。ＦＩＦＯ１が満杯になると、ＦＩＦＯ１はその旨を示す「full」信号を発する。Ａ回路は、full信号を受け取ると、処理を停止（したがって処理結果の出力も停止）し、メモリからの入力データの読込も停止する。また、Ａ回路は、Ｃ回路向けの処理結果を計算する処理も行っており、その処理結果Data2（図１における変数ｃの値）はＦＩＦＯ２へと出力される。ＦＩＦＯ２が満杯になった場合も、ＦＩＦＯ１が満杯となった場合と同様、Ａ回路は処理を停止する。このように、Ａ回路は、ＦＩＦＯ１とＦＩＦＯ２の少なくとも一方が満杯の場合は動作を停止する。そして、ＦＩＦＯ１とＦＩＦＯ２の両方が共に満杯でなくなる（すなわち両方ともfull信号を発しなくなる）と、動作を再開する。
【００３６】
ＦＩＦＯ１は、Ｂ回路から読み出し要求（Read Req）信号（図示省略）を受け取ると、保持しているデータを先頭から順にＢ回路に出力する。なお、この出力によりＦＩＦＯ１が満杯でなくなると、ＦＩＦＯ１はfull信号の出力を停止する。Ｂ回路は、ＦＩＦＯ１から入力されたデータに対して、内部ループの処理を実行する。この処理結果はＦＩＦＯ３に書き込まれる。ＦＩＦＯ３が満杯になると、full信号が発せられ、これに応じてＢ回路は処理を停止する。なお、内部ループの存在のためにＢ回路の方が後段のＣ回路よりも処理が遅いので、実際にはＦＩＦＯ３が満杯になることは起こりにくい。
【００３７】
Ｃ回路は、ＦＩＦＯ２及びＦＩＦＯ３に対して読み出し要求（ReadReq）信号を送る。これに応じＦＩＦＯ２及びＦＩＦＯ３は、保持しているデータのうちの先頭のものをＣ回路に供給する（Data2', Data3)。Ｃ回路は、両方から受け取ったデータに対して図１の処理Ｃの演算をハードウェア回路にて実行し、その演算結果Data4をメモリＩＦを介してメモリに書き込む。
【００３８】
第２方式は、図４のようなコンフィギュレーションに限られるわけではなく、図６に示すようなコンフィギュレーションであってもよい。図６のコンフィギュレーションでは、メモリからＡ回路に入力されるデータを保持するＦＩＦＯが設けられるが、Ａ回路とＢ回路との間にはＦＩＦＯは設けられない。なお、Ｂ回路の出力とＣ回路のとの間には、図４の場合と同様、ＦＩＦＯが設けられる。
【００３９】
以上に説明した第２方式では、各処理のための回路（Ａ〜Ｃ回路）と、データ同期のためのＦＩＦＯ１〜３とを１つのコンフィギュレーションの中に組み込んでいる。したがって、Ａ〜Ｃ回路を別々のコンフィギュレーションとする第１方式と比べると、再構成可能回路上に占める面積は第２方式の方が大きい。再構成可能回路上に、図１に例示した実装対象処理以外の処理を行うための回路を同時並列的に配置（再構成）することを想定する場合には、実装対象処理の占有面積は小さい方が望ましい。したがって、再構成可能回路上に同時に占める面積、すなわち回路規模の観点では、第１方式の方が第２方式よりも優れている。
【００４０】
一方、処理速度の観点では、第１方式では処理単位ごとに再構成可能回路をＡからＢ、ＢからＣ、ＣからＡと順に書き換えていく必要があり、実装処理対象に要する時間以外にその書き換えの時間を要する。これに対し、第２方式では再構成可能回路に図４（図５）のコンフィギュレーションを一度構成すれば、全データの処理が完了するまで書き換えの必要はない。したがって、処理速度の観点では、第２方式の方が優れているといえる。
【００４１】
また、本実施形態では、上述した第１方式と第２方式のいわば折衷案として、図７に示す第３方式の構成を用意してもよい。図７に示すように、第３方式では、図１の処理Ａ、Ｂ、Ｃのうち、処理Ａと処理Ｂを１番目のコンフィギュレーションに組み込み、処理Ｃを２番目のコンフィギュレーションに組み込み、これら２つのコンフィギュレーションを時系列なパイプラインとして交互に切り替えながら動作させる。１番目のコンフィギュレーションにおけるＡ回路及びＢ回路の処理結果はメモリに書き出され、Ｃ回路はメモリ上のそれら処理結果を読み出して処理していく。Ｃ回路の処理が終わっても、処理対象のデータが残っていると、再構成可能回路を１番目のコンフィギュレーションに書き換えて処理を続行する。この方式でも、第１方式と同様、Ｃ回路は、Ａ回路とＢ回路の両方の処理が終わってから起動されるので、Ａ回路とＢ回路の処理結果の同期は自然に達成される。
【００４２】
この第３方式は、コンフィギュレーションの数が第１方式と第２方式の間なので、処理速度も回路規模も第１方式と第２方式の中間となる。
【００４３】
また、以上に説明した第１〜３のいずれの方式でも目標性能が達成できない場合のために、第４方式として、それら第１〜３方式のコンフィギュレーションを並列化することで処理の高速化を図る方式を用意してもよい。すなわち、この方式では、第１〜３の各方式のコンフィギュレーションパイプラインの中の１以上のコンフィギュレーション、或いはそのコンフィギュレーションの中の１以上の要素回路（例えば、上述のＡ回路、Ｂ回路等）を並列化する。回路の並列化は、その回路を再構成可能回路上に同時に複数個構成し、それら複数の回路に処理対象のデータの異なる部分を同時並列的に処理させることにより行えばよい。第１，２，３の方式ごとに、コンフィギュレーションパイプラインの中のどのコンフィギュレーションやどの要素回路を並列化の対象とするかを、ユーザがあらかじめ設定しておき、この設定に従って並列化対象を選定するようにしてもよい（詳細は後述）。
【００４４】
以上では、実装対象処理の実装方式として第１〜４の４つの方式を例示したが、更に別の方式を用意してももちろんよい。
【００４５】
さて、この実施形態では、処理速度と回路規模の異なる以上のような複数の実装方式の中から、使用条件に応じて適切な実装方式を自動選択する制御を行う。使用条件には、例えば、実装対象処理に割り当て可能な再構成可能回路のリソース（例えば割り当て可能なＰＥの数、入出力ストリーム（バッファ）の数など）、処理対象データのサイズ（データ量）、目標性能（例えば処理対象データを処理する目標時間）などがある。以下、この制御のための構成について説明する。
【００４６】
まず、図８を参照して、上記各方式のコンフィギュレーションパイプラインを定義するコンフィギュレーションデータを作成する装置について説明する。
【００４７】
この装置は、ソースコード入力部１０、ソースコード解析部１２、コンフィギュレーションデータ生成部１４及び回路構成ルール記憶部１６を備える。ソースコード解析部１４は、ＣやＣ＋＋などといったプログラム言語で記述された実装対象処理のソースコードの入力を受け付ける。ソースコード解析部１４は入力されたソースコードを解析し、コンフィギュレーションデータ生成部１４は、その解析に従ってそのソースコードが表す処理を再構成可能回路で実現するためのコンフィギュレーションパイプラインを規定するコンフィギュレーションデータを生成する。ソースコードを解析して、そのコードが表す処理を表すコンフィギュレーションデータを生成するツールは従来存在しており、この実施形態でもそのような従来ツールと同等のものを用いればよい。ただし、この実施形態では、コンフィギュレーションデータ生成部１４は、１つのソースコードから単に１つのコンフィギュレーションデータを作成するのではなく、上述の第１〜４方式を含む複数の実装方式の各々について１以上のコンフィギュレーションデータを生成する。このために、回路構成ルール記憶部１６には、第１〜４方式を含む複数の実装方式の各々のための構成ルールが記憶されている。
【００４８】
コンフィギュレーションデータ生成部１４は、これら各構成ルールに従って、第１〜４の各方式についてのコンフィギュレーションデータを生成する。図８では、生成したコンフィギュレーションデータに＃１，＃２，…＃Ｎという識別番号が付与されている。各コンフィギュレーションデータには、それぞれどの方式に対応するものであるかを示す情報が付加されている。
【００４９】
図８の装置は、例えばパーソナルコンピュータやワークステーションなどのコンピュータに、ソースコード入力部１０、ソースコード解析部１２、コンフィギュレーションデータ生成部１４及び回路構成ルール記憶部１６の機能を表すプログラムやデータをインストールすることにより実現することができる。この装置が生成した各コンフィギュレーションデータは、再構成可能回路を利用するシステムに提供される。この再構成可能回路を利用するシステムは、図８の装置とは別のハードウェアである場合もあれば、このシステムが図８の装置の機能を併せ持っていてもよい。
【００５０】
図９に、内蔵する再構成可能回路を用いて処理を行うシステムの例を示す。このシステムは、メインＣＰＵ（中央演算装置）２０、メインメモリ２２、ＰＲＯＭ(Programmable Read Only Memory)２４、ＥＥＰＲＯＭ(ElectricallyErasable PROM)２６、及びＤＲＰ内蔵システム３０を含み、それらが内部バス８に接続されている。このシステムは、再構成可能回路としてＤＲＰを用いる例である。
【００５１】
このシステムは、メインＣＰＵ２１が実行するアプリケーション２１とＤＲＰ内蔵システム３０に再構成されるコンフィギュレーションの組み合わせにより、１つの処理を実行する。言い換えれば、この処理のうち、ハードウェアでの実行に適する部分が実装対処処理としてＤＲＰ内蔵システム３０に実装されるのである。メインメモリ２２は、アプリケーション２１の実行の際に利用されるメモリである、ＰＲＯＭ２４及びＥＥＰＲＯＭ２６には、メインＣＰＵ２０が実行するアプリケーション２１等のプログラムや、そのプログラムで利用される設定情報などのデータが記憶される。このうち、設定情報等の書き換えが行われるデータやプログラムは、ＥＥＰＲＯＭ２６に記憶される。
【００５２】
ＤＲＰ内蔵システム３０は、例えばローカルＣＰＵ３２、ＤＲＰ３４及びローカルメモリ３６を１つのチップ又は１つのボード上に実装したものである。ＤＲＰ３４は、再構成可能回路の一例である。ローカルＣＰＵ３２は、ＤＲＰ３４の再構成等の制御を行う。ローカルメモリ３６には、ローカルＣＰＵ３２が実行する制御処理のためのデータやプログラムが記憶される。
【００５３】
次に、図１０を参照して、この実施形態のＤＲＰ内蔵システム３０の機能構成について説明する。
【００５４】
ローカルメモリ３６には、図８の装置が作成した第１〜４の各方式に対応するコンフィギュレーションデータ＃１〜＃Ｎが記憶される。また、この例は、ページ印刷のための画像処理にＤＲＰ内蔵システム３０を利用することを想定しているので、処理の対象としてメインＣＰＵ２０（又はメインメモリ２２）から入力される画像データ、ＤＲＰ３４が途中経過として出力する画像データ、または実装対象処理の処理結果としてＤＲＰ３４が出力する画像データのうちの１種類以上がローカルメモリ３６に一時的に保持されるようにしてもよい。
【００５５】
ＤＲＰ３４は、多数のＰＥやそれらＰＥ間の配線リソースなどを含んだ再構成可能論理回路３４２と、複数のコンフィギュレーションメモリ３４４を備えている。１つのコンフィギュレーションメモリ３４４には、１つのコンフィギュレーションを定義するデータが記憶される。ＤＲＰ３４では、複数のコンフィギュレーションメモリ３４４のうちの１つが有効（アクティブ）とされると、そのメモリ３４４内に保持されるデータに従って再構成可能論理回路３４２内のＰＥや配線の組み替えが行われ、再構成可能論理回路３４２上にそのコンフィギュレーションの回路が構成される。１つの時点では１つのコンフィギュレーションメモリ３４４のみがアクティブであり、別のコンフィギュレーションメモリ３４４をアクティブにすることにより、再構成可能論理回路３４２のコンフィギュレーションが切り替えられる。例えば、実装対象処理を表すコンフィギュレーションパイプラインを構成する各コンフィギュレーションをそれぞれ別のコンフィギュレーションメモリ３４４にロードしておき、それらを順にアクティブにしていくことで、再構成可能論理回路３４２に実装対象処理を実行させることができる。あるコンフィギュレーションメモリ３４４をアクティブにしている間に、別のコンフィギュレーションメモリ３４４にデータをロードすることで、ロードに要する時間が隠蔽される。
【００５６】
ローカルＣＰＵ３２は、実装対象処理をＤＲＰ３４に実行させる前に、実装方式判定処理３２２を実行する。実装方式判定処理３２２は、これからＤＲＰ３４への実装対象処理の実装方式を、上述した複数の実装方式のうちから選択する処理である。この選択（判定）処理は、使用条件（例えば、実装対象処理に割り当てられる再構成可能回路のリソース、処理対象データのサイズ、目標性能などのうちの１以上）を考慮して行われる。使用条件は、パラメータ設定処理３２４を介して、ユーザ（このシステムに処理を実行させようとしているシステム設計者など）から設定される。ユーザが設定するパラメータには、例えば、処理対象のデータの量や、そのデータの処理に割り当てる目標処理時間、すなわち上限処理時間などがある。例えば、印刷対象のページ画像に対して印刷のための画像処理（例えば、色空間変換、フィルタ処理、拡大・縮小、回転、データ圧縮・伸長など）を行う場合、処理対象のデータ量としては、１ページの画像のデータ量（例えば画素数など）を設定すればよい。また、この場合、目標処理時間は、このシステムを搭載する印刷装置の印刷速度を実現するために、このシステムが１ページの画像を処理するのに与えられる上限の時間を設定すればよい。なお、１ページの画像に対して、実装対象処理の他にもＤＲＰ３４を用いて処理を行う必要がある場合、この実装対象処理に割り当て可能な目標処理時間は、このシステムが１ページの画像を処理するのに与えられる上限の時間のうちの一部の時間となる。
【００５７】
設定されたパラメータに基づく実装方式判定処理３２２の処理手順の具体例は後で説明する。
【００５８】
再構成制御処理３２６は、実装方式判定処理３２２が判定（選択）した実装方式に対応するコンフィギュレーションデータをローカルメモリ３６から読み出して、そのデータに従ってＤＲＰ３４の再構成を制御する。すなわち、選択された実装方式に対応したコンフィギュレーションデータに含まれる各コンフィギュレーションのデータをＤＲＰ３４の各コンフィギュレーションメモリ３４４にロードし、それらメモリ３４４を順にアクティブにしていくことで、それら各コンフィギュレーションを順に再構成可能論理回路３４２上に構成していく。
【００５９】
なお、実装方式判定処理３２２、パラメータ設定処理３２４、及び再構成制御処理３２６を表すプログラムは、ＰＲＯＭ２４又はＥＥＰＲＯＭ２６又はＤＲＰ内蔵システム３０内の記憶装置（図示省略）にインストールされている。
【００６０】
次に、図１１及び図１２を参照して、実装方式判定処理３２２の処理手順の一例を説明する。この手順は、例えばＤＲＰ内蔵システム３０が実装対象処理を開始する際に実行すればよい。
【００６１】
この手順では、実装方式判定処理３２２は、内部ループを検出するまで順にソースコードを読み進めていき（Ｓ１１０）、内部ループを検出すると（Ｓ１００）、Ｓ１０２に進む。なお、図１の例では、実装対象処理の最外側にラスター走査のループが存在するが、そのループは判定処理３２２の対象からは省いておく。Ｓ１０２ｓでは、実装方式判定処理３２２は、検出したループＳ１０２が初期化ループであるか否かを判定する。初期化ループは、ＤＲＰ内蔵システム３０の初期化のために１回実行すればよいループであり、データ処理の場合のように（例えば１ページ処理するごとに）繰り返し行われるものではないので、これを区別して特別に処理するのである。例えば、ソースコードの作者が例えばコメント文などで初期化ループである旨をソースコード中に明記しておき、これを実装方式判定処理３２２が検出した場合に、初期化ループと判定すればよい。検出したループが初期化ループである場合、そのループのループ回数をソースコードから求め、その回数があらかじめ定めた閾値TH-in以上であれば、その初期化ループの処理のための初期化コンフィギュレーションを、当該ソースコードに対応するコンフィギュレーションパイプラインの最初のコンフィギュレーションとして採用する（Ｓ１０６）。また、ループ回数がTH-in以下であれば、ソフトウエア処理でもあまり時間が掛からないので、その初期化ループはローカルＣＰＵ３２で実行する処理に割り当てる（Ｓ１０８）。なお、初期化コンフィギュレーションは、図８に例示した各実装方式のコンフィギュレーションデータの作成処理の際にあらかじめ作成しておけばよい。また、図８に例示した各実装方式のコンフィギュレーションデータの作成処理の際、このＳ１０２〜Ｓ１０８の処理を行っておき、その結果（初期化コンフィギュレーションのデータ、又はローカルＣＰＵ３２でソフト処理を行う旨を示す情報）をコンフィギュレーションデータに組み込んでおいてもよい。
【００６２】
Ｓ１００で検出したループが初期化ループでないとＳ１０２で判定した場合、実装方式判定処理３２２は、次にそのループのループ回数があらかじめ定めた閾値TH-cy（初期化ループの判定閾値TH-inとは一般に異なる値である）と比較し（Ｓ１１２）、ループ回数がTH-cy以下であれば、そのループをインライン展開した処理を表すコンフィギュレーションを採用する（Ｓ１１４）。インライン展開は、ループ内部の処理を、ループ回数分だけ書き下すことでループをなくすことである。なお、インライン展開結果のコンフィギュレーションは、図８に例示した各実装方式のコンフィギュレーションデータの作成処理の際にあらかじめ作成しておけばよい。また、図８に例示した各実装方式のコンフィギュレーションデータの作成処理の際、このＳ１１２の処理を行っておき、ループ回数がTH-cy以下のループについては、インライン展開結果のコンフィギュレーションを作成してコンフィギュレーションデータに組み込んでおいてもよい。なお、ループ内にBreak文などといったループ外に強制的に出る制御文がある場合は、インライン展開は行わないものとする。
【００６３】
Ｓ１１２でループ回数がTH-cyを超えると判定した場合は、実装方式判定処理３２２は、まず、当該ループとそのループの前後の処理を表すコード群とを第１方式で実装した場合のコンフィギュレーションパイプラインの性能評価を行う（Ｓ１１６）。
【００６４】
この性能評価では、そのコンフィギュレーションパイプラインを構成する各コンフィギュレーション（例えば図３の例では、Ａ回路、Ｂ回路及びＣ回路）のレイテンシをそのパイプライン全体に渡って総和し、その総和結果に対して処理対象のデータのデータ量（例えばページ画像の処理の場合は１ページの画像の画素数）を乗じることで、そのパイプラインが実行する処理の総サイクル数を計算する。ここで、レイテンシは、コンフィギュレーションが１単位（例えば１画素）のデータを処理するのに要する時間である。図８の装置が当該ループとその前後の処理を表す第１方式のコンフィギュレーションパイプラインを既に作成しており、個々のコンフィギュレーションの回路情報は既に分かっているので、レイテンシの値はその回路情報から公知の方法で求めることができる（或いは、図８の装置が第１方式のコンフィギュレーションパイプラインのデータを作成する際にレイテンシの値を計算しておいてもよい）。また、処理対象のデータ量はパラメータ設定処理３２４により与えられている。
【００６５】
そして、実装方式判定処理３２２は、求めた総サイクル数をＤＲＰ３４の内部周波数で除することで、そのコンフィギュレーションパイプラインが処理対象のデータを処理するのに要する時間（推定処理時間と呼ぶ）を計算する。ＤＲＰ３４の内部周波数は、既知であり、例えばパラメータ設定処理３２４により設定しておけばよい。そして、実装方式判定処理３２２は、求めた推定処理時間が、パラメータ設定処理３２４にてユーザから設定された目標処理時間をクリアしているか（例えば目標処理時間以下であるか）どうかを判定する。
【００６６】
Ｓ１１６で推定処理時間が目標をクリアしていれば、Ｓ１１８で目標性能が達成されたと判定される。この場合、更に、この第１方式のコンフィギュレーションパイプラインが用いるストリームの数が制約の範囲内かどうかを判定する（Ｓ１２０）。ストリームは、ＤＲＰ３４上に構成されたコンフィギュレーションが外部と間で行う入力又は出力（例えばメインＣＰＵ２０からのアクセスや、メインメモリ２２との間のダイナミックメモリアクセス）のことであり、具体的には１つのストリームはＤＲＰ３４が備える入出力バッファの１つに割り当てられ、このバッファを介して外部との間でデータを受け渡す。ＤＲＰ３４が備える入出力バッファの数は有限なので、制約が生じる。この制約は、ＤＲＰ３４が備える入出力バッファのうち、実装対象処理に対して割り当てる上限数のことである。ＤＲＰ３４で他の処理も並行して行う場合、実装対象処理に割り当てられるストリームの数は、ＤＲＰ３４が備える入出力バッファの総数よりも少なくなる。このストリーム数の制約（上限値）は、パラメータ設定処理３２４にてユーザがあらかじめ設定しておく。そして、Ｓ１２０では、Ｓ１１６で評価したコンフィギュレーションパイプラインを構成する各コンフィギュレーションが用いるストリームの数の最大値が、その制約を満たしているかを判定する。制約を満たしていれば、Ｓ１１６で評価したコンフィギュレーションパイプラインは目標性能を達成し、且つＤＲＰ３４で問題なく動作させられることになるので、このコンフィギュレーションパイプラインを採用することに決定する（Ｓ１２２）。
【００６７】
この後、実装方式判定処理３２２は、ソースコードの末尾まで処理が終わったかどうかを判定し（Ｓ１２４）、終わっていなければ次のコードに進んでＳ１００以降の処理を繰り返す。
【００６８】
Ｓ１１８又はＳ１２０のいずれかの判定結果が否定の場合（すなわち、目標処理時間を達成できないか、ストリーム数が制約を超える場合）には、図１２に示すように、第３方式のコンフィギュレーションの性能評価に進む。
【００６９】
すなわち、実装方式判定処理３２２は、当該ループとそのループの前後の処理を表すコード群とを第３方式で実装した場合のコンフィギュレーションパイプラインの性能評価をＳ１１６と同様に実行し（Ｓ１３０）、Ｓ１３２で目標性能を達成できると判定し、且つＳ１３４でストリーム数が制約以内と判定すると、この第３方式のコンフィギュレーションパイプラインを採用する（Ｓ１３６）。そして、Ｓ１２４に進む。
【００７０】
Ｓ１３２又はＳ１３４のいずれかの判定結果が否定の場合には、第２方式のコンフィギュレーションの性能評価に進む。
【００７１】
すなわち、実装方式判定処理３２２は、当該ループとそのループの前後の処理を表すコード群とを第２方式で実装した場合のコンフィギュレーションパイプラインの性能評価をＳ１１６と同様に実行し（Ｓ１３８）、Ｓ１４０で目標性能を達成できると判定し、且つＳ１４２でストリーム数が制約以内と判定すると、この第２方式のコンフィギュレーションパイプラインを採用する（Ｓ１４４）。そして、Ｓ１２４に進む。
【００７２】
そして、Ｓ１４０又はＳ１４２いずれかの判定結果が否定の場合には、第４方式としての並列化評価処理に進む（Ｓ１４６）。
【００７３】
並列化評価処理の一例を図１３及び図１４に示す。この処理では、まず図１３に示すように、第１方式のコンフィギュレーションパイプラインを並列化して（Ｓ１５０）、並列化により目標性能（例えば目標処理時間）が達成できるかどうかを判定する（Ｓ１５２）。
【００７４】
より詳細には、図１４に示すように、まず、当該コンフィギュレーションパイプラインのうちの、あらかじめ指定されたコンフィギュレーション（又はその中の特定の要素回路）の並列度を１つ挙げる（Ｓ１７０）。すなわち、そのコンフィギュレーション又はその要素回路の数を１つ増やし、並列処理を実行できるように配線する。図８のコンフィギュレーションパイプライン作成装置は、１つの実装方式について、その実装方式のためのコンフィギュレーションパイプラインのうちのあらかじめ指定されたコンフィギュレーション又はその要素回路を様々な並列度で並列化したものを作成しておけばよい。そして、Ｓ１７０では、それらの中から並列度を１つ上げたものを選択すればよい。
【００７５】
そして、実装方式判定処理３２２は、その並列度を上げたコンフィギュレーションで使用するＰＥの数が、当該実装対象処理に割り当て可能なＰＥ数の上限TH-pe以内であるかどうかを判定する（Ｓ１７２）。ＰＥ数の上限TH-pe以内であれば、更にそのコンフィギュレーションが使用するストリームの数が、Ｓ１２０と同様、制約の範囲内であるかどうかを判定し（Ｓ１７４）、制約の範囲内であれば、更に並列度を上げたコンフィギュレーションパイプラインが目標性能を達成できるかどうかをＳ１１８と同様にして判定する（Ｓ１７６）。Ｓ１７６で目標性能を達成できると判定した場合は、この並列度のコンフィギュレーションパイプラインを採用する（Ｓ１７８）。この場合、例えば図１３のＳ１５２の判定結果が肯定となり、並列化処理は終了する。
【００７６】
性能が達成できなければ、Ｓ１７０に戻って並列数を上げて、同様の判定を繰り返す。Ｓ１７２又はＳ１７４でＰＥ数又はストリーム数が上限を超える場合、このコンフィギュレーションは与えられた制約内では構成できず、また並列度を更に上げればますますＰＥ数やストリーム数が増大するので、ここで処理を打ち切る。この場合、例えば図１３のＳ１５２の判定結果がＮｏとなり、第３方式について同様に並列化及び性能判定（Ｓ１５４及びＳ１５６）を行う。この並列化で目標性能が達成され、しかもＰＥ数やストリーム数の点でも実装可能と判断される場合は、この第３方式の並列化結果のコンフィギュレーションパイプラインを採用する。
【００７７】
また、第３方式でもＰＥ数及びストリーム数の制約内で目標性能が達成できない場合は、第２方式について同様に並列化及び性能判定（Ｓ１５８及びＳ１６０）を行う。この並列化で目標性能が達成され、しかもＰＥ数やストリーム数の点でも実装可能と判断される場合は、この第２方式の並列化結果のコンフィギュレーションパイプラインを採用する。
【００７８】
そして、第２方式の並列化でも制約内で目標性能が達成できない場合は、第１方式、第３方式、第２方式のＰＥ数及びストリーム数の制約を満たす並列化結果のうち、最も性能が高いコンフィギュレーションパイプライン（すなわち推定処理時間が短いもの）を採用して、処理を終了する。
【００７９】
再構成制御処理３２６は、このようにして採用されたコンフィギュレーションパイプラインのデータに従って、ＤＲＰ３４の再構成を制御する。
【００８０】
以上に説明したように。図１１及び図１２の手順では、回路規模（すなわち再構成可能論理回路３４２を同時に占有する面積）の小さい方式から順に判定していき、目標性能が達成できた場合にはその方式のコンフィギュレーションパイプラインを採用している。したがって、目標性能が達成できるものの中で、最も回路規模の小さいコンフィギュレーションパイプラインが採用されることとなる。
【００８１】
このように目標性能を満たすものの中で回路規模の最も小さいものを優先的に採用するという方式は、あくまで一例に過ぎない。例えばこの代わりに、回路規模の制約（ＰＥ数やストリーム数）を満足するコンフィギュレーションパイプラインのなかで、推定性能（推定処理時間など）の最も高いものを採用する手順を用いてもよい。また、各実装方式のコンフィギュレーションパイプラインを回路規模の観点及び推定性能の観点でそれぞれ点数付けし、それら両者の点数を総合評価して最も点数の高いコンフィギュレーションパイプラインを採用する手順も考えられる。
【００８２】
また、図１１及び図１２の手順では、実装方式を判定するのに実装対象処理のソースコードを解析していたが、これは一例に過ぎない。図８に例示したように、事前にソースコードを解析して各実装方式のコンフィギュレーションパイプラインのデータを作成しているので、この作成の際に、作成したコンフィギュレーションパイプラインを構成する各コンフィギュレーションのレイテンシを計算して記憶しておき、実装方式判定処理３２２では、ループの有無など判定することなく、単にパラメータとして設定された処理対象のデータ量と、記憶していた当該コンフィギュレーションパイプラインの各コンフィギュレーションのレイテンシとを用いてサイクル数を求め、そのサイクル数に基づいて推定処理時間を求めることで、そのコンフィギュレーションパイプラインの性能が十分かどうかを判定してもよい。
【００８３】
次に、ＤＲＰ内蔵システム３０に対し、上述したような非同期的な処理結果の合流が複数存在する大きな処理を実行させる場合について説明する。この大きな処理に含まれる１つ１つの合流処理（すなわち、非同期の関係にある複数の前段処理と、合流先である後段処理との組み合わせ）は、図１に例示したような１つの実装対象処理と捉えることができる。大きな処理は、このような実装対象処理が複数個パイプラインを形成したものと捉えればよい。ここで、一つの例では、このような大きな処理を構成する個々の実装対象処理ごとに上述のように目標処理時間を設定し、事前に上述の方法でその目標処理時間を達成できる実装方式を判定してもよい。
【００８４】
別の例として、それら個々の実装対象処理を実際の再構成してデータ処理を行わせたときのデータ処理時間を実測し、その実測値を次の実装対象処理の実装方式の選択に反映させてもよい。このような例を図１５に示す。
【００８５】
図１５の手順では、ユーザは、それら個々の実装対象処理ごとに事前に目標処理時間を設定する（Ｓ１８０）。そして、処理の開始を指示された場合、実装方式判定処理３２２は、先頭の実装対象処理の実装方式を図１１〜図１４に示したような手順に従って判定する（Ｓ１８２）。この判定では、Ｓ１８０で設定された目標処理時間を満たす実装方式を選択する。次に、再構成制御処理３２６は、判定された実装方式のコンフィギュレーションパイプラインにしたがってＤＲＰ３４を制御してデータ処理を行わせる（Ｓ１８４）。このデータ処理の実行の際に、そのコンフィギュレーションパイプラインが処理単位（例えば１バンドや１ページなど）分のデータを処理するのに要した時間を実測する。そして、Ｓ１８２の判定で用いた目標処理時間からこの実測値を減算することで、目標処理時間から見た余り（余裕）時間を算出する（Ｓ１８６）。Ｓ１８２の判定では、目標処理時間に対してある程度余裕を見て実装方式を判定するので、Ｓ１８６の減算結果が負の値になることは起こらないと考えてよい。そして、この実装対象処理が、一連の大きな処理の中の最後の処理でなければ（Ｓ１８８）、次の実装対象処理の目標処理時間にその余り時間を加算する（Ｓ１９０）。そして、Ｓ１８２に戻って、当該次の実装対象処理についての実装方式を、その余り時間の加算後の目標処理時間に基づき判定する。以上の処理を、最後の実装対象処理に達するまで繰り返す。データ処理に要する時間が実装方式判定処理３２２の所要時間よりもはるかに長い場合には、このような制御を行っても時間のロスはほとんどない。
【００８６】
このような制御によれば、実際のデータ処理で時間に余裕ができた場合、次の実装対象処理について回路規模のより小さい第１方式が選ばれやすくすることができる。
【符号の説明】
【００８７】
３２  ローカルＣＰＵ、３４  ＤＲＰ、３６  ローカルメモリ、３２２  実装方式判定処理、３２４  パラメータ設定処理、３２６  再構成制御処理、３４２  再構成可能論理回路、３４４  コンフィギュレーションメモリ。
【図１】
0005589479.tif 000002
【図２】
0005589479.tif 000003
【図３】
0005589479.tif 000004
【図４】
0005589479.tif 000005
【図５】
0005589479.tif 000006
【図６】
0005589479.tif 000007
【図７】
0005589479.tif 000008
【図８】
0005589479.tif 000009
【図９】
0005589479.tif 000010
【図１０】
0005589479.tif 000011
【図１１】
0005589479.tif 000012
【図１２】
0005589479.tif 000013
【図１３】
0005589479.tif 000014
【図１４】
0005589479.tif 000015
【図１５】
0005589479.tif 000016