计数参数不一致,MPI_Bsend/MPI_Recieve

标签 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);
    }

为什么发送和接收的计数不一致?

最佳答案

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

关于计数参数不一致,MPI_Bsend/MPI_Recieve,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9710508/

相关文章:

c - 如何比较结构数组中的字符串?

r - 创建一组同事的 Windows 7 PC 以在 R 中进行并行处理?

c - 程序不将数组写入文件

c - 这个定义语句是什么意思?

c++ boost MPI & threading - 序列化错误 : Address not mapped

c++ - unique_ptr 是否可以在非阻塞(例如 MPI_Isend)调用后销毁?

matrix - 了解 block 和 block 循环矩阵分布

r - 从 R 调用并行 fortran MPI 子例程

c - OSX 上 C OpenGL 程序的基本框架

c - 如何使 C 计时器在 Linux 中的特定系统时间到期