summaryrefslogtreecommitdiffstats
path: root/openmp/runtime/test/ompt/tasks/task_memory.c
diff options
context:
space:
mode:
Diffstat (limited to 'openmp/runtime/test/ompt/tasks/task_memory.c')
-rw-r--r--openmp/runtime/test/ompt/tasks/task_memory.c108
1 files changed, 108 insertions, 0 deletions
diff --git a/openmp/runtime/test/ompt/tasks/task_memory.c b/openmp/runtime/test/ompt/tasks/task_memory.c
new file mode 100644
index 00000000000..a48cef22bf4
--- /dev/null
+++ b/openmp/runtime/test/ompt/tasks/task_memory.c
@@ -0,0 +1,108 @@
+// RUN: %libomp-compile-and-run | FileCheck %s
+// REQUIRES: ompt
+// UNSUPPORTED: gcc-4, gcc-5, gcc-6, gcc-7
+#define USE_PRIVATE_TOOL 1
+#include "callback.h"
+#include <omp.h>
+
+int main() {
+ int x;
+#pragma omp parallel num_threads(2)
+ {
+#pragma omp master
+ {
+#pragma omp task
+ { x++; }
+#pragma omp task firstprivate(x)
+ { x++; }
+ }
+ }
+
+ return 0;
+}
+
+static void on_ompt_callback_implicit_task(ompt_scope_endpoint_t endpoint,
+ ompt_data_t *parallel_data,
+ ompt_data_t *task_data,
+ unsigned int team_size,
+ unsigned int thread_num, int flag) {
+ void *addr = NULL;
+ size_t size = 0;
+ int result = ompt_get_task_memory(&addr, &size, 0);
+ switch (endpoint) {
+ case ompt_scope_begin:
+ task_data->value = ompt_get_unique_id();
+ printf("ompt_event_implicit_task_begin: task_id=%" PRIu64
+ ", memory_addr=%p, memory_size=%lu, result=%d \n",
+ task_data->value, addr, size, result);
+ break;
+ case ompt_scope_end:
+ printf("ompt_event_implicit_task_end: task_id=%" PRIu64
+ ", memory_addr=%p, memory_size=%lu, result=%d \n",
+ task_data->value, addr, size, result);
+ break;
+ }
+}
+
+static void
+on_ompt_callback_task_create(ompt_data_t *encountering_task_data,
+ const ompt_frame_t *encountering_task_frame,
+ ompt_data_t *new_task_data, int flags,
+ int has_dependences, const void *codeptr_ra) {
+ if (flags & ompt_task_initial)
+ return; // not interested in the initial task
+ new_task_data->value = ompt_get_unique_id();
+ void *addr = NULL;
+ size_t size = 0;
+ printf("ompt_event_task_create: task_id=%" PRIu64 "\n", new_task_data->value);
+}
+
+static void on_ompt_callback_task_schedule(ompt_data_t *first_task_data,
+ ompt_task_status_t prior_task_status,
+ ompt_data_t *second_task_data) {
+ void *addr = NULL;
+ size_t size = 0;
+ int result = ompt_get_task_memory(&addr, &size, 0);
+ printf("ompt_event_task_schedule: task_id=%" PRIu64
+ ", memory_addr=%p, memory_size=%lu, result=%d\n",
+ first_task_data->value, addr, size, result);
+}
+
+int ompt_initialize(ompt_function_lookup_t lookup, int initial_device_num,
+ ompt_data_t *tool_data) {
+ ompt_set_callback = (ompt_set_callback_t)lookup("ompt_set_callback");
+ ompt_get_unique_id = (ompt_get_unique_id_t)lookup("ompt_get_unique_id");
+ ompt_get_task_memory = (ompt_get_task_memory_t)lookup("ompt_get_task_memory");
+
+ register_callback(ompt_callback_implicit_task);
+ register_callback(ompt_callback_task_create);
+ register_callback(ompt_callback_task_schedule);
+ printf("0: NULL_POINTER=%p\n", (void *)NULL);
+ return 1; // success
+}
+
+void ompt_finalize(ompt_data_t *tool_data) {}
+
+ompt_start_tool_result_t *ompt_start_tool(unsigned int omp_version,
+ const char *runtime_version) {
+ static ompt_start_tool_result_t ompt_start_tool_result = {&ompt_initialize,
+ &ompt_finalize, 0};
+ return &ompt_start_tool_result;
+}
+
+// CHECK: {{^}}0: NULL_POINTER=[[NULL:.*$]]
+
+// CHECK: ompt_event_implicit_task_begin: task_id=[[TASK_ID:[0-9]+]]
+// CHECK-SAME: memory_addr=[[NULL]], memory_size=0, result=0
+
+// CHECK: ompt_event_task_create: task_id=[[TASK_ID_0:[0-9]+]]
+// CHECK: ompt_event_task_create: task_id=[[TASK_ID_1:[0-9]+]]
+
+// Expects non-zero address, size, and result
+// CHECK-DAG: ompt_event_task_schedule: task_id=[[TASK_ID_0]],
+// memory_addr=0x{{[0-f]+}}, memory_size={{[1-9][0-9]*}}, result=1
+// CHECK-DAG: ompt_event_task_schedule: task_id=[[TASK_ID_1]],
+// memory_addr=0x{{[0-f]+}}, memory_size={{[1-9][0-9]*}}, result=1
+
+// CHECK: ompt_event_implicit_task_end: task_id=[[TASK_ID]]
+// CHECK-SAME: memory_addr=[[NULL]], memory_size=0, result=0
OpenPOWER on IntegriCloud