5 #ifndef FML_PAR_INTERNALS_TRREDUCE_H
6 #define FML_PAR_INTERNALS_TRREDUCE_H
17 template <
typename REAL>
18 void tr_pack(
char uplo,
int m,
int n, REAL *x,
int ldx)
20 const int minmn = std::min(m, n);
23 if (uplo ==
'U' || uplo ==
'u')
26 for (
int j=1; j<n; j++)
28 for (
int i=0; i<j; i++)
29 x[pos++] = x[i + ldx*j];
34 template <
typename REAL>
35 void tr_unpack(
char uplo,
int m,
int n, REAL *x,
int ldx)
37 const int minmn = std::min(m, n);
40 if (uplo ==
'U' || uplo ==
'u')
43 for (
int j=minmn-1; j>0; j--)
45 for (
int i=minmn-1; i>=j; i--)
46 ret_pt[i + minmn*j] = alpha * ret_pt[--pos];
51 template <
typename REAL>
52 void tr_allreduce(comm &r,
int m,
int n, REAL *data, MPI_Op op)
55 r.allreduce(len, data, op);