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