0
如果我声明一个MPI_Request表(每个CPU有一个请求),它将在MPI_Isend/MPI_Irecv使用时全局访问(与初始化MPI环境后无处不在的MPI_comm相比)MPI处理器中MPI_Request是否全局?
谢谢。
如果我声明一个MPI_Request表(每个CPU有一个请求),它将在MPI_Isend/MPI_Irecv使用时全局访问(与初始化MPI环境后无处不在的MPI_comm相比)MPI处理器中MPI_Request是否全局?
谢谢。
我觉得这个问题有点混乱,也许你可以澄清。 MPI_Request
是一种类型;如果您在一个进程中声明了此类型的值的表,那么它仅对该进程可用,与任何其他已声明的变量一致。通常用作类型MPI_REQUEST的
数据处理立即发送和接收(ISend
,Irecv
),以允许发送和接收过程以测试该消息已被接收,使用MPI_Test
或MPI_Wait
/MPI_Waitall
/MPI_Waitany
。
MPI_Comm
也是一种类型,但也许你的意思是这种类型的默认沟通者本身?这是所有进程都知道的,因为MPI_Init
(有效地)创建默认通信器是一个集体操作。
谢谢你的回答,我问这个问题,因为MPI_Isend和MPI_Irecv把MPI_Request类型作为参数。假设每个CPU都在其世界中并且MPI_Request类型不共享,他们如何知道请求与特定的MPI_Isend和MPI_Irecv匹配? – Debugger 2010-05-28 19:21:52
匹配由“source”和“tag”参数的值完成,就像阻塞发送/接收一样。如果进程'i'发送一个带有目标'j'和标签'n'的发送,那么进程'j'将接收到IFF它发送一个带有源'i'和标签'n'(或'MPI_ANY_TAG')的接收。 MPI实现负责在消息传递后更新两个进程中'MPI_Request'对象的状态。 – suszterpatt 2010-05-28 22:42:15