timemory  3.2.1
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 >
 

Public Member Functions

 ~cupti_activity ()
 
void start ()
 
void stop ()
 
double get_display () const
 
double get () 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 ()
 

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.

◆ 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

Definition at line 212 of file cupti_activity.hpp.

213  {
214  return static_cast<double>(load() / static_cast<double>(ratio_t::den) *
216  }
static int64_t get_unit()

References tim::component::base< Tp, Value >::get_unit(), and tim::component::base< cupti_activity, intmax_t >::load().

◆ get_display()

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

Definition at line 204 of file cupti_activity.hpp.

205  {
206  return static_cast<double>(load() / static_cast<double>(ratio_t::den) *
208  }

References tim::component::base< Tp, Value >::get_unit(), and tim::component::base< cupti_activity, intmax_t >::load().

◆ 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;
87  auto lvl = settings::cupti_activity_level();
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:1419
cupti_activity_level
Definition: settings.cpp:1417
ContainerT delimit(const std::string &line, const std::string &delimiters="\"',;: ", PredicateT &&predicate=[](const std::string &s) -> std::string { return s;})
Definition: utility.hpp:666
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_secondary()

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

Definition at line 220 of file cupti_activity.hpp.

220 { 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 222 of file cupti_activity.hpp.

222 { 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: