timemory 3.3.0
Modular C++ Toolkit for Performance Analysis and Logging. Profiling API and Tools for C, C++, CUDA, Fortran, and Python. The C++ template API is essentially a framework to creating tools: it is designed to provide a unifying interface for recording various performance measurements alongside data logging and interfaces to other tools.
tim::component::cupti_activity Struct Reference

CUPTI activity tracing component for high-precision kernel timing. For low-precision kernel timing, use tim::component::cuda_event component. More...

#include "timemory/components/cupti/cupti_activity.hpp"

+ Collaboration diagram for tim::component::cupti_activity:

Public Types

using value_type = intmax_t
 
using this_type = cupti_activity
 
using base_type = base< cupti_activity, value_type >
 
using ratio_t = std::nano
 
using size_type = std::size_t
 
using string_t = std::string
 
using receiver_type = cupti::activity::receiver
 
using kind_vector_type = std::vector< cupti::activity_kind_t >
 
using get_initializer_t = std::function< kind_vector_type()>
 
using kernel_elapsed_t = typename cupti::activity::receiver::named_elapsed_t
 
using kernel_names_t = std::unordered_set< std::string >
 
using storage_type = empty_storage
 

Public Member Functions

 ~cupti_activity ()
 
void start ()
 
void stop ()
 
double get () const
 
double get_display () const
 
kernel_elapsed_t get_secondary () const
 
void set_depth_change (bool v)
 

Static Public Member Functions

static std::string label ()
 
static std::string description ()
 
static get_initializer_tget_initializer ()
 
static kind_vector_type get_kind_types ()
 
static void global_init ()
 
static void global_finalize ()
 
static value_type record ()
 
template<typename... Args>
static opaque get_opaque (Args &&...)
 

Detailed Description

CUPTI activity tracing component for high-precision kernel timing. For low-precision kernel timing, use tim::component::cuda_event component.

Definition at line 58 of file cupti_activity.hpp.

Member Typedef Documentation

◆ base_type

◆ get_initializer_t

Definition at line 71 of file cupti_activity.hpp.

◆ kernel_elapsed_t

using tim::component::cupti_activity::kernel_elapsed_t = typename cupti::activity::receiver::named_elapsed_t

Definition at line 72 of file cupti_activity.hpp.

◆ kernel_names_t

using tim::component::cupti_activity::kernel_names_t = std::unordered_set<std::string>

Definition at line 73 of file cupti_activity.hpp.

◆ kind_vector_type

using tim::component::cupti_activity::kind_vector_type = std::vector<cupti::activity_kind_t>

Definition at line 70 of file cupti_activity.hpp.

◆ ratio_t

Definition at line 66 of file cupti_activity.hpp.

◆ receiver_type

using tim::component::cupti_activity::receiver_type = cupti::activity::receiver

Definition at line 69 of file cupti_activity.hpp.

◆ size_type

Definition at line 67 of file cupti_activity.hpp.

◆ storage_type

Definition at line 66 of file declaration.hpp.

◆ string_t

Definition at line 68 of file cupti_activity.hpp.

◆ this_type

◆ value_type

Definition at line 61 of file cupti_activity.hpp.

Constructor & Destructor Documentation

◆ ~cupti_activity()

tim::component::cupti_activity::~cupti_activity ( )
inline

Definition at line 174 of file cupti_activity.hpp.

174{ cupti::activity::get_receiver().remove(this); }

Member Function Documentation

◆ description()

static std::string tim::component::cupti_activity::description ( )
inlinestatic

Definition at line 76 of file cupti_activity.hpp.

77 {
78 return "Wall-clock execution timing for the CUDA API";
79 }

◆ get()

double tim::component::cupti_activity::get ( ) const
inline

◆ get_display()

double tim::component::cupti_activity::get_display ( ) const
inline

Definition at line 206 of file cupti_activity.hpp.

206{ return get(); }

References get().

◆ get_initializer()

static get_initializer_t & tim::component::cupti_activity::get_initializer ( )
inlinestatic

look up integer codes in <timemory/backends/types/cupti.hpp>

Definition at line 83 of file cupti_activity.hpp.

84 {
85 static get_initializer_t _instance = []() -> kind_vector_type {
86 std::vector<cupti::activity_kind_t> _kinds;
88
89 /// look up integer codes in <timemory/backends/types/cupti.hpp>
91 for(const auto& itr : vec)
92 {
93 int iactivity = atoi(itr.c_str());
94 if(iactivity > static_cast<int>(CUPTI_ACTIVITY_KIND_INVALID) &&
95 iactivity < static_cast<int>(CUPTI_ACTIVITY_KIND_COUNT))
96 {
97 _kinds.push_back(static_cast<cupti::activity_kind_t>(iactivity));
98 }
99 }
100
101 // if found settings in environment, use those
102 if(!_kinds.empty())
103 {
104 return _kinds;
105 }
106 if(lvl == 0)
107 {
108 // general settings for kernels, runtime, overhead
109 _kinds = { CUPTI_ACTIVITY_KIND_CONCURRENT_KERNEL };
110 }
111 else if(lvl == 1)
112 {
113 // general settings for kernels, runtime, memory, overhead
114 _kinds = { { CUPTI_ACTIVITY_KIND_CONCURRENT_KERNEL,
115 CUPTI_ACTIVITY_KIND_MEMCPY, CUPTI_ACTIVITY_KIND_MEMSET } };
116 }
117 else if(lvl == 2)
118 {
119 // general settings for kernels, runtime, memory, overhead, and device
120 _kinds = { { CUPTI_ACTIVITY_KIND_CONCURRENT_KERNEL,
121 CUPTI_ACTIVITY_KIND_MEMCPY, CUPTI_ACTIVITY_KIND_MEMSET,
122 CUPTI_ACTIVITY_KIND_RUNTIME, CUPTI_ACTIVITY_KIND_DEVICE,
123 CUPTI_ACTIVITY_KIND_DRIVER, CUPTI_ACTIVITY_KIND_OVERHEAD } };
124 }
125 else if(lvl > 2)
126 {
127 // general settings for kernels, runtime, memory, overhead, device,
128 // stream, CDP kernels
129 _kinds = { { CUPTI_ACTIVITY_KIND_CONCURRENT_KERNEL,
130 CUPTI_ACTIVITY_KIND_MEMCPY, CUPTI_ACTIVITY_KIND_MEMSET,
131 CUPTI_ACTIVITY_KIND_RUNTIME, CUPTI_ACTIVITY_KIND_DEVICE,
132 CUPTI_ACTIVITY_KIND_DRIVER, CUPTI_ACTIVITY_KIND_OVERHEAD,
133 CUPTI_ACTIVITY_KIND_MARKER, CUPTI_ACTIVITY_KIND_STREAM,
134 CUPTI_ACTIVITY_KIND_CDP_KERNEL } };
135 }
136 return _kinds;
137 };
138 return _instance;
139 }
cupti_activity_kinds
Definition: settings.cpp:1725
cupti_activity_level
Definition: settings.cpp:1723
ContainerT delimit(const std::string &line, const std::string &delimiters="\"',;: ", PredicateT &&predicate=[](const std::string &s) -> std::string { return s;})
Definition: delimit.hpp:68
std::vector< cupti::activity_kind_t > kind_vector_type
std::function< kind_vector_type()> get_initializer_t

References tim::cupti_activity_kinds, tim::cupti_activity_level, and tim::delimit().

Referenced by get_kind_types().

◆ get_kind_types()

static kind_vector_type tim::component::cupti_activity::get_kind_types ( )
inlinestatic

Definition at line 143 of file cupti_activity.hpp.

144 {
145 static kind_vector_type _instance = get_initializer()();
146 return _instance;
147 }
static get_initializer_t & get_initializer()

References get_initializer().

Referenced by global_finalize(), and global_init().

◆ get_opaque()

template<typename... Args>
static opaque tim::component::empty_base::get_opaque ( Args &&  ...)
inlinestaticinherited

Definition at line 72 of file declaration.hpp.

73 {
74 return opaque{};
75 }

◆ get_secondary()

kernel_elapsed_t tim::component::cupti_activity::get_secondary ( ) const
inline

Definition at line 210 of file cupti_activity.hpp.

210{ return m_kernels_accum; }

◆ global_finalize()

static void tim::component::cupti_activity::global_finalize ( )
inlinestatic

Definition at line 162 of file cupti_activity.hpp.

162{ cupti::activity::finalize_trace(get_kind_types()); }
static kind_vector_type get_kind_types()

References get_kind_types().

◆ global_init()

static void tim::component::cupti_activity::global_init ( )
inlinestatic

Definition at line 151 of file cupti_activity.hpp.

152 {
153 static std::atomic<short> _once(0);
154 if(_once++ > 0)
155 return;
156 cupti::activity::initialize_trace(get_kind_types());
157 cupti::init_driver();
158 }

References get_kind_types().

◆ label()

static std::string tim::component::cupti_activity::label ( )
inlinestatic

Definition at line 75 of file cupti_activity.hpp.

75{ return "cupti_activity"; }

◆ record()

static value_type tim::component::cupti_activity::record ( )
inlinestatic

Definition at line 166 of file cupti_activity.hpp.

166{ return cupti::activity::get_receiver().get(); }

Referenced by tim::component::gpu_roofline< Types >::record().

◆ set_depth_change()

void tim::component::cupti_activity::set_depth_change ( bool  v)
inline

Definition at line 212 of file cupti_activity.hpp.

212{ m_depth_change = v; }

◆ start()

void tim::component::cupti_activity::start ( )
inline

Definition at line 179 of file cupti_activity.hpp.

180 {
181 cupti::activity::start_trace(this, m_depth_change);
182 value = cupti::activity::get_receiver().get();
183 m_kernels_index = cupti::activity::get_receiver().get_named_index();
184 }

◆ stop()

void tim::component::cupti_activity::stop ( )
inline

Definition at line 188 of file cupti_activity.hpp.

189 {
190 using namespace tim::component::operators;
191 cupti::activity::stop_trace(this);
192 auto tmp = cupti::activity::get_receiver().get();
193 auto kernels = cupti::activity::get_receiver().get_named(m_kernels_index, true);
194
195 accum += (tmp - value);
196 value = tmp;
197 for(const auto& itr : kernels)
198 m_kernels_accum[itr.first] += itr.second;
199 m_kernels_value = std::move(kernels);
200 }

The documentation for this struct was generated from the following file: