Программа Fortran OpenMP не показывает ускорения CPU_TIME ()
Использование параллелизма должно привести к минимизации времени выполнения программы, но со мной этого не произошло. Когда я программировал свой код параллельно с использованием OpenMP, время выполнения увеличивается, то есть PARALLEL TIME> SERIAL TIME.
Мой код:
PROGRAM MAIN
use omp_lib
implicit none
REAL*8 Times1,Times2
INTEGER I,J
real, allocatable, dimension(:) :: a
allocate(a(1000))
DO J = 1, 1000
a(j)=j
ENDDO
! ***************NO PARALLEL CODE ************************************
call CPU_TIME(Times1)
write(*,*) 'CPU NO PARALLEL STARTED:',Times1
DO I = 1, 1000
DO J = 1, 500000
a(I)=a(I)+0.0001
end do
a(I)=a(I)+a(I)+a(I)
ENDDO
call CPU_TIME(Times2)
write(*,*) 'CPU CPU NO PARALLEL finished:',Times2
write(*,*) 'NO PARALLEL TIMES:',Times2-Times1
write(*,*) '---------------------------------------------------'
! ***************PARALLEL CODE ************************************
call CPU_TIME(Times1)
write(*,*) 'CPU PARALLEL STARTED:',Times1
!$OMP PARALLEL DEFAULT(shared), private(I,J)
!$OMP DO
DO I = 1, 1000
DO J = 1, 500000
a(I)=a(I)+0.0001
end do
a(I)=a(I)+a(I)+a(I)
ENDDO
!$OMP END DO
!$OMP END PARALLEL
call CPU_TIME(Times2)
write(*,*) 'CPU PARALLEL finished:',Times2
write(*,*) 'PARALLEL TIMES:',Times2-Times1
deallocate(a)
STOP
END
и результат:
CPU NO PARALLEL STARTED: 1.560010000000000E-002
CPU CPU NO PARALLEL finished: 4.86723120000000
NO PARALLEL TIMES: 4.85163110000000
CPU PARALLEL STARTED: 4.86723120000000
CPU PARALLEL finished: 9.89046340000000
PARALLEL TIMES: 5.02323220000000
Почему мое время, измеряемое CPU_TIME (), увеличивается с OpenMP?