В моем кластере используется 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.
MPI_Send
иMPI_Receive
, что вполне может быть тем, какMPI_Put
иMPI_Get
реализованы и выполняются (в выделенном потоке) за кулисами. Возможно, Put/Get может использовать какое-то специальное оборудование в специальной системе, но не более того. Я не знаю mvapich, но в openmpi есть командаompi_info --all
, из которой можно извлечь много информации о том, как настроена система. - person alfC   schedule 13.03.2018