(57)【要約】【課題】内ループの性能計測コードが外ループの性能計測に与える影響を少なくすること。【解決手段】判定部４３が、プログラムに含まれるループについて該ループに内ループが含まれるか否かを判定し、内ループが含まれると判定した場合に該ループに内ループ以外の処理が含まれるか否かを判定する。そして、判定部４３により、該ループに内ループ及び内ループ以外の処理が含まれると判定された場合、又は、該ループに内ループが含まれないと判定された場合だけ、設定部４４が、該ループのＴＲＧＴをＯＮに設定する。そして、プロファイリング処理部３２が、ＴＲＧＴがＯＮに設定されたループに対して性能計測コードを追加する。【選択図】図２
2018124975.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
プログラムに含まれるループについて該ループに内ループが含まれるか否かを判定し、
内ループが含まれると判定した場合に前記ループに内ループ以外の処理が含まれるか否かを判定し、
前記ループに内ループ及び内ループ以外の処理が含まれると判定した場合、又は、前記ループに内ループが含まれないと判定した場合に、前記ループの性能計測を行う性能計測処理を追加する
処理を実行させることを特徴とするコンパイルプログラム。
【請求項２】
前記性能計測処理を追加する処理は、性能計測処理を追加することを示すフラグをループに設定し、前記フラグに基づいて性能計測処理を追加することを特徴とする請求項１に記載のコンパイルプログラム。
【請求項３】
外側にループがない全てのループをリストに入れるとともに前記内ループを前記リストに入れる処理を前記コンピュータにさらに実行させ、
前記内ループが含まれるか否かを判定する処理を、前記リストに入れられた各ループについて行うことを特徴とする請求項１又は２に記載のコンパイルプログラム。
【請求項４】
前記ループに内ループが含まれ、内ループ以外の処理が含まれないと判定した場合に、該ループに複数の内ループが含まれるか否かを判定し、
複数の内ループは含まれないと判定した場合に、前記ループの性能計測を行う性能計測処理を追加することを特徴とする請求項１、２又は３に記載のコンパイルプログラム。
【請求項５】
コンピュータが、
プログラムに含まれるループについて該ループに内ループが含まれるか否かを判定し、
内ループが含まれると判定した場合に前記ループに内ループ以外の処理が含まれるか否かを判定し、
前記ループに内ループ及び内ループ以外の処理が含まれると判定した場合、又は、前記ループに内ループが含まれないと判定した場合に、前記ループの性能計測を行う性能計測処理を追加する
処理を実行することを特徴とするコンパイル方法。
【請求項６】
複数の計算機と、該複数の計算機で実行されるプログラムをコンパイルするコンパイル装置を有する並列処理装置において、
前記コンパイル装置は、
前記プログラムに含まれるループについて該ループに内ループが含まれるか否かを判定し、内ループが含まれると判定した場合に前記ループに内ループ以外の処理が含まれるか否かを判定する判定部と、
前記判定部が、前記ループに内ループ及び内ループ以外の処理が含まれると判定した場合、又は、前記ループに内ループが含まれないと判定した場合に、前記ループの性能計測を行う性能計測処理を追加する追加部と
を有することを特徴とする並列処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンパイルプログラム、コンパイル方法及び並列処理装置に関する。
【背景技術】
【０００２】
プログラムの開発では、プログラム中のｆｏｒ文、ｗｈｉｌｅ文、ｄｏ文等のループ処理に関して処理時間を計測し、計測結果に基づいてプログラムのチューニングを行うことがある。特に、ＨＰＣ（High  Performance  Computing）分野では、プログラムの高速化のために、このようなチューニングが行われることが多い。
【０００３】
なお、プログラムの呼び出し関係、制御の分岐、ループ構造等の解析を行い、入力データ数や配列の次元数等の値を変更するとループ回数が変わる可変ループ情報を表示するとともに、動的特性情報と可変データの仮定値をもとに予測実行情報を算出する技術がある。この技術によれば、動的解析時の実行時間を削減することができる。
【０００４】
また、原始プログラムのうちの実行回数の多い部分、あるいは実行回数の多い可能性の高い部分を精度よく選び出してコンパイルすることで、プログラムの実行速度の向上とプログラムを記憶するためのメモリの記憶容量の節減を行う技術がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平５−２４１９１５号公報
【特許文献２】特開２００４−３２６７６０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
プログラムのループ処理に関して性能計測を行う場合、内ループの性能計測コードが外ループの性能計測に影響を与えるという問題がある。図１２は、外ループの性能計測に関する問題を説明するための図である。図１２は、ｆｏｒ文による外ループの中にｆｏｒ文による内ループがある場合を示す。
【０００７】
図１２に示すように、内ループの性能計測を行うコードには、内ループのｆｏｒ文の直前の性能計測開始コードと内ループのｆｏｒ文の直後の性能計測終了コードがある。これらのコードは、外ループのｆｏｒ文に含まれる。したがって、外ループの性能計測値には、内ループの性能計測コードの処理時間が含まれ、内ループの性能計測を行わない場合と比較して外ループの性能計測値が大きくなる。
【０００８】
本発明は、１つの側面では、内ループの性能計測コードが外ループの性能計測に与える影響を少なくすることを目的とする。
【課題を解決するための手段】
【０００９】
１つの態様では、コンパイルプログラムは、プログラムに含まれるループについて該ループに内ループが含まれるか否かを判定し、内ループが含まれると判定した場合に該ループに内ループ以外の処理が含まれるか否かを判定する処理をコンピュータに実行させる。そして、コンパイルプログラムは、該ループに内ループ及び内ループ以外の処理が含まれると判定した場合、又は、該ループに内ループが含まれないと判定した場合に、該ループの性能計測を行う性能計測処理を追加する処理をコンピュータに実行させる。
【発明の効果】
【００１０】
１つの側面では、本発明は、内ループの性能計測コードが外ループの性能計測に与える影響を少なくすることができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施例１に係る並列処理装置の構成を示す図である。
【図２】図２は、コンパイル装置の機能構成を示す図である。
【図３】図３は、ＴＲＧＴを説明するための図である。
【図４】図４は、対象リスト記憶部の一例を示す図である。
【図５】図５は、対象リストの状態変化の一例を示す図である。
【図６】図６は、フラグ設定部による処理のフローを示すフローチャートである。
【図７】図７は、コンパイル装置の効果を説明するための図である。
【図８】図８は、実施例１に係るコンパイルプログラムを実行するコンピュータのハードウェア構成を示す図である。
【図９】図９は、実施例１と実施例２の性能計測コードの挿入箇所の違いを説明するための図である。
【図１０】図１０は、フラグ設定部による１回目の処理のフローを示すフローチャートである。
【図１１】図１１は、フラグ設定部による２回目の処理のフローを示すフローチャートである。
【図１２】図１２は、外ループの性能計測に関する問題を説明するための図である。
【発明を実施するための形態】
【００１２】
以下に、本願の開示するコンパイルプログラム、コンパイル方法及び並列処理装置の実施例を図面に基づいて詳細に説明する。なお、実施例は開示の技術を限定するものではない。
【実施例１】
【００１３】
まず、実施例１に係る並列処理装置の構成について説明する。図１は、実施例１に係る並列処理装置の構成を示す図である。図１に示すように、実施例１に係る並列処理装置１は、複数の計算機２と、コンパイル装置３とを有する。複数の計算機２は１次元配置され、順番にネットワークで接続される。また、各計算機２は、コンパイル装置３とネットワークで接続される。
【００１４】
なお、ここでは説明の便宜上、複数の計算機２が１次元配置される場合を示したが、複数の計算機２は、２次元配置、３次元配置、６次元配置等、より高次元配置されてもよい。また、複数の計算機２は、メッシュ状又はトーラス状に配置される。
【００１５】
計算機２は、ＣＰＵ（Central  Processing  Unit）２１とメモリ２２とを有する。ＣＰＵ２１は、メモリ２２からプログラムを読み出して実行する中央処理装置である。ＣＰＵ２１は、複数のコア２１ａを有するが１つのコア２１ａだけを有してもよい。メモリ２２は、プログラムやプログラムの実行途中結果などを記憶する揮発性記憶デバイスである。
【００１６】
コンパイル装置３は、計算機２で実行されるプログラムをコンパイルして計算機２に送信する。コンパイル装置３は、ユーザがループの性能計測を指定すると、ループの性能計測を行うコードをプログラムに挿入する。
【００１７】
図２は、コンパイル装置３の機能構成を示す図である。図２に示すように、コンパイル装置３は、フラグ設定部３１と、プロファイリング処理部３２と、コンパイル処理部３３とを有する。
【００１８】
フラグ設定部３１は、ＴＲＧＴを設定する。ここで、ＴＲＧＴとは、各ループについて性能計測を行うコードを追加するか否かを示すフラグである。ＴＲＧＴがＯＮである場合には、性能計測を行うコードが追加され、ＴＲＧＴがＯＦＦである場合には、性能計測を行うコードは追加されない。
【００１９】
図３は、ＴＲＧＴを説明するための図である。図３（ａ）は、外ループ内に内ループ以外の処理がある例を示す。図３（ａ）において、ａ＝ｂ＋ｃが外ループ内にある内ループ以外の処理である。図３（ｂ）は、外ループ内に内ループ以外の処理がない例を示す。
【００２０】
図３（ａ）に示すように、外ループ内に内ループ以外の処理がある場合には、フラグ設定部３１は、外ループ及び内ループのＴＲＧＴをＯＮに設定する。一方、外ループ内に内ループ以外の処理がない場合には、図３（ｂ）に示すように、フラグ設定部３１は、内ループのＴＲＧＴをＯＮに設定し、外ループのＴＲＧＴをＯＦＦに設定する。
【００２１】
外ループ内に内ループ以外の処理がない場合には、内ループの処理時間を計測することにより、外ループの処理時間を算出することができる。このため、フラグ設定部３１は、外ループのＴＲＧＴをＯＦＦに設定する。
【００２２】
フラグ設定部３１は、対象リスト記憶部４１と、初期化部４２と、判定部４３と、設定部４４と、対象リスト処理部４５とを有する。
【００２３】
対象リスト記憶部４１は、ＴＲＧＴの設定対象のループのリストである対象リストを記憶する。図４は、対象リスト記憶部４１の一例を示す図である。図４に示すように、対象リスト記憶部４１は、ｆｉｌｅｎａｍｅとｓｔａｒｔとｅｎｄとをループ毎に記憶する。
【００２４】
ｆｉｌｅｎａｍｅは、ループを含むプログラムが格納されるファイルの名前である。ｓｔａｒｔは、ループの開始行アドレスである。ｅｎｄは、ループの終了行アドレスである。例えば、ファイル「ａ．ｃ」に格納されるプログラムには「０ｘ０３」で開始し「０ｘ１０」で終了するループが含まれる。ここで、「０ｘ」は１６進数を表す。
【００２５】
初期化部４２は、ＴＲＧＴの設定に必要な初期化処理を行う。具体的には、初期化部４２は、各ループにＴＲＧＴ＝ＯＦＦを設定する。また、初期化部４２は、外側にループがない全てのループを対象リストに入れる。
【００２６】
判定部４３は、対象リストに含まれる各ループについて、内ループがあるか否かを判定し、内ループがある場合には、内ループ以外の処理があるか否かを判定する。
【００２７】
設定部４４は、判定部４３により、ループｘに内ループがないと判定された場合、あるいは、ループｘに内ループがあって内ループ以外の処理があると判定された場合に、ループｘのＴＲＧＴをＯＮに設定する。なお、ループｘは、対象リストに含まれるループを表す。
【００２８】
対象リスト処理部４５は、ループｘに内ループがある場合に、内ループを対象リストに追加する。また、対象リスト処理部４５は、ループｘに対する処理が終了すると、対象リストからループｘを削除する。
【００２９】
図５は、対象リストの状態変化の一例を示す図である。図５（ａ）は、性能計測の対象となるプログラムを示し、図５（ｂ）は、初期の対象リストの状態を示し、図５（ｃ）は、「０ｘ０３」を開始行とするループを調べ終わったときの対象リストの状態を示す。なお、性能計測の対象となるプログラムは、ファイル「ａ．ｃ」に格納されている。
【００３０】
図５（ａ）に示すように、性能計測の対象となるプログラムには、外側にループのないループとして「０ｘ０３」、「０ｘ０ｂ」及び「０ｘ０ｅ」を開始行とする３つのループがある。したがって、初期の対象リストには、図５（ｂ）に示すように、「０ｘ０３」を開始行、「０ｘ０ａ」を終了行とするループ、「０ｘ０ｂ」を開始行、「０ｘ０ｄ」を終了行とするループ及び「０ｘ０ｅ」を開始行、「０ｘ１０」を終了行とするループが含まれる。
【００３１】
そして、「０ｘ０３」を開始行とするループを調べ終わったときの対象リストには、図５（ｃ）に示すように、「０ｘ０４」を開始行、「０ｘ０６」を終了行とするループ及び「０ｘ０７」を開始行、「０ｘ０９」を終了行とするループが追加されている。また、「０ｘ０３」を開始行とするループは、対象リストから削除されている。
【００３２】
プロファイリング処理部３２は、ループの性能計測を行うコードを追加する。プロファイリング処理部３２は、ＴＲＧＴがＯＮに設定されているループについては性能計測を行うコードを追加し、ＴＲＧＴがＯＦＦに設定されているループについては性能計測を行うコードを追加しない。
【００３３】
コンパイル処理部３３は、プログラムをコンパイルし、オブジェクトコードを生成する。すなわち、コンパイル処理部３３は、語彙解析、構文解析、最適化、コード生成等の処理を行って、オブジェクトコードを生成する。コンパイル処理部３３は、ループの性能計測を行うコードが追加されている場合には、追加されたコードを含めてコンパイルを行う。
【００３４】
次に、フラグ設定部３１による処理のフローについて説明する。図６は、フラグ設定部３１による処理のフローを示すフローチャートである。なお、図６では、全てのＴＲＧＴがＯＦＦに初期設定されているとする。
【００３５】
図６に示すように、フラグ設定部３１は、外側にループがない全てのループを対象リストに入れる（ステップＳ１）。そして、フラグ設定部３１は、対象リストからループを１つ取り出す（ステップＳ２）。ここでは、取り出されたループをループｘとする。また、対象リストにループがない場合には、フラグ設定部３１は、処理を終了する。
【００３６】
そして、フラグ設定部３１は、ループｘに内ループがあるか否かを判定し（ステップＳ３）、ループｘに内ループがない場合には、ループｘのＴＲＧＴをＯＮに設定し（ステップＳ４）、ステップＳ６へ移動する。
【００３７】
一方、ループｘに内ループがある場合には、フラグ設定部３１は、ループｘに内ループ以外の処理があるか否かを判定し（ステップＳ５）、ループｘに内ループ以外の処理がある場合には、ステップＳ４へ移動する。一方、ループｘに内ループ以外の処理がない場合には、フラグ設定部３１は、ステップＳ６へ移動する。
【００３８】
そして、フラグ設定部３１は、ループｘに内ループがあれば、内ループを対象リストに入れ（ステップＳ６）、ループｘを対象リストから削除する（ステップＳ７）。そして、フラグ設定部３１は、ステップＳ２へ戻る。
【００３９】
このように、フラグ設定部３１は、ループｘに内ループがない場合、及び、ループｘに内ループがあって内ループ以外の処理がある場合にだけ、ＴＲＧＴをＯＮに設定することによって、不要な性能計測コードの追加を防ぐことができる。
【００４０】
次に、コンパイル装置３の効果について説明する。図７は、コンパイル装置３の効果を説明するための図である。図７（ａ）は、従来の性能計測コードの追加を示し、図７（ｂ）は、実施例１に係るコンパイル装置３による性能計測コードの追加を示す。また、矢印は、性能計測コードを追加する箇所を示す。
【００４１】
図７（ａ）に示すように、従来は、ｌｏｏｐ＃１〜ｌｏｏｐ＃３の３つのループに対して性能計測コードが追加される。一方、コンパイル装置３は、ｌｏｏｐ＃１及びｌｏｏｐ＃３に対しては性能計測コードを追加するが、ｌｏｏｐ＃２には内ループがあって内ループ以外の処理がないので、ｌｏｏｐ＃２に対しては性能計測コードを追加しない。
【００４２】
上述してきたように、実施例１では、判定部４３が、プログラムに含まれるループについて該ループに内ループが含まれるか否かを判定し、内ループが含まれると判定した場合に該ループに内ループ以外の処理が含まれるか否かを判定する。そして、判定部４３により、該ループに内ループ及び内ループ以外の処理が含まれると判定された場合、又は、該ループに内ループが含まれないと判定された場合にだけ、設定部４４が、該ループのＴＲＧＴをＯＮに設定する。そして、プロファイリング処理部３２が、ＴＲＧＴがＯＮに設定されたループに対して性能計測コードを追加する。したがって、コンパイル装置３は、内ループの性能計測コードが外ループの性能計測に与える影響を少なくすることができる。
【００４３】
また、実施例１では、対象リスト処理部４５が、判定部４３による判定対象のループｘに含まれる内ループを対象リストに追加するので、判定部４３は、入れ子構造の全ループについて、性能計測コードを追加するか否かを判定することができる。
【００４４】
なお、実施例１では、コンパイル装置３について説明したが、コンパイル装置３が有する構成をソフトウェアによって実現することで、同様の機能を有するコンパイルプログラムを得ることができる。そこで、コンパイルプログラムを実行するコンピュータについて説明する。
【００４５】
図８は、実施例１に係るコンパイルプログラムを実行するコンピュータのハードウェア構成を示す図である。図８に示すように、コンピュータ５０は、メインメモリ５１と、ＣＰＵ５２と、ＬＡＮ（Local  Area  Network）インタフェース５３と、ＨＤＤ（Hard  Disk  Drive）５４とを有する。また、コンピュータ５０は、スーパーＩＯ（Input  Output）５５と、ＤＶＩ（Digital  Visual  Interface）５６と、ＯＤＤ（Optical  Disk  Drive）５７とを有する。
【００４６】
メインメモリ５１は、プログラムやプログラムの実行途中結果などを記憶するメモリである。ＣＰＵ５２は、メインメモリ５１からプログラムを読み出して実行する中央処理装置である。ＣＰＵ５２は、メモリコントローラを有するチップセットを含む。
【００４７】
ＬＡＮインタフェース５３は、コンピュータ５０をＬＡＮ経由で他のコンピュータに接続するためのインタフェースである。ＨＤＤ５４は、プログラムやデータを格納するディスク装置であり、スーパーＩＯ５５は、マウスやキーボードなどの入力装置を接続するためのインタフェースである。ＤＶＩ５６は、液晶表示装置を接続するインタフェースであり、ＯＤＤ５７は、ＤＶＤの読み書きを行う装置である。
【００４８】
ＬＡＮインタフェース５３は、ＰＣＩエクスプレス（ＰＣＩｅ）によりＣＰＵ５２に接続され、ＨＤＤ５４及びＯＤＤ５７は、ＳＡＴＡ（Serial  Advanced  Technology  Attachment）によりＣＰＵ５２に接続される。スーパーＩＯ５５は、ＬＰＣ（Low  Pin  Count）によりＣＰＵ５２に接続される。
【００４９】
そして、コンピュータ５０において実行されるコンパイルプログラムは、ＤＶＤに記憶され、ＯＤＤ５７によってＤＶＤから読み出されてコンピュータ５０にインストールされる。あるいは、コンパイルプログラムは、ＬＡＮインタフェース５３を介して接続された他のコンピュータシステムのデータベースなどに記憶され、これらのデータベースから読み出されてコンピュータ５０にインストールされる。そして、インストールされたコンパイルプログラムは、ＨＤＤ５４に記憶され、メインメモリ５１に読み出されてＣＰＵ５２によって実行される。
【００５０】
また、実施例１では、コンパイルの一部としてフラグ設定部３１及びプロファイリング処理部３２が動作する場合について説明したが、本発明はこれに限定されるものではなく、フラグ設定部３１とプロファイリング処理部３２、あるいは、フラグ設定部３１をコンパイルの前処理として動作させてもよい。
【００５１】
また、実施例１では、並列計算機のプログラムの性能計測を行う場合について説明したが、本発明はこれに限定されるものではなく、例えば１つの計算機等の他の計算機のプログラムの性能計測を行う場合にも同様に適用することができる。
【実施例２】
【００５２】
ところで、上記実施例１では、外ループに１つの内ループのみ（タイトループ）の場合、性能計測コードが内ループに対して挿入されるため、性能計測コードが外ループのループ回転数実行され、性能計測のオーバーヘッドが大きい。また、タイトループでは、内ループの処理時間は、外ループの処理時間と外ループの回転数から見積もることが可能である。そこで、実施例２では、タイトループの場合に内ループの代わりに外ループに対して性能計測コードを挿入するコンパイル装置３について説明する。
【００５３】
図９は、実施例１と実施例２の性能計測コードの挿入箇所の違いを説明するための図である。図９では、ｌｏｏｐ＃２は、ｌｏｏｐ＃３を内ループとするタイトループである。実施例１では、コンパイル装置３は、外ループに内ループがあり内ループ以外の処理がないときは、内ループのＴＲＧＴをＯＮとし、外ループのＴＲＧＴをＯＦＦとする。したがって、図９（ａ）に示すように、ｌｏｏｐ＃３に対して性能計測コードが挿入され、ｌｏｏｐ＃２に対しては性能計測コードは挿入されない。
【００５４】
一方、実施例２では、コンパイル装置３は、外ループに内ループがあり内ループ以外の処理がなく、かつ、内ループが複数あるときは、内ループのＴＲＧＴをＯＮとし、外ループのＴＲＧＴをＯＦＦとする。また、コンパイル装置３は、外ループに内ループがあり内ループ以外の処理がなく、かつ、内ループが１つであるときは、内ループのＴＲＧＴをＯＦＦとし、外ループのＴＲＧＴをＯＮとする。したがって、図９（ｂ）に示すように、ｌｏｏｐ＃２に対して性能計測コードが挿入され、ｌｏｏｐ＃３に対しては性能計測コードは挿入されない。
【００５５】
このように、実施例２では、コンパイル装置３は、外ループに内ループがあり内ループ以外の処理がなく、かつ、内ループが１つであるときは、内ループのＴＲＧＴをＯＦＦとし、外ループのＴＲＧＴをＯＮとする。したがって、コンパイル装置３は、性能計測コードが外ループのループ回転数実行されることを防ぎ、性能計測のオーバーヘッドを減らすことができる。
【００５６】
実施例２では、実施例１と比較してフラグ設定部３１による処理だけが異なる。そこで、フラグ設定部３１による処理のフローについて説明する。図１０は、フラグ設定部３１による１回目の処理のフローを示すフローチャートであり、図１１は、フラグ設定部３１による２回目の処理のフローを示すフローチャートである。フラグ設定部３１は、図１０に示す処理を行った後、図１１に示す処理を行う。
【００５７】
図１０に示すように、フラグ設定部３１は、外側にループがない全てのループを対象リストに入れる（ステップＳ１１）。そして、フラグ設定部３１は、対象リストからループを１つ取り出す（ステップＳ１２）。ここでは、取り出されたループをループｘとする。また、対象リストにループがない場合には、フラグ設定部３１は、１回目の処理を終了する。
【００５８】
そして、フラグ設定部３１は、ループｘに内ループがあるか否かを判定し（ステップＳ１３）、ループｘに内ループがない場合には、ループｘのＴＲＧＴをＯＮに設定し（ステップＳ１４）、ステップＳ１７へ移動する。
【００５９】
一方、ループｘに内ループがある場合には、フラグ設定部３１は、ループｘに内ループ以外の処理があるか否かを判定し（ステップＳ１５）、ループｘに内ループ以外の処理がある場合には、ステップＳ１４へ移動する。一方、ループｘに内ループ以外の処理がない場合には、フラグ設定部３１は、ループｘに複数の内ループがあるか否かを判定する（ステップＳ１６）。そして、ループｘに複数の内ループがない場合には、フラグ設定部３１は、ステップＳ１４へ移動し、ループｘに複数の内ループがある場合には、ステップＳ１７へ移動する。
【００６０】
そして、フラグ設定部３１は、ループｘに内ループがあれば、内ループを対象リストに入れ（ステップＳ１７）、ループｘを対象リストから削除する（ステップＳ１８）。そして、フラグ設定部３１は、ステップＳ１２へ戻る。
【００６１】
そして、フラグ設定部３１は、１回目の処理を終了すると、図１１に示すように、ＴＲＧＴがＯＮの全てのループを対象リストに入れる（ステップＳ２１）。そして、フラグ設定部３１は、対象リストにループがあるか否かを判定し（ステップＳ２２）、対象リストにループがない場合には、処理を終了する。
【００６２】
一方、対象リストにループがある場合には、フラグ設定部３１は、対象リストからループを１つ取り出す（ステップＳ２３）。ここでは、取り出されたループをループｘとする。そして、フラグ設定部３１は、ループｘの外ループにループｘ以外の処理があるか否かを判定し（ステップＳ２４）、ループｘの外ループにループｘ以外の処理がある場合には、ループｘを対象リストから削除し（ステップＳ２５）、ステップＳ２２に戻る。
【００６３】
一方、ループｘの外ループにループｘ以外の処理がない場合には、フラグ設定部３１は、ループｘのＴＲＧＴをＯＦＦに設定し、ループｘの外ループのＴＲＧＴをＯＮに設定する（ステップＳ２６）。そして、フラグ設定部３１は、ループｘを対象リストから削除し、外ループを対象リストに入れる（ステップＳ２７）。そして、フラグ設定部３１は、ステップＳ２３に戻る。
【００６４】
このように、フラグ設定部３１は、ループｘの外ループにループｘ以外の処理がない場合に、ループｘのＴＲＧＴをＯＦＦに設定し、ループｘの外ループのＴＲＧＴをＯＮに設定する。したがって、コンパイル装置３は、タイトループにおいて、内ループの代わりに外ループに対して性能計測コードを挿入することができる。
【００６５】
上述してきたように、実施例２では、コンパイル装置３は、タイトループにおいて、内ループの代わりに外ループに対して性能計測コードを挿入するので、性能計測コードが外ループのループ回転数実行されることを防ぐことができる。したがって、コンパイル装置３は、性能計測のオーバーヘッドを減らすことができる。
【符号の説明】
【００６６】
１    並列処理装置
２    計算機
３    コンパイル装置
２１    ＣＰＵ
２１ａ    コア
２２    メモリ
３１    フラグ設定部
３２    プロファイリング処理部
３３    コンパイル処理部
４１    対象リスト記憶部
４２    初期化部
４３    判定部
４４    設定部
４５    対象リスト処理部
５０    コンピュータ
５１    メインメモリ
５２    ＣＰＵ
５３    ＬＡＮインタフェース
５４    ＨＤＤ
５５    スーパーＩＯ
５６    ＤＶＩ
５７    ＯＤＤ
【図１】
2018124975.tif 000003
【図２】
2018124975.tif 000004
【図３】
2018124975.tif 000005
【図４】
2018124975.tif 000006
【図５】
2018124975.tif 000007
【図６】
2018124975.tif 000008
【図７】
2018124975.tif 000009
【図８】
2018124975.tif 000010
【図９】
2018124975.tif 000011
【図１０】
2018124975.tif 000012
【図１１】
2018124975.tif 000013
【図１２】
2018124975.tif 000014