我有这个 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
Thank
我刚刚遇到了同样的问题。
看来使用cpu_time()不适合衡量多线程代码的性能。 cpu_time() 将添加所有线程的总时间,该总时间可能会随着线程数量的增加而增加。
我在另一个论坛找到了这个http://software.intel.com/en-us/forums/topic/281897 http://software.intel.com/en-us/forums/topic/281897
您应该使用 system_clock() 或 omp_get_wtime() 函数来获得更准确的例程计时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)