Как Open MPI реализует преобразование типов данных? - PullRequest
0 голосов
/ 22 февраля 2019

Стандарт MPI гласит, что когда параллельные программы выполняются в гетерогенной среде, они могут иметь разные представления для одного и того же типа данных (например, машины с прямым порядком байтов и младшими порядковыми номерами для промежуточных), поэтому может потребоваться преобразование представления типа данных при выполнении двухточечной связи.,Я не знаю, как Open MPI реализует это.

Например, текущий Open MPI по умолчанию использует библиотеку UCX, я изучил некоторые коды библиотеки UCX и модуля ucx Open MPI.Однако для непрерывного типа данных, такого как MPI_INT, я не обнаружил, чтобы преобразование представления происходило.Интересно, это потому, что я скучаю по этой части или реализация не удовлетворяет стандарту?

1 Ответ

0 голосов
/ 23 февраля 2019

Если вы хотите запустить приложение Open MPI в гетерогенном кластере, вам нужно configure --enable-heterogeneous (по умолчанию это отключено).Имейте в виду, что это должно работать, но это слегка проверено, в основном из-за отсутствия интереса / реальных случаев использования.FWIW, IBM Power теперь не имеет порядкового номера, и Fujitsu переходит от Sparc к ARM для HPC, поэтому практически все процессоры HPC (или скоро будут) с прямым порядком байтов.

Open MPI использует конвертеры (см. opal/datatype/opal_convertor.h) упаковать данные перед отправкой и распаковать после получения.Данные упакованы в их текущем порядке байтов.Преобразование данных (например, байт подкачки) выполняется получателем, если отправитель имеет другой порядковый номер.

Существует два способа использования UCX: pml/ucx и pml/ob1+btl/ucx, и я не проверял ни один из них вгетерогенная среда.Если у вас возникли проблемы с pml/ucx, попробуйте mpirun --mca pml ob1 ....

...