(57)【要約】【課題】整数・固定小数点化における変数のビット幅等の型の属性検討の際、検討時間を削減する技術を提供する。【解決手段】対象変数の属性がパラメータ化され、コンパイルされたプログラムを読み込む読み込み手段と、前記読み込み手段により読み込まれたプログラムに基づく処理の実行時に、属性に関するパラメータ情報に基づいて、前記プログラムの対象変数の属性に属性値を設定する設定手段と、前記設定手段により属性値が設定されたプログラムに基づいて処理を実行する実行手段と、を有することによって課題を解決する。【選択図】図５
2015007820.tif 000002
【特許請求の範囲】
【請求項１】
対象変数の属性がパラメータ化され、コンパイルされたプログラムを読み込む読み込み手段と、
前記読み込み手段により読み込まれたプログラムに基づく処理の実行時に、属性に関するパラメータ情報に基づいて、前記プログラムの対象変数の属性に属性値を設定する設定手段と、
前記設定手段により属性値が設定されたプログラムに基づいて処理を実行する実行手段と、
を有する情報処理装置。
【請求項２】
第１の型における変数を含む第１のプログラムと、対象変数を示す変数情報とに基づいて、第２の型における対象変数の属性をパラメータ化したプログラムを作成する作成手段を更に有し、
前記読み込み手段は、前記作成手段により作成されたプログラムがコンパイルされたプログラムを読み込む請求項１記載の情報処理装置。
【請求項３】
前記作成手段は、第１の型である浮動小数点型の変数を含む第１のプログラムと、前記変数情報とに基づいて、第２の型である固定小数点型の対象変数の属性をパラメータ化したプログラムを作成する請求項２記載の情報処理装置。
【請求項４】
前記作成手段は、前記第１のプログラムと、前記変数情報とに基づいて、対象変数の型をパラメータ化すると共に、対象変数の属性をパラメータ化したプログラムを生成し、
前記設定手段は、前記対象変数の型と、前記属性とに係るパラメータ情報に基づいて、前記対象変数の型を設定し、前記設定した型における対象変数の属性に属性値を設定する請求項２記載の情報処理装置。
【請求項５】
前記実行手段は、前記属性値が設定されたプログラムに基づくシミュレーションに係る演算処理を実行し、
前記実行手段により実行された処理に係るシミュレーション結果情報に基づいて、前記対象変数の属性に設定された属性値を設定値として決定するか否かを判定する判定手段を更に有する請求項２乃至４何れか１項記載の情報処理装置。
【請求項６】
前記判定手段は、前記第１のプログラムの実行結果情報と、前記シミュレーション結果情報とに基づいて、精度を算出し、前記算出した精度が予め定められた閾値以上であるか否かに基づいて、前記対象変数の属性に設定された属性値を設定値として決定するか否かを判定する請求項５記載の情報処理装置。
【請求項７】
前記実行手段により実行された処理に係るシミュレーション結果情報が複数ある場合、予め設定された目的関数に応じて前記シミュレーション結果情報を出力する出力手段を更に有し、
前記判定手段は、前記出力手段により出力されたシミュレーション結果情報に基づくユーザの指示に基づいて、前記対象変数の属性に設定された属性値を設定値として決定するか否かを判定する請求項５載の情報処理装置。
【請求項８】
前記判定手段により決定すると判定された場合、前記設定された属性値に係る属性値情報に基づいて、前記第１のプログラムを変換して第２の型に係る第２のプログラムを生成する生成手段を更に有する請求項５乃至７何れか１項記載の情報処理装置。
【請求項９】
前記判定手段により決定しないと判定された場合、前記設定手段は、前記パラメータ情報に基づいて対象変数に設定する属性値を変更して設定する請求項５乃至７何れか１項記載の情報処理装置。
【請求項１０】
変数を示す変数情報と、前記変数の属性値情報とを対応付けたパラメータ情報を作成するパラメータ情報作成手段を更に有し、
前記設定手段は、前記対象変数の属性に基づいて前記パラメータ情報作成手段により作成されたパラメータ情報から属性値情報を取得し、前記取得した属性値情報に係る属性値を前記対象変数の属性に設定する請求項１乃至９何れか１項記載の情報処理装置。
【請求項１１】
前記パラメータ情報作成手段は、前記変数情報と、前記変数の属性値の範囲に係る属性値情報とを対応付けたパラメータ情報を作成する請求項１０記載の情報処理装置。
【請求項１２】
情報処理装置が実行する情報処理方法であって、
対象変数の属性がパラメータ化され、コンパイルされたプログラムを読み込む読み込みステップと、
前記読み込みステップにより読み込まれたプログラムに基づく処理の実行時に、属性に関するパラメータ情報に基づいて、前記プログラムの対象変数の属性に属性値を設定する設定ステップと、
前記設定ステップにより属性値が設定されたプログラムに基づいて処理を実行する実行ステップと、
を含む情報処理方法。
【請求項１３】
コンピュータに、
対象変数の属性がパラメータ化され、コンパイルされたプログラムを読み込む読み込みステップと、
前記読み込みステップにより読み込まれたプログラムに基づく処理の実行時に、属性に関するパラメータ情報に基づいて、前記プログラムの対象変数の属性に属性値を設定する設定ステップと、
前記設定ステップにより属性値が設定されたプログラムに基づいて処理を実行する実行ステップと、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法及びプログラムに関する。
【背景技術】
【０００２】
画像処理等の信号処理プログラムのアルゴリズム開発は、浮動小数点演算を使って行われることが多い。ユーザは、ハードウェア設計段階において、開発されたアルゴリズムをハードウェアに実装する検討を行う。この際に、ユーザは、従来、Ｃ言語のプログラム等を用いた浮動小数点演算で記述されたリファレンスプログラムから、ビット幅固定となる整数・固定小数点数演算で記述されたプログラムへ人手で変換を行っている。
ユーザは、浮動小数点演算のプログラムを整数・固定小数点演算のプログラムに人手で変換する場合、ハードウェア記述言語の一種であるＳｙｓｔｅｍＣという、Ｃ＋＋言語のコンパイラでコンパイルすることが可能なクラスライブラリを用いる場合がある。ＳｙｓｔｅｍＣのクラスライブラリは、ｓｃ＿ｉｎｔという整数・固定小数点変換を支援する型を提供している。ｓｃ＿ｉｎｔ型は、プログラムコード上の型にＣ＋＋言語が提供する機能であるテンプレートを用いて、ビット幅を固定的に定義する。このため、ユーザは、ビット幅を変更して実行結果を得たい場合、プログラムコードを変更し、再度コンパイルしてオブジェクトプログラムを生成するといった手間が発生する。
浮動小数点を用いたプログラムの整数・固定小数点を用いたプログラムへの変換を支援する方法として、以下のような手法が開示されている。
【０００３】
特許文献１では、以下に示す技術が開示されている。まず、特許文献１に開示されている技術は、整数・固定小数点を用いたプログラムへの変換のためのビット幅等の属性値を探索する前処理として、固定小数点のビット幅等の属性値に設定する初期値を決定する。特許文献１に開示されている技術は、浮動小数点プログラムの変数に代入される値の履歴を取得し、代入される値の絶対値の最大値、最小値から初期値を決定する。特許文献１に開示されている技術は、決定した初期値を用いて、整数・固定小数点変数を用いたプログラムを作成し、作成したプログラムをコンパイルし、コンパイルしたプログラムを実行し、実行結果が所望の精度を満たしているか評価する。特許文献１に開示されている技術は、評価の結果が所望の精度を満たしていない場合、再度ビット幅等の属性値を変更するために、プログラムを修正し、修正したプログラムをコンパイルし、再びコンパイルしたプログラムを実行して実行結果の評価を行う。このように、特許文献１に開示されている技術は、プログラムの修正、コンパイル、実行結果の評価という試行を繰り返すことで、整数・固定小数点の属性値を決定する。
特許文献２では、浮動小数点を用いたプログラムで利用されている数要素を抽出し、プログラム中の代入式や、演算式を解析し、それぞれの数要素の関係情報に基づいて、数要素のデータ型の属性値を決定する技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−３３７２９号公報
【特許文献２】特開２００１−１０１０１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
プログラム中の浮動小数点型変数を固定小数点型変数に手動で変換する場合、ユーザはビット幅を変更するたびに、プログラムを書き換え、再コンパイルする必要がある。
特許文献１に開示されている技術は、自動で変数のビット幅を決定するが、変数毎に精度評価を行い、ビット幅を決定していく。しかし、実行結果の評価後に所望の精度を満たしていない場合、特許文献１に開示されている技術は、ビット幅を変更するために、再度プログラムを変更し、コンパイルしてから実行する必要がある。
特許文献２に開示される技術は、プログラム中の部分的な代入式や、演算式を解析し、各変数の関係情報に基づいてデータ型の属性値を決定する。特許文献２に開示される技術においても、実行結果の評価後に所望の精度を満たしていない場合、ビット幅を変更するためには、再度プログラムを変更し、コンパイルしてから実行する必要がある。
本発明は、整数・固定小数点化における変数のビット幅等の型の属性検討の際、検討時間を削減する技術を提供することを目的とする。
【課題を解決するための手段】
【０００６】
そこで、本発明は、対象変数の属性がパラメータ化され、コンパイルされたプログラムを読み込む読み込み手段と、前記読み込み手段により読み込まれたプログラムに基づく処理の実行時に、属性に関するパラメータ情報に基づいて、前記プログラムの対象変数の属性に属性値を設定する設定手段と、前記設定手段により属性値が設定されたプログラムに基づいて処理を実行する実行手段と、を有する。
【発明の効果】
【０００７】
本発明によれば、整数・固定小数点化における変数のビット幅等の型の属性検討の際、検討時間を削減する技術を提供することができる。
【図面の簡単な説明】
【０００８】
【図１】型探索装置のハードウェア構成の一例を示す図である。
【図２】実施形態１の型探索装置のソフトウェア構成の一例を示す図である。
【図３】パラメータファイルの一例を示す図である。
【図４】型シミュレーション部の構成の一例を示す図である。
【図５】実施形態１の型探索処理の一例を示すフローチャートである。
【図６】プログラムの一例を示す図である。
【図７】プログラム作成処理の一例を示すフローチャートである。
【図８】ヘッダーファイルの一例を示す図である。
【図９】型シミュレーション処理の一例を示すフローチャートである。
【図１０】演算処理の一例を示すフローチャートである。
【図１１】実施形態２の型探索装置のソフトウェア構成の一例を示す図である。
【図１２】パラメータの候補値を示す表形式ファイルの一例を示す図である。
【図１３】実施形態２の型探索処理の一例を示すフローチャートである。
【図１４】実施形態３の型探索装置のソフトウェア構成の一例を示す図である。
【図１５】実施形態３の型探索処理の一例を示すフローチャートである。
【発明を実施するための形態】
【０００９】
以下、本発明を実施するための最良の形態について図面を用いて説明する。
＜実施形態１＞
以下、プログラム中の変数の型を探索する変数の型探索方法について説明する。本実施形態では、プログラム中の浮動小数点変数を固定小数点変数に変換する際の固定小数点型の属性の探索方法について説明する。なお、以降の説明では、変数の型を変換する前の浮動小数点変数のプログラムを第１のプログラムといい、変換後の固定小数点変数のプログラムを第２のプログラムという。また、浮動小数点変数型を第１の型、固定小数点型を第２の型とする。
本実施形態による変数の型探索方法は、例えば、画像処理等の信号処理プログラムのアルゴリズム開発で開発された浮動小数点演算を用いて書かれたプログラムを、ハードウェアに実装するために、いくつかの変数の型を固定小数点型に変換する場合に適用される。
【００１０】
図１は、プログラム中の変数の型を探索する型探索装置１００のハードウェア構成の一例を示す図である。なお、型探索装置１００は、情報処理装置の一例である。
型探索装置１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＲＯＭ１０３、ＨＤＤ１０４、入力装置１０５、表示装置１０６、ネットワークＩ／Ｆ１０７及びシステムバス１０８を有する。ＣＰＵ１０１、ＲＡＭ１０２、ＲＯＭ１０３、ＨＤＤ１０４、入力装置１０５、表示装置１０６及びネットワークＩ／Ｆ１０７は、システムバス１０８を介して互いに通信可能に接続されている。
ＣＰＵ１０１は、型探索装置１００全体を制御する。ＣＰＵ１０１がＲＯＭ１０３等に格納されているプログラムを実行することにより、後述する型探索装置１００の機能（ソフトウェア構成）及びフローチャートに係る処理が実現される。
ＲＡＭ１０２は、ＣＰＵ１０１がプログラムを実行するためのワークエリアや、一時記憶領域として機能するメモリである。
ＲＯＭ１０３は、ＣＰＵ１０１が実行するプログラム等を格納するメモリである。
ＨＤＤ１０４は、閾値や、パラメータに関する設定値等を含む各種のデータや、各種のプログラム等を格納するハードディスクドライブである。
入力装置１０５は、ユーザが型探索装置１００に対して入力操作をするためのキーボードや、マウス等である。
表示装置１０６は、型探索装置１００が各種の画面を表示するためのディスプレイ等である。
ネットワークＩ／Ｆ１０７は、外部ネットワークを介して他の装置と通信を行うためのインターフェースである。
【００１１】
図２は、実施形態１における型探索装置１００のソフトウェア構成の一例を示す図である。
本実施形態では、型探索装置１００がプログラム中の浮動小数点変数を固定小数点変数に変換するが、これに限らず、例えば、プログラム中の浮動小数点変数を仮数部、指数部のビット幅が可変な浮動小数点変数に変換する場合に適用してもよい。
プログラム作成部７０１は、入力された第１のプログラムから、変数の型表現に必要な型の属性が、実行時に設定可能なようにパラメータ化されたプログラムを作成する。プログラム作成部７０１が変数の型の属性を実行時に設定可能なパラメータにすることで、型探索装置１００は、プログラムの変更や、属性値を変更した際にコンパイルをすることなく、変数の型を変換した場合と同等な挙動をシミュレーションすることが可能となる。本実施形態において、ユーザは、第１のプログラムと、固定小数点変数に変換したい１つ以上の変数名とを入力する。そして、プログラム作成部７０１は、入力された変数名に従って、第１のプログラム中の変数の型を固定小数点シミュレーション型に変更した固定小数点シミュレーションプログラムを作成する。固定小数点シミュレーション型とは、固定小数点の属性であるビット幅、小数点位置等を、実行中に設定可能なようにパラメータ化した型であり、本実施形態ではＣ＋＋言語のクラスとして実装される。固定小数点シミュレーション型の詳細については、図６等を用いて後述する。また、本実施形態の型探索装置１００では、プログラム作成部７０１が入力された変数名を参照して自動で変更するものとしているが、ユーザが手作業で所望の変数の型を固定小数点シミュレーション型に変更するものとしてもよい。第１のプログラム中の固定小数点変数に変換したい変数の型を固定小数点シミュレーション型に変更した固定小数点シミュレーションプログラムは、実行時に設定される属性値に基づき変数の型の挙動をシミュレーションすることができるプログラムである。
【００１２】
コンパイル部７０２は、プログラム作成部７０１が作成した固定小数点シミュレーションプログラムをコンパイルし、オブジェクトプログラムを生成する。
属性値準備部７０３は、固定小数点シミュレーションプログラム内の固定小数点シミュレーション型の変数について、プログラム実行時に変数の型の属性に設定する属性値を予め準備する。より具体的にいうと、属性値準備部７０３は、ユーザにより指定された固定小数点化したい対象変数（変数情報）と、その対象変数の属性に設定する属性値（属性値情報）とを対応付けたパラメータファイルを作成してメモリに格納する。なお、パラメータファイルは、パラメータ情報の一例である。パラメータファイルはどのような形式でもよいが、例えば図３に示すような表形式のパラメータファイルを用いることができる。ここで、図３は、パラメータファイルの一例を示す図である。ユーザは、入力装置１０５を介してシステム上のＧＵＩ等で、設定する対象変数と、属性値との対応関係を入力すればよい。なお、属性値準備部７０３がパラメータファイルを作成する処理は、パラメータ情報作成処理の一例である。
【００１３】
型シミュレーション部７０４は、コンパイル部７０２が生成したオブジェクトプログラムを実行する。ここで、型シミュレーション部７０４の構成を、図４を用いて説明する。なお、図４は、型シミュレーション部７０４の構成の一例を示す図である。
型シミュレーション部７０４は、プログラム読み込み部１２０１、属性値保持部１２０２、属性値設定部１２０３及び演算部１２０４を有する。
プログラム読み込み部１２０１は、コンパイル部７０２が生成したオブジェクトプログラムの実行が開始されると、オブジェクトプログラムをメモリに読み込む。
属性値保持部１２０２は、属性値準備部７０３により入力されたパラメータファイルに記載された変数の型の属性と、属性値との対応関係をメモリ上に展開し、プログラム実行中メモリ上に保持する。なお、本実施形態では属性値保持部１２０２を用いるものとしているが、型探索装置１００は、パラメータファイルをメモリ上に保持せずに、属性値設定時に直接ファイルにアクセスするものとしてもよい。
属性値設定部１２０３は、型の属性値をパラメータ化された属性に設定する。本実施形態において、属性値設定部１２０３は、プログラム実行中、固定小数点シミュレーション型の変数の初期化時に、属性値保持部１２０２によりメモリ上に保持されたパラメータファイルを参照し、属性値を変数の型の属性に設定する。また、属性値設定部１２０３は、初期化時に属性値を設定せずに、演算処理や、代入処理を行うたびに属性値を設定するものとしてもよい。このように、属性値設定部１２０３は、プログラム外から属性値を設定することが可能となる。これにより、型探索装置１００は、プログラムの変更及びコンパイルを行うことなく、属性値を変更することができる。
演算部１２０４は、属性値設定部１２０３により設定された属性値に応じた型の挙動をシミュレートする演算を行う。例えば、演算部１２０４は、ビット幅、小数点位置が異なる２つの値の演算を行う場合、ビットシフトを行い、ビット位置を合わせてから演算を行う。演算処理の詳細については、図８等を用いて後述する。
以上が型シミュレーション部７０４の説明である。
【００１４】
説明を図２に戻す。
実行結果出力部７０５は、固定小数点シミュレーションプログラムの実行結果（シミュレーション結果情報）を出力する。
実行結果評価部７０６は、第１のプログラムの実行結果（実行結果情報）と、実行結果出力部７０５が出力した固定小数点シミュレーションプログラムの実行結果とから精度（ＳＮ比）の計算を行う。例えば、実行結果評価部７０６は、誤差を用いて評価する場合、第１のプログラムの実行結果Ａと、固定小数点シミュレーション型プログラムの実行結果Ｂとを用いて（（Ｂ−Ａ）＾２）／（Ａ＾２）を算出する。そして、実行結果評価部７０６は、算出結果が予め定めた閾値以下であれば、必要な精度を満たしているものとする。実行結果が所望の精度を満たしていた場合、実行結果評価部７０６は、対象変数の属性に設定された属性値を設定値として決定する。そして、プログラム生成部７０７が後述する処理を実行する。一方、実行結果が所望の精度を満たしていない場合、属性値準備部７０３は、ユーザからの異なる属性値の入力に基づいて、再度、パラメータファイルを作成する。
プログラム生成部７０７は、実行結果評価部７０６が決定した対象変数及び属性と、属性値との関係を用いて、対象変数を固定小数点変数に変換した第２のプログラムを生成する。本実施形態において、プログラム生成部７０７は、実行結果評価部７０６から入力された対象変数と、対応する属性値とを用いてプログラムを生成する。プログラム生成部７０７は、生成するプログラムをどのような言語で記述してもよいが、例えば、ハードウェアや、ファームウェア向けのプログラムを生成する。
以上が、本実施形態における型探索装置１００のソフトウェア構成の説明である。
【００１５】
次に図５を用いて、本実施形態におけるプログラム中の変数の型を探索する変数の型探索処理の流れについて説明する。なお、図５は、型探索処理の一例を示すフローチャートである。
Ｓ１００において、プログラム作成部７０１は、入力された第１のプログラムと、固定小数点変数に変換したい１つ以上の変数名とから、入力された変数の型を固定小数点シミュレーション型に変更したプログラムを作成する。本実施形態では、プログラム作成部７０１がＳ１００におけるプログラム作成処理を自動で行うものとするが、ユーザが手動で行うものとしてもよい。また、本実施形態においては、プログラム作成部７０１が浮動小数点型を用いた第１のプログラムを変換するものとしているが、ユーザがプログラムを作成する際に初めから固定小数点シミュレーション型を用いたプログラムを作成するものとしてもよい。プログラム作成処理の詳細については、図７等を用いて後述する。
Ｓ１０１において、コンパイル部７０２は、Ｓ１００で作成された固定小数点シミュレーションプログラムをコンパイルし、オブジェクトプログラムを生成する。
Ｓ１０２において、属性値準備部７０３は、Ｓ１００でパラメータ化された変数の型の属性に設定する属性値に関するパラメータ情報を予めメモリに格納して準備する。本実施形態では、ユーザが、入力装置１０５を介して、固定小数点化したい対象変数と、その対象変数の型の属性に設定する属性値とをシステム上のＧＵＩ等で入力する。そして、属性値準備部７０３は、入力装置１０５を介して受け付けたユーザの入力に基づいて、パラメータファイルを作成し、メモリに格納する。
【００１６】
Ｓ１０３において、型シミュレーション部７０４は、Ｓ１０１で生成された固定小数点シミュレーションプログラムのオブジェクトプログラムを実行する。より具体的にいうと、型シミュレーション部７０４は、オブジェクトプログラムにおける対象変数の属性に基づいて、Ｓ１０２で作成されたパラメータファイルを参照する。そして、型シミュレーション部７０４は、オブジェクトプログラムにおける各変数の初期化時に前記パラメータファイルの属性値を用いて設定する。また、型シミュレーション処理Ｓ１０３は、設定した属性値に応じた型の挙動をシミュレートする演算を行う。Ｓ１０３における型シミュレーション処理の詳細については、図９等を用いて後述する。
Ｓ１０４において、実行結果出力部７０５は、Ｓ１０３で実行されたプログラムの実行結果を出力する。出力形式はどのような形式でもよく、例えば、実行結果出力部７０５は、ファイル等に出力結果を書き込むようにしてもよい。
Ｓ１０５において、実行結果評価部７０６は、Ｓ１０４で出力された結果に関する評価を行う。より具体的にいうと、実行結果評価部７０６は、第１のプログラムの実行結果と、Ｓ１０４で出力された実行結果とに基づく精度が、ユーザにより外部から入力されて予めメモリに格納されている精度情報が示す精度を満たすか否かを評価して判定する。なお、実行結果評価部７０６による精度の算出方法は、図２を用いて上述したため説明を省略する。実行結果評価部７０６は、精度を満たすと判定した場合、処理をＳ１０６に進め、精度を満たさないと判定した場合、処理をＳ１０２に戻す。
Ｓ１０６において、プログラム生成部７０７は、固定小数点型プログラムを生成する。より具体的にいうと、プログラム生成部７０７は、図６の（ａ）に示した第１のプログラムを、Ｓ１０５で精度を満たすと判定されて決定された属性値を利用して、固定小数点化の対象である変数及びその演算式等の変換を行った第２のプログラムを生成する。なお、図６は、プログラムの一例を示す図である。Ｓ１０６のプログラム生成処理は、ユーザが、Ｓ１０５で精度を満たすと判定された対象変数の属性値に基づき、手動で行うようにしてもよい。
以上が、本実施形態におけるプログラム中の変数の型を探索する変数の型探索処理の流れである。
【００１７】
次に、Ｓ１００におけるプログラム作成処理の詳細について説明する。
ここで、図６の（ａ）は、上述したように第１のプログラムの一例を示す図である。一方、図６の（ｂ）は、プログラム作成処理で作成される固定小数点シミュレーションプログラムの一例を示す図である。
第１のプログラム２０は、ユーザが開発したプログラムであり、固定小数点シミュレーションプログラム２１や、第２のプログラムに変換する元となるオリジナルのプログラムである。
記述２０１、記述２０２及び記述２０３は、浮動小数点宣言である。また、記述２０４は、記述２０１、記述２０２及び記述２０３で宣言された変数を用いた演算処理の記述の一例である。
【００１８】
次に、図６の（ｂ）及び図７を用いて、プログラム作成部７０１が第１のプログラムを固定小数点シミュレーションプログラムに変換するＳ１００の処理について説明する。プログラム作成部７０１は、図７に示す処理を行うことで図６の（ａ）の第１のプログラムを図６の（ｂ）の固定小数点シミュレーションプログラムに変換する。なお、図７は、Ｓ１００におけるプログラム作成処理の一例を示すフローチャートである。
まず、Ｓ４００において、プログラム作成部７０１は、ヘッダのインクルード文を挿入する。より具体的にいうと、プログラム作成部７０１は、記述２１１に示されるように固定小数点シミュレーションクラスを含むＦｉｘｅｄＰｏｉｎｔＳｉｍ．ｈをインクルードしている。また、プログラム作成部７０１は、記述２１２に示されるようにパラメータファイルをメモリ上に展開、保持するクラスを含むヘッダーファイルであるＰａｒａｍＳｅｔｔｉｎｇ．ｈをインクルードしている。ＰａｒａｍＳｅｔｔｉｎｇ．ｈは、パラメータファイルに記載された、変数の型の属性と、属性値との対応関係をメモリ上に展開するメソッドを定義している。また、ＰａｒａｍＳｅｔｔｉｎｇ．ｈは、展開されたメモリ上のアドレスへのポインタをメンバーとして有するクラスであるＣＰａｒａｍＳｅｔｔｉｎｇクラスを定義している。本実施形態のように属性値準備部７０３が前記対応関係をメモリ上に展開すると、型シミュレーション部７０４は、固定小数点シミュレーションプログラム中で固定小数点シミュレーション型の変数宣言を実行するたびにファイルにアクセスする必要がなくなる。そのため、処理速度が向上する。なお、属性値準備部７０３がパラメータファイルをメモリ上に展開せずに、型シミュレーション部７０４が変数宣言のたびにパラメータファイルを参照するように実装することも可能である。ＣｐａｒａｍＳｅｔｔｉｎｇクラスでは、引数で変数名をキーとして与えると、その変数の型が持つ１つ以上の属性に対応する属性値のリストを取得するメソッドが定義されている。
【００１９】
次に、Ｓ４０１において、プログラム作成部７０１は、パラメータファイル設定文を挿入する。本実施形態において、プログラム作成部７０１は、記述２１３のように、パラメータファイルをセットするマクロ定義を使用して設定文を挿入する。記述２１３に示されるパラメータファイルをセットするマクロ定義は、ＦｉｘｅｄＰｏｉｎｔＳｉｍ．ｈで定義されている。パラメータファイルをセットするマクロ定義については、図８等を用いて後述する。本実施形態において、プログラム作成部７０１は、パラメータファイルの設定にマクロ定義を利用するものとしているが、この方法に限らず、例えば、実行時のコマンドライン引数により指定するものとしてもよい。
Ｓ４０２において、プログラム作成部７０１は、固定小数点化したい対象変数宣言の変換を行う。本実施形態において、プログラム作成部７０１は、図６の（ａ）の記述２０１、記述２０２及び記述２０３を図６の（ｂ）の記述２１４、記述２１５及び記述２１６に変換する。対象変数である変数ｘ、変数ｙ及び変数ｚは、固定小数点化したい変数、即ち、固定小数点シミュレーション型を用いて型の属性が決定される変数である。本実施形態では、ＦｉｘｅｄＰｏｉｎｔＳｉｍ．ｈにおいて定義されているマクロ定義を用いて宣言しているが、プログラム作成部７０１は、マクロ定義に記載された内容を直接プログラムに入力してもよい。また、対象変数は、予めユーザが決定するものとしてもよいし、プログラム作成部７０１がプログラム中の全てのｆｌｏａｔ型を変換するものとしてもよい。その他、プログラム作成部７０１が、指定されたファイル内のｆｌｏａｔ型のみを変換するものとしてもよい。
以上が、プログラム作成部７０１が第１のプログラムを固定小数点シミュレーションプログラムに変換する手順である。
【００２０】
記述２１７は、固定小数点シミュレーション型同士の加算演算及び代入演算の式の例である。演算処理については、図１０等を用いて後述する。なお、図６の（ａ）の第１のプログラム内の記述２０４は、固定小数点シミュレーションプログラムに変換された場合も、記述２１７のように式を変更せずに使用することができる。本実施形態ではこのように、プログラム作成部７０１が最小限の負荷で第１のプログラムから固定小数点シミュレーションプログラムへの変換を行うことを可能としている。
ここで、図８を用いて固定小数点シミュレーション型を定義しているヘッダーファイル３０について説明する。なお、図８は、固定小数点シミュレーション型を定義しているヘッダーファイルの一例を示す図である。
記述３０１は、固定小数点シミュレーションクラスの定義である。固定小数点シミュレーションクラスは、Ｃ＋＋言語の浮動小数点型や、整数型等の数値型と同様に使用可能な固定小数点シミュレーション型を提供するクラスである。
記述３１１は、クラスにおけるデータ保持部であり、データメンバーを保持する。以下、データ保持部が保持するデータメンバーについて説明する。
記述３１２は、固定小数点シミュレーション型の値を３２ビットの整数として保持する。即ち、本クラスではビット幅が３２ビット以内の固定小数点型をシミュレーションすることが可能である。
【００２１】
記述３１３は、小数点位置を保持する。小数点位置はどのように管理されてもよいが、本実施形態では最下位ビットの右側の位置を０位置とし、上位ビット側にシフトする場合は負、下位ビット側にシフトする場合は正とする。また、小数点位置はビット幅に限らず設定することができる。例えば、符号無し３ビット固定小数点を表現する場合に、記述３１３の小数点位置が２の場合、表現できる値は二進数で１１１００から０００００までであり、十進数では０から２８までの値を４飛ばしで表現可能である。また、本実施形態において、記述３１２及び記述３１３は、整数と、小数点位置とで固定小数点シミュレーション型の数値を保持するものとしているが、データ保持方法はこれに限らず、例えば、浮動小数点型のデータで固定小数点相当の離散値を保持してもよい。
記述３１４は、ビット幅を保持する。
記述３１５は、演算結果の値丸め処理のモードを保持する。例えば、四捨五入モードを０、切り上げモードを１、切り捨てモードを２というように予め決めておき、保持している数値によりモードを切り替える。
記述３１６は、オーバーフロー又はアンダーフロー時のモードを保持する。例えば、オーバーフロー又はアンダーフローを容認するモードを０、飽和処理を行うモードを１等といったように予め決めておき、保持している数値によりモード切り替えを行う。
記述３１７は、パラメータファイル内の情報が展開されたメモリへの参照ポインタである。本実施形態において、属性値準備部７０３は、ＣＰａｒａｍＳｅｔｔｉｎｇクラスでパラメータファイルに記載された型の属性と、属性値との対応関係をメモリ内に展開し、保持しておく。パラメータファイルを参照する方法はこれに限らず、例えば、変数がインスタンス化されるたびにファイルアクセスする方法や、演算を行うたびにファイルアクセスする方法でもよい。
【００２２】
記述３２１は、クラスのコンストラクタである。本実施形態において、属性値設定部１２０３は、インスタンス化される際に型の属性に設定する属性値を、パラメータファイル内の変数の型と、属性との対応関係が展開されているメモリから取得する。
記述３３１は、演算子の定義部である。
記述３３２及び記述３３３は、演算子の処理の定義の例である。
記述３３２は、加算演算の処理の定義の例であり、固定小数点シミュレーションクラス同士の加算を行うメソッドである。また、記述３３２で定義されている加算演算では、記述３２１のコンストラクタで設定する属性値に従った演算を行う。例えば、３ビット幅、小数点位置２の被加算値と、３ビット幅、小数点位置−１の加算値とを加算する場合について説明する。この場合、演算部１２０４は、加算値のインスタンスに保持されている記述３１２の整数の値を左に３ビットのビットシフトを行い、被加算値の小数点位置に合わせてから加算を行う。
記述３３３は、代入演算の処理の定義である。記述３３３で定義されている代入演算では、記述３２１のコンストラクタで設定された属性値に応じた代入処理を行う。本実施形態において、演算部１２０４は、記述３１５及び記述３１６に保持されている各種モードに合わせた数値に変換し、記述３１３及び記述３１４に保持されている小数点位置、ビット幅を参照し、変換した値から記述３１２の整数値を格納する。
【００２３】
記述３４１は、代入演算時処理の定義部である。
記述３４２は、丸め処理の定義である。演算部１２０４は、記述３１５に保持されている丸め処理モードを参照して、モードに即した丸め処理を行う。
記述３４３は、オーバーフロー又はアンダーフロー処理の定義である。演算部１２０４は、記述３１６に保持されているオーバーフロー又はアンダーフロー処理のモードを参照して、モードに即したオーバーフロー又はアンダーフロー処理を行う。代入演算時処理部の詳細については、図１０等を用いて後述する。
本実施形態では、記述３３１の演算子の定義部や、記述３４１の代入演算時処理部のように、記述３２１のコンストラクタで設定される属性値に従った演算を定義しておくことにより、演算部１２０４が型の挙動をシミュレートする演算を行えるようにしている。
記述３０２は、マクロ定義であり、ユーザが使用する固定小数点シミュレーションプログラム２１でユーザがクラスとして意識せずに記述３０１の固定小数点シミュレーションクラスを固定小数点シミュレーション型として使用できるように隠蔽化したものである。
記述３５１は、コンストラクタを隠蔽化するためのマクロ定義であり、ユーザは、固定小数点シミュレーションプログラム２１中の変数宣言のたびにファイル名を指定せずにクラスを利用することができる。
記述３５２は、パラメータファイル展開クラスと、ファイルのメモリ展開メソッドとを隠蔽化するためマクロ定義であり、ユーザはファイル名の指定のみを行うだけで利用することができる。
以上がヘッダーファイル３０の説明である。
【００２４】
次に、Ｓ１０３における型シミュレーション処理の詳細を図６の（ｂ）及び図９を用いて説明する。なお、図９は、型シミュレーション処理の一例を示すフローチャートである。
Ｓ５０１において、プログラム読み込み部１２０１は、Ｓ１０１でコンパイルされた固定小数点シミュレーションプログラムのオブジェクトプログラムの実行が開始されると、プログラムに記述された処理を行うためにメモリにオブジェクトプログラムを読み出す。
Ｓ５０２において、属性値保持部１２０２は、上述したパラメータを保持する。本実施形態において、属性値保持部１２０２は、図６の（ｂ）で示した固定小数点シミュレーションプログラム内の記述２１３が定義するマクロ定義を実行する。マクロ定義はＣＦｉｘｅｄＰｏｉｎｔＳｉｍクラス内で定義されており、属性値保持部１２０２は、指定されたパラメータファイルである「Ｐａｒａｍ．ｃｓｖ」を読み込み、型の属性と、属性値との対応関係をメモリ上に保持しておく。
Ｓ５０３において、属性値設定部１２０３は、プログラム中の変数宣言が実行された際に、固定小数点シミュレーションクラスを用いた変数のインスタンス化する際のコンストラクタ内で処理を行う。ここで、図６の（ｂ）における変数ｘに着目した場合について説明する。まず、記述２１４の宣言部では、固定小数点シミュレーション型の変数宣言の命令が実行される。記述２１４の宣言部は、ＣＦｉｘｅｄＰｏｉｎｔＳｉｍクラスで定義された記述３５１のマクロ定義であり、記述３５１のマクロ定義に記載された処理が実行される。記述２１４の宣言部が実行されると、記述３２１のコンストラクタが実行され、ＣＦｉｘｅｄＰｏｉｎｔＳｉｍクラスのインスタンス化が行われる。インスタンス化時、属性値設定部１２０３は、変数の型の属性に対応する属性値をインスタンス内のデータメンバーとして設定する。本実施形態において、属性値設定部１２０３は、Ｓ５０２でメモリ上に保持された変数、型の属性及び属性値の対応関係を参照して属性値を取得する。
【００２５】
Ｓ５０４において、演算部１２０４は、Ｓ５０３で設定された属性値に従って、型の挙動をシミュレートする演算を行う。本実施形態において、演算部１２０４は、固定小数点シミュレーション型の演算を行う。演算部１２０４は、図６の（ｂ）における記述２１７の演算を実行すると、固定小数点シミュレーションクラス内で記述３３２として定義されている加算演算の処理の定義メソッドを実行する。また、演算部１２０４は、記述２１７の演算において変数ｚへの代入演算も実行する。代入演算処理が行われた場合は、代入演算の処理における記述３３３で定義されている定義メソッドが実行される。本実施形態では、加算演算と、代入演算とについてのみ説明したが、その他の演算についても同様である。
以上がＳ１０３における型シミュレーション処理の流れの詳細である。このように、型シミュレーション部７０４は、プログラム外から属性値を設定可能とすることで、プログラムの変更及びコンパイルを行うことなく属性値を変更することができる。また、属性値に従った型の演算を行うように演算を定義することにより、型シミュレーション部７０４は、型の挙動をシミュレートすることができる。
【００２６】
次に、Ｓ５０４で上述した型シミュレーション処理の演算処理における代入演算の処理の流れの詳細について、図１０を用いて説明する。なお、図１０は、演算処理の一例を示すフローチャートである。
Ｓ６００において、演算部１２０４は、変数に代入する値について、変数の型に設定されたビット幅で表現可能な最下位ビットより下の桁のビットの値の丸め処理を行う。本実施形態において、演算部１２０４は、ＣＦｉｘｅｄＰｏｉｎｔＳｉｍクラスの記述３１１のデータ保持部が保持している記述３１５の値丸め処理モードのモードに従って処理を行う。本実施形態では、３ビット幅、小数点位置１の型を持つ変数に値「１１０１１．１」を代入する場合について説明する。例えば、「１１０１１．１」の切り上げモードの場合、２の０乗桁目は１なので切り上げを行うと「１１１００．０」となる。
Ｓ６０１において、演算部１２０４は、変数に代入する値が最大値、最小値を超えていた場合に、オーバーフロー又はアンダーフロー処理を行う。演算部１２０４は、ＣＦｉｘｅｄＰｏｉｎｔＳｉｍクラスの記述３１１のデータ保持部が保持しているオーバーフロー又はアンダーフローモードに従い処理を行う。本実施形態では、オーバーフロー又はアンダーフローモード容認するモードが０、飽和処理を行うモードが１の場合について説明する。モードが０の場合、演算部１２０４は、オーバーフロー又はアンダーフローを擬似的に起こす。例えば、３ビット幅、小数点位置１の型の持つ変数に「１１１００．０」を代入する場合、最大値を超えているため、オーバーフロー又はアンダーフロー処理をすると、最上位ビットは２の４乗桁目であるため、２の５乗桁目以上の桁は０にリセットされる。したがって、演算部１２０４は、代入する値を「１１００」と処理する。また、オーバーフローモード又はアンダーフローモードが０の飽和処理モードの場合、「１１１００．０」が最大値を超えているため、演算部１２０４は、飽和処理を行う。したがって、演算部１２０４は、代入する値を最大値の「１１１０」と処理する。
Ｓ６０２において、演算部１２０４は、ＣＦｉｘｅｄＰｏｉｎｔＳｉｍクラスの記述３１１のデータ保持部にデータを格納する。例えば、演算部１２０４は、３ビット幅、小数点位置１の型の持つ変数に「１１００」を格納する場合、まず、右に１ビットシフトし、そこから上位３ビットの「１１０」を記述３１２に格納する。以上が代入演算の処理の流れである。
【００２７】
本実施形態では、型探索装置１００が、変数の型表現に必要な型の属性について、実行時に設定可能なようにパラメータ化する処理について説明をした。これにより、型探索装置１００は、プログラム外からの属性値設定が可能となり、設定された属性値に応じて、型の挙動をシミュレートする演算を行うことができる。また、型探索装置１００は、属性値を設定する際に、プログラムの書き換えや、コンパイルが不要となり、プログラム外から設定する値のみ変更すればよい。したがって、型探索装置１００は、属性を変更するたびにプログラムの書き換えを行うといった従来の手法よりも効率的に型の属性検討を行うことが可能となる。
【００２８】
＜実施形態２＞
実施形態１では、型探索装置１００が固定小数点型の変数のビット幅等の型の属性検討を行う際に、プログラムの書き換えや、書き換え後のコンパイルが不要となり、パラメータファイルの変更のみを行うことで属性検討を行う方法を示した。しかし、実施形態１では、ユーザがパラメータファイルの変更を行うことで、属性の探索を行うことを想定している。ここで、変数が複数ある場合、各変数の属性にトレードオフが生じる場合がある。その場合、ユーザが最適な属性値を探索することは困難である。そこで、本実施形態では、設計最適化支援ツールを用いて型探索装置１００が最適な属性値を探索する方法について説明する。なお、実施形態１同様、変数の型を変換する前の浮動小数点変数のプログラムを第１のプログラムと呼び、変換後の固定小数点変数のプログラムを第２のプログラムと呼ぶ。また、ここでいう最適な属性値とは、ユーザが所望する属性値のことであり、以降の説明においても同様とする。また、本実施形態における型探索装置１００のＣＰＵ１０１がＲＯＭ１０３に格納されているプログラムを実行することにより、設計最適化支援ソフトの機能が実現される。
まず、図１１を用いて実施形態２における型探索装置１００について説明する。なお、図１１は、実施形態２における型探索装置１００のソフトウェア構成の一例を示す図である。
ここで、プログラム作成部７０１、コンパイル部７０２、型シミュレーション部７０４及びプログラム生成部７０７の機能については、実施形態１で説明した通りであるため、説明を省略する。
本実施形態では、型探索装置１００が設計最適化支援ツールにより、最適な属性値を探索する。属性値準備部９０３及び実行結果出力部９０５は、型シミュレーション部７０４と共に、設計最適化支援ツールにより機能する。設計最適化支援ツールとしては、独自のものを作成してもよいし、既存の設計最適化支援ソフトを用いてもよい。例えば、既存の設計最適化支援ソフトとしては、ｍｏｄｅＦＲＯＮＴＩＥＲ（登録商標）や、Ｏｐｔｉｍｕｓ（登録商標）といったものが挙げられる。
【００２９】
属性値準備部９０３は、固定小数点シミュレーションプログラム内の固定小数点シミュレーション型の変数について、プログラム実行時に変数の型の属性に設定する属性値を予め準備する。本実施形態において、ユーザは、固定小数点化したい対象変数と、その対象変数の属性が取りうる候補値の範囲とを、設計最適化支援ツールを用いて入力する。そして、設計最適化支援ツールは、外部より入力された属性が取りうる候補値の範囲から、候補となる値を自動で選択し、全ての変数の属性と、属性値との対応関係が記載されたパラメータセットを出力する。ここで、設計最適化支援ツールが出力するパラメータセットの数は、ユーザが予め設定してもよいし、設計最適化支援ツールが対象変数の属性の候補値について全ての組み合わせのパラメータセットを出力するようにしてもよい。また、本実施形態において、ユーザは、変数、変数の型の属性及びその候補値の範囲を図１２に示すような表形式ファイルとして入力するものとするが、入力形式に制限はなく、例えば設計最適化支援ツール上のＧＵＩ等を用いて設定してもよい。なお、図１２は、パラメータの候補値を示す表形式ファイルの一例を示す図である。図１２に示す表形式データで、対象変数と、その変数の属性が取りうる候補値の範囲とが入力された場合、変数ｘ、変数ｙ、変数ｚの取りうるビット幅は７ｂｉｔから９ｂｉｔまでである。例えば、設計最適化支援ツールが、パラメータセットとして［（変数ｘのビット幅）、（変数ｙのビット幅）、（変数ｚのビット幅）、・・・］を出力する場合を例に説明する。その場合、設計最適化支援ツールは、［７、７、７、・・・］や、［７、７、８、・・・］をパラメータセットとして出力することができる。本実施形態において、属性値準備部９０３は、パラメータセットを図３のような表形式データのパラメータファイルとして作成する。
【００３０】
実行結果出力部９０５は、型シミュレーション部７０４が実行した結果を集計し、その結果の分析を行う。ここで、演算精度を最小化し、処理コストを最小化する解を得る必要がある場合について説明する。ユーザが設計最適化支援ツールを用いて演算精度誤差と、処理コストとを目的関数として設定することにより、実行結果出力部９０５は、横軸を演算精度、縦軸を処理コストとしたグラフを出力することが可能となる。このように、設計最適化支援ツールを用いることによって、属性値準備部９０３は、各変数と、その対象変数の型の属性が取りうる候補値の範囲とからパラメータセットに基づくパラメータファイルを作成する。そして、型シミュレーション部７０４は、そのパラメータファイルを用いてシミュレーションプログラムを実行するという処理を繰り返す。更に、実行結果出力部９０５は、上述したように型シミュレーション部７０４が実行した結果を集計し、その結果の分析を行う。
実行結果評価部９０６は、実行結果出力部９０５から取得した分析結果に基づき、パラメータセットを決定するか又は再度属性値の絞り込みを行うかを判断するための情報をユーザに提示する。より具体的にいうと、実行結果評価部９０６は、設計最適化支援ツールが一意に決まる最適解を得られる場合、その最適解をユーザに提示する。一方、属性同士が目的関数に対してトレードオフの関係にある場合、自動的に最適解を求めることは困難であるため、ユーザが対話的に属性の探索範囲を絞り込む必要がある。このような場合、実行結果評価部９０６は、多次元チャート等を用いて探索範囲の絞り込みをユーザに提示する。ユーザは、提示された探索範囲から再度、固定小数点化したい対象変数と、その対象変数の型の属性が取りうる候補値の範囲とを入力する。また、ユーザが満足する所望の性能値を得られていた場合、型探索装置１００は、入力装置１０５を介して受け付けたユーザの指示により属性の探索を終了することもできる。
以上が、本実施形態における型探索装置１００のソフトウェア構成の説明である。
【００３１】
次に図１３を用いて、本実施形態におけるプログラム中の変数の型を探索する変数の型探索処理の流れについて説明する。なお、図１３は、本実施形態における型探索処理の一例を示すフローチャートである。
Ｓ１１００及びＳ１１０１の処理は、実施形態１で図５を用いて説明したＳ１００及びＳ１０１の処理と同様であるため、説明を省略する。
Ｓ１１０２において、属性値準備部９０３は、プログラム実行時に変数の型の属性に設定する属性値を予め準備する。より具体的にいうと、まず、ユーザが、設計最適化支援ツールを用いて、固定小数点化したい対象変数と、その対象変数の型の属性が取りうる候補値の範囲とを入力する。そして、設計最適化支援ツールは、入力された候補値の範囲から値を自動で選択し、パラメータセットを作成する。更に、属性値準備部９０３は、パラメータセットに基づくパラメータファイルを作成する。
Ｓ１１０３の処理は、実施形態１で図５を用いて説明したＳ１０３の処理と同様であるため、説明を省略する。
Ｓ１１０４において、設計最適化支援ツールは、Ｓ１１０２の属性値準備処理において入力された変数の候補値の範囲内の値の組みあわせに関して、予め定められている数のパラメータセットを実行したか否かを判定する。そして、設計最適化支援ツールは、実行したと判定した場合、処理をＳ１１０５へ進め、実行していないと判定した場合、処理をＳ１１０２へ戻す。
【００３２】
Ｓ１１０５において、実行結果出力部９０５は、設計最適化支援ツールが型シミュレーション部７０４から得る実行結果を分析する。例えば、演算精度を最小化し、処理コストを最小化する解を得る必要がある場合、実行結果出力部９０５は、横軸を演算精度、縦軸を処理コストとしたグラフを出力する。
Ｓ１１０６において、実行結果評価部９０６は、Ｓ１１０５で得られる分析結果に基づき、パラメータセットを決定するか又は再度属性の最適化を行うかを判定するための情報をユーザに提示する。そして、実行結果評価部９０６は、ユーザの指示に基づいて、パラメータセットを決定する場合、処理をＳ１１０７へ進め、再度属性の最適化を行う場合、処理をＳ１１０２へ進める。
Ｓ１１０７の処理は、実施形態１で図５を用いて説明したＳ１０６の処理と同様であるため、説明を省略する。
以上が本実施形態におけるプログラム中の変数の型を探索する変数の型探索処理の流れである。
本実施形態によれば、型探索装置１００は、変数が複数あり、各変数の属性にトレードオフが生じる場合であっても、所望の実行結果を得ることができる属性値を選択することが可能となる。
【００３３】
＜実施形態３＞
一般的に、ユーザは、画像処理等の信号処理プログラムのアルゴリズム開発を浮動小数点型の変数を用いて行い、アルゴリズムの開発が完了した後にハードウェア設計検討を行う。したがって、アルゴリズム開発時に作成されたプログラムは浮動小数点型を用いて記述されている。そのため、ユーザは、ハードウェア設計検討段階で固定小数点のビット幅等の型の属性を検討する際には、アルゴリズム開発時に作成したプログラムを変換する必要がある。
実施形態１、実施形態２では、アルゴリズム開発後におけるハードウェア設計検討時のビット幅等の型の属性検討を行う方法を説明した。本実施形態では、アルゴリズム開発時から型の属性だけでなく型そのものを実行時のパラメータ入力により選択可能にし、ハードウェア設計検討時にアルゴリズム開発で開発したプログラムを変更せずにビット幅等の型の属性検討を行う方法について説明する。
本実施形態における型探索装置１００について図１４を用いて説明する。なお、図１４は、本実施形態における型探索装置１００のソフトウェア構成の一例を示す図である。本実施形態における型探索装置１００は、アルゴリズム開発後のハードウェア設計において、プログラムの変更を行うことなく、変数の型の探索を行うことが可能な型探索装置である。
【００３４】
プログラム作成部１３０１は、複数の型の中から１つの型を選択することが可能な型を用いてプログラムを作成する。本実施形態において、プログラム作成部１３０１は、実施形態１で示した固定小数点シミュレーション型と、浮動小数点型との何れかを選択するためのパラメータを有する小数点選択型を用いてプログラムを作成する。プログラム作成部１３０１が作成するプログラムは、アルゴリズム開発後のハードウェア設計において、プログラムを変更することなく変数の型の探索を行うことができるアルゴリズム開発プログラムである。また、小数点選択型を使用する対象となる変数は、アルゴリズム開発者が任意に選択してもよいし、浮動小数点型としたい変数を全て小数点選択型としてもよい。
ここで小数点選択型について説明する。小数点選択型は、本実施形態ではＣ＋＋言語を用いたクラスとして定義する。まず、データ保持部では、浮動小数点型のデータと、実施形態１で示したＣＦｉｘｅｄＰｏｉｎｔＳｉｍクラスのインスタンスとをデータとして保持し、更に、型選択パラメータ値を保持する。型選択パラメータ値は、プログラム実行時に使用する型を決定する値であり、本実施形態では、浮動小数点型と、固定小数点シミュレーション型とを選択する際に使用される。小数点選択型のコンストラクタでは、パラメータファイルより入力される型選択パラメータ値を参照して、パラメータファイルより読み出してきた型選択パラメータ値を取得、保持する。プログラム作成部１３０１は、取得した型選択パラメータ値から、浮動小数点型とするか、ＣＦｉｘｅｄＰｏｉｎｔＳｉｍクラスとするかを決定する。また、クラス内のメソッドとして演算子の処理の定義メソッドを宣言し、型選択パラメータ値に応じた演算を行うように定義しておく。以上が小数点選択型の説明である。
【００３５】
コンパイル部１３０２は、プログラム作成部１３０１で作成されたアルゴリズム開発プログラムのコンパイルを行い、オブジェクトプログラムを生成する。
属性値準備部１３０３は、小数点選択型の属性に設定する属性値を予め準備する。本実施形態において、属性値準備部１３０３は、固定小数点シミュレーション型に必要な属性に加え、浮動小数点型と、固定小数点シミュレーション型とのどちらを使用するか決定する型選択パラメータ値を準備する。例えば、属性値準備部１３０３は、浮動小数点型に「０」、固定小数点シミュレーション型に「１」の選択パラメータ値を設定しておく。また、属性値準備部１３０３は、アルゴリズム開発プログラム中の変数について浮動小数点型を使用したい場合は、「０」を設定しておく。即ち、属性値準備部１３０３は、アルゴリズム開発プログラム中の変数について、実施形態１及び実施形態２で示した固定小数点シミュレーション型の属性値に加え、型選択パラメータ値が記載されたパラメータファイルを準備する。なお、本実施形態では浮動小数点型と、固定小数点シミュレーション型とを用いるようにしているが、型はこれに限らず、例えば、整数型等を更に追加してもよい。
【００３６】
型シミュレーション部１３０４は、プログラム作成部１３０１で作成されたアルゴリズム開発プログラムをコンパイルしたオブジェクトプログラムを実行する。型シミュレーション部１３０４は、実施形態１、実施形態２で示した型シミュレーション部７０４の機能に加え、複数ある型の中から１つの型を選択する機能を有する。ここでは、型シミュレーション部１３０４は、属性値準備部１３０３で準備された型選択パラメータ値が記載されたパラメータファイルを参照し、アルゴリズム開発プログラム中の変数の型を決定してプログラムを実行する。
実行結果出力部１３０５は、実施形態１、実施形態２で示した実行結果出力部７０５、実行結果出力部９０５の機能を有し、更に、アルゴリズム開発時のプログラム実行結果を取得する機能を有する。例えば、ユーザが画像から人物を検出するアルゴリズムを開発している場合、型シミュレーション部１３０４は、複数の画像入力を行い、複数回プログラムを実行する。そして、実行結果出力部１３０５は、人物の検出率を取得する。
実行結果評価部１３０６は、実施形態１、実施形態２で示した実行結果評価部７０６、実行結果評価部９０６の機能を有し、更に、前記アルゴリズム開発時のプログラム実行結果がユーザにより予め定められた性能を満たすか否か評価する。例えば、ユーザが画像から人物を検出するアルゴリズムを開発している場合、実行結果評価部１３０６は、人物の検出率がユーザにより予め定められた閾値以上であるか否かに基づいて性能を満たすか否か評価する。
プログラム生成部７０７の機能については、実施形態１、実施形態２で説明した通りであるため、ここでは説明を省略する。
以上が本実施形態における型探索装置１００のソフトウェア構成の説明である。
【００３７】
次に、図１５を用いて、本実施形態における型探索処理の流れについて説明する。なお、図１５は、本実施形態における型探索処理の一例を示すフローチャートである。Ｓ１４００からＳ１４０５までの処理は、アルゴリズム開発に関わる処理である。また、Ｓ１４０６からＳ１４１１までの処理は、ハードウェア設計検討時のビット幅等の型の属性検討に関わる処理である。
Ｓ１４００において、プログラム作成部１３０１は、型を選択するパラメータを持つ型である小数点選択型を用いてアルゴリズム開発プログラムを作成する。本実施形態において、プログラム作成部１３０１は、浮動小数点型と、固定小数点シミュレーション型とを選択可能な小数点選択型を用いてアルゴリズム開発プログラムを作成する。
Ｓ１４０１において、コンパイル部１３０２は、Ｓ１４００で作成されたアルゴリズム開発プログラムをコンパイルし、オブジェクトプログラムを生成する。
Ｓ１４０２において、属性値準備部１３０３は、Ｓ１４０１でパラメータ化された型を決定する型選択パラメータ値が記載されたパラメータファイルを準備する。本実施形態において、属性値準備部１３０３は、浮動小数点型と、固定小数点シミュレーション型との何れかを選択するが、アルゴリズム開発時は浮動小数点型を選択する型選択パラメータ値をパラメータファイルに記載しておく。
Ｓ１４０３において、型シミュレーション部１３０４は、Ｓ１４０１でコンパイル処理されたアルゴリズム開発プログラムのオブジェクトプログラムを実行する。そして、型シミュレーション部１３０４は、前記オブジェクトプログラムに基づいてパラメータファイルを参照し、Ｓ１４０２で準備された型選択パラメータ値より変数の型を設定する。Ｓ１４０３の処理の詳細は、実施形態１で示した処理の流れと同じである。例えば、本実施形態のようにユーザが画像から人物を検出するアルゴリズム開発をしている場合、型シミュレーション部１３０４は、複数の画像入力に対して複数回プログラムを実行する。
【００３８】
Ｓ１４０４において、実行結果評価部１３０６は、プログラム実行結果を分析する。例えば、本実施形態のようにユーザが画像から人物を検出するアルゴリズムの開発を行っている場合、実行結果評価部１３０６は、Ｓ１４０３で複数回実行された結果から検出率を算出し、検出率をユーザに提示するように出力する。出力形式はどのような形式でもよく、実行結果評価部１３０６は、例えばファイル等に出力結果を書き込むようにしてもよい。
Ｓ１４０５において、実行結果評価部１３０６は、Ｓ１４０４で出力された人物の検出率が予め設定された性能値（閾値）を満たしているか否かを評価し、性能値を満たしている場合は、処理をＳ１４０６へ進める。一方、実行結果評価部１３０６は、性能値を満たしていない場合は、再度アルゴリズム開発プログラムの修正を行うため、処理をＳ１４００へ戻す。
Ｓ１４０６において、属性値準備部１３０３は、図５で上述したＳ１０２の処理に加え、型選択パラメータ値を記載したパラメータファイルを準備する。本実施形態で、浮動小数点型と、固定小数点シミュレーション型とが選択可能であるものとする。属性値準備部１３０３は、固定小数点化の対象となる変数について、アルゴリズム開発時は浮動小数点型を選択するパラメータ値を、ハードウェア検討時は固定小数点シミュレーション型を選択する型選択パラメータ値をパラメータファイルに記載しておく。
Ｓ１４０７からＳ１４１１までの処理は、実施形態２で図１３を用いて説明したＳ１１０３からＳ１１０７までの処理と同様であるため、説明を省略する。
以上が本実施形態における変数の型を探索する型探索処理の流れである。
本実施形態による固定小数点プログラムの生成方法を用いれば、型探索装置１００は、ハードウェア設計検討時にアルゴリズム開発で開発したプログラムを変更することなくビット幅等の型の属性検討を行うことが可能となる。
【００３９】
＜その他の実施形態＞
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（又はＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【００４０】
以上、上述した各実施形態によれば、整数・固定小数点化における、変数のビット幅等の型の属性検討の際、型探索装置１００は、実行時の変数の型の属性値を読み込んで設定し、前記属性値に応じた演算を行う。これにより、型探索装置１００は、プログラムの書き換えや、コンパイルを必要とすることなく型の属性を変更可能とし、検討時間を削減させることができる。また、固定小数点プログラムを用いることにより、型探索装置１００は、ハードウェア設計検討時にアルゴリズム開発で開発したプログラムを変更することなくビット幅等の型の属性検討を行うことが可能となる。
【００４１】
以上、本発明の好ましい形態について詳述したが、本実施形態は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【図１】
2015007820.tif 000003
【図２】
2015007820.tif 000004
【図３】
2015007820.tif 000005
【図４】
2015007820.tif 000006
【図５】
2015007820.tif 000007
【図６】
2015007820.tif 000008
【図７】
2015007820.tif 000009
【図８】
2015007820.tif 000010
【図９】
2015007820.tif 000011
【図１０】
2015007820.tif 000012
【図１１】
2015007820.tif 000013
【図１２】
2015007820.tif 000014
【図１３】
2015007820.tif 000015
【図１４】
2015007820.tif 000016
【図１５】
2015007820.tif 000017