Commit ec02c34b authored by Huber, Joseph's avatar Huber, Joseph
Browse files

[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
parent b266bcb1
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -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);

+12 −6
Original line number Diff line number Diff line
@@ -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) {
+2 −0
Original line number Diff line number Diff line
@@ -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;
+6 −1
Original line number Diff line number Diff line
@@ -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<uint32_t>(NumberOfDevices),
          static_cast<uint32_t>(DeviceId)};

#ifdef OMPTARGET_DEBUG
      if (const char *EnvStr = getenv("LIBOMPTARGET_DEVICE_RTL_DEBUG"))