Teuchos - Trilinos Tools Package  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Teuchos_TimeMonitor.hpp
Go to the documentation of this file.
1 // @HEADER
2 // *****************************************************************************
3 // Teuchos: Common Tools Package
4 //
5 // Copyright 2004 NTESS and the Teuchos contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 
10 #ifndef TEUCHOS_TIMEMONITOR_HPP
11 #define TEUCHOS_TIMEMONITOR_HPP
12 
13 
38 #include "Teuchos_Comm.hpp"
39 #include "Teuchos_Time.hpp"
40 
42 
47 #define TEUCHOS_TIMER(funcName, strName) \
48  static Teuchos::Time& funcName() \
49  {static Teuchos::RCP<Time> rtn = \
50  Teuchos::TimeMonitor::getNewCounter(strName); return *rtn;}
51 
52 
61 #define TEUCHOS_FUNC_TIME_MONITOR_DIFF( FUNCNAME, DIFF ) \
62  static Teuchos::RCP<Teuchos::Time> DIFF ## blabla_localTimer; \
63  if(!DIFF ## blabla_localTimer.get()) { \
64  std::ostringstream oss; \
65  oss << FUNCNAME; \
66  DIFF ## blabla_localTimer = Teuchos::TimeMonitor::getNewCounter(oss.str()); \
67  } \
68  Teuchos::TimeMonitor DIFF ## blabla_localTimeMonitor(*DIFF ## blabla_localTimer)
69 
70 
93 #define TEUCHOS_FUNC_TIME_MONITOR( FUNCNAME ) \
94  TEUCHOS_FUNC_TIME_MONITOR_DIFF( FUNCNAME, main )
95 
96 
97 namespace Teuchos {
98 
99 // Forward declaration
100 class StackedTimer;
101 
113 typedef std::map<std::string, std::vector<std::pair<double, double> > > stat_map_type;
114 
148 class TEUCHOSCOMM_LIB_DLL_EXPORT TimeMonitor :
149  public PerformanceMonitorBase<Time> {
150 public:
151 
154 
163  TimeMonitor (Time& timer, bool reset=false);
164 
166  TimeMonitor () = delete;
167 
169  ~TimeMonitor() override;
171 
180  static RCP<Time> getNewTimer (const std::string& name) {
181  return getNewCounter (name);
182  }
183 
199  static void disableTimer (const std::string& name);
200 
209  static void enableTimer (const std::string& name);
210 
217  static void zeroOutTimers();
218 
334  static void
335  computeGlobalTimerStatistics (stat_map_type& statData,
336  std::vector<std::string>& statNames,
337  Ptr<const Comm<int> > comm,
338  const ECounterSetOp setOp=Intersection,
339  const std::string& filter="");
340 
376  static void
377  computeGlobalTimerStatistics (stat_map_type& statData,
378  std::vector<std::string>& statNames,
379  const ECounterSetOp setOp=Intersection,
380  const std::string& filter="");
381 
449  static void
450  summarize (Ptr<const Comm<int> > comm,
451  std::ostream &out=std::cout,
452  const bool alwaysWriteLocal=false,
453  const bool writeGlobalStats=true,
454  const bool writeZeroTimers=true,
455  const ECounterSetOp setOp=Intersection,
456  const std::string& filter="",
457  const bool ignoreZeroTimers=false);
458 
476  static void
477  summarize (std::ostream& out=std::cout,
478  const bool alwaysWriteLocal=false,
479  const bool writeGlobalStats=true,
480  const bool writeZeroTimers=true,
481  const ECounterSetOp setOp=Intersection,
482  const std::string& filter="",
483  const bool ignoreZeroTimers=false);
484 
566  static void
567  report (Ptr<const Comm<int> > comm,
568  std::ostream& out,
569  const std::string& filter,
570  const RCP<ParameterList>& params=null);
571 
576  static void
577  report (Ptr<const Comm<int> > comm,
578  std::ostream& out,
579  const RCP<ParameterList>& params=null);
580 
585  static void
586  report (std::ostream& out,
587  const std::string& filter,
588  const RCP<ParameterList>& params=null);
589 
594  static void
595  report (std::ostream& out,
596  const RCP<ParameterList>& params=null);
597 
599  static RCP<const ParameterList> getValidReportParameters ();
600 
605  static void setStackedTimer(const Teuchos::RCP<Teuchos::StackedTimer>& t);
606 
608  static Teuchos::RCP<Teuchos::StackedTimer> getStackedTimer();
609 
610  private:
615  enum ETimeMonitorReportFormat {
616  REPORT_FORMAT_YAML,
617  REPORT_FORMAT_TABLE
618  };
619 
624  enum ETimeMonitorYamlFormat {
625  YAML_FORMAT_COMPACT,
626  YAML_FORMAT_SPACIOUS
627  };
628 
643  static void
644  summarizeToYaml (Ptr<const Comm<int> > comm,
645  std::ostream& out,
646  const ETimeMonitorYamlFormat yamlStyle,
647  const std::string& filter="");
648 
653  static void
654  summarizeToYaml (std::ostream& out,
655  const ETimeMonitorYamlFormat yamlStyle,
656  const std::string& filter="");
657 
662  static void setReportFormatParameter (ParameterList& plist);
663 
668  static void setYamlFormatParameter (ParameterList& plist);
669 
674  static void setSetOpParameter (ParameterList& plist);
675 
690  static void setReportParameters (const RCP<ParameterList>& params);
691 
693 
694 
698  static ETimeMonitorReportFormat reportFormat_;
699 
703  static ETimeMonitorYamlFormat yamlStyle_;
704 
707  static ECounterSetOp setOp_;
708 
711  static bool alwaysWriteLocal_;
712 
718  static bool writeGlobalStats_;
719 
721  static bool writeZeroTimers_;
723 
728  static bool setParams_;
729 
730 protected:
734 };
735 
736 
739 class TEUCHOSCOMM_LIB_DLL_EXPORT SyncTimeMonitor :
740  public TimeMonitor {
741 public:
742 
745 
754  SyncTimeMonitor(Time& timer, Ptr<const Comm<int> > comm, bool reset=false);
755 
757  SyncTimeMonitor () = delete;
758 
760  ~SyncTimeMonitor() override;
762 
763 private:
764  // \brief Communicator on which barrier will be called.
765  Ptr<const Comm<int> > comm_;
766 };
767 
768 
769 } // namespace Teuchos
770 
771 
772 namespace Teuchos {
773 
783 {
784  virtual void summarize (std::ostream& out) {
786  }
787 };
788 
831 public:
834  if (is_null (CommandLineProcessor::getTimeMonitorSurrogate ())) {
835  CommandLineProcessor::setTimeMonitorSurrogate (Teuchos::rcp (new TimeMonitorSurrogateImpl));
836  }
837  }
838 };
839 
840 } // end namespace Teuchos
841 
842 
843 namespace {
844 
845 // Inject the implementation in every translation unit.
846 Teuchos::TimeMonitorSurrogateImplInserter timeMonitorSurrogateImplInserter;
847 
848 } // namespace (anonymous)
849 
850 #endif // TEUCHOS_TIMEMONITOR_H
std::map< std::string, std::vector< std::pair< double, double > > > stat_map_type
Global statistics collected from timer data.
bool is_null(const std::shared_ptr< T > &p)
Returns true if p.get()==NULL.
Basic wall-clock timer class.
A TimeMonitor that waits at a MPI barrier before destruction.
Implementation of TimeMonitorSurrogate that invokes TimeMonitor.
static RCP< Time > getNewTimer(const std::string &name)
Return a new timer with the given name (class method).
static Teuchos::RCP< Teuchos::StackedTimer > stackedTimer_
Stacked timer for optional injection of timing from TimeMonitor-enabled objects.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.
Templated Parameter List class.
static void summarize(Ptr< const Comm< int > > comm, std::ostream &out=std::cout, const bool alwaysWriteLocal=false, const bool writeGlobalStats=true, const bool writeZeroTimers=true, const ECounterSetOp setOp=Intersection, const std::string &filter="", const bool ignoreZeroTimers=false)
Print summary statistics for all timers on the given communicator.
Wall-clock timer.
Interface by which CommandLineProcessor may use TimeMonitor.
TimeMonitorSurrogateImplInserter()
Constructor: inject dependency on TimeMonitor into CommandLineProcessor.
Basic command line parser for input from (argc,argv[])
Smart reference counting pointer class for automatic garbage collection.
Common capabilities for collecting and reporting performance data collectively across MPI processes...
ECounterSetOp
Set operation type for mergeCounterNames() to perform.
Common capabilities for collecting and reporting performance data across processors.
Simple wrapper class for raw pointers to single objects where no persisting relationship exists...
Scope guard for Time, that can compute MPI collective timer statistics.
Injects run-time dependency of a class on TimeMonitor.