JP2015007820A - 情報処理装置、情報処理方法及びプログラム - Google Patents
情報処理装置、情報処理方法及びプログラム Download PDFInfo
- Publication number
- JP2015007820A JP2015007820A JP2013131885A JP2013131885A JP2015007820A JP 2015007820 A JP2015007820 A JP 2015007820A JP 2013131885 A JP2013131885 A JP 2013131885A JP 2013131885 A JP2013131885 A JP 2013131885A JP 2015007820 A JP2015007820 A JP 2015007820A
- Authority
- JP
- Japan
- Prior art keywords
- program
- type
- attribute
- variable
- attribute value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
【解決手段】対象変数の属性がパラメータ化され、コンパイルされたプログラムを読み込む読み込み手段と、前記読み込み手段により読み込まれたプログラムに基づく処理の実行時に、属性に関するパラメータ情報に基づいて、前記プログラムの対象変数の属性に属性値を設定する設定手段と、前記設定手段により属性値が設定されたプログラムに基づいて処理を実行する実行手段と、を有することによって課題を解決する。
【選択図】図5
Description
ユーザは、浮動小数点演算のプログラムを整数・固定小数点演算のプログラムに人手で変換する場合、ハードウェア記述言語の一種であるSystemCという、C++言語のコンパイラでコンパイルすることが可能なクラスライブラリを用いる場合がある。SystemCのクラスライブラリは、sc_intという整数・固定小数点変換を支援する型を提供している。sc_int型は、プログラムコード上の型にC++言語が提供する機能であるテンプレートを用いて、ビット幅を固定的に定義する。このため、ユーザは、ビット幅を変更して実行結果を得たい場合、プログラムコードを変更し、再度コンパイルしてオブジェクトプログラムを生成するといった手間が発生する。
浮動小数点を用いたプログラムの整数・固定小数点を用いたプログラムへの変換を支援する方法として、以下のような手法が開示されている。
特許文献2では、浮動小数点を用いたプログラムで利用されている数要素を抽出し、プログラム中の代入式や、演算式を解析し、それぞれの数要素の関係情報に基づいて、数要素のデータ型の属性値を決定する技術が開示されている。
特許文献1に開示されている技術は、自動で変数のビット幅を決定するが、変数毎に精度評価を行い、ビット幅を決定していく。しかし、実行結果の評価後に所望の精度を満たしていない場合、特許文献1に開示されている技術は、ビット幅を変更するために、再度プログラムを変更し、コンパイルしてから実行する必要がある。
特許文献2に開示される技術は、プログラム中の部分的な代入式や、演算式を解析し、各変数の関係情報に基づいてデータ型の属性値を決定する。特許文献2に開示される技術においても、実行結果の評価後に所望の精度を満たしていない場合、ビット幅を変更するためには、再度プログラムを変更し、コンパイルしてから実行する必要がある。
本発明は、整数・固定小数点化における変数のビット幅等の型の属性検討の際、検討時間を削減する技術を提供することを目的とする。
<実施形態1>
以下、プログラム中の変数の型を探索する変数の型探索方法について説明する。本実施形態では、プログラム中の浮動小数点変数を固定小数点変数に変換する際の固定小数点型の属性の探索方法について説明する。なお、以降の説明では、変数の型を変換する前の浮動小数点変数のプログラムを第1のプログラムといい、変換後の固定小数点変数のプログラムを第2のプログラムという。また、浮動小数点変数型を第1の型、固定小数点型を第2の型とする。
本実施形態による変数の型探索方法は、例えば、画像処理等の信号処理プログラムのアルゴリズム開発で開発された浮動小数点演算を用いて書かれたプログラムを、ハードウェアに実装するために、いくつかの変数の型を固定小数点型に変換する場合に適用される。
型探索装置100は、CPU101、RAM102、ROM103、HDD104、入力装置105、表示装置106、ネットワークI/F107及びシステムバス108を有する。CPU101、RAM102、ROM103、HDD104、入力装置105、表示装置106及びネットワークI/F107は、システムバス108を介して互いに通信可能に接続されている。
CPU101は、型探索装置100全体を制御する。CPU101がROM103等に格納されているプログラムを実行することにより、後述する型探索装置100の機能(ソフトウェア構成)及びフローチャートに係る処理が実現される。
RAM102は、CPU101がプログラムを実行するためのワークエリアや、一時記憶領域として機能するメモリである。
ROM103は、CPU101が実行するプログラム等を格納するメモリである。
HDD104は、閾値や、パラメータに関する設定値等を含む各種のデータや、各種のプログラム等を格納するハードディスクドライブである。
入力装置105は、ユーザが型探索装置100に対して入力操作をするためのキーボードや、マウス等である。
表示装置106は、型探索装置100が各種の画面を表示するためのディスプレイ等である。
ネットワークI/F107は、外部ネットワークを介して他の装置と通信を行うためのインターフェースである。
本実施形態では、型探索装置100がプログラム中の浮動小数点変数を固定小数点変数に変換するが、これに限らず、例えば、プログラム中の浮動小数点変数を仮数部、指数部のビット幅が可変な浮動小数点変数に変換する場合に適用してもよい。
プログラム作成部701は、入力された第1のプログラムから、変数の型表現に必要な型の属性が、実行時に設定可能なようにパラメータ化されたプログラムを作成する。プログラム作成部701が変数の型の属性を実行時に設定可能なパラメータにすることで、型探索装置100は、プログラムの変更や、属性値を変更した際にコンパイルをすることなく、変数の型を変換した場合と同等な挙動をシミュレーションすることが可能となる。本実施形態において、ユーザは、第1のプログラムと、固定小数点変数に変換したい1つ以上の変数名とを入力する。そして、プログラム作成部701は、入力された変数名に従って、第1のプログラム中の変数の型を固定小数点シミュレーション型に変更した固定小数点シミュレーションプログラムを作成する。固定小数点シミュレーション型とは、固定小数点の属性であるビット幅、小数点位置等を、実行中に設定可能なようにパラメータ化した型であり、本実施形態ではC++言語のクラスとして実装される。固定小数点シミュレーション型の詳細については、図6等を用いて後述する。また、本実施形態の型探索装置100では、プログラム作成部701が入力された変数名を参照して自動で変更するものとしているが、ユーザが手作業で所望の変数の型を固定小数点シミュレーション型に変更するものとしてもよい。第1のプログラム中の固定小数点変数に変換したい変数の型を固定小数点シミュレーション型に変更した固定小数点シミュレーションプログラムは、実行時に設定される属性値に基づき変数の型の挙動をシミュレーションすることができるプログラムである。
属性値準備部703は、固定小数点シミュレーションプログラム内の固定小数点シミュレーション型の変数について、プログラム実行時に変数の型の属性に設定する属性値を予め準備する。より具体的にいうと、属性値準備部703は、ユーザにより指定された固定小数点化したい対象変数(変数情報)と、その対象変数の属性に設定する属性値(属性値情報)とを対応付けたパラメータファイルを作成してメモリに格納する。なお、パラメータファイルは、パラメータ情報の一例である。パラメータファイルはどのような形式でもよいが、例えば図3に示すような表形式のパラメータファイルを用いることができる。ここで、図3は、パラメータファイルの一例を示す図である。ユーザは、入力装置105を介してシステム上のGUI等で、設定する対象変数と、属性値との対応関係を入力すればよい。なお、属性値準備部703がパラメータファイルを作成する処理は、パラメータ情報作成処理の一例である。
型シミュレーション部704は、プログラム読み込み部1201、属性値保持部1202、属性値設定部1203及び演算部1204を有する。
プログラム読み込み部1201は、コンパイル部702が生成したオブジェクトプログラムの実行が開始されると、オブジェクトプログラムをメモリに読み込む。
属性値保持部1202は、属性値準備部703により入力されたパラメータファイルに記載された変数の型の属性と、属性値との対応関係をメモリ上に展開し、プログラム実行中メモリ上に保持する。なお、本実施形態では属性値保持部1202を用いるものとしているが、型探索装置100は、パラメータファイルをメモリ上に保持せずに、属性値設定時に直接ファイルにアクセスするものとしてもよい。
属性値設定部1203は、型の属性値をパラメータ化された属性に設定する。本実施形態において、属性値設定部1203は、プログラム実行中、固定小数点シミュレーション型の変数の初期化時に、属性値保持部1202によりメモリ上に保持されたパラメータファイルを参照し、属性値を変数の型の属性に設定する。また、属性値設定部1203は、初期化時に属性値を設定せずに、演算処理や、代入処理を行うたびに属性値を設定するものとしてもよい。このように、属性値設定部1203は、プログラム外から属性値を設定することが可能となる。これにより、型探索装置100は、プログラムの変更及びコンパイルを行うことなく、属性値を変更することができる。
演算部1204は、属性値設定部1203により設定された属性値に応じた型の挙動をシミュレートする演算を行う。例えば、演算部1204は、ビット幅、小数点位置が異なる2つの値の演算を行う場合、ビットシフトを行い、ビット位置を合わせてから演算を行う。演算処理の詳細については、図8等を用いて後述する。
以上が型シミュレーション部704の説明である。
実行結果出力部705は、固定小数点シミュレーションプログラムの実行結果(シミュレーション結果情報)を出力する。
実行結果評価部706は、第1のプログラムの実行結果(実行結果情報)と、実行結果出力部705が出力した固定小数点シミュレーションプログラムの実行結果とから精度(SN比)の計算を行う。例えば、実行結果評価部706は、誤差を用いて評価する場合、第1のプログラムの実行結果Aと、固定小数点シミュレーション型プログラムの実行結果Bとを用いて((B−A)^2)/(A^2)を算出する。そして、実行結果評価部706は、算出結果が予め定めた閾値以下であれば、必要な精度を満たしているものとする。実行結果が所望の精度を満たしていた場合、実行結果評価部706は、対象変数の属性に設定された属性値を設定値として決定する。そして、プログラム生成部707が後述する処理を実行する。一方、実行結果が所望の精度を満たしていない場合、属性値準備部703は、ユーザからの異なる属性値の入力に基づいて、再度、パラメータファイルを作成する。
プログラム生成部707は、実行結果評価部706が決定した対象変数及び属性と、属性値との関係を用いて、対象変数を固定小数点変数に変換した第2のプログラムを生成する。本実施形態において、プログラム生成部707は、実行結果評価部706から入力された対象変数と、対応する属性値とを用いてプログラムを生成する。プログラム生成部707は、生成するプログラムをどのような言語で記述してもよいが、例えば、ハードウェアや、ファームウェア向けのプログラムを生成する。
以上が、本実施形態における型探索装置100のソフトウェア構成の説明である。
S100において、プログラム作成部701は、入力された第1のプログラムと、固定小数点変数に変換したい1つ以上の変数名とから、入力された変数の型を固定小数点シミュレーション型に変更したプログラムを作成する。本実施形態では、プログラム作成部701がS100におけるプログラム作成処理を自動で行うものとするが、ユーザが手動で行うものとしてもよい。また、本実施形態においては、プログラム作成部701が浮動小数点型を用いた第1のプログラムを変換するものとしているが、ユーザがプログラムを作成する際に初めから固定小数点シミュレーション型を用いたプログラムを作成するものとしてもよい。プログラム作成処理の詳細については、図7等を用いて後述する。
S101において、コンパイル部702は、S100で作成された固定小数点シミュレーションプログラムをコンパイルし、オブジェクトプログラムを生成する。
S102において、属性値準備部703は、S100でパラメータ化された変数の型の属性に設定する属性値に関するパラメータ情報を予めメモリに格納して準備する。本実施形態では、ユーザが、入力装置105を介して、固定小数点化したい対象変数と、その対象変数の型の属性に設定する属性値とをシステム上のGUI等で入力する。そして、属性値準備部703は、入力装置105を介して受け付けたユーザの入力に基づいて、パラメータファイルを作成し、メモリに格納する。
S104において、実行結果出力部705は、S103で実行されたプログラムの実行結果を出力する。出力形式はどのような形式でもよく、例えば、実行結果出力部705は、ファイル等に出力結果を書き込むようにしてもよい。
S105において、実行結果評価部706は、S104で出力された結果に関する評価を行う。より具体的にいうと、実行結果評価部706は、第1のプログラムの実行結果と、S104で出力された実行結果とに基づく精度が、ユーザにより外部から入力されて予めメモリに格納されている精度情報が示す精度を満たすか否かを評価して判定する。なお、実行結果評価部706による精度の算出方法は、図2を用いて上述したため説明を省略する。実行結果評価部706は、精度を満たすと判定した場合、処理をS106に進め、精度を満たさないと判定した場合、処理をS102に戻す。
S106において、プログラム生成部707は、固定小数点型プログラムを生成する。より具体的にいうと、プログラム生成部707は、図6の(a)に示した第1のプログラムを、S105で精度を満たすと判定されて決定された属性値を利用して、固定小数点化の対象である変数及びその演算式等の変換を行った第2のプログラムを生成する。なお、図6は、プログラムの一例を示す図である。S106のプログラム生成処理は、ユーザが、S105で精度を満たすと判定された対象変数の属性値に基づき、手動で行うようにしてもよい。
以上が、本実施形態におけるプログラム中の変数の型を探索する変数の型探索処理の流れである。
ここで、図6の(a)は、上述したように第1のプログラムの一例を示す図である。一方、図6の(b)は、プログラム作成処理で作成される固定小数点シミュレーションプログラムの一例を示す図である。
第1のプログラム20は、ユーザが開発したプログラムであり、固定小数点シミュレーションプログラム21や、第2のプログラムに変換する元となるオリジナルのプログラムである。
記述201、記述202及び記述203は、浮動小数点宣言である。また、記述204は、記述201、記述202及び記述203で宣言された変数を用いた演算処理の記述の一例である。
まず、S400において、プログラム作成部701は、ヘッダのインクルード文を挿入する。より具体的にいうと、プログラム作成部701は、記述211に示されるように固定小数点シミュレーションクラスを含むFixedPointSim.hをインクルードしている。また、プログラム作成部701は、記述212に示されるようにパラメータファイルをメモリ上に展開、保持するクラスを含むヘッダーファイルであるParamSetting.hをインクルードしている。ParamSetting.hは、パラメータファイルに記載された、変数の型の属性と、属性値との対応関係をメモリ上に展開するメソッドを定義している。また、ParamSetting.hは、展開されたメモリ上のアドレスへのポインタをメンバーとして有するクラスであるCParamSettingクラスを定義している。本実施形態のように属性値準備部703が前記対応関係をメモリ上に展開すると、型シミュレーション部704は、固定小数点シミュレーションプログラム中で固定小数点シミュレーション型の変数宣言を実行するたびにファイルにアクセスする必要がなくなる。そのため、処理速度が向上する。なお、属性値準備部703がパラメータファイルをメモリ上に展開せずに、型シミュレーション部704が変数宣言のたびにパラメータファイルを参照するように実装することも可能である。CparamSettingクラスでは、引数で変数名をキーとして与えると、その変数の型が持つ1つ以上の属性に対応する属性値のリストを取得するメソッドが定義されている。
S402において、プログラム作成部701は、固定小数点化したい対象変数宣言の変換を行う。本実施形態において、プログラム作成部701は、図6の(a)の記述201、記述202及び記述203を図6の(b)の記述214、記述215及び記述216に変換する。対象変数である変数x、変数y及び変数zは、固定小数点化したい変数、即ち、固定小数点シミュレーション型を用いて型の属性が決定される変数である。本実施形態では、FixedPointSim.hにおいて定義されているマクロ定義を用いて宣言しているが、プログラム作成部701は、マクロ定義に記載された内容を直接プログラムに入力してもよい。また、対象変数は、予めユーザが決定するものとしてもよいし、プログラム作成部701がプログラム中の全てのfloat型を変換するものとしてもよい。その他、プログラム作成部701が、指定されたファイル内のfloat型のみを変換するものとしてもよい。
以上が、プログラム作成部701が第1のプログラムを固定小数点シミュレーションプログラムに変換する手順である。
ここで、図8を用いて固定小数点シミュレーション型を定義しているヘッダーファイル30について説明する。なお、図8は、固定小数点シミュレーション型を定義しているヘッダーファイルの一例を示す図である。
記述301は、固定小数点シミュレーションクラスの定義である。固定小数点シミュレーションクラスは、C++言語の浮動小数点型や、整数型等の数値型と同様に使用可能な固定小数点シミュレーション型を提供するクラスである。
記述311は、クラスにおけるデータ保持部であり、データメンバーを保持する。以下、データ保持部が保持するデータメンバーについて説明する。
記述312は、固定小数点シミュレーション型の値を32ビットの整数として保持する。即ち、本クラスではビット幅が32ビット以内の固定小数点型をシミュレーションすることが可能である。
記述314は、ビット幅を保持する。
記述315は、演算結果の値丸め処理のモードを保持する。例えば、四捨五入モードを0、切り上げモードを1、切り捨てモードを2というように予め決めておき、保持している数値によりモードを切り替える。
記述316は、オーバーフロー又はアンダーフロー時のモードを保持する。例えば、オーバーフロー又はアンダーフローを容認するモードを0、飽和処理を行うモードを1等といったように予め決めておき、保持している数値によりモード切り替えを行う。
記述317は、パラメータファイル内の情報が展開されたメモリへの参照ポインタである。本実施形態において、属性値準備部703は、CParamSettingクラスでパラメータファイルに記載された型の属性と、属性値との対応関係をメモリ内に展開し、保持しておく。パラメータファイルを参照する方法はこれに限らず、例えば、変数がインスタンス化されるたびにファイルアクセスする方法や、演算を行うたびにファイルアクセスする方法でもよい。
記述331は、演算子の定義部である。
記述332及び記述333は、演算子の処理の定義の例である。
記述332は、加算演算の処理の定義の例であり、固定小数点シミュレーションクラス同士の加算を行うメソッドである。また、記述332で定義されている加算演算では、記述321のコンストラクタで設定する属性値に従った演算を行う。例えば、3ビット幅、小数点位置2の被加算値と、3ビット幅、小数点位置−1の加算値とを加算する場合について説明する。この場合、演算部1204は、加算値のインスタンスに保持されている記述312の整数の値を左に3ビットのビットシフトを行い、被加算値の小数点位置に合わせてから加算を行う。
記述333は、代入演算の処理の定義である。記述333で定義されている代入演算では、記述321のコンストラクタで設定された属性値に応じた代入処理を行う。本実施形態において、演算部1204は、記述315及び記述316に保持されている各種モードに合わせた数値に変換し、記述313及び記述314に保持されている小数点位置、ビット幅を参照し、変換した値から記述312の整数値を格納する。
記述342は、丸め処理の定義である。演算部1204は、記述315に保持されている丸め処理モードを参照して、モードに即した丸め処理を行う。
記述343は、オーバーフロー又はアンダーフロー処理の定義である。演算部1204は、記述316に保持されているオーバーフロー又はアンダーフロー処理のモードを参照して、モードに即したオーバーフロー又はアンダーフロー処理を行う。代入演算時処理部の詳細については、図10等を用いて後述する。
本実施形態では、記述331の演算子の定義部や、記述341の代入演算時処理部のように、記述321のコンストラクタで設定される属性値に従った演算を定義しておくことにより、演算部1204が型の挙動をシミュレートする演算を行えるようにしている。
記述302は、マクロ定義であり、ユーザが使用する固定小数点シミュレーションプログラム21でユーザがクラスとして意識せずに記述301の固定小数点シミュレーションクラスを固定小数点シミュレーション型として使用できるように隠蔽化したものである。
記述351は、コンストラクタを隠蔽化するためのマクロ定義であり、ユーザは、固定小数点シミュレーションプログラム21中の変数宣言のたびにファイル名を指定せずにクラスを利用することができる。
記述352は、パラメータファイル展開クラスと、ファイルのメモリ展開メソッドとを隠蔽化するためマクロ定義であり、ユーザはファイル名の指定のみを行うだけで利用することができる。
以上がヘッダーファイル30の説明である。
S501において、プログラム読み込み部1201は、S101でコンパイルされた固定小数点シミュレーションプログラムのオブジェクトプログラムの実行が開始されると、プログラムに記述された処理を行うためにメモリにオブジェクトプログラムを読み出す。
S502において、属性値保持部1202は、上述したパラメータを保持する。本実施形態において、属性値保持部1202は、図6の(b)で示した固定小数点シミュレーションプログラム内の記述213が定義するマクロ定義を実行する。マクロ定義はCFixedPointSimクラス内で定義されており、属性値保持部1202は、指定されたパラメータファイルである「Param.csv」を読み込み、型の属性と、属性値との対応関係をメモリ上に保持しておく。
S503において、属性値設定部1203は、プログラム中の変数宣言が実行された際に、固定小数点シミュレーションクラスを用いた変数のインスタンス化する際のコンストラクタ内で処理を行う。ここで、図6の(b)における変数xに着目した場合について説明する。まず、記述214の宣言部では、固定小数点シミュレーション型の変数宣言の命令が実行される。記述214の宣言部は、CFixedPointSimクラスで定義された記述351のマクロ定義であり、記述351のマクロ定義に記載された処理が実行される。記述214の宣言部が実行されると、記述321のコンストラクタが実行され、CFixedPointSimクラスのインスタンス化が行われる。インスタンス化時、属性値設定部1203は、変数の型の属性に対応する属性値をインスタンス内のデータメンバーとして設定する。本実施形態において、属性値設定部1203は、S502でメモリ上に保持された変数、型の属性及び属性値の対応関係を参照して属性値を取得する。
以上がS103における型シミュレーション処理の流れの詳細である。このように、型シミュレーション部704は、プログラム外から属性値を設定可能とすることで、プログラムの変更及びコンパイルを行うことなく属性値を変更することができる。また、属性値に従った型の演算を行うように演算を定義することにより、型シミュレーション部704は、型の挙動をシミュレートすることができる。
S600において、演算部1204は、変数に代入する値について、変数の型に設定されたビット幅で表現可能な最下位ビットより下の桁のビットの値の丸め処理を行う。本実施形態において、演算部1204は、CFixedPointSimクラスの記述311のデータ保持部が保持している記述315の値丸め処理モードのモードに従って処理を行う。本実施形態では、3ビット幅、小数点位置1の型を持つ変数に値「11011.1」を代入する場合について説明する。例えば、「11011.1」の切り上げモードの場合、2の0乗桁目は1なので切り上げを行うと「11100.0」となる。
S601において、演算部1204は、変数に代入する値が最大値、最小値を超えていた場合に、オーバーフロー又はアンダーフロー処理を行う。演算部1204は、CFixedPointSimクラスの記述311のデータ保持部が保持しているオーバーフロー又はアンダーフローモードに従い処理を行う。本実施形態では、オーバーフロー又はアンダーフローモード容認するモードが0、飽和処理を行うモードが1の場合について説明する。モードが0の場合、演算部1204は、オーバーフロー又はアンダーフローを擬似的に起こす。例えば、3ビット幅、小数点位置1の型の持つ変数に「11100.0」を代入する場合、最大値を超えているため、オーバーフロー又はアンダーフロー処理をすると、最上位ビットは2の4乗桁目であるため、2の5乗桁目以上の桁は0にリセットされる。したがって、演算部1204は、代入する値を「1100」と処理する。また、オーバーフローモード又はアンダーフローモードが0の飽和処理モードの場合、「11100.0」が最大値を超えているため、演算部1204は、飽和処理を行う。したがって、演算部1204は、代入する値を最大値の「1110」と処理する。
S602において、演算部1204は、CFixedPointSimクラスの記述311のデータ保持部にデータを格納する。例えば、演算部1204は、3ビット幅、小数点位置1の型の持つ変数に「1100」を格納する場合、まず、右に1ビットシフトし、そこから上位3ビットの「110」を記述312に格納する。以上が代入演算の処理の流れである。
実施形態1では、型探索装置100が固定小数点型の変数のビット幅等の型の属性検討を行う際に、プログラムの書き換えや、書き換え後のコンパイルが不要となり、パラメータファイルの変更のみを行うことで属性検討を行う方法を示した。しかし、実施形態1では、ユーザがパラメータファイルの変更を行うことで、属性の探索を行うことを想定している。ここで、変数が複数ある場合、各変数の属性にトレードオフが生じる場合がある。その場合、ユーザが最適な属性値を探索することは困難である。そこで、本実施形態では、設計最適化支援ツールを用いて型探索装置100が最適な属性値を探索する方法について説明する。なお、実施形態1同様、変数の型を変換する前の浮動小数点変数のプログラムを第1のプログラムと呼び、変換後の固定小数点変数のプログラムを第2のプログラムと呼ぶ。また、ここでいう最適な属性値とは、ユーザが所望する属性値のことであり、以降の説明においても同様とする。また、本実施形態における型探索装置100のCPU101がROM103に格納されているプログラムを実行することにより、設計最適化支援ソフトの機能が実現される。
まず、図11を用いて実施形態2における型探索装置100について説明する。なお、図11は、実施形態2における型探索装置100のソフトウェア構成の一例を示す図である。
ここで、プログラム作成部701、コンパイル部702、型シミュレーション部704及びプログラム生成部707の機能については、実施形態1で説明した通りであるため、説明を省略する。
本実施形態では、型探索装置100が設計最適化支援ツールにより、最適な属性値を探索する。属性値準備部903及び実行結果出力部905は、型シミュレーション部704と共に、設計最適化支援ツールにより機能する。設計最適化支援ツールとしては、独自のものを作成してもよいし、既存の設計最適化支援ソフトを用いてもよい。例えば、既存の設計最適化支援ソフトとしては、modeFRONTIER(登録商標)や、Optimus(登録商標)といったものが挙げられる。
実行結果評価部906は、実行結果出力部905から取得した分析結果に基づき、パラメータセットを決定するか又は再度属性値の絞り込みを行うかを判断するための情報をユーザに提示する。より具体的にいうと、実行結果評価部906は、設計最適化支援ツールが一意に決まる最適解を得られる場合、その最適解をユーザに提示する。一方、属性同士が目的関数に対してトレードオフの関係にある場合、自動的に最適解を求めることは困難であるため、ユーザが対話的に属性の探索範囲を絞り込む必要がある。このような場合、実行結果評価部906は、多次元チャート等を用いて探索範囲の絞り込みをユーザに提示する。ユーザは、提示された探索範囲から再度、固定小数点化したい対象変数と、その対象変数の型の属性が取りうる候補値の範囲とを入力する。また、ユーザが満足する所望の性能値を得られていた場合、型探索装置100は、入力装置105を介して受け付けたユーザの指示により属性の探索を終了することもできる。
以上が、本実施形態における型探索装置100のソフトウェア構成の説明である。
S1100及びS1101の処理は、実施形態1で図5を用いて説明したS100及びS101の処理と同様であるため、説明を省略する。
S1102において、属性値準備部903は、プログラム実行時に変数の型の属性に設定する属性値を予め準備する。より具体的にいうと、まず、ユーザが、設計最適化支援ツールを用いて、固定小数点化したい対象変数と、その対象変数の型の属性が取りうる候補値の範囲とを入力する。そして、設計最適化支援ツールは、入力された候補値の範囲から値を自動で選択し、パラメータセットを作成する。更に、属性値準備部903は、パラメータセットに基づくパラメータファイルを作成する。
S1103の処理は、実施形態1で図5を用いて説明したS103の処理と同様であるため、説明を省略する。
S1104において、設計最適化支援ツールは、S1102の属性値準備処理において入力された変数の候補値の範囲内の値の組みあわせに関して、予め定められている数のパラメータセットを実行したか否かを判定する。そして、設計最適化支援ツールは、実行したと判定した場合、処理をS1105へ進め、実行していないと判定した場合、処理をS1102へ戻す。
S1106において、実行結果評価部906は、S1105で得られる分析結果に基づき、パラメータセットを決定するか又は再度属性の最適化を行うかを判定するための情報をユーザに提示する。そして、実行結果評価部906は、ユーザの指示に基づいて、パラメータセットを決定する場合、処理をS1107へ進め、再度属性の最適化を行う場合、処理をS1102へ進める。
S1107の処理は、実施形態1で図5を用いて説明したS106の処理と同様であるため、説明を省略する。
以上が本実施形態におけるプログラム中の変数の型を探索する変数の型探索処理の流れである。
本実施形態によれば、型探索装置100は、変数が複数あり、各変数の属性にトレードオフが生じる場合であっても、所望の実行結果を得ることができる属性値を選択することが可能となる。
一般的に、ユーザは、画像処理等の信号処理プログラムのアルゴリズム開発を浮動小数点型の変数を用いて行い、アルゴリズムの開発が完了した後にハードウェア設計検討を行う。したがって、アルゴリズム開発時に作成されたプログラムは浮動小数点型を用いて記述されている。そのため、ユーザは、ハードウェア設計検討段階で固定小数点のビット幅等の型の属性を検討する際には、アルゴリズム開発時に作成したプログラムを変換する必要がある。
実施形態1、実施形態2では、アルゴリズム開発後におけるハードウェア設計検討時のビット幅等の型の属性検討を行う方法を説明した。本実施形態では、アルゴリズム開発時から型の属性だけでなく型そのものを実行時のパラメータ入力により選択可能にし、ハードウェア設計検討時にアルゴリズム開発で開発したプログラムを変更せずにビット幅等の型の属性検討を行う方法について説明する。
本実施形態における型探索装置100について図14を用いて説明する。なお、図14は、本実施形態における型探索装置100のソフトウェア構成の一例を示す図である。本実施形態における型探索装置100は、アルゴリズム開発後のハードウェア設計において、プログラムの変更を行うことなく、変数の型の探索を行うことが可能な型探索装置である。
ここで小数点選択型について説明する。小数点選択型は、本実施形態ではC++言語を用いたクラスとして定義する。まず、データ保持部では、浮動小数点型のデータと、実施形態1で示したCFixedPointSimクラスのインスタンスとをデータとして保持し、更に、型選択パラメータ値を保持する。型選択パラメータ値は、プログラム実行時に使用する型を決定する値であり、本実施形態では、浮動小数点型と、固定小数点シミュレーション型とを選択する際に使用される。小数点選択型のコンストラクタでは、パラメータファイルより入力される型選択パラメータ値を参照して、パラメータファイルより読み出してきた型選択パラメータ値を取得、保持する。プログラム作成部1301は、取得した型選択パラメータ値から、浮動小数点型とするか、CFixedPointSimクラスとするかを決定する。また、クラス内のメソッドとして演算子の処理の定義メソッドを宣言し、型選択パラメータ値に応じた演算を行うように定義しておく。以上が小数点選択型の説明である。
属性値準備部1303は、小数点選択型の属性に設定する属性値を予め準備する。本実施形態において、属性値準備部1303は、固定小数点シミュレーション型に必要な属性に加え、浮動小数点型と、固定小数点シミュレーション型とのどちらを使用するか決定する型選択パラメータ値を準備する。例えば、属性値準備部1303は、浮動小数点型に「0」、固定小数点シミュレーション型に「1」の選択パラメータ値を設定しておく。また、属性値準備部1303は、アルゴリズム開発プログラム中の変数について浮動小数点型を使用したい場合は、「0」を設定しておく。即ち、属性値準備部1303は、アルゴリズム開発プログラム中の変数について、実施形態1及び実施形態2で示した固定小数点シミュレーション型の属性値に加え、型選択パラメータ値が記載されたパラメータファイルを準備する。なお、本実施形態では浮動小数点型と、固定小数点シミュレーション型とを用いるようにしているが、型はこれに限らず、例えば、整数型等を更に追加してもよい。
実行結果出力部1305は、実施形態1、実施形態2で示した実行結果出力部705、実行結果出力部905の機能を有し、更に、アルゴリズム開発時のプログラム実行結果を取得する機能を有する。例えば、ユーザが画像から人物を検出するアルゴリズムを開発している場合、型シミュレーション部1304は、複数の画像入力を行い、複数回プログラムを実行する。そして、実行結果出力部1305は、人物の検出率を取得する。
実行結果評価部1306は、実施形態1、実施形態2で示した実行結果評価部706、実行結果評価部906の機能を有し、更に、前記アルゴリズム開発時のプログラム実行結果がユーザにより予め定められた性能を満たすか否か評価する。例えば、ユーザが画像から人物を検出するアルゴリズムを開発している場合、実行結果評価部1306は、人物の検出率がユーザにより予め定められた閾値以上であるか否かに基づいて性能を満たすか否か評価する。
プログラム生成部707の機能については、実施形態1、実施形態2で説明した通りであるため、ここでは説明を省略する。
以上が本実施形態における型探索装置100のソフトウェア構成の説明である。
S1400において、プログラム作成部1301は、型を選択するパラメータを持つ型である小数点選択型を用いてアルゴリズム開発プログラムを作成する。本実施形態において、プログラム作成部1301は、浮動小数点型と、固定小数点シミュレーション型とを選択可能な小数点選択型を用いてアルゴリズム開発プログラムを作成する。
S1401において、コンパイル部1302は、S1400で作成されたアルゴリズム開発プログラムをコンパイルし、オブジェクトプログラムを生成する。
S1402において、属性値準備部1303は、S1401でパラメータ化された型を決定する型選択パラメータ値が記載されたパラメータファイルを準備する。本実施形態において、属性値準備部1303は、浮動小数点型と、固定小数点シミュレーション型との何れかを選択するが、アルゴリズム開発時は浮動小数点型を選択する型選択パラメータ値をパラメータファイルに記載しておく。
S1403において、型シミュレーション部1304は、S1401でコンパイル処理されたアルゴリズム開発プログラムのオブジェクトプログラムを実行する。そして、型シミュレーション部1304は、前記オブジェクトプログラムに基づいてパラメータファイルを参照し、S1402で準備された型選択パラメータ値より変数の型を設定する。S1403の処理の詳細は、実施形態1で示した処理の流れと同じである。例えば、本実施形態のようにユーザが画像から人物を検出するアルゴリズム開発をしている場合、型シミュレーション部1304は、複数の画像入力に対して複数回プログラムを実行する。
S1405において、実行結果評価部1306は、S1404で出力された人物の検出率が予め設定された性能値(閾値)を満たしているか否かを評価し、性能値を満たしている場合は、処理をS1406へ進める。一方、実行結果評価部1306は、性能値を満たしていない場合は、再度アルゴリズム開発プログラムの修正を行うため、処理をS1400へ戻す。
S1406において、属性値準備部1303は、図5で上述したS102の処理に加え、型選択パラメータ値を記載したパラメータファイルを準備する。本実施形態で、浮動小数点型と、固定小数点シミュレーション型とが選択可能であるものとする。属性値準備部1303は、固定小数点化の対象となる変数について、アルゴリズム開発時は浮動小数点型を選択するパラメータ値を、ハードウェア検討時は固定小数点シミュレーション型を選択する型選択パラメータ値をパラメータファイルに記載しておく。
S1407からS1411までの処理は、実施形態2で図13を用いて説明したS1103からS1107までの処理と同様であるため、説明を省略する。
以上が本実施形態における変数の型を探索する型探索処理の流れである。
本実施形態による固定小数点プログラムの生成方法を用いれば、型探索装置100は、ハードウェア設計検討時にアルゴリズム開発で開発したプログラムを変更することなくビット幅等の型の属性検討を行うことが可能となる。
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(又はCPUやMPU等)がプログラムを読み出して実行する処理である。
Claims (13)
- 対象変数の属性がパラメータ化され、コンパイルされたプログラムを読み込む読み込み手段と、
前記読み込み手段により読み込まれたプログラムに基づく処理の実行時に、属性に関するパラメータ情報に基づいて、前記プログラムの対象変数の属性に属性値を設定する設定手段と、
前記設定手段により属性値が設定されたプログラムに基づいて処理を実行する実行手段と、
を有する情報処理装置。 - 第1の型における変数を含む第1のプログラムと、対象変数を示す変数情報とに基づいて、第2の型における対象変数の属性をパラメータ化したプログラムを作成する作成手段を更に有し、
前記読み込み手段は、前記作成手段により作成されたプログラムがコンパイルされたプログラムを読み込む請求項1記載の情報処理装置。 - 前記作成手段は、第1の型である浮動小数点型の変数を含む第1のプログラムと、前記変数情報とに基づいて、第2の型である固定小数点型の対象変数の属性をパラメータ化したプログラムを作成する請求項2記載の情報処理装置。
- 前記作成手段は、前記第1のプログラムと、前記変数情報とに基づいて、対象変数の型をパラメータ化すると共に、対象変数の属性をパラメータ化したプログラムを生成し、
前記設定手段は、前記対象変数の型と、前記属性とに係るパラメータ情報に基づいて、前記対象変数の型を設定し、前記設定した型における対象変数の属性に属性値を設定する請求項2記載の情報処理装置。 - 前記実行手段は、前記属性値が設定されたプログラムに基づくシミュレーションに係る演算処理を実行し、
前記実行手段により実行された処理に係るシミュレーション結果情報に基づいて、前記対象変数の属性に設定された属性値を設定値として決定するか否かを判定する判定手段を更に有する請求項2乃至4何れか1項記載の情報処理装置。 - 前記判定手段は、前記第1のプログラムの実行結果情報と、前記シミュレーション結果情報とに基づいて、精度を算出し、前記算出した精度が予め定められた閾値以上であるか否かに基づいて、前記対象変数の属性に設定された属性値を設定値として決定するか否かを判定する請求項5記載の情報処理装置。
- 前記実行手段により実行された処理に係るシミュレーション結果情報が複数ある場合、予め設定された目的関数に応じて前記シミュレーション結果情報を出力する出力手段を更に有し、
前記判定手段は、前記出力手段により出力されたシミュレーション結果情報に基づくユーザの指示に基づいて、前記対象変数の属性に設定された属性値を設定値として決定するか否かを判定する請求項5載の情報処理装置。 - 前記判定手段により決定すると判定された場合、前記設定された属性値に係る属性値情報に基づいて、前記第1のプログラムを変換して第2の型に係る第2のプログラムを生成する生成手段を更に有する請求項5乃至7何れか1項記載の情報処理装置。
- 前記判定手段により決定しないと判定された場合、前記設定手段は、前記パラメータ情報に基づいて対象変数に設定する属性値を変更して設定する請求項5乃至7何れか1項記載の情報処理装置。
- 変数を示す変数情報と、前記変数の属性値情報とを対応付けたパラメータ情報を作成するパラメータ情報作成手段を更に有し、
前記設定手段は、前記対象変数の属性に基づいて前記パラメータ情報作成手段により作成されたパラメータ情報から属性値情報を取得し、前記取得した属性値情報に係る属性値を前記対象変数の属性に設定する請求項1乃至9何れか1項記載の情報処理装置。 - 前記パラメータ情報作成手段は、前記変数情報と、前記変数の属性値の範囲に係る属性値情報とを対応付けたパラメータ情報を作成する請求項10記載の情報処理装置。
- 情報処理装置が実行する情報処理方法であって、
対象変数の属性がパラメータ化され、コンパイルされたプログラムを読み込む読み込みステップと、
前記読み込みステップにより読み込まれたプログラムに基づく処理の実行時に、属性に関するパラメータ情報に基づいて、前記プログラムの対象変数の属性に属性値を設定する設定ステップと、
前記設定ステップにより属性値が設定されたプログラムに基づいて処理を実行する実行ステップと、
を含む情報処理方法。 - コンピュータに、
対象変数の属性がパラメータ化され、コンパイルされたプログラムを読み込む読み込みステップと、
前記読み込みステップにより読み込まれたプログラムに基づく処理の実行時に、属性に関するパラメータ情報に基づいて、前記プログラムの対象変数の属性に属性値を設定する設定ステップと、
前記設定ステップにより属性値が設定されたプログラムに基づいて処理を実行する実行ステップと、
を実行させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013131885A JP6137962B2 (ja) | 2013-06-24 | 2013-06-24 | 情報処理装置、情報処理方法及びプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013131885A JP6137962B2 (ja) | 2013-06-24 | 2013-06-24 | 情報処理装置、情報処理方法及びプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2015007820A true JP2015007820A (ja) | 2015-01-15 |
JP6137962B2 JP6137962B2 (ja) | 2017-05-31 |
Family
ID=52338076
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013131885A Active JP6137962B2 (ja) | 2013-06-24 | 2013-06-24 | 情報処理装置、情報処理方法及びプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP6137962B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11593620B2 (en) | 2018-11-07 | 2023-02-28 | Fujitsu Limited | Training program, training method, and information processing apparatus |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07281905A (ja) * | 1994-04-04 | 1995-10-27 | Fujitsu Ltd | 型宣言修正装置 |
JPH1021122A (ja) * | 1996-07-05 | 1998-01-23 | Mitsubishi Electric Corp | プロセッサモニタ装置 |
JP2001101012A (ja) * | 1999-09-22 | 2001-04-13 | Lucent Technol Inc | プログラムコード変換方法 |
JP2005141410A (ja) * | 2003-11-05 | 2005-06-02 | Toshiba Corp | コンパイラ装置及びコンパイル方法 |
JP2007079844A (ja) * | 2005-09-13 | 2007-03-29 | Toshiba Corp | コンパイル装置 |
JP2008033729A (ja) * | 2006-07-31 | 2008-02-14 | Fujitsu Ltd | 演算プログラム変換装置、演算プログラム変換プログラム、演算プログラム変換方法 |
JP2011186999A (ja) * | 2010-03-11 | 2011-09-22 | Cats Kk | 浮動小数点表現プログラムの固定小数点表現化支援装置及び支援プログラム |
-
2013
- 2013-06-24 JP JP2013131885A patent/JP6137962B2/ja active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07281905A (ja) * | 1994-04-04 | 1995-10-27 | Fujitsu Ltd | 型宣言修正装置 |
JPH1021122A (ja) * | 1996-07-05 | 1998-01-23 | Mitsubishi Electric Corp | プロセッサモニタ装置 |
JP2001101012A (ja) * | 1999-09-22 | 2001-04-13 | Lucent Technol Inc | プログラムコード変換方法 |
JP2005141410A (ja) * | 2003-11-05 | 2005-06-02 | Toshiba Corp | コンパイラ装置及びコンパイル方法 |
JP2007079844A (ja) * | 2005-09-13 | 2007-03-29 | Toshiba Corp | コンパイル装置 |
JP2008033729A (ja) * | 2006-07-31 | 2008-02-14 | Fujitsu Ltd | 演算プログラム変換装置、演算プログラム変換プログラム、演算プログラム変換方法 |
JP2011186999A (ja) * | 2010-03-11 | 2011-09-22 | Cats Kk | 浮動小数点表現プログラムの固定小数点表現化支援装置及び支援プログラム |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11593620B2 (en) | 2018-11-07 | 2023-02-28 | Fujitsu Limited | Training program, training method, and information processing apparatus |
Also Published As
Publication number | Publication date |
---|---|
JP6137962B2 (ja) | 2017-05-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10140099B2 (en) | Systems and methods for generating code from executable models with floating point data | |
JP4157016B2 (ja) | コンパイラ装置及びコンパイル方法 | |
EP2984563A1 (en) | Incremental compiling of a declarative program | |
JP2008033729A (ja) | 演算プログラム変換装置、演算プログラム変換プログラム、演算プログラム変換方法 | |
KR102195103B1 (ko) | 프로그램 컴파일 방법 | |
US9335979B1 (en) | Data type visualization | |
CN113641701A (zh) | 一种数据查询方法、系统、异构加速平台及存储介质 | |
US11126408B2 (en) | Incremental code generation method | |
US9146750B2 (en) | Mechanism for replacing an array creation routine within code | |
JP7451568B2 (ja) | コンパイラの精度選定によるシェーダプログラムの加速化 | |
JPWO2003032157A1 (ja) | コンパイル装置 | |
TWI437457B (zh) | 分析目標物件之依賴關係的方法 | |
JP6137962B2 (ja) | 情報処理装置、情報処理方法及びプログラム | |
JP2008276735A (ja) | プログラムコード変換装置及びプログラムコード変換方法 | |
US9244667B2 (en) | Mechanism for transforming between type-independent and type-specific code | |
JP6651974B2 (ja) | 情報処理装置、コンパイル方法及びコンパイラプログラム | |
JP2005063136A (ja) | 半導体集積回路の設計装置、設計方法、及び設計プログラム | |
JP4870956B2 (ja) | 組み込み用プログラム生成方法、組み込み用プログラム開発システム、及び情報テーブル部 | |
CN106557312B (zh) | 程序开发支援装置以及程序开发支援软件 | |
JP2009163662A (ja) | 情報処理装置、情報処理装置の制御方法、および情報処理装置の制御プログラム | |
US8850386B2 (en) | Method for estimating resource consumption in the generation of a control device program code | |
JP4898365B2 (ja) | 組み込み用プログラム開発装置、及びプログラム自動生成方法 | |
JP2012185542A (ja) | コード生成装置、及びコード生成プログラム | |
JP2011186999A (ja) | 浮動小数点表現プログラムの固定小数点表現化支援装置及び支援プログラム | |
WO2021005130A1 (en) | A streaming compiler for automatic adjoint differentiation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20160518 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20170215 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20170328 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20170425 |
|
R151 | Written notification of patent or utility model registration |
Ref document number: 6137962 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R151 |