X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/10d527068096e98e4f574a89434d8f25b6641b28..2ccf4cc115bbe75120d9264dc17ea7f7fed551e8:/src/surf/sg_platf.cpp diff --git a/src/surf/sg_platf.cpp b/src/surf/sg_platf.cpp index 90bd01c367..9a67956c3c 100644 --- a/src/surf/sg_platf.cpp +++ b/src/surf/sg_platf.cpp @@ -70,7 +70,6 @@ void sg_platf_new_host_begin(const simgrid::kernel::routing::HostCreationArgs* a ->set_core_count(args->core_amount) ->set_state_profile(args->state_trace) ->set_speed_profile(args->speed_trace); - // host->get_impl()->set_disks(args->disks); } void sg_platf_new_host_set_properties(const std::unordered_map& props) @@ -93,19 +92,26 @@ void sg_platf_new_host_seal(int pstate) current_host = nullptr; } +void sg_platf_new_peer(const simgrid::kernel::routing::PeerCreationArgs* args) +{ + auto* zone = dynamic_cast(current_routing); + xbt_assert(zone, " tag can only be used in Vivaldi netzones."); + + auto* peer = zone->create_host(args->id, std::vector{args->speed}) + ->set_state_profile(args->state_trace) + ->set_speed_profile(args->speed_trace) + ->set_coordinates(args->coord) + ->seal(); + + zone->set_peer_link(peer->get_netpoint(), args->bw_in, args->bw_out); +} + /** @brief Add a "router" to the network element list */ simgrid::kernel::routing::NetPoint* sg_platf_new_router(const std::string& name, const std::string& coords) { - xbt_assert(nullptr == simgrid::s4u::Engine::get_instance()->netpoint_by_name_or_null(name), - "Refusing to create a router named '%s': this name already describes a node.", name.c_str()); - - auto* netpoint = new simgrid::kernel::routing::NetPoint(name, simgrid::kernel::routing::NetPoint::Type::Router); - netpoint->set_englobing_zone(current_routing); + auto* netpoint = current_routing->create_router(name)->set_coordinates(coords); XBT_DEBUG("Router '%s' has the id %u", netpoint->get_cname(), netpoint->id()); - if (not coords.empty()) - netpoint->set_coordinates(coords); - return netpoint; } @@ -135,11 +141,11 @@ void sg_platf_new_link(const simgrid::kernel::routing::LinkCreationArgs* link) void sg_platf_new_disk(const simgrid::kernel::routing::DiskCreationArgs* disk) { - simgrid::s4u::Disk* new_disk = routing_get_current() - ->create_disk(disk->id, disk->read_bw, disk->write_bw) - ->set_host(current_host) - ->set_properties(disk->properties) - ->seal(); + const simgrid::s4u::Disk* new_disk = routing_get_current() + ->create_disk(disk->id, disk->read_bw, disk->write_bw) + ->set_host(current_host) + ->set_properties(disk->properties) + ->seal(); current_host->add_disk(new_disk); } @@ -205,33 +211,34 @@ void sg_platf_new_cluster(simgrid::kernel::routing::ClusterCreationArgs* cluster // other columns are to store one or more link for the node // add a loopback link + simgrid::kernel::resource::LinkImpl* loopback = nullptr; if (cluster->loopback_bw > 0 || cluster->loopback_lat > 0) { std::string loopback_name = link_id + "_loopback"; XBT_DEBUG("", loopback_name.c_str(), cluster->loopback_bw); - auto* loopback = current_zone->create_link(loopback_name, std::vector{cluster->loopback_bw}) - ->set_sharing_policy(simgrid::s4u::Link::SharingPolicy::FATPIPE) - ->set_latency(cluster->loopback_lat) - ->seal() - ->get_impl(); + loopback = current_zone->create_link(loopback_name, std::vector{cluster->loopback_bw}) + ->set_sharing_policy(simgrid::s4u::Link::SharingPolicy::FATPIPE) + ->set_latency(cluster->loopback_lat) + ->seal() + ->get_impl(); current_zone->add_private_link_at(current_zone->node_pos(rankId), {loopback, loopback}); } // add a limiter link (shared link to account for maximal bandwidth of the node) + simgrid::kernel::resource::LinkImpl* limiter = nullptr; if (cluster->limiter_link > 0) { std::string limiter_name = std::string(link_id) + "_limiter"; XBT_DEBUG("", limiter_name.c_str(), cluster->limiter_link); - auto* limiter = - current_zone->create_link(limiter_name, std::vector{cluster->limiter_link})->seal()->get_impl(); + limiter = current_zone->create_link(limiter_name, std::vector{cluster->limiter_link})->seal()->get_impl(); current_zone->add_private_link_at(current_zone->node_pos_with_loopback(rankId), {limiter, limiter}); } // call the cluster function that adds the others links if (cluster->topology == simgrid::kernel::routing::ClusterTopology::FAT_TREE) { - static_cast(current_zone)->add_processing_node(i); + static_cast(current_zone)->add_processing_node(i, limiter, loopback); } else { current_zone->create_links_for_node(cluster, i, rankId, current_zone->node_pos_with_loopback_limiter(rankId)); } @@ -243,7 +250,7 @@ void sg_platf_new_cluster(simgrid::kernel::routing::ClusterCreationArgs* cluster XBT_DEBUG("", cluster->router_id.c_str()); if (cluster->router_id.empty()) cluster->router_id = std::string(cluster->prefix) + cluster->id + "_router" + cluster->suffix; - current_zone->set_router(sg_platf_new_router(cluster->router_id, "")); + current_zone->set_router(current_zone->create_router(cluster->router_id)); // Make the backbone if ((cluster->bb_bw > 0) || (cluster->bb_lat > 0)) { @@ -254,8 +261,9 @@ void sg_platf_new_cluster(simgrid::kernel::routing::ClusterCreationArgs* cluster auto* backbone = current_zone->create_link(bb_name, std::vector{cluster->bb_bw}) ->set_sharing_policy(cluster->bb_sharing_policy) ->set_latency(cluster->bb_lat) - ->seal(); - current_zone->set_backbone(backbone->get_impl()); + ->seal() + ->get_impl(); + current_zone->set_backbone(backbone); } XBT_DEBUG(""); @@ -275,17 +283,18 @@ void routing_cluster_add_backbone(simgrid::kernel::resource::LinkImpl* bb) XBT_DEBUG("Add a backbone to zone '%s'", current_routing->get_cname()); } -void sg_platf_new_cabinet(const simgrid::kernel::routing::CabinetCreationArgs* cabinet) +void sg_platf_new_cabinet(const simgrid::kernel::routing::CabinetCreationArgs* args) { auto* zone = static_cast(routing_get_current()); - for (int const& radical : cabinet->radicals) { - std::string id = cabinet->prefix + std::to_string(radical) + cabinet->suffix; - simgrid::s4u::Host* host = zone->create_host(id, std::vector{cabinet->speed})->seal(); + for (int const& radical : args->radicals) { + std::string id = args->prefix + std::to_string(radical) + args->suffix; + auto const* host = zone->create_host(id, std::vector{args->speed})->seal(); + + auto* link_up = + zone->create_link("link_" + id + "_UP", std::vector{args->bw})->set_latency(args->lat)->seal(); - simgrid::s4u::Link* link_up = - zone->create_link("link_" + id + "_UP", std::vector{cabinet->bw})->set_latency(cabinet->lat)->seal(); - simgrid::s4u::Link* link_down = - zone->create_link("link_" + id + "_DOWN", std::vector{cabinet->bw})->set_latency(cabinet->lat)->seal(); + auto* link_down = + zone->create_link("link_" + id + "_DOWN", std::vector{args->bw})->set_latency(args->lat)->seal(); zone->add_private_link_at(host->get_netpoint()->id(), {link_up->get_impl(), link_down->get_impl()}); } @@ -373,19 +382,6 @@ void sg_platf_new_actor(simgrid::kernel::routing::ActorCreationArgs* actor) } } -void sg_platf_new_peer(const simgrid::kernel::routing::PeerCreationArgs* peer) -{ - auto* zone = dynamic_cast(current_routing); - xbt_assert(zone, " tag can only be used in Vivaldi netzones."); - - simgrid::s4u::Host* host = zone->create_host(peer->id, std::vector{peer->speed}) - ->set_state_profile(peer->state_trace) - ->set_speed_profile(peer->speed_trace) - ->set_coordinates(peer->coord) - ->seal(); - - zone->set_peer_link(host->get_netpoint(), peer->bw_in, peer->bw_out); -} /** * @brief Auxiliary function to build the object NetZoneImpl * @@ -501,15 +497,15 @@ void sg_platf_new_hostlink(const simgrid::kernel::routing::HostLinkCreationArgs* cluster_zone->add_private_link_at(netpoint->id(), {linkUp->get_impl(), linkDown->get_impl()}); } -void sg_platf_new_trace(simgrid::kernel::routing::ProfileCreationArgs* profile) +void sg_platf_new_trace(simgrid::kernel::routing::ProfileCreationArgs* args) { - simgrid::kernel::profile::Profile* mgr_profile; - if (not profile->file.empty()) { - mgr_profile = simgrid::kernel::profile::Profile::from_file(profile->file); + simgrid::kernel::profile::Profile* profile; + if (not args->file.empty()) { + profile = simgrid::kernel::profile::Profile::from_file(args->file); } else { - xbt_assert(not profile->pc_data.empty(), "Trace '%s' must have either a content, or point to a file on disk.", - profile->id.c_str()); - mgr_profile = simgrid::kernel::profile::Profile::from_string(profile->id, profile->pc_data, profile->periodicity); + xbt_assert(not args->pc_data.empty(), "Trace '%s' must have either a content, or point to a file on disk.", + args->id.c_str()); + profile = simgrid::kernel::profile::Profile::from_string(args->id, args->pc_data, args->periodicity); } - traces_set_list.insert({profile->id, mgr_profile}); + traces_set_list.insert({args->id, profile}); }