benchmark_type merge_bench() { long n = pasl::util::cmdline::parse_or_default_long("n", 1l<<20); sparray* inp1 = new sparray(0); sparray* inp2 = new sparray(0); sparray* outp = new sparray(0); pasl::util::cmdline::argmap<std::function<sparray (sparray&,sparray&)>> algos; algos.add("ours", [] (sparray& xs, sparray& ys) { return merge(xs, ys); }); algos.add("cilk", [] (sparray& xs, sparray& ys) { return cilkmerge(xs, ys); }); auto merge_fct = algos.find_by_arg("algo"); auto init = [=] { pasl::util::cmdline::argmap_dispatch c; *inp1 = gen_random_sparray(n); *inp2 = gen_random_sparray(n); in_place_sort(*inp1); in_place_sort(*inp2); }; auto bench = [=] { *outp = merge_fct(*inp1, *inp2); }; auto output = [=] { std::cout << "result " << (*outp)[outp->size()-1] << std::endl; }; auto destroy = [=] { delete inp1; delete inp2; delete outp; }; return make_benchmark(init, bench, output, destroy); }
benchmark_type mergesort_bench() { long n = pasl::util::cmdline::parse_or_default_long("n", 1l<<20); sparray* inp = new sparray(0); sparray* outp = new sparray(0); auto sort_fct = [] (sparray& xs) { return tasks::mergesort(xs); }; auto init = [=] { pasl::util::cmdline::argmap_dispatch c; c.add("random", [=] { *inp = gen_random_sparray(n); }); c.add("almost_sorted", [=] { long nb_swaps = pasl::util::cmdline::parse_or_default_long("nb_swaps", 1000); *inp = almost_sorted_sparray(1232, n, nb_swaps); }); c.add("exponential_dist", [=] { *inp = exp_dist_sparray(12323, n); }); c.find_by_arg_or_default_key("generator", "random")(); }; auto bench = [=] { *outp = sort_fct(*inp); }; auto output = [=] { std::cout << "result " << (*outp)[outp->size()-1] << std::endl; }; auto destroy = [=] { delete inp; delete outp; }; return make_benchmark(init, bench, output, destroy); }
benchmark_type dmdvmult_bench() { long n = pasl::util::cmdline::parse_or_default_long("n", 4000); long nxn = n*n; sparray* mtxp = new sparray(0); sparray* vecp = new sparray(0); sparray* outp = new sparray(0); auto init = [=] { *mtxp = gen_random_sparray(nxn); *vecp = gen_random_sparray(n); }; auto bench = [=] { *outp = dmdvmult(*mtxp, *vecp); }; auto output = [=] { std::cout << "result " << (*outp)[outp->size()-1] << std::endl; }; auto destroy = [=] { delete mtxp; delete vecp; delete outp; }; return make_benchmark(init, bench, output, destroy); }
benchmark_type mcss_bench() { long n = pasl::util::cmdline::parse_or_default_long("n", 1l<<20); sparray* inp = new sparray(0); value_type* outp = new value_type; auto init = [=] { *inp = gen_random_sparray(n); }; auto bench = [=] { *outp = mcss(*inp); }; auto output = [=] { std::cout << "result " << *outp << std::endl; }; auto destroy = [=] { delete inp; delete outp; }; return make_benchmark(init, bench, output, destroy); }
benchmark_type filter_bench() { long n = pasl::util::cmdline::parse_or_default_long("n", 1l<<20); sparray* inp = new sparray(0); sparray* outp = new sparray(0); auto init = [=] { *inp = gen_random_sparray(n); }; auto bench = [=] { *outp = exercises::filter(is_even_fct, *inp); }; auto output = [=] { std::cout << "result " << (*outp)[outp->size()-1] << std::endl; }; auto destroy = [=] { delete inp; delete outp; }; return make_benchmark(init, bench, output, destroy); }