首页 > 解决方案 > 线程越多,OpenMP 运行速度越慢

问题描述

似乎很多人对 OpenMP 有类似的问题,但我找不到解决问题的方法。

我正在使用一个简单的代码:


PROGRAM Parallel_Hello_World

USE OMP_LIB

integer :: i
real ::  start, finish, B
call cpu_time(start)
!$OMP PARALLEL
!$OMP DO
DO i = 1,2000000
B = cos(cos(cos(sin(cos(sqrt(sqrt(sqrt( cos( real(i) ) ))))))))
B = cos(cos(cos(sin(cos(sqrt(sqrt(sqrt( cos( B ) ))))))))
B = cos(cos(cos(sin(cos(sqrt(sqrt(sqrt( cos( B ) ))))))))
END DO
!$OMP END DO
!$OMP END PARALLEL

call cpu_time(finish)
  print '("Time  = ",f6.3," seconds.")',finish-start

END

我很困惑开销来自哪里。即使我增加了 sin/cos/sqrt 操作的数量,较低的线程总是获胜。

导出 OMP_NUM_THREADS=1 时间 = 1.58 秒。(平均)
导出 OMP_NUM_THREADS=8 时间 = 2.376 秒。(平均)
编译:ifort para.f90 -o para.exe -qopenmp -O2

英特尔编译器是从 2020 年开始的。

标签: fortranopenmp

解决方案


推荐阅读