Teuchos - Trilinos Tools Package Version of the Day
Loading...
Searching...
No Matches
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
30
35
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
97namespace Teuchos {
98
99// Forward declaration
100class StackedTimer;
101
113typedef std::map<std::string, std::vector<std::pair<double, double> > > stat_map_type;
114
148class TEUCHOSCOMM_LIB_DLL_EXPORT TimeMonitor :
149 public PerformanceMonitorBase<Time> {
150public:
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
730protected:
734};
735
736
739class TEUCHOSCOMM_LIB_DLL_EXPORT SyncTimeMonitor :
740 public TimeMonitor {
741public:
742
745
754 SyncTimeMonitor(Time& timer, Ptr<const Comm<int> > comm, bool reset=false);
755
757 SyncTimeMonitor () = delete;
758
760 ~SyncTimeMonitor() override;
762
763private:
764 // \brief Communicator on which barrier will be called.
765 Ptr<const Comm<int> > comm_;
766};
767
768
769} // namespace Teuchos
770
771
772namespace Teuchos {
773
783{
784 virtual void summarize (std::ostream& out) {
786 }
787};
788
831public:
834 if (is_null (CommandLineProcessor::getTimeMonitorSurrogate ())) {
835 CommandLineProcessor::setTimeMonitorSurrogate (Teuchos::rcp (new TimeMonitorSurrogateImpl));
836 }
837 }
838};
839
840} // end namespace Teuchos
841
842
843namespace {
844
845// Inject the implementation in every translation unit.
846Teuchos::TimeMonitorSurrogateImplInserter timeMonitorSurrogateImplInserter;
847
848} // namespace (anonymous)
849
850#endif // TEUCHOS_TIMEMONITOR_H
Basic command line parser for input from (argc,argv[]).
Templated Parameter List class.
Common capabilities for collecting and reporting performance data collectively across MPI processes.
Basic wall-clock timer class.
Abstract interface for distributed-memory communication.
Interface by which CommandLineProcessor may use TimeMonitor.
PerformanceMonitorBase(Time &counter_in, bool reset=false)
static RCP< Time > getNewCounter(const std::string &name)
Simple wrapper class for raw pointers to single objects where no persisting relationship exists.
Smart reference counting pointer class for automatic garbage collection.
SyncTimeMonitor()=delete
Default constructor is deleted, since it would be unsafe.
SyncTimeMonitor(Time &timer, Ptr< const Comm< int > > comm, bool reset=false)
Constructor: starts the timer.
Injects run-time dependency of a class on TimeMonitor.
TimeMonitorSurrogateImplInserter()
Constructor: inject dependency on TimeMonitor into CommandLineProcessor.
Implementation of TimeMonitorSurrogate that invokes TimeMonitor.
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.
static Teuchos::RCP< Teuchos::StackedTimer > stackedTimer_
Stacked timer for optional injection of timing from TimeMonitor-enabled objects.
static RCP< Time > getNewTimer(const std::string &name)
Return a new timer with the given name (class method).
TimeMonitor()=delete
Default constructor is deleted, since it would be unsafe.
TimeMonitor(Time &timer, bool reset=false)
Constructor: starts the timer.
Wall-clock timer.
bool is_null(const std::shared_ptr< T > &p)
Returns true if p.get()==NULL.
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos,...
ECounterSetOp
Set operation type for mergeCounterNames() to perform.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.
std::map< std::string, std::vector< std::pair< double, double > > > stat_map_type
Global statistics collected from timer data.