我尝试使用OpenMP在Fortran90中并行化一个大程序.
我总是得到分段错误错误.我想知道是否有任何简单的方法来解决它们.如果您有分段错误错误,该怎么办?
我正在将一个由OpenMP并行化的程序移动到Cluster.群集使用Lava 1.0作为调度程序,每个节点有8个核心.我在作业脚本中使用MPI包装器来执行多主机并行.
这是工作脚本:
#BSUB -q queue_name
#BSUB -x
#BSUB -R "span[ptile=1]"
#BSUB -n 1
#BSUB -J n1p1o8
##BSUB -o outfile.email
#BSUB -e err
export OMP_NUM_THREADS=8
date
/home/apps/bin/lava.openmpi.wrapper -bynode -x OMP_NUM_THREADS \
~/my_program ~/input.dat ~/output.out
date
Run Code Online (Sandbox Code Playgroud)
我在ONE主机上做了一些实验.但是,我不知道如何解释一些结果.
1.
-nOMP_NUM_THREADStime
1 4 21:12
2 4 20:12
这是否意味着MPI在这里不做任何并行?我认为在第二种情况下,每个MPI进程都有4个OMP线程,所以它应该使用800%的CPU使用率,这应该比第一个快.
另一个结果证明了这一点
-nOMP_NUM_THREADStime
2 2 31:42
4 2 30:47
他们也有非常接近的运行时间.
2.
在这种情况下,如果我想通过简单的方法以合理的优化速度在这个集群中并行该程序,在每个主机中放置1个MPI进程(告诉LFG我使用一个核心)是合理的,设置OMP_NUM_THREADS = 8,然后专门运行它?因此,MPI仅适用于跨节点作业,而OpenMP适用于内部节点作业.(-n =主机数; ptile = 1; OMP_NUM_THREADS =每个主机中的最大内核数)
更新: 该程序由gfortran -fopenmp编译,没有mpicc.MPI仅用于分发可执行文件.
更新3月3日: 程序内存使用情况监视器
本地环境:Mac 10.8/2.9 Ghz i7/8GB内存
没有OpenMP
这种并行工作正常.
!$OMP PARALLEL Private(irep)
!$OMP DO
do irep = 1, nrep
print *, "Using thread: ", omp_get_thread_num(), "irep: ", irep
end do
!$OMP END DO NOWAIT
!$OMP END PARALLEL
Run Code Online (Sandbox Code Playgroud)
这也很好.
!$OMP PARALLEL
!$OMP DO
do irep = 1, nrep
print *, "Using thread: ", omp_get_thread_num(), "irep: ", irep
end do
!$OMP END DO NOWAIT
!$OMP END PARALLEL
Run Code Online (Sandbox Code Playgroud)
当我使用Default子句时,为什么它什么都不返回?
!$OMP PARALLEL DEFAULT(Private)
!$OMP DO
do irep = 1, nrep
print *, "Using thread: ", omp_get_thread_num(), "irep: ", irep
end do
!$OMP …
Run Code Online (Sandbox Code Playgroud)