X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/e81b0628a697bddad304e69a82d898299ff9fe40..312fb09ad52ce2677ad845a760d477b688a30d2c:/src/surf/sg_platf.cpp diff --git a/src/surf/sg_platf.cpp b/src/surf/sg_platf.cpp index 19d8243883..21d0d8c0f9 100644 --- a/src/surf/sg_platf.cpp +++ b/src/surf/sg_platf.cpp @@ -89,7 +89,7 @@ static std::vector *explodesRadical(const char*radicals){ /** The current AS in the parsing */ static simgrid::kernel::routing::AsImpl *current_routing = nullptr; -static simgrid::kernel::routing::AsImpl* routing_get_current() +static simgrid::kernel::routing::AsImpl *routing_get_current() { return current_routing; } @@ -310,7 +310,8 @@ 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, info_loop; + 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 @@ -328,10 +329,12 @@ 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 = info_loop.linkDown = Link::byName(tmp_link); + info_loop.linkUp = Link::byName(tmp_link); + info_loop.linkDown = Link::byName(tmp_link); free(tmp_link); + auto as_cluster = static_cast(current_as); - xbt_dynar_set(as_cluster->privateLinks_, rankId*as_cluster->linkCountPerNode_, &info_loop); + as_cluster->privateLinks_.insert({rankId*as_cluster->linkCountPerNode_, info_loop}); } //add a limiter link (shared link to account for maximal bandwidth of the node) @@ -347,12 +350,13 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster) sg_platf_new_link(&link); info_lim.linkUp = info_lim.linkDown = Link::byName(tmp_link); free(tmp_link); - xbt_dynar_set(current_as->privateLinks_, rankId * current_as->linkCountPerNode_ + current_as->hasLoopback_ , &info_lim); + current_as->privateLinks_.insert( + {rankId * current_as->linkCountPerNode_ + current_as->hasLoopback_ , info_lim}); } //call the cluster function that adds the others links if (cluster->topology == SURF_CLUSTER_FAT_TREE) { - ((AsClusterFatTree*) current_as)->addProcessingNode(i); + static_cast(current_as)->addProcessingNode(i); } else { current_as->create_links_for_node(cluster, i, rankId, @@ -566,6 +570,7 @@ void sg_platf_new_process(sg_platf_process_cbarg_t process) msg->used -= 3; xbt_strbuff_append(msg," ...(list truncated)......");// That will be shortened by 3 chars when existing the loop + break; } } msg->data[msg->used-3]='\0'; @@ -588,13 +593,11 @@ void sg_platf_new_process(sg_platf_process_cbarg_t process) arg->name = std::string(process->argv[0]); arg->code = code; arg->data = nullptr; - arg->hostname = sg_host_get_name(host); + arg->host = host; arg->kill_time = kill_time; arg->properties = current_property_set; - if (!sg_host_simix(host)->boot_processes) - sg_host_simix(host)->boot_processes = xbt_dynar_new(sizeof(smx_process_arg_t), _SIMIX_host_free_process_arg); - xbt_dynar_push_as(sg_host_simix(host)->boot_processes,smx_process_arg_t,arg); + sg_host_simix(host)->boot_processes.push_back(arg); if (start_time > SIMIX_get_clock()) { @@ -602,18 +605,18 @@ void sg_platf_new_process(sg_platf_process_cbarg_t process) arg->name = std::string(process->argv[0]); arg->code = std::move(code); arg->data = nullptr; - arg->hostname = sg_host_get_name(host); + arg->host = host; arg->kill_time = kill_time; arg->properties = current_property_set; - XBT_DEBUG("Process %s(%s) will be started at time %f", - arg->name.c_str(), arg->hostname, start_time); + XBT_DEBUG("Process %s@%s will be started at time %f", + arg->name.c_str(), arg->host->name().c_str(), start_time); SIMIX_timer_set(start_time, [=]() { simix_global->create_process_function( arg->name.c_str(), std::move(arg->code), arg->data, - arg->hostname, + arg->host, arg->kill_time, arg->properties, arg->auto_restart, @@ -624,15 +627,10 @@ void sg_platf_new_process(sg_platf_process_cbarg_t process) XBT_DEBUG("Starting Process %s(%s) right now", arg->name.c_str(), sg_host_get_name(host)); - if (simix_global->create_process_function) - process_created = simix_global->create_process_function( - arg->name.c_str(), std::move(code), nullptr, - sg_host_get_name(host), kill_time, - current_property_set, auto_restart, nullptr); - else - process_created = simcall_process_create( - arg->name.c_str(), std::move(code), nullptr, sg_host_get_name(host), kill_time, - current_property_set,auto_restart); + process_created = simix_global->create_process_function( + arg->name.c_str(), std::move(code), nullptr, + host, kill_time, + current_property_set, auto_restart, nullptr); /* verify if process has been created (won't be the case if the host is currently dead, but that's fine) */ if (!process_created) { @@ -823,17 +821,39 @@ simgrid::s4u::As * sg_platf_new_AS_begin(sg_platf_AS_cbarg_t AS) /* search the routing model */ simgrid::kernel::routing::AsImpl *new_as = nullptr; switch(AS->routing){ - case A_surfxml_AS_routing_Cluster: new_as = new simgrid::kernel::routing::AsCluster(AS->id); break; - case A_surfxml_AS_routing_ClusterDragonfly: new_as = new simgrid::kernel::routing::AsClusterDragonfly(AS->id); break; - case A_surfxml_AS_routing_ClusterTorus: new_as = new simgrid::kernel::routing::AsClusterTorus(AS->id); break; - case A_surfxml_AS_routing_ClusterFatTree: new_as = new simgrid::kernel::routing::AsClusterFatTree(AS->id); break; - case A_surfxml_AS_routing_Dijkstra: new_as = new simgrid::kernel::routing::AsDijkstra(AS->id, 0); break; - case A_surfxml_AS_routing_DijkstraCache: new_as = new simgrid::kernel::routing::AsDijkstra(AS->id, 1); break; - case A_surfxml_AS_routing_Floyd: new_as = new simgrid::kernel::routing::AsFloyd(AS->id); break; - case A_surfxml_AS_routing_Full: new_as = new simgrid::kernel::routing::AsFull(AS->id); break; - case A_surfxml_AS_routing_None: new_as = new simgrid::kernel::routing::AsNone(AS->id); break; - case A_surfxml_AS_routing_Vivaldi: new_as = new simgrid::kernel::routing::AsVivaldi(AS->id); break; - default: xbt_die("Not a valid model!"); break; + case A_surfxml_AS_routing_Cluster: + new_as = new simgrid::kernel::routing::AsCluster(current_routing, AS->id); + break; + case A_surfxml_AS_routing_ClusterDragonfly: + new_as = new simgrid::kernel::routing::AsClusterDragonfly(current_routing, AS->id); + break; + case A_surfxml_AS_routing_ClusterTorus: + new_as = new simgrid::kernel::routing::AsClusterTorus(current_routing, AS->id); + break; + case A_surfxml_AS_routing_ClusterFatTree: + new_as = new simgrid::kernel::routing::AsClusterFatTree(current_routing, AS->id); + break; + case A_surfxml_AS_routing_Dijkstra: + new_as = new simgrid::kernel::routing::AsDijkstra(current_routing, AS->id, 0); + break; + case A_surfxml_AS_routing_DijkstraCache: + new_as = new simgrid::kernel::routing::AsDijkstra(current_routing, AS->id, 1); + break; + case A_surfxml_AS_routing_Floyd: + new_as = new simgrid::kernel::routing::AsFloyd(current_routing, AS->id); + break; + case A_surfxml_AS_routing_Full: + new_as = new simgrid::kernel::routing::AsFull(current_routing, AS->id); + break; + case A_surfxml_AS_routing_None: + new_as = new simgrid::kernel::routing::AsNone(current_routing, AS->id); + break; + case A_surfxml_AS_routing_Vivaldi: + new_as = new simgrid::kernel::routing::AsVivaldi(current_routing, AS->id); + break; + default: + xbt_die("Not a valid model!"); + break; } /* make a new routing component */ @@ -843,10 +863,7 @@ simgrid::s4u::As * sg_platf_new_AS_begin(sg_platf_AS_cbarg_t AS) routing_platf->root_ = new_as; } else if (current_routing != nullptr && routing_platf->root_ != nullptr) { - xbt_assert(!xbt_dict_get_or_null(current_routing->children(), AS->id), - "The AS \"%s\" already exists", AS->id); - /* it is a part of the tree */ - new_as->father_ = current_routing; + xbt_assert(!xbt_dict_get_or_null(current_routing->children(), AS->id), "The AS '%s' already exists", AS->id); /* set the father behavior */ if (current_routing->hierarchy_ == simgrid::kernel::routing::AsImpl::RoutingMode::unset) current_routing->hierarchy_ = simgrid::kernel::routing::AsImpl::RoutingMode::recursive; @@ -901,12 +918,11 @@ void sg_platf_new_hostlink(sg_platf_host_link_cbarg_t hostlink) 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); - // If dynar is is greater than netcard id and if the host_link is already defined auto as_cluster = static_cast(current_routing); - if((int)xbt_dynar_length(as_cluster->privateLinks_) > netcard->id() && - xbt_dynar_get_as(as_cluster->privateLinks_, netcard->id(), void*)) - surf_parse_error("Host_link for '%s' is already defined!",hostlink->id); + + if (as_cluster->privateLinks_.find(netcard->id()) != as_cluster->privateLinks_.end()) + 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(), netcard->id()); - xbt_dynar_set_as(as_cluster->privateLinks_, netcard->id(), s_surf_parsing_link_up_down_t, link_up_down); + as_cluster->privateLinks_.insert({netcard->id(), link_up_down}); }