From 8170a83c0284cb7c17745a1fb26a56a16563d866 Mon Sep 17 00:00:00 2001 From: grypp Date: Wed, 17 Oct 2018 10:47:07 +0200 Subject: [PATCH 1/3] Flang extensions --- libomptarget/CMakeLists.txt | 7 +++ libomptarget/deviceRTLs/nvptx/src/interface.h | 30 +++++++++ libomptarget/deviceRTLs/nvptx/src/libcall.cu | 63 +++++++++++++++++++ 3 files changed, 100 insertions(+) diff --git a/libomptarget/CMakeLists.txt b/libomptarget/CMakeLists.txt index 3d9c78a72..ad0afb47d 100644 --- a/libomptarget/CMakeLists.txt +++ b/libomptarget/CMakeLists.txt @@ -53,6 +53,13 @@ if(LIBOMPTARGET_CMAKE_BUILD_TYPE MATCHES debug) add_definitions(-O0) endif() +set(LIBOMPTARGET_FLANG_API FALSE CACHE BOOL + "Build API for Flang.") +if(${LIBOMPTARGET_FLANG_API}) + add_definitions(-DFLANG_API) + libomptarget_say("Building OpenMP API for FLANG.") +endif() + include_directories(include) # Build target agnostic offloading library. diff --git a/libomptarget/deviceRTLs/nvptx/src/interface.h b/libomptarget/deviceRTLs/nvptx/src/interface.h index 680df48d4..b23bf7053 100644 --- a/libomptarget/deviceRTLs/nvptx/src/interface.h +++ b/libomptarget/deviceRTLs/nvptx/src/interface.h @@ -88,6 +88,36 @@ EXTERN int omp_is_initial_device(void); EXTERN int omp_get_initial_device(void); EXTERN int omp_get_max_task_priority(void); + +#ifdef FLANG_API +EXTERN double omp_get_wtick_(void); +EXTERN double omp_get_wtime_(void); +EXTERN int omp_get_num_threads_(void); +EXTERN int omp_get_max_threads_(void); +EXTERN int omp_get_thread_limit_(void); +EXTERN int omp_get_thread_num_(void); +EXTERN int omp_get_num_procs_(void); +EXTERN int omp_in_parallel_(void); +EXTERN int omp_in_final_(void); +EXTERN int omp_get_nested_(void); +EXTERN int omp_get_max_active_levels_(void); +EXTERN int omp_get_level_(void); +EXTERN int omp_get_active_level_(void); +EXTERN int omp_get_ancestor_thread_num_(int level); +EXTERN int omp_get_team_size_(int level); +EXTERN int omp_get_default_device_(void); +EXTERN int omp_get_num_devices_(void); +EXTERN int omp_get_num_teams_(void); +EXTERN int omp_get_team_num_(void); +EXTERN void omp_get_schedule_(omp_sched_t *kind, int *modifier); +EXTERN int omp_get_initial_device_(void); +EXTERN int omp_get_max_task_priority_(void); +EXTERN int omp_get_cancellation_(void); +EXTERN int omp_get_dynamic_(void); +EXTERN void omp_lib_osnt4_(int num); +EXTERN void omp_lib_osmal4_(int level); +#endif + //////////////////////////////////////////////////////////////////////////////// // OMPTARGET_NVPTX private (debug / temportary?) interface //////////////////////////////////////////////////////////////////////////////// diff --git a/libomptarget/deviceRTLs/nvptx/src/libcall.cu b/libomptarget/deviceRTLs/nvptx/src/libcall.cu index 15040dbaf..7e04f9160 100644 --- a/libomptarget/deviceRTLs/nvptx/src/libcall.cu +++ b/libomptarget/deviceRTLs/nvptx/src/libcall.cu @@ -460,3 +460,66 @@ EXTERN void xlf_debug_print_double(double *p) { EXTERN void xlf_debug_print_addr(void *p) { printf("xlf DEBUG %d): %p \n", omp_get_team_num(), p); } + + +#ifdef FLANG_API +EXTERN double omp_get_wtick_(void) { return omp_get_wtick(); } + +EXTERN double omp_get_wtime_(void) { return omp_get_wtime(); } + +EXTERN int omp_get_num_threads_(void) { return omp_get_num_threads(); } + +EXTERN int omp_get_max_threads_(void) { return omp_get_max_threads(); } + +EXTERN int omp_get_thread_limit_(void) { return omp_get_thread_limit(); } + +EXTERN int omp_get_thread_num_(void) { return omp_get_thread_num(); } + +EXTERN int omp_get_num_procs_(void) { return omp_get_num_procs(); } + +EXTERN int omp_in_parallel_(void) { return omp_in_parallel(); } + +EXTERN int omp_in_final_(void) { return omp_in_final(); } + +EXTERN int omp_get_nested_(void) { return omp_get_nested(); } + +EXTERN int omp_get_max_active_levels_(void) { + return omp_get_max_active_levels(); +} + +EXTERN int omp_get_level_(void) { return omp_get_level(); } + +EXTERN int omp_get_active_level_(void) { return omp_get_active_level(); } + +EXTERN int omp_get_ancestor_thread_num_(int level) { + return omp_get_ancestor_thread_num(level); +} + +EXTERN int omp_get_team_size_(int level) { return omp_get_team_size(level); } + +EXTERN int omp_get_default_device_(void) { return omp_get_default_device(); } + +EXTERN int omp_get_num_devices_(void) { return omp_get_num_devices(); } + +EXTERN int omp_get_num_teams_(void) { return omp_get_num_teams(); } + +EXTERN int omp_get_team_num_(void) { return omp_get_team_num(); } + +EXTERN void omp_get_schedule_(omp_sched_t *kind, int *modifier) { + return omp_get_schedule(kind, modifier); +} + +EXTERN int omp_get_initial_device_(void) { return omp_get_initial_device(); } + +EXTERN int omp_get_max_task_priority_(void) { + return omp_get_max_task_priority(); +} + +EXTERN int omp_get_cancellation_(void) { return omp_get_cancellation(); } + +EXTERN int omp_get_dynamic_(void) { return omp_get_dynamic(); } + +EXTERN void omp_lib_osnt4_(int num) { omp_set_num_threads(num); } + +EXTERN void omp_lib_osmal4_(int level) { omp_set_max_active_levels(level); } +#endif \ No newline at end of file From 57c3f8179e49f6f961dcdad5e71acb75d5079435 Mon Sep 17 00:00:00 2001 From: grypp Date: Tue, 27 Nov 2018 10:10:51 +0100 Subject: [PATCH 2/3] Changed wrapper library routines of fortran from pass-by-value to pass-by-reference as fortran always pass arguments by reference. --- libomptarget/deviceRTLs/nvptx/src/libcall.cu | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libomptarget/deviceRTLs/nvptx/src/libcall.cu b/libomptarget/deviceRTLs/nvptx/src/libcall.cu index 7e04f9160..96f607214 100644 --- a/libomptarget/deviceRTLs/nvptx/src/libcall.cu +++ b/libomptarget/deviceRTLs/nvptx/src/libcall.cu @@ -491,11 +491,11 @@ EXTERN int omp_get_level_(void) { return omp_get_level(); } EXTERN int omp_get_active_level_(void) { return omp_get_active_level(); } -EXTERN int omp_get_ancestor_thread_num_(int level) { - return omp_get_ancestor_thread_num(level); +EXTERN int omp_get_ancestor_thread_num_(int* level) { + return omp_get_ancestor_thread_num(*level); } -EXTERN int omp_get_team_size_(int level) { return omp_get_team_size(level); } +EXTERN int omp_get_team_size_(int* level) { return omp_get_team_size(*level); } EXTERN int omp_get_default_device_(void) { return omp_get_default_device(); } @@ -519,7 +519,7 @@ EXTERN int omp_get_cancellation_(void) { return omp_get_cancellation(); } EXTERN int omp_get_dynamic_(void) { return omp_get_dynamic(); } -EXTERN void omp_lib_osnt4_(int num) { omp_set_num_threads(num); } +EXTERN void omp_lib_osnt4_(int* num) { omp_set_num_threads(*num); } -EXTERN void omp_lib_osmal4_(int level) { omp_set_max_active_levels(level); } -#endif \ No newline at end of file +EXTERN void omp_lib_osmal4_(int* level) { omp_set_max_active_levels(*level); } +#endif From 816b1f1ca27ee9c3410f06fd710ada62dae8735a Mon Sep 17 00:00:00 2001 From: grypp Date: Tue, 27 Nov 2018 10:13:37 +0100 Subject: [PATCH 3/3] Added a newline to avoid compiler complaints --- libomptarget/deviceRTLs/nvptx/src/libcall.cu | 1 + 1 file changed, 1 insertion(+) diff --git a/libomptarget/deviceRTLs/nvptx/src/libcall.cu b/libomptarget/deviceRTLs/nvptx/src/libcall.cu index 96f607214..aedfed242 100644 --- a/libomptarget/deviceRTLs/nvptx/src/libcall.cu +++ b/libomptarget/deviceRTLs/nvptx/src/libcall.cu @@ -523,3 +523,4 @@ EXTERN void omp_lib_osnt4_(int* num) { omp_set_num_threads(*num); } EXTERN void omp_lib_osmal4_(int* level) { omp_set_max_active_levels(*level); } #endif +