37#include "timemory/components/ompt/backends.hpp"
57template <
typename Api>
59:
public base<ompt_handle<Api>, void>
74 "Control switch for enabling/disabling OpenMP tools defined by the ") +
75 demangle<api_type>() +
" tag";
80 static std::function<void()> _instance = []() {};
86 static int32_t _once = 0;
93 static thread_local auto _data_tracker =
94 tim::storage_initializer::get<ompt_data_tracker<api_type>>();
109#if defined(TIMEMORY_USE_OMPT)
118#if defined(TIMEMORY_USE_OMPT)
126 using tracker_type::m_tot;
134 get_persistent_data().m_prefix =
_prefix +
"/";
140 return get_persistent_data().m_prefix;
144 struct persistent_data
150 static persistent_data& get_persistent_data()
152 static persistent_data _instance;
159template <
typename Api>
173 return std::string(
"OpenMP tools data tracker ") + demangle<api_type>();
178 static thread_local auto _tracker_storage = storage_initializer::get<tracker_t>();
185 tracker_t::label() =
"ompt_data_tracker";
191 template <
typename... Args>
194 apply_store<tracker_t>(std::plus<size_t>{}, 1);
197 void store(ompt_id_t target_id, ompt_id_t host_op_id, ompt_target_data_op_t optype,
198 void* host_addr,
void* device_addr,
size_t bytes)
200 apply_store<tracker_t>(std::plus<size_t>{}, bytes);
204 void store(ompt_id_t target_id,
unsigned int nitems,
void** host_addr,
205 void** device_addr,
const size_t* bytes,
unsigned int* mapping_flags)
208 for(
unsigned int i = 0; i < nitems; ++i)
210 apply_store<tracker_t>(std::plus<size_t>{}, _tot);
216 void set_prefix(uint64_t _prefix_hash) { m_prefix_hash = _prefix_hash; }
220 template <
typename Tp,
typename... Args>
221 void apply_store(Tp& _obj, Args&&... args)
230 template <
typename Tp,
typename... Args>
231 void apply_store(Args&&... args)
234 apply_store(_obj, std::forward<Args>(args)...);
238 uint64_t m_prefix_hash = 0;
239 scope::config m_scope_config = scope::get_default();
Implementation of the data_tracker component(s)
void stop(TupleT< Tp... > &obj, Args &&... args)
void start(TupleT< Tp... > &obj, Args &&... args)
Inherit from this policy to add reference counting support. Useful if you want to turn a global setti...
char const std::string & _prefix
std::unique_lock< mutex_t > auto_lock_t
Unique lock type around mutex_t.
std::recursive_mutex mutex_t
Recursive mutex is used for convenience since the performance penalty vs. a regular mutex is not real...
tim::mpl::apply< std::string > string
void consume_parameters(ArgsT &&...)
Definition for various functions for store in operations.
storage< Tp, Value > storage_type
A very lightweight storage class which provides nothing.
void set_scope(scope::config _scope)
void store(ompt_id_t target_id, unsigned int nitems, void **host_addr, void **device_addr, const size_t *bytes, unsigned int *mapping_flags)
void set_prefix(uint64_t _prefix_hash)
ompt_data_tracker_t tracker_t
static void global_init()
static std::string label()
void store(ompt_id_t target_id, ompt_id_t host_op_id, ompt_target_data_op_t optype, void *host_addr, void *device_addr, size_t bytes)
static std::string description()
static std::string description()
void set_prefix(const std::string &_prefix)
static auto & get_initializer()
static void global_finalize()
static std::string label()
static std::string get_prefix()
typename trait::ompt_handle< api_type >::type toolset_type
static void global_init()
this data type encodes the options of storage scope. The default is hierarchical (tree) scope....
static bool set(bool val, enable_if_t< is_available< U >::value &&get_value< U >(), int >=0)
SET specialization if component is available.