我有一个代码,我已成功安装在几个使用PBS排队系统的计算集群上,但是我使用SLURM排队系统将其安装到集群上遇到了很大的障碍。大部分代码运行正常,但代码需要提供其文件名(随每次计算而变化),并且它希望将其作为标准输入接收:
character*8 name
read (5,'(a8)') name
我通过以下方式向群集提供此标准输入:
srun_ps $1/$2.exe << EOD
$2
EOD
其中$ 1是可执行文件的路径,$ 2是文件名,srun_ps似乎是集群构建的mpi-exec脚本。注意,这段代码在我用于PBS排队系统的集群上运行良好。
然而,我在这里得到的是“读取期间的文件结束,单元5,文件stdin”错误。
此外,如果我在登录服务器的命令行上运行类似的命令(通过提交作业的地方):
#helloworld.for
charachter*5 name
read(5,A5) name
write(6,A5) name
命令行:
ifort -o helloworld.exe helloworld.for
./helloworld.exe << EOD
hello
EOD
提供“hello”的正确输出。如果我向集群提交相同的作业,我再次收到“文件结束”错误。
完整的职位提交脚本是:
#!/bin/bash
#SBATCH -o /home/Simulation/file.job.o
#SBATCH -D /home/Simulation/
#SBATCH -J file.job
#SBATCH --clusters=mpp1
#SBATCH --get-user-env
#SBATCH --ntasks=12
#SBATCH --time=1:00:00
source /etc/profile.d/modules.sh
/home/script/runjob /home/Simulation/ file
和runjob脚本的相关部分是(脚本的其余部分正在复制相关的输入文件,并在计算完成后清理文件):
#!/bin/sh
time srun_ps $1/$2.exe << EOD
$2
EOD
我意识到这可能是一个非常具体的问题,但任何建议都会受到赞赏。
大卫。
答案 0 :(得分:2)
尝试添加
等行#SBATCH -i filename
到您的作业提交脚本,在提交脚本时,将通过任何神秘的宏(filename
或其他)替换$3
。或者,您可以将其放在srun
命令中,例如
srun_ps $1/$2.exe EOD
但是我承认在你的脚本中被调用的内容有些混乱。