(57)【要約】【課題】従来のコンパイラ装置においては、実行モジュールの最適化を行うことができないという課題があった。【解決手段】実行モジュールを逆アセンブルし、アセンブリプログラムを得る逆アセンブル部と、最適化箇所検出情報を用いて、アセンブリプログラムから１以上の最適化箇所を検出する最適化箇所検出部と、各最適化箇所を検出する際に用いられた最適化箇所検出情報に対応する変更情報を用いて最適化箇所を変更し、最適化されたアセンブリプログラムを取得する変更部と、最適化されたアセンブリプログラムを実行する実行部１０８とを具備する実行モジュール最適化装置により、実行モジュールの最適化を行うことができる。【選択図】図１
2013242604.tif 000002
【特許請求の範囲】
【請求項１】
１以上の実行モジュールを格納し得る実行モジュール格納部と、
処理の最適化が可能な箇所である最適化箇所を検出するための情報である最適化箇所検出情報と、当該最適化箇所検出情報を用いて検出された最適化箇所を変更するための情報である変更情報とを有する１以上の最適化情報を格納し得る最適化情報格納部と、
実行モジュールを識別する実行モジュール識別子を有する指示を受け付ける受付部と、
前記指示に含まれる実行モジュール識別子で識別される実行モジュールを、前記実行モジュール格納部から読み出し、逆アセンブルし、前記実行モジュールに対応するアセンブリプログラムを得る逆アセンブル部と、
前記最適化情報格納部の１以上の最適化箇所検出情報を用いて、前記アセンブリプログラムから１以上の最適化箇所を検出する最適化箇所検出部と、
前記１以上の各最適化箇所に対して、各最適化箇所を検出する際に用いられた最適化箇所検出情報に対応する変更情報を前記最適化情報格納部から取得し、当該変更情報を用いて前記１以上の最適化箇所を変更し、最適化されたアセンブリプログラムを取得する変更部と、
前記最適化されたアセンブリプログラムを実行する実行部とを具備する実行モジュール最適化装置。
【請求項２】
前記最適化情報は、
前記最適化箇所検出情報と、収集すべきパラメータを示すパラメータ情報と、前記変更情報とを有し、
前記最適化箇所検出部は、
前記最適化箇所検出情報を用いて、前記アセンブリプログラムからループである１以上の最適化箇所候補を検出する最適化箇所候補検出手段と、
前記最適化箇所候補検出手段が検出した１以上の各最適化箇所候補から、予め決められたパターンに合致する情報を取得し、当該情報が予め決められた条件に合致するか否かを判断し、合致する場合に、当該情報に対応する箇所を最適化箇所候補に決定する静的解析を行う静的解析手段と、
前記静的解析手段が決定した１以上の各最適化箇所候補に対して、前記パラメータ情報が示すパラメータを収集するためのアセンブリプログラム命令列を前記最適化箇所候補の前に挿入し、プロファイルプログラムを生成するプロファイルプログラム生成手段と、
前記プロファイルプログラムを実行し、１以上のパラメータを取得する動的解析を行う動的解析手段と、
前記１以上のパラメータが、予め決められた条件に合致するか否かを判断する判断手段と、
前記１以上のパラメータが予め決められた条件に合致する場合に、前記１以上の各最適化箇所候補を最適化箇所に決定する決定手段とを具備する請求項１記載の実行モジュール最適化装置。
【請求項３】
前記プロファイルプログラム生成手段は、
前記１以上の各最適化箇所候補を複写し、前記複写した１以上の各最適化箇所候補の直前にパラメータ情報が示すパラメータを収集するためのアセンブリプログラム命令列を挿入し、前記１以上の元の各最適化箇所候補の直前に、前記挿入したアセンブリプログラム命令列の直前にジャンプするアセンブリプログラム命令を挿入する請求項２記載の実行モジュール最適化装置。
【請求項４】
前記アセンブリプログラムを実行し、各命令の負荷を取得するプロファイラを格納し得るプロファイラ格納部をさらに具備し、
前記最適化箇所候補検出手段は、
前記最適化箇所検出情報を用いて、前記アセンブリプログラムから１以上のループを検出し、前記アセンブリプログラムに対して前記プロファイラを実行し、各命令の負荷を取得し、当該負荷が閾値を超える命令を有するループを１以上の最適化箇所候補として検出する請求項２または請求項３記載の実行モジュール最適化装置。
【請求項５】
前記最適化箇所候補検出手段は、
前記最適化箇所検出情報を用いて、前記アセンブリプログラムから１以上のループを検出し、前記アセンブリプログラムから、当該アセンブリプログラムを構成する各命令をノードとする２以上のノードを有する制御フローグラフを作成し、当該制御フローグラフから、任意の１つのノードが起点となるループであって、当該起点となるノードに戻る直前のノードと起点となるノードとが支配関係にあるループである支配ループである１以上の最適化箇所候補を検出する請求項２から請求項４いずれか記載の実行モジュール最適化装置。
【請求項６】
前記パラメータ情報は、ループ回数と、ポインタがオーバーラップするか否かを示す情報であり、
前記静的解析手段は、
前記最適化箇所候補検出手段が検出した１以上の各最適化箇所候補に対して、ループ不変値と、配列にアクセスするための誘導変数とを取得し、取得したループ不変値と誘導変数とを用いて、当該最適化箇所候補において配列に対するメモリストアが行われているか否かを判断し、行われている場合に、当該箇所を最適化箇所候補に決定する静的解析を行い、
前記判断手段は、
前記動的解析手段が取得したループ回数が閾値以上であり、かつポインタがオーバーラップするか否かを示す情報が、ポインタがオーバーラップしないことを示す情報であるか否かを判断し、
前記決定手段は、
前記判断手段が、ループ回数が閾値以上であり、かつポインタがオーバーラップするか否かを示す情報が、ポインタがオーバーラップしないことを示す情報であると判断した最適化箇所候補を、最適化箇所に決定し、
前記変更部は、
前記判断手段が最適化箇所に決定した最適化箇所に対して、複数のプロセッサにおいて並列に実行できるアセンブリプログラム命令列に変更するマルチコア並列化を施す請求項２から請求項５記載の実行モジュール最適化装置。
【請求項７】
前記パラメータ情報は、ループ回数と、ポインタがオーバーラップするか否かを示す情報であり、
前記静的解析手段は、
前記最適化箇所候補検出手段が検出した１以上の各最適化箇所候補に対して、変数名を取得し、取得した変数名を用いて、当該最適化箇所候補において変数間の依存関係が存在するか否かを判断し、存在しない場合に、当該箇所を最適化箇所候補に決定する静的解析を行い、
前記判断手段は、
前記動的解析手段が取得したループ回数が閾値以上であり、かつポインタがオーバーラップするか否かを示す情報が、ポインタがオーバーラップしないことを示す情報であるか否かを判断し、
前記決定手段は、
前記判断手段が、ループ回数が閾値以上であり、かつポインタがオーバーラップするか否かを示す情報が、ポインタがオーバーラップしないことを示す情報であると判断した最適化箇所候補を、最適化箇所に決定し、
前記変更部は、
前記判断手段が最適化箇所に決定した最適化箇所に対して、１の命令で複数データに対する処理を同時に行うことができるアセンブリプログラム命令に変更するＳＩＭＤ化を施す請求項２から請求項５記載の実行モジュール最適化装置。
【請求項８】
前記最適化箇所検出情報は、
１の処理を行う関数名であり、
前記変更情報は、
前記１の処理を行い、前記最適化箇所検出情報が示す関数よりも高速に処理を行う関数名であり、
前記変更部は、
前記１以上の最適化箇所を、各最適化箇所を検出する際に用いられた最適化箇所検出情報に対応する変更情報に変更し、最適化されたアセンブリプログラムを取得する請求項１記載の実行モジュール最適化装置。
【請求項９】
１以上の実行モジュールを格納し得る実行モジュール格納部と、
処理の最適化が可能な箇所である最適化箇所を検出するための情報である最適化箇所検出情報と、当該最適化箇所検出情報を用いて検出された最適化箇所を変更するための情報である変更情報とを有する１以上の最適化情報を格納し得る最適化情報格納部と、
実行モジュールを識別する実行モジュール識別子を有する指示を受け付ける受付部と、
前記指示に含まれる実行モジュール識別子で識別される実行モジュールを、前記実行モジュール格納部から読み出し、逆アセンブルし、前記実行モジュールに対応するアセンブリプログラムを得る逆アセンブル部と、
前記最適化情報格納部の１以上の最適化箇所検出情報を用いて、前記アセンブリプログラムから１以上の最適化箇所を検出する最適化箇所検出部と、
前記１以上の各最適化箇所に対して、各最適化箇所を検出する際に用いられた最適化箇所検出情報に対応する変更情報を前記最適化情報格納部から取得し、当該変更情報を用いて前記１以上の最適化箇所を変更し、最適化されたアセンブリプログラムを取得する変更部と、
前記最適化されたアセンブリプログラムを蓄積する蓄積部とを具備する実行モジュール最適化装置。
【請求項１０】
前記最適化されたアセンブリプログラムをコンパイルし、最適化された実行モジュールを取得するコンパイル部をさらに具備し、
前記蓄積部は、
前記最適化された実行モジュールをも蓄積する請求項９記載の実行モジュール最適化装置。
【請求項１１】
記録媒体に、
１以上の実行モジュールと、
処理の最適化が可能な箇所である最適化箇所を検出するための情報である最適化箇所検出情報と、当該最適化箇所検出情報を用いて検出された最適化箇所を変更するための情報である変更情報とを有する１以上の最適化情報とが格納されており、
受付部と、逆アセンブル部と、最適化箇所検出部と、変更部と、実行部とを用いて行われる実行モジュール最適化方法であって、
前記受付部が、実行モジュールを識別する実行モジュール識別子を有する指示を受け付ける受付ステップと、
前記逆アセンブル部が、前記指示に含まれる実行モジュール識別子で識別される実行モジュールを、記録媒体から読み出し、逆アセンブルし、前記実行モジュールに対応するアセンブリプログラムを得る逆アセンブルステップと、
前記最適化箇所検出部が、記録媒体に格納されている１以上の最適化箇所検出情報を用いて、前記アセンブリプログラムから１以上の最適化箇所を検出する最適化箇所検出ステップと、
前記変更部が、前記１以上の各最適化箇所に対して、各最適化箇所を検出する際に用いられた最適化箇所検出情報に対応する変更情報を記録媒体から取得し、当該変更情報を用いて前記１以上の最適化箇所を変更し、最適化されたアセンブリプログラムを取得する変更ステップと、
前記実行部が、前記最適化されたアセンブリプログラムを実行する実行ステップとを具備する実行モジュール最適化方法。
【請求項１２】
記録媒体に、
１以上の実行モジュールと、
処理の最適化が可能な箇所である最適化箇所を検出するための情報である最適化箇所検出情報と、当該最適化箇所検出情報を用いて検出された最適化箇所を変更するための情報である変更情報とを有する１以上の最適化情報とが格納されており、
コンピュータを、
実行モジュールを識別する実行モジュール識別子を有する指示を受け付ける受付部と、
前記指示に含まれる実行モジュール識別子で識別される実行モジュールを、記録媒体から読み出し、逆アセンブルし、前記実行モジュールに対応するアセンブリプログラムを得る逆アセンブル部と、
記録媒体に格納されている１以上の最適化箇所検出情報を用いて、前記アセンブリプログラムから１以上の最適化箇所を検出する最適化箇所検出部と、
前記１以上の各最適化箇所に対して、各最適化箇所を検出する際に用いられた最適化箇所検出情報に対応する変更情報を記録媒体から取得し、当該変更情報を用いて前記１以上の最適化箇所を変更し、最適化されたアセンブリプログラムを取得する変更部と、
前記最適化されたアセンブリプログラムを実行する実行部として機能させるためのプログラム。
【請求項１３】
記録媒体に、
１以上の実行モジュールと、
処理の最適化が可能な箇所である最適化箇所を検出するための情報である最適化箇所検出情報と、当該最適化箇所検出情報を用いて検出された最適化箇所を変更するための情報である変更情報とを有する１以上の最適化情報とが格納されており、
受付部と、逆アセンブル部と、最適化箇所検出部と、変更部と、蓄積部とを用いて行われる実行モジュール最適化方法であって、
前記受付部が、実行モジュールを識別する実行モジュール識別子を有する指示を受け付ける受付ステップと、
前記逆アセンブル部が、前記指示に含まれる実行モジュール識別子で識別される実行モジュールを、記録媒体から読み出し、逆アセンブルし、前記実行モジュールに対応するアセンブリプログラムを得る逆アセンブルステップと、
前記最適化箇所検出部が、記録媒体に格納されている１以上の最適化箇所検出情報を用いて、前記アセンブリプログラムから１以上の最適化箇所を検出する最適化箇所検出ステップと、
前記変更部が、前記１以上の各最適化箇所に対して、各最適化箇所を検出する際に用いられた最適化箇所検出情報に対応する変更情報を記録媒体から取得し、当該変更情報を用いて前記１以上の最適化箇所を変更し、最適化されたアセンブリプログラムを取得する変更ステップと、
前記蓄積部が、前記最適化されたアセンブリプログラムを蓄積する蓄積ステップとを具備する実行モジュール最適化方法。
【請求項１４】
記録媒体に、
１以上の実行モジュールと、
処理の最適化が可能な箇所である最適化箇所を検出するための情報である最適化箇所検出情報と、当該最適化箇所検出情報を用いて検出された最適化箇所を変更するための情報である変更情報とを有する１以上の最適化情報とが格納されており、
コンピュータを、
実行モジュールを識別する実行モジュール識別子を有する指示を受け付ける受付部と、
前記指示に含まれる実行モジュール識別子で識別される実行モジュールを、記録媒体から読み出し、逆アセンブルし、前記実行モジュールに対応するアセンブリプログラムを得る逆アセンブル部と、
記録媒体に格納されている１以上の最適化箇所検出情報を用いて、前記アセンブリプログラムから１以上の最適化箇所を検出する最適化箇所検出部と、
前記１以上の各最適化箇所に対して、各最適化箇所を検出する際に用いられた最適化箇所検出情報に対応する変更情報を記録媒体から取得し、当該変更情報を用いて前記１以上の最適化箇所を変更し、最適化されたアセンブリプログラムを取得する変更部と、
前記最適化されたアセンブリプログラムを蓄積する蓄積部として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、実行モジュールを最適化する実行モジュール最適化装置等に関するものである。
【背景技術】
【０００２】
従来、ソースコードをコンパイルし、実行モジュールを作成するコンパイラ装置において、ソースコードを最適化し、実行モジュールを作成するコンパイラ装置が開発されている。（例えば、非特許文献１参照）。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】“インテル  Ｃ＋＋  コンパイラー  １１．１  プロフェッショナル  エディション  詳細”、[online]、インテル株式会社、[２０１０年８月４日検索]、インターネット<URL：http://download.intel.com/jp/software/doc/compilers/reseller_productpage_cpp_compiler_windows.pdf>
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来のコンパイラ装置においては、コンパイル済の実行モジュールを最適化できないという課題があった。
【課題を解決するための手段】
【０００５】
本第一の発明の実行モジュール最適化装置は、１以上の実行モジュールを格納し得る実行モジュール格納部と、処理の最適化が可能な箇所である最適化箇所を検出するための情報である最適化箇所検出情報と、最適化箇所検出情報を用いて検出された最適化箇所を変更するための情報である変更情報とを有する１以上の最適化情報を格納し得る最適化情報格納部と、実行モジュールを識別する実行モジュール識別子を有する指示を受け付ける受付部と、指示に含まれる実行モジュール識別子で識別される実行モジュールを、実行モジュール格納部から読み出し、逆アセンブルし、実行モジュールに対応するアセンブリプログラムを得る逆アセンブル部と、最適化情報格納部の１以上の最適化箇所検出情報を用いて、アセンブリプログラムから１以上の最適化箇所を検出する最適化箇所検出部と、１以上の各最適化箇所に対して、各最適化箇所を検出する際に用いられた最適化箇所検出情報に対応する変更情報を最適化情報格納部から取得し、変更情報を用いて１以上の最適化箇所を変更し、最適化されたアセンブリプログラムを取得する変更部と、最適化されたアセンブリプログラムを実行する実行部とを具備する実行モジュール最適化装置である。
【０００６】
このような構成により、実行モジュールを最適化することができる。
【０００７】
また、本第二の発明の実行モジュール最適化装置は、第一の発明に対して、最適化情報は、最適化箇所検出情報と、収集すべきパラメータを示すパラメータ情報と、変更情報とを有し、最適化箇所検出部は、最適化箇所検出情報を用いて、アセンブリプログラムからループである１以上の最適化箇所候補を検出する最適化箇所候補検出手段と、最適化箇所候補検出手段が検出した１以上の各最適化箇所候補から、予め決められたパターンに合致する情報を取得し、情報が予め決められた条件に合致するか否かを判断し、合致する場合に、情報に対応する箇所を最適化箇所候補に決定する静的解析を行う静的解析手段と、静的解析手段が決定した１以上の各最適化箇所候補に対して、パラメータ情報が示すパラメータを収集するためのアセンブリプログラム命令列を最適化箇所候補の前に挿入し、プロファイルプログラムを生成するプロファイルプログラム生成手段と、プロファイルプログラムを実行し、１以上のパラメータを取得する動的解析を行う動的解析手段と、１以上のパラメータが、予め決められた条件に合致するか否かを判断する判断手段と、１以上のパラメータが予め決められた条件に合致する場合に、１以上の各最適化箇所候補を最適化箇所に決定する決定手段とを具備する実行モジュール最適化装置である。
【０００８】
このような構成により、実行モジュールのループ部分について最適化することができる。
【０００９】
また、本第三の発明の実行モジュール最適化装置は、第二の発明に対して、プロファイルプログラム生成手段は、１以上の各最適化箇所候補を複写し、複写した１以上の各最適化箇所候補の直前にパラメータ情報が示すパラメータを収集するためのアセンブリプログラム命令列を挿入し、１以上の元の各最適化箇所候補の直前に、挿入したアセンブリプログラム命令列の直前にジャンプするアセンブリプログラム命令を挿入する実行モジュール最適化装置である。
【００１０】
このような構成により、実行モジュールのループ部分について最適化することができる。
【００１１】
また、本第四の発明の実行モジュール最適化装置は、第二または第三の発明に対して、アセンブリプログラムを実行し、各命令の負荷を取得するプロファイラを格納し得るプロファイラ格納部をさらに具備し、最適化箇所候補検出手段は、最適化箇所検出情報を用いて、アセンブリプログラムから１以上のループを検出し、アセンブリプログラムに対してプロファイラを実行し、各命令の負荷を取得し、負荷が閾値を超える命令を有するループを１以上の最適化箇所候補として検出する実行モジュール最適化装置である。
【００１２】
このような構成により、実行モジュールの負荷の高い部分について最適化することができる。
【００１３】
また、本第五の発明の実行モジュール最適化装置は、第二から第四いずれかの発明に対して、最適化箇所候補検出手段は、最適化箇所検出情報を用いて、アセンブリプログラムから１以上のループを検出し、アセンブリプログラムから、アセンブリプログラムを構成する各命令をノードとする２以上のノードを有する制御フローグラフを作成し、制御フローグラフから、任意の１つのノードが起点となるループであって、起点となるノードに戻る直前のノードと起点となるノードとが支配関係にあるループである支配ループである１以上の最適化箇所候補を検出する実行モジュール最適化装置である。
【００１４】
このような構成により、実行モジュールの支配ループについて最適化することができる。
【００１５】
また、本第六の発明の実行モジュール最適化装置は、第二から第五の発明に対して、パラメータ情報は、ループ回数と、ポインタがオーバーラップするか否かを示す情報であり、静的解析手段は、最適化箇所候補検出手段が検出した１以上の各最適化箇所候補に対して、ループ不変値と、配列にアクセスするための誘導変数とを取得し、取得したループ不変値と誘導変数とを用いて、最適化箇所候補において配列に対するメモリストアが行われているか否かを判断し、行われている場合に、箇所を最適化箇所候補に決定する静的解析を行い、判断手段は、動的解析手段が取得したループ回数が閾値以上であり、かつポインタがオーバーラップするか否かを示す情報が、ポインタがオーバーラップしないことを示す情報であるか否かを判断し、決定手段は、判断手段が、ループ回数が閾値以上であり、かつポインタがオーバーラップするか否かを示す情報が、ポインタがオーバーラップしないことを示す情報であると判断した最適化箇所候補を、最適化箇所に決定し、変更部は、判断手段が最適化箇所に決定した最適化箇所に対して、複数のプロセッサにおいて並列に実行できるアセンブリプログラム命令列に変更するマルチコア並列化を施す実行モジュール最適化装置である。
【００１６】
このような構成により、マルチコア並列化により、実行モジュールを最適化することができる。
【００１７】
また、本第七の発明の実行モジュール最適化装置は、第二から第五の発明に対して、パラメータ情報は、ループ回数と、ポインタがオーバーラップするか否かを示す情報であり、静的解析手段は、最適化箇所候補検出手段が検出した１以上の各最適化箇所候補に対して、変数名を取得し、取得した変数名を用いて、最適化箇所候補において変数間の依存関係が存在するか否かを判断し、存在しない場合に、箇所を最適化箇所候補に決定する静的解析を行い、判断手段は、動的解析手段が取得したループ回数が閾値以上であり、かつポインタがオーバーラップするか否かを示す情報が、ポインタがオーバーラップしないことを示す情報であるか否かを判断し、決定手段は、判断手段が、ループ回数が閾値以上であり、かつポインタがオーバーラップするか否かを示す情報が、ポインタがオーバーラップしないことを示す情報であると判断した最適化箇所候補を、最適化箇所に決定し、変更部は、判断手段が最適化箇所に決定した最適化箇所に対して、１の命令で複数データに対する処理を同時に行うことができるアセンブリプログラム命令に変更するＳＩＭＤ化を施す実行モジュール最適化装置である。
【００１８】
このような構成により、ＳＩＭＤ化により、実行モジュールを最適化することができる。
【００１９】
また、本第八の発明の実行モジュール最適化装置は、第一の発明に対して、最適化箇所検出情報は、１の処理を行う関数名であり、変更情報は、１の処理を行い、最適化箇所検出情報が示す関数よりも高速に処理を行う関数名であり、変更部は、１以上の最適化箇所を、各最適化箇所を検出する際に用いられた最適化箇所検出情報に対応する変更情報に変更し、最適化されたアセンブリプログラムを取得する実行モジュール最適化装置である。
【００２０】
このような構成により、ＡＰＩ／Ｌｉｂｒａｒｙ置き換えにより、実行モジュールを最適化することができる。
【００２１】
また、本第九の発明の実行モジュール最適化装置は、１以上の実行モジュールを格納し得る実行モジュール格納部と、処理の最適化が可能な箇所である最適化箇所を検出するための情報である最適化箇所検出情報と、最適化箇所検出情報を用いて検出された最適化箇所を変更するための情報である変更情報とを有する１以上の最適化情報を格納し得る最適化情報格納部と、実行モジュールを識別する実行モジュール識別子を有する指示を受け付ける受付部と、指示に含まれる実行モジュール識別子で識別される実行モジュールを、実行モジュール格納部から読み出し、逆アセンブルし、実行モジュールに対応するアセンブリプログラムを得る逆アセンブル部と、最適化情報格納部の１以上の最適化箇所検出情報を用いて、アセンブリプログラムから１以上の最適化箇所を検出する最適化箇所検出部と、１以上の各最適化箇所に対して、各最適化箇所を検出する際に用いられた最適化箇所検出情報に対応する変更情報を最適化情報格納部から取得し、変更情報を用いて１以上の最適化箇所を変更し、最適化されたアセンブリプログラムを取得する変更部と、最適化されたアセンブリプログラムを蓄積する蓄積部とを具備する実行モジュール最適化装置である。
【００２２】
このような構成により、実行モジュールを最適化することができる。
【００２３】
また、本第十の発明の実行モジュール最適化装置は、第九の発明に対して、最適化されたアセンブリプログラムをコンパイルし、最適化された実行モジュールを取得するコンパイル部をさらに具備し、蓄積部は、最適化された実行モジュールをも蓄積する実行モジュール最適化装置である。
【００２４】
このような構成により、実行モジュールを最適化することができる。
【発明の効果】
【００２５】
本発明による実行モジュール最適化装置等によれば、実行モジュールの最適化を行うことができる。
【図面の簡単な説明】
【００２６】
【図１】実施の形態１における実行モジュール最適化装置１のブロック図
【図２】同制御フローグラフの例を示す図
【図３】同制御フローグラフを示す情報の例を示す図
【図４】同制御フローグラフを示す情報の例を示す図
【図５】同支配関係にあるノードを示す情報の例を示す図
【図６】同支配関係にあるノードを示す情報の例を示す図
【図７】同実行モジュール最適化装置１の全体動作を示すフローチャート
【図８】同最適化箇所の検出処理について説明するフローチャート
【図９】同最適化箇所情報にマッチする箇所の検出処理について説明するフローチャート
【図１０】同最適化箇所の検出処理ついて説明するフローチャート
【図１１】同プロファイラを用いた最適化箇所候補の検出処理について説明するフローチャート
【図１２】同制御フローグラフを用いた最適化箇所候補の検出処理について説明するフローチャート
【図１３】同制御フローグラフの作成処理について説明するフローチャート
【図１４】同最適化箇所の変更処理について説明するフローチャート
【図１５】同最適化情報の例を示す図
【図１６】同アセンブリプログラムの例を示す図
【図１７】同プロファイルプログラムの例を示す図
【図１８】同マルチコア並列化の例を示す図
【図１９】同ＳＩＭＤ化の例を示す図
【図２０】同置換の例を示す図
【図２１】同最適化されたアセンブリコードの例を示す図
【図２２】実施の形態２における実行モジュール最適化装置２のブロック図
【図２３】同コンピュータシステムの概観図
【図２４】同コンピュータシステムのブロック図
【発明を実施するための形態】
【００２７】
以下、本発明による実行モジュール最適化装置等の実施形態について図面を参照して説明する。なお、実施の形態において同じ符号を付した構成要素は同様の動作を行うので、再度の説明を省略する場合がある。
【００２８】
（実施の形態１）
本実施の形態において、実行モジュールを最適化する実行モジュール最適化装置１について説明する。
【００２９】
図１は、本実施の形態における実行モジュール最適化装置１のブロック図である。
【００３０】
実行モジュール最適化装置１は、実行モジュール格納部１０１、最適化情報格納部１０２、プロファイラ格納部１０３、受付部１０４、逆アセンブル部１０５、最適化箇所検出部１０６、変更部１０７、実行部１０８を備える。
【００３１】
最適化箇所検出部１０６は、最適化箇所候補検出手段１０６１、静的解析手段１０６２、プロファイルプログラム生成手段１０６３、動的解析手段１０６４、判断手段１０６５、決定手段１０６６を備える。
【００３２】
実行モジュール格納部１０１は、１以上の実行モジュールを格納し得る。
【００３３】
ここで、実行モジュールとは、いわゆるソースコードをコンパイルして得られるプログラムであり、いわゆる実行ファイルや実行プログラムと呼ばれるものである。つまり、実行モジュールは、任意のＯＳ（Ｏｐｅｒａｔｉｏｎｇ  Ｓｙｓｔｅｍ）上で動作するプログラムのことである。実行モジュールは、当該プログラムを示すファイル、もしくはファイル群であってもよい。当該実行モジュールには、インタプリタにより動作するいわゆるスクリプト言語で記述されたプログラムは含まないものとする。
【００３４】
また、プログラムとは、ソフトウェア分野において「プログラム」の言葉から連想される意味を含む概念である。つまり、プログラムとは、ソフトウェアプログラムのことであってもよいし、プログラミング言語で記述されたものであってもよい。
【００３５】
実行モジュール格納部１０１は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。また、実行モジュール格納部１０１に実行モジュールが記憶される過程は問わない。例えば、記録媒体を介して実行モジュールが実行モジュール格納部１０１で記憶されるようになってもよい。また、通信回線などを介して送信された実行モジュールが実行モジュール格納部１０１で記憶されるようになってもよい。さらに、入力デバイスを介して入力された実行モジュールが実行モジュール格納部１０１で記憶されるようになってもよい。
【００３６】
最適化情報格納部１０２は、最適化情報を格納し得る。
【００３７】
ここで、最適化情報とは、最適化箇所検出情報と、変更情報とを１以上有する情報である。最適化箇所検出情報と変更情報とは、例えば、１対１で対応していてもよいし、そうでなくてもよい。最適化箇所検出情報と変更情報とは、どちらか一方の情報に対し、もう一方の情報とが対応付けられていればよく、その形式は問わない。
【００３８】
また、最適化情報は、パラメータ情報を有していてもよい。この場合、パラメータ情報は、最適化箇所検出情報、または変更情報と１対１で対応していてもよいし、そうでなくてもよい。
【００３９】
また、最適化箇所検出情報とは、処理の最適化が可能な箇所である最適化箇所を検出するための情報である。最適化箇所検出情報は、例えば、プログラムコードや、プログラムコードのパターン、最適化箇所の検出方法を示す情報、プログラムなどであってもよい。プログラムコードとは、例えば、任意の処理を行う関数名や、任意の処理を行う命令などである。また、プログラムコードのパターンとは、例えば、制御構文と変数の組み合わせを示すパターンや、いわゆる正規表現などである。また、最適化箇所の検出方法を示す情報とは、例えば、ループを検出することを示す情報や、関数を検出することを示す情報などである。また、プログラムとは、例えば、ループを検出するプログラムや、関数を検出するプログラムなどである。
【００４０】
また、変更情報とは、最適化箇所検出情報を用いて検出された最適化箇所を変更するための情報である。変更情報は、例えば、プログラムコードや、プログラムコードのパターン、最適化箇所の変更方法を示す情報、プログラムなどであってもよい。プログラムコードとは、例えば、任意の処理を行う関数名や、任意の処理を行う命令などである。また、プログラムコードのパターンとは、例えば、制御構文と変数の組み合わせを示すパターンや、いわゆる正規表現などである。また、最適化箇所の変更方法を示す情報とは、例えば、指定された最適化箇所に対して、マルチコア並列化を施すことを示す情報や、ＳＩＭＤ化を施すことを示す情報、任意の情報と置換することを示す情報などである。また、プログラムとは、例えば、指定された最適化箇所に対して、マルチコア並列化を施すプログラムや、ＳＩＭＤ化を施すプログラム、任意の情報と置換するプログラムなどである。
【００４１】
また、パラメータ情報とは、収集すべきパラメータを示す情報である。つまり、パラメータ情報とは、任意のパラメータを収集する旨を示す情報である。当該パラメータ情報は、後述のプロファイルプログラム生成手段１０６３が使用する情報である。パラメータ情報は、例えば、ループの回数を収集する旨を示す情報や、変数の数を収集する旨を示す情報、分岐が存在するか否かを示す情報を収集する旨を示す情報、ポインタがオーバーラップするか否かを示す情報を収集する旨を示す情報などであってもよい。パラメータ情報は、任意の事象や状態を示す情報であれば、その種類は問わない。
【００４２】
また、最適化とは、高速化や、メモリ使用量の削減、低消費電力化、冗長なプログラムコードの削除などを含む概念であり、良くするという程度を含み、広く解する。
【００４３】
また、最適化情報は、例えば、最適化箇所検出情報により何を検出するのかを示す検出対象情報を含んでいてもよい。検出対象情報は、例えば、最適化箇所検出情報により検出する対象がループであることを示す情報や、最適化箇所検出情報により検出する対象が関数であることを示す情報などであってもよい。また、検出対象情報は、最適化情報に含まれていてもよいし、後述の最適化箇所検出部１０６、最適化箇所候補検出手段１０６１が、最適化箇所、および最適化箇所候補を検出する際に、最適化箇所検出情報から判断し、取得するようにしてもよい。また、検出対象情報は、後述の変更部１０７が、最適化箇所検出情報から判断し、取得するようにしてもよい。
【００４４】
最適化情報格納部１０２は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。また、最適化情報格納部１０２に最適化情報が記憶される過程は問わない。例えば、記録媒体を介して最適化情報が最適化情報格納部１０２で記憶されるようになってもよい。また、通信回線などを介して送信された最適化情報が最適化情報格納部１０２で記憶されるようになってもよい。さらに、入力デバイスを介して入力された最適化情報が最適化情報格納部１０２で記憶されるようになってもよい。
【００４５】
プロファイラ格納部１０３は、プロファイラを格納し得る。
【００４６】
ここで、プロファイラとは、動作中のプログラムが実行した処理や、その処理が実行された順序を監視するプログラムであり、プロファイル情報を収集するためのプログラムである。また、プロファイラは、例えば、アセンブリプログラムを実行し、各命令の負荷を取得するプログラムであってもよい。プロファイラは、ＯＳがＷｉｎｄｏｗｓ（登録商標）の場合であれば、「イベント  トレース  プロバイダ」（http://www.microsoft.com/japan/whdc/devtools/tools/eventtrace_sample.mspx）が知られている。また、プロファイラは、ＯＳがＬｉｎｕｘの場合であれば、「ＯＰｒｏｆｉｌｅ」（http://oprofile.sourceforge.net/）が知られている。なお、プロファイラの詳細については、公知の技術であるので、その説明を省略する。
【００４７】
また、負荷とは、例えば、命令の実行時間であってもよいし、メモリの使用量であってもよいし、その内容は問わない。
【００４８】
プロファイラ格納部１０３は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。また、プロファイラ格納部１０３にプロファイラが記憶される過程は問わない。例えば、記録媒体を介してプロファイラがプロファイラ格納部１０３で記憶されるようになってもよい。また、通信回線などを介して送信されたプロファイラがプロファイラ格納部１０３で記憶されるようになってもよい。さらに、入力デバイスを介して入力されたプロファイラがプロファイラ格納部１０３で記憶されるようになってもよい。
【００４９】
受付部１０４は、指示を受け付ける。
【００５０】
ここで、指示とは、例えば、実行モジュールを実行する指示や、実行モジュールを最適化する指示などである。また、指示は、実行モジュール識別子を有する指示である。また、実行モジュール識別子とは、実行モジュールを識別する情報である。
【００５１】
また、例えば、実行モジュール最適化装置１が、実行モジュールが実行されるときに必ず実行されるようなミドルウェアである場合であれば、実行モジュール識別子を有する指示は、例えば、実行モジュールを示すアイコンのダブルクリックやシングルクリックなどである。また、例えば、実行モジュール最適化装置１が、ＯＳ上で動作するアプリケーションである場合であれば、実行モジュール識別子を有する指示は、例えば、実行モジュールを示すアイコンの当該装置へのドラッグ＆ドロップなどである。つまり、実行モジュール識別子を有する指示とは、実行モジュールを識別する実行モジュール識別子を有する指示であれば、その形式は問わない。
【００５２】
受け付けとは、キーボードやマウス、タッチパネルなどの入力デバイスから入力された情報の受け付け、有線もしくは無線の通信回線を介して送信された情報の受信、光ディスクや磁気ディスク、半導体メモリなどの記録媒体から読み出された情報の受け付けなどを含む概念である。
【００５３】
受付部１０４における実行モジュール識別子を有する指示の入力手段は、キーボードやマウスやメニュー画面によるものなど、何でもよい。受付部１０４は、キーボード等の入力手段のデバイスドライバーや、メニュー画面の制御ソフトウェアなどで実現され得る。
【００５４】
逆アセンブル部１０５は、実行モジュール格納部１０１に格納されている実行モジュールを読み出し、逆アセンブルし、当該実行モジュールに対応するアセンブリプログラムを取得する。
【００５５】
ここで、読み出す実行モジュールは、通常、受付部１０４が受け付けた指示に含まれる実行モジュール識別子で識別される実行モジュールである。
【００５６】
また、逆アセンブルとは、実行モジュールを、アセンブリプログラムに変換することである。逆アセンブルは、公知の技術であるので、詳細な説明は省略する。
【００５７】
また、逆アセンブル部１０５は、例えば、逆アセンブルを行うプログラムである逆アセンブラを用いて、実行モジュールの逆アセンブル、および当該実行モジュールに対応するアセンブリプログラムを得てもよい。この場合、逆アセンブラは、例えば、逆アセンブル部１０５が保持していてもよいし、そうでなくてもよい。そうでない場合は、逆アセンブラは、任意の記憶領域に格納されていてもよい。
【００５８】
また、アセンブリプログラムとは、いわゆるアセンブリ言語で記述されたプログラムのことである。
【００５９】
逆アセンブル部１０５は、通常、ＭＰＵやメモリ等から実現され得る。逆アセンブル部１０５の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現してもよい。
【００６０】
最適化箇所検出部１０６は、逆アセンブル部１０５が取得したアセンブリプログラムから、１以上の最適化箇所を検出する。最適化箇所の検出は、最適化情報格納部１０２に格納されている１以上の最適化箇所検出情報を用いて行う。また、最適化箇所の検出は、最適化箇所検出部１０６が備える後述の最適化箇所候補検出手段１０６１、静的解析手段１０６２、プロファイルプログラム生成手段１０６３、動的解析手段１０６４、判断手段１０６５、決定手段１０６６により行ってもよい。
【００６１】
ここで、最適化箇所とは、後述の変更部１０７が変更情報を用いて変更する箇所であり、逆アセンブル部１０５が取得したアセンブリプログラム内の箇所である。また、最適化箇所を示す情報は、例えば、アセンブリプログラム内の当該箇所の位置を示す行番号や、当該箇所の範囲を示す行番号、アセンブリプログラムを構成する１以上のプログラムコードなどであってもよい。最適化箇所を示す情報は、逆アセンブル部１０５が取得したアセンブリプログラム内の任意の箇所を特定できる情報であれば、その形式は問わない。
【００６２】
また、最適化箇所を示す情報は、例えば、後述の変更部１０７が当該最適化箇所を変更する方法を示す変更方法情報を含んでいてもよい。変更方法情報は、例えば、最適化箇所を検出する際に使用した最適化箇所検出情報に対応する変更情報で置換することを示す情報や、当該変更情報を用いて変更することを示す情報などであってもよい。変更方法情報は、例えば、変更情報から取得してもよいし、検出した最適化箇所を示す情報から取得してもよい。
【００６３】
また、最適化箇所の検出とは、最適化箇所検出情報を用いて、逆アセンブル部１０５が取得したアセンブリプログラム内の任意の箇所を特定する情報を取得することである。
【００６４】
最適化箇所検出部１０６は、通常、ＭＰＵやメモリ等から実現され得る。最適化箇所検出部１０６の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現してもよい。
【００６５】
最適化箇所候補検出手段１０６１は、逆アセンブル部１０５が取得したアセンブリプログラムから、１以上の最適化箇所候補を検出する。最適化箇所候補の検出は、最適化情報格納部１０２に格納されている１以上の最適化箇所検出情報を用いて行う。また、最適化箇所候補の検出は、プロファイラ格納部１０３に格納されているプロファイラを用いて行ってもよいし、逆アセンブル部１０５が取得したアセンブリプログラムから作成した制御フローグラフを基に行ってもよい。
【００６６】
ここで、最適化箇所候補とは、最適化箇所となり得る箇所であり、逆アセンブル部１０５が取得したアセンブリプログラム内の箇所である。また、最適化箇所候補を示す情報は、例えば、ループを示す情報や、アセンブリプログラム内の当該箇所の位置を示す行番号、当該箇所の範囲を示す行番号、アセンブリプログラムを構成する１以上のプログラムコードなどであってもよい。最適化箇所候補を示す情報は、逆アセンブル部１０５が取得したアセンブリプログラム内の任意の箇所を特定できる情報であれば、その形式は問わない。
【００６７】
また、最適化箇所候補の検出とは、最適化箇所検出情報を用いて、逆アセンブル部１０５が取得したアセンブリプログラム内の任意の箇所を特定する情報を取得することである。
【００６８】
また、最適化箇所候補の検出は、例えば、アセンブリプログラムの任意の行のコードと、最適化箇所検出情報とを、比較対象とする行を１行ずつずらしながら比較し、一致する箇所を最適化箇所として検出することなどであってもよい。
【００６９】
また、最適化箇所候補検出手段１０６１は、例えば、逆アセンブル部１０５が取得したアセンブリプログラムに対し、プロファイラ格納部１０３に格納されているプロファイラを実行し、最適化箇所候補を検出してもよい。
【００７０】
また、最適化箇所候補検出手段１０６１は、例えば、当該アセンブリプログラムに対し、当該プロファイラを実行し、各命令の負荷を取得し、当該アセンブリプログラムからループのパターンを示す最適化箇所検出情報を用いて１以上のループを検出し、検出した１以上のループのうち、負荷が閾値を超える命令を有するループを、最適化箇所候補として検出してもよい。
【００７１】
また、最適化箇所候補検出手段１０６１は、例えば、当該アセンブリプログラムからループのパターンを示す最適化箇所検出情報を用いて１以上のループを検出し、当該アセンブリプログラムに対し、当該プロファイラを実行し、検出した１以上のループ内の各命令の負荷を取得し、検出した１以上のループのうち、負荷が閾値を超える命令を有するループを、最適化箇所候補として検出してもよい。
【００７２】
なお、上記の閾値は、予め決められていてもよいし、そうでなくてもよい。予め決められている場合は、当該閾値は、任意の記憶領域に格納されていてもよい。また、予め決められていない場合は、当該閾値は、例えば、アセンブリプログラム中のすべての行の負荷の平均や、アセンブリプログラム中のすべての行の負荷のうち最大の負荷の半分、アセンブリプログラム中のすべての命令の負荷の平均、アセンブリプログラム中のすべての命令の負荷のうち最大の負荷の半分などであってもよい。
【００７３】
また、最適化箇所候補検出手段１０６１は、例えば、逆アセンブル部１０５が取得したアセンブリプログラムから制御フローグラフを作成し、当該制御フローグラフを基に、最適化箇所候補を検出してもよい。
【００７４】
また、最適化箇所候補検出手段１０６１は、例えば、当該アセンブリプログラムからループのパターンを示す最適化箇所検出情報を用いて１以上のループを検出し、当該アセンブリプログラムから制御フローグラフを作成し、当該制御フローグラフから支配ループであるループを検出し、最適化箇所検出情報を用いて検出したループと、制御フローグラフから検出した支配ループとを比較し、最適化箇所検出情報を用いて検出したループのうち、支配ループであるループを、最適化箇所候補として検出してもよい。
【００７５】
また、最適化箇所候補検出手段１０６１は、例えば、当該アセンブリプログラムから制御フローグラフを作成し、当該制御フローグラフから支配ループのパターンを示す最適化箇所検出情報を用いて支配ループであるループを検出し、当該検出した制御フローグラフにおけるループに該当するアセンブリプログラム内のループを最適化箇所候補として検出してもよい。
【００７６】
ここで、制御フローグラフとは、コントロールフローグラフ（Ｃｏｎｔｒｏｌ  Ｆｌｏｗ  Ｇｒａｐｈ）のことであり、プログラムを実行したときに通る可能性のある命令の全経路をグラフで表したものである。制御フローグラフは、アセンブリプログラムを構成する各命令をノードとする２以上のノードを有するものであってもよい。制御フローグラフは、例えば、図２のようなものである。
【００７７】
また、制御フローグラフを示す情報は、例えば、図２の制御フローグラフにおいて、矢印が出ているノードと、当該矢印が向かう先のノードの２つのノードの関係を示す情報であって、図３や、図４のような情報であってもよい。制御フローグラフを示す情報は、図２のようなグラフが表現できればよく、その形式は問わない。
【００７８】
また、支配ループとは、任意の１つのノードが起点となるループであって、当該起点となるノードに戻る直前のノードと起点となるノードとが支配関係にあるループである。
【００７９】
また、支配関係とは、制御フローグラフにおける任意の２つのノードにおいて、一方のノードを通るためには、必ずもう一方のノードを通らなければならないような関係にあることを言う。例えば、図２のような制御フローグラフにおいて、Ｂを通るためには必ずＡを通らなければならないので、「ＢはＡに支配されている」と言い、「ＡとＢは支配関係にある」と言う。また、図２において、Ｅを通るためには必ずＢを通らなければならないので、「ＥはＢに支配されている」と言い、「ＢとＥは支配関係にある」と言う。また、図２において、Ｅを通るためには必ずＣを通らなければならないわけではなく、また、Ｅを通るためには必ずＤを通らなければならないわけでもないので、「ＥはＣに支配されていない」、「ＣとＥは支配関係にない」、「ＥはＤに支配されていない」、「ＤとＥは支配関係にない」と言う。
【００８０】
また、図２のような制御フローグラフにおいて、Ｉを通るためには必ずＦを通らなければならないので、「ＩはＦに支配されている」と言い、「ＦとＩは支配関係にある」と言う。また、図２において、「Ｆ→Ｇ→Ｈ→Ｉ→Ｆ」はループになっており、かつループの起点となるノードであるＦに戻る直前のノードであるＩが支配関係にある。このようなループを、支配ループと呼ぶ。また、図２において、ＡとＥは支配関係にあるので、「Ａ→Ｂ→Ｃ→Ｅ→Ａ」のループは、支配ループである。同様に、「Ａ→Ｂ→Ｄ→Ｅ→Ａ」のループも、支配ループである。
【００８１】
また、最適化箇所候補検出手段１０６１は、制御フローグラフを作成し、各ノード間の支配関係を解析し、その解析結果を任意の記憶領域に蓄積してもよい。この場合、支配関係の解析結果を示す情報は、例えば、図２の制御フローグラフにおいて、支配するノードと、支配されるノードの関係を示す情報であって、図５や図６のような情報であってもよい。支配関係の解析結果を示す情報は、ノード間の支配関係がわかればよく、その形式は問わない。
【００８２】
また、ループが支配ループであるか否かの判断は、例えば、以下のような手順で行ってもよい。
（１）制御フローグラフ中のループを検出する。例えば、「Ａ→Ｂ→Ｃ→Ａ」のような形式で検出する。
（２）（１）で検出したループの最後の２つのノード間の支配関係を解析し、解析結果を取得する。例えば、「支配する：Ａ｜支配される：Ｃ」のような形式で解析結果を取得する。
（３）（２）で取得した解析結果において支配関係にあるか否かを判断する。
（４）（３）で支配関係にあると判断した場合に、支配ループであると判断する。
【００８３】
また、最適化箇所候補検出手段１０６１は、プロファイラを用いて最適化箇所候補を検出するか、制御フローグラフを用いて最適化箇所候補を検出するかを判断し、プロファイラを用いて最適化箇所候補を検出すると判断した場合は、最適化箇所検出情報とプロファイラを用いて最適化箇所候補を検出し、制御フローグラフを用いて最適化箇所候補を検出すると判断した場合は、最適化箇所検出情報と制御フローグラフを用いて最適化箇所候補を検出してもよい。この場合、当該判断は、例えば、最適化箇所候検出情報に、プロファイラを用いて最適化箇所候補を検出するか、制御フローグラフを用いて最適化箇所候補を検出するかを示す情報が含まれており、当該情報を用いて判断することであってもよい。また、当該判断は、例えば、プロファイラ格納部１０３にプロファイラが格納されているか否かを判断することであってもよい。また、当該判断は、例えば、ループを検出した際に使用した各最適化箇所検出情報に対応する変更情報が、マルチコア並列化を施すための情報であるか、ＳＩＭＤ化を施すための情報であるかを判断し、マルチコア並列化を施すための情報であれば、プロファイラを用いて最適化箇所候補を検出すると判断し、ＳＩＭＤ化を施すための情報であれば、制御フローグラフを用いて最適化箇所候補を検出すると判断することであってもよい。
【００８４】
なお、最適化箇所候補検出手段１０６１が行う最適化箇所候補の検出は、最適化箇所候補が検出できれば、その方法は問わない。
【００８５】
最適化箇所候補検出手段１０６１は、通常、ＭＰＵやメモリ等から実現され得る。最適化箇所候補検出手段１０６１の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現してもよい。
【００８６】
静的解析手段１０６２は、最適化箇所候補検出手段１０６１が検出した最適化箇所候補に対して、静的解析を行う。
【００８７】
ここで、静的解析とは、最適化箇所候補検出手段１０６１が検出した最適化箇所候補が示す箇所を、最適化箇所候補に決定する処理である。静的解析は、例えば、以下のような処理である。
（１）最適化箇所候補検出手段１０６１が検出した最適化箇所候補を取得する。
（２）（１）で取得した各最適化箇所候補から、予め決められたパターンに合致する情報を取得する。
（３）（２）で取得した情報が、予め決められた条件に合致するか否かを判断する。
（４）（３）で合致すると判断した場合は、（２）で取得した情報に対応する箇所を、最適化箇所候補に決定する。
【００８８】
ここで、予め決められたパターンとは、最適化箇所候補検出手段１０６１が検出した最適化箇所候補から情報を取得するパターンである。予め決められたパターンは、例えば、ループ不変値や、配列にアクセスするための誘導変数、変数名を取得するためのパターンであってもよい。つまり、この場合、予め決められたパターンに合致する情報は、ループ不変値や、配列にアクセスするための誘導変数、変数名となる。
【００８９】
なお、予め決められたパターンは、例えば、「ｍｏｖ  ｅｄｘ，ｄｗｏｒｄ  ｐｔｒ  ［ｅｂｐ＋＃＊ｅａｘ−＃］」や、「ｐｔｒ  ［ｅｂｐ＋＃＊ｅａｘ−＃］」、「ｅｄｐ」などであってもよい。予め決められたパターンは、最適化箇所候補検出手段１０６１が検出した最適化箇所候補から情報を取得できればよく、その形式は問わない。また、予め決められたパターンは、静的解析手段１０６２が保持していてもよく、そうでなくてもよい。そうでない場合は、予め決められたパターンは、任意の記憶領域に格納されていてもよい。
【００９０】
また、ループ不変値とは、ループにおいて、ループ内の処理の繰り返しに依存することなく、変化しない値（変数）のことである。例えば、「ｆｏｒ（ｉ＝０；ｉ＜１０；ｉ＋＋）」で示されるループにおいて、「ａ＝１０；」と「ｂ＝ｉ＊２；」のプログラムコードが存在する場合、「ａ」は、ループ内の処理の繰り返しに依存することなく、変化しないので、ループ不変値である。また「ｂ」は、ループ内の処理の繰り返しに依存し、変化するので、ループ不変値でない。
【００９１】
また、誘導変数とは、ループにおいて、ループ内の処理の繰り返しを示す変数のことである。例えば、「ｆｏｒ（ｉ＝０；ｉ＜１０；ｉ＋＋）」で示されるループにおいて、「ｉ」は、ループの反復を示す変数であるので、誘導変数である。
【００９２】
また、予め決められた条件とは、予め決められたパターンに合致する情報に対応する箇所を、最適化箇所に決定する条件である。また、予め決められた条件は、例えば、予め決められたパターンにより取得できた情報が任意の条件に合致することであってもよし、当該情報を用いて判断できる事象が任意の条件に合致することであってもよい。
【００９３】
また、予め決められた条件は、例えば、メモリストアが行われていることであってもよいし、変数間の依存関係が存在しないことであってもよい。例えば、予め決められた条件が、メモリストアが行われていなことである場合、当該条件に合致するか否かの判断は、予め決められたパターンにより取得できたループ不変値と誘導変数とを用いて、配列に対するメモリストアが行われているか否かを判断することであってもよい。また、例えば、予め決められた条件が、変数間の依存関係が存在しないことである場合、当該条件に合致するか否かの判断は、予め決められたパターンにより取得できた変数名を用いて、変数間の依存関係が存在するか否かを判断することであってもよい。
【００９４】
つまり、静的解析手段１０６２は、予め決められた条件に応じた判断を行い、当該判断の結果が、予め決められた条件に合致するか否かを判断する。
【００９５】
なお、予め決められた条件は、例えば、「メモリストアが行われている」や、「変数間の依存関係が存在しない」、「ポインタがオーバーラップしない」などであってもよい。予め決められた条件は、予め決められたパターンに合致する情報に対応する箇所を、最適化箇所に決定できればよく、その形式は問わない。また、予め決められた条件は、静的解析手段１０６２が保持していてもよく、そうでなくてもよい。そうでない場合は、予め決められた条件は、任意の記憶領域に格納されていてもよい。
【００９６】
また、変数間の依存関係とは、例えば、ある変数に対する値の代入などの処理が、他の変数の処理結果に依存するような関係にあることを言う。つまり、例えば、「Ａ」と「Ｂ」の２つの変数が存在し、「Ａ＝１」と「Ｂ＝Ａ＋２」のコードが存在する場合、「Ｂ」への値の代入は、「Ａ」への値の代入の結果に依存する。このような場合に、変数間の依存関係が存在すると判断する。
【００９７】
また、静的解析手段１０６２が行う最適化箇所候補を決定する静的解析は、最適化箇所候補が決定できればよく、その方法は問わない。
【００９８】
また、最適化箇所候補の決定とは、最適化箇所検出情報を用いて、逆アセンブル部１０５が取得したアセンブリプログラム内の任意の箇所を特定する情報を取得することである。
【００９９】
静的解析手段１０６２は、通常、ＭＰＵやメモリ等から実現され得る。静的解析手段１０６２の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現してもよい。
【０１００】
プロファイルプログラム生成手段１０６３は、静的解析手段１０６２が静的解析を行い、最適化箇所候補を決定したアセンブリプログラムから、プロファイルプログラムを生成する。また、プロファイルプログラム生成手段１０６３は、逆アセンブル部１０５が取得したアセンブリプログラムから、静的解析手段１０６２が決定した最適化箇所候補を基に、プロファイルプログラムを生成してもよい。
【０１０１】
ここで、プロファイルプログラムとは、最適化情報格納部１０２が格納しているパラメータ情報が示すパラメータを収集するためのプログラムである。
【０１０２】
また、プロファイルプログラムの生成は、例えば、以下のような処理である。
（１）静的解析手段１０６２が決定した最適化箇所候補を取得する。ここで、ｍ個の最適化箇所候補が取得できたものとする。
（２）カウンタｉに１をセットする。
（３）（１）で取得した最適化箇所候補から、ｉ番目の最適化箇所候補を取得する。
（４）（２）で取得した最適化箇所候補の前に、最適化情報格納部１０２が格納しているパラメータ情報が示すパラメータを収集するためのアセンブリプログラム命令列を挿入する。
（５）ｉがｍであるか否かを判断する。ｍである場合は、処理を終了し、そうでない場合は、（６）に進む。
（６）ｉを１インクリメントし、（３）に戻る。
【０１０３】
また、プロファイルプログラムの生成は、例えば、以下のような手順で行ってもよい。
（１）静的解析手段１０６２が決定した最適化箇所候補を取得する。ここで、ｍ個の最適化箇所候補が取得できたものとする。
（２）カウンタｉに１をセットする。
（３）（１）で取得した最適化箇所候補から、ｉ番目の最適化箇所候補を取得する。
（４）（３）で取得したｉ番目の最適化箇所候補を複写する。
（５）（４）で複写した最適化箇所候補の直前に、最適化情報格納部１０２が格納しているパラメータ情報が示すパラメータを収集するためのアセンブリプログラム命令列を挿入する。
（６）（３）で取得した最適化箇所候補の直前に、（５）で挿入したアセンブリプログラム命令列の直前にジャンプするアセンブリプログラム命令を挿入する。
（７）ｉがｍであるか否かを判断する。ｍである場合は、処理を終了し、そうでない場合は、（８）に進む。
（８）ｉを１インクリメントし、（３）に戻る。
【０１０４】
ここで、最適化箇所候補の取得とは、例えば、最適化箇所候補を示す情報を取得することであってもよいし、最適化箇所候補を示す情報により示されるアセンブリプログラムを取得することであってもよい。
【０１０５】
また、最適化箇所候補の前とは、最適化箇所候補の前であればよく、直前でなくてもよいが、通常は、直前であることが好適である。
【０１０６】
また、命令列とは、２以上の命令のことであり、命令とは、１つの命令のことである。
【０１０７】
また、最適化情報格納部１０２が格納しているパラメータ情報が示すパラメータを収集するためのアセンブリプログラム命令列は、任意の記憶領域に蓄積されていてもよいし、プロファイルプログラム生成手段１０６３が保持していてもよい。
【０１０８】
また、最適化箇所候補の複写とは、最適化箇所候補を示す情報により特定されるアセンブリプログラム内の箇所に該当するプログラムコードを、任意の記憶領域に蓄積することである。
【０１０９】
なお、プロファイルプログラム生成手段１０６３が行うプロファイルプログラムの生成は、プロファイルプログラムが生成できればよく、その方法は問わない。
【０１１０】
プロファイルプログラム生成手段１０６３は、通常、ＭＰＵやメモリ等から実現され得る。プロファイルプログラム生成手段１０６３の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現してもよい。
【０１１１】
動的解析手段１０６４は、プロファイルプログラムを実行し、１以上のパラメータを取得する動的解析を行う。
【０１１２】
ここで、プロファイルプログラムの実行は、通常、アセンブリプログラムを機械語に変換後、実行する。また、プロファイルプログラムの実行は、アセンブリプログラムを機械語に変換するプログラムであるアセンブラを用いて、プロファイルプログラムを機械語に変換後、実行してもよい。この場合、アセンブラは、例えば、動的解析手段１０６４が保持していてもよいし、そうでなくてもよい。そうでない場合は、アセンブラは、任意の記憶領域に格納されていてもよい。
【０１１３】
なお、動的解析手段１０６４が行う動的解析は、１以上のパラメータが取得できればよく、その方法は問わない。
【０１１４】
動的解析手段１０６４は、通常、ＭＰＵやメモリ等から実現され得る。動的解析手段１０６４の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現してもよい。
【０１１５】
判断手段１０６５は、動的解析手段１０６４が取得した１以上のパラメータが、予め決められた条件に合致するか否かを判断する。
【０１１６】
ここで、予め決められた条件とは、当該パラメータを取得した最適化箇所候補を、最適化箇所に決定するための条件である。予め決められた条件は、例えば、動的解析手段１０６４が取得したループ回数が、閾値以上であることであってもよいし、動的解析手段１０６４が取得したポインタがオーバーラップするか否かを示す情報が、オーバーラップしないことを示す情報であることなどであってもよい。
【０１１７】
つまり、例えば、予め決められた条件が「動的解析手段１０６４が取得したループ回数が、閾値以上である」である場合は、判断手段１０６５は、動的解析手段１０６４が取得したループ回数が、閾値以上であるか否かの判断を行う。また、例えば、予め決められた条件が「動的解析手段１０６４が取得したポインタがオーバーラップするか否かを示す情報が、オーバーラップしないことを示す情報である」である場合は、判断手段１０６５は、動的解析手段１０６４が取得したポインタがオーバーラップするか否かを示す情報が、オーバーラップしないことを示す情報であるか否かの判断を行う。
【０１１８】
また、ポインタのオーバーラップとは、任意の２つのポインタが指し示すアドレスが、一方のポインタによって確保されるデータサイズのアドレスと重複すること、または、一方のポインタによって確保されるデータサイズのアドレスに含まれることである。ポインタがオーバーラップしているか否かの判断は、例えば、以下のような手順で行ってもよい。
（１）１つ目のポインタ（Ｐｔｒ＿Ａ）から開始される配列のサイズを取得する。このとき取得できたサイズを、Ｓｉｚｅ＿Ａとする。
（２）Ｐｔｒ＿Ａから開始される配列の各要素のアドレスを取得する。このとき取得できたＳｉｚｅ＿Ａ個のアドレスを、Ａｄｄｒ＿Ａとし、配列の各要素に対応するアドレスは、Ａｄｄｒ＿Ａ［１］、Ａｄｄｒ＿Ａ［２］、・・・、Ａｄｄｒ＿Ａ［Ｓｉｚｅ＿Ａ］に格納されているものとする。
（３）２つ目のポインタ（Ｐｔｒ＿Ｂ）から開始される配列のサイズを取得する。このとき取得できたサイズを、Ｓｉｚｅ＿Ｂとする。
（４）Ｐｔｒ＿Ｂから開始される配列の各要素のアドレスを取得する。このとき取得できたＳｉｚｅ＿Ｂ個のアドレスを、Ｂｄｄｒ＿Ｂとし、配列の各要素に対応するアドレスは、Ｂｄｄｒ＿Ｂ［１］、Ｂｄｄｒ＿Ｂ［２］、・・・、Ｂｄｄｒ＿Ｂ［Ｓｉｚｅ＿Ｂ］に格納されているものとする。
（５）フラグにｆａｌｓｅをセットする。
（６）カウンタｉに１をセットする。
（７）カウンタｊに１をセットする。
（８）「Ｂｄｄｒ＿Ｂ［ｊ］が、Ａｄｄｒ＿Ａ［ｉ］以上であり、かつＡｄｄｒ＿Ａ［ｉ＋１］より小さい」の条件に合致するか否かを判断する。
（９）（８）で条件に合致する場合は、フラグにｔｒｕｅをセットし、条件に合致しない場合は、ｊを１インクリメントし、（８）に戻る。
（１０）ｊがＳｉｚｅ＿Ｂに一致するまで、（８）〜（９）の処理を繰り返す。
（１１）ｉを１インクリメントし、（７）に戻る。
（１２）ｉがＳｉｚｅ＿Ａ−１に一致するまで、（７）〜（１１）の処理を繰り返す。
（１３）フラグがｔｒｕｅであるか否かを判断する。フラグがｔｒｕｅである場合は、ポインタがオーバーラップすると判断し、フラグがｆａｌｓｅである場合は、ポインタがオーバーラップしないと判断する。
【０１１９】
このポインタがオーバーラップするか否かの判断は、ポインタがオーバーラップするか否かが判断できればよく、その方法は問わない。
【０１２０】
また、判断手段１０６５が行う判断は、動的解析手段１０６４が取得した１以上のパラメータが、予め決められた条件に合致するか否かが判断できればよく、その方法は問わない。
【０１２１】
判断手段１０６５は、通常、ＭＰＵやメモリ等から実現され得る。判断手段１０６５の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現してもよい。
【０１２２】
決定手段１０６６は、動的解析手段１０６４が取得した１以上のパラメータが、予め決められた条件に合致する場合に、当該パラメータを取得した最適化箇所候補を、最適化箇所に決定する。つまり、判断手段１０６５が、動的解析手段１０６４が取得した１以上のパラメータが、予め決められた条件に合致するか否かを判断し、合致すると判断した場合に、当該パラメータを取得した最適化箇所候補を、最適化箇所に決定する。
【０１２３】
決定手段１０６６は、通常、ＭＰＵやメモリ等から実現され得る。決定手段１０６６の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現してもよい。
【０１２４】
変更部１０７は、通常、最適化箇所検出部１０６が、最適化箇所を検出する際に用いた最適化箇所検出情報に対応する変更情報を、最適化情報格納部１０２から取得し、当該変更情報を用いて最適化箇所を変更し、最適化されたプログラムを取得する。
【０１２５】
ここで、変更情報を用いて最適化箇所を変更するとは、例えば、変更情報が、プログラムのパターンや、プログラムの変更方法を示す情報、変更を行うためのプログラムなどである場合に、これらを用いて、最適化箇所を変更することである。
【０１２６】
また、変更とは、置換や書換などを含む概念である。
【０１２７】
また、変更部１０７は、決定手段１０６６が最適化箇所に決定した最適化箇所に対して、マルチコア並列化を施し、最適化されたアセンブリプログラムを取得してもよい。
【０１２８】
ここで、マルチコア並列化とは、複数のプロセッサにおいて並列に実行できるプログラムコードに書き換えることや、複数のプロセッサにおいて並列に実行するための命令を挿入することなどである。マルチコア並列化は、例えば、１０個の要素を持つ配列に対して、カウンタを１から１０まで回して処理するループを、カウンタを１から５まで回し、１度に２つの要素に対して処理が行えるようなループに変更することなどであってもよい。また、マルチコア並列化は、例えば、１０個の要素を持つ配列に対して、カウンタを１から１０まで回して処理するループに対して、当該ループの直前に、当該ループを並列に実行するための命令を挿入することなどであってもよい。また、マルチコア並列化は、例えば、１０個の要素を持つ配列に対して、カウンタを１から１０まで回して処理するループに対して、当該ループの直前に、並列実行を開始するための命令を挿入し、かつ、当該ループの直後に、並列実行を終了するための命令を挿入することなどであってもよい。
【０１２９】
また、マルチコア並列化においてプログラムコードを分割する数を並列数と呼ぶこととすると、当該並列数は、予め決められていてもよいし、そうでなくてもよい。予め決められている場合は、当該並列数は、任意の記憶領域に格納されていてもよい。予め決められていない場合は、当該並列数は、例えば、プロセッサ数や、ループカウンタの最大値の約数のうち、プロセッサ数を超えない最大数などであってもよい。予め決められていない場合の並列数は、変更部１０７が取得してもよい。
【０１３０】
また、マルチコア並列化は、例えば、以下のような処理である。
（１）マルチコア並列化を施すループを検出する。
（２）（１）で検出したループのループカウンタの最大値を取得する。
（３）プロセッサ数を取得する。
（４）（２）で取得したループカウンタの最大値を、（３）で取得したプロセッサ数で割った値を取得する。ここでは、割った値、つまり商は整数値であり、小数値ではない。また、割り切れずに余った値、つまり剰余も取得するようにしてもよい。
（５）（１）で検出したループのループカウンタの最大値に、（４）で取得した値をセットする。
（６）（１）で検出したループ内の配列に対する処理を示すプログラムコードを複写する。
（７）（６）で複写したプログラムコードを、当該複写元のプログラムコードの直後に挿入する。
（８）（７）で挿入したプログラムコードが示す配列に対する処理において、配列の要素にアクセスするための変数を「＋１」するように書き換える。つまり、例えば、「Ａｒｒａｙ［ｉ］」となっている場合であれば、「Ａｒｒａｙ［ｉ＋１］」に書き換える。
【０１３１】
なお、（４）において剰余が存在し、取得できた場合は、ループの直後に、当該剰余により処理されない配列に対する処理を行うプログラムコードを挿入してもよい。
【０１３２】
また、マルチコア並列化は、例えば、以下のような処理でもよい。
（１）マルチコア並列化を施すループを検出する。
（２）（１）で検出したループの直前に、並列実行を開始するためのプログラムコード（命令）を挿入する。
（３）（１）で検出したループの直後に、並列実行を終了するためのプログラムコード（命令）を挿入する。
【０１３３】
また、変更部１０７は、例えば、最適化箇所検出部１０６が具備する各手段において、以下のような処理が行われた場合に、最終的に決定手段１０６６が決定した最適化箇所に対して、マルチコア並列化を施してもよい。
（１）最適化箇所候補検出手段１０６１が、最適化箇所候補を検出する。
（２）（１）で検出された最適化箇所候補から、静的解析手段１０６２が、ループ不変値と、誘導変数とを取得し、これらの情報を用いて、当該最適化箇所候補において配列に対するメモリストアが行われているか否かを判断し、行われていると判断する。
（３）（２）で行われていると判断された最適化箇所候補に対して、プロファイルプログラム生成手段１０６３が、ループ回数と、ポインタがオーバーラップするか否かを示す情報を取得するためのプロファイルコードを挿入し、プロファイルプログラムを生成する。
（４）（３）で生成されたプロファイルプログラムを、動的解析手段１０６４が実行し、ループ回数と、ポインタがオーバーラップするか否かを示す情報を取得する。
（５）（４）で取得したループ回数と、ポインタがオーバーラップするか否かを示す情報に対して、判断手段１０６５が、ループ回数が閾値以上であると判断し、かつ、ポインタがオーバーラップするか否かを示す情報が、ポインタがオーバーラップしないことを示す情報であると判断する。
（６）（５）で判断した結果に従い、決定手段１０６６が、ループ回数と、ポインタがオーバーラップするか否かを示す情報を取得した最適化箇所候補を、最適化箇所に決定する。
【０１３４】
また、変更部１０７は、決定手段１０６６が最適化箇所に決定した最適化箇所に対して、ＳＩＭＤ化を施し、最適化されたアセンブリプログラムを取得してもよい。
【０１３５】
ここで、ＳＩＭＤ化とは、１つの命令で１つのデータに対する処理を行う１以上のアセンブリプログラム命令を、１つの命令で複数データに対する処理を同時に行うことができるアセンブリプログラム命令に変更することである。具体的には、例えば、４バイトの変数に値を代入する４つの同一の命令を、１６バイトのレジスタを用いて４つの４バイトの変数に対して同時に値を代入する命令に置換することなどである。
【０１３６】
また、ＳＩＭＤ化において１つの命令に置換する命令の数を統合数と呼ぶこととすると、当該統合数は、予め決められていてもよいし、そうでなくてもよい。予め決められている場合は、当該統合数は、任意の記憶領域に格納されていてもよい。予め決められていない場合は、当該統合数は、例えば、プロセッサ数や、変数の型のサイズ（ビット数やバイト数）を基に算出した数などであってもよい。予め決められていない場合の統合数は、変更部１０７が取得してもよい。
【０１３７】
また、ＳＩＭＤ化は、例えば、以下のような処理である。
（１）ＳＩＭＤ化を施すループを検出する。
（２）ＳＩＭＤ化により置換する命令が扱えるバイト数を取得する。
（３）統合数ｎを取得する。
（４）（２）で取得したバイト数を統合数ｎで割った値を取得する。
（５）（１）で検出したループにおいて、（４）で取得した値をバイト数とする変数に値を代入する処理を行うプログラムコードを、ｎ以下を１組にして取得する。
（６）（５）で取得したｎ個のプログラムコードが処理を行うｎ個の変数の間に依存関係が存在しない場合に、ｎ個の変数に対して動じに値を代入する処理を行うプログラムコードを生成する。
（７）（５）で取得したプログラムコードに該当する箇所を削除する。
（８）（７）で削除した箇所のうち、１番目のプログラムコードに該当する箇所に、（６）で生成したプログラムコードを挿入する。
【０１３８】
また、変更部１０７は、例えば、最適化箇所検出部１０６が具備する各手段において、以下のような処理が行われた場合に、最終的に決定手段１０６６が決定した最適化箇所に対して、ＳＩＭＤ化を施してもよい。
（１）最適化箇所候補検出手段１０６１が、最適化箇所候補を検出する。
（２）（１）で検出された最適化箇所候補から、静的解析手段１０６２が、変数名を取得し、これらの情報を用いて、当該最適化箇所候補において変数間の依存関係が存在するか否かを判断し、存在していないと判断する。
（３）（２）で存在していないと判断された最適化箇所候補に対して、プロファイルプログラム生成手段１０６３が、ループ回数と、ポインタがオーバーラップするか否かを示す情報を取得するためのプロファイルコードを挿入し、プロファイルプログラムを生成する。
（４）（３）で生成されたプロファイルプログラムを、動的解析手段１０６４が実行し、ループ回数と、ポインタがオーバーラップするか否かを示す情報を取得する。
（５）（４）で取得したループ回数と、ポインタがオーバーラップするか否かを示す情報に対して、判断手段１０６５が、ループ回数が閾値以上であると判断し、かつ、ポインタがオーバーラップするか否かを示す情報が、ポインタがオーバーラップしないことを示す情報であると判断する。
（６）（５）で判断した結果に従い、決定手段１０６６が、ループ回数と、ポインタがオーバーラップするか否かを示す情報を取得した最適化箇所候補を、最適化箇所に決定する。
【０１３９】
また、変更部１０７は、最適化箇所検出部１０６が、最適化箇所を検出する際に用いた最適化箇所検出情報に対応する変更情報を、最適化情報格納部１０２から取得し、当該変更情報で最適化箇所を置換し、最適化されたプログラムを取得してもよい。
【０１４０】
ここで、変更情報で最適化箇所を変更とは、変更情報で、最適化箇所を置換することである。つまり、例えば、最適化検出情報が「ＭＯＶＥ」という命令であり、変更情報が「ＳＭＯＶＥ」という命令である場合、「ＭＯＶＥ」を「ＳＭＯＶＥ」に置換することである。
【０１４１】
また、変更部１０７は、最適化箇所を検出する際に用いた最適化箇所検出情報に応じて、最適化箇所を変更してもよい。例えば、最適化箇所検出情報が、マルチコア並列化を施す箇所を検出するための情報である場合は、変更部１０７は、当該最適化箇所検出情報により検出された最適化箇所に対して、当該最適化箇所検出情報に対応した変更情報を用いてマルチコア並列化を施す。また、例えば、最適化箇所検出情報が、ＳＩＭＤ化を施す箇所を検出するための情報である場合は、変更部１０７は、当該最適化箇所検出情報により検出された最適化箇所に対して、当該最適化箇所検出情報に対応した変更情報を用いてＳＩＭＤ並列化を施す。また、例えば、最適化箇所検出情報が、置換を行う箇所を検出するための情報である場合は、変更部１０７は、当該最適化箇所検出情報により検出された最適化箇所を、当該最適化箇所検出情報に対応した変更情報に置換する。
【０１４２】
また、変更部１０７は、最適化箇所検出情報に対応する変更情報に応じて、最適化箇所を変更してもよい。例えば、変更情報がマルチコア並列化を行うための方法を示す情報である場合は、変更部１０７は、検出された最適化箇所に対して、当該変更情報を用いてマルチコア並列化を施す。また、例えば、変更情報がＳＩＭＤ化を行うための方法を示す情報である場合は、変更部１０７は、検出された最適化箇所に対して、当該変更情報を用いてＳＩＭＤ化を施す。また、例えば、変更情報が置換を行うための情報である場合は、変更部１０７は、検出された最適化箇所を、当該変更情報に置換する。
【０１４３】
また、例えば、最適化箇所情報が最適化箇所に対する変更の方法を示す変更方法情報を含んでいる場合は、当該変更方法情報に応じて、最適化箇所を変更してもよい。例えば、変更方法情報が、マルチコア並列化を施すことを示す情報である場合は、変更部１０７は、検出された最適化箇所に対して、変更情報を用いてマルチコア並列化を施す。また、例えば、変更情報に対応する変更方法情報が、ＳＩＭＤ化を施すことを示す情報である場合は、変更部１０７は、検出された最適化箇所に対して、変更情報を用いてＳＩＭＤ化を施す。また、例えば、変更情報に対応する変更方法情報が、置換を行うことを示す情報である場合は、変更部１０７は、検出された最適化箇所を、変更情報に置換する。
【０１４４】
変更部１０７は、通常、ＭＰＵやメモリ等から実現され得る。変更部１０７の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現してもよい。
【０１４５】
実行部１０８は、最適化されたアセンブリプログラムを実行する。
【０１４６】
ここで、アセンブリプログラムの実行は、通常、アセンブリプログラムを機械語に変換後、実行する。また、アセンブリプログラムの実行は、アセンブリプログラムを機械語に変換するプログラムであるアセンブラを用いて、アセンブリプログラムを機械語に変換後、実行してもよい。この場合、アセンブラは、例えば、実行部１０８が保持していてもよいし、そうでなくてもよい。そうでない場合は、アセンブラは、任意の記憶領域に格納されていてもよい。
【０１４７】
実行部１０８は、通常、ＭＰＵやメモリ等から実現され得る。実行部１０８の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現してもよい。
【０１４８】
次に、実行モジュール最適化装置１の動作について説明する。
【０１４９】
図７は、実行モジュール最適化装置１の全体動作を示すフローチャートである。
【０１５０】
（ステップＳ７０１）受付部１０４は、実行モジュール識別子を有する指示を受け付けたか否かを判断する。受け付けた場合は、ステップＳ７０２に進み、そうでない場合は、ステップＳ７０１に戻る。
【０１５１】
（ステップＳ７０２）逆アセンブル部１０５は、実行モジュール格納部１０１に格納されている実行モジュールを取得する。ここで取得する実行モジュールは、ステップＳ７０１で受付部１０４が受け付けた指示に含まれる実行モジュール識別子で識別される実行モジュールである。
【０１５２】
（ステップＳ７０３）逆アセンブル部１０５は、ステップＳ７０２で取得した実行モジュールを、逆アセンブルし、アセンブリプログラムを取得する。
【０１５３】
（ステップＳ７０４）最適化箇所検出部１０６は、ステップS７０３で逆アセンブル部１０５が取得したアセンブリプログラムから、最適化箇所を検出する。この処理の詳細については、図８のフローチャートを用いて説明する。
【０１５４】
（ステップＳ７０５）変更部１０７は、当該最適化箇所を変更し、最適化されたアセンブリプログラムを取得する。この処理の詳細については、図１４のフローチャートを用いて説明する。
【０１５５】
（ステップＳ７０６）実行部１０８は、変更部１０７が取得したアセンブリプログラムを実行する。
【０１５６】
図８は、図７のフローチャートのステップＳ３０４の最適化箇所の検出処理を示すフローチャートである。
【０１５７】
（ステップＳ８０１）最適化箇所候補検出手段１０６１は、ステップＳ７０３で逆アセンブル部１０５が取得したアセンブリプログラムを取得する。
【０１５８】
（ステップＳ８０２）最適化箇所候補検出手段１０６１は、最適化情報格納部１０２に格納されている最適化情報を取得する。ここで、ｍ個の最適化情報が取得できたものとする。
【０１５９】
（ステップＳ８０３）最適化箇所候補検出手段１０６１は、カウンタｉに１をセットする。
【０１６０】
（ステップＳ８０４）最適化箇所候補検出手段１０６１は、ステップＳ８０１で取得したアセンブリプログラムから、ｉ番目の最適化箇所検出情報（以下、最適化箇所検出情報［ｉ］）にマッチする箇所を検出する。ここで、ｎ個のマッチする箇所が検出できたものとする。この処理の詳細については、図９のフローチャートを用いて説明する。
【０１６１】
（ステップＳ８０５）最適化箇所候補検出手段１０６１は、ｉがｍであるか否かを判断する。ｍである場合は、ステップＳ８０７に進み、そうでない場合は、ステップＳ８０６に進む。
【０１６２】
（ステップＳ８０６）最適化箇所候補検出手段１０６１は、カウンタｉを１インクリメントし、ステップＳ８０４に戻る。
【０１６３】
（ステップＳ８０７）最適化箇所候補検出手段１０６１は、カウンタｉに１をセットする。
【０１６４】
（ステップＳ８０８）最適化箇所候補検出手段１０６１は、カウンタｊに０をセットする。
【０１６５】
（ステップＳ８０９）最適化箇所候補検出手段１０６１は、カウンタｋに０をセットする。
【０１６６】
（ステップＳ８１０）最適化箇所候補検出手段１０６１は、ステップＳ８０４で検出したマッチする箇所のうち、ｉ番目のマッチする箇所（以下、マッチする箇所［ｉ］）がループであるか否かを判断する。ループである場合は、ステップＳ８１１に進み、そうでない場合は、ステップＳ８１３に進む。
【０１６７】
（ステップＳ８１１）最適化箇所候補検出手段１０６１は、ｊを１インクリメントする。
【０１６８】
（ステップＳ８１２）最適化箇所候補検出手段１０６１は、ｊ番目のループとして、マッチする箇所［ｉ］を任意の記憶領域に蓄積する。
【０１６９】
（ステップＳ８１３）最適化箇所候補検出手段１０６１は、ｋを１インクリメントする。
【０１７０】
（ステップＳ８１４）最適化箇所候補検出手段１０６１は、ｋ番目の最適化箇所として、マッチする箇所［ｉ］を任意の記憶領域に蓄積する。
【０１７１】
（ステップＳ８１５）最適化箇所候補検出手段１０６１は、ｉがｎであるか否かを判断する。ｎである場合は、ステップＳ８１７に進み、そうでない場合は、ステップＳ８１６に進む。
【０１７２】
（ステップＳ８１６）最適化箇所候補検出手段１０６１は、ｉを１インクリメントし、ステップＳ８１０に戻る。
【０１７３】
（ステップＳ８１７）最適化箇所候補検出手段１０６１は、ステップＳ８１２で蓄積したループから、最適化箇所を検出し、上位処理にリターンする。この処理の詳細については、図１０のフローチャートを用いて説明する。
【０１７４】
図９は、図８のフローチャートのステップＳ８０４の最適化箇所情報にマッチする箇所の検出処理を示すフローチャートである。
【０１７５】
（ステップＳ９０１）最適化箇所候補検出手段１０６１は、カウンタｉに１をセットする。
【０１７６】
（ステップＳ９０２）最適化箇所候補検出手段１０６１は、ｉが、アセンブリプログラムの行数ｎから最適化箇所検出情報の行数ｍを引いた値よりも大きいか否かを判断する。大きい場合は、上位処理にリターンし、そうでない場合は、ステップＳ９０３に進む。
【０１７７】
（ステップＳ９０３）最適化箇所候補検出手段１０６１は、アセンブリプログラム中のｉ行目のコード（以下、コード［ｉ］）と、最適化箇所検出情報中の１行目のコードパターン（以下、コードパターン［１］）とを比較し、当該コードが当該コードパターンに一致するか否かを判断する。一致する場合は、ステップＳ９０５に進み、そうでない場合は、ステップＳ９０４に進む。
【０１７８】
（ステップＳ９０４）最適化箇所候補検出手段１０６１は、ｉを１インクリメントし、ステップＳ９０２に戻る。
【０１７９】
（ステップＳ９０５）最適化箇所候補検出手段１０６１は、マッチする箇所の開始位置ｓｔａｒｔにｉをセットする。
【０１８０】
（ステップＳ９０６）最適化箇所候補検出手段１０６１は、フラグｆｌａｇにｆａｌｓｅをセットする。
【０１８１】
（ステップＳ９０７）最適化箇所候補検出手段１０６１は、カウンタｊに１をセットする。
【０１８２】
（ステップＳ９０８）最適化箇所候補検出手段１０６１は、コード［ｓｔａｒｔ＋ｊ−１］とコードパターン［ｊ］とを比較し、当該コードが当該コードパターンに一致するか否かを判断する。一致する場合は、ステップＳ９０９に進み、そうでない場合は、ステップＳ９１０に進む。
【０１８３】
（ステップＳ９０９）最適化箇所候補検出手段１０６１は、ｆｌａｇにｔｒｕｅをセットし、ステップＳ９１１に進む。
【０１８４】
（ステップＳ９１０）最適化箇所候補検出手段１０６１は、ｆｌａｇにｆａｌｓｅをセットし、ステップＳ９１１に進む。
【０１８５】
（ステップＳ９１１）最適化箇所候補検出手段１０６１は、ｊがｍであるか否かを判断する。ｍである場合は、ステップＳ９１３に進み、そうでない場合は、ステップＳ９１２に進む。
【０１８６】
（ステップＳ９１２）最適化箇所候補検出手段１０６１は、ｊを１インクリメントし、ステップＳ９０８に戻る。
【０１８７】
（ステップＳ９１３）最適化箇所候補検出手段１０６１は、ｆｌａｇがｔｕｒｅであるか否かを判断する。ｔｒｕｅである場合は、ステップＳ９１５に進み、そうでない場合は、ステップＳ９１４に進む。
【０１８８】
（ステップＳ９１４）最適化箇所候補検出手段１０６１は、ｉにｓｔａｒｔ＋１をセットし、ステップＳ９０２に戻る。
【０１８９】
（ステップＳ９１５）最適化箇所候補検出手段１０６１は、マッチする箇所の終了位置ｅｎｄにｓｔａｒｔ＋ｍ−１をセットする。
【０１９０】
（ステップＳ９１６）最適化箇所候補検出手段１０６１は、カウンタｋに既に検出したマッチする箇所の数＋１をセットする。
【０１９１】
（ステップＳ９１７）最適化箇所候補検出手段１０６１は、ｋ番目のマッチする箇所として、ｓｔａｒｔとｅｎｄを任意の記憶領域に蓄積する。
【０１９２】
図１０は、図８のフローチャートのステップＳ８１７のループからの最適化箇所の検出処理を示すフローチャートである。
【０１９３】
（ステップＳ１００１）最適化箇所候補検出手段１０６１は、プロファイラを用いた最適化箇所候補の検出を行うか否かを判断する。行う場合はステップＳ１００２に進み、そうでない場合は、ステップＳ１００３に進む。
【０１９４】
（ステップＳ１００２）最適化箇所候補検出手段１０６１は、プロファイラを用いて、最適箇所候補を検出する。ここで、ｍ個の最適化箇所候補が検出できたものとする。この処理の詳細については、図１１のフローチャートを用いて説明する。
【０１９５】
（ステップＳ１００３）最適化箇所候補検出手段１０６１は、制御フローグラフを用いて、最適化箇所候補を検出する。ここで、ｍ個の最適化箇所候補が検出できたものとする。この処理の詳細については、図１２のフローチャートを用いて説明する。
【０１９６】
（ステップＳ１００４）静的解析手段１０６２は、ステップＳ１００２、またはステップＳ１００３で最適化箇所候補検出手段１０６１が検出した各最適化箇所候補に対して静的解析を行い、最適化箇所候補を決定する。
【０１９７】
（ステップＳ１００５）プロファイルプログラム生成手段１０６３は、ステップＳ１００４で決定した各最適化箇所候補の前にアセンブリプログラム命令列を挿入し、プロファイルプログラムを生成する。
【０１９８】
（ステップＳ１００６）動的解析手段１０６４は、ステップＳ１００５で生成したプロファイルプログラムを実行し、動的解析を行い、パラメータを取得する。
【０１９９】
（ステップＳ１００７）判断手段１０６５は、カウンタｉに１をセットする。
【０２００】
（ステップＳ１００８）決定手段１０６６は、カウンタｊに既に検出した最適化箇所の数をセットする。
【０２０１】
（ステップＳ１００９）判断手段１０６５は、ステップＳ１００６で取得できたパラメータが、予め決められた条件に合致するか否かを判断することで、ｉ番目の最適化箇所候補（以下、最適化箇所候補［ｉ］）が最適化箇所か否かを判断する。予め決められた条件に合致し、最適化箇所である場合は、ステップＳ１０１０に進み、そうでない場合は、ステップＳ１０１２に進む。
【０２０２】
（ステップＳ１０１０）決定手段１０６６は、ｊを１インクリメントする。
【０２０３】
（ステップＳ１０１１）決定手段１０６６は、ｊ番目の最適化箇所として、最適化箇所候補［ｉ］を任意の記憶領域に蓄積する。
【０２０４】
（ステップＳ１０１２）判断手段１０６５は、ｉがｍであるか否かを判断する。ｍである場合は、上位処理にリターンし、そうでない場合は、ステップＳ１０１３に進む。
【０２０５】
（ステップＳ１０１３）判断手段１０６５は、ｉを１インクリメントし、ステップＳ１００９に戻る。
【０２０６】
図１１は、図１０のフローチャートのステップＳ１００２のプロファイラを用いた最適化箇所の検出処理を示すフローチャートである。
【０２０７】
（ステップＳ１１０１）最適化箇所候補検出手段１０６１は、プロファイラ格納部１０３に格納されているプロファイラを取得する。
【０２０８】
（ステップＳ１１０２）最適化箇所候補検出手段１０６１は、ステップＳ８０１で取得したアセンブリプログラムに対し、ステップＳ１１０２で取得したプロファイラを実行し、プロファイル情報を取得する。
【０２０９】
（ステップＳ１１０３）最適化箇所候補検出手段１０６１は、プロファイル情報中の負荷が閾値を超えているか否かを判断するための閾値を、任意の記憶領域から取得する。
【０２１０】
（ステップＳ１１０４）最適化箇所候補検出手段１０６１は、カウンタｉに１をセットする。
【０２１１】
（ステップＳ１１０５）最適化箇所候補検出手段１０６１は、カウンタｊに０をセットする。
【０２１２】
（ステップＳ１１０６）最適化箇所候補検出手段１０６１は、ステップＳ１１０２で取得したプロファイル情報中の、ステップＳ８１２で取得したｉ番目のループ（以下、ループ［ｉ］）に対応する負荷を取得し、当該負荷がステップＳ１１０３で取得した閾値より大きいか否かを判断する。大きい場合は、ステップＳ１１０７に進み、そうでない場合は、ステップＳ１１０９に進む。
【０２１３】
（ステップＳ１１０７）最適化箇所候補検出手段１０６１は、ｊを１インクリメントする。
【０２１４】
（ステップＳ１１０８）最適化箇所候補検出手段１０６１は、ｊ番目の最適化箇所候補として、ループ［ｉ］を任意の記憶領域に蓄積する。
【０２１５】
（ステップＳ１１０９）最適化箇所候補検出手段１０６１は、ｉがステップＳ８１２で取得したループの数ｎであるか否かを判断する。ｎである場合は、上位処理にリターンし、そうでない場合は、ステップＳ１１１０に進む。
【０２１６】
（ステップＳ１１１０）最適化箇所候補検出手段１０６１は、ｉを１インクリメントし、ステップＳ１１０５に戻る。
【０２１７】
図１２は、図１０のフローチャートのステップＳ１００３の制御フローグラフを用いた最適化箇所の検出処理を示すフローチャートである。
【０２１８】
（ステップＳ１２０１）最適化箇所候補検出手段１０６１は、ステップＳ８０１で取得したアセンブリプログラムから、制御フローグラフを作成する。この処理の詳細については、図１３のフローチャートを用いて説明する。
【０２１９】
（ステップＳ１２０２）最適化箇所候補検出手段１０６１は、ステップＳ１２０１で作成した制御フローグラフについて、各ノード間の支配関係を解析し、当該解析結果を取得する。
【０２２０】
（ステップＳ１２０３）最適化箇所候補検出手段１０６１は、カウンタｉに１をセットする。
【０２２１】
（ステップＳ１２０４）最適化箇所候補検出手段１０６１は、カウンタｊに０をセットする。
【０２２２】
（ステップＳ１２０５）最適化箇所候補検出手段１０６１は、ステップＳ１２０２で取得した支配関係を基に、ステップＳ８１２で取得したｉ番目のループ（以下、ループ［ｉ］）が支配ループであるか否かを判断する。支配ループである場合は、ステップＳ１２０６に進み、そうでない場合は、ステップＳ１２０８に進む。
【０２２３】
（ステップＳ１２０６）最適化箇所候補検出手段１０６１は、ｊを１インクリメントする。
【０２２４】
（ステップＳ１２０７）最適化箇所候補検出手段１０６１は、ｊ番目の最適化箇所候補として、ループ［ｉ］を任意の記憶領域に蓄積する。
【０２２５】
（ステップＳ１２０８）最適化箇所候補検出手段１０６１は、ｉがステップＳ８１２で取得したループの数ｎであるか否かを判断する。ｎである場合は、上位処理にリターンし、そうでない場合は、ステップＳ１２０９に進む。
【０２２６】
（ステップＳ１２０９）最適化箇所候補検出手段１０６１は、ｉを１インクリメントし、ステップＳ１２０４に戻る。
【０２２７】
図１３は、図１２のフローチャートのステップＳ１２０１の制御フローグラフの作成処理を示すフローチャートである。
【０２２８】
（ステップＳ１３０１）最適化箇所候補検出手段１０６１は、カウンタｎに０をセットする。
【０２２９】
（ステップＳ１３０２）最適化箇所候補検出手段１０６１は、カウンタｉに１をセットする。
【０２３０】
（ステップＳ１３０３）最適化箇所候補検出手段１０６１は、カウンタｊにｉ＋１をセットする。
【０２３１】
（ステップＳ１３０４）最適化箇所候補検出手段１０６１は、ステップＳ８０１で取得したアセンブリプログラムのｉ行目のコード中の命令（以下、命令［ｉ］）の直後に、当該アセンブリプログラムの命令［ｊ］が実行されるか否かを判断する。実行される場合は、ステップＳ１３０５に進み、そうでない場合は、ステップＳ１３０７に進む。なお、この判断は、通常、命令［ｊ］が命令［ｉ］の次の行であれば、命令［ｊ］は命令［ｉ］の直後に実行されると判断する。また、例えば、命令［ｉ］がジャンプ命令などの分岐命令である場合であって、命令［ｉ］による分岐先の直後に命令［ｊ］が実行されるのであれば、命令［ｊ］は命令［ｉ］の直後に実行されると判断する。
【０２３２】
（ステップＳ１３０５）最適化箇所候補検出手段１０６１は、ｎを１インクリメントする。
【０２３３】
（ステップＳ１３０６）最適化箇所候補検出手段１０６１は、ｎ番目のノードセットとして、命令［ｉ］と命令［ｊ］を任意の記憶領域に蓄積する。
【０２３４】
（ステップＳ１３０７）最適化箇所候補検出手段１０６１は、ｊがステップＳ８０１で取得したアセンブリプログラムの行数ｍであるか否かを判断する。ｍである場合は、ステップＳ１３０９に進み、そうでない場合は、ステップＳ１３０８に進む。
【０２３５】
（ステップＳ１３０８）最適化箇所候補検出手段１０６１は、ｊを１インクリメントし、ステップＳ１３０４に戻る。
【０２３６】
（ステップＳ１３０９）最適化箇所候補検出手段１０６１は、ｉがｍ−１であるか否かを判断する。ｍ−１である場合は、上位処理にリターンし、そうでない場合は、ステップＳ１３１０に進む。
【０２３７】
（ステップＳ１３１０）最適化箇所候補検出手段１０６１は、ｉを１インクリメントし、ステップＳ１３０３に戻る。
【０２３８】
図１４は、図７のフローチャートのステップＳ７０５の最適化箇所の変更処理を示すフローチャートである。
【０２３９】
（ステップＳ１４０１）変更部１０７は、任意の記憶領域に蓄積されている最適化箇所を取得する。
【０２４０】
（ステップＳ１４０２）変更部１０７は、カウンタｉに１をセットする。
【０２４１】
（ステップＳ１４０３）変更部１０７は、ｉ番目の最適化箇所（以下、最適化箇所［ｉ］）を検出した際に使用した最適化箇所検出情報に対応する変更情報を、最適化情報格納部１０２から取得する。
【０２４２】
（ステップＳ１４０４）変更部１０７は、ステップＳ１４０３で取得した変更情報を基に最適化箇所［ｉ］を変更し、上位処理にリターンする。
【０２４３】
なお、図１０のフローチャートにおいて、ステップＳ１００１の判断を行わず、ステップＳ１００２とステップＳ１００３の最適化箇所候補の検出処理を行い、当該両処理において検出された最適化箇所候補を比較し、重複する最適化箇所候補を、改めて最適化箇所候補として検出してもよい。
【０２４４】
次に、実行モジュール最適化装置１の動作の具体例について説明する。
【０２４５】
本具体例において、最適化情報格納部１０２には、図１５の最適化情報が格納されているものとする。
【０２４６】
図１５の最適化情報において、１番目と２番目の最適化箇所検出情報は、プログラムパターンである。また、当該最適化情報において、３番目から５番目までの最適化箇所検出情報は、関数である。
【０２４７】
また、図１５の最適化情報において、１番目の変更情報は、マルチコア並列化を施すためのプログラムパターンであり、２番目の変更情報は、ＳＩＭＤ化を施すためのプログラムパターンである。また、当該最適化情報において、３番目から５番目までの変更情報は、関数である。
【０２４８】
また、図１５の最適化箇所検出情報において、「＜ｌａｂｅｌ＞」は、任意の文字列を示すパターンであり、「＜．．．＞」は、任意のプログラムコードを示すパターンである。また、図１５において、「＜ｖａｒ＞」や「＜ｖａｒ１＞」、「＜ｖａｒ２＞」などは、任意の文字列（変数）を示すパターンであり、「＜ｃｏｕｎｔ＞」は、任意の数値を示すパターンである。
【０２４９】
また、図１５の変更情報において、「＄ｃｏｄｅ」は、プログラムパターンである最適化箇所検出情報により検出された最適化箇所に対応するプログラムコードを示す変数であり、「＄ｌａｂｅｌ」は、「＜ｌａｂｅｌ＞」のパターンに合致した文字列を示す変数である。また、図１５の変更情報において、「＄ｖａｒ」や「＄ｖａｒ１」、「＄ｖａｒ２」などは、「＜ｖａｒ＞」や「＜ｖａｒ１＞」、「＜ｖａｒ２＞」などのパターンに合致した文字列（変数）を示すパターンであり、「＄ｃｏｕｎｔ」は、「＜ｃｏｕｎｔ＞」のパターンに合致した数値を示す変数である。
【０２５０】
また、最適化箇所候補検出手段１０６１は、検出したループのうち、マルチコア並列化を施す対象となり得るループについては、プロファイラを用いて、最適化箇所候補となり得るか否かを判断し、当該ループを最適化箇所候補として検出するものとする。また、最適化箇所候補検出手段１０６１は、検出したループのうち、ＳＩＭＤ化を施す対象となり得るループについては、制御フローグラフを用いて、最適化箇所候補となり得るか否かを判断し、当該ループを最適化箇所候補として検出するものとする。また、決定手段１０６６が最適化箇所を決定する際に、判断手段１０６５においてパラメータを判断する際の条件は、「ループ回数が１００以上」かつ「ポインタがオーバーラップしていないこと」であるものとする。
【０２５１】
まず、ユーザは、最適化を行いたい実行モジュールを、マウスを用いて、実行モジュール最適化装置１の上にドラッグ＆ドロップする。すると、受付部１０４は、実行モジュール識別子を有する実行モジュールを実行する旨の指示を受け付ける。
【０２５２】
次に、逆アセンブル部１０５は、受付部１０４が受け付けた指示に含まれる実行モジュール識別子で識別される実行モジュールを、実行モジュール格納部１０１から取得する。そして、逆アセンブル部１０５は、当該実行モジュールを逆アセンブルし、図１６のアセンブリプログラムを取得したものとする。
【０２５３】
次に、最適化箇所候補検出手段１０６１は、図１５の最適化情報を取得し、当該最適化情報に含まれる最適化箇所検出情報にマッチする箇所を、図１６のアセンブリプログラムから検出する。その結果、１番目の最適化箇所検出情報にマッチする箇所として、８行目から１５行目、２番目の最適化箇所検出情報にマッチする箇所として、１８行目から３１行目、３番目の最適化箇所検出情報にマッチする箇所として、３９行目を検出したものとする。
【０２５４】
次に、最適化箇所候補検出手段１０６１は、検出した各最適化箇所検出情報にマッチする箇所がループであるか否かを判断し、図１６の８行目から１５行目と、１８行目から３１行目についてはループであると判断し、３９行目についてはループでないと判断する。この結果、最適化箇所検出手段１０６１は、３９行目を最適化箇所として任意の記憶領域に蓄積する。また、ループであると判断した箇所のうち、８行目から１５行目を第一ループとし、１８行目から３１行目を第二ループとする。
【０２５５】
次に、最適化箇所候補検出手段１０６１は、図１５の変更情報から判断し、第一ループについて、プロファイラを用いて第一ループ内の各命令の負荷を取得し、負荷が閾値以上である命令を有すると判断し、第一ループを最適化箇所候補として検出する。
【０２５６】
次に、最適化箇所候補検出手段１０６１は、図１５の変更情報から判断し、第二ループについて、制御フローグラフを作成し、各ノード間の支配関係を解析し、第二ループが支配ループであると判断し、第二ループを最適化箇所候補として検出する。
【０２５７】
次に、静的解析手段１０６２は、最適化箇所候補検出手段１０６１が検出した各最適化箇所候補に対して、静的解析を行う。静的解析手段１０６２は、第一ループについては、ループ不変値と、配列にアクセスするための誘導変数とを取得し、これらの値から、配列に対するメモリストアが行われていると判断し、第一ループを最適化箇所候補に決定する。また、静的解析手段１０６２は、第二ループについては、変数名を取得し、これらの値から、変数間の依存関係が存在しないと判断し、第二ループを最適化箇所候補に決定する。
【０２５８】
次に、プロファイルプログラム生成手段１０６３は、ループ回数とポインタがオーバーラップするか否かを示す情報を収集する命令列を、図１６のアセンブリプログラムにおける第一ループと第二ループの直前に挿入し、図１７のプロファイルプログラムを生成したものとする。図１７において、８行目と２０行目が、ループ回数を取得するための命令であり、９行目と２１行目が、ポインタがオーバーラップするか否かを示す情報を取得するための命令である。
【０２５９】
次に、動的解析手段１０６４は、図１７のプロファイルプログラムを実行し、第一ループ、および第二ループについて、ループ回数である「１００」と、ポインタがオーバーラップしないこと示す情報を取得する。ここで、第一ループについて取得したパラメータを第一パラメータとし、第二ループについて取得したパラメータを第二パラメータとする。
【０２６０】
次に、判断手段１０６５は、第一パラメータと第二パラメータが、最適化箇所であることの条件に合致するか否か判断し、第一パラメータ、第二パラメータ共に、条件に合致すると判断する。
【０２６１】
次に、決定手段１０６６は、第一パラメータと第二パラメータを取得したループである第一ループと第二ループを、最適化箇所に決定する。ここで、第一ループに該当する最適化箇所を、第一最適化箇所とし、第二ループに該当する最適化箇所を、第二最適化箇所とする。また、前述の置換を行う箇所である最適化箇所を、第三最適化箇所とする。
【０２６２】
次に、変更部１０７は、第一最適化箇所に対して、例えば、以下のような処理で、マルチコア並列化を施す。
（１）変更部１０７は、第一最適化箇所に対応する図１６の８行目から１５行目までのプログラムコードを取得する。
（２）変更部１０７は、図１５の１番目の変更情報を取得する。
（３）変更部１０７は、（２）で取得した変更情報中の「＄ｃｏｄｅ」を、（１）で取得したプログラムコードで置換し、変更後のプログラムコードを生成する。
（４）変更部１０７は、第一最適化箇所に対応する図１６の８行目から１５行目までのプログラムコードを、（３）で生成したプログラムコードで置換する。
上記の処理により、第一最適化箇所のアセンブリコードは、図１８に示すものに変更されたものとする。
【０２６３】
また、変更部１０７は、第二最適化箇所に対して、例えば、以下のような処理で、ＳＩＭＤ化を施す。
（１）変更部１０７は、第二最適化箇所に対応する図１６の１８行目から３１行目までのプログラムコードを取得する。
（２）変更部１０７は、（１）で取得したプログラムコードから、図１５の２番目の最適化箇所変更情報中の「＜ｌａｂｅｌ＞」や「＜ｖａｒ＞」などのパターンに合致する文字列、変数を取得する。
（３）変更部１０７は、図１５の２番目の変更情報を取得する。
（４）変更部１０７は、（３）で取得した変更情報中の「＄ｌａｂｅｌ」や「＄ｖａｒ」などを、（２）で取得した文字列、変数で置換し、変更後のプログラムコードを生成する。
（５）変更部１０７は、第二最適化箇所に対応する図１６の１８行目から３１行目までのプログラムコードを、（４）で生成したプログラムコードで置換する。
上記の処理により、第二最適化箇所のアセンブリコードは、図１９に示すものに変更されたものとする。
【０２６４】
また、変更部１０７は、第三最適化箇所に対して、置換を行う。この結果、第三最適化箇所のアセンブリコードは、図２０に示すものに変更されたものとする。
【０２６５】
これらの結果、変更部１０７は、図１３の最適化されたアセンブリコードを取得したものとする。
【０２６６】
最後に、実行部１０８は、図２１のアセンブリプログラムを実行する。
【０２６７】
なお、本実施の形態において、変更部１０７は、アセンブリプログラムを最適化した際に、受付部１０４が受け付けた指示に含まれる実行モジュール識別子と、当該実行モジュール識別子で識別される実行モジュールが既に最適化されたものである旨を示す最適化済情報と、最適化したアセンブリプログラムとを対応付け、任意の蓄積領域に蓄積してもよい。この場合において、受付部１０４は、任意の記憶領域に蓄積されている最適化済情報を基に、受け付けた指示に含まれる実行モジュール識別子で識別される実行モジュールが、最適化済であるか否かを判断してもよい。また、この場合において、受付部１０４が、実行モジュールが最適化済であると判断した場合は、実行モジュール最適化装置１は、逆アセンブル部１０５等による最適化処理を行わず、実行部１０８が、受付部１０４が受け付けた指示に含まれる実行モジュール識別子に対応する最適化済アセンブリプログラムを任意の記憶領域から取得し、当該アセンブリプログラムを実行してもよい。
【０２６８】
また、本実施の形態において、変更部１０７は、アセンブリプログラムを最適化した際に、受付部１０４が受け付けた指示に含まれる実行モジュール識別子と、当該実行モジュール識別子で識別される実行モジュールが既に最適化されたものである旨を示す最適化済情報と、最適化したアセンブリプログラムをアセンブルし、実行モジュールを取得し、当該最適化済実行モジュールとを対応付け、任意の記憶領域に蓄積してもよい。この場合において、受付部１０４は、任意の記憶領域に蓄積されている最適化済情報を基に、受け付けた指示に含まれる実行モジュール識別子で識別される実行モジュールが、最適化済であるか否かを判断してもよい。また、この場合において、受付部１０４が、実行モジュールが最適化済であると判断した場合は、実行モジュール最適化装置１は、逆アセンブル部１０５等による最適化処理を行わず、実行部１０８が、受付部１０４が受け付けた指示に含まれる実行モジュール識別子に対応する最適化済実行モジュールを任意の記憶領域から取得し、当該実行モジュールを実行してもよい。
【０２６９】
また、本実施の形態において、変更部１０７は、アセンブリプログラムを最適化した際に、受付部１０４が受け付けた指示に含まれる実行モジュール識別子と、当該実行モジュール識別子で識別される実行モジュールが既に最適化されたものである旨を示す最適化済情報とを対応付け、任意の記憶領域に蓄積し、最適化したアセンブリプログラムをアセンブルし、実行モジュールを取得し、当該最適化済実行モジュールを、受付部１０４が受け付けた指示に含まれる実行モジュール識別子で識別される実行モジュールと置き換えてもよい。この場合において、受付部１０４は、任意の記憶領域に蓄積されている最適化済情報を基に、受け付けた指示に含まれる実行モジュール識別子で識別される実行モジュールが、最適化済であるか否かを判断してもよい。また、この場合において、受付部１０４が、実行モジュールが最適化済であると判断した場合は、実行モジュール最適化装置１は、逆アセンブル部１０５等による最適化処理を行わず、実行部１０８が、受付部１０４が受け付けた指示に含まれる実行モジュール識別子で識別される実行モジュールを実行してもよい。
【０２７０】
以上、本実施の形態による実行モジュール最適化装置１によれば、実行モジュールからアセンブリコードを取得し、当該アセンブリコードを最適化することができる。
【０２７１】
（実施の形態２）
本実施の形態において、実行モジュールを最適化する実行モジュール最適化装置２について説明する。本実施の形態における実行モジュール最適化装置２は、実施の形態１の実行モジュール最適化装置１とは異なり、最適化されたアセンブリプログラムの実行は行わない。実行モジュール最適化装置２は、アセンブリプログラム、または実行モジュールの最適化のみを行う。
【０２７２】
図２２は、本実施の形態における実行モジュール最適化装置２のブロック図である。
【０２７３】
実行モジュール最適化装置２は、実行モジュール格納部２０１、最適化情報格納部２０２、受付部２０３、逆アセンブル部２０４、最適化箇所検出部２０５、変更部２０６、コンパイル部２０７、蓄積部２０８を備える。
【０２７４】
なお、実行モジュール格納部２０１、最適化情報格納部２０２、受付部２０３、逆アセンブル部２０４、最適化箇所検出部２０５、変更部２０６については、実施の形態１と同様であるので、その説明を省略する。
【０２７５】
コンパイル部２０７は、変更部２０６が取得した最適化されたアセンブリプログラムをコンパイルし、最適化されたの実行モジュールを取得する。
【０２７６】
ここで、コンパイルとは、アセンブリプログラムを、実行モジュールに変換することである。コンパイルは、公知の技術であるので、詳細な説明は省略する。
【０２７７】
また、コンパイル部２０７は、例えば、コンパイルを行うプログラムであるコンパイラを用いて、最適化されたアセンブリプログラムのコンパイル、および当該最適化されたアセンブリプログラムに対応する最適化された実行モジュールを得てもよい。この場合、コンパイラは、例えば、コンパイル部２０７が保持していてもよいし、そうでなくてもよい。そうでない場合は、コンパイラは、任意の記憶領域に格納されていてもよい。
【０２７８】
コンパイル部２０７は、通常、ＭＰＵやメモリ等から実現され得る。コンパイル部２０７の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現してもよい。
【０２７９】
蓄積部２０８は、変更部２０６が取得した最適化されたアセンブリプログラムを、任意の記憶領域に蓄積する。また、蓄積部２０８は、コンパイル部２０７が取得した最適化された実行モジュールを、任意の記憶領域に蓄積してもよい。
【０２８０】
また、蓄積部２０８は、最適化された実行モジュールを、最適化前の実行モジュールに上書きして、蓄積してもよい。
【０２８１】
蓄積部２０８は、通常、ＭＰＵやメモリ等から実現され得る。蓄積部２０８の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現してもよい。
【０２８２】
なお、実行モジュール最適化装置２の最適化処理や、実行モジュール最適化装置２の最適化処理の具体例については、実施の形態１と同様であるので、その説明を省略する。
【０２８３】
以上、本実施の形態による実行モジュール最適化装置２によれば、実行モジュールからアセンブリコードを取得し、当該アセンブリコードを最適化することができる。また、本実施の形態による実行モジュール最適化装置２によれば、実行モジュールを最適化することができる。
【０２８４】
なお、本実施の形態において、変更部２０６は、アセンブリプログラムを最適化した際に、受付部２０３が受け付けた指示に含まれる実行モジュール識別子と、当該実行モジュール識別子で識別される実行モジュールが既に最適化されたものである旨を示す最適化済情報と、最適化したアセンブリプログラムとを対応付け、任意の蓄積領域に蓄積してもよい。この場合において、受付部２０３は、任意の記憶領域に蓄積されている最適化済情報を基に、受け付けた指示に含まれる実行モジュール識別子で識別される実行モジュールが、最適化済であるか否かを判断してもよい。この場合、受付部２０３が、実行モジュールが最適化済であると判断した場合は、実行モジュール最適化装置２は、逆アセンブル部２０４等による最適化処理を行わない。
【０２８５】
また、上記各実施の形態において、一の装置に存在する２以上の通信手段は、物理的に一の媒体で実現されてもよいことは言うまでもない。
【０２８６】
また、上記各実施の形態における実行モジュール最適化装置は、例えば、スタンドアロンの装置であってもよいし、サーバ・クライアントシステムにおけるサーバ装置であってもよい。後者の場合には、例えば、ＡＳＰ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｅｒｖｉｃｅ  Ｐｒｏｖｉｄｅｒ）として実行モジュールの最適化が行われてもよい。
【０２８７】
また、上記各実施の形態において、各処理または各機能は、単一の装置または単一のシステムによって集中処理されることによって実現されてもよいし、あるいは、複数の装置または複数のシステムによって分散処理されることによって実現されてもよい。
【０２８８】
また、上記各実施の形態において、各構成要素は専用のハードウェアにより構成されてもよいし、あるいは、ソフトウェアにより実現可能な構成要素については、プログラムを実行することによって実現されてもよい。例えば、ハードディスクや半導体メモリ等の記録媒体に記録されたソフトウェア・プログラムをＣＰＵ等のプログラム実行部が読み出して実行することによって、各構成要素が実現され得る。
【０２８９】
また、上記各実施の形態における実行モジュール最適化装置を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、記録媒体に、１以上の実行モジュールと、処理の最適化が可能な箇所である最適化箇所を検出するための情報である最適化箇所検出情報と、当該最適化箇所検出情報を用いて検出された最適化箇所を変更するための情報である変更情報とを有する１以上の最適化情報とが格納されており、コンピュータを、実行モジュールを識別する実行モジュール識別子を有する指示を受け付ける受付部と、前記指示に含まれる実行モジュール識別子で識別される実行モジュールを、記録媒体から読み出し、逆アセンブルし、前記実行モジュールに対応するアセンブリプログラムを得る逆アセンブル部と、記録媒体に格納されている１以上の最適化箇所検出情報を用いて、前記アセンブリプログラムから１以上の最適化箇所を検出する最適化箇所検出部と、前記１以上の各最適化箇所に対して、各最適化箇所を検出する際に用いられた最適化箇所検出情報に対応する変更情報を記録媒体から取得し、当該変更情報を用いて前記１以上の最適化箇所を変更し、最適化されたアセンブリプログラム取得する変更部と、前記最適化されたアセンブリプログラムを実行する実行部として機能させるためのプログラムである。
【０２９０】
また、上記プログラムは、サーバなどからダウンロードされることによって実行されてもよいし、所定の記録媒体（例えば、ＣＤ−ＲＯＭなどの光ディスクや磁気ディスク、半導体メモリなど）に記録されたプログラムが読み出されることによって実行されてもよい。また、このプログラムは、プログラムプロダクトを構成するプログラムとして用いられてもよい。
【０２９１】
また、上記プログラムを実行するコンピュータは、単数であってもよいし、複数であってもよい。つまり、集中処理を行ってもよいし、あるいは分散処理を行ってもよい。
【０２９２】
また、図２３は、前述のプログラムを実行して、前述の実施の形態の実行モジュール最適化装置等を実現するコンピュータシステム９の概観図である。前述の実施の形態は、コンピュータハードウェア及びその上で実行されるコンピュータプログラムで実現され得る。
【０２９３】
図２３において、コンピュータシステム９は、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）ドライブ９０１１、ＦＤ（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ）ドライブ９０１２を含むコンピュータ９０１と、キーボード９０２と、マウス９０３と、モニタ９０４とを備える。
【０２９４】
図２４は、コンピュータシステム９のブロック図である。図２４において、コンピュータ９０１は、ＣＤ−ＲＯＭドライブ９０１１、ＦＤドライブ９０１２に加えて、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）９０１３と、ブートアッププログラム等のプログラムを記憶するためのＲＯＭ（Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）９０１４と、ＣＰＵ９０１３に接続され、アプリケーションプログラムの命令を一時的に記憶するとともに一時記憶空間を提供するためのＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９０１５と、アプリケーションプログラム、システムプログラム、及びデータを記憶するためのハードディスク９０１６と、ＣＤ−ＲＯＭドライブ９０１１、ＦＤドライブ９０１２、ＣＰＵ９０１３等を相互に接続するバス９０１７とを備える。ここでは図示しないが、コンピュータ９０１は、さらに、ＬＡＮへの接続を提供するネットワークカードを備えていてもよい。
【０２９５】
コンピュータシステム９に、前述の実施の形態の実行モジュール最適化装置等の機能を実行させるプログラムは、ＣＤ−ＲＯＭ９１０１、またはＦＤ９１０２に記憶されて、ＣＤ−ＲＯＭドライブ９０１１またはＦＤドライブ９０１２に挿入され、さらにハードディスク９０１６に転送されてもよい。これに代えて、プログラムは、図示しないネットワークを介してコンピュータ９０１に送信され、ハードディスク９０１６に記憶されてもよい。プログラムは実行の際にＲＡＭ９０１５にロードされる。プログラムは、ＣＤ−ＲＯＭ９１０１、ＦＤ９１０２またはネットワークから直接、ロードされてもよい。
【０２９６】
プログラムは、コンピュータ９０１に、前述の実施の形態の実行モジュール最適化装置等の機能を実行させるオペレーティングシステム（ＯＳ）、またはサードパーティープログラム等は、必ずしも含まなくてもよい。プログラムは、制御された態様で適切な機能（モジュール）を呼び出し、所望の結果が得られるようにする命令の部分のみを含んでいればよい。コンピュータシステム９がどのように動作するかは周知であり、詳細な説明は省略する。
【０２９７】
本発明は、以上の実施の形態に限定されることなく、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【産業上の利用可能性】
【０２９８】
以上のように、本発明にかかる実行モジュール最適化装置は、ソースコードを変更することなく、実行モジュールの最適化を行うことができる。という効果を有し、実行モジュール最適化装置等として有用である。
【符号の説明】
【０２９９】
１、２  実行モジュール最適化装置
１０１、２０１  実行モジュール格納部
１０２、２０２  最適化情報格納部
１０３  プロファイラ格納部
１０４、２０３  受付部
１０５、２０４  逆アセンブル部
１０６、２０５  最適化箇所検出部
１０７、２０６  変更部
１０８  実行部
２０７  コンパイル部
２０８  蓄積部
１０６１  最適化箇所候補検出手段
１０６２  静的解析手段
１０６３  プロファイルプログラム生成手段
１０６４  動的解析手段
１０６５  判断手段
１０６６  決定手段
【図１】
2013242604.tif 000003
【図２】
2013242604.tif 000004
【図３】
2013242604.tif 000005
【図４】
2013242604.tif 000006
【図５】
2013242604.tif 000007
【図６】
2013242604.tif 000008
【図７】
2013242604.tif 000009
【図８】
2013242604.tif 000010
【図９】
2013242604.tif 000011
【図１０】
2013242604.tif 000012
【図１１】
2013242604.tif 000013
【図１２】
2013242604.tif 000014
【図１３】
2013242604.tif 000015
【図１４】
2013242604.tif 000016
【図１５】
2013242604.tif 000017
【図１６】
2013242604.tif 000018
【図１７】
2013242604.tif 000019
【図１８】
2013242604.tif 000020
【図１９】
2013242604.tif 000021
【図２０】
2013242604.tif 000022
【図２１】
2013242604.tif 000023
【図２２】
2013242604.tif 000024
【図２３】
2013242604.tif 000025
【図２４】
2013242604.tif 000026