26 #include "pooling.hpp" 35 template <
typename TInput,
typename TOutput,
class OutputStage = Nothing>
40 std::function<bool(const PoolingArgs &, const OutputStage &)>
is_supported;
41 std::function<uint64_t(const PoolingArgs &, const OutputStage &)>
cycle_estimate;
42 std::function<PoolingCommon<TInput, TOutput, OutputStage> *(
const PoolingArgs &,
const OutputStage &)>
initialise;
46 return (is_supported ==
nullptr) ? true :
is_supported(args, os);
54 PoolingCommon<TInput, TOutput, OutputStage> *
get_instance(
const PoolingArgs &
args,
const OutputStage &os)
const 60 template <
typename TInput,
typename TOutput,
class OutputStage = Nothing>
63 template <
typename TInput,
typename TOutput,
class OutputStage = Nothing>
65 const PoolingArgs &
args,
66 const OutputStage &os,
71 const auto *impl = pooling_implementation_list<TInput, TOutput, OutputStage>();
72 for (; impl->method != PoolingMethod::DEFAULT; impl++)
74 if (args.config !=
nullptr)
77 const auto cfg = args.config;
79 if (cfg->filter !=
"" && !std::strstr(impl->name, cfg->filter.c_str()))
85 if (impl->get_is_supported(args, os))
94 template <
typename TInput,
typename TOutput,
class OutputStage>
95 UniquePoolingCommon<TInput, TOutput, OutputStage>
pooling(
const PoolingArgs &
args,
const OutputStage &os)
98 const bool success = find_implementation<TInput, TOutput, OutputStage>(
args, os, impl);
99 return UniquePoolingCommon<TInput, TOutput, OutputStage>(success ? impl->
get_instance(args, os) :
nullptr);
const PoolingMethod method
bool find_implementation(const PoolingArgs &args, const OutputStage &os, const PoolingImplementation< TInput, TOutput, OutputStage > *&selected)
std::function< uint64_t(const PoolingArgs &, const OutputStage &)> cycle_estimate
PoolingCommon< TInput, TOutput, OutputStage > * get_instance(const PoolingArgs &args, const OutputStage &os) const
template UniquePoolingCommon< float, float > pooling(const PoolingArgs &, const Nothing &)
uint64_t get_cycle_estimate(const PoolingArgs &args, const OutputStage &os) const
const PoolingImplementation< float, float > * pooling_implementation_list()
UniquePoolingCommon< TInput, TOutput, OutputStage > pooling(const PoolingArgs &args, const OutputStage &os)
std::function< bool(const PoolingArgs &, const OutputStage &)> is_supported
bool get_is_supported(const PoolingArgs &args, const OutputStage &os) const
std::function< PoolingCommon< TInput, TOutput, OutputStage > *(const PoolingArgs &, const OutputStage &)> initialise