我通常使用类似以下内容来提交数组作业,
#!/bin/bash
sbatch <<EOT
#!/bin/sh
#SBATCH --job-name=$1
#SBATCH --time=$2
#SBATCH --mem-per-cpu=$3
#SBATCH --array 0-$4
./myprogram.o ${SLURM_ARRAY_TASK_ID} <-- SLURM_ARRAY_TASK_ID not visible.. (A)
./script_that_runs_myprogram.sh <-- SLURM_ARRAY_TASK_ID visible inside script (B)
EOT
在情况(B)中,script_that_runs_myprogram.sh
可以看到定义任务ID的环境变量。在情况(A)中是否可以以某种方式访问数组索引?似乎没有必要使用另一个脚本来运行该程序。另一种情况是SBATCH
手动定义参数非常繁琐。
${SLURM_ARRAY_TASK_ID} 应该在选项 A 中可见。问题是 bash 过早评估该变量。 Bash 在您发送该脚本时解释该变量。此时,该变量仍为空。尝试逃避它:
#!/bin/bash
sbatch <<EOT
#!/bin/sh
#SBATCH --job-name=$1
#SBATCH --time=$2
#SBATCH --mem-per-cpu=$3
#SBATCH --array 0-$4
./myprogram.o \${SLURM_ARRAY_TASK_ID}
EOT
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)