MVAPICH2 Связь на основе RDMA без явного использования PUT/GET?

В моем кластере используется MVAPICH2 поверх Infiniband FDR, и я рассматриваю возможность использования RDMA для своих симуляций. Я знаю о вызовах MPI_Put и MPI_Get для явного вызова операций RDMA, однако я хотел бы знать, является ли это единственным способом использования RDMA в MPI.

Моя текущая реализация включает семантику канала (отправка/получение) для связи, а также MPI_Reduce и MPI_Gatherv. Я знаю, что у MVAPICH2 есть параметры конфигурации, которые можно использовать для включения RDMA. Если программа, использующая MPI, имеет вызовы отправки/получения и RDMA включена, автоматически ли MPI преобразует семантику канала в семантику памяти (поместить/получить) или явное использование MPI_Put и MPI_Get является единственным методом реализации RDMA в MVAPICH2?

MPI_Send требует соответствующего MPI_Receive, независимо от того, являются ли они блокирующими или неблокирующими, поскольку отправка должна встречаться с получением. RDMA не имеет этого требования и вместо этого реализует только либо MPI_Put (запись в удаленную память), либо MPI_Get (чтение из удаленной памяти). Я пытаюсь выяснить, позволяет ли включение rdma при использовании отправки и получения MVAPICH2 каким-то образом автоматически преобразовывать отправку/получение в соответствующий вызов rdma.


person Tokth    schedule 10.03.2018    source источник
comment
Добро пожаловать, можете ли вы добавить пример?   -  person alfC    schedule 10.03.2018
comment
Там действительно нет такого примера. Либо MVAPICH2 будет использовать RDMA, либо нет для используемых конструкций, вот в чем вопрос.   -  person Tokth    schedule 12.03.2018
comment
Пример облегчает тестирование.   -  person alfC    schedule 12.03.2018
comment
Здесь нечего тестировать. Либо MVAPICH2 будет использовать RDMA вместо отправки/получения, когда RDMA включен, либо не будет, если явно не используется put/get.   -  person Tokth    schedule 13.03.2018
comment
Я не эксперт в MPI, но нет причин думать, что RDMA отличается от MPI_Send и MPI_Receive, что вполне может быть тем, как MPI_Put и MPI_Get реализованы и выполняются (в выделенном потоке) за кулисами. Возможно, Put/Get может использовать какое-то специальное оборудование в специальной системе, но не более того. Я не знаю mvapich, но в openmpi есть команда ompi_info --all, из которой можно извлечь много информации о том, как настроена система.   -  person alfC    schedule 13.03.2018
comment
Это был очень хороший вопрос, поскольку OpenSHMEM — единственное, что явно собирает операции с использованием RDMA. Спасибо, что спросили.   -  person hoodaticus    schedule 16.08.2018


Ответы (1)


Если MVAPICH2 был собран с правильными параметрами, он будет использовать RDMA для всех операций MPI, включая MPI_Send и MPI_Recv, на поддерживаемом оборудовании, включая InfiniBand. Таким образом, вам не нужно использовать MPI_Put/Get, чтобы воспользоваться преимуществами оборудования с поддержкой RDMA. На самом деле, использование MPI_Send/Recv может быть быстрее, потому что они часто лучше оптимизированы.

Библиотеки MPI используют различные конструкции для преобразования MPI_Send/Recv операций в семантику RDMA. Подробности можно найти в литературе .

person Sourav    schedule 24.03.2018