1

我有一个代码,已成功安装在几个使用 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,文件标准输入”错误。

另外,如果我在登录服务器的命令行上运行类似的命令(通过该服务器提交作业):

#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

我意识到这可能是一个完全过于具体的问题,但任何建议都将不胜感激。

大卫。

4

1 回答 1

2

尝试添加一行,例如

#SBATCH -i filename

到您的作业提交脚本,替换为您提交脚本时将扩展filename的任何神秘宏(或其他)。$3或者,你可以把它放在你的srun命令中,比如

srun_ps $1/$2.exe EOD

但我承认在你的脚本中调用什么时有些混淆。

于 2013-01-10T12:53:36.727 回答