Go to the documentation of this file. 1 #ifndef DIST_MATRIX_HPP
2 #define DIST_MATRIX_HPP
20 template<
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
class DVector;
21 template<
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
class DMatrix;
31 template <
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
42 template <
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
53 template <
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
60 :
vec(p_vec),
a(p_a) {}
64 template <
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
77 template <
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
83 :
mat(p_mat),
a(p_a) {}
87 template <
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
94 :
mat(p_mat),
a(p_a) {}
98 template <
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
111 template <
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
122 template <
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
137 template<
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
138 const VVAddOp<DistNhbdT, MatrixT, VectorT, ScalarT>
147 template<
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
148 const VVSubOp<DistNhbdT, MatrixT, VectorT, ScalarT>
157 template<
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
158 const VSMultOp<DistNhbdT, MatrixT, VectorT, ScalarT>
166 template<
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
167 const VSaxpyOp<DistNhbdT, MatrixT, VectorT, ScalarT>
176 template<
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
177 const MMAddOp<DistNhbdT, MatrixT, VectorT, ScalarT>
186 template<
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
187 const MMSubOp<DistNhbdT, MatrixT, VectorT, ScalarT>
196 template<
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
197 const MSMultOp<DistNhbdT, MatrixT, VectorT, ScalarT>
205 template<
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
206 const MVMultOp<DistNhbdT, MatrixT, VectorT, ScalarT>
223 template<
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
302 subGPU(
vobj().data(), vec.vobj().data(),
vobj().data());
357 template <
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
370 typedef typename DNhbd::Edge
Edge;
449 subGPU(
vobj().data(), mat.
vobj().data(),
vobj().data());
450 subGPU(
eobj().data(), mat.
eobj().data(),
eobj().data());
489 template <
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
497 template <
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
505 template <
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
514 template <
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
522 template <
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
530 template <
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
534 minVGPU(m.
vobj().data(), rv);
535 minVGPU(m.
eobj().data(), re);
539 template <
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
547 template <
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
553 return pow(rv + re, 0.5);
556 template <
typename DistNhbdT,
typename MatrixT,
typename VectorT,
typename ScalarT>
void jacobiPreCond(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &m, DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &a)
DVector< DistNhbdT, MatrixT, VectorT, ScalarT > & vec2
VSaxpyOp(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec1, DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec2, ScalarT p_a)
const VVSubOp< DistNhbdT, MatrixT, VectorT, ScalarT > operator-(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec1, DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec2)
double maxDiagonal(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &m)
DVector< DistNhbdT, MatrixT, VectorT, ScalarT > & vec2
int maxGPU(T *v, typename T::value_type::value_type &r)
double minEntry(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &m)
DVector< DistNhbdT, MatrixT, VectorT, ScalarT > & vec
int mgx_EXPORT copyGPU(T1 *src, T2 *dst)
double minDiagonal(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &m)
void operator-=(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &mat)
void operator=(DVector &v)
void operator=(MVMultOp< DistNhbdT, MatrixT, VectorT, ScalarT > op)
const VSMultOp< DistNhbdT, MatrixT, VectorT, ScalarT > operator*(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec, ScalarT p_a)
int addToDiagGPU(typename T::value_type::value_type a, T *r)
VVAddOp(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec1, DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec2)
int saxpyGPU(T *v1, T *v2, typename T::value_type::value_type a, T *r)
void operator=(DMatrix &m)
DVector(DistVertex< DistNhbdT, VectorT > &vobj)
MMSubOp(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_mat1, DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_mat2)
DistEdge< DistNhbdT, MatrixT > & eobj()
void operator*=(ScalarT a)
void operator/=(ScalarT a)
void operator=(VSMultOp< DistNhbdT, MatrixT, VectorT, ScalarT > op)
Distributed matrix library.
void operator=(ScalarT a)
const VVAddOp< DistNhbdT, MatrixT, VectorT, ScalarT > operator+(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec1, DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec2)
DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > & mat
int minGPU(T *v, typename T::value_type::value_type &r)
void operator=(VVAddOp< DistNhbdT, MatrixT, VectorT, ScalarT > op)
void operator/=(ScalarT a)
T CU_HOST_DEVICE max(const T a, const T b)
DistEdge< DistNhbdT, MatrixT > DEdge
DVector< DistNhbdT, MatrixT, VectorT, ScalarT > & vec1
VVSubOp(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec1, DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec2)
void operator=(MMAddOp< DistNhbdT, MatrixT, VectorT, ScalarT > op)
void operator=(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &v)
DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > & mat1
void operator=(MSMultOp< DistNhbdT, MatrixT, VectorT, ScalarT > op)
int multGPU(T *v, typename T::value_type::value_type a, T *r)
DMatrix(DVertex &vobj, DEdge &eobj)
int jacobiPreCondGPU(DeviceVu *nb, T *mv, T *me, T *av, T *ae)
int fillGPU(typename T::value_type::value_type a, T *r)
double maxEntry(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &m)
DVector< DistNhbdT, MatrixT, VectorT, ScalarT > & vec
DistVertex< DistNhbdT, VectorT > DVertex
MSAddOp(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &p_mat, double p_a)
double minOffDiagonal(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &m)
void operator=(MMSubOp< DistNhbdT, MatrixT, VectorT, ScalarT > op)
DistVertex< DistNhbdT, MatrixT > & vobj()
void operator=(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &m)
void operator=(ScalarT a)
MMAddOp(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_mat1, DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_mat2)
Namespace containing all the utility classes.
DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > & mat
ScalarT norm(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &v)
DVector< DistNhbdT, MatrixT, VectorT, ScalarT > & vec1
CU_HOST_DEVICE T min(const T a, const T b)
const ScalarT operator*(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &vec)
DistVertex< DistNhbdT, VectorT > & vobj()
VSMultOp(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec, ScalarT p_a)
DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > & mat
DVector< DistNhbdT, MatrixT, VectorT, ScalarT > & vec2
int addGPU(T *v1, T *v2, T *r)
void operator=(VVSubOp< DistNhbdT, MatrixT, VectorT, ScalarT > op)
DistVertex< DistNhbdT, MatrixT > DVertex
void operator=(VSaxpyOp< DistNhbdT, MatrixT, VectorT, ScalarT > op)
void operator-=(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &vec)
DVector< DistNhbdT, MatrixT, VectorT, ScalarT > & vec1
DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > & mat2
void operator+=(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &mat)
void operator+=(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &vec)
double maxOffDiagonal(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &m)
MVMultOp(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &p_mat, DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec)
DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > & mat2
DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > & mat1
int subtractGPU(T *v1, T *v2, T *r)
MSMultOp(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_mat, ScalarT p_a)
void operator*=(ScalarT a)
double addToDiagonal(double a)