diff options
Diffstat (limited to 'openmp/runtime/src')
-rw-r--r-- | openmp/runtime/src/ompt-general.cpp | 7 | ||||
-rw-r--r-- | openmp/runtime/src/ompt-specific.cpp | 29 |
2 files changed, 31 insertions, 5 deletions
diff --git a/openmp/runtime/src/ompt-general.cpp b/openmp/runtime/src/ompt-general.cpp index 55a96a4ee50..00bf606bb1d 100644 --- a/openmp/runtime/src/ompt-general.cpp +++ b/openmp/runtime/src/ompt-general.cpp @@ -524,8 +524,7 @@ OMPT_API_ROUTINE int ompt_get_task_info(int ancestor_level, int *type, OMPT_API_ROUTINE int ompt_get_task_memory(void **addr, size_t *size, int block) { - // stub - return 0; + return __ompt_get_task_memory_internal(addr, size, block); } /***************************************************************************** @@ -700,9 +699,7 @@ OMPT_API_ROUTINE uint64_t ompt_get_unique_id(void) { return __ompt_get_unique_id_internal(); } -OMPT_API_ROUTINE void ompt_finalize_tool(void) { - // stub -} +OMPT_API_ROUTINE void ompt_finalize_tool(void) { __kmp_internal_end_atexit(); } /***************************************************************************** * Target diff --git a/openmp/runtime/src/ompt-specific.cpp b/openmp/runtime/src/ompt-specific.cpp index c69cb46a4ea..99c4b6118cb 100644 --- a/openmp/runtime/src/ompt-specific.cpp +++ b/openmp/runtime/src/ompt-specific.cpp @@ -427,6 +427,35 @@ int __ompt_get_task_info_internal(int ancestor_level, int *type, return 0; } +int __ompt_get_task_memory_internal(void **addr, size_t *size, int blocknum) { + if (blocknum != 0) + return 0; // support only a single block + + kmp_info_t *thr = ompt_get_thread(); + kmp_taskdata_t *taskdata = thr->th.th_current_task; + kmp_task_t *task = KMP_TASKDATA_TO_TASK(taskdata); + + if (taskdata->td_flags.tasktype != TASK_EXPLICIT) + return 0; // support only explicit task + + void *ret_addr; + int64_t ret_size = taskdata->td_size_alloc - sizeof(kmp_taskdata_t); + + // kmp_task_t->data1 is an optional member + if (taskdata->td_flags.destructors_thunk) + ret_addr = &task->data1 + 1; + else + ret_addr = &task->part_id + 1; + + ret_size -= (char *)(ret_addr) - (char *)(task); + if (ret_size < 0) + return 0; + + *addr = ret_addr; + *size = ret_size; + return 1; +} + //---------------------------------------------------------- // team support //---------------------------------------------------------- |