surf_action_t(*sleep) (void *cpu, double duration);
e_surf_cpu_state_t(*get_state) (void *cpu);
double (*get_speed) (void *cpu, double load);
+ double (*get_available_speed) (void *cpu);
} s_surf_cpu_resource_extension_public_t,
*surf_cpu_resource_extension_public_t;
surf_action_t(*sleep) (void *workstation, double duration);
e_surf_cpu_state_t(*get_state) (void *workstation);
double (*get_speed) (void *workstation, double load);
+ double (*get_available_speed) (void *workstation);
surf_action_t(*communicate) (void *workstation_src,
void *workstation_dst, double size,
double max_rate);
xbt_dict_cursor_t cursor = NULL;
char *name = NULL;
SD_workstation_t workstation = NULL;
- double power;
+ double power, available_power;
+ surf_solve();
+
xbt_dict_foreach(sd_global->workstations, cursor, name, workstation) {
power = SD_workstation_get_power(workstation);
- printf("Workstation name: %s, power: %f Mflop/s\n", name, power);
+ available_power = SD_workstation_get_available_power(workstation);
+ printf("Workstation name: %s, power: %f Mflop/s, available power: %f%%\n", name, power, (available_power*100));
}
/* TODO: remove name from SD workstation structure */
double SD_workstation_get_available_power(SD_workstation_t workstation) {
CHECK_INIT_DONE();
xbt_assert0(workstation != NULL, "Invalid parameter");
- /* TODO */
- return 0;
- /*return workstation->available_power;*/
+ return surf_workstation_resource->extension_public->get_available_speed(workstation->sd_data->surf_workstation);
}
/* Destroys a workstation. The user data (if any) should have been destroyed first.
return load*(((cpu_Cas01_t) cpu)->power_scale);
}
+static double get_available_speed(void *cpu)
+{
+ /* number between 0 and 1 */
+ return ((cpu_Cas01_t) cpu)->power_current;
+}
+
static void finalize(void)
{
xbt_dict_free(&cpu_set);
surf_cpu_resource->extension_public->get_state = get_state;
surf_cpu_resource->extension_public->get_speed = get_speed;
+ surf_cpu_resource->extension_public->get_available_speed = get_available_speed;
cpu_set = xbt_dict_new();
get_speed(((workstation_CLM03_t) workstation)->cpu, load);
}
+static double get_available_speed(void *workstation)
+{
+ return surf_cpu_resource->extension_public->
+ get_available_speed(((workstation_CLM03_t) workstation)->cpu);
+}
+
static surf_action_t execute_parallel_task (int workstation_nb,
void **workstation_list,
double *computation_amount,
surf_workstation_resource->extension_public->sleep = action_sleep;
surf_workstation_resource->extension_public->get_state = get_state;
surf_workstation_resource->extension_public->get_speed = get_speed;
+ surf_workstation_resource->extension_public->get_available_speed = get_available_speed;
surf_workstation_resource->extension_public->communicate = communicate;
surf_workstation_resource->extension_public->execute_parallel_task =
execute_parallel_task;
return load*(((cpu_KCCFLN05_t) cpu)->power_scale);
}
+static double get_available_speed(void *cpu)
+{
+ return ((cpu_KCCFLN05_t) cpu)->power_current;
+}
+
static surf_action_t communicate(void *src, void *dst, double size, double rate)
{
surf_action_workstation_KCCFLN05_t action = NULL;
surf_workstation_resource->extension_public->sleep = action_sleep;
surf_workstation_resource->extension_public->get_state = resource_get_state;
surf_workstation_resource->extension_public->get_speed = get_speed;
+ surf_workstation_resource->extension_public->get_available_speed = get_available_speed;
surf_workstation_resource->extension_public->communicate = communicate;
surf_workstation_resource->extension_public->execute_parallel_task = execute_parallel_task;