summaryrefslogtreecommitdiffstats
path: root/openmp/runtime/src
diff options
context:
space:
mode:
Diffstat (limited to 'openmp/runtime/src')
-rw-r--r--openmp/runtime/src/ompt-general.cpp7
-rw-r--r--openmp/runtime/src/ompt-specific.cpp29
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
//----------------------------------------------------------
OpenPOWER on IntegriCloud