Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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
Glut+MPI_发送,实际上不阻塞_Mpi_Glut_Blocking - Fatal编程技术网

Glut+MPI_发送,实际上不阻塞

Glut+MPI_发送,实际上不阻塞,mpi,glut,blocking,Mpi,Glut,Blocking,我正在尝试使用MPI MPMD通信来通信两个不同的进程。其中一个进程使用GLUT呈现基于另一个进程发送的数据生成的一些数据 我的问题是,在初始化阶段,使用GLUT的使用者向生产者发送某些配置数据,但似乎MPI_发送调用没有阻塞。例如,我从消费者向生产者发送了4条不同的消息,每条消息都带有不同的标签。它似乎工作正常。然后我对第一次MPI_发送进行注释,而不更改另一个进程的代码,这意味着它们中的任何一个都不应分别超过第一次MPI_发送和MPI_Recv。问题是发送方发送了所有这三条消息,而且似乎每个

我正在尝试使用MPI MPMD通信来通信两个不同的进程。其中一个进程使用GLUT呈现基于另一个进程发送的数据生成的一些数据

我的问题是,在初始化阶段,使用GLUT的使用者向生产者发送某些配置数据,但似乎MPI_发送调用没有阻塞。例如,我从消费者向生产者发送了4条不同的消息,每条消息都带有不同的标签。它似乎工作正常。然后我对第一次MPI_发送进行注释,而不更改另一个进程的代码,这意味着它们中的任何一个都不应分别超过第一次MPI_发送和MPI_Recv。问题是发送方发送了所有这三条消息,而且似乎每个MPI_发送都返回MPI_成功,因为我在每个MPI_发送对应于正确演变的打印消息之后执行的测试。同时,接收器不前进

我曾尝试在更简单的应用程序中重现这种行为,但没有过量,而且效果很好。但与此同时,我认为没有理由让过剩造成这一问题。你有什么建议吗


提前感谢。

我刚刚发现MPI\u Send不能保证阻塞,如中所述,因此为了获得所需的行为,我应该使用MPI\u Send。

您误读了阻塞MPI Send模式的语义。这里的阻塞意味着操作阻塞,直到消息数据及其信封被安全存储,并且数据缓冲区可以自由修改。相比之下,非阻塞操作MPI_I。。。立即返回控件,但要求在操作仍在进行时不要修改数据缓冲区

MPI_发送是标准的阻塞发送操作。它可以实现为同步阻塞发送MPI_Ssend(在接收操作启动之前不会返回),也可以实现为内部缓冲阻塞发送(类似于MPI_Bsend),将消息数据复制到一个小的内部缓冲区并返回控制。标准没有定义标准send的具体实现方式。大多数实现都会缓冲多条短消息。

您将同步行为误认为是阻塞。