From f375f4b49a72cf11e512aeaf25c2944d3d0b0a67 Mon Sep 17 00:00:00 2001 From: Joachim Protze Date: Thu, 21 Dec 2017 14:36:30 +0000 Subject: [PATCH] [OMPT] Add missing ompt_get_num_procs function This function is defined in OpenMP-TR6 section 4.1.5.1.6 The functions was not implemented yet. Since ompt-functions can only be called after the runtime was initialized and has loaded a tool, it can assume the runtime to be initialized. In contrast to omp_get_num_procs which needs to check whether the runtime is initialized. Differential Revision: https://reviews.llvm.org/D40949 llvm-svn: 321269 --- openmp/runtime/src/include/50/ompt.h.var | 4 ++++ openmp/runtime/src/ompt-general.cpp | 9 +++++++++ openmp/runtime/test/ompt/callback.h | 2 ++ openmp/runtime/test/ompt/misc/api_calls.c | 6 ++++++ 4 files changed, 21 insertions(+) diff --git a/openmp/runtime/src/include/50/ompt.h.var b/openmp/runtime/src/include/50/ompt.h.var index 0cae6a0f69d4..930822d2269e 100644 --- a/openmp/runtime/src/include/50/ompt.h.var +++ b/openmp/runtime/src/include/50/ompt.h.var @@ -32,6 +32,7 @@ macro (ompt_get_thread_data) \ macro (ompt_get_unique_id) \ \ + macro(ompt_get_num_procs) \ macro(ompt_get_num_places) \ macro(ompt_get_place_proc_ids) \ macro(ompt_get_place_num) \ @@ -582,6 +583,9 @@ OMPT_API_FUNCTION(int, ompt_get_task_info, ( int *thread_num )); +/* procs */ +OMPT_API_FUNCTION(int, ompt_get_num_procs, (void)); + /* places */ OMPT_API_FUNCTION(int, ompt_get_num_places, (void)); diff --git a/openmp/runtime/src/ompt-general.cpp b/openmp/runtime/src/ompt-general.cpp index 9f21214f8084..7e1c67a7c26c 100644 --- a/openmp/runtime/src/ompt-general.cpp +++ b/openmp/runtime/src/ompt-general.cpp @@ -490,6 +490,15 @@ OMPT_API_ROUTINE int ompt_get_task_info(int ancestor_level, int *type, task_frame, parallel_data, thread_num); } +/***************************************************************************** + * num_procs + ****************************************************************************/ + +OMPT_API_ROUTINE int ompt_get_num_procs(void) { +// copied from kmp_ftn_entry.h (but modified: OMPT can only be called when runtime is initialized) + return __kmp_avail_proc; +} + /***************************************************************************** * places ****************************************************************************/ diff --git a/openmp/runtime/test/ompt/callback.h b/openmp/runtime/test/ompt/callback.h index b013e897f018..6dc8834cffd2 100755 --- a/openmp/runtime/test/ompt/callback.h +++ b/openmp/runtime/test/ompt/callback.h @@ -37,6 +37,7 @@ static ompt_get_task_info_t ompt_get_task_info; static ompt_get_thread_data_t ompt_get_thread_data; static ompt_get_parallel_info_t ompt_get_parallel_info; static ompt_get_unique_id_t ompt_get_unique_id; +static ompt_get_num_procs_t ompt_get_num_procs; static ompt_get_num_places_t ompt_get_num_places; static ompt_get_place_proc_ids_t ompt_get_place_proc_ids; static ompt_get_place_num_t ompt_get_place_num; @@ -684,6 +685,7 @@ int ompt_initialize( ompt_get_parallel_info = (ompt_get_parallel_info_t) lookup("ompt_get_parallel_info"); ompt_get_unique_id = (ompt_get_unique_id_t) lookup("ompt_get_unique_id"); + ompt_get_num_procs = (ompt_get_num_procs_t) lookup("ompt_get_num_procs"); ompt_get_num_places = (ompt_get_num_places_t) lookup("ompt_get_num_places"); ompt_get_place_proc_ids = (ompt_get_place_proc_ids_t) lookup("ompt_get_place_proc_ids"); ompt_get_place_num = (ompt_get_place_num_t) lookup("ompt_get_place_num"); diff --git a/openmp/runtime/test/ompt/misc/api_calls.c b/openmp/runtime/test/ompt/misc/api_calls.c index f7f1e16aa6d6..a41de0863162 100644 --- a/openmp/runtime/test/ompt/misc/api_calls.c +++ b/openmp/runtime/test/ompt/misc/api_calls.c @@ -43,6 +43,9 @@ int main() printf("%" PRIu64 ": sched_getcpu()=%d\n", ompt_get_thread_data()->value, sched_getcpu()); printf("%" PRIu64 ": ompt_get_proc_id()=%d\n", ompt_get_thread_data()->value, ompt_get_proc_id()); + + printf("%" PRIu64 ": omp_get_num_procs()=%d\n", ompt_get_thread_data()->value, omp_get_num_procs()); + printf("%" PRIu64 ": ompt_get_num_procs()=%d\n", ompt_get_thread_data()->value, ompt_get_num_procs()); } // Check if libomp supports the callbacks for this test. @@ -61,6 +64,9 @@ int main() // CHECK: {{^}}[[MASTER_ID]]: sched_getcpu()=[[CPU_ID:[0-9]+]] // CHECK: {{^}}[[MASTER_ID]]: ompt_get_proc_id()=[[CPU_ID]] + // CHECK: {{^}}[[MASTER_ID]]: omp_get_num_procs()=[[NUM_PROCS:[-]?[0-9]+]] + // CHECK: {{^}}[[MASTER_ID]]: ompt_get_num_procs()=[[NUM_PROCS]] + return 0; }