Я не хочу заводить родителей
процесс с mpirun, так что я просто
ищу способ динамически порождать
процессы на удаленных узлах. Это
возможно
Я не уверен, почему ты не хочешь запустить его с mpirun? В любом случае вы неявно запускаете весь механизм MPI, как только вы нажимаете MPI_Init (), таким образом, вы просто передаете его параметры, а не полагаетесь на значение по умолчанию.
Проблема здесь в том, что при запуске библиотеки MPI (в MPI_Init ()) она не видит других доступных хостов, потому что вы не предоставили ее с опциями --host или --hostfile для mpirun. Он не просто запустит процессы в другом месте на вашем скажем (на самом деле, spawn не требует Info-хоста, поэтому в общем случае он даже не знает, куда идти в противном случае), поэтому он завершается неудачей.
Так что вам нужно сделать
mpirun --host myhost,host2 -np 1 ./parentjob
или, в более общем случае, укажите хост-файл, предпочтительно с количеством доступных слотов
myhost slots=1
host2 slots=8
host3 slots=8
и запускать задания таким образом, mpirun --hostfile mpihosts.txt -np 1 ./parentjob
Это функция, а не ошибка; теперь задача MPI - выяснить, куда направляются работники, и если вы не укажете хост в явном виде в информации, он попытается поместить его в наиболее неиспользуемое место. Это также означает, что вам не нужно перекомпилировать, чтобы сменить хосты, на которых вы будете появляться.