mpirun没有将标准输入传递给fortran

时间:2017-05-03 15:45:52

标签: fortran mpi stdin lsf

尝试在新集群上运行一些代码,但是我有一些问题通过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)

然后它工作正常。有什么建议吗?

0 个答案:

没有答案