/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
+#include <ctype.h>
+
#include "surf_private.h"
#include "xbt/module.h"
"Logging specific to SURF (kernel)");
int use_sdp_solver=0;
+int use_lagrange_solver=0;
/* Additional declarations for Windows potability. */
for(i = 0; i<MAX_DRIVE;i++)
{
- if(root[0] == disk_drives_letter_table[i][0])
+ if(toupper(root[0]) == disk_drives_letter_table[i][0])
return disk_drives_letter_table[i];
}
"SURF_ACTION_NOT_IN_THE_SYSTEM"
};
+int surf_network_resource_description_size=3
+ #ifdef HAVE_GTNETS
+ +1
+ #endif
+ #ifdef HAVE_SDP
+ +1
+ #endif
+;
+s_surf_resource_description_t surf_network_resource_description[]=
+ {
+ {"CM02",NULL,surf_network_resource_init_CM02},
+#ifdef HAVE_GTNETS
+ {"GTNets",NULL,surf_network_resource_init_GTNETS},
+#endif
+#ifdef HAVE_SDP
+ {"SDP",NULL,surf_network_resource_init_SDP},
+#endif
+ {"Reno",NULL,surf_network_resource_init_Reno},
+ {"Vegas",NULL,surf_network_resource_init_Vegas}
+ };
+
+int surf_cpu_resource_description_size=1;
+s_surf_resource_description_t surf_cpu_resource_description[]=
+ {
+ {"Cas01",NULL,surf_cpu_resource_init_Cas01},
+ };
+
+int surf_workstation_resource_description_size=4;
+s_surf_resource_description_t surf_workstation_resource_description[]=
+ {
+ {"CLM03",NULL,surf_workstation_resource_init_CLM03},
+ {"KCCFLN05",NULL,surf_workstation_resource_init_KCCFLN05},
+ {"compound",NULL,surf_workstation_resource_init_compound},
+ {"ptask_L07",NULL,surf_workstation_resource_init_ptask_L07}
+ };
+
+void update_resource_description(s_surf_resource_description_t *table,
+ int table_size,
+ const char* name,
+ surf_resource_t resource
+ )
+{
+ int i = find_resource_description(table, table_size, name);
+ table[i].resource=resource;
+}
+
+int find_resource_description(s_surf_resource_description_t *table,
+ int table_size,
+ const char* name)
+{
+ int i;
+ char *name_list=NULL;
+
+ for(i=0;i<table_size;i++)
+ if(!strcmp(name,table[i].name)) {
+ return i;
+ }
+ name_list=strdup(table[0].name);
+ for(i=1;i<table_size;i++) {
+ name_list = xbt_realloc(name_list,strlen(name_list)+strlen(table[i].name)+2);
+ strcat(name_list,", ");
+ strcat(name_list,table[i].name);
+ }
+ xbt_assert2(0, "Model '%s' is invalid! Valid models are: %s.",name,name_list);
+}
+
double generic_maxmin_share_resources(xbt_swag_t running_actions,
size_t offset)
{
return generic_maxmin_share_resources2(running_actions, offset,
- maxmin_system);
+ maxmin_system, lmm_solve);
}
double generic_maxmin_share_resources2(xbt_swag_t running_actions,
size_t offset,
- lmm_system_t sys)
+ lmm_system_t sys,
+ void (*solve)(lmm_system_t))
{
surf_action_t action = NULL;
double min = -1;
double value = -1;
#define VARIABLE(action) (*((lmm_variable_t*)(((char *) (action)) + (offset))))
- if(!use_sdp_solver)
- lmm_solve(sys);
- else {
-#ifdef HAVE_SDP
- sdp_solve(sys);
-#else
- xbt_assert0(0, "No CSDP found! You cannot use this model!");
-#endif
- }
+ xbt_assert0(solve,"Give me a real solver function!");
+ solve(sys);
xbt_swag_foreach(action, running_actions) {
value = lmm_variable_getvalue(VARIABLE(action));
} else
min = action->max_duration;
+ DEBUG5("Found action (%p: duration = %f, remains = %f, value = %f) ! %f",action, action->max_duration, action->remains, value, min);
for (action = xbt_swag_getNext(action, running_actions->offset);
action;
value = lmm_variable_getvalue(VARIABLE(action));
if (value > 0) {
value = action->remains / value;
- if (value < min)
+ if (value < min) {
min = value;
+ DEBUG2("Updating min (value) with %p: %f",action, min);
+ }
}
- if ((action->max_duration >= 0) && (action->max_duration < min))
+ if ((action->max_duration >= 0) && (action->max_duration < min)) {
min = action->max_duration;
+ DEBUG2("Updating min (duration) with %p: %f",action, min);
+ }
}
+ DEBUG1("min value : %f",min);
+
#undef VARIABLE
return min;
}
DEBUG0("Looking for next action end");
xbt_dynar_foreach(resource_list, i, resource) {
+ DEBUG1("Running for Resource [%s]",resource->common_public->name);
resource_next_action_end =
resource->common_private->share_resources(NOW);
DEBUG2("Resource [%s] : next action end = %f",resource->common_public->name,