MPI通信的行为是否与其自身定义明确?

Mic*_*per 11 mpi

如果您使用其中一种MPI通信方法与其自身进行通信,会发生什么?是否有明确定义的行为(例如保证成功或失败),还是取决于机会/其他无法控制的影响,程序是否会继续运行?

一个例子是流体动力学代码,其中每个等级确定需要将哪些网格单元发送到相邻等级以为计算模板创建必要的光环.如果仅在一个等级上开始模拟,则将自身发送/接收等级0的无阻塞(发送大约0长度的信息).

Gre*_*sev 12

虽然您可以根据suszterpatt的回答避免自我消息传递,但自我消息传递将起作用并且是MPI标准的一部分.甚至还有一个预定义的便利沟通者MPI_COMM_SELF.只要发送/接收呼叫不会导致死锁(例如,使用非阻塞呼叫),发送给自己就可以了.当然,发送和接收缓冲区不应重叠.

请注意,使用OpenMPI,您需要启用selfBTL.


资料来源:MPI 1.1第3.2.4节

Source = destination是允许的,也就是说,进程可以向自己发送消息.(但是,使用上述阻塞发送和接收操作这样做是不安全的,因为这可能会导致死锁.请参见3.5节.点对点通信的语义.)