我使用makefile来运行管道,核心数量在makefile中设置为环境变量。
在管道中的某一点,makefile将执行一个包装脚本,它将启动一个LSF作业数组(HPC)。
#!/bin/bash
#BSUB -J hybrid_job_name # job name
#BSUB -n 32 # number of cores in job
#BSUB -o output.%J.hybrid # output file name
mpirun.lsf ./program_name.exe
这里唯一的问题是在包装器脚本中,-n标志应由' CORES'设置。环境变量,并没有硬编码为32.无论如何要解决这个问题,我可以将CORES环境变量传递给-n标志。
答案 0 :(得分:1)
您可以生成包含" #BSUB"的包装器脚本。在将其提交给LSF之前,指令即时。例如。事先创建job_script.tmpl
等模板:
#!/bin/bash
#BSUB -J hybrid_job_name # job name
#BSUB -n %CORES% # number of cores in job
#BSUB -o output.%J.hybrid # output file name
mpirun.lsf ./program_name.exe
然后在你的makefile中执行:
sed s/%CORES%/${CORES}/g job_script.tmpl > job_script.lsf
bsub < job_script.lsf
或者,您可以在命令行上将选项设置为bsub
,也可以在作业脚本中通过#BSUB
指令设置选项。所以在makefile中执行:
bsub -n $CORES < job_script.lsf
在命令行上传递给bsub
的值将覆盖作业脚本中#BSUB -n
指令定义的值。这种方式稍微简单一些,但第一种方法可以记录作业中使用的核心数量,以备将来参考。