【文献】
岩間大介 外3名,動作合成技術を用いたハードウエア/ソフトウエア自動分割技術,電子情報通信学会技術研究報告,社団法人電子情報通信学会,2007年 2月28日,Vol.106,No.547,pp.31−36
(58)【調査した分野】(Int.Cl.,DB名)
プロセッサと再構成可能回路とを備える処理装置に実行させるプログラムコードを解析して、当プログラムコードに含まれる粒度ごとの実行単位を識別するコード解析手段と、
処理対象データを前記プログラムコードにより処理する場合の、前記粒度ごとの前記各実行単位の処理負荷を計算する負荷計算手段と、
計算された前記処理負荷が閾値を超える実行単位を、粒度の細かい実行単位から順に、前記再構成可能回路によるハードウエア化対象に選択する手段であって、ある粒度の実行単位に前記ハードウエア化対象に選択可能なものがなくなった場合には、次に細かい粒度の実行単位の中から前記処理負荷が閾値を超える実行単位を前記ハードウエア化対象に選択する手段と、
前記プログラムコードのうち、ハードウエア化対象に選択された各実行単位を前記再構成可能回路の回路構成として実装し、残りの実行単位を前記プロセッサでのソフトウエア処理対象に割り当てることにより、前記処理装置を、前記プログラムコードを実行するシステムとして構成し、構成したシステムに前記処理対象データを実行させ実行性能を計測する計測手段と、
計測された実行性能が目標性能を満たすまで、前記選択手段による更なるハードウエア化対象の選択と、前記計測手段によるその選択結果に応じた前記システムの再構成及び前記実行性能の計測と、を繰り返す制御を行う制御手段と、
を備えるハードウエア/ソフトウエア協調設計装置。
前記処理装置が備える前記プロセッサが実行するプログラムとして前記処理装置に実装されていることを特徴とする請求項1に記載のハードウエア/ソフトウエア協調設計装置。
【発明の概要】
【発明が解決しようとする課題】
【0004】
本発明は、ハードウエア/ソフトウエア協調システムの目標性能を満たしつつも、本発明を採用しない場合よりも、そのシステムの消費電力を低減することを目的とする。
【課題を解決するための手段】
【0005】
請求項1に係る発明は、プロセッサと再構成可能回路とを備える処理装置に実行させるプログラムコードを解析して、当プログラムコードに含まれる粒度ごとの実行単位を識別するコード解析手段と、処理対象データを前記プログラムコードにより処理する場合の、前記粒度ごとの前記各実行単位の処理負荷を計算する負荷計算手段と、計算された前記処理負荷が閾値を超える実行単位を、粒度の細かい実行単位から順に、前記再構成可能回路によるハードウエア化対象に選択する手段
であって、ある粒度の実行単位に前記ハードウエア化対象に選択可能なものがなくなった場合には、次に細かい粒度の実行単位の中から前記処理負荷が閾値を超える実行単位を前記ハードウエア化対象に選択する手段と、前記プログラムコードのうち、ハードウエア化対象に選択された各実行単位を前記再構成可能回路の回路構成として実装し、残りの実行単位を前記プロセッサでのソフトウエア処理対象に割り当てることにより、前記処理装置を、前記プログラムコードを実行するシステムとして構成し、構成したシステムに前記処理対象データを実行させ実行性能を計測する計測手段と、計測された実行性能が目標性能を満たすまで、前記選択手段による更なるハードウエア化対象の選択と、前記計測手段によるその選択結果に応じた前記システムの再構成及び前記実行性能の計測と、を繰り返す制御を行う制御手段と、を備えるハードウエア/ソフトウエア協調設計装置である。
【0006】
請求項2に係る発明は、前記処理装置が備える前記プロセッサが実行するプログラムとして前記処理装置に実装されていることを特徴とする請求項1に記載のハードウエア/ソフトウエア協調設計装置である。
【0007】
請求項3に係る発明は、コンピュータを、プロセッサと再構成可能回路とを備える処理装置に実行させるプログラムコードを解析して、当プログラムコードに含まれる粒度ごとの実行単位を識別するコード解析手段、処理対象データを前記プログラムコードにより処理する場合の、前記粒度ごとの前記各実行単位の処理負荷を計算する負荷計算手段、計算された前記処理負荷が閾値を超える実行単位を、粒度の細かい実行単位から順に、前記再構成可能回路によるハードウエア化対象に選択する手段
であって、ある粒度の実行単位に前記ハードウエア化対象に選択可能なものがなくなった場合には、次に細かい粒度の実行単位の中から前記処理負荷が閾値を超える実行単位を前記ハードウエア化対象に選択する手段、前記プログラムコードのうち、ハードウエア化対象に選択された各実行単位を前記再構成可能回路の回路構成として実装し、残りの実行単位を前記プロセッサでのソフトウエア処理対象に割り当てることにより、前記処理装置を、前記プログラムコードを実行するシステムとして構成し、構成したシステムに前記処理対象データを実行させ実行性能を計測する計測手段、計測された実行性能が目標性能を満たすまで、前記選択手段による更なるハードウエア化対象の選択と、前記計測手段によるその選択結果に応じた前記システムの再構成及び前記実行性能の計測と、を繰り返す制御を行う制御手段、として機能させるためのプログラムである。
【発明の効果】
【0008】
請求項1又は3に係る発明によれば、ハードウエア/ソフトウエア協調システムの目標性能を満たしつつも、本発明を採用しない場合よりも、そのシステムの消費電力を低減することができる。
【0009】
請求項2に係る発明によれば、処理装置単体で、当該処理装置自身を目標性能を満たし且つ消費電力を低減できるハードウエア/ソフトウエア協調システムとして構成することができる。
【発明を実施するための形態】
【0011】
図1を参照して、この実施形態のハードウエア(HW)/ソフトウエア(SW)協調設計装置100の構成例を説明する。この装置100は、HW/SW協調システムであるターゲットシステム200のシステム構成を設計する。
【0012】
ターゲットシステム200は、この実施形態の装置100による設計処理の対象となるシステムであり、プロセッサ202と再構成可能回路204とを備えている。プロセッサ202は、プログラムを実行するマイクロプロセッサ等の装置である。再構成可能回路204は、内部の論理回路構成を変更可能なハードウエア回路であり、DRP(Dynamic Reconfigurable Processor)のように処理実行中に動的に再構成可能なものであってもよいし、FPGA(Field Programmable Gate Array)のようにシステム起動時に再構成されるものであってもよい。例えば、ターゲットシステム200の一例としては、特開2009−3765号公報に紹介されるDAPDNAアーキテクチャのデバイスがある。このデバイスは、DAPと呼ばれるプロセッサと、DNAと呼ばれる再構成可能回路アレイとから構成されている。ターゲットシステム200は、プロセッサ202によるソフトウエア処理と、再構成可能回路204によるハードウエア処理との組合せにより、目的とする処理機能(言い換えればシステム構成)を実現する。
【0013】
HW/SW協調設計装置100は、目的とする処理機能/システム構成をプログラミング言語(例えばC言語)等で記述したプログラムコード302を入力として受け取る。そして、そのプログラムコード302を解析することで、その処理機能/システム構成をターゲットシステム200上のHWとSWの組合せで実現するためのシステム設計を行う。
【0014】
ここで、HW/SW協調設計装置100は、その設計の際、プログラムコード302の処理の対象である処理対象データ304を考慮する。すなわち、HW/SW協調設計においては、プログラムコード302の中の演算量(すなわち処理負荷の量)の大きい部分はHW回路で実装するが、データ圧縮等、演算量が処理対象データに依存する処理の部分については、処理対象データを考慮する必要がある。例えば、ターゲットシステム200をデジタル印刷装置における画像処理(例えば拡大・縮小、回転、面付け、圧縮・伸張)を実行する装置としてシステム構成する場合、実際に印刷する文書自体は未定であっても、印刷対象の文書の分野(例えばダイレクトメール、帳票等)に応じてどのような文書画像がどのような分布で含まれているのかの傾向がある程度決まってくる。したがって、その傾向に従った文書画像群をテストデータとして用意しておき、そのテストデータを処理対象データ304としてHW/SW協調設計装置100に与えることで、実際の処理対象の文書画像群の傾向に適したシステム構成が設計される。
【0015】
このような設計処理のために、HW/SW協調設計装置100は、コード構造解析部101、コード負荷分析部103、HW化対象選択部104、HWブロック合成部106、HW/SW協調動作部(計測部)108、及びHW/SW設計完了判断部110を備えている。
【0016】
コード構造解析部101は、入力されたプログラムコード302を解析して、そのプログラムコード302の構造を求める。例えば、コード構造解析部101は、プログラムコード302を構文解析(パース)するパーサであり、プログラムコード302の構文解析結果として構文木を出力する。この構文木には、そのプログラムコード302に含まれる個々の命令(単一インストラクション)、複数の命令を含んだ処理ループ、命令や処理ループ等を含んだ関数、等といった、様々な粒度の実行単位の情報が含まれる。なお、ここでいう「粒度」とは、プログラムコード302に含まれる実行単位の大きさの段階のことである。上述した命令、ループ、関数という実行単位同士の間では、「命令」が最も細かい粒度であり、関数が最も粗い粒度であり、ループがそれら両者の中間である。なお、ループが入れ子になっている場合は、入れ子のレベルごとに別の粒度として取り扱ってもよい。例えば、第1のループを中に含んだ第2のループは、第1のループよりも粒度が1段階粗いものとして取り扱うなどである。一般に、粒度が細かい実行単位ほど、その実行単位をHW実装した場合の回路規模は小さい。
【0017】
また、構文木からは、個々の実行単位の入力及び出力となる変数の情報が求められる。
【0018】
コード構造解析部101は、プログラムコード302から検出した実行単位ごとに、当該実行単位の粒度と、当該実行単位の入力及び出力の変数と、を求め、それらの情報を構文木と共に出力してもよい。
【0019】
コード負荷分析部103は、プログラムコード302及び処理対象データ304と、コード構造解析部101の解析結果とに基づき、プログラムコード302に含まれる実行単位ごとに、当該実行単位の演算量(負荷量)を見積もる。この見積もりでは、処理対象データ304を用いることで、そのデータ304を当該プログラムコード302にて処理する場合に、個々の実行単位がそれぞれ何回実行されるのかを求め、その実行回数の情報も加味して演算量を求める。
【0020】
例えば、命令レベルの実行単位の場合、個々の命令を表す予約語に対応づけて当該命令に対応する演算量が登録されたデータベースを用意しておく。すなわち、このデータベースに登録された演算量は、命令の実行1回あたりの演算量である。命令の演算量は、例えば、プロセッサ202が当該命令を実行するのに要する時間の長さ(例えば、秒等の時間単位、あるいはプロセッサ202のサイクル(クロック)数単位)で表される。所要時間が長いほど、演算量は大きい。コード負荷分析部103は、プログラムコード302中に含まれる命令の予約語ごとに、当該予約語に対応する1回当たりの演算量をデータベースから求める。そして、その1回当たりの演算量に対して、処理対象データ304を処理する場合の当該命令の実行回数を乗じることで、当該命令の合計の演算量を求める。なお、この計算の際、プログラムコード302中の異なる場所に同じ命令がある場合、それら各場所にある当該命令の実行回数の総和を、当該命令の実行回数として取り扱う。このような処理により、処理対象データ304を処理するに当たっての、各命令の演算量が求められる。
【0021】
同様に、コード負荷分析部103は、プログラムコード302中の個々のループごとに、そのループに含まれる各命令の1回当たりの演算量を求め、それら演算量の合計をそのループの1回当たりの演算量として求める。そして、このループの1回当たりの演算量に、処理対象データ304を処理する場合の当該ループの実行回数を乗じることで、当該ループの合計の演算量を求める。なお、ループ内にif-elseやswitch-case等の制御構造が含まれている場合は、処理対象データ304をその制御構造に従って処理した場合の当該ループ内の個々の命令の実行回数を考慮して、当該ループの合計の演算量を求める。
【0022】
また、コード負荷分析部103は、プログラムコード302中の個々の関数ごとに、その関数に含まれる各ループ、各命令の1回当たりの演算量を求め、それら演算量の合計をその関数の1回当たりの演算量として求める。関数内にif-elseやswitch-case等の制御構造が含まれている場合は、処理対象データ304をその制御構造に従って処理した場合の当該関数内の個々のループ及び命令の実行回数を考慮して、当該関数の合計の演算量を求める。
【0023】
このようなコード負荷分析部103としては、既存のプロファイラを用いればよい。プロファイラは、プログラムを実際に実行したときの各関数その他の実行単位の実行回数や実行時間等を計測するツールである。
【0024】
コード構造解析部101の解析結果(各実行単位の粒度及び入出力変数等の情報)、及びコード負荷分析部103の求めた各実行単位の演算量は、HW化対象選択部104に入力される。HW化対象選択部104は、それら入力情報に基づき、プログラムコード302中でHW化(すなわち再構成可能回路204上にHW論理回路として実装すること)の対象とする実行単位を選択する。ここで、HW化対象選択部104は、粒度の細かい実行単位から順に実行単位を選択していく。ただし、HW化の効果がある程度以上見込める実行単位しか、選択しない。HW化の効果は、コード負荷分析部103が求めた実行単位の演算量(実行一回当たりではなく、処理対象データ304全体に渡る合計の演算量)によって測る。例えば、演算量があらかじめ定めた閾値を超える実行単位を、HW化の効果が見込める実行単位と判定する等である。また、同じ粒度で演算量が閾値を超える実行単位が複数ある場合、演算量の高い実行単位ほど優先的にHW化対象に選択するようにしてもよい。HW化対象選択部104の選択結果は、HWブロック合成部106に渡される。
【0025】
HWブロック合成部106は、受け取った選択結果が示すHW化対象の実行単位(命令、ループ、又は関数等)を、再構成可能回路204上のプロセッサエレメントの組合せからなる論理回路(HWブロックと呼ぶ)として合成する。この合成処理には、既存の高位合成技術を用いればよい。プログラムコード302のうちHW化しない部分は、プロセッサ202が実行する実行形式のコードに変換される。このようにして生成されたHWブロックと実行形式のコードの組合せが、ターゲットシステム200上に実現されるHW/SW協調システムを規定したものとなる。すなわち、HW化対象選択部104がHW化対象の実行単位を選択し、HWブロック合成部106がその選択結果に応じて合成処理を行うごとに、1つのHW/SW協調システムが設計されることになる。このHWブロック合成部106の合成の結果(すなわち設計結果)は、HW/SW協調動作部108に渡される。
【0026】
HW/SW協調動作部108は、受け取った合成結果に従ってターゲットシステム200を制御することで、ターゲットシステム200上に、プログラムコード302が表すシステム構成を実装したHW/SW協調システムを構成し、構成したシステムに処理対象データ304を入力して実際に処理させる。そして、この処理の際のHW/SW協調システムの性能を計測する。ここで計測する性能は、当該システムの処理速度に関する性能であり、例えば、当該システムが処理対象データ304を処理するのに要した時間(クロック数単位あるいは時間単位等)で表される。
【0027】
HW/SW設計完了判断部110は、HW/SW協調動作部108が計測した性能情報に基づき、HW/SW協調設計を完了してよいかどうかを判断する。大略的には、あらかじめ指定された目標性能が達成されれば設計完了と判断し、そうでなければ、プログラムコード302中でのHW化対象とする実行単位を増やすよう、HW化対象選択部104に指示する。
【0028】
HW/SW設計完了判断部110は、性能判定部112、HWリソース判定部114及び完了判定部116を含む。性能判定部112は、HW/SW協調動作部108が求めた性能を目標性能と比較することで、目標性能が達成されているかどうかを判定する。HWリソース判定部114は、HWブロック合成部106が合成したHWブロックのリソース量が再構成可能回路204内に実装可能な量に収まっているかどうかを判定する。HWブロックのリソース量は、例えば、そのHWブロック(論理回路)を構成するために用いられる再構成可能回路204の要素回路(DRPの場合、プロセッサエレメントと呼ばれる)の数で表される。このリソース量は、HWブロック合成部106がHWブロックを合成した際に判明し、HWリソース判定部114に渡される。HWブロックのリソース量が再構成可能回路204の備えるリソース量を超える場合、そのHWブロックは再構成可能回路204上に実装できない。この場合、今回の設計は不採用とし、HW/SW協調動作部108を動作させない。完了判定部116は、性能判定部112及びHWリソース判定部114の判定結果から、HW/SW協調設計の処理を完了してよいかどうかを判定する。今回の設計が再構成可能回路204上に実装可能とHWリソース判定部114が判定し、かつHW/SW協調動作部108がターゲットシステム200上に実装したその設計の実測性能が目標性能を満たしている場合に、完了判定部116は設計完了と判定する。そうでない場合は、完了判定部116は、HW化対象を増加させる旨の指示をHW化対象選択部104に送る。
【0029】
HW化対象を増やす指示を受け取ったHW化対象選択部104は、細粒度の実行単位から順に、未だHW化していない実行単位の中から、新たな実行単位をHW化対象に選択することで、プログラムコード302を実現するシステムのうちのHW部分を増加させる。そして、今回新たに選択した実行単位をHWブロック合成部106がHWブロックへと合成する。これにより、プログラムコード302のうちHW化された部分が増加したシステム設計ができあがる。HW/SW協調動作部108はこの新たなシステム設計に従ってターゲットシステム200を再構成し、その再構成結果のシステムに処理対象データ304を処理させ、その処理の結果に基づき再度HW/SW設計完了判断部110に設計結果の可否判定を行わせる。完了判定部116が設計完了と判定するまで、このようなHW部分の増加、システム再構成、処理実行、及び設計結果の可否判定の処理ループを繰り返す。そして、設計完了と判定された際の設計情報(すなわち、プログラムコード302のうちのどの実行単位をHW化するかの情報)、又はその設計情報に従って構成されたHW/SW協調システムのシステム構成が、最終的な設計結果として採用される。
【0030】
次に、
図2及び
図3を参照して、HW/SW協調設計装置100を用いた設計処理の手順の一例を説明する。
【0031】
この手順では、
図2に示すように、まずユーザが、プログラムコード302と処理対象データ304を用意すると共に、目標性能とターゲットシステム200のHW制約条件とをHW/SW協調設計装置100に設定する(S100)。目標性能は、例えば、設計するHW/SW協調システムが処理対象データ304を処理するのに要する所要時間の上限として規定される。また、HW制約条件は、再構成可能回路204が備えるリソースの総量(例えば論理回路を構成する要素回路の数)の情報を含んでいる。このリソース量を超えるHW回路は再構成可能回路204上に構成できない。ここで、再構成可能回路204がDRPの場合、処理実行中に回路構成を動的に再構成できるので、HW化対象選択部104で選択される実行単位ごとのHW化回路がそのリソース量以下であれば、いくつの実行単位が選択されたとしても、それら選択された各実行単位をHW化することができる。一方、再構成可能回路204がFPGAのように動的に内部構成を変更できない回路の場合、選択された各実行単位のHW化回路のリソース量の合計が、HW制約条件として指定された再構成可能回路204のリソース総量以下でないと、それら選択された実行単位をHW化することができない。目標性能は性能判定部112に、HW制約条件はHWリソース判定部114に、それぞれ設定される。なお、S100では、この他に、ターゲットシステム200内のプロセッサ202及び再構成可能回路204の動作クロック周波数等のシステム動作条件を設定してもよい。
【0032】
このような初期設定が完了すると、HW/SW協調設計装置100は、HW/SW協調動作を実行する(S102)。初期設定直後の時点では、プログラムコード302中の1つの実行単位もHW化せず、HW/SW協調動作部108がプログラムコード302全体をプロセッサ202に実行させ、処理対象データ304を処理させる。そして、その処理の際のシステム性能(例えば、処理の所要時間)を実測し、そのシステム性能が目標性能を達成(例えば、実測した所要時間が目標性能として指定された上限時間以下となること)したか否かを判定し(S104)、達成していなければ、S106に進む。S106では、プログラムコード302の中に、未だHW化していない、HW可能な実行単位が残っているかどうかを判定し(S106)、残っていればS108のHWブロック化処理に進んで、新たな実行単位のHW化を行い、S102に戻る。残っていなければ、設計不能として設計処理を異常終了する。
【0033】
図3は、HWブロック化処理(S108)の詳細な処理手順の例を示す。この手順では、HW化対象選択部104が、まず、プログラムコード302中の最も粒度が細かい「命令」レベルの実行単位の中に、その演算量が、プログラムコード302全体の演算量(「全演算量」)に対して、あらかじめ定めた閾値割合を超えるもの(これがHW化対象である)があるかどうかを判定する(S112)。ここでの実行単位の演算量及び全演算量は、それぞれ、処理対象データ304全体を処理したときの当該実行単位及びプログラムコード302全体の演算量である。なお、HWブロック化処理(S108)を始める際には、コード構造解析部101及びコード負荷分析部103の処理が終了し、各実行単位の粒度及び演算量は計算済みとなっているものとする。なお、S112でのHW化対象の探索では、既にHW化済みの実行単位、及びHW化不可のラベル(後述)が付された実行単位は、探索の対象から外される(この点は、後述するS114の探索でも同様)。
【0034】
S112で、プログラムコード302中に、全演算量に対する演算量の割合が閾値を超えている命令があると判定された場合、HW化対象選択部104は、そのような命令の中の1つをHW化対象に選択する(S116)。ここで、閾値超えの命令が複数存在する場合には、そのような命令の中からランダムでHW化対象を選択する。また、この代わりに、HW化の効果が高いものから優先的にHW化するために、閾値超えの命令(未HW化のものに限る)のうち最も演算量が多いものをHW化対象に選択してもよい。その後、HWブロック合成部106が、当該選択された実行単位の入力及び出力の変数の情報(この情報はコード構造解析部101の解析結果に含まれる)に基づき、その実行単位をHW回路化した場合の入力及び出力のインタフェースを規定する(S122)。これらインタフェースは、HW/SW協調システムのうちのSW部分が、当該実行単位のHW回路を呼び出して入力データを与える際、及びその入力データに対するそのHW回路の処理結果を受け取る際に用いられる。また、HWブロック合成部106は、選択された実行単位の処理を実行するための回路構成(HWブロック)を合成する(S124)。続いて、HWリソース判定部114が、S124で合成されたHWブロックのリソース量が、HW制約条件である再構成可能回路204のリソース量以内かどうかを判定する(S126)。
【0035】
S126の判定結果が肯定(Yes)の場合、S124で合成したHWブロックを採用する。すなわち、このHWブロックが、プログラムコード302のうちのHW実装部分として追加されることになる。そして、HWブロック合成部106は、プログラムコード302からその採用されたHWブロックに対応する実行単位のコード部分を削除すると共に、S122で規定した入力及び出力のインタフェースを用いて当該実行単位のHWブロックを呼び出す(及び返り値を受け取る)ためのコード部分を追加する。そして、
図3の処理を終了する。これにより、S116で選択された実行単位をHW化した、新たなHW/SW協調システムが設計されたことになる。なお、S126の判定結果が肯定の場合、S116で選択された実行単位にHW化済みのラベルが付される。この後、
図2の処理に戻り、S102にてその新たなシステム設計に従ってHW/SW協調動作部108がターゲットシステム200を再構成し、再構成したシステムに処理対象データ304を実行させる。
【0036】
一方、S126の判定結果が否定(No)の場合、HWブロック合成部106は、S116で選択した実行単位に、HW化不可を示すラベルを付与する(S128)。その後、処理はS112に戻り、命令レベルの実行単位の中から別のHW化対象を探索する。
【0037】
また、
図2及び
図3の処理のループを何度か繰り返しているうちに、プログラムコード302中の、全演算量に対する演算量の割合が閾値を超える命令が、すべてHW化済み又はHW化不可ラベル付与済みとなった場合、S112の判定結果がNoとなる。この場合処理はS114に進む。S114では、プログラムコード302中の、「命令」レベルの次に粒度が細かい「ループ」レベルの実行単位の中から、その演算量がプログラムコード302の全演算量に対して、あらかじめ定めた閾値割合を超えるもの(HW化対象)を探索する。ここで用いる閾値割合は、S112で用いた閾値割合と同じであってもよいし、異なっていてもよい。S114で、プログラムコード302中に全演算量に対する演算量の割合が閾値を超えているループがあると判定された場合、HW化対象選択部104は、そのようなループの中の1つをHW化対象に選択する(S118)。この選択は、S116の選択と同様、ランダムであってもよいし、HW化の効果が高いものから優先的にHW化するために、閾値超えのループ(未HW化のものに限る)のうち最も演算量が多いものを選択するものであってもよい。この後、HWブロック合成部106等によりS122〜S128の処理が実行される。このS122〜S128の処理は、前述した命令レベルの実行単位のHW化におけるS122〜S128の処理と同様なので、詳細な説明は省略する。
【0038】
なお、S124でHW化し且つそのHW化結果のHWブロックがS126でHW制約条件を満たすと判定された「ループ」レベルの実行単位の中に、既により細粒度かつHW化済みの実行単位(この例では命令レベル)が含まれている場合がある。この場合、当該より細粒度の実行単位のHWブロックは、そのループのHWブロックに含まれることになるので、削除してもよい。
【0039】
図2及び
図3の処理のループを何度か繰り返しているうちに、プログラムコード302中の、全演算量に対する演算量の割合が閾値を超えるループが、すべてHW化済み又はHW化不可ラベル付与済みとなった場合、S114の判定結果がNoとなる。この場合処理はS120に進む。S120では、プログラムコード302中の、ループよりも粒度が1段階粗いレベル(この例では「関数」)の実行単位の中から、HW化対象とするものを1つ選択する。この選択は、S116及びS118の選択と同様、ランダムであってもよいし、演算量が多いものから優先的に選択するものであってもよい。この例では、関数については、演算量による絞り込み(命令の場合のS112、ループの場合のS114)を行っていないが、これは一例に過ぎない。関数についても、S120の前に、同様の絞り込みを行ってもよい。
【0040】
S120の後、HW化対象に選択された関数について、HWブロック合成部106等によりS122〜S128の処理が実行される。このS122〜S128の処理は、前述した命令レベル及びループレベルの実行単位のHW化におけるS122〜S128の処理と同様なので、説明は省略する。
【0041】
図3の処理手順により、新たにHWブロックの追加及びこの追加に応じたプログラムコード302の変更、というシステム構成変更が加えられると、
図2におけるS108の処理が終了し、その変更後のシステム構成に対して、
図2のS102以降の処理が繰り返される。このとき、S102では、HW/SW協調動作部108は、採用した各HWブロックの回路構成情報と変更後のプログラムコード302をターゲットシステム200にインストールし、その後そのターゲットシステム200に処理対象データ304を入力して処理を開始させる。これに応じ、プロセッサ202はその変更後のプログラムコード302を実行すると共に、その実行の中でHWブロックの呼び出しに行き当たると、再構成可能回路204上にそのHWブロックを再構成し(ただしそのHWブロックが再構成可能回路204上に既に構成されている場合は再構成不要)、再構成したHWブロックに処理を実行させる。そして、この実行の中で、当該システムの性能を実測し、その実測性能が目標を満たしているかをS104で判定する。以降の処理は、既に説明した通りである。このようなS102〜S108の処理の繰り返しの結果、S104で目標性能が達成されると、そのときのシステム構成が最終的な設計結果として採用されることになる。
【0042】
以上に説明した手順では、S126で、今回新たに選択された実行単位のHW化結果のHWブロックがHW制約条件を満たすかどうかを判定したが、これは、再構成可能回路204がDRPのように動的に再構成可能な回路である場合の処理である。動的に再構成可能な場合、個々のHWブロックが必要になる都度動的に再構成すればよいので、個々のHWブロックが再構成可能回路204に収まればよい。これに対し、再構成可能回路204がFPGA等のように動的に再構成できない種類のものである場合は、HW化対象に選択したすべての実行単位を再構成可能回路204上にまとめて構成しなければならない。したがって、この場合には、S126では、過去にHW化した各実行単位のHWリソース量の合計に、今回S124でHW化した実行単位のHWリソース量を足し合わせたものが、HW制約条件(再構成可能回路204の総リソース量)を満たすかどうかを判定すればよい。
【0043】
以上に説明したHW/SW協調設計装置100は、HW化した場合の回路規模が小さい細粒度の実行単位から優先的にHW化するので、採用される(すなわち目標性能が達成された時点の)システム構成は、このような細粒度優先の方針をとらない場合よりも、HW回路の規模が小さくなる。再構成可能回路204に実装されるHW回路が小さいほど、ターゲットシステム200の消費電力が小さくなる。
【0044】
また、以上に説明したHW/SW協調設計装置100は、HWブロックを増やすシステム設計変更を行うごとに、変更後のシステムに処理対象データ304を実際に処理させてそのシステムの性能を測定する。このように実際に処理対象データ304を処理させるので、構成したHWブロックの性能が処理対象データ304に依存する場合でも、その性能が正しく測定される。
【0045】
以上に説明したHW/SW協調設計装置100は、例えば、汎用のコンピュータにそれら機能モジュールの処理を表すプログラムを実行させることにより実現される。ここで、コンピュータは、例えば、ハードウエアとして、CPU等のマイクロプロセッサ、ランダムアクセスメモリ(RAM)およびリードオンリメモリ(ROM)等のメモリ(一次記憶)、HDD(ハードディスクドライブ)を制御するHDDコントローラ、各種I/O(入出力)インタフェース、ローカル・エリア・ネットワークなどのネットワークとの接続のための制御を行うネットワークインタフェース等が、たとえばバスを介して接続された回路構成を有する。また、そのバスに対し、例えばI/Oインタフェース経由で、CDやDVDなどの可搬型ディスク記録媒体に対する読み取り及び/又は書き込みのためのディスクドライブ、フラッシュメモリなどの各種規格の可搬型の不揮発性記録媒体に対する読み取り及び/又は書き込みのためのメモリリーダライタ、などが接続されてもよい。上に例示した各機能モジュールの処理内容が記述されたプログラムがCDやDVD等の記録媒体を経由して、又はネットワーク等の通信手段経由で、ハードディスクドライブ等の固定記憶装置に保存され、コンピュータにインストールされる。固定記憶装置に記憶されたプログラムがRAMに読み出されCPU等のマイクロプロセッサにより実行されることにより、上に例示した機能モジュール群が実現される。
【0046】
以上の例では、HW/SW協調設計装置100がターゲットシステム200とは別の装置であったが、この代わりに、HW/SW協調設計装置100の機能を記述したプログラムをターゲットシステム200にインストールし、プロセッサ202に実行させてもよい。