From: Frederic Suter Date: Tue, 16 Aug 2016 20:16:48 +0000 (+0200) Subject: dynar-- for trace mgmt X-Git-Tag: v3_14~538 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/66acb13a76dfe861a60220704697e361495e0eb0 dynar-- for trace mgmt --- diff --git a/src/surf/cpu_ti.cpp b/src/surf/cpu_ti.cpp index fdcdf176da..90e5e8510e 100644 --- a/src/surf/cpu_ti.cpp +++ b/src/surf/cpu_ti.cpp @@ -28,15 +28,13 @@ void cpu_ti_action_update_index_heap(void *action, int i) CpuTiTrace::CpuTiTrace(tmgr_trace_t speedTrace) { - s_tmgr_event_t val; - unsigned int cpt; double integral = 0; double time = 0; int i = 0; - timePoints_ = static_cast(xbt_malloc0(sizeof(double) * (xbt_dynar_length(speedTrace->event_list) + 1))); - integral_ = static_cast(xbt_malloc0(sizeof(double) * (xbt_dynar_length(speedTrace->event_list) + 1))); - nbPoints_ = xbt_dynar_length(speedTrace->event_list) + 1; - xbt_dynar_foreach(speedTrace->event_list, cpt, val) { + nbPoints_ = speedTrace->event_list.size() + 1; + timePoints_ = static_cast(xbt_malloc0(sizeof(double) * nbPoints_)); + integral_ = static_cast(xbt_malloc0(sizeof(double) * nbPoints_)); + for (auto val : speedTrace->event_list) { timePoints_[i] = time; integral_[i] = integral; integral += val.delta * val.value; @@ -241,11 +239,9 @@ double CpuTiTrace::solveSimple(double a, double amount) */ double CpuTiTgmr::getPowerScale(double a) { - s_tmgr_event_t val; - double reduced_a = a - floor(a / lastTime_) * lastTime_; int point = trace_->binarySearch(trace_->timePoints_, reduced_a, 0, trace_->nbPoints_ - 1); - xbt_dynar_get_cpy(speedTrace_->event_list, point, &val); + s_tmgr_event_t val = speedTrace_->event_list.at(point); return val.value; } @@ -259,8 +255,6 @@ double CpuTiTgmr::getPowerScale(double a) CpuTiTgmr::CpuTiTgmr(tmgr_trace_t speedTrace, double value) { double total_time = 0.0; - s_tmgr_event_t val; - unsigned int cpt; trace_ = 0; /* no availability file, fixed trace */ @@ -272,8 +266,8 @@ CpuTiTgmr::CpuTiTgmr(tmgr_trace_t speedTrace, double value) } /* only one point available, fixed trace */ - if (xbt_dynar_length(speedTrace->event_list) == 1) { - xbt_dynar_get_cpy(speedTrace->event_list, 0, &val); + if (speedTrace->event_list.size() == 1) { + s_tmgr_event_t val = speedTrace->event_list.front(); type_ = TRACE_FIXED; value_ = val.value; return; @@ -283,7 +277,7 @@ CpuTiTgmr::CpuTiTgmr(tmgr_trace_t speedTrace, double value) speedTrace_ = speedTrace; /* count the total time of trace file */ - xbt_dynar_foreach(speedTrace->event_list, cpt, val) { + for (auto val: speedTrace->event_list) { total_time += val.delta; } trace_ = new CpuTiTrace(speedTrace); @@ -431,9 +425,8 @@ void CpuTi::setSpeedTrace(tmgr_trace_t trace) speedIntegratedTrace_ = new CpuTiTgmr(trace, speed_.scale); /* add a fake trace event if periodicity == 0 */ - if (trace && xbt_dynar_length(trace->event_list) > 1) { - s_tmgr_event_t val; - xbt_dynar_get_cpy(trace->event_list, xbt_dynar_length(trace->event_list) - 1, &val); + if (trace && trace->event_list.size() > 1) { + s_tmgr_event_t val = trace->event_list.back(); if (val.delta < 1e-12) speed_.event = future_evt_set->add_trace(tmgr_empty_trace_new(), 0.0, this); } @@ -444,7 +437,6 @@ void CpuTi::apply_event(tmgr_trace_iterator_t event, double value) if (event == speed_.event) { tmgr_trace_t speedTrace; CpuTiTgmr *trace; - s_tmgr_event_t val; XBT_DEBUG("Finish trace date: value %f", value); /* update remaining of actions and put in modified cpu swag */ @@ -453,7 +445,7 @@ void CpuTi::apply_event(tmgr_trace_iterator_t event, double value) modified(true); speedTrace = speedIntegratedTrace_->speedTrace_; - xbt_dynar_get_cpy(speedTrace->event_list, xbt_dynar_length(speedTrace->event_list) - 1, &val); + s_tmgr_event_t val = speedTrace->event_list.back(); delete speedIntegratedTrace_; speed_.scale = val.value; diff --git a/src/surf/trace_mgr.cpp b/src/surf/trace_mgr.cpp index e4d1f1404c..bdf633941a 100644 --- a/src/surf/trace_mgr.cpp +++ b/src/surf/trace_mgr.cpp @@ -18,18 +18,9 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_trace, surf, "Surf trace management"); static std::unordered_map trace_list; -simgrid::trace_mgr::trace::trace() -{ - event_list = xbt_dynar_new(sizeof(s_tmgr_event_t), nullptr); -} - -simgrid::trace_mgr::trace::~trace() -{ - xbt_dynar_free(&event_list); -} -simgrid::trace_mgr::future_evt_set::future_evt_set() -{ -} +simgrid::trace_mgr::trace::trace()=default; +simgrid::trace_mgr::trace::~trace()=default; +simgrid::trace_mgr::future_evt_set::future_evt_set()=default; simgrid::trace_mgr::future_evt_set::~future_evt_set() { @@ -73,11 +64,11 @@ tmgr_trace_t tmgr_trace_new_from_string(const char *name, const char *input, dou s_tmgr_event_t first_event; first_event.delta=event.delta; first_event.value=-1.0; - xbt_dynar_push(trace->event_list, &first_event); + trace->event_list.push_back(first_event); } } - xbt_dynar_push(trace->event_list, &event); - last_event = (tmgr_event_t)xbt_dynar_get_ptr(trace->event_list, xbt_dynar_length(trace->event_list) - 1); + trace->event_list.push_back(event); + last_event = &(trace->event_list.back()); } if (last_event) last_event->delta = periodicity; @@ -111,7 +102,7 @@ tmgr_trace_t tmgr_empty_trace_new() s_tmgr_event_t event; event.delta = 0.0; event.value = 0.0; - xbt_dynar_push(trace->event_list, &event); + trace->event_list.push_back(event); return trace; } @@ -131,7 +122,7 @@ tmgr_trace_iterator_t simgrid::trace_mgr::future_evt_set::add_trace(tmgr_trace_t trace_iterator->idx = 0; trace_iterator->resource = resource; - xbt_assert((trace_iterator->idx < xbt_dynar_length(trace->event_list)), "Your trace should have at least one event!"); + xbt_assert((trace_iterator->idx < trace->event_list.size()), "Your trace should have at least one event!"); xbt_heap_push(p_heap, trace_iterator, start_time); @@ -162,11 +153,11 @@ tmgr_trace_iterator_t simgrid::trace_mgr::future_evt_set::pop_leq( tmgr_trace_t trace = trace_iterator->trace; *resource = trace_iterator->resource; - tmgr_event_t event = (tmgr_event_t)xbt_dynar_get_ptr(trace->event_list, trace_iterator->idx); + tmgr_event_t event = &(trace->event_list.at(trace_iterator->idx)); *value = event->value; - if (trace_iterator->idx < xbt_dynar_length(trace->event_list) - 1) { + if (trace_iterator->idx < trace->event_list.size() - 1) { xbt_heap_push(p_heap, trace_iterator, event_date + event->delta); trace_iterator->idx++; } else if (event->delta > 0) { /* Last element, checking for periodicity */ diff --git a/src/surf/trace_mgr.hpp b/src/surf/trace_mgr.hpp index 1563729f79..26f221372f 100644 --- a/src/surf/trace_mgr.hpp +++ b/src/surf/trace_mgr.hpp @@ -9,9 +9,9 @@ #include "xbt/heap.h" #include "simgrid/forward.h" +#include SG_BEGIN_DECL() -#include "xbt/heap.h" typedef struct tmgr_event { double delta; @@ -73,7 +73,7 @@ public: trace(); virtual ~trace(); //private: - xbt_dynar_t event_list; + std::vector event_list; }; /** @brief Future Event Set (collection of iterators over the traces)