36template <
class IT,
class NT>
37template <
typename _BinaryOperation>
47 int colneighs =
commGrid->GetGridRows();
48 int colrank =
commGrid->GetRankInProcCol();
53 IT n_perproc = n / colneighs;
54 if(colrank == colneighs-1)
55 loclens[colrank] = n - (n_perproc*colrank);
64 for(
int j=0;
j < n; ++
j)
67 for(
int i=0; i < m; ++i)
82 int diagneigh =
commGrid->GetComplementRank();
84 MPI_Sendrecv(&
trlen, 1,
MPIType<IT>(), diagneigh,
TRNNZ, &
reallen, 1,
MPIType<IT>(), diagneigh,
TRNNZ,
commGrid->GetWorld(), &
status);
89 MPI_Sendrecv(
trarr.data(),
trlen,
MPIType<NT>(), diagneigh,
TRX,
parvec.arr.data(),
reallen,
MPIType<NT>(), diagneigh,
TRX,
commGrid->GetWorld(), &
status);
101 for(
int i=0; i < m; ++i)
119 delete [] recvcounts;
125 std::cout <<
"Unknown reduction dimension, returning empty vector" << std::endl;
132template <
class IT,
class NT>
133template <
typename DER>
138 (
rhs.spSeq)->UpdateDense(array, std::plus<double>());
142 std::cout <<
"Grids are not comparable elementwise addition" << std::endl;
149template <
class IT,
class NT>
161 array = SpHelper::allocate2D<NT>(m, n);
162 for(
int i=0; i< m; ++i)
163 std::copy(array[i], array[i]+n,
rhs.array[i]);
DenseParMat< IT, NT > & operator=(const DenseParMat< IT, NT > &rhs)
DenseParMat< IT, NT > & operator+=(const SpParMat< IT, NT, DER > &rhs)
FullyDistVec< IT, NT > Reduce(Dim dim, _BinaryOperation __binary_op, NT identity) const
std::shared_ptr< CommGrid > commGrid
static void deallocate2D(T **array, I m)