Commit 421aae31 authored by Bednárek David RNDr. Ph.D.'s avatar Bednárek David RNDr. Ph.D.
Browse files

corrected gold code generator

parent df92971d
......@@ -3,4 +3,4 @@ target_include_directories(${TARGET_MACRO} PUBLIC ".")
target_include_directories(${TARGET_LEVEN} PUBLIC ".")
target_sources(${TARGET_MACRO} PUBLIC "fmwkng.hpp" "macroasgn.hpp" "macroasgn.cpp" "macromain.cpp" "macrogold.cpp")
target_sources(${TARGET_LEVEN} PUBLIC "fmwkng.hpp" "levenasgn.hpp" "levenmain.cpp")
target_sources(${TARGET_LEVEN} PUBLIC "fmwkng.hpp" "levenasgn.hpp" "levenmain.cpp" "levengold.cpp")
......@@ -1870,9 +1870,9 @@ namespace fmwkng {
std::ofstream os(code_fn_);
os << "#include \"fmwkng.hpp\"" << std::endl;
os << "#include \"macroasgn.hpp\"" << std::endl;
os << "#include \"" << config_t::code_header_name() << "\"" << std::endl;
os << "" << std::endl;
os << "namespace macromain {" << std::endl;
os << "namespace " << config_t::code_namespace_name() << " {" << std::endl;
os << " const fmwkng::gold_data & gold_results()" << std::endl;
os << " {" << std::endl;
os << " static fmwkng::gold_data gd_{" << std::endl;
......
......@@ -11,95 +11,233 @@
///////////////////////////////
typedef int data_element;
namespace levenasgn {
using data_element = std::uint32_t;
using time_complexity = std::size_t;
using time_complexity = std::size_t;
template< typename IT>
inline std::uint64_t chksum(IT b, IT e)
{
std::uint64_t s = 0;
for (; b != e; ++b)
template< typename IT>
inline std::uint64_t chksum(IT b, IT e)
{
auto x = *b;
s = s * 3 + (std::uint64_t)x;
}
return s;
}
std::uint64_t s = 0;
struct generator_4 {
for (; b != e; ++b)
{
auto x = *b;
time_complexity complexity() const
{
return s1_ * s2_;
}
auto begin1() const
{
return v1_.cbegin();
}
s = s * 3 + (std::uint64_t)x;
}
auto end1() const
{
return v1_.cend();
return s;
}
auto begin2() const
{
return v2_.cbegin();
}
struct generator_4 {
time_complexity complexity() const
{
return s1_ * s2_;
}
auto begin1() const
{
return v1_.cbegin();
}
auto end1() const
{
return v1_.cend();
}
auto begin2() const
{
return v2_.cbegin();
}
auto end2() const
{
return v2_.cend();
}
template< typename GP>
generator_4(GP&& p, std::size_t s1, std::size_t s2)
: s2_(s2),
s1_(s1),
v1_(s1),
v2_(s2)
{
auto gen = [&p]() -> data_element {
return p.get();
};
std::generate(v1_.begin(), v1_.end(), gen);
std::generate(v2_.begin(), v2_.end(), gen);
}
private:
std::size_t s1_, s2_;
std::vector< data_element> v1_, v2_;
};
struct policy_random {
static std::string name() { return "random"; }
explicit policy_random(std::size_t seed)
: engine_(seed), ui_(0, 255)
{
}
void reset()
{
}
data_element get()
{
return ui_(engine_);
}
private:
typedef std::mt19937_64 M;
M engine_;
typedef std::uniform_int_distribution< data_element> D;
D ui_;
};
auto end2() const
{
return v2_.cend();
}
}
template< typename GP>
generator_4( GP && p, std::size_t s1, std::size_t s2)
: s2_( s2),
s1_( s1),
v1_( s1),
v2_( s2)
{
auto gen = [&p]() -> data_element {
return p.get();
};
std::generate(v1_.begin(), v1_.end(), gen);
std::generate(v2_.begin(), v2_.end(), gen);
}
namespace levensol {
private:
std::size_t s1_, s2_;
std::vector< data_element> v1_, v2_;
struct policy_scalar;
struct policy_sse;
#ifdef USE_AVX
struct policy_avx;
#endif
#ifdef USE_AVX512
struct policy_avx512;
#endif
};
struct policy_random {
static std::string name() { return "random"; }
explicit policy_random(std::size_t seed)
: engine_(seed), ui_(0, 255)
{
}
namespace levenmain {
/*
struct platform_scalar {
using tag_category = fmwkng::platform_tag_category;
static auto name() { return "scalar"; }
static auto code_name() { return "levenmain::platform_scalar"; }
using policy = levensol::policy_scalar;
};
*/
struct platform_sse {
using tag_category = fmwkng::platform_tag_category;
static auto name() { return "sse"; }
static auto code_name() { return "levenmain::platform_sse"; }
using policy = levensol::policy_sse;
};
#ifdef USE_AVX
struct platform_avx {
using tag_category = fmwkng::platform_tag_category;
static auto name() { return "avx"; }
static auto code_name() { return "levenmain::platform_avx"; }
using policy = levensol::policy_avx;
};
#endif
void reset()
{
}
#ifdef USE_AVX512
struct platform_avx512 {
using tag_category = fmwkng::platform_tag_category;
static auto name() { return "avx512"; }
static auto code_name() { return "levenmain::platform_avx512"; }
using policy = levensol::policy_avx512;
};
#endif
data_element get()
{
return ui_(engine_);
}
struct a_size {
using tag_category = fmwkng::range_tag_category;
static auto name() { return "a_size"; }
static auto code_name() { return "levenmain::a_size"; }
static auto enumerator() {
return fmwkng::logarithmic(
0x40,
#ifdef NDEBUG
0x10000,
#else
0x1000,
#endif
0x20
);
}
};
struct b_size {
using tag_category = fmwkng::range_tag_category;
static auto name() { return "b_size"; }
static auto code_name() { return "levenmain::b_size"; }
static auto enumerator() {
return fmwkng::logarithmic(
0x40,
#ifdef NDEBUG
0x10000,
#else
0x1000,
#endif
0x20
);
}
};
struct repeats {
using tag_category = fmwkng::range_tag_category;
static auto name() { return "repeats"; }
static auto code_name() { return "levenmain::repeats"; }
static auto enumerator() {
return fmwkng::auto_repeat(
#ifdef NDEBUG
0x10000000
#else
0x100000
#endif
);
}
};
struct repeat_policy {
using ranges = fmwkng::ranges< repeats>;
static auto name() { return "time_per_cell"; }
static auto code_name() { return "levenmain::repeat_policy"; }
template< typename CTX>
static auto complexity(CTX&& ctx)
{
return (std::uint_fast64_t)fmwkng::get<a_size>(ctx) * fmwkng::get<b_size>(ctx);
}
static constexpr fmwkng::average_t minimum_count = 1000000000ULL;
};
struct output {
using tag_category = fmwkng::result_tag_category;
static auto name() { return "output"; }
static auto code_name() { return "levenmain::output"; }
using value_type = std::size_t;
};
struct root_config {
static auto code_name() { return "levenmain::root_config"; }
static auto code_header_name() { return "levenasgn.hpp"; }
static auto code_namespace_name() { return "levenmain"; }
using platforms = fmwkng::platforms<
//platform_scalar
//,
platform_sse
#ifdef USE_AVX
, platform_avx
#endif
#ifdef USE_AVX512
, platform_avx512
#endif
>;
using ranges = fmwkng::ranges<a_size, b_size, repeats>;
};
private:
typedef std::mt19937_64 M;
M engine_;
typedef std::uniform_int_distribution< data_element> D;
D ui_;
};
const fmwkng::gold_data& gold_results();
}
#endif
#include "fmwkng.hpp"
#include "macroasgn.hpp"
namespace macromain {
const fmwkng::gold_data & gold_results()
{
static fmwkng::gold_data gd_{
{
{
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::root_tag<levenmain::root_config>,fmwkng::impl::element_sense::OPEN>>("big"),
std::make_unique<fmwkng::impl::element_t<levenmain::platform_sse,fmwkng::impl::element_sense::OPEN>>(std::monostate{}),
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::parallel_tag,fmwkng::impl::element_sense::OPEN>>(0),
std::make_unique<fmwkng::impl::element_t<levenmain::a_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(64,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(64,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::OPEN>>(),
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::OPEN>>(65536),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::OPEN>>(),
},
{
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::CLOSE>>(),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::CLOSE>>(std::make_pair(1.35139,1)),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::CLOSE>>(64U),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::CLOSE>>(),
}
},
{
{
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::root_tag<levenmain::root_config>,fmwkng::impl::element_sense::OPEN>>("big"),
std::make_unique<fmwkng::impl::element_t<levenmain::platform_sse,fmwkng::impl::element_sense::OPEN>>(std::monostate{}),
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::parallel_tag,fmwkng::impl::element_sense::OPEN>>(0),
std::make_unique<fmwkng::impl::element_t<levenmain::a_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(64,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(2048,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::OPEN>>(),
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::OPEN>>(2048),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::OPEN>>(),
},
{
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::CLOSE>>(),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::CLOSE>>(std::make_pair(1.28021,1)),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::CLOSE>>(2016U),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::CLOSE>>(),
}
},
{
{
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::root_tag<levenmain::root_config>,fmwkng::impl::element_sense::OPEN>>("big"),
std::make_unique<fmwkng::impl::element_t<levenmain::platform_sse,fmwkng::impl::element_sense::OPEN>>(std::monostate{}),
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::parallel_tag,fmwkng::impl::element_sense::OPEN>>(0),
std::make_unique<fmwkng::impl::element_t<levenmain::a_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(64,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(65536,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::OPEN>>(),
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::OPEN>>(64),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::OPEN>>(),
},
{
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::CLOSE>>(),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::CLOSE>>(std::make_pair(1.27176,1)),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::CLOSE>>(65472U),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::CLOSE>>(),
}
},
{
{
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::root_tag<levenmain::root_config>,fmwkng::impl::element_sense::OPEN>>("big"),
std::make_unique<fmwkng::impl::element_t<levenmain::platform_sse,fmwkng::impl::element_sense::OPEN>>(std::monostate{}),
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::parallel_tag,fmwkng::impl::element_sense::OPEN>>(0),
std::make_unique<fmwkng::impl::element_t<levenmain::a_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(2048,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(64,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::OPEN>>(),
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::OPEN>>(2048),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::OPEN>>(),
},
{
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::CLOSE>>(),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::CLOSE>>(std::make_pair(0.744038,1)),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::CLOSE>>(2016U),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::CLOSE>>(),
}
},
{
{
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::root_tag<levenmain::root_config>,fmwkng::impl::element_sense::OPEN>>("big"),
std::make_unique<fmwkng::impl::element_t<levenmain::platform_sse,fmwkng::impl::element_sense::OPEN>>(std::monostate{}),
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::parallel_tag,fmwkng::impl::element_sense::OPEN>>(0),
std::make_unique<fmwkng::impl::element_t<levenmain::a_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(2048,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(2048,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::OPEN>>(),
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::OPEN>>(64),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::OPEN>>(),
},
{
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::CLOSE>>(),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::CLOSE>>(std::make_pair(0.756351,1)),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::CLOSE>>(2021U),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::CLOSE>>(),
}
},
{
{
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::root_tag<levenmain::root_config>,fmwkng::impl::element_sense::OPEN>>("big"),
std::make_unique<fmwkng::impl::element_t<levenmain::platform_sse,fmwkng::impl::element_sense::OPEN>>(std::monostate{}),
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::parallel_tag,fmwkng::impl::element_sense::OPEN>>(0),
std::make_unique<fmwkng::impl::element_t<levenmain::a_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(2048,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(65536,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::OPEN>>(),
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::OPEN>>(2),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::OPEN>>(),
},
{
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::CLOSE>>(),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::CLOSE>>(std::make_pair(0.753533,1)),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::CLOSE>>(64358U),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::CLOSE>>(),
}
},
{
{
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::root_tag<levenmain::root_config>,fmwkng::impl::element_sense::OPEN>>("big"),
std::make_unique<fmwkng::impl::element_t<levenmain::platform_sse,fmwkng::impl::element_sense::OPEN>>(std::monostate{}),
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::parallel_tag,fmwkng::impl::element_sense::OPEN>>(0),
std::make_unique<fmwkng::impl::element_t<levenmain::a_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(65536,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(64,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::OPEN>>(),
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::OPEN>>(64),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::OPEN>>(),
},
{
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::CLOSE>>(),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::CLOSE>>(std::make_pair(0.721382,1)),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::CLOSE>>(65472U),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::CLOSE>>(),
}
},
{
{
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::root_tag<levenmain::root_config>,fmwkng::impl::element_sense::OPEN>>("big"),
std::make_unique<fmwkng::impl::element_t<levenmain::platform_sse,fmwkng::impl::element_sense::OPEN>>(std::monostate{}),
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::parallel_tag,fmwkng::impl::element_sense::OPEN>>(0),
std::make_unique<fmwkng::impl::element_t<levenmain::a_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(65536,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(2048,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::OPEN>>(),
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::OPEN>>(2),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::OPEN>>(),
},
{
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::CLOSE>>(),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::CLOSE>>(std::make_pair(0.753748,1)),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::CLOSE>>(64354U),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::CLOSE>>(),
}
},
{
{
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::root_tag<levenmain::root_config>,fmwkng::impl::element_sense::OPEN>>("big"),
std::make_unique<fmwkng::impl::element_t<levenmain::platform_sse,fmwkng::impl::element_sense::OPEN>>(std::monostate{}),
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::parallel_tag,fmwkng::impl::element_sense::OPEN>>(0),
std::make_unique<fmwkng::impl::element_t<levenmain::a_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(65536,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(65536,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::OPEN>>(),
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::OPEN>>(1),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::OPEN>>(),
},
{
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::CLOSE>>(),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::CLOSE>>(std::make_pair(0.733431,1)),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::CLOSE>>(64614U),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::CLOSE>>(),
}
},
{
{
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::root_tag<levenmain::root_config>,fmwkng::impl::element_sense::OPEN>>("big"),
std::make_unique<fmwkng::impl::element_t<levenmain::platform_sse,fmwkng::impl::element_sense::OPEN>>(std::monostate{}),
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::parallel_tag,fmwkng::impl::element_sense::OPEN>>(1),
std::make_unique<fmwkng::impl::element_t<levenmain::a_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(64,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(64,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::OPEN>>(),
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::OPEN>>(65536),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::OPEN>>(),
},
{
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::CLOSE>>(),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::CLOSE>>(std::make_pair(1.35205,1)),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::CLOSE>>(64U),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::CLOSE>>(),
}
},
{
{
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::root_tag<levenmain::root_config>,fmwkng::impl::element_sense::OPEN>>("big"),
std::make_unique<fmwkng::impl::element_t<levenmain::platform_sse,fmwkng::impl::element_sense::OPEN>>(std::monostate{}),
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::parallel_tag,fmwkng::impl::element_sense::OPEN>>(1),
std::make_unique<fmwkng::impl::element_t<levenmain::a_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(64,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(2048,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::OPEN>>(),
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::OPEN>>(2048),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::OPEN>>(),
},
{
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::CLOSE>>(),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::CLOSE>>(std::make_pair(1.28533,1)),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::CLOSE>>(2011U),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::CLOSE>>(),
}
},
{
{
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::root_tag<levenmain::root_config>,fmwkng::impl::element_sense::OPEN>>("big"),
std::make_unique<fmwkng::impl::element_t<levenmain::platform_sse,fmwkng::impl::element_sense::OPEN>>(std::monostate{}),
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::parallel_tag,fmwkng::impl::element_sense::OPEN>>(1),
std::make_unique<fmwkng::impl::element_t<levenmain::a_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(64,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(65536,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::OPEN>>(),
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::OPEN>>(64),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::OPEN>>(),
},
{
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::CLOSE>>(),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::CLOSE>>(std::make_pair(1.2723,1)),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::CLOSE>>(65472U),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::CLOSE>>(),
}
},
{
{
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::root_tag<levenmain::root_config>,fmwkng::impl::element_sense::OPEN>>("big"),
std::make_unique<fmwkng::impl::element_t<levenmain::platform_sse,fmwkng::impl::element_sense::OPEN>>(std::monostate{}),
std::make_unique<fmwkng::impl::element_t<fmwkng::impl::parallel_tag,fmwkng::impl::element_sense::OPEN>>(1),
std::make_unique<fmwkng::impl::element_t<levenmain::a_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(2048,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(64,fmwkng::logarithmic(64,65536,32))),
std::make_unique<fmwkng::impl::result_element<fmwkng::impl::auto_measurement_tag<levenmain::repeat_policy>,fmwkng::impl::element_sense::OPEN>>(),
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::OPEN>>(2048),
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::OPEN>>(),
},
{