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 18:11] koudai [概要] |
自作クラスタ計算機:mpiによる並列計算 [2020/03/02 21:39] koudai [通常の使い方] |
||
---|---|---|---|
Line 3: | Line 3: | ||
* 実際にMPIを用いたノード内およびノード間の並列計算を行います | * 実際にMPIを用いたノード内およびノード間の並列計算を行います | ||
* 事前にOpenMPI, | * 事前にOpenMPI, | ||
- | * 例えばOpenMPIであれば次のようにインストールできます< | + | * OpenMPIの場合、次のようにaptで簡単にインストールできるので、特にこだわりがなければお勧めです< |
$ sudo apt install openmpi-bin libopenmpi-dev | $ sudo apt install openmpi-bin libopenmpi-dev | ||
</ | </ | ||
- | * **同じコンピュータに複数のMPIを入れると競合を起こしてMPIが動かなくなることがあります** | + | * **複数のMPIを一つのコンピュータに入れると、競合を起こしてMPIが動かなくなります** |
====== 準備 ====== | ====== 準備 ====== | ||
Line 108: | Line 108: | ||
</ | </ | ||
* 試しに管理ノードで走らせてみます< | * 試しに管理ノードで走らせてみます< | ||
- | $ mpirun -n 4 hello | + | $ mpirun -n 4 ./hello |
Hello World! I am 0 of 4 from kanri. | Hello World! I am 0 of 4 from kanri. | ||
Hello World! I am 1 of 4 from kanri. | Hello World! I am 1 of 4 from kanri. | ||
Line 123: | Line 123: | ||
* MPIで指定のホストに投げる場合は、オプション< | * MPIで指定のホストに投げる場合は、オプション< | ||
* 計算ノードのkeisan11にジョブを投げる場合は次のようにします< | * 計算ノードのkeisan11にジョブを投げる場合は次のようにします< | ||
- | $ mpirun -n 24 --host keisan11 hello | + | $ mpirun -n 24 --host keisan11 |
Hello World! I am 0 of 24 from keisan11. | Hello World! I am 0 of 24 from keisan11. | ||
Hello World! I am 1 of 24 from keisan11. | Hello World! I am 1 of 24 from keisan11. | ||
Line 133: | Line 133: | ||
===== ノード間並列計算 ===== | ===== ノード間並列計算 ===== | ||
+ | |||
+ | ==== 通常の使い方 ==== | ||
複数の計算ノードにわたるジョブを投げてみます。 | 複数の計算ノードにわたるジョブを投げてみます。 | ||
* オプション< | * オプション< | ||
- | * 計算ノードkeisan11とkeisan12にジョブを投げる場合は次のようにします< | + | * 計算ノードkeisan11, keisan12, keisan13にジョブを投げる場合は次のようにします< |
- | $ mpirun -n 4 --host keisan11, | + | $ mpirun -n 72 --host keisan11, |
- | Hello World! I am 0 of 4 from keisan11. | + | Hello World! I am 0 of 72 from keisan11. |
- | Hello World! I am 1 of 4 from keisan11. | + | Hello World! I am 1 of 72 from keisan12. |
- | Hello World! I am 2 of 4 from keisan12. | + | Hello World! I am 2 of 72 from keisan13. |
- | Hello World! I am 3 of 4 from keisan12. | + | Hello World! I am 3 of 72 from keisan11. |
+ | Hello World! I am 4 of 72 from keisan12. | ||
+ | Hello World! I am 5 of 72 from keisan13. | ||
+ | (以下略) | ||
+ | </ | ||
+ | * プロセスは keisan11 -> keisan12 -> keisan13 -> keisan11 -> ... の順に割り振られて行きます | ||
+ | |||
+ | |||
+ | ==== ホストファイルによるジョブの投入 ==== | ||
+ | |||
+ | 例えば計算ノードによって性能に差がある場合など、ノードごとのプロセス数を自分で管理したい場合はホストファイルを作成します。 | ||
+ | |||
+ | * MPICH, Intel MPIの場合 | ||
+ | <file - my_hosts> | ||
+ | keisan11: | ||
+ | keisan12: | ||
+ | </ | ||
+ | * OpenMPIの場合 | ||
+ | <file - my_hosts> | ||
+ | keisan11 slots=2 | ||
+ | keisan12 slots=3 | ||
+ | </ | ||
+ | |||
+ | 次のように実行します | ||
+ | < | ||
+ | $ mpirun -n 6 --hostfile my_hosts hello | ||
+ | Hello World! I am 0 of 6 from keisan11. | ||
+ | Hello World! I am 1 of 6 from keisan11. | ||
+ | Hello World! I am 2 of 6 from keisan12. | ||
+ | Hello World! I am 3 of 6 from keisan12. | ||
+ | Hello World! I am 4 of 6 from keisan12. | ||
+ | Hello World! I am 5 of 6 from keisan11. | ||
</ | </ | ||
- | * MPIが各ノードに均等にプロセスを割り振ります | + | * プロセスは keisan11 -> keisan11 -> keisan12 -> keisan12 -> keisan12 -> keisan11 -> keisan11 -> keisan12 -> keisan12 -> keisan12 -> keisan11 -> ... の順に割り振られて行きます |
- | * 並列計算におけるスレッド間の通信を考えたとき、ノード間の通信はノード内の通信に比べて非常に遅いです。できるだけ通信をしないようなプログラムが要求されます。 | + | |
====== 参考 ====== | ====== 参考 ====== |