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 21:56]
koudai [通常の使い方]
自作クラスタ計算機:mpiによる並列計算 [2020/03/03 16:34]
koudai [概要]
Line 3: Line 3:
   * 実際にMPIを用いたノード内およびノード間の並列計算を行います   * 実際にMPIを用いたノード内およびノード間の並列計算を行います
   * 事前にOpenMPI, MPICH2, Intel MPIなどのMPIライブラリを管理ノードにインストールしてください   * 事前にOpenMPI, MPICH2, Intel MPIなどのMPIライブラリを管理ノードにインストールしてください
-  * OpenMPIの場合次のようにaptで簡単にインストールできるので、特にこだわりがなければお勧めです<code>+  * UbuntuではOpenMPIをaptで簡単にインストールできるので、特にこだわりがなければお勧めです<code>
 $ sudo apt install openmpi-bin libopenmpi-dev $ sudo apt install openmpi-bin libopenmpi-dev
 </code> </code>
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 109: Line 109:
   * 試しに管理ノードで走らせてみます<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>
 +    * ホスト名の代わりにIPアドレスでも可能です
  
  
Line 138: Line 142:
 複数の計算ノードにわたるジョブを投げてみます。 複数の計算ノードにわたるジョブを投げてみます。
  
-  * オプション<nowiki>--host</nowiki>で複数のホスト名を指定します+  * オプション<nowiki>-hosts</nowiki>で複数のホスト名を指定します
   * 計算ノードkeisan11, keisan12, keisan13にジョブを投げる場合は次のようにします<code>   * 計算ノードkeisan11, keisan12, keisan13にジョブを投げる場合は次のようにします<code>
-$ mpirun -n 72 --host keisan11,keisan12,keisan13 ./hello +$ mpirun -hosts keisan11,keisan12,keisan13 -n 8 -ppn 2 ./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 keisan12 
-Hello World! I am 3 of 72 from keisan11. +Hello world: rank 3 of 8 running on keisan12 
-Hello World! I am 4 of 72 from keisan12. +Hello world: rank 4 of 8 running on keisan13 
-Hello World! I am 5 of 72 from 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
 </code> </code>
 +  * オプション-ppnでノードあたりのプロセス数を指定します
 +  * プロセスは keisan11 -> keisan11 -> keisan12 -> keisan12 -> keisan13 -> keisan13 -> keisan11 -> keisan11 -> keisan12 -> ... の順に割り振られていきます
  
 ==== ホストファイルによるジョブの投入 ==== ==== ホストファイルによるジョブの投入 ====
  
-例えば計算ノードによって性能に差がある場合など、ノードごとのプロセス数を自分で管理したい場合はホストファイルを作成します。+ホスト名を毎回入力したくない、計算ノードによってプロセス数を変えたいなどの場合はホストファイルを作成します。
  
   * MPICH, Intel MPIの場合   * MPICH, Intel MPIの場合
 <file - my_hosts> <file - my_hosts>
 keisan11:2 keisan11:2
-keisan12:3+keisan12:4
 </file> </file>
   * OpenMPIの場合   * OpenMPIの場合
 <file - my_hosts> <file - my_hosts>
 keisan11 slots=2 keisan11 slots=2
-keisan12 slots=3+keisan12 slots=4
 </file> </file>
  
 次のように実行します 次のように実行します
 <code> <code>
-$ mpirun -n 6 --hostfile my_hosts ./hello +$ mpirun -n 6 -my_hosts ./hello 
-Hello World! I am 0 of 6 from keisan11. +Hello world: rank 0 of 6 running on keisan11 
-Hello World! I am 1 of 6 from keisan11. +Hello world: rank 1 of 6 running on keisan11 
-Hello World! I am 2 of 6 from keisan12. +Hello world: rank 2 of 6 running on keisan12 
-Hello World! I am 3 of 6 from keisan12. +Hello world: rank 3 of 6 running on keisan12 
-Hello World! I am 4 of 6 from keisan12. +Hello world: rank 4 of 6 running on keisan12 
-Hello World! I am 5 of 6 from keisan11.+Hello world: rank 5 of 6 running on keisan12
 </code> </code>
-    * プロセスは keisan11 -> keisan11 -> keisan12 -> keisan12 -> keisan12 -> keisan11 -> keisan11 -> keisan12 -> keisan12 -> keisan12 -> keisan11 -> ... の順に割り振られて行きます+    * プロセスは keisan11 -> keisan11 -> keisan12 -> keisan12 -> keisan12 -> keisan12 -> keisan11 -> keisan11 -> keisan12 -> keisan12 -> keisan12 -> keisan12 -> keisan11 -> ... の順に割り振られて行きます 
 +    * Intel MPIの場合は<nowiki>-f</nowiki>の代わりに<nowiki>-machinefile</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