benchmark_transpose.f90 Source File


Source Code

program benchmark_transpose
  use m_parameters
  use m_calculate
  implicit none

  real*8, allocatable, dimension(:,:,:) :: aaa, bbb
  integer :: ierr, iter, num_iters
  real*8 :: t1, t2
  character(len=32) :: arg

  ! Read command-line arguments for grid sizes
  if (command_argument_count() >= 3) then
      call get_command_argument(1, arg)
      read(arg, *) nxp
      call get_command_argument(2, arg)
      read(arg, *) nyp
      call get_command_argument(3, arg)
      read(arg, *) nzp
  else
      ! Default matching test_calculate
      nxp = 512
      nyp = 256
      nzp = 256
  end if

  ! Read iteration count
  num_iters = 10
  if (command_argument_count() >= 4) then
      call get_command_argument(4, arg)
      read(arg, *) num_iters
  end if

  l_0 = 2.0
  hyp = l_0 * pi / REAL(nyp)
  hxp = hyp
  hzp = hyp

  allocate(aaa(nxp, nyp, nzp), stat=ierr)
  if (ierr /= 0) then
      print *, "Error allocating array aaa"
      stop 1
  end if

  allocate(bbb(nxp, nyp, nzp), stat=ierr)
  if (ierr /= 0) then
      print *, "Error allocating array bbb"
      stop 1
  end if

  ! Initialize dummy data
  call random_number(aaa)

  call m_calculate_init

  ! Warmup run
  call ddx(bbb, aaa)

  ! Benchmark runs
  call cpu_time(t1)
  do iter = 1, num_iters
      call ddx(bbb, aaa)
  end do
  call cpu_time(t2)

  ! Print execution time per call in seconds
  print '(F10.6)', (t2 - t1) / num_iters

  call m_calculate_finalize

  deallocate(aaa)
  deallocate(bbb)

end program benchmark_transpose