(57)【要約】【課題】並列化のための負荷の分散量を数値で確認できるようにし，並列実行プログラムの並列化チューニングの支援を行うことを目的とする。【解決手段】解析対象プログラム実行回数計測手段１２は，翻訳時に解析対象プログラム中に挿入されたカウント命令によってカウント領域に実行回数を累積することにより，並列実行単位ごとの実行文の実行回数を計測する。実行回数計測結果解析手段１３は，実行回数の計測結果からループの平均回転数を測定し，並列度数を変化させた場合の性能向上率を算出する。また，並列実行させたプログラム内の各手続き内の実行文の実行回数および各ループの並列実行単位における実行文の実行回数を算出し，算出結果を回数の多い順に表示するともに，並列実行単位間の実行回数のバランスを示す情報を表示する。【選択図】　　　　図２
2004102594.tif 000002
【特許請求の範囲】
【請求項１】
並列実行プログラムの実行回数解析方法であって，
解析対象の並列実行プログラム翻訳時に，少なくとも並列実行単位ごとに実行回数を累積するための命令を各手続き内に挿入する翻訳過程と，
前記翻訳した並列実行プログラムを実行することにより，翻訳時に設定した命令の実行回数を並列単位ごとに累積する計測過程と，
前記並列実行単位の実行回数計測結果を解析し，少なくとも並列実行における負荷の分散を示す解析結果を出力する解析過程とを有する
ことを特徴とする並列実行プログラムの実行回数解析方法。
【請求項２】
請求項１記載の並列実行プログラムの実行回数解析方法において，
前記翻訳過程では，各手続きの開始位置にその手続き内の各実行文の実行回数を累積するカウント領域を確保する機能を持つ関数の呼出し命令を挿入するとともに，実行回数を累積するカウント命令を手続き内の実行順序が変化する可能性のない実行文列である各基本ブロックの先頭位置，各ループの開始位置および各ループ内の先頭実行文の位置に挿入し，
前記計測過程では，各手続きの命令実行中に出現するカウント命令により前記カウント領域に実行回数を累積し，プログラム全体の終了時に，カウント領域の実行回数を実行情報ファイルに記録し，
前記解析過程では，各並列実行単位の実行回数計測結果を実行情報ファイルから抽出し，各ループ実行におけるループ内実行文の実行回数の平均である各ループの平均回転数を並列実行単位ごとに算出する
ことを特徴とする並列実行プログラムの実行回数解析方法。
【請求項３】
請求項２記載の並列実行プログラムの実行回数解析方法において，
前記解析過程は，
前記実行情報ファイルから抽出した各並列実行単位の実行回数計測結果に基づいて，逐次実行に換算したプログラム中の実行文の総実行回数を算出する過程と，
前記算出した逐次実行に換算したプログラム中の実行文の総実行回数と，各並列実行単位におけるループ内実行文実行回数の合計と，並列度数と，並列実行のためのオーバーヘッドとに基づいて，前記逐次実行に換算したプログラム中の実行文の総実行回数を並列度数に応じて各並列実行単位に分割する場合の並列実行単位における実行文の総実行回数を算出する過程と，
前記算出した並列実行単位における実行文の総実行回数と前記算出した逐次実行に換算したプログラム中の実行文の総実行回数とに基づいて，並列度数を変化させた場合の性能向上率を算出する過程とを有する
ことを特徴とする並列実行プログラムの実行回数解析方法。
【請求項４】
請求項２または請求項３記載の並列実行プログラムの実行回数解析方法において，
前記解析過程は，
前記実行情報ファイルから抽出した各並列実行単位の実行回数計測結果に基づいて，並列実行させたプログラム内の各手続き内の実行文の実行回数および各ループの並列実行単位における実行文の実行回数を算出し，算出結果を回数の多い順に出力する過程と，
並列実行単位間の実行回数のバランスを示す情報を出力する過程とを有する
ことを特徴とする並列実行プログラムの実行回数解析方法。
【請求項５】
並列実行プログラムの実行回数解析方法をコンピュータに実行させるためのプログラムであって，
解析対象の並列実行プログラム翻訳時に，少なくとも並列実行単位ごとに実行回数を累積するための命令を各手続き内に挿入する翻訳処理と，
前記翻訳した並列実行プログラムを実行することにより，翻訳時に設定した命令の実行回数を並列単位ごとに累積する計測処理と，
前記並列実行単位の実行回数計測結果を解析し，少なくとも並列実行における負荷の分散を示す解析結果を出力する解析処理とを，
コンピュータに実行させるための並列実行プログラムの実行回数解析プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は，ＨＰＣ（Ｈｉｇｈ　Ｐｅｒｆｏｒｍａｎｃｅ　Ｃｏｍｐｕｔｉｎｇ　Ｓｙｓｔｅｍ　）大規模科学技術計算分野におけるプログラムの並列化チューニングの支援機能に関し，特に，Ｆｏｒｔｒａｎ等の高級言語で記述された逐次実行プログラムを並列化による負荷分散で性能向上を図る過程を支援する並列実行プログラムの実行回数解析方法およびその実行回数解析プログラムに関する。
【０００２】
チューニングするプログラムの並列化は，メモリ共用型並列方式およびメモリ分散型並列化方式が対象である。
【０００３】
メモリ共用型並列方式は，スレッドと呼ばれる複数の並列実行単位上でプログラムが並列に実行される。並列化の指定は，ユーザがプログラム実行時に，ＯｐｅｎＭＰ並列化構文によりソースコード中の並列化する範囲およびその範囲の並列実行単位に対するループ負荷分配を示す並列負荷分割量を指定する。
【０００４】
例えば，図１５に示す並列化対象プログラムの場合，基本ブロック１から基本ブロック３までの範囲を，並列化構文（「！＄ＯＭＰ　ＰＡＲＡＬＬＥＬ」，「！＄ＯＭＰ　ＥＮＤ　ＰＡＲＡＬＬＥＬ」）によって並列化指定している。ここで，基本ブロックとは，実行順序が変化する可能性のない実行文列である。ループに対応する部分については，ユーザにより指定された並列負荷分割量に応じたオブジェクトコードの生成関数をコンパイラが作成し，並列実行する。図１５に示す並列化指定の場合，基本ブロック１，２，３については，各並列実行単位が同一の処理を行う冗長実行となり，ループ部分については並列負荷分割量に応じてループの負荷が分散される。
【０００５】
メモリ分散型並列化方式は，プロセスと呼ばれる複数の並列実行単位にデータが分割されてプログラムが並列に実行される。並列化の指定はＭＰＩ（Ｍｅｓｓａｇｅ　Ｐａｓｓｉｎｇ　Ｉｎｔｅｒｆａｃｅ　）ライブラリをソースコード中の並列化する位置に挿入するとともに，並列負荷分割量を指定する。
【０００６】
本発明は，これらの並列化プログラムおよび両方式が混在する並列化プログラムの並列化チューニングを支援する情報を出力するものである。
【０００７】
【従来の技術】
メモリ共用型並列およびメモリ分散型並列のプログラミングを支援するためには，特に負荷分散の対象となるループの平均回転数の測定が必要であり，手続き，ループ，各実行文の並列化状況を，並列実行単位ごとに確認できる機能が必要である。
【０００８】
プログラムの並列処理の最適化を図る技術としては，複数のプロセッサで構成された並列計算機に関して，データやプログラムを各プロセッサエレメントごとに割り付け，その実行時に処理時間を測定し，そのばらつきが各プロセッサエレメントで均等になるように動的に再割り付けを行う技術があった（例えば，特許文献１参照。）。また，逐次実行プログラムの各ループの平均回転数を測定する技術は，従来からあった（例えば，非特許文献１参照）。
【０００９】
【特許文献１】
特開平２−１３２５２６号公報（第１頁）
【非特許文献１】
ＦＵＪＩＴＳＵ，「ＵＸＰ／Ｖアナライザ使用手引書Ｖ２０用」（Ｊ２Ｕ５−０１３２−０２），富士通株式会社，１９９９年９月，第２版，ｐ５５−５６
【００１０】
【発明が解決しようとする課題】
しかし，従来のプログラムの実行回数解析機能は，逐次実行プログラムが対象であり，プログラム並列化を支援する機能はなかった。すなわち，並列実行プログラムの各ループの平均回転数を並列単位ごとに測定する機能はなかった。
【００１１】
また，例えば，前記特許文献１の特開平２−１３２５２６号公報に記載されている技術は，ループの回数を測定してチューニング用に表示するものではないため，並列実行における負荷の分散状態をユーザが確認した上で並列化チューニングを行うことができないという問題点がある。
【００１２】
具体的には，従来は，チューニング対象プログラムについて，並列化による性能予測を行う機能や，並列実行単位間での手続きおよびループの実行回数のバランスを確認する機能や，並列実行したプログラム内の各実行文について，並列状況を表示する機能はなかった。そのため，並列実行における負荷の分散状態に基づいて並列化プログラムの並列化チューニングを行うことは困難であった。
【００１３】
本発明は，上記従来技術の問題点を解決し，並列実行における負荷の分散状態をユーザが確認した上で並列化プログラムのチューニングが可能なチューニング支援技術を提供することを目的とする。
【００１４】
【課題を解決するための手段】
上記課題を解決するため，本発明は，以下の点に着目する。
【００１５】
（１）プログラムの実行負荷は実行時間で表される。実行回数の多い手続き，ループおよび実行文ほど実行時間を多く必要とする傾向にある。この傾向を利用して実行負荷を実行回数で表現することにより，ソースコードへのフィードバックが容易な数値で実行負荷を表現するチューニング支援機能を実現する。また，並列化のための負荷分散量（主にループの回転数）は数値で指定する場合が多いので，プログラムの実行負荷を数値で得られることがチューニングに有益である。さらに，ループの各回転の負荷が回転数に無依存で同一ならば，ループの平均回転数を求めてその値を並列実行単位に均等に分割すると性能効果を発揮できる。
【００１６】
（２）並列実行単位の増加に比例してループの回転数を並列実行単位に分割した場合の性能向上予測情報があると，チューニングを効果的に進めることができる。
【００１７】
（３）プログラムを並列実行した場合，手続き，ループ，実行文の単位ごとに並列実行状況を数値で確認できると理解が容易なチューニング情報となる。
【００１８】
本発明は，上記着目点に基づき，プログラムの並列化で負荷の分散のために最も着目されるループの平均回転数を正確に測定する。
【００１９】
また，本発明は，並列実行単位の増加に比例してループの回転数を詳細に分割した場合の性能向上予測機能を実現する。また，手続き，ループの実行回数を並列実行単位間で比較できるように表示する。また，負荷の高い順番に手続き，ループを表示してチューニング対象を簡単に選定可能とする。さらに，ソースコードの実行文に対応して，実行回数および並列実行状況を確認できるように表示する。
【００２０】
すなわち，本発明は，並列実行プログラムの実行回数解析方法であって，解析対象プログラムを翻訳し，前記翻訳時に，実行回数を累積する命令を各手続き内に挿入するプログラム翻訳過程と，前記翻訳時に設定した単位の実行回数を並列単位ごとに累積するプログラム実行回数計測過程と，前記並列実行単位の実行回数計測結果を解析し，解析結果を端末に表示させる実行回数計測結果解析過程とを有することを特徴とする。
【００２１】
また，本発明において，前記プログラム翻訳過程は，各手続きの開始位置にその手続き内の各実行文の実行回数を累積するカウント領域を確保する機能を持つ関数の呼出し命令を挿入し，実行回数を累積するカウント命令を手続き内の実行順序が変化する可能性のない実行文列である各基本ブロックの先頭位置，各ループの開始位置および各ループ内の先頭実行文の位置に挿入し，前記プログラム実行回数計測過程は，各手続きの命令を実行中に出現するカウント命令により前記カウント領域に実行回数を累積し，プログラム全体の終了時に，カウント領域の実行回数を並列実行単位ごとに実行情報ファイルに出力し，前記実行回数計測結果解析過程は，各並列実行単位の実行回数計測結果を実行情報ファイルから抽出し，各ループ実行におけるループ内実行文の実行回数の平均である各ループの平均回転数を並列実行単位ごとに算出することを特徴とする。
【００２２】
本発明を用いることにより，並列実行における負荷の分散状態を明らかにすることができる。従って，ループの各回転の負荷が回転数に無依存で同一ならば，ループの平均回転数の値を並列実行単位に均等に分割することを通じて性能効果を発揮できる。
【００２３】
また，本発明において，前記実行回数計測結果解析過程は，更に，前記実行情報ファイルから抽出した各並列実行単位の実行回数計測結果に基づいて，逐次実行に換算したプログラム中の実行文の総実行回数を算出する過程と，前記算出した逐次実行に換算したプログラム中の実行文の総実行回数と，各並列実行単位におけるループ内実行文実行回数の合計と，並列度数と，並列実行のためのオーバーヘッドとに基づいて，前記逐次実行に換算したプログラム中の実行文の総実行回数を並列度数に応じて各並列実行単位に分割する場合の並列実行単位における実行文の総実行回数を算出する過程と，前記算出した並列実行単位における実行文の総実行回数と前記算出した逐次実行に換算したプログラム中の実行文の総実行回数とに基づいて，並列度数を変化させた場合の性能向上率を算出する過程とを有することを特徴とする。
【００２４】
本発明を用いることにより，並列度数の増加に比例してループの回転数を詳細に分割した場合の性能向上予測機能を実現することができ，チューニングを効果的に進めることができる。
【００２５】
また，本発明において，前記実行回数計測結果解析過程は，更に，前記実行情報ファイルから抽出した各並列実行単位の実行回数計測結果に基づいて，並列実行させたプログラム内の各手続き内の実行文の実行回数および各ループの並列実行単位における実行文の実行回数を算出し，算出結果を回数の多い順に端末に表示するとともに，並列実行単位間の実行回数のバランスを端末に表示することを特徴とする。
【００２６】
本発明を用いることにより，各手続き，ループの並列単位間の負荷バランスおよび並列化候補の選択が可能になる。
【００２７】
また，本発明において，前記実行回数計測結果解析過程は，更に，前記実行情報ファイルから抽出した各並列実行単位の実行回数計測結果に基づいて，ソースコードに対応つけて各実行文ごとに総実行回数および並列度数を算出し，端末に表示させることを特徴とする。
【００２８】
本発明を用いることにより，並列実行状況の認識が容易になり性能改善のソースコードへのフィードバックが促進される。
【００２９】
また，本発明のプログラムは，並列実行プログラムの実行回数解析方法をコンピュータに実行させるためのプログラムであって，解析対象の並列実行プログラム翻訳時に，少なくとも並列実行単位ごとに実行回数を累積するための命令を各手続き内に挿入する翻訳過程と，前記翻訳した並列実行プログラムを実行することにより，翻訳時に設定した命令の実行回数を並列単位ごとに累積する計測過程と，前記並列実行単位の実行回数計測結果を解析し，少なくとも並列実行における負荷の分散を示す解析結果を出力する解析過程とを有することを特徴とする並列実行プログラムの実行回数解析方法をコンピュータに実行させるための並列実行プログラムの実行回数解析プログラムである。
【００３０】
【発明の実施の形態】
以下，図を用いて本発明の実施の形態を説明する。図１は，本発明の並列実行プログラムの実行回数解析方法を実現するハードウェア構成の一例を示す図である。
【００３１】
図中，１は並列実行プログラムの実行結果を解析するワークステーション（ＷＳ）等の並列実行プログラム実行結果解析装置である。２および３はそれぞれ１または複数のＣＰＵ２１，３１とメモリ２２，３２とを有し，並列実行プログラムを実行するノードＡ，Ｂである。４はノードＡ２およびノードＢ３で実行した並列実行プログラムの実行回数計測結果が記録される実行情報ファイル，５はノードＡ２とノードＢ３間を接続するプロセッサ間通信用の高速バスである。なお，図１では実行情報ファイル４は，共用ファイルとなっているが，本発明は実行情報ファイル４が共用となっていなくても実現可能である。
【００３２】
本発明の並列実行プログラムの実行回数解析方法は，ノードＡ２内またはノードＢ３内において行われるメモリ共用型の並列化方式の並列化チューニング支援に用いられるほか，ノードＡ２とノードＢ３間で行われるメモリ分散型並列化方式の並列化チューニング支援にも用いられる。
【００３３】
図２は，本発明の並列実行プログラムの実行回数解析方法の概要を示す図である。６はディスプレイやプリンタ等の解析結果出力装置，７は並列化指示が埋め込まれた解析対象プログラムのソースプログラム，７’は翻訳によって実行回数を計測するための命令が埋め込まれた解析対象プログラムのロードモジュール，１１は解析対象プログラムの翻訳（リンクを含む）を行う解析対象プログラム翻訳手段，１２は解析対象プログラム実行回数計測手段，１３は実行回数計測結果を解析する実行回数計測結果解析手段である。なお，解析対象プログラム翻訳手段１１と実行回数計測結果解析手段１３とは，必ずしも同一装置で実現する必要はなく，別の装置で実現されていてもよい。
【００３４】
以下に，並列実行プログラム実行結果解析装置１が行う処理を説明する。図３は，本発明の並列実行プログラムの実行回数解析処理フローの一例を示す図である。
【００３５】
まず，解析対象プログラム翻訳手段（コンパイラ）１１が，Ｆｏｒｔｒａｎ等の高級言語で記述された解析対象プログラム７の翻訳処理を行う（ステップＳ１）。この解析対象プログラム７の翻訳では，オブジェクトプログラム中の各手続きの開始位置に，その手続き内の各実行文の実行回数を累積する領域　（カウント領域）　を確保する機能を持つ関数を呼び出す命令を挿入する。
【００３６】
また，解析対象プログラム翻訳手段１１は，実行回数を累積する命令（カウント命令）を，オブジェクトプログラム中の手続き内の次の位置に挿入する。
▲１▼　各基本ブロック（実行順序が変化する可能性のない実行文列）の先頭位置
▲２▼　各ループの開始位置
▲３▼　各ループ内の先頭実行文
これらのカウント命令は，例えばソースコードの形式で表すと，
領域名（ｘ）＝領域名（ｘ）＋１
というような命令である。
【００３７】
解析対象プログラム７の翻訳時におけるオブジェクトプログラムへのカウント命令の挿入の一例を，図４に示す。図４に示す例では，まず手続きの開始位置にカウント領域管理の関数呼出し命令が挿入され，また各基本ブロック１〜３の先頭位置に実行回数をカウントするカウント命令が挿入され，ループの開始位置にループ開始カウント命令が挿入され，ループ内の先頭実行文にループ内先頭実行文カウント命令が挿入されている。以上のような命令の挿入は，翻訳処理の開始時に所定のコンパイラ・オプションの選択によって行われる。
【００３８】
次に，解析対象プログラム実行回数計測手段１２が，解析対象プログラム７の実行回数計測処理を行う（ステップＳ２）。具体的には，解析対象プログラム７を翻訳した結果のオブジェクトプログラムから得られるロードモジュール（解析対象プログラム７’）を，図１に示す各ノードＡ２，Ｂ３のＣＰＵ２１，３１に実行させて，翻訳時に設定したカウント命令を用いて実行回数を並列実行単位ごとに累積する。
【００３９】
この実行回数の累積は，次のように行われる。各手続きの開始時に，カウント領域を確保する関数が呼び出される。この関数は，呼出し元の関数名および並列実行単位をキーとしてカウント領域を管理している。この関数は，呼び出されると，該当キーに対応するカウント領域を呼出し元に通知する。
【００４０】
手続きの命令を実行中に，翻訳時に挿入されたカウント命令が出現すると，そのカウント命令は，手続きの開始時に用意されたカウント領域に実行回数を累積する。そして，プログラム全体の終了時に，カウント領域の実行回数を並列実行単位ごとに実行情報ファイル４に記録する。図５に，図３に示した解析対象プログラム７の実行回数計測方法の一例を示す。図５に示す実行回数計測においては，図１５に示す並列化の指定方法と同様の方法による並列化指定に対してコンパイラが作成した生成関数に基づき，特にループ部分が並列実行単位毎に分割されて並列実行され，各並列実行単位毎に実行回数が計測される。
【００４１】
次に，実行回数計測結果解析手段１３が，実行回数計測結果解析処理を行う（ステップＳ３）。具体的には，各並列実行単位の実行回数計測結果を，実行情報ファイル４から取り出して次のように解析し，ディスプレイやプリンタ等の解析結果出力装置６に出力する。
【００４２】
まず，各並列実行単位およびそれらの平均のループ回転数を，以下の式でループごとに算出する。
【００４３】
ループの平均回転数
＝ループ内の先頭実行文の実行回数／ループ開始位置の実行回数
また，以下の式で，チューニング対象ループの逐次実行に換算した総実行回数から，並列度数に応じて各並列実行単位に分割する場合の並列実行単位における実行文の総実行回数を計算する。
【００４４】
ＰＴＯＴＡＬ
＝ＳＴＯＴＡＬ−ＬＯＯＰ＋（ＬＯＯＰ／Ｐａｒａ）＋ＰＯＶＥＲ
ここで，ＳＴＯＴＡＬは，逐次実行に換算したプログラム中の実行文の総実行回数であり，図６に示すように，基本ブロック実行コストとＬＯＯＰとから構成される。ＬＯＯＰは，逐次実行に換算したチューニング対象ループ内実行文の総実行回数であり，各並列実行単位におけるループ内実行文実行回数の合計値である。
【００４５】
ＰＴＯＴＡＬは，並列実行単位の実行文総実行回数であり，冗長実行コストとＬＯＯＰ／ＰａｒａとＰＯＶＥＲとから構成される。冗長実行コストは，各並列実行単位が同一の処理を行う基本ブロックの実行コストである。図６においては，冗長実行コストと基本ブロックの実行コストが同じ場合を示す。
【００４６】
Ｐａｒａは並列度数であり，ＬＯＯＰ／Ｐａｒａは，各並列実行単位におけるループ内実行文実行回数の負荷としての並列実行コストである。また，ＰＯＶＥＲは，並列実行のためのオーバーヘッドであり，固定値である。
【００４７】
ここで，ＳＴＯＴＡＬは，図５に示す各並列実行単位ごとのカウント領域におけるカウント値から算出する。すなわち，まず各並列実行単位におけるループ内実行文実行回数の合計値を求めてＬＯＯＰを算出する。また，例えば各並列実行単位が基本ブロック１ないし基本ブロック３について同一の処理を行う場合，冗長実行となる基本ブロック１ないし基本ブロック３のカウント値については，代表となる並列実行単位のカウント値を用いて算出することによって冗長実行コストを算出し，算出したＬＯＯＰに冗長実行コストを加えたものをＳＴＯＴＡＬとして求める。
【００４８】
図６に示すように，並列実行により，オーバーヘッドとしてのＰＯＶＥＲが生じるが，ＬＯＯＰがＬＯＯＰ／Ｐａｒａに減少するため，ＰＴＯＴＡＬはＳＴＯＴＡＬより小さい値となる。
【００４９】
次に，並列度数を変化させた場合の性能向上率を，ＳＴＯＴＡＬとＰＴＯＴＡＬを用いて，以下の式で計算する。単位は，パーセントである。
【００５０】
性能向上率＝｛（ＳＴＯＴＡＬ−ＰＴＯＴＡＬ）／ＳＴＯＴＡＬ｝×１００
また，チューニング対象ループについて，並列度数の変化に対する並列実行単位内実行文実行回数，ループの平均回転数および性能向上率の見積り値を表示する。この見積り値は，ループの負荷がループの回転数に無依存で一定であることを前提とする。
【００５１】
図７に，本発明による解析結果の出力の一例として，並列度数の変化に対する特定ループの実行文実行回数，ループの平均回転数および性能向上率の見積り値の表示形式の一例を示す。
【００５２】
図７に示す例では，並列度数が１（逐次実行）から２になると，ループの平均回転数（Ｉｔｅｒａｔｉｏｎ−ｃｏｕｎｔ）が８０から４０になり，性能見積り対象ループ内実行文の総実行回数が減少するが，並列実行のオーバヘッドが増えるため，性能が逐次実行の場合よりもわずかに劣化している。しかし，並列度数が４，８と増加すると，ループの平均回転数がそれぞれ２０，１０になり，性能向上率が１４．５％，２２．２％と向上していることがわかる。
【００５３】
また，本実施の形態では，逐次実行におけるループ平均回転数を算出した上で，これから算出した並列ループの平均回転数情報を，並列負荷分割量の見積りに使用する。逐次実行におけるループ平均回転数は，計測したループの平均回転数に並列度数を乗じたものであり，図７に表示されている並列度数が１の場合のループの平均回転数８０が逐次実行における平均回転数である。
【００５４】
図８に逐次実行のループの平均回転数に基づく並列負荷分割量の見積り方法を示す。図８に示すように，並列負荷分割量は，逐次実行におけるループ平均回転数を並列度数で割って算出する。
【００５５】
また，各手続きについて実行回数の合計値および各並列実行単位における実行回数のバランスを表示する。手続きの情報は，実行回数の多い順番に表示する。メモリ分散型並列化方式とメモリ共有型並列化方式の混在型の場合には，メモリ分散型並列化方式の各並列実行単位の表示を行い，その並列実行単位の詳細化情報としてメモリ共用型並列化の表示を行う。
【００５６】
図９に，手続き実行回数合計値の表示形式の一例を示す。また，図１０に，各並列実行単位における手続き実行回数のバランス表示の形式の一例を示す。
【００５７】
例えば，「ｍａｉｎ．＿ＯＭＰ＿１＿」の手続きは，総実行回数（Ｔｏｔａｌ−ｃｏｕｎｔ）が１０４２回であり，この総実行回数のプログラム全体に占める割合（Ｒｕｎ）は，０．８８％であり，手続き実行回数は８回であることが，図９からわかる。
【００５８】
この手続き「ｍａｉｎ．＿ＯＭＰ＿１＿」を４個のスレッドで並列に実行し，平均実行回数に対する該当並列実行単位の実行回数の偏差割合を示しているのが図１０である。図１０の例から，４番目のスレッド（Ｔｈｒｅａｄ　３）が＋１１％と負荷が他のスレッドよりも大きいことがわかる。従って，ユーザは，図１０に示すバランス表示を認識した上で，各並列実行単位に分割する負荷バランスを均等化するチューニングを行うためには，４番目のスレッドの負荷を軽減すればよいことがわかる。
【００５９】
例えばｉｆ文を含むループのように，回転数に依存してループの動きが変わる場合には，各並列実行単位毎の負荷にばらつきが生じているのが通常であるが，このような場合に，図１０に示すバランス表示は，ユーザがバランス表示を認識した上で，負荷のバランスを変えることができるという意味で有用な情報表示である。
【００６０】
また，ループの実行回数について，手続きの場合と同様の表示を行う。図１１に，ループ実行回数合計値の表示形式の一例を示す。また，図１２に，各並列実行単位におけるループ実行回数のバランス表示の形式の一例を示す。
【００６１】
図１１に示す表示において，Ｍａｒｋは，並列実行か逐次実行かの識別であり，ＯＭＰが並列実行，Ｓが逐次実行であることを示している。
【００６２】
また，各実行文の実行回数と並列度数を実行情報ファイルから抽出して，その値をソースコードに対応付けして表示する。ソースコードの存在場所は当解析処理に引数で通知させる。図１３および図１４に，実行文単位の実行回数および並列度数表示の形式の一例を示す。
【００６３】
上記実行回数計測結果解析手段１３等が行う処理は，コンピュータとソフトウェアプログラムとによって実現することができ，そのプログラムは，コンピュータが読み取り可能な可搬媒体メモリ，半導体メモリ，ハードディスク等の適当な記録媒体に格納して，そこから読み出すことによりコンピュータに実行させることができる。
【００６４】
以上から把握できるように，本発明の実施形態の特徴を述べると，以下のとおりである。
【００６５】
（付記１）並列実行プログラムの実行回数解析方法であって，
解析対象の並列実行プログラム翻訳時に，少なくとも並列実行単位ごとに実行回数を累積するための命令を各手続き内に挿入する翻訳過程と，
前記翻訳した並列実行プログラムを実行することにより，翻訳時に設定した命令の実行回数を並列単位ごとに累積する計測過程と，
前記並列実行単位の実行回数計測結果を解析し，少なくとも並列実行における負荷の分散を示す解析結果を出力する解析過程とを有する
ことを特徴とする並列実行プログラムの実行回数解析方法。
【００６６】
（付記２）付記１記載の並列実行プログラムの実行回数解析方法において，
前記翻訳過程では，各手続きの開始位置にその手続き内の各実行文の実行回数を累積するカウント領域を確保する機能を持つ関数の呼出し命令を挿入するとともに，実行回数を累積するカウント命令を手続き内の実行順序が変化する可能性のない実行文列である各基本ブロックの先頭位置，各ループの開始位置および各ループ内の先頭実行文の位置に挿入し，
前記計測過程では，各手続きの命令実行中に出現するカウント命令により前記カウント領域に実行回数を累積し，プログラム全体の終了時に，カウント領域の実行回数を実行情報ファイルに記録し，
前記解析過程では，各並列実行単位の実行回数計測結果を実行情報ファイルから抽出し，各ループ実行におけるループ内実行文の実行回数の平均である各ループの平均回転数を並列実行単位ごとに算出する
ことを特徴とする並列実行プログラムの実行回数解析方法。
【００６７】
（付記３）付記２記載の並列実行プログラムの実行回数解析方法において，
前記解析過程は，
前記実行情報ファイルから抽出した各並列実行単位の実行回数計測結果に基づいて，逐次実行に換算したプログラム中の実行文の総実行回数を算出する過程と，
前記算出した逐次実行に換算したプログラム中の実行文の総実行回数と，各並列実行単位におけるループ内実行文実行回数の合計と，並列度数と，並列実行のためのオーバーヘッドとに基づいて，前記逐次実行に換算したプログラム中の実行文の総実行回数を並列度数に応じて各並列実行単位に分割する場合の並列実行単位における実行文の総実行回数を算出する過程と，
前記算出した並列実行単位における実行文の総実行回数と前記算出した逐次実行に換算したプログラム中の実行文の総実行回数とに基づいて，並列度数を変化させた場合の性能向上率を算出し，算出結果を出力する過程とを有する
ことを特徴とする並列実行プログラムの実行回数解析方法。
【００６８】
（付記４）付記２または付記３記載の並列実行プログラムの実行回数解析方法において，
前記解析過程は，
前記実行情報ファイルから抽出した各並列実行単位の実行回数計測結果に基づいて，並列実行させたプログラム内の各手続き内の実行文の実行回数および各ループの並列実行単位における実行文の実行回数を算出し，算出結果を回数の多い順に出力する過程と，
並列実行単位間の実行回数のバランスを示す情報を出力する過程とを有する
ことを特徴とする並列実行プログラムの実行回数解析方法。
【００６９】
（付記５）付記２から付記４までのいずれか１項に記載の並列実行プログラムの実行回数解析方法において，
前記解析過程は，
前記実行情報ファイルから抽出した各並列実行単位の実行回数計測結果に基づいて，ソースコードに対応つけて各実行文ごとに総実行回数および並列度数を算出し，算出結果を出力する過程を有する
ことを特徴とする並列実行プログラムの実行回数解析方法。
【００７０】
（付記６）並列実行プログラムの実行回数解析方法をコンピュータに実行させるためのプログラムであって，
解析対象の並列実行プログラム翻訳時に，少なくとも並列実行単位ごとに実行回数を累積するための命令を各手続き内に挿入する翻訳処理と，
前記翻訳した並列実行プログラムを実行することにより，翻訳時に設定した命令の実行回数を並列単位ごとに累積する計測処理と，
前記並列実行単位の実行回数計測結果を解析し，少なくとも並列実行における負荷の分散を示す解析結果を出力する解析処理とを，
コンピュータに実行させるための並列実行プログラムの実行回数解析プログラム。
【００７１】
（付記７）並列実行プログラムの実行回数解析方法をコンピュータに実行させるためのプログラムを記録した記録媒体であって，
解析対象の並列実行プログラム翻訳時に，少なくとも並列実行単位ごとに実行回数を累積するための命令を各手続き内に挿入する翻訳処理と，
前記翻訳した並列実行プログラムを実行することにより，翻訳時に設定した命令の実行回数を並列単位ごとに累積する計測処理と，
前記並列実行単位の実行回数計測結果を解析し，少なくとも並列実行における負荷の分散を示す解析結果を出力する解析処理とを，
コンピュータに実行させるための並列実行プログラムの実行回数解析プログラムを記録した記録媒体。
【００７２】
【発明の効果】
本発明に係る並列実行プログラムの実行回数解析方法によって，ループの平均回転数を並列実行単位ごとに測定することにより，負荷分散状況を正確に確認できる。また，負荷の分割数を決定するための具体的な数値の目安を得ることができる。また，並列度数を増加させた場合の並列効果の予測値を表示することにより，性能向上の目安を決定できると共にチューニングの効率向上に寄与することができる。
【００７３】
また，手続き，ループの実行回数を多い順番に表示することにより，並列化候補の抽出が容易となる。また，並列実行単位間のバランスを表示することにより，並列実行単位間の負荷状況を確認することができる。また，ソースコードに対応付けて各実行文の実行回数および並列度数を表示することにより，並列実行状況の認識が容易になり，性能改善のソースコードへのフィードバックが促進される。
【図面の簡単な説明】
【図１】本発明の並列実行プログラムの実行回数解析方法を実現するハードウェア構成の一例を示す図である。
【図２】本発明の並列実行プログラムの実行回数解析方法の概要を示す図である。
【図３】本発明の並列実行プログラムの実行回数解析処理フローの一例を示す図である。
【図４】翻訳時におけるカウント命令の挿入の一例を示す図である。
【図５】解析対象プログラムの実行回数計測方法の一例を示す図である。
【図６】逐次実行に換算したプログラム中の実行文の総実行回数（ＳＴＯＴＡＬ）と並列実行単位の実行文の総実行回数（ＰＴＯＴＡＬ）との関係を示す図である。
【図７】並列度数の変化に対する特定ループの実行文実行回数，ループの平均回転数および性能向上率の見積り値表示の形式の一例を示す図である。
【図８】逐次実行のループの平均回転数に基づく並列負荷分割量の見積り方法を示す図である。
【図９】手続き実行回数合計値の表示形式の一例を示す図である。
【図１０】各並列実行単位における手続き実行回数のバランス表示の形式の一例を示す図である。
【図１１】ループ実行回数合計値の表示形式の一例を示す図である。
【図１２】各並列実行単位におけるループ実行回数のバランス表示の形式の一例を示す図である。
【図１３】実行文単位の実行回数および並列度数表示の形式の一例を示す図である。
【図１４】実行文単位の実行回数および並列度数表示の形式の一例を示す図である。
【図１５】並列化の指定の一例を示す図である。
【符号の説明】
１　並列実行プログラム実行結果解析装置
２　ノードＡ
３　ノードＢ
４　実行情報ファイル
５　高速バス
６　解析結果出力装置
７，７’解析対象プログラム
１１　解析対象プログラム翻訳手段
１２　解析対象プログラム実行回数計測手段
１３　実行回数計測結果解析手段
２１，３１　ＣＰＵ
２２，３２　メモリ
【図１】
2004102594.tif 000003
【図２】
2004102594.tif 000004
【図３】
2004102594.tif 000005
【図４】
2004102594.tif 000006
【図５】
2004102594.tif 000007
【図６】
2004102594.tif 000008
【図７】
2004102594.tif 000009
【図８】
2004102594.tif 000010
【図９】
2004102594.tif 000011
【図１０】
2004102594.tif 000012
【図１１】
2004102594.tif 000013
【図１２】
2004102594.tif 000014
【図１３】
2004102594.tif 000015
【図１４】
2004102594.tif 000016
【図１５】
2004102594.tif 000017