typedef struct surf_model_description {
const char *name;
surf_model_t model;
- void (*model_init) (const char *filename);
- void (*create_ws) (void);
+ void (*model_init_preparse) (const char *filename);
+ void (*model_init_postparse) (void);
} s_surf_model_description_t, *surf_model_description_t;
XBT_PUBLIC(void) update_model_description(s_surf_model_description_t * table,
} extension;
} s_surf_model_t;
- void surf_model_init(surf_model_t model);
+ surf_model_t surf_model_init(void);
+ void surf_model_exit(surf_model_t model);
+
void *surf_model_resource_by_name(surf_model_t model, const char *name);
#define surf_model_resource_set(model) (model)->resource_set
- void surf_model_exit(surf_model_t model);
typedef struct surf_resource {
surf_model_t model;
*
* Same as MPI_REDUCE except that the result appears in the receive buffer of all the group members.
**/
+int SMPI_MPI_Allreduce( void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+ MPI_Op op, MPI_Comm comm );
int SMPI_MPI_Allreduce( void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, MPI_Comm comm )
{
static double share_resources(double now)
{
s_surf_action_cpu_Cas01_t action;
- return generic_maxmin_share_resources(surf_cpu_model->
- states.running_action_set,
+ return generic_maxmin_share_resources(surf_cpu_model->states.
+ running_action_set,
xbt_swag_offset(action, variable),
cpu_maxmin_system, lmm_solve);
}
cpu_maxmin_system = NULL;
surf_model_exit(surf_cpu_model);
+ surf_cpu_model = NULL;
xbt_swag_free(running_action_set_that_does_not_need_being_checked);
running_action_set_that_does_not_need_being_checked = NULL;
-
- free(surf_cpu_model);
- surf_cpu_model = NULL;
}
static void surf_cpu_model_init_internal(void)
{
s_surf_action_t action;
- surf_cpu_model = xbt_new0(s_surf_model_t, 1);
-
- surf_model_init(surf_cpu_model);
+ surf_cpu_model = surf_model_init();
running_action_set_that_does_not_need_being_checked =
xbt_swag_new(xbt_swag_offset(action, state_hookup));
}
/** @brief initialize common datastructures to all models */
-void surf_model_init(surf_model_t model)
+surf_model_t surf_model_init(void)
{
s_surf_action_t action;
-
+ surf_model_t model = xbt_new0(s_surf_model_t, 1);
model->model_private = xbt_new0(s_surf_model_private_t, 1);
model->action_cancel = void_die_impossible_paction;
model->action_recycle = void_die_impossible_paction;
+ return model;
}
-
-void *surf_model_resource_by_name(surf_model_t model, const char *name)
-{
- return xbt_dict_get_or_null(model->resource_set, name);
-}
-
-
/** @brief finalize common datastructures to all models */
void surf_model_exit(surf_model_t model)
{
xbt_swag_free(model->states.done_action_set);
xbt_dict_free(&model->resource_set);
free(model->model_private);
+ free(model);
}
+
+void *surf_model_resource_by_name(surf_model_t model, const char *name)
+{
+ return xbt_dict_get_or_null(model->resource_set, name);
+}
+
+
xbt_dict_free(&link_set);
surf_model_exit(surf_network_model);
-
- free(surf_network_model);
surf_network_model = NULL;
loopback = NULL;
static void surf_network_model_init_internal(void)
{
- surf_network_model = xbt_new0(s_surf_model_t, 1);
-
- surf_model_init(surf_network_model);
+ surf_network_model = surf_model_init();
surf_network_model->get_resource_name = get_resource_name;
surf_network_model->action_get_state = surf_action_get_state;
static void finalize(void)
{
surf_model_exit(surf_network_model);
-
- free(surf_network_model);
surf_network_model = NULL;
card_number = 0;
static void surf_network_model_init_internal(void)
{
- surf_network_model = xbt_new0(s_surf_model_t, 1);
-
- surf_model_init(surf_network_model);
+ surf_network_model = surf_model_init();
surf_network_model->get_resource_name = get_resource_name;
surf_network_model->action_get_state = surf_action_get_state;
cpu_id =
find_model_description(surf_cpu_model_description, cpu_model_name);
- surf_cpu_model_description[cpu_id].model_init(platform_file);
- surf_network_model_description[network_id].model_init(platform_file);
+ surf_cpu_model_description[cpu_id].model_init_preparse(platform_file);
+ surf_network_model_description[network_id].
+ model_init_preparse(platform_file);
}
DEBUG0("Call workstation_model_init");
- surf_workstation_model_description[workstation_id].model_init
+ surf_workstation_model_description[workstation_id].model_init_preparse
(platform_file);
}
int workstation_id =
find_model_description(surf_workstation_model_description,
workstation_model_name);
- if (surf_workstation_model_description[workstation_id].create_ws != NULL)
- surf_workstation_model_description[workstation_id].create_ws();
+ if (surf_workstation_model_description[workstation_id].
+ model_init_postparse != NULL)
+ surf_workstation_model_description[workstation_id].model_init_postparse();
}
xbt_swag_free(command_to_run);
surf_model_exit(surf_timer_model);
-
- free(surf_timer_model);
surf_timer_model = NULL;
}
static void surf_timer_model_init_internal(void)
{
- surf_timer_model = xbt_new0(s_surf_model_t, 1);
-
- surf_model_init(surf_timer_model);
+ surf_timer_model = surf_model_init();
surf_timer_model->get_resource_name = get_resource_name;
surf_timer_model->action_get_state = surf_action_get_state;
static surf_action_t execute(void *workstation, double size)
{
- return surf_cpu_model->extension.cpu.
- execute(((workstation_CLM03_t) workstation)->cpu, size);
+ return surf_cpu_model->extension.
+ cpu.execute(((workstation_CLM03_t) workstation)->cpu, size);
}
static surf_action_t action_sleep(void *workstation, double duration)
{
- return surf_cpu_model->extension.cpu.
- sleep(((workstation_CLM03_t) workstation)->cpu, duration);
+ return surf_cpu_model->extension.
+ cpu.sleep(((workstation_CLM03_t) workstation)->cpu, duration);
}
static void action_suspend(surf_action_t action)
void *workstation_dst, double size,
double rate)
{
- return surf_network_model->extension.network.
- communicate(((workstation_CLM03_t) workstation_src)->network_card,
- ((workstation_CLM03_t) workstation_dst)->network_card, size,
- rate);
+ return surf_network_model->extension.
+ network.communicate(((workstation_CLM03_t) workstation_src)->network_card,
+ ((workstation_CLM03_t) workstation_dst)->network_card,
+ size, rate);
}
static e_surf_cpu_state_t get_state(void *workstation)
{
- return surf_cpu_model->extension.cpu.
- get_state(((workstation_CLM03_t) workstation)->cpu);
+ return surf_cpu_model->extension.
+ cpu.get_state(((workstation_CLM03_t) workstation)->cpu);
}
static double get_speed(void *workstation, double load)
{
- return surf_cpu_model->extension.cpu.
- get_speed(((workstation_CLM03_t) workstation)->cpu, load);
+ return surf_cpu_model->extension.
+ cpu.get_speed(((workstation_CLM03_t) workstation)->cpu, load);
}
static double get_available_speed(void *workstation)
{
- return surf_cpu_model->extension.cpu.
- get_available_speed(((workstation_CLM03_t)
- workstation)->cpu);
+ return surf_cpu_model->extension.
+ cpu.get_available_speed(((workstation_CLM03_t)
+ workstation)->cpu);
}
static xbt_dict_t get_properties(void *workstation)
{
- return surf_cpu_model->
- get_properties(((workstation_CLM03_t) workstation)->cpu);
+ return surf_cpu_model->get_properties(((workstation_CLM03_t) workstation)->
+ cpu);
}
static surf_action_t execute_parallel_task(int workstation_nb,
{
workstation_CLM03_t workstation_src = (workstation_CLM03_t) src;
workstation_CLM03_t workstation_dst = (workstation_CLM03_t) dst;
- return surf_network_model->extension.network.
- get_route(workstation_src->network_card, workstation_dst->network_card);
+ return surf_network_model->extension.network.get_route(workstation_src->
+ network_card,
+ workstation_dst->
+ network_card);
}
static int get_route_size(void *src, void *dst)
{
workstation_CLM03_t workstation_src = (workstation_CLM03_t) src;
workstation_CLM03_t workstation_dst = (workstation_CLM03_t) dst;
- return surf_network_model->extension.network.
- get_route_size(workstation_src->network_card,
- workstation_dst->network_card);
+ return surf_network_model->extension.
+ network.get_route_size(workstation_src->network_card,
+ workstation_dst->network_card);
}
static const char *get_link_name(const void *link)
static void finalize(void)
{
surf_model_exit(surf_workstation_model);
-
- free(surf_workstation_model);
surf_workstation_model = NULL;
}
static void surf_workstation_model_init_internal(void)
{
- surf_workstation_model = xbt_new0(s_surf_model_t, 1);
-
- surf_model_init(surf_workstation_model);
+ surf_workstation_model = surf_model_init();
/* surf_workstation_model->extension_private = xbt_new0(s_surf_workstation_model_extension_private_t,1); */
surf_workstation_model->get_resource_name = get_resource_name;
}
surf_model_exit(surf_workstation_model);
-
- free(surf_workstation_model);
surf_workstation_model = NULL;
for (i = 0; i < nb_workstation; i++)
static void model_init_internal(void)
{
- surf_workstation_model = xbt_new0(s_surf_model_t, 1);
-
- surf_model_init(surf_workstation_model);
+ surf_workstation_model = surf_model_init();
surf_workstation_model->get_resource_name = get_resource_name;
surf_workstation_model->action_get_state = surf_action_get_state;