This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
自作クラスタ計算機:mpiによる並列計算 [2020/03/02 16:48] koudai [サンプルプログラム] |
自作クラスタ計算機:mpiによる並列計算 [2020/03/02 18:01] koudai [サンプルプログラム] |
||
---|---|---|---|
Line 9: | Line 9: | ||
====== 準備 ====== | ====== 準備 ====== | ||
+ | |||
+ | ===== ハードウェアの確認 ===== | ||
事前に各ノードのCPUのコア数(物理コア数)とスレッド数(論理コア数)を確認してください | 事前に各ノードのCPUのコア数(物理コア数)とスレッド数(論理コア数)を確認してください | ||
Line 23: | Line 25: | ||
+ | ===== SSHの導入 ===== | ||
+ | |||
+ | 管理ノードと計算ノードの間の通信はSSHで行います。 | ||
+ | * 現状のままだと管理ノードから計算ノードへ入る際にパスワードの入力が必要ですが、ジョブ投入のたびにパスワードを入力するのは現実的ではありません。 | ||
+ | * そこでパスフレーズなしのSSH鍵を作成することで、パスワードの入力を回避します | ||
+ | |||
+ | - 管理ノードのジョブを投げるユーザーのアカウント(以下ではsugimotoとします)にログインし、SSH鍵を作成します。パスフレーズを聞かれるところでは、**なにも入力せずに**エンターを押します< | ||
+ | $ ssh-keygen -t rsa | ||
+ | Generating public/ | ||
+ | Enter file in which to save the key (/ | ||
+ | Created directory '/ | ||
+ | Enter passphrase (empty for no passphrase): | ||
+ | Enter same passphrase again: | ||
+ | Your identification has been saved in / | ||
+ | Your public key has been saved in / | ||
+ | The key fingerprint is: | ||
+ | SHA256: | ||
+ | The key's randomart image is: | ||
+ | +---[RSA 2048]----+ | ||
+ | | | | ||
+ | | . . .| | ||
+ | | + . . ..| | ||
+ | | o o . .. .| | ||
+ | | S . + .o.| | ||
+ | | .E B .+| | ||
+ | | ooo@ B.o| | ||
+ | | .++%oX.=o| | ||
+ | | . +o@B*..| | ||
+ | +----[SHA256]-----+ | ||
+ | </ | ||
+ | - 公開鍵を設置します< | ||
+ | $ cat ~/ | ||
+ | </ | ||
+ | * NFSサーバを設置しているので、管理ノードにおいてある鍵は計算ノードでも見えます | ||
+ | - 初回接続時に表示されるメッセージを抑制させます< | ||
+ | $ echo " | ||
+ | </ | ||
+ | - 権限を変更します< | ||
+ | $ chmod 600 ~/ | ||
+ | $ chmod 600 ~/ | ||
+ | $ chmod 700 ~/.ssh/ | ||
+ | </ | ||
+ | - 実際にパスワード無しで計算ノードにログインできるか確かめます< | ||
+ | $ ssh keisan11 | ||
+ | </ | ||
====== 並列計算 ====== | ====== 並列計算 ====== | ||
Line 60: | Line 107: | ||
$ mpiicc -o hello hello.c | $ mpiicc -o hello hello.c | ||
</ | </ | ||
- | * 管理ノード(4スレッド)で走らせてみます< | + | * 試しに管理ノードで走らせてみます< |
$ mpirun -n 4 hello | $ mpirun -n 4 hello | ||
Hello World! I am 0 of 4 from kanri. | Hello World! I am 0 of 4 from kanri. | ||
Line 68: | Line 115: | ||
</ | </ | ||
+ | |||
+ | |||
+ | ===== ノード内並列計算 ===== | ||
+ | |||
+ | 指定した計算ノードにジョブを投げてみます。 | ||
+ | |||
+ | * MPIで指定のホストに投げる場合は、オプション< | ||
+ | * 計算ノードのkeisan11にジョブを投げる場合は次のようにします< | ||
+ | $ 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. | ||
+ | (以下略) | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== ノード間並列計算 ===== | ||
+ | |||
+ | 複数の計算ノードにわたるジョブを投げてみます。 | ||
+ | |||
+ | * オプション< | ||
+ | * 計算ノードkeisan11とkeisan12にジョブを投げる場合は次のようにします< | ||
+ | $ mpirun -n 4 --host keisan11, | ||
+ | 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. | ||
+ | </ | ||
+ | * MPIがプロセス数に応じて各ノードにスレッドを割り振ります | ||
====== 参考 ====== | ====== 参考 ====== |