(57)【特許請求の範囲】
【請求項１】
プロセッサと再構成可能回路とを備える処理装置に実行させるプログラムコードを解析して、当プログラムコードに含まれる粒度ごとの実行単位を識別するコード解析手段と、
処理対象データを前記プログラムコードにより処理する場合の、前記粒度ごとの前記各実行単位の処理負荷を計算する負荷計算手段と、
計算された前記処理負荷が閾値を超える実行単位を、粒度の細かい実行単位から順に、前記再構成可能回路によるハードウエア化対象に選択する手段であって、ある粒度の実行単位に前記ハードウエア化対象に選択可能なものがなくなった場合には、次に細かい粒度の実行単位の中から前記処理負荷が閾値を超える実行単位を前記ハードウエア化対象に選択する手段と、
前記プログラムコードのうち、ハードウエア化対象に選択された各実行単位を前記再構成可能回路の回路構成として実装し、残りの実行単位を前記プロセッサでのソフトウエア処理対象に割り当てることにより、前記処理装置を、前記プログラムコードを実行するシステムとして構成し、構成したシステムに前記処理対象データを実行させ実行性能を計測する計測手段と、
計測された実行性能が目標性能を満たすまで、前記選択手段による更なるハードウエア化対象の選択と、前記計測手段によるその選択結果に応じた前記システムの再構成及び前記実行性能の計測と、を繰り返す制御を行う制御手段と、
を備えるハードウエア／ソフトウエア協調設計装置。
【請求項２】
前記処理装置が備える前記プロセッサが実行するプログラムとして前記処理装置に実装されていることを特徴とする請求項１に記載のハードウエア／ソフトウエア協調設計装置。
【請求項３】
コンピュータを、
プロセッサと再構成可能回路とを備える処理装置に実行させるプログラムコードを解析して、当プログラムコードに含まれる粒度ごとの実行単位を識別するコード解析手段、
処理対象データを前記プログラムコードにより処理する場合の、前記粒度ごとの前記各実行単位の処理負荷を計算する負荷計算手段、
計算された前記処理負荷が閾値を超える実行単位を、粒度の細かい実行単位から順に、前記再構成可能回路によるハードウエア化対象に選択する手段であって、ある粒度の実行単位に前記ハードウエア化対象に選択可能なものがなくなった場合には、次に細かい粒度の実行単位の中から前記処理負荷が閾値を超える実行単位を前記ハードウエア化対象に選択する手段、
前記プログラムコードのうち、ハードウエア化対象に選択された各実行単位を前記再構成可能回路の回路構成として実装し、残りの実行単位を前記プロセッサでのソフトウエア処理対象に割り当てることにより、前記処理装置を、前記プログラムコードを実行するシステムとして構成し、構成したシステムに前記処理対象データを実行させ実行性能を計測する計測手段、
計測された実行性能が目標性能を満たすまで、前記選択手段による更なるハードウエア化対象の選択と、前記計測手段によるその選択結果に応じた前記システムの再構成及び前記実行性能の計測と、を繰り返す制御を行う制御手段、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードウエア／ソフトウエア協調設計装置及びプログラムに関する。
【背景技術】
【０００２】
特許文献１に記載されているハードウエア／ソフトウエア協調設計システムでは、ユーザは、論理システムの動作を記述した動作記述を分割した複数の機能ブロックのそれぞれを、ソフトウエアで実行するか、ハードウエア化するかを指定する。その指定に従った場合のソフトウエア部分の処理時間とハードウエア部分のハードウエア量をハードウエア／ソフトウエア手段見積り手段が見積もる。その見積もりの結果が、あらかじめ定められた制約条件を満たさない場合、機能ブロック解析判定手段が、各機能ブロックそれぞれを解析し、ハードウエアで実現することに適しているか否かを機能ブロック解析判定手段が判定する。この判定の結果とユーザの指定との比較結果を指定・判定結果比較手段が表示し、ユーザはその比較結果を参照して、機能ブロックごとのハードウエア／ソフトウエアの指定を変更する。以上のサイクルを、制約条件が満たされるようになるまで繰り返す。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平９−８１６０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明は、ハードウエア／ソフトウエア協調システムの目標性能を満たしつつも、本発明を採用しない場合よりも、そのシステムの消費電力を低減することを目的とする。
【課題を解決するための手段】
【０００５】
請求項１に係る発明は、プロセッサと再構成可能回路とを備える処理装置に実行させるプログラムコードを解析して、当プログラムコードに含まれる粒度ごとの実行単位を識別するコード解析手段と、処理対象データを前記プログラムコードにより処理する場合の、前記粒度ごとの前記各実行単位の処理負荷を計算する負荷計算手段と、計算された前記処理負荷が閾値を超える実行単位を、粒度の細かい実行単位から順に、前記再構成可能回路によるハードウエア化対象に選択する手段であって、ある粒度の実行単位に前記ハードウエア化対象に選択可能なものがなくなった場合には、次に細かい粒度の実行単位の中から前記処理負荷が閾値を超える実行単位を前記ハードウエア化対象に選択する手段と、前記プログラムコードのうち、ハードウエア化対象に選択された各実行単位を前記再構成可能回路の回路構成として実装し、残りの実行単位を前記プロセッサでのソフトウエア処理対象に割り当てることにより、前記処理装置を、前記プログラムコードを実行するシステムとして構成し、構成したシステムに前記処理対象データを実行させ実行性能を計測する計測手段と、計測された実行性能が目標性能を満たすまで、前記選択手段による更なるハードウエア化対象の選択と、前記計測手段によるその選択結果に応じた前記システムの再構成及び前記実行性能の計測と、を繰り返す制御を行う制御手段と、を備えるハードウエア／ソフトウエア協調設計装置である。
【０００６】
請求項２に係る発明は、前記処理装置が備える前記プロセッサが実行するプログラムとして前記処理装置に実装されていることを特徴とする請求項１に記載のハードウエア／ソフトウエア協調設計装置である。
【０００７】
請求項３に係る発明は、コンピュータを、プロセッサと再構成可能回路とを備える処理装置に実行させるプログラムコードを解析して、当プログラムコードに含まれる粒度ごとの実行単位を識別するコード解析手段、処理対象データを前記プログラムコードにより処理する場合の、前記粒度ごとの前記各実行単位の処理負荷を計算する負荷計算手段、計算された前記処理負荷が閾値を超える実行単位を、粒度の細かい実行単位から順に、前記再構成可能回路によるハードウエア化対象に選択する手段であって、ある粒度の実行単位に前記ハードウエア化対象に選択可能なものがなくなった場合には、次に細かい粒度の実行単位の中から前記処理負荷が閾値を超える実行単位を前記ハードウエア化対象に選択する手段、前記プログラムコードのうち、ハードウエア化対象に選択された各実行単位を前記再構成可能回路の回路構成として実装し、残りの実行単位を前記プロセッサでのソフトウエア処理対象に割り当てることにより、前記処理装置を、前記プログラムコードを実行するシステムとして構成し、構成したシステムに前記処理対象データを実行させ実行性能を計測する計測手段、計測された実行性能が目標性能を満たすまで、前記選択手段による更なるハードウエア化対象の選択と、前記計測手段によるその選択結果に応じた前記システムの再構成及び前記実行性能の計測と、を繰り返す制御を行う制御手段、として機能させるためのプログラムである。
【発明の効果】
【０００８】
請求項１又は３に係る発明によれば、ハードウエア／ソフトウエア協調システムの目標性能を満たしつつも、本発明を採用しない場合よりも、そのシステムの消費電力を低減することができる。
【０００９】
請求項２に係る発明によれば、処理装置単体で、当該処理装置自身を目標性能を満たし且つ消費電力を低減できるハードウエア／ソフトウエア協調システムとして構成することができる。
【図面の簡単な説明】
【００１０】
【図１】実施形態のハードウエア／ソフトウエア協調設計装置の構成例を示す図である。
【図２】実施形態の全体的な処理手順の一例を示す図である。
【図３】実施形態の全体的な処理手順のうちのＨＷブロック化処理の詳細な手順の例を示す図である。
【発明を実施するための形態】
【００１１】
図１を参照して、この実施形態のハードウエア（ＨＷ）／ソフトウエア（ＳＷ）協調設計装置１００の構成例を説明する。この装置１００は、ＨＷ／ＳＷ協調システムであるターゲットシステム２００のシステム構成を設計する。
【００１２】
ターゲットシステム２００は、この実施形態の装置１００による設計処理の対象となるシステムであり、プロセッサ２０２と再構成可能回路２０４とを備えている。プロセッサ２０２は、プログラムを実行するマイクロプロセッサ等の装置である。再構成可能回路２０４は、内部の論理回路構成を変更可能なハードウエア回路であり、ＤＲＰ（Dynamic Reconfigurable Processor）のように処理実行中に動的に再構成可能なものであってもよいし、ＦＰＧＡ（Field Programmable Gate Array）のようにシステム起動時に再構成されるものであってもよい。例えば、ターゲットシステム２００の一例としては、特開２００９−３７６５号公報に紹介されるＤＡＰＤＮＡアーキテクチャのデバイスがある。このデバイスは、ＤＡＰと呼ばれるプロセッサと、ＤＮＡと呼ばれる再構成可能回路アレイとから構成されている。ターゲットシステム２００は、プロセッサ２０２によるソフトウエア処理と、再構成可能回路２０４によるハードウエア処理との組合せにより、目的とする処理機能（言い換えればシステム構成）を実現する。
【００１３】
ＨＷ／ＳＷ協調設計装置１００は、目的とする処理機能／システム構成をプログラミング言語（例えばＣ言語）等で記述したプログラムコード３０２を入力として受け取る。そして、そのプログラムコード３０２を解析することで、その処理機能／システム構成をターゲットシステム２００上のＨＷとＳＷの組合せで実現するためのシステム設計を行う。
【００１４】
ここで、ＨＷ／ＳＷ協調設計装置１００は、その設計の際、プログラムコード３０２の処理の対象である処理対象データ３０４を考慮する。すなわち、ＨＷ／ＳＷ協調設計においては、プログラムコード３０２の中の演算量（すなわち処理負荷の量）の大きい部分はＨＷ回路で実装するが、データ圧縮等、演算量が処理対象データに依存する処理の部分については、処理対象データを考慮する必要がある。例えば、ターゲットシステム２００をデジタル印刷装置における画像処理（例えば拡大・縮小、回転、面付け、圧縮・伸張）を実行する装置としてシステム構成する場合、実際に印刷する文書自体は未定であっても、印刷対象の文書の分野（例えばダイレクトメール、帳票等）に応じてどのような文書画像がどのような分布で含まれているのかの傾向がある程度決まってくる。したがって、その傾向に従った文書画像群をテストデータとして用意しておき、そのテストデータを処理対象データ３０４としてＨＷ／ＳＷ協調設計装置１００に与えることで、実際の処理対象の文書画像群の傾向に適したシステム構成が設計される。
【００１５】
このような設計処理のために、ＨＷ／ＳＷ協調設計装置１００は、コード構造解析部１０１、コード負荷分析部１０３、ＨＷ化対象選択部１０４、ＨＷブロック合成部１０６、ＨＷ／ＳＷ協調動作部（計測部）１０８、及びＨＷ／ＳＷ設計完了判断部１１０を備えている。
【００１６】
コード構造解析部１０１は、入力されたプログラムコード３０２を解析して、そのプログラムコード３０２の構造を求める。例えば、コード構造解析部１０１は、プログラムコード３０２を構文解析（パース）するパーサであり、プログラムコード３０２の構文解析結果として構文木を出力する。この構文木には、そのプログラムコード３０２に含まれる個々の命令（単一インストラクション）、複数の命令を含んだ処理ループ、命令や処理ループ等を含んだ関数、等といった、様々な粒度の実行単位の情報が含まれる。なお、ここでいう「粒度」とは、プログラムコード３０２に含まれる実行単位の大きさの段階のことである。上述した命令、ループ、関数という実行単位同士の間では、「命令」が最も細かい粒度であり、関数が最も粗い粒度であり、ループがそれら両者の中間である。なお、ループが入れ子になっている場合は、入れ子のレベルごとに別の粒度として取り扱ってもよい。例えば、第１のループを中に含んだ第２のループは、第１のループよりも粒度が１段階粗いものとして取り扱うなどである。一般に、粒度が細かい実行単位ほど、その実行単位をＨＷ実装した場合の回路規模は小さい。
【００１７】
また、構文木からは、個々の実行単位の入力及び出力となる変数の情報が求められる。
【００１８】
コード構造解析部１０１は、プログラムコード３０２から検出した実行単位ごとに、当該実行単位の粒度と、当該実行単位の入力及び出力の変数と、を求め、それらの情報を構文木と共に出力してもよい。
【００１９】
コード負荷分析部１０３は、プログラムコード３０２及び処理対象データ３０４と、コード構造解析部１０１の解析結果とに基づき、プログラムコード３０２に含まれる実行単位ごとに、当該実行単位の演算量（負荷量）を見積もる。この見積もりでは、処理対象データ３０４を用いることで、そのデータ３０４を当該プログラムコード３０２にて処理する場合に、個々の実行単位がそれぞれ何回実行されるのかを求め、その実行回数の情報も加味して演算量を求める。
【００２０】
例えば、命令レベルの実行単位の場合、個々の命令を表す予約語に対応づけて当該命令に対応する演算量が登録されたデータベースを用意しておく。すなわち、このデータベースに登録された演算量は、命令の実行１回あたりの演算量である。命令の演算量は、例えば、プロセッサ２０２が当該命令を実行するのに要する時間の長さ（例えば、秒等の時間単位、あるいはプロセッサ２０２のサイクル（クロック）数単位）で表される。所要時間が長いほど、演算量は大きい。コード負荷分析部１０３は、プログラムコード３０２中に含まれる命令の予約語ごとに、当該予約語に対応する１回当たりの演算量をデータベースから求める。そして、その１回当たりの演算量に対して、処理対象データ３０４を処理する場合の当該命令の実行回数を乗じることで、当該命令の合計の演算量を求める。なお、この計算の際、プログラムコード３０２中の異なる場所に同じ命令がある場合、それら各場所にある当該命令の実行回数の総和を、当該命令の実行回数として取り扱う。このような処理により、処理対象データ３０４を処理するに当たっての、各命令の演算量が求められる。
【００２１】
同様に、コード負荷分析部１０３は、プログラムコード３０２中の個々のループごとに、そのループに含まれる各命令の１回当たりの演算量を求め、それら演算量の合計をそのループの１回当たりの演算量として求める。そして、このループの１回当たりの演算量に、処理対象データ３０４を処理する場合の当該ループの実行回数を乗じることで、当該ループの合計の演算量を求める。なお、ループ内にif-elseやswitch-case等の制御構造が含まれている場合は、処理対象データ３０４をその制御構造に従って処理した場合の当該ループ内の個々の命令の実行回数を考慮して、当該ループの合計の演算量を求める。
【００２２】
また、コード負荷分析部１０３は、プログラムコード３０２中の個々の関数ごとに、その関数に含まれる各ループ、各命令の１回当たりの演算量を求め、それら演算量の合計をその関数の１回当たりの演算量として求める。関数内にif-elseやswitch-case等の制御構造が含まれている場合は、処理対象データ３０４をその制御構造に従って処理した場合の当該関数内の個々のループ及び命令の実行回数を考慮して、当該関数の合計の演算量を求める。
【００２３】
このようなコード負荷分析部１０３としては、既存のプロファイラを用いればよい。プロファイラは、プログラムを実際に実行したときの各関数その他の実行単位の実行回数や実行時間等を計測するツールである。
【００２４】
コード構造解析部１０１の解析結果（各実行単位の粒度及び入出力変数等の情報）、及びコード負荷分析部１０３の求めた各実行単位の演算量は、ＨＷ化対象選択部１０４に入力される。ＨＷ化対象選択部１０４は、それら入力情報に基づき、プログラムコード３０２中でＨＷ化（すなわち再構成可能回路２０４上にＨＷ論理回路として実装すること）の対象とする実行単位を選択する。ここで、ＨＷ化対象選択部１０４は、粒度の細かい実行単位から順に実行単位を選択していく。ただし、ＨＷ化の効果がある程度以上見込める実行単位しか、選択しない。ＨＷ化の効果は、コード負荷分析部１０３が求めた実行単位の演算量（実行一回当たりではなく、処理対象データ３０４全体に渡る合計の演算量）によって測る。例えば、演算量があらかじめ定めた閾値を超える実行単位を、ＨＷ化の効果が見込める実行単位と判定する等である。また、同じ粒度で演算量が閾値を超える実行単位が複数ある場合、演算量の高い実行単位ほど優先的にＨＷ化対象に選択するようにしてもよい。ＨＷ化対象選択部１０４の選択結果は、ＨＷブロック合成部１０６に渡される。
【００２５】
ＨＷブロック合成部１０６は、受け取った選択結果が示すＨＷ化対象の実行単位（命令、ループ、又は関数等）を、再構成可能回路２０４上のプロセッサエレメントの組合せからなる論理回路（ＨＷブロックと呼ぶ）として合成する。この合成処理には、既存の高位合成技術を用いればよい。プログラムコード３０２のうちＨＷ化しない部分は、プロセッサ２０２が実行する実行形式のコードに変換される。このようにして生成されたＨＷブロックと実行形式のコードの組合せが、ターゲットシステム２００上に実現されるＨＷ／ＳＷ協調システムを規定したものとなる。すなわち、ＨＷ化対象選択部１０４がＨＷ化対象の実行単位を選択し、ＨＷブロック合成部１０６がその選択結果に応じて合成処理を行うごとに、１つのＨＷ／ＳＷ協調システムが設計されることになる。このＨＷブロック合成部１０６の合成の結果（すなわち設計結果）は、ＨＷ／ＳＷ協調動作部１０８に渡される。
【００２６】
ＨＷ／ＳＷ協調動作部１０８は、受け取った合成結果に従ってターゲットシステム２００を制御することで、ターゲットシステム２００上に、プログラムコード３０２が表すシステム構成を実装したＨＷ／ＳＷ協調システムを構成し、構成したシステムに処理対象データ３０４を入力して実際に処理させる。そして、この処理の際のＨＷ／ＳＷ協調システムの性能を計測する。ここで計測する性能は、当該システムの処理速度に関する性能であり、例えば、当該システムが処理対象データ３０４を処理するのに要した時間（クロック数単位あるいは時間単位等）で表される。
【００２７】
ＨＷ／ＳＷ設計完了判断部１１０は、ＨＷ／ＳＷ協調動作部１０８が計測した性能情報に基づき、ＨＷ／ＳＷ協調設計を完了してよいかどうかを判断する。大略的には、あらかじめ指定された目標性能が達成されれば設計完了と判断し、そうでなければ、プログラムコード３０２中でのＨＷ化対象とする実行単位を増やすよう、ＨＷ化対象選択部１０４に指示する。
【００２８】
ＨＷ／ＳＷ設計完了判断部１１０は、性能判定部１１２、ＨＷリソース判定部１１４及び完了判定部１１６を含む。性能判定部１１２は、ＨＷ／ＳＷ協調動作部１０８が求めた性能を目標性能と比較することで、目標性能が達成されているかどうかを判定する。ＨＷリソース判定部１１４は、ＨＷブロック合成部１０６が合成したＨＷブロックのリソース量が再構成可能回路２０４内に実装可能な量に収まっているかどうかを判定する。ＨＷブロックのリソース量は、例えば、そのＨＷブロック（論理回路）を構成するために用いられる再構成可能回路２０４の要素回路（ＤＲＰの場合、プロセッサエレメントと呼ばれる）の数で表される。このリソース量は、ＨＷブロック合成部１０６がＨＷブロックを合成した際に判明し、ＨＷリソース判定部１１４に渡される。ＨＷブロックのリソース量が再構成可能回路２０４の備えるリソース量を超える場合、そのＨＷブロックは再構成可能回路２０４上に実装できない。この場合、今回の設計は不採用とし、ＨＷ／ＳＷ協調動作部１０８を動作させない。完了判定部１１６は、性能判定部１１２及びＨＷリソース判定部１１４の判定結果から、ＨＷ／ＳＷ協調設計の処理を完了してよいかどうかを判定する。今回の設計が再構成可能回路２０４上に実装可能とＨＷリソース判定部１１４が判定し、かつＨＷ／ＳＷ協調動作部１０８がターゲットシステム２００上に実装したその設計の実測性能が目標性能を満たしている場合に、完了判定部１１６は設計完了と判定する。そうでない場合は、完了判定部１１６は、ＨＷ化対象を増加させる旨の指示をＨＷ化対象選択部１０４に送る。
【００２９】
ＨＷ化対象を増やす指示を受け取ったＨＷ化対象選択部１０４は、細粒度の実行単位から順に、未だＨＷ化していない実行単位の中から、新たな実行単位をＨＷ化対象に選択することで、プログラムコード３０２を実現するシステムのうちのＨＷ部分を増加させる。そして、今回新たに選択した実行単位をＨＷブロック合成部１０６がＨＷブロックへと合成する。これにより、プログラムコード３０２のうちＨＷ化された部分が増加したシステム設計ができあがる。ＨＷ／ＳＷ協調動作部１０８はこの新たなシステム設計に従ってターゲットシステム２００を再構成し、その再構成結果のシステムに処理対象データ３０４を処理させ、その処理の結果に基づき再度ＨＷ／ＳＷ設計完了判断部１１０に設計結果の可否判定を行わせる。完了判定部１１６が設計完了と判定するまで、このようなＨＷ部分の増加、システム再構成、処理実行、及び設計結果の可否判定の処理ループを繰り返す。そして、設計完了と判定された際の設計情報（すなわち、プログラムコード３０２のうちのどの実行単位をＨＷ化するかの情報）、又はその設計情報に従って構成されたＨＷ／ＳＷ協調システムのシステム構成が、最終的な設計結果として採用される。
【００３０】
次に、図２及び図３を参照して、ＨＷ／ＳＷ協調設計装置１００を用いた設計処理の手順の一例を説明する。
【００３１】
この手順では、図２に示すように、まずユーザが、プログラムコード３０２と処理対象データ３０４を用意すると共に、目標性能とターゲットシステム２００のＨＷ制約条件とをＨＷ／ＳＷ協調設計装置１００に設定する（Ｓ１００）。目標性能は、例えば、設計するＨＷ／ＳＷ協調システムが処理対象データ３０４を処理するのに要する所要時間の上限として規定される。また、ＨＷ制約条件は、再構成可能回路２０４が備えるリソースの総量（例えば論理回路を構成する要素回路の数）の情報を含んでいる。このリソース量を超えるＨＷ回路は再構成可能回路２０４上に構成できない。ここで、再構成可能回路２０４がＤＲＰの場合、処理実行中に回路構成を動的に再構成できるので、ＨＷ化対象選択部１０４で選択される実行単位ごとのＨＷ化回路がそのリソース量以下であれば、いくつの実行単位が選択されたとしても、それら選択された各実行単位をＨＷ化することができる。一方、再構成可能回路２０４がＦＰＧＡのように動的に内部構成を変更できない回路の場合、選択された各実行単位のＨＷ化回路のリソース量の合計が、ＨＷ制約条件として指定された再構成可能回路２０４のリソース総量以下でないと、それら選択された実行単位をＨＷ化することができない。目標性能は性能判定部１１２に、ＨＷ制約条件はＨＷリソース判定部１１４に、それぞれ設定される。なお、Ｓ１００では、この他に、ターゲットシステム２００内のプロセッサ２０２及び再構成可能回路２０４の動作クロック周波数等のシステム動作条件を設定してもよい。
【００３２】
このような初期設定が完了すると、ＨＷ／ＳＷ協調設計装置１００は、ＨＷ／ＳＷ協調動作を実行する（Ｓ１０２）。初期設定直後の時点では、プログラムコード３０２中の１つの実行単位もＨＷ化せず、ＨＷ／ＳＷ協調動作部１０８がプログラムコード３０２全体をプロセッサ２０２に実行させ、処理対象データ３０４を処理させる。そして、その処理の際のシステム性能（例えば、処理の所要時間）を実測し、そのシステム性能が目標性能を達成（例えば、実測した所要時間が目標性能として指定された上限時間以下となること）したか否かを判定し（Ｓ１０４）、達成していなければ、Ｓ１０６に進む。Ｓ１０６では、プログラムコード３０２の中に、未だＨＷ化していない、ＨＷ可能な実行単位が残っているかどうかを判定し（Ｓ１０６）、残っていればＳ１０８のＨＷブロック化処理に進んで、新たな実行単位のＨＷ化を行い、Ｓ１０２に戻る。残っていなければ、設計不能として設計処理を異常終了する。
【００３３】
図３は、ＨＷブロック化処理（Ｓ１０８）の詳細な処理手順の例を示す。この手順では、ＨＷ化対象選択部１０４が、まず、プログラムコード３０２中の最も粒度が細かい「命令」レベルの実行単位の中に、その演算量が、プログラムコード３０２全体の演算量（「全演算量」）に対して、あらかじめ定めた閾値割合を超えるもの（これがＨＷ化対象である）があるかどうかを判定する（Ｓ１１２）。ここでの実行単位の演算量及び全演算量は、それぞれ、処理対象データ３０４全体を処理したときの当該実行単位及びプログラムコード３０２全体の演算量である。なお、ＨＷブロック化処理（Ｓ１０８）を始める際には、コード構造解析部１０１及びコード負荷分析部１０３の処理が終了し、各実行単位の粒度及び演算量は計算済みとなっているものとする。なお、Ｓ１１２でのＨＷ化対象の探索では、既にＨＷ化済みの実行単位、及びＨＷ化不可のラベル（後述）が付された実行単位は、探索の対象から外される（この点は、後述するＳ１１４の探索でも同様）。
【００３４】
Ｓ１１２で、プログラムコード３０２中に、全演算量に対する演算量の割合が閾値を超えている命令があると判定された場合、ＨＷ化対象選択部１０４は、そのような命令の中の１つをＨＷ化対象に選択する（Ｓ１１６）。ここで、閾値超えの命令が複数存在する場合には、そのような命令の中からランダムでＨＷ化対象を選択する。また、この代わりに、ＨＷ化の効果が高いものから優先的にＨＷ化するために、閾値超えの命令（未ＨＷ化のものに限る）のうち最も演算量が多いものをＨＷ化対象に選択してもよい。その後、ＨＷブロック合成部１０６が、当該選択された実行単位の入力及び出力の変数の情報（この情報はコード構造解析部１０１の解析結果に含まれる）に基づき、その実行単位をＨＷ回路化した場合の入力及び出力のインタフェースを規定する（Ｓ１２２）。これらインタフェースは、ＨＷ／ＳＷ協調システムのうちのＳＷ部分が、当該実行単位のＨＷ回路を呼び出して入力データを与える際、及びその入力データに対するそのＨＷ回路の処理結果を受け取る際に用いられる。また、ＨＷブロック合成部１０６は、選択された実行単位の処理を実行するための回路構成（ＨＷブロック）を合成する（Ｓ１２４）。続いて、ＨＷリソース判定部１１４が、Ｓ１２４で合成されたＨＷブロックのリソース量が、ＨＷ制約条件である再構成可能回路２０４のリソース量以内かどうかを判定する（Ｓ１２６）。
【００３５】
Ｓ１２６の判定結果が肯定（Ｙｅｓ）の場合、Ｓ１２４で合成したＨＷブロックを採用する。すなわち、このＨＷブロックが、プログラムコード３０２のうちのＨＷ実装部分として追加されることになる。そして、ＨＷブロック合成部１０６は、プログラムコード３０２からその採用されたＨＷブロックに対応する実行単位のコード部分を削除すると共に、Ｓ１２２で規定した入力及び出力のインタフェースを用いて当該実行単位のＨＷブロックを呼び出す（及び返り値を受け取る）ためのコード部分を追加する。そして、図３の処理を終了する。これにより、Ｓ１１６で選択された実行単位をＨＷ化した、新たなＨＷ／ＳＷ協調システムが設計されたことになる。なお、Ｓ１２６の判定結果が肯定の場合、Ｓ１１６で選択された実行単位にＨＷ化済みのラベルが付される。この後、図２の処理に戻り、Ｓ１０２にてその新たなシステム設計に従ってＨＷ／ＳＷ協調動作部１０８がターゲットシステム２００を再構成し、再構成したシステムに処理対象データ３０４を実行させる。
【００３６】
一方、Ｓ１２６の判定結果が否定（Ｎｏ）の場合、ＨＷブロック合成部１０６は、Ｓ１１６で選択した実行単位に、ＨＷ化不可を示すラベルを付与する（Ｓ１２８）。その後、処理はＳ１１２に戻り、命令レベルの実行単位の中から別のＨＷ化対象を探索する。
【００３７】
また、図２及び図３の処理のループを何度か繰り返しているうちに、プログラムコード３０２中の、全演算量に対する演算量の割合が閾値を超える命令が、すべてＨＷ化済み又はＨＷ化不可ラベル付与済みとなった場合、Ｓ１１２の判定結果がＮｏとなる。この場合処理はＳ１１４に進む。Ｓ１１４では、プログラムコード３０２中の、「命令」レベルの次に粒度が細かい「ループ」レベルの実行単位の中から、その演算量がプログラムコード３０２の全演算量に対して、あらかじめ定めた閾値割合を超えるもの（ＨＷ化対象）を探索する。ここで用いる閾値割合は、Ｓ１１２で用いた閾値割合と同じであってもよいし、異なっていてもよい。Ｓ１１４で、プログラムコード３０２中に全演算量に対する演算量の割合が閾値を超えているループがあると判定された場合、ＨＷ化対象選択部１０４は、そのようなループの中の１つをＨＷ化対象に選択する（Ｓ１１８）。この選択は、Ｓ１１６の選択と同様、ランダムであってもよいし、ＨＷ化の効果が高いものから優先的にＨＷ化するために、閾値超えのループ（未ＨＷ化のものに限る）のうち最も演算量が多いものを選択するものであってもよい。この後、ＨＷブロック合成部１０６等によりＳ１２２〜Ｓ１２８の処理が実行される。このＳ１２２〜Ｓ１２８の処理は、前述した命令レベルの実行単位のＨＷ化におけるＳ１２２〜Ｓ１２８の処理と同様なので、詳細な説明は省略する。
【００３８】
なお、Ｓ１２４でＨＷ化し且つそのＨＷ化結果のＨＷブロックがＳ１２６でＨＷ制約条件を満たすと判定された「ループ」レベルの実行単位の中に、既により細粒度かつＨＷ化済みの実行単位（この例では命令レベル）が含まれている場合がある。この場合、当該より細粒度の実行単位のＨＷブロックは、そのループのＨＷブロックに含まれることになるので、削除してもよい。
【００３９】
図２及び図３の処理のループを何度か繰り返しているうちに、プログラムコード３０２中の、全演算量に対する演算量の割合が閾値を超えるループが、すべてＨＷ化済み又はＨＷ化不可ラベル付与済みとなった場合、Ｓ１１４の判定結果がＮｏとなる。この場合処理はＳ１２０に進む。Ｓ１２０では、プログラムコード３０２中の、ループよりも粒度が１段階粗いレベル（この例では「関数」）の実行単位の中から、ＨＷ化対象とするものを１つ選択する。この選択は、Ｓ１１６及びＳ１１８の選択と同様、ランダムであってもよいし、演算量が多いものから優先的に選択するものであってもよい。この例では、関数については、演算量による絞り込み（命令の場合のＳ１１２、ループの場合のＳ１１４）を行っていないが、これは一例に過ぎない。関数についても、Ｓ１２０の前に、同様の絞り込みを行ってもよい。
【００４０】
Ｓ１２０の後、ＨＷ化対象に選択された関数について、ＨＷブロック合成部１０６等によりＳ１２２〜Ｓ１２８の処理が実行される。このＳ１２２〜Ｓ１２８の処理は、前述した命令レベル及びループレベルの実行単位のＨＷ化におけるＳ１２２〜Ｓ１２８の処理と同様なので、説明は省略する。
【００４１】
図３の処理手順により、新たにＨＷブロックの追加及びこの追加に応じたプログラムコード３０２の変更、というシステム構成変更が加えられると、図２におけるＳ１０８の処理が終了し、その変更後のシステム構成に対して、図２のＳ１０２以降の処理が繰り返される。このとき、Ｓ１０２では、ＨＷ／ＳＷ協調動作部１０８は、採用した各ＨＷブロックの回路構成情報と変更後のプログラムコード３０２をターゲットシステム２００にインストールし、その後そのターゲットシステム２００に処理対象データ３０４を入力して処理を開始させる。これに応じ、プロセッサ２０２はその変更後のプログラムコード３０２を実行すると共に、その実行の中でＨＷブロックの呼び出しに行き当たると、再構成可能回路２０４上にそのＨＷブロックを再構成し（ただしそのＨＷブロックが再構成可能回路２０４上に既に構成されている場合は再構成不要）、再構成したＨＷブロックに処理を実行させる。そして、この実行の中で、当該システムの性能を実測し、その実測性能が目標を満たしているかをＳ１０４で判定する。以降の処理は、既に説明した通りである。このようなＳ１０２〜Ｓ１０８の処理の繰り返しの結果、Ｓ１０４で目標性能が達成されると、そのときのシステム構成が最終的な設計結果として採用されることになる。
【００４２】
以上に説明した手順では、Ｓ１２６で、今回新たに選択された実行単位のＨＷ化結果のＨＷブロックがＨＷ制約条件を満たすかどうかを判定したが、これは、再構成可能回路２０４がＤＲＰのように動的に再構成可能な回路である場合の処理である。動的に再構成可能な場合、個々のＨＷブロックが必要になる都度動的に再構成すればよいので、個々のＨＷブロックが再構成可能回路２０４に収まればよい。これに対し、再構成可能回路２０４がＦＰＧＡ等のように動的に再構成できない種類のものである場合は、ＨＷ化対象に選択したすべての実行単位を再構成可能回路２０４上にまとめて構成しなければならない。したがって、この場合には、Ｓ１２６では、過去にＨＷ化した各実行単位のＨＷリソース量の合計に、今回Ｓ１２４でＨＷ化した実行単位のＨＷリソース量を足し合わせたものが、ＨＷ制約条件（再構成可能回路２０４の総リソース量）を満たすかどうかを判定すればよい。
【００４３】
以上に説明したＨＷ／ＳＷ協調設計装置１００は、ＨＷ化した場合の回路規模が小さい細粒度の実行単位から優先的にＨＷ化するので、採用される（すなわち目標性能が達成された時点の）システム構成は、このような細粒度優先の方針をとらない場合よりも、ＨＷ回路の規模が小さくなる。再構成可能回路２０４に実装されるＨＷ回路が小さいほど、ターゲットシステム２００の消費電力が小さくなる。
【００４４】
また、以上に説明したＨＷ／ＳＷ協調設計装置１００は、ＨＷブロックを増やすシステム設計変更を行うごとに、変更後のシステムに処理対象データ３０４を実際に処理させてそのシステムの性能を測定する。このように実際に処理対象データ３０４を処理させるので、構成したＨＷブロックの性能が処理対象データ３０４に依存する場合でも、その性能が正しく測定される。
【００４５】
以上に説明したＨＷ／ＳＷ協調設計装置１００は、例えば、汎用のコンピュータにそれら機能モジュールの処理を表すプログラムを実行させることにより実現される。ここで、コンピュータは、例えば、ハードウエアとして、ＣＰＵ等のマイクロプロセッサ、ランダムアクセスメモリ（ＲＡＭ）およびリードオンリメモリ（ＲＯＭ）等のメモリ（一次記憶）、ＨＤＤ（ハードディスクドライブ）を制御するＨＤＤコントローラ、各種Ｉ／Ｏ（入出力）インタフェース、ローカル・エリア・ネットワークなどのネットワークとの接続のための制御を行うネットワークインタフェース等が、たとえばバスを介して接続された回路構成を有する。また、そのバスに対し、例えばＩ／Ｏインタフェース経由で、ＣＤやＤＶＤなどの可搬型ディスク記録媒体に対する読み取り及び／又は書き込みのためのディスクドライブ、フラッシュメモリなどの各種規格の可搬型の不揮発性記録媒体に対する読み取り及び／又は書き込みのためのメモリリーダライタ、などが接続されてもよい。上に例示した各機能モジュールの処理内容が記述されたプログラムがＣＤやＤＶＤ等の記録媒体を経由して、又はネットワーク等の通信手段経由で、ハードディスクドライブ等の固定記憶装置に保存され、コンピュータにインストールされる。固定記憶装置に記憶されたプログラムがＲＡＭに読み出されＣＰＵ等のマイクロプロセッサにより実行されることにより、上に例示した機能モジュール群が実現される。
【００４６】
以上の例では、ＨＷ／ＳＷ協調設計装置１００がターゲットシステム２００とは別の装置であったが、この代わりに、ＨＷ／ＳＷ協調設計装置１００の機能を記述したプログラムをターゲットシステム２００にインストールし、プロセッサ２０２に実行させてもよい。
【符号の説明】
【００４７】
１００  ＨＷ／ＳＷ協調設計装置、１０１  コード構造解析部、１０３  コード負荷分析部、１０４  ＨＷ化対象選択部、１０６  ＨＷブロック合成部、１０８  ＨＷ／ＳＷ協調動作部、１１０  ＨＷ／ＳＷ設計完了判断部、１１２  性能判定部、１１４  ＨＷリソース判定部、１１６  完了判定部、２００  ターゲットシステム、２０２  プロセッサ、２０４  再構成可能回路、３０２  プログラムコード、３０４  処理対象データ。
【図１】
0005978613.tif 000002
【図２】
0005978613.tif 000003
【図３】
0005978613.tif 000004