From ec02c34b6df1efc643e5889bf3f181d55c4fed38 Mon Sep 17 00:00:00 2001 From: Joseph Huber Date: Thu, 16 Sep 2021 14:42:14 -0400 Subject: [PATCH] [OpenMP] Add additional fields to device environment This patch adds fields for the device number and number of devices into the device environment struct and debugging values. Reviewed By: jdoerfert Differential Revision: https://reviews.llvm.org/D110004 --- openmp/libomptarget/DeviceRTL/include/Configuration.h | 6 +++++- openmp/libomptarget/DeviceRTL/src/Configuration.cpp | 18 ++++++++++++------ .../deviceRTLs/common/device_environment.h | 2 ++ openmp/libomptarget/plugins/cuda/src/rtl.cpp | 7 ++++++- 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/openmp/libomptarget/DeviceRTL/include/Configuration.h b/openmp/libomptarget/DeviceRTL/include/Configuration.h index 6fef6b7..11aa548 100644 --- a/openmp/libomptarget/DeviceRTL/include/Configuration.h +++ b/openmp/libomptarget/DeviceRTL/include/Configuration.h @@ -24,8 +24,12 @@ enum DebugLevel : int32_t { Assertion }; /// 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 index ac67af1..4e48599 100644 --- 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 index d1629f8..5f94567 100644 --- 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 index c6f51a5..f3a810c 100644 --- a/openmp/libomptarget/plugins/cuda/src/rtl.cpp +++ b/openmp/libomptarget/plugins/cuda/src/rtl.cpp @@ -101,6 +101,8 @@ struct KernelTy { /// file later. struct omptarget_device_environmentTy { int32_t debug_level; + uint32_t num_devices; + uint32_t device_num; }; namespace { @@ -899,7 +901,10 @@ public: // 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")) -- 2.7.4