User Tools

Site Tools


自作クラスタ計算機:mpiによる並列計算

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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