我在 Fortran 中有这个顺序代码。我的问题是,当我放置 Openmp 指令时,并行代码比顺序代码慢,而且我看不到错误。
REAL, DIMENSION(:), ALLOCATABLE :: current, next
ALLOCATE ( current(TOTAL_Z), next(TOTAL_Z))
CALL CPU_TIME(t1)
!$OMP PARALLEL SHARED (current, next) PRIVATE (z)
DO t = 1, TOTAL_TIME
!$OMP DO SCHEDULE(STATIC, 2)
DO z = 2, (TOTAL_Z - 1)
next(z) = current (z) + KAPPA*DELTA_T*((current(z - 1) - 2.0*current(z) + current(z + 1)) / DELTA_Z**2)
END DO
!$OMP END DO
current = next
END DO
CALL CPU_TIME(t2)
!$OMP END PARALLEL
TOTAL_Z、TOTAL_TIME、KAPPA、DELTA_T、DELTA_Z 是常数。
当我运行并行代码时,我在 htop 中看到并且我的 2 个内核以 100% 的速度工作
在顺序代码中,CPU_TIME 是 79 seg,并行是 132 seg
谢谢