This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
自作クラスタ計算機:mpiによる並列計算 [2020/03/02 17:29] koudai [SSHの導入] |
自作クラスタ計算機:mpiによる並列計算 [2020/03/03 16:06] koudai [ホストファイルによるジョブの投入] |
||
---|---|---|---|
Line 2: | Line 2: | ||
* 実際にMPIを用いたノード内およびノード間の並列計算を行います | * 実際にMPIを用いたノード内およびノード間の並列計算を行います | ||
- | * 事前にOpenMPIやMPICH2などのMPIライブラリを管理ノードにインストールしてください | + | * 事前にOpenMPI, MPICH2, Intel MPIなどのMPIライブラリを管理ノードにインストールしてください |
- | * 例えばOpenMPIであれば次のようにインストールできます< | + | * OpenMPIの場合、次のようにaptで簡単にインストールできるので、特にこだわりがなければお勧めです< |
$ sudo apt install openmpi-bin libopenmpi-dev | $ sudo apt install openmpi-bin libopenmpi-dev | ||
</ | </ | ||
+ | * **複数のMPIを一つのコンピュータに入れると、競合を起こしてMPIが動かなくなります** | ||
====== 準備 ====== | ====== 準備 ====== | ||
Line 70: | Line 70: | ||
$ ssh keisan11 | $ ssh keisan11 | ||
</ | </ | ||
+ | |||
====== 並列計算 ====== | ====== 並列計算 ====== | ||
Line 95: | Line 96: | ||
name[len] = ' | name[len] = ' | ||
| | ||
- | printf( " | + | printf( " |
MPI_Finalize(); | MPI_Finalize(); | ||
Line 106: | Line 107: | ||
$ mpiicc -o hello hello.c | $ mpiicc -o hello hello.c | ||
</ | </ | ||
- | * 管理ノード(4スレッド)で走らせてみます< | + | * 試しに管理ノードで走らせてみます< |
- | $ mpirun -n 4 hello | + | $ mpirun -n 4 ./hello |
- | Hello World! I am 0 of 4 from kanri. | + | Hello world: rank 0 of 4 running on kanri |
- | Hello World! I am 1 of 4 from kanri. | + | Hello world: rank 1 of 4 running on kanri |
- | Hello World! I am 2 of 4 from kanri. | + | Hello world: rank 2 of 4 running on kanri |
- | Hello World! I am 3 of 4 from kanri. | + | Hello world: rank 3 of 4 running on kanri |
</ | </ | ||
+ | |||
+ | |||
+ | ===== ノード内並列計算 ===== | ||
+ | |||
+ | 指定した計算ノードにジョブを投げてみます。 | ||
+ | |||
+ | * MPIで指定のホストに投げる場合は、オプション< | ||
+ | * 計算ノードのkeisan11にジョブを投げる場合は次のようにします< | ||
+ | $ mpirun -n 8 -hosts keisan11 ./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 | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== ノード間並列計算 ===== | ||
+ | |||
+ | ==== 通常の使い方 ==== | ||
+ | |||
+ | 複数の計算ノードにわたるジョブを投げてみます。 | ||
+ | |||
+ | * オプション< | ||
+ | * 計算ノードkeisan11, | ||
+ | $ mpirun -hosts keisan11, | ||
+ | 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 | ||
+ | </ | ||
+ | * オプション-ppnでノードあたりのプロセス数を指定します | ||
+ | * プロセスは keisan11 -> keisan11 -> keisan12 -> keisan12 -> keisan13 -> keisan13 -> keisan11 -> keisan11 -> keisan12 -> ... の順に割り振られていきます | ||
+ | |||
+ | ==== ホストファイルによるジョブの投入 ==== | ||
+ | |||
+ | ホスト名を毎回入力したくない、計算ノードによってプロセス数を変えたいなどの場合は、ホストファイルを作成します。 | ||
+ | |||
+ | * MPICH, Intel MPIの場合 | ||
+ | <file - my_hosts> | ||
+ | keisan11:2 | ||
+ | keisan12:4 | ||
+ | </ | ||
+ | * OpenMPIの場合 | ||
+ | <file - my_hosts> | ||
+ | keisan11 slots=2 | ||
+ | keisan12 slots=4 | ||
+ | </ | ||
+ | |||
+ | 次のように実行します | ||
+ | < | ||
+ | $ mpirun -n 6 -f my_hosts ./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 | ||
+ | </ | ||
+ | * プロセスは keisan11 -> keisan11 -> keisan12 -> keisan12 -> keisan12 -> keisan12 -> keisan11 -> keisan11 -> keisan12 -> keisan12 -> keisan12 -> keisan12 -> keisan11 -> ... の順に割り振られて行きます | ||
+ | * Intel MPIの場合は< | ||
+ | * https:// | ||
====== 参考 ====== | ====== 参考 ====== |