report_global_profiler Subroutine

public subroutine report_global_profiler(unusable, comm, rc)

Uses

  • proc~~report_global_profiler~~UsesGraph proc~report_global_profiler report_global_profiler module~mapl_errorhandlingmod mapl_ErrorHandlingMod proc~report_global_profiler->module~mapl_errorhandlingmod module~mapl_keywordenforcermod mapl_KeywordEnforcerMod proc~report_global_profiler->module~mapl_keywordenforcermod module~pflogger pflogger proc~report_global_profiler->module~pflogger mpi mpi proc~report_global_profiler->mpi module~mapl_errorhandling mapl_ErrorHandling module~mapl_errorhandlingmod->module~mapl_errorhandling module~mapl_keywordenforcer mapl_KeywordEnforcer module~mapl_keywordenforcermod->module~mapl_keywordenforcer module~pfl_keywordenforcermod PFL_KeywordEnforcerMod module~pflogger->module~pfl_keywordenforcermod module~pfl_logger PFL_Logger module~pflogger->module~pfl_logger module~pfl_loggermanager PFL_LoggerManager module~pflogger->module~pfl_loggermanager module~pfl_severitylevels PFL_SeverityLevels module~pflogger->module~pfl_severitylevels module~pfl_wraparray PFL_WrapArray module~pflogger->module~pfl_wraparray module~mapl_errorhandling->mpi module~mapl_throwmod MAPL_ThrowMod module~mapl_errorhandling->module~mapl_throwmod module~pfl_logger->module~pfl_keywordenforcermod module~pfl_logger->module~pfl_severitylevels gFTL_StringUnlimitedMap gFTL_StringUnlimitedMap module~pfl_logger->gFTL_StringUnlimitedMap module~pfl_loggermanager->module~pfl_logger

$ call inclusive%add_column(FormattedTextColumn(’ % ‘,’(f6.2)’, 6, PercentageColumn(InclusiveColumn()), separator=’-‘)) $ call exclusive%add_column(FormattedTextColumn(’ % ‘,’(f6.2)’, 6, PercentageColumn(ExclusiveColumn()), separator=’-‘))

Arguments

Type IntentOptional Attributes Name
class(KeywordEnforcer), intent(in), optional :: unusable
integer, intent(in), optional :: comm
integer, intent(out), optional :: rc

Calls

proc~~report_global_profiler~~CallsGraph proc~report_global_profiler report_global_profiler mpi_barrier mpi_barrier proc~report_global_profiler->mpi_barrier mpi_comm_rank mpi_comm_rank proc~report_global_profiler->mpi_comm_rank mpi_comm_size mpi_comm_size proc~report_global_profiler->mpi_comm_size none~add_column MultiColumn%add_column proc~report_global_profiler->none~add_column none~generate_report ProfileReporter%generate_report proc~report_global_profiler->none~generate_report none~get_num_meters~2 BaseProfiler%get_num_meters proc~report_global_profiler->none~get_num_meters~2 none~info~5 Logger%info proc~report_global_profiler->none~info~5 proc~get_global_memory_profiler get_global_memory_profiler proc~report_global_profiler->proc~get_global_memory_profiler proc~get_global_time_profiler get_global_time_profiler proc~report_global_profiler->proc~get_global_time_profiler proc~mapl_return MAPL_Return proc~report_global_profiler->proc~mapl_return proc~mapl_verify MAPL_Verify proc~report_global_profiler->proc~mapl_verify get_num_rows_header get_num_rows_header none~add_column->get_num_rows_header none~get_num_rows_separator TextColumn%get_num_rows_separator none~add_column->none~get_num_rows_separator none~get_width TextColumn%get_width none~add_column->none~get_width none~push_back~81 TextColumnVector%push_back none~add_column->none~push_back~81 none~set_width TextColumn%set_width none~add_column->none~set_width none~generate_report_profiler ProfileReporter%generate_report_profiler none~generate_report->none~generate_report_profiler none~get_num_nodes MeterNode%get_num_nodes none~get_num_meters~2->none~get_num_nodes at at proc~mapl_return->at insert insert proc~mapl_return->insert proc~mapl_throw_exception MAPL_throw_exception proc~mapl_return->proc~mapl_throw_exception proc~mapl_verify->proc~mapl_throw_exception none~generate_report_profiler->none~get_width none~get_header~2 MultiColumn%get_header none~generate_report_profiler->none~get_header~2 none~get_root_node~2 BaseProfiler%get_root_node none~generate_report_profiler->none~get_root_node~2 none~get_rows~2 MultiColumn%get_rows none~generate_report_profiler->none~get_rows~2 get_num_nodes get_num_nodes none~get_num_nodes->get_num_nodes none~begin~283 MeterNodeVector%begin none~get_num_nodes->none~begin~283 none~get~189 MeterNodeVectorIterator%get none~get_num_nodes->none~get~189 none~next~174 MeterNodeVectorIterator%next none~get_num_nodes->none~next~174 none~capacity~481 TextColumnVector%capacity none~push_back~81->none~capacity~481 none~resize~162 TextColumnVector%resize none~push_back~81->none~resize~162

Called by

proc~~report_global_profiler~~CalledByGraph proc~report_global_profiler report_global_profiler proc~finalize~8 ExtData_DriverGridComp%finalize proc~finalize~8->proc~report_global_profiler proc~run~18 ExtDataDriver%run proc~run~18->proc~finalize~8 program~extdata_driver ExtData_Driver program~extdata_driver->proc~run~18

Source Code

   subroutine report_global_profiler(unusable,comm,rc)
      use mapl_KeywordEnforcerMod
      use mapl_ErrorHandlingMod
      use mpi
      use pflogger, only: logging
      use pflogger, only: Logger

      class (KeywordEnforcer), optional, intent(in) :: unusable
      integer, optional, intent(in) :: comm
      integer, optional, intent(out) :: rc
      type (ProfileReporter) :: reporter
      integer :: i, world_comm
      character(:), allocatable :: report_lines(:)
      type (MultiColumn) :: inclusive
      type (MultiColumn) :: exclusive
      integer :: npes, my_rank, ierror
      character(1) :: empty(0)
      class (BaseProfiler), pointer :: t_p
      class (BaseProfiler), pointer :: m_p
      type(Logger), pointer :: lgr

      if (present(comm)) then
         world_comm = comm
      else
         world_comm=MPI_COMM_WORLD
      end if

      call MPI_Comm_size(world_comm, npes, ierror)
      _VERIFY(ierror)
      call MPI_Comm_Rank(world_comm, my_rank, ierror)
      _VERIFY(ierror)


      t_p => get_global_time_profiler()
      if (t_p%get_num_meters() > 0) then
         reporter = ProfileReporter(empty)
         call reporter%add_column(NameColumn(50, separator= " "))
         call reporter%add_column(FormattedTextColumn('#-cycles','(i8.0)', 8, NumCyclesColumn(),separator='-'))

         inclusive = MultiColumn(['Inclusive'], separator='=')
         call inclusive%add_column(FormattedTextColumn(' T (sec) ','(f9.3)', 9, InclusiveColumn(), separator='-'))
         call inclusive%add_column(FormattedTextColumn('   %  ','(f6.2)', 6, PercentageColumn(InclusiveColumn(),'MAX'),separator='-'))
         call reporter%add_column(inclusive)

         exclusive = MultiColumn(['Exclusive'], separator='=')
         call exclusive%add_column(FormattedTextColumn(' T (sec) ','(f9.3)', 9, ExclusiveColumn(), separator='-'))
         call exclusive%add_column(FormattedTextColumn('   %  ','(f6.2)', 6, PercentageColumn(ExclusiveColumn()), separator='-'))
         call reporter%add_column(exclusive)

         if (my_rank == 0) then
            report_lines = reporter%generate_report(t_p)
            lgr => logging%get_logger('MAPL.profiler')
            call lgr%info('Report on process: %i0', my_rank)
            do i = 1, size(report_lines)
               call lgr%info('%a', report_lines(i))
            end do
         end if
      end if

      m_p => get_global_memory_profiler()
      if (m_p%get_num_meters() > 0) then
         reporter = ProfileReporter(empty)
         call reporter%add_column(NameColumn(50, separator= " "))

         inclusive = MultiColumn(['Inclusive'], separator='=')
         call inclusive%add_column(MemoryTextColumn(['  MEM  '],'(i4,1x,a2)', 9, InclusiveColumn(), separator='-'))
!!$      call inclusive%add_column(FormattedTextColumn('   %  ','(f6.2)', 6, PercentageColumn(InclusiveColumn()), separator='-'))
         call reporter%add_column(inclusive)

         exclusive = MultiColumn(['Exclusive'], separator='=')
         call exclusive%add_column(MemoryTextColumn(['  MEM  '],'(i4,1x,a2)', 9, ExclusiveColumn(), separator='-'))
         call exclusive%add_column(FormattedTextColumn(' MEM (KB)','(-3p,f15.3, 0p)', 15, ExclusiveColumn(), separator='-'))
!!$      call exclusive%add_column(FormattedTextColumn('   %  ','(f6.2)', 6, PercentageColumn(ExclusiveColumn()), separator='-'))
         call reporter%add_column(exclusive)

         if (my_rank == 0) then
            report_lines = reporter%generate_report(m_p)
            lgr => logging%get_logger('MAPL.profiler')
            do i = 1, size(report_lines)
               call lgr%info('%a', report_lines(i))
            end do
         end if
      end if

      call MPI_Barrier(world_comm, ierror)
      _VERIFY(ierror)

      _RETURN(_SUCCESS)
      _UNUSED_DUMMY(unusable)
   end subroutine report_global_profiler