33#include "timemory/components/ompt/backends.hpp"
48static const char* ompt_thread_type_labels[] = {
nullptr,
"ompt_thread_initial",
50 "ompt_thread_other" };
54static const char* ompt_dispatch_type_labels[] = {
nullptr,
"ompt_dispatch_iteration",
55 "ompt_dispatch_section" };
59static const char* ompt_sync_region_type_labels[] = {
61 "ompt_sync_region_barrier",
62 "ompt_sync_region_barrier_implicit",
63 "ompt_sync_region_barrier_explicit",
64 "ompt_sync_region_barrier_implementation",
65 "ompt_sync_region_taskwait",
66 "ompt_sync_region_taskgroup",
67 "ompt_sync_region_reduction"
72static const char* ompt_target_type_labels[] = {
nullptr,
"ompt_target",
73 "ompt_target_enter_data",
74 "ompt_target_exit_data",
75 "ompt_target_update" };
79static const char* ompt_work_labels[] = {
nullptr,
82 "ompt_work_single_executor",
83 "ompt_work_single_other",
84 "ompt_work_workshare",
85 "ompt_work_distribute",
86 "ompt_work_taskloop" };
90static const char* ompt_target_data_op_labels[] = {
nullptr,
"ompt_target_data_alloc",
91 "ompt_target_data_transfer_to_dev",
92 "ompt_target_data_transfer_from_dev",
93 "ompt_target_data_delete" };
97static const char* ompt_task_status_labels[] = {
nullptr,
102 "ompt_task_early_fulfill",
103 "ompt_task_late_fulfill",
104 "ompt_task_switch" };
108static std::map<ompt_mutex_t, const char*> ompt_mutex_type_labels = {
109 { ompt_mutex_lock,
"ompt_mutex_lock" },
110 { ompt_mutex_test_lock,
"ompt_mutex_test_lock" },
111 { ompt_mutex_nest_lock,
"ompt_mutex_nest_lock" },
112 { ompt_mutex_test_nest_lock,
"ompt_mutex_test_nest_lock" },
113 { ompt_mutex_critical,
"ompt_mutex_critical" },
114 { ompt_mutex_atomic,
"ompt_mutex_atomic" },
115 { ompt_mutex_ordered,
"ompt_mutex_ordered" }
120static std::map<ompt_task_flag_t, const char*> ompt_task_type_labels = {
121 { ompt_task_initial,
"ompt_task_initial" },
122 { ompt_task_implicit,
"ompt_task_implicit" },
123 { ompt_task_explicit,
"ompt_task_explicit" },
124 { ompt_task_target,
"ompt_task_target" },
125 { ompt_task_undeferred,
"ompt_task_undeferred" },
126 { ompt_task_untied,
"ompt_task_untied" },
127 { ompt_task_final,
"ompt_task_final" },
128 { ompt_task_mergeable,
"ompt_task_mergeable" },
129 { ompt_task_merged,
"ompt_task_merged" }
134static std::map<ompt_target_map_flag_t, const char*> ompt_target_map_labels = {
135 { ompt_target_map_flag_to,
"ompt_target_map_flag_to" },
136 { ompt_target_map_flag_from,
"ompt_target_map_flag_from" },
137 { ompt_target_map_flag_alloc,
"ompt_target_map_flag_alloc" },
138 { ompt_target_map_flag_release,
"ompt_target_map_flag_release" },
139 { ompt_target_map_flag_delete,
"ompt_target_map_flag_delete" },
140 { ompt_target_map_flag_implicit,
"ompt_target_map_flag_implicit" }
145#define TIMEMORY_OMPT_ENUM_LABEL(TYPE) \
152static std::map<ompt_dependence_type_t, const char*> ompt_dependence_type_labels = {
163static std::map<ompt_cancel_flag_t, const char*> ompt_cancel_type_labels = {
175static std::map<ompt_callbacks_t, const char*> ompt_callback_labels = {
216 ompt_task_status_labels, ompt_target_data_op_labels, ompt_work_labels,
217 ompt_target_type_labels, ompt_sync_region_type_labels, ompt_dispatch_type_labels,
218 ompt_thread_type_labels, ompt_cancel_type_labels, ompt_dependence_type_labels,
219 ompt_target_map_labels, ompt_task_type_labels, ompt_mutex_type_labels);
224template <
typename Api>
230 template <
typename KeyT,
typename MappedT,
typename HashT = std::hash<KeyT>>
231 using uomap_t = std::unordered_map<KeyT, MappedT, HashT>;
233 template <
typename Tag,
typename KeyT = uint64_t,
typename MappedT = ompt_data_t*,
237 static thread_local MapT _instance;
260 :
m_key(ompt_thread_type_labels[thread_type])
261 ,
m_data({ { thread_data,
nullptr } })
268 :
m_data({ { thread_data,
nullptr } })
275 ompt_data_t* parallel_data,
unsigned int requested_parallelism,
276 int flags,
const void* codeptr)
277 :
m_key(
"ompt_parallel")
278 ,
m_data({ {
nullptr, parallel_data } })
288 :
m_key(
"ompt_parallel")
289 ,
m_data({ {
nullptr, parallel_data } })
298 ompt_data_t* task_data,
const void* codeptr)
299 :
m_key(
"ompt_master")
301 { { (endpoint == ompt_scope_begin) ?
construct_data() : task_data,
nullptr } })
310 ompt_data_t* task_data,
unsigned int team_size,
311 unsigned int thread_num)
312 :
m_key(
"ompt_implicit_task")
314 { { (endpoint == ompt_scope_begin) ?
construct_data() : task_data,
nullptr } })
323 ompt_data_t* parallel_data, ompt_data_t* task_data,
325 :
m_key(ompt_sync_region_type_labels[kind])
327 { { (endpoint == ompt_scope_begin) ?
construct_data() : task_data,
nullptr } })
336 ompt_wait_id_t wait_id,
const void* codeptr)
337 :
m_key(ompt_mutex_type_labels[kind])
340 get_data<mutex_tag>().insert({ wait_id,
m_data[0] });
349 :
m_key(ompt_mutex_type_labels[kind])
350 ,
m_data({ {
nullptr,
nullptr } })
352 if(get_data<mutex_tag>().find(wait_id) != get_data<mutex_tag>().end())
354 m_data[0] = get_data<mutex_tag>()[wait_id];
356 auto& itr = get_data<mutex_tag>()[wait_id];
359 get_data<mutex_tag>().erase(wait_id);
370 :
m_key(
"ompt_nested_lock")
371 ,
m_data({ {
nullptr,
nullptr } })
373 if(endpoint == ompt_scope_end &&
374 get_data<nest_lock_tag>().find(wait_id) != get_data<nest_lock_tag>().end())
376 m_data[0] = get_data<nest_lock_tag>()[wait_id];
378 auto& itr = get_data<nest_lock_tag>()[wait_id];
381 get_data<nest_lock_tag>().erase(wait_id);
384 else if(endpoint == ompt_scope_begin)
387 get_data<nest_lock_tag>()[wait_id] =
m_data[0];
397 ompt_data_t* new_task_data,
int flags,
int has_dependences,
399 :
m_key(
"ompt_task_create")
400 ,
m_data({ { task_data,
nullptr } })
409 ompt_data_t* next_task_data)
410 :
m_key(
"ompt_task_schedule")
411 ,
m_data({ {
nullptr, next_task_data } })
420 ompt_dispatch_t kind, ompt_data_t instance)
421 :
m_key(ompt_dispatch_type_labels[kind])
422 ,
m_data({ { task_data,
nullptr } })
431 ompt_data_t* parallel_data, ompt_data_t* task_data, uint64_t count,
433 :
m_key(ompt_work_labels[wstype])
435 { { (endpoint == ompt_scope_begin) ?
construct_data() : task_data,
nullptr } })
444 :
m_key(
"ompt_flush")
445 ,
m_data({ { thread_data,
nullptr } })
454 :
m_key(
"ompt_cancel")
455 ,
m_data({ { thread_data,
nullptr } })
464 ompt_data_t* task_data, ompt_id_t target_id,
const void* codeptr)
468 { { (endpoint == ompt_scope_begin) ?
construct_data() : task_data,
nullptr } })
477 ompt_target_data_op_t optype,
void* src_addr,
int src_device_num,
478 void* dest_addr,
int dest_device_num,
size_t bytes,
481 src_device_num,
"dest", dest_device_num))
491 unsigned int requested_num_teams)
492 :
m_key(
"ompt_target_submit")
493 ,
m_data({ {
nullptr,
nullptr } })
502 void** device_addr,
size_t* bytes,
unsigned int* mapping_flags)
504 ,
m_data({ {
nullptr,
nullptr } })
513 ompt_function_lookup_t lookup,
const char* documentation)
517 get_data<device_state_tag>().insert({ device_num,
m_data[0] });
525 :
m_data({ { get_data<device_state_tag>()[device_num],
nullptr } })
527 auto& itr = get_data<device_state_tag>()[device_num];
530 get_data<device_state_tag>().erase(device_num);
538 void* vma_in_file,
size_t bytes,
void* host_addr,
void* device_addr,
543 get_data<device_load_tag, uint64_t, data_map_t>()[device_num].insert(
544 { module_id,
m_data[0] });
552 :
m_data({ { get_data<device_load_tag, uint64_t, data_map_t>()[device_num][module_id],
556 get_data<device_load_tag, uint64_t, data_map_t>()[device_num][module_id];
559 get_data<device_load_tag, uint64_t, data_map_t>()[device_num].erase(module_id);
566 static constexpr size_t size = 2;
568 TIMEMORY_NODISCARD
bool empty()
const
575 TIMEMORY_NODISCARD ompt_data_t*
data(
size_t idx = 0)
const
580 template <
size_t Idx,
typename Tp,
typename Func = std::function<
void(Tp*)>>
582 ->
decltype(
new Tp(std::declval<std::string>()),
void())
584 auto& itr = std::get<Idx>(
m_data);
585 if(itr && itr->ptr ==
nullptr)
587 auto obj =
new Tp(
m_key);
588 std::forward<Func>(f)(obj);
589 itr->ptr = (
void*) obj;
593 template <
typename Tp,
typename Func = std::function<
void(Tp*)>>
596 construct<0, Tp>(std::forward<Func>(f));
597 construct<1, Tp>(std::forward<Func>(f));
600 template <
size_t Idx,
typename Tp,
typename Func = std::function<
void(Tp*)>>
603 auto& itr = std::get<Idx>(
m_data);
604 if(itr && itr->ptr !=
nullptr)
606 auto obj =
static_cast<Tp*
>(itr->ptr);
607 std::forward<Func>(f)(obj);
613 template <
typename Tp,
typename Func = std::function<
void(Tp*)>>
616 destroy<0, Tp>(std::forward<Func>(f));
617 destroy<1, Tp>(std::forward<Func>(f));
622 auto _obj =
new ompt_data_t{};
633 template <
typename Ct,
typename At>
638 static thread_local uint64_t _instance;
645template <
typename Components,
typename Api>
652 using map_type = std::unordered_map<size_t, array_type>;
666 demangle<type>().c_str(),
672 template <
typename T,
typename... Args,
676 template <
typename T,
typename... Args,
680 template <
typename T,
typename... Args,
684 template <
typename T,
typename... Args,
688 template <
typename T,
typename... Args,
697 template <
typename T,
typename... Args,
707 template <
typename T,
typename... Args,
717 template <
typename T,
typename Arg,
typename... Args,
724 static thread_local map_type _instance;
731template <
typename Components,
typename Api>
732template <
typename T,
typename... Args,
733 enable_if_t<std::is_same<T, mode::begin_callback>::value,
int>>
740 user_context_callback(ctx, ctx.
m_key, args...);
746 user_context_callback<type>(ctx, T{}, std::forward<Args>(args)...);
751template <
typename Components,
typename Api>
752template <
typename T,
typename... Args,
760 user_context_callback(ctx, ctx.m_key, args...);
766 user_context_callback<type>(ctx, T{}, std::forward<Args>(args)...);
771template <
typename Components,
typename Api>
772template <
typename T,
typename... Args,
773 enable_if_t<std::is_same<T, mode::store_callback>::value,
int>>
779 context_handler<api_type> ctx(args...);
780 user_context_callback(ctx, ctx.m_key, args...);
786 user_context_callback<type>(ctx, T{}, std::forward<Args>(args)...);
791template <
typename Components,
typename Api>
792template <
typename T,
typename... Args,
793 enable_if_t<std::is_same<T, mode::endpoint_callback>::value,
int>>
801 user_context_callback(ctx, ctx.
m_key, endp, args...);
807 user_context_callback<type>(ctx, T{}, endp, std::forward<Args>(args)...);
812template <
typename Components,
typename Api>
813template <
typename T,
typename Arg,
typename... Args,
817 T, Arg arg, ompt_scope_endpoint_t endp, Args... args)
820 user_context_callback(ctx, ctx.
m_key, arg, endp, args...);
826 user_context_callback<type>(ctx, T{}, std::forward<Arg>(arg), endp,
827 std::forward<Args>(args)...);
838template <
typename ApiT>
840configure(ompt_function_lookup_t lookup,
int, ompt_data_t*)
842#if defined(TIMEMORY_USE_OMPT)
846 using api_type = ApiT;
853# define TIMEMORY_OMPT_LOOKUP(TYPE, NAME) \
854 static TYPE OMPT_##NAME = (TYPE) lookup(#NAME); \
855 consume_parameters(OMPT_##NAME)
859 static auto ompt_set_callback = (ompt_set_callback_t) lookup(
"ompt_set_callback");
861 TIMEMORY_OMPT_LOOKUP(ompt_get_proc_id_t, ompt_get_proc_id);
862 TIMEMORY_OMPT_LOOKUP(ompt_get_num_places_t, ompt_get_num_places);
863 TIMEMORY_OMPT_LOOKUP(ompt_get_num_devices_t, ompt_get_num_devices);
864 TIMEMORY_OMPT_LOOKUP(ompt_get_unique_id_t, ompt_get_unique_id);
865 TIMEMORY_OMPT_LOOKUP(ompt_get_place_num_t, ompt_get_place_num);
866 TIMEMORY_OMPT_LOOKUP(ompt_get_place_proc_ids_t, ompt_get_place_proc_ids);
867 TIMEMORY_OMPT_LOOKUP(ompt_get_target_info_t, ompt_get_target_info);
868 TIMEMORY_OMPT_LOOKUP(ompt_get_thread_data_t, ompt_get_thread_data);
869 TIMEMORY_OMPT_LOOKUP(ompt_get_record_type_t, ompt_get_record_type);
870 TIMEMORY_OMPT_LOOKUP(ompt_get_record_ompt_t, ompt_get_record_ompt);
871 TIMEMORY_OMPT_LOOKUP(ompt_get_parallel_info_t, ompt_get_parallel_info);
872 TIMEMORY_OMPT_LOOKUP(ompt_get_device_num_procs_t, ompt_get_device_num_procs);
873 TIMEMORY_OMPT_LOOKUP(ompt_get_partition_place_nums_t, ompt_get_partition_place_nums);
878 TIMEMORY_OMPT_LOOKUP(ompt_get_task_info_t, ompt_get_task_info);
879 TIMEMORY_OMPT_LOOKUP(ompt_get_task_memory_t, ompt_get_task_memory);
885 TIMEMORY_OMPT_LOOKUP(ompt_enumerate_states_t, ompt_enumerate_states);
886 TIMEMORY_OMPT_LOOKUP(ompt_enumerate_mutex_impls_t, ompt_enumerate_mutex_impls);
888 TIMEMORY_OMPT_LOOKUP(ompt_callback_mutex_t, ompt_callback_mutex);
889 TIMEMORY_OMPT_LOOKUP(ompt_callback_nest_lock_t, ompt_callback_nest_lock);
890 TIMEMORY_OMPT_LOOKUP(ompt_callback_flush_t, ompt_callback_flush);
891 TIMEMORY_OMPT_LOOKUP(ompt_callback_cancel_t, ompt_callback_cancel);
892 TIMEMORY_OMPT_LOOKUP(ompt_callback_dispatch_t, ompt_callback_dispatch);
893 TIMEMORY_OMPT_LOOKUP(ompt_callback_buffer_request_t, ompt_callback_buffer_request);
894 TIMEMORY_OMPT_LOOKUP(ompt_callback_buffer_complete_t, ompt_callback_buffer_complete);
895 TIMEMORY_OMPT_LOOKUP(ompt_callback_dependences_t, ompt_callback_dependences);
896 TIMEMORY_OMPT_LOOKUP(ompt_callback_task_dependence_t, ompt_callback_task_dependence);
898 TIMEMORY_OMPT_LOOKUP(ompt_finalize_tool_t, ompt_finalize_tool);
905 handle_type::configure();
909 auto cleanup_label = demangle<handle_type>();
914 auto register_callback = [](ompt_callbacks_t cbidx, ompt_callback_t cb) {
915 int ret = ompt_set_callback(cbidx, cb);
918 auto name = openmp::ompt_callback_labels[cbidx];
923 "[timemory]> WARNING: OMPT Callback for event '%s' count not "
924 "be registered: '%s'\n",
925 name,
"ompt_set_error");
929 "[timemory]> WARNING: OMPT Callback for event '%s' could not "
930 "be registered: '%s'\n",
931 name,
"ompt_set_never");
933 case ompt_set_impossible:
935 "[timemory]> WARNING: OMPT Callback for event '%s' could not "
936 "be registered: '%s'\n",
937 name,
"ompt_set_impossible");
939 case ompt_set_sometimes:
941 "[timemory]> OMPT Callback for event '%s' registered with "
942 "return value: '%s'\n",
943 name,
"ompt_set_sometimes");
945 case ompt_set_sometimes_paired:
947 "[timemory]> OMPT Callback for event '%s' registered with "
948 "return value: '%s'\n",
949 name,
"ompt_set_sometimes_paired");
951 case ompt_set_always:
953 "[timemory]> OMPT Callback for event '%s' registered with "
954 "return value: '%s'\n",
955 name,
"ompt_set_always");
963 auto timemory_ompt_register_callback = [&](ompt_callbacks_t name,
964 ompt_callback_t cb) {
965 int ret = register_callback(name, cb);
975 using thread_begin_cb_t =
976 openmp::ompt_wrapper<toolset_type, connector_type, openmp::mode::begin_callback,
977 ompt_thread_t, ompt_data_t*>;
979 using thread_end_cb_t =
980 openmp::ompt_wrapper<toolset_type, connector_type, openmp::mode::end_callback,
983 timemory_ompt_register_callback(ompt_callback_thread_begin,
985 timemory_ompt_register_callback(ompt_callback_thread_end,
988 using parallel_begin_cb_t =
989 openmp::ompt_wrapper<toolset_type, connector_type, openmp::mode::begin_callback,
990 ompt_data_t*,
const ompt_frame_t*, ompt_data_t*,
991 unsigned int, int,
const void*>;
993 using parallel_end_cb_t =
994 openmp::ompt_wrapper<toolset_type, connector_type, openmp::mode::end_callback,
995 ompt_data_t*, ompt_data_t*, int,
const void*>;
997 timemory_ompt_register_callback(ompt_callback_parallel_begin,
999 timemory_ompt_register_callback(ompt_callback_parallel_end,
1003 openmp::ompt_wrapper<toolset_type, connector_type,
1004 openmp::mode::endpoint_callback, ompt_scope_endpoint_t,
1005 ompt_data_t*, ompt_data_t*,
const void*>;
1007 timemory_ompt_register_callback(ompt_callback_master,
1016 using task_create_cb_t =
1017 openmp::ompt_wrapper<toolset_type, connector_type, openmp::mode::store_callback,
1018 ompt_data_t*,
const ompt_frame_t*, ompt_data_t*, int, int,
1021 using task_schedule_cb_t =
1022 openmp::ompt_wrapper<toolset_type, connector_type, openmp::mode::store_callback,
1023 ompt_data_t*, ompt_task_status_t, ompt_data_t*>;
1025 using work_cb_t = openmp::ompt_wrapper<
1026 toolset_type, connector_type, openmp::mode::endpoint_callback, ompt_work_t,
1027 ompt_scope_endpoint_t, ompt_data_t*, ompt_data_t*, uint64_t,
const void*>;
1029 using implicit_task_cb_t =
1030 openmp::ompt_wrapper<toolset_type, connector_type,
1031 openmp::mode::endpoint_callback, ompt_scope_endpoint_t,
1032 ompt_data_t*, ompt_data_t*,
unsigned int,
unsigned int>;
1034 using dispatch_cb_t =
1035 openmp::ompt_wrapper<toolset_type, connector_type, openmp::mode::end_callback,
1036 ompt_data_t*, ompt_data_t*, ompt_dispatch_t, ompt_data_t>;
1038 timemory_ompt_register_callback(ompt_callback_task_create,
1040 timemory_ompt_register_callback(ompt_callback_task_schedule,
1042 timemory_ompt_register_callback(ompt_callback_work,
1044 timemory_ompt_register_callback(ompt_callback_implicit_task,
1046 timemory_ompt_register_callback(ompt_callback_dispatch,
1068 using target_cb_t = openmp::ompt_wrapper<
1069 toolset_type, connector_type, openmp::mode::endpoint_callback, ompt_target_t,
1070 ompt_scope_endpoint_t, int, ompt_data_t*, ompt_id_t,
const void*>;
1072 timemory_ompt_register_callback(ompt_callback_target,
1075 using target_init_cb_t =
1076 openmp::ompt_wrapper<toolset_type, connector_type, openmp::mode::begin_callback,
1077 uint64_t,
const char*, ompt_device_t*,
1078 ompt_function_lookup_t,
const char*>;
1080 using target_finalize_cb_t =
1081 openmp::ompt_wrapper<toolset_type, connector_type, openmp::mode::end_callback,
1084 timemory_ompt_register_callback(ompt_callback_device_initialize,
1086 timemory_ompt_register_callback(ompt_callback_device_finalize,
1089 using target_load_cb_t =
1090 openmp::ompt_wrapper<toolset_type, connector_type, openmp::mode::begin_callback,
1091 uint64_t,
const char*, int64_t,
void*, size_t,
void*,
void*,
1094 using target_unload_cb_t =
1095 openmp::ompt_wrapper<toolset_type, connector_type, openmp::mode::end_callback,
1096 uint64_t, uint64_t>;
1098 timemory_ompt_register_callback(ompt_callback_device_load,
1100 timemory_ompt_register_callback(ompt_callback_device_unload,
1103 using target_data_op_cb_t =
1104 openmp::ompt_wrapper<toolset_type, connector_type, openmp::mode::store_callback,
1105 ompt_id_t, ompt_id_t, ompt_target_data_op_t,
void*, int,
1106 void*, int, size_t,
const void*>;
1108 using target_submit_cb_t =
1109 openmp::ompt_wrapper<toolset_type, connector_type, openmp::mode::store_callback,
1110 ompt_id_t, ompt_id_t,
unsigned int>;
1112 using target_mapping_cb_t =
1113 openmp::ompt_wrapper<toolset_type, connector_type, openmp::mode::store_callback,
1114 ompt_id_t,
unsigned int,
void**,
void**,
size_t*,
1117 timemory_ompt_register_callback(ompt_callback_target_data_op,
1119 timemory_ompt_register_callback(ompt_callback_target_submit,
1121 timemory_ompt_register_callback(ompt_callback_target_map,
1130 using sync_region_cb_t = openmp::ompt_wrapper<
1131 toolset_type, connector_type, openmp::mode::endpoint_callback, ompt_sync_region_t,
1132 ompt_scope_endpoint_t, ompt_data_t*, ompt_data_t*,
const void*>;
1134 timemory_ompt_register_callback(ompt_callback_sync_region,
1137 using mutex_nest_lock_cb_t =
1138 openmp::ompt_wrapper<toolset_type, connector_type,
1139 openmp::mode::endpoint_callback, ompt_scope_endpoint_t,
1140 ompt_wait_id_t,
const void*>;
1142 timemory_ompt_register_callback(ompt_callback_nest_lock,
1145 using mutex_acquire_cb_t =
1146 openmp::ompt_wrapper<toolset_type, connector_type, openmp::mode::begin_callback,
1147 ompt_mutex_t,
unsigned int,
unsigned int, ompt_wait_id_t,
1150 timemory_ompt_register_callback(ompt_callback_mutex_acquire,
1156 openmp::ompt_wrapper<toolset_type, connector_type, openmp::mode::end_callback,
1157 ompt_mutex_t, ompt_wait_id_t,
const void*>;
1159 timemory_ompt_register_callback(ompt_callback_mutex_acquired,
1161 timemory_ompt_register_callback(ompt_callback_mutex_released,
static pointer_t instance()
Get a shared pointer to the instance for the current thread.
void add_cleanup(void *, Func &&)
add functors to destroy instances based on a pointer
Implementation of the ompt component(s)
#define TIMEMORY_OMPT_CBDECL(...)
The declaration for the types for manager without definitions.
void ompt_suppress_unused_variable_warnings()
auto join(const char *sep, Arg &&arg, Args &&... args)
typename std::enable_if< B, T >::type enable_if_t
Alias template for enable_if.
tim::mpl::apply< std::string > string
void consume_parameters(ArgsT &&...)
std::shared_ptr< type > result_type
callback_connector(T, ompt_target_t targv, ompt_scope_endpoint_t endp, Args... args)
std::deque< result_type > array_type
callback_connector(T, Args... args)
void generic_endpoint_connector(T, Arg arg, ompt_scope_endpoint_t endp, Args... args)
callback_connector(T, ompt_sync_region_t syncv, ompt_scope_endpoint_t endp, Args... args)
std::unordered_map< size_t, array_type > map_type
callback_connector(T, ompt_work_t workv, ompt_scope_endpoint_t endp, Args... args)
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)
auto destroy(Func &&f=[](Tp *) {})
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, int flags, const void *codeptr)
std::array< ompt_data_t *, size > m_data
context_handler(ompt_data_t *prior_task_data, ompt_task_status_t prior_task_status, ompt_data_t *next_task_data)
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_data_t *thread_data, const void *codeptr)
context_handler(ompt_data_t *parallel_data, ompt_data_t *task_data, ompt_dispatch_t kind, ompt_data_t instance)
static constexpr size_t size
context_handler(ompt_thread_t thread_type, ompt_data_t *thread_data)
auto destroy(Func &&f=[](Tp *) {})
const std::string & key() const
context_handler(uint64_t device_num)
uomap_t< uint64_t, ompt_data_t * > data_map_t
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(ompt_mutex_t kind, 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_scope_endpoint_t endpoint, ompt_data_t *parallel_data, ompt_data_t *task_data, const void *codeptr)
static uint64_t & get_counter()
context_handler(uint64_t device_num, uint64_t module_id)
ompt_data_t * data(size_t idx=0) const
context_handler(ompt_scope_endpoint_t endpoint, ompt_wait_id_t wait_id, const void *codeptr)
context_handler(ompt_data_t *thread_data)
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)
auto construct(Func &&f=[](Tp *) {}) -> decltype(new Tp(std::declval< std::string >()), void())
context_handler(ompt_data_t *parallel_data, ompt_data_t *task_data, int flags, const void *codeptr)
context_handler(uint64_t device_num, const char *type, ompt_device_t *device, ompt_function_lookup_t lookup, const char *documentation)
std::unordered_map< KeyT, MappedT, HashT > uomap_t
std::function< void()> m_cleanup
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_scope_endpoint_t endpoint, ompt_data_t *parallel_data, ompt_data_t *task_data, unsigned int team_size, unsigned int thread_num)
auto construct(Func &&f=[](Tp *) {})
context_handler(ompt_mutex_t kind, unsigned int hint, unsigned int impl, ompt_wait_id_t wait_id, const void *codeptr)
auto construct_data(bool _cleanup=false)
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)
trait that signifies that an implementation for the component is available. When this is set to false...
trait that signifies that an implementation is enabled at runtime. The value returned from get() is f...
static bool set(bool val, enable_if_t< is_available< U >::value &&get_value< U >(), int >=0)
SET specialization if component is available.
#define DEBUG_PRINT_HERE(...)