| // RUN: %libomp-compile && %libomp-run | FileCheck %s |
| // REQUIRES: ompt |
| #include "callback.h" |
| #include <omp.h> |
| |
| int main() { |
| #pragma omp parallel num_threads(1) |
| { |
| // ompt_get_callback() |
| ompt_callback_t callback; |
| ompt_get_callback(ompt_callback_thread_begin, &callback); |
| printf("%" PRIu64 ": &on_ompt_callback_thread_begin=%p\n", |
| ompt_get_thread_data()->value, &on_ompt_callback_thread_begin); |
| printf("%" PRIu64 ": ompt_get_callback() result=%p\n", |
| ompt_get_thread_data()->value, callback); |
| |
| // ompt_get_state() |
| printf("%" PRIu64 ": ompt_get_state()=%d\n", ompt_get_thread_data()->value, |
| ompt_get_state(NULL)); |
| |
| // ompt_enumerate_states() |
| int state = ompt_state_undefined; |
| const char *state_name; |
| int steps = 0; |
| while (ompt_enumerate_states(state, &state, &state_name) && steps < 1000) { |
| steps++; |
| if (!state_name) |
| printf("%" PRIu64 ": state_name is NULL\n", |
| ompt_get_thread_data()->value); |
| } |
| if (steps >= 1000) { |
| // enumeration did not end after 1000 steps |
| printf("%" PRIu64 ": states enumeration did not end\n", |
| ompt_get_thread_data()->value); |
| } |
| |
| // ompt_enumerate_mutex_impls() |
| int impl = ompt_mutex_impl_none; |
| const char *impl_name; |
| steps = 0; |
| while (ompt_enumerate_mutex_impls(impl, &impl, &impl_name) && |
| steps < 1000) { |
| steps++; |
| if (!impl_name) |
| printf("%" PRIu64 ": impl_name is NULL\n", |
| ompt_get_thread_data()->value); |
| } |
| if (steps >= 1000) { |
| // enumeration did not end after 1000 steps |
| printf("%" PRIu64 ": mutex_impls enumeration did not end\n", |
| ompt_get_thread_data()->value); |
| } |
| } |
| |
| // Check if libomp supports the callbacks for this test. |
| |
| // CHECK: 0: NULL_POINTER=[[NULL:.*$]] |
| |
| // CHECK: {{^}}[[THREAD_ID:[0-9]+]]: &on_ompt_callback_thread_begin |
| // CHECK-SAME: =[[FUNCTION_POINTER:0x[0-f]+]] |
| // CHECK: {{^}}[[THREAD_ID]]: ompt_get_callback() result=[[FUNCTION_POINTER]] |
| |
| // CHECK: {{^}}[[THREAD_ID]]: ompt_get_state()=1 |
| |
| // CHECK-NOT: {{^}}[[THREAD_ID]]: state_name is NULL |
| // CHECK-NOT: {{^}}[[THREAD_ID]]: states enumeration did not end |
| |
| // CHECK-NOT: {{^}}[[THREAD_ID]]: impl_name is NULL |
| // CHECK-NOT: {{^}}[[THREAD_ID]]: mutex_impls enumeration did not end |
| |
| return 0; |
| } |