User Tools

Site Tools


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

Differences

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

Link to this comparison view

Next revision
Previous revision
Next revision Both sides next revision
自作クラスタ計算機:mpiによる並列計算 [2020/03/02 18:30]
koudai [ノード間並列計算]
自作クラスタ計算機:mpiによる並列計算 [2020/03/03 15:36]
koudai [ノード内並列計算]
Line 3: Line 3:
   * 実際にMPIを用いたノード内およびノード間の並列計算を行います   * 実際にMPIを用いたノード内およびノード間の並列計算を行います
   * 事前にOpenMPI, MPICH2, Intel MPIなどのMPIライブラリを管理ノードにインストールしてください   * 事前にOpenMPI, MPICH2, 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が動かなくなることがあります**+  * **複数のMPIを一つのコンピュータに入れると競合を起こしてMPIが動かなくなります**
  
 ====== 準備 ====== ====== 準備 ======
Line 96: Line 96:
     name[len] = '\0';     name[len] = '\0';
          
-    printf( "Hello World! I am %d of %d from %s.\n", rank, size, name );+    printf( "Hello world: rank %d of %d running on %s\n", rank, size, name );
  
     MPI_Finalize();     MPI_Finalize();
Line 108: Line 108:
 </code> </code>
   * 試しに管理ノードで走らせてみます<code>   * 試しに管理ノードで走らせてみます<code>
-$ 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
 </code> </code>
  
Line 121: Line 121:
 指定した計算ノードにジョブを投げてみます。 指定した計算ノードにジョブを投げてみます。
  
-  * MPIで指定のホストに投げる場合は、オプション<nowiki>--host</nowiki>でホスト名を指定します+  * MPIで指定のホストに投げる場合は、オプション<nowiki>-hosts</nowiki>でホスト名を指定します
   * 計算ノードのkeisan11にジョブを投げる場合は次のようにします<code>   * 計算ノードのkeisan11にジョブを投げる場合は次のようにします<code>
-$ mpirun -n 24 --host keisan11 hello +$ mpirun -n -hosts keisan11 ./hello 
-Hello World! I am 0 of 24 from keisan11. +Hello world: rank 0 of 8 running on keisan11 
-Hello World! I am 1 of 24 from keisan11. +Hello world: rank 1 of 8 running on keisan11 
-Hello World! I am 2 of 24 from keisan11. +Hello world: rank 2 of 8 running on keisan11 
-Hello World! I am 3 of 24 from 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
 </code> </code>
  
  
 ===== ノード間並列計算 ===== ===== ノード間並列計算 =====
 +
 +==== 通常の使い方 ====
  
 複数の計算ノードにわたるジョブを投げてみます。 複数の計算ノードにわたるジョブを投げてみます。
  
-  * オプション<nowiki>--host</nowiki>で複数のホスト名を指定します+  * オプション<nowiki>-hosts</nowiki>で複数のホスト名を指定します
   * 計算ノードkeisan11, keisan12, keisan13にジョブを投げる場合は次のようにします<code>   * 計算ノードkeisan11, keisan12, keisan13にジョブを投げる場合は次のようにします<code>
-$ mpirun -n 72 --host keisan11,keisan12,keisan13 hello +$ mpirun -n 10 -hosts keisan11,keisan12,keisan13 ./hello 
-Hello World! I am 0 of 72 from keisan11. +Hello world: rank 0 of 8 running on keisan11 
-Hello World! I am 1 of 72 from keisan12+Hello world: rank 1 of 8 running on keisan11 
-Hello World! I am 2 of 72 from keisan13+Hello world: rank 2 of 8 running on keisan11 
-Hello World! I am 3 of 72 from keisan11+Hello world: rank 3 of 8 running on keisan11 
-Hello World! I am 4 of 72 from keisan12. +Hello world: rank 4 of 8 running on keisan11 
-Hello World! I am 5 of 72 from keisan13. +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 
 +</code> 
 +  * どうやら管理ノードのプロセス数だけ投げたら次のノードに行く、という仕組みみたいです。(未確認) 
 + 
 +==== ホストファイルによるジョブの投入 ==== 
 + 
 +例えば計算ノードによって性能に差がある場合など、ノードごとのプロセス数を自分で管理したい場合はホストファイルを作成します。 
 + 
 +  * MPICH, Intel MPIの場合 
 +<file - my_hosts> 
 +keisan11:
 +keisan12:
 +</file> 
 +  * OpenMPIの場合 
 +<file - my_hosts> 
 +keisan11 slots=2 
 +keisan12 slots=3 
 +</file> 
 + 
 +次のように実行します 
 +<code> 
 +$ mpirun -n 6 -f my_hosts ./hello 
 +Hello World; rank 0 of 6 running on keisan11. 
 +Hello World! I am 1 of from keisan11
 +Hello World! I am 2 of from keisan12
 +Hello World! I am 3 of from keisan12
 +Hello World! I am 4 of from keisan12. 
 +Hello World! I am 5 of from keisan11.
 </code> </code>
-    * MPIが各ノードにプロセスを割り振ります +    * プロセスは keisan11 -> keisan11 -> keisan12 -> keisan12 -> keisan12 -> keisan11 -> keisan11 -> keisan12 -> keisan12 -> keisan12 -> keisan11 -> ... の順に割り振られて行きます 
-    * プロセスは keisan11 -> keisan12 -> keisan13 -> keisan11 -> ... の順に割り振られて行きます+    * Intel MPIの場合は<nowiki>-f</nowiki>の代わりに<nowiki>-machinefile</nowiki>あるいは<nowiki>-machine</nowiki>を使用してください 
 +      * https://software.intel.com/en-us/articles/controlling-process-placement-with-the-intel-mpi-library 
  
 ====== 参考 ====== ====== 参考 ======
自作クラスタ計算機/mpiによる並列計算.txt · Last modified: 2023/12/26 23:43 by koudai