(57)【要約】【課題】ソースプログラムの効率的なチューニングを支援する。【解決手段】構文解析部１８２は、ソースプログラム１４１から第１の中間コードを生成する。論理保証最適化部１８４は、第１の中間コードに対しターゲットプロセッサに応じた最適化処理を行うことにより、第２の中間コードを生成する。最適性到達度解析部１８６は、第２の中間コードの性能の分析を行い、性能分析の結果を示す最適性到達度情報１４２を出力する。【選択図】図４
2011028523.tif 000002
【特許請求の範囲】
【請求項１】
高級言語で記述されたソースプログラムを、ターゲットプロセッサ向けのコードに変換するプログラム変換装置であって、
前記ソースプログラムから第１の中間コードを生成する中間コード生成部と、
前記第１の中間コードに対し前記ターゲットプロセッサに応じた最適化処理を行うことにより、第２の中間コードを生成する最適化部と、
前記第２の中間コードの性能の分析を行い、性能分析の結果を示す最適性到達度情報を出力する解析部と
を備える、プログラム変換装置。
【請求項２】
前記プログラム変換装置は、さらに、
前記第１の中間コードに対し、特定の条件を.緩和させた最適化処理である特定条件緩和最適化処理を行うことにより、第３の中間コードを生成する特定条件緩和最適化部を備え、
前記解析部は、さらに、前記第３の中間コードの性能を分析し、前記第２の中間コードおよび前記第３の中間コードの性能の分析結果を示す前記最適性到達度情報を出力する、
請求項１に記載のプログラム変換装置。
【請求項３】
前記特定条件緩和最適化部は、さらに、前記特定の条件を緩和させた条件の情報を出力する、
請求項２に記載のプログラム変換装置。
【請求項４】
前記プログラム変換装置は、さらに、
指示を受付ける受付部を備え、
前記特定条件緩和最適化部は、前記受付部が受付けた指示が示す条件に基づいた前記特定条件緩和最適化処理を行う、
請求項２に記載のプログラム変換装置。
【請求項５】
前記受付部が受付けた指示は、コマンドラインによる指示である、
請求項４に記載のプログラム変換装置。
【請求項６】
前記受付部が受付けた指示は、前記ソースプログラムに含まれる指示である、
請求項４に記載のプログラム変換装置。
【請求項７】
前記プログラム変換装置は、さらに、
前記第１の中間コードに対し、論理の正当性を保証しない最適化処理である論理未保証最適化処理を行うことにより、第４の中間コードを生成する論理未保証最適化部を備え、
前記解析部は、さらに、前記第４の中間コードの性能を分析し、前記第２の中間コードおよび前記第４の中間コードの性能の分析結果を示す前記最適性到達度情報を出力する、
請求項１に記載のプログラム変換装置。
【請求項８】
前記論理未保証最適化部は、さらに、論理の正当性を保証していない条件の情報を出力する、
請求項７に記載のプログラム変換装置。
【請求項９】
前記プログラム変換装置は、さらに、
指示を受付ける受付部を備え、
前記論理未保証最適化部は、前記受付部が受付けた指示が示す、論理の保証が不要な条件に基づいた前記論理未保証最適化処理を行う、
請求項７に記載のプログラム変換装置。
【請求項１０】
前記受付部が受付けた指示は、コマンドラインによる指示である、
請求項９に記載のプログラム変換装置。
【請求項１１】
前記受付部が受付けた指示は、前記ソースプログラムに含まれる指示である、
請求項９に記載のプログラム変換装置。
【請求項１２】
前記最適性到達度情報は、前記ターゲットプロセッサに対する前記第２の中間コードの最適度合いを少なくとも示す、
請求項１〜１１のいずれかに記載のプログラム変換装置。
【請求項１３】
高級言語で記述されたソースプログラムを、ターゲットプロセッサ向けの機械語コードに変換するプログラム変換システムであって、
前記プログラムから第１の中間コードを生成する中間コード生成部と、
前記第１の中間コードに対し前記ターゲットプロセッサに応じた最適化処理を行うことにより、第２の中間コードを生成する最適化部と、
前記第２の中間コードの性能の分析を行うことにより、性能分析の結果を示す最適性到達度情報を出力する解析部と、
前記第２の中間コードに基づくファイルを使用して前記ターゲットプロセッサで動作する機械語コードを生成する機械語コード生成部と
を備える、プログラム変換システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースプログラムを、ターゲットプロセッサ向けのコードに変換するプログラム変換装置およびプログラム変換システムに関する。
【背景技術】
【０００２】
近年、メディア処理における高性能化が求められている。メディア処理は、例えば、画像および音声の符号化処理、画像および音声の復号処理である。これまで、単一での変換処理のみ行っていれば商品要求を満たしていたが、商品の高性能化により、符号化処理、復号処理の輻輳処理が求められてきた事により、より高性能なメディア処理が求められている。そのために、コンパイラでの最適化処理が実装され、かつ、これまで最適化処理の改善も行われてきた。
【０００３】
しかし、メディア処理の性能向上の要求が高まるにつれ、コンパイラでの最適化処理の効率が向上するようなコードの記述が必要となってきた。プログラム開発者（以下、プログラマという）は、コンパイラに対して＃ｐｒａｇｍａ指令による最適化のアシスト情報の記述や、プログラムのチューニングを施すことでコンパイラの最適化処理の活用を行ってきた。
【０００４】
しかし、プログラマは、ソースプログラムのどの箇所にどの様なチューニングを施せばどれだけの性能向上が図れるか分からないため、ソースプログラムの修正に対してどれだけ性能が向上したかを確認するチューニングを繰り返し行い、多大な工数を費やす必要がある。
【０００５】
特許文献１には、上記問題を解決するために、プログラマにチューニングを施す箇所を知らせる技術（以下、従来技術Ａという）が開示されている。具体的には、特許文献１には、ソースプログラムに対して最適化を施した内容をコンパイルリストファイルとして出力する最適化コンパイラが開示されている。
【０００６】
また、非特許文献１には、入力プログラムをより最適化させるための補助情報の入力を促す対話型の最適化コンパイラが開示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平５−１０８３７２号公報
【非特許文献】
【０００８】
【非特許文献１】Hans Zima，Barbara Chapman著、村岡 洋一訳「スーパーコンパイラ（Supercompilers for Parallel and Vector Computers）」、第１版、オーム社、平成７年４月２５日
【発明の概要】
【発明が解決しようとする課題】
【０００９】
従来技術Ａでは、ソースプログラムに対し行った最適化処理の内容を出力する。プログラムは、この最適化処理の内容に基づいて、ソースプログラムのチューニングを繰り返す。
【００１０】
しかし、プログラマは、既に最良となっているかもしれないソースプログラムに対しても、チューニング効果が収束するまで、チューニングを繰り返し実施することで、ソースプログラムの最適性を確認しなければならない。つまり、プログラマは、チューニングに対し多大な工数を費やす必要があり、ソースプログラムのチューニングの効率が悪い。
【００１１】
本発明は、上述の問題点を解決するためになされたものであって、その目的は、ソースプログラムの効率的なチューニングを支援することである。
【課題を解決するための手段】
【００１２】
上述の課題を解決するために、この発明のある局面に従うプログラム変換装置は、高級言語で記述されたソースプログラムを、ターゲットプロセッサ向けのコードに変換する。プログラム変換装置は、ソースプログラムから第１の中間コードを生成する中間コード生成部と、第１の中間コードに対しターゲットプロセッサに応じた最適化処理を行うことにより、第２の中間コードを生成する最適化部と、第２の中間コードの性能の分析を行い、性能分析の結果を示す最適性到達度情報を出力する解析部とを備える。
【００１３】
すなわち、中間コード生成部は、ソースプログラムから第１の中間コードを生成する。最適化部は、第１の中間コードに対しターゲットプロセッサに応じた最適化処理を行うことにより、第２の中間コードを生成する。解析部は、第２の中間コードの性能の分析を行い、性能分析の結果を示す最適性到達度情報を出力する。
【００１４】
したがって、プログラマは、最適性到達度情報を参照することにより、ソースプログラムに対応する第２の中間コードの性能分析の結果を把握することができる。その結果、プログラマは、第２の中間コードに対応するソースプログラムに対するチューニングの効果を把握することができる。つまり、最適性到達度情報を出力することにより、プログラマに対し、ソースプログラムの効率的なチューニングを支援することができる。
【００１５】
また、プログラム変換装置は、さらに、第１の中間コードに対し、特定の条件を.緩和させた最適化処理である特定条件緩和最適化処理を行うことにより、第３の中間コードを生成する特定条件緩和最適化部を備え、解析部は、さらに、第３の中間コードの性能を分析し、第２の中間コードおよび第３の中間コードの性能の分析結果を示す最適性到達度情報を出力することが好ましい。
【００１６】
これにより、第２および第３の中間コードの性能の分析結果を把握することができる。
また、特定条件緩和最適化部は、さらに、特定の条件を緩和させた条件の情報を出力することが好ましい。
【００１７】
また、プログラム変換装置は、さらに、指示を受付ける受付部を備え、特定条件緩和最適化部は、受付部が受付けた指示が示す条件に基づいた特定条件緩和最適化処理を行うことが好ましい。
【００１８】
また、受付部が受付けた指示は、コマンドラインによる指示であることが好ましい。
また、受付部が受付けた指示は、ソースプログラムに含まれる指示であることが好ましい。
【００１９】
また、プログラム変換装置は、さらに、第１の中間コードに対し、論理の正当性を保証しない最適化処理である論理未保証最適化処理を行うことにより、第４の中間コードを生成する論理未保証最適化部を備え、解析部は、さらに、第４の中間コードの性能を分析し、第２の中間コードおよび第４の中間コードの性能の分析結果を示す最適性到達度情報を出力することが好ましい。
【００２０】
これにより、第２および第４の中間コードの性能の分析結果を把握することができる。
また、論理未保証最適化部は、さらに、論理の正当性を保証していない条件の情報を出力することが好ましい。
【００２１】
また、プログラム変換装置は、さらに、指示を受付ける受付部を備え、論理未保証最適化部は、受付部が受付けた指示が示す、論理の保証が不要な条件に基づいた論理未保証最適化処理を行うことが好ましい。
【００２２】
また、受付部が受付けた指示は、コマンドラインによる指示であることが好ましい。
また、受付部が受付けた指示は、ソースプログラムに含まれる指示であることが好ましい。
【００２３】
また、最適性到達度情報は、ターゲットプロセッサに対する第２の中間コードの最適度合いを少なくとも示すことが好ましい。
【００２４】
この発明の他の局面に従うプログラム変換システムは、高級言語で記述されたソースプログラムを、ターゲットプロセッサ向けの機械語コードに変換するシステムである。プログラム変換システムは、プログラムから第１の中間コードを生成する中間コード生成部と、第１の中間コードに対しターゲットプロセッサに応じた最適化処理を行うことにより、第２の中間コードを生成する最適化部と、第２の中間コードの性能の分析を行うことにより、性能分析の結果を示す最適性到達度情報を出力する解析部と、第２の中間コードに基づくファイルを使用してターゲットプロセッサで動作する機械語コードを生成する機械語コード生成部とを備える。
【００２５】
なお、本発明は、このような特徴的な手段を備えるプログラム変換装置として実現するだけでなく、プログラム変換装置に含まれる特徴的な処理を行う各部をステップとするプログラム変換方法として実現したり、プログラム変換装置に含まれる特徴的な手段としてコンピュータを機能させるためのプログラムとして実現したりすることもできる。そして、そのようなプログラムは、ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）等の記録媒体やインターネット等の通信ネットワークを介して流通させることができるのは言うまでもない。
【発明の効果】
【００２６】
本発明により、ソースプログラムの効率的なチューニングを支援することができる。
【図面の簡単な説明】
【００２７】
【図１】コンピュータの概観を示す図である。
【図２】コンピュータ内のハードウエア構成を示したブロック図である。
【図３】第１の実施の形態におけるコンパイラシステムの構成を示す図である。
【図４】第１の実施の形態におけるコンパイラの構成を示す図である。
【図５】コンパイラが実行する処理のフローチャートである。
【図６】最適性到達度解析処理のフローチャートである。
【図７】ソースプログラムの一例を示す図である。
【図８】第１の実施の形態における一例としての最適性到達度情報を示す図である。
【図９】第２の実施の形態におけるコンパイラシステムの構成を示す図である。
【図１０】第２の実施の形態におけるコンパイラの構成を示す図である。
【図１１】コンパイラが実行する処理のフローチャートである。
【図１２】最適性到達度解析処理Ａのフローチャートである。
【図１３】第２の実施の形態における一例としての最適性到達度情報を示す図である。
【図１４】第２の実施の形態の変形例１におけるコンパイラの構成を示す図である。
【図１５】第２の実施の形態の変形例２におけるコンパイラシステムの構成を示す図である。
【図１６】第２の実施の形態の変形例２におけるコンパイラの構成を示す図である。
【図１７】第３の実施の形態におけるコンパイラシステムの構成を示す図である。
【図１８】第３の実施の形態におけるコンパイラの構成を示す図である。
【図１９】コンパイラが実行する処理のフローチャートである。
【図２０】最適性到達度解析処理Ｃのフローチャートである。
【図２１】第３の実施の形態における一例としての最適性到達度情報を示す図である。
【図２２】第３の実施の形態の変形例１におけるコンパイラの構成を示す図である。
【図２３】第３の実施の形態の変形例２におけるコンパイラシステムの構成を示す図である。
【図２４】第３の実施の形態の変形例２におけるコンパイラの構成を示す図である。
【発明を実施するための形態】
【００２８】
以下、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。
【００２９】
＜第１の実施の形態＞
以下、第１の実施の形態におけるコンパイラシステムについて説明する。
【００３０】
第１の実施の形態におけるコンパイラシステムは、図１に示されるコンピュータ５００において、プログラムが実行されることにより実現される。
【００３１】
次に、コンピュータ５００について詳細に説明する。
図２は、コンピュータ５００内のハードウエア構成を示したブロック図である。なお、図２には、説明のために、記録媒体５０も示している。記録媒体５０には、後述するプログラム５１が記録されている。すなわち、プログラム５１は、媒体等に記録されてプログラム製品として流通される。また、記録媒体５０もプログラム製品として流通される。
【００３２】
図２に示されるように、コンピュータ５００は、制御部５１０と、ＲＡＭ（Random Access Memory）５２０と、記憶部５２２と、記憶媒体アクセス部５３０と、表示部５４０と、キーボード５５１と、マウス５５２と、通信部５６０とを備える。
【００３３】
制御部５１０、ＲＡＭ５２０、記憶部５２２、記憶媒体アクセス部５３０、表示部５４０、キーボード５５１、マウス５５２および通信部５６０は、データバス５０２に接続されている。
【００３４】
制御部５１０は、ＣＰＵ（Central Processing Unit）である。なお、制御部５１０は、ＣＰＵに限定されることなく、演算機能を有するその他の回路であってもよい。
【００３５】
ＲＡＭ５２０は、揮発性のメモリである。ＲＡＭ５２０は、制御部５１０によってデータアクセスされる。ＲＡＭ５２０は、一時的にデータを記憶するワークメモリとしての機能を有する。
【００３６】
記憶部５２２は、不揮発性のメモリである。記憶部５２２は、たとえば、ハードディスクドライブである。なお、記憶部５２２は、ハードディスクドライブに限定されることなく、不揮発的のメモリであれば、その他のメモリ（たとえば、フラッシュメモリ）であってもよい。記憶部５２２は、制御部５１０によって、データアクセスされる。記憶部５２２には、プログラム５１、その他の各種データ等が記憶されている。
【００３７】
制御部５１０は、記憶部５２２に記憶されているプログラム５１を実行し、プログラム５１に基づいて、コンピュータ５００内の各部に対する各種処理や、演算処理等を行なう。
【００３８】
記憶媒体アクセス部５３０は、制御部５１０からの指示により、プログラム５１が記憶された記録媒体５０から、プログラム５１を読み出す機能を有する。記録媒体５０に記憶されているプログラム５１は、制御部５１０が行なうインストール処理により、記憶媒体アクセス部５３０により読み出され、記憶部５２２に記憶される。このインストール処理用プログラムは、予め、記憶部５２２に格納されている。インストール処理は、制御部５１０が、インストール処理用プログラムに基づいて行なう。
【００３９】
記録媒体５０は、ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）である。なお、記録媒体５０は、ＣＤ−ＲＯＭに限定されることなく、データを不揮発的に記録可能なその他の媒体（例えば、ＳＤ（Secure Digital）メモリーカード）であってもよい。
【００４０】
表示部５４０は、文字や画像等を表示する機能を有する。表示部５４０には、文字や画像等を表示する表示面が設けられる。表示部５４０は、ＬＣＤパネル（Liquid Crystal Display Panel）を使用した装置である。なお、表示部５４０は、上記以外の表示方式のパネルを使用した装置であってもよい。
【００４１】
ユーザは、キーボード５５１またはマウス５５２を操作することにより、コンピュータ５００に指示を与える。キーボード５５１またはマウス５５２からの入力指示は、制御部５１０へ送信される。制御部５１０は、キーボード５５１またはマウス５５２からの入力指示に基づいて所定の処理を行なう。すなわち、キーボード５５１およびマウス５５２は、ユーザがコンピュータ５００を操作するためのインターフェースである。
【００４２】
通信部５６０は、有線技術または無線技術を利用して、ネットワークに接続される装置とデータ通信を行なう機能を有する。有線技術は、たとえば、イーサネット（登録商標）に基づく技術である。なお、有線技術は、イーサネット（登録商標）に基づく技術に限定されることなく、その他の有線技術であってもよい。
【００４３】
（システム構成（基本））
図３は、第１の実施の形態におけるコンパイラシステム１４８の構成を示す図である。コンパイラシステム１４８は、プログラム５１が制御部５１０により実行されることにより実現される。すなわち、プログラム５１は、コンパイラシステム１４８を含む。
【００４４】
コンパイラシステム１４８は、Ｃ言語等の高級言語で記述されたソースプログラム１４１を、機械語コードで記述される実行プログラム１４５に変換するソフトウエアシステムである。具体的には、コンパイラシステム１４８は、ソースプログラム１４１を、ターゲットプロセッサが実行可能な実行プログラム１４５に変換するソフトウエアシステムである。ここで、ターゲットプロセッサとは、実行プログラム１４５を実行させる対象となるＣＰＵである。当該ＣＰＵは、コンピュータで使用されるＣＰＵである。
【００４５】
ターゲットプロセッサは、複数種類のハードウエア資源を有する。複数種類のハードウエア資源は、例えば、実行ユニット、キャッシュメモリ、命令デコードユニット等である。実行ユニットには、演算器（ＡＬＵ）、レジスタ等が含まれる。
【００４６】
コンパイラシステム１４８は、コンパイラ１４９と、アセンブラ１５０と、リンカ１５１とを含む。
【００４７】
コンパイラ１４９は、ソースプログラム１４１を、ターゲットプロセッサ向けのアセンブラファイル１４３に変換するプログラムである。アセンブラファイル１４３は、アセンブラ言語で記述されたファイルである。
【００４８】
コンパイラ１４９は、ソースプログラム１４１をアセンブラファイル１４３に変換する際に、最適化処理を行い、アセンブラファイル１４３および最適性到達度情報１４２を出力する。最適性到達度情報１４２は、ソースプログラム１４１に対する最適性を解析した結果を示す情報である。
【００４９】
アセンブラ１５０は、アセンブラ言語で記述されたアセンブラファイル１４３を機械語コードで記述されたオブジェクトファイル１４４に変換するプログラムである。
【００５０】
リンカ１５１は、複数のオブジェクトファイル１４４を結合し、実行プログラム１４５を生成するプログラムである。実行プログラム１４５は、ターゲットプロセッサで動作するプログラムである。つまり、アセンブラ１５０およびリンカ１５１は、アセンブラファイル１４３を使用して、機械語コードで記述された実行プログラム１４５を生成する機械語コード生成部を構成する。
【００５１】
（コンパイラの構成（基本））
図４は、第１の実施の形態におけるコンパイラ１４９の構成を示す図である。
【００５２】
コンパイラ１４９は、構文解析部１８２と、論理保証最適化部１８４と、最適性到達度解析部１８６と、コード出力部１８８とを含む。コンパイラ１４９内の各部は、プログラムモジュールとして実現される。
【００５３】
構文解析部１８２は、ソースプログラム１４１に対し構文解析処理を行うことにより、中間コード（以下、第１の中間コードという）を生成し、第１の中間コードを出力する。すなわち、構文解析部１８２は、ソースプログラム１４１から第１の中間コードを生成する中間コード生成部である。
【００５４】
ここで、以下に記載する最適化処理は、一般的な最適化コンパイラが行う最適化処理であるとする。当該最適化処理は、例えば、ループ回数を少なくするための処理、命令の実行回数を減らすための処理、コードサイズを小さくするための処理、分岐の数を少なくするための処理等を含む。当該最適化処理は、一般的なコンパイラで行われる処理と同様なので詳細な説明は繰り返さない。
【００５５】
論理保証最適化部１８４は、第１の中間コードに対して、論理の正当性を保証した最適化処理を行う。論理の正当性を保証した最適化処理とは、例えば、当該最適化処理が行われることにより得られる中間コードの論理（アルゴリズム）に矛盾がない処理である。すなわち、論理保証最適化部１８４は、第１の中間コードに対して、論理の正当性を保証可能な範囲内で最適化処理を行う。
【００５６】
以下においては、論理保証最適化部１８４が行う最適化処理を、論理保証最適化処理という。
【００５７】
具体的には、論理保証最適化部１８４は、第１の中間コードに対して、ターゲットプロセッサの仕様に応じた最適化処理（論理保証最適化処理）を行うことにより、最適化処理が施された中間コード（以下、第２の中間コードという）を出力する。第２の中間コードは、第１の中間コードに対して最適化処理が行われることにより得られる中間コードである。すなわち、論理保証最適化部１８４は、第１の中間コードに対してターゲットプロセッサに応じた最適化処理を行うことにより、第２の中間コードを生成する。
【００５８】
この場合、第２の中間コードは、論理（アルゴリズム）に矛盾がないコードである。
プログラマが一般的に行うチューニング手法の一つに、一般的な、Ｃ９９言語にて定義されているｒｅｓｔｒｉｃｔ修飾子を用いた、見かけのメモリ依存の緩和手法がある。Ｃ９９言語とは「ISO/IEC 9899:1999-Programming Language C」の規格に基づくＣ言語である。ｒｅｓｔｒｉｃｔ修飾子および見かけのメモリ依存は、一般的で周知なものであるため、その詳細な説明はここでは行わない。
【００５９】
本実施の形態では、例えば、見かけのメモリ依存に着目し、論理保証最適化部１８４は、第１の中間コードに対して、見かけのメモリ依存を考慮した論理保証最適化処理を行うことにより、第２の中間コードを得る。
【００６０】
最適性到達度解析部１８６は、論理保証最適化部１８４から出力された第２の中間コードに基づいて、第２の中間コードの最適性の到達度としての最適度情報を算出する。当該最適度情報は、第２の中間コードが、ターゲットプロセッサのハードウエア資源をどれだけ効率的に使用できているかの割合である。最適度情報は、例えば、レジスタ資源使用率、演算器資源使用率、パイプライン占有率、バス幅占有率、ＩＰＣ(Instruction par Cycle)、ストール率等である。
【００６１】
最適性到達度解析部１８６は、例えば、第２の中間コードと、ターゲットプロセッサのアーキテクチャ仕様とを照らし合わせて、算出した最適度情報を示す最適性到達度情報１４２を出力する。
【００６２】
すなわち、最適性到達度解析部１８６は、第２の中間コードの最適性の到達度（最適度合い）を解析（分析）し、解析（分析）の結果（最適度合い）を示す最適性到達度情報１４２を出力する。つまり、最適性到達度解析部１８６は、第２の中間コードの性能の分析を行い、性能分析の結果を示す最適性到達度情報１４２を出力する。この場合、最適性到達度情報１４２は、第２の中間コードの最適度合いを示す。
【００６３】
コード出力部１８８は、論理保証最適化部１８４にて、論理を保証して最適化された第２の中間コードをアセンブラ言語に変換して、アセンブラファイル１４３を出力する。すなわち、アセンブラファイル１４３は、第２の中間コードに基づくファイルである。
【００６４】
（コンパイラ処理の流れ（基本））
次に、コンパイラ１４９が実行する処理の流れについて説明する。
【００６５】
図５は、コンパイラ１４９が実行する処理のフローチャートである。
構文解析部１８２は、ソースプログラム１４１の構文解析を行い、第１の中間コードを生成する（Ｓ１）。論理保証最適化部１８４は、第１の中間コードに対し前述した論理保証最適化処理を行うことにより、第２の中間コードを生成する（Ｓ２）。
【００６６】
最適性到達度解析部１８６は、第２の中間コードの最適性の到達度を解析（分析）し、解析（分析）の結果を示す最適性到達度情報１４２を出力する（Ｓ３）。
【００６７】
コード出力部１８８は、第２の中間コードをアセンブラ言語に変換し、アセンブラファイル１４３として出力する（Ｓ４）。
【００６８】
（最適性到達度解析処理の詳細な流れ（基本））
次に、図５のステップＳ３の最適性到達度解析処理について詳細に説明する。
【００６９】
図６は、最適性到達度解析処理のフローチャートである。
最適性到達度解析部１８６は、第２の中間コードを、関数（手続き）毎に分割して第２の中間コードを解析する（Ｓ３１）。
【００７０】
次に、最適性到達度解析部１８６は、ステップＳ３１にて関数毎に分割された第２の中間コードを、基本ブロック毎に分割して、分割された各第２の中間コードを解析する（Ｓ３２）。ここで、基本ブロックとは、分岐命令のないブロックである。
【００７１】
次に、最適性到達度解析部１８６は、ステップＳ３２にて基本ブロック毎に分割された各第２の中間コードに対応するＤＡＧ（Directed acyclic graph）情報を生成する（Ｓ３３）。ＤＡＧ情報とは、閉路を持たない有効グラフを示す情報である。
【００７２】
次に、最適性到達度解析部１８６は、生成されたＤＡＧ情報と、ターゲットプロセッサのアーキテクチャ仕様と比較した結果を、性能解析情報データベース２０１Ｄに登録する。具体的には、最適性到達度解析部１８６は、関数シンボル名を主キーとして、基本ブロックを特定する番号と比較結果とを対応づけて性能解析情報データベース２０１Ｄに登録する（Ｓ３４）。
【００７３】
例えば、ターゲットプロセッサのアーキテクチャ仕様が、３命令同時発行可能であることを示しているとする。この場合、ＤＡＧ情報から、分割された第２の中間コードのＩＰＣ(Instruction par Cycle)が、２．５であることが解析されたとする。ＩＰＣとは、１サイクルにおいて、ターゲットプロセッサが実行可能な命令の数である。
【００７４】
この場合、最適性到達度は、２．５／３＝８３％となる。すなわち、ステップＳ３４の処理により、最適性到達度８３％が、性能解析情報データベース２０１Ｄに登録される。
【００７５】
次に、ステップＳ３５にて、最適性到達度解析部１８６は、性能解析情報データベース２０１Ｄから、主キーの関数名毎に基本ブロック番号と比較結果を整形し、整形された後の情報を示す最適性到達度情報１４２を出力する。この場合、制御部５１０は、最適性到達度情報１４２を、例えば、表示部５４０に表示させるための処理を行う。そして、この最適性到達度解析処理は終了する。
【００７６】
ここで、ソースプログラム１４１が、一例として、図７に示されるプログラムであるとする。この場合、図５の処理および図６の最適性到達度解析処理が行われることにより出力される最適性到達度情報１４２は、一例として、図８に示される情報である。
【００７７】
図８は、第１の実施の形態における一例としての最適性到達度情報１４２を示す図である。
【００７８】
図８において、「BasicBlockNum」とは、基本ブロック番号である。「ＩＰＣ(解析結果）」とは、最適性到達度解析処理により得られた、基本ブロック番号に対応する、分割された第２の中間コードのＩＰＣを示す。「ＩＰＣ(仕様）」とは、ターゲットプロセッサのアーキテクチャ仕様として示されるＩＰＣである。
【００７９】
図８の「最適性到達度」は、（ＩＰＣ(解析結果）／ＩＰＣ(仕様）)の式により算出される値である。「最適性到達度」は、ステップＳ３４の処理において、最適性到達度解析部１８６が算出する。この場合、「最適性到達度」は、ステップＳ３４の処理における比較結果である。
【００８０】
基本ブロックに対応する最適性到達度が１００（％）に近い値であるほど、ソースプログラム１４１に記述されている、当該基本ブロックに対応する部分のソースコードが、ターゲットプロセッサのハードウエア資源を、より効率的に使用できていることになる。すなわち、最適性到達度は、ソースプログラム１４１に記述されている、当該基本ブロックに対応する部分のソースコードのアルゴリズムの最適度を示す。
【００８１】
基本ブロックに対応する最適性到達度が１００（％）である場合、ソースプログラム１４１に記述されている、当該基本ブロックに対応する部分のソースコードは、ターゲットプロセッサのハードウエア資源を最も効率的に使用できていることになる。
【００８２】
例えば、図８では、基本ブロック番号“２”に対応する、分割された第２の中間コードの最適性到達度が最も大きいことになる。すなわち、ソースプログラム１４１に記述されている、基本ブロック番号“２”に対応する部分のソースコードのアルゴリズムの最適度が最もよいことになる。
【００８３】
図８に示される情報（最適性到達度情報１４２）が、表示部５４０に表示されることにより、プログラマは、作成しているソースプログラム１４１に記述されているソースコードのアルゴリズムの最適度を把握することができる。
【００８４】
以上説明したように、本実施の形態では、ソースプログラム１４１のコンパイル時に、ソースプログラム１４１のアルゴリズムの最適度としての最適性到達度が、表示部５４０に表示される。
【００８５】
したがって、プログラマは、作成しているソースプログラム１４１に記述されているソースコードのアルゴリズムの最適度を把握することができる。その結果、プログラマは、開発の工程数を無駄にすることなく、ソースプログラム１４１のチューニングを実施することができる。
【００８６】
つまり、本実施の形態によれば、ソースプログラム１４１において、改善効果が見込める部分を容易に特定可能となる。そのため、プログラマは、いくら修正しても性能が上がらないようなプログラムのチューニングに無駄な時間を費やすことなく、効率的にプログラムのチューニングを進めることができる。
【００８７】
すなわち、図８に示される情報（最適性到達度情報１４２）が、表示部５４０に表示（出力）されることにより、プログラマに対し、ソースプログラムの効率的なチューニングを支援することができる。
【００８８】
＜第２の実施の形態＞
以下、第２の実施の形態におけるコンパイラシステムについて説明する。
【００８９】
第２の実施の形態におけるコンパイラシステムは、図１に示されるコンピュータ５００において、プログラムが実行されることにより実現される。
【００９０】
（システム構成（特定条件緩和））
図９は、第２の実施の形態におけるコンパイラシステム１４８Ａの構成を示す図である。コンパイラシステム１４８Ａは、プログラム５１が制御部５１０により実行されることにより実現される。すなわち、プログラム５１は、コンパイラシステム１４８Ａを含む。
【００９１】
図９を参照して、コンパイラシステム１４８Ａは、図３のコンパイラシステム１４８と比較して、コンパイラ１４９の代わりにコンパイラ１４９Ａを含む点が異なる。それ以外の構成は、コンパイラシステム１４８と同様なので詳細な説明は繰り返さない。
【００９２】
（コンパイラの構成（特定条件緩和））
図１０は、第２の実施の形態におけるコンパイラ１４９Ａの構成を示す図である。
【００９３】
図１０を参照して、コンパイラ１４９Ａは、図４のコンパイラ１４９と比較して、特定条件緩和最適化部１８３をさらに含む点と、最適性到達度解析部１８６の代わりに最適性到達度解析部１８６Ａを含む点とが異なる。それ以外の構成は、コンパイラ１４９と同様なので詳細な説明は繰り返さない。コンパイラ１４９Ａ内の各部は、プログラムモジュールとして実現される。
【００９４】
構文解析部１８２は、前述した第１の中間コードを、論理保証最適化部１８４および特定条件緩和最適化部１８３へ送信する。
【００９５】
特定条件緩和最適化部１８３は、構文解析部１８２から受信する第１の中間コードに対して、特定の条件を緩和させた最適化処理（以下、特定条件緩和最適化処理という）を行う。すなわち、特定条件緩和最適化処理は、特定条件を緩和させた条件（以下、緩和特定条件という）に基づいた最適化処理である。特定条件とは、一般的なコンパイラに実装される複数種類の最適化の条件のうちの１つの最適化の条件である。
【００９６】
特定条件には、例えば、前述のメモリアクセスにおける見かけの依存（見かけのメモリ依存）やポインタレジスタのアラインメント等の制約や、命令数（コードサイズ）、使用演算器資源等の指標がある。以下においては、見かけのメモリ依存を、単に、見かけの依存という。
【００９７】
特定条件は、例えば、見かけの依存に関する制約では、複数のポインタ変数による互いのメモリアクセスは、見かけの依存が発生していると仮定しなければならないという条件である。この場合、緩和特定条件は、例えば、仮引数のポインタ変数に関しては見かけの依存が発生しないものして仮定するという条件である。この場合、特定条件を緩和させた最適化処理（特定条件緩和最適化処理）は、最適化処理の対象となるコードの見かけの依存を、例えば、仮引数のポインタ変数に関して発生しないとする処理を含む。
【００９８】
また、特定条件は、例えば、アラインメントに関する制約では、ポインタ変数によるメモリアクセスは、アラインメントに応じたメモリアクセス命令を生成しなければならないという条件である。この場合、緩和特定条件は、例えば、仮引数のポインタ変数に関してはアラインメントが８バイトアラインメントであるという条件である。この場合、特定条件を緩和させた最適化処理（特定条件緩和最適化処理）は、最適化処理の対象となるコードに含まれるメモリアクセスのアラインメントを、例えば、仮引数のポインタ変数に関して８バイトアラインメントとする処理を含む。
【００９９】
また、特定条件は、例えば、最適化処理の対象となるコードにおける命令の数を、５０％以下にするという条件である。この場合、緩和特定条件は、例えば、最適化処理の対象となるコードにおける命令の数を、例えば、６０％以下にするという条件である。この場合、特定条件を緩和させた最適化処理（特定条件緩和最適化処理）は、最適化処理の対象となるコードにおける命令の数を、例えば、６０％以下にする処理を含む。
【０１００】
また、特定条件は、例えば、最適化処理の対象となるコードにおける命令の使用演算器資源数を、５０％以下にするという条件である。この場合、緩和特定条件は、例えば、最適化処理の対象となるコードにおける命令の使用演算器資源数を、例えば、６０％以下にするという条件である。この場合、特定条件を緩和させた最適化処理（特定条件緩和最適化処理）は、最適化処理の対象となるコードにおける命令の使用演算器資源数を、例えば、６０％以下にする処理を含む。
【０１０１】
緩和特定条件は、コンパイラに実装される様々な最適化の条件に適用できる。
特定条件緩和最適化部１８３は、第１の中間コードに対して特定条件緩和最適化処理を行うことにより、特定条件緩和最適化処理が施された中間コード（以下、第３の中間コードという）を出力する。すなわち、特定条件緩和最適化部１８３は、第１の中間コードに対して特定条件緩和最適化処理を行うことにより、第３の中間コードを生成する。
【０１０２】
特定条件緩和最適化部１８３は、第３の中間コードを、最適性到達度解析部１８６Ａへ送信する。
【０１０３】
論理保証最適化部１８４は、第１の実施の形態で説明した処理に加え、第２の中間コードを、最適性到達度解析部１８６Ａへ送信する。
【０１０４】
最適性到達度解析部１８６Ａは、第２の中間コードおよび第３の中間コードを受信する。最適性到達度解析部１８６Ａは、第２の中間コードと、第３の中間コードとの性能の比較が可能なように、第２の中間コードおよび第３の中間コードの性能の分析（解析）を行い、第２の中間コードおよび第３の中間コードの性能の分析結果を示す最適性到達度情報１４２を出力する。
【０１０５】
この場合、最適性到達度情報１４２は、第２の中間コードの性能と、第３の中間コードの性能とが比較可能なように分析結果を示す。
【０１０６】
（コンパイラ処理の流れ（特定条件緩和））
次に、コンパイラ１４９Ａが実行する処理の流れについて説明する。
【０１０７】
図１１は、コンパイラ１４９Ａが実行する処理のフローチャートである。図１１において、図５のステップ番号と同じステップ番号の処理は、第１の実施の形態で説明した処理と同様な処理が行なわれるので詳細な説明は繰り返さない。
【０１０８】
構文解析部１８２は、ソースプログラム１４１の構文解析を行い、第１の中間コードを生成する（Ｓ１）。構文解析部１８２は、第１の中間コードを、論理保証最適化部１８４および特定条件緩和最適化部１８３へ送信する。
【０１０９】
論理保証最適化部１８４は、第１の実施の形態と同様に、第１の中間コードに対し前述した論理保証最適化処理を行うことにより、第２の中間コードを生成する。そして、論理保証最適化部１８４は、第２の中間コードを最適性到達度解析部１８６Ａおよびコード出力部１８８へ送信する（Ｓ２Ａ）。
【０１１０】
特定条件緩和最適化部１８３は、第１の中間コードに対し前述した特定条件緩和最適化処理を行うことにより、第３の中間コードを生成し、第３の中間コードを、最適性到達度解析部１８６Ａへ送信する（Ｓ６）。
【０１１１】
最適性到達度解析部１８６Ａは、第２の中間コードおよび第３の中間コードの最適性の到達度を解析（分析）し、解析（分析）の結果を示す最適性到達度情報１４２を出力する（Ｓ３Ａの最適性到達度解析処理Ａ）。すなわち、最適性到達度解析部１８６Ａは、第２の中間コードおよび第３の中間コードの性能の分析結果を示す最適性到達度情報１４２を出力する。
【０１１２】
（最適性到達度解析処理Ａの詳細な流れ（特定条件緩和））
次に、図１１のステップＳ３Ａの最適性到達度解析処理Ａについて詳細に説明する。
【０１１３】
図１２は、最適性到達度解析処理Ａのフローチャートである。図１２において、図６のステップ番号と同じステップ番号の処理は、第１の実施の形態で説明した処理と同様な処理が行なわれるので詳細な説明は繰り返さない。
【０１１４】
最適性到達度解析部１８６Ａは、第２の中間コードを、関数（手続き）毎に分割して第２の中間コードを解析する（Ｓ３１）。
【０１１５】
次に、最適性到達度解析部１８６Ａは、ステップＳ３１にて関数毎に分割された第２の中間コードを、基本ブロック毎に分割して、分割された各第２の中間コードを解析する（Ｓ３２）。
【０１１６】
次に、最適性到達度解析部１８６Ａは、基本ブロック毎に分割された各第２の中間コードに対応するＤＡＧ情報を生成する（Ｓ３３）。
【０１１７】
次に、最適性到達度解析部１８６Ａは、生成されたＤＡＧ情報が示すＤＡＧの高さを解析することにより、サイクル情報としてのサイクル数（以下、論理保証サイクル数という）を求める（Ｓ３６）。当該論理保証サイクル数は、処理対象のＤＡＧ情報に対応する第２の中間コードを、ターゲットプロセッサが実行するために必要なサイクル数である。
【０１１８】
また、最適性到達度解析部１８６Ａは、関数シンボル名を主キーとして、基本ブロックを特定する番号と、サイクル情報としての論理保証サイクル数とを対応づけて性能解析情報データベース２１１Ｄに登録する（Ｓ３６）。
【０１１９】
図１２のステップＳ３１〜Ｓ３６と同様に、最適性到達度解析部１８６Ａは、以下の処理を行う。
【０１２０】
まず、最適性到達度解析部１８６Ａは、第３の中間コードを、関数（手続き）毎に分割して第３の中間コードを解析する（Ｓ６１）。
【０１２１】
次に、最適性到達度解析部１８６Ａは、ステップＳ６１にて関数毎に分割された第２の中間コードを、基本ブロック毎に分割して、分割された各第３の中間コードを解析する（Ｓ６２）。
【０１２２】
次に、最適性到達度解析部１８６Ａは、基本ブロック毎に分割された各第３の中間コードに対応するＤＡＧ情報を生成する（Ｓ６３）。
【０１２３】
次に、最適性到達度解析部１８６Ａは、生成されたＤＡＧ情報が示すＤＡＧの高さを解析することにより、サイクル情報としてのサイクル数（以下、条件緩和サイクル数という）を求める（Ｓ６４）。
【０１２４】
また、最適性到達度解析部１８６Ａは、関数シンボル名を主キーとして、基本ブロックを特定する番号と、サイクル情報としての条件緩和サイクル数とを対応づけて性能解析情報データベース２１２Ｄに登録する（Ｓ６４）。
【０１２５】
次に、ステップＳ３５Ａにて、最適性到達度解析部１８６Ａは、性能解析情報データベース２１１Ｄおよび性能解析情報データベース２１２Ｄの各々から、主キーの関数名毎に基本ブロック番号およびサイクル情報を整形し、整形された後の情報を示す最適性到達度情報１４２を出力する。この場合、制御部５１０は、最適性到達度情報１４２を、例えば、表示部５４０に表示させるための処理を行う。そして、この最適性到達度解析処理Ａは終了する。
【０１２６】
ここで、ソースプログラム１４１が、一例として、図７に示されるプログラムであるとする。この場合、図１１の処理および図１２の最適性到達度解析処理Ａが行われることにより出力される最適性到達度情報１４２は、一例として、図１３に示される情報である。
【０１２７】
図１３は、第２の実施の形態における一例としての最適性到達度情報１４２を示す図である。
【０１２８】
図１３において、「BasicBlockNum」とは、基本ブロック番号である。「論理保証サイクル数」とは、最適性到達度解析処理Ａにより得られた、分割された第２の中間コードに対応する、サイクル情報としての論理保証サイクル数である。「条件緩和サイクル数」とは、最適性到達度解析処理Ａにより得られた、分割された第３の中間コードに対応する、サイクル情報としての条件緩和サイクル数である。
【０１２９】
図１３の「最適性到達度」は、（条件緩和サイクル数／論理保証サイクル数）の式により算出される値である。「最適性到達度」は、ステップＳ３５Ａの処理において、最適性到達度解析部１８６Ａが算出する。なお、最適性到達度解析部１８６Ａは、条件緩和サイクル数が論理保証サイクル数より大きい場合、最適性到達度を１００とする。
【０１３０】
図１３の「最適性到達度」は、図８で説明した「最適性到達度」と同様なので詳細な説明は繰り返さない。つまり、基本ブロックに対応する最適性到達度が１００（％）に近い値であるほど、ソースプログラム１４１に記述されている、当該基本ブロックに対応する部分のソースコードが、ターゲットプロセッサのハードウエア資源を、より効率的に使用できていることになる。すなわち、最適性到達度は、ソースプログラム１４１に記述されている、当該基本ブロックに対応する部分のソースコードのアルゴリズムの最適度を示す。
【０１３１】
例えば、図１３では、基本ブロック番号“１”に対応する、分割された第２の中間コードの最適性到達度が最も大きいことになる。すなわち、ソースプログラム１４１に記述されている、基本ブロック番号“１”に対応する部分のソースコードのアルゴリズムの最適度が最もよいことになる。
【０１３２】
図１３に示される情報（最適性到達度情報１４２）が、表示部５４０に表示されることにより、プログラマは、作成しているソースプログラム１４１に記述されているソースコードのアルゴリズムの最適度を把握することができる。
【０１３３】
以上説明したように、本実施の形態においても、第１の実施の形態と同様な効果を得ることができる。すなわち、プログラマは、作成しているソースプログラム１４１に記述されているソースコードのアルゴリズムの最適度を把握することができる。その結果、プログラマは、開発の工程数を無駄にすることなく、ソースプログラム１４１のチューニングを実施することができる。
【０１３４】
すなわち、図１３に示される情報（最適性到達度情報１４２）が、表示部５４０に表示（出力）されることにより、プログラマに対し、ソースプログラムの効率的なチューニングを支援することができる。
【０１３５】
＜第２の実施の形態の変形例１＞
次に、特定条件を緩和した条件（以下、緩和特定条件という）の情報を出力する構成について説明する。
【０１３６】
第２の実施の形態の変形例１におけるコンパイラシステムは、図９のコンパイラシステム１４８Ａである。
【０１３７】
（緩和特定条件の出力）
図１４は、第２の実施の形態の変形例１におけるコンパイラ１４９Ａの構成を示す図である。図１４に示されるコンパイラ１４９Ａは、図１０のコンパイラ１４９Ａと同じ構成を有するので詳細な説明は繰り返さない。
【０１３８】
図１４の特定条件緩和最適化部１８３は、第２の実施の形態で説明した処理に加え、特定条件を緩和した緩和特定条件の情報を出力する。緩和特定条件の情報は、最適性到達度情報１４２に登録される。
【０１３９】
＜第２の実施の形態の変形例２＞
次に、緩和特定条件を外部から受け取るための構成について説明する。
【０１４０】
（システム構成）
図１５は、第２の実施の形態の変形例２におけるコンパイラシステム１４８Ｂの構成を示す図である。コンパイラシステム１４８Ｂは、プログラム５１が制御部５１０により実行されることにより実現される。すなわち、プログラム５１は、コンパイラシステム１４８Ｂを含む。
【０１４１】
図１５を参照して、コンパイラシステム１４８Ｂは、図３のコンパイラシステム１４８と比較して、コンパイラ１４９の代わりにコンパイラ１４９Ｂを含む点が異なる。それ以外の構成は、コンパイラシステム１４８と同様なので詳細な説明は繰り返さない。
【０１４２】
（緩和特定条件の入力）
図１６は、第２の実施の形態の変形例２におけるコンパイラ１４９Ｂの構成を示す図である。
【０１４３】
図１６を参照して、コンパイラ１４９Ｂは、図１０のコンパイラ１４９Ａと比較して、受付部１８９をさらに含む点が異なる。それ以外の構成は、コンパイラ１４９Ａと同様なので詳細な説明は繰り返さない。コンパイラ１４９Ｂ内の各部は、プログラムモジュールとして実現される。
【０１４４】
受付部１８９は、外部からの指示を受付ける。具体的には、受付部１８９は、受付けた指示が示す緩和特定条件１６０を受付ける。受付部１８９は、受付けた緩和特定条件１６０を、特定条件緩和最適化部１８３へ送信する。
【０１４５】
受付部１８９は、一例として、コマンドラインによる指示が示す緩和特定条件１６０を受付ける。コマンドラインによる指示は、コンパイラオプションとしての指示である。コマンドラインによる指示は、例えば、プログラマがキーボード５５１を操作することにより行われる。
【０１４６】
また、受付部１８９は、一例として、ソースプログラム１４１に記述されている＃ｐｒａｇｍａ指令（図７参照）による指示が示す緩和特定条件１６０を受付ける。この場合、受付部１８９は、ソースプログラム１４１から緩和特定条件１６０を受付ける。
【０１４７】
なお、コンパイラ１４９Ｂ内の各部は、第２の実施の形態と同様な処理を行うので詳細な説明は繰り返さない。
【０１４８】
すなわち、特定条件緩和最適化部１８３は、第１の中間コードに対し、受付部１８９が受付けた指示が示す緩和特定条件１６０に基づいた特定条件緩和最適化処理を行うことにより、第３の中間コードを生成する。
【０１４９】
＜第３の実施の形態＞
次に、第３の実施の形態におけるコンパイラシステムについて説明する。
【０１５０】
第３の実施の形態におけるコンパイラシステムは、図１に示されるコンピュータ５００において、プログラムが実行されることにより実現される。
【０１５１】
（システム構成（論理未保証））
図１７は、第３の実施の形態におけるコンパイラシステム１４８Ｃの構成を示す図である。コンパイラシステム１４８Ｃは、プログラム５１が制御部５１０により実行されることにより実現される。すなわち、プログラム５１は、コンパイラシステム１４８Ｃを含む。
【０１５２】
図１７を参照して、コンパイラシステム１４８Ｃは、図３のコンパイラシステム１４８と比較して、コンパイラ１４９の代わりにコンパイラ１４９Ｃを含む点が異なる。それ以外の構成は、コンパイラシステム１４８と同様なので詳細な説明は繰り返さない。
【０１５３】
（コンパイラの構成（論理未保証））
図１８は、第３の実施の形態におけるコンパイラ１４９Ｃの構成を示す図である。
【０１５４】
図１８を参照して、コンパイラ１４９Ｃは、図４のコンパイラ１４９と比較して、論理未保証最適化部１８５をさらに含む点と、最適性到達度解析部１８６の代わりに最適性到達度解析部１８６Ｃを含む点とが異なる。それ以外の構成は、コンパイラ１４９と同様なので詳細な説明は繰り返さない。コンパイラ１４９Ｃ内の各部は、プログラムモジュールとして実現される。
【０１５５】
構文解析部１８２は、前述した第１の中間コードを、論理保証最適化部１８４および論理未保証最適化部１８５へ送信する。
【０１５６】
論理未保証最適化部１８５は、構文解析部１８２から受信する第１の中間コードに対して、特定条件の論理の正当性を保証しない最適化処理（以下、論理未保証最適化処理という）を行う。以下においては、論理未保証最適化処理により、論理の保証がされなかった特定条件を、論理未保証条件という。
【０１５７】
なお、後述するが、論理未保証条件は、外部から指定されてもよい。この場合、指定された論理未保証条件は、論理の保証が不要な条件である。すなわち、論理未保証最適化処理は、論理未保証条件に基づいた最適化処理である。この場合、論理未保証条件に基づいた論理未保証最適化処理は、指定された論理未保証条件を保証しない処理である。
【０１５８】
論理未保証最適化処理は、例えば、当該論理未保証最適化処理が行われることにより得られる中間コードの論理（アルゴリズム）に矛盾が生じる可能性がある処理である。つまり、論理未保証最適化処理は、中間コードに対して論理保証の制約を緩和した最適化処理である。
【０１５９】
ここで、一例として、特定条件（論理未保証条件）は、例えば、メモリの割り当てに矛盾がないという条件であるとする。この場合、論理未保証最適化処理が行われることにより、メモリの割り当てに矛盾がないという条件が保証されなくなる。すなわち、論理未保証最適化処理が行われることにより、メモリの割り当てに矛盾が生じる可能性がある。
【０１６０】
論理未保証条件は、コンパイラに実装される様々な最適化の条件に適用できる。
論理未保証最適化処理は、例えば、前述した見かけのメモリ依存を無視した最適化処理である。この場合、論理未保証条件は、見かけのメモリ依存を保証するという条件である。
【０１６１】
論理未保証最適化部１８５は、第１の中間コードに対して論理未保証最適化処理を行うことにより、論理未保証最適化処理が施された中間コード（以下、第４の中間コードという）を出力する。すなわち、論理未保証最適化部１８５は、第１の中間コードに対して論理未保証最適化処理を行うことにより、第４の中間コードを生成する。
【０１６２】
第４の中間コードは、論理の正当性が保証されない中間コードである。すなわち、第４の中間コードは、論理（アルゴリズム）に矛盾がある可能性がある中間コードである。
【０１６３】
論理未保証最適化部１８５は、第４の中間コードを、最適性到達度解析部１８６Ｃへ送信する。
【０１６４】
論理保証最適化部１８４は、第１の実施の形態で説明した処理に加え、第２の中間コードを、最適性到達度解析部１８６Ｃへ送信する。
【０１６５】
最適性到達度解析部１８６Ｃは、第２の中間コードおよび第４の中間コードを受信する。最適性到達度解析部１８６Ｃは、第２の中間コードと、第４の中間コードとの性能の比較が可能なように、第２の中間コードおよび第４の中間コードの性能の分析（解析）を行い、第２の中間コードおよび第４の中間コードの性能の分析結果を示す最適性到達度情報１４２を出力する。
【０１６６】
この場合、最適性到達度情報１４２は、第２の中間コードの性能と、第４の中間コードの性能とが比較可能なように分析結果を示す。
【０１６７】
（コンパイラ処理の流れ（論理未保証））
次に、コンパイラ１４９Ｃが実行する処理の流れについて説明する。
【０１６８】
図１９は、コンパイラ１４９Ｃが実行する処理のフローチャートである。図１９において、図５のステップ番号と同じステップ番号の処理は、第１の実施の形態で説明した処理と同様な処理が行なわれるので詳細な説明は繰り返さない。
【０１６９】
構文解析部１８２は、ソースプログラム１４１の構文解析を行い、第１の中間コードを生成する（Ｓ１）。構文解析部１８２は、第１の中間コードを、論理保証最適化部１８４および論理未保証最適化部１８５へ送信する。
【０１７０】
論理保証最適化部１８４は、第１の実施の形態と同様に、第１の中間コードに対し前述した論理保証最適化処理を行うことにより、第２の中間コードを生成する。そして、論理保証最適化部１８４は、第２の中間コードを最適性到達度解析部１８６Ｃおよびコード出力部１８８へ送信する（Ｓ２Ｃ）。
【０１７１】
特定条件緩和最適化部１８３は、第１の中間コードに対し前述した論理未保証最適化処理を行うことにより、第４の中間コードを生成し、第４の中間コードを、最適性到達度解析部１８６Ｃへ送信する（Ｓ７）。
【０１７２】
最適性到達度解析部１８６Ｃは、第２の中間コードおよび第４の中間コードの最適性の到達度を解析（分析）し、解析（分析）の結果を示す最適性到達度情報１４２を出力する（Ｓ３Ｃの最適性到達度解析処理Ｃ）。すなわち、最適性到達度解析部１８６Ｃは、第２の中間コードおよび第４の中間コードの性能の分析結果を示す最適性到達度情報１４２を出力する。
【０１７３】
（最適性到達度解析処理Ｃの詳細な流れ（論理未保証））
次に、図１９のステップＳ３Ｃの最適性到達度解析処理Ｃについて詳細に説明する。
【０１７４】
図２０は、最適性到達度解析処理Ｃのフローチャートである。図２０において、図１２のステップ番号と同じステップ番号の処理は、第２の実施の形態で説明した処理と同様な処理が行なわれるので詳細な説明は繰り返さない。
【０１７５】
ステップＳ３１，Ｓ３２，Ｓ３３，Ｓ３６では、第２の実施の形態で説明した処理が最適性到達度解析部１８６Ｃにより行なわれるので詳細な説明は繰り返さない。これにより、最適性到達度解析部１８６Ｃは、関数シンボル名を主キーとして、基本ブロックを特定する番号と、サイクル情報としての論理保証サイクル数とを対応づけて性能解析情報データベース２１１Ｄに登録する。
【０１７６】
図２０のステップＳ３１〜Ｓ３６と同様に、最適性到達度解析部１８６Ｃは、以下の処理を行う。
【０１７７】
まず、最適性到達度解析部１８６Ｃは、第４の中間コードを、関数（手続き）毎に分割して第４の中間コードを解析する（Ｓ７１）。
【０１７８】
次に、最適性到達度解析部１８６Ｃは、ステップＳ７１にて関数毎に分割された第４の中間コードを、基本ブロック毎に分割して、分割された各第４の中間コードを解析する（Ｓ７２）。
【０１７９】
次に、最適性到達度解析部１８６Ｃは、基本ブロック毎に分割された各第４の中間コードに対応するＤＡＧ情報を生成する（Ｓ７３）。
【０１８０】
次に、最適性到達度解析部１８６Ｃは、生成されたＤＡＧ情報が示すＤＡＧの高さを解析することにより、サイクル情報としてのサイクル数（以下、論理未保証サイクル数という）を求める（Ｓ７４）。
【０１８１】
また、最適性到達度解析部１８６Ｃは、関数シンボル名を主キーとして、基本ブロックを特定する番号と、サイクル情報としての論理未保証サイクル数とを対応づけて性能解析情報データベース２２２Ｄに登録する（Ｓ７４）。
【０１８２】
次に、ステップＳ３５Ｃにて、最適性到達度解析部１８６Ｃは、性能解析情報データベース２１１Ｄおよび性能解析情報データベース２２２Ｄの各々から、主キーの関数名毎に基本ブロック番号およびサイクル情報を整形し、整形された後の情報を示す最適性到達度情報１４２を出力する。この場合、制御部５１０は、最適性到達度情報１４２を、例えば、表示部５４０に表示させるための処理を行う。そして、この最適性到達度解析処理Ｃは終了する。
【０１８３】
ここで、ソースプログラム１４１が、一例として、図７に示されるプログラムであるとする。この場合、図１９の処理および図２０の最適性到達度解析処理Ｃが行われることにより出力される最適性到達度情報１４２は、一例として、図２１に示される情報である。
【０１８４】
図２１は、第３の実施の形態における一例としての最適性到達度情報１４２を示す図である。
【０１８５】
図２１において、「BasicBlockNum」とは、基本ブロック番号である。「論理保証サイクル数」とは、最適性到達度解析処理Ｃにより得られた、分割された第２の中間コードに対応する、サイクル情報としての論理保証サイクル数である。「論理未保証サイクル数」とは、最適性到達度解析処理Ｃにより得られた、分割された第４の中間コードに対応する、サイクル情報としての論理保証サイクル数である。
【０１８６】
図２１の「最適性到達度」は、（論理未保証サイクル数／論理保証サイクル数）の式により算出される値である。「最適性到達度」は、ステップＳ３５Ｃの処理において、最適性到達度解析部１８６Ｃが算出する。なお、最適性到達度解析部１８６Ｃは、論理未保証サイクル数が論理保証サイクル数より大きい場合、最適性到達度を１００とする。
【０１８７】
図２１の「最適性到達度」は、図８で説明した「最適性到達度」と同様なので詳細な説明は繰り返さない。つまり、基本ブロックに対応する最適性到達度が１００（％）に近い値であるほど、ソースプログラム１４１に記述されている、当該基本ブロックに対応する部分のソースコードが、ターゲットプロセッサのハードウエア資源を、より効率的に使用できていることになる。すなわち、最適性到達度は、ソースプログラム１４１に記述されている、当該基本ブロックに対応する部分のソースコードのアルゴリズムの最適度を示す。
【０１８８】
図２１に示される情報（最適性到達度情報１４２）が、表示部５４０に表示されることにより、プログラマは、作成しているソースプログラム１４１に記述されているソースコードのアルゴリズムの最適度を把握することができる。
【０１８９】
以上説明したように、本実施の形態においても、第１の実施の形態と同様な効果を得ることができる。すなわち、プログラマは、作成しているソースプログラム１４１に記述されているソースコードのアルゴリズムの最適度を把握することができる。その結果、プログラマは、開発の工程数を無駄にすることなく、ソースプログラム１４１のチューニングを実施することができる。
【０１９０】
すなわち、図２１に示される情報（最適性到達度情報１４２）が、表示部５４０に表示（出力）されることにより、プログラマに対し、ソースプログラムの効率的なチューニングを支援することができる。
【０１９１】
＜第３の実施の形態の変形例１＞
次に、論理未保証条件の情報を出力する構成について説明する。
【０１９２】
第３の実施の形態の変形例１におけるコンパイラシステムは、図１７のコンパイラシステム１４８Ｃである。
【０１９３】
（論理未保証条件の出力）
図２２は、第３の実施の形態の変形例１におけるコンパイラ１４９Ｃの構成を示す図である。図２２に示されるコンパイラ１４９Ｃは、図１８のコンパイラ１４９Ｃと同じ構成を有するので詳細な説明は繰り返さない。
【０１９４】
図２２の論理未保証最適化部１８５は、第３の実施の形態で説明した処理に加え、論理未保証条件の情報を出力する。論理未保証条件の情報は、最適性到達度情報１４２に登録される。
【０１９５】
＜第３の実施の形態の変形例２＞
次に、論理未保証条件を外部から受け取るための構成について説明する。
【０１９６】
（システム構成）
図２３は、第３の実施の形態の変形例２におけるコンパイラシステム１４８Ｄの構成を示す図である。コンパイラシステム１４８Ｄは、プログラム５１が制御部５１０により実行されることにより実現される。すなわち、プログラム５１は、コンパイラシステム１４８Ｄを含む。
【０１９７】
図２３を参照して、コンパイラシステム１４８Ｄは、図３のコンパイラシステム１４８と比較して、コンパイラ１４９の代わりにコンパイラ１４９Ｄを含む点が異なる。それ以外の構成は、コンパイラシステム１４８と同様なので詳細な説明は繰り返さない。
【０１９８】
（論理未保証条件の入力）
図２４は、第３の実施の形態の変形例２におけるコンパイラ１４９Ｄの構成を示す図である。
【０１９９】
図２４を参照して、コンパイラ１４９Ｄは、図１８のコンパイラ１４９Ｃと比較して、受付部１８９Ｄをさらに含む点が異なる。それ以外の構成は、コンパイラ１４９Ｃと同様なので詳細な説明は繰り返さない。コンパイラ１４９Ｄ内の各部は、プログラムモジュールとして実現される。
【０２００】
受付部１８９Ｄは、外部からの指示を受付ける。具体的には、受付部１８９Ｄは、受付けた指示が示す論理未保証条件１６１を受付ける。受付部１８９Ｄが受付けた論理未保証条件１６１は、論理の保証が不要な条件である。受付部１８９Ｄは、受付けた論理未保証条件１６１を、論理未保証最適化部１８５へ送信する。
【０２０１】
受付部１８９Ｄは、一例として、コマンドラインによる指示が示す論理未保証条件１６１を受付ける。コマンドラインによる指示は、コンパイラオプションとしての指示である。コマンドラインによる指示は、例えば、プログラマがキーボード５５１を操作することにより行われる。
【０２０２】
また、受付部１８９Ｄは、一例として、ソースプログラム１４１に記述されている＃ｐｒａｇｍａ指令（図７参照）による指示が示す論理未保証条件１６１を受付ける。この場合、受付部１８９Ｄは、ソースプログラム１４１から論理未保証条件１６１を受付ける。
【０２０３】
なお、コンパイラ１４９Ｄ内の各部は、第３の実施の形態と同様な処理を行うので詳細な説明は繰り返さない。
【０２０４】
すなわち、論理未保証最適化部１８５は、第１の中間コードに対し、受付部１８９Ｄが受付けた指示が示す論理未保証条件１６１に基づいた論理未保証最適化処理を行う。すなわち、論理未保証最適化部１８５は、第１の中間コードに対して、論理未保証条件１６１を保証しない論理未保証最適化処理を行うことにより、第４の中間コードを生成する。
【０２０５】
以上、本発明の各実施の形態におけるコンパイルシステムについて、実施の形態に基づいて説明したが、本発明は、上記実施の形態に限定されるものではない。例えば、最適性到達度情報１４２は、サイクル数に基づく最適性到達度に限定されることなく、命令サイズ、スタックサイズ等のチューニングに有用な情報であれば他のパラメータに基づく最適性到達度を示す情報であってもよい。
【０２０６】
また、第１の実施の形態の図６のＳ３４の処理において、比較対象とするものは、ＩＰＣに限らず、レジスタ使用効率など性能比較に有用な情報であれば他のパラメータであってもよい。
【０２０７】
また、図１０の最適性到達度解析部１８６Ａおよび図１８の最適性到達度解析部１８６Ｃの各々が比較対象とするものは、サイクル数に限られず、チューニングに有用な情報であれば他のパラメータであってもよい。
【０２０８】
また、チューニングポイントとなる最適性到達度情報の着目ポイントのサイクル数は一例であり、サイクル数以外にも、命令数、コードサイズ、メモリサイズ、バス占有率、キャッシュヒット率、コンパイル時間など様々な最適性の観点があることは言うまでもない。
【０２０９】
なお、本発明は、このような特徴的な情報を生成するコンパイラとして実現することができるだけでなく、コンパイラがコンピュータを機能させるための特徴的な手段を備えるコンパイル装置として実現したり、当該手段をステップとするコンパイル方法として実現したりすることもできる。
【０２１０】
そして、このようなコンパイラは、ＣＤ−ＲＯＭ等の記録媒体やインターネット等の伝送媒体を介して流通させることができるのは言うまでもない。
【０２１１】
以上、本発明におけるコンパイラ又はコンパイラシステムについて、実施の形態に基づいて説明したが、本発明は、これらの実施の形態に限定されるものではない。本発明の趣旨を逸脱しない限り、当業者が思いつく各種変形を本実施の形態に施したもの、あるいは異なる実施の形態における構成要素を組み合わせて構築される形態も、本発明の範囲内に含まれる。
【０２１２】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【産業上の利用可能性】
【０２１３】
本発明は、意ソースプログラムの効率的なチューニングを支援するプログラム変換装置およびプログラム変換システムとして、利用することができる。
【０２１４】
また、本発明は、最適性到達度情報を出力するコンパイラ、ＯＳ（Operating System）、プロセッサで実行されるプロセス等に適用できる。
【符号の説明】
【０２１５】
１４８，１４８Ａ，１４８Ｂ，１４８Ｃ，１４８Ｄ  コンパイラシステム
１４９，１４９Ａ，１４９Ｂ，１４９Ｃ，１４９Ｄ  コンパイラ
１５０  アセンブラ
１５１  リンカ
１６０  緩和特定条件
１６１  論理未保証条件
１８２  構文解析部
１８３  特定条件緩和最適化部
１８４  論理保証最適化部
１８５  論理未保証最適化部
１８６，１８６Ａ，１８６Ｃ  最適性到達度解析部
１８８  コード出力部
１８９，１８９Ｄ  受付部
５００  コンピュータ
５１０  制御部
【図１】
2011028523.tif 000003
【図２】
2011028523.tif 000004
【図３】
2011028523.tif 000005
【図４】
2011028523.tif 000006
【図５】
2011028523.tif 000007
【図６】
2011028523.tif 000008
【図７】
2011028523.tif 000009
【図８】
2011028523.tif 000010
【図９】
2011028523.tif 000011
【図１０】
2011028523.tif 000012
【図１１】
2011028523.tif 000013
【図１２】
2011028523.tif 000014
【図１３】
2011028523.tif 000015
【図１４】
2011028523.tif 000016
【図１５】
2011028523.tif 000017
【図１６】
2011028523.tif 000018
【図１７】
2011028523.tif 000019
【図１８】
2011028523.tif 000020
【図１９】
2011028523.tif 000021
【図２０】
2011028523.tif 000022
【図２１】
2011028523.tif 000023
【図２２】
2011028523.tif 000024
【図２３】
2011028523.tif 000025
【図２４】
2011028523.tif 000026