因此,假设我有一个包含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级。我想知道我是否应首先发送大小,然后准备处理器接收那么多元素,或者如果我可以发送数组并且进程自动从那里选择大小。
答案 0 :(得分:14)
查看MPI_Recv
的文档:
输入参数
count 接收缓冲区中的最大元素数(整数)
所以是的,你确实需要传入一个值。请注意,它不必是您接收的元素的实际数量,而只是缓冲区可以容纳的最大元素数。在您的情况下,您只需要传递20. 注释部分还提到了如何确定收到的元素的实际数量:
count
参数表示消息的最大长度;实际数字可以用MPI_Get_count
确定。