(57)【要約】【課題】画像処理に関する演算を行うプログラムに対して、ユーザが定義した部分を含む全域を最適化する。【解決手段】画像処理ドメイン固有言語で記述されたソースコードを中間言語で記述された中間コードに変換した後、前記中間コードを機械語で記述された機械コードに変換するコンパイラを動作させるプログラム変換装置であって、前記コンパイラは、前記ソースコードを前記中間コードに変換する際、前記ソースコードを解析して得られた特定情報を前記中間コードに埋め込み、前記中間コードを前記機械コードに変換する際、前記特定情報を参照して、ユーザが定義した情報を組み込んだ前記中間コードを最適化する。【選択図】図３
2014219858.tif 000002
【特許請求の範囲】
【請求項１】
画像処理ドメイン固有言語で記述されたソースコードを中間言語で記述された中間コードに変換した後、前記中間コードを機械語で記述された機械コードに変換するコンパイラを含むプログラム変換装置であって、
前記コンパイラは、
前記ソースコードを前記中間コードに変換する際、前記ソースコードを最適化すると共に、前記ソースコードを解析して得られた特定情報を前記中間コードに埋め込み、
前記中間コードを前記機械コードに変換する際、前記特定情報を参照して、ユーザが定義した情報を組み込んだ前記中間コードを最適化する、
ことを特徴とするプログラム変換装置。
【請求項２】
前記中間言語は、数値計算ルーチンを定義する第１機能を備え、
前記コンパイラは、前記第１機能を用いて、複数の同じ数値計算をまとめることにより、前記ソースコード及び／又は前記中間コードの最適化を行う、
ことを特徴とする請求項１に記載のプログラム変換装置。
【請求項３】
前記中間言語は、数式を定義する第２機能を備え、
前記コンパイラは、前記第２機能を用いて、ユーザが定義した数式を前記中間コードに組み込み可能にする、
ことを特徴とする請求項１又は２に記載のプログラム変換装置。
【請求項４】
前記コンパイラは、ユーザが定義した初期ファクター及びゴールファクターに基づいて、前記初期ファクターから前記ゴールファクターに到達するルールを推論し、前記推論したルールから最適化されたアルゴリズムを自動生成し、前記アルゴリズムに含まれる各手順の計算ルーチンあるいは数式の中間コードを全域最適化して前記中間コードを生成する、
ことを特徴とする請求項１乃至３のいずれか一に記載のプログラム変換装置。
【請求項５】
コンパイラを用いたプログラム変換方法であって、
画像処理ドメイン固有言語で記述されたソースコードを、中間言語で記述された中間コードに変換する第１処理と、
ユーザが定義した情報を前記中間コードに組み込む第２処理と、
前記ユーザが定義した情報を組み込んだ前記中間コードを、機械語で記述された機械コードに変換する第３処理と、を少なくとも実行し、
前記第１処理では、前記ソースコードを最適化すると共に、前記ソースコードを解析して得られた特定情報を前記中間コードに埋め込み、
前記第３処理では、前記特定情報を参照して、前記ユーザが定義した情報を組み込んだ前記中間コードを最適化する、
ことを特徴とするプログラム変換方法。
【請求項６】
前記中間言語は、数値計算ルーチンを定義する第１機能を備え、
前記第１処理及び／又は前記第３処理では、前記第１機能を用いて、複数の同じ数値計算をまとめることにより、前記ソースコード及び／又は前記中間コードの最適化を行う、
ことを特徴とする請求項５に記載のプログラム変換方法。
【請求項７】
前記中間言語は、数式を定義する第２機能を備え、
前記第２処理では、前記第２機能を用いて、ユーザが定義した数式を前記中間コードに組み込む、
ことを特徴とする請求項５又は６に記載のプログラム変換方法。
【請求項８】
前記第３処理では、前記ユーザが定義した初期ファクター及びゴールファクターに基づいて、前記初期ファクターから前記ゴールファクターに到達するルールを推論し、前記推論したルールから最適化されたアルゴリズムを自動生成し、前記アルゴリズムに含まれる各手順の計算ルーチンあるいは数式の中間コードを全域最適化して前記中間コードを生成する、
ことを特徴とする請求項５乃至７のいずれか一に記載のプログラム変換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースプログラムを中間言語に変換した後、機械語に変換するプログラム変換装置及びプログラム変換方法に関し、特に、画像処理に関する演算を行う命令文が組み込まれたソースプログラムを変換対象とするプログラム変換装置及びプログラム変換方法に関する。
【背景技術】
【０００２】
メーカが制作した装置をプログラム制御する場合、メーカは、Ｃ言語などの高級言語を用いて、装置に機能を動作させる命令文を記述したソースプログラムを作成し、そのソースプログラムのコード（ソースコードと呼ぶ。）をユーザが取り扱い可能な中間言語に変換して提供する。ユーザは、中間言語で記述されたプログラムコード（中間コードと呼ぶ。）に機能の動作条件となる値や変数（オペランド）を付加し、その後、中間言語を機械語に変換（コンパイル）し、機械語で記述されたプログラムコード（機械コードと呼ぶ。）をプロセッサで動作させることにより装置を制御することになる。その際、コンパイラ（プログラム変換装置）は、中間コードから機械コードへの変換にあたって、命令の結合や並べ替えなどの処理（最適化）を行い、プロセッサが高速に命令を実行できるようにしている。
【０００３】
この最適化に関しては様々な提案がされており、例えば、下記特許文献１には、高級言語における算術演算の演算子とオペランドとからなる記述を適用対象とする最適化を行い、高級言語で記述されたソースプログラムをプロセッサ用の機械語命令列に変換するプログラム変換装置であって、引数を渡して所定関数名の関数を呼び出す旨の前記ソースプログラム中の特定関数呼出記述について最適化の適用の面において、当該引数をオペランドと同等に扱い、当該特定関数呼出記述を、オペランドと当該オペランドに算術演算を行う演算子との組と同等に扱うことにより、前記ソースプログラムを最適化された機械語命令列に変換するプログラム変換装置が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０００−５６９８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ここで、従来の手法では、ソースコードを中間コードに変換する際に、ソースプログラムのプロファイル（演算の順序などのプログラム構成）の情報が中間コードに組み込まれていないため、中間コードの内、ユーザが付加したオペランドやユーザが組み込んだプログラムは、ソースプログラムのプロファイルを加味した状態で最適化することができない。すなわち、中間コードの全域を最適化することができない。
【０００６】
この問題に対して、上記特許文献１では、特定関数に関して高級言語における算術演算の演算子とオペランドと同一レベルで取り扱っているが、この技術は、中間コード中の特定関数を呼び出す部分を命令セットで置き換えるだけであり、特定関数以外の部分は最適化することができず、やはり中間コードの全域を最適化することができない。
【０００７】
また、特許文献１の技術では、既存の高級言語（Ｃ言語）を利用してソースプログラムを作成しており、中間コードも既存の高級言語を利用しているため、ユーザが作成したプログラムを中間コードに組み込みことが難しく、汎用性に欠ける。
【０００８】
このような問題は、任意の処理を実行する装置の制御に対して同様に生じるが、特に、画像処理の分野では、各画素に対して同様の画像処理を行うために繰り返し回数が多く、メモリアクセスが頻繁に行われるため、プロセッサが高速に命令を実行することができない。
【０００９】
本発明は、上記問題点に鑑みてなされたものであって、その主たる目的は、画像処理に関する演算を行うプログラムに対して、ユーザが定義した部分を含む全域を最適化することができるプログラム変換装置及びプログラム変換方法を提供することにある。
【００１０】
また、本発明の他の目的は、繰り返し実行される処理を簡略化してメモリアクセスを抑制することができ、ユーザによるオペランドの付加や処理ルーチンの追加を容易に行うことができるプログラム変換装置及びプログラム変換方法を提供することにある。
【課題を解決するための手段】
【００１１】
本発明の一側面は、画像処理ドメイン固有言語で記述されたソースコードを中間言語で記述された中間コードに変換した後、前記中間コードを機械語で記述された機械コードに変換するコンパイラを動作させるプログラム変換装置であって、前記コンパイラは、前記ソースコードを前記中間コードに変換する際、前記ソースコードを解析して得られた特定情報を前記中間コードに埋め込み、前記中間コードを前記機械コードに変換する際、前記特定情報を参照して、ユーザが定義した情報を組み込んだ前記中間コードを最適化することを特徴とする。
【００１２】
本発明の一側面は、コンパイラを用いたプログラム変換方法であって、画像処理ドメイン固有言語で記述されたソースコードを、中間言語で記述された中間コードに変換する第１処理と、ユーザが定義した情報を前記中間コードに組み込む第２処理と、前記ユーザが定義した情報を組み込んだ前記中間コードを、機械語で記述された機械コードに変換する第３処理と、を少なくとも実行し、前記第１処理では、前記ソースコードを解析して得られた特定情報を前記中間コードに埋め込み、前記第３処理では、前記特定情報を参照して、前記ユーザが定義した情報を組み込んだ前記中間コードを最適化することを特徴とする。
【発明の効果】
【００１３】
本発明のプログラム変換装置及びプログラム変換方法によれば、画像処理に関する演算を行うプログラムに対して、ユーザが定義した部分を含む全域を最適化することができる。
【００１４】
その理由は、画像処理ドメイン固有言語で記述されたソースコードを中間言語で記述された中間コードに変換した後、機械語で記述された機械コードに変換するコンパイラは、ソースコードを中間コードに変換する際、ソースコードを解析して、ソースコードの実行順序、変数と関数の依存関係などの解析情報、及び解析情報とコード命令間の対応関係などの特定情報を中間コードのヘッダなどに埋め込み、中間コードを機械コードに変換する際、ユーザが定義した情報を中間コードに組み込み、上記特定情報を参照して第２の最適化処理を行った後、機械コードに変換する処理を行うからである。
【図面の簡単な説明】
【００１５】
【図１】本発明の一実施例に係るプログラム変換装置の構成例を示すブロック図である。
【図２】本発明の一実施例に係るプログラム変換装置のコンパイラの構成例を示す機能ブロック図である。
【図３】本発明の一実施例に係るプログラム変換の手順を示すフローチャート図である。
【図４】本発明の一実施例に係る最適化の例（カラー画像をグレー変換する例）を示す図である。
【図５】本発明の一実施例に係る最適化の例（カラー画像からエッジ点を抽出する例）を示す図である。
【発明を実施するための形態】
【００１６】
背景技術で示したように、高級言語で記述されたソースコードをユーザが取り扱い可能な中間言語で記述された中間コードに変換し、ユーザが中間コードにオペランドを付加したりプログラムを組み込んだりした後に、プロセッサ用の機械語で記述された機械コードに変換するコンパイルに関して様々な技術が提案されている。
【００１７】
しかしながら、従来の技術は、ソースコードを中間コードに変換する際に、ソースプログラムのプロファイルの情報が中間コードに組み込まれていないため、ユーザが付加したオペランドやユーザが組み込んだプログラムの部分は最適化することができず、中間コードの全域を最適化することができないという問題があった。
【００１８】
また、上記特許文献１の技術を適用しても、特定関数以外の部分は最適化することができず、やはり中間コードの全域を最適化することができないという問題があった。また、特許文献１の技術では、ソースコードや中間コードは高級言語で記述されているため、ユーザが作成したプログラムを中間コードに組み込みことが難しく、汎用性に欠けるという問題があった。
【００１９】
特に、画像処理では、各画素に対して同様の画像処理を行うために繰り返し回数が多く、メモリアクセスが頻繁に行われるという特徴があることから、中間コードの全域を最適化することができるプログラム変換装置が求められていた。
【００２０】
そこで、本発明の一実施の形態では、まず、Ｃ言語のような汎用コンピュータ言語を用いるのではなく、画像処理に特化した言語（画像処理ドメイン固有言語（ＤＳＬ：Domain Specific Language））を用いてソースコードを記述する。そして、中間言語として画像処理ドメイン固有言語に適合した言語（以下、画像処理中間言語と呼ぶ。）を用い、その画像処理中間言語で数学モデルを定義できるようにする。
【００２１】
具体的には、画像処理中間言語に、数値計算ルーチンを定義する機能、及び、数式を定義する機能を持たせ、この画像処理中間言語を用いて記述される中間コードに、数式及び数値表現と演算の命令セットを持たせる。また、中間コードのヘッダなどに、ソースコードの実行順序、変数と関数の依存関係などの解析情報、及び解析情報とコード命令間の対応関係などの情報を埋め込む。これらの特徴により、ユーザは命令を定義することができると共に、数値計算処理として計算ループの最適化や共通変数の簡略化を図ることができ、プロセッサが命令を実行する際のメモリアクセスを低減して、高速処理を実現することができる。
【００２２】
上記の画像処理中間言語を用いた手法は、単一のモジュールを制御する場合においても効果があるが、複数の分割モジュールや追加モジュールで構成される場合において顕著な効果を有する。
【００２３】
すなわち、従来の手法では、複数のモジュールのソースコードを中間コードに変換する際、中間コードはそれぞれ対応するモジュール毎の中間コードとなり、変換元のモジュールの情報の大半は失われる。そのため、各モジュールのソースコードがないと各モジュール間の依存関係が分からず、各モジュールの中間コードだけを用いて、各モジュールを融合させた最適化を実行することはできない。
【００２４】
これに対して、本実施形態の手法では、中間コードには、ソースコードの実行順序、変数と関数の依存関係などの解析情報、及び解析情報とコード命令間の対応関係などの情報が埋め込まれているため、中間コード間のコード分析が可能となる。その結果、各モジュールのソースコードなしで、各モジュールの中間コードだけを用いて、各モジュールを融合させた最適化を実行することができる。
【実施例】
【００２５】
上記した本発明の実施の形態についてさらに詳細に説明すべく、本発明の一実施例に係るプログラム変換装置及びプログラム変換方法について、図１乃至図５を参照して説明する。図１は、本実施例のプログラム変換装置の構成例を示す機能ブロック図であり、図２は、本実施例のプログラム変換装置のコンパイラの構成例を示すブロック図である。また、図３は、本実施例のプログラム変換の手順を示すフローチャート図であり、図４及び図５は、最適化の具体例を示す図である。
【００２６】
本実施例のプログラム変換方法は、Ｃ言語やJava（登録商標）等の汎用コンピュータ言語を用いるのではなく、特定の処理（本実施例では画像処理）に特化した画像処理ドメイン固有言語を用いる。そして、この画像処理ドメイン固有言語を利用して、画像処理アルゴリズムを構築することを特徴としている。これにより、汎用コンピュータ言語を用いる場合と比較して、画像処理ルーチン及び画像処理シーケンスを言語レベルで定義することができる。また、この画像処理ドメイン固有言語に対して、画像処理中間言語を定義し、画像処理中間言語に数値計算ルーチンを定義する機能や数式を定義する機能を持たせると共に、画像処理ルーチンを構成する演算命令セットを持たせる。
【００２７】
そして、画像処理ドメイン固有言語で記述されたソースコードを画像処理中間言語の中間コードに変換し、更に中間コードを機械語の機械コードに変換する際に、２段階の最適化を行うことを特徴としている。
【００２８】
第１の最適化は、ソースコードレベルの最適化であり、ソースコードから中間コードに変換する際に、ソースプログラムを解析し、命令の結合や並べ替えなどの処理を行うと共に、ソースコードの実行順序、変数と関数の依存関係などの解析情報、及び解析情報とコード命令間の対応関係などの情報（以下、特定情報と呼ぶ。）を取得し、中間コードのヘッダなどに埋め込む。第２の最適化は、画像処理命令セットレベルの最適化であり、中間コードから機械コードに変換する際に、中間コードに埋め込んだ情報を利用して中間コードの全域を最適化する。
【００２９】
本実施例の手法と従来の手法との比較について述べると、従来の手法は、画像処理ライブラリに予め決められている処理ルーチン（最適化済みの機械コードレベルの処理ルーチン）を作り込んでユーザに提供する。ユーザは、自分の用途に応じて、汎用コンピュータ言語を利用して自分の処理ルーチンを作成し、この処理ルーチンを呼び出す。この手法では、あくまでも、汎用コンピュータ言語のレベルでしか最適化を行うことができない。すなわち、画像処理ライブラリは呼び出された処理ルーチン中の依存関係や共通処理部分など情報を持たないため、全体的な最適化を行うことができない。
【００３０】
これに対して、本実施例の手法では、画像処理ルーチン自体は画像処理ドメイン固有言語を利用して定義して、画像処理中間言語の中間コードレベルでユーザに提供する。ユーザは、自分の用途に応じて、画像処理ドメイン固有言語を利用して処理ルーチンを呼び出して自分の処理ルーチンを作る。この手法では、ソースコードを中間コードに変換する際、画像処理ソースレベルでの最適化が可能になる。更に、中間コードと呼び出された処理ルーチンはリンクされ、中間コードから、全体処理の依存関係や共通処理部分、並列できる部分など情報を抽出することができるため、この情報を利用して、全体的な最適化を行うことが可能になる。
【００３１】
以下、上述した本実施例の手法を実行するためにシステム構成について説明する。図１は、本実施例のプログラム変換装置１０の構成例であり、対象となる装置（本実施例では画像処理装置）のプロセッサにおいて実行される機械語プログラムを開発する装置である。このプログラム変換装置１０は、ＣＰＵ（Central Processing Unit）とＲＯＭ（Read Only Memory）やＲＡＭ（Random Access Memory）などのメモリとを含む制御部を有し、制御部は、デバッガ１１、シミュレータ１２、プロファイラ１３、コンパイラ１４などとして機能する。
【００３２】
デバッガ１１は、コンパイラ１４におけるソースプログラムのコンパイル時に見つかったバグの位置や原因を特定するプログラムである。
【００３３】
シミュレータ１２は、機械語プログラムを仮想的に実行し、実行結果を実行ログ情報として出力するプログラムである。
【００３４】
プロファイラ１３は、実行ログ情報を解析し、解析した結果をプロファイル情報として出力するプログラムである。
【００３５】
コンパイラ１４は、ソースプログラム及びプロファイラ１３から出力されるプロファイル情報を読み込み、第１の最適化を行って中間コードに変換するプログラムである。また、オペランドやユーザが作成した処理ルーチンを組み込んだ中間コードに対して第２の最適化を行って機械コードに変換するプログラムである。
【００３６】
また、図１は、本実施例のプログラム変換装置１０の一例であり、その構成や各部の制御は適宜変更可能である。例えば、図１では、プログラム変換装置１０にデバッガ１１やシミュレータ１２を備える構成としたが、ソースプログラムはメーカ側で作成し、プログラム変換装置１０では、ソースコードから中間コードへの変換、中間コードから機械コードへの変換のみを行う構成としてもよく、その場合は、デバッガ１１やシミュレータ１２、プロファイラ１３を省略することができる。
【００３７】
図２は、コンパイラ１４の構成例を示す機能ブロック図である。コンパイラ１４は、第１最適化部２１と、中間コード生成部２２と、ユーザ定義入力部２３と、第２最適化部２４と、機械コード生成部２５などで構成される。
【００３８】
第１最適化部２１は、プロファイラ１３から出力されるプロファイル情報を読み込むと共に、ソースコードを解析し、ソースコードの実行順序、変数と関数の依存関係などの解析情報、及び解析情報とコード命令間の対応関係などの特定情報を取得する。そして、ソースコードに対して命令の結合や並べ替え、複数の同じ数値計算のルーチン化などの処理（第１最適化）を行い、上記取得した特定情報とソースコードとを中間コード生成部２２に出力する。
【００３９】
中間コード生成部２２は、第１最適化部２１から出力されたソースコードを中間コードに変換する。その際、第１最適化部２１から出力された特定情報を中間コードのヘッダなどに埋め込み、ユーザ定義入力部２３に出力する。
【００４０】
ユーザ定義入力部２３は、中間コード生成部２２が生成した中間コードをユーザに提供し、ユーザが付加したオペランドやユーザが作成した処理ルーチンなどのユーザ定義情報を入力する。
【００４１】
第２最適化部２４は、中間コード生成部２２が生成した中間コードにユーザ定義情報を組み込むと共に、中間コードに埋め込まれた特定情報を参照して、計算ループの最適化や共通変数の簡略化などの処理（第２最適化）を行い、実行速度の向上やコードサイズの削減等を図る。
【００４２】
機械コード生成部２５は、第２最適化部２４が処理した中間コードに対して、内部に保持する変換テーブル等を参照し、全てのコードを機械語命令に置き換えることによって、機械コードを生成し出力する。
【００４３】
なお、図２は、本実施例のコンパイラ１４の一例であり、その構成や各部の動作は適宜変更可能である。例えば、図２では、コンパイラ１４を第１最適化部２１と中間コード生成部２２とユーザ定義入力部２３と第２最適化部２４と機械コード生成部２５とで構成したが、中間コード生成部２２に第１最適化部２１の機能を持たせたり、機械コード生成部２５に第２最適化部２４の機能を持たせたり、第２最適化部２４にユーザ定義入力部２３の機能を持たせたりすることもできる。
【００４４】
また、本実施例では、ユーザによる中間コードの編集（オペランドの付加や処理ルーチンの追加など）はユーザ端末で行うことを想定しているが、プログラム変換装置１０上で行うこともできる。その場合は、プログラム変換装置１０に表示部や操作部を設ければよい。
【００４５】
以下、本実施例のプログラム変換装置１０を用いたプログラム変換の手順について、図３のフローチャート図を参照して説明する。
【００４６】
まず、プログラム変換装置１０は、対象となる装置を制御するための命令文を画像処理ドメイン固有言語で記述したソースコードを作成又は取得する。このソースコードはプログラム変換装置１０のデバッガ１１、シミュレータ１２、プロファイラ１３などを用いて作成してもよいし、メーカ側で作成したものを取得してもよい。
【００４７】
次に、コンパイラ１４（第１最適化部２１）は、取得したソースコードを解析し、必要に応じて、プロファイラ１３が出力するプロファイル情報を参照して、ソースコードの実行順序、変数及び関数の依存関係などの解析情報、及び解析情報とコード命令間の対応関係などの特定情報を取得する（Ｓ１０１）。そして、コンパイラ１４（第１最適化部２１）は、上記特定情報を参照し、画像処理中間言語に備える数値計算ルーチンを定義する機能や数式を定義する機能などを用いて、ソースコードの最適化（第１最適化）を行う（Ｓ１０２）。具体的には、例えば、第１最適化部２１は、ソースコードから同じ数値計算を抽出し、上記機能を用いて複数の同じ数値計算をルーチン化することによってソースコードを最適化する。また、第１最適化部２１は、上記機能を用いて、ソースコードの１又は複数の命令文を数式として定義することによってソースコードを最適化する。
【００４８】
次に、コンパイラ１４（中間コード生成部２２）は、ソースコードを画像処理中間言語で記述した中間コードに変換する（Ｓ１０３）。その際、コンパイラ１４（中間コード生成部２２）は、上記特定情報を中間コードのヘッダなどに埋め込み、第２の最適化の際に利用できるようにする。その後、コンパイラ１４（中間コード生成部２２）は、作成した中間コードをユーザに出力する（Ｓ１０４）。
【００４９】
ユーザは、提供された中間コードを用い、値や変数を入力したり、関数を定義したり、命令文を追加したりして中間コードの編集を行う。なお、この中間コードの編集は、ユーザ端末で行ってもよいし、プログラム変換装置１０上で行ってもよい。また、中間コードそのものを編集してプログラム変換装置１０に出力してもよいし、入力した値や変数、定義した関数、追加する命令文などのユーザ定義情報のみをプログラム変換装置１０に出力してもよい。
【００５０】
次に、コンパイラ１４（ユーザ定義入力部２３）は、中間コードにユーザ定義情報を組み込む（Ｓ１０５）。そして、コンパイラ１４（第２最適化部２４）は、中間コードに埋め込まれた特定情報を取り出し、画像処理中間言語に備える数値計算ルーチンを定義する機能や数式を定義する機能などを用いて、ユーザ定義情報を組み込んだ中間コードの最適化（第２最適化）を行う（Ｓ１０６）。具体的には、例えば、第２最適化部２４は、中間コードから同じ数値計算を抽出し、上記機能を用いて複数の同じ数値計算をルーチン化することによって中間コードを最適化する。また、第２最適化部２４は、上記機能を用いて、中間コードの１又は複数の命令文を数式として定義することによって中間コードを最適化する。そして、コンパイラ１４（機械コード生成部２５）は、中間コードを機械コードに変換し、制御対象の装置上で実行可能なプログラムとして出力する（Ｓ１０７）。
【００５１】
なお、上記フローでは、説明の都合上、最適化とコード変換を別々のステップとして記述しているが、コード変換と並行して最適化を行うことも可能である。
【００５２】
このように、本実施例のプログラム変換方法では、ソースコードを画像処理ドメイン固有言語で記述することにより、画像処理に特化した中間コードに変換することができ、オペランドの付加や処理ルーチンの追加などのユーザの編集作業を容易にすることができる。また、ソースコードを中間コードに変換する際に最適化（第１の最適化）を行い、その際に、特定情報を中間コードに埋め込むことにより、中間コードを機械コードに変換する際に、ユーザ定義を含む全域の最適化（第２の最適化）を実施することができる。その結果、数値計算処理として計算ループの最適化や共通変数の簡略化を図ることができ、プロセッサが命令を実行する際のメモリアクセスを低減して、高速処理を実現することができる。
【００５３】
以下、ユーザ定義を含む全域の最適化（第２の最適化）の具体的な手法について、実際の中間コードの記述を参照して説明する。
【００５４】
画像処理ドメイン固有言語は、その中にルールベースの推論エンジンを内蔵している。推論エンジンは、与えられた初期ファクターとゴールファクターから一連のルールを推論する。言い換えると、推論された一連のルールを初期ファクターに適用するとゴールファクターに到達することができ、この一連のルールが目的とする画像処理アルゴリズムになる。つまり、画像処理ドメイン固有言語の中に初期ファクターとゴールファクターだけを設定すれば、このゴールファクターに達成するための画像処理アルゴリズムを生成することができ、この画像処理アルゴリズムに基づいて中間コードを最適化することができる。
【００５５】
図４は、カラー画像をグレー変換する場合の例を示している。図中の(assert (…))は、状態の定義である。また、図中の(defrule rule-name 前提条件 => アクション)は、ルールの定義である。(init image color)は、初期画像がカラー画像であることを示している。(image gray)は、ゴール画像がグレー画像であることを示している。カラー画像からグレー画像に変換するアルゴリズムを推論するために、二つのルールの前提条件のマッチングを行う。
【００５６】
algo-convert-to-grayの前提条件は、(?x gray $?algo)であり（?x : 可変項目、$?x : 可変リスト項目）、stop-algoの前提条件は、(init ?x ?s)と(?x ?s $?algo)であり、初期の２つの状態から、algo-convert-to-grayの(?x gray $?algo)と(image gray)がマッチングでき（?x : image、$?algo : 空リスト）、アクションとして、状態(image color do-togray)が追加される。
【００５７】
一方、stop-algoの２つの前提条件は初期状態とマッチングができない。すなわち、(init ?x ?s)と(init image color)から、?sはcolorと認識され、(?x ?s $?algo)と(image gray)から、?sはgrayと認識されるため、前提条件の?sは一致しない。しかし、ルールalgo-convert-to-grayによる生成された状態(image color do-togray)から、?sはcolorと認識されるため、アクションとして、状態(# image do-togray)が追加される。
【００５８】
図５は、カラー画像からエッジ点抽出を行う場合の例を示している。(init image color)は、初期画像がカラー画像であることを示している。(image edge-points)は、ゴール画像がエッジ点画像であることを示している。
【００５９】
まず、初期状態の(image edge-points)は、ルールalgo-edge-pointsの前提条件(?x edge-points $?algo)とマッチングできる（?x : image、$?algo : 空リスト）ので、そのルールは、アクション(image edge-extra gray)を状態空間に追加する。これによって、ルールalgo-edge-extraの前提条件(?x edge-extra gray $?algo)とマッチングできる（?x : image、$?algo : 空リスト）ので、そのルールは、２つのアクション(image smooth gray do-sobel)と(image smooth gray do-canney)を状態空間に追加する。
【００６０】
追加された２つの状態は、algo-smoothの前提条件(?x smooth ?s $?algo)とマッチングでき、(image smooth gray do-sobel)とマッチングする際、?x : image、$s : color、$? : do-sobelになり、(image smooth gray do-canny)とマッチングする際、?x : image、$s : color、$? : do-cannyになり、この２つのマッチングはそれぞれ２つのアクションを起こし、合計４つの状態
(image  gray do-sobel do-gaussmooth)
(image  gray do-sobel do-avgsmooth)
(image  gray do-canny do-gaussmooth)
(image  gray do-canny do-avgsmooth)
を状態空間に追加することになる。
【００６１】
この４つの状態は、図４で定義した二つのルールalgo-convert-to-grayとstop-algoに順番にマッチングできる。例えば、(image gray do-sobel do-gaussmooth)は、algo-convert-to-grayの前提条件(?x gray $?algo)とマッチングする際、状態(image color do-sobel do-gaussmooth do-togray)が状態空間に追加される。これと(init image color)を合わせて、stop-algoの前提条件とマッチングできる。結果として、状態(# image do-sobel do-gaussmooth do-togray)を状態空間に追加する。
【００６２】
最後に、結果として、
(# image  do-sobel do-gaussmooth do-togray)
(# image  do-sobel do-avgsmooth do-togray)
(# image  do-canny do-gaussmooth do-togray)
(# image  do-canny do-avgsmooth do-togray)
が生成され、カラー画像からエッジ画像を生成する際に４種類のアルゴリズムが自動生成されたことになる。
【００６３】
このように、カラー画像をグレー変換する場合の方法やカラー画像からエッジ点抽出を行う場合の方法としていくつかの方法が考えられるが、プログラム変換装置１０が最も効率的なルールを推論し、そのルールに従ったアルゴリズムに基づいて中間コードを最適化することにより、プロセッサが命令を実行する際のメモリアクセスを低減して、高速処理を実現することができる。
【００６４】
なお、本発明は上記実施例に限定されるものではなく、本発明の趣旨を逸脱しない限りにおいて、その構成や制御方法は適宜変更可能である。
【００６５】
例えば、上記実施例では、画像処理に特化したドメイン固有言語を用いてソースコードを作成したが、ドメイン固有言語により定義される中間言語に数値計算ルーチンを定義する機能や数式を定義する機能を持たせ、画像処理ルーチンを構成する演算命令セットを持たせることができれば、他の処理に特化したドメイン固有言語を用いてソースコードを作成することも可能である。
【産業上の利用可能性】
【００６６】
本発明は、画像処理に関する演算を行う命令文が組み込まれたソースコードを変換対象とするプログラム変換装置及びプログラム変換方法に利用可能である。
【符号の説明】
【００６７】
１０  プログラム変換装置
１１  デバッガ
１２  シミュレータ
１３  プロファイラ
１４  コンパイラ
２１  第１最適化部
２２  中間コード生成部
２３  ユーザ定義入力部
２４  第２最適化部
２５  機械コード生成部
【図１】
2014219858.tif 000003
【図２】
2014219858.tif 000004
【図３】
2014219858.tif 000005
【図４】
2014219858.tif 000006
【図５】
2014219858.tif 000007