主题:使用OPENMP并行后效率没有提高
最近想学OPENMP,编了下面一段代码试试,结果并行和串行用的时间是一样的。
在do循环中调用两次子程序A,在串行下每次子程序的运行时间是13.5s,总时间是27秒。
并行下每次子程序的运行时间也变成了27秒,总时间27秒。
求高手解答
PROGRAM HELLO
CALL CPU_TIME(T_START)
!$OMP PARALLEL DO PRIVATE(I,J,C)
DO I = 1, 2
CALL A(I,J,C)
END DO
!$OMP END PARALLEL DO
CALL CPU_TIME(T_END)
WRITE(*,*) 'TIME IN MAIN IS ',T_END - T_START
WRITE(*,*) 'C = ',C
END
SUBROUTINE A(I,J,C)
CALL CPU_TIME(T_START)
DO J = 1, 1000000000
C =real(J) ** 0.3
ENDDO
CALL CPU_TIME(T_END)
WRITE(*,*) 'TIME IN',I,'IS', T_END - T_START
RETURN
END
在do循环中调用两次子程序A,在串行下每次子程序的运行时间是13.5s,总时间是27秒。
并行下每次子程序的运行时间也变成了27秒,总时间27秒。
求高手解答
PROGRAM HELLO
CALL CPU_TIME(T_START)
!$OMP PARALLEL DO PRIVATE(I,J,C)
DO I = 1, 2
CALL A(I,J,C)
END DO
!$OMP END PARALLEL DO
CALL CPU_TIME(T_END)
WRITE(*,*) 'TIME IN MAIN IS ',T_END - T_START
WRITE(*,*) 'C = ',C
END
SUBROUTINE A(I,J,C)
CALL CPU_TIME(T_START)
DO J = 1, 1000000000
C =real(J) ** 0.3
ENDDO
CALL CPU_TIME(T_END)
WRITE(*,*) 'TIME IN',I,'IS', T_END - T_START
RETURN
END