混合MPI / OpenMP性能下降

时间:2015-05-29 14:11:28

标签: multithreading fortran mpi openmp gfortran

我正在尝试在MPI中添加OpenMP实现 并行化(商业)Fortran代码。 MPI效果很好但是 仍然有一些代码部分(做循环) 这可以进一步优化,我认为它可以 用OpenMP完成。我尝试了一个循环:

 sca = ABS(D(1))
 do k = 2, l
    sca = sca + ABS(D(k))
 end do

使用OpenMP指令:

sca=ABS(D(1))
  omp parallel do reduction(+:sca_aux)   !OM  
        do k = 2, l                 
           sca_aux = sca_aux + ABS(D(k))                                                                                                                            
        end do                      
  omp end parallel do
sca=sca + sca_aux

我用OpenMPI和开关-fopenmp编译了程序。 整个程序应该计算分子的能量。 有两个问题我无法令人满意地解释 输出。首先,相对于能量值被修改 纯MPI实现(只需更改该循环)。第二, 程序的性能随着线程数的减少而减少 增加。 time命令的输出为

(MPI only)
real    1m8.950s
user    8m46.176s
sys     0m15.188s

one thread
real    1m34.113s
user    12m1.112s
sys     0m21.374s

two threads
real    1m59.998s
user    15m37.755s
sys     0m26.892s

该循环由所有处理器评估,目前我正在使用 8(mpirun -np 8 ./exec)。如果我增加,情况最糟糕 线程数。我用来编译的其他开关 计划是:

 -Impi -DGNU   -I.  -fopenmp -fpreprocessed -c -O2 -ffree-form

线程是否可以同时使用节点 因此性能下降了?例如,如果我使用两个 一个CPU中的线程可能导致性能下降 因为两个任务正在尝试同时执行?

0 个答案:

没有答案