Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

Subject: [OMPI users] MPI_ERR_TRUNCATE: On Broadcast
From: Lim Jiew Meng (jiewmeng_at_[hidden])
Date: 2012-11-08 09:42:25


I have an int I intend to broadcast from root (rank==(FIELD=0)).

int winner
if (rank == FIELD) {
    winner = something;}

MPI_Barrier(MPI_COMM_WORLD);
MPI_Bcast(&winner, 1, MPI_INT, FIELD, MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD);if (rank != FIELD) {
    cout << rank << " informed that winner is " << winner << endl;}

But it appears I get

[JM:6892] *** An error occurred in MPI_Bcast[JM:6892] *** on
communicator MPI_COMM_WORLD[JM:6892] *** MPI_ERR_TRUNCATE: message
truncated[JM:6892] *** MPI_ERRORS_ARE_FATAL: your MPI job will now
abort

Found that I can increase the buffer size in Bcast

MPI_Bcast(&winner, NUMPROCS, MPI_INT, FIELD, MPI_COMM_WORLD);

Where NUMPROCS is number of running processes. (actually seems like I just
need it to be 2). Then it runs, but gives unexpected output ...

1 informed that winner is 1032 informed that winner is 1033 informed
that winner is 1035 informed that winner is 1034 informed that winner
is 103

When I cout the winner, it should be -1

Whats wrong? In a simple try, it appears to work:

MPI_Init(NULL, NULL);

MPI_Comm_size(MPI_COMM_WORLD, &numProcs);

MPI_Comm_rank(MPI_COMM_WORLD, &rank);

if (rank == 0) {

srand(time(NULL));

tmp = (rand() % 100) + 1;

cout << "generated " << tmp << endl;

}

MPI_Barrier(MPI_COMM_WORLD);

MPI_Bcast(&tmp, 1, MPI_INT, 0, MPI_COMM_WORLD);

MPI_Barrier(MPI_COMM_WORLD);

if (rank != 0) {

cout << rank << " received " << tmp << endl;

}