A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[sonar] don't mix public/private issues in jedule
[simgrid.git]
/
src
/
instr
/
jedule
/
jedule_platform.cpp
diff --git
a/src/instr/jedule/jedule_platform.cpp
b/src/instr/jedule/jedule_platform.cpp
index babb8946235a3dd1584a05b1d82251b752b52b1f..53e657a3bcdfc7ad58ed389f4cd78ec2abd354d3 100644
(file)
--- a/
src/instr/jedule/jedule_platform.cpp
+++ b/
src/instr/jedule/jedule_platform.cpp
@@
-1,99
+1,96
@@
-/* Copyright (c) 2010-20
17
. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2010-20
20
. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "simgrid/jedule/jedule.hpp"
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "simgrid/jedule/jedule.hpp"
+#include "simgrid/host.h"
#include "simgrid/s4u/NetZone.hpp"
#include "xbt/asserts.h"
#include <algorithm>
#if SIMGRID_HAVE_JEDULE
#include "simgrid/s4u/NetZone.hpp"
#include "xbt/asserts.h"
#include <algorithm>
#if SIMGRID_HAVE_JEDULE
+namespace {
+std::unordered_map<const char*, jed_container_t> host2_simgrid_parent_container;
+std::unordered_map<std::string, jed_container_t> container_name2container;
+}
+
namespace simgrid {
namespace jedule {
Subset::Subset(int start_idx, int end_idx, Container* parent)
namespace simgrid {
namespace jedule {
Subset::Subset(int start_idx, int end_idx, Container* parent)
-
: start_idx(start_idx
), parent(parent)
+
: start_idx(start_idx), nres(end_idx - start_idx + 1
), parent(parent)
{
{
- nres=end_idx-start_idx+1;
}
}
-
-Container::Container(std::string name): name(name)
+Container::Container(const std::string& name) : name(name)
{
container_name2container.insert({this->name, this});
}
{
container_name2container.insert({this->name, this});
}
-Container::~Container()
-{
- if (not this->children.empty())
- for (auto child: this->children)
- delete child;
-}
-
-void Container::addChild(jed_container_t child)
+void Container::add_child(jed_container_t child)
{
xbt_assert(child != nullptr);
{
xbt_assert(child != nullptr);
-
this->children.push
_back(child);
- child->
parent = this
;
+
children_.emplace
_back(child);
+ child->
set_parent(this)
;
}
}
-void Container::add
R
esources(std::vector<sg_host_t> hosts)
+void Container::add
_r
esources(std::vector<sg_host_t> hosts)
{
{
- this->is_lowest = 1;
- this->children.clear();
- this->last_id = 0;
+ children_.clear();
+ last_id_ = 0;
- //FIXME do we need to sort?: xbt_dynar_sort_strings(host_names);
-
- for (auto host : hosts) {
+ for (auto const& host : hosts) {
const char *host_name = sg_host_get_name(host);
const char *host_name = sg_host_get_name(host);
- this->name2id.insert({host_name, this->last_id});
- (this->last_id)++;
+ this->name2id.insert({host_name, this->last_id
_
});
+ (this->last_id
_
)++;
host2_simgrid_parent_container.insert({host_name, this});
this->resource_list.push_back(host);
}
}
host2_simgrid_parent_container.insert({host_name, this});
this->resource_list.push_back(host);
}
}
-void Container::create
Hierarchy(
sg_netzone_t from_as)
+void Container::create
_hierarchy(const_
sg_netzone_t from_as)
{
{
-
- if (from_as->getChildren()->empty()) {
+ if (from_as->get_children().empty()) {
// I am no AS
// add hosts to jedule platform
// I am no AS
// add hosts to jedule platform
- std::vector<sg_host_t> table;
- from_as->getHosts(&table);
- this->addResources(table);
+ std::vector<sg_host_t> table = from_as->get_all_hosts();
+ this->add_resources(table);
} else {
} else {
- for (auto
nz : *from_as->getC
hildren()) {
- jed_container_t child_container = new simgrid::jedule::Container(
std::string(nz->getCname()
));
- this->add
C
hild(child_container);
- child_container->create
H
ierarchy(nz);
+ for (auto
const& nz : from_as->get_c
hildren()) {
+ jed_container_t child_container = new simgrid::jedule::Container(
nz->get_name(
));
+ this->add
_c
hild(child_container);
+ child_container->create
_h
ierarchy(nz);
}
}
}
}
}
}
-
std::vector<int> Container::getHierarchy(
)
+
int Container::get_child_position(Container* child
)
{
{
- if(this->parent != nullptr ) {
+ unsigned int i = 0;
+ int child_nb = -1;
- if (not this->parent->children.empty()) {
+ for (auto const& c : children_) {
+ if (c.get() == child) {
+ child_nb = i;
+ break;
+ }
+ i++;
+ }
+ return child_nb;
+}
+
+std::vector<int> Container::get_hierarchy()
+{
+ if (parent_ != nullptr) {
+ if (not parent_->has_children()) {
// we are in the last level
// we are in the last level
- return
this->parent->getH
ierarchy();
+ return
parent_->get_h
ierarchy();
} else {
} else {
- unsigned int i =0;
- int child_nb = -1;
-
- for (auto child : this->parent->children) {
- if( child == this) {
- child_nb = i;
- break;
- }
- i++;
- }
+ int child_nb = parent_->get_child_position(this);
xbt_assert( child_nb > - 1);
xbt_assert( child_nb > - 1);
- std::vector<int> heir_list =
this->parent->getH
ierarchy();
+ std::vector<int> heir_list =
parent_->get_h
ierarchy();
heir_list.insert(heir_list.begin(), child_nb);
return heir_list;
}
heir_list.insert(heir_list.begin(), child_nb);
return heir_list;
}
@@
-104,15
+101,15
@@
std::vector<int> Container::getHierarchy()
}
}
}
}
-std::string Container::get
HierarchyAsS
tring()
+std::string Container::get
_hierarchy_as_s
tring()
{
std::string output("");
{
std::string output("");
- std::vector<int> heir_list = this->get
H
ierarchy();
+ std::vector<int> heir_list = this->get
_h
ierarchy();
unsigned int length = heir_list.size();
unsigned int i = 0;
unsigned int length = heir_list.size();
unsigned int i = 0;
- for (auto id : heir_list) {
+ for (auto
const&
id : heir_list) {
output += std::to_string(id);
if( i != length-1 ) {
output += ".";
output += std::to_string(id);
if( i != length-1 ) {
output += ".";
@@
-122,16
+119,16
@@
std::string Container::getHierarchyAsString()
return output;
}
return output;
}
-void Container::print
Resources(FILE
* jed_file)
+void Container::print
_resources(FILE
* jed_file)
{
unsigned int i=0;
xbt_assert(not this->resource_list.empty());
unsigned int res_nb = this->resource_list.size();
{
unsigned int i=0;
xbt_assert(not this->resource_list.empty());
unsigned int res_nb = this->resource_list.size();
- std::string resid
= this->getHierarchyAsS
tring();
+ std::string resid
= this->get_hierarchy_as_s
tring();
fprintf(jed_file, " <rset id=\"%s\" nb=\"%u\" names=\"", resid.c_str(), res_nb);
fprintf(jed_file, " <rset id=\"%s\" nb=\"%u\" names=\"", resid.c_str(), res_nb);
- for (auto
res
: this->resource_list) {
+ for (auto
const& res
: this->resource_list) {
const char * res_name = sg_host_get_name(res);
fprintf(jed_file, "%s", res_name);
if( i != res_nb-1 ) {
const char * res_name = sg_host_get_name(res);
fprintf(jed_file, "%s", res_name);
if( i != res_nb-1 ) {
@@
-145,20
+142,21
@@
void Container::printResources(FILE * jed_file)
void Container::print(FILE* jed_file)
{
fprintf(jed_file, " <res name=\"%s\">\n", this->name.c_str());
void Container::print(FILE* jed_file)
{
fprintf(jed_file, " <res name=\"%s\">\n", this->name.c_str());
- if (not
this->children
.empty()) {
- for (auto c
hild: this->children
) {
+ if (not
children_
.empty()) {
+ for (auto c
onst& child : children_
) {
child->print(jed_file);
}
} else {
child->print(jed_file);
}
} else {
- this->print
R
esources(jed_file);
+ this->print
_r
esources(jed_file);
}
fprintf(jed_file, " </res>\n");
}
}
fprintf(jed_file, " </res>\n");
}
-}
-}
+}
// namespace jedule
+}
// namespace simgrid
-static void add_subsets_to(std::vector<jed_subset_t> *subset_list, std::vector<const char*> hostgroup, jed_container_t parent)
+static void add_subsets_to(std::vector<simgrid::jedule::Subset>& subset_list, std::vector<const char*> hostgroup,
+ jed_container_t parent)
{
// get ids for each host
// sort ids
{
// get ids for each host
// sort ids
@@
-169,10
+167,10
@@
static void add_subsets_to(std::vector<jed_subset_t> *subset_list, std::vector<c
std::vector<unsigned int> id_list;
std::vector<unsigned int> id_list;
- for (auto host_name : hostgroup) {
+ for (auto
const&
host_name : hostgroup) {
xbt_assert( host_name != nullptr );
xbt_assert( host_name != nullptr );
- jed_container_t parent = host2_simgrid_parent_container.at(host_name);
- unsigned int id
= parent->name2id.at
(host_name);
+ jed_container_t parent
_cont
= host2_simgrid_parent_container.at(host_name);
+ unsigned int id
= parent_cont->get_id_by_name
(host_name);
id_list.push_back(id);
}
unsigned int nb_ids = id_list.size();
id_list.push_back(id);
}
unsigned int nb_ids = id_list.size();
@@
-183,43
+181,42
@@
static void add_subsets_to(std::vector<jed_subset_t> *subset_list, std::vector<c
int pos = start;
for(unsigned int i=0; i<nb_ids; i++) {
if( id_list[i] - id_list[pos] > 1 ) {
int pos = start;
for(unsigned int i=0; i<nb_ids; i++) {
if( id_list[i] - id_list[pos] > 1 ) {
- subset_list
->push_back(new simgrid::jedule::Subset(id_list[start], id_list[pos], parent)
);
+ subset_list
.emplace_back(id_list[start], id_list[pos], parent
);
start = i;
if( i == nb_ids-1 ) {
start = i;
if( i == nb_ids-1 ) {
-
subset_list->push_back(new simgrid::jedule::Subset(id_list[i], id_list[i], parent)
);
+
subset_list.emplace_back(id_list[i], id_list[i], parent
);
}
} else {
if( i == nb_ids-1 ) {
}
} else {
if( i == nb_ids-1 ) {
- subset_list
->push_back(new simgrid::jedule::Subset(id_list[start], id_list[i], parent)
);
+ subset_list
.emplace_back(id_list[start], id_list[i], parent
);
}
}
pos = i;
}
}
}
}
pos = i;
}
}
-
}
}
-void get_resource_selection_by_hosts(std::vector<jed_subset_t> *subset_list, std::vector<sg_host_t> *host_list)
+void get_resource_selection_by_hosts(std::vector<simgrid::jedule::Subset>& subset_list,
+ const std::vector<sg_host_t>& host_list)
{
{
- xbt_assert( host_list != nullptr );
// for each host name
// find parent container
// group by parent container
std::unordered_map<const char*, std::vector<const char*>> parent2hostgroup;
// for each host name
// find parent container
// group by parent container
std::unordered_map<const char*, std::vector<const char*>> parent2hostgroup;
- for (auto
host: *
host_list) {
+ for (auto
const& host :
host_list) {
const char *host_name = sg_host_get_name(host);
const char *host_name = sg_host_get_name(host);
-
jed_container_t
parent = host2_simgrid_parent_container.at(host_name);
+
const simgrid::jedule::Container*
parent = host2_simgrid_parent_container.at(host_name);
xbt_assert( parent != nullptr );
xbt_assert( parent != nullptr );
- auto host_group = parent2hostgroup.find(parent->
name.c_str
());
+ auto host_group = parent2hostgroup.find(parent->
get_cname
());
if (host_group == parent2hostgroup.end())
if (host_group == parent2hostgroup.end())
- parent2hostgroup.insert({parent->
name.c_str(), std::vector<const char*>(1,
host_name)});
+ parent2hostgroup.insert({parent->
get_cname(), std::vector<const char*>(1,
host_name)});
else
host_group->second.push_back(host_name);
}
else
host_group->second.push_back(host_name);
}
- for (auto
elm
: parent2hostgroup) {
+ for (auto
const& elm
: parent2hostgroup) {
jed_container_t parent = container_name2container.at(elm.first);
add_subsets_to(subset_list, elm.second, parent);
}
jed_container_t parent = container_name2container.at(elm.first);
add_subsets_to(subset_list, elm.second, parent);
}