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. 3.0
6 // Copyright (2020) National Technology & Engineering
7 // Solutions of Sandia, LLC (NTESS).
8  //
9  // Under the terms of Contract DE-NA0003525 with NTESS,
10  // the U.S. Government retains certain rights in this software.
11  //
12  // Redistribution and use in source and binary forms, with or without
13  // modification, are permitted provided that the following conditions are
14  // met:
15  //
16  // 1. Redistributions of source code must retain the above copyright
17  // notice, this list of conditions and the following disclaimer.
18  //
19  // 2. Redistributions in binary form must reproduce the above copyright
20  // notice, this list of conditions and the following disclaimer in the
21  // documentation and/or other materials provided with the distribution.
22  //
23  // 3. Neither the name of the Corporation nor the names of the
24  // contributors may be used to endorse or promote products derived from
25  // this software without specific prior written permission.
26  //
27  // THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY
28  // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29  // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
30  // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE
31  // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
32  // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
33  // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
34  // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
35  // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
36  // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
37  // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38  //
39  // Questions? Contact Christian R. Trott (crtrott@sandia.gov)
40  //
41  // ************************************************************************
42  //@HEADER
43  */
44 
45 #ifndef KOKKOSP_PROFILE_SECTION_HPP
46 #define KOKKOSP_PROFILE_SECTION_HPP
47 
48 #include <Kokkos_Macros.hpp>
49 #include <impl/Kokkos_Profiling_Interface.hpp>
50 
51 #include <string>
52 
53 namespace Kokkos {
54 namespace Profiling {
55 
56 class ProfilingSection {
57  public:
58  ProfilingSection(const std::string& sectionName) : secName(sectionName) {
59 #if defined(KOKKOS_ENABLE_PROFILING)
60  if (Kokkos::Profiling::profileLibraryLoaded()) {
61  Kokkos::Profiling::createProfileSection(secName, &secID);
62  }
63 #else
64  secID = 0;
65 #endif
66  }
67 
68  void start() {
69 #if defined(KOKKOS_ENABLE_PROFILING)
70  if (Kokkos::Profiling::profileLibraryLoaded()) {
71  Kokkos::Profiling::startSection(secID);
72  }
73 #endif
74  }
75 
76  void stop() {
77 #if defined(KOKKOS_ENABLE_PROFILING)
78  if (Kokkos::Profiling::profileLibraryLoaded()) {
79  Kokkos::Profiling::stopSection(secID);
80  }
81 #endif
82  }
83 
84  ~ProfilingSection() {
85 #if defined(KOKKOS_ENABLE_PROFILING)
86  if (Kokkos::Profiling::profileLibraryLoaded()) {
87  Kokkos::Profiling::destroyProfileSection(secID);
88  }
89 #endif
90  }
91 
92  std::string getName() { return secName; }
93 
94  uint32_t getSectionID() { return secID; }
95 
96  protected:
97  const std::string secName;
98  uint32_t secID;
99 };
100 
101 } // namespace Profiling
102 } // namespace Kokkos
103 
104 #endif