diff --git a/openmp/libomptarget/DeviceRTL/include/Configuration.h b/openmp/libomptarget/DeviceRTL/include/Configuration.h --- a/openmp/libomptarget/DeviceRTL/include/Configuration.h +++ b/openmp/libomptarget/DeviceRTL/include/Configuration.h @@ -24,8 +24,12 @@ /// host by omp_get_num_devices. uint32_t getNumDevices(); +/// Return the number of devices in the system, same number as returned on the +/// host by omp_get_num_devices. +uint32_t getDeviceNum(); + /// Return the user choosen debug level. -int32_t getDebugLevel(); +uint32_t getDebugLevel(); bool isDebugMode(DebugLevel Level); diff --git a/openmp/libomptarget/DeviceRTL/src/Configuration.cpp b/openmp/libomptarget/DeviceRTL/src/Configuration.cpp --- a/openmp/libomptarget/DeviceRTL/src/Configuration.cpp +++ b/openmp/libomptarget/DeviceRTL/src/Configuration.cpp @@ -18,23 +18,29 @@ using namespace _OMP; struct DeviceEnvironmentTy { - int32_t DebugLevel; + uint32_t DebugLevel; + uint32_t NumDevices; + uint32_t DeviceNum; }; #pragma omp declare target +extern uint32_t __omp_rtl_debug_kind; + // TOOD: We want to change the name as soon as the old runtime is gone. DeviceEnvironmentTy CONSTANT(omptarget_device_environment) __attribute__((used)); -int32_t config::getDebugLevel() { - // TODO: Implement libomptarget initialization of DeviceEnvironmentTy - return 0; +uint32_t config::getDebugLevel() { + return __omp_rtl_debug_kind & omptarget_device_environment.DebugLevel; } uint32_t config::getNumDevices() { - // TODO: Implement libomptarget initialization of DeviceEnvironmentTy - return 1; + return omptarget_device_environment.NumDevices; +} + +uint32_t config::getDeviceNum() { + return omptarget_device_environment.DeviceNum; } bool config::isDebugMode(config::DebugLevel Level) { diff --git a/openmp/libomptarget/deviceRTLs/common/device_environment.h b/openmp/libomptarget/deviceRTLs/common/device_environment.h --- a/openmp/libomptarget/deviceRTLs/common/device_environment.h +++ b/openmp/libomptarget/deviceRTLs/common/device_environment.h @@ -17,6 +17,8 @@ struct omptarget_device_environmentTy { int32_t debug_level; + uint32_t num_devices; + uint32_t device_num; }; extern omptarget_device_environmentTy omptarget_device_environment; diff --git a/openmp/libomptarget/plugins/cuda/src/rtl.cpp b/openmp/libomptarget/plugins/cuda/src/rtl.cpp --- a/openmp/libomptarget/plugins/cuda/src/rtl.cpp +++ b/openmp/libomptarget/plugins/cuda/src/rtl.cpp @@ -101,6 +101,8 @@ /// file later. struct omptarget_device_environmentTy { int32_t debug_level; + uint32_t num_devices; + uint32_t device_num; }; namespace { @@ -899,7 +901,10 @@ // send device environment data to the device { - omptarget_device_environmentTy DeviceEnv{0}; + // TODO: The device ID used here is not the real device ID used by OpenMP. + omptarget_device_environmentTy DeviceEnv{ + 0, static_cast(NumberOfDevices), + static_cast(DeviceId)}; #ifdef OMPTARGET_DEBUG if (const char *EnvStr = getenv("LIBOMPTARGET_DEVICE_RTL_DEBUG"))