#include #include constexpr unsigned benchN = 32; constexpr int benchMin = -250; constexpr int benchMax = +250; constexpr unsigned benchVSize = 1'000'000; /** * Functions */ namespace bench { using C = std::vector; struct Task { std::size_t size; auto operator()(int min, int max) { C v(size); std::generate_n(std::begin(v), size, [&, i=0]() mutable { return (++i)%(max-min+1) + min; }); return v; }; }; C select(C const& a, C const& b) { C::value_type sumA = std::accumulate(std::begin(a), std::end(a), C::value_type{}); C::value_type sumB = std::accumulate(std::begin(b), std::end(b), C::value_type{}); return sumA < sumB? a : b; } } using namespace alsk::arg; using tmp::Pack; using SkelFarmSel = alsk::FarmSel< R<1>(int, int), Pack, P<1>)>, Pack >; int main() { auto farmSel = alsk::implement(); farmSel.skeleton.task = bench::Task{benchVSize}; farmSel.skeleton.select = bench::select; farmSel.skeleton.n = benchN; auto volatile r = farmSel(benchMin, benchMax); }