Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
add a get_speed function to the cpu and enabled the action_cancel function
authoralegrand <alegrand@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 2 Aug 2005 00:00:44 +0000 (00:00 +0000)
committeralegrand <alegrand@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 2 Aug 2005 00:00:44 +0000 (00:00 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@1574 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/include/surf/surf.h
src/surf/cpu.c
src/surf/workstation.c

index 147b84f..7f45c74 100644 (file)
@@ -115,6 +115,7 @@ typedef struct surf_cpu_resource_extension_public {
   surf_action_t(*execute) (void *cpu, double size);
   surf_action_t(*sleep) (void *cpu, double duration);
   e_surf_cpu_state_t(*get_state) (void *cpu);
+  double (*get_speed) (void *cpu, double load);
 } s_surf_cpu_resource_extension_public_t,
     *surf_cpu_resource_extension_public_t;
 
@@ -151,6 +152,7 @@ typedef struct surf_workstation_resource_extension_public {
   surf_action_t(*execute) (void *workstation, double size);
   surf_action_t(*sleep) (void *workstation, double duration);
   e_surf_cpu_state_t(*get_state) (void *workstation);
+  double (*get_speed) (void *workstation, double load);
   surf_action_t(*communicate) (void *workstation_src,
                               void *workstation_dst, double size,
                               double max_rate);
index 1cb46ba..fbcf4f1 100644 (file)
@@ -124,6 +124,7 @@ static void action_use(surf_action_t action)
 
 static void action_cancel(surf_action_t action)
 {
+  surf_action_change_state(action, SURF_ACTION_FAILED);
   return;
 }
 
@@ -288,6 +289,11 @@ static e_surf_cpu_state_t get_state(void *cpu)
   return ((cpu_Cas01_t) cpu)->state_current;
 }
 
+static double get_speed(void *cpu, double load)
+{
+  return load*(((cpu_Cas01_t) cpu)->power_scale);
+}
+
 static void finalize(void)
 {
   xbt_dict_free(&cpu_set);
@@ -357,6 +363,7 @@ static void surf_cpu_resource_init_internal(void)
   surf_cpu_resource->extension_public->sleep = action_sleep;
 
   surf_cpu_resource->extension_public->get_state = get_state;
+  surf_cpu_resource->extension_public->get_speed = get_speed;
 
   cpu_set = xbt_dict_new();
 
index 2f4aef5..22c141b 100644 (file)
@@ -117,7 +117,13 @@ static void action_use(surf_action_t action)
 
 static void action_cancel(surf_action_t action)
 {
-  DIE_IMPOSSIBLE;
+  if(action->resource_type==(surf_resource_t)surf_network_resource) 
+    surf_network_resource->common_public->action_cancel(action);
+  else if(action->resource_type==(surf_resource_t)surf_cpu_resource) 
+    surf_cpu_resource->common_public->action_cancel(action);
+  else if(action->resource_type==(surf_resource_t)surf_workstation_resource)
+    return parallel_action_use(action);
+  else DIE_IMPOSSIBLE;
   return;
 }
 
@@ -272,6 +278,12 @@ static e_surf_cpu_state_t get_state(void *workstation)
       get_state(((workstation_CLM03_t) workstation)->cpu);
 }
 
+static double get_speed(void *workstation, double load)
+{
+  return surf_cpu_resource->extension_public->
+      get_speed(((workstation_CLM03_t) workstation)->cpu, load);
+}
+
 static surf_action_t execute_parallel_task (int workstation_nb,
                                            void **workstation_list,
                                            double *computation_amount,
@@ -436,6 +448,7 @@ static void surf_workstation_resource_init_internal(void)
   surf_workstation_resource->extension_public->execute = execute;
   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->communicate = communicate;
   surf_workstation_resource->extension_public->execute_parallel_task = 
     execute_parallel_task;