(57)【特許請求の範囲】
【請求項１】
分散並列処理される複数のプロセスの各々について、他のプロセスとの間の通信の際の自プロセスの待機時間をサンプリングしたサンプリングデータを取得する取得部と、
前記サンプリングデータに基づいて、前記複数のプロセスの各々について、他のプロセスとの間の自プロセスの待機時間の合計と、他のプロセスと自プロセスとの間の通信の際の他のプロセスの待機時間の合計を求める集計部と、
前記集計部による集計結果を解析して前記複数のプロセスに対する処理の配分状態を評価する解析部と
を備えたことを特徴とする解析装置。
【請求項２】
前記集計部は、サンプリング時に実行中であった関数ごとに前記他のプロセスとの間の自プロセスの待機時間の合計と、他のプロセスと自プロセスとの間の通信の際の他のプロセスの待機時間の合計を求め、前記解析部は前記関数ごとに処理の配分状態を評価することを特徴とする請求項１に記載の解析装置。
【請求項３】
前記解析部は、
前記他のプロセスとの間の自プロセスの待機時間の合計が他のプロセスよりも小さく、且つ前記他のプロセスと自プロセスとの間の通信の際の他のプロセスの待機時間の合計が他のプロセスに対して大きいプロセスについて、処理の配分量を削減すべきであると評価し、
前記他のプロセスとの間の自プロセスの待機時間の合計が他のプロセスよりも大きく、且つ前記他のプロセスと自プロセスとの間の通信の際の他のプロセスの待機時間の合計が他のプロセスに対して小さいプロセスについて処理の配分量を増加すべきであると評価し、
前記他のプロセスとの間の自プロセスの待機時間の合計が他のプロセスよりも大きく、且つ前記他のプロセスと自プロセスとの間の通信の際の他のプロセスの待機時間の合計が他のプロセスに対して大きいプロセスについて処理のばらつきを抑制すべきであると評価することを特徴とする請求項１または２に記載の解析装置。
【請求項４】
解析装置が実行する解析方法であって、
前記解析装置の取得部が、分散並列処理される複数のプロセスの各々について、他のプロセスとの間の通信の際の自プロセスの待機時間をサンプリングしたサンプリングデータを取得するステップと、
前記解析装置の集計部が、前記サンプリングデータに基づいて、前記複数のプロセスの各々について、他のプロセスとの間の自プロセスの待機時間の合計と、他のプロセスと自プロセスとの間の通信の際の他のプロセスの待機時間の合計を求める集計ステップと、
前記解析装置の解析部が、前記集計ステップによる集計結果を解析して前記複数のプロセスに対する処理の配分状態を評価するステップと
を含んだことを特徴とする解析方法。
【請求項５】
コンピュータを、
分散並列処理される複数のプロセスの各々について、他のプロセスとの間の通信の際の自プロセスの待機時間をサンプリングしたサンプリングデータを取得する取得部、
前記サンプリングデータに基づいて、前記複数のプロセスの各々について、他のプロセスとの間の自プロセスの待機時間の合計と、他のプロセスと自プロセスとの間の通信の際の他のプロセスの待機時間の合計を求める集計部、
前記集計部による集計結果を解析して前記複数のプロセスに対する処理の配分状態を評価する評価部
として機能させるための解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、解析装置、解析方法および解析プログラムに関する。
【背景技術】
【０００２】
近年、複数のプロセッサをインターコネクト装置（Interconnect）を用いて接続したシステムである分散メモリ型マルチプロセッサが開発されている。分散メモリ型マルチプロセッサは、各プロセッサにそれぞれプロセスを割り当て、プロセス間でＭＰＩ（The Message Passing Interface Standard）などの通信ライブラリを使って相互に通信することで、全体の分散並列処理を行う。
【０００３】
かかる分散並列処理では、各プロセスに負荷を適切に配分することで性能の向上が図られる。このため、分散メモリ型マルチプロセッサ並列計算機で動作するアプリケーションプログラム（分散並列処理プログラム）は、性能特性指標の項目として、負荷バランスの均一性を有する。この負荷バランスの均一性を簡易かつ精密に観測し、プログラムの性能特性を正確に分析することが期待される。
【０００４】
分散並列処理プログラムの各プロセスは、それぞれ計算処理を行い、その後、相互に通信処理を行う。通信処理では、通信相手の計算処理が終わっていない場合には通信待ちが発生する。したがって、負荷バランスの均一性を測定するためには、通信待ちの発生状況を把握することが有効である。
【０００５】
プログラムの性能分析手法としては、トレースログ方式やサンプリング方式が知られている。トレースログ方式は、プログラム実行時に、各種イベントが発生する度に時刻等の付随する情報とともにイベントの発生をログに出力する。そして、プログラムの走行後、ログを解析することで、各種性能分析を行う手法である。トレースログ方式は、各種イベントの発生時刻や回数を正確に記録することができる点が長所であるが、出力されるログの量が膨大であり、長時間にわたるプログラム実行を分析することができない。また、ログの出力自体が性能特性に影響する場合がある。
【０００６】
サンプリング方式では、プログラム実行時に、一定の時間間隔ごとにプログラムの走行状況等が確認され、記録される。そして、プログラムの走行後、記録を統計的に解析することで各種性能分析がなされる。サンプリング方式は、トレースログ方式に比して記録の量を抑えることができ、長時間にわたるプログラム実行を分析することができる。また、外乱が少ないため、性能特性への影響も少ない。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平５−２５０３３９号公報
【特許文献２】特開平６−５９９４４号公報
【特許文献３】特開２００４−３４１７５０号公報
【特許文献４】特開平６−８３６０８号公報
【特許文献５】特開２００７−２０７１７３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、サンプリング方式では、各種イベントの発生時刻や回数を正確に知ることができない。従って、従来のサンプリング方式によるプログラムの性能分析では、通信待ち状況を悪化させている原因の特定も難しい。
【０００９】
そこで、１つの側面では、本発明は、改善されたサンプリング方式を提供することを目的とする。
【課題を解決するための手段】
【００１０】
１つの案では、解析装置、解析方法および解析プログラムは、分散並列処理される複数のプロセスの各々について、他のプロセスとの間の通信の際の自プロセスの待機時間をサンプリングしたサンプリングデータを取得し、サンプリングデータに基づいて、複数のプロセスの各々について、他のプロセスとの間の自プロセスの待機時間の合計と、他のプロセスと自プロセスとの間の通信の際の他のプロセスの待機時間の合計を求め、その結果を解析して複数のプロセスに対する処理の配分状態を評価する。
【発明の効果】
【００１１】
本発明によれば、改善されたサンプリング方式を提供することができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、実施例に係る分散メモリ型マルチプロセッサ並列計算機の構成図である。
【図２】図２は、プロセス間の通信についての説明図である。
【図３】図３は、分散プロセスの処理についての説明図である。
【図４】図４は、サンプリングデータの比較例の説明図である。
【図５】図５は、サンプリングデータＤ０に対応する処理状態の説明図である。
【図６】図６は、プロセッサ１１〜１４における処理動作を説明するフローチャートである。
【図７】図７は、解析装置３０の処理動作を説明するフローチャートである。
【図８】図８は、集計データＤ２の具体例の説明図である。
【図９】図９は、解析部３３による解析についての説明図である。
【図１０】図１０は、関数ごとの評価を行う場合のプロセッサ１１〜１４における処理動作を説明するフローチャートである。
【図１１】図１１は、サンプリング（Ｓ６００）の詳細について説明するフローチャートである。
【図１２】図１２は、関数について評価する場合の解析装置３０の処理動作を説明するフローチャートである。
【図１３】図１３は、待ち状況マトリクス、関数毎マトリクス、集計マトリクスの具体例の説明図である。
【図１４】図１４は、集計マトリクスからの評価と修正指針の作成についての説明図である。
【発明を実施するための形態】
【００１３】
以下に、本願の開示する解析装置、解析方法および解析プログラムを図面に基づいて詳細に説明する。なお、以下の具体的な実施例に本発明を限定するものではない。
【実施例】
【００１４】
［システムの構成］
図１は、実施例に係る分散メモリ型マルチプロセッサ並列計算機の構成図である。図１に示した例では、プロセッサ１１〜１４がインターコネクト装置（interconnect）２１に接続され、プロセッサ１１〜１４はインターコネクト装置２１を介して相互に通信可能である。
【００１５】
プロセッサ１１〜１４は、それぞれが１または複数のプロセスを実行する。図１に示した例では、プロセッサ１１がアプリケーションプロセスＰａ１を実行し、プロセッサ１２がアプリケーションプロセスＰａ２を実行している。同様に、プロセッサ１３がアプリケーションプロセスＰａ３を実行し、プロセッサ１４がアプリケーションプロセスＰａ４を実行している。
【００１６】
アプリケーションプロセスＰａ１〜Ｐａ４は、アプリケーションプログラムのプロセスを分散して割り当てたプロセスであり、プロセッサ１１〜１４によって並列して処理される。プロセッサ１１〜１４は、自らに配分されたプロセスを計算処理した後、インターコネクト装置２１を介して通信し、処理を同期する。
【００１７】
図２は、プロセス間の通信についての説明図である。図２に示した例では、プロセスＰａ１において、プロセスＰａ２に対する送信処理ＭＰＩ＿Ｓｅｎｄが発生している。プロセスＰａ２は、プロセスＰａ１からの通信を受信処理ＭＰＩ＿Ｒｅｃｖによって受信する。その後、同様に、プロセスＰａ２において、プロセスＰａ１に対する送信処理ＭＰＩ＿Ｓｅｎｄが発生し、プロセスＰａ１は受信処理ＭＰＩ＿Ｒｅｃｖによって受信をおこなっている。さらに、プロセスＰａ１とプロセスＰａ２でＭＰＩ＿Ｂａｒｒｉｅｒによる同期を行っている。
【００１８】
図３は、分散プロセスの処理についての説明図である。図３に示した例では、プロセスＰａ１が自らに割り当てられた処理を８０ｍｓかけて計算した後、２０ｍｓの通信処理で同期している。これに対し、プロセスＰａ２は、自らに割り当てられた計算処理を４０ｍｓで終了し、プロセスＰａ１の計算処理終了を待つ通信待ち状態が４０ｍｓ発生している。
【００１９】
同様に、プロセスＰａ３は、自らに割り当てられた計算処理を２０ｍｓで終了し、プロセスＰａ１の計算処理終了を待つ通信待ち状態が６０ｍｓ発生している。また、プロセスＰａ４は、自らに割り当てられた計算処理を６０ｍｓで終了し、プロセスＰａ１の計算処理終了を待つ通信待ち状態が２０ｍｓ発生している。
【００２０】
図３に示した例では、プロセスＰａ１の計算処理が重いために、プロセスＰａ２〜Ｐａ４が待たされる状態となっている。このため、プロセスＰａ１に割り当てていた処理を他のプロセスに割り当てることとすれば、負荷バランスを向上することができる。
【００２１】
図４は、サンプリングデータの比較例の説明図である。図４に示したように、分散したプロセスＰａ１〜Ｐａ４からサンプリングによって取得したサンプリングデータＤ０は、各プロセスの計算処理コスト、通信待ちコスト、通信処理コストを取得している。
【００２２】
このサンプリングデータＤ０から、各プロセスが計算、通信待ち、通信処理にどれだけの時間を割いたかを知ることができる。図４に示した例では、プロセスＰａ３の計算処理コストが他のプロセスに比して高いため、プロセスＰａ３が各プロセスの通信待ち状況を乱していると考えることができる。しかし、プロセスＰａ３も通信待ちコストを持っており、他のプロセスの計算終了を待っていることから、他のプロセスによって処理が遅らさせている可能性もある。
【００２３】
図５は、サンプリングデータＤ０に対応する処理状態の説明図である。図５に示した例では、１マスがサンプリングデータＤ０のコスト１０に対応している。図５に示したように、同期タイミングｔ１までの間、プロセスＰａ４はコスト１０の計算処理を実行し、コスト５０の通信待ちをしている。同様に、同期タイミングｔ１までの間、プロセスＰａ１はコスト５０の計算処理を実行し、コスト１０の通信待ちをしている。また、同期タイミングｔ１までの間、プロセスＰａ２はコスト４０の計算処理を実行し、コスト２０の通信待ちをしており、プロセスＰａ３はコスト６０の計算処理を実行している。
【００２４】
同期タイミングｔ１から同期タイミングｔ２までの間、プロセスＰａ１〜Ｐａ３は、コスト１０の計算処理を実行し、コスト３０の通信待ちをしている。そして、同期タイミングｔ１から同期タイミングｔ２までの間、プロセスＰａ４は、コスト４０の計算処理を実行している。
【００２５】
すなわち、図５に示した例では、プロセスＰａ３の計算コストが高く、全体の通信待ち状況を悪化させているものの、最も通信待ち状況に悪影響を与えているのは同期タイミングｔ１から同期タイミングｔ２までのプロセスＰａ４である。このように、負荷がばらつく、すなわち計算処理の量にブレがあることで、他のプロセスを待たせるプロセスが存在した場合、サンプリングデータＤ０が有する計算処理コスト、通信待ちコスト、通信処理コストのデータから通信待ち状況を正確に評価することができない。
【００２６】
そこで、図１に示した解析装置３０は、分散並列処理される複数のプロセスの各々について、他のプロセスとの間の通信の際の自プロセスの待機時間をサンプリングしたサンプリングデータを取得する。解析装置３０は、取得したサンプリングデータに基づいて、複数のプロセスの各々について、他のプロセスとの間の自プロセスの待機時間の合計と、他のプロセスと自プロセスとの間の通信の際の他のプロセスの待機時間、すなわち被待機時間の合計を求める集計を行い、集計結果を解析して複数のプロセスに対する処理の配分状態を評価する。
【００２７】
このため、図１に示したように、解析装置３０は、インターコネクト装置２１と接続し、インターコネクト装置２１を介してプロセッサ１１〜１４と通信する。なお、図１では、解析装置３０を一つの装置として実施する場合の構成を示したが、例えば、プロセッサ１１〜１４のいずれかが解析装置３０の機能を実現するプログラムを実行してもよいし、解析用のプロセッサを別途接続してもよい。
【００２８】
プロセッサ１１は、アプリケーションプロセスＰａ１に加えてサンプリングスレッドＰｓ１を実行する。同様に、プロセッサ１２は、アプリケーションプロセスＰａ２に加えてサンプリングスレッドＰｓ２を実行する。また、プロセッサ１３はアプリケーションプロセスＰａ３に加えてサンプリングスレッドＰｓ３を実行し、プロセッサ１４はアプリケーションプロセスＰａ４に加えてサンプリングスレッドＰｓ４を実行する。
【００２９】
サンプリングスレッドＰｓ１は、一定の時間間隔ごとにアプリケーションプロセスＰａ１の走行状況等を確認して記録する。この時、サンプリングスレッドＰｓ１は、アプリケーションプロセスＰａ１が通信待ち状態に入ってから通信待ち状態が解除されるまでの間の時間コストを、通信相手ごとに積算してサンプリングデータＤ１ａを作成する。
【００３０】
図１に示した例では、サンプリングデータＤ１ａは、送信先プロセスＰａ２に対する通信待ちコストが０、送信先プロセスＰａ３に対する通信待ちコストが１０、送信先プロセスＰａ４に対する通信待ちコストが３０であったことを示している。
【００３１】
同様に、サンプリングスレッドＰｓ２は、一定の時間間隔ごとにアプリケーションプロセスＰａ２の走行状況等を確認し、通信待ち状態に入ってから通信待ち状態が解除されるまでの間の時間コストを、通信相手ごとに積算してサンプリングデータＤ１ｂを作成する。
【００３２】
また、サンプリングスレッドＰｓ３は、一定の時間間隔ごとにアプリケーションプロセスＰａ３の走行状況等を確認し、通信待ち状態に入ってから通信待ち状態が解除されるまでの間の時間コストを、通信相手ごとに積算してサンプリングデータＤ１ｃを作成する。
【００３３】
そして、サンプリングスレッドＰｓ４は、一定の時間間隔ごとにアプリケーションプロセスＰａ４の走行状況等を確認し、通信待ち状態に入ってから通信待ち状態が解除されるまでの間の時間コストを、通信相手ごとに積算してサンプリングデータＤ１ｄを作成する。
【００３４】
解析装置３０は、データ取得部３１、データ集計部３２および解析部３３を有する。データ取得部３１は、サンプリングスレッドＰｓ１〜Ｐｓ４からサンプリングデータＤ１ａ，Ｄ１ｂ，Ｄ１ｃ，Ｄ１ｄを取得する。
【００３５】
データ集計部３２は、サンプリングデータＤ１ａ，Ｄ１ｂ，Ｄ１ｃ，Ｄ１ｄを集計した集計データＤ２を作成する。この集計データＤ２から、プロセスＰａ１〜Ｐａ４の各々について、他のプロセスとの通信を待機した待機時間と、他のプロセスに待機させた被待機時間とを求めることができる。
【００３６】
解析部３３は、集計データＤ２を解析してプロセスＰａ１〜Ｐａ４に対する処理の配分状態を評価し、評価結果を出力する処理部である。
【００３７】
［処理動作］
図６は、プロセッサ１１〜１４における処理動作を説明するフローチャートである。以下の説明では、プロセッサ１１を例に説明を行なうが、プロセッサ１２〜１４についても同様である。
【００３８】
まず、プロセッサ１１は、アプリケーションプログラムから割り当てられたプロセスＰａ１を実行する。このプロセスＰａ１は、処理の開始時にサンプリングスレッドＰｓ１を生成する（Ｓ１０１）。プロセッサ１１は、プロセスＰａ１において計算処理を実行する（Ｓ１０２）とともに、サンプリングスレッドＰｓ１によるサンプリングを実行する（Ｓ２０１）。
【００３９】
プロセッサ１１は、計算処理（Ｓ１０２）が終了した後、サンプリングスレッドＰｓ１の消去を待ち（Ｓ１０３）、サンプリングデータＤ１ａを出力して（Ｓ１０４）、処理を終了する。
【００４０】
図７は、解析装置３０の処理動作を説明するフローチャートである。図７に示したように、まず、データ取得部３１がサンプリングデータＤ１ａ，Ｄ１ｂ，Ｄ１ｃ，Ｄ１ｄを取得し（Ｓ３０１）、データ集計部３２は、サンプリングデータＤ１ａ，Ｄ１ｂ，Ｄ１ｃ，Ｄ１ｄを集計する（Ｓ３０２）。そして、解析部３３は、集計データＤ２を解析して評価結果を出力し（Ｓ３０３）、処理を終了する。
【００４１】
［データと処理の具体例］
図８は、集計データＤ２の具体例の説明図である。図８に示した集計データＤ２は、受信側のプロセスと送信側のプロセスについて通信待ちコストを示している。具体的には、受信側のプロセス、すなわちサンプリングしたプロセスがプロセスＰａ１について、送信先プロセスＰａ２に対する通信待ちコストが０、送信先プロセスＰａ３に対する通信待ちコストが１０、送信先プロセスＰａ４に対する通信待ちコストが３０である。
【００４２】
また、受信側のプロセスＰａ２について、送信先プロセスＰａ１に対する通信待ちコストが１０、送信先プロセスＰａ３に対する通信待ちコストが２０、送信先プロセスＰａ４に対する通信待ちコストが３０である。
【００４３】
同様に、受信側のプロセスＰａ３について、送信先プロセスＰａ１に対する通信待ちコストが０、送信先プロセスＰａ２に対する通信待ちコストが０、送信先プロセスＰａ４に対する通信待ちコストが３０である。
【００４４】
そして、受信側のプロセスＰａ４について、送信先プロセスＰａ１に対する通信待ちコストが４０、送信先プロセスＰａ２に対する通信待ちコストが３０、送信先プロセスＰａ３に対する通信待ちコストが５０である。
【００４５】
この集計データＤ２の行の合計は、そのプロセスが他のプロセスとの通信を待機した待機時間の合計であり、集計データＤ２の列の合計は他のプロセスに待機させた被待機時間の合計となる。
【００４６】
すなわち、図８に示した例では、プロセスＰａ１の待機時間の合計は４０、プロセスＰａ２の待機時間の合計は４０、プロセスＰａ３の待機時間の合計は３０、プロセスＰａ４の待機時間の合計は１２０である。また、プロセスＰａ１の被待機時間の合計は５０、プロセスＰａ２の被待機時間の合計は３０、プロセスＰａ３の被待機時間の合計は８０、プロセスＰａ４の被待機時間の合計は９０である。
【００４７】
行の合計値、すなわち受信側方向（横方向）のコストの合計値は、自プロセスが通信待ちした延べ時間の合計であり、値が大きいものは計算処理が軽かったことを示している。図８の例では、プロセスＰａ４の待機時間が１２０であり、プロセスＰａ４の負荷が他のプロセスに比して低い状態にあったことを示している。
【００４８】
列の合計値、すなわち送信側方向（縦方向）のコストの合計値は、自プロセスが他のプロセスに通信待ちさせた延べ時間の合計であり、値が多いものは処理が重かったことを示している。図８の例では、プロセスＰａ４の被待機時間の合計が９０であり、プロセスＰａ４は、他のプロセスに比して負荷が高い状態にあったことを示している。また、次に負荷が高かったプロセスはプロセスＰａ３である。
【００４９】
この待機時間と被待機時間を総合的に判断すると、プロセスＰａ４は、負荷が低い場合と高い場合とのブレが他のプロセスに比して大きく、通信待ち状況に改善の余地が大きいこと、プロセスＰａ３は、負荷が高いため通信待ち状況の改善の余地があることが判る。
【００５０】
図９は、解析部３３による解析についての説明図である。図９の評価テーブルＤ３に示したように、待機時間のコストと被待機時間のコストがともに低い場合（Ｌ＿Ｌ）、そのプロセスの計算処理は適切で、通信待ちが少ない。また、相手を待たせることもない。したがって、改善は不要である。
【００５１】
待機時間のコストが低く、被待機時間のコストが高い場合（Ｌ＿Ｈ）、そのプロセスは計算処理が多く、通信待ちが少ない。また、相手を待たせることが多い。このため、改善が必要であり、仕事を減らすことが望ましい。
【００５２】
待機時間のコストが高く、被待機時間のコストが低い場合（Ｈ＿Ｌ）、そのプロセスは、計算処理が少なく、通信待ちが多い。そして、相手を待たせることが少ない。すなわち、計算処理を行っていない時間が多いため、改善が必要であり、仕事を増加することが望ましい。
【００５３】
待機時間のコストと被待機時間のコストがともに高い場合（Ｈ＿Ｈ）、そのプロセスは、通信待ちが多く、相手を待たせることも多い。そのため、改善が必要であり、仕事量のブレを減らすことが望ましい。
【００５４】
このように、解析装置３０は、プロセスの待機時間と被待機時間からプロセス単位で負荷バランス、すなわち処理の配分状態の均一性を精度よく評価し、改善の指針を出力することが出来る。
【００５５】
［関数の評価］
また、解析装置３０は、サンプリング時にユーザ関数ごとに待ち時間を積算させることで、関数について評価を行うことも出来る。図１０は、関数ごとの評価を行う場合のプロセッサ１１〜１４における処理動作を説明するフローチャートである。以下の説明では、プロセッサ１１を例に説明を行なうが、プロセッサ１２〜１４についても同様である。
【００５６】
プロセッサ１１は、通信待ち処理を開始した場合に、通信待ちに入った時刻Ｔｓｔを記録し（Ｓ４０１）、受信処理を行う（Ｓ４０２）。そして、受信が終了し、通信待ちが解除された場合に時刻Ｔｅｎｄを記録し（Ｓ４０３）、時刻Ｔｅｎｄと時刻Ｔｓｔの差分である待ち時間を送信元ごとの待ち状況マトリクスに加算する（Ｓ４０４）。
【００５７】
また、プロセッサ１１は、アプリケーションプログラムから割り当てられたプロセスＰａ１を実行する際に、プロセスＰａ１からサンプリングスレッドＰｓ１を生成する（Ｓ５０１）。プロセッサ１１は、プロセスＰａ１において計算処理を実行する（Ｓ５０２）とともに、サンプリングスレッドＰｓ１によるサンプリングを実行する（Ｓ６００）。
【００５８】
プロセッサ１１は、プロセスＰａ１の計算処理（Ｓ５０２）が終了した後、サンプリングスレッドＰｓ１の消去を待ち（Ｓ５０３）、サンプリングデータＤ１ａを出力して（Ｓ５０４）、処理を終了する。
【００５９】
図１１は、サンプリング（Ｓ６００）の詳細について説明するフローチャートである。図１１に示したように、プロセッサ１１は、プロセスＰａ１からサンプリングを行う（Ｓ６０１）度に、待ち状況マトリクスを参照する（Ｓ６０２）。そして、サンプリングがヒットしたユーザ関数の関数毎マトリクスに加算し（Ｓ６０３）、待ち状況マトリクスをゼロクリアする（Ｓ６０４）。関数別のサンプリングには、一例としてcall-graphプロファイリングなどを用いればよい。
【００６０】
図１２は、関数について評価する場合の解析装置３０の処理動作を説明するフローチャートである。図１２に示したように、まず、データ取得部３１がサンプリングデータを取得し（Ｓ７０１）、データ集計部３２が集計する（Ｓ７０２）。解析部３３は、ユーザ関数ごとに関数毎マトリクスを解析し、受信時に要した延べ時間や、受信させた時の延べ時間を求めて、集計マトリクスを作成し（Ｓ７０３）、解析レポートを出力する（Ｓ７０４）。
【００６１】
［データと処理の具体例］
図１３は、待ち状況マトリクス、関数毎マトリクス、集計マトリクスの具体例の説明図である。図１３に示した待ち状況マトリクスＤ４は、プロセスＰａ４の待ち状況を示すデータである。マトリクスＤ４は、送信側のプロセスＰａ１との通信でコスト４０の通信待ちを行い、送信側のプロセスＰａ２との通信でコスト３０の通信待ちを行い、送信側のプロセスＰａ３との通信でコスト５０の通信待ちを行ったことを示している。
【００６２】
図１３に示した関数毎マトリクスＤ５は、プロセスＰａ４の関数ごとの待ち状況を示すデータである。関数毎マトリクスＤ５は、関数ｃ１について、送信側のプロセスＰａ１との通信でコスト３００の通信待ちを行い、送信側のプロセスＰａ２との通信でコスト１０の通信待ちを行い、送信側のプロセスＰａ３との通信でコスト１００の通信待ちを行ったことを示している。
【００６３】
同様に、関数毎マトリクスＤ５は、関数ｃ２について、送信側のプロセスＰａ１との通信でコスト１００、送信側のプロセスＰａ２との通信でコスト３００、送信側のプロセスＰａ３との通信でコスト２００の通信待ちを行ったことを示している。
【００６４】
また、関数毎マトリクスＤ５は、関数ｃ３について、送信側のプロセスＰａ１との通信でコスト１０、送信側のプロセスＰａ２との通信でコスト３０、送信側のプロセスＰａ３との通信でコスト３００の通信待ちを行ったことを示している。
【００６５】
また、関数毎マトリクスＤ５は、関数ｃ４について、送信側のプロセスＰａ１との通信でコスト４００、送信側のプロセスＰａ２との通信でコスト３００、送信側のプロセスＰａ３との通信でコスト５００の通信待ちを行ったことを示している。
【００６６】
解析装置３０は、この関数毎マトリクスを各プロセスから取得し、関数ごとに集計して集計マトリクスを作成する。図１３に示した集計マトリクスＤ６は、関数ｃ３についての集計結果を例示したものである。
【００６７】
集計マトリクスＤ６は、受信側のプロセスＰａ１について、送信先プロセスＰａ２に対する通信待ちコストが０、送信先プロセスＰａ３に対する通信待ちコストが１００、送信先プロセスＰａ４に対する通信待ちコストが３００である。
【００６８】
また、受信側のプロセスＰａ２について、送信先プロセスＰａ１に対する通信待ちコストが１００、送信先プロセスＰａ３に対する通信待ちコストが２００、送信先プロセスＰａ４に対する通信待ちコストが３００である。
【００６９】
同様に、受信側のプロセスＰａ３について、送信先プロセスＰａ１に対する通信待ちコストが０、送信先プロセスＰａ２に対する通信待ちコストが０、送信先プロセスＰａ４に対する通信待ちコストが３００である。
【００７０】
そして、受信側のプロセスＰａ４について、送信先プロセスＰａ１に対する通信待ちコストが１０、送信先プロセスＰａ２に対する通信待ちコストが３０、送信先プロセスＰａ３に対する通信待ちコストが３００である。
【００７１】
したがって、関数ｃ３についてプロセスＰａ１の待機時間の合計、すなわち行の合計は４００、プロセスＰａ２の待機時間の合計は６００、プロセスＰａ３の待機時間の合計は３００、プロセスＰａ４の待機時間の合計は３４０となる。また、プロセスＰａ１の被待機時間の合計、すなわち列の合計は１１０、プロセスＰａ２の被待機時間の合計は３０、プロセスＰａ３の被待機時間の合計は６００、プロセスＰａ４の被待機時間の合計は９００となる。
【００７２】
図１４は、集計マトリクスからの評価と修正指針の作成についての説明図である。集計マトリクスＤ６の待機時間と被待機時間から、関数ごとのプロセス評価Ｄ７を求めることが出来る。プロセス評価Ｄ７は、各関数についてプロセスの待機時間の合計が平均よりも低く、被待機時間の合計が平均よりも低い場合にＬ＿Ｌ、待機時間の合計が平均よりも低く、被待機時間の合計が平均よりも高い場合にＬ＿Ｈ、待機時間の合計が平均よりも高く、被待機時間の合計が平均よりも低い場合にＨ＿Ｌ、待機時間の合計が平均よりも高く、被待機時間の合計が平均よりも高い場合にＨ＿Ｈの値を取る。
【００７３】
関数ｃ３の例では、待機時間の合計の平均値が（４００＋６００＋３００＋３４０）／４で４１０となる。プロセスＰａ１は、待機時間の合計が４００、被待機時間の合計が１１０であるので、Ｌ＿Ｌ、プロセスＰａ２は、待機時間の合計が６００、被待機時間の合計が３０であるので、Ｈ＿Ｌとなる。また、プロセスＰａ３は、待機時間の合計が３００、被待機時間の合計が６００であるので、Ｌ＿Ｈ、プロセスＰａ４は、待機時間の合計が３４０、被待機時間の合計が９００であるので、Ｌ＿Ｈとなる。
【００７４】
同様に、プロセス評価Ｄ７は、関数ｃ１について、プロセスＰａ１〜Ｐａ４でＨ＿Ｈの値をとる。プロセス評価Ｄ７は、関数ｃ２について、プロセスＰａ１でＨ＿Ｌ、プロセスＰａ２でＬ＿Ｌ、プロセスＰａ３でＨ＿Ｌ、プロセスＰａ４でＬ＿Ｌの値をとる。そして、プロセス評価Ｄ７は、関数ｃ４について、プロセスＰａ１とプロセスＰａ２でＨ＿Ｈ、プロセスＰａ３とプロセスＰａ４でＬ＿Ｌの値をとる。
【００７５】
プロセス全体としては、プロセスＰａ１とプロセスＰａ２がＨ＿Ｌ、プロセスＰａ３とプロセスＰａ４がＨ＿Ｈの値をとる。
【００７６】
このプロセス評価Ｄ７から、解析装置３０は、プロセス修正指針Ｄ８を作成する。Ｌ＿Ｌについては修正が不要であり、Ｌ＿Ｈについては仕事の減少が望ましく、Ｈ＿Ｌについては仕事の増加が望ましく、Ｈ＿Ｈについては仕事量のブレの減少が望ましい。
【００７７】
このため、プロセス修正指針Ｄ８は、関数ｃ１について、プロセスＰａ１〜Ｐａ４に対するブレの減少を提示し、関数ｃ２について、プロセスＰａ１とプロセスＰａ３に対する仕事増を提示する。また、プロセス修正指針Ｄ８は、関数ｃ３について、プロセスＰａ２に対する仕事増と、プロセスＰａ３とプロセスＰａ４に対する仕事減を提示し、関数ｃ４について、プロセスＰａ１とプロセスＰａ２に対するブレの減少を提示する。
【００７８】
そして、プロセス修正指針Ｄ８は、プロセスＰａ１とプロセスＰａ２の全体に対して仕事増を提示し、プロセスＰａ３とプロセスＰａ４の全体に対してブレの減少を提示する。
【００７９】
上述してきたように、本実施例にかかる解析装置３０は、プロセッサ１１〜１４から、分散並列処理される複数のプロセスの各々について、他のプロセスとの間の通信の際の自プロセスの待機時間をサンプリングしたサンプリングデータを取得する。サンプリングデータを取得した解析装置３０は、複数のプロセスの各々について、他のプロセスとの間の自プロセスの待機時間の合計と、他のプロセスと自プロセスとの間の通信の際の他のプロセスの待機時間の合計を求め、その結果を解析して複数のプロセスに対する処理の配分状態を評価する。このため、解析装置３０は、負荷バランスを精度よく評価し、もって分散並列処理プログラムの性能向上に寄与することができる。
【００８０】
なお、本実施例はあくまで一例であり、構成及び動作は適宜変更して実施することができる。例えば、本実施例では、４つのプロセッサを有するシステムを例示して説明を行ったが、任意の数のプロセッサを有するシステムに適用可能である。
【符号の説明】
【００８１】
１１〜１４    プロセッサ
２１    インターコネクト装置
３０    解析装置
３１    データ取得部
３２    データ集計部
３３    解析部
Ｐａ１〜Ｐａ４    プロセス
Ｐｓ１〜Ｐｓ４    サンプリングスレッド
Ｄ１ａ，Ｄ１ｂ，Ｄ１ｃ，Ｄ１ｄ  サンプリングデータ
Ｄ２    集計データ
Ｄ３    評価テーブル
Ｄ４    待ち状況マトリクス
Ｄ５    関数毎マトリクス
Ｄ６    集計マトリクス
Ｄ７    プロセス評価
Ｄ８    プロセス修正指針
【図１】
0005526914.tif 000002
【図２】
0005526914.tif 000003
【図３】
0005526914.tif 000004
【図４】
0005526914.tif 000005
【図５】
0005526914.tif 000006
【図６】
0005526914.tif 000007
【図７】
0005526914.tif 000008
【図８】
0005526914.tif 000009
【図９】
0005526914.tif 000010
【図１０】
0005526914.tif 000011
【図１１】
0005526914.tif 000012
【図１２】
0005526914.tif 000013
【図１３】
0005526914.tif 000014
【図１４】
0005526914.tif 000015