事前に各ノードのCPUのコア数(物理コア数)とスレッド数(論理コア数)を確認してください
$ cat /proc/cpuinfo | grep "physical id"
$ cat /proc/cpuinfo | grep "cpu cores"
$ cat /proc/cpuinfo | grep "processor"
作業は全て管理ノードで行います
次のコードを使って説明します
#include <stdio.h> #include "mpi.h" int main( int argc, char *argv[] ) { int rank, size, len; char name[MPI_MAX_PROCESSOR_NAME]; MPI_Init( &argc, &argv ); MPI_Comm_rank( MPI_COMM_WORLD, &rank ); MPI_Comm_size( MPI_COMM_WORLD, &size ); MPI_Get_processor_name( name, &len ); name[len] = '\0'; printf( "Hello world: rank %d of %d running on %s\n", rank, size, name ); MPI_Finalize(); return 0; }
$ mpicc -o hello hello.c $ mpiicc -o hello hello.c # Intel MPIを使用する場合
$ mpirun -n 4 ./hello Hello world: rank 0 of 4 running on kanri Hello world: rank 1 of 4 running on kanri Hello world: rank 2 of 4 running on kanri Hello world: rank 3 of 4 running on kanri
指定した計算ノードにジョブを投げてみます。
$ mpirun -hosts keisan11 -n 8 ./hello Hello world: rank 0 of 8 running on keisan11 Hello world: rank 1 of 8 running on keisan11 Hello world: rank 2 of 8 running on keisan11 Hello world: rank 3 of 8 running on keisan11 Hello world: rank 4 of 8 running on keisan11 Hello world: rank 5 of 8 running on keisan11 Hello world: rank 6 of 8 running on keisan11 Hello world: rank 7 of 8 running on keisan11
複数の計算ノードにわたるジョブを投げてみます。
$ mpirun -hosts keisan11,keisan12,keisan13 -n 8 -ppn 2 ./hello Hello world: rank 0 of 8 running on keisan11 Hello world: rank 1 of 8 running on keisan11 Hello world: rank 2 of 8 running on keisan12 Hello world: rank 3 of 8 running on keisan12 Hello world: rank 4 of 8 running on keisan13 Hello world: rank 5 of 8 running on keisan13 Hello world: rank 6 of 8 running on keisan11 Hello world: rank 7 of 8 running on keisan11
ホスト名を毎回入力したくない、計算ノードによってプロセス数を変えたいなどの場合は、ホストファイルを作成します。
keisan11 slots=2 keisan12 slots=4
keisan11:2 keisan12:4
次のように実行します
$ mpirun -n 6 -f hosts.txt ./hello Hello world: rank 0 of 6 running on keisan11 Hello world: rank 1 of 6 running on keisan11 Hello world: rank 2 of 6 running on keisan12 Hello world: rank 3 of 6 running on keisan12 Hello world: rank 4 of 6 running on keisan12 Hello world: rank 5 of 6 running on keisan12