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 DefaultSpecializeDimsAssume =
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 ProteusSpecializeDimsAssume;
160 char ProteusOptLevel;
161 int ProteusCodeGenOptLevel;
167 bool ProteusSpecializeLaunchBounds,
168 bool ProteusSpecializeDims,
169 bool ProteusSpecializeDimsAssume,
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 ProteusSpecializeDimsAssume(ProteusSpecializeDimsAssume),
177 ProteusOptLevel(ProteusOptLevel),
178 ProteusCodeGenOptLevel(ProteusCodeGenOptLevel),
179 TunedMaxThreads(TunedMaxThreads), MinBlocksPerSM(MinBlocksPerSM) {}
183 constexpr bool DefaultSpecializeDimsAssume =
184#if PROTEUS_ENABLE_CUDA
196 DefaultSpecializeDimsAssume),
218 DefaultSpecializeDimsAssume),
237 return ProteusOptPipeline;
247 return MinBlocksPerSM;
250 template <
typename T>
void dump(
T &
OS)
const {
251 if (ProteusOptPipeline)
252 OS <<
"Pipeline:" << ProteusOptPipeline.value() <<
" ";
254 OS <<
"CG:" <<
toString(ProteusCodegen) <<
" ";
255 OS <<
"SA:" << ProteusSpecializeArgs <<
" ";
256 OS <<
"LB:" << ProteusSpecializeLaunchBounds <<
" ";
257 OS <<
"SD:" << ProteusSpecializeDims <<
" ";
258 OS <<
"SDA:" << ProteusSpecializeDimsAssume <<
" ";
259 OS <<
"OL:" << ProteusOptLevel <<
" ";
260 OS <<
"CGL:" << ProteusCodeGenOptLevel <<
" ";
261 OS <<
"TMT:" << TunedMaxThreads <<
" ";
262 OS <<
"BPSM:" << MinBlocksPerSM <<
" ";
272 auto JSONRoot = [&
JSONFn]() -> std::optional<llvm::json::Object> {
274 llvm::MemoryBuffer::getFile(
JSONFn.value(),
true,
278 JSONBuf.getError().message() +
"\n");
282 "Cannot convert buffer to json value");
294 if (
const auto *
Options =
KV.second.getAsObject()) {
295 TunedConfigs.try_emplace(
339 OS <<
"ID:" << ID <<
" ";
const char * VarName
Definition CompilerInterfaceDevice.cpp:20
void char * KernelName
Definition CompilerInterfaceDevice.cpp:50
#define PROTEUS_FATAL_ERROR(x)
Definition Error.h:7
Definition Config.hpp:130
void dump(T &OS) const
Definition Config.hpp:250
int minBlocksPerSM(int MaxThreads) const
Definition Config.hpp:240
bool specializeArgs() const
Definition Config.hpp:230
static CodeGenerationConfig createFromJSONEntry(const llvm::json::Object &Config)
Definition Config.hpp:202
bool specializeLaunchBounds() const
Definition Config.hpp:233
bool specializeDimsAssume() const
Definition Config.hpp:232
std::optional< const std::string > optPipeline() const
Definition Config.hpp:236
static CodeGenerationConfig createFromEnv()
Definition Config.hpp:182
bool specializeDims() const
Definition Config.hpp:231
char optLevel() const
Definition Config.hpp:234
CodegenOption codeGenOption() const
Definition Config.hpp:229
int codeGenOptLevel() const
Definition Config.hpp:235
Definition Config.hpp:302
int ProteusTraceOutput
Definition Config.hpp:319
bool ProteusDisable
Definition Config.hpp:311
static Config & get()
Definition Config.hpp:304
bool ProteusRelinkGlobalsByCopy
Definition Config.hpp:313
const llvm::StringMap< const CodeGenerationConfig > TunedConfigs
Definition Config.hpp:309
bool ProteusDumpLLVMIR
Definition Config.hpp:312
bool ProteusDebugOutput
Definition Config.hpp:320
const CodeGenerationConfig GlobalCodeGenConfig
Definition Config.hpp:308
bool ProteusUseStoredCache
Definition Config.hpp:310
int ProteusAsyncThreads
Definition Config.hpp:315
KernelCloneOption ProteusKernelClone
Definition Config.hpp:317
void dump(llvm::raw_ostream &OS) const
Definition Config.hpp:334
const CodeGenerationConfig & getCGConfig(llvm::StringRef KName="") const
Definition Config.hpp:323
std::optional< const std::string > ProteusCacheDir
Definition Config.hpp:321
bool ProteusEnableTimers
Definition Config.hpp:318
bool ProteusAsyncTestBlocking
Definition Config.hpp:316
bool ProteusAsyncCompilation
Definition Config.hpp:314
static llvm::raw_ostream & outs(const std::string &Name)
Definition Logger.hpp:25
Definition BuiltinsCUDA.cpp:4
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:267
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