Макросы командной строки в комментариях с использованием SLURM

На мой взгляд, комментарии – это комментарии. Они НИКОГДА не изменят состояние программы. К сожалению, люди в SLURM не согласны.

SLURM требует, чтобы следующий синтаксис (или нечто подобное) существовал в начале файла .sh:

#!/bin/bash #SBATCH --time=5:00:00 #SBATCH --ntasks=8 #SBATCH --mem-per-cpu=1024M MyProgram.exe 

Вышеуказанное отправит запрос на запуск программы MyProgram.exe с использованием 8 процессоров на суперкомпьютере моей школы. В настоящее время я сравниваю свой код и хочу использовать аргумент командной строки для изменения количества процессоров. В самом деле, я хочу сделать следующее

 #!/bin/bash #SBATCH --time=5:00:00 #SBATCH --ntasks=%1 #SBATCH --mem-per-cpu=1024M MyProgram.exe 

где %1 будет аргументом командной строки. Я бы назвал его sbatch myShScript.sh 123 который использовал бы 123 процессора. Это, конечно, не работает, потому что bash интерпретирует #SBATCH --ntasks=%1 как комментарий (который она есть) и никогда не присоединяется к аргументу командной строки.

Есть ли способ обмануть SLURM или BASH в subbing в аргументе командной строки?

Вся обработка, выполняемая SLURM (по sbatch , конкретно), выполняется до того, как вызывается bash, поэтому bash вам не поможет. Скрипт может быть на любом языке, это не имело бы значения: #SBATCH – это только совпадение комментариев bash, важно то, что они являются директивами sbatch .

Параметры могут быть указаны в файле, чтобы обеспечить удобный способ всегда использовать одни и те же параметры для конкретного скрипта. Если вы хотите использовать разные параметры, передайте их в командной строке sbatch . Вы можете написать сценарий оболочки, который запускает sbatch если вы хотите создать параметры из определенных конкретных параметров. Вы можете передать сценарий задания в качестве стандартного ввода (удобный документ здесь ), а не сохранять его в отдельном файле, если хотите.

 #!/bin/sh sbatch --time=5:00:00 --ntasks="$1" --mem-per-cpu=1024M <<'EOF' #!/bin/sh MyProgram.exe EOF