(57)【要約】【課題】演算プログラムにおける浮動小数点演算を、所望精度を確保しながら固定小数点演算に変換する演算プログラム変換装置、演算プログラム変換プログラム、演算プログラム変換方法を提供する。【解決手段】浮動小数点演算を行う演算プログラムにおける浮動小数点型の変数を対象変数とし、演算プログラムの実行時に対象変数の値の変化が履歴として出力されるように、演算プログラムの変更を行って実行を行い、該実行により得られる履歴に基づいて対象変数の値の範囲を検出するプロファイル部と、プロファイル部により検出された対象変数の値の範囲に基づいて、対象変数を固定小数点型に変換するように、演算プログラムの変更を行って実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすか否かの判断を行う変換部とを備えた。【選択図】図１
2008033729.tif 000002
【特許請求の範囲】
【請求項１】
演算プログラムにおける変数の型の変換を行う演算プログラム変換装置であって、
浮動小数点演算を行う演算プログラムにおける浮動小数点型の変数を対象変数とし、前記演算プログラムの実行時に対象変数の値の変化が履歴として出力されるように、前記演算プログラムの変更を行って第１プログラムとし、該第１プログラムの実行を行い、該実行により得られる履歴に基づいて対象変数の値の範囲を検出するプロファイル部と、
前記プロファイル部により検出された対象変数の値の範囲に基づいて、対象変数を固定小数点型に変換するように、前記演算プログラムの変更を行って第２プログラムとし、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすか否かの判断を行う変換部と
を備える演算プログラム変換装置。
【請求項２】
請求項１に記載の演算プログラム変換装置において、
前記変換部は、前記第２プログラムの実行結果の精度が予め設定された所望精度を満たさないと判断した場合、所定の対象変数のビット幅を拡張するように前記第２プログラムの変更を行い、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすか否かの判断を行うことを特徴とする演算プログラム変換装置。
【請求項３】
請求項１または請求項２に記載の演算プログラム変換装置において、
前記変換部は、前記第２プログラムの実行結果の精度が予め設定された所望精度を満たすと判断した場合、所定の対象変数のビット幅を削減するように前記第２プログラムの変更を行い、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすと判断した場合に、前記第２プログラムを出力することを特徴とする演算プログラム変換装置。
【請求項４】
演算プログラムにおける変数の型の変換をコンピュータに実行させる演算プログラム変換プログラムであって、
浮動小数点演算を行う演算プログラムにおける浮動小数点型の変数を対象変数とし、前記演算プログラムの実行時に対象変数の値の変化が履歴として出力されるように、前記演算プログラムの変更を行って第１プログラムとし、該第１プログラムの実行を行い、該実行により得られる履歴に基づいて対象変数の値の範囲を検出するプロファイルステップと、
前記プロファイルステップにより検出された対象変数の値の範囲に基づいて、対象変数を固定小数点型に変換するように、前記演算プログラムの変更を行って第２プログラムとし、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすか否かの判断を行う変換ステップと
をコンピュータに実行させる演算プログラム変換プログラム。
【請求項５】
演算プログラムにおける変数の型の変換を行う演算プログラム変換方法であって、
浮動小数点演算を行う演算プログラムにおける浮動小数点型の変数を対象変数とし、前記演算プログラムの実行時に対象変数の値の変化が履歴として出力されるように、前記演算プログラムの変更を行って第１プログラムとし、該第１プログラムの実行を行い、該実行により得られる履歴に基づいて対象変数の値の範囲を検出するプロファイルステップと、
前記プロファイルステップにより検出された対象変数の値の範囲に基づいて、対象変数を固定小数点型に変換するように、前記演算プログラムの変更を行って第２プログラムとし、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすか否かの判断を行う変換ステップと
を実行する演算プログラム変換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算プログラムにおける変数の型の変換を行う演算プログラム変換装置、演算プログラム変換プログラム、演算プログラム変換方法に関するものである。
【背景技術】
【０００２】
信号処理関係（移動体通信、画像処理など）のアプリケーションにおいて、浮動小数点演算を使って、方式の検討や検証が行われている。従来のハードウェアの設計において、設計者は、方式検証された浮動小数点モデルのＣプログラムのリファレンスから、ＨＤＬ（Hardware Description Language）によるビット幅固定の整数演算へ、人手による変換を行っていた。
【０００３】
近年、固定小数点モデルのＣプログラムからのＲＴＬ自動合成技術（高位合成技術）が実用化されつつある。ここで、固定小数点演算に関しては、固定小数点クラスライブラリが提供され、シミュレーションできる環境は整ってきている。
【０００４】
なお、本発明の関連ある従来技術として、複数の浮動小数点データの指数部の最大値を検出し、この最大値と入力された浮動小数点データの指数部との値との差分を求め、入力された浮動小数点データを差分だけシフトする固定小数点データ生成回路がある（例えば、特許文献１参照）。
【特許文献１】特開２００２−１４９３９７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、浮動小数点から固定小数点への変換は人手で行われており、機能が複雑になるにつれて、精度（ＳＮ比）を確保しつつ、コストの低い（ビット幅の小さい）固定小数点演算に変換することは、ますます難しくなり、非常に多くの時間と労力を必要としている。
【０００６】
本発明は上述した問題点を解決するためになされたものであり、演算プログラムにおける浮動小数点演算を、精度を保ちながら固定小数点演算に変換する演算プログラム変換装置、演算プログラム変換プログラム、演算プログラム変換方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決するため、本発明は、演算プログラムにおける変数の型の変換を行う演算プログラム変換装置であって、浮動小数点演算を行う演算プログラムにおける浮動小数点型の変数を対象変数とし、前記演算プログラムの実行時に対象変数の値の変化が履歴として出力されるように、前記演算プログラムの変更を行って第１プログラムとし、該第１プログラムの実行を行い、該実行により得られる履歴に基づいて対象変数の値の範囲を検出するプロファイル部と、前記プロファイル部により検出された対象変数の値の範囲に基づいて、対象変数を固定小数点型に変換するように、前記演算プログラムの変更を行って第２プログラムとし、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすか否かの判断を行う変換部とを備えたものである。
【０００８】
また、本発明に係る演算プログラム変換装置において、前記変換部は、前記第２プログラムの実行結果の精度が予め設定された所望精度を満たさないと判断した場合、所定の対象変数のビット幅を拡張するように前記第２プログラムの変更を行い、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすか否かの判断を行うことを特徴とする。
【０００９】
また、本発明に係る演算プログラム変換装置において、前記変換部は、前記第２プログラムの実行結果の精度が予め設定された所望精度を満たすと判断した場合、所定の対象変数のビット幅を削減するように前記第２プログラムの変更を行い、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすと判断した場合に、前記第２プログラムを出力することを特徴とする。
【００１０】
また、本発明に係る演算プログラム変換装置において、前記変換部は、前記第２プログラムの実行結果の精度が予め設定された所望精度を満たさないと判断した場合、所定の対象変数のビット幅を拡張するように前記第２プログラムの変更を行い、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすまで、前記所定の対象変数のビット幅を拡張、前記第２プログラムの変更、該第２プログラムの実行を繰り返すことを特徴とする。
【００１１】
また、本発明に係る演算プログラム変換装置において、前記変換部は、前記第２プログラムにおける演算単位の段毎に、所定の対象変数のビット幅を変化させるように前記第２プログラムの変更を行い、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすと判断し、かつ、前記ビット幅の変化による前記第２プログラム全体の演算の規模が削減されると判断した場合に前記第２プログラムを出力することを特徴とする。
【００１２】
また、本発明に係る演算プログラム変換装置において、前記プロファイル部は、前記演算プログラムが用いるパラメタの値毎に前記第１プログラムの実行を行い、前記パラメタの値毎の履歴をマージして対象変数毎の値の範囲を検出することを特徴とする。
【００１３】
また、本発明に係る演算プログラム変換装置において、前記変換部は、前記第１プログラムの実行により得られた実行結果と前記第２プログラムの実行により得られた実行結果とに基づいて前記精度を算出することを特徴とする。
【００１４】
また、本発明に係る演算プログラム変換装置において、前記プロファイル部は、前記演算プログラムが用いるパラメタの値の範囲毎に前記第１プログラムの実行を行い、前記パラメタの値の範囲毎の対象変数の値の範囲を検出し、前記変換部は、前記パラメタの値の範囲毎の対象変数の値の範囲に基づく対象変数のビットシフトを、前記演算プログラムに追加するように、前記演算プログラムの変更を行って前記第２プログラムとすることを特徴とする。
【００１５】
また、本発明に係る演算プログラム変換装置において、前記プロファイル部は、前記演算プログラムのうちハードウェア化を行う部分の変数を対象変数として指定することを特徴とする。
【００１６】
また、本発明は、演算プログラムにおける変数の型の変換をコンピュータに実行させる演算プログラム変換プログラムであって、浮動小数点演算を行う演算プログラムにおける浮動小数点型の変数を対象変数とし、前記演算プログラムの実行時に対象変数の値の変化が履歴として出力されるように、前記演算プログラムの変更を行って第１プログラムとし、該第１プログラムの実行を行い、該実行により得られる履歴に基づいて対象変数の値の範囲を検出するプロファイルステップと、前記プロファイルステップにより検出された対象変数の値の範囲に基づいて、対象変数を固定小数点型に変換するように、前記演算プログラムの変更を行って第２プログラムとし、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすか否かの判断を行う変換ステップとをコンピュータに実行させるものである。
【００１７】
また、本発明に係る演算プログラム変換プログラムにおいて、前記変換ステップは、前記第２プログラムの実行結果の精度が予め設定された所望精度を満たさないと判断した場合、所定の対象変数のビット幅を拡張するように前記第２プログラムの変更を行い、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすか否かの判断を行うことを特徴とする。
【００１８】
また、本発明に係る演算プログラム変換プログラムにおいて、前記変換ステップは、前記第２プログラムの実行結果の精度が予め設定された所望精度を満たすと判断した場合、所定の対象変数のビット幅を削減するように前記第２プログラムの変更を行い、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすと判断した場合に、前記第２プログラムを出力することを特徴とする。
【００１９】
また、本発明に係る演算プログラム変換プログラムにおいて、前記変換ステップは、前記第２プログラムの実行結果の精度が予め設定された所望精度を満たさないと判断した場合、所定の対象変数のビット幅を拡張するように前記第２プログラムの変更を行い、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすまで、前記所定の対象変数のビット幅を拡張、前記第２プログラムの変更、該第２プログラムの実行を繰り返すことを特徴とする。
【００２０】
また、本発明に係る演算プログラム変換プログラムにおいて、前記変換ステップは、前記第２プログラムにおける演算単位の段毎に、前記ビット幅を変化させるように前記第２プログラムの変更を行い、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすと判断し、かつ、前記ビット幅の変化による前記第２プログラム全体の演算の規模が削減されると判断した場合に前記第２プログラムを出力することを特徴とする。
【００２１】
また、本発明に係る演算プログラム変換プログラムにおいて、前記プロファイルステップは、前記演算プログラムが用いるパラメタの値毎に前記第１プログラムの実行を行い、前記パラメタの値毎の履歴をマージして対象変数毎の値の範囲を検出することを特徴とする。
【００２２】
また、本発明に係る演算プログラム変換プログラムにおいて、前記変換ステップは、前記第１プログラムの実行により得られた実行結果と前記第２プログラムの実行により得られた実行結果とに基づいて前記精度を算出することを特徴とする。
【００２３】
また、本発明に係る演算プログラム変換プログラムにおいて、前記プロファイルステップは、前記演算プログラムが用いるパラメタの値の範囲毎に前記第１プログラムの実行を行い、前記パラメタの値の範囲毎の対象変数の値の範囲を検出し、前記変換ステップは、前記パラメタの値の範囲毎の対象変数の値の範囲に基づく対象変数のビットシフトを、前記演算プログラムに追加するように、前記演算プログラムの変更を行って前記第２プログラムとすることを特徴とする。
【００２４】
また、本発明に係る演算プログラム変換プログラムにおいて、前記プロファイルステップは、前記演算プログラムのうちハードウェア化を行う部分の変数を対象変数として指定することを特徴とする。
【００２５】
また、本発明は、演算プログラムにおける変数の型の変換を行う演算プログラム変換方法であって、浮動小数点演算を行う演算プログラムにおける浮動小数点型の変数を対象変数とし、前記演算プログラムの実行時に対象変数の値の変化が履歴として出力されるように、前記演算プログラムの変更を行って第１プログラムとし、該第１プログラムの実行を行い、該実行により得られる履歴に基づいて対象変数の値の範囲を検出するプロファイルステップと、前記プロファイルステップにより検出された対象変数の値の範囲に基づいて、対象変数を固定小数点型に変換するように、前記演算プログラムの変更を行って第２プログラムとし、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすか否かの判断を行う変換ステップとを実行するものである。
【発明の効果】
【００２６】
本発明によれば、演算プログラムにおける浮動小数点演算を、所望精度を確保しながら固定小数点演算に変換することができる。
【発明を実施するための最良の形態】
【００２７】
以下、本発明の実施の形態について図面を参照しつつ説明する。
【００２８】
まず、本実施の形態に係る演算プログラム変換装置の構成について説明する。
【００２９】
図１は、本実施の形態に係る演算プログラム変換装置の構成の一例を示すブロック図である。この演算プログラム変換装置は、変更部２０、コンパイラ３０、プロファイル部４０、評価部５０、指示部６０、通知部７０から構成される。なお、プロファイル部は、本実施の形態における変更部２０、コンパイラ３０、プロファイル部４０、指示部６０に対応する。また、変換部は、本実施の形態における変更部２０、コンパイラ３０、評価部５０、指示部６０に対応する。
【００３０】
変更部２０には、対象プログラムが入力される。対象プログラムは、ハードウェア化などのために浮動小数点演算から固定小数点演算への変換が施されるプログラムである。つまり、対象プログラムの最初の状態は、浮動小数点演算アルゴリズムが記述されたものである。評価部５０は、固定小数点ライブラリを持つ。固定小数点ライブラリは、固定小数点型を持つ。指示部６０は、変更部２０に指示情報を渡すことにより、対象プログラムの変更を指示する。
【００３１】
指示情報は、変数名、所望精度、初期ビット幅、変数ビット幅、自動変換、変換モードを含む。所望精度は、下限のＳＮ比で表される。初期ビット幅は、全ての変数の下限ビット幅と上限ビット幅を示す。変数ビット幅は、変数毎のビット幅を示す。自動変換とは、浮動小数点演算から固定小数点演算への自動変換を行うか否かを示す。変換モードとは、全ての変数を下限ビット幅の固定小数点に一括変換してからビット幅の最適化を行う、全ての変数を上限ビット幅の固定小数点に一括変換してからビット幅の最適化を行う、などのモードを示す。
【００３２】
次に、本実施の形態に係る演算プログラム変換装置の動作について説明する。
【００３３】
図２は、本実施の形態に係る演算プログラム変換装置の動作の一例を示すフローチャートである。まず、指示部６０は、入力された対象プログラムにおける浮動小数点型の変数のうち、固定小数点型に変換する変数を特定し、対象変数とする（Ｓ２）。ここで、固定小数点に変換する変数は、対象プログラムが全てハードウェア化される場合は全ての変数、対象プログラムの一部がハードウェア化される場合はハードウェア化の範囲における変数、予め設計者に指定された変数のいずれかである。
【００３４】
次に、指示部６０は、対象プログラムをプロファイルプログラムに変換し、プロファイルを行うプロファイルステップを実行する（Ｓ４）。次に、指示部６０は、対象プログラムの浮動小数点演算を固定小数点演算に変換する第１変換ステップ（変換ステップ）を実行し（Ｓ６）、このフローは終了する。
【００３５】
次に、処理Ｓ４におけるプロファイルステップについて説明する。
【００３６】
図３は、本実施の形態に係るプロファイルステップの動作の一例を示すフローチャートである。まず、指示部６０は、対象プログラムが実行時に履歴情報を生成するように、対象プログラムを書き換える指示情報を、変更部２０へ渡す（Ｓ１１）。ここで、履歴情報は、対象変数の値であり、値の更新時に記録されるものである。変更部２０は、指示情報に従って、対象プログラムを書き換え、プロファイルプログラムとする（Ｓ１２）。
【００３７】
次に、コンパイラ３０は、プロファイルプログラムのコンパイルを行い、プロファイルプログラムの実行形式を生成する（Ｓ１３）。次に、プロファイル部４０は、プロファイルプログラムへの入力パラメタ（テストパターン）や実行モードなどのパラメタ設定を行い（Ｓ１４）、このパラメタ設定を用いてプロファイルプログラムの実行を行うことにより、実行結果と履歴情報を出力する（Ｓ１５）。つまり、入力パラメタ毎の実行結果と履歴情報が出力される。次に、プロファイル部４０は、全てのパラメタ設定に対応する実行が終了したか否かの判断を行う（Ｓ１６）。
【００３８】
終了していない場合（Ｓ１６，Ｎ）、処理Ｓ１４へ戻り、プロファイル部４０は、次のパラメタ設定を行う。一方、終了した場合（Ｓ１６，Ｙ）、プロファイル部４０は、パラメタ設定毎の履歴情報から対象変数毎のプロファイル情報を生成する（Ｓ１７）。ここで、プロファイル情報は、全てのパラメタ設定に対する対象変数の履歴情報をマージしたものであり、対象変数の最小値と最大値、対象変数の絶対値の最小値と最大値を示す。次に、プロファイル部４０は、設計者からの指示に応じて、通知部７０を用いて履歴情報やプロファイル情報の表示や印刷を行い（Ｓ１８）、このフローを終了する。なお、プロファイル情報は、パラメタ設定毎に、記録されても良い。
【００３９】
上述したプロファイルステップによれば、浮動小数点演算における対象変数の値の範囲を取得することができる。
【００４０】
次に、処理Ｓ６における第１変換ステップについて説明する。
【００４１】
図４は、本実施の形態に係る第１変換ステップの動作の一例を示すフローチャートである。まず、予め所望精度（ＳＮ比、例えば、５０ｄＢ）が設定される。また、指示部６０は、プロファイル情報における最大値と最小値から上限ビット幅と下限ビット幅を決定する（Ｓ３１）。上限ビット幅と下限ビット幅は、予め設計者により与えられても良い。
【００４２】
次に、指示部６０は、対象プログラムの最後段（出力段）から順次、段を選択して対象段とし、対象段における変数を選択して対象変数とする（Ｓ３２）。ここで、対象プログラムにおける演算単位を段とする。演算単位は、ハードウェア化により１つの演算器となる部分である。次に、指示部６０は、プロファイル情報の最大値から整数部のビット幅を決定し、プロファイル情報の最小値から固定小数点の位置を決定することにより、固定小数点の型を決定し、ビット幅リストへ登録する（Ｓ３３）。ビット幅リストには、変数毎のビット幅が記録される。次に、指示部６０は、固定小数点の型を含む指示情報を変更部２０へ渡すことにより、精度評価ステップを行う（Ｓ３４）。次に、指示部６０は、精度評価ステップにより得られた精度が所望精度を満足したか否かの判断を行う（Ｓ３５）。
【００４３】
処理Ｓ３５において、所望精度を満足しない場合（Ｓ３５，Ｎｏ）、指示部６０は、ビット幅が上限ビット幅であるか否かの判断を行う（Ｓ４１）。ビット幅が上限でない場合（Ｓ４１，Ｎｏ）、指示部６０は、対象変数のビット幅を１ビット増加させ（Ｓ４５）、処理Ｓ３３へ戻る。一方、ビット幅が上限である場合（Ｓ４１，Ｙｅｓ）、指示部６０は、１つ前段を対象段とし、対象段の変数のビット幅を１ビット拡張させる（Ｓ４２）。ここで、対象段の変数のビット幅が上限ビット幅であれば、指示部６０は、更に１つ前段を対象段とし、対象段の変数のビット幅を１ビット拡張させる。
【００４４】
次に、指示部６０は、このビット幅の拡張が可能であるか否かの判断を行う（Ｓ４３）。ビット幅の拡張が不可能である場合（Ｓ４３，Ｎｏ）、指示部６０は、この変換方法により所望精度を満足することができないと判断し、第２変換ステップを行い（Ｓ４４）、このフローは終了する。一方、ビット幅の拡張が可能である場合（Ｓ４３，Ｙｅｓ）、処理Ｓ３３へ戻り、引き続き対象段の別の対象変数の処理を行う。
【００４５】
また、処理Ｓ３５において、所望精度を満足した場合（Ｓ３５，Ｙｅｓ）、指示部６０は、全ての対象変数の固定小数点への変換が完了したか否かの判断を行う（Ｓ５１）。変換の完了していない変数がある場合（Ｓ５１，Ｎｏ）、処理Ｓ３２へ戻り、次の変数を選択する。一方、全ての変換が完了した場合（Ｓ５１，Ｙｅｓ）、指示部６０は、ビット幅を最適化するための最適化ステップを行い（Ｓ５２）、このフローは終了する。
【００４６】
上述した第１変換ステップによれば、所望精度を確保しながら、対象変数を浮動小数点型から固定小数点型へ変換することができる。
【００４７】
次に、処理Ｓ３４における精度評価ステップについて説明する。
【００４８】
図５は、本実施の形態に係る精度評価ステップの動作の一例を示すフローチャートである。まず、指示部６０は、決定した固定小数点の型を含む指示情報を変更部２０へ出力する（Ｓ６１）。ここで、指示情報は、例えば、対象変数の定義において“ｄｏｕｂｌｅ”型を“ｆｉｘｅｄ１６．４”型（整数部が１６ビット、小数部が４ビット）に変更するように指示する。次に、変更部２０は、指示情報に従って対象プログラムの変更を行う（Ｓ６２）。次に、コンパイラ３０は、変更部２０により変更された対象プログラムのコンパイルを行い、実行形式に変換する（Ｓ６３）。次に、評価部５０は、対象プログラムの実行形式の実行を行い、実行結果を出力する（Ｓ６５）。
【００４９】
次に、評価部５０は、プロファイルステップにより得られた浮動小数点演算の実行結果と処理Ｓ６５により得られた固定小数点演算の実行結果とから、精度（ＳＮ比）の計算を行い（Ｓ６７）、このフローを終了する。ここで、精度は、例えば、誤差として算出され、プロファイルステップにより得られた浮動小数点演算の実行結果Ａと処理Ｓ６５により得られた固定小数点演算の実行結果Ｂとを用いて、誤差＝（（Ｂ−Ａ）＾２）／（Ａ＾２）を算出し、その平均として算出される。また、精度評価ステップにより得られた精度は、通知部７０により表示や印刷が行われる。
【００５０】
上述した精度評価ステップによれば、変換前の浮動小数点演算と変換後の固定小数点演算の精度の劣化を評価することにより、所望精度を用いるビット幅の決定に用いることができる。
【００５１】
次に、処理Ｓ５２における最適化ステップについて説明する。
【００５２】
図６は、本実施の形態に係る精度評価ステップの動作の一例を示すフローチャートである。まず、指示部６０は、最後段から順次、段を選択して対象段とし、対象段の変数を選択して対象変数とする（Ｓ７２）。次に、指示部６０は、ビット幅リストにおける対象変数の小数部のビット幅を１ビット拡張し、増減ビット幅リストに登録する（Ｓ７３）。増減ビット幅リストには、変数毎のビット幅の増減が記録される。次に、指示部６０は、対象段の１つ前段の変数のビット幅を１ビット削減し、増減ビット幅リストに登録する（Ｓ７４）。次に、指示部６０は、対象変数のビット幅を含む指示情報を変更部２０へ渡すことにより、精度評価ステップを行う（Ｓ７５）。次に、指示部６０は、精度評価ステップにより得られた精度が所望精度を満足するか否かの判断を行う（Ｓ７６）。
【００５３】
評価結果が所望精度を満足しない場合（Ｓ７６，Ｎｏ）、指示部６０は、削減したビット幅を元に戻して（１ビット拡張）、増減ビット幅リストに登録し（Ｓ７９）、処理Ｓ７４へ戻り、更に１つ前段のビット幅を１ビット削減する。一方、評価結果が所望精度を満足する場合（Ｓ７６，Ｙｅｓ）、指示部６０は、全ての変数の精度評価ステップが完了したか否かの判断を行う（Ｓ７８）。
【００５４】
精度評価が完了していない変数がある場合（Ｓ７８，Ｎｏ）、処理Ｓ７４へ戻り、更に１つ前段のビット幅を１ビット削減する。一方、全ての変数の精度評価が完了した場合（Ｓ７８，Ｙｅｓ）、指示部６０は、ビット幅削減効果測定ステップを行い（Ｓ８１）、削減効果があるか否かの判断を行う（Ｓ８２）。
【００５５】
削減効果がない場合（Ｓ８２，Ｎｏ）、処理Ｓ８４へ移行する。一方、削減効果がない場合（Ｓ８２，Ｙｅｓ）、指示部６０は、暫定変数ビット幅リストの内容を変数ビット幅リストに反映する（Ｓ８３）。次に、指示部６０は、暫定変数ビット幅リストをクリアする（Ｓ８４）。次に、指示部６０は、全ての変数のビット幅削減効果測定ステップが完了したか否かの判断を行う（Ｓ８５）。全ての変数のビット幅削減効果測定ステップが完了していない場合（Ｓ８５，Ｎ）、処理Ｓ７２へ戻り、指示部６０は、次の対象変数、対象段を選択する。一方、全ての変数のビット幅削減効果測定ステップが完了した場合（Ｓ８５，Ｙ）、このフローは終了する。
【００５６】
次に、処理Ｓ８１におけるビット幅削減効果測定ステップについて説明する。
【００５７】
ここで、指示部６０は、変数毎に増減ビット幅リストを参照し、（削減ビット数−拡張ビット数）＞０であれば、削減効果があると判断する。なお、本実施の形態において、ビット幅リストと増減ビット幅リストにおける値は、変数毎に記録されるとしたが、変数毎、演算器毎に記録されても良い。この場合、指示部６０は、データフローグラフ等を用意して演算器のビット数を合算し、合算したビット数が少なくなっていれば、削減効果があると判断する。演算器毎にビット幅の計算を行うことにより、より正確に最適化を行うことができる。また、演算器の種類によって、ハードウェア化後の回路規模の比較を行っても良い。例えば、加算器において削減されるビット数と乗算器において削減されるビット数が同じである場合、乗算器におけるビット数の削減の方が回路規模において削減効果が大きいと判断する。
【００５８】
上述した最適化ステップによれば、対象プログラム全体でのビット幅の増減を確認しながら変数毎のビット幅の増減を行うことにより、ビット幅が不要に拡張されることを防ぎ、ビット幅を最適化することができる。
【００５９】
次に、処理Ｓ４４における第２変換ステップについて説明する。
【００６０】
第２変換ステップは、第１変換ステップにおいて所望精度を満足することができないと判断された場合の処理である。第２変換ステップの動作は、第１変換ステップと同様であるが、精度評価ステップにおける処理Ｓ６１，Ｓ６２において、一時的にダイナミックレンジを確保するように対象プログラムを変更する。指示部６０は、第２変換ステップの対象変数として、履歴情報またはプロファイル情報からパラメタ設定（モードや入力パラメタ）により値の範囲が異なるものを選択する。また、指示部６０は、モードや入力パラメタによる分岐などから、値の範囲を変化させる対象部分を決定する。ここで、指示部６０は、設計者の指示により対象部分を決定しても良い。指示部６０は、対象部分の開始点において、所定の固定値だけ小数点位置を移動させるように書き換え、対象部分の終了点において、小数点位置を元に戻すように書き換える。
【００６１】
ここで、第２変換ステップの具体例について説明する。
【００６２】
まず、第２変換ステップによる変換前の対象プログラムを次に示す。
【００６３】
Ｘ［ｎ］＝ｐ１＊Ｄ［ｎ］；
Ｙ＝Σ文字Ｘ［ｎ］；
【００６４】
ここで、パラメタｐ１により対象変数ｘ［ｎ］の値の範囲が大きく異なるとする。図７は、本実施の形態に係るプロファイル情報の一例を示す表である。このプロファイル情報において、入力パラメタｐ１の値毎に、対象変数Ｘ［ｎ］の値の範囲（最小値と最大値）を示すものである。ここで、ｐ１＝１のときのＸ［ｎ］の整数部は１ビット、ｐ１＝２のときのＸ［ｎ］の整数部は３ビット、ｐ１＝３のときのＸ［ｎ］の整数部は４ビット、ｐ１＝４のときのＸ［ｎ］の整数部は４ビット、ｐ１＝５のときのＸ［ｎ］の整数部は５ビット、それぞれ必要であると決定される。また、第１変換ステップによれば、最大値に基づいて、ｘ［ｎ］の整数部は５ビット、小数部は３ビットとなり、計８ビットとなる。従って、ｐ１＝１の場合、整数部４ビットが無駄になっていた。
【００６５】
第２変換ステップにおいて、指示部６０は、入力パラメタの値の範囲による場合分けを対象プログラムに追加し、入力パラメタ毎に対象変数のビットシフトを追加する。
【００６６】
第２変換ステップによる変換後の対象プログラム（Ｃプログラム）を次に示す。
【００６７】
ｓｗｉｔｃｈ（ｐ１）｛
／／ｐ１により、Ｘ［ｎ］をシフトして８ビット
ｃａｓｅ  １  ：Ｘ［ｎ］＝（ｐ１＊Ｄ［ｎ］）＜＜４；
ｃａｓｅ  ５  ：Ｘ［ｎ］＝（ｐ１＊Ｄ［ｎ］）＜＜２；
ｃａｓｅ  １０：Ｘ［ｎ］＝（ｐ１＊Ｄ［ｎ］）＜＜１；
ｃａｓｅ  １５：Ｘ［ｎ］＝（ｐ１＊Ｄ［ｎ］）＜＜１；
ｃａｓｅ  ２０：Ｘ［ｎ］＝（ｐ１＊Ｄ［ｎ］）；
｝
Ｙ＝ΣＸ［ｎ］；
ｓｗｉｔｃｈ（ｐ１）｛
ｃａｓｅ  １  ：Ｙ＝Ｙ＜＜４；
ｃａｓｅ  ５  ：Ｙ＝Ｙ＜＜２；
ｃａｓｅ  １０：Ｙ＝Ｙ＜＜１；
ｃａｓｅ  １５：Ｙ＝Ｙ＜＜１；
ｃａｓｅ  ２０：Ｙ＝Ｙ；
｝
【００６８】
上述した第２変換ステップによれば、入力パラメタ（モード）毎に一時的なビットシフトを行うことにより、少ないビット幅で、ダイナミックレンジを確保することができる。
【００６９】
なお、本実施の形態においては、第１変換ステップにより、所望精度が満足できない場合に、第２変換ステップを用いるとしたが、対象プログラムによって、第１変換ステップと第２変換ステップのどちらを用いるか選択しても良い。
【００７０】
本実施の形態によれば、浮動小数点演算プログラムを、ハードウェア／ファームウェアに実装するための固定小数点演算に自動的に変換することができる。更に、変換後の固定小数点演算は、所望精度を確保しながら、ビット幅の増大を防ぐことができる。
【００７１】
また、本実施の形態に係る演算プログラム変換装置は、情報処理装置に容易に適用することができ、情報処理装置の性能をより高めることができる。ここで、情報処理装置には、例えばＰＣ（Personal Computer）、サーバ、ワークステーション等が含まれ得る。
【００７２】
更に、演算プログラム変換装置を構成するコンピュータにおいて上述した各ステップを実行させるプログラムを、演算プログラム変換プログラムとして提供することができる。上述したプログラムは、コンピュータにより読取り可能な記録媒体に記憶させることによって、演算プログラム変換装置を構成するコンピュータに実行させることが可能となる。ここで、上記コンピュータにより読取り可能な記録媒体としては、ＲＯＭやＲＡＭ等のコンピュータに内部実装される内部記憶装置、ＣＤ−ＲＯＭやフレキシブルディスク、ＤＶＤディスク、光磁気ディスク、ＩＣカード等の可搬型記憶媒体や、コンピュータプログラムを保持するデータベース、或いは、他のコンピュータ並びにそのデータベースや、更に回線上の伝送媒体をも含むものである。
【００７３】
（付記１）  演算プログラムにおける変数の型の変換を行う演算プログラム変換装置であって、
浮動小数点演算を行う演算プログラムにおける浮動小数点型の変数を対象変数とし、前記演算プログラムの実行時に対象変数の値の変化が履歴として出力されるように、前記演算プログラムの変更を行って第１プログラムとし、該第１プログラムの実行を行い、該実行により得られる履歴に基づいて対象変数の値の範囲を検出するプロファイル部と、
前記プロファイル部により検出された対象変数の値の範囲に基づいて、対象変数を固定小数点型に変換するように、前記演算プログラムの変更を行って第２プログラムとし、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすか否かの判断を行う変換部と
を備える演算プログラム変換装置。
（付記２）  付記１に記載の演算プログラム変換装置において、
前記変換部は、前記第２プログラムの実行結果の精度が予め設定された所望精度を満たさないと判断した場合、所定の対象変数のビット幅を拡張するように前記第２プログラムの変更を行い、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすか否かの判断を行うことを特徴とする演算プログラム変換装置。
（付記３）  付記１または付記２に記載の演算プログラム変換装置において、
前記変換部は、前記第２プログラムの実行結果の精度が予め設定された所望精度を満たすと判断した場合、所定の対象変数のビット幅を削減するように前記第２プログラムの変更を行い、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすと判断した場合に、前記第２プログラムを出力することを特徴とする演算プログラム変換装置。
（付記４）  付記１乃至付記３のいずれかに記載の演算プログラム変換装置において、
前記変換部は、前記第２プログラムの実行結果の精度が予め設定された所望精度を満たさないと判断した場合、所定の対象変数のビット幅を拡張するように前記第２プログラムの変更を行い、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすまで、前記所定の対象変数のビット幅を拡張、前記第２プログラムの変更、該第２プログラムの実行を繰り返すことを特徴とする演算プログラム変換装置。
（付記５）  付記１乃至付記４のいずれかに記載の演算プログラム変換装置において、
前記変換部は、前記第２プログラムにおける演算単位の段毎に、所定の対象変数のビット幅を変化させるように前記第２プログラムの変更を行い、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすと判断し、かつ、前記ビット幅の変化による前記第２プログラム全体の演算の規模が削減されると判断した場合に前記第２プログラムを出力することを特徴とする演算プログラム変換装置。
（付記６）  付記１乃至付記５のいずれかに記載の演算プログラム変換装置において、
前記プロファイル部は、前記演算プログラムが用いるパラメタの値毎に前記第１プログラムの実行を行い、前記パラメタの値毎の履歴をマージして対象変数毎の値の範囲を検出することを特徴とする演算プログラム変換装置。
（付記７）  付記１乃至付記６のいずれかに記載の演算プログラム変換装置において、
前記変換部は、前記第１プログラムの実行により得られた実行結果と前記第２プログラムの実行により得られた実行結果とに基づいて前記精度を算出することを特徴とする演算プログラム変換装置。
（付記８）  付記１乃至付記７のいずれかに記載の演算プログラム変換装置において、
前記プロファイル部は、前記演算プログラムが用いるパラメタの値の範囲毎に前記第１プログラムの実行を行い、前記パラメタの値の範囲毎の対象変数の値の範囲を検出し、
前記変換部は、前記パラメタの値の範囲毎の対象変数の値の範囲に基づく対象変数のビットシフトを、前記演算プログラムに追加するように、前記演算プログラムの変更を行って前記第２プログラムとすることを特徴とする演算プログラム変換装置。
（付記９）  付記１乃至付記８のいずれかに記載の演算プログラム変換装置において、
前記プロファイル部は、前記演算プログラムのうちハードウェア化を行う部分の変数を対象変数として指定することを特徴とする演算プログラム変換装置。
（付記１０）  演算プログラムにおける変数の型の変換をコンピュータに実行させる演算プログラム変換プログラムであって、
浮動小数点演算を行う演算プログラムにおける浮動小数点型の変数を対象変数とし、前記演算プログラムの実行時に対象変数の値の変化が履歴として出力されるように、前記演算プログラムの変更を行って第１プログラムとし、該第１プログラムの実行を行い、該実行により得られる履歴に基づいて対象変数の値の範囲を検出するプロファイルステップと、
前記プロファイルステップにより検出された対象変数の値の範囲に基づいて、対象変数を固定小数点型に変換するように、前記演算プログラムの変更を行って第２プログラムとし、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすか否かの判断を行う変換ステップと
をコンピュータに実行させる演算プログラム変換プログラム。
（付記１１）  付記１０に記載の演算プログラム変換プログラムにおいて、
前記変換ステップは、前記第２プログラムの実行結果の精度が予め設定された所望精度を満たさないと判断した場合、所定の対象変数のビット幅を拡張するように前記第２プログラムの変更を行い、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすか否かの判断を行うことを特徴とする演算プログラム変換プログラム。
（付記１２）  付記１０または付記１１に記載の演算プログラム変換プログラムにおいて、
前記変換ステップは、前記第２プログラムの実行結果の精度が予め設定された所望精度を満たすと判断した場合、所定の対象変数のビット幅を削減するように前記第２プログラムの変更を行い、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすと判断した場合に、前記第２プログラムを出力することを特徴とする演算プログラム変換プログラム。
（付記１３）  付記１０乃至付記１２のいずれかに記載の演算プログラム変換プログラムにおいて、
前記変換ステップは、前記第２プログラムの実行結果の精度が予め設定された所望精度を満たさないと判断した場合、所定の対象変数のビット幅を拡張するように前記第２プログラムの変更を行い、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすまで、前記所定の対象変数のビット幅を拡張、前記第２プログラムの変更、該第２プログラムの実行を繰り返すことを特徴とする演算プログラム変換プログラム。
（付記１４）  付記１０乃至付記１３のいずれかに記載の演算プログラム変換プログラムにおいて、
前記変換ステップは、前記第２プログラムにおける演算単位の段毎に、前記ビット幅を変化させるように前記第２プログラムの変更を行い、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすと判断し、かつ、前記ビット幅の変化による前記第２プログラム全体の演算の規模が削減されると判断した場合に前記第２プログラムを出力することを特徴とする演算プログラム変換プログラム。
（付記１５）  付記１０乃至付記１４のいずれかに記載の演算プログラム変換プログラムにおいて、
前記プロファイルステップは、前記演算プログラムが用いるパラメタの値毎に前記第１プログラムの実行を行い、前記パラメタの値毎の履歴をマージして対象変数毎の値の範囲を検出することを特徴とする演算プログラム変換プログラム。
（付記１６）  付記１０乃至付記１５のいずれかに記載の演算プログラム変換プログラムにおいて、
前記変換ステップは、前記第１プログラムの実行により得られた実行結果と前記第２プログラムの実行により得られた実行結果とに基づいて前記精度を算出することを特徴とする演算プログラム変換プログラム。
（付記１７）  付記１０乃至付記１６のいずれかに記載の演算プログラム変換プログラムにおいて、
前記プロファイルステップは、前記演算プログラムが用いるパラメタの値の範囲毎に前記第１プログラムの実行を行い、前記パラメタの値の範囲毎の対象変数の値の範囲を検出し、
前記変換ステップは、前記パラメタの値の範囲毎の対象変数の値の範囲に基づく対象変数のビットシフトを、前記演算プログラムに追加するように、前記演算プログラムの変更を行って前記第２プログラムとすることを特徴とする演算プログラム変換プログラム。
（付記１８）  付記１０乃至付記１７のいずれかに記載の演算プログラム変換プログラムにおいて、
前記プロファイルステップは、前記演算プログラムのうちハードウェア化を行う部分の変数を対象変数として指定することを特徴とする演算プログラム変換プログラム。
（付記１９）  演算プログラムにおける変数の型の変換を行う演算プログラム変換方法であって、
浮動小数点演算を行う演算プログラムにおける浮動小数点型の変数を対象変数とし、前記演算プログラムの実行時に対象変数の値の変化が履歴として出力されるように、前記演算プログラムの変更を行って第１プログラムとし、該第１プログラムの実行を行い、該実行により得られる履歴に基づいて対象変数の値の範囲を検出するプロファイルステップと、
前記プロファイルステップにより検出された対象変数の値の範囲に基づいて、対象変数を固定小数点型に変換するように、前記演算プログラムの変更を行って第２プログラムとし、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすか否かの判断を行う変換ステップと
を実行する演算プログラム変換方法。
（付記２０）  付記１９に記載の演算プログラム変換方法において、
前記変換ステップは、前記第２プログラムの実行結果の精度が予め設定された所望精度を満たさないと判断した場合、所定の対象変数のビット幅を拡張するように前記第２プログラムの変更を行い、該第２プログラムの実行を行い、該実行により得られる実行結果の精度が予め設定された所望精度を満たすか否かの判断を行うことを特徴とする演算プログラム変換方法。
【図面の簡単な説明】
【００７４】
【図１】本実施の形態に係る演算プログラム変換装置の構成の一例を示すブロック図である。
【図２】本実施の形態に係る演算プログラム変換装置の動作の一例を示すフローチャートである。
【図３】本実施の形態に係るプロファイルステップの動作の一例を示すフローチャートである。
【図４】本実施の形態に係る第１変換ステップの動作の一例を示すフローチャートである。
【図５】本実施の形態に係る精度評価ステップの動作の一例を示すフローチャートである。
【図６】本実施の形態に係る精度評価ステップの動作の一例を示すフローチャートである。
【図７】本実施の形態に係るプロファイル情報の一例を示す表である。
【符号の説明】
【００７５】
２０  変更部、３０  コンパイラ、５０  評価部、４０  プロファイル部、６０  指示部、７０  通知部。
【図１】
2008033729.tif 000003
【図２】
2008033729.tif 000004
【図３】
2008033729.tif 000005
【図４】
2008033729.tif 000006
【図５】
2008033729.tif 000007
【図６】
2008033729.tif 000008
【図７】
2008033729.tif 000009