37#define ompt_get_callback_success 1
38#define ompt_get_callback_failure 0
40#define no_tool_present 0
42#define OMPT_API_ROUTINE static
45#define OMPT_STR_MATCH(haystack, needle) (!strcasecmp(haystack, needle))
52#define OMPT_VERBOSE_INIT_PRINT(...) \
54 fprintf(verbose_file, __VA_ARGS__)
55#define OMPT_VERBOSE_INIT_CONTINUED_PRINT(...) \
57 fprintf(verbose_file, __VA_ARGS__)
90#define ompt_state_macro(state, code) {#state, state},
92#undef ompt_state_macro
96#define kmp_mutex_impl_macro(name, id) {#name, name},
98#undef kmp_mutex_impl_macro
107#define OMPT_DLCLOSE(Lib) FreeLibrary(Lib)
110#define OMPT_DLCLOSE(Lib) dlclose(Lib)
143 const char *runtime_version) {
149 ret = start_tool(omp_version, runtime_version);
154#elif OMPT_HAVE_WEAK_ATTRIBUTE
161ompt_start_tool(
unsigned int omp_version,
const char *runtime_version) {
170 ret = next_tool(omp_version, runtime_version);
183#pragma comment(lib, "psapi.lib")
186#define NUM_MODULES 128
189ompt_tool_windows(
unsigned int omp_version,
const char *runtime_version) {
193 HANDLE process = GetCurrentProcess();
194 modules = (HMODULE *)malloc(NUM_MODULES *
sizeof(HMODULE));
198 printf(
"ompt_tool_windows(): looking for ompt_start_tool\n");
200 if (!EnumProcessModules(process, modules, NUM_MODULES *
sizeof(HMODULE),
207 new_size = needed /
sizeof(HMODULE);
210 printf(
"ompt_tool_windows(): resize buffer to %d bytes\n", needed);
212 modules = (HMODULE *)realloc(modules, needed);
214 if (!EnumProcessModules(process, modules, needed, &needed)) {
220 (FARPROC &)ompt_tool_p = GetProcAddress(modules[
i],
"ompt_start_tool");
223 TCHAR modName[MAX_PATH];
224 if (GetModuleFileName(modules[
i], modName, MAX_PATH))
225 printf(
"ompt_tool_windows(): ompt_start_tool found in module %s\n",
229 return (*ompt_tool_p)(omp_version, runtime_version);
233 TCHAR modName[MAX_PATH];
234 if (GetModuleFileName(modules[
i], modName, MAX_PATH))
235 printf(
"ompt_tool_windows(): ompt_start_tool not found in module %s\n",
244#error Activation of OMPT is not supported on this platform.
253 const char *sep =
";";
255 const char *sep =
":";
263 ret = ompt_tool_darwin(omp_version, runtime_version);
264#elif OMPT_HAVE_WEAK_ATTRIBUTE
267 ret = ompt_tool_windows(omp_version, runtime_version);
269#error Activation of OMPT is not supported on this platform.
274 "Tool was started and is using the OMPT interface.\n");
281 const char *tool_libs = getenv(
"OMP_TOOL_LIBRARIES");
294 void *
h = dlopen(fname, RTLD_LAZY);
304 char *error = dlerror();
309 "ompt_start_tool = NULL");
314 HMODULE
h = LoadLibrary(fname);
317 (
unsigned)GetLastError());
325 (
unsigned)GetLastError());
328#error Activation of OMPT is not supported on this platform.
331 ret = (*start_tool)(omp_version, runtime_version);
335 "Tool was started and is using the OMPT interface.\n");
340 "Found but not using the OMPT interface.\n");
360 const char *fname =
"libarcher.so";
362 "...searching tool libraries failed. Using archer tool.\n");
364 void *
h = dlopen(fname, RTLD_LAZY);
370 ret = (*start_tool)(omp_version, runtime_version);
374 "Tool was started and is using the OMPT interface.\n");
376 "----- END LOGGING OF TOOL REGISTRATION -----\n");
380 "Found but not using the OMPT interface.\n");
396 static int ompt_pre_initialized = 0;
398 if (ompt_pre_initialized)
401 ompt_pre_initialized = 1;
406 const char *ompt_env_var = getenv(
"OMP_TOOL");
409 if (!ompt_env_var || !strcmp(ompt_env_var,
""))
416 const char *ompt_env_verbose_init = getenv(
"OMP_TOOL_VERBOSE_INIT");
419 if (ompt_env_verbose_init && strcmp(ompt_env_verbose_init,
"") &&
432 printf(
"ompt_pre_init(): tool_setting = %d\n", tool_setting);
434 switch (tool_setting) {
453 "Warning: OMP_TOOL has invalid value \"%s\".\n"
454 " legal values are (NULL,\"\",\"disabled\","
472 static int ompt_post_initialized = 0;
474 if (ompt_post_initialized)
477 ompt_post_initialized = 1;
495 ompt_set_thread_state(root_thread, ompt_state_overhead);
501 ompt_data_t *task_data =
nullptr;
502 ompt_data_t *parallel_data =
nullptr;
507 ompt_scope_begin, parallel_data, task_data, 1, 1, ompt_task_initial);
510 ompt_set_thread_state(root_thread, ompt_state_work_serial);
538 const char **next_state_name) {
542 for (
i = 0;
i < len - 1;
i++) {
555 const char **next_impl_name) {
556 const static int len =
559 for (
i = 0;
i < len - 1;
i++) {
574 ompt_callback_t callback) {
577#define ompt_event_macro(event_name, callback_type, event_id) \
579 ompt_callbacks.ompt_callback(event_name) = (callback_type)callback; \
580 ompt_enabled.event_name = (callback != 0); \
582 return ompt_event_implementation_status(event_name); \
584 return ompt_set_always;
588#undef ompt_event_macro
591 return ompt_set_error;
596 ompt_callback_t *callback) {
602#define ompt_event_macro(event_name, callback_type, event_id) \
604 ompt_callback_t mycb = \
605 (ompt_callback_t)ompt_callbacks.ompt_callback(event_name); \
606 if (ompt_enabled.event_name && mycb) { \
608 return ompt_get_callback_success; \
610 return ompt_get_callback_failure; \
615#undef ompt_event_macro
627 ompt_data_t **parallel_data,
637 return ompt_state_work_serial;
640 if (thread_state == ompt_state_undefined) {
641 thread_state = ompt_state_work_serial;
658 ompt_data_t **task_data,
659 ompt_frame_t **task_frame,
660 ompt_data_t **parallel_data,
665 task_frame, parallel_data, thread_num);
689#if !KMP_AFFINITY_SUPPORTED
692 if (!KMP_AFFINITY_CAPABLE())
694 return __kmp_affinity.num_masks;
701#if !KMP_AFFINITY_SUPPORTED
705 int tmp_ids[ids_size];
706 for (
int j = 0;
j < ids_size;
j++)
708 if (!KMP_AFFINITY_CAPABLE())
710 if (place_num < 0 || place_num >= (
int)__kmp_affinity.num_masks)
714 kmp_affin_mask_t *
mask = KMP_CPU_INDEX(__kmp_affinity.masks, place_num);
716 KMP_CPU_SET_ITERATE(
i,
mask) {
717 if ((!KMP_CPU_ISSET(
i, __kmp_affin_fullMask)) ||
718 (!KMP_CPU_ISSET(
i,
mask))) {
721 if (
count < ids_size)
725 if (ids_size >=
count) {
736#if !KMP_AFFINITY_SUPPORTED
744 if (!KMP_AFFINITY_CAPABLE())
748 if (thread == NULL || thread->th.th_current_place < 0)
750 return thread->th.th_current_place;
757#if !KMP_AFFINITY_SUPPORTED
763 int i, gtid, place_num, first_place, last_place, start,
end;
765 if (!KMP_AFFINITY_CAPABLE())
771 first_place = thread->th.th_first_place;
772 last_place = thread->th.th_last_place;
773 if (first_place < 0 || last_place < 0)
775 if (first_place <= last_place) {
782 if (
end - start <= place_nums_size)
783 for (
i = 0, place_num = start; place_num <=
end; ++place_num, ++
i) {
784 place_nums[
i] = place_num;
786 return end - start + 1;
797#if KMP_HAVE_SCHED_GETCPU
798 return sched_getcpu();
801 GetCurrentProcessorNumberEx(&pn);
802 return 64 * pn.Group + pn.Number;
854 ompt_id_t *target_id,
855 ompt_id_t *host_op_id) {
869#define ompt_interface_fn(fn) \
870 fn##_t fn##_f = fn; \
871 if (strcmp(s, #fn) == 0) \
872 return (ompt_interface_fn_t)fn##_f;
876#undef ompt_interface_fn
889#define provide_fn(fn) \
890 if (strcmp(s, #fn) == 0) \
891 return (ompt_interface_fn_t)fn;
898#define ompt_interface_fn(fn, type, code) \
899 if (strcmp(s, #fn) == 0) \
900 return (ompt_interface_fn_t)ompt_callbacks.ompt_callback(fn);
905#undef ompt_interface_fn
907 return (ompt_interface_fn_t)0;
924 "libomp --> OMPT: Connecting with libomptarget\n");
static ompt_get_task_info_t ompt_get_task_info
static ompt_enumerate_states_t ompt_enumerate_states
static ompt_get_callback_t ompt_get_callback
static ompt_get_place_proc_ids_t ompt_get_place_proc_ids
static ompt_set_callback_t ompt_set_callback
static ompt_get_partition_place_nums_t ompt_get_partition_place_nums
static ompt_get_task_memory_t ompt_get_task_memory
static ompt_get_state_t ompt_get_state
static ompt_get_parallel_info_t ompt_get_parallel_info
static ompt_enumerate_mutex_impls_t ompt_enumerate_mutex_impls
void const char const char int ITT_FORMAT __itt_group_sync s
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t new_size
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int mask
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp end
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t count
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t size
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type size_t void ITT_FORMAT p const __itt_domain __itt_id __itt_string_handle const wchar_t size_t ITT_FORMAT lu const __itt_domain __itt_id __itt_relation __itt_id ITT_FORMAT p const wchar_t int ITT_FORMAT __itt_group_mark d int
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function h
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type type
void __kmp_internal_end_atexit(void)
#define __kmp_entry_gtid()
static kmp_info_t * __kmp_thread_from_gtid(int gtid)
union KMP_ALIGN_CACHE kmp_info kmp_info_t
char * __kmp_str_format(char const *format,...)
char * __kmp_str_token(char *str, char const *delim, char **buf)
void __kmp_str_free(char **str)
struct ompt_start_tool_result_t ompt_start_tool_result_t
int const __kmp_openmp_version
static FILE * verbose_file
_OMP_EXTERN void ompt_libomp_connect(ompt_start_tool_result_t *result)
This function is called by the libomptarget connector to assign callbacks already registered with lib...
kmp_mutex_impl_info_t kmp_mutex_impl_info[]
ompt_callbacks_active_t ompt_enabled
#define OMPT_VERBOSE_INIT_CONTINUED_PRINT(...)
#define ompt_interface_fn(fn)
#define kmp_mutex_impl_macro(name, id)
#define ompt_state_macro(state, code)
static ompt_start_tool_result_t * ompt_try_start_tool(unsigned int omp_version, const char *runtime_version)
#define OMPT_STR_MATCH(haystack, needle)
static ompt_data_t * ompt_get_target_task_data()
OMPT_API_ROUTINE int ompt_get_num_devices(void)
static void * ompt_tool_module
#define OMPT_VERBOSE_INIT_PRINT(...)
ompt_state_info_t ompt_state_info[]
OMPT_API_ROUTINE int ompt_get_proc_id(void)
int omp_get_initial_device(void)
int __kmp_control_tool(uint64_t command, uint64_t modifier, void *arg)
static ompt_interface_fn_t ompt_fn_lookup(const char *s)
#define OMPT_DLCLOSE(Lib)
static ompt_start_tool_result_t * libomptarget_ompt_result
Used to track the initializer and the finalizer provided by libomptarget.
OMPT_API_ROUTINE int ompt_get_num_places(void)
static ompt_interface_fn_t ompt_libomp_target_fn_lookup(const char *s)
Lookup function to query libomp callbacks registered by the tool.
#define ompt_get_callback_failure
static ompt_data_t * ompt_get_task_data()
OMPT_API_ROUTINE void ompt_finalize_tool(void)
OMPT_API_ROUTINE ompt_data_t * ompt_get_thread_data(void)
static ompt_start_tool_result_t * ompt_start_tool_result
#define ompt_event_macro(event_name, callback_type, event_id)
ompt_start_tool_result_t *(* ompt_start_tool_t)(unsigned int, const char *)
OMPT_API_ROUTINE uint64_t ompt_get_unique_id(void)
OMPT_API_ROUTINE int ompt_get_target_info(uint64_t *device_num, ompt_id_t *target_id, ompt_id_t *host_op_id)
ompt_callbacks_internal_t ompt_callbacks
OMPT_API_ROUTINE int ompt_get_num_procs(void)
OMPT_API_ROUTINE int ompt_get_place_num(void)
#define OMPT_WEAK_ATTRIBUTE
int __ompt_get_task_memory_internal(void **addr, size_t *size, int blocknum)
int __ompt_get_state_internal(ompt_wait_id_t *omp_wait_id)
ompt_data_t * __ompt_get_target_task_data()
int __ompt_get_task_info_internal(int ancestor_level, int *type, ompt_data_t **task_data, ompt_frame_t **task_frame, ompt_data_t **parallel_data, int *thread_num)
ompt_data_t * __ompt_get_task_data()
static uint64_t __ompt_get_unique_id_internal()
void __ompt_force_initialization()
ompt_data_t * __ompt_get_thread_data_internal()
int __ompt_get_parallel_info_internal(int ancestor_level, ompt_data_t **parallel_data, int *team_size)