X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/bc63affbc36e8281fcf1cf987223fe44df3f083a..0c07b616d38841a028f8a34fe66394e232008b5e:/src/surf/sg_platf.cpp diff --git a/src/surf/sg_platf.cpp b/src/surf/sg_platf.cpp index a43f3f5f48..22ff9809a1 100644 --- a/src/surf/sg_platf.cpp +++ b/src/surf/sg_platf.cpp @@ -237,8 +237,6 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster) XBT_DEBUG("", link_id, cluster->bw, cluster->lat); - s_surf_parsing_link_up_down_t info_lim; - s_surf_parsing_link_up_down_t info_loop; // All links are saved in a matrix; // every row describes a single node; every node may have multiple links. // the first column may store a link from x to x if p_has_loopback is set @@ -246,6 +244,8 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster) // other columns are to store one or more link for the node //add a loopback link + Link* linkUp = nullptr; + Link* linkDown = nullptr; if(cluster->loopback_bw!=0 || cluster->loopback_lat!=0){ char *tmp_link = bprintf("%s_loopback", link_id); XBT_DEBUG("", tmp_link, cluster->loopback_bw); @@ -256,15 +256,16 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster) link.latency = cluster->loopback_lat; link.policy = SURF_LINK_FATPIPE; sg_platf_new_link(&link); - info_loop.linkUp = Link::byName(tmp_link); - info_loop.linkDown = Link::byName(tmp_link); + linkUp = Link::byName(tmp_link); + linkDown = Link::byName(tmp_link); free(tmp_link); auto as_cluster = static_cast(current_as); - as_cluster->privateLinks_.insert({rankId*as_cluster->linkCountPerNode_, info_loop}); + as_cluster->privateLinks_.insert({rankId * as_cluster->linkCountPerNode_, {linkUp, linkDown}}); } //add a limiter link (shared link to account for maximal bandwidth of the node) + linkUp = linkDown = nullptr; if(cluster->limiter_link!=0){ char *tmp_link = bprintf("%s_limiter", link_id); XBT_DEBUG("", tmp_link, cluster->limiter_link); @@ -275,10 +276,10 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster) link.latency = 0; link.policy = SURF_LINK_SHARED; sg_platf_new_link(&link); - info_lim.linkUp = info_lim.linkDown = Link::byName(tmp_link); + linkUp = linkDown = Link::byName(tmp_link); free(tmp_link); current_as->privateLinks_.insert( - {rankId * current_as->linkCountPerNode_ + current_as->hasLoopback_ , info_lim}); + {rankId * current_as->linkCountPerNode_ + current_as->hasLoopback_, {linkUp, linkDown}}); } //call the cluster function that adds the others links @@ -570,73 +571,21 @@ void sg_platf_new_process(sg_platf_process_cbarg_t process) void sg_platf_new_peer(sg_platf_peer_cbarg_t peer) { - using simgrid::kernel::routing::NetCard; - using simgrid::kernel::routing::AsCluster; - - char *host_id = bprintf("peer_%s", peer->id); - char *router_id = bprintf("router_%s", peer->id); - - XBT_DEBUG(" "); - - XBT_DEBUG("", peer->id); - s_sg_platf_AS_cbarg_t AS; - AS.id = peer->id; - AS.routing = A_surfxml_AS_routing_Cluster; - sg_platf_new_AS_begin(&AS); - new simgrid::kernel::routing::vivaldi::Coords(current_routing->netcard_, peer->coord); - - XBT_DEBUG("", host_id, peer->speed); - s_sg_platf_host_cbarg_t host; - memset(&host, 0, sizeof(host)); - host.id = host_id; - - host.speed_per_pstate.push_back(peer->speed); - host.pstate = 0; - host.speed_trace = peer->availability_trace; - host.state_trace = peer->state_trace; - host.core_amount = 1; - sg_platf_new_host(&host); + simgrid::kernel::routing::AsVivaldi* as = dynamic_cast(current_routing); + xbt_assert(as, " tag can only be used in Vivaldi ASes"); - s_sg_platf_link_cbarg_t link; - memset(&link, 0, sizeof(link)); - link.policy = SURF_LINK_SHARED; - link.latency = peer->lat; - - char* link_up = bprintf("link_%s_UP",peer->id); - XBT_DEBUG("", link_up, peer->bw_out, peer->lat); - link.id = link_up; - link.bandwidth = peer->bw_out; - sg_platf_new_link(&link); - - char* link_down = bprintf("link_%s_DOWN",peer->id); - XBT_DEBUG("", link_down, peer->bw_in, peer->lat); - link.id = link_down; - link.bandwidth = peer->bw_in; - sg_platf_new_link(&link); - - XBT_DEBUG("", host_id,link_up,link_down); - s_sg_platf_host_link_cbarg_t host_link; - memset(&host_link, 0, sizeof(host_link)); - host_link.id = host_id; - host_link.link_up = link_up; - host_link.link_down = link_down; - sg_platf_new_hostlink(&host_link); - free(link_up); - free(link_down); - - XBT_DEBUG("", router_id); - s_sg_platf_router_cbarg_t router; - memset(&router, 0, sizeof(router)); - router.id = router_id; - router.coord = peer->coord; - sg_platf_new_router(&router); + std::vector speedPerPstate; + speedPerPstate.push_back(peer->speed); + simgrid::s4u::Host* host = as->createHost(peer->id, &speedPerPstate, 1); - XBT_DEBUG(""); - sg_platf_new_AS_seal(); - XBT_DEBUG(" "); + as->setPeerLink(host->pimpl_netcard, peer->bw_in, peer->bw_out, peer->lat, peer->coord); + simgrid::s4u::Host::onCreation(*host); - free(router_id); - free(host_id); + /* Change from the defaults */ + if (peer->state_trace) + host->pimpl_cpu->setStateTrace(peer->state_trace); + if (peer->speed_trace) + host->pimpl_cpu->setSpeedTrace(peer->speed_trace); } void sg_platf_begin() { /* Do nothing: just for symmetry of user code */ } @@ -768,7 +717,6 @@ simgrid::s4u::As * sg_platf_new_AS_begin(sg_platf_AS_cbarg_t AS) /* set the new current component of the tree */ current_routing = new_as; - simgrid::kernel::routing::asCreatedCallbacks(new_as); if (TRACE_is_enabled()) sg_instr_AS_begin(AS); @@ -799,12 +747,11 @@ void sg_platf_new_hostlink(sg_platf_host_link_cbarg_t hostlink) xbt_assert(dynamic_cast(current_routing), "Only hosts from Cluster and Vivaldi ASes can get an host_link."); - s_surf_parsing_link_up_down_t link_up_down; - link_up_down.linkUp = Link::byName(hostlink->link_up); - link_up_down.linkDown = Link::byName(hostlink->link_down); + simgrid::surf::Link* linkUp = Link::byName(hostlink->link_up); + simgrid::surf::Link* linkDown = Link::byName(hostlink->link_down); - xbt_assert(link_up_down.linkUp, "Link '%s' not found!",hostlink->link_up); - xbt_assert(link_up_down.linkDown, "Link '%s' not found!",hostlink->link_down); + xbt_assert(linkUp, "Link '%s' not found!", hostlink->link_up); + xbt_assert(linkDown, "Link '%s' not found!", hostlink->link_down); auto as_cluster = static_cast(current_routing); @@ -812,5 +759,5 @@ void sg_platf_new_hostlink(sg_platf_host_link_cbarg_t hostlink) surf_parse_error("Host_link for '%s' is already defined!",hostlink->id); XBT_DEBUG("Push Host_link for host '%s' to position %d", netcard->name().c_str(), netcard->id()); - as_cluster->privateLinks_.insert({netcard->id(), link_up_down}); + as_cluster->privateLinks_.insert({netcard->id(), {linkUp, linkDown}}); }