X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/030f7802748d2e268d26355cba6f254c8995edcf..2604d800f6a2354637dc78255822c41e7d8a45b5:/src/smpi/internals/smpi_bench.cpp diff --git a/src/smpi/internals/smpi_bench.cpp b/src/smpi/internals/smpi_bench.cpp index 1c1de228ea..af6cf7817b 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" @@ -57,7 +56,7 @@ void smpi_execute_flops(double flops) { XBT_DEBUG("Handle real computation time: %f flops", flops); simgrid::s4u::this_actor::exec_init(flops) ->set_name("computation") - ->set_tracing_category(TRACE_internal_smpi_get_category()) + ->set_tracing_category(smpi_process()->get_tracing_category()) ->start() ->wait(); smpi_switch_data_segment(simgrid::s4u::Actor::self()); @@ -373,12 +372,11 @@ void smpi_sample_1(int global, const char *file, int line, int iters, double thr } } -int smpi_sample_2(int global, const char *file, int line) +int smpi_sample_2(int global, const char *file, int line, int iter_count) { SampleLocation loc(global, file, line); - int res; - XBT_DEBUG("sample2 %s", loc.c_str()); + XBT_DEBUG("sample2 %s %d", loc.c_str(), iter_count); auto sample = samples.find(loc); if (sample == samples.end()) xbt_die("Y U NO use SMPI_SAMPLE_* macros? Stop messing directly with smpi_sample_* functions!"); @@ -389,31 +387,25 @@ int smpi_sample_2(int global, const char *file, int line) XBT_DEBUG("benchmarking: count:%d iter:%d stderr:%f thres:%f; mean:%f; total:%f", data.count, data.iters, data.relstderr, data.threshold, data.mean, data.sum); smpi_bench_begin(); - res = 1; } else { // Enough data, no more bench (either we got enough data from previous visits to this benched nest, or we just //ran one bench and need to bail out now that our job is done). Just sleep instead if (not data.need_more_benchs()){ XBT_DEBUG("No benchmark (either no need, or just ran one): count >= iter (%d >= %d) or stderrset_sampling(0); - smpi_execute(sleep); + smpi_execute(data.mean*iter_count); smpi_bench_begin(); + return 0; } else { XBT_DEBUG("Skipping - Benchmark already performed - accumulating time"); xbt_os_threadtimer_start(smpi_process()->timer()); } - res = 0; // prepare to capture future, unrelated computations } - - return res; + return 1; } void smpi_sample_3(int global, const char *file, int line) @@ -448,6 +440,25 @@ void smpi_sample_3(int global, const char *file, int line) data.benching = false; } +int smpi_sample_exit(int global, const char *file, int line, int iter_count){ + if (smpi_process()->sampling()){ + SampleLocation loc(global, file, line); + + XBT_DEBUG("sample exit %s", loc.c_str()); + auto sample = samples.find(loc); + if (sample == samples.end()) + xbt_die("Y U NO use SMPI_SAMPLE_* macros? Stop messing directly with smpi_sample_* functions!"); + LocalData& data = sample->second; + + if (smpi_process()->sampling()){//end of loop, but still sampling needed + smpi_process()->set_sampling(0); + smpi_execute(data.mean*iter_count); + smpi_bench_begin(); + } + } + return 0; +} + smpi_trace_call_location_t* smpi_trace_get_call_location() { return smpi_process()->call_location();