Hi Paddy, Thanks a lot for you kind helps!
Replacing mpirun by srun seems still not working. Here's how I did: >cat a.sh #!/bin/bash srun ./mpitest >sbatch -n 2 ./a.sh Submitted batch job 3611 >cat slurm-3611.out Hello world: rank 0 of 1 running on cdd001 Hello world: rank 0 of 1 running on cdd001 So, srun just executed the program twice, instead of running it as parallel. If I replace the srun back to mpirun, the good output is produced: >cat a.sh #!/bin/bash mpirun ./mpitest > sbatch a.sh Submitted batch job 3612 >cat slurm-3612.out Hello world: rank 0 of 2 running on cdd001 Hello world: rank 1 of 2 running on cdd001 I also tried using srun inside bash script for serial program: >cat a.sh #!/bin/bash srun echo Hello >sbatch -n 2 ./a.sh Submitted batch job 3614 >cat slurm-3614.out Hello Hello Any idea? Thanks in advance! Junjun On Mon, Jan 23, 2017 at 6:16 PM, Paddy Doyle <[email protected]> wrote: > > Hi Junjun, > > On Mon, Jan 23, 2017 at 12:04:17AM -0800, liu junjun wrote: > > > Hi all, > > > > I have small MPI test program just printing the rannk id of a parallel > job. > > The output is like this: > > >mpirun -n 2 ./mpitest > > Hello world: rank 0 of 2 running on cddlogin > > Hello world: rank 1 of 2 running on cddlogin > > > > I ran this test program with salloc. It produces similar output: > > >salloc -n 2 > > salloc: Granted job allocation 3605 > > >mpirun -n 2 ./mpitest > > Hello world: rank 0 of 2 running on cdd001 > > Hello world: rank 1 of 2 running on cdd001 > > > > I put this one line command into a bash script for running with sbatch. > It > > also get the same result as expected. However, it is totally different if > > it run with srun: > > >srun -n 2 mpirun -n 2 ./mpitest > > Hello world: rank 0 of 2 running on cdd001 > > Hello world: rank 1 of 2 running on cdd001 > > Hello world: rank 0 of 2 running on cdd001 > > Hello world: rank 1 of 2 running on cdd001 > > That looks like expected behaviour from calling both srun and mpirun; have > never > tried it, but it looks like what might happen if you call them both. > > But it's not recommended to run your code like that. > > I think basically don't call both srun and mpirun! In your sbatch either > put: > > #SBATCH -n 2 > .... > mpirun ./mpitest > > > ..or: > > > #SBATCH -n 2 > .... > srun ./mpitest > > > You don't need both. And it's simpler not to repeat the '-n 2' again in the > mpirun/srun line, as it will lead to copy/paste errors when you change it > in the > '#SBATCH' line but not below. > > > The test program was invoked twice ($SLURM_NTASKS) with each time asked 2 > > ($SLURM_NTASKS) CPU for mpi program!! > > Yes. > > > The problem of srun is actually not about mpi: > > >srun -n 2 echo "Hello" > > Hello > > Hello > > > > How can I resolve the problem of srun, and let it behaves like sbatch or > > salloc, where the program executed only one time? > > > > The version of slurm is 16.05.3, and > > Thanks, > Paddy > > -- > Paddy Doyle > Trinity Centre for High Performance Computing, > Lloyd Building, Trinity College Dublin, Dublin 2, Ireland. > Phone: +353-1-896-3725 > http://www.tchpc.tcd.ie/ >
