1#ifndef PROTEUS_CONFIG_HPP
2#define PROTEUS_CONFIG_HPP
8#include "llvm/ADT/StringMap.h"
9#include <llvm/Support/JSON.h>
10#include <llvm/Support/MemoryBuffer.h>
42 return "link-clone-prune";
44 return "link-clone-light";
83 if (
CGstr ==
"serial")
85 if (
CGstr ==
"parallel")
131 static constexpr bool DefaultSpecializeDimsRange =
132#if PROTEUS_ENABLE_CUDA
140#if defined(PROTEUS_ENABLE_CUDA)
146 Logger::outs(
"proteus") <<
"Warning: Proteus supports only RTC in the "
147 "current build system configuration, "
148 "defaulting Codegen to RTC\n";
151 return ProteusCodegen;
154 std::optional<const std::string> ProteusOptPipeline;
156 bool ProteusSpecializeArgs;
157 bool ProteusSpecializeLaunchBounds;
158 bool ProteusSpecializeDims;
159 bool ProteusSpecializeDimsRange;
160 char ProteusOptLevel;
161 int ProteusCodeGenOptLevel;
167 bool ProteusSpecializeLaunchBounds,
168 bool ProteusSpecializeDims,
169 bool ProteusSpecializeDimsRange,
char ProteusOptLevel,
170 int ProteusCodeGenOptLevel,
int TunedMaxThreads = -1,
171 int MinBlocksPerSM = 0)
172 : ProteusOptPipeline(ProteusOptPipeline), ProteusCodegen(ProteusCodegen),
173 ProteusSpecializeArgs(ProteusSpecializeArgs),
174 ProteusSpecializeLaunchBounds(ProteusSpecializeLaunchBounds),
175 ProteusSpecializeDims(ProteusSpecializeDims),
176 ProteusSpecializeDimsRange(ProteusSpecializeDimsRange),
177 ProteusOptLevel(ProteusOptLevel),
178 ProteusCodeGenOptLevel(ProteusCodeGenOptLevel),
179 TunedMaxThreads(TunedMaxThreads), MinBlocksPerSM(MinBlocksPerSM) {}
190 DefaultSpecializeDimsRange),
212 DefaultSpecializeDimsRange),
231 return ProteusOptPipeline;
241 return MinBlocksPerSM;
244 template <
typename T>
void dump(
T &
OS)
const {
245 if (ProteusOptPipeline)
246 OS <<
"Pipeline:" << ProteusOptPipeline.value() <<
" ";
248 OS <<
"CG:" <<
toString(ProteusCodegen) <<
" ";
249 OS <<
"SA:" << ProteusSpecializeArgs <<
" ";
250 OS <<
"LB:" << ProteusSpecializeLaunchBounds <<
" ";
251 OS <<
"SD:" << ProteusSpecializeDims <<
" ";
252 OS <<
"SDR:" << ProteusSpecializeDimsRange <<
" ";
253 OS <<
"OL:" << ProteusOptLevel <<
" ";
254 OS <<
"CGL:" << ProteusCodeGenOptLevel <<
" ";
255 OS <<
"TMT:" << TunedMaxThreads <<
" ";
256 OS <<
"BPSM:" << MinBlocksPerSM <<
" ";
266 auto JSONRoot = [&
JSONFn]() -> std::optional<llvm::json::Object> {
268 llvm::MemoryBuffer::getFile(
JSONFn.value(),
true,
272 JSONBuf.getError().message() +
"\n");
276 "Cannot convert buffer to json value");
288 if (
const auto *
Options =
KV.second.getAsObject()) {
289 TunedConfigs.try_emplace(
333 OS <<
"ID:" << ID <<
" ";
const void const char * VarName
Definition CompilerInterfaceDevice.cpp:21
void char * KernelName
Definition CompilerInterfaceDevice.cpp:52
#define PROTEUS_FATAL_ERROR(x)
Definition Error.h:7
Definition Config.hpp:130
void dump(T &OS) const
Definition Config.hpp:244
int minBlocksPerSM(int MaxThreads) const
Definition Config.hpp:234
bool specializeArgs() const
Definition Config.hpp:224
bool specializeDimsRange() const
Definition Config.hpp:226
static CodeGenerationConfig createFromJSONEntry(const llvm::json::Object &Config)
Definition Config.hpp:196
bool specializeLaunchBounds() const
Definition Config.hpp:227
std::optional< const std::string > optPipeline() const
Definition Config.hpp:230
static CodeGenerationConfig createFromEnv()
Definition Config.hpp:182
bool specializeDims() const
Definition Config.hpp:225
char optLevel() const
Definition Config.hpp:228
CodegenOption codeGenOption() const
Definition Config.hpp:223
int codeGenOptLevel() const
Definition Config.hpp:229
Definition Config.hpp:296
int ProteusTraceOutput
Definition Config.hpp:313
bool ProteusDisable
Definition Config.hpp:305
static Config & get()
Definition Config.hpp:298
bool ProteusRelinkGlobalsByCopy
Definition Config.hpp:307
const llvm::StringMap< const CodeGenerationConfig > TunedConfigs
Definition Config.hpp:303
bool ProteusDumpLLVMIR
Definition Config.hpp:306
bool ProteusDebugOutput
Definition Config.hpp:314
const CodeGenerationConfig GlobalCodeGenConfig
Definition Config.hpp:302
bool ProteusUseStoredCache
Definition Config.hpp:304
int ProteusAsyncThreads
Definition Config.hpp:309
KernelCloneOption ProteusKernelClone
Definition Config.hpp:311
void dump(llvm::raw_ostream &OS) const
Definition Config.hpp:328
const CodeGenerationConfig & getCGConfig(llvm::StringRef KName="") const
Definition Config.hpp:317
std::optional< const std::string > ProteusCacheDir
Definition Config.hpp:315
bool ProteusEnableTimers
Definition Config.hpp:312
bool ProteusAsyncTestBlocking
Definition Config.hpp:310
bool ProteusAsyncCompilation
Definition Config.hpp:308
static llvm::raw_ostream & outs(const std::string &Name)
Definition Logger.hpp:25
Definition StorageCache.cpp:24
int getEnvOrDefaultInt(const char *VarName, int Default)
Definition Config.hpp:73
std::optional< std::string > getEnvOrDefaultString(const char *VarName)
Definition Config.hpp:52
T getRuntimeConstantValue(void *Arg)
Definition CompilerInterfaceRuntimeConstantInfo.h:114
CodegenOption
Definition Config.hpp:14
CodegenOption getEnvOrDefaultCG(const char *VarName, CodegenOption Default)
Definition Config.hpp:91
KernelCloneOption
Definition Config.hpp:20
std::string toString(CodegenOption Option)
Definition Config.hpp:26
KernelCloneOption getEnvOrDefaultKC(const char *VarName, KernelCloneOption Default)
Definition Config.hpp:108
llvm::StringMap< const CodeGenerationConfig > parseJSONConfig(std::optional< std::string > JSONFn)
Definition Config.hpp:261
T getDefaultValueFromOptional(std::optional< T > JSONValue, T Default)
Definition Config.hpp:102
char getEnvOrDefaultChar(const char *VarName, char Default)
Definition Config.hpp:61
CodegenOption strToCG(std::string CGstr)
Definition Config.hpp:79
bool getEnvOrDefaultBool(const char *VarName, bool Default)
Definition Config.hpp:67