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::openmp::context_handler< Api > Struct Template Reference

#include "timemory/components/ompt/tool.hpp"

+ Collaboration diagram for tim::openmp::context_handler< Api >:

Classes

struct  device_load_tag
 
struct  device_state_tag
 
struct  mutex_tag
 
struct  nest_lock_tag
 
struct  task_tag
 

Public Types

using api_type = Api
 
template<typename KeyT , typename MappedT , typename HashT = std::hash<KeyT>>
using uomap_t = std::unordered_map< KeyT, MappedT, HashT >
 
using data_map_t = uomap_t< uint64_t, ompt_data_t * >
 

Public Member Functions

 context_handler (ompt_thread_t thread_type, ompt_data_t *thread_data)
 
 context_handler (ompt_data_t *thread_data)
 
 context_handler (ompt_data_t *task_data, const ompt_frame_t *task_frame, ompt_data_t *parallel_data, unsigned int requested_parallelism, int flags, const void *codeptr)
 
 context_handler (ompt_data_t *parallel_data, ompt_data_t *task_data, int flags, const void *codeptr)
 
 context_handler (ompt_scope_endpoint_t endpoint, ompt_data_t *parallel_data, ompt_data_t *task_data, const void *codeptr)
 
 context_handler (ompt_scope_endpoint_t endpoint, ompt_data_t *parallel_data, ompt_data_t *task_data, unsigned int team_size, unsigned int thread_num)
 
 context_handler (ompt_sync_region_t kind, ompt_scope_endpoint_t endpoint, ompt_data_t *parallel_data, ompt_data_t *task_data, const void *codeptr)
 
 context_handler (ompt_mutex_t kind, unsigned int hint, unsigned int impl, ompt_wait_id_t wait_id, const void *codeptr)
 
 context_handler (ompt_mutex_t kind, ompt_wait_id_t wait_id, const void *codeptr)
 
 context_handler (ompt_scope_endpoint_t endpoint, ompt_wait_id_t wait_id, const void *codeptr)
 
 context_handler (ompt_data_t *task_data, const ompt_frame_t *task_frame, ompt_data_t *new_task_data, int flags, int has_dependences, const void *codeptr)
 
 context_handler (ompt_data_t *prior_task_data, ompt_task_status_t prior_task_status, ompt_data_t *next_task_data)
 
 context_handler (ompt_data_t *parallel_data, ompt_data_t *task_data, ompt_dispatch_t kind, ompt_data_t instance)
 
 context_handler (ompt_work_t wstype, ompt_scope_endpoint_t endpoint, ompt_data_t *parallel_data, ompt_data_t *task_data, uint64_t count, const void *codeptr)
 
 context_handler (ompt_data_t *thread_data, const void *codeptr)
 
 context_handler (ompt_data_t *thread_data, int flags, const void *codeptr)
 
 context_handler (ompt_target_t kind, ompt_scope_endpoint_t endpoint, int device_num, ompt_data_t *task_data, ompt_id_t target_id, const void *codeptr)
 
 context_handler (ompt_id_t target_id, ompt_id_t host_op_id, ompt_target_data_op_t optype, void *src_addr, int src_device_num, void *dest_addr, int dest_device_num, size_t bytes, const void *codeptr)
 
 context_handler (ompt_id_t target_id, ompt_id_t host_op_id, unsigned int requested_num_teams)
 
 context_handler (ompt_id_t target_id, unsigned int nitems, void **host_addr, void **device_addr, size_t *bytes, unsigned int *mapping_flags)
 
 context_handler (uint64_t device_num, const char *type, ompt_device_t *device, ompt_function_lookup_t lookup, const char *documentation)
 
 context_handler (uint64_t device_num)
 
 context_handler (uint64_t device_num, const char *filename, int64_t offset_in_file, void *vma_in_file, size_t bytes, void *host_addr, void *device_addr, uint64_t module_id)
 
 context_handler (uint64_t device_num, uint64_t module_id)
 
 ~context_handler ()
 
bool empty () const
 
const std::string & key () const
 
ompt_data_t * data (size_t idx=0) const
 
template<size_t Idx, typename Tp , typename Func = std::function<void(Tp*)>>
auto construct (Func &&f=[](Tp *) {}) -> decltype(new Tp(std::declval< std::string >()), void())
 
template<typename Tp , typename Func = std::function<void(Tp*)>>
auto construct (Func &&f=[](Tp *) {})
 
template<size_t Idx, typename Tp , typename Func = std::function<void(Tp*)>>
auto destroy (Func &&f=[](Tp *) {})
 
template<typename Tp , typename Func = std::function<void(Tp*)>>
auto destroy (Func &&f=[](Tp *) {})
 
auto construct_data (bool _cleanup=false)
 

Static Public Member Functions

template<typename Tag , typename KeyT = uint64_t, typename MappedT = ompt_data_t*, typename MapT = uomap_t<KeyT, MappedT>>
static auto & get_data ()
 

Static Public Attributes

static constexpr size_t size = 2
 

Static Protected Member Functions

static uint64_t & get_counter ()
 

Protected Attributes

std::string m_key = ""
 
std::array< ompt_data_t *, sizem_data
 
std::function< void()> m_cleanup = [] {}
 

Friends

template<typename Ct , typename At >
struct callback_connector
 

Detailed Description

template<typename Api>
struct tim::openmp::context_handler< Api >

Definition at line 225 of file tool.hpp.


Class Documentation

◆ tim::openmp::context_handler::device_load_tag

struct tim::openmp::context_handler::device_load_tag
template<typename Api>
struct tim::openmp::context_handler< Api >::device_load_tag

Definition at line 244 of file tool.hpp.

+ Collaboration diagram for tim::openmp::context_handler< Api >::device_load_tag:

◆ tim::openmp::context_handler::device_state_tag

struct tim::openmp::context_handler::device_state_tag
template<typename Api>
struct tim::openmp::context_handler< Api >::device_state_tag

Definition at line 242 of file tool.hpp.

+ Collaboration diagram for tim::openmp::context_handler< Api >::device_state_tag:

◆ tim::openmp::context_handler::mutex_tag

struct tim::openmp::context_handler::mutex_tag
template<typename Api>
struct tim::openmp::context_handler< Api >::mutex_tag

Definition at line 248 of file tool.hpp.

+ Collaboration diagram for tim::openmp::context_handler< Api >::mutex_tag:

◆ tim::openmp::context_handler::nest_lock_tag

struct tim::openmp::context_handler::nest_lock_tag
template<typename Api>
struct tim::openmp::context_handler< Api >::nest_lock_tag

Definition at line 250 of file tool.hpp.

+ Collaboration diagram for tim::openmp::context_handler< Api >::nest_lock_tag:

◆ tim::openmp::context_handler::task_tag

struct tim::openmp::context_handler::task_tag
template<typename Api>
struct tim::openmp::context_handler< Api >::task_tag

Definition at line 246 of file tool.hpp.

+ Collaboration diagram for tim::openmp::context_handler< Api >::task_tag:

Member Typedef Documentation

◆ api_type

template<typename Api >
using tim::openmp::context_handler< Api >::api_type = Api

Definition at line 227 of file tool.hpp.

◆ data_map_t

template<typename Api >
using tim::openmp::context_handler< Api >::data_map_t = uomap_t<uint64_t, ompt_data_t*>

Definition at line 253 of file tool.hpp.

◆ uomap_t

template<typename Api >
template<typename KeyT , typename MappedT , typename HashT = std::hash<KeyT>>
using tim::openmp::context_handler< Api >::uomap_t = std::unordered_map<KeyT, MappedT, HashT>

Definition at line 231 of file tool.hpp.

Constructor & Destructor Documentation

◆ context_handler() [1/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( ompt_thread_t  thread_type,
ompt_data_t *  thread_data 
)
inline

Definition at line 259 of file tool.hpp.

260 : m_key(ompt_thread_type_labels[thread_type])
261 , m_data({ { thread_data, nullptr } })
262 {}
std::array< ompt_data_t *, size > m_data
Definition: tool.hpp:630

◆ context_handler() [2/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( ompt_data_t *  thread_data)
inline

Definition at line 267 of file tool.hpp.

268 : m_data({ { thread_data, nullptr } })
269 {}

◆ context_handler() [3/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( ompt_data_t *  task_data,
const ompt_frame_t *  task_frame,
ompt_data_t *  parallel_data,
unsigned int  requested_parallelism,
int  flags,
const void *  codeptr 
)
inline

Definition at line 274 of file tool.hpp.

277 : m_key("ompt_parallel")
278 , m_data({ { nullptr, parallel_data } })
279 {
280 consume_parameters(task_data, task_frame, requested_parallelism, flags, codeptr);
281 }
void consume_parameters(ArgsT &&...)
Definition: types.hpp:285

◆ context_handler() [4/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( ompt_data_t *  parallel_data,
ompt_data_t *  task_data,
int  flags,
const void *  codeptr 
)
inline

Definition at line 286 of file tool.hpp.

288 : m_key("ompt_parallel")
289 , m_data({ { nullptr, parallel_data } })
290 {
291 consume_parameters(task_data, flags, codeptr);
292 }

◆ context_handler() [5/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( ompt_scope_endpoint_t  endpoint,
ompt_data_t *  parallel_data,
ompt_data_t *  task_data,
const void *  codeptr 
)
inline

Definition at line 297 of file tool.hpp.

299 : m_key("ompt_master")
300 , m_data(
301 { { (endpoint == ompt_scope_begin) ? construct_data() : task_data, nullptr } })
302 {
303 consume_parameters(endpoint, parallel_data, task_data, codeptr);
304 }
auto construct_data(bool _cleanup=false)
Definition: tool.hpp:620

References tim::openmp::context_handler< Api >::construct_data().

◆ context_handler() [6/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( ompt_scope_endpoint_t  endpoint,
ompt_data_t *  parallel_data,
ompt_data_t *  task_data,
unsigned int  team_size,
unsigned int  thread_num 
)
inline

Definition at line 309 of file tool.hpp.

312 : m_key("ompt_implicit_task")
313 , m_data(
314 { { (endpoint == ompt_scope_begin) ? construct_data() : task_data, nullptr } })
315 {
316 consume_parameters(endpoint, parallel_data, task_data, team_size, thread_num);
317 }

References tim::openmp::context_handler< Api >::construct_data().

◆ context_handler() [7/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( ompt_sync_region_t  kind,
ompt_scope_endpoint_t  endpoint,
ompt_data_t *  parallel_data,
ompt_data_t *  task_data,
const void *  codeptr 
)
inline

Definition at line 322 of file tool.hpp.

325 : m_key(ompt_sync_region_type_labels[kind])
326 , m_data(
327 { { (endpoint == ompt_scope_begin) ? construct_data() : task_data, nullptr } })
328 {
329 consume_parameters(endpoint, parallel_data, task_data, codeptr);
330 }

References tim::openmp::context_handler< Api >::construct_data().

◆ context_handler() [8/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( ompt_mutex_t  kind,
unsigned int  hint,
unsigned int  impl,
ompt_wait_id_t  wait_id,
const void *  codeptr 
)
inline

Definition at line 335 of file tool.hpp.

337 : m_key(ompt_mutex_type_labels[kind])
338 , m_data({ { construct_data(), nullptr } })
339 {
340 get_data<mutex_tag>().insert({ wait_id, m_data[0] });
341 consume_parameters(hint, impl, wait_id, codeptr);
342 }

References tim::openmp::context_handler< Api >::construct_data().

◆ context_handler() [9/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( ompt_mutex_t  kind,
ompt_wait_id_t  wait_id,
const void *  codeptr 
)
inline

Definition at line 348 of file tool.hpp.

349 : m_key(ompt_mutex_type_labels[kind])
350 , m_data({ { nullptr, nullptr } })
351 {
352 if(get_data<mutex_tag>().find(wait_id) != get_data<mutex_tag>().end())
353 {
354 m_data[0] = get_data<mutex_tag>()[wait_id];
355 m_cleanup = [=]() {
356 auto& itr = get_data<mutex_tag>()[wait_id];
357 delete itr;
358 itr = nullptr;
359 get_data<mutex_tag>().erase(wait_id);
360 };
361 }
362 consume_parameters(codeptr);
363 }
return _hash_map end()
std::function< void()> m_cleanup
Definition: tool.hpp:631

◆ context_handler() [10/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( ompt_scope_endpoint_t  endpoint,
ompt_wait_id_t  wait_id,
const void *  codeptr 
)
inline

Definition at line 368 of file tool.hpp.

370 : m_key("ompt_nested_lock")
371 , m_data({ { nullptr, nullptr } })
372 {
373 if(endpoint == ompt_scope_end &&
374 get_data<nest_lock_tag>().find(wait_id) != get_data<nest_lock_tag>().end())
375 {
376 m_data[0] = get_data<nest_lock_tag>()[wait_id];
377 m_cleanup = [=]() {
378 auto& itr = get_data<nest_lock_tag>()[wait_id];
379 delete itr;
380 itr = nullptr;
381 get_data<nest_lock_tag>().erase(wait_id);
382 };
383 }
384 else if(endpoint == ompt_scope_begin)
385 {
386 m_data[0] = construct_data();
387 get_data<nest_lock_tag>()[wait_id] = m_data[0];
388 }
389
390 consume_parameters(endpoint, wait_id, codeptr);
391 }

◆ context_handler() [11/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( ompt_data_t *  task_data,
const ompt_frame_t *  task_frame,
ompt_data_t *  new_task_data,
int  flags,
int  has_dependences,
const void *  codeptr 
)
inline

Definition at line 396 of file tool.hpp.

399 : m_key("ompt_task_create")
400 , m_data({ { task_data, nullptr } })
401 {
402 consume_parameters(task_frame, new_task_data, flags, has_dependences, codeptr);
403 }

◆ context_handler() [12/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( ompt_data_t *  prior_task_data,
ompt_task_status_t  prior_task_status,
ompt_data_t *  next_task_data 
)
inline

Definition at line 408 of file tool.hpp.

410 : m_key("ompt_task_schedule")
411 , m_data({ { nullptr, next_task_data } })
412 {
413 consume_parameters(prior_task_data, prior_task_status, next_task_data);
414 }

◆ context_handler() [13/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( ompt_data_t *  parallel_data,
ompt_data_t *  task_data,
ompt_dispatch_t  kind,
ompt_data_t  instance 
)
inline

Definition at line 419 of file tool.hpp.

421 : m_key(ompt_dispatch_type_labels[kind])
422 , m_data({ { task_data, nullptr } })
423 {
424 consume_parameters(parallel_data, task_data, kind, instance);
425 }

◆ context_handler() [14/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( ompt_work_t  wstype,
ompt_scope_endpoint_t  endpoint,
ompt_data_t *  parallel_data,
ompt_data_t *  task_data,
uint64_t  count,
const void *  codeptr 
)
inline

Definition at line 430 of file tool.hpp.

433 : m_key(ompt_work_labels[wstype])
434 , m_data(
435 { { (endpoint == ompt_scope_begin) ? construct_data() : task_data, nullptr } })
436 {
437 consume_parameters(endpoint, parallel_data, task_data, count, codeptr);
438 }

References tim::openmp::context_handler< Api >::construct_data().

◆ context_handler() [15/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( ompt_data_t *  thread_data,
const void *  codeptr 
)
inline

Definition at line 443 of file tool.hpp.

444 : m_key("ompt_flush")
445 , m_data({ { thread_data, nullptr } })
446 {
447 consume_parameters(thread_data, codeptr);
448 }

◆ context_handler() [16/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( ompt_data_t *  thread_data,
int  flags,
const void *  codeptr 
)
inline

Definition at line 453 of file tool.hpp.

454 : m_key("ompt_cancel")
455 , m_data({ { thread_data, nullptr } })
456 {
457 consume_parameters(thread_data, flags, codeptr);
458 }

◆ context_handler() [17/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( ompt_target_t  kind,
ompt_scope_endpoint_t  endpoint,
int  device_num,
ompt_data_t *  task_data,
ompt_id_t  target_id,
const void *  codeptr 
)
inline

Definition at line 463 of file tool.hpp.

465 : m_key(mpl::apply<std::string>::join('_', ompt_target_type_labels[kind], "dev",
466 device_num))
467 , m_data(
468 { { (endpoint == ompt_scope_begin) ? construct_data() : task_data, nullptr } })
469 {
470 consume_parameters(kind, endpoint, target_id, codeptr);
471 }
auto join(const char *sep, Arg &&arg, Args &&... args)
Definition: declaration.hpp:74

References tim::openmp::context_handler< Api >::construct_data().

◆ context_handler() [18/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( ompt_id_t  target_id,
ompt_id_t  host_op_id,
ompt_target_data_op_t  optype,
void *  src_addr,
int  src_device_num,
void *  dest_addr,
int  dest_device_num,
size_t  bytes,
const void *  codeptr 
)
inline

Definition at line 476 of file tool.hpp.

480 : m_key(mpl::apply<std::string>::join('_', ompt_target_data_op_labels[optype], "src",
481 src_device_num, "dest", dest_device_num))
482 , m_data({ { construct_data(true), nullptr } })
483 {
484 consume_parameters(target_id, host_op_id, src_addr, dest_addr, bytes, codeptr);
485 }

References tim::openmp::context_handler< Api >::construct_data().

◆ context_handler() [19/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( ompt_id_t  target_id,
ompt_id_t  host_op_id,
unsigned int  requested_num_teams 
)
inline

Definition at line 490 of file tool.hpp.

492 : m_key("ompt_target_submit")
493 , m_data({ { nullptr, nullptr } })
494 {
495 consume_parameters(target_id, host_op_id, requested_num_teams);
496 }

◆ context_handler() [20/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( ompt_id_t  target_id,
unsigned int  nitems,
void **  host_addr,
void **  device_addr,
size_t *  bytes,
unsigned int *  mapping_flags 
)
inline

Definition at line 501 of file tool.hpp.

503 : m_key(mpl::apply<std::string>::join('_', "ompt_target_mapping", target_id))
504 , m_data({ { nullptr, nullptr } })
505 {
506 consume_parameters(nitems, host_addr, device_addr, bytes, mapping_flags);
507 }

◆ context_handler() [21/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( uint64_t  device_num,
const char *  type,
ompt_device_t *  device,
ompt_function_lookup_t  lookup,
const char *  documentation 
)
inline

Definition at line 512 of file tool.hpp.

514 : m_key(mpl::apply<std::string>::join('_', "ompt_device", device_num, type))
515 , m_data({ { construct_data(), nullptr } })
516 {
517 get_data<device_state_tag>().insert({ device_num, m_data[0] });
518 consume_parameters(device, lookup, documentation);
519 }

References tim::openmp::context_handler< Api >::construct_data().

◆ context_handler() [22/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( uint64_t  device_num)
inline

Definition at line 524 of file tool.hpp.

525 : m_data({ { get_data<device_state_tag>()[device_num], nullptr } })
526 , m_cleanup([=]() {
527 auto& itr = get_data<device_state_tag>()[device_num];
528 delete itr;
529 itr = nullptr;
530 get_data<device_state_tag>().erase(device_num);
531 })
532 {}

◆ context_handler() [23/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( uint64_t  device_num,
const char *  filename,
int64_t  offset_in_file,
void *  vma_in_file,
size_t  bytes,
void *  host_addr,
void *  device_addr,
uint64_t  module_id 
)
inline

Definition at line 537 of file tool.hpp.

540 : m_key(mpl::apply<std::string>::join('_', "ompt_target_load", device_num, filename))
541 , m_data({ { construct_data(), nullptr } })
542 {
543 get_data<device_load_tag, uint64_t, data_map_t>()[device_num].insert(
544 { module_id, m_data[0] });
545 consume_parameters(offset_in_file, vma_in_file, bytes, host_addr, device_addr);
546 }

References tim::openmp::context_handler< Api >::construct_data().

◆ context_handler() [24/24]

template<typename Api >
tim::openmp::context_handler< Api >::context_handler ( uint64_t  device_num,
uint64_t  module_id 
)
inline

Definition at line 551 of file tool.hpp.

552 : m_data({ { get_data<device_load_tag, uint64_t, data_map_t>()[device_num][module_id],
553 nullptr } })
554 , m_cleanup([=]() {
555 auto& itr =
556 get_data<device_load_tag, uint64_t, data_map_t>()[device_num][module_id];
557 delete itr;
558 itr = nullptr;
559 get_data<device_load_tag, uint64_t, data_map_t>()[device_num].erase(module_id);
560 })
561 {}

◆ ~context_handler()

template<typename Api >
tim::openmp::context_handler< Api >::~context_handler ( )
inline

Definition at line 563 of file tool.hpp.

563{ m_cleanup(); }

References tim::openmp::context_handler< Api >::m_cleanup.

Member Function Documentation

◆ construct() [1/2]

template<typename Api >
template<typename Tp , typename Func = std::function<void(Tp*)>>
auto tim::openmp::context_handler< Api >::construct ( Func &&  f = [](Tp*) {})
inline

Definition at line 594 of file tool.hpp.

594 {})
595 {
596 construct<0, Tp>(std::forward<Func>(f));
597 construct<1, Tp>(std::forward<Func>(f));
598 }

◆ construct() [2/2]

template<typename Api >
template<size_t Idx, typename Tp , typename Func = std::function<void(Tp*)>>
auto tim::openmp::context_handler< Api >::construct ( Func &&  f = [](Tp*) {}) -> decltype(new Tp(std::declval<std::string>()), void())
inline

Definition at line 581 of file tool.hpp.

581 {})
582 -> decltype(new Tp(std::declval<std::string>()), void())
583 {
584 auto& itr = std::get<Idx>(m_data);
585 if(itr && itr->ptr == nullptr)
586 {
587 auto obj = new Tp(m_key);
588 std::forward<Func>(f)(obj);
589 itr->ptr = (void*) obj;
590 }
591 }

◆ construct_data()

template<typename Api >
auto tim::openmp::context_handler< Api >::construct_data ( bool  _cleanup = false)
inline

Definition at line 620 of file tool.hpp.

621 {
622 auto _obj = new ompt_data_t{};
623 if(_cleanup)
624 m_cleanup = [=]() { delete _obj; };
625 return _obj;
626 }

References tim::openmp::context_handler< Api >::m_cleanup.

Referenced by tim::openmp::context_handler< Api >::context_handler().

◆ data()

template<typename Api >
ompt_data_t * tim::openmp::context_handler< Api >::data ( size_t  idx = 0) const
inline

Definition at line 575 of file tool.hpp.

576 {
577 return m_data[idx % size];
578 }
static constexpr size_t size
Definition: tool.hpp:566

References tim::openmp::context_handler< Api >::m_data, and tim::openmp::context_handler< Api >::size.

◆ destroy() [1/2]

template<typename Api >
template<size_t Idx, typename Tp , typename Func = std::function<void(Tp*)>>
auto tim::openmp::context_handler< Api >::destroy ( Func &&  f = [](Tp*) {})
inline

Definition at line 601 of file tool.hpp.

601 {})
602 {
603 auto& itr = std::get<Idx>(m_data);
604 if(itr && itr->ptr != nullptr)
605 {
606 auto obj = static_cast<Tp*>(itr->ptr);
607 std::forward<Func>(f)(obj);
608 delete obj;
609 itr->ptr = nullptr;
610 }
611 }

◆ destroy() [2/2]

template<typename Api >
template<typename Tp , typename Func = std::function<void(Tp*)>>
auto tim::openmp::context_handler< Api >::destroy ( Func &&  f = [](Tp*) {})
inline

Definition at line 614 of file tool.hpp.

614 {})
615 {
616 destroy<0, Tp>(std::forward<Func>(f));
617 destroy<1, Tp>(std::forward<Func>(f));
618 }

◆ empty()

◆ get_counter()

template<typename Api >
static uint64_t & tim::openmp::context_handler< Api >::get_counter ( )
inlinestaticprotected

Definition at line 636 of file tool.hpp.

637 {
638 static thread_local uint64_t _instance;
639 return _instance;
640 }

◆ get_data()

template<typename Api >
template<typename Tag , typename KeyT = uint64_t, typename MappedT = ompt_data_t*, typename MapT = uomap_t<KeyT, MappedT>>
static auto & tim::openmp::context_handler< Api >::get_data ( )
inlinestatic

Definition at line 235 of file tool.hpp.

236 {
237 static thread_local MapT _instance;
238 return _instance;
239 }

◆ key()

template<typename Api >
const std::string & tim::openmp::context_handler< Api >::key ( ) const
inline

Definition at line 573 of file tool.hpp.

573{ return m_key; }

References tim::openmp::context_handler< Api >::m_key.

Friends And Related Function Documentation

◆ callback_connector

template<typename Api >
template<typename Ct , typename At >
friend struct callback_connector
friend

Definition at line 634 of file tool.hpp.

Member Data Documentation

◆ m_cleanup

template<typename Api >
std::function<void()> tim::openmp::context_handler< Api >::m_cleanup = [] {}
protected

◆ m_data

template<typename Api >
std::array<ompt_data_t*, size> tim::openmp::context_handler< Api >::m_data
protected

◆ m_key

◆ size

template<typename Api >
constexpr size_t tim::openmp::context_handler< Api >::size = 2
staticconstexpr

Definition at line 566 of file tool.hpp.

Referenced by tim::openmp::context_handler< Api >::data().


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