大家好。
我想对三层嵌套循环,做并行处理。就是每层循环都用一次MPI并行。但运行程序总是报错,说程序在规定时间内,没有完成,被自动停止了。我限定程序运行1小时,我觉得应该是可以运行完成,因为我也写了串行版本的程序,不到10分钟就完成了。
我猜可能是我的程序出现了死锁的情况,导致程序卡某个地方,一直不往下运行。最后到了1小时的运行实现,被停止了。但我反复查看,也没找到程序中哪里出了问题。
我把我的程序(并行和串行版本)放在附件里了。下面是并行版本程序的编译文件,投掷任务文件和报错文件内容。
编译文件
[Fortran] 纯文本查看 复制代码 #!/bin/bash
module switch PrgEnv-cray PrgEnv-intel
#==========================================================#
ftn -fp-model strict -no-wrap-margin -traceback example_parallel.f90 -o example_parallel
投掷任务文件
[Fortran] 纯文本查看 复制代码 #!/bin/bash
#SBATCH --partition=workq
#SBATCH --job-name="code"
#SBATCH --nodes=8
#SBATCH --time=1:00:00
#SBATCH --exclusive
#SBATCH --err=std.err
#SBATCH --output=std.out
#----------------------------------------------------------#
module switch PrgEnv-cray PrgEnv-intel
export OMP_NUM_THREADS=1
#----------------------------------------------------------#
echo "The job "${SLURM_JOB_ID}" is running on "${SLURM_JOB_NODELIST}
#----------------------------------------------------------#
srun --ntasks=64 --cpus-per-task=${OMP_NUM_THREADS} --hint=nomultithread ./example_parallel
报错文件
[Fortran] 纯文本查看 复制代码 slurmstepd: error: *** STEP 20294161.0 ON nid00191 CANCELLED AT 2021-05-17T02:02:24 DUE TO TIME LIMIT ***
slurmstepd: error: *** JOB 20294161 ON nid00191 CANCELLED AT 2021-05-17T02:02:24 DUE TO TIME LIMIT ***
srun: got SIGCONT
srun: forcing job termination
srun: Job step aborted: Waiting up to 302 seconds for job step to finish.
能否麻烦大家帮我查看下,我的程序哪里出了问题吗?
多谢大家啦。
|