Я нашел несколько очень похожих вопросов, которые помогли мне прийти к сценарию, который, кажется, работает, однако я все еще не уверен, полностью ли я понимаю, почему, поэтому этот вопрос ...
Моя проблема (пример): на 3 узлах я хочу запустить 12 задач на каждом узле (всего 36 задач). Также каждая задача использует OpenMP и должна использовать 2 процессора. В моем случае узел имеет 24 процессора и 64 ГБ памяти. Мой сценарий был бы таким:
#SBATCH --nodes=3
#SBATCH --ntasks=36
#SBATCH --cpus-per-task=2
#SBATCH --mem-per-cpu=2000
export OMP_NUM_THREADS=2
for i in {1..36}; do
srun -N 1 -n 1 ./program input${i} >& out${i} &
done
wait
Кажется, это работает так, как мне нужно, последовательно выполняя задачи на узле до тех пор, пока все ЦП на этом узле не будут использоваться, а затем продолжая выполнять дальнейшие задачи на следующем узле, пока все ЦП снова не будут использоваться, и т. Д.
Мой вопрос .. Я не уверен, что это действительно то, что он делает (?), Поскольку я не полностью понял страницу руководства srun относительно -n, и я не использовал srun раньше. В основном моя путаница возникает из-за "-n": на странице руководства для -n сказано: "По умолчанию одна задача на узел, ..", поэтому я ожидал, что если я использую "srun -n 1", то будет только одна задача. запускать на каждом узле, что, похоже, не так. Кроме того, когда я попробовал, например, "srun -n 2 ./program" кажется, что одна и та же программа запускается дважды, как две разные задачи, без возможности использовать разные входные файлы ... что я не могу понять, почему это когда-либо будет полезно?