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 16:45]
koudai [サンプルプログラム]
自作クラスタ計算機:mpiによる並列計算 [2020/03/02 17:59]
koudai [ノード内並列計算]
Line 9: Line 9:
  
 ====== 準備 ====== ====== 準備 ======
 +
 +===== ハードウェアの確認 =====
  
 事前に各ノードのCPUのコア数(物理コア数)とスレッド数(論理コア数)を確認してください 事前に各ノードのCPUのコア数(物理コア数)とスレッド数(論理コア数)を確認してください
Line 23: Line 25:
  
  
 +===== SSHの導入 =====
 +
 +管理ノードと計算ノードの間の通信はSSHで行います。
 +  * 現状のままだと管理ノードから計算ノードへ入る際にパスワードの入力が必要ですが、ジョブ投入のたびにパスワードを入力するのは現実的ではありません。
 +  * そこでパスフレーズなしのSSH鍵を作成することで、パスワードの入力を回避します
 +
 +  - 管理ノードのジョブを投げるユーザーのアカウント(以下ではsugimotoとします)にログインし、SSH鍵を作成します。パスフレーズを聞かれるところでは、**なにも入力せずに**エンターを押します<code>
 +$ ssh-keygen -t rsa
 +Generating public/private rsa key pair.
 +Enter file in which to save the key (/home/sugimoto/.ssh/id_rsa): 
 +Created directory '/home/sugimoto/.ssh'.
 +Enter passphrase (empty for no passphrase): 
 +Enter same passphrase again: 
 +Your identification has been saved in /home/sugimoto/.ssh/id_rsa.
 +Your public key has been saved in /home/sugimoto/.ssh/id_rsa.pub.
 +The key fingerprint is:
 +SHA256:ZLnV/uJ8+lml7EdU+j8sjGJdxqF6F+tyg8FrD2hP3hI sugimoto@kanri
 +The key's randomart image is:
 ++---[RSA 2048]----+
 +|                 |
 +|         . .    .|
 +|        + . .  ..|
 +|       o o . .. .|
 +|        S . + .o.|
 +|          .E B .+|
 +|         ooo@ B.o|
 +|        .++%oX.=o|
 +|        . +o@B*..|
 ++----[SHA256]-----+
 +</code>
 +  - 公開鍵を設置します<code>
 +$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
 +</code>
 +    * NFSサーバを設置しているので、管理ノードにおいてある鍵は計算ノードでも見えます
 +  - 初回接続時に表示されるメッセージを抑制させます<code>
 +$ echo "StrictHostKeyChecking no" >> ~/.ssh/config
 +</code>
 +  - 権限を変更します<code>
 +$ chmod 600 ~/.ssh/id_rsa
 +$ chmod 600 ~/.ssh/authorized_keys
 +$ chmod 700 ~/.ssh/
 +</code>
 +  - 実際にパスワード無しで計算ノードにログインできるか確かめます<code>
 +$ ssh keisan11
 +</code>
  
 ====== 並列計算 ====== ====== 並列計算 ======
Line 48: Line 95:
     MPI_Get_processor_name( name, &len );     MPI_Get_processor_name( name, &len );
     name[len] = '\0';     name[len] = '\0';
 +    
     printf( "Hello World! I am %d of %d from %s.\n", rank, size, name );     printf( "Hello World! I am %d of %d from %s.\n", rank, size, name );
-    MPI_Finalize(); 
  
 +    MPI_Finalize();
     return 0;     return 0;
 } }
Line 67: Line 115:
 </code> </code>
  
 +
 +
 +===== ノード内並列計算 =====
 +
 +指定した計算ノードにジョブを投げてみます。
 +
 +  * MPIで指定のホストに投げる場合は、オプション<nowiki>--host</nowiki>でホスト名を指定します
 +  * 計算ノードのkeisan11にジョブを投げる場合は次のようにします<code>
 +$ mpirun -n 24 --host keisan11 hello
 +Hello World! I am 0 of 24 from keisan11.
 +Hello World! I am 1 of 24 from keisan11.
 +Hello World! I am 2 of 24 from keisan11.
 +Hello World! I am 3 of 24 from keisan11.
 +(以下略)
 +</code>
 +
 +
 +===== ノード間並列計算 =====
 +
 +複数の計算ノードにわたるジョブを投げてみます。
 +
 +  * オプション<nowiki>--host</nowiki>で複数のホスト名を指定します
 +  * 計算ノードkeisan11とkeisan12にジョブを投げる場合は次のようにします<code>
 +$ mpirun -n 4 --host keisan11,keisan12 hello
 +Hello World! I am 0 of 4 from keisan11.
 +Hello World! I am 1 of 4 from keisan11.
 +Hello World! I am 2 of 4 from keisan12.
 +Hello World! I am 3 of 4 from keisan12.
 +</code>
 +    * MPIがプロセス数に応じて各ノードにスレッドを割り振ります
  
 ====== 参考 ====== ====== 参考 ======
自作クラスタ計算機/mpiによる並列計算.txt · Last modified: 2023/12/26 23:43 by koudai