MorphoGraphX  2.0-1-227
DistMatrix.hpp
Go to the documentation of this file.
1 #ifndef DIST_MATRIX_HPP
2 #define DIST_MATRIX_HPP
3 
4 #include <ThrustTypes.hpp>
5 #include <DistObject.hpp>
6 #include <DistMatrixProto.hpp>
7 
16 namespace mgx
17 {
18 
19  // Forward class declarations
20  template<typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT> class DVector;
21  template<typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT> class DMatrix;
22 
23  // --- Intermediate classes for operators ---
24 
25  //
26  // Define the operations. These will hold the operands in a structure, and the
27  // work will be done when "=" is invoked.
28  //
29 
30  // Vector-vector addition
31  template <typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
32  class VVAddOp {
33  public:
36 
38  DVector<DistNhbdT, MatrixT, VectorT, ScalarT> &p_vec2) : vec1(p_vec1), vec2(p_vec2) {}
39  };
40 
41  // Vector-vector subtraction
42  template <typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
43  class VVSubOp {
44  public:
47 
49  DVector<DistNhbdT, MatrixT, VectorT, ScalarT> &p_vec2) : vec1(p_vec1), vec2(p_vec2) {}
50  };
51 
52  // Vector-scalar multiplication
53  template <typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
54  class VSMultOp {
55  public:
57  ScalarT a;
58 
60  : vec(p_vec), a(p_a) {}
61  };
62 
63  // Vector saxpy
64  template <typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
65  class VSaxpyOp {
66  public:
69  ScalarT a;
70 
73  : vec1(p_vec1), vec2(p_vec2), a(p_a) {}
74  };
75 
76  // Matrix-scalar multiplication
77  template <typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
78  class MSMultOp {
79  public:
81  ScalarT a;
83  : mat(p_mat), a(p_a) {}
84  };
85 
86  // Matrix-scalar addition
87  template <typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
88  class MSAddOp {
89  public:
91  ScalarT a;
92 
94  : mat(p_mat), a(p_a) {}
95  };
96 
97  // Matrix-matrix addition
98  template <typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
99  class MMAddOp {
100  public:
103 
105  DVector<DistNhbdT, MatrixT, VectorT, ScalarT> &p_mat2) : mat1(p_mat1), mat2(p_mat2) {}
106  };
107 
108  //
109 
110  // Matrix-matrix subtraction
111  template <typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
112  class MMSubOp {
113  public:
116 
118  DVector<DistNhbdT, MatrixT, VectorT, ScalarT> &p_mat2) : mat1(p_mat1), mat2(p_mat2) {}
119  };
120 
121  // Matrix-vector multiplication
122  template <typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
123  class MVMultOp {
124  public:
127 
129  DVector<DistNhbdT, MatrixT, VectorT, ScalarT> &p_vec) : mat(p_mat), vec(p_vec) {}
130  };
131 
132  //
133  // Define the operators to make nice syntax
134  //
135 
136  // Vector-vector addition
137  template<typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
138  const VVAddOp<DistNhbdT, MatrixT, VectorT, ScalarT>
141  {
143  return ans;
144  }
145 
146  // Vector-vector subtraction
147  template<typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
148  const VVSubOp<DistNhbdT, MatrixT, VectorT, ScalarT>
151  {
153  return ans;
154  }
155 
156  // Vector-scalar multiplication
157  template<typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
158  const VSMultOp<DistNhbdT, MatrixT, VectorT, ScalarT>
160  {
162  return ans;
163  }
164 
165  // Vector saxpy
166  template<typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
167  const VSaxpyOp<DistNhbdT, MatrixT, VectorT, ScalarT>
170  {
171  VSaxpyOp<DistNhbdT, MatrixT, VectorT, ScalarT> ans(p_VSMultOp.vec, p_vec, p_VSMultOp.a);
172  return ans;
173  }
174 
175  // Matrix-matrix addition
176  template<typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
177  const MMAddOp<DistNhbdT, MatrixT, VectorT, ScalarT>
180  {
182  return ans;
183  }
184 
185  // Matrix-matrix subtraction
186  template<typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
187  const MMSubOp<DistNhbdT, MatrixT, VectorT, ScalarT>
190  {
192  return ans;
193  }
194 
195  // Matrix-scalar multiplication
196  template<typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
197  const MSMultOp<DistNhbdT, MatrixT, VectorT, ScalarT>
199  {
201  return ans;
202  }
203 
204  // Matrix-vector multiplication
205  template<typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
206  const MVMultOp<DistNhbdT, MatrixT, VectorT, ScalarT>
209  {
211  return ans;
212  }
213 
214  //
215  // Classes for distributed matrix and vector
216  //
217  // These allow VV graphs to be used like matrices and vectors
218  //
219 
220  //
221  // Distributed Vector class
222  //
223  template<typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
224  class DVector
225  {
226  public:
227  // Type of neighborhood object
228  typedef DistNhbdT DNhbd;
229  // Type of distributed vector
231  // Type of a vertex
232  typedef typename DNhbd::Vertex Vertex;
233 
234  private:
235  DistNhbdT &_nhbd;
237 
238  public:
239  // Constructor for vector objects
241  _nhbd(vobj.nhbd()), _vobj(vobj) {}
242 
243  ~DVector() {}
244 
245  // Return neighborhood object
246  DistNhbdT &nhbd() { return _nhbd; }
247 
248  // Return vertex object
250 
251  // Allocate storage for a vector on GPU
252  void alloc()
253  {
254  vobj().alloc();
255  }
256 
257  // Send vector data to GPU
258  void write()
259  {
260  vobj().write();
261  }
262 
263  // Copy vector data from GPU
264  void read()
265  {
266  vobj().read();
267  }
268 
269  // Vector-vector assignment
271  {
272  copyGPU(v.vobj().data(), vobj().data());
273  }
274 
275  // Vector-scalar assignment
276  void operator=(ScalarT a)
277  {
278  fillGPU(a, vobj().data());
279  }
280 
281  // Vector-matrix assignment (assigns diagonal)
283  {
284  copyGPU(m.vobj().data(), vobj().data());
285  }
286 
287  // Vector-scalar multiply
289  {
290  multGPU(op.vec.vobj().data(), op.a, vobj().data());
291  }
292 
293  // Vector-vector in place addition
295  {
296  addGPU(vobj().data(), vec.vobj().data(), vobj().data());
297  }
298 
299  // Vector-vector in place subtraction
301  {
302  subGPU(vobj().data(), vec.vobj().data(), vobj().data());
303  }
304 
305  // Vector-scalar in place multiplication
306  void operator*=(ScalarT a)
307  {
308  multGPU(vobj().data(), a, vobj().data());
309  }
310 
311  // Vector-scalar in place division
312  void operator/=(ScalarT a)
313  {
314  if(a != 0)
315  multGPU(vobj().data(), ScalarT(1)/a, vobj().data());
316  }
317 
318  // Vector-vector addition
320  {
321  addGPU(op.vec1.vobj().data(), op.vec2.vobj().data(), vobj().data());
322  }
323 
324  // Vector-vector subtraction
326  {
327  subtractGPU(op.vec1.vobj().data(), op.vec2.vobj().data(), vobj().data());
328  }
329 
330  // Vector-vector multiplication
332  {
333  ScalarT r;
334  multGPU(vobj().data(), vec.vobj().data(), r);
335  return(r);
336  }
337 
338  // Vector saxpy
340  {
341  saxpyGPU(op.vec1.vobj().data(), op.vec2.vobj().data(), op.a, vobj().data());
342  }
343 
344  // Matrix-vector multiplication
346  {
347  multGPU(nhbd().data(), op.mat.vobj().data(), op.mat.eobj().data(), op.vec.vobj().data(), vobj().data());
348  }
349  };
350 
357  template <typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
358  class DMatrix
359  {
360  public:
361  // Type of neighborhood object
362  typedef DistNhbdT DNhbd;
363  // Type of distributed vector
365  // Type of distributed vector
367  // Type of a vertex
368  typedef typename DNhbd::Vertex Vertex;
369  // Type of an edge
370  typedef typename DNhbd::Edge Edge;
371 
372  private:
373  DNhbd &_nhbd;
374  DVertex &_vobj;
375  DEdge &_eobj;
376 
377  public:
378  // Constructor for matrix objects
380  _nhbd(vobj.nhbd()), _vobj(vobj), _eobj(eobj) {}
381 
382  ~DMatrix() {}
383 
384  // Return neighborhood object
385  DistNhbdT &nhbd() { return _nhbd; };
386 
387  // Return vertex object
388  DistVertex<DistNhbdT, MatrixT> &vobj() { return _vobj; };
389 
390  // Return edge object
391  DistEdge<DistNhbdT, MatrixT> &eobj() { return _eobj; };
392 
393  // Allocate storage for a matrix on GPU
394  void alloc()
395  {
396  vobj().alloc();
397  eobj().alloc();
398  }
399 
400  // Send matrix data to GPU
401  void write()
402  {
403  vobj().write();
404  eobj().write();
405  }
406 
407  // Copy matrix data from GPU
408  void read()
409  {
410  }
411 
412  // Matrix assigment
414  {
415  copyGPU(m.vobj().data(), vobj().data());
416  copyGPU(m.eobj().data(), eobj().data());
417  }
418 
419  // Matrix-scalar assignment
420  void operator=(ScalarT a)
421  {
422  fillGPU(a, vobj().data());
423  fillGPU(a, eobj().data());
424  }
425 
426  // Matrix-vector assignment (assigns to diagonal)
428  {
429  copyGPU(v.vobj().data(), vobj().data());
430  }
431 
432  // Matrix-scalar multiply
434  {
435  multGPU(op.mat.vobj().data(), op.a, vobj().data());
436  multGPU(op.mat.eobj().data(), op.a, eobj().data());
437  }
438 
439  // Matrix-matrix in place addition
441  {
442  addGPU(vobj().data(), mat.vobj().data(), vobj().data());
443  addGPU(eobj().data(), mat.eobj().data(), eobj().data());
444  }
445 
446  // Matrix-matrix in place subtraction
448  {
449  subGPU(vobj().data(), mat.vobj().data(), vobj().data());
450  subGPU(eobj().data(), mat.eobj().data(), eobj().data());
451  }
452 
453  // Matrix-scalar in place multiplication
454  void operator*=(ScalarT a)
455  {
456  multGPU(vobj().data(), a, vobj().data());
457  multGPU(eobj().data(), a, eobj().data());
458  }
459 
460  // Matrix-scalar in place division
461  void operator/=(ScalarT a)
462  {
463  multGPU(vobj().data(), ScalarT(1)/a, vobj().data());
464  multGPU(eobj().data(), ScalarT(1)/a, eobj().data());
465  }
466 
467  // Matrix-matrix addition
469  {
470  addGPU(op.mat1.vobj().data(), op.mat2.vobj().data(), vobj().data());
471  addGPU(op.mat1.vobj().data(), op.mat2.vobj().data(), eobj().data());
472  }
473 
474  // Matrix-matrix subtraction
476  {
477  subtractGPU(op.mat1.vobj().data(), op.mat2.vobj().data(), vobj().data());
478  subtractGPU(op.mat1.eobj().data(), op.mat2.eobj().data(), eobj().data());
479  }
480 
481  // Add to diagonal
482  double addToDiagonal(double a)
483  {
484  addToDiagGPU(a, vobj().data());
485  return a;
486  }
487  };
488 
489  template <typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
491  {
492  ScalarT r;
493  maxGPU(m.vobj().data(), r);
494  return r;
495  }
496 
497  template <typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
499  {
500  ScalarT r;
501  maxGPU(m.eobj().data(), r);
502  return r;
503  }
504 
505  template <typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
507  {
508  ScalarT rv, re;
509  maxGPU(m.vobj().data(), rv);
510  maxGPU(m.eobj().data(), re);
511  return max(rv, re);
512  }
513 
514  template <typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
516  {
517  ScalarT r;
518  minGPU(m.vobj().data(), r);
519  return r;
520  }
521 
522  template <typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
524  {
525  ScalarT r;
526  minGPU(m.eobj().data(), r);
527  return r;
528  }
529 
530  template <typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
532  {
533  ScalarT rv, re;
534  minVGPU(m.vobj().data(), rv);
535  minVGPU(m.eobj().data(), re);
536  return min(rv, re);
537  }
538 
539  template <typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
541  {
542  ScalarT r;
543  r = v * v;
544  return pow(r, 0.5);
545  }
546 
547  template <typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
549  {
550  ScalarT rv, re;
551  multGPU(m.vobj().data(), m.vobj().data(), rv);
552  multGPU(m.eobj().data(), m.eobj().data(), re);
553  return pow(rv + re, 0.5);
554  }
555 
556  template <typename DistNhbdT, typename MatrixT, typename VectorT, typename ScalarT>
558  {
559  m = 0;
560  jacobiPreCondGPU(m.nhbd().data(), m.vobj().data(), m.eobj().data(), a.vobj().data(), a.eobj().data());
561  }
562 }
563 
564 #endif
mgx::jacobiPreCond
void jacobiPreCond(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &m, DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &a)
Definition: DistMatrix.hpp:557
mgx::DVector::~DVector
~DVector()
Definition: DistMatrix.hpp:243
mgx::VVSubOp::vec2
DVector< DistNhbdT, MatrixT, VectorT, ScalarT > & vec2
Definition: DistMatrix.hpp:46
mgx::VSaxpyOp::VSaxpyOp
VSaxpyOp(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec1, DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec2, ScalarT p_a)
Definition: DistMatrix.hpp:71
mgx::operator-
const VVSubOp< DistNhbdT, MatrixT, VectorT, ScalarT > operator-(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec1, DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec2)
Definition: DistMatrix.hpp:149
mgx::maxDiagonal
double maxDiagonal(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &m)
Definition: DistMatrix.hpp:490
mgx::DMatrix::DNhbd
DistNhbdT DNhbd
Definition: DistMatrix.hpp:362
mgx::VSaxpyOp::vec2
DVector< DistNhbdT, MatrixT, VectorT, ScalarT > & vec2
Definition: DistMatrix.hpp:68
mgx::DMatrix::write
void write()
Definition: DistMatrix.hpp:401
mgx::maxGPU
int maxGPU(T *v, typename T::value_type::value_type &r)
Definition: DistMatrixCuda.hpp:357
DistNhbdT
mgx::minEntry
double minEntry(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &m)
Definition: DistMatrix.hpp:531
mgx::MSAddOp
Definition: DistMatrix.hpp:88
mgx::MVMultOp::vec
DVector< DistNhbdT, MatrixT, VectorT, ScalarT > & vec
Definition: DistMatrix.hpp:126
mgx::copyGPU
int mgx_EXPORT copyGPU(T1 *src, T2 *dst)
Definition: DistObjectCuda.hpp:21
mgx::minDiagonal
double minDiagonal(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &m)
Definition: DistMatrix.hpp:515
mgx::MSMultOp::a
ScalarT a
Definition: DistMatrix.hpp:81
mgx::MSMultOp
Definition: DistMatrix.hpp:78
mgx::DMatrix::operator-=
void operator-=(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &mat)
Definition: DistMatrix.hpp:447
mgx::DVector::operator=
void operator=(DVector &v)
Definition: DistMatrix.hpp:270
mgx::DMatrix::Vertex
DNhbd::Vertex Vertex
Definition: DistMatrix.hpp:368
mgx::DVector::operator=
void operator=(MVMultOp< DistNhbdT, MatrixT, VectorT, ScalarT > op)
Definition: DistMatrix.hpp:345
mgx::operator*
const VSMultOp< DistNhbdT, MatrixT, VectorT, ScalarT > operator*(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec, ScalarT p_a)
Definition: DistMatrix.hpp:159
mgx::MVMultOp
Definition: DistMatrix.hpp:123
mgx::DMatrix::~DMatrix
~DMatrix()
Definition: DistMatrix.hpp:382
mgx::addToDiagGPU
int addToDiagGPU(typename T::value_type::value_type a, T *r)
Definition: DistMatrixCuda.hpp:274
mgx::VVSubOp
Definition: DistMatrix.hpp:43
mgx::VVAddOp::VVAddOp
VVAddOp(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec1, DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec2)
Definition: DistMatrix.hpp:37
mgx::saxpyGPU
int saxpyGPU(T *v1, T *v2, typename T::value_type::value_type a, T *r)
Definition: DistMatrixCuda.hpp:312
mgx::VSaxpyOp::a
ScalarT a
Definition: DistMatrix.hpp:69
mgx::DMatrix::operator=
void operator=(DMatrix &m)
Definition: DistMatrix.hpp:413
mgx::DistEdge
Definition: DistObject.hpp:273
mgx::DVector::DVector
DVector(DistVertex< DistNhbdT, VectorT > &vobj)
Definition: DistMatrix.hpp:240
mgx::MMSubOp::MMSubOp
MMSubOp(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_mat1, DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_mat2)
Definition: DistMatrix.hpp:117
mgx::DMatrix::eobj
DistEdge< DistNhbdT, MatrixT > & eobj()
Definition: DistMatrix.hpp:391
mgx::DistVertex::read
void read()
Definition: DistObject.hpp:195
mgx::DMatrix::operator*=
void operator*=(ScalarT a)
Definition: DistMatrix.hpp:454
mgx::DMatrix::operator/=
void operator/=(ScalarT a)
Definition: DistMatrix.hpp:461
mgx::DVector::DNhbd
DistNhbdT DNhbd
Definition: DistMatrix.hpp:228
ThrustTypes.hpp
mgx::DVector::operator=
void operator=(VSMultOp< DistNhbdT, MatrixT, VectorT, ScalarT > op)
Definition: DistMatrix.hpp:288
mgx
Distributed matrix library.
Definition: Assert.hpp:26
mgx::DVector
Definition: DistMatrix.hpp:20
mgx::DMatrix::operator=
void operator=(ScalarT a)
Definition: DistMatrix.hpp:420
mgx::operator+
const VVAddOp< DistNhbdT, MatrixT, VectorT, ScalarT > operator+(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec1, DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec2)
Definition: DistMatrix.hpp:139
DistObject.hpp
mgx::MVMultOp::mat
DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > & mat
Definition: DistMatrix.hpp:125
mgx::VSMultOp::a
ScalarT a
Definition: DistMatrix.hpp:57
mgx::DMatrix::alloc
void alloc()
Definition: DistMatrix.hpp:394
mgx::minGPU
int minGPU(T *v, typename T::value_type::value_type &r)
Definition: DistMatrixCuda.hpp:338
mgx::DMatrix::nhbd
DistNhbdT & nhbd()
Definition: DistMatrix.hpp:385
mgx::DVector::operator=
void operator=(VVAddOp< DistNhbdT, MatrixT, VectorT, ScalarT > op)
Definition: DistMatrix.hpp:319
mgx::DVector::operator/=
void operator/=(ScalarT a)
Definition: DistMatrix.hpp:312
mgx::max
T CU_HOST_DEVICE max(const T a, const T b)
Definition: Util.hpp:34
mgx::DMatrix::DEdge
DistEdge< DistNhbdT, MatrixT > DEdge
Definition: DistMatrix.hpp:366
mgx::MSAddOp::a
ScalarT a
Definition: DistMatrix.hpp:91
mgx::VSaxpyOp::vec1
DVector< DistNhbdT, MatrixT, VectorT, ScalarT > & vec1
Definition: DistMatrix.hpp:67
mgx::DistVertex::write
void write()
Definition: DistObject.hpp:178
mgx::DMatrix
Definition: DistMatrix.hpp:21
mgx::DistVertex< DistNhbdT, VectorT >
mgx::VVSubOp::VVSubOp
VVSubOp(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec1, DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec2)
Definition: DistMatrix.hpp:48
mgx::DMatrix::operator=
void operator=(MMAddOp< DistNhbdT, MatrixT, VectorT, ScalarT > op)
Definition: DistMatrix.hpp:468
mgx::DMatrix::operator=
void operator=(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &v)
Definition: DistMatrix.hpp:427
mgx::MMAddOp::mat1
DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > & mat1
Definition: DistMatrix.hpp:101
mgx::DMatrix::operator=
void operator=(MSMultOp< DistNhbdT, MatrixT, VectorT, ScalarT > op)
Definition: DistMatrix.hpp:433
mgx::multGPU
int multGPU(T *v, typename T::value_type::value_type a, T *r)
Definition: DistMatrixCuda.hpp:218
mgx::DMatrix::DMatrix
DMatrix(DVertex &vobj, DEdge &eobj)
Definition: DistMatrix.hpp:379
mgx::jacobiPreCondGPU
int jacobiPreCondGPU(DeviceVu *nb, T *mv, T *me, T *av, T *ae)
Definition: DistMatrixCuda.hpp:376
mgx::fillGPU
int fillGPU(typename T::value_type::value_type a, T *r)
Definition: DistMatrixCuda.hpp:324
mgx::MMSubOp
Definition: DistMatrix.hpp:112
mgx::maxEntry
double maxEntry(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &m)
Definition: DistMatrix.hpp:506
mgx::VSMultOp::vec
DVector< DistNhbdT, MatrixT, VectorT, ScalarT > & vec
Definition: DistMatrix.hpp:56
mgx::DVector::DVertex
DistVertex< DistNhbdT, VectorT > DVertex
Definition: DistMatrix.hpp:230
mgx::MSAddOp::MSAddOp
MSAddOp(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &p_mat, double p_a)
Definition: DistMatrix.hpp:93
mgx::minOffDiagonal
double minOffDiagonal(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &m)
Definition: DistMatrix.hpp:523
mgx::DMatrix::operator=
void operator=(MMSubOp< DistNhbdT, MatrixT, VectorT, ScalarT > op)
Definition: DistMatrix.hpp:475
mgx::DMatrix::vobj
DistVertex< DistNhbdT, MatrixT > & vobj()
Definition: DistMatrix.hpp:388
mgx::MMAddOp
Definition: DistMatrix.hpp:99
mgx::DMatrix::Edge
DNhbd::Edge Edge
Definition: DistMatrix.hpp:370
mgx::VVAddOp
Definition: DistMatrix.hpp:32
mgx::DVector::read
void read()
Definition: DistMatrix.hpp:264
mgx::DistVertex::alloc
void alloc()
Definition: DistObject.hpp:164
mgx::DVector::operator=
void operator=(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &m)
Definition: DistMatrix.hpp:282
mgx::DVector::operator=
void operator=(ScalarT a)
Definition: DistMatrix.hpp:276
mgx::MMAddOp::MMAddOp
MMAddOp(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_mat1, DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_mat2)
Definition: DistMatrix.hpp:104
mgx::Vector
Namespace containing all the utility classes.
Definition: Vector.hpp:48
mgx::MSAddOp::mat
DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > & mat
Definition: DistMatrix.hpp:90
mgx::norm
ScalarT norm(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &v)
Definition: DistMatrix.hpp:540
mgx::VVSubOp::vec1
DVector< DistNhbdT, MatrixT, VectorT, ScalarT > & vec1
Definition: DistMatrix.hpp:45
mgx::min
CU_HOST_DEVICE T min(const T a, const T b)
Definition: Util.hpp:26
mgx::DVector::operator*
const ScalarT operator*(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &vec)
Definition: DistMatrix.hpp:331
mgx::DVector::vobj
DistVertex< DistNhbdT, VectorT > & vobj()
Definition: DistMatrix.hpp:249
DistMatrixProto.hpp
mgx::VSaxpyOp
Definition: DistMatrix.hpp:65
mgx::DVector::write
void write()
Definition: DistMatrix.hpp:258
mgx::VSMultOp::VSMultOp
VSMultOp(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec, ScalarT p_a)
Definition: DistMatrix.hpp:59
mgx::MSMultOp::mat
DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > & mat
Definition: DistMatrix.hpp:80
mgx::DVector::nhbd
DistNhbdT & nhbd()
Definition: DistMatrix.hpp:246
mgx::VVAddOp::vec2
DVector< DistNhbdT, MatrixT, VectorT, ScalarT > & vec2
Definition: DistMatrix.hpp:35
mgx::DVector::Vertex
DNhbd::Vertex Vertex
Definition: DistMatrix.hpp:232
mgx::addGPU
int addGPU(T *v1, T *v2, T *r)
Definition: DistMatrixCuda.hpp:288
mgx::DVector::operator=
void operator=(VVSubOp< DistNhbdT, MatrixT, VectorT, ScalarT > op)
Definition: DistMatrix.hpp:325
mgx::DMatrix::DVertex
DistVertex< DistNhbdT, MatrixT > DVertex
Definition: DistMatrix.hpp:364
mgx::Matrix
Definition: Matrix.hpp:39
mgx::DVector::operator=
void operator=(VSaxpyOp< DistNhbdT, MatrixT, VectorT, ScalarT > op)
Definition: DistMatrix.hpp:339
mgx::DVector::operator-=
void operator-=(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &vec)
Definition: DistMatrix.hpp:300
mgx::VVAddOp::vec1
DVector< DistNhbdT, MatrixT, VectorT, ScalarT > & vec1
Definition: DistMatrix.hpp:34
mgx::MMAddOp::mat2
DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > & mat2
Definition: DistMatrix.hpp:102
mgx::DMatrix::operator+=
void operator+=(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &mat)
Definition: DistMatrix.hpp:440
mgx::DVector::operator+=
void operator+=(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &vec)
Definition: DistMatrix.hpp:294
mgx::maxOffDiagonal
double maxOffDiagonal(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &m)
Definition: DistMatrix.hpp:498
mgx::VSMultOp
Definition: DistMatrix.hpp:54
mgx::MVMultOp::MVMultOp
MVMultOp(DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > &p_mat, DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_vec)
Definition: DistMatrix.hpp:128
mgx::MMSubOp::mat2
DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > & mat2
Definition: DistMatrix.hpp:115
mgx::MMSubOp::mat1
DMatrix< DistNhbdT, MatrixT, VectorT, ScalarT > & mat1
Definition: DistMatrix.hpp:114
mgx::DVector::alloc
void alloc()
Definition: DistMatrix.hpp:252
mgx::subtractGPU
int subtractGPU(T *v1, T *v2, T *r)
Definition: DistMatrixCuda.hpp:300
mgx::MSMultOp::MSMultOp
MSMultOp(DVector< DistNhbdT, MatrixT, VectorT, ScalarT > &p_mat, ScalarT p_a)
Definition: DistMatrix.hpp:82
mgx::DMatrix::read
void read()
Definition: DistMatrix.hpp:408
mgx::DVector::operator*=
void operator*=(ScalarT a)
Definition: DistMatrix.hpp:306
mgx::DMatrix::addToDiagonal
double addToDiagonal(double a)
Definition: DistMatrix.hpp:482