Zoltan2
Loading...
Searching...
No Matches
TimerManager.cpp
Go to the documentation of this file.
1// @HEADER
2//
3// ***********************************************************************
4//
5// Zoltan2: A package of combinatorial algorithms for scientific computing
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 Karen Devine (kddevin@sandia.gov)
39// Erik Boman (egboman@sandia.gov)
40// Siva Rajamanickam (srajama@sandia.gov)
41//
42// ***********************************************************************
43//
44// @HEADER
45//
46// Testing the TimerManager class.
47// TODO we only test that it doesn't crash.
48
53
54#include <Teuchos_DefaultComm.hpp>
55
56#ifdef _MSC_VER
57#define NOMINMAX
58#include <windows.h>
59#else
60#include <unistd.h>
61#endif
62
63
68
69
70static void sleep_wrap(unsigned int seconds)
71{
72#ifdef _MSC_VER
73 Sleep(1000*seconds);
74#else
75 sleep(seconds);
76#endif
77}
78
79void goToSleep(const RCP<const Zoltan2::Environment> &env)
80{
81 env->timerStart(MICRO_TIMERS, string("sleep for 5 seconds"));
82 sleep_wrap(5);
83 env->timerStop(MICRO_TIMERS, string("sleep for 5 seconds"));
84
85 env->timerStart(MICRO_TIMERS, string("sleep for 3 seconds (twice)"));
86 sleep_wrap(3);
87 env->timerStop(MICRO_TIMERS, string("sleep for 3 seconds (twice)"));
88
89 env->timerStart(MICRO_TIMERS, string("sleep for 2 seconds"));
90 sleep_wrap(2);
91 env->timerStop(MICRO_TIMERS, string("sleep for 2 seconds"));
92
93 env->timerStart(MICRO_TIMERS, string("sleep for 3 seconds (twice)"));
94 sleep_wrap(3);
95 env->timerStop(MICRO_TIMERS, string("sleep for 3 seconds (twice)"));
96}
97
98
99int main(int narg, char *arg[])
100{
101 Tpetra::ScopeGuard tscope(&narg, &arg);
102 Teuchos::RCP<const Teuchos::Comm<int> > comm = Tpetra::getDefaultComm();
103
104 // Create a problem, requesting that Timing be enabled.
105
106 Teuchos::ParameterList pl("test list");
107 pl.set("timer_output_stream" , "std::cout");
108 pl.set("timer_type" , "both_timers");
109 std::vector<const zscalar_t * >weights;
110 std::vector<int> strides;
111 Array<zgno_t> someIds(10,1);
113 typedef Zoltan2::BasicIdentifierAdapter<myTypes_t> inputAdapter_t;
114 inputAdapter_t ia(10, someIds.getRawPtr(), weights, strides);
115
116 Zoltan2::PartitioningProblem<inputAdapter_t> problem(&ia, &pl, comm);
117
118 // Use the timers through the environment.
119
120 const RCP<const Zoltan2::Environment> &env = problem.getEnvironment();
121
122 if (comm->getRank() == 0)
123 std::cout << "Sleeping..." << std::endl;
124
125 env->timerStart(MACRO_TIMERS, string("Do the sleep test"));
126 goToSleep(env);
127 env->timerStop(MACRO_TIMERS, string("Do the sleep test"));
128
129 comm->barrier();
130
131 // Should show an error
132 env->timerStop(MACRO_TIMERS, string("unstarted timer"));
133
134 problem.printTimers();
135
136 if (comm->getRank() == 0)
137 std::cout << "PASS" << std::endl;
138}
void goToSleep(const RCP< const Zoltan2::Environment > &env)
static void sleep_wrap(unsigned int seconds)
Defines the BasicIdentifierAdapter class.
Zoltan2::BasicUserTypes< zscalar_t, zlno_t, zgno_t > myTypes_t
Defines the PartitioningProblem class.
common code used by tests
Declarations for TimerManager.
int main()
This class represents a collection of global Identifiers and their associated weights,...
A simple class that can be the User template argument for an InputAdapter.
PartitioningProblem sets up partitioning problems for the user.
const RCP< const Environment > & getEnvironment() const
Get the current Environment. Useful for testing.
void printTimers() const
Return the communicator passed to the problem.
@ MACRO_TIMERS
Time an algorithm (or other entity) as a whole.
@ MICRO_TIMERS
Time the substeps of an entity.
@ BOTH_TIMERS
Run both MACRO and MICRO timers.
static ArrayRCP< ArrayRCP< zscalar_t > > weights