Simplify naive distribution

This commit is contained in:
Alejandro Gallo 2021-10-19 13:47:35 +02:00
parent 7e52480b3b
commit f514b70b4e

View File

@ -721,6 +721,7 @@ This section presents some utilities
#include <chrono> #include <chrono>
#include <ctf.hpp> #include <ctf.hpp>
#include <atrip/Debug.hpp>
namespace atrip { namespace atrip {
#+end_src #+end_src
@ -1510,10 +1511,16 @@ getABCRange(size_t np, size_t rank, ABCTuples const& tuplesList) {
auto const& it = n_tuples_per_rank.begin(); auto const& it = n_tuples_per_rank.begin();
return std::pair<size_t, size_t> const
{ std::accumulate(it, it + rank , 0) range = { std::accumulate(it, it + rank , 0)
, std::accumulate(it, it + rank + 1, 0) , std::accumulate(it, it + rank + 1, 0) - 1
}; };
WITH_RANK << "range = "
<< range.first << " -> " << range.second
<< std::endl;
return range;
} }
#+end_src #+end_src
@ -1527,12 +1534,23 @@ struct NaiveDistribution : public TuplesDistribution {
MPI_Comm_rank(universe, &rank); MPI_Comm_rank(universe, &rank);
MPI_Comm_size(universe, &np); MPI_Comm_size(universe, &np);
auto const all = getTuplesList(Nv); auto const all = getTuplesList(Nv);
auto const range = getABCRange((size_t)np, (size_t)rank, all); const size_t
tuplesPerRank
= all.size() / np
+ size_t(all.size() % np != 0)
;
//auto const range = getABCRange((size_t)np, (size_t)rank, all);
std::pair<size_t, size_t> const
range = { tuplesPerRank * rank
, tuplesPerRank * (rank + 1) - 1
};
std::vector<ABCTuple> result(range.second - range.first, FAKE_TUPLE); std::vector<ABCTuple> result(range.second - range.first, FAKE_TUPLE);
std::copy(all.begin() + range.first, std::copy(all.begin() + range.first,
range.second >= all.size() range.second >= all.size()
? all.end() ? all.end()
: all.begin() + range.first + range.second, : all.begin() + range.first + range.second,
result.begin()); result.begin());
return result; return result;
} }
@ -1688,7 +1706,6 @@ specialDistribution(Info info, std::vector<ABCTuple> const& allTuples) {
size_t nNodes(info.nNodes); size_t nNodes(info.nNodes);
size_t np(info.np); size_t np(info.np);
size_t N(allTuples.size()); size_t N(allTuples.size());
size_t tuplePerNode( ceil( ((double)N) / nNodes) );
// nodeid tuple list // nodeid tuple list
std::map<size_t, std::vector<ABCTuple> > container1d; std::map<size_t, std::vector<ABCTuple> > container1d;