elem_memAlloc Program

Uses

  • program~~elem_memalloc~~UsesGraph program~elem_memalloc elem_memAlloc module~tem_debug_module tem_debug_module program~elem_memalloc->module~tem_debug_module module~tem_element_module tem_element_module program~elem_memalloc->module~tem_element_module module~tem_logging_module tem_logging_module program~elem_memalloc->module~tem_logging_module module~env_module env_module program~elem_memalloc->module~env_module module~tem_stencil_module tem_stencil_module program~elem_memalloc->module~tem_stencil_module module~tem_debug_module->module~tem_logging_module module~tem_debug_module->module~env_module module~aot_table_module aot_table_module module~tem_debug_module->module~aot_table_module module~flu_binding flu_binding module~tem_debug_module->module~flu_binding module~tem_tools_module tem_tools_module module~tem_debug_module->module~tem_tools_module module~tem_element_module->module~env_module module~tem_element_module->module~tem_stencil_module module~tem_dyn_array_module tem_dyn_array_module module~tem_element_module->module~tem_dyn_array_module module~tem_grow_array_module tem_grow_array_module module~tem_element_module->module~tem_grow_array_module module~tem_arrayofarrays_module tem_arrayofarrays_module module~tem_element_module->module~tem_arrayofarrays_module module~tem_logging_module->module~env_module module~tem_logging_module->module~aot_table_module module~aotus_module aotus_module module~tem_logging_module->module~aotus_module iso_fortran_env iso_fortran_env module~env_module->iso_fortran_env mpi mpi module~env_module->mpi module~env_module->module~flu_binding module~env_module->module~aotus_module module~tem_stencil_module->module~tem_logging_module module~tem_stencil_module->module~env_module module~tem_stencil_module->module~aot_table_module module~tem_comm_env_module tem_comm_env_module module~tem_stencil_module->module~tem_comm_env_module module~tem_geometry_module tem_geometry_module module~tem_stencil_module->module~tem_geometry_module module~tem_stencil_module->module~tem_dyn_array_module module~tem_comm_module tem_comm_module module~tem_stencil_module->module~tem_comm_module module~tem_stencil_module->module~tem_tools_module module~tem_stencil_module->module~tem_grow_array_module module~tem_param_module tem_param_module module~tem_stencil_module->module~tem_param_module module~tem_aux_module tem_aux_module module~tem_stencil_module->module~tem_aux_module module~tem_stencil_module->module~aotus_module module~tem_comm_env_module->mpi module~tem_geometry_module->module~tem_debug_module module~tem_geometry_module->module~tem_logging_module module~tem_geometry_module->module~env_module module~tem_geometry_module->mpi module~tem_geometry_module->module~tem_tools_module module~tem_geometry_module->module~tem_param_module module~tem_subtree_type_module tem_subTree_type_module module~tem_geometry_module->module~tem_subtree_type_module module~tem_float_module tem_float_module module~tem_geometry_module->module~tem_float_module module~treelmesh_module treelmesh_module module~tem_geometry_module->module~treelmesh_module module~tem_property_module tem_property_module module~tem_geometry_module->module~tem_property_module module~tem_topology_module tem_topology_module module~tem_geometry_module->module~tem_topology_module module~tem_dyn_array_module->module~env_module module~tem_comm_module->module~tem_logging_module module~tem_comm_module->module~env_module module~tem_comm_module->module~tem_dyn_array_module module~tem_comm_module->mpi module~tem_comm_module->module~flu_binding module~tem_comm_module->module~tem_grow_array_module module~tem_comm_module->module~tem_aux_module module~tem_comm_module->module~aotus_module iso_c_binding iso_c_binding module~tem_comm_module->iso_c_binding hvs_sizeof_module hvs_sizeof_module module~tem_comm_module->hvs_sizeof_module mem_for_mpi_module mem_for_mpi_module module~tem_comm_module->mem_for_mpi_module tem_sparse_comm_module tem_sparse_comm_module module~tem_comm_module->tem_sparse_comm_module module~tem_tools_module->module~env_module module~tem_grow_array_module->module~env_module module~tem_param_module->module~env_module module~tem_aux_module->module~tem_logging_module module~tem_aux_module->module~env_module module~tem_aux_module->module~aot_table_module module~tem_aux_module->module~tem_comm_env_module module~tem_aux_module->mpi module~tem_aux_module->module~flu_binding module~tem_aux_module->module~tem_tools_module module~tem_aux_module->module~aotus_module module~tem_lua_requires_module tem_lua_requires_module module~tem_aux_module->module~tem_lua_requires_module module~tem_revision_module tem_revision_module module~tem_aux_module->module~tem_revision_module module~tem_arrayofarrays_module->module~env_module module~tem_arrayofarrays_module->module~tem_dyn_array_module

Calls

program~~elem_memalloc~~CallsGraph program~elem_memalloc elem_memAlloc interface~tem_logging_init tem_logging_init program~elem_memalloc->interface~tem_logging_init append append program~elem_memalloc->append destroy destroy program~elem_memalloc->destroy proc~tem_reportstatus tem_reportStatus program~elem_memalloc->proc~tem_reportstatus init init program~elem_memalloc->init interface~getsize getSize program~elem_memalloc->interface~getsize interface~getreqsize getReqSize program~elem_memalloc->interface~getreqsize proc~tem_logging_init_logger tem_logging_init_logger interface~tem_logging_init->proc~tem_logging_init_logger proc~tem_logging_init_primary tem_logging_init_primary interface~tem_logging_init->proc~tem_logging_init_primary proc~my_status_string my_status_string proc~tem_reportstatus->proc~my_status_string interface~tem_logging_isactive tem_logging_isActive proc~tem_reportstatus->interface~tem_logging_isactive proc~getsize_element getSize_element interface~getsize->proc~getsize_element proc~getreqsize_element getReqSize_element interface~getreqsize->proc~getreqsize_element proc~tem_connect_tonull tem_connect_toNull proc~tem_logging_init_logger->proc~tem_connect_tonull proc~newunit newunit proc~tem_logging_init_logger->proc~newunit proc~my_status_string->proc~newunit proc~print_self_status print_self_status proc~my_status_string->proc~print_self_status proc~tem_logging_isactive_for tem_logging_isActive_for interface~tem_logging_isactive->proc~tem_logging_isactive_for proc~tem_logging_isactive_primary tem_logging_isActive_primary interface~tem_logging_isactive->proc~tem_logging_isactive_primary proc~tem_logging_init_primary->proc~tem_logging_init_logger proc~tem_connect_tonull->proc~newunit proc~print_self_status->proc~newunit

Contents

Source Code


Variables

Type AttributesNameInitial
type(tem_element_type) :: elem
type(tem_stencilElement_type) :: tStencil
type(tem_debug_type) :: debug
integer :: QQ
integer :: elemPos
integer :: iQQN
integer :: addedPos
integer :: nElems
integer :: iElem
integer :: iSize
integer :: iStencilSize
integer, allocatable:: elemSize(:)
integer, allocatable:: stencilSize(:)
logical :: error
logical :: wasAdded
character(len=64) :: buffer
integer(kind=long_k) :: nBytes
integer(kind=long_k) :: nReqBytes
integer :: nElems_fluid

Source Code

program elem_memAlloc

  ! include treelm modules
  use env_module,         only: long_k
  use tem_debug_module,   only: tem_reportStatus, tem_debug_type
  use tem_stencil_module, only: tem_stencilElement_type
  use tem_element_module, only: tem_element_type, getSize, getReqSize,init,    &
    &                           append, eT_fluid, destroy
  use tem_logging_module, only: tem_logging_init

  implicit none
  ! ----------------------------------------------------------------------------
  type(tem_element_type) :: elem
  type(tem_stencilElement_type) :: tStencil
  type(tem_debug_type) :: debug
  integer :: QQ, elemPos, iQQN, addedPos, nElems, iElem, iSize, iStencilSize
  integer, allocatable :: elemSize(:), stencilSize(:)
  logical :: error, wasAdded
  character(len=64) :: buffer
  integer(kind=long_k) :: nBytes, nReqBytes
  integer :: nElems_fluid
  ! ----------------------------------------------------------------------------
  nElems_fluid = 0
  error = .false.
  ! initialize the debug type
  call tem_logging_init( me    = debug%logger,                                 &
    &                    level = 10,                                           &
    &                    rank  = 0,                                            &
    &                    filename = 'tem_elem_memTrace.res' )

  ! Get initial memory demand
  call tem_reportStatus( debug = debug, level = 1, &
                         text = 'starting overhead', string = 'VmRSS')
  allocate(elemSize(1))
  elemSize = [ 100 ] !, 1000000, 16777216 ]
  allocate(stencilSize(1))
  stencilSize = [ 0 ]

  do iStencilSize = 1, size( stencilSize )
    QQ = stencilSize( iStencilSize )
    write(*,*) 'Starting the memory analysis for QQ = ', QQ

    call init( me = tStencil, QQN = QQ-1, headerPos = 1 )
    do iSize = 1, size(elemSize)
      nElems = elemSize( iSize )
      write(*,*) 'analyzing with nElems ', nElems
      call init( me = elem )
      write(buffer,'(a,i10,a,i3)') 'starting to add nElems ', nElems, ' QQ', QQ
      call tem_reportStatus( debug = debug, level = 1, &
                             text = buffer, string = 'VmRSS')
      call getSize( me = elem, elemSize = nBytes )
      call getReqSize( me = elem, elemSize = nReqBytes )
      !write(*,*) 'elemSize at beginning', nBytes, elem%tID%containerSize, nReqBytes

      ! Create a list of dummy elements
      do iElem = 1, nElems
        !write(*,*) 'element number ', iElem
        ! Append a dummy element
        call append( me = elem, &
          &          tID = int( iElem, kind=long_k),  &
          &          pntTID = iElem,                  &
          &          eType = eT_fluid,                &
          &          nNeighIDs = QQ-1,                &
          &          sourceProc = 1,                  &
          &          property = 0_long_k,             &
          &          pos = elemPos, wasAdded = wasAdded )
        ! Append stencil neighbors to the neighbor array of the element
        do iQQN = 1, QQ-1
          call append( me  = elem%neighID%val( elemPos ),         &
            &          val = int( iQQN, kind=long_k),             &
            &          pos = addedPos, wasAdded = wasAdded )
          tStencil%tIDpos( iQQN ) = addedPos
        end do
        if ( QQ > 0 ) then
          ! Append the temporary stencil to the element
          call append( me = elem%stencil%val( elemPos ),            &
            &          val = tStencil )
        end if
      end do

      write(buffer,'(a,i10,a,i3)') 'finished adding nElems ', nElems, ' QQ', QQ
      call tem_reportStatus( debug = debug, level = 1, &
                             text = buffer, string = 'VmRSS')
      call getSize( me = elem, elemSize = nBytes )
      call getReqSize( me = elem, elemSize = nReqBytes )
      write(*,*) 'elemSize after adding all elems', nBytes/nElems,  &
      nReqBytes/nElems  

      call destroy( me = elem )
      write(buffer,'(a,i10,a,i3)') 'after destruction'
      call tem_reportStatus( debug = debug, level = 1, &
                             text = buffer, string = 'VmRSS')
    end do
    call destroy( me = tStencil )
  end do

  close( debug%logger%funit(0) )
  if( error ) then
    write(*,*) 'FAILED'
    stop -1
  else
    write(*,*) 'PASSED'
    stop 0 
  end if

end program elem_memAlloc