我正在使用MPI非阻塞消息在两个任务之间进行通信。通信模式如下:每个任务都有一个主线程,用于接收来自其他任务的消息。它有5个左右的工作线程进行计算并将消息发送到其他任务。主线程循环,测试传入的消息。这是它唯一做的事情。
我的问题是,当任务0瞬间接收从任务1发送的所有内容(发送和接收的消息数大致匹配)时,任务1只接收任务0发送的大约1/4的消息。运行一分钟后,有数十万条未完成的消息。
使用PAPI,我已经确定任务1似乎阻止了测试和irecv。指令吞吐量仅为0.03 instr / cycle而不是其他任务的> 0.2,并且在调试器中停止任务表明它正在尝试获取锁。但是,阻塞的接收和测试不是“丢失”消息的消息,而是另一类非常罕见的消息。
我意识到很难说在没有实际尝试代码的情况下会导致什么原因,但我发现令人费解的是MPI性能存在这样的不对称性。无法跟上收到的任务不是因为没有尝试,它真的花了所有时间来测试收到的消息。
我正在使用带MPI_THREAD_MULTIPLE的OpenMPI 1.5.3,并且通信超过sm,(两个任务在同一节点上)。
任何想法如何追踪这一点都将不胜感激。