X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f84aecd6adbd11b2e31a6cd47016bc03aa778a6e..de190af4974a9ed57a52e649e5cbe0ac83512acb:/src/smpi/internals/smpi_bench.cpp diff --git a/src/smpi/internals/smpi_bench.cpp b/src/smpi/internals/smpi_bench.cpp index ea22f3afa1..fcd845352e 100644 --- a/src/smpi/internals/smpi_bench.cpp +++ b/src/smpi/internals/smpi_bench.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2007, 2009-2018. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2007-2018. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -11,6 +11,9 @@ #include "src/internal_config.h" #include "src/mc/mc_replay.hpp" #include "src/simix/ActorImpl.hpp" +#include "xbt/config.hpp" +#include "getopt.h" + #include #ifndef WIN32 @@ -45,7 +48,7 @@ void smpi_execute_(double *duration) void smpi_execute_flops(double flops) { xbt_assert(flops >= 0, "You're trying to execute a negative amount of flops (%f)!", flops); XBT_DEBUG("Handle real computation time: %f flops", flops); - smx_activity_t action = simcall_execution_start("computation", flops, 1, 0, smpi_process()->process()->getHost()); + smx_activity_t action = simcall_execution_start("computation", flops, 1, 0, smpi_process()->process()->get_host()); simcall_set_category (action, TRACE_internal_smpi_get_category()); simcall_execution_wait(action); smpi_switch_data_segment(simgrid::s4u::Actor::self()); @@ -56,7 +59,7 @@ void smpi_execute(double duration) if (duration >= smpi_cpu_threshold) { XBT_DEBUG("Sleep for %g to handle real computation time", duration); double flops = duration * smpi_host_speed; - int rank = simgrid::s4u::Actor::self()->getPid(); + int rank = simgrid::s4u::this_actor::get_pid(); TRACE_smpi_computing_in(rank, flops); smpi_execute_flops(flops); @@ -79,7 +82,7 @@ void smpi_execute_benched(double duration) void smpi_bench_begin() { - if (smpi_privatize_global_variables == SMPI_PRIVATIZE_MMAP) { + if (smpi_privatize_global_variables == SmpiPrivStrategies::Mmap) { smpi_switch_data_segment(simgrid::s4u::Actor::self()); } @@ -151,14 +154,14 @@ void smpi_bench_end() } // Simulate the benchmarked computation unless disabled via command-line argument - if (xbt_cfg_get_boolean("smpi/simulate-computation")) { + if (simgrid::config::get_config("smpi/simulate-computation")) { smpi_execute(xbt_os_timer_elapsed(timer)/speedup); } #if HAVE_PAPI if (xbt_cfg_get_string("smpi/papi-events")[0] != '\0' && TRACE_smpi_is_enabled()) { container_t container = - new simgrid::instr::Container(std::string("rank-") + std::to_string(simgrid::s4u::Actor::self()->getPid())); + new simgrid::instr::Container(std::string("rank-") + std::to_string(simgrid::s4u::this_actor::get_pid())); papi_counter_t& counter_data = smpi_process()->papi_counters(); for (auto const& pair : counter_data) { @@ -190,23 +193,32 @@ static unsigned int private_sleep(double secs) unsigned int smpi_sleep(unsigned int secs) { + if (not smpi_process()) + return sleep(secs); return private_sleep(static_cast(secs)); } int smpi_usleep(useconds_t usecs) { + if (not smpi_process()) + return usleep(usecs); return static_cast(private_sleep(static_cast(usecs) / 1000000.0)); } #if _POSIX_TIMERS > 0 -int smpi_nanosleep(const struct timespec* tp, struct timespec* /*t*/) +int smpi_nanosleep(const struct timespec* tp, struct timespec* t) { + if (not smpi_process()) + return nanosleep(tp,t); return static_cast(private_sleep(static_cast(tp->tv_sec + tp->tv_nsec / 1000000000.0))); } #endif -int smpi_gettimeofday(struct timeval* tv, void* /*tz*/) +int smpi_gettimeofday(struct timeval* tv, struct timezone* tz) { + if (not smpi_process()) + return gettimeofday(tv, tz); + smpi_bench_end(); double now = SIMIX_get_clock(); if (tv) { @@ -222,8 +234,10 @@ int smpi_gettimeofday(struct timeval* tv, void* /*tz*/) } #if _POSIX_TIMERS > 0 -int smpi_clock_gettime(clockid_t /*clk_id*/, struct timespec* tp) +int smpi_clock_gettime(clockid_t clk_id, struct timespec* tp) { + if (not smpi_process()) + return clock_gettime(clk_id, tp); //there is only one time in SMPI, so clk_id is ignored. smpi_bench_end(); double now = SIMIX_get_clock(); @@ -263,7 +277,7 @@ public: SampleLocation(bool global, const char* file, int line) : std::string(std::string(file) + ":" + std::to_string(line)) { if (not global) - this->append(":" + std::to_string(simgrid::s4u::Actor::self()->getPid())); + this->append(":" + std::to_string(simgrid::s4u::this_actor::get_pid())); } }; @@ -428,3 +442,24 @@ void smpi_bench_destroy() { samples.clear(); } + +int smpi_getopt_long (int argc, char *const *argv, const char *options, + const struct option * long_options, int *opt_index) +{ + if (smpi_process()) + optind = smpi_process()->get_optind(); + int ret = getopt_long (argc, argv, options, long_options, opt_index); + if (smpi_process()) + smpi_process()->set_optind(optind); + return ret; +} + +int smpi_getopt (int argc, char *const *argv, const char *options) +{ + if (smpi_process()) + optind = smpi_process()->get_optind(); + int ret = getopt (argc, argv, options); + if (smpi_process()) + smpi_process()->set_optind(optind); + return ret; +}