MueLu
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
MueLu_MutuallyExclusiveTime.hpp
Go to the documentation of this file.
1
// @HEADER
2
//
3
// ***********************************************************************
4
//
5
// MueLu: A package for multigrid based preconditioning
6
// Copyright 2012 Sandia Corporation
7
//
8
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9
// the U.S. Government retains certain rights in this software.
10
//
11
// Redistribution and use in source and binary forms, with or without
12
// modification, are permitted provided that the following conditions are
13
// met:
14
//
15
// 1. Redistributions of source code must retain the above copyright
16
// notice, this list of conditions and the following disclaimer.
17
//
18
// 2. Redistributions in binary form must reproduce the above copyright
19
// notice, this list of conditions and the following disclaimer in the
20
// documentation and/or other materials provided with the distribution.
21
//
22
// 3. Neither the name of the Corporation nor the names of the
23
// contributors may be used to endorse or promote products derived from
24
// this software without specific prior written permission.
25
//
26
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
//
38
// Questions? Contact
39
// Jonathan Hu (jhu@sandia.gov)
40
// Andrey Prokopenko (aprokop@sandia.gov)
41
// Ray Tuminaro (rstumin@sandia.gov)
42
//
43
// ***********************************************************************
44
//
45
// @HEADER
46
#ifndef MUELU_MUTUALLYEXCLUSIVETIME_HPP
47
#define MUELU_MUTUALLYEXCLUSIVETIME_HPP
48
49
#include <string>
50
#include <stack>
51
#include "Teuchos_RCPDecl.hpp"
// for RCP
52
53
// types for explicit instantiation
54
#include "
MueLu_FactoryBase_fwd.hpp
"
55
#include "
MueLu_Level_fwd.hpp
"
56
#include "
MueLu_BaseClass.hpp
"
57
58
namespace
MueLu
{
59
74
template
<
class
TagName>
75
class
MutuallyExclusiveTime
:
public
BaseClass
{
76
77
public
:
78
80
81
82
MutuallyExclusiveTime
(
const
std::string &name,
bool
startFlag=
false
);
83
85
~MutuallyExclusiveTime
();
87
91
void
start
(
bool
reset=
false
);
92
94
95
99
double
stop
();
100
102
void
pause
();
103
107
108
void
resume
();
109
111
112
114
115
116
bool
isRunning
();
117
118
bool
isPaused
();
119
121
123
// Note: this function is provided by the timer class, not by a monitor (!= Teuchos)
124
static
RCP<MutuallyExclusiveTime<TagName> >
getNewTimer
(
const
std::string& name);
125
127
void
incrementNumCalls
();
128
130
std::string
name_
;
131
138
static
void
PrintParentChildPairs();
139
140
private
:
141
144
MutuallyExclusiveTime
(RCP<Teuchos::Time> timer);
145
146
// MutuallyExclusiveTime() { }
147
149
RCP<Teuchos::Time> timer_;
150
bool
isPaused_;
151
153
// - empty when no active timer
154
// - head is the active timer
155
// - other timers are timers paused to enforce the mutually exclusive property of the timer set.
156
static
std::stack<MutuallyExclusiveTime<TagName>*>
timerStack_
;
157
//static std::map<std::string,std::string> myParent_;
158
160
void
TopOfTheStack();
161
162
//TODO: test integrity of the stack:
163
// Head = running or paused
164
// Other timers of the stack = paused
165
166
};
167
168
extern
template
class
MutuallyExclusiveTime<FactoryBase>
;
169
extern
template
class
MutuallyExclusiveTime<Level>
;
170
extern
template
class
MutuallyExclusiveTime<BaseClass>
;
171
172
}
// namespace MueLu
173
174
#endif
// MUELU_MUTUALLYEXCLUSIVETIME_HPP
175
176
MueLu_BaseClass.hpp
MueLu_FactoryBase_fwd.hpp
MueLu_Level_fwd.hpp
MueLu::BaseClass
Base class for MueLu classes.
Definition
MueLu_BaseClass.hpp:63
MueLu::MutuallyExclusiveTime
This class wraps a Teuchos::Time and maintains a mutually exclusive property between wrapped timers.
Definition
MueLu_MutuallyExclusiveTime.hpp:75
MueLu::MutuallyExclusiveTime::isRunning
bool isRunning()
Definition
MueLu_MutuallyExclusiveTime.cpp:157
MueLu::MutuallyExclusiveTime::pause
void pause()
Pause running timer. Used internally by start().
Definition
MueLu_MutuallyExclusiveTime.cpp:134
MueLu::MutuallyExclusiveTime::resume
void resume()
Resume paused timer. Used internally by stop(). Timer is not reset.
Definition
MueLu_MutuallyExclusiveTime.cpp:145
MueLu::MutuallyExclusiveTime::name_
std::string name_
Name of this mutually exclusive timer.
Definition
MueLu_MutuallyExclusiveTime.hpp:130
MueLu::MutuallyExclusiveTime::MutuallyExclusiveTime
MutuallyExclusiveTime(const std::string &name, bool startFlag=false)
Constructor.
Definition
MueLu_MutuallyExclusiveTime.cpp:68
MueLu::MutuallyExclusiveTime::~MutuallyExclusiveTime
~MutuallyExclusiveTime()
Destructor.
Definition
MueLu_MutuallyExclusiveTime.cpp:78
MueLu::MutuallyExclusiveTime::stop
double stop()
Stops the timer. The previous MutuallyExclusiveTime that has been paused when this timer was started ...
Definition
MueLu_MutuallyExclusiveTime.cpp:113
MueLu::MutuallyExclusiveTime::getNewTimer
static RCP< MutuallyExclusiveTime< TagName > > getNewTimer(const std::string &name)
Return a new MutuallyExclusiveTime that is registered with the Teuchos::TimeMonitor (for timer summar...
Definition
MueLu_MutuallyExclusiveTime.cpp:172
MueLu::MutuallyExclusiveTime::incrementNumCalls
void incrementNumCalls()
Increment the number of times this timer has been called.
Definition
MueLu_MutuallyExclusiveTime.cpp:179
MueLu::MutuallyExclusiveTime::start
void start(bool reset=false)
Starts the timer. If a MutuallyExclusiveTime timer is running, it will be stopped.
Definition
MueLu_MutuallyExclusiveTime.cpp:90
MueLu::MutuallyExclusiveTime::isPaused
bool isPaused()
Definition
MueLu_MutuallyExclusiveTime.cpp:166
MueLu
Namespace for MueLu classes and methods.
Definition
MueLu_BrickAggregationFactory_decl.hpp:78
MueLu::timerStack_
std::stack< MutuallyExclusiveTime< TagName > * > MutuallyExclusiveTime< TagName >::timerStack_
Definition
MueLu_MutuallyExclusiveTime.cpp:205
src
Utils
MueLu_MutuallyExclusiveTime.hpp
Generated by
1.17.0