Если мне нужно запустить много последовательных программ «параллельно» (потому что проблема проста, но трудоемка - мне нужно прочитать много разных наборов данных для одной и той же программы), решение простое , если я толькоиспользуйте один узел .Все, что я делаю, это продолжаю отправлять последовательные задания с амперсандом после каждой команды, например, в скрипте задания:
./program1 &
./program2 &
./program3 &
./program4
, который, естественно, запускает каждую последовательную программу на другом процессоре.Это хорошо работает на сервере регистрации или автономной рабочей станции, и, конечно, для пакетного задания, запрашивающего только один узел.
Но что если мне нужно запустить 110 разных экземпляров одной и той же программы, чтобы прочитать 110 разных наборов данных?Если я отправлю несколько узлов (скажем, 14) со сценарием, который отправляет команды 110 ./program#, запустит ли пакетная система каждое задание на другом процессоре на разных узлах или попробует запустить их все на одном и том же,8-ядерный узел?
Я пытался использовать простой MPI-код для чтения разных данных, но в результате возникали различные ошибки: около 100 из 110 процессов выполнялись успешно, а остальные зависали.Я также рассмотрел массивы заданий, но я не уверен, поддерживает ли моя система.
Я тщательно протестировал последовательную программу на отдельных наборах данных - ошибок времени выполнения нет, и я не превышаю доступныепамять на каждом узле.