使用MPI c ++限制数据交换

时间:2018-05-11 11:18:04

标签: c++ mpi

我正在编写用于数据交换的MPI C ++代码,下面是示例代码:

#include <stdio.h>
#include <mpi.h>

int main(int argc, char **argv)
{
    int size, rank;
    int dest, tag, i;
    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    printf("SIZE = %d RANK = %d\n",size,rank);

    if ( rank == 0 )
    {
        double data[500];
        for (i = 0; i < 500; i++) 
        {
            data[i] = i;
        }
        dest = 1;
        tag = 1;
        MPI_Send(data,500,MPI_DOUBLE,dest,tag, MPI_COMM_WORLD );
    }

    MPI_Finalize();   
    return(0);
}

看起来500是我可以发送的最大值。如果数据的数量增加到600,则代码似乎停在&#34; MPI_SEND&#34;没有进一步的进展我怀疑使用MPI_SEND传输数据是否有任何限制。你能有人开导我吗?

提前致谢,

1 个答案:

答案 0 :(得分:4)

长话短说,你的程序是不正确的,你很幸运它没有挂起一小部分。

根据MPI标准,除非已发布匹配的MPI_Send(),否则您不能认为MPI_Recv()会返回。

从实用的角度来看,“短”消息通常以急切模式发送,MPI_Send()可能会立即返回。 另一方面,“长”消息通常涉及一个rendez-vous协议,因此挂起直到匹配的接收已发布。

“small”和“long”取决于多个因素,包括您正在使用的互连。再一次,如果您发送足够小的消息,则不能认为MPI_Send()将始终立即返回。