double power_peak;
double power_scale;
tmgr_trace_event_t power_event;
+ int core;
e_surf_resource_state_t state_current;
tmgr_trace_event_t state_event;
lmm_constraint_t constraint;
s_surf_action_cpu_Cas01_im_t action;
cpu = xbt_new0(s_cpu_Cas01_im_t, 1);
- xbt_assert0(core==1,"Multi-core not handled with this model yet");
-#ifdef HAVE_TRACING
- TRACE_surf_host_declaration(name, power_scale * power_peak);
-#endif
-
xbt_assert1(!surf_model_resource_by_name(surf_cpu_model, name),
"Host '%s' declared several times in the platform file",
name);
if (power_trace)
cpu->power_event =
tmgr_history_add_trace(history, power_trace, 0.0, 0, cpu);
+ cpu->core = core;
+ xbt_assert1(core>0,"Invalid number of cores %d",core);
cpu->state_current = state_initial;
if (state_trace)
cpu->constraint =
lmm_constraint_new(cpu_im_maxmin_system, cpu,
- cpu->power_scale * cpu->power_peak);
+ cpu->core * cpu->power_scale * cpu->power_peak);
xbt_dict_set(surf_model_resource_set(surf_cpu_model), name, cpu,
surf_resource_free);
double value, double date)
{
cpu_Cas01_im_t cpu = id;
+ lmm_variable_t var = NULL;
+ lmm_element_t elem = NULL;
+
if (event_type == cpu->power_event) {
cpu->power_scale = value;
lmm_update_constraint_bound(cpu_im_maxmin_system, cpu->constraint,
- cpu->power_scale * cpu->power_peak);
+ cpu->core * cpu->power_scale * cpu->power_peak);
#ifdef HAVE_TRACING
TRACE_surf_host_set_power(date, cpu->generic_resource.name,
- cpu->power_scale * cpu->power_peak);
+ cpu->core * cpu->power_scale * cpu->power_peak);
#endif
+ while ((var = lmm_get_var_from_cnst
+ (cpu_im_maxmin_system, cpu->constraint, &elem))) {
+ surf_action_cpu_Cas01_im_t action = lmm_variable_id(var);
+ lmm_update_variable_bound(cpu_im_maxmin_system, action->generic_lmm_action.variable,
+ cpu->power_scale * cpu->power_peak);
+ }
xbt_swag_insert(cpu, cpu_im_modified_cpu);
if (tmgr_trace_event_free(event_type))
cpu->power_event = NULL;
GENERIC_LMM_ACTION(action).variable =
lmm_variable_new(cpu_im_maxmin_system, action,
- GENERIC_ACTION(action).priority, -1.0, 1);
+ GENERIC_ACTION(action).priority, CPU->power_scale * CPU->power_peak, 1);
action->index_heap = -1;
action->cpu = CPU;
xbt_swag_insert(CPU, cpu_im_modified_cpu);
XBT_OUT;
}
+#ifdef HAVE_TRACING
+static void cpu_im_action_set_category(surf_action_t action,
+ const char *category)
+{
+ XBT_IN2("(%p,%s)", action, category);
+ action->category = xbt_strdup (category);
+ XBT_OUT;
+}
+#endif
+
static double cpu_im_action_get_remains(surf_action_t action)
{
XBT_IN1("(%p)", action);
tmgr_trace_t state_trace,
xbt_dict_t cpu_properties)
{
- xbt_assert0(core==1,"Multi-core not handled with this model yet");
cpu_im_new(name, power_peak, power_scale, power_trace, core,
state_initial, state_trace, cpu_properties);
}
surf_cpu_model->is_suspended = cpu_im_action_is_suspended;
surf_cpu_model->set_max_duration = cpu_im_action_set_max_duration;
surf_cpu_model->set_priority = cpu_im_action_set_priority;
+#ifdef HAVE_TRACING
+ surf_cpu_model->set_category = cpu_im_action_set_category;
+#endif
surf_cpu_model->get_remains = cpu_im_action_get_remains;
surf_cpu_model->extension.cpu.execute = cpu_im_execute;