Ejemplo n.º 1
0
benchmark_type graph_bench() {
  adjlist* graphp = new adjlist;
  sparray* visitedp = new sparray;
  std::string fname = pasl::util::cmdline::parse_or_default_string("fname", "");
  vtxid_type source = pasl::util::cmdline::parse_or_default_long("source", (value_type)0);
  if (fname == "")
    pasl::util::atomic::fatal([] { std::cerr << "missing filename for graph: -fname filename"; });
  auto init = [=] {
    graphp->load_from_file(fname);
  };
  auto bench = [=] {
    *visitedp = bfs(*graphp, source);
  };
  auto output = [=] {
    long nb_visited = sum(*visitedp);
    long max_dist = max(*visitedp);
    std::cout << "nb_visited\t" << nb_visited << std::endl;
    std::cout << "max_dist\t" << max_dist << std::endl;
  };
  auto destroy = [=] {
    delete graphp;
    delete visitedp;
  };
  return make_benchmark(init, bench, output, destroy);
}
Ejemplo n.º 2
0
benchmark_type reduce_bench(reduce_bench_type t = reduce_normal) {
  long n = pasl::util::cmdline::parse_or_default_long("n", 1l<<20);
  sparray* inp = new sparray(0);
  value_type* result = new value_type;
  auto init = [=] {
    *inp = fill(n, 1);
  };
  auto bench = [=] {
    if (t == reduce_normal)
      *result = sum(*inp);
    else if (t == reduce_max_ex)
      *result = exercises::max(&(*inp)[0], inp->size());
    else if (t == reduce_plus_ex)
      *result = exercises::plus(&(*inp)[0], inp->size());
    else if (t == reduce_ex)
      *result = exercises::reduce(plus_fct, 0l, &(*inp)[0], inp->size());
  };
  auto output = [=] {
    std::cout << "result " << *result << std::endl;
  };
  auto destroy = [=] {
    delete inp;
    delete result;
  };
  return make_benchmark(init, bench, output, destroy);
}
Ejemplo n.º 3
0
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);
}
Ejemplo n.º 4
0
benchmark_type map_incr_bench(bool student_soln = false) {
  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 = fill(n, 1);
  };
  auto bench = [=] {
    sparray& in = *inp;
    if (student_soln) {
      *outp = sparray(in.size());
      exercises::map_incr(&in[0], &(*outp)[0], in.size());
    } else {
      *outp = map([&] (value_type x) { return x+1; }, in);
    }
  };
  auto output = [=] {
    std::cout << "result " << (*outp)[outp->size()-1] << std::endl;
  };
  auto destroy = [=] {
    delete inp;
    delete outp;
  };
  return make_benchmark(init, bench, output, destroy);
}
Ejemplo n.º 5
0
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);
}
Ejemplo n.º 6
0
int main (int argc, char **argv)
{
    try {
        LV::System::init (argc, argv);

        unsigned int max_runs = 500;

        if (argc > 1) {
            int value = std::atoi (argv[1]);
            if (value <= 0) {
                throw std::invalid_argument ("Number of runs is non-positive");
            }

            max_runs = value;

            argc--; argv++;
        }

        auto benchmark = make_benchmark (argc, argv);
        LV::Tools::run_benchmark (*benchmark, max_runs);

        return EXIT_SUCCESS;
    }
    catch (std::exception& error) {
        std::cerr << "Exception caught: " << error.what () << std::endl;
        return EXIT_FAILURE;
    }
    catch (...) {
        std::cerr << "Unknown exception caught\n";
        return EXIT_FAILURE;
    }
}
Ejemplo n.º 7
0
benchmark_type fib_bench() {
  long n = pasl::util::cmdline::parse_or_default_long("n", 38);
  long* result = new long;
  auto init = [=] {

  };
  auto bench = [=] {
    *result = fib(n);
  };
  auto output = [=] {
    std::cout << "result " << *result << std::endl;
  };
  auto destroy = [=] {
    delete result;
  };
  return make_benchmark(init, bench, output, destroy);
}
Ejemplo n.º 8
0
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);
}
Ejemplo n.º 9
0
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);
}
Ejemplo n.º 10
0
benchmark_type scan_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 = fill(n, 1);
  };
  auto bench = [=] {
    *outp = prefix_sums_excl(*inp).partials;
  };
  auto output = [=] {
    std::cout << "result " << (*outp)[outp->size()-1] << std::endl;
  };
  auto destroy = [=] {
    delete inp;
    delete outp;
  };
  return make_benchmark(init, bench, output, destroy);
}
Ejemplo n.º 11
0
benchmark_type duplicate_bench(bool ex = false) {
  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 = fill(n, 1);
  };
  auto bench = [=] {
    *outp = (ex) ? exercises::duplicate(*inp) : duplicate(*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);
}
Ejemplo n.º 12
0
benchmark_type reduce_bench() {
  long n = pasl::util::cmdline::parse_or_default_long("n", 1l<<20);
  sparray* inp = new sparray(0);
  value_type* result = new value_type;
  auto init = [=] {
    *inp = fill(n, 1);
  };
  auto bench = [=] {
    *result = tasks::reduce(plus_fct, 0l, *inp);
  };
  auto output = [=] {
    std::cout << "result " << *result << std::endl;
  };
  auto destroy = [=] {
    delete inp;
    delete result;
  };
  return make_benchmark(init, bench, output, destroy);
}
Ejemplo n.º 13
0
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);
}