MPI_Recv - 如何确定计数?

时间:2011-03-01 18:42:19

标签: c++ mpi

因此,假设我有一个包含2个进程的MPI程序,等级0和等级1.

int i[20], j[20], temp, size; 

在排名为0的过程中,我有

for(temp=0; temp<20; temp++)
    i[temp] =  temp; 
MPI_Send(i, 15, MPI_INT, 1, 1, MPI_COMM_WORLD);

然后让我们说排名为1的流程

// At this point, size is declared, but not assigned any value. 
MPI_Recv(j,size, MPI_INT, 0, 1, MPI_COMM_WORLD): 
cout << "I have received " << size << " elements" ; 

我的问题是,在上面的陈述中,是否需要声明“大小”?或者MPI_Recv以某种方式“知道”它正在接收15个元素,并自动设置size = 15?如果未定义大小,代码会发生什么?

基本上,我的问题是,我向不同级别的处理器发送不同数量的元素,所有消息都来自0级。我想知道我是否应首先发送大小,然后准备处理器接收那么多元素,或者如果我可以发送数组并且进程自动从那里选择大小。

1 个答案:

答案 0 :(得分:14)

查看MPI_Recv的文档:

  

输入参数

     

count 接收缓冲区中的最大元素数(整数)

所以是的,你确实需要传入一个值。请注意,它不必是您接收的元素的实际数量,而只是缓冲区可以容纳的最大元素数。在您的情况下,您只需要传递20. 注释部分还提到了如何确定收到的元素的实际数量:

  

count参数表示消息的最大长度;实际数字可以用MPI_Get_count确定。