Kokkos Core Kernels Package  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Kokkos_Profiling_ProfileSection.hpp
1 /*
2  //@HEADER
3  // ************************************************************************
4  //
5  // Kokkos v. 2.0
6  // Copyright (2014) 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 Christian R. Trott (crtrott@sandia.gov)
39  //
40  // ************************************************************************
41  //@HEADER
42  */
43 
44 #ifndef KOKKOSP_PROFILE_SECTION_HPP
45 #define KOKKOSP_PROFILE_SECTION_HPP
46 
47 #include <Kokkos_Macros.hpp>
48 #include <impl/Kokkos_Profiling_Interface.hpp>
49 
50 #include <string>
51 
52 namespace Kokkos {
53 namespace Profiling {
54 
55 class ProfilingSection {
56 
57 public:
58  ProfilingSection(const std::string& sectionName) :
59  secName(sectionName) {
60 
61  #if defined( KOKKOS_ENABLE_PROFILING )
62  if(Kokkos::Profiling::profileLibraryLoaded()) {
63  Kokkos::Profiling::createProfileSection(secName, &secID);
64  }
65  #else
66  secID = 0;
67  #endif
68  }
69 
70  void start() {
71  #if defined( KOKKOS_ENABLE_PROFILING )
72  if(Kokkos::Profiling::profileLibraryLoaded()) {
73  Kokkos::Profiling::startSection(secID);
74  }
75  #endif
76  }
77 
78  void stop() {
79  #if defined( KOKKOS_ENABLE_PROFILING )
80  if(Kokkos::Profiling::profileLibraryLoaded()) {
81  Kokkos::Profiling::stopSection(secID);
82  }
83  #endif
84  }
85 
86  ~ProfilingSection() {
87  #if defined( KOKKOS_ENABLE_PROFILING )
88  if(Kokkos::Profiling::profileLibraryLoaded()) {
89  Kokkos::Profiling::destroyProfileSection(secID);
90  }
91  #endif
92  }
93 
94  std::string getName() {
95  return secName;
96  }
97 
98  uint32_t getSectionID() {
99  return secID;
100  }
101 
102 protected:
103  const std::string secName;
104  uint32_t secID;
105 
106 };
107 
108 }
109 }
110 
111 #endif