Panzer  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Panzer_PAPI_Counter2.hpp
Go to the documentation of this file.
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Panzer: A partial differential equation assembly
5 // engine for strongly coupled complex multiphysics systems
6 // Copyright (2011) 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 Roger P. Pawlowski (rppawlo@sandia.gov) and
39 // Eric C. Cyr (eccyr@sandia.gov)
40 // ***********************************************************************
41 // @HEADER
42 
43 #ifndef PANZER_PAPI_COUNTER_2_HPP
44 #define PANZER_PAPI_COUNTER_2_HPP
45 
46 #include <string>
47 #include <map>
48 #include <vector>
49 #include "papi.h"
50 #include "Teuchos_Comm.hpp"
52 
53 
54 // namespace Teuchos {
55 // template<typename Ordinal>
56 // class SerializationTraits<Ordinal,long_long>
57 // : public DirectSerializationTraits<Ordinal,long_long>
58 // {};
59 // }
60 
61 namespace panzer {
62 
63 
68  class PAPICounter2 {
69 
70  public:
71 
73  PAPICounter2(const std::string);
74 
76  ~PAPICounter2();
77 
79  static void addEventCounter(const int event);
80 
81  static void report(std::ostream& os, const Teuchos::Comm<int>& comm);
82 
83  static void startCounters();
84 
85  static void stopCounters();
86 
87  private:
88 
90  long_long start_time;
91  long_long accumulated_time;
92 
93  std::vector<long_long> start_counters;
94  std::vector<long_long> stop_counters;
95  std::vector<long_long> accumulated_counters;
96 
97  long_long num_calls;
98  };
99 
101  static int m_event_set;
103  static std::vector<int> m_events;
105  static bool m_is_initialized;
107  static std::map<std::string,InternalCounter2> m_counters;
109  std::string m_name;
110 
111  };
112 
113 }
114 
115 #endif
PAPICounter2(const std::string)
static bool m_is_initialized
true if the static members have been intitialized
Interface to papi counters.
std::string m_name
name of this counter
static std::map< std::string, InternalCounter2 > m_counters
maps the counter name to the data object
static void addEventCounter(const int event)
static void report(std::ostream &os, const Teuchos::Comm< int > &comm)
static std::vector< int > m_events
papi event index
static int m_event_set
PAPI event set.