计数参数不一致,MPI_Bsend / MPI_Recieve

时间:2012-03-14 21:25:14

标签: c mpi

在找到here的示例中,为什么第二条消息中的计数不一致

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 个答案:

答案 0 :(得分:2)

count的{​​{1}}参数只是要接收的数据量的上限。如果我们在编译时不知道有效负载的大小,这很方便。第二个Recv完成后,Recv将包含两个双打,然后是一些未初始化的数据。