forked from OSchip/llvm-project
109 lines
3.9 KiB
C
109 lines
3.9 KiB
C
// 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
|