30using KnobName = std::string;
37 virtual ~KnobLoader() =
default;
39 virtual bool load(
const KnobName &name,
bool default_value)
const = 0;
51class EnvKnobLoader final :
public KnobLoader
54 EnvKnobLoader() =
default;
57 bool load(
const KnobName &knob_name,
bool default_value)
const override
59 auto envvar = _prefix + knob_name;
60 auto s = std::getenv(envvar.c_str());
64 void knob_set(
const KnobName &knob_name,
bool value) { _knob[knob_name] = value; }
65 void dialect_set(
const exo::Dialect &dialect_name) { _prefix = _label[dialect_name]; }
66 bool knob_get(
const KnobName &knob_name) {
return load(knob_name, _knob[knob_name]); }
71 std::map<KnobName, bool> _knob;
81EnvKnobLoader &knob_loader(
void)
84 static EnvKnobLoader loader;
93#define KNOB_BOOL(NAME, TFL_DEFAULT, CIRCLE_DEFAULT, DESC) \
94 template <> typename KnobTrait<Knob::NAME>::ValueType get<Knob::NAME>(void) \
96 return ::knob_loader().knob_get(#NAME); \
103 ::knob_loader().dialect_set(d);
107#define KNOB_BOOL(NAME, TFL_DEFAULT, CIRCLE_DEFAULT, DESC) \
108 ::knob_loader().knob_set(#NAME, TFL_DEFAULT);
113#define KNOB_BOOL(NAME, TFL_DEFAULT, CIRCLE_DEFAULT, DESC) \
114 ::knob_loader().knob_set(#NAME, CIRCLE_DEFAULT);
119 throw std::runtime_error(
"Unknown dialect");
int safe_strcast< int >(const char *s, const int &v)
TensorSignatures load(const char *info_path)
Function to create TensorSignatures defined in info file.