尝试在新集群上运行一些代码,但是我有一些问题通过mpirun将一些数据传递给fortran代码。需要注意的是,这段代码已经在以前的集群上运行,但这个集群似乎有所不同。
集群通过BSUB / LSF运行作业提交,我尝试使用ifort和gfortran版本的mpif90编译fortran代码。
具体来说,我有一份工作需要知道它的名字。我通过作业提交脚本中的HEREDOC语句传递了这一点(在实际代码中注意,它是一个数组作业,每个人都需要传递其唯一标识符):
#!/bin/bash
#BSUB -q queuename
#BSUB -n 2
#BSUB -o jobname.job.o%J
#BSUB -J jobname.job
#BSUB -e jobname.job.e%J
#BSUB -W 1:00
cd /workingdirectory/
mpirun -lsf /workingdirectory/jobname.exe << EOD
jobname
EOD
然后fortran脚本通过以下方式读取标准输入:
include 'mpif.h'
integer num_procs,n_ranks,ierr
character name*7
call MPI_Init (ierr)
call MPI_Comm_rank (MPI_COMM_WORLD,n_ranks,ierr)
call MPI_Comm_size (MPI_COMM_WORLD,num_procs,ierr)
if (n_ranks == 0) then
read (*,'(a7)') name
write(*,2000) name
end if
2000 format(a7)
然而,标准输出中没有任何内容结束,代码无限期挂起(直到挂起时间耗尽)。
注意我还尝试将输入输入到文件中并通过BSUB中的-i标记传递:
#!/bin/bash
#BSUB -q queuename
#BSUB -n 2
#BSUB -i jobname.i
#BSUB -o jobname.job.o%J
#BSUB -J jobname.job
#BSUB -e jobname.job.e%J
#BSUB -W 1:00
cd /workingdirectory/
mpirun -lsf /workingdirectory/jobname.exe
其中jobname.i是:
jobname
仍然没有快乐。计算当然可以访问存储,就好像我将fortran代码更改为:
include 'mpif.h'
integer num_procs,n_ranks,ierr
character name*7
call MPI_Init (ierr)
call MPI_Comm_rank (MPI_COMM_WORLD,n_ranks,ierr)
call MPI_Comm_size (MPI_COMM_WORLD,num_procs,ierr)
if (n_ranks == 0) then
open (5,file='jobname.i',status='unknown')
read (5,'(a7)') name
write(*,2000) name
end if
2000 format(a7)
然后它工作正常。有什么建议吗?