X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/149c63f36e15b8500b1e826bda5138318ff7ba2b..88f49b34e91fe95b712d1545ae71a0896f5466c1:/teshsuite/xbt/parmap_bench/parmap_bench.cpp diff --git a/teshsuite/xbt/parmap_bench/parmap_bench.cpp b/teshsuite/xbt/parmap_bench/parmap_bench.cpp index e9a34f2094..6b19832d4c 100644 --- a/teshsuite/xbt/parmap_bench/parmap_bench.cpp +++ b/teshsuite/xbt/parmap_bench/parmap_bench.cpp @@ -5,7 +5,7 @@ #include "src/internal_config.h" // HAVE_FUTEX_H #include "xbt/parmap.hpp" -#include +#include #include #include @@ -19,8 +19,6 @@ constexpr unsigned MODES_DEFAULT = 0x7; constexpr unsigned ARRAY_SIZE = 10007; constexpr unsigned FIBO_MAX = 25; -void (*fun_to_apply)(unsigned*); - static std::string parmap_mode_name(e_xbt_parmap_mode_t mode) { std::string name; @@ -62,7 +60,8 @@ static void fun_big_comp(unsigned* arg) *arg = fibonacci(*arg % FIBO_MAX); } -static void bench_parmap(int nthreads, double timeout, e_xbt_parmap_mode_t mode, bool full_bench) +template +void bench_parmap(int nthreads, double timeout, e_xbt_parmap_mode_t mode, bool full_bench, F func_to_apply) { std::string mode_name = parmap_mode_name(mode); XBT_INFO("** mode = %s", mode_name.c_str()); @@ -86,7 +85,7 @@ static void bench_parmap(int nthreads, double timeout, e_xbt_parmap_mode_t mode, delete parmap; parmap = new simgrid::xbt::Parmap(nthreads, mode); } - parmap->apply(fun_to_apply, data); + parmap->apply(func_to_apply, data); elapsed_time = xbt_os_time() - start_time; i++; } while (elapsed_time < timeout); @@ -95,14 +94,14 @@ static void bench_parmap(int nthreads, double timeout, e_xbt_parmap_mode_t mode, XBT_INFO(" ran %d times in %g seconds (%g/s)", i, elapsed_time, i / elapsed_time); } -static void bench_all_modes(int nthreads, double timeout, unsigned modes, bool full_bench) +template void bench_all_modes(int nthreads, double timeout, unsigned modes, bool full_bench, F func_to_apply) { std::vector all_modes = {XBT_PARMAP_POSIX, XBT_PARMAP_FUTEX, XBT_PARMAP_BUSY_WAIT, XBT_PARMAP_DEFAULT}; for (unsigned i = 0; i < all_modes.size(); i++) { if (1U << i & modes) - bench_parmap(nthreads, timeout, all_modes[i], full_bench); + bench_parmap(nthreads, timeout, all_modes[i], full_bench, func_to_apply); } } @@ -113,7 +112,7 @@ int main(int argc, char* argv[]) unsigned modes = MODES_DEFAULT; xbt_log_control_set("parmap_bench.fmt:[%c/%p]%e%m%n"); - MSG_init(&argc, argv); + simgrid::s4u::Engine e(&argc, argv); if (argc != 3 && argc != 4) { XBT_INFO("Usage: %s nthreads timeout [modes]", argv[0]); @@ -129,30 +128,27 @@ int main(int argc, char* argv[]) } timeout = atof(argv[2]); if (argc == 4) - modes = strtol(argv[2], NULL, 0); + modes = static_cast(strtoul(argv[2], nullptr, 0)); XBT_INFO("Parmap benchmark with %d workers (modes = %#x)...", nthreads, modes); XBT_INFO("%s", ""); SIMIX_context_set_nthreads(nthreads); - fun_to_apply = &fun_small_comp; XBT_INFO("Benchmark for parmap create+apply+destroy (small comp):"); - bench_all_modes(nthreads, timeout, modes, true); + bench_all_modes(nthreads, timeout, modes, true, &fun_small_comp); XBT_INFO("%s", ""); XBT_INFO("Benchmark for parmap apply only (small comp):"); - bench_all_modes(nthreads, timeout, modes, false); + bench_all_modes(nthreads, timeout, modes, false, &fun_small_comp); XBT_INFO("%s", ""); - fun_to_apply = &fun_big_comp; - XBT_INFO("Benchmark for parmap create+apply+destroy (big comp):"); - bench_all_modes(nthreads, timeout, modes, true); + bench_all_modes(nthreads, timeout, modes, true, &fun_big_comp); XBT_INFO("%s", ""); XBT_INFO("Benchmark for parmap apply only (big comp):"); - bench_all_modes(nthreads, timeout, modes, false); + bench_all_modes(nthreads, timeout, modes, false, &fun_big_comp); XBT_INFO("%s", ""); return EXIT_SUCCESS;