Я пишу многопоточное приложение OpenMPI, используя MPI_Isend и MPI_Irecv из нескольких потоков для обмена сотнями сообщений в секунду между рангами через InfiniBand RDMA.
Передача составляет порядка 400–800 КБ, генерируя около 9 Гбит/с для каждого ранга, что вполне соответствует пропускной способности FDR. Простые тесты MPI также показывают хорошую производительность.
Завершение передачи проверяется путем опроса всех активных передач с использованием MPI_Testsome в выделенном потоке.
Достигаемая мной скорость передачи зависит от скорости передачи сообщений, но, что более важно, от частоты опроса MPI_Testsome. То есть, если я опрашиваю, скажем, каждые 10 мс, запросы заканчиваются позже, чем если я опрашиваю каждую 1 мс.
Я ожидаю, что если я буду опрашивать каждые 10 мс вместо каждой 1 мс, я буду проинформирован о завершенных запросах максимум через 9 мс. Я не ожидал, что сами передачи будут задерживать завершение из-за меньшего количества вызовов MPI_Testsome и, таким образом, замедлять общую скорость передачи. Я ожидаю, что MPI_Testsome будет полностью пассивным.
Кто-нибудь здесь знает, почему такое поведение может произойти?