Table of Contents

概要

準備

ハードウェアの確認

事前に各ノードのCPUのコア数(物理コア数)とスレッド数(論理コア数)を確認してください

SSHの導入

管理ノードと計算ノードの間の通信はSSHで行います。

  1. 管理ノードのジョブを投げるユーザーのアカウント(以下ではsugimotoとします)にログインし、SSH鍵を作成します。パスフレーズを聞かれるところではなにも入力せずにエンターを押します
    $ 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]-----+
  2. 公開鍵を設置します
    $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    • NFSサーバを設置しているので、管理ノードにおいてある鍵は計算ノードでも見えます
  3. 初回接続時に表示されるメッセージを抑制させます
    $ echo "StrictHostKeyChecking no" >> ~/.ssh/config
  4. 権限を変更します
    $ chmod 600 ~/.ssh/id_rsa
    $ chmod 600 ~/.ssh/authorized_keys
    $ chmod 700 ~/.ssh/
  5. 実際にパスワード無しで計算ノードにログインできるか確かめます
    $ ssh keisan11

並列計算

作業は全て管理ノードで行います

サンプルプログラム

次のコードを使って説明します

hello.c
#include <stdio.h>
#include "mpi.h"
 
int main( int argc, char *argv[] )
{
    int     rank, size, len;
    char    name[MPI_MAX_PROCESSOR_NAME];
 
    MPI_Init( &argc, &argv );
    MPI_Comm_rank( MPI_COMM_WORLD, &rank );
    MPI_Comm_size( MPI_COMM_WORLD, &size );
    MPI_Get_processor_name( name, &len );
    name[len] = '\0';
 
    printf( "Hello world: rank %d of %d running on %s\n", rank, size, name );
 
    MPI_Finalize();
    return 0;
}

ノード内並列計算

指定した計算ノードにジョブを投げてみます。

ノード間並列計算

通常の使い方

複数の計算ノードにわたるジョブを投げてみます。

ホストファイルによるジョブの投入

ホスト名を毎回入力したくない、計算ノードによってプロセス数を変えたいなどの場合は、ホストファイルを作成します。

hosts.txt
keisan11 slots=2
keisan12 slots=4
hosts.txt
keisan11:2
keisan12:4

次のように実行します

$ mpirun -n 6 -f hosts.txt ./hello
Hello world: rank 0 of 6 running on keisan11
Hello world: rank 1 of 6 running on keisan11
Hello world: rank 2 of 6 running on keisan12
Hello world: rank 3 of 6 running on keisan12
Hello world: rank 4 of 6 running on keisan12
Hello world: rank 5 of 6 running on keisan12

参考