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
[SMPI] Move a map in smpi::Group from array to std::vector
[simgrid.git]
/
src
/
smpi
/
mpi
/
smpi_group.cpp
diff --git
a/src/smpi/mpi/smpi_group.cpp
b/src/smpi/mpi/smpi_group.cpp
index
bce418b
..
23c4809
100644
(file)
--- a/
src/smpi/mpi/smpi_group.cpp
+++ b/
src/smpi/mpi/smpi_group.cpp
@@
-3,8
+3,10
@@
/* 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. */
/* 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 "smpi_comm.hpp"
#include "smpi_group.hpp"
#include "smpi_group.hpp"
+#include "smpi_comm.hpp"
+#include <string>
+#include <xbt/log.h>
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_group, smpi, "Logging specific to SMPI (group)");
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_group, smpi, "Logging specific to SMPI (group)");
@@
-17,13
+19,11
@@
namespace smpi{
Group::Group()
{
size_ = 0; /* size */
Group::Group()
{
size_ = 0; /* size */
- rank_to_index_map_ = nullptr; /* rank_to_index_map_ */
refcount_ = 1; /* refcount_: start > 0 so that this group never gets freed */
}
refcount_ = 1; /* refcount_: start > 0 so that this group never gets freed */
}
-Group::Group(int n) : size_(n)
+Group::Group(int n) : size_(n)
, rank_to_index_map_(size_)
{
{
- rank_to_index_map_ = new int[size_];
refcount_ = 1;
for (int i = 0; i < size_; i++)
rank_to_index_map_[i] = MPI_UNDEFINED;
refcount_ = 1;
for (int i = 0; i < size_; i++)
rank_to_index_map_[i] = MPI_UNDEFINED;
@@
-33,13
+33,10
@@
Group::Group(MPI_Group origin)
{
if (origin != MPI_GROUP_NULL && origin != MPI_GROUP_EMPTY) {
size_ = origin->size();
{
if (origin != MPI_GROUP_NULL && origin != MPI_GROUP_EMPTY) {
size_ = origin->size();
- rank_to_index_map_ = new int[size_];
refcount_ = 1;
refcount_ = 1;
- for (int i = 0; i < size_; i++) {
- rank_to_index_map_[i] = origin->rank_to_index_map_[i];
- }
+ rank_to_index_map_ = origin->rank_to_index_map_;
- for (auto elm : origin->index_to_rank_map_) {
+ for (auto
const&
elm : origin->index_to_rank_map_) {
index_to_rank_map_.insert({elm.first, elm.second});
}
}
index_to_rank_map_.insert({elm.first, elm.second});
}
}
@@
-47,7
+44,7
@@
Group::Group(MPI_Group origin)
Group::~Group()
{
Group::~Group()
{
-
delete[] rank_to_index_map_
;
+
rank_to_index_map_.clear()
;
}
void Group::set_mapping(int index, int rank)
}
void Group::set_mapping(int index, int rank)
@@
-73,11
+70,8
@@
int Group::rank(int index)
{
if (this == MPI_GROUP_EMPTY)
return MPI_UNDEFINED;
{
if (this == MPI_GROUP_EMPTY)
return MPI_UNDEFINED;
- try {
- return index_to_rank_map_.at(index);
- } catch (std::out_of_range& unfound) {
- return MPI_UNDEFINED;
- }
+ auto rank = index_to_rank_map_.find(index);
+ return rank == index_to_rank_map_.end() ? MPI_UNDEFINED : rank->second;
}
void Group::ref()
}
void Group::ref()
@@
-130,10
+124,8
@@
int Group::incl(int n, int* ranks, MPI_Group* newgroup)
*newgroup = MPI_GROUP_EMPTY;
} else if (n == size_) {
*newgroup = this;
*newgroup = MPI_GROUP_EMPTY;
} else if (n == size_) {
*newgroup = this;
- if(this!= MPI_COMM_WORLD->group()
- && this != MPI_COMM_SELF->group()
- && this != MPI_GROUP_EMPTY)
- this->ref();
+ if (this != MPI_COMM_WORLD->group() && this != MPI_COMM_SELF->group() && this != MPI_GROUP_EMPTY)
+ this->ref();
} else {
*newgroup = new Group(n);
for (i = 0; i < n; i++) {
} else {
*newgroup = new Group(n);
for (i = 0; i < n; i++) {
@@
-229,7
+221,7
@@
int Group::excl(int n, int *ranks, MPI_Group * newgroup){
int oldsize = size_;
int newsize = oldsize - n;
*newgroup = new Group(newsize);
int oldsize = size_;
int newsize = oldsize - n;
*newgroup = new Group(newsize);
- int* to_exclude
=xbt_new0(int, size_)
;
+ int* to_exclude
= new int[size_]
;
for (int i = 0; i < oldsize; i++)
to_exclude[i]=0;
for (int i = 0; i < n; i++)
for (int i = 0; i < oldsize; i++)
to_exclude[i]=0;
for (int i = 0; i < n; i++)
@@
-242,7
+234,7
@@
int Group::excl(int n, int *ranks, MPI_Group * newgroup){
j++;
}
}
j++;
}
}
-
xbt_free(to_exclude)
;
+
delete[] to_exclude
;
return MPI_SUCCESS;
}
return MPI_SUCCESS;
}
@@
-355,7
+347,7
@@
MPI_Group Group::f2c(int id) {
return MPI_GROUP_EMPTY;
} else if(F2C::f2c_lookup() != nullptr && id >= 0) {
char key[KEY_SIZE];
return MPI_GROUP_EMPTY;
} else if(F2C::f2c_lookup() != nullptr && id >= 0) {
char key[KEY_SIZE];
- return static_cast<MPI_Group>(
xbt_dict_get_or_null(F2C::f2c_lookup(),
get_key(key, id)));
+ return static_cast<MPI_Group>(
F2C::f2c_lookup()->at(
get_key(key, id)));
} else {
return static_cast<MPI_Group>(MPI_GROUP_NULL);
}
} else {
return static_cast<MPI_Group>(MPI_GROUP_NULL);
}