我正在寫一個多線程的openmpi應用程序,使用MPI_Isend和MPI_Irecv從多個線程在InfiniBand RDMA隊伍之間交換每秒數百個消息。的InfiniBand:傳輸速率取決於MPI_TEST *頻率
轉會是在400的順序 - 800KByte,產生約9 Gbps的進出用於每個秩,FDR的能力範圍內。簡單的MPI基準測試也表現出良好的性能。
的傳輸的完成在通過輪詢檢查在專用線程使用MPI_Testsome所有活動傳輸。
我實現了傳輸速率取決於消息率,但更重要的還取決於MPI_Testsome的輪詢頻率。也就是說,如果我每隔10ms進行一次輪詢,那麼請求的結束時間要比每隔1ms輪詢一次的時間要晚。
我預計,如果我查詢埃弗特10毫秒,而不是每1ms的,我頂多完成9ms的請求以後通知。我不希望這些傳輸本身通過減少對MPI_Testsome的調用來延遲完成,從而減慢總傳輸速率。我希望MPI_Testsome完全被動。
任何人在這裏都有線索爲什麼會發生這種行爲?
謝謝!我沒有意識到異步級數不是默認值。我確實有一個'btl_openib_async_event_thread'運行(根據gdb)。 'btl_openib_use_async_event_thread'選項也被設置。我將從重建OpenMPI開始,看看我能否更好地控制這一方面。 –
''openib'異步線程不是我提到的異步進程線程。它從InfiniBand完成隊列中讀取通知消息,可能會更新進程隊列中未決事件的狀態。 –