(57)【要約】【課題】従来よりもプロファイル情報の収集に必要な記憶媒体の使用量を低減することができるコンパイル方法及びプログラムを提供する。【解決手段】フロントエンドノードに含まれるＣＰＵが、並列計算装置の各々が取得する、並列計算用プログラムの指定された範囲に対応するプロファイル情報を上記並列計算用プログラムの指定された範囲毎に割り当てられた並列計算装置に集約する集約コード及び上記集約されたプロファイル情報を圧縮且つ統合する圧縮統合コードを並列計算用プログラムに挿入する挿入工程と、上記集約コード及び上記圧縮コードを挿入された並列計算用プログラムをコンパイルするコンパイル工程とを実行する。【選択図】図３
2012032986.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
並列計算装置の各々が取得する、並列計算用プログラムの指定された範囲に対応するプロファイル情報を当該並列計算用プログラムの指定された範囲毎に割り当てられた並列計算装置に集約する集約コード及び前記集約されたプロファイル情報を圧縮且つ統合する圧縮統合コードを並列計算用プログラムに挿入する挿入工程と、
前記集約コード及び前記圧縮コードを挿入された並列計算用プログラムをコンパイルするコンパイル工程と
を実行させることを特徴とするコンパイル方法。
【請求項２】
前記挿入工程は、さらに、各プロファイル情報を取捨選択する取捨選択コード又は前記圧縮且つ統合されたプロファイル情報から分析対象のプロファイル情報を抽出する分析コードの少なくとも一方を並列計算用プログラムに挿入することを特徴とする請求項１のコンパイル方法。
【請求項３】
前記圧縮統合コードは、前記並列計算用プログラムの指定された範囲が通信処理を含むか否かに応じて、前記プロファイル情報に含まれる実行時間の情報を異なる桁数で丸めることを特徴とする請求項１又は２に記載のコンパイル方法。
【請求項４】
コンピュータに、
並列計算装置の各々が取得する、並列計算用プログラムの指定された範囲に対応するプロファイル情報を当該並列計算用プログラムの指定された範囲毎に割り当てられた並列計算装置に集約する集約コード及び前記集約されたプロファイル情報を圧縮且つ統合する圧縮統合コードを並列計算用プログラムに挿入する挿入工程と、
前記集約コード及び前記圧縮コードを挿入された並列計算用プログラムをコンパイルするコンパイル工程と
を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロファイル方法及びプログラムに関する。
【背景技術】
【０００２】
従来より、複数のプロセッサからなる並列計算機上で動作する並列プログラムの実行性能を解析して、プロファイル情報を出力する技術が知られている。また、トレースデータの重複部分を削除する技術やトレースデータの実行回数を指定する技術が知られている。
【０００３】
また、大規模並列計算機で動作するプログラムとして、ＳＰＭＤ（Single-Program, Multiple-Data）プログラムが知られている。大規模並列計算機は、コンピュータで構成される、１つのフロントエンドノード及び複数（例えば数万個）の計算ノードを含む。フロントエンドノード及び複数の計算ノードは、ネットワークを介して互いに接続されている。また、フロントエンドノードは、ＳＰＭＤプログラム及びコンパイラを備えている。コンパイラは、ＳＰＭＤプログラムをコンパイルすることによって、実行可能ファイルを作成する。
【０００４】
この種の大規模並列計算機は、実行可能ファイルを以下の手順で実行する。まず、フロントエンドノードが、使用する計算ノード番号の最大値を決定する。つまり、使用する計算ノードの最大数が決定される。次に、フロントエンドノードが、コンパイラによって作成された実行可能ファイルを各計算ノードへコピーする。その後、各計算ノードが実行可能ファイルを実行する。
【０００５】
ところで、ＳＰＭＤプログラムから作成された実行可能ファイルの実行時の振舞いを調査するために、フロントエンドノードは、プロファイル情報を取得することがある。既存の技術では、以下の手順に従って、プロファイル情報を取得する。まず、各計算ノードは、実行可能ファイルを実行しながらＳＰＭＤプログラムのある位置の実行回数やある範囲の実行時間を取得し、実行可能ファイルの実行終了時に、取得された実行回数や実行時間の情報をプロファイル情報として記憶する（手順１）。次に、フロントエンドノードが、実行可能ファイルの実行終了時に、各計算ノードに記憶されたプロファイル情報を取得し、１つのプロファイル情報を作成する（手順２）。このようにして、フロントエンドノードは１つのプロファイル情報を取得する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平１０−６３５５０号公報
【０００７】
【特許文献２】特開２００１−１４７８３３号公報
【０００８】
【特許文献２】特開平１０−１１３２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、各計算ノードで収集される詳細なプロファイル情報のデータサイズは巨大なので、上記手順２で作成される１つのプロファイル情報は膨大なデータ量になる。特に、ＳＰＭＤコードでは、複数の計算ノードによって、同様の処理が実行される場合も多いので、各計算ノードで個別に収集したプロファイル情報には、冗長な情報も大量に含まれる。よって、各計算ノード及びフロントエンドノードにおいて、プロファイル情報の収集に必要な記憶媒体の容量、即ち、メモリ又はハードディスクの容量が、無駄に消費されることがある。
【００１０】
上記課題に鑑み、開示されたコンパイル方法、プログラム実行方法及びプログラムは、従来よりもプロファイル情報の収集に必要な記憶媒体の使用量を低減することができることを目的とする。
【課題を解決するための手段】
【００１１】
上記目的を達成するため、開示されたコンパイル方法は、コンピュータに、並列計算機の各々が取得する、並列計算用プログラムの指定された範囲に対応するプロファイル情報を当該並列計算用プログラムの指定された範囲毎に割り当てられた並列計算機に集約する集約コード及び前記集約されたプロファイル情報を圧縮且つ統合する圧縮統合コードを並列計算用プログラムに挿入する挿入工程と、前記集約コード及び前記圧縮コードを挿入された並列計算用プログラムをコンパイルするコンパイル工程とを実行させる。
【００１２】
開示されたプログラムは、コンピュータに、並列計算機の各々が取得する、並列計算用プログラムの指定された範囲に対応するプロファイル情報を当該並列計算用プログラムの指定された範囲毎に割り当てられた並列計算機に集約する集約コード及び前記集約されたプロファイル情報を圧縮且つ統合する圧縮統合コードを並列計算用プログラムに挿入する挿入工程と、前記集約コード及び前記圧縮コードを挿入された並列計算用プログラムをコンパイルするコンパイル工程とを実行させる。
【発明の効果】
【００１３】
開示されたコンパイル方法及びプログラムによれば、従来よりもプロファイル情報の収集に必要な記憶媒体の使用量を低減することができる。
【図面の簡単な説明】
【００１４】
【図１】本実施の形態に係る並列計算機の概略構成図である。
【図２】フロントエンドノード２及び計算ノード３−０〜３−Ｎの概略構成図である。
【図３】コンパイラ１２で実行される処理を示すフローチャートである。
【図４】ＳＰＭＤプログラム１１の一例を示す図である。
【図５】ＳＰＭＤプログラム１１に対応する関数呼び出しグラフ及び各関数の制御フローグラフの例を示す図である。
【図６】ＳＰＭＤプログラム１１に対応する関数呼び出しグラフ及び各関数の制御フローグラフの例を示す図である。
【図７】ＳＰＭＤプログラム１１に対応する関数呼び出しグラフ及び各関数の制御フローグラフの例を示す図である。
【図８】ＳＰＭＤプログラム１１に対応する関数呼び出しグラフ及び各関数の制御フローグラフの例を示す図である。
【図９】ＳＰＭＤプログラム１１に対応する関数呼び出しグラフ及び各関数の制御フローグラフの例を示す図である。
【図１０】プロファイル情報の取得処理を示すフローチャートである。
【図１１】各計算ノード３−０〜３−３が有するプロファイル情報の状態を示す図である。
【図１２】複数のプロファイル情報が圧縮且つ統合された後の各計算ノード３−０〜３−３の状態を示す図である。
【図１３】計算ノード３−０及び計算ノード３−３に集約されたプロファイル情報が存在する状態を示す図である。
【図１４】計算ノード３−０及び計算ノード３−３で圧縮且つ統合されたプロファイル情報を１つのプロファイル情報に集約した状態を示す図である。
【図１５】プロファイル情報処理関数（profile_start及びprofile_end）を含むコードの一例を示す図である。
【図１６】実行可能ファイル１３の一例を示す図である。
【図１７】関数PARTを含むコードの一例を示す図である。
【図１８】関数CHOOSE_MAXを含むコードの一例を示す図である。
【発明を実施するための形態】
【００１５】
以下、本発明の実施の形態について、図面を参照して説明する。
【００１６】
図１は、本実施の形態に係る並列計算機の概略構成図である。
【００１７】
図１において、並列計算機１は、フロントエンドノード２、及び並列計算装置としての計算ノード３−０〜３−Ｎ（Ｎ：自然数）を備えている。フロントエンドノード２及び計算ノード３−０〜３−Ｎは、コンピュータなどのハードウエアであり、ネットワーク４を介して互いに接続されている。フロントエンドノード２は、並列計算用のプログラムであるＳＰＭＤ（Single-Program, Multiple-Data）プログラム１１、コンパイラ１２、及び実行可能プログラム１３を備えている。尚、図１中の「Ｋ」は各計算ノードのノード番号を示す。例えば、「Ｋ＝０」は、計算ノード３−０のノード番号が０であることを示し、「Ｋ＝Ｎ」は、計算ノード３−Ｎのノード番号がＮ（Ｎ：自然数）であることを示す。
【００１８】
各計算ノードは、ＣＰＵ２１−Ｋ及びメモリ２２−Ｋを有する。Ｋは、各計算ノードに対応するノード番号である。尚、各計算ノードの詳細な構成は、後述する。
【００１９】
ＳＰＭＤプログラム１１は、並列計算用のプログラムである。ＳＰＭＤプログラム１１は、全ノード番号をいくつかのグループに分けて利用する。従って、ＳＰＭＤプログラム１１内のノード番号に関する処理に基づいて作成される実行可能プログラムの数は、計算ノードの数よりも少ない。
【００２０】
コンパイラ１２は、ＳＰＭＤプログラム１１をコンパイルし、実行可能プログラム１３を作成する。尚、コンパイラ１２により作成される実行可能プログラムの数は、１つに限定されるものではない。複数の実行可能プログラムが作成されてもよい。作成された実行可能プログラム１３は、計算ノード３−０〜３−Ｎに送信され、各計算ノードにより実行される。
【００２１】
図２は、フロントエンドノード２及び計算ノード３−０〜３−Ｎの概略構成図である。尚、計算ノード３−０〜３−Ｎの各々の構成は、フロントエンドノード２の構成と同一であるため、その説明は省略する。
【００２２】
フロントエンドノード２は、フロントエンドノード２全体を制御するＣＰＵ２１、各種の情報やプログラムを備えるメモリ２２を備えている。また、フロントエンドノード２は、ＯＳ、各種の情報やプログラムを備えるハードディスクドライブ（ＨＤＤ）２３、各計算ノードを接続する通信インターフェース２４を備えている。さらに、フロントエンドノード２は、マウス及びキーボードのような入力装置３１からデータを入力する入力部２５、及びモニタ又はプリンタのような出力装置３２にデータやメッセージを出力する出力部２６を備えている。ＣＰＵ２１は、バス２７を介して、メモリ２２、ＨＤＤ２３、通信インターフェース２４、入力部２５、及び出力部２６に接続されている。
【００２３】
図１のＳＰＭＤプログラム１１、コンパイラ１２及び実行可能プログラム１３は、メモリ２２又はＨＤＤ２３に格納されている。コンパイラ１２は、ＣＰＵ２１の制御により動作する。尚、フロントエンドノード２は、これらの要素以外にも、ＣＤ−Ｒドライブのようなデータの読み書き装置や、不揮発性ＲＯＭ等を備えていてもよい。
【００２４】
図３は、コンパイラ１２で実行される処理を示すフローチャートである。図４は、ＳＰＭＤプログラム１１の一例を示す図である。図４のＳＰＭＤプログラム１１では、関数Ｈに通信処理SEND()及び通信処理RECEIVE()を含む。
【００２５】
図３において、コンパイラ１２は、ＳＰＭＤプログラム１１に対応するプログラム全体の関数呼び出しグラフ及び各関数の制御フローグラフを作成する（ステップＣ１）。関数呼び出しグラフは、ＳＰＭＤプログラム１１のソースコードに書いてある関数の呼び出し関係を示すグラフである。制御フローグラフは、プログラムを実行したときに通る可能性のある全経路を表したグラフである。
【００２６】
ここで、図４のＳＰＭＤプログラム１１に対応する関数呼び出しグラフ及び各関数の制御フローグラフを図５に示す。図５では、制御のフローを実線で表し、関数の呼び出し及び関数からの復帰を点線で表している。図５では、main関数が、基本ブロック４１〜４４（コード片Ａ，関数Ｇの呼び出し、関数Ｈの呼び出し、コード片Ｂ）を含む。関数Ｇは、基本ブロック４２１〜４２４を含み、関数Ｈは、基本ブロック４３１〜４３４を含む。基本ブロックは、コンパイラ最適化を行うための最小単位である。
【００２７】
次に、コンパイラ１２は、プロファイル情報を取得する範囲（以下、対象範囲という）を決定する（ステップＣ２）。プロファイル情報は、ＳＰＭＤプログラム１１のある位置の実行回数やある範囲の実行時間を纏めた情報であり、本実施の形態では、計算ノード番号、範囲名、位置識別情報及び実行時間を含む。計算ノード番号、範囲名、位置識別情報及び実行時間の詳細は後述する。対象範囲は、例えば、関数単位又は基本ブロック単位などである。どのような範囲でプロファイル情報を取得するかは、プログラムがコンパイルオプションによって指定する。尚、コンパイルオプションは、プログラマが知っている情報を正確にコンパイラに知らせるために実行時に指定するオプションである。ここでは、対象範囲は関数単位及び基本ブロック単位に設定されているものとする。
【００２８】
次いで、コンパイラ１２は、対象範囲に範囲名を割り当て、対象範囲の開始地点にプロファイル情報の測定を開始するコードを挿入し、対象範囲の終了地点にプロファイル情報の測定を終了するコードを挿入する（ステップＣ３）。図６の例では、コンパイラ１２は、対象範囲に、範囲名Ｒｎ（ｎ＝０〜１１）を割り当てている。また、コンパイラ１２は、プロファイル情報の測定を開始するコード（profile_start）及びプロファイル情報の測定を終了するコード（profile_end）を基本ブロックに挿入している。
【００２９】
コンパイラ１２は、関数呼び出しグラフ及び制御フローグラフを利用し、各対象範囲内に通信処理を含むか否かを判定する。コンパイラ１２は、通信処理の有無に応じて、ステップＣ３で挿入されたprofile_startコードに設定される、対象範囲に含まれるプログラムの実行時間を丸めるラウンド関数を変更する（ステップＣ４）。図７では、基本ブロック４３２，４３３が通信処理（SEND()及びRECEIVE()）を含むので、関数Ｈも通信処理を含むことになる。図７では、通信処理を含む基本ブロック４３２，４３３及び関数Ｈは網掛けで表示されている。
【００３０】
コンパイラ１２は、関数呼び出しグラフ及び制御フローグラフを利用し、各対象範囲のプロファイル情報処理位置を決定する（ステップＣ５）。プロファイル情報処理位置は、各対象範囲から得られるプロファイル情報をダンプする（出力する）位置である。ある対象範囲Ｒのためのプロファイル情報処理位置は、下記の条件（１）〜（４）を全て満たすプログラム上の位置Ｘである。
（１）対象範囲Ｒの実行後に到達するプログラム上の位置Ｘ
（２）対象範囲Ｒを実行した場合は、必ず位置Ｘを通る
（３）プログラムの実行中に、同じ位置識別情報（位置識別情報については後述する）について、位置Ｘを一度だけ通る
（４）位置Ｘを通った後に、同じ位置識別情報について、対象範囲Ｒを再び通ることはない
一般に、１つのプロファイル情報処理位置は、複数の対象範囲をカバーする。各対象範囲のプロファイル情報処理位置を関数呼び出しグラフ及び制御フローグラフに挿入した例を図８に示す。図８では、プロファイル情報処理位置はprofile_dumpコードで示されている。
【００３１】
コンパイラ１２は、複数のプロファイル情報処理位置をグループ化する（ステップＣ６）。複数のプロファイル情報処理位置をグループ化した例を図９に示す。図９では、コンパイラ１２は、関数Ｇあるいは関数Ｈを呼び出す基本ブロックからなるループの直下又は関数Ｇ，Ｈに含まれる最後の基本ブロックの直下にプロファイル情報処理位置が設定されるように、複数のプロファイル情報処理位置をグループ化している。
【００３２】
最後に、コンパイラ１２は、profile_startコード、profile_endコード及びprofile_dampコードの挿入されたＳＰＭＤプログラム１１をコンパイルし、実行可能ファイル１３を作成する（ステップＣ７）。
【００３３】
ステップＣ１〜Ｃ６は、コンパイラ１２が自動的にプロファイル情報取得用の仕組みをＳＰＭＤプログラム１１に組み込む処理である。ステップＣ１〜Ｃ６は、コンパイラ１２が実行する代わりにプログラマが直接行うこともできる。つまり、対象範囲の指定とプロファイル情報処理位置の指定は、下記の３つの方法のいずれかで実現できる。
（１）コンパイラが自動的に範囲指定関数及び処理位置をＳＰＭＤプログラム１１のソースコードに挿入する（自動）。
（２）プログラマが範囲指定関数及び処理位置をＳＰＭＤプログラム１１のソースコードに書く（手動）。
（３）プログラマが、必要な部分の範囲指定関数及び処理位置をＳＰＭＤプログラム１１のソースコードに書き、残りの部分はコンパイラが自動的に処理する（半自動）。
【００３４】
次に、各計算ノード３−０〜３−Ｎが実行可能プログラム１３を実行し、プロファイル情報を取得する処理を説明する。図１０は、プロファイル情報の取得処理を示すフローチャートである。
【００３５】
まず、各計算ノード３−０〜３−Ｎが実行可能プログラム１３の実行を開始する（ステップＥ１）。尚、実行可能プログラム１３は、図３の処理に従って、ＳＰＭＤプログラム１１がコンパイルされて、得られたプログラムである。
【００３６】
各計算ノード３−０〜３−Ｎは、プロファイル情報処理関数に到達したら、その関数の種類を判断する（ステップＥ２）。プロファイル情報処理関数は、profile_start、profile_end又はprofile_dumpである。
【００３７】
プロファイル情報処理関数がprofile_startである場合には、各計算ノード３−０〜３−Ｎは、対象範囲に含まれるプログラムの実行時間の測定を開始する（ステップＥ３）。
【００３８】
プロファイル情報処理関数がprofile_endである場合には、各計算ノード３−０〜３−Ｎは、対象範囲に含まれるプログラムの実行時間の測定を終了し、プロファイル情報をメモリ２２−０〜２２−Ｎに保存する（ステップＥ４）。
【００３９】
プロファイル情報処理関数がprofile_dumpである場合には、各計算ノード３−０〜３−Ｎは、複数の対象範囲のプロファイル情報を予め決められたそれぞれの計算ノードへ送信すると共に、取得した複数のプロファイル情報を圧縮し且つ統合する（ステップＥ５）。ここでは、プロファイル情報を保存するノードとして、計算ノード３−０〜３−Ｎを順番に利用する。例えば、範囲名（Ｒ０）のプロファイル情報は、計算ノード３−０に送信され、範囲名（Ｒ１）のプロファイル情報は、計算ノード３−１に送信される。範囲名（Ｒｎ）のプロファイル情報は、計算ノード３−Ｎに送信される。対象範囲の個数ｎが計算ノードの総数Ｎよりも多い場合には、対象範囲の個数ｎを計算ノードの総数Ｎで割算した場合の余りに対応する対象範囲のプロファイル情報は、余りに対応する計算ノード番号の計算ノードに送信される。例えば、対象範囲が１０２個であり、計算ノードの総数が１００である場合、１０１，１０２番目の対象範囲のプロファイル情報はそれぞれ計算ノード番号１，２の計算ノードに送信される。
【００４０】
各計算ノード３−０〜３−Ｎは実行可能プログラム１３が終了するまで、ステップＥ２〜Ｅ５の処理を繰り返す（ステップＥ６）。最後に、実行可能プログラム１３の実行終了時に、フロントエンドノード２が、各計算ノード３−０〜３−Ｎで圧縮且つ統合されたプロファイル情報を１つに集約する（ステップＥ７）。
【００４１】
次に、プロファイル情報の取得処理を図９及び図１０を参照しながら詳細に説明する。ここでは、４つの計算ノード３−０〜３−３を利用するものとする。
【００４２】
実行可能プログラム１３の実行開始後に、各計算ノード３−０〜３−３は、最初に到達するプロファイル情報処理の関数が、図９より、profile_start(R0,...) であると判断する（ステップＥ１，２）。従って、各計算ノード３−０〜３−３は、範囲名Ｒ０の対象範囲に含まれるプログラムの実行時間の測定を開始する（ステップＥ３）。次に、各計算ノード３−０〜３−３は、プロファイル情報処理関数profile_end(R0,...) に到達するので、範囲名Ｒ０の対象範囲に含まれるプログラムの実行時間の測定を終了する（ステップＥ４）。ステップＥ３，４により得られるプロファイル情報は、下記の表１である。
【００４３】
【表１】
2012032986.tif 000003
表１の計算ノード番号は、計算ノードの番号Ｋを表す。範囲名は、関数profile_startと関数profile_endで指定される対象範囲の名前を表す。位置識別情報は、対象範囲に到達した履歴を表す履歴情報である。ここでは、対象名Ｒ０の対象範囲が関数main()内に存在することを示す（main）が位置識別情報である。実行時間は、各計算ノード３−０〜３−３で対象範囲のプログラムを実行するのにかかった時間を表す。各計算ノード３−０〜３−３が、表１の実行時間の１の位を四捨五入して、実行時間を１０の倍数に丸めた場合の、各計算ノード３−０〜３−３が有するプロファイル情報の状態を図１１に示す。
【００４４】
各計算ノード３−０〜３−３がプロファイル情報処理の関数profile_dump(R0,R1)に到達すると、計算ノード３−０は範囲名Ｒ０の対象範囲のプロファイル情報を集約し、集約したプロファイル情報を圧縮し且つ統合する（ステップＥ５）。複数のプロファイル情報が圧縮且つ統合された後の各計算ノード３−０〜３−３の状態を図１２に示す。図１２では、計算ノード３−０は、同じ実行時間を有するプロファイル情報を圧縮した形式で保持している。このとき、範囲名Ｒ０の対象範囲のプロファイル情報はすべて計算ノード３−０に集約されているため、他の計算ノード３−１〜３−３には、範囲名Ｒ０の対象範囲のプロファイル情報は存在しない。
【００４５】
上述した、ステップＥ１〜Ｅ５の処理は、対象名Ｒ１〜Ｒ３の対象範囲のプログラムに対しても実行される（ステップＥ６）。従って、実行可能プログラム１３の実行終了時には、各計算ノード３−０〜３−３に集約されたプロファイル情報が分散して存在している。例えば、計算ノード３−０及び計算ノード３−３に集約されたプロファイル情報が存在する状態を図１３に示す。図１３では、計算ノード３−３は、範囲名Ｒ３の対象範囲のプロファイル情報を圧縮した形式で保持している。
【００４６】
実行可能プログラム１３の実行終了時には、フロントエンドノード２が計算ノード３−０及び計算ノード３−３で圧縮且つ統合された複数のプロファイル情報を１つのプロファイル情報に集約する（ステップＥ７）。計算ノード３−０及び計算ノード３−３で圧縮且つ統合されたプロファイル情報を１つのプロファイル情報に集約した状態を図１４に示す。
【００４７】
上述したように、各計算ノード３−０〜３−３は、ステップＥ５で部分的にプロファイル情報の圧縮と統合を行うので、最終的にステップＥ７で作成されるプロファイル情報のデータ量を大幅に削減できる。また、ステップＥ１〜Ｅ５の処理に複数の計算ノードが利用されるので、プロファイル情報の集約、圧縮及び統合の処理を並列に実行することができる。
【００４８】
次に、プロファイル情報処理関数について説明する。
【００４９】
コンパイラ１２は、ステップＣ２でＳＰＭＤプログラム１１内の、実行時間のプロファイル情報を取得する範囲（対象範囲）を決定する。このとき、コンパイラ１２は、図１５に示すプロファイル情報処理関数（profile_start及びprofile_end）を含むコードを使って、対象範囲を指定する。
【００５０】
ここで、対象範囲の指定に使用されるプロファイル情報処理関数の各パラメータの意味は次の通りである。図１５のREGION_NAMEは、対象範囲を区別するための名前を表す。図１５のSELECTORは、プロファイル情報を取捨選択するための関数を指定する。関数の引数は位置識別情報である。各計算ノード３−０〜３−３にプロファイル情報を取捨選択させない場合は、SELECTORにはNULLが指定される。
【００５１】
図１５のCOMPRESSORは、プロファイル情報を圧縮且つ統合するための関数を指定する。関数profile_startのCOMPRESSORで指定される関数を含むコードは圧縮統合コードとして機能する。関数の引数は実行時間である。例えば、関数ROUND10がCOMPRESSORとして指定された場合には、実行時間をｔとし、測定された実行時間ｔの１の位が四捨五入され、実行時間ｔは１０の倍数に丸められる。関数ROUND10000がCOMPRESSORとして指定された場合には、測定された実行時間ｔの千の位が四捨五入され、実行時間ｔは１００００の倍数に丸められる。
【００５２】
図１５のANALYZERは、圧縮したプロファイル情報から分析対象のプロファイル情報を抽出するための関数を指定する。関数の引数は圧縮したプロファイル情報の表である。圧縮したプロファイル情報から分析対象のプロファイル情報を抽出しない場合には、ANALYZERには、NULLが指定される。
【００５３】
これらのパラメータは、コンパイラ１２がデフォルトで利用できる。また、コンパイラ１２にオプションの指定をすることで、これらのパラメータはユーザ指定の処理に差し替えられることができる。
【００５４】
また、コンパイラ１２は、プロファイル情報処理位置を「profile_dump (REGION_NAME)」により指定する（ステップＣ５）。関数profile_dumpは、実行時に次の処理（１），（２）を行うライブラリ関数である。
【００５５】
処理（１）：各計算ノード３−０〜３−Ｎに分散されている範囲名REGION_NAMEの対象範囲のプロファイル情報を集める。このために、各計算ノード３−０〜３−Ｎは互いに通信する。例えば、図１１において、計算ノード３−０は、各計算ノード３−１〜３−３に分散されている範囲名Ｒ０の対象範囲のプロファイル情報を集める。このように、関数profile_dumpを含むコードは、ＳＰＭＤプログラム１１の指定された対象範囲のプロファイル情報を集約する集約コードとして機能する。
【００５６】
処理（２）：各計算ノード３−Ｎが集めたプロファイル情報をprofile_startのパラメータで指定された関数を使って圧縮し、統合する。例えば、図１１において、計算ノード３−０は、各計算ノード３−１〜３−３に分散されている範囲名Ｒ０の対象範囲のプロファイル情報を集めて、集められたプロファイル情報を圧縮し且つ統合する。圧縮且つ統合後のプロファイル情報は図１２のようになる。
【００５７】
また、コンパイラ１２は、範囲名REGION_NAMEとして、範囲名のリスト（即ち、複数の範囲名）を指定してもよい。この場合、複数の対象範囲について、上記の処理（１），（２）が実行される。複数の範囲名が指定された場合、計算ノード３−０〜３−３がそれぞれ範囲名Ｒ０〜Ｒ３の対象範囲のプロファイル情報を圧縮且つ統合するので、複数のプロファイル情報の圧縮及び統合を並列処理することができる。従って、従来のように、フロントエンドノードに全プロファイル情報を集めて処理する方法と比べて、利用する計算ノードリソース（即ち、各計算ノードに含まれるメモリやディスクの使用量）を低減することができる。また、複数の計算ノードの並列処理により、処理速度が向上する。
【００５８】
次に、図１５のパラメータCOMPRESSORについて説明する。
【００５９】
例えば、４個の計算ノード３−０〜３−３が、図１６に示すような、実行可能ファイル１３を実行した場合、計算ノード３−０は上述した表１のプロファイル情報を取得する。プロファイル情報が解析される場合、実行時間の詳細な差は重要ではないので、計算ノード３−０は、表１に示すような実際の実行時間を保存するのではなく、パラメータCOMPRESSOR（ここでは関数ROUND10）によって丸められた実行時間を保存する。計算ノード３−０がパラメータCOMPRESSORに従って実行時間を丸めた結果を表２に示す。
【００６０】
【表２】
2012032986.tif 000004
表２に示すように、同じ実行時間のプロファイル情報を有する計算ノードが多数存在する可能性が高まる。
【００６１】
コンパイラ１２は、ステップＣ４で、対象範囲内に通信処理を含むか否かを判定し、判定結果に応じて、ステップＣ３で挿入したprofile_startのパラメータCOMPRESSORに対して、異なるパラメータCOMPRESSOR（ラウンド関数）を設定することができる。例えば、図９で通信処理を含む対象範囲（基本ブロック４３２，４３３及び関数Ｈの呼び出しを含む基本ブロック４３）では、コンパイラ１２は、関数ROUND10に代えて、関数ROUND10000で実行時間を丸めるようにパラメータCOMPRESSORを変更することができる。この場合、コンパイラ１２は、ステップＣ４において、対象範囲内に通信処理を含む場合には、profile_startのパラメータCOMPRESSORに関数ROUND10000を設定し、対象範囲内に通信処理を含まない場合には、profile_startのパラメータCOMPRESSORに関数ROUND10を設定する。これにより、通信処理を含む対象範囲のプロファイル情報内の実行時間は１万の倍数になり、通信処理を含まない対象範囲のプロファイル情報内の実行時間は１０の倍数になる。
【００６２】
この結果、プロファイル情報の分析者又は分析装置は、集約されたプロファイル情報を参照したときに、通信処理を含む対象範囲と通信処理を含まない対象範囲とを一見して区別することができ、効率的にＳＰＭＤプログラム１１の特徴を把握することができる。尚、実行時間ｔを丸める関数は、ROUND10及びROUND10000に限定されるものではなく、ROUND100、ROUND1000、又はROUND100000でもよい。
【００６３】
次に、図１５のパラメータSELECTORについて説明する。
【００６４】
例えば、図９では、関数Ｇに含まれる範囲名Ｒ４の対象範囲（基本ブロック４２１）は、main関数のループにより複数回実行される可能性がある。このため、ループの回転数（即ち対象範囲の実行回数）を識別するために、位置識別情報を利用する。範囲名Ｒ４の対象範囲は、main関数のループ（以下L0とする）からループインデックスｉで指定された回転数だけ実行される可能性があるので、ループの回転数を識別するために、位置識別情報を（main, L0, i）で表す。例えば、main関数のループが計算ノード３−０〜３−３で３回回転する場合のプロファイル情報を表３に示す。
【００６５】
【表３】
2012032986.tif 000005
ループの回転数が多い場合は、プロファイル情報のデータ量が膨大になるため、すべてのプロファイル情報を保存するのは現実的ではない。このような場合に、コンパイラ１２は、ステップＣ３で挿入したprofile_startのパラメータSELECTORに取捨選択関数として関数PARTを設定する。関数PARTは、位置識別情報をプロファイル情報の取捨選択の判定に利用する。また、例えば、最初の２回のループのプロファイル情報を取得する場合は、コンパイラ１２は、図１７に示すような、関数PARTを含むコードをＳＰＭＤプログラム１１に設定する。
【００６６】
図１７において、位置情報Ｐはリスト形式をもち、Ｐ［ｘ］は、ｘ番目の要素を取り出すものとする。また、図１７では、パラメータSELECTORに設定した関数PARTが、１を返す場合は、対象範囲の実行時間が測定され、０を返す場合は、対象範囲の実行時間が測定されない。コンパイラ１２が、図１７に示す関数PARTを範囲名Ｒ４の対象範囲のprofile_startに設定すると、計算ノード３−０〜３−３は表４に示すプロファイル情報を取得する（ステップＥ４）。
【００６７】
【表４】
2012032986.tif 000006
最終的に、フロントエンド２は表５に示すプロファイル情報を取得する（ステップＥ７）。
【００６８】
【表５】
2012032986.tif 000007
取捨選択関数としての関数PARTは、各計算ノード３−０〜３−ＮがステップＥ３で実行可能プログラム１３の実行時間の測定を開始するときに、各計算ノード３−０〜３−Ｎが指定されたループの回転数に対応する対象範囲の実行時間の取得を開始するかどうかを判断するために利用される。
【００６９】
次に、図１５のパラメータANALYZERについて説明する。
【００７０】
フロントエンド２が、表５に示すプロファイル情報ではなく、ループの回転数が０又は１であり、且つ範囲名Ｒ４の対象範囲の実行時間が最も長いプロファイル情報を取得する場合を考える。この場合、コンパイラ１２は、ステップＣ３で挿入したprofile_startのパラメータANALYZERに分析関数として関数CHOOSE_MAXを設定し、図１８に示すような、関数CHOOSE_MAXを含むコードをＳＰＭＤプログラム１１に設定する。関数CHOOSE_MAXでは、表４に示すデータから実行時間が１０であるプロファイル情報が削除されるので、最終的に表６に示すプロファイル情報が作成される。
【００７１】
【表６】
2012032986.tif 000008
分析関数としての関数CHOOSE_MAXは、各計算ノード３−０〜３−ＮがステップＥ５で対象範囲のプロファイル情報を統合する場合に利用することができる。
【００７２】
取捨選択関数はステップＥ３で利用され、分析関数はステップＥ５で利用される。これらの関数により、各計算ノード３−０〜３−Ｎが取得するプロファイル情報が削減される。各計算ノード３−０〜３−Ｎが取捨選択関数又は分析関数を利用する場合、フロントエンドノード２が全てのプロファイル情報を集約した後に特定のプロファイル情報のみを抽出する方法と比較して、プロファイル情報の取得に必要となる、一時的なメモリやディスクスペースの使用量を低減することができる。
【００７３】
以上の実施の形態に関し、更に以下の付記を開示する。
【００７４】
（付記１）コンピュータに、並列計算装置の各々が取得する、並列計算用プログラムの指定された範囲に対応するプロファイル情報を当該並列計算用プログラムの指定された範囲毎に割り当てられた並列計算装置に集約する集約コード及び前記集約されたプロファイル情報を圧縮且つ統合する圧縮統合コードを並列計算用プログラムに挿入する挿入工程と、前記集約コード及び前記圧縮コードを挿入された並列計算用プログラムをコンパイルするコンパイル工程とを実行させることを特徴とするコンパイル方法。かかる構成によれば、各並列計算装置が実行可能ファイルとして並列計算用プログラムを実行するときに、各並列計算装置が、取得した複数のプロファイル情報を圧縮し且つ統合するので、従来よりもプロファイル情報の収集に必要な記憶媒体の使用量を低減することができる。
【００７５】
（付記２）前記挿入工程は、さらに、各プロファイル情報を取捨選択する取捨選択コード又は前記圧縮且つ統合されたプロファイル情報から分析対象のプロファイル情報を抽出する分析コードの少なくとも一方を並列計算用プログラムに挿入することを特徴とする付記１のコンパイル方法。かかる構成によれば、各並列計算装置で取得されるプロファイル情報が削減されるので、従来よりもプロファイル情報の収集に必要な記憶媒体の使用量を低減することができる。
【００７６】
（付記３）前記圧縮統合コードは、前記並列計算用プログラムの指定された範囲が通信処理を含むか否かに応じて、前記プロファイル情報に含まれる実行時間の情報を異なる桁数で丸めることを特徴とする付記１又は２に記載のコンパイル方法。かかる構成によれば、プロファイル情報の分析者又は分析装置は、通信処理を含む範囲と通信処理を含まない範囲とを明確に区別できるので、効率的に並列計算用プログラムの特徴を把握することができる。
【００７７】
（付記４）前記並列計算用プログラム全体の関数呼び出しグラフ及び各関数の制御フローグラフを作成し、前記関数呼び出しグラフ及び前記制御フローグラフに含まれる関数単位又は基本ブロック単位の少なくとも一方で、前記プロファイル情報を取得する範囲を指定する指定工程をさらに含むことを特徴とする付記１乃至３のいずれかに記載のコンパイル方法。かかる構成によれば、各並列計算装置が並列計算用プログラムを実行するときに、自動的にプロファイル情報を取得する範囲を指定できる。
【００７８】
（付記５）コンピュータに、並列計算装置の各々が取得する、並列計算用プログラムの指定された範囲に対応するプロファイル情報を当該並列計算用プログラムの指定された範囲毎に割り当てられた並列計算装置に集約する集約コード及び前記集約されたプロファイル情報を圧縮且つ統合する圧縮統合コードを並列計算用プログラムに挿入する挿入工程と、前記集約コード及び前記圧縮コードを挿入された並列計算用プログラムをコンパイルするコンパイル工程とを実行させることを特徴とするプログラム。上記付記１と同様の効果を奏する。
【符号の説明】
【００７９】
１  並列計算機、２  フロントエンドノード、３−１〜３−Ｎ  計算ノード、１１  ＳＰＭＤプログラム、１２  コンパイラ、１３  実行可能プログラム、２１  ＣＰＵ、２２  メモリ、２３  ハードディスクドライブ（ＨＤＤ）、２４  通信インターフェース、２５  入力部、２６  出力部
【図１】
2012032986.tif 000009
【図２】
2012032986.tif 000010
【図３】
2012032986.tif 000011
【図４】
2012032986.tif 000012
【図５】
2012032986.tif 000013
【図６】
2012032986.tif 000014
【図７】
2012032986.tif 000015
【図８】
2012032986.tif 000016
【図９】
2012032986.tif 000017
【図１０】
2012032986.tif 000018
【図１１】
2012032986.tif 000019
【図１２】
2012032986.tif 000020
【図１３】
2012032986.tif 000021
【図１４】
2012032986.tif 000022
【図１５】
2012032986.tif 000023
【図１６】
2012032986.tif 000024
【図１７】
2012032986.tif 000025
【図１８】
2012032986.tif 000026