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:47]
koudai [通常の使い方]
自作クラスタ計算機:mpiによる並列計算 [2020/03/03 15:39]
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>
  
Line 138: Line 141:
 複数の計算ノードにわたるジョブを投げてみます。 複数の計算ノードにわたるジョブを投げてみます。
  
-  * オプション<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 10 running on keisan11 
-Hello World! I am 1 of 72 from keisan12. +Hello world: rank 1 of 10 running on keisan11 
-Hello World! I am 2 of 72 from keisan13. +Hello world: rank 2 of 10 running on keisan11 
-Hello World! I am 3 of 72 from keisan11. +Hello world: rank 3 of 10 running on keisan11 
-Hello World! I am 4 of 72 from keisan12. +Hello world: rank 4 of 10 running on keisan12 
-Hello World! I am 5 of 72 from keisan13. +Hello world: rank 5 of 10 running on keisan12 
-(以下略)+Hello world: rank 6 of 10 running on keisan12 
 +Hello world: rank 7 of 10 running on keisan12 
 +Hello world: rank 8 of 10 running on keisan13 
 +Hello world: rank 9 of 10 running on keisan13
 </code> </code>
-    * プロセスは keisan11 -> keisan12 -> keisan13 -> keisan11 -> ... 割り振られてきま +  どうやらMPIを実行したノード(今の場合は管理ノード)のプロセス数だけ投げたら次ノードに行く、という仕組みみたいで。(未確認)
  
 ==== ホストファイルによるジョブの投入 ==== ==== ホストファイルによるジョブの投入 ====
  
-例えばノードごとに性能差がある場合など、ノードごとのプロセス数を自分で管理したい場合はホストファイルを作成します。 +例えば計算ノードによって性能差がある場合など、ノードごとのプロセス数を自分で管理したい場合はホストファイルを作成します。
-例えばkeisan11に2スレッド、keisan12に3スレッド割り振りたい場合は次のファイルを用意します。+
  
   * MPICH, Intel MPIの場合   * MPICH, Intel MPIの場合
Line 170: Line 174:
 次のように実行します 次のように実行します
 <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! I am 1 of 6 from keisan11.
 Hello World! I am 2 of 6 from keisan12. Hello World! I am 2 of 6 from keisan12.
Line 179: Line 183:
 </code> </code>
     * プロセスは keisan11 -> keisan11 -> keisan12 -> keisan12 -> keisan12 -> keisan11 -> keisan11 -> keisan12 -> keisan12 -> keisan12 -> keisan11 -> ... の順に割り振られて行きます     * プロセスは keisan11 -> keisan11 -> keisan12 -> keisan12 -> keisan12 -> keisan11 -> keisan11 -> keisan12 -> keisan12 -> keisan12 -> 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