openmp computation time is not improved proportionally to thread number

Viewed 79

I have a fortran program using openmp which is simplified as below:

program test
      use omp_lib
      use function_module
      use data_module
      implicit none
      real*8 :: theta,f
      
      call readdata()
      call func_subroutine(theta,f)
end program

subroutine func_subroutine(theta,f)
       use omp_lib
       use data_module
       implicit none
       integer :: i
       real*8 :: theta,f
       real*8 :: t1,t2,t_vec(20),tsum

       !$omp parallel do shared(data_variables,t_vec) private(i,t1,t2)
       do i=1,20
            ! read individual data
          
            ! count time
            t1=omp_get_wtime()
            call func(theta,f_ind)
            t2=omp_get_wtime()
            t_vec(i)=t2-t1
       end do
       !$end omp parallel do

       tsum=sum(t_vec)
end subroutine

In short, I calculate the function value for individual 1 (f_ind) for 20 times. And tsum only counts the time of calculating f_ind. With 5 threads, tsum=7.2s, and the program takes 33s (without considering the time spent on the subroutine readdata()). However, with 10 threads, tsum=9.5s, and the program takes 20s. And with 20 threads, tsum=12s, and the program takes 12s.

The computation time is not improved proportionally to thread number I am using. I am very confused. Is there something wrong?

0 Answers
Related