Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add a function get_available_speed in Surf workstation and cpu models in order to...
authorthiery <thiery@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 19 Jun 2006 07:26:02 +0000 (07:26 +0000)
committerthiery <thiery@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 19 Jun 2006 07:26:02 +0000 (07:26 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@2391 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/include/surf/surf.h
src/simdag/sd_global.c
src/simdag/sd_workstation.c
src/surf/cpu.c
src/surf/workstation.c
src/surf/workstation_KCCFLN05.c

index 92e295b..48e8bde 100644 (file)
@@ -114,6 +114,7 @@ typedef struct surf_cpu_resource_extension_public {
   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;
 
@@ -147,6 +148,7 @@ typedef struct surf_workstation_resource_extension_public {
   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);
index afc5da5..8ce1104 100644 (file)
@@ -45,11 +45,14 @@ SD_task_t* SD_simulate(double how_long)
   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 */
 
index 5fec503..4ae419a 100644 (file)
@@ -109,9 +109,7 @@ double SD_workstation_get_power(SD_workstation_t workstation) {
 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.
index 491847e..57ceb53 100644 (file)
@@ -311,6 +311,12 @@ static double get_speed(void *cpu, double load)
   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);
@@ -381,6 +387,7 @@ static void surf_cpu_resource_init_internal(void)
 
   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();
 
index 757e10e..c21104d 100644 (file)
@@ -290,6 +290,12 @@ static double get_speed(void *workstation, double load)
       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,
@@ -456,6 +462,7 @@ static void surf_workstation_resource_init_internal(void)
   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;
index 056ef5c..9f97c6d 100644 (file)
@@ -466,6 +466,11 @@ static double get_speed(void *cpu, double load)
   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;
@@ -902,6 +907,7 @@ static void resource_init_internal(void)
   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;