所以,假设我有一个包含2个进程的MPI程序,排名为0,排名为1.
int i[20], j[20], temp, size;
Run Code Online (Sandbox Code Playgroud)
在排名0的过程中,我有
for(temp=0; temp<20; temp++)
i[temp] = temp;
MPI_Send(i, 15, MPI_INT, 1, 1, MPI_COMM_WORLD);
Run Code Online (Sandbox Code Playgroud)
然后让我们说排名为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" ;
Run Code Online (Sandbox Code Playgroud)
我的问题是,在上述声明中,是否需要声明"大小"?或者MPI_Recv以某种方式"知道"它正在接收15个元素,并自动设置size = 15?如果未定义大小,代码会发生什么?
基本上,我的问题是,我向不同级别的处理器发送不同数量的元素,所有消息都来自0级.我想知道我是否应该首先发送大小,然后准备处理器以接收那么多元素,或者如果我可以发送数组,那么进程会自动从那里选择大小.
cas*_*nca 14
查看以下文档MPI_Recv:
输入参数
count 最大接收缓冲区中的元素数(整数)
所以是的,你需要传入一个值.请注意,它不必是您接收的元素的实际数量,而只是缓冲区可以容纳的最大元素数.在您的情况下,您只需要传递20. Notes部分还提到了如何确定收到的元素的实际数量:
所述
count参数指示的消息的最大长度; 实际数量可以用MPI_Get_count.
| 归档时间: |
|
| 查看次数: |
3022 次 |
| 最近记录: |