#ifndef GPU_INTEL_CONV_JIT_V2_PLAN_REGISTRY_HPP
#define GPU_INTEL_CONV_JIT_V2_PLAN_REGISTRY_HPP
#include "gpu/intel/conv/jit/v2/kernel_desc.hpp"
#include "gpu/intel/conv/jit/v2/model.hpp"
namespace dnnl {
namespace impl {
namespace gpu {
namespace intel {
namespace conv {
namespace jit {
namespace v2 {
class plan_registry_t {
public:
struct entry_t {
kernel_desc_t desc;
model_set_t model_set;
entry_t() = default;
entry_t(const kernel_desc_t &desc, const model_set_t &model_set)
: desc(desc), model_set(model_set) {}
bool is_empty() const { return desc.is_empty(); }
void stringify(std::ostream &out) const;
void parse(std::istream &in);
std::string str() const;
std::string registry_str() const;
XE_DEFINE_DUMP()
};
plan_registry_t() = default;
plan_registry_t(const char **entries);
void set(const entry_t &entry) { entries_.emplace_back(entry); }
int size() const { return (int)entries_.size(); }
kernel_desc_t find_best(const problem_t &prb,
specialization_mode_t spec_mode
= specialization_mode_t::none) const;
void stringify(std::ostream &out) const;
void parse(std::istream &out);
private:
std::vector<entry_t> entries_;
};
const plan_registry_t &const_plan_registry();
plan_registry_t &plan_registry();
void dump_plan_registry();
} } } } } } }
#endif