(57)【要約】【課題】並列処理プログラムの各修正方法について性能改善効果を簡単且つ高精度で見積もる。【解決手段】本方法は、並列処理プログラムによる複数のプロセス間における通信履歴データを用いて、各プロセスについて、通信時間以外の実行時間を特定して、当該実行時間だけCPU時間を消費するCPU時間消費関数を生成し、模擬ソースプログラム格納部に格納する工程と、通信履歴データを用いて、各プロセスについて、通信履歴データが示す通信処理を行う通信関数を生成し、模擬ソースプログラム格納部に格納する工程とを含む。このように模擬ソースプログラム格納部に格納された関数で構成される模擬ソースプログラムを用いれば、並列処理プログラムの動作を擬似的に再現できる。この模擬ソースプログラムを用いて様々な修正方法を試してみることができ、性能改善効果を各々の修正方法について高精度で見積もることができる。【選択図】図１
2008146426.tif 000002
【特許請求の範囲】
【請求項１】
並列処理プログラムによる複数のプロセス間における通信履歴データを格納する通信履歴データ格納部に格納された通信履歴データを用いて、各プロセスについて、通信時間以外の実行時間を特定して、当該実行時間だけＣＰＵ時間を消費するＣＰＵ時間消費関数を生成し、模擬ソースプログラム格納部に格納する第１生成ステップと、
前記通信履歴データ格納部に格納された通信履歴データを用いて、各プロセスについて、当該通信履歴データが示す通信処理を行う通信関数を生成し、模擬ソースプログラム格納部に格納する第２生成ステップと、
をコンピュータに実行させるための模擬ソースプログラム生成プログラム。
【請求項２】
前記第１生成ステップが、
前記通信履歴データに含まれる特定のエントリの開始時刻と、前記特定のエントリの１つ前のエントリの終了時刻との差から前記通信時間以外の実行時間を特定するステップ
を含む請求項１記載の模擬ソースプログラム生成プログラム。
【請求項３】
前記第２生成ステップが、
前記通信履歴データに含まれる特定のエントリの通信パラメータを特定するステップと、
特定された前記通信パラメータを含む前記通信関数を生成し、前記模擬ソースプログラム格納部に格納するステップと、
を含む請求項１記載の模擬ソースプログラム生成プログラム。
【請求項４】
並列処理プログラムによる複数のプロセス間における通信履歴データを格納する通信履歴データ格納部に格納された通信履歴データを用いて、各プロセスについて、通信時間以外の実行時間を特定して、当該実行時間だけＣＰＵ時間を消費するＣＰＵ時間消費関数を生成し、模擬ソースプログラム格納部に格納する第１生成ステップと、
前記通信履歴データ格納部に格納された通信履歴データを用いて、各プロセスについて、当該通信履歴データを示す通信処理を行う通信関数を生成し、模擬ソースプログラム格納部に格納する第２生成ステップと、
を含み、コンピュータに実行される情報処理方法。
【請求項５】
前記模擬ソースプログラム格納部に格納された模擬ソースプログラムに対する修正を受け付け、前記模擬ソースプログラム格納部に修正後の模擬ソースプログラムを修正模擬ソースプログラムとして格納するステップと、
前記模擬ソースプログラム格納部に格納されている前記修正模擬ソースプログラムをコンパイルして、修正模擬プログラムを生成するステップと、
前記修正模擬プログラムを実行して実行時間を測定するステップと、
をさらに含む請求項４記載の情報処理方法。
【請求項６】
並列処理プログラムによる複数のプロセス間における通信履歴データを格納する通信履歴データ格納部に格納された通信履歴データを用いて、各プロセスについて、通信時間以外の実行時間を特定して、当該実行時間だけＣＰＵ時間を消費するＣＰＵ時間消費関数を生成し、模擬ソースプログラム格納部に格納する第１生成手段と、
前記通信履歴データ格納部に格納された通信履歴データを用いて、各プロセスについて、当該通信履歴データが示す通信処理を行う通信関数を生成し、模擬ソースプログラム格納部に格納する第２生成手段と、
を有する模擬ソースプログラム生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列処理プログラムの挙動解析及び性能改善のための技術に関する。
【背景技術】
【０００２】
並列処理プログラムでは、複数のプロセスが互いにデータのやりとりを行いながら、処理が進んでゆく。従って、並列処理プログラムの挙動解析や性能改善を行うためには、プロセス間でどのように通信が行われていたのかを理解する必要がある。
【０００３】
従来から、並列処理プログラムの実行時の挙動を把握する技術として、並列処理プログラム実行中に通信履歴を採取して、その履歴をグラフィカルに表示する技術が存在している。このような技術を用いれば、並列処理プログラムのどこでどのような問題が発生しているのかを特定でき、並列処理プログラムの改善に役立つ。
【０００４】
しかし、問題点が分かったとしても、そもそもプログラム修正は簡単ではない。さらに、並列処理プログラムの修正は逐次プログラムの修正よりも困難である。また、問題点の修正方法は１種類とは限られず、様々なアプローチが存在するのが通常であるが、その全てのアプローチを試すのは、並列処理プログラムの修正が困難であることを考えると、現実的ではない。仮に全ての修正方法を試したとしても、最終的に採用される修正方法は１種類であり、採用されなかった修正方法に要した時間は無駄となるので、作業効率が悪い。
【０００５】
また、例えば、特開平６−５９９３９号公報には、アプリケーション実行時の各種の情報をトレース情報として蓄積しておき、そのトレース情報を元にシミュレーションを行う技術が開示されている。具体的には、複数のプロセッサからなり、メッセージ通信を基本とした並列計算機において、ユーザプログラムの実行時に、メッセージ送信開始時刻、メッセージ送信終了時刻、送信メッセージの送信先、サイズ、メッセージ受信開始時刻、メッセージ受信終了時刻、受信メッセージの送信元、サイズ、バリア同期開始時刻、バリア同期終了時刻等をトレース情報として蓄積し、そのトレース情報をシミュレータの実行諸元に基づいて書き換え、通信時間、或いは、通信以外の演算時間等を求めて、並列計算機の性能を評価するように構成する。しかしながら、並列処理の模擬ソースプログラムの生成については触れられていない。
【０００６】
さらに、特開２００１−１５４９９８号公報には、並列化指示手順を提供し、解析モデルに対して、解析作業者に並列化したい個所を指示してもらい、並列化連成解析プログラム生成手順により、並列化連成解析プログラムを自動生成し、その並列化連成解析プログラムを実行する並列化汎用連成解析装置を提供することで、並列化した解析を行う技術が開示されている。しかし、人手による修正を前提とする模擬ソースプログラムの生成については考慮されていない。
【０００７】
また、特開平４−２２５４３９号公報には、複数のプロセスの並列動作時のログ／サンプリングデータを解析して出力する解析技術であって、並列計算プログラムの本来の実行の様子を変化させないで、デバッグ／チューニングに必要なログやサンプリングデータの量を少なくすると共に、出力装置の使用量や実行後解析に要する時間を低減するための技術が開示されている。具体的には、複数のプロセス間で一斉同期しつつ並列計算実行中に、各プロセスの予め指定したイベントのときにローカルログをそれぞれ採取しておき、あるいは予め指定したサンプリング時間間隔でローカルサンプリングデータをそれぞれ採取しておき、一斉同期時にこれら採取したローカルログあるいはローカルサンプリングデータを解析して必要なログあるいはサンプリングデータのみを出力するものである。しかし、人手による修正を前提とする模擬ソースプログラムの生成については考慮されていない。
【特許文献１】特開平６−５９９３９号公報
【特許文献２】特開２００１−１５４９９８号公報
【特許文献３】特開平４−２２５４３９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
以上述べたような従来技術では、複数存在する修正方法の各々について性能改善効果を高精度で見積もるための技術は開示されておらず、並列処理プログラムの修正を効率よく行えるわけではない。
【０００９】
従って、本発明の目的は、並列処理プログラムに対する各修正方法について性能改善効果を簡単且つ高精度で見積もることができるようにするための技術を提供することである。
【００１０】
さらに、本発明の他の目的は、並列処理プログラムの修正を効率よく行うことができるようにするための技術を提供することである。
【課題を解決するための手段】
【００１１】
本発明に係る情報処理方法は、並列処理プログラムによる複数のプロセス間における通信履歴データを格納する通信履歴データ格納部に格納された通信履歴データを用いて、各プロセスについて、通信時間以外の実行時間を特定して、当該実行時間だけＣＰＵ時間を消費するＣＰＵ時間消費関数を生成し、模擬ソースプログラム格納部に格納する第１生成ステップと、通信履歴データ格納部に格納された通信履歴データを用いて、各プロセスについて、当該通信履歴データが示す通信処理を行う通信関数を生成し、模擬ソースプログラム格納部に格納する第２生成ステップとを含む。
【００１２】
このように模擬ソースプログラム格納部に格納された関数で構成される模擬ソースプログラムを用いれば、並列処理プログラムの動作を擬似的に再現できる。このため、修正の簡単な模擬ソースプログラムを用いて様々な修正方法を試してみることができ、性能改善効果をそれぞれの修正方法について高精度で見積もることができるようになる。
【００１３】
上で述べた第１生成ステップが、通信履歴データに含まれる特定のエントリの開始時刻と、特定のエントリの１つ前のエントリの終了時刻との差から通信時間以外の実行時間を特定するステップを含むようにしてもよい。
【００１４】
さらに、上で述べた第２生成ステップが、通信履歴データに含まれる特定のエントリの通信パラメータを特定するステップと、特定された通信パラメータを含む通信関数を生成し、模擬ソースプログラム格納部に格納するステップとを含むようにしてもよい。
【００１５】
さらに、本発明に係る情報処理方法は、模擬ソースプログラム格納部に格納された模擬ソースプログラムに対する修正を受け付け、模擬ソースプログラム格納部に修正後の模擬ソースプログラムを修正模擬ソースプログラムとして格納するステップと、模擬ソースプログラム格納部に格納されている修正模擬ソースプログラムをコンパイルして、修正模擬プログラムを生成するステップと、修正模擬プログラムを実行して実行時間を測定するステップとをさらに含むようにしてもよい。このようにすれば、実行時間が短い修正方法を特定して、実際の並列処理プログラムの修正を行うことができるため、並列処理プログラムの修正を効率よく行うことができるようになる。
【００１６】
なお、本情報処理方法をコンピュータに実行させるためのプログラムを作成することができ、このプログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等の記憶媒体又は記憶装置に格納される。また、ネットワークなどを介してデジタル信号として配信される場合もある。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【発明の効果】
【００１７】
本発明によれば、並列処理プログラムに対する各修正方法について性能改善効果を簡単且つ高精度で見積もることができるようになる。
【００１８】
また、本発明の他の側面によれば、並列処理プログラムの修正を効率よく行うことができるようになる。
【発明を実施するための最良の形態】
【００１９】
図１に本発明の一実施の形態に係るシステム概要図を示す。本実施の形態のシステムは、前処理部１００と模擬処理部２００とを有する。前処理部１００は、並列処理プログラムであるオリジナルアプリケーション１０１と以下で述べるような実行ログを生成するための測定用ライブラリ１０２とをリンクして、実行ログを生成することができる並列処理プログラムのオリジナルアプリケーション１０３を生成する。オリジナルアプリケーション１０３は、ＥＸＥ形式（実行可能な形式）のプログラムである。
【００２０】
模擬処理部２００は、オリジナルアプリケーション１０３を試験実行することによって生成される実行ログ（具体的に通信履歴データ）を蓄積する実行ログ格納部２０１（通信履歴データ格納部とも呼ぶ）と、実行ログ格納部２０１に格納されている実行ログから模擬ソースプログラム２０３１を生成する模擬コードジェネレータ２０２と、模擬コードジェネレータ２０２が生成した模擬ソースプログラム２０３１を格納する模擬ソースプログラム格納部２０３と、模擬ソースプログラム２０３１と当該模擬ソースプログラム２０３１をＥＸＥ形式に変換する際に必要となる任意のライブラリ２０４とを用いてコンパイル及びリンクを行って生成された試験用模擬アプリケーション２０５１（ＥＸＥ形式）を格納する試験用模擬アプリケーション格納部２０５と、試験用模擬アプリケーション２０５１を試験実行して測定した測定結果を格納する測定結果格納部２０６とを有する。なお、明示的には図示していないが、模擬処理部２００には、並列処理プログラム用のコンパイラを含むようにしても良い。同様に、模擬ソースプログラム２０３１については、ユーザによって修正が加えられるが、ユーザの修正を支援するツールやエディタ等を含む場合もある。
【００２１】
模擬処理部２００は、並列コンピュータによって試験実行されたオリジナルアプリケーション１０３の実行ログを取得して、実行ログ格納部２０１に格納する。模擬処理部２００の模擬コードジェネレータ２０２は、実行ログ格納部２０１に格納されている実行ログを用いて模擬ソースプログラム２０３１を生成し、擬似ソースプログラム格納部２０３に格納する。模擬ソースプログラム２０３１は、以下で詳細に述べるが、オリジナルアプリケーション１０３の動作と同様の動作を簡略化した形で実現させるためのプログラムであり、オリジナルアプリケーション１０３の代わりに模擬ソースプログラム２０３１を可能な修正方法で修正して、当該修正方法の性能改善効果を試すためのものである。従って、模擬ソースプログラム格納部２０３に格納されている模擬ソースプログラム２０３１は、ユーザによって修正される。修正後の模擬ソースプログラム２０３１は、任意のライブラリ２０４とリンクされコンパイルされる。コンパイルの結果として生成される試験用模擬アプリケーション２０５１は、試験用模擬アプリケーション格納部２０５に格納される。その後、試験用模擬アプリケーション２０５１は、並列コンピュータによって実行され、同時に実行時間が測定されて、測定結果格納部２０６に格納される。この測定結果格納部２０６に格納されている実行時間によって、ユーザが行った修正方法が効果的であるかを判断することができる。すなわち実行時間が著しく短くなっていれば、より効果的であり、短くなっていなければ効果的とは言えない修正方法ということが分かる。修正方法が効果的ではない場合には、再度模擬ソースプログラム２０３１の修正に戻る。
【００２２】
効果的な修正方法であることが確認できれば、ユーザは、実施した修正方法に応じて実際に並列処理プログラムのソースコードの修正を行う。なお、模擬ソースプログラム２０３１の修正は簡単に行うことができるが、並列処理プログラムのソースコードの修正は、非常に困難であるから、実施すべき修正方法を実現できない場合もある。そのような場合には、他の効果的な修正方法を探すこととなる。
【００２３】
次に、図２に実行ログ格納部２０１に格納されるデータの一例を示す。図２の例は、１つのプロセスについての実行ログを示している。図２の例では、第１行目に採取開始時刻が記録されており、最終行（第８行）に採取終了時刻が記録されている。第２行目乃至第７行目には、通信関数名（func_name）と、開始時刻（stime）と、終了時刻（etime）と、各種パラメータ（params[]。例えば通信データ量と宛先プロセスＩＤ。）とが登録されている。本実施の形態では、データを送信するMPI_Send関数と、データを受信するMPI_Recv関数のいずれかが登録される。
【００２４】
このような実行ログを使用して、模擬コードジェネレータ２０２は、図３に示すような処理を実行することによって、模擬ソースプログラム２０３１を生成する。まず、実行ログ格納部２０１に格納されている採取開始時刻（stime0）と採取終了時刻（etime0）を取得し、変数curtimeにstime0を代入する（ステップＳ１）。次に、実行ログ格納部２０１から次の１エントリ分のデータを取得する（ステップＳ３）。そして、取得したエントリが有効であるか判断する（ステップＳ５）。より具体的には、取得したエントリが、通信関数であるか判断する。取得したエントリが有効である場合には、該当エントリの開始時刻（stime）と変数curtimeの差分を計算し、ＣＰＵ時間を差分時間だけ消費するＣＰＵ時間消費関数を生成し、模擬ソースプログラム格納部２０３に格納する（ステップＳ７）。そして、該当エントリから通信関数のパラメータを抽出し、抽出したパラメータを含み且つ該当エントリに係る通信関数を生成し、模擬ソースプログラム格納部２０３に格納する（ステップＳ９）。
【００２５】
また、該当エントリの終了時刻（etime）を変数curtimeに代入する（ステップＳ１１）。そしてステップＳ３に戻る。
【００２６】
一方、エントリが無効であると判断された場合には、変数curtimeと採取終了時刻etime0の差分を計算し、ＣＰＵ時間を当該差分時間だけ消費するＣＰＵ時間消費関数を生成し、模擬ソースプログラム格納部２０３に格納する（ステップＳ１３）。そして処理を終了する。
【００２７】
このような処理を実施すれば、例えば図２のような実行ログから図４に示すような模擬ソースプログラム２０３１が生成される。まず、実行ログの第２行目の開始時刻stime＝１０と採取開始時刻stime0＝０との差分１０だけＣＰＵ時間を消費するＣＰＵ時間消費関数use_cputime(10)を生成し、模擬ソースプログラム格納部２０３に格納する。次に、実行ログの第２行目のパラメータ(128,1,...)を特定し、当該パラメータと実行ログの第２行目の通信関数MPI_Sendから、通信関数MPI_Send(128,1,...）を生成し、模擬ソースプログラム格納部２０３に格納する。ここでcurtimeに実行ログの第２行目の終了時刻etime＝２０を代入する。
【００２８】
さらに、実行ログの第３行目の開始時刻stime＝３０とcurtime＝２０との差分１０だけＣＰＵ時間を消費するＣＰＵ時間消費関数use_cputime(10)を生成し、模擬ソースプログラム格納部２０３に格納する。次に、実行ログの第３行目のパラメータ(128,1,...)を特定し、当該パラメータと実行ログの第３行目の通信関数MPI_Recvから、通信関数MPI_Recv(128,1,...）を生成し、模擬ソースプログラム格納部２０３に格納する。ここでcurtimeに実行ログの第３行目の終了時刻etime＝２００を代入する。
【００２９】
さらに、実行ログの第４行目の開始時刻stime＝２２０とcurtime＝２００との差分２０だけＣＰＵ時間を消費するＣＰＵ時間消費関数use_cputime(20)を生成し、模擬ソースプログラム格納部２０３に格納する。次に、実行ログの第４行目のパラメータ(256,2,...)を特定し、当該パラメータと実行ログの第４行目の通信関数MPI_Sendから、通信関数MPI_Send(256,2,...）を生成し、模擬ソースプログラム格納部２０３に格納する。ここでcurtimeに実行ログの第４行目の終了時刻etime２５０を代入する。
【００３０】
以下同様に処理されれば、図４に示すような模擬ソースプログラム２０３１が生成される。ユーザは、例えば模擬処理部２００のツール又はエディタにて模擬ソースプログラム２０３１を修正する。
【００３１】
次に、模擬ソースプログラム２０３１の修正例及び性能改善効果の検証例を図５乃至図１０を用いて説明する。まず、図５（ａ）に示すようなプロセス０についての模擬ソースプログラムが得られ、さらに図５（ｂ）に示すようなプロセス１についての模擬ソースプログラムが得られているものとする。ここでは、これら２つのプロセス間でデータ交換しながら処理が進められるものとする。すなわち、プロセス０は、MPI_Send(128,1,...)を使用し、プロセス１は、MPI_Recv(128,0,...)を使用して、プロセス０からプロセス１へデータが送信される。また、プロセス１は、MPI_Send(128,0,...)を使用し、プロセス０は、MPI_Recv(128,1,...)を使用して、プロセス１からプロセス０へデータが送信される。このような処理をさらにもう一回行っている。
【００３２】
図５（ａ）及び（ｂ）のような模擬ソースプログラムを任意のライブラリ２０４と共にリンク及びコンパイルして試験用模擬アプリケーション２０５１を生成して実行した際の詳細な実行時間測定結果を図６に示す。プロセス０では、ＣＰＵ時間消費関数use_cputime(100)によって時間１００が消費され、次にMPI_Send(128,1,...)によってデータがプロセス１に送信されるが、プロセス１では、ＣＰＵ時間消費関数use_cputime(300)によって時間３００が消費され、次にMPI_Recv(128,0,...)によってデータをプロセス０から受信する。ここで、ＣＰＵ時間消費関数use_cputimeで消費される時間に偏りがあるため、データ送信待ちが発生している。
【００３３】
なお、プロセス１におけるMPI_Send(128,0,...)とプロセス０におけるMPI_Recv(128,1,...)とによるプロセス１からプロセス０へのデータ送信については、送信待ちは生じていない。
【００３４】
さらに、プロセス０では、ＣＰＵ時間消費関数use_cputime(300)によって時間３００が消費され、次にMPI_Send(128,1,...)によってデータがプロセス１に送信されるが、プロセス１では、ＣＰＵ時間消費関数use_cputime(100)によって時間１００が消費され、次にMPI_Recv(128,0,...)によってデータをプロセス０から受信する。ここで、ＣＰＵ時間消費関数use_cputimeで消費される時間に偏りがあるため、データ受信待ちが発生している。
【００３５】
なお、プロセス１におけるMPI_Send(128,0,...)とプロセス０におけるMPI_Recv(128,1,...)とによるプロセス１からプロセス０へのデータ送信については、送信待ち又は受信待ちは生じていない。
【００３６】
このように、ロードインバランスが発生しているので、実行時間が長くなってしまい、並列効率が悪い状況である。
【００３７】
このようなロードインバランスを解消すべく、図５（ａ）及び（ｂ）に示した模擬ソースプログラムを図７（ａ）及び（ｂ）に示すように修正する。すなわち、図５（ａ）及び（ｂ）に示すように修正前の模擬ソースプログラムでは、プロセス０で時間１００を消費している間にプロセス１で時間３００を消費しており、プロセス０で時間３００を消費している間にプロセス１で時間１００を消費しているので、通信の回数やタイミングについては変更せずにプロセス０でもプロセス１でも時間２００を消費するように修正する。すなわち、use_cputime(100)及びuse_cputime(300)をuse_cputime(200)に書き換える。
【００３８】
このような修正後の模擬ソースプログラムを任意のライブラリ２０４と共にリンク及びコンパイルして試験用模擬アプリケーション２０５１を生成し、当該試験用模擬アプリケーション２０５１を試験実行すると、図８に示すように、図６に示した２カ所のデータ送信待ち及び受信待ちが解消されて、その分実行時間が削減されることが分かる。すなわち、実行時間がプロセス０とプロセス１とでバランスするように実際の並列処理プログラムを修正することができれば、図８に示したような性能改善効果を得ることができるようになる。
【００３９】
次に図５（ａ）及び（ｂ）に示した模擬ソースプログラム２０３１を他の方法で修正する例を図９（ａ）及び（ｂ）に示す。図９（ａ）に示すように、プロセス０では、use_cputime(100)とuse_cputime(300)とを統合してuse_cputime(400)に変更し、２回のMPI_Send(128,1,...)を１回のMPI_Send(256,1,...)に変更し、２回のMPI_Recv(128,1,...)を１回のMPI_Recv(256,1,...)に変更する。通常通信関数の起動には時間がかかるため、総通信量が同じでも通信回数を減らすことによって実行時間を短縮できるはずである。図９（ｂ）でも同様である。
【００４０】
このような修正後の模擬ソースプログラムを任意のライブラリ２０４と共にリンク及びコンパイルして試験用模擬アプリケーション２０５１を生成し、当該試験用模擬アプリケーション２０５１を試験実行すると、例えば図１０のような測定結果を得る。しかし、図１０では、プロセス０及びプロセス１の間のデータ通信の時間が余計にかかるようになってしまい、削減される実行時間が少なくなってしまっている。すなわち、図９（ａ）及び（ｂ）に示すような修正を行っても性能改善効果はあまり得られず、実際に並列処理プログラムをこのように修正することは無駄であることが分かる。
【００４１】
以上述べたように、模擬ソースプログラム２０３１を生成することによって、様々な修正方法を簡単に試すことができるようになる。そして、試行した修正方法の中で性能改善効果が高い修正方法を、実際に並列処理プログラムに施せば、修正の困難な並列処理プログラムに対する無駄な作業を減らすことができ、作業効率が向上する。
【００４２】
以上本発明の実施の形態を説明したが本発明はこれに限定されるものではない。例えば図１に示した機能ブロック図は一例であって、様々な補助機能が付加されたり、コンパイラと一体化される場合もある。
【００４３】
また、修正の方法については、上では２つの例を示したが、他の方法を採用しても良い。いずれの場合においても、性能改善効果が高い修正方法を採用して、並列処理プログラムを修正する。但し、模擬ソースプログラム２０３１は、簡単に修正できるが、並列処理プログラムは修正が困難で、実際的には性能改善効果が高いとされる修正方法を採用できない場合もある。このような場合であっても、性能改善効果が著しく低い修正方法を、並列処理プログラムに施すことが無くなるので、作業効率の改善は顕著である。
【００４４】
なお、前処理部１００及び模擬処理部２００は例えば１又は複数のコンピュータ装置であって、図１１に示すように当該コンピュータ装置においては、メモリ２５０１（記憶部）とＣＰＵ２５０３（処理部）とハードディスク・ドライブ（ＨＤＤ）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ）及びＷｅｂブラウザを含むアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。必要に応じてＣＰＵ２５０３は、表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ２５０１に格納され、必要があればＨＤＤ２５０５に格納される。このようなコンピュータは、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【００４５】
（付記１）
並列処理プログラムによる複数のプロセス間における通信履歴データを格納する通信履歴データ格納部に格納された通信履歴データを用いて、各プロセスについて、通信時間以外の実行時間を特定して、当該実行時間だけＣＰＵ時間を消費するＣＰＵ時間消費関数を生成し、模擬ソースプログラム格納部に格納する第１生成ステップと、
前記通信履歴データ格納部に格納された通信履歴データを用いて、各プロセスについて、当該通信履歴データが示す通信処理を行う通信関数を生成し、模擬ソースプログラム格納部に格納する第２生成ステップと、
をコンピュータに実行させるための模擬ソースプログラム生成プログラム。
【００４６】
（付記２）
前記第１生成ステップが、
前記通信履歴データに含まれる特定のエントリの開始時刻と、前記特定のエントリの１つ前のエントリの終了時刻との差から前記通信時間以外の実行時間を特定するステップ
を含む付記１記載の模擬ソースプログラム生成プログラム。
【００４７】
（付記３）
前記第２生成ステップが、
前記通信履歴データに含まれる特定のエントリの通信パラメータを特定するステップと、
特定された前記通信パラメータを含む前記通信関数を生成し、前記模擬ソースプログラム格納部に格納するステップと、
を含む付記１記載の模擬ソースプログラム生成プログラム。
【００４８】
（付記４）
並列処理プログラムによる複数のプロセス間における通信履歴データを格納する通信履歴データ格納部に格納された通信履歴データを用いて、各プロセスについて、通信時間以外の実行時間を特定して、当該実行時間だけＣＰＵ時間を消費するＣＰＵ時間消費関数を生成し、模擬ソースプログラム格納部に格納する第１生成ステップと、
前記通信履歴データ格納部に格納された通信履歴データを用いて、各プロセスについて、当該通信履歴データが示す通信処理を行う通信関数を生成し、模擬ソースプログラム格納部に格納する第２生成ステップと、
を含み、コンピュータに実行される情報処理方法。
【００４９】
（付記５）
前記模擬ソースプログラム格納部に格納された模擬ソースプログラムに対する修正を受け付け、前記模擬ソースプログラム格納部に修正後の模擬ソースプログラムを修正模擬ソースプログラムとして格納するステップと、
前記模擬ソースプログラム格納部に格納されている前記修正模擬ソースプログラムをコンパイルして、修正模擬プログラムを生成するステップと、
前記修正模擬プログラムを実行して実行時間を測定するステップと、
をさらに含む付記４記載の情報処理方法。
【００５０】
（付記６）
並列処理プログラムによる複数のプロセス間における通信履歴データを格納する通信履歴データ格納部に格納された通信履歴データを用いて、各プロセスについて、通信時間以外の実行時間を特定して、当該実行時間だけＣＰＵ時間を消費するＣＰＵ時間消費関数を生成し、模擬ソースプログラム格納部に格納する第１生成手段と、
前記通信履歴データ格納部に格納された通信履歴データを用いて、各プロセスについて、当該通信履歴データが示す通信処理を行う通信関数を生成し、模擬ソースプログラム格納部に格納する第２生成手段と、
を有する模擬ソースプログラム生成装置。
【図面の簡単な説明】
【００５１】
【図１】本発明の実施の形態における機能概要図である。
【図２】実行ログ格納部に格納されるデータ例を示す図である。
【図３】模擬コードジェネレータの処理フローを示す図である。
【図４】模擬ソースプログラムの一例を示す図である。
【図５】（ａ）及び（ｂ）は、模擬ソースプログラムの一例を示す図である。
【図６】図５（ａ）及び（ｂ）の模擬ソースプログラムをコンパイルした後に実行した際の様子を示す図である。
【図７】（ａ）及び（ｂ）は、模擬ソースプログラムの第１の修正例を示す図である。
【図８】図７（ａ）及び（ｂ）の模擬ソースプログラムをコンパイルした後に実行した際の様子を示す図である。
【図９】（ａ）及び（ｂ）は、模擬ソースプログラムの第２の修正例を示す図である。
【図１０】図９（ａ）及び（ｂ）の模擬ソースプログラムをコンパイルした後に実行した際の様子を示す図である。
【図１１】コンピュータの機能ブロック図である。
【符号の説明】
【００５２】
１００  処理部    ２００  模擬処理部
１０１  オリジナルアプリケーション
１０２  測定用ライブラリ
１０３  オリジナルアプリケーション（ＥＸＥ形式）
２０１  実行ログ格納部
２０２  模擬コードジェネレータ
２０３  擬似ソースプログラム格納部
２０４  任意のライブラリ
２０５  試験用模擬アプリケーション格納部
２０６  測定結果格納部
２０３１  模擬ソースプログラム
２０５１  試験用模擬アプリケーション
【図１】
2008146426.tif 000003
【図２】
2008146426.tif 000004
【図３】
2008146426.tif 000005
【図４】
2008146426.tif 000006
【図５】
2008146426.tif 000007
【図６】
2008146426.tif 000008
【図７】
2008146426.tif 000009
【図８】
2008146426.tif 000010
【図９】
2008146426.tif 000011
【図１０】
2008146426.tif 000012
【図１１】
2008146426.tif 000013