X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/47158a9055045f3bce00e77b9010e6a8b0e23802..018dbe8afafe687069d74c58fea3a2f9a15a8085:/src/smpi/internals/smpi_bench.cpp diff --git a/src/smpi/internals/smpi_bench.cpp b/src/smpi/internals/smpi_bench.cpp index c6af1236e0..20e22c73fd 100644 --- a/src/smpi/internals/smpi_bench.cpp +++ b/src/smpi/internals/smpi_bench.cpp @@ -11,7 +11,6 @@ #include "smpi_comm.hpp" #include "src/internal_config.h" #include "src/mc/mc_replay.hpp" -#include "src/simix/ActorImpl.hpp" #include "xbt/config.hpp" #include "src/smpi/include/smpi_actor.hpp" @@ -39,20 +38,8 @@ double smpi_host_speed; SharedMallocType smpi_cfg_shared_malloc = SharedMallocType::GLOBAL; double smpi_total_benched_time = 0; -extern "C" XBT_PUBLIC void smpi_execute_flops_(double* flops); - -void smpi_execute_flops_(double *flops) -{ - smpi_execute_flops(*flops); -} - -extern "C" XBT_PUBLIC void smpi_execute_(double* duration); -void smpi_execute_(double *duration) -{ - smpi_execute(*duration); -} - -void smpi_execute_flops(double flops) { +// Private execute_flops used by smpi_execute and spmi_execute_benched +void private_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); simgrid::s4u::this_actor::exec_init(flops) @@ -63,6 +50,15 @@ void smpi_execute_flops(double flops) { smpi_switch_data_segment(simgrid::s4u::Actor::self()); } +void smpi_execute_flops(double flops) { + int rank = simgrid::s4u::this_actor::get_pid(); + TRACE_smpi_computing_in(rank, flops); + + private_execute_flops(flops); + + TRACE_smpi_computing_out(rank); +} + void smpi_execute(double duration) { if (duration >= smpi_cpu_threshold) { @@ -71,7 +67,7 @@ void smpi_execute(double duration) int rank = simgrid::s4u::this_actor::get_pid(); TRACE_smpi_computing_in(rank, flops); - smpi_execute_flops(flops); + private_execute_flops(flops); TRACE_smpi_computing_out(rank); @@ -112,12 +108,25 @@ void smpi_bench_begin() xbt_os_threadtimer_start(smpi_process()->timer()); } +double smpi_adjust_comp_speed(){ + double speedup=1; + if (simgrid::config::get_value("smpi/comp-adjustment-file")[0] != '\0') { + + smpi_trace_call_location_t* loc = smpi_process()->call_location(); + std::string key = loc->get_composed_key(); + std::unordered_map::const_iterator it = location2speedup.find(key); + if (it != location2speedup.end()) { + speedup = it->second; + } + } + return speedup; +} + void smpi_bench_end() { if (MC_is_active() || MC_record_replay_is_active()) return; - double speedup = 1; xbt_os_timer_t timer = smpi_process()->timer(); xbt_os_threadtimer_stop(timer); @@ -150,19 +159,9 @@ void smpi_bench_end() } // Maybe we need to artificially speed up or slow down our computation based on our statistical analysis. - if (simgrid::config::get_value("smpi/comp-adjustment-file")[0] != '\0') { - - smpi_trace_call_location_t* loc = smpi_process()->call_location(); - std::string key = loc->get_composed_key(); - std::unordered_map::const_iterator it = location2speedup.find(key); - if (it != location2speedup.end()) { - speedup = it->second; - } - } - // Simulate the benchmarked computation unless disabled via command-line argument if (simgrid::config::get_value("smpi/simulate-computation")) { - smpi_execute(xbt_os_timer_elapsed(timer)/speedup); + smpi_execute(xbt_os_timer_elapsed(timer)/smpi_adjust_comp_speed()); } #if HAVE_PAPI @@ -190,7 +189,7 @@ static unsigned int private_sleep(double secs) int rank = simgrid::s4u::this_actor::get_pid(); TRACE_smpi_sleeping_in(rank, secs); - simcall_process_sleep(secs); + simgrid::s4u::this_actor::sleep_for(secs); TRACE_smpi_sleeping_out(rank); @@ -202,14 +201,14 @@ unsigned int smpi_sleep(unsigned int secs) { if (not smpi_process()) return sleep(secs); - return private_sleep(static_cast(secs)); + return private_sleep(secs); } int smpi_usleep(useconds_t usecs) { if (not smpi_process()) return usleep(usecs); - return static_cast(private_sleep(static_cast(usecs) / 1000000.0)); + return static_cast(private_sleep(usecs / 1000000.0)); } #if _POSIX_TIMERS > 0 @@ -217,7 +216,7 @@ 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))); + return static_cast(private_sleep(tp->tv_sec + tp->tv_nsec / 1000000000.0)); } #endif @@ -237,7 +236,7 @@ int smpi_gettimeofday(struct timeval* tv, struct timezone* tz) #endif } if (smpi_wtime_sleep > 0) - simcall_process_sleep(smpi_wtime_sleep); + simgrid::s4u::this_actor::sleep_for(smpi_wtime_sleep); smpi_bench_begin(); return 0; } @@ -255,7 +254,7 @@ int smpi_clock_gettime(clockid_t clk_id, struct timespec* tp) tp->tv_nsec = static_cast((now - tp->tv_sec) * 1e9); } if (smpi_wtime_sleep > 0) - simcall_process_sleep(smpi_wtime_sleep); + simgrid::s4u::this_actor::sleep_for(smpi_wtime_sleep); smpi_bench_begin(); return 0; } @@ -268,7 +267,7 @@ double smpi_mpi_wtime() smpi_bench_end(); time = SIMIX_get_clock(); if (smpi_wtime_sleep > 0) - simcall_process_sleep(smpi_wtime_sleep); + simgrid::s4u::this_actor::sleep_for(smpi_wtime_sleep); smpi_bench_begin(); } else { time = SIMIX_get_clock(); @@ -430,7 +429,7 @@ void smpi_sample_3(int global, const char *file, int line) double period = xbt_os_timer_elapsed(smpi_process()->timer()); data.sum += period; data.sum_pow2 += period * period; - double n = static_cast(data.count); + double n = data.count; data.mean = data.sum / n; data.relstderr = sqrt((data.sum_pow2 / n - data.mean * data.mean) / n) / data.mean;