(57)【要約】【課題】アーキテクチャの設計期間を短縮させ、且つ、最適な追加命令の抽出を可能にする。【解決手段】プログラム中に含まれる同じ処理の集まりを検索する手段として、コンパイラ１０内の構文解析器１１による構文解析が適用された後の中間コード２２に対して、同じパターンの中間コード２２を検索する統計情報抽出器１２をコンパイラ１０に組み込むことにより、どの処理が頻繁に使用されているかを判別する。コンパイラ１０の中間コード２２は、入力となるソフトウェアのソースコード２１に記述されたプログラム構造を反映したものであり、且つ、コンパイラ１０に固有のフォーマットで記述されているため、同じ演算処理等の処理の集まりを定量的に検出できる。この統計情報２３を利用しているので、プログラムの性能改善に効果の高い命令セットが抽出でき、且つ、命令セットの設計作業の効率化が期待できる。【選択図】図１
2008015963.tif 000002
【特許請求の範囲】
【請求項１】
ソースコードの構文を解析し、この解析結果を中間コードとして生成する構文解析手段と、
前記構文解析手段により生成された前記中間コードの中から、同じパターンの出現頻度を測定して抽出し、この抽出結果である統計情報を出力する統計情報抽出手段と、
前記統計情報抽出手段から出力された前記統計情報に基づいて記述された、前記中間コードの出現頻度の多いパターンに対応する追加命令を生成するためのコード生成則が与えられると、このコード生成則に従って、前記中間コードからアセンブラコードを生成して出力するコード生成手段と、
を有することを特徴とするコンパイラ。
【請求項２】
ソースコードの構文を解析し、この解析結果を中間コードとして生成する構文解析手段と、
前記構文解析手段により生成された前記中間コードの中から、同じパターンの出現頻度を測定して抽出し、この抽出結果である統計情報を出力する統計情報抽出手段と、
前記統計情報抽出手段から出力された前記統計情報と、与えられたプログラムの性能目標値とから、この性能目標値を達成するために必要な追加命令のコード生成則を生成する追加命令生成手段と、
前記追加命令生成手段により生成された前記コード生成則に従って、前記中間コードからアセンブラコードを生成して出力するコード生成手段と、
を有することを特徴とするコンパイラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、コンフィギャラブル・プロセッサやマイクロコンピュータ（以下、「マイコン」という。）等のプロセッサの命令セットアーキテクチャ設計において、プロセッサの用途に最適な命令セットを抽出するための、プロセッサの命令セット最適化機能を備えたコンパイラに関するものである。
【背景技術】
【０００２】
従来、対象となるアプリケーション・プログラムに特化したカスタム命令を実装できるコンフィギャラブル・プロセッサが提案されている。コンフィギャラブル・プロセッサとは、ある環境やツールを用いて命令セット等をカスタマイズできるプロセッサのことである。
【０００３】
この種のコンフィギャラブル・プロセッサの命令セットアーキテクチャの設計においては、プロセッサのゲート規模や、ソフトウェアのコードサイズ、及びプロセッサ上でソフトウェアを実行した場合の実行時間等の目標性能を考慮して命令セットを決定する必要がある。
【０００４】
一般に、このような目標値に対して最適な命令セットを決定するには、以下のような方法が用いられる。
【０００５】
先ず、ベースとなるプロセッサのアーキテクチャを決定し、そのアーキテクチャの命令を出力できるコンパイラを作成する。コンパイラの作成後、ソフトウェア開発者は、ソフトウェアのコーディングの作業によりソースコードを作成する。このソースコードを、作成したコンパイラに入力してコンパイルを行う。これによりコンパイラは、ソースコードの構文解析等を行い、ベースとなるアーキテクチャの命令セットを使用したアセンブラコードを出力する。
【０００６】
次に、アセンブラソースファイルをアセンブル・リンクし、実行可能コードを生成する。続いて、実行可能コードを、ベースとなる命令セットアーキテクチャを実装したシミュレータ上で実行させ、実行時間、コードサイズ等の性能を測定する。測定した性能が目標性能に到達していれば、命令セットアーキテクチャの設計は終了となる。
【０００７】
しかし目標性能に到達していなければ、ベースのアーキテクチャ設計に戻り、目標性能を達成するためにはどのような命令セットが必要か再検討した上で、必要な命令を命令セットに追加する。以降、追加した命令を出力できるコンパイラを作成し、上記の手順を繰り返す。
【０００８】
このように、コンフィギャラブル・プロセッサの命令セットアーキテクチャの設計は、最適な命令セットが決定できるまで、上記のような手順のサイクルを繰り返される。このような方法において、上記のような手順の繰り返しの回数を最小限の回数に抑えるためには、実行可能コードを生成した後の一度の性能測定で、最適な追加命令を設計するのに適切な情報を抽出することが重要である。
【０００９】
コンフィギャラブル・プロセッサの性能を向上させることを目的として、最適な追加命令を設計するための情報としては、ソフトウェアの中で頻繁に実行される複数の演算処理の統計情報が有効である。このような情報を得ることができれば、最も頻繁に実行される複数の演算処理の集まりを１命令で実行する命令を、命令セットに追加すればよい。そして、ソフトウェアのコンパイル時に、コンパイラがその命令を使用する実行可能コードを生成することで、高い性能改善効果が得られる。
【００１０】
プログラムの中でどの演算処理が頻繁に使用されているかを見つけ出すための方法として、例えば、以下の（１）〜（３）の３つの方法がある、あるいは、考えられる。
【００１１】
（１）  プログラムをシミュレータ上で実行させ、命令レベルのプロファイルを測定する方法がある。
【００１２】
（２）  コンパイラの出力したアセンブラの命令列を走査し、同じパターンの命令列の組み合わせを検索する方法も考えられる。
【００１３】
（３）  ソースコードの記述から同じ処理を検索することも考えられる。
このようなコンパイラに関連する技術として、例えば、次のような文献がある。
【００１４】
【特許文献１】特開平１１−３３８７１０号公報
【００１５】
この特許文献１には、プロセッサに複数の命令セットが実装されている場合、ターゲットのソフトウェアを効率よく実行できる命令セットを、予め実装されたものの中からコンパイル時に選択するためのコンパイル方法が記載されている。
【発明の開示】
【発明が解決しようとする課題】
【００１６】
しかしながら、前記（１）〜（３）の３つの方法では、以下のような課題があった。
【００１７】
前記（１）の方法は、個々の命令単位での実行回数を計測する方法であり、複数の命令の集まりが実行される回数を計測することができない。
【００１８】
前記（２）の方法では、コンパイラの出力するアセンブラコードは、コンパイラの最適化により、同じ処理を表していても命令の実行順序が異なり、又、間に他の命令が挿入されるため、単純にパターンの検索では、同じ処理を表す命令列を探すことが困難である。
【００１９】
前記（３）の方法では、ソースコードはフリーフォーマットで記述されているため、機械的なパターンの検索では、どの記述が同じ処理を表しているのか判断することができない。
【００２０】
このように、一般的に、プログラム中で多く行われる複数の演算処理を定量的に測定することは難しいため、従来は、アーキテクチャの設計者の経験に基づいて、どの処理にどの命令を追加すべきか決定してきた。そのため、最適なアーキテクチャが得られるまで、性能測定と命令追加を繰り返す必要があり、アーキテクチャの設計期間の長期化や、最適な追加命令の抽出が困難であるという課題があった。
【課題を解決するための手段】
【００２１】
本発明は、プロセッサの命令セット最適化機能を備えたコンパイラであって、ソースコードの構文を解析し、この解析結果を中間コード（即ち、ソフトウェアプログラムにおいて、元のソースコードから最終的な実行形式に変換する過程で、便宜上、一時的に作成される中間形式のコード）として生成する構文解析手段と、前記構文解析手段により生成された前記中間コードの中から、同じパターンの出現頻度を測定して抽出し、この抽出結果である統計情報を出力する統計情報抽出手段と、前記統計情報抽出手段から出力された前記統計情報に基づいて記述されたコード生成則（即ち、前記中間コードの出現頻度の多いパターンに対応する追加命令を生成するためのコード生成則）が与えられると、このコード生成則に従って、前記中間コードからアセンブラコードを生成して出力するコード生成手段とを有している。
【００２２】
本発明の他のコンパイラでは、ソースコードの構文を解析し、この解析結果を中間コードとして生成する構文解析手段と、前記構文解析手段により生成された前記中間コードの中から、同じパターンの出現頻度を測定して抽出し、この抽出結果である統計情報を出力する統計情報抽出手段と、前記統計情報抽出手段から出力された前記統計情報と、与えられたプログラムの性能目標値とから、この性能目標値を達成するために必要な追加命令のコード生成則を生成する追加命令生成手段と、前記追加命令生成手段により生成された前記コード生成則に従って、前記中間コードからアセンブラコードを生成して出力するコード生成手段とを有している。
【発明の効果】
【００２３】
本発明によれば、プログラム中に含まれる同じ処理の集まりを検索する手段として、コンパイラによる構文解析が適用された後の中間コードに対して同じパターンの中間コードを検索する仕組みをコンパイラに組み込むことにより、どの処理が頻繁に使用されているかを判別する。コンパイラの中間コードは、入力となるソフトウェアのソースコードに記述されたプログラム構造を反映したものであり、且つ、コンパイラに固有のフォーマットで記述されているため、同じ演算処理等の処理の集まりを定量的に検出できる。この統計情報を利用しているので、プログラムの性能改善に効果の高い命令セットが抽出でき、且つ、命令セットの設計作業の効率化が期待できる。
【発明を実施するための最良の形態】
【００２４】
プロセッサの命令セット最適化機能を備えたコンパイラは、ソースコードの構文を解析し、この解析結果を中間コードとして生成する構文解析手段と、前記構文解析手段により生成された前記中間コードの中から、同じパターンの出現頻度を測定して抽出し、この抽出結果である統計情報を出力する統計情報抽出手段と、前記統計情報抽出手段から出力された前記統計情報に基づいて記述されたコード生成則が与えられると、このコード生成則に従って、前記中間コードからアセンブラコードを生成して出力するコード生成手段とを有している。
【実施例１】
【００２５】
（実施例１の構成）
図１は、本発明の実施例１を示すコンパイラの概略の構成図である。
本実施例１のコンパイラ１０は、コンフィギャラブル・プロセッサの命令セット最適化機能を備えたものであり、ソフトウェアのＣ言語等のソースコード２１の構文を解析し、この解析結果を中間コード２２として生成する構文解析手段（例えば、構文解析器）１１と、生成された中間コード２２の中から、同じパターンの出現頻度を測定して抽出し、この抽出結果である統計情報２３を出力する統計情報抽出手段（例えば、統計情報抽出器）１２と、出力された統計情報２３に基づいて記述された追加命令のコード生成則２４と中間コード２２とからアセンブラコード１４を生成するコード生成手段（例えば、コード生成器）１３とから構成されている。
【００２６】
統計情報２３は、例えば、命令セットの設計者に与えられ、設計者は、その統計情報２３を元に、命令セットを設計して追加命令のコード生成則２４を作成し、コード生成器１３に組み込むような構成になっている。
【００２７】
（実施例１の動作）
図２は、図１の中間コード２２と統計情報２３の一例を示す図である。この図２では、統計情報２３として、登録されたパターン１，２，３，・・・、演算の構成としてADD（加算）、MULT（乗算）、SUB（減算）、・・・、出現頻度１０，２，８，・・・が示されている。
【００２８】
図１及び図２を参照しつつ、コンパイラ１０の生成する統計情報２３を利用したコンフィギャラブル・プロセッサの命令セットアーキテクチャの設計方法を説明する。
【００２９】
先ず、ソフトウェアのソースコード２１からなるソースファイルを、コンパイラ１０に入力として与えると、構文解析器１１がソースファイルの構文を解析し、中間コード２２に変換する。
【００３０】
変換された中間コード２２は、統計情報抽出器１２に入力される。ここで、統計情報抽出器１２は、中間コード２２に現れるパターンを検索し、統計情報２３に登録する。この時、既に統計情報２３に登録されているパターンが出現した場合、そのパターンの出現頻度を計数し、一緒に統計情報２３に登録する。
【００３１】
登録される統計情報の一例が図２に示されている。但し、パターン１，２，３，・・・の検索は、全ての中間コード２２の組み合わせを検索すると、その組み合わせの数が膨大な数になるため、検索するパターン１，２，３，・・・に制限を設けることもできる。例えば、検索する中間コード２２に含まれるノード(演算子の数)を３つまでに制限する等の制限が設定可能である。
【００３２】
統計情報抽出器１２が全ての中間コード２２のパターン１，２，３，・・・を検索し、統計情報２３の収集が終わると、設計者は、統計情報２３から中間コード２２の中で最も出現頻度の高い中間表現のパターンを知ることができる。
【００３３】
次に、設計者は、最も出現頻度の高い中間表現のパターン１０に対応する演算処理をプロセッサが１命令で実行するための命令を設計する。命令の設計が終わると、中間コード２２のパターンから設計した命令をコンパイラ１０が出力できるように、追加命令のコード生成則２４を記述する。
【００３４】
その後、コード生成器１３は、記述されたコード生成則２４を読み込み、中間コード２１に対応する命令をアセンブラコード１４として出力する。
【００３５】
以上のように、本実施例１では、目的とする最適なアセンブラコード１４を得るまでに、次の（ｉ）、（ｉｉ）の２段階の操作を行うことになる。
【００３６】
（ｉ）  第１段階
ソースコード２１→構文解析器１１の処理→中間コード２２→統計情報抽出器１２の処理→統計情報２３、という流れで、ソースコード２１をコンパイルし、統計情報２３までを取得する。
【００３７】
（ｉｉ）  第２段階
統計情報２３から設計者が作成した追加命令の生成則２４をコンパイラ１０のコード生成器１３に組み込み、ソースコード２１を再度コンパイルし、アセンブラコード１４を得る。
【００３８】
なお、本実施例１において、統計情報抽出器１２は、中間コード２２を静的に解析して統計情報２３を出力する。ここで、中間コード２２を実行するシミュレータを使用し、このシミュレータ上で中間コード２２を実行させることにより、中間コード２２の動的なプロファイル情報を同時に取得するような構成も可能である。
【００３９】
このような構成にすることで、統計情報２３に登録されたそれぞれの中間コード２２のパターンが動的に実行される回数も統計情報２３に追加でき、出現回数及び実行回数の多いパターンを抽出できる。そして、設計者がこのようなパターンの中間コード２２の処理を実行する命令を追加すれば、より高い性能改善効果が得られる。
【００４０】
（実施例１の効果）
例えば、設計者の経験に基づいてどの命令を追加すべきか決定する場合、従来の技術では、最適なアーキテクチャが得られるまで、性能測定と命令追加を繰り返す必要があった。これに対し、本実施例１では、中間コード２２の出現頻度を定量的に測定できるため、プログラム全体としての性能を向上させるために、どの処理に対して命令を追加すればよいか、即時に判断することができる。これにより、アーキテクチャの設計期間を短縮させることが可能となり、且つ、最適な追加命令を抽出することが可能となる。
【実施例２】
【００４１】
（実施例２の構成）
図３は、本発明の実施例２を示すコンパイラの概略の構成図であり、実施例１を示す図１中の要素と共通の要素には共通の符号が付されている。
【００４２】
実施例１のコンパイラ１０では、中間コード２２の統計情報２３から、設計者が人手で追加命令を設計し、そのコード生成則２４を作成している。
【００４３】
これに対し、本実施例２のコンパイラ１０Ａは、実施例１と同様に、コンフィギャラブル・プロセッサの命令セット最適化機能を備えたものであり、実施例１のコンパイラ１０と同様の構文解析器１１、統計情報抽出器１２、及びコード生成器１３を有する他に、新たに、追加命令生成手段（例えば、追加命令抽出器）１５が実装され、この追加命令抽出器１５により、統計情報抽出器１２から出力された統計情報２３を元に、自動的に追加命令の仕様を出力する構成になっている。
【００４４】
即ち、本実施例２の追加命令抽出器１５では、統計情報抽出器１２から出力された統計情報２３と、設計者から与えられたプログラムの性能目標値である最適化目標値２５とから、この最適化目標値２５を達成するために必要な追加命令のコード生成則２４を自動的に生成する機能を有している。その他の構成は、実施例１と同様である。
【００４５】
（実施例２の動作）
図２及び図３を参照しつつ、コンパイラ１０Ａの生成する統計情報２３を利用したコンフィギャラブル・プロセッサの命令セットアーキテクチャの設計方法を説明する。
【００４６】
先ず、ソフトウェアのソースコード２１からなるソースファイルを、コンパイラ１０Ａに入力として与えると、構文解析器１１がソースファイルの構文を解析し、中間コード２２に変換する。
【００４７】
変換された中間コード２２は、統計情報抽出器１２に入力される。ここで、統計情報抽出器１２は、中間コード２２に現れるパターンを走査し、統計情報２３に登録する。この時、既に統計情報２３に登録されているパターンが出現した場合、このパターンの出現頻度を計数し、一緒に統計情報２３に登録する。
【００４８】
統計情報抽出器１２が全ての中間コード２２のパターンを検索し、統計情報２３の収集が終わると、この統計情報２３を追加命令抽出器１５に入力する。この時、設計者がコードサイズ等のプログラム性能の目標値である最適化目標値２５を与えることにより、追加命令抽出器１５は、その最適化目標値２５が達成できるまで、出現頻度の高いパターンに対する追加命令の仕様と、追加命令のコード生成則２４を生成する。
【００４９】
例えば、図２に示した例で、パターン１の中間コード２２の出現頻度１０が最も多かったとすると、追加命令抽出器１５は、４つの入力オペランドに対してADD（加算）、MULT（乗算）、SUB（減算）の演算を行い、この演算結果を出力する１つの命令を生成する。
【００５０】
その後、コード生成器１３は、コード生成則２４を読み込み、中間コード２２に対応する命令をアセンブラコード１４として出力する。
【００５１】
（実施例２の効果）
本実施例２によれば、設計者がプログラム性能の最適化目標値２５を与えるだけで、設計者が追加命令の仕様を検討することなく、自動的に追加命令の仕様であるコード生成則２４が作成される。設計者は、その仕様であるコード生成則２４に従ってプロセッサのアーキテクチャを変更するだけでよい。これにより、実施例１の効果に加えて、更に設計効率の向上が期待できる。
【００５２】
（変形例）
実施例１、２では、コンパイラ１０，１０Ａの生成する統計情報２３を利用したコンフィギャラブル・プロセッサの命令セットアーキテクチャの設計方法について説明したが、本発明はこれに限られるものではなく、コンパイラ１０，１０Ａによりコンパイルされたソフトウェアにより動作が制御される全てのマイコンシステム等の性能向上方法として適用可能である。
【００５３】
例えば、ソフトウェアをコンパイルし、演算等の統計情報を取得した結果、頻繁に行われる演算等が存在することが分かれば、プロセッサがもつ命令ではなく、その演算等を実行するハードウェアアクセラレータをシステムに追加する等のことが可能である。
【図面の簡単な説明】
【００５４】
【図１】本発明の実施例１を示すコンパイラの概略の構成図である。
【図２】図１の中間コードと統計情報の一例を示す図である。
【図３】本発明の実施例２を示すコンパイラの概略の構成図である。
【符号の説明】
【００５５】
１０，１０Ａ      コンパイラ
１１      構文解析器
１２      統計情報抽出器
１３      コード生成器
１４      アセンブラコード
１５      追加命令抽出器
２１      ソースコード
２２      中間コード
２３      統計情報
２４      コード生成則
２５      最適化目標値
【図１】
2008015963.tif 000003
【図２】
2008015963.tif 000004
【図３】
2008015963.tif 000005