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