У меня есть ужасно параллельный (bash) скрипт, работающий в вычислительном кластере. Этот сценарий является сценарием оболочки и не связан с какой-либо библиотекой MPI: это означает, что единственный способ отправить ему рейтинг MPI - это параметр командной строки.

До сих пор я выполнял его только на одном узле, и решение было простым:

 #!/bin/bash
 #SBATCH --nodes=1
 N=16
 seq $N | xargs -P $N -I% my_script.bash % $N

Как я могу масштабировать его с помощью двух узлов? Если я просто использую '--nodes = 2' и N=32, тогда xargs попытается создать все потоки на одном и том же узле. С другой стороны, я не могу использовать только mpiexec: потому что скрипт не связан с библиотекой MPI, и я не знаю, как сообщить скрипту, какие это потоки.

2
Antonio Ragagnin 7 Июл 2016 в 18:43
1
ДОЛЖНО ли решение использовать MPI? Это очень просто сделать с помощью GNU Parallel: seq $ N | parallel -S server1, server2 ,: my_script.bash {} $ N
 – 
Ole Tange
8 Июл 2016 в 15:59

1 ответ

Лучший ответ

Для этого вы можете использовать srun в своем сценарии отправки:

seq $N | xargs -P $N -I% srun --exclusive -N1 my_script.bash % $N

Это будет использовать srun для запуска вашего сценария bash и распространения его по выделенным процессорам.

1
damienfrancois 13 Июл 2016 в 00:31
Мне нравится идея этого ответа, но я бы хотел, чтобы он сопровождался простым тестовым сценарием, чтобы продемонстрировать, что он ведет себя так, как ожидалось.
 – 
Richard
2 Май 2018 в 06:16