(57)【要約】【課題】ハードウェアオフロードエンジンを使用するシステムの設計開発において、どの部分をどのような性能(速度)でハードウェア化すべきかを容易に検証する。【解決手段】システム設計開発支援装置は、ソフトウェアプログラムを処理するソフトウェア処理部、ハードウェアオフロードエンジンを疑似して動作する疑似ハードウェア処理部、並びに、ソフトウェア処理部と疑似ハードウェア処理部とに接続する、情報管理部、及び、外部と接続するインタフェースを備え、ソフトウェア処理部はハードウェアオフロード対象とする複数個の処理を含むソフトウェアプログラムを備え、疑似ハードウェア処理部はハードウェアオフロード対象とする複数個の処理からなるソフトウェアプログラムを備え、ソフトウェア処理部による処理と疑似ハードウェア処理部による処理とが同じ場合に、ソフトウェア処理部の処理に対して疑似ハードウェア処理部による処理を高速に実行する。【選択図】図１
2012008714.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアプログラムを処理するソフトウェア処理部、ハードウェアオフロードエンジンを疑似して動作する疑似ハードウェア処理部、並びに、前記ソフトウェア処理部と前記疑似ハードウェア処理部とに接続する、情報管理部、及び、外部と接続するインタフェースを備えたシステム設計開発支援装置であって、前記ソフトウェア処理部はハードウェアオフロード対象とする複数個の処理を含むソフトウェアプログラムを備え、前記疑似ハードウェア処理部は前記ハードウェアオフロード対象とする複数個の処理からなるソフトウェアプログラムを備え、前記ソフトウェア処理部による処理と前記疑似ハードウェア処理部による処理とが同じ場合に、前記ソフトウェア処理部の処理に対して前記疑似ハードウェア処理部による処理を高速に実行することを特徴とするシステム設計開発支援装置。
【請求項２】
ハードウェアオフロードエンジンの導入を検討する開発対象システムのソフトウェア処理を前記ソフトウェア処理部と前記疑似ハードウェア処理部へ設定し、ハードウェアオフロードの検討対象の処理のみを前記疑似ハードウェア処理部へ設定することを特徴とする請求項１記載のシステム設計開発支援装置。
【請求項３】
前記ソフトウェア処理部の動作スピードを表すサイクルと前記疑似ハードウェア処理部の動作スピードを表すサイクルとを任意の組合せで設定し、前記開発対象システムの動作スピードを検証することを特徴とする請求項２記載のシステム設計開発支援装置。
【請求項４】
前記ソフトウェア処理部は、ハードウェアオフロードの検討対象の前記処理への入力パラメータを、前記疑似ハードウェア処理部に出力し、前記疑似ハードウェア処理部の前記処理の処理結果を使用することを特徴とする請求項２記載のシステム設計開発支援装置。
【請求項５】
前記疑似ハードウェア処理部は、前記ソフトウェア処理部からの前記入力パラメータをトリガーとして前記処理を開始し、前記処理の処理結果を前記ソフトウェア処理部へ出力することを特徴とする請求項４記載のシステム設計開発支援装置。
【請求項６】
前記疑似ハードウェア処理部で、ハードウェアオフロードの検討対象の前記処理を実行するとき、前記疑似ハードウェア処理部は前記処理の実行時間に遅延時間を加えることを特徴とした請求項４記載のシステム設計開発支援装置。
【請求項７】
前記ソフトウェア処理部で、ハードウェアオフロードの検討対象の前記処理を実行するとき、前記ソフトウェア処理部は前記処理の実行時間に遅延時間を加えることを特徴とした請求項４記載のシステム設計開発支援装置。
【請求項８】
ハードウェアオフロードの検討対象の前記処理の先頭を表すフックポイントを予めフックライブラリに登録しておき、前記ソフトウェア処理部は前記フックポイントを参照し、前記処理を前記疑似ハードウェア処理部に実行させることを特徴とする請求項４記載のシステム設計開発支援装置。
【請求項９】
前記疑似ハードウェア処理部の前記処理の処理結果について前記情報管理部を介して、前記ソフトウェア処理部が使用することを特徴とする請求項４記載のシステム設計開発支援装置。
【請求項１０】
前記ソフトウェア処理部と前記疑似ハードウェア処理部に設定する前記処理のソフトウェアプログラムを同じにすることを特徴とする請求項４記載のシステム設計開発支援装置。
【請求項１１】
ハードウェアオフロードの検討対象の前記処理を前記ソフトウェア処理部と前記疑似ハードウェア処理部とに選択的に設定することを特徴とする請求項４記載のシステム設計開発支援装置。
【請求項１２】
ソフトウェアを処理するソフトウェア処理部、ハードウェアオフロードエンジンを疑似して処理する疑似ハードウェア処理部、並びに、前記ソフトウェア処理部と前記疑似ハードウェア処理部とに接続する、情報管理部、及び、外部と接続するインタフェースを備えたシステム設計開発支援装置におけるシステム設計開発支援方法であって、前記ソフトウェア処理部は、ハードウェアオフロード対象とする複数個の処理を含むソフトウェアプログラムを実行し、前記疑似ハードウェア処理部はハードウェアオフロード対象とする複数個の処理を含むソフトウェアプログラムを選択的に実行し、前記ソフトウェア処理部による処理と前記疑似ハードウェア処理部による処理とが同じ場合に、前記ソフトウェア処理部の処理に対して前記疑似ハードウェア処理部による処理を高速に実行することを特徴とするシステム設計開発支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、既存のソフトウェア処理をハードウェアに置き換えるハードウェアオフロードエンジンの設計開発を支援するシステム設計開発支援装置および方法に関する。
【背景技術】
【０００２】
近年のコンピュータ分野では、通信処理、暗号処理などの処理は、汎用ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を用いたソフトウェア処理でおこなうことが主流である。これらの処理で扱う情報量は年々増加の一途をたどっており、それに伴い更に高い処理性能が求められている。
【０００３】
例えば通信処理の分野では、１０ギガビットイーサネット(登録商標)に代表されるネットワークの急速な高速化・広帯域化により、エンドシステムのプロトコル処理性能向上が求められている。１ｂｐｓの通信プロトコルの処理に１Ｈｚの汎用ＣＰＵが必要という経験則が知られているように、現在の数ギガヘルツのプロセッサでは１０ギガビットイーサネットの帯域を占有するだけの高速なプロトコル処理は容易ではない。また、エンド・エンド間の通信性能はボトルネックとなる部分の処理速度によって律速されることから、ボトルネックをどのように解消するかがネットワーク高速化にとって重要な課題となっている。
【０００４】
この問題の対策案の一つとして、従来の汎用ＣＰＵによるソフトウェア処理の一部を専用ハードウェア処理に置き換えることで、処理を高速化及び効率化するハードウェアオフロードエンジンを用いたアクセラレーション技術が注目されており、実際に様々な製品が実用化されている。
【０００５】
ハードウェアオフロードエンジンは、専用ハードウェアの回路並列性を生かして命令をまとめて並列的に処理するため、従来の汎用ＣＰＵが備えるプリミティブな命令の並びにそって、命令を一つひとつ逐次的に処理していたソフトウェア処理に対して遥かに高速な演算を実行することができる。
【０００６】
このようなハードウェアオフロードエンジンをシステムの一部として構成した装置の開発は、従来の汎用ＣＰＵによるソフトウェア処理のみを用いた装置を開発する場合に対して、専用ハードウェアを開発する分、設計開発コストが高くなる。また、一度ハードウェアを作ってしまうとソフトウェアと違い、問題や仕様変更があった場合に機能修正が困難である。このため、ハードウェアオフロードエンジンを開発する際には、開発フェーズの引き戻りがないように、仕様検討や性能検証について十分に吟味する必要がある。しかし、ハードウェアオフロードしたときのシステムの全体性能は、実際にハードウェアオフロードエンジンの製造を待って、完成品をシステムに組込んで動作させなければ検証が難しい。
【０００７】
この問題を解決するために、ハードウェアオフロードエンジンの開発支援のために試作機を作成したり、特許文献１に開示されるようなハードウェア設計情報に基づいて、ハードウェア装置の疑似動作を再現するエミュレータを使用したりして開発が行われている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００４-３０１２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかし、従来おこなっていた試作機やエミュレーションはハードウェア化する部分を確定させた後、ハードウェア化した部分の動作テストに使用するものであり、ソフトウェアのどの部分をハードウェア化するとコスト対性能比がどの程度向上するかといった検証向けではない。そのため、ハードエア化する部分の検討には、複数のソフトウェアとハードウェアの組合せについて、それぞれ検証用の試作機又はハードウェアを開発しなければならない。例えば、試作機を作る場合はソフトウェアの部分とハードウェア化する部分の組合せの分のパターンの数、試作機を開発しなければならない。また、従来のエミュレーションの場合は、ソフトウェアとハードウェアの組み合わせをすべて検証するためには、ソフトウェアのすべての部分をハードウェア化することを想定し、ハードウェア設計情報を作成しなければならない。どちらの場合も検証のためのハードウェアを設計しテストをおこなうため、テストしたものがハードウェア化によるコスト対性能比が良くないと判明した組み合わせが多くなればなるほど開発コストが増加する。更に、ハードウェアオフロードしたことにより、新たに見えてくるボトルネックの問題などを発見した場合、再度ハードウェア設計をやり直さなければならない。
【００１０】
このように、ハードウェアオフロードエンジンの開発では、ソフトウェア処理していた一部をハードウェア化しそれぞれを協調させて動作するため、ソフトウェアのどの部分をハードウェア化するとコスト対性能比がどの程度向上するかの検証が重要となってくる。
【課題を解決するための手段】
【００１１】
本発明の代表的な一例を示せば以下の通りである。すなわち、ソフトウェアプログラムを処理するソフトウェア処理部、ハードウェアオフロードエンジンを疑似して動作する疑似ハードウェア処理部、並びに、ソフトウェア処理部と疑似ハードウェア処理部とに接続する、情報管理部、及び、外部と接続するインタフェースを備えたシステム設計開発支援装置であって、ソフトウェア処理部はハードウェアオフロード対象とする複数個の処理を含むソフトウェアプログラムを備え、疑似ハードウェア処理部はハードウェアオフロード対象とする複数個の処理からなるソフトウェアプログラムを備え、ソフトウェア処理部による処理と疑似ハードウェア処理部による処理とが同じ場合に、ソフトウェア処理部の処理に対して疑似ハードウェア処理部による処理を高速に実行する。
【発明の効果】
【００１２】
本発明によれば、動作スピードが違うソフトウェア処理部と疑似ハードウェア処理部により、ハードウェアオフロードエンジンの導入を検討するシステムのソフトウェア処理をソフトウェア処理部と疑似ハードウェア処理部へ設定し、ハードウェアオフロードしたい処理のみを疑似ハードウェア処理部で処理するようにフックライブラリで設定し、疑似ハードウェア処理部で処理した結果をソフトウェア処理部へ返すことにより、擬似的にハードウェアオフロードエンジンで処理したかのような速度で結果を得ることができる。
【００１３】
これにより、どの部分をどのような性能(速度)でハードウェア化すべきかを容易に検証できる。
【００１４】
また、ソフトウェア処理部と疑似ハードウェア処理部に設定する処理自体は共通であり、ハードウェアオフロードしたいポイントのみ疑似ハードウェア処理部で処理するため、ハードウェアオフロードエンジンを開発する際に、新たに試作機の作成やハードウェア設計をおこなう必要がないことから、検証のためにハードウェアオフロードする部分の組合せを変えた複数個の装置を開発しなくてもよいため、部品コストや開発コストなどの低コスト化が可能であり、ハードウェアオフロードするポイントはフックライブラリの指定を変更するだけでよく、性能・コスト比率が高いオフロードポイントを十分に検討することが容易となり、かつ、実際にシステムを動作させながら検証できるため、そのオフロードにより性能がどのように変化するかを検討可能となる。
【図面の簡単な説明】
【００１５】
【図１】本発明の第１の実施形態におけるシステム設計開発支援装置のハードウェア構成の一例を示すブロック図である。
【図２】本発明の第１の実施形態におけるソフトウェア処理部と疑似ハードウェア処理部の同一の処理に対する動作スピードの違いの一例を示すタイムチャートである。
【図３】本発明の第１の実施形態におけるソフトウェア処理部と疑似ハードウェア処理部の処理の一例を説明するタイムチャートである。
【図４】本発明の第１の実施形態におけるフックポイントを使用したソフトウェア処理部と疑似ハードウェア処理部の接続とフックポイントを管理するフックライブラリの構成の一例を示したブロック図である。
【図５】本発明の第１の実施形態における処理の動作フローを説明するフローチャートである。
【図６】本発明の第２の実施形態の疑似ハードウェア処理部に遅延装置を用いた場合を示す一例のブロック図である。
【図７】本発明の第２の実施形態におけるフックポイントを使用したソフトウェア処理部と疑似ハードウェア処理部の接続とフックポイントを管理するフックライブラリの構成の一例を示したブロック図である。
【図８】本発明の第２の実施形態における疑似ハードウェア処理部に遅延線装置を用いた場合の処理の一例を説明するタイムチャートである。
【図９】本発明の第２の実施形態における処理の動作フローを説明するフローチャートである。
【図１０】本発明の第３の実施形態におけるソフトウェア処理部に遅延時間を挿入した場合の構成の一例を示すブロック図である。
【図１１】本発明の第３の実施形態におけるソフトウェア処理部と疑似ハードウェア処理部の同一の処理に対する動作スピードの違いの一例を示すタイムチャートである。
【図１２】本発明の第３の実施形態におけるソフトウェア処理部と疑似ハードウェア処理部の処理の一例を説明するタイムチャートである。
【図１３】本発明の第４の実施形態におけるシステム設計開発支援装置のハードウェア構成の一例を示すブロック図である。
【図１４】本発明の第４の実施形態におけるフックポイントを管理するフックライブラリの構成の一例を示したブロック図である。
【図１５】本発明の第４の実施形態における処理の動作フローを説明するフローチャートである。
【発明を実施するための形態】
【００１６】
以下、本発明の実施形態を図面に基づいて詳細に説明する。なお、本発明の実施の形態を示す図において、同一部分は同じ符号を付し、繰り返しの説明は省略する。
【００１７】
［第１の実施形態］
図１は、本実施形態のシステム設計開発支援装置１００の一例を示すブロック図である。システム設計開発支援装置１００はソフトウェア処理部１０１、疑似ハードウェア処理部１０２、情報管理部１０３、及び外部インタフェース１０４を備える。なお、システム設計開発支援装置１００は、任意の専用回路、表示パネル、又は記憶素子を備える形態であってもよい。また、システム設計開発支援装置１００は外部インタフェース１０４よりネットワーク１０８を介して対向するシステム設計開発支援装置（以下、対向装置）１０９と接続する形態も取り得る。このとき、対向装置１０９はシステム設計開発支援装置１００と同様の構成、又は外部インタフェース１１０とソフトウェア処理部１１１と情報管理部１１２からなる構成を持つ。
【００１８】
なお、システム設計開発支援装置１００及び対向装置１０９の内部は、それぞれが指定された動作周期で処理を実行している。以下の説明において、動作周期をサイクルと記載する。例えば、ソフトウェア処理部１０１の動作周期の数を表す場合、ソフトウェア処理部１０１の１サイクルと記載し、動作周期の順番を表す場合、ソフトウェア処理部１０１の１サイクル目と記載する。
【００１９】
次に、システム設計開発支援装置１００を構成する要素について説明する。ソフトウェア処理部１０１は、ハードウェアオフローディング対象となるソフトウェア処理を含むシステム設計開発支援装置１００全体のシステムを制御し、ソフトウェアプログラムの記述に従い処理を実行する。例えば、システム設計開発支援装置１００を汎用コンピュータで実現する場合、ソフトウェア処理部１０１はオペレーティングシステムをはじめとした汎用コンピュータ上で動作するアプリケーションを含む各種ソフトウェアプログラムを処理する汎用CPUにあたる。
【００２０】
疑似ハードウェア処理部１０２は、ソフトウェア処理部１０１が持つソフトウェアプログラムと同様のソフトウェアプログラムを持ち、ソフトウェア処理部１０１と同様にそのソフトウェアプログラムを処理、実行する。疑似ハードウェア処理部１０２はソフトウェア処理部１０１と同様のソフトウェアプログラムを処理できれば、そのアーキテクチャはソフトウェア処理部１０１と同様であっても、異なっていてもよい。疑似ハードウェア処理部１０２は、ソフトウェア処理部１０１に対して同じ処理であっても高速に処理する。詳細については図２を用いて後述する。
【００２１】
ソフトウェア処理部１０１及び疑似ハードウェア処理部１０２は前記の通り同一のソフトウェアプログラムを処理できる。ここで、図１ではそのソフトウェアプログラムの機能ごとの単位を処理１０５で示している。この処理１０５が、ソフトウェア処理をハードウェアオフロードし、開発するハードウェアオフロードエンジンで処理する処理単位となる。詳細については図３を用いて後述する。
【００２２】
処理１０５は、フックポイント１０６というポイントで他の処理１０５と区切られる。ソフトウェア処理部１０１のどの処理をハードウェアオフローディングし、疑似ハードウェア処理部１０２で処理するかを、フックポイント１０６を用いて設定する。どのフックポイント１０６をハードウェアオフロード対象とするかを、ソフトウェア処理部１０１内のフックライブラリ１０７で管理、指定する。フックライブラリ１０７の詳細は図４を用いて後述する。
【００２３】
情報管理部１０３は、ソフトウェア処理部１０１及び疑似ハードウェア処理部１０２が使用する情報を管理、記憶するモジュールである。例えばシステム設計開発支援装置１００が汎用コンピュータである場合、情報管理部１０３は汎用コンピュータが持つ記憶装置である。情報管理部１０３は、ソフトウェア処理部１０１が処理を実行するための入力パラメータ及び処理中の一時情報、処理結果を記憶する。ソフトフェア処理部１０１のある処理１０５をハードウェアオフロードした場合、情報管理部１０３は、疑似ハードウェア処理部１０２がその処理１０５を実行するための入力パラメータ及び処理中の一時情報、処理結果を記憶する。また、ソフトウェア処理部１０１と疑似ハードウェア処理部１０２が同時に動作する場合は、情報管理部１０３はそれぞれからの入出力を同時に受け付ける。ただし、このときソフトウェア処理部１０１と疑似ハードウェア処理部１０２が同じ記憶領域に同時に書き込むことを禁止するために排他制御される。情報管理部１０３とソフトウェア処理部１０１及び疑似ハードウェア処理部１０２の接続に関して、ソフトウェア処理部１０１による情報管理部１０３へのアクセススピードに対して、疑似ハードウェア処理部１０２による情報管理部１０３へのアクセススピードが高速になるように構成する。この構成については後述する。これにより、例えば汎用コンピュータの記憶領域へのアクセススピードがホットスポットとなっている場合のエミュレーションが可能となり、これを解決するようなハードウェアオフロードエンジンを開発した場合にどのような影響が出るかをエミュレーションすることができる。
【００２４】
外部インタフェース１０４は、システム設計開発支援装置１００と外部機器を接続するためのインタフェースである。図１では外部機器との接続の一例として、ネットワーク１０８へ接続した場合を示している。なお、システム設計開発支援装置１００とネットワーク１０８との間の接続の形態は有線接続、無線接続を問わない。
【００２５】
次に、ソフトウェア処理部１０１と疑似ハードウェア処理部１０２が同一の処理をした場合の動作の違いについて説明する。図２は、本実施形態におけるソフトウェア処理部１０１と疑似ハードウェア処理部１０２の同一の処理に対する動作スピードの違いの一例を示すタイムチャートである。処理サイクルＡのタイムチャート２００と処理サイクルＢのタイムチャート２０１があり、処理サイクルＡのタイムチャート２００がソフトウェア処理部１０１のサイクルを基準としたサイクル数のタイムチャートを示し、処理サイクルＢのタイムチャート２０１が疑似ハードウェア処理部１０２のサイクルを基準としたサイクル数のタイムチャートを示している。ソフトウェア処理部１０１がある処理を実行するとき、処理サイクルＡ換算でタイムライン２０２に示す処理サイクルがかかるのに対して、疑似ハードウェア処理部１０２が同じ処理をおこなった場合、処理サイクルＡ換算でタイムライン２０３に示す処理サイクルがかかる。疑似ハードウェア処理部１０２の処理サイクルＢ換算で同じ処理を示すと、タイムライン２０４に示す処理サイクルとなる。たとえば、処理サイクルＡのサイクルが処理サイクルＢのサイクルの１０倍であるとすると、処理サイクルＢは処理サイクルＡの１０倍の速さとなる。ゆえに疑似ハードウェア処理部１０２はソフトウェア処理部１０１の１０倍速く同じ処理を実行することとなる。以上のようにすることで、ソフトエア処理部１０１で処理するソフトウェアプログラムをその処理を１０倍の速さで処理できるハードウェアにハードウェアオフロードした場合のエミュレーションを疑似ハードウェア処理部１０２により実現できる。
【００２６】
図２を、システム設計開発支援装置１００を汎用コンピュータで実現する場合を例にして説明する。ある処理１０５をハードウェアオフロードエンジンにより実行した場合の処理時間が１ｍｓであり、同じ処理１０５を開発対象装置のソフトウェアにより実行した場合の処理時間が１０ｍｓであるとする。処理時間の１ｍｓ、１０ｍｓは、過去に開発した類似装置から得られる実測値や経験値、又は新たな設計目標値である。この処理をシステム設計開発支援装置１００としての汎用コンピュータで実行すると、２０ｍｓ要するとする。この実時間の２０ｍｓをハードウェアオフロードエンジンにより実行した場合の処理時間の１ｍｓに対応させ、１０倍の実時間２００ｍｓをソフトウェアにより実行した場合の処理時間の１０ｍｓに対応させる。これが、図２においてサイクルを１ｍｓとした場合の処理サイクルＡに相当する。処理サイクルＢは、処理サイクルＡのサイクルの分解能を１０倍したものに相当する。これは、他の処理をハードウェアオフロードエンジンにより実行した場合の処理時間が、たとえば設計目標値として０．３ｍｓである場合、これを処理サイクルＢの３サイクルで表現するためである。前述の情報管理部１０３へのアクセススピードを問題とするような場合、一連の処理の中で情報管理部１０３へのアクセスを一つの処理ととらえて、分解能を小さくすることにより、精度が高いエミュレーションができる。この場合も、ハードウェアオフロードエンジンにより実行した場合のアクセス時間がソフトウェアにより実行した場合のアクセス時間より短く設定することは、上述の処理１０５の例の場合と同じである。
【００２７】
すなわち、システム設計開発支援装置１００上で決定した所定時間をサイクルとして、開発対象装置の処理をハードウェアオフロードエンジンにより実行した場合の処理時間を所定にサイクル数ｎに対応させ、ソフトウェアにより実行した場合の処理時間をサイクル数ｎのｍ倍に対応させて、システム設計開発支援装置１００はエミュレーションする。ただし、ｍ、ｎは整数値である。このように、開発対象装置の動作時間（１サイクルに対応する実際の動作時間）を、システム設計開発支援装置１００上で決定した所定時間たとえば２０ｍｓをサイクルに対応させることにより、エミュレーションする開発対象装置の動作時間を得ることができる。
【００２８】
次に、ソフトウェア処理部１０１の処理の一部を疑似ハードウェア処理部１０２で疑似ハードウェアオフローディングした場合の動作について説明する。図３は、本実施形態におけるソフトウェア処理部１０１と疑似ハードウェア処理部１０２の処理の一例を説明するタイムチャートである。
【００２９】
図３の処理サイクルはソフトウェア処理部１０１の処理サイクル数換算のタイムチャートである。タイムチャートにはそれぞれ、ハードウェアオフロードを実施していないときのソフトウェア処理部１０１のタイムライン３００と、ハードウェアオフロードを実施したときのソフトウェア処理部１０１のタイムライン３０１と、ハードウェアオフロードを実施したときの疑似ハードウェア処理部１０２のタイムライン３０２を示している。ハードウェアオフロードしない場合は、ソフトウェア処理部１０１は処理０〜処理４を実行し、処理サイクル数２０ですべての処理を完了する。ここで、処理１と処理３をハードウェアオフロードした時をエミュレーションしたとして、ハードウェアオフロードを実施したときのソフトウェア処理部１０１のタイムライン３０１で、処理１と処理３をオフロードし、ハードウェアオフロードを実施したときの疑似ハードウェア処理部１０２のタイムライン３０２で疑似ハードウェアオフロードし処理１と処理３を実行している。なお、説明を簡単にするために、処理１、処理３をオフロードしたときのサイクル数をいずれも１としている。処理１、処理３をオフロードしたとき、ソフトウェア処理部１０１は疑似ハードウェア処理部１０２から処理結果が返ってくるまでソフトウェア処理部１０１から疑似ハードウェア処理部１０２へ処理をオフロードしたときの待ち時間３０３が示す間待ち状態となる。ただし、処理１の結果を用いずに処理２を実行できる一連の処理の場合、ハードウェアオフロードしている間、ソフトウェア処理部１０１の処理をブロックせずに処理１の結果が返ってくる前に処理２を実行するようなノンブロッキングの設定にする。ハードウェアオフロードすることで、処理サイクル数は１５となり、ソフトウェア処理部１０１から処理１と処理３が抜けた分、ソフトウェア処理部１０１にかかる負荷が低減される
次にフックポイント１０６とフックライブラリ１０７を用いたソフトウェア処理部１０１と疑似ハードウェア処理部１０２の接続関係について説明する。図４は、フックポイント１０６を使用したソフトウェア処理部１０１と疑似ハードウェア処理部１０２の接続とフックポイント１０６を管理するフックライブラリ１０７の構成の一例を示したブロック図である。
【００３０】
ここでは、一例としてソフトウェアプログラム４００のｃｈｅｃｋｓｕｍ処理４０１をハードウェアオフロードした場合を示している。ｃｈｅｃｋｓｕｍ処理４０１をハードウェアオフローディングの対象とする場合、フックライブラリ１０７にフックポイント１０６を設定する。
【００３１】
疑似ハードウェア処理を実行する場合、図４でｃｈｅｃｋｓｕｍ処理４０１の入力パラメータとなっているｄａｔａと８をそれぞれ本来入力されるべきソフトウェア処理部１０１のｃｈｅｃｋｓｕｍ処理本体４０２へフックポイント１０６を通して疑似ハードウェア処理部１０２のｃｈｅｃｋｓｕｍ処理本体４０３へソフトウェアプログラム４００が入力する。これにより、ソフトウェア処理１０１上で本来動作するｃｈｅｃｋｓｕｍ処理本体４０２は動作せず、疑似ハードウェア処理部１０２がｃｈｅｃｋｓｕｍ処理４０１を実行する。そして、その結果がフックポイント１０６を介してソフトウェア処理部１０１のソフトウェアプログラム４００に返される。これにより、前記したようにソフトウェア処理部１０１に対して疑似ハードウェア処理部１０２は同じ処理でも高速に処理されたようにエミュレーションされることから、ｃｈｅｃｋｓｕｍ処理４０１はハードウェアオフロードしたときとスピードに対応するスピード（エミュレーション上のサイクル数）で実行されることになる。また、ソフトウェア処理部１０１で処理が実行されないため、本来かかる処理負荷がソフトウェア処理部１０１にかからない。よって、ソフトウェア処理部１０１処理負荷についてもハードウェアオフロードしたときと同様の効果を得ることができる。
【００３２】
フックポイント１０６とフックライブラリ１０７を用いたソフトウェア処理部１０１と疑似ハードウェア処理部１０２の接続は、具体的に次のようにする。ソフトウェアプログラム４００、ソフトウェア処理１０１上で動作するｃｈｅｃｋｓｕｍ処理本体４０２、疑似ハードウェア処理部１０２上で動作するｃｈｅｃｋｓｕｍ処理本体４０３のオブジェクトプログラムから、リンカーなどと呼ばれるソフトウェアが、フックポイント１０６とフックライブラリ１０７をリンケージパラメータと見て、ソフトウェアプログラム４００から疑似ハードウェア処理部１０２上で動作するｃｈｅｃｋｓｕｍ処理本体４０３を実行する(呼び出す)実行プログラムを生成することによって、ソフトウェア処理部１０１と疑似ハードウェア処理部１０２を接続できる。このように予め接続を設定する方法以外に、ソフトウェアプログラム４００の実行に伴って、フックポイント１０６を検出し、フックポイント１０６の検出に応じてフックライブラリ１０７を参照して、疑似ハードウェア処理部１０２上で動作するｃｈｅｃｋｓｕｍ処理本体４０３を実行するように制御してもよい。ただし、この場合もフックポイント１０６をソフトウェアプログラム４００の実行プログラムに埋め込まれるようにしておく必要がある。
【００３３】
次に疑似ハードウェアオフロードする際のシステム設計開発支援装置１００の動作フローについて説明する。図５は、システム設計開発支援装置１００の動作フローを説明するフローチャートの一例である。
【００３４】
システム設計開発支援装置１００が動作を開始（Ｓ５００）すると、ソフトウェア処理部１０１はハードウェアオフロード対象となるフックポイント１０６が設定されているフックライブラリ１０７を読み込む（Ｓ５０１）。フックライブラリ１０７を読み込むとソフトウェア処理部１０１に設定されているソフトウェアプログラムのうち、ハードウェアオフロード対象の処理が実行される場合、その処理は疑似ハードウェア処理部１０２で実行されることとなる。この手順は、前述のフックポイント１０６をソフトウェアプログラム４００の実行プログラムに埋め込む方法である。以上の手順が完了した後、ソフトウェア処理部１０１に設定されたソフトウェアプログラムに沿って処理が開始される。ソフトウェア処理部１０１が処理を読み込み（Ｓ５０２）、ハードウェアオフロード判定をおこない（Ｓ５０３）、ソフトウェア処理部１０１が対象の処理を実行するか（Ｓ５０４）、疑似ハードウェア処理部１０２が対象の処理を実行する（Ｓ５０５）。その後、ソフトウェア処理部１０１が、疑似ハードウェア処理部１０２が実行した処理結果の取得し、情報管理部１０３への反映をおこなう（Ｓ５０６）。ここで、疑似ハードウェア処理部１０２が処理結果を情報管理部１０３へ反映してもよい。結果の処理が終わると、次処理の有無の判定に移行する（Ｓ５０７）。次に処理が有る場合は、ソフトウェア処理部１０１が処理を読み込み（Ｓ５０２）から再度処理が実行され、次に処理がない場合、システム設計開発支援装置１００の動作は完了する（Ｓ５０８）。
【００３５】
以上の構成を用いて、一例としてＴＣＰ／ＩＰを処理するソフトウェアプロトコルスタックの一部をハードウェアオフローディングするＴＯＥ（ＴＣＰ  Ｏｆｆｌｏａｄ  Ｅｎｇｉｎｅ）の開発にシステム設計開発支援装置１００を用いた場合について説明する。
【００３６】
ＴＣＰ／ＩＰのソフトウェアプロトコルスタックの処理は大きく分けて以下の３種類に分類することができる。
【００３７】
１つ目は対称型であり、送信側ホスト及び受信側ホストで完全な対称性を有する処理である。対称型の特徴として、ＴＣＰチェックサム（送信側ホストにおけるチェックサム付加、受信側ホストにおけるチェックサム計算）、パケット順序制御、複数コネクションの管理等が存在する。
【００３８】
２つ目は連携型であり、送信側ホスト及び受信側ホストで相互に連携して行われる処理である。連携型の特徴として、輻輳制御（受信側ホストからのＡＣＫパケットに基づくウィンドウ制御）、フロー制御（受信側ホストからの広告ウィンドウに基づくネットワークへのデータ流量制御）等が存在する。
【００３９】
３つ目は独立型であり、送信側ホストもしくは受信側ホストのどちらか一方でおこなわれる処理である。独立型の特徴として、メモリコピー（送信側ホストにおけるユーザ空間からカーネル空間、もしくは受信側ホストにおけるカーネル空間からユーザ空間へのデータコピー）等が存在する。
【００４０】
これらの種類の処理をハードウェアオフロードの対象とする。
【００４１】
まず、１つ目の対称型の処理についてシステム設計開発支援装置１００を用いて疑似ハードウェアオフロードする場合について説明する。対称型の処理をハードウェアオフロードする場合、対象とする処理への入力と出力にフックポイント１０６を設定し、フックポイント１０６をフックライブラリ１０７に登録する。処理の実行時は、フックライブラリ１０７を参照しハードウェアオフロード対象のフックポイント１０６へ処理が進んだときに、ソフトウェア処理部１０１からその処理の入力パラメータを疑似ハードウェア処理部１０２に出力する。疑似ハードウェア処理部１０２は出力されたパラメータを用いて処理を実行する。疑似ハードウェア処理部１０２で実行される処理動作はソフトウェア処理部１０１で実行される処理動作と同様であるため、出力される処理結果も同様となる。したがって、この処理結果を使用する次の処理がハードウェアオフロード対象でなく、ソフトウェア処理部１０１でおこなわれたとしても問題なく処理できる。
【００４２】
次に、２つ目の連携型についてシステム設計開発支援装置１００を用いて疑似ハードウェアオフロードする場合を説明する。連携型の処理をハードウェアオフロードする場合も対象型と同様に、対象とする処理への入力と出力にフックポイント１０６を設定し、フックポイント１０６をフックライブラリ１０７に登録する。処理の実行時は、フックライブラリ１０７を参照しハードウェアオフロード対象のフックポイント１０６へ処理が進んだときに、ソフトウェア処理部１０１からその処理の入力パラメータを疑似ハードウェア処理部１０２に出力する。疑似ハードウェア処理部１０２は出力されたパラメータを用いて処理を実行する。連携型の場合は、対向装置１０９と通信して受け取ったＡＣＫ番号やウィンドウサイズ等の通信情報を更新するなどの処理をおこなう。このため、疑似ハードウェア処理部１０２はハードウェアオフロードせずにソフトウェア処理部１０１が処理したと同様に通信情報などを更新しなければならないが、情報管理部１０３がこれらの情報を管理し、ソフトウェア処理部１０１と疑似ハードウェア処理部１０２は共通で情報管理部１０３の情報を使用するため、ハードウェアオフロードした場合もしない場合も通信情報の更新等をおこなうことができる。
【００４３】
最後に、３つ目の独立型についてシステム設計開発支援装置１００を用いて疑似ハードウェアオフロードする場合を説明する。独立型の処理をハードウェアオフロードする場合も対象型と同様に、対象とする処理への入力と出力にフックポイント１０６を設定し、フックポイント１０６をフックライブラリ１０７に登録する。処理の実行時は、フックライブラリ１０７を参照しハードウェアオフロード対象のフックポイント１０６へ処理が進んだときに、ソフトウェア処理部１０１からその処理の入力パラメータを疑似ハードウェア処理部１０２に出力する。独立型ではメモリアクセス等、ソフトウェア処理部１０１と情報管理部１０３の間での処理のオフロード等がターゲットとなる。前述の通りソフトウェア処理部１０１と疑似ハードウェア処理部１０２との間では、情報管理部１０３へのアクセススピードに違いがあるため（ソフトウェア処理部１０１からのアクセススピードに対して疑似ハードウェア処理部１０２のアクセススピードが高速）、実体をコピーせずアドレスを渡すように変更するゼロコピー化など実施しているかのようにエミュレーションが可能である。
【００４４】
以上、ＴＣＰ／ＩＰソフトウェアプロトコルスタックの３つのパターンにおけるシステム設計開発支援装置１００を適用した疑似ハードウェアオフロードについて説明した。
【００４５】
本実施形態によれば、システム設計開発支援装置１００はＴＣＰ／ＩＰソフトウェアプロトコルスタックのハードウェアオフロード対象となるそれぞれのパターンについてソフトウェア処理部１０１より疑似ハードウェア処理部１０２へ処理をオフロードすることで、ハードウェアオフロードしたときと同様の効果を得ることができる。
【００４６】
本実施形態によれば、どの部分をどのような性能(速度)でハードウェア化すべきかを容易に検証できる。
【００４７】
［第２の実施形態］
図６は、本実施形態におけるシステム設計開発支援装置１００の一例を示すブロック図である。図６は、第１の実施形態を示す図１とほぼ同様の構成をとるが、疑似ハードウェア処理部１０２に遅延装置６００が追加される。遅延装置６００はソフトウェア処理部１０１からの入力を受け、遅延装置６００に設定された時間だけ遅延させた後にハードウェアオフロードした処理を開始する。
【００４８】
次に、遅延装置６００を追加した場合のソフトウェア処理部１０１と疑似ハードウェア処理部１０２の接続について、フックポイント１０６、フックライブラリ１０７と合わせて説明する。図７は、本実施形態におけるフックポイント１０６を使用したソフトウェア処理部１０１と疑似ハードウェア処理部１０２の接続とフックポイント１０６を管理するフックライブラリ１０７の構成の一例を示したブロック図である。
【００４９】
図７は、第１の実施形態を示す図４とほぼ同様であるが、ソフトウェア処理部１０１内のフックライブラリ１０７に遅延時間７００の情報が追加されている。また、疑似ハードウェア処理部１０２に遅延装置６００が追加されている。
【００５０】
本実施形態では、ソフトウェア処理部１０１よりハードウェアオフロードした処理を疑似ハードウェア処理部１０２に渡すとき、フックライブラリ１０７の対応したフックポイント１０６に対応付けられた遅延時間７００をパラメータとして渡す。疑似ハードウェア処理部１０２はソフトウェア処理部１０１から入力された情報を、始めに遅延装置６００に渡す。遅延装置６００で遅延時間７００に設定された時間経過後、疑似ハードウェア処理部１０２は処理を実行し結果をソフトウェア処理部１０１に出力する。遅延時間７００はフックポイント１０６ごとに異なる値に設定してもよいし、同一でもよい。
【００５１】
次に、ソフトウェア処理部１０１の処理の一部を疑似ハードウェア処理部１０２で疑似ハードウェアオフローディングした場合の動作について説明する。図８は、本実施形態における疑似ハードウェア処理部１０２に遅延装置６００を用いた場合の処理の一例を説明するタイムチャートである。
【００５２】
図８の処理サイクルはソフトウェア処理部１０１の処理サイクル数換算のタイムチャートである。タイムチャートにはそれぞれ、ハードウェアオフロードを実施していないときのソフトウェア処理部１０１のタイムライン８００と、ハードウェアオフロードを実施したときのソフトウェア処理部１０１のタイムライン８０１と、ハードウェアオフロードを実施したときの遅延装置６００のタイムライン８０２と、ハードウェアオフロードを実施したときの疑似ハードウェア処理部１０２のタイムライン８０３を示している。
【００５３】
ハードウェアオフロードしない場合は、ソフトウェア処理部１０１は処理０〜処理４を実行し、処理サイクル数２０ですべての処理を完了する。ここで、処理１と処理３をハードウェアオフロードした時をエミュレーションしたとして、ハードウェアオフロードを実施したときのソフトウェア処理部１０１のタイムライン８０１で処理１と処理３をオフロードし、遅延装置６００で設定された遅延時間７００経過した後、ハードウェアオフロードを実施したときの疑似ハードウェア処理部１０２のタイムライン８０３で疑似ハードウェアオフロードし処理１と処理３を実行している。
【００５４】
ここで、ハードウェアオフロードを実施したときの遅延装置６００のタイムライン８０２に示すように、遅延装置６００はハードウェアオフロード対象となる処理１、処理３に遅延時間７００を付加するが、遅延時間７００は処理によって変更することができ、例えば図８では、処理１のハードウェアオフロードには遅延時間７００を付加し、処理３には遅延時間７００を付加しないことを示している。図８では、遅延時間を、ソフトウェア処理部１０１のサイクルを単位として示しているが、疑似ハードウェア処理部１０２のサイクルを単位としてもよい。遅延時間７００を処理によって別々に設定できるようにすることで、処理１と処理３を異なるサイクルで動作するハードウェアにハードウェアオフロードする場合等のエミュレーションが可能となる。また、処理１をおこなわないで任意の遅延時間７００が経過した後、処理成功したという情報をソフトウェア処理部１０１へ返すようにすることも可能である。
【００５５】
以上のように、遅延時間７００の設定により、任意のサイクル数で処理させることが可能となり、開発するハードウェアオフロードエンジンがどの程度の処理性能を持つとどの程度システム全体の動作負荷、性能が変化するかをエミュレーションすることが可能となる。
【００５６】
処理１、処理３をオフロードしたとき、ソフトウェア処理部１０１は疑似ハードウェア処理部１０２から処理結果が返ってくるまでソフトウェア処理部１０１から疑似ハードウェア処理部１０２へ処理をオフロードしたときの待ち時間８０４が示す間待ち状態となる。ただし、処理１の結果を用いずに処理２を実行できる一連の処理の場合、ハードウェアオフロードしている間、ソフトウェア処理部１０１の処理をブロックせずに処理１の結果が返ってくる前に処理２を実行するようなノンブロッキングの設定にすることも可能とする。ハードウェアオフロードすることで、処理サイクル数は１６となり、ソフトウェア処理部１０１から処理１と処理３が抜けた分、ソフトウェア処理部１０１にかかる負荷が低減される。
【００５７】
次に疑似ハードウェアオフロードする際の動作フローについて説明する。図９は、本実施形態における処理の動作フローを説明するフローチャートの一例である。
【００５８】
システム設計開発支援装置１００が動作を開始すると（Ｓ５００）、ソフトウェア処理部１０１はハードウェアオフロード対象となるフックポイント１０６が設定されているフックライブラリ１０７を読み込む（Ｓ５０１）。フックライブラリ１０７を読み込むとソフトウェア処理部１０１に設定されているソフトウェアプログラムのうち、ハードウェアオフロード対象の処理が実行される場合、その処理は疑似ハードウェア処理部１０２で実行されることとなる。以上の手順が完了した後、ソフトウェア処理部１０１に設定されたソフトウェアプログラムに沿って処理が開始される。ソフトウェア処理部１０１が処理を読み込み（Ｓ５０２）、ハードウェアオフロード判定をおこない（Ｓ５０３）、ソフトウェア処理部１０１が対象の処理を実行するか（Ｓ５０４）、フックライブラリ１０７に設定された遅延時間７００だけ遅延処理をおこない（Ｓ９００）、疑似ハードウェア処理部１０２が対象の処理を実行する（Ｓ５０５）。その後、ソフトウェア処理部１０１が、疑似ハードウェア処理部１０２が実行した処理結果の取得し、情報管理部１０３への反映をおこない（Ｓ５０６）、次処理の有無の判定に移行する（Ｓ５０７）。次に処理が有る場合は、ソフトウェア処理部１０１が処理を読み込み（Ｓ５０２）から再度処理が実行され、次に処理がない場合、システム設計開発支援装置１００の動作は完了する（Ｓ５０８）。
【００５９】
本実施形態によれば、システム設計開発支援装置１００の疑似ハードウェア処理部１０２へ遅延装置６００を設定し、処理によって異なる遅延時間７００を設定できるようにすることで、処理を複数個の異なるハードウェアにハードウェアオフロードしたときと同様の効果をエミュレーションすることができる。また、遅延時間７００を任意の組合せで様々に設定することで、ハードウェアオフロードしたときにハードウェアオフロードエンジンがどの程度の処理スピードで処理をおこなうことで、システム全体にどの程度の効果が出るかを検証することができる。
【００６０】
［第３の実施形態］
図１０は、本実施形態におけるシステム設計開発支援装置１００の一例を示すブロック図である。図１０は、第１の実施形態を示す図１とほぼ同様の構成をとるが、ソフトウェア処理部１０１の処理１０５の間に遅延時間１０００が挿入される。
【００６１】
次に、本実施形態でソフトウェア処理部１０１と疑似ハードウェア処理部１０２が同一の処理をした場合の違いについて説明する。図１１は、本実施形態におけるソフトウェア処理部１０１と疑似ハードウェア処理部１０２の同一の処理に対する動作スピードの違いの一例を示すタイムチャートである。図１１のタイムチャートでは、ソフトウェア処理部１０１と疑似ハードウェア処理部１０２は同じサイクルで動作する。本実施形態では、ソフトウェア処理部１０１はひとつの処理を完了するのに処理時間１１００（１０サイクル）かかる。処理時間１１００は処理時間１１０１(５サイクル)と遅延時間１１０２(５サイクル)の合計である。ソフトウェア処理部１０１の実際の処理時間１１０１と疑似ハードウェア処理部１０２の処理時間１１０３は同じであり、双方同じ処理を同じサイクル数で完了することとし、処理性能は同じとする。第１の実施形態と第２実施の形態では、ソフトウェア処理部１０１に対して疑似ハードウェア処理部１０２の動作サイクルを高速にし、処理スピード差をつけていたが、本実施形態では、ソフトウェア処理部１０１に遅延時間１１０２を設定することにより、ソフトウェア処理部１０１の処理スピードより疑似ハードウェア処理部１０２の処理スピードが遅延時間１１０２の分だけ速くなるように設定する。
【００６２】
次に、ソフトウェア処理部１０１の処理の一部を疑似ハードウェア処理部１０２で疑似ハードウェアオフローディングした場合の動作について説明する。図１２は、本実施形態におけるソフトウェア処理部１０１と疑似ハードウェア処理部１０２の処理の一例を説明するタイムチャートである。
【００６３】
前記の通り、本実施形態では、ソフトウェア処理部１０１と疑似ハードウェア処理部１０２は同じ処理サイクルで動作する。
【００６４】
タイムチャートにはそれぞれ、ハードウェアオフロードを実施していないときのソフトウェア処理部１０１のタイムライン１２００と、ハードウェアオフロードを実施したときのソフトウェア処理部１０１のタイムライン１２０１と、ハードウェアオフロードを実施したときの疑似ハードウェア処理部１０２のタイムライン１２０２を示している。ハードウェアオフロードしない場合は、ソフトウェア処理部１０１は処理０〜処理４を実行し、処理サイクル２０ですべての処理を完了する。これに対して、処理１と、処理２と、処理３をハードウェアオフロードした時をエミュレーションしたとして、ハードウェアオフロードを実施したときのソフトウェア処理部１０１のタイムライン１２０１では処理０と処理４を実行し、疑似ハードウェア処理部１０２のタイムライン１２０２では疑似ハードウェアオフロードした処理１と、処理２と、処理３を実行している。
【００６５】
ソフトウェア処理部１０１の処理には遅延時間１２０３（１サイクル）が付加されており、疑似ハードウェア処理部１０２には、遅延時間１２０３が付加されていないため、遅延時間１２０３の分だけ、疑似ハードウェア処理部１０２が速く処理できる。
【００６６】
処理１、処理２、処理３をオフロードしたとき、ソフトウェア処理部１０１は疑似ハードウェア処理部１０２から処理結果が返ってくるまでソフトウェア処理部１０１から疑似ハードウェア処理部１０２へ処理をオフロードしたときの待ち時間１２０４が示す間待ち状態となる。ハードウェアオフロードすることで、処理サイクルは１７となり、ソフトウェア処理部１０１から処理１と、処理２と、処理３が抜けた分、ソフトウェア処理部１０１にかかる負荷が低減される。
【００６７】
本実施形態の処理の動作フローチャートは図５に示した第１の実施形態の処理の動作フローチャートと同様であり、同じ手順で動作する。
【００６８】
本実施形態によれば、システム設計開発支援装置１００のソフトウェア処理部１０１へ遅延時間１０００を設定することで、ソフトウェア処理部１０１と疑似ハードウェア処理部１０２が同一のモジュールで動作スピードに差がない構成の場合でも、ソフトウェア処理部１０１と疑似ハードウェア処理部１０２に動作スピードの差を付けることができ、ハードウェアオフロードした状態のエミュレーションを実施できる。さらに、遅延時間１０００を任意の値に設定することで、ハードウェアオフロードしたときにハードウェアオフロードエンジンがどの程度の処理スピードで処理をおこなうことで、システム全体にどの程度の効果が出るかを検証することができる。
【００６９】
［第４の実施形態］
図１３は、本実施形態におけるシステム設計開発支援装置１００のハードウェア構成の一例を示すブロック図である。図１３は、第１の実施形態を示す図１とほぼ同様の構成をとるが、システム設計開発支援装置１００に性能解析部１３００、対向装置１０９に対向性能解析部１３０１を追加する。
【００７０】
性能解析部１３００は設定した要求性能を満たすように自動的にハードウェアオフロードする対象となるフックポイント１０６の組合せを変更し、最適な構成をさがす機能を持つ。また、対向装置１０９の対向性能解析部１３０１と連携し、対向性能解析部１３０１から渡されたハードウェオフロードしたときの測定結果を取得し、これも加味して最適な構成をさがす。
【００７１】
次に、フックポイント１０６の組合せをどのように管理するかについて説明する。図１４は、本実施形態におけるフックポイント１０６を管理するフックライブラリ１０７の構成の一例を示したブロック図である。フックライブラリ１０７はフックポイント１０６の有効無効を設定するフックポイント１０６の有効無効フラグ１４００を持つ。このフラグが有効の場合、その処理はハードウェアオフロードすることとなる。このフックポイント１０６の有効無効フラグ１４００を性能解析部１３００が変更することによって、有効となるフックポイント１０６の組合せが変化し、それに伴いハードウェアオフロードされる処理が変化し、システム設計開発支援装置１００の処理性能が変化する。
【００７２】
また、フックライブラリ１０７は対象フックポイント１０６をハードウェア化したときにかかるコストスコア１４０１等を持つ構成もある。例えば、このコストスコアはフック対象が何個の加算器を含むか等の処理内容から計算する。性能解析部１３００はシステム設計開発支援装置１００の性能とコストスコア１４０１の計算をおこない、最適なハードウェアオフロードエンジンの構成を探す。
【００７３】
次に、疑似ハードウェアオフロードする際の動作フローについて説明する。図１５は、本実施形態における処理の動作フローを説明するフローチャートである。
【００７４】
システム設計開発支援装置１００が動作を開始すると（Ｓ５００）、ソフトウェア処理部１０１はハードウェアオフロード対象となるフックポイント１０６が設定されているフックライブラリ１０７を読み込む（Ｓ５０１）。フックライブラリ１０７を読み込むとソフトウェア処理部１０１に設定されているソフトウェアプログラムのうち、ハードウェアオフロード対象の処理が実行される場合、その処理は疑似ハードウェア処理部１０２で実行されることとなる。以上の手順が完了した後、ソフトウェア処理部１０１に設定されたソフトウェアプログラムに沿って処理が開始される。ソフトウェア処理部１０１が処理を読み込み（Ｓ５０２）、ハードウェアオフロード判定をおこない（Ｓ５０３）、ソフトウェア処理部１０１が対象の処理を実行するか（Ｓ５０４）、疑似ハードウェア処理部１０２が対象の処理を実行する（Ｓ５０５）。その後、ソフトウェア処理部１０１が処理結果の取得と情報管理部１０３への反映をおこなう（Ｓ５０６）。ここで、疑似ハードウェア処理部１０２が処理結果を情報管理部１０３へ反映してもよい。結果の処理が終わると、次処理の有無の判定に移行する（Ｓ５０７）。次に処理が有る場合は、ソフトウェア処理部１０１が処理を読み込み（Ｓ５０２）から再度処理が実行され、次に処理がない場合、性能解析部１３００が対向性能解析部１３０１の情報を取得し（Ｓ１５００）、ソフトウェアプログラムの処理をハードウェアオフロードエンジン化したときの性能とその部分のハードウェアオフロードエンジンを設計開発するときのコストからスコアの計算をおこない（Ｓ１５０１）、例えばあらかじめ設定された目標のスコアなどと比較し、性能解析の継続判定をおこなう（Ｓ１５０２）。継続する場合は、フックライブラリ１０７の更新をおこない（Ｓ１５０３）どのフックポイント１０６をハードウェアオフロードするかを選択的に決定し、再度更新したフックライブラリ１０７を読み込み（Ｓ５０１）、処理を継続する。継続しない場合は、システム設計開発支援装置１００の動作は完了する（Ｓ５０８）。
【００７５】
本実施形態によれば、システム設計開発支援装置１００へ性能解析部１３００を設置することで、ソフトウェア処理のうち、どの部分をハードウェアオフロードするかの組合せを自動で組み替えながら評価することができる。これにより、実際にハードウェアオフロードエンジンや試作機、処理に合わせたハードウェア装置の疑似動作を再現するエミュレータを設計、開発することなく性能向上・コスト比率が高いオフロードポイントを十分に検討すること容易となり、検証用の部品コストや開発コストなどの低コスト化が可能となる。
【００７６】
さらに、実際にシステムを動作させながら性能向上比率対コスト比率を評価、検証できるため、対象の処理をオフロードしたことによりシステムにどのような影響が出るか、また、対象の処理をオフロードしたことにより新たなホットスポットが生まれるかをハードウェア開発前に検証でき、開発する製品の品質向上が可能となる。
【符号の説明】
【００７７】
１００：システム設計開発支援装置、１０１：ソフトウェア処理部、１０２：疑似ハードウェア処理部、１０３：情報管理部、１０４：外部インタフェース、１０５：処理、１０６：フックポイント、１０７：フックライブラリ、１０８：ネットワーク、１０９：対向装置、１１０：外部インタフェース、１１１：ソフトウェア処理部、１１２：情報管理部、２００：処理サイクルＡのタイムチャート、２０１：処理サイクルＢのタイムチャート、２０２：処理サイクルＡ換算のソフトウェア処理部のタイムライン、２０３：処理サイクルＡ換算の疑似ハードウェア処理部のタイムライン、２０４：処理サイクルＢ換算の疑似ハードウェア処理部のタイムライン、３００：ソフトウェア処理部のタイムライン（ハードウェアオフロードなし）、３０１：ソフトウェア処理部のタイムライン（ハードウェアオフロードあり）、３０２：疑似ハードウェア処理部のタイムライン（ハードウェアオフロードあり）、３０３：処理完了待ち時間、４００：ソフトウェアプログラム、４０１：ｃｈｅｃｋｓｕｍ処理、４０２：ソフトウェア処理部のｃｈｅｃｋｓｕｍ処理本体、４０３：疑似ハードウェア処理部のｃｈｅｃｋｓｕｍ処理本体、６００：遅延装置、７００：遅延時間、８００：ソフトウェア処理部のタイムライン（ハードウェアオフロードなし）、８０１：ソフトウェア処理部のタイムライン（ハードウェアオフロードあり）、８０２：遅延装置のタイムライン（ハードウェアオフロードあり）、８０３：疑似ハードウェア処理部のタイムライン（ハードウェアオフロードあり）、８０４：処理完了待ち時間、１０００：遅延時間、１１００：ソフトウェア処理部の処理時間、１１０１：ソフトウェア処理部の実際の処理時間、１１０２：ソフトウェア処理部の遅延時間、１１０３：疑似ハードウェア処理部の処理時間、１２００：ソフトウェア処理部のタイムライン（ハードウェアオフロードなし）、１２０１：ソフトウェア処理部のタイムライン（ハードウェアオフロードあり）、１２０２：疑似ハードウェア処理部のタイムライン（ハードウェアオフロードあり）、１２０３：遅延時間、１２０４：処理完了待ち時間、１３００：性能解析部、１３０１：対向性能解析部、１４００：フックポイントの有効無効フラグ、１４０１：コストスコア。
【図１】
2012008714.tif 000003
【図２】
2012008714.tif 000004
【図３】
2012008714.tif 000005
【図４】
2012008714.tif 000006
【図５】
2012008714.tif 000007
【図６】
2012008714.tif 000008
【図７】
2012008714.tif 000009
【図８】
2012008714.tif 000010
【図９】
2012008714.tif 000011
【図１０】
2012008714.tif 000012
【図１１】
2012008714.tif 000013
【図１２】
2012008714.tif 000014
【図１３】
2012008714.tif 000015
【図１４】
2012008714.tif 000016
【図１５】
2012008714.tif 000017