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
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
782class TimeMonitorSurrogateImpl : public CommandLineProcessor::TimeMonitorSurrogate
783{
784 virtual void summarize (std::ostream& out) {
786 }
787};
788
830class TimeMonitorSurrogateImplInserter {
831public:
833 TimeMonitorSurrogateImplInserter () {
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.
Common capabilities for collecting and reporting performance data across processors.
Simple wrapper class for raw pointers to single objects where no persisting relationship exists.
Smart reference counting pointer class for automatic garbage collection.
A TimeMonitor that waits at a MPI barrier before destruction.
SyncTimeMonitor()=delete
Default constructor is deleted, since it would be unsafe.
Scope guard for Time, that can compute MPI collective timer statistics.
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.
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.