Zoltan2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
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 
49 #include <Zoltan2_TestHelpers.hpp>
52 #include <Zoltan2_TimerManager.hpp>
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 
70 static void sleep_wrap(unsigned int seconds)
71 {
72 #ifdef _MSC_VER
73  Sleep(1000*seconds);
74 #else
75  sleep(seconds);
76 #endif
77 }
78 
79 void 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 
99 int 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 }
Time an algorithm (or other entity) as a whole.
static void sleep_wrap(unsigned int seconds)
int main(int narg, char *arg[])
static ArrayRCP< ArrayRCP< zscalar_t > > weights
common code used by tests
Time the substeps of an entity.
void goToSleep(const RCP< const Zoltan2::Environment > &env)
Zoltan2::BasicUserTypes< zscalar_t, zlno_t, zgno_t > myTypes_t
Definition: rcbTest.cpp:62
Run both MACRO and MICRO timers.
This class represents a collection of global Identifiers and their associated weights, if any.
Defines the BasicIdentifierAdapter class.
PartitioningProblem sets up partitioning problems for the user.
Defines the PartitioningProblem class.
Declarations for TimerManager.