From: Paul Bédaride Date: Mon, 21 Oct 2013 09:47:29 +0000 (+0200) Subject: Fix simdag issue X-Git-Tag: v3_11_beta~297^2~7 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/192462d51b69f727a7f16cf83223831f75ed254b?ds=sidebyside Fix simdag issue --- diff --git a/src/include/surf/surf.h b/src/include/surf/surf.h index 423b84a81a..102f5853b3 100644 --- a/src/include/surf/surf.h +++ b/src/include/surf/surf.h @@ -338,9 +338,9 @@ surf_action_t surf_workstation_ls(surf_resource_t workstation, const char* mount size_t surf_workstation_get_size(surf_resource_t workstation, surf_file_t fd); surf_action_t surf_workstation_read(surf_resource_t resource, void *ptr, size_t size, surf_file_t fd); surf_action_t surf_workstation_write(surf_resource_t resource, const void *ptr, size_t size, surf_file_t fd); -int surf_network_link_is_shared(surf_network_link_t link); -double surf_network_link_get_bandwidth(surf_network_link_t link); -double surf_network_link_get_latency(surf_network_link_t link); +int surf_network_link_is_shared(surf_cpp_resource_t link); +double surf_network_link_get_bandwidth(surf_cpp_resource_t link); +double surf_network_link_get_latency(surf_cpp_resource_t link); void *surf_action_get_data(surf_action_t action); void surf_action_set_data(surf_action_t action, void *data); void surf_action_unref(surf_action_t action); diff --git a/src/surf/network.cpp b/src/surf/network.cpp index 60e6b0333e..b1c8981e07 100644 --- a/src/surf/network.cpp +++ b/src/surf/network.cpp @@ -65,8 +65,8 @@ static void net_add_traces(void){ /* connect all traces relative to network */ xbt_dict_foreach(trace_connect_list_link_avail, cursor, trace_name, elm) { tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); - NetworkCm02LinkLmmPtr link = static_cast( - static_cast( + NetworkCm02LinkLmmPtr link = dynamic_cast( + static_cast( xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL))); xbt_assert(link, "Cannot connect trace %s to link %s: link undefined", @@ -80,8 +80,8 @@ static void net_add_traces(void){ xbt_dict_foreach(trace_connect_list_bandwidth, cursor, trace_name, elm) { tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); - NetworkCm02LinkLmmPtr link = static_cast( - static_cast( + NetworkCm02LinkLmmPtr link = dynamic_cast( + static_cast( xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL))); xbt_assert(link, "Cannot connect trace %s to link %s: link undefined", @@ -95,8 +95,8 @@ static void net_add_traces(void){ xbt_dict_foreach(trace_connect_list_latency, cursor, trace_name, elm) { tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); - NetworkCm02LinkLmmPtr link = static_cast( - static_cast( + NetworkCm02LinkLmmPtr link = dynamic_cast( + static_cast( xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL))); xbt_assert(link, "Cannot connect trace %s to link %s: link undefined", @@ -308,7 +308,7 @@ NetworkCm02LinkLmmPtr NetworkCm02Model::createResource(const char *name, state_initial, state_trace, bw_initial, bw_trace, lat_initial, lat_trace, policy); - xbt_lib_set(link_lib, name, SURF_LINK_LEVEL, static_cast(nw_link)); + xbt_lib_set(link_lib, name, SURF_LINK_LEVEL, static_cast(nw_link)); XBT_DEBUG("Create link '%s'",name); return nw_link; @@ -329,7 +329,7 @@ void NetworkCm02Model::updateActionsStateLazy(double now, double delta) lmm_constraint_t constraint = lmm_get_cnst_from_var(p_maxminSystem, action->p_variable, i); - NetworkCm02LinkPtr link = (NetworkCm02LinkPtr) lmm_constraint_id(constraint); + NetworkCm02LinkPtr link = static_cast(lmm_constraint_id(constraint)); TRACE_surf_link_set_utilization(link->m_name, action->p_category, (lmm_variable_getvalue(action->p_variable)* @@ -397,7 +397,7 @@ ActionPtr NetworkCm02Model::communicate(RoutingEdgePtr src, RoutingEdgePtr dst, src->p_name, dst->p_name); xbt_dynar_foreach(route, i, _link) { - link = static_cast(static_cast(_link)); + link = dynamic_cast(static_cast(_link)); if (link->p_stateCurrent == SURF_RESOURCE_OFF) { failed = 1; break; @@ -406,7 +406,7 @@ ActionPtr NetworkCm02Model::communicate(RoutingEdgePtr src, RoutingEdgePtr dst, if (sg_network_crosstraffic == 1) { routing_platf->getRouteAndLatency(dst, src, &back_route, NULL); xbt_dynar_foreach(back_route, i, _link) { - link = static_cast(static_cast(_link)); + link = dynamic_cast(static_cast(_link)); if (link->p_stateCurrent == SURF_RESOURCE_OFF) { failed = 1; break; @@ -431,14 +431,14 @@ ActionPtr NetworkCm02Model::communicate(RoutingEdgePtr src, RoutingEdgePtr dst, bandwidth_bound = -1.0; if (sg_weight_S_parameter > 0) { xbt_dynar_foreach(route, i, _link) { - link = static_cast(static_cast(_link)); + link = dynamic_cast(static_cast(_link)); action->m_weight += sg_weight_S_parameter / (link->p_power.peak * link->p_power.scale); } } xbt_dynar_foreach(route, i, _link) { - link = static_cast(static_cast(_link)); + link = dynamic_cast(static_cast(_link)); double bb = bandwidthFactor(size) * (link->p_power.peak * link->p_power.scale); bandwidth_bound = (bandwidth_bound < 0.0) ? bb : min(bandwidth_bound, bb); @@ -452,7 +452,7 @@ ActionPtr NetworkCm02Model::communicate(RoutingEdgePtr src, RoutingEdgePtr dst, "Using a model with a gap (e.g., SMPI) with a platform without links (e.g. vivaldi)!!!"); //link = *(NetworkCm02LinkLmmPtr *) xbt_dynar_get_ptr(route, 0); - link = static_cast(*static_cast(xbt_dynar_get_ptr(route, 0))); + link = dynamic_cast(*static_cast(xbt_dynar_get_ptr(route, 0))); gapAppend(size, link, action); XBT_DEBUG("Comm %p: %s -> %s gap=%f (lat=%f)", action, src->p_name, dst->p_name, action->m_senderGap, @@ -482,14 +482,14 @@ ActionPtr NetworkCm02Model::communicate(RoutingEdgePtr src, RoutingEdgePtr dst, } xbt_dynar_foreach(route, i, _link) { - link = static_cast(static_cast(_link)); + link = dynamic_cast(static_cast(_link)); lmm_expand(p_maxminSystem, link->p_constraint, action->p_variable, 1.0); } if (sg_network_crosstraffic == 1) { XBT_DEBUG("Fullduplex active adding backward flow using 5%%"); xbt_dynar_foreach(back_route, i, _link) { - link = static_cast(static_cast(_link)); + link = dynamic_cast(static_cast(_link)); lmm_expand(p_maxminSystem, link->p_constraint, action->p_variable, .05); } } diff --git a/src/surf/surf.cpp b/src/surf/surf.cpp index 88d7ad17e8..179f64a57a 100644 --- a/src/surf/surf.cpp +++ b/src/surf/surf.cpp @@ -333,7 +333,7 @@ static XBT_INLINE void surf_cpu_free(void *r) static XBT_INLINE void surf_link_free(void *r) { - delete static_cast(r); + delete dynamic_cast(static_cast(r)); } static XBT_INLINE void surf_workstation_free(void *r) diff --git a/src/surf/surf_interface.cpp b/src/surf/surf_interface.cpp index c45386e78c..2bccb88547 100644 --- a/src/surf/surf_interface.cpp +++ b/src/surf/surf_interface.cpp @@ -205,7 +205,7 @@ void *surf_as_cluster_get_backbone(AS_t as){ } void surf_as_cluster_set_backbone(AS_t as, void* backbone){ - static_cast(as)->p_backbone = static_cast(backbone); + static_cast(as)->p_backbone = dynamic_cast(static_cast(backbone)); } const char *surf_model_name(surf_model_t model){ @@ -310,16 +310,16 @@ surf_action_t surf_workstation_write(surf_resource_t resource, const void *ptr, return get_casted_workstation(resource)->write(ptr, size, fd); } -int surf_network_link_is_shared(surf_network_link_t link){ - return link->isShared(); +int surf_network_link_is_shared(surf_cpp_resource_t link){ + return dynamic_cast(link)->isShared(); } -double surf_network_link_get_bandwidth(surf_network_link_t link){ - return link->getBandwidth(); +double surf_network_link_get_bandwidth(surf_cpp_resource_t link){ + return dynamic_cast(link)->getBandwidth(); } -double surf_network_link_get_latency(surf_network_link_t link){ - return link->getLatency(); +double surf_network_link_get_latency(surf_cpp_resource_t link){ + return dynamic_cast(link)->getLatency(); } surf_action_t surf_cpu_execute(surf_resource_t cpu, double size){ diff --git a/src/surf/surf_routing.cpp b/src/surf/surf_routing.cpp index f4f22a82fe..8600c449e8 100644 --- a/src/surf/surf_routing.cpp +++ b/src/surf/surf_routing.cpp @@ -103,7 +103,7 @@ struct s_model_type routing_models[] = { */ static void parse_S_host_link(sg_platf_host_link_cbarg_t host) { - RoutingEdgePtr info = (RoutingEdgePtr) xbt_lib_get_or_null(host_lib, host->id, ROUTING_HOST_LEVEL); + RoutingEdgePtr info = static_cast(xbt_lib_get_or_null(host_lib, host->id, ROUTING_HOST_LEVEL)); xbt_assert(info, "Host '%s' not found!", host->id); xbt_assert(current_routing->p_modelDesc == &routing_models[SURF_MODEL_CLUSTER] || current_routing->p_modelDesc == &routing_models[SURF_MODEL_VIVALDI], diff --git a/src/surf/surf_routing_cluster.cpp b/src/surf/surf_routing_cluster.cpp index 0e7a67a306..6bc1553d72 100644 --- a/src/surf/surf_routing_cluster.cpp +++ b/src/surf/surf_routing_cluster.cpp @@ -37,7 +37,7 @@ void AsCluster::getRouteAndLatency(RoutingEdgePtr src, RoutingEdgePtr dst, sg_pl if((src->m_id == dst->m_id) && info.loopback_link ){ xbt_dynar_push_as(route->link_list, void *, info.loopback_link); if (lat) - *lat += static_cast(info.loopback_link)->getLatency(); + *lat += dynamic_cast(static_cast(info.loopback_link))->getLatency(); return; } @@ -48,14 +48,14 @@ void AsCluster::getRouteAndLatency(RoutingEdgePtr src, RoutingEdgePtr dst, sg_pl if (info.link_up) { // link up xbt_dynar_push_as(route->link_list, void *, info.link_up); if (lat) - *lat += static_cast(info.link_up)->getLatency(); + *lat += dynamic_cast(static_cast(info.link_up))->getLatency(); } } if (p_backbone) { - xbt_dynar_push_as(route->link_list, void *, p_backbone); + xbt_dynar_push_as(route->link_list, void *, static_cast(p_backbone)); if (lat) - *lat += static_cast(p_backbone)->getLatency(); + *lat += p_backbone->getLatency(); } if (dst->p_rcType != SURF_NETWORK_ELEMENT_ROUTER) { // No specific link for router @@ -64,7 +64,7 @@ void AsCluster::getRouteAndLatency(RoutingEdgePtr src, RoutingEdgePtr dst, sg_pl if (info.link_down) { // link down xbt_dynar_push_as(route->link_list, void *, info.link_down); if (lat) - *lat += static_cast(info.link_down)->getLatency(); + *lat += dynamic_cast(static_cast(info.link_down))->getLatency(); } if (info.limiter_link) // limiter for receiver diff --git a/src/surf/surf_routing_dijkstra.cpp b/src/surf/surf_routing_dijkstra.cpp index 70c084f8c5..da697be599 100644 --- a/src/surf/surf_routing_dijkstra.cpp +++ b/src/surf/surf_routing_dijkstra.cpp @@ -207,7 +207,7 @@ void AsDijkstra::getRouteAndLatency(RoutingEdgePtr src, RoutingEdgePtr dst, sg_p sg_platf_route_cbarg_t e_route; int size = 0; unsigned int cpt; - NetworkCm02LinkPtr link; + void *link; xbt_dynar_t links = NULL; route_cache_element_t elm = NULL; xbt_dynar_t nodes = xbt_graph_get_nodes(p_routeGraph); @@ -237,7 +237,7 @@ void AsDijkstra::getRouteAndLatency(RoutingEdgePtr src, RoutingEdgePtr dst, sg_p xbt_dynar_foreach(links, cpt, link) { xbt_dynar_unshift(route->link_list, &link); if (lat) - *lat += link->getLatency(); + *lat += dynamic_cast(static_cast(link))->getLatency(); } } @@ -345,7 +345,7 @@ void AsDijkstra::getRouteAndLatency(RoutingEdgePtr src, RoutingEdgePtr dst, sg_p xbt_dynar_foreach(links, cpt, link) { xbt_dynar_insert_at(route->link_list, pos, &link); if (lat) - *lat += link->getLatency(); + *lat += dynamic_cast(static_cast(link))->getLatency(); pos++; } } @@ -354,7 +354,7 @@ void AsDijkstra::getRouteAndLatency(RoutingEdgePtr src, RoutingEdgePtr dst, sg_p xbt_dynar_foreach(links, cpt, link) { xbt_dynar_unshift(route->link_list, &link); if (lat) - *lat += link->getLatency(); + *lat += dynamic_cast(static_cast(link))->getLatency(); } size++; } diff --git a/src/surf/surf_routing_floyd.cpp b/src/surf/surf_routing_floyd.cpp index f3c72ab316..499a2102f4 100644 --- a/src/surf/surf_routing_floyd.cpp +++ b/src/surf/surf_routing_floyd.cpp @@ -104,7 +104,7 @@ void AsFloyd::getRouteAndLatency(RoutingEdgePtr src, RoutingEdgePtr dst, sg_plat while (!xbt_dynar_is_empty(route_stack)) { sg_platf_route_cbarg_t e_route = xbt_dynar_pop_as(route_stack, sg_platf_route_cbarg_t); xbt_dynar_t links; - NetworkCm02LinkPtr link; + void *link; unsigned int cpt; if (p_hierarchy == SURF_ROUTING_RECURSIVE && prev_dst_gw != NULL @@ -117,7 +117,7 @@ void AsFloyd::getRouteAndLatency(RoutingEdgePtr src, RoutingEdgePtr dst, sg_plat xbt_dynar_foreach(links, cpt, link) { xbt_dynar_push_as(res->link_list, sg_routing_link_t, link); if (lat) - *lat += link->getLatency(); + *lat += dynamic_cast(static_cast(link))->getLatency(); } prev_dst_gw = e_route->gw_dst; diff --git a/src/surf/surf_routing_full.cpp b/src/surf/surf_routing_full.cpp index 7e5f14d404..a2435b5a54 100644 --- a/src/surf/surf_routing_full.cpp +++ b/src/surf/surf_routing_full.cpp @@ -106,7 +106,7 @@ void AsFull::getRouteAndLatency(RoutingEdgePtr src, RoutingEdgePtr dst, sg_platf size_t table_size = xbt_dynar_length(p_indexNetworkElm); sg_platf_route_cbarg_t e_route = NULL; - NetworkCm02LinkPtr link; + void *link; unsigned int cpt = 0; e_route = TO_ROUTE_FULL(src->m_id, dst->m_id); @@ -117,7 +117,7 @@ void AsFull::getRouteAndLatency(RoutingEdgePtr src, RoutingEdgePtr dst, sg_platf xbt_dynar_foreach(e_route->link_list, cpt, link) { xbt_dynar_push(res->link_list, &link); if (lat) - *lat += link->getLatency(); + *lat += dynamic_cast(static_cast(link))->getLatency(); } } } diff --git a/src/surf/surf_routing_vivaldi.cpp b/src/surf/surf_routing_vivaldi.cpp index 4fad8e3e35..3b705bef81 100644 --- a/src/surf/surf_routing_vivaldi.cpp +++ b/src/surf/surf_routing_vivaldi.cpp @@ -43,7 +43,7 @@ void AsVivaldi::getRouteAndLatency(RoutingEdgePtr src, RoutingEdgePtr dst, sg_pl if(info.link_up) { // link up xbt_dynar_push_as(route->link_list, void*, info.link_up); if (lat) - *lat += static_cast(info.link_up)->getLatency(); + *lat += dynamic_cast(static_cast(info.link_up))->getLatency(); } } src_ctn = (xbt_dynar_t) xbt_lib_get_or_null(host_lib, tmp_src_name, COORD_HOST_LEVEL); @@ -65,7 +65,7 @@ void AsVivaldi::getRouteAndLatency(RoutingEdgePtr src, RoutingEdgePtr dst, sg_pl if(info.link_down) { // link down xbt_dynar_push_as(route->link_list,void*,info.link_down); if (lat) - *lat += static_cast(info.link_down)->getLatency(); + *lat += dynamic_cast(static_cast(info.link_down))->getLatency(); } } dst_ctn = (xbt_dynar_t) xbt_lib_get_or_null(host_lib, tmp_dst_name, COORD_HOST_LEVEL); diff --git a/src/surf/workstation_ptask_L07.cpp b/src/surf/workstation_ptask_L07.cpp index bfe7b5b5ec..d62afc9c95 100644 --- a/src/surf/workstation_ptask_L07.cpp +++ b/src/surf/workstation_ptask_L07.cpp @@ -17,14 +17,15 @@ 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_network_model = new NetworkL07Model(); + surf_cpu_model = new CpuL07Model(); routing_model_create(p_networkModel->createResource("__loopback__", 498000000, NULL, 0.000015, NULL, SURF_RESOURCE_ON, NULL, SURF_LINK_FATPIPE, NULL)); - surf_network_model = new NetworkL07Model(); - surf_cpu_model = new CpuL07Model(); + } double WorkstationL07Model::shareResources(double now) @@ -160,7 +161,7 @@ ActionPtr WorkstationL07Model::executeParallelTask(int workstation_nb, latency = MAX(latency, lat); xbt_dynar_foreach(route, cpt, _link) { - link = dynamic_cast(static_cast(_link)); + link = dynamic_cast(static_cast(_link)); xbt_dict_set(ptask_parallel_task_link_set, link->m_name, link, NULL); } } @@ -204,6 +205,7 @@ ActionPtr WorkstationL07Model::executeParallelTask(int workstation_nb, for (j = 0; j < workstation_nb; j++) { void *_link; LinkL07Ptr link; + xbt_dynar_t route=NULL; if (communication_amount[i * workstation_nb + j] == 0.0) continue; @@ -217,7 +219,7 @@ ActionPtr WorkstationL07Model::executeParallelTask(int workstation_nb, &route, NULL); xbt_dynar_foreach(route, cpt, _link) { - link = static_cast(static_cast(_link)); + link = dynamic_cast(static_cast(_link)); lmm_expand_add(ptask_maxmin_system, link->p_constraint, action->p_variable, communication_amount[i * workstation_nb + j]); @@ -352,7 +354,7 @@ ResourcePtr NetworkL07Model::createResource(const char *name, if (policy == SURF_LINK_FATPIPE) lmm_constraint_shared(nw_link->p_constraint); - xbt_lib_set(link_lib, name, SURF_LINK_LEVEL, static_cast(nw_link)); + xbt_lib_set(link_lib, name, SURF_LINK_LEVEL, static_cast(nw_link)); return nw_link; } @@ -388,7 +390,7 @@ void WorkstationL07Model::addTraces() /* Connect traces relative to network */ xbt_dict_foreach(trace_connect_list_link_avail, cursor, trace_name, elm) { tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); - LinkL07Ptr link = (LinkL07Ptr) xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL); + LinkL07Ptr link = dynamic_cast(static_cast(xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL))); xbt_assert(link, "Link %s undefined", elm); xbt_assert(trace, "Trace %s undefined", trace_name); @@ -398,7 +400,7 @@ void WorkstationL07Model::addTraces() xbt_dict_foreach(trace_connect_list_bandwidth, cursor, trace_name, elm) { tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); - LinkL07Ptr link = (LinkL07Ptr) xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL); + LinkL07Ptr link = dynamic_cast(static_cast(xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL))); xbt_assert(link, "Link %s undefined", elm); xbt_assert(trace, "Trace %s undefined", trace_name); @@ -408,7 +410,7 @@ void WorkstationL07Model::addTraces() xbt_dict_foreach(trace_connect_list_latency, cursor, trace_name, elm) { tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); - LinkL07Ptr link = (LinkL07Ptr) xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL); + LinkL07Ptr link = dynamic_cast(static_cast(xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL))); xbt_assert(link, "Link %s undefined", elm); xbt_assert(trace, "Trace %s undefined", trace_name);