15 #if defined(__INTEL_COMPILER) && defined(_WIN32)
17 #define WIN32_LEAN_AND_MEAN
23 bool seconds_initialized =
false;
24 LARGE_INTEGER start_count, count_freq;
26 inline void seconds_initialize() {
27 if( seconds_initialized )
return;
28 std::cout <<
"\nCalling Win32 version of Teuchos::seconds_initialize()!\n";
30 ::QueryPerformanceFrequency( &count_freq );
33 ::SetThreadPriority( ::GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL );
35 assert( QueryPerformanceCounter( &start_count ) );
36 seconds_initialized =
true;
41 #endif // defined(__INTEL_COMPILER) && defined(_WIN32)
43 #ifdef HAVE_TEUCHOS_TIME_MASSIF_SNAPSHOTS
49 #if defined(HAVE_TEUCHOS_KOKKOS_PROFILING) && defined(HAVE_TEUCHOSCORE_KOKKOS)
52 extern void pushRegion (
const std::string&);
53 extern void popRegion ();
58 #ifdef HAVE_TEUCHOS_TIMER_KOKKOS_FENCE
59 #include "Kokkos_Core.hpp"
64 #ifdef HAVE_TEUCHOS_TIME_MASSIF_SNAPSHOTS
65 void removeIllegalChars(std::string& s){
66 std::string illegalChars =
"\\/:?\"<>|";
67 for (
auto it = s.begin() ; it < s.end() ; ++it){
68 bool found = illegalChars.find(*it) != std::string::npos;
77 : startTime_(0), totalTime_(0), isRunning_(false), enabled_ (true), name_(name_in), numCalls_(0)
79 if(start_in) this->
start();
80 #ifdef HAVE_TEUCHOS_TIME_MASSIF_SNAPSHOTS
81 numCallsMassifSnapshots_ = 0;
89 if (reset_in) totalTime_ = 0;
90 #ifdef HAVE_TEUCHOS_TIME_MASSIF_SNAPSHOTS
91 if (numCallsMassifSnapshots_ < 100) {
92 std::string filename =
"massif.out." + std::to_string(::getpid()) +
"." + name_ +
"." + std::to_string(numCallsMassifSnapshots_) +
".start.out";
93 removeIllegalChars(filename);
94 std::replace(filename.begin(), filename.end(),
' ',
'_');
95 std::string cmd =
"snapshot " + filename;
96 VALGRIND_MONITOR_COMMAND(cmd.data());
100 #ifdef HAVE_TEUCHOS_TIMER_KOKKOS_FENCE
103 #if defined(HAVE_TEUCHOS_KOKKOS_PROFILING) && defined(HAVE_TEUCHOSCORE_KOKKOS)
104 ::Kokkos::Tools::pushRegion (name_);
113 totalTime_ += (
wallTime() - startTime_ );
116 #ifdef HAVE_TEUCHOS_TIME_MASSIF_SNAPSHOTS
117 if (numCallsMassifSnapshots_ < 100) {
118 std::string filename =
"massif.out." + std::to_string(::getpid()) +
"." + name_ +
"." + std::to_string(numCallsMassifSnapshots_) +
".stop.out";
119 removeIllegalChars(filename);
120 std::replace(filename.begin(), filename.end(),
' ',
'_');
121 std::string cmd =
"snapshot " + filename;
122 VALGRIND_MONITOR_COMMAND(cmd.data());
123 numCallsMassifSnapshots_++;
126 #ifdef HAVE_TEUCHOS_TIMER_KOKKOS_FENCE
129 #if defined(HAVE_TEUCHOS_KOKKOS_PROFILING) && defined(HAVE_TEUCHOSCORE_KOKKOS)
130 ::Kokkos::Tools::popRegion ();
140 return wallTime() - startTime_ + totalTime_;
172 MPI_Initialized(&mpiInitialized);
174 if( mpiInitialized ) {
184 return( (
double)( start ) / CLOCKS_PER_SEC );
188 #elif defined(__INTEL_COMPILER) && defined(_WIN32)
190 seconds_initialize();
192 QueryPerformanceCounter( &count );
195 sec = (double)( count.QuadPart - start_count.QuadPart ) / count_freq.QuadPart;
199 #elif ICL || defined(_WIN32)
204 return( (
double)( start ) / CLOCKS_PER_SEC );
210 static long start = 0, startu;
213 gettimeofday(&tp, NULL);
218 gettimeofday(&tp, NULL);
219 return( ((
double) (tp.tv_sec - start)) + (tp.tv_usec-startu)/1000000.0 );
221 return( (
double) clock() / CLOCKS_PER_SEC );
void disable()
"Disable" this timer, so that it ignores calls to start() and stop().
Basic wall-clock timer class.
void reset()
Reset the cummulative time and call count.
void start(bool reset=false)
Start the timer, if the timer is enabled (see disable()).
double stop()
Stop the timer, if the timer is enabled (see disable()).
Time(const std::string &name, bool start=false)
Constructor.
void enable()
"Enable" this timer, so that it (again) respects calls to start() and stop().
double totalElapsedTime(bool readCurrentTime=false) const
The total time in seconds accumulated by this timer.
static double wallTime()
Current wall-clock time in seconds.
void incrementNumCalls()
Increment the number of times this timer has been called, if the timer is enabled (see disable())...