Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自未知源的MPI recv_Mpi_Distributed Programming - Fatal编程技术网

来自未知源的MPI recv

来自未知源的MPI recv,mpi,distributed-programming,Mpi,Distributed Programming,我在MPI中实现了一个程序,在这个程序中,主进程(秩=0)应该能够接收来自其他进程的请求,这些进程请求只由根知道的变量值。 如果我将MPI_Recv(…)设置为秩0,我必须指定向根用户发送请求的进程的秩,但我无法控制它,因为进程的运行顺序不是1,2,3,。。。。 如何接收来自任何等级的请求,并使用发射过程的数量来发送必要的信息? 这假设你使用C。C++和FORTRAN中有类似的概念。您只需在MPI\u recv()中指定MPI\u ANY\u SOURCE作为源。状态结构包含消息的实际来源 in

我在MPI中实现了一个程序,在这个程序中,主进程(秩=0)应该能够接收来自其他进程的请求,这些进程请求只由根知道的变量值。 如果我将MPI_Recv(…)设置为秩0,我必须指定向根用户发送请求的进程的秩,但我无法控制它,因为进程的运行顺序不是1,2,3,。。。。
如何接收来自任何等级的请求,并使用发射过程的数量来发送必要的信息?

这假设你使用C。C++和FORTRAN中有类似的概念。您只需在
MPI\u recv()
中指定
MPI\u ANY\u SOURCE
作为源。状态结构包含消息的实际来源

int buf[32];
MPI_Status status;
// receive message from any source
MPI_recv(buf, 32, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
int replybuf[];
// send reply back to sender of the message received above
MPI_send(buf, 32, MPI_INT, status.MPI_SOURCE, tag, MPI_COMM_WORLD);

MPI_ANY_来源是显而易见的答案


但是,如果所有列组都将向列组0发送请求,那么MPI_Irecv与MPI_Testall组合也可以作为一种模式。这将允许以任何顺序执行MPI_发送调用,并且可以按照匹配MPI_Irecv调用的顺序接收和处理信息

在我看来,编辑使代码无法使用。
status
结构确实用于
MPI\u Send
操作,以识别原始消息的来源:
status.MPI\u source
@Marius谢谢,我已经回滚到原始版本,并添加了一些注释以使事情更清楚。