我正在写一个多线程的openmpi应用程序,使用MPI_Isend和MPI_Irecv从多个线程在InfiniBand RDMA队伍之间交换每秒数百个消息.
传输大约为400-800KByte,每个等级产生大约9Gbps的输入和输出,完全在FDR的容量范围内.简单的MPI基准测试也表现出良好的性能.
通过在专用线程中使用MPI_Testsome轮询所有活动传输来检查传输的完成.
我实现的传输速率取决于消息速率,但更重要的是取决于MPI_Testsome的轮询频率.也就是说,如果我每隔10毫秒轮询一次,请求的结束时间比我每1毫秒轮询一次.
我希望如果我轮换10ms而不是每1ms,我最多会在9ms之后被告知已完成的请求.我不希望传输本身通过减少对MPI_Testsome的调用来延迟完成,从而减慢总传输速率.我希望MPI_Testsome完全被动.
这里的任何人都知道为什么会出现这种情况?