29 #ifdef DISABLE_CONFIG_FROM_ENV
33 #endif // DISABLE_CONFIG_FROM_ENV
35 #ifdef DISABLE_CONFIG_FROM_CONFIG_FILE
39 #endif // DISABLE_CONFIG_FROM_CONFIG_FILE
41 #ifdef DISABLE_CONFIG_FROM_COMPILE_TIME
45 #endif // DISABLE_CONFIG_FROM_COMPILE_TIME
53 #define CONFIG(name, ...) name,
61 return (Str[0] ==
'_' && Str[1] ==
'_') ? nullptr : Str;
65 void readConfig(
bool ForceInitialization =
false);
69 #define CONFIG(Name, MaxSize, CompileTimeDef) \
70 template <> class SYCLConfigBase<Name> { \
74 static char MStorage[MaxSize + 1]; \
76 static const char *MValueFromFile; \
78 static const char *const MConfigName; \
83 static const char *const MCompileTimeDef; \
85 static const char *getRawValue() { \
86 if (ConfigFromEnvEnabled) \
87 if (const char *ValStr = getenv(MConfigName)) \
90 if (ConfigFromFileEnabled) { \
93 return MValueFromFile; \
96 if (ConfigFromCompileDefEnabled && MCompileTimeDef) \
97 return MCompileTimeDef; \
102 #include "config.def"
109 static const char *
get() {
return getCachedValue(); }
111 static void reset() { (void)getCachedValue(
true); }
113 static const char *
getName() {
return BaseT::MConfigName; }
116 static const char *getCachedValue(
bool ResetCache =
false) {
117 static const char *ValStr = BaseT::getRawValue();
119 ValStr = BaseT::getRawValue();
129 static bool Initialized =
false;
130 static backend *BackendPtr =
nullptr;
137 const char *ValStr = BaseT::getRawValue();
138 const std::array<std::pair<std::string, backend>, 6> SyclBeMap = {
139 {{
"PI_OPENCL", backend::opencl},
140 {
"PI_LEVEL_ZERO", backend::ext_oneapi_level_zero},
141 {
"PI_LEVEL0", backend::ext_oneapi_level_zero},
143 {
"PI_CUDA", backend::ext_oneapi_cuda},
144 {
"PI_ESIMD_EMULATOR", backend::ext_intel_esimd_emulator},
145 {
"PI_HIP", backend::ext_oneapi_hip}}};
147 auto It = std::find_if(
148 std::begin(SyclBeMap), std::end(SyclBeMap),
149 [&ValStr](
const std::pair<std::string, backend> &element) {
150 return element.first == ValStr;
152 if (It == SyclBeMap.end())
155 "PI_OPENCL/PI_LEVEL_ZERO/PI_CUDA/PI_ESIMD_EMULATOR/PI_HIP");
156 static backend Backend = It->second;
157 BackendPtr = &Backend;
169 static bool Initialized =
false;
172 static int Level = 0;
179 const char *ValStr = BaseT::getRawValue();
180 Level = (ValStr ? std::atoi(ValStr) : 0);
190 static unsigned int get() {
return getCachedValue(); }
192 static void reset() { (void)getCachedValue(
true); }
195 static unsigned int getCachedValue(
bool ResetCache =
false) {
196 const auto Parser = []() {
197 const char *ValStr = BaseT::getRawValue();
198 int SignedLevel = ValStr ? std::atoi(ValStr) : 0;
199 return SignedLevel >= 0 ? SignedLevel : 0;
202 static unsigned int Level = Parser();
210 template <>
class SYCLConfig<SYCL_PARALLEL_FOR_RANGE_ROUNDING_TRACE> {
215 static const char *ValStr = BaseT::getRawValue();
216 return ValStr !=
nullptr;
220 template <>
class SYCLConfig<SYCL_DISABLE_PARALLEL_FOR_RANGE_ROUNDING> {
225 static const char *ValStr = BaseT::getRawValue();
226 return ValStr !=
nullptr;
230 template <>
class SYCLConfig<SYCL_PARALLEL_FOR_RANGE_ROUNDING_PARAMS> {
237 static const char *RoundParams = BaseT::getRawValue();
238 if (RoundParams ==
nullptr)
241 static bool ProcessedFactors =
false;
245 if (!ProcessedFactors) {
248 std::string Params(RoundParams);
249 size_t Pos = Params.find(
':');
250 if (Pos != std::string::npos) {
251 MF = std::stoi(Params.substr(0, Pos));
252 Params.erase(0, Pos + 1);
253 Pos = Params.find(
':');
254 if (Pos != std::string::npos) {
255 GF = std::stoi(Params.substr(0, Pos));
256 Params.erase(0, Pos + 1);
257 MR = std::stoi(Params);
260 ProcessedFactors =
true;
269 const std::array<std::pair<std::string, info::device_type>, 5> &
273 const std::array<std::pair<std::string, backend>, 7> &
getSyclBeMap();
280 static bool Initialized =
false;
289 const char *ValStr = BaseT::getRawValue();
291 FilterList = &GlobalHandler::instance().getDeviceFilterList(ValStr);
299 std::cerr <<
"\nWARNING: The legacy environment variables SYCL_BE and "
300 "SYCL_DEVICE_TYPE are deprecated. Please use "
301 "SYCL_DEVICE_FILTER instead. For details, please refer to "
302 "https://github.com/intel/llvm/blob/sycl/sycl/doc/"
303 "EnvironmentVariables.md\n\n";
322 constexpr
bool DefaultValue =
false;
324 constexpr
bool DefaultValue =
true;
327 const char *ValStr = getCachedValue();
332 return ValStr[0] ==
'1';
335 static void reset() { (void)getCachedValue(
true); }
337 static const char *
getName() {
return BaseT::MConfigName; }
340 static const char *getCachedValue(
bool ResetCache =
false) {
341 static const char *ValStr = BaseT::getRawValue();
343 ValStr = BaseT::getRawValue();
353 static int Value = [] {
354 const char *ValueStr = BaseT::getRawValue();
360 Result = std::stoi(ValueStr);
362 throw invalid_parameter_error(
363 "Invalid value for SYCL_QUEUE_THREAD_POOL_SIZE environment "
364 "variable: value should be a number",
369 throw invalid_parameter_error(
370 "Invalid value for SYCL_QUEUE_THREAD_POOL_SIZE environment "
371 "variable: value should be larger than zero",