У меня есть параллельный код, использующий MPI. Правильный способ использования этого кода — скомпилировать из исходного кода на ПК/кластере, а затем запустить как:
mpiexec -n X ./application -options
К сожалению, некоторые люди, использующие этот код, испытывают проблемы с *nix и находят сборку из исходного кода немного сложной (не спрашивайте, почему). Эти пользователи используют код только на своих настольных/ноутбуках.
Для таких пользователей я просто компилирую статический двоичный файл (на достаточно старой ОС с достаточно старой glibc, чтобы она работала на большинстве ПК под управлением Linux). Затем пользователь может запустить код следующим образом:
./application -options
Итак, теперь мой вопрос заключается в том, как я могу отправить mpiexec/mpirun вместе со своим статическим двоичным файлом, чтобы пользователь мог сделать что-то вроде:
./mpiexec -n 2 ./application -options
Таким образом, они также могут использовать преимущества нескольких ядер на своих настольных компьютерах. До сих пор я говорил им, чтобы они поступали правильно, т. е. устанавливали MPI и компилировали мой код из исходников.
Проведя некоторое тестирование, я обнаружил, что если я скомпилирую Hydra и отправлю mpiexec.hydra
вместе с hydra_pmi_proxy
, то смогу запустить код следующим образом:
./mpiexec.hydra -n 2 ./application -options
Но я не уверен, что это правильный подход? Это вызовет какие-либо проблемы? Я думаю сделать то же самое для двоичного файла Windoze (работающего в Cygwin).
Другой вариант — это образ VBox со всем предварительно созданным, но тогда загрузка большого файла становится проблемой.