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 の切り替え点は、MPICH-SCore のコンパイル時に
決められています。デフォルトでは1kbytesに設定されています。
この値を変更したい場合は、/opt/score/src/mpi/mpich-1.2.0/src/mpid/ch_score/mpid.h
を編集してください。
このヘッダの先頭で、変更後の値を持つ、マクロMPID_PKT_MAX_DATA_SIZE
を定義します。
MPICH-SCore を再コンパイル、インストールしなおす必要があります。
Eager protocolと Get protocolの切り替え点は、MPIアプリケーション実行時に
指定することができます。この切り替え点はPMのデバイス毎に指定します。
PM/Myrinetについての指定はmpi_max_eager_myrinet
オプション、
PM/Shmemについてはmpi_max_eager_shmem
オプションを用います。
PM/Myrinetの場合の切り替え点のデフォルトは300kbytes、
PM/Shmemの場合の切り替え点のデフォルトは1.2kbytesです。
たとえば、PM/Myrinetの切り替え点を64kbytesにするには以下のように指定します:
$ mpirun -np 4x2 -score mpi_max_eager_myrinet=64000 ./mpi_program args...
次のように指定することもできます:
$ scrun -nodes=4x2,mpi_eager_myrinet=64000 ./mpi_program args...
リモートメモリアクセス機能を用いたメッセージ通信は、ハードウェアによっては、 CPUによるメモリ間コピーを行わずに、実装することができます。 このメッセージ通信のことをゼロコピー通信とよびます。 PM/Myrinet のリモートメモリアクセス機能を用いたMPIメッセージ通信はゼロコピー通信です。 ゼロコピー通信はメインメモリへの負荷を軽減するため、point-to-point通信における最大バンド幅を 向上させます。ゼロコピー通信は、それがアプリケーションの性能向上に有効であるかどうかは、 そのアプリケーションに依存します。ゼロコピー通信には、その開始のための 同期オーバヘッドがあるからです。
SMPクラスタにおける、SMPノード内でのリモートメモリアクセスには、PM/Shmemの リモートメモリアクセス機能が用いられます。この機能は PM/Shmemデバイスドライバによるプロセス間メモリコピーによって実現されています。 SMPノード内でのプロセス間通信を1回のメモリコピーによって実現するので、 ワンコピー通信と呼べます。
mpi_rma
オプションを用います:
$ mpirun -np 4x2 -score mpi_rma=off mpi_program args...次のように指定することもできます:
$ scrun -nodes=4x2,mpi_rma=off ./mpi_program args...
PMリモートメモリアクセス機能が無効になっている場合、Get protocolは使用されません。
-score mpi_synccoll
オプションを
使用します。このコードがよい性能を得るかどうかは、ネットワーク構成と
全体全通信のメッセージサイズによります。
MPICH-SCore version 2.0 (ch_score2): MPIアプリケーションのコンパイル
mpic++(1), mpicc(1), mpif77(1), mpirun(1) scrun(1)