MPI_Recv - 如何确定计数?

9

假设我有一个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" ; 

我的问题是,在上述语句中,"size"需要声明吗?还是MPI_Recv会“知道”它正在接收15个元素,并自动设置size = 15?如果未定义size,代码会发生什么?
基本上,我的问题是,我正在向具有不同等级的处理器发送不同数量的元素,所有消息均源自rank 0。我想知道是否应该先发送大小,然后准备处理器接收那么多元素,还是直接发送数组,进程会自动从中提取大小。
1个回答

15

查看 MPI_Recv 的文档:

输入参数

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接