X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/283236f8e2414d7c30d46e6d1aea0e8882699dd1..25687c41a4e7abbd8c68f56f7172d5830e8fea41:/src/surf/network.cpp diff --git a/src/surf/network.cpp b/src/surf/network.cpp index e01213e9d0..8fa588e5dc 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", @@ -75,13 +75,13 @@ static void net_add_traces(void){ "Cannot connect trace %s to link %s: trace undefined", trace_name, elm); - link->p_stateEvent = tmgr_history_add_trace(history, trace, 0.0, 0, link); + link->p_stateEvent = tmgr_history_add_trace(history, trace, 0.0, 0, static_cast(link)); } 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", @@ -90,13 +90,13 @@ static void net_add_traces(void){ "Cannot connect trace %s to link %s: trace undefined", trace_name, elm); - link->p_power.event = tmgr_history_add_trace(history, trace, 0.0, 0, link); + link->p_power.event = tmgr_history_add_trace(history, trace, 0.0, 0, static_cast(link)); } 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", @@ -105,11 +105,11 @@ static void net_add_traces(void){ "Cannot connect trace %s to link %s: trace undefined", trace_name, elm); - link->p_latEvent = tmgr_history_add_trace(history, trace, 0.0, 0, link); + link->p_latEvent = tmgr_history_add_trace(history, trace, 0.0, 0, static_cast(link)); } } -static void net_define_callbacks(void) +void net_define_callbacks(void) { /* Figuring out the network links */ sg_platf_link_add_cb(net_parse_link_init); @@ -248,11 +248,9 @@ void surf_network_model_init_Vegas(void) xbt_cfg_setdefault_double(_sg_cfg_set, "network/weight_S", 8775); } -NetworkCm02Model::NetworkCm02Model() : NetworkCm02Model("network"){ -} - -NetworkCm02Model::NetworkCm02Model(string name) : Model(name){ - NetworkCm02ActionLmmPtr comm; +void NetworkCm02Model::initialize() +{ + ActionLmmPtr comm; char *optim = xbt_cfg_get_string(_sg_cfg_set, "network/optim"); int select = @@ -276,15 +274,15 @@ NetworkCm02Model::NetworkCm02Model(string name) : Model(name){ if (!p_maxminSystem) p_maxminSystem = lmm_system_new(m_selectiveUpdate); - routing_model_create(createResource("__loopback__", + routing_model_create(static_cast(createResource("__loopback__", 498000000, NULL, 0.000015, NULL, SURF_RESOURCE_ON, NULL, - SURF_LINK_FATPIPE, NULL)); + SURF_LINK_FATPIPE, NULL))); if (p_updateMechanism == UM_LAZY) { p_actionHeap = xbt_heap_new(8, NULL); xbt_heap_set_update_callback(p_actionHeap, surf_action_lmm_update_index_heap); - p_modifiedSet = xbt_swag_new(xbt_swag_offset((*comm), p_actionListHookup)); + p_modifiedSet = xbt_swag_new(xbt_swag_offset(*comm, p_actionListHookup)); p_maxminSystem->keep_track = p_modifiedSet; } } @@ -308,7 +306,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 +327,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)* @@ -374,7 +372,7 @@ xbt_dynar_t NetworkCm02Model::getRoute(RoutingEdgePtr src, RoutingEdgePtr dst) return route; } -NetworkCm02ActionPtr NetworkCm02Model::communicate(RoutingEdgePtr src, RoutingEdgePtr dst, +ActionPtr NetworkCm02Model::communicate(RoutingEdgePtr src, RoutingEdgePtr dst, double size, double rate) { unsigned int i; @@ -397,7 +395,7 @@ NetworkCm02ActionPtr NetworkCm02Model::communicate(RoutingEdgePtr src, RoutingEd 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 +404,7 @@ NetworkCm02ActionPtr NetworkCm02Model::communicate(RoutingEdgePtr src, RoutingEd 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; @@ -430,14 +428,15 @@ NetworkCm02ActionPtr NetworkCm02Model::communicate(RoutingEdgePtr src, RoutingEd bandwidth_bound = -1.0; if (sg_weight_S_parameter > 0) { - xbt_dynar_foreach(route, i, link) { + xbt_dynar_foreach(route, i, _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); @@ -451,7 +450,7 @@ NetworkCm02ActionPtr NetworkCm02Model::communicate(RoutingEdgePtr src, RoutingEd "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, @@ -481,14 +480,14 @@ NetworkCm02ActionPtr NetworkCm02Model::communicate(RoutingEdgePtr src, RoutingEd } 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); } } @@ -531,7 +530,7 @@ NetworkCm02LinkLmm::NetworkCm02LinkLmm(NetworkCm02ModelPtr model, const char *na { m_latCurrent = lat_initial; if (lat_trace) - p_latEvent = tmgr_history_add_trace(history, lat_trace, 0.0, 0, this); + p_latEvent = tmgr_history_add_trace(history, lat_trace, 0.0, 0, static_cast(this)); if (policy == SURF_LINK_FATPIPE) lmm_constraint_shared(p_constraint); @@ -560,8 +559,8 @@ bool NetworkCm02LinkLmm::isShared() void NetworkCm02LinkLmm::updateState(tmgr_trace_event_t event_type, double value, double date) { - /* printf("[" "%lg" "] Asking to update network card \"%s\" with value " */ - /* "%lg" " for event %p\n", surf_get_clock(), nw_link->name, */ + /* printf("[" "%g" "] Asking to update network card \"%s\" with value " */ + /* "%g" " for event %p\n", surf_get_clock(), nw_link->name, */ /* value, event_type); */ if (event_type == p_power.event) {