You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenMPI指定1或2个进程时OpenMP多线程无法正常工作

OpenMPI+OpenMP混合并行:少量MPI进程时OpenMP线程无法满负载的问题与解决

问题描述

开发的基于OpenMPI+OpenMP的混合并行代码,当分配的MPI进程数超过2个时运行符合预期;但仅分配1个或2个MPI进程时,OpenMP多线程无法正常工作,CPU占用率停滞在200%(仅使用2个线程)。代码中已通过omp_set_num_threads(5)设置每个MPI进程使用5个线程,预期通过top命令看到每个进程占用500%CPU。

运行环境

  • Ubuntu 20.04.4 LTS
  • gfortran 13.2.0
  • OpenMPI 4.1.5

复现代码

program parallel_example
    
    use OMP_LIB

    implicit none

    include 'mpif.h'
    
    integer :: i, j, k, n, ierror, size_Of_Cluster, process_Rank
    real    :: sum, x

    call MPI_INIT(ierror)
    call MPI_COMM_SIZE(MPI_COMM_WORLD, size_Of_Cluster, ierror)
    call MPI_COMM_RANK(MPI_COMM_WORLD, process_Rank, ierror)

    call omp_set_dynamic(.False.)
    call omp_set_num_threads(5) 
 
   !$OMP PARALLEL
       print *, 'hello from thread:', OMP_GET_THREAD_NUM(), &
   &  'of proc=', process_Rank
   !$OMP END PARALLEL

   ! Set the number of iterations
   n = 100000
  
   ! Initialize the sum
   sum = 0.0

   !$omp parallel do collapse(3) default(none) private(i, j, k, x) shared(sum, n)
   do i = 1, n
     do j = 1, n
       do k = 1, n
       !print *, 'hello from thread:', OMP_GET_THREAD_NUM(), i, j, k
         x = 1.0 / (real(i) + real(j) + real(k))
         !$omp atomic
         sum = sum + x
       enddo
     enddo
   end do
   !$omp end parallel do
  
   print *, "The sum is: ", sum

   call MPI_Finalize(ierror)

end program parallel_example

编译与运行命令

# 编译命令
mpif90 -fopenmp test.F90 -o app.exe

# 运行命令(出现问题的场景)
mpirun -np 1 ./app.exe

问题现象

  • 执行mpirun -np 1 ./app.exe或mpirun -np 2 ./app.exe时,目标进程CPU占用率仅维持在200%,未达到预期的500%
  • 当MPI进程数设置为3及以上(如mpirun -np 3 ./app.exe)时,每个MPI进程的CPU占用率能达到500%,符合代码设置的线程数预期

解决方案

在mpirun命令中添加进程映射参数--map-by node:pe=N(其中N为每个MPI进程需要使用的OpenMP线程数,此处对应代码中的5),修改后的运行命令如下:

mpirun -np 1 --map-by node:pe=5 ./app.exe

添加该参数后,即使仅使用1个或2个MPI进程,也能正常启用指定数量的OpenMP线程,达到预期的CPU负载。

内容的提问来源于stack exchange,提问作者user23897302

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:07:44