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