電子計算記

個人的な検証を

5. MPIクラスターを作ろう! - コンパイルと実行

前回からのつづきです。
4. MPIクラスターを作ろう! - 実行用ユーザー作成 - 電子計算記

単体のノードでMPI環境が動くことを確認できたので、MPIのコードをコンパイルして実行してみましょう。

テスト用のコードとしてHello World的なやつを用意します。ここではC言語で話進めていきます。

mpiuser@compute-1:~$ mkdir hello
mpiuser@compute-1:~$ cd hello/
mpiuser@compute-1:~/hello$ vi hello.c

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, I am %d of %d from %s\n", rank, size, name );
    MPI_Barrier( MPI_COMM_WORLD );
    MPI_Finalize();

    return 0;
}

コンパイルとしてはC言語なのでmpiccを使います。

mpiuser@compute-1:~/hello$ mpicc hello.c 

実行すると、ランク(自プロセスの番号)が0番で、サイズ(全体のプロセス数)が1プロセス、そして返してきたホスト名が出てます。

mpiuser@compute-1:~/hello$ mpirun -np 1 ./a.out 
Hello, world, I am 0 of 1 from compute-1.cs30idcfcloud.internal

2プロセスだとこんな感じです。まだノードが1台なので、同じホスト名が返ってきてますね。

mpiuser@compute-1:~/hello$ mpirun -np 2 ./a.out 
Hello, world, I am 0 of 2 from compute-1.cs30idcfcloud.internal
Hello, world, I am 1 of 2 from compute-1.cs30idcfcloud.internal

単一ノードで動かしてるだけだと複数プロセスで動かしても面白みがないですね。
それでは次回からは複数ノードにスケールしていきます。

fujish.hateblo.jp