10 size_t size = std::distance(size_begin, size_end);
12 std::vector<int> node_ids(size, 0);
13 std::iota(node_ids.begin(), node_ids.begin() + size, 0);
16 __gnu_parallel::sort(node_ids.begin(), node_ids.begin() + size,
17 [&](
int const node_id1,
int const node_id2) {
18 return size_begin[node_id1] > size_begin[node_id2];
21 #pragma omp parallel for
22 for (
int i = 0; i < size; ++i)
23 pair_id[node_ids[i]] = node_ids[size - i - 1];
38 MPI_Datatype
get_mpi_datatype(std::complex<double> x) {
return MPI_DOUBLE_COMPLEX; }
39 MPI_Datatype
get_mpi_datatype(std::complex<long double> x) {
return MPI_C_LONG_DOUBLE_COMPLEX; }
45 MPI_Datatype
get_mpi_datatype(
unsigned short x) {
return MPI_UNSIGNED_SHORT; }
QuIDS mpi utility function and variable namespace.
Definition: mpi_utils.hpp:6
void make_equal_pairs(size_t *size_begin, size_t *size_end, int *pair_id)
function to partition into pair of almost equal sum
Definition: mpi_utils.hpp:9
MPI_Datatype get_mpi_datatype(T x)
function to get the corresponding MPI type of a variable
Definition: mpi_utils.hpp:33