MPIアプリケーションの実行

MPI の切り替え

MPI プログラムを実行するには、コンパイルしたものと同じ MPI で実行する必要があります。

MPI の切り替えは -mpi オプションもしくは SCORE_MPI 環境変数によって行います。 現在のバージョンで指定できるのは、mpich-1.2.5yampi です。 引数も環境変数も指定されていないときは、 mpich-1.2.5 が使用されます。

環境

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

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

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

$ SCBDSERV=server.pccluster.org
$ export SCBDSERV $ msgb -group pcc&
$ scout -g pcc
[comp0-3]:
SCOUT(6.0.0): Ready.
$
. . .
. . .
$ mpirun -np 4 ./mpi_program args ...
. . .
. . .
$ exit
SCOUT: session done
$
scrun に渡すオプションを指定する場合は環境変数 SCORE_OPTIONS を指定します。
$ SCORE_OPTIONS=group=pcc $ export SCORE_OPTIONS $ mpirun -np 4 ./mpi_program args ...

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

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

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

複数ユーザ環境での実行

複数ユーザ環境では 環境変数 SCORE_OPTIONSSCore-D を制御している ホストを指定する必要があります:

$ SCORE_OPTIONS=scored=comp3.pccluster.org export SCORE_OPTIONS $ mpirun -np 8 ./mpi_program args...

MPICH-SCore プログラムの実行オプション

scrun オプションの指定

MPICH-SCore では mpirun-score オプションに よって、scrun のオプションを指定できます。


$ mpirun -np 8 -score scored=comp3 ./mpi_program args...

SMP クラスタでの指定

MPICH-SCore では、-np オプションに nxm と指定するにより、n 台のホストで m プロセスずつ動かすと指定することができます。


$ mpirun -np 4x1 ./mpi_program args...

scrun での実行

MPICH-SCore のプログラムは、scrun で実行することができます。

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

MPICH-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回のメモリコピーによって実現するので、 ワンコピー通信と呼べます。

YAMPI プログラムの実行オプション

scrun オプションの指定

YAMPI-SCore では mpirun-scrun オプションに よって、scrun のオプションを指定できます。


$ mpirun -np 8 -scrun scored=comp3 ./mpi_program args...

SMP クラスタでの指定

YAMPI-SCore では、-np オプションに nxm と指定するにより、n 台のホストで m プロセスずつ動かすと指定することができます。


$ mpirun -np 4x1 ./mpi_program args...

scrun での実行

YAMPI-SCore のプログラムは、環境変数 _YAMPI_ARCHPM に 設定することにより。scrun で実行することができます。


$ _YAMPI_ARCH=PM
$ export _YAMPI_ARCH
$ scrun -nodes=4x1,group=pcc ./mpi_program args...

rendezvous プロトコルへの切り替え点の指定

YAMPI-SCore は、環境変数 _YAMPI_RSIZE を設定することによって rendezvous プロトコルへの切り替え点を指定することができます。 設定していない場合は。rendezvous プロトコルへは切り替わりません。 アプリケーションや、クラスタの構成にもよるのですが、プロトコルの切り替え点 を調整すると YAMPI-SCore の性能が向上する場合があります。

$ _YAMPI_RSIZE=1024
$ export _YAMPI_RSIZE
$ mpirun -np 4x2 ./mpi_program args...

関連項目

MPIアプリケーションのコンパイル

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

任意のコンパイラの提供