Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
cosmetics
[simgrid.git] / src / surf / sg_platf.cpp
index 7c8b90e..f4420c6 100644 (file)
@@ -148,7 +148,7 @@ void sg_platf_new_host(sg_platf_host_cbarg_t host)
     h->extension_set(COORD_HOST_LEVEL, (void *) ctn);
   }
 
-  simgrid::surf::Cpu *cpu = surf_cpu_model_pm->createCpu( h, host->speed_per_pstate, host->core_amount);
+  simgrid::surf::Cpu *cpu = surf_cpu_model_pm->createCpu( h, &host->speed_per_pstate, host->core_amount);
   if (host->state_trace)
     cpu->setStateTrace(host->state_trace);
   if (host->speed_trace)
@@ -301,8 +301,7 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster)
       }
     }
 
-    host.speed_per_pstate = new std::vector<double>();
-    host.speed_per_pstate->push_back(cluster->speed);
+    host.speed_per_pstate.push_back(cluster->speed);
     host.pstate = 0;
     host.core_amount = cluster->core_amount;
     host.coord = "";
@@ -311,7 +310,8 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster)
 
     XBT_DEBUG("<link\tid=\"%s\"\tbw=\"%f\"\tlat=\"%f\"/>", 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
@@ -329,10 +329,15 @@ 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<AsCluster*>(current_as);
-      xbt_dynar_set(as_cluster->privateLinks_, rankId*as_cluster->linkCountPerNode_, &info_loop);
+      if (rankId*as_cluster->linkCountPerNode_ >= as_cluster->privateLinks_.size())
+        as_cluster->privateLinks_.resize(rankId*as_cluster->linkCountPerNode_,{nullptr, nullptr});
+      as_cluster->privateLinks_.insert(as_cluster->privateLinks_.begin() + rankId*as_cluster->linkCountPerNode_,
+                                       info_loop);
     }
 
     //add a limiter link (shared link to account for maximal bandwidth of the node)
@@ -348,7 +353,8 @@ 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(current_as->privateLinks_.begin() + rankId * current_as->linkCountPerNode_ +
+                                       current_as->hasLoopback_ , info_lim);
     }
 
     //call the cluster function that adds the others links
@@ -421,10 +427,8 @@ void sg_platf_new_cabinet(sg_platf_cabinet_cbarg_t cabinet)
     host.pstate           = 0;
     host.core_amount      = 1;
     host.id               = hostname;
-    host.speed_per_pstate = new std::vector<double>();
-    host.speed_per_pstate->push_back(cabinet->speed);
+    host.speed_per_pstate.push_back(cabinet->speed);
     sg_platf_new_host(&host);
-    delete host.speed_per_pstate;
 
     s_sg_platf_link_cbarg_t link;
     memset(&link, 0, sizeof(link));
@@ -585,7 +589,7 @@ void sg_platf_new_process(sg_platf_process_cbarg_t process)
   std::function<void()> code = factory(std::move(args));
 
   smx_process_arg_t arg = nullptr;
-  smx_process_t process_created = nullptr;
+  smx_actor_t process_created = nullptr;
 
   arg = new simgrid::simix::ProcessArg();
   arg->name = std::string(process->argv[0]);
@@ -666,14 +670,12 @@ void sg_platf_new_peer(sg_platf_peer_cbarg_t peer)
   memset(&host, 0, sizeof(host));
   host.id = host_id;
 
-  host.speed_per_pstate = new std::vector<double>();
-  host.speed_per_pstate->push_back(peer->speed);
+  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);
-  delete host.speed_per_pstate;
 
   s_sg_platf_link_cbarg_t link;
   memset(&link, 0, sizeof(link));
@@ -908,10 +910,12 @@ void sg_platf_new_hostlink(sg_platf_host_link_cbarg_t hostlink)
 
   // If dynar is is greater than netcard id and if the host_link is already defined
   auto as_cluster = static_cast<simgrid::kernel::routing::AsCluster*>(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_.size() > netcard->id()){
+    if (as_cluster->privateLinks_.at(netcard->id()).linkUp != nullptr)
+      surf_parse_error("Host_link for '%s' is already defined!",hostlink->id);
+  } else {
+    as_cluster->privateLinks_.resize(netcard->id(), {nullptr, nullptr});
+  }
   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(as_cluster->privateLinks_.begin() + netcard->id(), link_up_down);
 }