実行制御: barria同期

プログラム: barrier.c

#include "mpi.h"
main( argc, argv )
int argc;
char **argv;
{
    int myrank;

    MPI_Init( &argc, &argv );
    MPI_Comm_rank( MPI_COMM_WORLD, &myrank );

    printf("Hello, I'm a process%d\n", myrank);

    MPI_Barrier( MPI_COMM_WORLD );
    printf("Process%d is starting jts job...\n", myrank);

    MPI_Finalize();
  }

解説

各プロセスは2つのプリント文を順番に実行する.
mpirun -np 4 ./a.out
Hello, I'm a process0
Process0 is starting jts job...
Hello, I'm a process1
Process1 is starting jts job...
Hello, I'm a process2
Process2 is starting jts job...
Hello, I'm a process3
Process3 is starting jts job...
しかし,次のようにすべてのプロセスが最初のプリント文を出力した後に, 2番目のプリント文を実行するように制御したいとしたらどうしたらよいだろか.
mpirun -np 4 ./a.out
Hello, I'm a process2
Hello, I'm a process0
Hello, I'm a process1
Hello, I'm a process3
Process3 is starting jts job...
Process0 is starting jts job...
Process2 is starting jts job...
Process1 is starting jts job...
このように,すべてのプロセスがその関数を呼び出すまで「待つ」という機能を 提供するのがバリア同期である.上記例では,2つのプリント文の間に置く.