19#include "DoKDistributor.h"
23#include "DoKBackEnd.h"
24#include "DoKMatrixT.h"
27#include <alien/kernels/redistributor/RedistributorCommPlan.h>
36void DoKDistributor::distribute(
const DoKMatrix& src, DoKMatrix& dst)
38 distribute(src.data(), dst.data());
41void DoKDistributor::distribute(
const DoKVector& src, DoKVector& dst)
43 std::vector<std::pair<Arccore::Int32, DoKVector::ValueType>> pair_values(src.m_data.begin(), src.m_data.end());
44 std::sort(pair_values.begin(), pair_values.end());
46 Arccore::UniqueArray<Int32> snd_keys(src.m_data.size());
47 Arccore::UniqueArray<DoKVector::ValueType> snd_values(src.m_data.size());
50 for (
auto k : pair_values) {
51 snd_keys[i] = k.first;
52 snd_values[i] = k.second;
56 m_distributor->computeCommPlan(snd_keys);
58 const auto size = m_distributor->rcvSize();
60 UniqueArray<DoKVector::ValueType> rcv_values(size);
61 UniqueArray<Int32> rcv_keys(size);
62 m_distributor->exchange(snd_keys.constView(), rcv_keys.view());
63 m_distributor->exchange(snd_values.constView(), rcv_values.view());
67 for (
int offset = 0; offset < size; ++offset) {
68 dst.set(rcv_keys[offset], rcv_values[offset]);
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --