mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-25 20:46:05 +00:00

If user specifies offload is disabled (e.g., OMP_TARGET_OFFLOAD=disable), disable library almost completely. This reduces resources spent to a minimum and ensures all APIs behave as if the only available device is the host device. Currently some of the APIs behave as if there were devices avaible for offload even when under OMP_TARGET_OFFLOAD=disable. --------- Co-authored-by: Joseph Huber <huberjn@outlook.com>
69 lines
1.8 KiB
C++
69 lines
1.8 KiB
C++
//===-- OffloadPolicy.h - Configuration of offload behavior -----*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Configuration for offload behavior, e.g., if offload is disabled, can be
|
|
// disabled, is mandatory, etc.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef OMPTARGET_OFFLOAD_POLICY_H
|
|
#define OMPTARGET_OFFLOAD_POLICY_H
|
|
|
|
#include "PluginManager.h"
|
|
|
|
enum kmp_target_offload_kind_t {
|
|
tgt_disabled = 0,
|
|
tgt_default = 1,
|
|
tgt_mandatory = 2
|
|
};
|
|
|
|
extern "C" int __kmpc_get_target_offload(void) __attribute__((weak));
|
|
|
|
class OffloadPolicy {
|
|
|
|
OffloadPolicy(PluginManager &PM) {
|
|
// TODO: Check for OpenMP.
|
|
switch ((kmp_target_offload_kind_t)__kmpc_get_target_offload()) {
|
|
case tgt_disabled:
|
|
Kind = DISABLED;
|
|
return;
|
|
case tgt_mandatory:
|
|
Kind = MANDATORY;
|
|
return;
|
|
default:
|
|
if (PM.getNumDevices()) {
|
|
DP("Default TARGET OFFLOAD policy is now mandatory "
|
|
"(devices were found)\n");
|
|
Kind = MANDATORY;
|
|
} else {
|
|
DP("Default TARGET OFFLOAD policy is now disabled "
|
|
"(no devices were found)\n");
|
|
Kind = DISABLED;
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
|
|
public:
|
|
static bool isOffloadDisabled() {
|
|
return static_cast<kmp_target_offload_kind_t>(
|
|
__kmpc_get_target_offload()) == tgt_disabled;
|
|
}
|
|
|
|
static const OffloadPolicy &get(PluginManager &PM) {
|
|
static OffloadPolicy OP(PM);
|
|
return OP;
|
|
}
|
|
|
|
enum OffloadPolicyKind { DISABLED, MANDATORY };
|
|
|
|
OffloadPolicyKind Kind = MANDATORY;
|
|
};
|
|
|
|
#endif // OMPTARGET_OFFLOAD_POLICY_H
|