为运行SLURM的集群上运行的fortran代码提供标准输入

时间:2013-01-10 12:39:58

标签: bash fortran cluster-computing

我有一个代码,我已成功安装在几个使用PB​​S排队系统的计算集群上,但是我使用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

我意识到这可能是一个非常具体的问题,但任何建议都会受到赞赏。

大卫。

1 个答案:

答案 0 :(得分:2)

尝试添加

等行
#SBATCH -i filename

到您的作业提交脚本,在提交脚本时,将通过任何神秘的宏(filename或其他)替换$3。或者,您可以将其放在srun命令中,例如

srun_ps $1/$2.exe EOD

但是我承认在你的脚本中被调用的内容有些混乱。