X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/51dcb8e712855f3cb16800ddea745ef6fc8d79e9..ed1a037a0ad906be8dd0300a38a8e7ec588dc448:/src/surf/workstation_ptask_L07.c diff --git a/src/surf/workstation_ptask_L07.c b/src/surf/workstation_ptask_L07.c index 662b3844b0..e6d026b2d1 100644 --- a/src/surf/workstation_ptask_L07.c +++ b/src/surf/workstation_ptask_L07.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2007, 2008, 2009, 2010. The SimGrid Team. +/* Copyright (c) 2007-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -96,8 +96,8 @@ static void ptask_update_action_bound(surf_action_workstation_L07_t action) if (action->communication_amount[i * workstation_nb + j] > 0) { double lat = 0.0; - routing_get_route_and_latency(action->workstation_list[i]->info, - action->workstation_list[j]->info, + routing_get_route_and_latency(((cpu_L07_t)surf_workstation_resource_priv(action->workstation_list[i]))->info, + ((cpu_L07_t)surf_workstation_resource_priv(action->workstation_list[j]))->info, &route, &lat); lat_current = MAX(lat_current, @@ -134,6 +134,9 @@ static int ptask_action_unref(surf_action_t action) free(((surf_action_workstation_L07_t) action)->workstation_list); free(((surf_action_workstation_L07_t) action)->communication_amount); free(((surf_action_workstation_L07_t) action)->computation_amount); +#ifdef HAVE_TRACING + xbt_free(action->category); +#endif surf_action_free(&action); return 1; } @@ -344,8 +347,8 @@ static void ptask_update_resource_state(void *id, link_L07_t nw_link = id; if (nw_link->type == SURF_WORKSTATION_RESOURCE_LINK) { - XBT_DEBUG("Updating link %s (%p) with value=%f", - surf_resource_name(nw_link), nw_link, value); + XBT_DEBUG("Updating link %s (%p) with value=%f for date=%g", + surf_resource_name(nw_link), nw_link, value, date); if (event_type == nw_link->bw_event) { nw_link->bw_current = value; lmm_update_constraint_bound(ptask_maxmin_system, nw_link->constraint, @@ -430,17 +433,45 @@ static void ptask_finalize(void) static e_surf_resource_state_t ptask_resource_get_state(void *cpu) { - return ((cpu_L07_t) cpu)->state_current; + return ((cpu_L07_t)surf_workstation_resource_priv(cpu))->state_current; } static double ptask_get_speed(void *cpu, double load) { - return load * (((cpu_L07_t) cpu)->power_scale); + return load * ((cpu_L07_t)surf_workstation_resource_priv(cpu))->power_scale; } static double ptask_get_available_speed(void *cpu) { - return ((cpu_L07_t) cpu)->power_current; + return ((cpu_L07_t)surf_workstation_resource_priv(cpu))->power_current; +} + +static double ws_get_current_power_peak(void *cpu) +{ + return ((cpu_L07_t)surf_workstation_resource_priv(cpu))->power_current; +} + +static double ws_get_power_peak_at(void *cpu, int pstate_index) +{ + XBT_DEBUG("[ws_get_power_peak_at] Not implemented for workstation_ptask_L07"); + return 0.0; +} + +static int ws_get_nb_pstates(void *workstation) +{ + XBT_DEBUG("[ws_get_nb_pstates] Not implemented for workstation_ptask_L07"); + return 0.0; +} + +static void ws_set_power_peak_at(void *cpu, int pstate_index) +{ + XBT_DEBUG("[ws_set_power_peak_at] Not implemented for workstation_ptask_L07"); +} + +static double ws_get_consumed_energy(void *cpu) +{ + XBT_DEBUG("[ws_get_consumed_energy] Not implemented for workstation_ptask_L07"); + return 0.0; } static surf_action_t ptask_execute_parallel_task(int workstation_nb, @@ -473,8 +504,8 @@ static surf_action_t ptask_execute_parallel_task(int workstation_nb, link_L07_t link; routing_get_route_and_latency( - ((cpu_L07_t)workstation_list[i])->info, - ((cpu_L07_t)workstation_list[j])->info, + ((cpu_L07_t)surf_workstation_resource_priv(workstation_list[i]))->info, + ((cpu_L07_t)surf_workstation_resource_priv(workstation_list[j]))->info, &route,&lat); latency = MAX(latency, lat); @@ -516,7 +547,7 @@ static surf_action_t ptask_execute_parallel_task(int workstation_nb, for (i = 0; i < workstation_nb; i++) lmm_expand(ptask_maxmin_system, - ((cpu_L07_t) workstation_list[i])->constraint, + ((cpu_L07_t)surf_workstation_resource_priv(workstation_list[i]))->constraint, action->variable, computation_amount[i]); for (i = 0; i < workstation_nb; i++) { @@ -527,8 +558,8 @@ static surf_action_t ptask_execute_parallel_task(int workstation_nb, continue; routing_get_route_and_latency( - ((cpu_L07_t)workstation_list[i])->info, - ((cpu_L07_t)workstation_list[j])->info, + ((cpu_L07_t)surf_workstation_resource_priv(workstation_list[i]))->info, + ((cpu_L07_t)surf_workstation_resource_priv(workstation_list[j]))->info, &route,NULL); xbt_dynar_foreach(route, cpt, link) { @@ -600,7 +631,7 @@ static xbt_dynar_t ptask_get_route(void *src, void *dst) // FIXME: kill that cal { xbt_dynar_t route=NULL; routing_get_route_and_latency( - ((cpu_L07_t)src)->info, ((cpu_L07_t)dst)->info, + ((cpu_L07_t)surf_workstation_resource_priv(src))->info, ((cpu_L07_t)surf_workstation_resource_priv(dst))->info, &route,NULL); return route; } @@ -632,12 +663,12 @@ static void* ptask_cpu_create_resource(const char *name, double power_scale, xbt_dict_t cpu_properties) { cpu_L07_t cpu = NULL; - xbt_assert(!surf_workstation_resource_by_name(name), + xbt_assert(!surf_workstation_resource_priv(surf_workstation_resource_by_name(name)), "Host '%s' declared several times in the platform file.", name); cpu = (cpu_L07_t) surf_resource_new(sizeof(s_cpu_L07_t), - surf_workstation_model, name,cpu_properties); + surf_workstation_model, name,cpu_properties, NULL); cpu->type = SURF_WORKSTATION_RESOURCE_CPU; cpu->info = xbt_lib_get_or_null(host_lib, name, ROUTING_HOST_LEVEL); @@ -662,14 +693,17 @@ static void* ptask_cpu_create_resource(const char *name, double power_scale, xbt_lib_set(host_lib, name, SURF_WKS_LEVEL, cpu); - return cpu; + return xbt_lib_get_elm_or_null(host_lib, name); } static void ptask_parse_cpu_init(sg_platf_host_cbarg_t host) { + double power_peak = xbt_dynar_get_as(host->power_peak, host->pstate, double); + //cpu->power_peak = power_peak; + xbt_dynar_free(&(host->power_peak)); /* kill memory leak */ ptask_cpu_create_resource( host->id, - host->power_peak, + power_peak, host->power_scale, host->power_trace, host->initial_state, @@ -775,7 +809,7 @@ static void ptask_add_traces(void) /* Connect traces relative to cpu */ xbt_dict_foreach(trace_connect_list_host_avail, cursor, trace_name, elm) { tmgr_trace_t trace = xbt_dict_get_or_null(traces_set_list, trace_name); - cpu_L07_t host = surf_workstation_resource_by_name(elm); + cpu_L07_t host = surf_workstation_resource_priv(surf_workstation_resource_by_name(elm)); xbt_assert(host, "Host %s undefined", elm); xbt_assert(trace, "Trace %s undefined", trace_name); @@ -786,7 +820,7 @@ static void ptask_add_traces(void) xbt_dict_foreach(trace_connect_list_power, cursor, trace_name, elm) { tmgr_trace_t trace = xbt_dict_get_or_null(traces_set_list, trace_name); - cpu_L07_t host = surf_workstation_resource_by_name(elm); + cpu_L07_t host = surf_workstation_resource_priv(surf_workstation_resource_by_name(elm)); xbt_assert(host, "Host %s undefined", elm); xbt_assert(trace, "Trace %s undefined", trace_name); @@ -876,6 +910,12 @@ static void ptask_model_init_internal(void) ptask_get_speed; surf_workstation_model->extension.workstation.get_available_speed = ptask_get_available_speed; + surf_workstation_model->extension.workstation.get_current_power_peak = ws_get_current_power_peak; + surf_workstation_model->extension.workstation.get_power_peak_at = ws_get_power_peak_at; + surf_workstation_model->extension.workstation.get_nb_pstates = ws_get_nb_pstates; + surf_workstation_model->extension.workstation.set_power_peak_at = ws_set_power_peak_at; + surf_workstation_model->extension.workstation.get_consumed_energy = ws_get_consumed_energy; + surf_workstation_model->extension.workstation.communicate = ptask_communicate; surf_workstation_model->extension.workstation.get_route =