Index: openmp/trunk/libomptarget/test/api/omp_get_num_devices.c =================================================================== --- openmp/trunk/libomptarget/test/api/omp_get_num_devices.c +++ openmp/trunk/libomptarget/test/api/omp_get_num_devices.c @@ -0,0 +1,36 @@ +// RUN: %libomptarget-compile-run-and-check-aarch64-unknown-linux-gnu +// RUN: %libomptarget-compile-run-and-check-powerpc64-ibm-linux-gnu +// RUN: %libomptarget-compile-run-and-check-powerpc64le-ibm-linux-gnu +// RUN: %libomptarget-compile-run-and-check-x86_64-pc-linux-gnu + +#include +#include + +int test_omp_get_num_devices() +{ + /* checks that omp_get_num_devices() > 0 */ + int num_devices = omp_get_num_devices(); + printf("num_devices = %d\n", num_devices); + + #pragma omp target + {} + + return (num_devices > 0); +} + +int main() +{ + int i; + int failed=0; + + if (!test_omp_get_num_devices()) { + failed++; + } + if (failed) + printf("FAIL\n"); + else + printf("PASS\n"); + return failed; +} + +// CHECK: PASS Index: openmp/trunk/runtime/src/dllexports =================================================================== --- openmp/trunk/runtime/src/dllexports +++ openmp/trunk/runtime/src/dllexports @@ -510,9 +510,7 @@ omp_is_initial_device 869 omp_set_default_device 879 omp_get_default_device 880 - %ifdef stub - omp_get_num_devices 881 - %endif + omp_get_num_devices 881 %endif # OMP_40 # OpenMP 45 @@ -527,8 +525,8 @@ omp_get_place_num 876 omp_get_partition_num_places 877 omp_get_partition_place_nums 878 + omp_get_initial_device 882 %ifdef stub - omp_get_initial_device 882 omp_target_alloc 883 omp_target_free 884 omp_target_is_present 885 @@ -547,6 +545,7 @@ omp_get_default_allocator 893 omp_alloc 894 omp_free 895 + omp_get_device_num 896 omp_set_affinity_format 748 omp_get_affinity_format 749 omp_display_affinity 750 Index: openmp/trunk/runtime/src/include/45/omp.h.var =================================================================== --- openmp/trunk/runtime/src/include/45/omp.h.var +++ openmp/trunk/runtime/src/include/45/omp.h.var @@ -195,4 +195,3 @@ # endif #endif /* __OMP_H */ - Index: openmp/trunk/runtime/src/include/45/omp_lib.h.var =================================================================== --- openmp/trunk/runtime/src/include/45/omp_lib.h.var +++ openmp/trunk/runtime/src/include/45/omp_lib.h.var @@ -523,6 +523,7 @@ !DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_default_device !DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_default_device !DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_is_initial_device +!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_initial_device !DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_num_devices !DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_num_teams !DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_team_num @@ -595,6 +596,7 @@ !$omp declare target(omp_get_default_device ) !$omp declare target(omp_set_default_device ) !$omp declare target(omp_is_initial_device ) +!$omp declare target(omp_get_initial_device ) !$omp declare target(omp_get_num_devices ) !$omp declare target(omp_get_num_teams ) !$omp declare target(omp_get_team_num ) @@ -641,4 +643,3 @@ !$omp declare target(omp_init_nest_lock_with_hint ) !DIR$ ENDIF !DIR$ ENDIF - Index: openmp/trunk/runtime/src/include/45/omp_lib.f.var =================================================================== --- openmp/trunk/runtime/src/include/45/omp_lib.f.var +++ openmp/trunk/runtime/src/include/45/omp_lib.f.var @@ -562,6 +562,7 @@ !dec$ attributes alias:'OMP_GET_TEAM_NUM' :: omp_get_team_num !dec$ attributes alias:'OMP_GET_CANCELLATION' :: omp_get_cancellation !dec$ attributes alias:'OMP_IS_INITIAL_DEVICE' :: omp_is_initial_device +!dec$ attributes alias:'OMP_GET_INITIAL_DEVICE' :: omp_get_initial_device !dec$ attributes alias:'OMP_GET_MAX_TASK_PRIORITY' :: omp_get_max_task_priority !dec$ attributes alias:'omp_init_lock' :: omp_init_lock @@ -642,6 +643,7 @@ !dec$ attributes alias:'_OMP_GET_TEAM_NUM' :: omp_get_team_num !dec$ attributes alias:'_OMP_GET_CANCELLATION' :: omp_get_cancellation !dec$ attributes alias:'_OMP_IS_INITIAL_DEVICE' :: omp_is_initial_device +!dec$ attributes alias:'_OMP_GET_INITIAL_DEVICE' :: omp_get_initial_device !dec$ attributes alias:'_OMP_GET_MAX_TASK_PRIORTY' :: omp_get_max_task_priority !dec$ attributes alias:'_omp_init_lock' :: omp_init_lock @@ -725,6 +727,7 @@ !dec$ attributes alias:'omp_get_team_num_'::omp_get_team_num !dec$ attributes alias:'omp_get_cancellation_'::omp_get_cancellation !dec$ attributes alias:'omp_is_initial_device_'::omp_is_initial_device +!dec$ attributes alias:'omp_get_initial_device_'::omp_get_initial_device !dec$ attributes alias:'omp_get_max_task_priority_'::omp_get_max_task_priority !dec$ attributes alias:'omp_init_lock_'::omp_init_lock @@ -800,10 +803,14 @@ !dec$ attributes alias:'_omp_get_proc_bind_' :: omp_get_proc_bind !dec$ attributes alias:'_omp_get_wtime_'::omp_get_wtime !dec$ attributes alias:'_omp_get_wtick_'::omp_get_wtick +!dec$ attributes alias:'_omp_get_default_device_'::omp_get_default_device +!dec$ attributes alias:'_omp_set_default_device_'::omp_set_default_device +!dec$ attributes alias:'_omp_get_num_devices_'::omp_get_num_devices !dec$ attributes alias:'_omp_get_num_teams_'::omp_get_num_teams !dec$ attributes alias:'_omp_get_team_num_'::omp_get_team_num !dec$ attributes alias:'_omp_get_cancellation_'::omp_get_cancellation !dec$ attributes alias:'_omp_is_initial_device_'::omp_is_initial_device +!dec$ attributes alias:'_omp_get_initial_device_'::omp_get_initial_device !dec$ attributes alias:'_omp_get_max_task_priorty_'::omp_get_max_task_priority !dec$ attributes alias:'_omp_init_lock_'::omp_init_lock @@ -852,4 +859,3 @@ !dec$ endif end module omp_lib - Index: openmp/trunk/runtime/src/include/50/omp.h.var =================================================================== --- openmp/trunk/runtime/src/include/50/omp.h.var +++ openmp/trunk/runtime/src/include/50/omp.h.var @@ -146,6 +146,9 @@ extern int __KAI_KMPC_CONVENTION omp_target_associate_ptr(void *, void *, size_t, size_t, int); extern int __KAI_KMPC_CONVENTION omp_target_disassociate_ptr(void *, int); + /* OpenMP 5.0 */ + extern int __KAI_KMPC_CONVENTION omp_get_device_num (void); + /* kmp API functions */ extern int __KAI_KMPC_CONVENTION kmp_get_stacksize (void); extern void __KAI_KMPC_CONVENTION kmp_set_stacksize (int); @@ -260,4 +263,3 @@ # endif #endif /* __OMP_H */ - Index: openmp/trunk/runtime/src/include/50/omp_lib.h.var =================================================================== --- openmp/trunk/runtime/src/include/50/omp_lib.h.var +++ openmp/trunk/runtime/src/include/50/omp_lib.h.var @@ -327,6 +327,11 @@ integer (kind=omp_integer_kind) omp_get_initial_device end function omp_get_initial_device + function omp_get_device_num() bind(c) + import + integer (kind=omp_integer_kind) omp_get_device_num + end function omp_get_device_num + subroutine omp_init_lock(svar) bind(c) !DIR$ IF(__INTEL_COMPILER.GE.1400) !DIR$ attributes known_intrinsic :: omp_init_lock @@ -644,7 +649,9 @@ !DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_default_device !DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_default_device !DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_is_initial_device +!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_initial_device !DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_num_devices +!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_device_num !DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_num_teams !DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_team_num !DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_init_lock @@ -721,7 +728,9 @@ !$omp declare target(omp_get_default_device ) !$omp declare target(omp_set_default_device ) !$omp declare target(omp_is_initial_device ) +!$omp declare target(omp_get_initial_device ) !$omp declare target(omp_get_num_devices ) +!$omp declare target(omp_get_device_num ) !$omp declare target(omp_get_num_teams ) !$omp declare target(omp_get_team_num ) !$omp declare target(omp_init_lock ) Index: openmp/trunk/runtime/src/include/50/omp_lib.f.var =================================================================== --- openmp/trunk/runtime/src/include/50/omp_lib.f.var +++ openmp/trunk/runtime/src/include/50/omp_lib.f.var @@ -278,6 +278,11 @@ integer (kind=omp_integer_kind) omp_get_initial_device end function omp_get_initial_device + function omp_get_device_num() + use omp_lib_kinds + integer (kind=omp_integer_kind) omp_get_device_num + end function omp_get_device_num + subroutine omp_init_lock(svar) !DIR$ IF(__INTEL_COMPILER.GE.1400) !DIR$ attributes known_intrinsic :: omp_init_lock @@ -613,7 +618,9 @@ !dec$ attributes alias:'OMP_GET_TEAM_NUM' :: omp_get_team_num !dec$ attributes alias:'OMP_GET_CANCELLATION' :: omp_get_cancellation !dec$ attributes alias:'OMP_IS_INITIAL_DEVICE' :: omp_is_initial_device +!dec$ attributes alias:'OMP_GET_INITIAL_DEVICE' :: omp_get_initial_device !dec$ attributes alias:'OMP_GET_MAX_TASK_PRIORITY' :: omp_get_max_task_priority +!dec$ attributes alias:'OMP_GET_DEVICE_NUM' :: omp_get_device_num !dec$ attributes alias:'OMP_CONTROL_TOOL' :: omp_control_tool !dec$ attributes alias:'OMP_SET_AFFINITY_FORMAT' :: omp_set_affinity_format !dec$ attributes alias:'OMP_GET_AFFINITY_FORMAT' :: omp_get_affinity_format @@ -698,7 +705,9 @@ !dec$ attributes alias:'_OMP_GET_TEAM_NUM' :: omp_get_team_num !dec$ attributes alias:'_OMP_GET_CANCELLATION' :: omp_get_cancellation !dec$ attributes alias:'_OMP_IS_INITIAL_DEVICE' :: omp_is_initial_device +!dec$ attributes alias:'_OMP_GET_INITIAL_DEVICE' :: omp_get_initial_device !dec$ attributes alias:'_OMP_GET_MAX_TASK_PRIORTY' :: omp_get_max_task_priority +!dec$ attributes alias:'_OMP_GET_DEVICE_NUM' :: omp_get_device_num !dec$ attributes alias:'_OMP_CONTROL_TOOL' :: omp_control_tool !dec$ attributes alias:'_OMP_SET_AFFINITY_FORMAT' :: omp_set_affinity_format !dec$ attributes alias:'_OMP_GET_AFFINITY_FORMAT' :: omp_get_affinity_format @@ -786,7 +795,9 @@ !dec$ attributes alias:'omp_get_team_num_'::omp_get_team_num !dec$ attributes alias:'omp_get_cancellation_'::omp_get_cancellation !dec$ attributes alias:'omp_is_initial_device_'::omp_is_initial_device +!dec$ attributes alias:'omp_get_initial_device_'::omp_get_initial_device !dec$ attributes alias:'omp_get_max_task_priority_'::omp_get_max_task_priority +!dec$ attributes alias:'omp_get_device_num_'::omp_get_device_num !dec$ attributes alias:'omp_set_affinity_format_' :: omp_set_affinity_format !dec$ attributes alias:'omp_get_affinity_format_' :: omp_get_affinity_format !dec$ attributes alias:'omp_display_affinity_' :: omp_display_affinity @@ -866,12 +877,16 @@ !dec$ attributes alias:'_omp_get_proc_bind_' :: omp_get_proc_bind !dec$ attributes alias:'_omp_get_wtime_'::omp_get_wtime !dec$ attributes alias:'_omp_get_wtick_'::omp_get_wtick +!dec$ attributes alias:'_omp_get_default_device_'::omp_get_default_device +!dec$ attributes alias:'_omp_set_default_device_'::omp_set_default_device +!dec$ attributes alias:'_omp_get_num_devices_'::omp_get_num_devices !dec$ attributes alias:'_omp_get_num_teams_'::omp_get_num_teams !dec$ attributes alias:'_omp_get_team_num_'::omp_get_team_num !dec$ attributes alias:'_omp_get_cancellation_'::omp_get_cancellation !dec$ attributes alias:'_omp_is_initial_device_'::omp_is_initial_device +!dec$ attributes alias:'_omp_get_initial_device_'::omp_get_initial_device !dec$ attributes alias:'_omp_get_max_task_priorty_'::omp_get_max_task_priority - +!dec$ attributes alias:'_omp_get_device_num_'::omp_get_device_num !dec$ attributes alias:'_omp_init_lock_'::omp_init_lock !dec$ attributes alias:'_omp_init_lock_with_hint_'::omp_init_lock_with_hint !dec$ attributes alias:'_omp_destroy_lock_'::omp_destroy_lock @@ -923,4 +938,3 @@ !dec$ endif end module omp_lib - Index: openmp/trunk/runtime/src/include/50/omp_lib.f90.var =================================================================== --- openmp/trunk/runtime/src/include/50/omp_lib.f90.var +++ openmp/trunk/runtime/src/include/50/omp_lib.f90.var @@ -294,6 +294,11 @@ integer (kind=omp_integer_kind) omp_get_initial_device end function omp_get_initial_device + function omp_get_device_num() bind(c) + use omp_lib_kinds + integer (kind=omp_integer_kind) omp_get_device_num + end function omp_get_device_num + subroutine omp_init_lock(svar) bind(c) !DIR$ IF(__INTEL_COMPILER.GE.1400) !DIR$ attributes known_intrinsic :: omp_init_lock Index: openmp/trunk/runtime/src/kmp.h =================================================================== --- openmp/trunk/runtime/src/kmp.h +++ openmp/trunk/runtime/src/kmp.h @@ -4000,6 +4000,13 @@ extern int __kmpc_get_target_offload(); #endif +#if OMP_40_ENABLED +// Constants used in libomptarget +#define KMP_DEVICE_DEFAULT -1 // This is libomptarget's default device. +#define KMP_HOST_DEVICE -10 // This is what it is in libomptarget, go figure. +#define KMP_DEVICE_ALL -11 // This is libomptarget's "all devices". +#endif // OMP_40_ENABLED + #ifdef __cplusplus } #endif Index: openmp/trunk/runtime/src/kmp_ftn_entry.h =================================================================== --- openmp/trunk/runtime/src/kmp_ftn_entry.h +++ openmp/trunk/runtime/src/kmp_ftn_entry.h @@ -944,39 +944,53 @@ #endif } -#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB) - -int FTN_STDCALL FTN_GET_NUM_DEVICES(void) { return 0; } - -#endif // KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB) - -#if !KMP_OS_LINUX - -int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void) { return 1; } - +// Get number of NON-HOST devices. +// libomptarget, if loaded, provides this function in api.cpp. +int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_DEVICES)(void) KMP_WEAK_ATTRIBUTE; +int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_DEVICES)(void) { +#if KMP_MIC || KMP_OS_DARWIN || KMP_OS_WINDOWS || defined(KMP_STUB) + return 0; #else - -// This internal function is used when the entry from the offload library -// is not found. -int _Offload_get_device_number(void) KMP_WEAK_ATTRIBUTE; - -int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void) { - if (_Offload_get_device_number) { - return _Offload_get_device_number() == -1; - } else { - return 1; + int (*fptr)(); + if ((*(void **)(&fptr) = dlsym(RTLD_DEFAULT, "_Offload_number_of_devices"))) { + return (*fptr)(); + } else if ((*(void **)(&fptr) = dlsym(RTLD_NEXT, "omp_get_num_devices"))) { + return (*fptr)(); + } else { // liboffload & libomptarget don't exist + return 0; } +#endif // KMP_MIC || KMP_OS_DARWIN || KMP_OS_WINDOWS || defined(KMP_STUB) } -#endif // ! KMP_OS_LINUX +// This function always returns true when called on host device. +// Compilier/libomptarget should handle when it is called inside target region. +int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void) KMP_WEAK_ATTRIBUTE; +int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void) { + return 1; // This is the host +} #endif // OMP_40_ENABLED -#if OMP_45_ENABLED && defined(KMP_STUB) -// OpenMP 4.5 entries for stubs library +#if OMP_45_ENABLED +// OpenMP 4.5 entries -int FTN_STDCALL FTN_GET_INITIAL_DEVICE(void) { return -1; } +// libomptarget, if loaded, provides this function +int FTN_STDCALL FTN_GET_INITIAL_DEVICE(void) KMP_WEAK_ATTRIBUTE; +int FTN_STDCALL FTN_GET_INITIAL_DEVICE(void) { +#if KMP_MIC || KMP_OS_DARWIN || KMP_OS_WINDOWS || defined(KMP_STUB) + return KMP_HOST_DEVICE; +#else + int (*fptr)(); + if ((*(void **)(&fptr) = dlsym(RTLD_NEXT, "omp_get_initial_device"))) { + return (*fptr)(); + } else { // liboffload & libomptarget don't exist + return KMP_HOST_DEVICE; + } +#endif +} +#if defined(KMP_STUB) +// Entries for stubs library // As all *target* functions are C-only parameters always passed by value void *FTN_STDCALL FTN_TARGET_ALLOC(size_t size, int device_num) { return 0; } @@ -1007,7 +1021,8 @@ int FTN_STDCALL FTN_TARGET_DISASSOCIATE_PTR(void *host_ptr, int device_num) { return -1; } -#endif // OMP_45_ENABLED && defined(KMP_STUB) +#endif // defined(KMP_STUB) +#endif // OMP_45_ENABLED #ifdef KMP_STUB typedef enum { UNINIT = -1, UNLOCKED, LOCKED } kmp_stub_lock_t; @@ -1318,6 +1333,14 @@ } #endif +#if OMP_50_ENABLED +// This function will be defined in libomptarget. When libomptarget is not +// loaded, we assume we are on the host and return KMP_HOST_DEVICE. +// Compiler/libomptarget will handle this if called inside target. +int FTN_STDCALL FTN_GET_DEVICE_NUM(void) KMP_WEAK_ATTRIBUTE; +int FTN_STDCALL FTN_GET_DEVICE_NUM(void) { return KMP_HOST_DEVICE; } +#endif // OMP_50_ENABLED + // GCC compatibility (versioned symbols) #ifdef KMP_USE_VERSION_SYMBOLS @@ -1401,6 +1424,7 @@ KMP_VERSION_SYMBOL(FTN_GET_DEFAULT_DEVICE, 40, "OMP_4.0"); KMP_VERSION_SYMBOL(FTN_SET_DEFAULT_DEVICE, 40, "OMP_4.0"); KMP_VERSION_SYMBOL(FTN_IS_INITIAL_DEVICE, 40, "OMP_4.0"); +KMP_VERSION_SYMBOL(FTN_GET_NUM_DEVICES, 40, "OMP_4.0"); #endif /* OMP_40_ENABLED */ #if OMP_45_ENABLED @@ -1412,10 +1436,12 @@ KMP_VERSION_SYMBOL(FTN_GET_PLACE_NUM, 45, "OMP_4.5"); KMP_VERSION_SYMBOL(FTN_GET_PARTITION_NUM_PLACES, 45, "OMP_4.5"); KMP_VERSION_SYMBOL(FTN_GET_PARTITION_PLACE_NUMS, 45, "OMP_4.5"); +// KMP_VERSION_SYMBOL(FTN_GET_INITIAL_DEVICE, 45, "OMP_4.5"); #endif #if OMP_50_ENABLED // OMP_5.0 versioned symbols +// KMP_VERSION_SYMBOL(FTN_GET_DEVICE_NUM, 50, "OMP_5.0"); #endif #endif // KMP_USE_VERSION_SYMBOLS Index: openmp/trunk/runtime/src/kmp_ftn_os.h =================================================================== --- openmp/trunk/runtime/src/kmp_ftn_os.h +++ openmp/trunk/runtime/src/kmp_ftn_os.h @@ -100,9 +100,7 @@ #define FTN_GET_WTICK omp_get_wtick #if OMP_40_ENABLED -#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB) #define FTN_GET_NUM_DEVICES omp_get_num_devices -#endif #define FTN_GET_DEFAULT_DEVICE omp_get_default_device #define FTN_SET_DEFAULT_DEVICE omp_set_default_device #define FTN_IS_INITIAL_DEVICE omp_is_initial_device @@ -121,8 +119,8 @@ #define FTN_GET_PLACE_NUM omp_get_place_num #define FTN_GET_PARTITION_NUM_PLACES omp_get_partition_num_places #define FTN_GET_PARTITION_PLACE_NUMS omp_get_partition_place_nums -#ifdef KMP_STUB #define FTN_GET_INITIAL_DEVICE omp_get_initial_device +#ifdef KMP_STUB #define FTN_TARGET_ALLOC omp_target_alloc #define FTN_TARGET_FREE omp_target_free #define FTN_TARGET_IS_PRESENT omp_target_is_present @@ -139,6 +137,7 @@ #define FTN_GET_DEFAULT_ALLOCATOR omp_get_default_allocator #define FTN_ALLOC omp_alloc #define FTN_FREE omp_free +#define FTN_GET_DEVICE_NUM omp_get_device_num #define FTN_SET_AFFINITY_FORMAT omp_set_affinity_format #define FTN_GET_AFFINITY_FORMAT omp_get_affinity_format #define FTN_DISPLAY_AFFINITY omp_display_affinity @@ -230,9 +229,7 @@ #define FTN_GET_WTICK omp_get_wtick_ #if OMP_40_ENABLED -#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB) #define FTN_GET_NUM_DEVICES omp_get_num_devices_ -#endif #define FTN_GET_DEFAULT_DEVICE omp_get_default_device_ #define FTN_SET_DEFAULT_DEVICE omp_set_default_device_ #define FTN_IS_INITIAL_DEVICE omp_is_initial_device_ @@ -251,8 +248,8 @@ #define FTN_GET_PLACE_NUM omp_get_place_num_ #define FTN_GET_PARTITION_NUM_PLACES omp_get_partition_num_places_ #define FTN_GET_PARTITION_PLACE_NUMS omp_get_partition_place_nums_ -#ifdef KMP_STUB #define FTN_GET_INITIAL_DEVICE omp_get_initial_device_ +#ifdef KMP_STUB #define FTN_TARGET_ALLOC omp_target_alloc_ #define FTN_TARGET_FREE omp_target_free_ #define FTN_TARGET_IS_PRESENT omp_target_is_present_ @@ -269,6 +266,7 @@ #define FTN_GET_DEFAULT_ALLOCATOR omp_get_default_allocator_ #define FTN_ALLOC omp_alloc_ #define FTN_FREE omp_free_ +#define FTN_GET_DEVICE_NUM omp_get_device_num_ #define FTN_SET_AFFINITY_FORMAT omp_set_affinity_format_ #define FTN_GET_AFFINITY_FORMAT omp_get_affinity_format_ #define FTN_DISPLAY_AFFINITY omp_display_affinity_ @@ -360,9 +358,7 @@ #define FTN_GET_WTICK OMP_GET_WTICK #if OMP_40_ENABLED -#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB) #define FTN_GET_NUM_DEVICES OMP_GET_NUM_DEVICES -#endif #define FTN_GET_DEFAULT_DEVICE OMP_GET_DEFAULT_DEVICE #define FTN_SET_DEFAULT_DEVICE OMP_SET_DEFAULT_DEVICE #define FTN_IS_INITIAL_DEVICE OMP_IS_INITIAL_DEVICE @@ -381,8 +377,8 @@ #define FTN_GET_PLACE_NUM OMP_GET_PLACE_NUM #define FTN_GET_PARTITION_NUM_PLACES OMP_GET_PARTITION_NUM_PLACES #define FTN_GET_PARTITION_PLACE_NUMS OMP_GET_PARTITION_PLACE_NUMS -#ifdef KMP_STUB #define FTN_GET_INITIAL_DEVICE OMP_GET_INITIAL_DEVICE +#ifdef KMP_STUB #define FTN_TARGET_ALLOC OMP_TARGET_ALLOC #define FTN_TARGET_FREE OMP_TARGET_FREE #define FTN_TARGET_IS_PRESENT OMP_TARGET_IS_PRESENT @@ -399,6 +395,7 @@ #define FTN_GET_DEFAULT_ALLOCATOR OMP_GET_DEFAULT_ALLOCATOR #define FTN_ALLOC OMP_ALLOC #define FTN_FREE OMP_FREE +#define FTN_GET_DEVICE_NUM OMP_GET_DEVICE_NUM #define FTN_SET_AFFINITY_FORMAT OMP_SET_AFFINITY_FORMAT #define FTN_GET_AFFINITY_FORMAT OMP_GET_AFFINITY_FORMAT #define FTN_DISPLAY_AFFINITY OMP_DISPLAY_AFFINITY @@ -490,9 +487,7 @@ #define FTN_GET_WTICK OMP_GET_WTICK_ #if OMP_40_ENABLED -#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB) #define FTN_GET_NUM_DEVICES OMP_GET_NUM_DEVICES_ -#endif #define FTN_GET_DEFAULT_DEVICE OMP_GET_DEFAULT_DEVICE_ #define FTN_SET_DEFAULT_DEVICE OMP_SET_DEFAULT_DEVICE_ #define FTN_IS_INITIAL_DEVICE OMP_IS_INITIAL_DEVICE_ @@ -511,8 +506,8 @@ #define FTN_GET_PLACE_NUM OMP_GET_PLACE_NUM_ #define FTN_GET_PARTITION_NUM_PLACES OMP_GET_PARTITION_NUM_PLACES_ #define FTN_GET_PARTITION_PLACE_NUMS OMP_GET_PARTITION_PLACE_NUMS_ -#ifdef KMP_STUB #define FTN_GET_INITIAL_DEVICE OMP_GET_INITIAL_DEVICE_ +#ifdef KMP_STUB #define FTN_TARGET_ALLOC OMP_TARGET_ALLOC_ #define FTN_TARGET_FREE OMP_TARGET_FREE_ #define FTN_TARGET_IS_PRESENT OMP_TARGET_IS_PRESENT_ @@ -529,6 +524,7 @@ #define FTN_GET_DEFAULT_ALLOCATOR OMP_GET_DEFAULT_ALLOCATOR_ #define FTN_ALLOC OMP_ALLOC_ #define FTN_FREE OMP_FREE_ +#define FTN_GET_DEVICE_NUM OMP_GET_DEVICE_NUM_ #define FTN_SET_AFFINITY_FORMAT OMP_SET_AFFINITY_FORMAT_ #define FTN_GET_AFFINITY_FORMAT OMP_GET_AFFINITY_FORMAT_ #define FTN_DISPLAY_AFFINITY OMP_DISPLAY_AFFINITY_ Index: openmp/trunk/runtime/test/api/omp_get_num_devices.c =================================================================== --- openmp/trunk/runtime/test/api/omp_get_num_devices.c +++ openmp/trunk/runtime/test/api/omp_get_num_devices.c @@ -0,0 +1,24 @@ +// RUN: %libomp-compile-and-run +#include +#include "omp_testsuite.h" + +int test_omp_get_num_devices() +{ + /* checks that omp_get_device_num */ + int num_devices = omp_get_num_devices(); + + return (num_devices == 0); +} + +int main() +{ + int i; + int num_failed=0; + + for(i = 0; i < REPETITIONS; i++) { + if(!test_omp_get_num_devices()) { + num_failed++; + } + } + return num_failed; +}