MPICH-SCore version 1.0 (ch_score) MPIアプリケーションの実行

環境

mpicc, mpif77等 MPICH-SCore の MPIコンパイラで 生成されたバイナリは SCore オペレーティングシステムのもとで 起動します。従って、プログラムの実行にさきだち、 SCore オペレーティングシステムの シングルユーザ環境、 または、 複数ユーザ環境の どちらかが、使用できる状態になっている必要があります。

シングルユーザ環境での実行

シングルユーザ環境では MPIアプリケーションの実行に先立ち、 scout プログラムを起動する必要があります。 scoutはリモートシェル環境を提供します。 そして、scoutの上で mpirun をつかいMPIアプリケーションを実行します。 例えば、プログラムを 4 ノードで実行する場合は以下のようにします:

$ setenv SCBDSERV server.pccluster.org
$ msgb -group pcc&
$ scout -g pcc
[comp0-3]:
SCOUT(3.1.0): Ready.
$
. . .
. . .
$ mpirun -np 4 ./mpi_program args ...
. . .
. . .
$ exit
SCOUT: session done
$

MPICH-SCore は SMP ノードからなるクラスタをサポートしています。SCore ランタイムは SMP ノード上で複数の MPI プロセスを起動します。 各ノードで起動するMPIプロセスの数はmpirun-npオプションで指定できます。たとえば、4つのSMPノードの各ノードで2つのMPIプロセスを 立ち上げ、合計8つのMPIプロセスを走らせる場合は以下のように指定 します:

$ mpirun -np 4x2 ./my_mpi_program args...

各ノードで起動するMPIプロセスの数を指定しない場合、各ノードで 起動するMPIプロセスの数は、SMPのプロセッサ数となります。 たとえば、2 CPUのSMPクラスタにおける、-np 4 の指定は -np 2x2 と等価です。

MPIアプリケーションは mpirun ではなく、scrunでも 起動できます。たとえば、2 CPU の SMP クラスタで、8 ノード、合計 16 CPU を つかってプログラムを実行するには、以下のようにします:

$ scrun -nodes=8x2 ./my_mpi_program args...

scrun-nodesオプションを省略した場合は、 scoutでアロケートされたノードのすべてのCPUについて MPIプロセスが起動されます。

サンプルプログラムの実行(シングルユーザー環境)

MPI_Alltoall関数による全体全通信の性能を測定するMPIプログラム alltoall は次のように実行します。1番目の引数はメッセージ長で、2番目の引数は 計測のためのループ回数です。出力は、MPI プロセス数、メッセージ長、MPI_Alltoall 1回あたりにかかった時間(μ秒)です。

$ setenv SCBDSERV server.pccluster.org
$ msgb -group pcc&
$ scout -g pcc
[comp0-3]:
SCOUT(3.1.0): Ready.
$
. . .
. . .
$ scrun -nodes=4x2 alltoall 3000 10000
SCORE: Connected (jid=1)
<0:0> SCORE: 8 nodes (4x2) ready.
8 3000 1052.230600
$
. . .
. . .
$ exit
SCOUT: session done
$

複数ユーザ環境での実行

複数ユーザ環境では mpirun のみの使用でMPIアプリケーションが起動できますが、 その際に SCore-D を制御している ホストを指定する必要があります:

$ mpirun -np 4x2 -score scored=comp3.pccluster.org ./mpi_program args...

SCore-D を制御しているホストは 環境変数 SCORE_OPTIONS 内で指定することもできます。 例えば以下のようにします:

$ export SCORE_OPTIONS=scored=comp3.pccluster.org
$ mpirun -np 4x2 ./mpi_program args...
複数ユーザ環境においても mpirun のかわりに scrun を使用することができます。
$ export SCORE_OPTIONS=scored=comp3.pccluster.org
$ scrun -nodes=4x2 ./mpi_program args...
SMPクラスタにおけるSMPノード内のMPIプロセス数の指定方法などは シングルユーザ環境における方法と同じです。

実行性能の改善

プロトコル切り替え点の変更

MPICH-SCore version 1.0 (ch_score) は、以下の3つのメッセージ転送プロトコルを使用して MPIメッセージの転送を行います。この3つのプロトコルはメッセージのサイズによって 切り替えられています。アプリケーションや、クラスタの構成にもよるのですが、プロトコルの切り替え点 を調整すると MPICH-SCore の性能が向上する場合があります。

Short protocol と Eager protocol の切り替え点は、PM デバイスの MTU の最小値です。

Eager protocolと Rendezcous protocolの切り替え点は、MPIアプリケーション実行時に 指定することができます。mpi_eagerオプションを用います。切り替え点のデフォルト は16kbytesです。 切り替え点を 300kbytes に変更する場合、次のように指定します:

$ mpirun -np 4x2 -score mpi_eager=300000 ./mpi_program args...
次のように指定することもできます:

$ scrun -nodes=4x2,mpi_eager=300000 ./mpi_program args...

PMリモートメモリアクセス機能(ゼロコピー通信)の利用

PMリモートメモリアクセス機能は、現在のところPM/Myrinetおよび、 PM/Shmem(共有メモリを用いた、SMPノード内での通信のためのPM)でのみ サポートされています。 MPICH-SCore version 1.0 では、rendezvous protocol を使用したMPIメッセージ転送に PMリモートメモリアクセス機能を用いることができます。 デフォルトではPMリモートメモリアクセス機能は使わないように設定されています。 PMリモートメモリアクセス機能を有効にするには、mpi_zerocopyオプションを用います:

$ mpirun -np 4x2 -score mpi_zerocopy=on mpi_program args...
次のように指定することもできます:
$ scrun -nodes=4x2,mpi_zerocopy=on ./mpi_program args...

リモートメモリアクセス機能を用いたメッセージ通信は、ハードウェアによっては、 CPUによるメモリ間コピーを行わずに、実装することができます。 このメッセージ通信のことをゼロコピー通信とよびます。 PM/Myrinet のリモートメモリアクセス機能を用いたMPIメッセージ通信はゼロコピー通信です。 ゼロコピー通信はメインメモリへの負荷を軽減するため、point-to-point通信における最大バンド幅を 向上させます。ゼロコピー通信は、それがアプリケーションの性能向上に有効であるかどうかは、 そのアプリケーションに依存します。ゼロコピー通信には、その開始のための 同期オーバヘッドがあるからです。

SMPクラスタにおける、SMPノード内でのリモートメモリアクセスには、PM/Shmemの リモートメモリアクセス機能が用いられます。この機能は PM/Shmemデバイスドライバによるプロセス間メモリコピーによって実現されています。 SMPノード内でのプロセス間通信を1回のメモリコピーによって実現するので、 ワンコピー通信と呼べます。


制限

関連項目

MPICH-SCore version 1.0 (ch_score): MPIアプリケーションのコンパイル

mpic++(1), mpicc(1), mpif77(1), mpirun(1) scrun(1)

任意のコンパイラの提供


CREDIT
This document is a part of the SCore cluster system software developed at PC Cluster Consortium, Japan. Copyright (C) 2003 PC Cluster Consortium.