Beispiel #1
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);
}
Beispiel #2
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);
}
Beispiel #3
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);
}
Beispiel #4
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);
}
Beispiel #5
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);
}