#include #include #include "common.h" using namespace bench; using namespace alsk::edsl; using namespace alsk::arg; constexpr unsigned samples = 50, iterations = 100; constexpr unsigned n = 8192; // if too small => bad results constexpr auto initVector = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; decltype(auto) hwIterSel(Data const& init) { Data best = init; for(std::size_t i = 0; i < n; ++i) { Data current = taskD(best); best = select(std::move(current), std::move(best)); } return best; } constexpr auto eIterSel = &link(n * eTaskD) ->* eSelect; constexpr auto eIterSelStdFun = &link(n * eTaskDStdFun) ->* eSelectStdFun; BASELINE(IterSel, Handwritten, samples, iterations) { celero::DoNotOptimizeAway( hwIterSel(initVector) ); } BENCHMARK(IterSel, Skeleton, samples, iterations) { auto iterSel = alsk::edsl::implement(eIterSel); celero::DoNotOptimizeAway( iterSel(initVector) ); } BENCHMARK(IterSel, SkeletonStdFunction, samples, iterations) { auto iterSel = alsk::edsl::implement(eIterSelStdFun); iterSel.skeleton.task = taskD; iterSel.skeleton.select = bench::select; celero::DoNotOptimizeAway( iterSel(initVector) ); }