A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
[mmalloc] Extends the junk area and use finer grained allocations
[simgrid.git]
/
src
/
surf
/
surf_interface.cpp
diff --git
a/src/surf/surf_interface.cpp
b/src/surf/surf_interface.cpp
index 56454da3db1690260e1369693fb4e1d5f07397cb..7cf6ef8b67f14ba8f9f9fbc25f42bf3d03fd4c04 100644
(file)
--- a/
src/surf/surf_interface.cpp
+++ b/
src/surf/surf_interface.cpp
@@
-520,7
+520,7
@@
double Model::shareResourcesLazy(double now)
{
ActionPtr action = NULL;
double min = -1;
- double
value
;
+ double
share, time_to_completion
;
XBT_DEBUG
("Before share resources, the size of modified actions set is %zd",
@@
-533,29
+533,30
@@
double Model::shareResourcesLazy(double now)
p_modifiedSet->size());
while(!p_modifiedSet->empty()) {
-
action = &(p_modifiedSet->front());
-
p_modifiedSet->pop_front();
+ action = &(p_modifiedSet->front());
+ p_modifiedSet->pop_front();
int max_dur_flag = 0;
if (action->getStateSet() != p_runningActionSet)
continue;
/* bogus priority, skip it */
- if (action->getPriority() <= 0)
+ if (action->getPriority() <= 0
|| action->getHat()==LATENCY
)
continue;
action->updateRemainingLazy(now);
min = -1;
- value = lmm_variable_getvalue(action->getVariable());
- if (value > 0) {
+ time_to_completion = -1;
+ share = lmm_variable_getvalue(action->getVariable());
+
+ if (share > 0) {
if (action->getRemains() > 0) {
- value = action->getRemainsNoUpdate() / value;
- min = now + value;
+ time_to_completion = action->getRemainsNoUpdate() / share;
} else {
- value = 0.0;
- min = now;
+ time_to_completion = 0.0;
}
+ min = now + time_to_completion; // when the task will complete if nothing changes
}
if ((action->getMaxDuration() != NO_MAX_DURATION)
@@
-563,12
+564,15
@@
double Model::shareResourcesLazy(double now)
|| action->getStartTime() +
action->getMaxDuration() < min)) {
min = action->getStartTime() +
- action->getMaxDuration();
+ action->getMaxDuration();
// when the task will complete anyway because of the deadline if any
max_dur_flag = 1;
}
- XBT_DEBUG("Action(%p) Start %f Finish %f Max_duration %f", action,
- action->getStartTime(), now + value,
+
+ XBT_DEBUG("Action(%p) corresponds to variable %d", action, action->getVariable()->id_int);
+
+ XBT_DEBUG("Action(%p) Start %f. May finish at %f (got a share of %f). Max_duration %f", action,
+ action->getStartTime(), min, share,
action->getMaxDuration());
if (min != -1) {
@@
-755,26
+759,29
@@
const char *surf_action_state_names[6] = {
"SURF_ACTION_NOT_IN_THE_SYSTEM"
};
-Action::Action()
-: m_refcount(1)
-{}
+void Action::initialize(ModelPtr model, double cost, bool failed,
+ lmm_variable_t var)
+{
+ m_priority = 1.0;
+ m_refcount = 1;
+ m_remains = cost;
+ m_maxDuration = NO_MAX_DURATION;
+ m_finish = -1.0;
+ m_failed = failed;
+ m_start = surf_get_clock();
+ m_cost = cost;
+ p_model = model;
+ p_data = NULL;
+ p_variable = var;
+ m_lastValue = 0;
+ m_lastUpdate = 0;
+ m_suspended = false;
+ m_hat = NOTSET;
+}
Action::Action(ModelPtr model, double cost, bool failed)
- : m_priority(1.0)
- , m_refcount(1)
- , m_remains(cost)
- , m_maxDuration(NO_MAX_DURATION)
- , m_finish(-1.0)
- , m_failed(failed)
- , m_start(surf_get_clock())
- , m_cost(cost)
- , p_model(model)
- , p_data(NULL)
- , p_variable(NULL)
- , m_lastValue(0)
- , m_lastUpdate(0)
- , m_suspended(false)
{
+ initialize(model, cost, failed);
#ifdef HAVE_TRACING
p_category = NULL;
#endif
@@
-789,21
+796,8
@@
Action::Action(ModelPtr model, double cost, bool failed)
}
Action::Action(ModelPtr model, double cost, bool failed, lmm_variable_t var)
- : m_priority(1.0)
- , m_refcount(1)
- , m_remains(cost)
- , m_maxDuration(NO_MAX_DURATION)
- , m_finish(-1.0)
- , m_failed(failed)
- , m_start(surf_get_clock())
- , m_cost(cost)
- , p_model(model)
- , p_data(NULL)
- , p_variable(var)
- , m_lastValue(0)
- , m_lastUpdate(0)
- , m_suspended(false)
{
+ initialize(model, cost, failed, var);
#ifdef HAVE_TRACING
p_category = NULL;
#endif
@@
-1053,7
+1047,7
@@
void Action::updateRemainingLazy(double now)
if (m_remains > 0) {
XBT_DEBUG("Updating action(%p): remains was %f, last_update was: %f", this, m_remains, m_lastUpdate);
- double_update(&m_remains, m_lastValue * delta);
+ double_update(&m_remains, m_lastValue * delta
, sg_surf_precision*sg_maxmin_precision
);
#ifdef HAVE_TRACING
if (getModel() == static_cast<ModelPtr>(surf_cpu_model_pm) && TRACE_is_enabled()) {
@@
-1067,7
+1061,7
@@
void Action::updateRemainingLazy(double now)
if(getModel() == static_cast<ModelPtr>(surf_network_model))
{
if (m_maxDuration != NO_MAX_DURATION)
- double_update(&m_maxDuration, delta);
+ double_update(&m_maxDuration, delta
, sg_surf_precision
);
//FIXME: duplicated code
if ((m_remains <= 0) &&