Sun Studio 12: パフォーマンスアナライザ

MPI プログラムからのデータの収集

コレクタは、MPI (Message Passing Interface) ライブラリを使用するマルチプロセスプログラムからパフォーマンスデータを収集できます。Sun HPC ClusterToolsTM 7 ソフトウェアには Open MPI ライブラリが付属し、ClusterTools 5 と ClusterTools 6 ソフトウェアには Sun MPI ライブラリが付属します。ClusterTools ソフトウェアは http://www.sun.com/software/products/clustertools/ から入手できます。

ClusterTools 7 使用時に並列ジョブを開始するには、Open Run-Time Environment (ORTE) コマンドの mpirun を使用します。

ClusterTools 5 または ClusterTools 6 の使用時に並列ジョブを開始するには、Sun Cluster Runtime Environment (CRE) コマンドの mprun を使用します。

詳細は、Sun HPC ClusterTools のマニュアルを参照してください。

MPI と MPI 規格については、MPI の Web サイト http://www.mcs.anl.gov/mpi/ を参照してください。Open MPI については、Web サイト http://www.open-mpi.org/ を参照してください。

MPI とコレクタの実装方法により、MPI プロセスごとに個別の実験が作成されます。これらの実験は、それぞれ一意の名前を持つ必要があります。実験の格納場所と格納方法は、MPI ジョブから利用可能なファイルシステムの種類に依存します。実験の格納については、次の節、「MPI 実験の格納」を参照してください。

MPI ジョブからデータを収集するには、MPI の下で collect コマンドを実行する方法か、MPI の下で dbx を起動して dbx collector サブコマンドを使用する方法があります。これらの操作については、「MPI 下での collect コマンドの実行」「MPI の下で dbx を起動することによるデータ収集」を参照してください。

MPI 実験の格納

マルチプロセス環境は複雑になることがあるので、MPI プログラムからパフォーマンスデータを収集するときは、MPI 実験の格納に関するいくつかの問題に留意する必要があります。これらは、データの収集と格納の効率性、実験の命名に関係している問題です。MPI 実験をはじめとする実験の命名については、 「収集データの格納場所」を参照してください。

パフォーマンスデータを収集する MPI プロセスは、それぞれ独自の実験を作成します。実験を作成するとき、MPI プロセスは実験ディレクトリをロックします。このため、ほかの MPI プロセスがそのディレクトリを使用するには、ロックが解除されるのを待つ必要があります。つまり、あらゆる MPI プロセスからアクセス可能なファイルシステムに実験を格納した場合、実験は順次に作成されますが、各 MPI プロセスにローカルのファイルシステムに格納した場合は、すべての実験が同時に作成されます。

コレクタで実験名が作成されるようにすれば、実験名や格納場所に関する問題を回避できます。次の節、「デフォルトの MPI 実験名」を参照してください。

デフォルトの MPI 実験名

実験名を指定しなかった場合、デフォルトの実験名が使用されます。コレクタは MPI ランクに基づき、標準形式の experiment.m.er で実験名を作成します。 この場合の m は MPI ランクです。experiment は、実験グループが指定された場合は実験グループ名で、それ以外の場合は test になります。共通ファイルシステムまたはローカルファイルシステムのどちらを使用しているかに関係なく、実験名は一意です。つまり、ローカルファイルシステムを使用して実験を記録し、それらのファイルを共通のファイルシステムにコピーして実験グループファイルを再構築する場合、実験名を変更する必要はありません。ほとんどの場合、すべてのファイルシステムで名前が一意になるように、コレクタで実験名が作成されるようにしてください。

デフォルト以外の MPI 実験名の指定

実験を共通のファイルシステムに格納し、標準形式 experiment. n.er で実験名を指定した場合、実験のたびに n の値が増分されるときに実験名が一意になります。実験は、MPI プロセスによって実験ディレクトリのロックが取得された順序で番号が付けられるので、プロセスの MPI ランクに対応する保証はありません。動作中の MPI ジョブ内の MPI プロセスに dbx を接続した場合、実験の番号は、接続した順序によって決まります。

各実験をそれぞれローカルのファイルシステムに格納し、明示的な実験名を指定すると、実験の名前が同じになる可能性があります。たとえば node0node1node2node3 の 4 つのシングルプロセッサノードを持つクラスタにわたって、MPI ジョブを実行したとします。 各ノードには /scratch という名前のローカルディスクがあり、このディスク上のディレクトリ username に実験を格納します。MPI ジョブによって作成される実験は、次のフルパス名を持ちます。


node0:/scratch/username/test.1.er
node1:/scratch/username/test.1.er
node2:/scratch/username/test.1.er
node3:/scratch/username/test.1.er

ノード名を含むフルネームは一意ですが、それぞれの実験ディレクトリ内に test.1.er という名前の実験が存在します。MPI ジョブの完了後に実験を共通の場所に移動する場合は、名前が一意であることを確認してください。たとえば、自分のホームディレクトリ (すべてのノードからアクセス可能と仮定) に実験を移動して、実験名を変更するには、次のコマンドを使用します。


rsh node0 ’er_mv /scratch/username/test.1.er test.0.er’
rsh node1 ’er_mv /scratch/username/test.1.er test.1.er’
rsh node2 ’er_mv /scratch/username/test.1.er test.2.er’
rsh node3 ’er_mv /scratch/username/test.1.er test.3.er’

大規模な MPI ジョブの場合は、スクリプトを使用して共通の場所に実験を移動することもできます。UNIX® コマンド cp または mv は使用せず、上の例、または 「実験の操作」 に示す er_cp または er_mv を使用してください。

利用可能なローカルファイルシステムが不明な場合は、df -lk コマンドを使用するか、システム管理者に確認してください。実験を格納するディレクトリは、一意に定義されていて、ほかの実験に使用されていない既存のディレクトリであることを常に確認してください。また、ファイルシステムに、実験用の十分な空き容量があることを確認してください。必要なディスク容量の概算方法については、「必要なディスク容量の概算」を参照してください。


注 –

コンピュータ間やノード間で実験をコピーまたは移動すると、注釈付きのソースコードや注釈付きの逆アセンブリコード内のソース行を表示できなくなる場合があります。 これらのコードを表示するには、実験に使用されたロードオブジェクトとソースファイル、または同じパスとタイムスタンプを持つコピー へのアクセス権が必要があります。


MPI 下での collect コマンドの実行

MPI の制御下で collect コマンドを使用してデータを収集するには、ClusterTools のバージョンに応じて、次の構文を使用します。

Sun HPC ClusterTools 7:


% mpirun -np n 
collect [collect-arguments] program-name
 [program-arguments]

Sun HPC ClusterTools 6 以前:


% mprun -np n 
collect [collect-arguments] program-name
 [program-arguments]

ここで、n は MPI で作成されるプロセス数です。この手順では、collectn 個の個別のインスタンスが作成され、それぞれのインスタンスで実験が記録されます。実験を格納する場所と方法については、「収集データの格納場所」の節をお読みください。

さまざまな MPI ランから集めた実験結果が別々に格納されるようにするために、MPI ランごとに -g オプションで実験グループを作成することができます。実験グループはすべての MPI プロセスからアクセスできるファイルシステムに保存してください。実験グループを作成すると、1 つの MPI ランに関する複数の実験をパフォーマンスアナライザに容易に読み込むこともできます。グループを作成する代わりに、-d オプションで各 MPI ランに個別のディレクトリを指定することもできます。

MPI の下で dbx を起動することによるデータ収集

MPI の制御下で dbx を起動し、データを収集するには、次の構文を使用します。

Sun HPC ClusterTools 7:


% mpirun -np n dbx program-name < collection-script

Sun HPC ClusterTools 6 以前:


% mprun -np n dbx program-name < collection-script

どちらの場合も、n は MPI で作成されるプロセス数であり、collection-script はデータ収集をセットアップして起動するのに必要なコマンドを含む dbx スクリプトです。この手順では、dbxn 個の個別のインスタンスが作成され、それぞれのインスタンスで 1 つの MPI プロセスの実験が記録されます。実験名を定義しなかった場合、実験には MPI ランクのラベルが付けられます。実験を格納する場所と方法については、「MPI 実験の格納」の節をお読みください。

収集スクリプトを使用し、プログラム内で MPI_Comm_rank() を呼び出すことで、実験に MPI ランクの名前を付けることができます。たとえば、C プログラムには次の行を挿入します。


ier = MPI_Comm_rank(MPI_COMM_WORLD,&me);

Fortran プログラムには次の行を挿入します。


call MPI_Comm_rank(MPI_COMM_WORLD, me, ier)

この呼び出しを行 17 に挿入した場合は、次のようなスクリプトを使用することができます。


stop at 18
run program-arguments
rank=$[me]
collector enable
collector store filename experiment.$rank.er
cont
quit