return static_cast<VM*>(surf_host_resource_priv(resource));
}
-char *surf_routing_edge_name(sg_routing_edge_t edge){
- return edge->getName();
-}
-
extern double NOW;
-extern double *surf_mins; /* return value of share_resources for each model */
-extern int surf_min_index; /* current index in surf_mins */
-extern double surf_min; /* duration determined by surf_solve */
void surf_presolve(void)
{
Model *model = NULL;
unsigned int iter;
- XBT_DEBUG
- ("First Run! Let's \"purge\" events and put models in the right state");
+ XBT_DEBUG ("First Run! Let's \"purge\" events and put models in the right state");
+
while ((next_event_date = tmgr_history_next_date(history)) != -1.0) {
if (next_event_date > NOW)
break;
model->updateActionsState(NOW, 0.0);
}
-/**
- * Computes when the next action executed in a
- * specific model terminates; this is important,
- * because we can safely skip the amount of time
- * in which no model (read: not even a single one)
- * changes its state; so, if for instance network,
- * cpu, storage don't change (and if we assume they're
- * the only models we use... simple example here :) )
- * for 2s, 1s, 3s then we can skip 1s as after this
- * amount of time the new state needs to be considered.
- *
- */
-static void surf_share_resources(surf_model_t model)
-{
- double next_action_end = -1.0;
- int i = __sync_fetch_and_add(&surf_min_index, 1);
- if (strcmp(model->getName(), "network NS3")) {
- XBT_DEBUG("Running for Resource [%s]", model->getName());
- next_action_end = model->shareResources(NOW);
- XBT_DEBUG("Resource [%s] : next action end = %f",
- model->getName(), next_action_end);
- }
- surf_mins[i] = next_action_end;
-}
-
-static void surf_update_actions_state(surf_model_t model)
-{
- model->updateActionsState(NOW, surf_min);
-}
-
double surf_solve(double max_date)
{
- surf_min = -1.0; /* duration */
+ double surf_min = -1.0; /* duration */
double next_event_date = -1.0;
double model_next_action_end = -1.0;
double value = -1.0;
}
XBT_DEBUG("Looking for next action end for all models except NS3");
-
- if (surf_mins == NULL) {
- surf_mins = xbt_new(double, xbt_dynar_length(model_list_invoke));
- }
- surf_min_index = 0;
-
- /* sequential version */
xbt_dynar_foreach(model_list_invoke, iter, model) {
- surf_share_resources(static_cast<Model*>(model));
- }
-
- unsigned i;
- for (i = 0; i < xbt_dynar_length(model_list_invoke); i++) {
- if ((surf_min < 0.0 || surf_mins[i] < surf_min)
- && surf_mins[i] >= 0.0) {
- surf_min = surf_mins[i];
- }
+ double next_action_end = -1.0;
+ if (strcmp(model->getName(), "network NS3")) {
+ XBT_DEBUG("Running for Resource [%s]", model->getName());
+ next_action_end = model->shareResources(NOW);
+ XBT_DEBUG("Resource [%s] : next action end = %f",
+ model->getName(), next_action_end);
+ }
+ if ((surf_min < 0.0 || next_action_end < surf_min)
+ && next_action_end >= 0.0) {
+ surf_min = next_action_end;
+ }
}
XBT_DEBUG("Min for resources (remember that NS3 don't update that value) : %f", surf_min);
/* FIXME: model_list or model_list_invoke? revisit here later */
/* sequential version */
xbt_dynar_foreach(model_list, iter, model) {
- surf_update_actions_state(model);
+ model->updateActionsState(NOW, surf_min);
}
TRACE_paje_dump_buffer (0);