X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/192462d51b69f727a7f16cf83223831f75ed254b..3af9dcb5714db015a7038a58701b2b453f52c6ca:/src/surf/workstation_ptask_L07.cpp diff --git a/src/surf/workstation_ptask_L07.cpp b/src/surf/workstation_ptask_L07.cpp index d62afc9c95..541045387e 100644 --- a/src/surf/workstation_ptask_L07.cpp +++ b/src/surf/workstation_ptask_L07.cpp @@ -17,15 +17,28 @@ lmm_system_t ptask_maxmin_system = NULL; WorkstationL07Model::WorkstationL07Model() : WorkstationModel("Workstation ptask_L07") { if (!ptask_maxmin_system) ptask_maxmin_system = lmm_system_new(1); + surf_workstation_model = NULL; surf_network_model = new NetworkL07Model(); - surf_cpu_model = new CpuL07Model(); + surf_cpu_model_pm = new CpuL07Model(); routing_model_create(p_networkModel->createResource("__loopback__", 498000000, NULL, 0.000015, NULL, SURF_RESOURCE_ON, NULL, SURF_LINK_FATPIPE, NULL)); + p_cpuModel = surf_cpu_model_pm; +} +WorkstationL07Model::~WorkstationL07Model() { + xbt_dict_free(&ptask_parallel_task_link_set); + delete surf_cpu_model_pm; + delete surf_network_model; + ptask_host_count = 0; + + if (ptask_maxmin_system) { + lmm_system_free(ptask_maxmin_system); + ptask_maxmin_system = NULL; + } } double WorkstationL07Model::shareResources(double now) @@ -152,10 +165,10 @@ ActionPtr WorkstationL07Model::executeParallelTask(int workstation_nb, routing_platf->getRouteAndLatency(dynamic_cast( static_cast( - surf_workstation_resource_priv(workstation_list[i])))->p_netElm, + workstation_list[i]))->p_netElm, dynamic_cast( static_cast( - surf_workstation_resource_priv(workstation_list[j])))->p_netElm, + workstation_list[j]))->p_netElm, &route, &lat); latency = MAX(latency, lat); @@ -197,8 +210,7 @@ ActionPtr WorkstationL07Model::executeParallelTask(int workstation_nb, for (i = 0; i < workstation_nb; i++) lmm_expand(ptask_maxmin_system, static_cast(dynamic_cast( - static_cast( - surf_workstation_resource_priv(workstation_list[i])))->p_cpu)->p_constraint, + static_cast(workstation_list[i]))->p_cpu)->p_constraint, action->p_variable, computation_amount[i]); for (i = 0; i < workstation_nb; i++) { @@ -211,11 +223,9 @@ ActionPtr WorkstationL07Model::executeParallelTask(int workstation_nb, continue; routing_platf->getRouteAndLatency(dynamic_cast( - static_cast( - surf_workstation_resource_priv(workstation_list[i])))->p_netElm, + static_cast(workstation_list[i]))->p_netElm, dynamic_cast( - static_cast( - surf_workstation_resource_priv(workstation_list[j])))->p_netElm, + static_cast(workstation_list[j]))->p_netElm, &route, NULL); xbt_dynar_foreach(route, cpt, _link) { @@ -369,7 +379,10 @@ void WorkstationL07Model::addTraces() /* Connect traces relative to cpu */ xbt_dict_foreach(trace_connect_list_host_avail, cursor, trace_name, elm) { tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); - CpuL07Ptr host = (CpuL07Ptr) surf_workstation_resource_priv(surf_workstation_resource_by_name(elm)); + CpuL07Ptr host = dynamic_cast( + static_cast( + surf_cpu_resource_priv( + surf_cpu_resource_by_name(elm)))); xbt_assert(host, "Host %s undefined", elm); xbt_assert(trace, "Trace %s undefined", trace_name); @@ -379,7 +392,10 @@ void WorkstationL07Model::addTraces() xbt_dict_foreach(trace_connect_list_power, cursor, trace_name, elm) { tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); - CpuL07Ptr host = (CpuL07Ptr) surf_workstation_resource_priv(surf_workstation_resource_by_name(elm)); + CpuL07Ptr host = dynamic_cast( + static_cast( + surf_cpu_resource_priv( + surf_cpu_resource_by_name(elm)))); xbt_assert(host, "Host %s undefined", elm); xbt_assert(trace, "Trace %s undefined", trace_name); @@ -424,8 +440,33 @@ void WorkstationL07Model::addTraces() ************/ WorkstationL07::WorkstationL07(WorkstationModelPtr model, const char* name, xbt_dict_t props, RoutingEdgePtr netElm, CpuPtr cpu) - : Resource(model, name, props), WorkstationCLM03Lmm(model, name, props, NULL, netElm, cpu) + : Resource(model, name, props), + WorkstationCLM03Lmm(model, name, props, NULL, netElm, cpu), + WorkstationCLM03(model, name, props, NULL, netElm, cpu) +{ +} + +double WorkstationL07::getPowerPeakAt(int pstate_index) { + XBT_DEBUG("[ws_get_power_peak_at] Not implemented for workstation_ptask_L07"); + return 0.0; +} + +int WorkstationL07::getNbPstates() +{ + XBT_DEBUG("[ws_get_nb_pstates] Not implemented for workstation_ptask_L07"); + return 0.0; +} + +void WorkstationL07::setPowerPeakAt(int pstate_index) +{ + XBT_DEBUG("[ws_set_power_peak_at] Not implemented for workstation_ptask_L07"); +} + +double WorkstationL07::getConsumedEnergy() +{ + XBT_DEBUG("[ws_get_consumed_energy] Not implemented for workstation_ptask_L07"); + return 0.0; } CpuL07::CpuL07(CpuL07ModelPtr model, const char* name, xbt_dict_t props) @@ -438,7 +479,11 @@ LinkL07::LinkL07(NetworkL07ModelPtr model, const char* name, xbt_dict_t props) } -bool WorkstationL07::isUsed(){ +bool CpuL07::isUsed(){ + return lmm_constraint_used(ptask_maxmin_system, p_constraint); +} + +bool LinkL07::isUsed(){ return lmm_constraint_used(ptask_maxmin_system, p_constraint); } @@ -587,11 +632,9 @@ void WorkstationL07ActionLmm::updateBound() if (p_communicationAmount[i * m_workstationNb + j] > 0) { double lat = 0.0; routing_platf->getRouteAndLatency(dynamic_cast( - static_cast( - surf_workstation_resource_priv(p_workstationList[i])))->p_netElm, + static_cast(((void**)p_workstationList)[i]))->p_netElm, dynamic_cast( - static_cast( - surf_workstation_resource_priv(p_workstationList[j])))->p_netElm, + static_cast(((void**)p_workstationList)[j]))->p_netElm, &route, &lat); lat_current = MAX(lat_current, lat * p_communicationAmount[i * m_workstationNb + j]); @@ -723,9 +766,12 @@ static void ptask_finalize(void) static void ptask_parse_workstation_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 */ static_cast(surf_workstation_model)->createResource( host->id, - host->power_peak, + power_peak, host->power_scale, host->power_trace, host->initial_state, @@ -735,9 +781,10 @@ static void ptask_parse_workstation_init(sg_platf_host_cbarg_t host) static void ptask_parse_cpu_init(sg_platf_host_cbarg_t host) { - static_cast(surf_cpu_model)->createResource( + double power_peak = xbt_dynar_get_as(host->power_peak, host->pstate, double); + static_cast(surf_cpu_model_pm)->createResource( host->id, - host->power_peak, + power_peak, host->power_scale, host->power_trace, host->initial_state, @@ -808,10 +855,11 @@ static void ptask_define_callbacks() void surf_workstation_model_init_ptask_L07(void) { XBT_INFO("surf_workstation_model_init_ptask_L07"); - xbt_assert(!surf_cpu_model, "CPU model type already defined"); + xbt_assert(!surf_cpu_model_pm, "CPU model type already defined"); xbt_assert(!surf_network_model, "network model type already defined"); ptask_define_callbacks(); surf_workstation_model = new WorkstationL07Model(); ModelPtr model = static_cast(surf_workstation_model); xbt_dynar_push(model_list, &model); + xbt_dynar_push(model_list_invoke, &model); }