- if (cluster->state_trace && strcmp(cluster->state_trace, "")) {
- char *avail_file = xbt_str_varsubst(cluster->state_trace, patterns);
- XBT_DEBUG("\tstate_file=\"%s\"", avail_file);
- host.state_trace = tmgr_trace_new_from_file(avail_file);
- xbt_free(avail_file);
- } else {
- XBT_DEBUG("\tstate_file=\"\"");
- }
-
- host.speed_peak = xbt_dynar_new(sizeof(double), NULL);
- xbt_dynar_push(host.speed_peak,&cluster->speed);
- host.pstate = 0;
-
- //host.power_peak = cluster->power;
- host.core_amount = cluster->core_amount;
- host.coord = "";
- sg_platf_new_host(&host);
- xbt_dynar_free(&host.speed_peak);
- XBT_DEBUG("</host>");
-
- 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;
- // 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
- // the second column may store a limiter link if p_has_limiter is set
- // other columns are to store one or more link for the node
-
- //add a loopback link
- if(cluster->loopback_bw!=0 || cluster->loopback_lat!=0){
- char *tmp_link = bprintf("%s_loopback", link_id);
- XBT_DEBUG("<loopback\tid=\"%s\"\tbw=\"%f\"/>", tmp_link,
- cluster->limiter_link);
-
-
- memset(&link, 0, sizeof(link));
- link.id = tmp_link;
- link.bandwidth = cluster->loopback_bw;
- link.latency = cluster->loopback_lat;
- link.policy = SURF_LINK_FATPIPE;
- sg_platf_new_link(&link);
- info_loop.link_up = Link::byName(tmp_link);
- info_loop.link_down = info_loop.link_up;
- free(tmp_link);
- xbt_dynar_set(current_routing->upDownLinks, rankId*(static_cast<AsCluster*>(current_routing))->nb_links_per_node_, &info_loop);
- }
-
- //add a limiter link (shared link to account for maximal bandwidth of the node)
- if(cluster->limiter_link!=0){
- char *tmp_link = bprintf("%s_limiter", link_id);
- XBT_DEBUG("<limiter\tid=\"%s\"\tbw=\"%f\"/>", tmp_link,
- cluster->limiter_link);
-
-
- memset(&link, 0, sizeof(link));
- link.id = tmp_link;
- link.bandwidth = cluster->limiter_link;
- link.latency = 0;
- link.policy = SURF_LINK_SHARED;
- sg_platf_new_link(&link);
- info_lim.link_up = Link::byName(tmp_link);
- info_lim.link_down = info_lim.link_up;
- free(tmp_link);
- auto as_cluster = static_cast<AsCluster*>(current_routing);
- xbt_dynar_set(current_routing->upDownLinks, rankId*(as_cluster)->nb_links_per_node_ + as_cluster->has_loopback_ , &info_lim);
-
+ host.speed_per_pstate.push_back(cluster->speed);
+ host.pstate = 0;
+ host.core_amount = cluster->core_amount;
+ host.coord = "";
+ sg_platf_new_host(&host);
+ XBT_DEBUG("</host>");
+
+ XBT_DEBUG("<link\tid=\"%s\"\tbw=\"%f\"\tlat=\"%f\"/>", 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
+ // the second column may store a limiter link if p_has_limiter is set
+ // other columns are to store one or more link for the node
+
+ //add a loopback link
+ if(cluster->loopback_bw!=0 || cluster->loopback_lat!=0){
+ char *tmp_link = bprintf("%s_loopback", link_id);
+ XBT_DEBUG("<loopback\tid=\"%s\"\tbw=\"%f\"/>", tmp_link, cluster->loopback_bw);
+
+ memset(&link, 0, sizeof(link));
+ link.id = tmp_link;
+ link.bandwidth = cluster->loopback_bw;
+ 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);
+ free(tmp_link);
+ auto as_cluster = static_cast<AsCluster*>(current_as);
+ if (rankId*as_cluster->linkCountPerNode_ >= static_cast<int>(as_cluster->privateLinks_.size())){
+ s_surf_parsing_link_up_down_t dummy;
+ dummy.linkUp = nullptr;
+ dummy.linkDown = nullptr;
+ as_cluster->privateLinks_.resize(rankId*as_cluster->linkCountPerNode_,dummy);