#ifndef ROSA_BENCH_GRASPELS_COMMON_H #define ROSA_BENCH_GRASPELS_COMMON_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef DATA_FILE #define DATA_FILE "../data/qa194" #endif #ifndef GRASP_N #define GRASP_N 2 #endif #ifndef ELS_ITER_MAX #define ELS_ITER_MAX 20 #endif #ifndef ELS_GEN #define ELS_GEN 10 #endif #ifndef FUNC #define FUNC none #endif #ifndef NTHREADS #define NTHREADS 1 #endif #ifndef SEED #define SEED std::mt19937::default_seed #endif #define STR_(A) #A #define STR(A) STR_(A) /* repeatable* */ #define REPRODUCIBLE using RNG = std::mt19937; struct Arguments { std::mt19937::result_type seed; }; inline tsp::Solution selectMin(tsp::Solution const& a, tsp::Solution const& b) { return a{2}; } inline double tvdiff(struct timeval& b, struct timeval& e) { return (e.tv_sec - b.tv_sec) + (e.tv_usec - b.tv_usec) / 1e6; } template void timeit(int who, std::string const& prefix, F&& f, Args&&... args) { using Clock = std::chrono::high_resolution_clock; struct rusage b, e; auto tp0 = Clock::now(); getrusage(who, &b); std::forward(f)(std::forward(args)...); getrusage(who, &e); auto tp1 = Clock::now(); std::cout << prefix; std::cout << "[" << std::this_thread::get_id() << "] "; std::cout << "time: "; std::cout << "real " << std::chrono::duration(tp1 - tp0).count() << " "; std::cout << "user " << tvdiff(b.ru_utime, e.ru_utime) << " "; std::cout << "sys " << tvdiff(b.ru_stime, e.ru_stime); std::cout << std::endl; } #endif