rosa/bench/graspels/sk.cpp

75 lines
3.0 KiB
C++

#include "common.h"
using ELS = rosa::SkelEls<
tsp::Solution,
Descent,
Move2Opt, Descent, FN(selectMin)
>;
using GRASPxELS = rosa::SkelGrasp<
tsp::Problem, tsp::Solution,
RGreedy<tsp::Solution>, ELS,
FN(selectMin)
>;
tsp::Solution sk_seq(tsp::Problem const& p, RNG&, Arguments const& args) {
auto graspEls = alsk::implement<alsk::exec::Sequential, GRASPxELS>();
graspEls.executor.repeatability.upTo(4);
graspEls.state.context.seed = args.seed;
graspEls.executor.cores = 1;
graspEls.skeleton.task.task<0>() = rgreedy();
graspEls.skeleton.task.task<1>().task<1>().n = ELS_ITER_MAX;
graspEls.skeleton.task.task<1>().task<1>().task.n = ELS_GEN;
graspEls.skeleton.n = GRASP_N;
return graspEls(p);
}
tsp::Solution sk_par_firstlevel(tsp::Problem const& p, RNG&, Arguments const& args) {
auto graspEls = alsk::implement<alsk::exec::FirstLevelEqui, GRASPxELS>();
graspEls.executor.repeatability.upTo(4);
graspEls.state.context.seed = args.seed;
graspEls.executor.cores = NTHREADS;
graspEls.skeleton.task.task<0>() = rgreedy();
graspEls.skeleton.task.task<1>().task<1>().n = ELS_ITER_MAX;
graspEls.skeleton.task.task<1>().task<1>().task.n = ELS_GEN;
graspEls.skeleton.n = GRASP_N;
return graspEls(p);
}
tsp::Solution sk_par_staticpool(tsp::Problem const& p, RNG&, Arguments const& args) {
auto graspEls = alsk::implement<alsk::exec::StaticPool, GRASPxELS>();
graspEls.state.context.seed = args.seed;
graspEls.executor.cores = NTHREADS;
graspEls.skeleton.task.task<0>() = rgreedy();
graspEls.skeleton.task.task<1>().task<1>().n = ELS_ITER_MAX;
graspEls.skeleton.task.task<1>().task<1>().task.n = ELS_GEN;
graspEls.skeleton.n = GRASP_N;
return graspEls(p);
}
tsp::Solution sk_par_dynamicpool(tsp::Problem const& p, RNG&, Arguments const& args) {
auto graspEls = alsk::implement<alsk::exec::DynamicPool, GRASPxELS>();
graspEls.state.context.seed = args.seed;
graspEls.executor.cores = NTHREADS;
graspEls.skeleton.task.task<0>() = rgreedy();
graspEls.skeleton.task.task<1>().task<1>().n = ELS_ITER_MAX;
graspEls.skeleton.task.task<1>().task<1>().task.n = ELS_GEN;
graspEls.skeleton.n = GRASP_N;
return graspEls(p);
}
tsp::Solution sk_par_thread(tsp::Problem const& p, RNG&, Arguments const&) {
auto graspEls = alsk::implement<alsk::exec::StaticThread, GRASPxELS>();
graspEls.executor.cores = NTHREADS;
graspEls.skeleton.task.task<0>() = rgreedy();
graspEls.skeleton.task.task<1>().task<1>().n = ELS_ITER_MAX;
graspEls.skeleton.task.task<1>().task<1>().task.n = ELS_GEN;
graspEls.skeleton.n = GRASP_N;
return graspEls(p);
}