Параметр подсчета не соответствует, MPI_Bsend / MPI_Recieve - PullRequest
0 голосов
/ 15 марта 2012

В найденном примере здесь , почему счетчик во втором сообщении не соответствует

if (rank == src) {
    /* These message sizes are chosen to expose any alignment problems */
    MPI_Bsend( msg1, 7, MPI_CHAR, dest, tag, comm );
    MPI_Bsend( msg2, 2, MPI_DOUBLE, dest, tag, comm );
    MPI_Bsend( msg3, 17, MPI_CHAR, dest, tag, comm );
}

if (rank == dest) {
    MPI_Recv( rmsg1, 7, MPI_CHAR, src, tag, comm, MPI_STATUS_IGNORE );
    MPI_Recv( rmsg2, 10, MPI_DOUBLE, src, tag, comm, MPI_STATUS_IGNORE );
    MPI_Recv( rmsg3, 17, MPI_CHAR, src, tag, comm, MPI_STATUS_IGNORE );
    if (strcmp( rmsg1, msg1 ) != 0) {
        errs++;
        fprintf( stderr, "message 1 (%s) should be %s\n", rmsg1, msg1 );fflush(stderr);
    }

Почему счетчик для отправки и получения двух несовместим?

1 Ответ

2 голосов
/ 15 марта 2012

Аргумент count, равный Recv, является только верхней границей количества данных, которые необходимо получить.Это удобно, если мы не знаем размер полезной нагрузки во время компиляции.После завершения второго Recv, rmsg2 будет содержать два двойных числа и некоторые неинициализированные данные.

...