COMBINATORIAL_BLAS  1.6
SpDCCols.h
Go to the documentation of this file.
1 /****************************************************************/
2 /* Parallel Combinatorial BLAS Library (for Graph Computations) */
3 /* version 1.6 -------------------------------------------------*/
4 /* date: 6/15/2017 ---------------------------------------------*/
5 /* authors: Ariful Azad, Aydin Buluc --------------------------*/
6 /****************************************************************/
7 /*
8  Copyright (c) 2010-2017, The Regents of the University of California
9 
10  Permission is hereby granted, free of charge, to any person obtaining a copy
11  of this software and associated documentation files (the "Software"), to deal
12  in the Software without restriction, including without limitation the rights
13  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14  copies of the Software, and to permit persons to whom the Software is
15  furnished to do so, subject to the following conditions:
16 
17  The above copyright notice and this permission notice shall be included in
18  all copies or substantial portions of the Software.
19 
20  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
26  THE SOFTWARE.
27  */
28 
29 
30 #ifndef _SP_DCCOLS_H
31 #define _SP_DCCOLS_H
32 
33 #include <iostream>
34 #include <fstream>
35 #include <cmath>
36 #include "SpMat.h" // Best to include the base class first
37 #include "SpHelper.h"
38 #include "StackEntry.h"
39 #include "dcsc.h"
40 #include "Isect.h"
41 #include "Semirings.h"
42 #include "MemoryPool.h"
43 #include "LocArr.h"
44 #include "Friends.h"
45 #include "CombBLAS.h"
46 #include "FullyDist.h"
47 
48 namespace combblas {
49 
50 template <class IT, class NT>
51 class SpDCCols: public SpMat<IT, NT, SpDCCols<IT, NT> >
52 {
53 public:
54  typedef IT LocalIT;
55  typedef NT LocalNT;
56 
57  // Constructors :
58  SpDCCols ();
59  SpDCCols (IT size, IT nRow, IT nCol, IT nzc);
60  SpDCCols (const SpTuples<IT,NT> & rhs, bool transpose);
61  SpDCCols (IT nRow, IT nCol, IT nnz1, const std::tuple<IT, IT, NT> * rhs, bool transpose);
62 
63  SpDCCols (const SpDCCols<IT,NT> & rhs); // Actual copy constructor
64  ~SpDCCols();
65 
66  template <typename NNT> operator SpDCCols<IT,NNT> () const;
67  template <typename NIT, typename NNT> operator SpDCCols<NIT,NNT> () const;
68 
69  // Member Functions and Operators:
72  SpDCCols<IT,NT> operator() (IT ri, IT ci) const;
73  SpDCCols<IT,NT> operator() (const std::vector<IT> & ri, const std::vector<IT> & ci) const;
74  bool operator== (const SpDCCols<IT, NT> & rhs) const
75  {
76  if(rhs.nnz == 0 && nnz == 0)
77  return true;
78  if(nnz != rhs.nnz || m != rhs.m || n != rhs.n)
79  return false;
80  return ((*dcsc) == (*(rhs.dcsc)));
81  }
82 
83 
84  class SpColIter
85  {
86  public:
87  class NzIter
88  {
89  public:
90  NzIter(IT * ir = NULL, NT * num = NULL) : rid(ir), val(num) {}
91 
92  bool operator==(const NzIter & other)
93  {
94  return(rid == other.rid); // compare pointers
95  }
96  bool operator!=(const NzIter & other)
97  {
98  return(rid != other.rid);
99  }
100  bool operator<(const NzIter & other)
101  {
102  return(rid < other.rid);
103  }
105  {
106  rid+=inc;
107  val+=inc;
108  return(*this);
109  }
111  {
112  rid-=inc;
113  val-=inc;
114  return(*this);
115  }
116  NzIter & operator++() // prefix operator
117  {
118  ++rid;
119  ++val;
120  return(*this);
121  }
122  NzIter operator++(int) // postfix operator
123  {
124  NzIter tmp(*this);
125  ++(*this);
126  return(tmp);
127  }
128  IT rowid() const
129  {
130  return (*rid);
131  }
132  NT & value()
133  {
134  return (*val);
135  }
136  private:
137  IT * rid;
138  NT * val;
139 
140  };
141 
142  SpColIter(IT * cp = NULL, IT * jc = NULL) : cptr(cp), cid(jc) {}
143  bool operator==(const SpColIter& other)
144  {
145  return(cptr == other.cptr); // compare pointers
146  }
147  bool operator!=(const SpColIter& other)
148  {
149  return(cptr != other.cptr);
150  }
151 
152  SpColIter& operator++() // prefix operator
153  {
154  ++cptr;
155  ++cid;
156  return(*this);
157  }
158  SpColIter operator++(int) // postfix operator (common)
159  {
160  SpColIter tmp(*this);
161  ++(*this);
162  return(tmp);
163  }
165  {
166  cptr+=inc;
167  cid+=inc;
168  return(*this);
169  }
171  {
172  cptr-=inc;
173  cid-=inc;
174  return(*this);
175  }
176  IT colid() const
177  {
178  return (*cid);
179  }
180  IT colptr() const
181  {
182  return (*cptr);
183  }
184  IT colptrnext() const
185  {
186  return (*(cptr+1));
187  }
188  IT nnz() const
189  {
190  return (colptrnext() - colptr());
191  }
192  private:
193  IT * cptr;
194  IT * cid;
195  };
196 
198  {
199  if( nnz > 0 )
200  return SpColIter(dcsc->cp, dcsc->jc);
201  else
202  return SpColIter(NULL, NULL);
203  }
204  SpColIter begcol(int i) // multithreaded version
205  {
206  if( dcscarr[i] )
207  return SpColIter(dcscarr[i]->cp, dcscarr[i]->jc);
208  else
209  return SpColIter(NULL, NULL);
210  }
211 
213  {
214  if( nnz > 0 )
215  return SpColIter(dcsc->cp + dcsc->nzc, NULL);
216  else
217  return SpColIter(NULL, NULL);
218  }
219 
220  SpColIter endcol(int i) //multithreaded version
221  {
222  if( dcscarr[i] )
223  return SpColIter(dcscarr[i]->cp + dcscarr[i]->nzc, NULL);
224  else
225  return SpColIter(NULL, NULL);
226  }
227 
228  typename SpColIter::NzIter begnz(const SpColIter & ccol)
229  {
230  return typename SpColIter::NzIter( dcsc->ir + ccol.colptr(), dcsc->numx + ccol.colptr() );
231  }
232 
233  typename SpColIter::NzIter endnz(const SpColIter & ccol)
234  {
235  return typename SpColIter::NzIter( dcsc->ir + ccol.colptrnext(), NULL );
236  }
237 
238  typename SpColIter::NzIter begnz(const SpColIter & ccol, int i)
239  {
240  return typename SpColIter::NzIter( dcscarr[i]->ir + ccol.colptr(), dcscarr[i]->numx + ccol.colptr() );
241  }
242 
243  typename SpColIter::NzIter endnz(const SpColIter & ccol, int i)
244  {
245  return typename SpColIter::NzIter( dcscarr[i]->ir + ccol.colptrnext(), NULL );
246  }
247 
248  template <typename _UnaryOperation>
249  void Apply(_UnaryOperation __unary_op)
250  {
251  if(nnz > 0)
252  dcsc->Apply(__unary_op);
253  }
254 
255  template <typename _UnaryOperation, typename GlobalIT>
256  SpDCCols<IT,NT>* PruneI(_UnaryOperation __unary_op, bool inPlace, GlobalIT rowOffset, GlobalIT colOffset);
257  template <typename _UnaryOperation>
258  SpDCCols<IT,NT>* Prune(_UnaryOperation __unary_op, bool inPlace);
259  template <typename _BinaryOperation>
260  SpDCCols<IT,NT>* PruneColumn(NT* pvals, _BinaryOperation __binary_op, bool inPlace);
261  template <typename _BinaryOperation>
262  SpDCCols<IT,NT>* PruneColumn(IT* pinds, NT* pvals, _BinaryOperation __binary_op, bool inPlace);
263 
264  template <typename _BinaryOperation>
265  void UpdateDense(NT ** array, _BinaryOperation __binary_op) const
266  {
267  if(nnz > 0 && dcsc != NULL)
268  dcsc->UpdateDense(array, __binary_op);
269  }
270 
271  void EWiseScale(NT ** scaler, IT m_scaler, IT n_scaler);
272  void EWiseMult (const SpDCCols<IT,NT> & rhs, bool exclude);
273 
274  void Transpose();
277 
278  void RowSplit(int numsplits)
279  {
280  BooleanRowSplit(*this, numsplits); // only works with boolean arrays
281  }
282 
283  void ColSplit(int parts, std::vector< SpDCCols<IT,NT> > & matrices);
284  void ColConcatenate(std::vector< SpDCCols<IT,NT> > & matrices);
285 
286  void Split(SpDCCols<IT,NT> & partA, SpDCCols<IT,NT> & partB);
287  void Merge(SpDCCols<IT,NT> & partA, SpDCCols<IT,NT> & partB);
288 
289  void CreateImpl(const std::vector<IT> & essentials);
290  void CreateImpl(IT size, IT nRow, IT nCol, std::tuple<IT, IT, NT> * mytuples);
291  void CreateImpl(IT * _cp, IT * _jc, IT * _ir, NT * _numx, IT _nz, IT _nzc, IT _m, IT _n);
292 
293 
294  Arr<IT,NT> GetArrays() const;
295  std::vector<IT> GetEssentials() const;
296  const static IT esscount;
297 
298  bool isZero() const { return (nnz == 0); }
299  IT getnrow() const { return m; }
300  IT getncol() const { return n; }
301  IT getnnz() const { return nnz; }
302  IT getnzc() const { return (nnz == 0) ? 0: dcsc->nzc; }
303  int getnsplit() const { return splits; }
304 
305  std::ofstream& put(std::ofstream & outfile) const;
306  std::ifstream& get(std::ifstream & infile);
307  void PrintInfo() const;
308  void PrintInfo(std::ofstream & out) const;
309 
310  template <typename SR>
311  int PlusEq_AtXBt(const SpDCCols<IT,NT> & A, const SpDCCols<IT,NT> & B);
312 
313  template <typename SR>
314  int PlusEq_AtXBn(const SpDCCols<IT,NT> & A, const SpDCCols<IT,NT> & B);
315 
316  template <typename SR>
317  int PlusEq_AnXBt(const SpDCCols<IT,NT> & A, const SpDCCols<IT,NT> & B);
318 
319  template <typename SR>
320  int PlusEq_AnXBn(const SpDCCols<IT,NT> & A, const SpDCCols<IT,NT> & B);
321 
322  Dcsc<IT, NT> * GetDCSC() const // only for single threaded matrices
323  {
324  return dcsc;
325  }
326 
327  Dcsc<IT, NT> * GetDCSC(int i) const // only for split (multithreaded) matrices
328  {
329  return dcscarr[i];
330  }
331 
332  auto GetInternal() const { return GetDCSC(); }
333  auto GetInternal(int i) const { return GetDCSC(i); }
334 
335 
336 private:
337  void CopyDcsc(Dcsc<IT,NT> * source);
338  SpDCCols<IT,NT> ColIndex(const std::vector<IT> & ci) const;
339 
340  template <typename SR, typename NTR>
342 
343  template <typename SR, typename NTR>
345 
346  SpDCCols (IT size, IT nRow, IT nCol, const std::vector<IT> & indices, bool isRow); // Constructor for indexing
347  SpDCCols (IT nRow, IT nCol, Dcsc<IT,NT> * mydcsc); // Constructor for multiplication
348 
349  // Anonymous union
350  union {
353  };
354 
355  IT m;
356  IT n;
357  IT nnz;
358 
359  int splits; // for multithreading
360 
361  template <class IU, class NU>
362  friend class SpDCCols; // Let other template instantiations (of the same class) access private members
363 
364  template <class IU, class NU>
365  friend class SpTuples;
366 
367  // AL: removed this because it appears illegal and causes this compiler warning:
368  // warning: dependent nested name specifier 'SpDCCols<IU, NU>::' for friend class declaration is not supported; turning off access control for 'SpDCCols'
369  //template <class IU, class NU>
370  //friend class SpDCCols<IU, NU>::SpColIter;
371 
372  template<typename IU>
373  friend void BooleanRowSplit(SpDCCols<IU, bool> & A, int numsplits);
374 
375  template<typename IU, typename NU1, typename NU2>
377 
378  template<typename N_promote, typename IU, typename NU1, typename NU2, typename _BinaryOperation>
379  friend SpDCCols<IU, N_promote > EWiseApply (const SpDCCols<IU,NU1> & A, const SpDCCols<IU,NU2> & B, _BinaryOperation __binary_op, bool notB, const NU2& defaultBVal);
380 
381  template <typename RETT, typename IU, typename NU1, typename NU2, typename _BinaryOperation, typename _BinaryPredicate>
382  friend SpDCCols<IU,RETT> EWiseApply (const SpDCCols<IU,NU1> & A, const SpDCCols<IU,NU2> & B, _BinaryOperation __binary_op, _BinaryPredicate do_op, bool allowANulls, bool allowBNulls, const NU1& ANullVal, const NU2& BNullVal, const bool allowIntersect);
383 
384  template<class SR, class NUO, class IU, class NU1, class NU2>
386  (const SpDCCols<IU, NU1> & A, const SpDCCols<IU, NU2> & B, bool clearA, bool clearB);
387 
388  template<class SR, class NUO, class IU, class NU1, class NU2>
390  (const SpDCCols<IU, NU1> & A, const SpDCCols<IU, NU2> & B, bool clearA, bool clearB);
391 
392  template<class SR, class NUO, class IU, class NU1, class NU2>
394  (const SpDCCols<IU, NU1> & A, const SpDCCols<IU, NU2> & B, bool clearA, bool clearB);
395 
396  template<class SR, class NUO, class IU, class NU1, class NU2>
398  (const SpDCCols<IU, NU1> & A, const SpDCCols<IU, NU2> & B, bool clearA, bool clearB);
399 
400  template <typename SR, typename IU, typename NU, typename RHS, typename LHS>
401  friend void dcsc_gespmv (const SpDCCols<IU, NU> & A, const RHS * x, LHS * y);
402 
403  template <typename SR, typename IU, typename NU, typename RHS, typename LHS>
404  friend void dcsc_gespmv_threaded (const SpDCCols<IU, NU> & A, const RHS * x, LHS * y);
405 
406  template <typename SR, typename IU, typename NUM, typename DER, typename IVT, typename OVT>
407  friend int generic_gespmv_threaded (const SpMat<IU,NUM,DER> & A, const int32_t * indx, const IVT * numx, int32_t nnzx,
408  int32_t * & sendindbuf, OVT * & sendnumbuf, int * & sdispls, int p_c);
409 };
410 
411 // At this point, complete type of of SpDCCols is known, safe to declare these specialization (but macros won't work as they are preprocessed)
412 // General case #1: When both NT is the same
413 template <class IT, class NT> struct promote_trait< SpDCCols<IT,NT> , SpDCCols<IT,NT> >
414  {
416  };
417 // General case #2: First is boolean the second is anything except boolean (to prevent ambiguity)
418 template <class IT, class NT> struct promote_trait< SpDCCols<IT,bool> , SpDCCols<IT,NT>, typename combblas::disable_if< combblas::is_boolean<NT>::value >::type >
419  {
421  };
422 // General case #3: Second is boolean the first is anything except boolean (to prevent ambiguity)
423 template <class IT, class NT> struct promote_trait< SpDCCols<IT,NT> , SpDCCols<IT,bool>, typename combblas::disable_if< combblas::is_boolean<NT>::value >::type >
424  {
426  };
427 template <class IT> struct promote_trait< SpDCCols<IT,int> , SpDCCols<IT,float> >
428  {
430  };
431 
432 template <class IT> struct promote_trait< SpDCCols<IT,float> , SpDCCols<IT,int> >
433  {
435  };
436 template <class IT> struct promote_trait< SpDCCols<IT,int> , SpDCCols<IT,double> >
437  {
439  };
440 template <class IT> struct promote_trait< SpDCCols<IT,double> , SpDCCols<IT,int> >
441  {
443  };
444 
445 
446 // Below are necessary constructs to be able to define a SpMat<NT,IT> where
447 // all we know is DER (say SpDCCols<int, double>) and NT,IT
448 // in other words, we infer the templated SpDCCols<> type
449 // This is not a type conversion from an existing object,
450 // but a type inference for the newly created object
451 // NIT: New IT, NNT: New NT
452 template <class DER, class NIT, class NNT>
454 {
455  // none
456 };
457 
458 // Capture everything of the form SpDCCols<OIT, ONT>
459 // it may come as a surprise that the partial specializations can
460 // involve more template parameters than the primary template
461 template <class NIT, class NNT, class OIT, class ONT>
462 struct create_trait< SpDCCols<OIT, ONT> , NIT, NNT >
463 {
465 };
466 
467 }
468 
469 #include "SpDCCols.cpp"
470 
471 #endif
combblas::SpDCCols::GetInternal
auto GetInternal() const
Definition: SpDCCols.h:332
combblas::SpMat
Definition: SpMat.h:55
combblas::SpDCCols::Tuples_AtXBn
friend SpTuples< IU, NUO > * Tuples_AtXBn(const SpDCCols< IU, NU1 > &A, const SpDCCols< IU, NU2 > &B, bool clearA, bool clearB)
Definition: Friends.h:591
combblas::SpDCCols::BooleanRowSplit
friend void BooleanRowSplit(SpDCCols< IU, bool > &A, int numsplits)
Definition: Friends.h:439
B
double B
Definition: options.h:15
combblas::SpDCCols::PrintInfo
void PrintInfo() const
Definition: SpDCCols.cpp:1235
combblas::SpDCCols::EWiseApply
friend SpDCCols< IU, N_promote > EWiseApply(const SpDCCols< IU, NU1 > &A, const SpDCCols< IU, NU2 > &B, _BinaryOperation __binary_op, bool notB, const NU2 &defaultBVal)
Definition: Friends.h:960
size
int size
Definition: common.h:20
combblas::SpDCCols::Tuples_AnXBn
friend SpTuples< IU, NUO > * Tuples_AnXBn(const SpDCCols< IU, NU1 > &A, const SpDCCols< IU, NU2 > &B, bool clearA, bool clearB)
Definition: Friends.h:554
combblas::SpDCCols::Tuples_AnXBt
friend SpTuples< IU, NUO > * Tuples_AnXBt(const SpDCCols< IU, NU1 > &A, const SpDCCols< IU, NU2 > &B, bool clearA, bool clearB)
Definition: Friends.h:511
combblas::SpDCCols::Apply
void Apply(_UnaryOperation __unary_op)
Definition: SpDCCols.h:249
combblas
Definition: CCGrid.h:4
combblas::SpDCCols::SpColIter::NzIter::operator+
NzIter operator+(IT inc)
Definition: SpDCCols.h:104
combblas::SpDCCols::endnz
SpColIter::NzIter endnz(const SpColIter &ccol, int i)
Definition: SpDCCols.h:243
combblas::SpDCCols::operator()
SpDCCols< IT, NT > operator()(IT ri, IT ci) const
Definition: SpDCCols.cpp:1115
SpMat.h
combblas::create_trait
Definition: SpDCCols.h:453
combblas::disable_if
Definition: myenableif.h:9
combblas::promote_trait< SpDCCols< IT, int >, SpDCCols< IT, double > >::T_promote
SpDCCols< IT, double > T_promote
Definition: SpDCCols.h:438
combblas::SpDCCols::SpColIter::operator==
bool operator==(const SpColIter &other)
Definition: SpDCCols.h:143
combblas::create_trait< SpDCCols< OIT, ONT >, NIT, NNT >::T_inferred
SpDCCols< NIT, NNT > T_inferred
Definition: SpDCCols.h:464
combblas::SpDCCols::Merge
void Merge(SpDCCols< IT, NT > &partA, SpDCCols< IT, NT > &partB)
Definition: SpDCCols.cpp:990
combblas::SpDCCols::GetEssentials
std::vector< IT > GetEssentials() const
Definition: SpDCCols.cpp:748
combblas::Dcsc
Definition: dcsc.h:47
combblas::SpDCCols::endnz
SpColIter::NzIter endnz(const SpColIter &ccol)
Definition: SpDCCols.h:233
combblas::SpDCCols::LocalNT
NT LocalNT
Definition: SpDCCols.h:55
combblas::SpDCCols::SpColIter::SpColIter
SpColIter(IT *cp=NULL, IT *jc=NULL)
Definition: SpDCCols.h:142
combblas::promote_trait< SpDCCols< IT, NT >, SpDCCols< IT, bool >, typename combblas::disable_if< combblas::is_boolean< NT >::value >::type >::T_promote
SpDCCols< IT, NT > T_promote
Definition: SpDCCols.h:425
combblas::SpDCCols::endcol
SpColIter endcol()
Definition: SpDCCols.h:212
combblas::SpDCCols::esscount
const static IT esscount
Definition: SpDCCols.h:296
combblas::SpDCCols::PruneColumn
SpDCCols< IT, NT > * PruneColumn(NT *pvals, _BinaryOperation __binary_op, bool inPlace)
Definition: SpDCCols.cpp:527
combblas::SpDCCols::TransposeConstPtr
SpDCCols< IT, NT > * TransposeConstPtr() const
Definition: SpDCCols.cpp:852
combblas::SpDCCols::begcol
SpColIter begcol(int i)
Definition: SpDCCols.h:204
combblas::SpDCCols::LocalIT
IT LocalIT
Definition: SpDCCols.h:54
combblas::promote_trait< SpDCCols< IT, int >, SpDCCols< IT, float > >::T_promote
SpDCCols< IT, float > T_promote
Definition: SpDCCols.h:429
combblas::SpDCCols::operator==
bool operator==(const SpDCCols< IT, NT > &rhs) const
Definition: SpDCCols.h:74
combblas::SpDCCols::SpColIter::nnz
IT nnz() const
Definition: SpDCCols.h:188
combblas::SpDCCols::endcol
SpColIter endcol(int i)
Definition: SpDCCols.h:220
Semirings.h
combblas::SpDCCols::SpColIter::NzIter::operator==
bool operator==(const NzIter &other)
Definition: SpDCCols.h:92
combblas::SpDCCols::EWiseMult
void EWiseMult(const SpDCCols< IT, NT > &rhs, bool exclude)
Definition: SpDCCols.cpp:623
combblas::SpDCCols::SpColIter::colptr
IT colptr() const
Definition: SpDCCols.h:180
combblas::SpDCCols::SpColIter::colptrnext
IT colptrnext() const
Definition: SpDCCols.h:184
combblas::SpDCCols::SpColIter::operator!=
bool operator!=(const SpColIter &other)
Definition: SpDCCols.h:147
combblas::promote_trait< SpDCCols< IT, bool >, SpDCCols< IT, NT >, typename combblas::disable_if< combblas::is_boolean< NT >::value >::type >::T_promote
SpDCCols< IT, NT > T_promote
Definition: SpDCCols.h:420
combblas::Arr
Definition: LocArr.h:46
combblas::SpDCCols::begnz
SpColIter::NzIter begnz(const SpColIter &ccol, int i)
Definition: SpDCCols.h:238
combblas::SpDCCols::dcsc_gespmv_threaded
friend void dcsc_gespmv_threaded(const SpDCCols< IU, NU > &A, const RHS *x, LHS *y)
SpMV with dense vector (multithreaded version)
Definition: Friends.h:82
combblas::SpDCCols::SpColIter::operator++
SpColIter operator++(int)
Definition: SpDCCols.h:158
combblas::SpDCCols::getnrow
IT getnrow() const
Definition: SpDCCols.h:299
combblas::SpDCCols::getncol
IT getncol() const
Definition: SpDCCols.h:300
combblas::SpDCCols::PlusEq_AnXBt
int PlusEq_AnXBt(const SpDCCols< IT, NT > &A, const SpDCCols< IT, NT > &B)
Definition: SpDCCols.cpp:1027
combblas::SpDCCols::SpColIter
Iterate over (sparse) columns of the sparse matrix.
Definition: SpDCCols.h:84
combblas::SpDCCols::getnnz
IT getnnz() const
Definition: SpDCCols.h:301
combblas::SpDCCols::~SpDCCols
~SpDCCols()
Definition: SpDCCols.cpp:65
combblas::SpDCCols::EWiseScale
void EWiseScale(NT **scaler, IT m_scaler, IT n_scaler)
Definition: SpDCCols.cpp:663
LocArr.h
combblas::SpDCCols::dcscarr
Dcsc< IT, NT > ** dcscarr
Definition: SpDCCols.h:352
FullyDist.h
combblas::SpDCCols::PlusEq_AtXBt
int PlusEq_AtXBt(const SpDCCols< IT, NT > &A, const SpDCCols< IT, NT > &B)
Definition: SpDCCols.cpp:1107
SpDCCols.cpp
combblas::promote_trait< SpDCCols< IT, NT >, SpDCCols< IT, NT > >::T_promote
SpDCCols< IT, NT > T_promote
Definition: SpDCCols.h:415
MemoryPool.h
A
double A
combblas::SpDCCols::GetDCSC
Dcsc< IT, NT > * GetDCSC(int i) const
Definition: SpDCCols.h:327
combblas::SpDCCols::put
std::ofstream & put(std::ofstream &outfile) const
Definition: SpDCCols.cpp:1181
combblas::SpDCCols::begnz
SpColIter::NzIter begnz(const SpColIter &ccol)
Definition: SpDCCols.h:228
combblas::SpDCCols::begcol
SpColIter begcol()
Definition: SpDCCols.h:197
combblas::SpDCCols::generic_gespmv_threaded
friend int generic_gespmv_threaded(const SpMat< IU, NUM, DER > &A, const int32_t *indx, const IVT *numx, int32_t nnzx, int32_t *&sendindbuf, OVT *&sendnumbuf, int *&sdispls, int p_c)
StackEntry.h
combblas::SpDCCols::SpColIter::NzIter::operator<
bool operator<(const NzIter &other)
Definition: SpDCCols.h:100
combblas::SpDCCols::SpColIter::colid
IT colid() const
< Return the "local" colid of the current column.
Definition: SpDCCols.h:176
combblas::SpDCCols::getnzc
IT getnzc() const
Definition: SpDCCols.h:302
combblas::SpDCCols::GetArrays
Arr< IT, NT > GetArrays() const
Definition: SpDCCols.cpp:787
combblas::SpDCCols::SpDCCols
friend class SpDCCols
Definition: SpDCCols.h:362
combblas::SpDCCols::SpColIter::NzIter::operator-
NzIter operator-(IT inc)
Definition: SpDCCols.h:110
combblas::SpDCCols::TransposeConst
SpDCCols< IT, NT > TransposeConst() const
Const version, doesn't touch the existing object.
Definition: SpDCCols.cpp:838
combblas::SpDCCols::PruneI
SpDCCols< IT, NT > * PruneI(_UnaryOperation __unary_op, bool inPlace, GlobalIT rowOffset, GlobalIT colOffset)
Definition: SpDCCols.cpp:431
combblas::SpTuples
Definition: Friends.h:48
combblas::SpDCCols::Split
void Split(SpDCCols< IT, NT > &partA, SpDCCols< IT, NT > &partB)
Definition: SpDCCols.cpp:867
Isect.h
combblas::SpDCCols::SpColIter::NzIter::rowid
IT rowid() const
< Return the "local" rowid of the current nonzero entry.
Definition: SpDCCols.h:128
combblas::SpDCCols::Tuples_AtXBt
friend SpTuples< IU, NUO > * Tuples_AtXBt(const SpDCCols< IU, NU1 > &A, const SpDCCols< IU, NU2 > &B, bool clearA, bool clearB)
Definition: Friends.h:578
combblas::SpDCCols::SpColIter::NzIter::operator!=
bool operator!=(const NzIter &other)
Definition: SpDCCols.h:96
combblas::promote_trait
Definition: promote.h:38
CombBLAS.h
combblas::SpDCCols::SpColIter::NzIter::operator++
NzIter operator++(int)
Definition: SpDCCols.h:122
combblas::SpDCCols::Prune
SpDCCols< IT, NT > * Prune(_UnaryOperation __unary_op, bool inPlace)
Definition: SpDCCols.cpp:478
combblas::SpDCCols::isZero
bool isZero() const
Definition: SpDCCols.h:298
dcsc.h
combblas::SpDCCols::SpColIter::operator++
SpColIter & operator++()
Definition: SpDCCols.h:152
combblas::SpDCCols::SpColIter::NzIter::NzIter
NzIter(IT *ir=NULL, NT *num=NULL)
Definition: SpDCCols.h:90
combblas::SpDCCols::SpColIter::operator-
SpColIter operator-(IT inc)
Definition: SpDCCols.h:170
combblas::SpDCCols::SpColIter::NzIter
Iterate over the nonzeros of the sparse column.
Definition: SpDCCols.h:87
combblas::SpDCCols::PlusEq_AtXBn
int PlusEq_AtXBn(const SpDCCols< IT, NT > &A, const SpDCCols< IT, NT > &B)
Definition: SpDCCols.cpp:1099
combblas::SpDCCols::SpColIter::NzIter::value
NT & value()
Definition: SpDCCols.h:132
combblas::SpDCCols::operator+=
SpDCCols< IT, NT > & operator+=(const SpDCCols< IT, NT > &rhs)
Definition: SpDCCols.cpp:394
combblas::SpDCCols::SpColIter::operator+
SpColIter operator+(IT inc)
Definition: SpDCCols.h:164
Friends.h
combblas::SpDCCols::getnsplit
int getnsplit() const
Definition: SpDCCols.h:303
combblas::SpDCCols::UpdateDense
void UpdateDense(NT **array, _BinaryOperation __binary_op) const
Definition: SpDCCols.h:265
combblas::SpDCCols::SpColIter::NzIter::operator++
NzIter & operator++()
Definition: SpDCCols.h:116
SpHelper.h
combblas::SpDCCols::CreateImpl
void CreateImpl(const std::vector< IT > &essentials)
Definition: SpDCCols.cpp:695
combblas::SpDCCols::dcsc_gespmv
friend void dcsc_gespmv(const SpDCCols< IU, NU > &A, const RHS *x, LHS *y)
SpMV with dense vector.
Definition: Friends.h:64
combblas::promote_trait< SpDCCols< IT, float >, SpDCCols< IT, int > >::T_promote
SpDCCols< IT, float > T_promote
Definition: SpDCCols.h:434
combblas::SpDCCols::ColConcatenate
void ColConcatenate(std::vector< SpDCCols< IT, NT > > &matrices)
Definition: SpDCCols.cpp:939
combblas::SpDCCols::RowSplit
void RowSplit(int numsplits)
Definition: SpDCCols.h:278
combblas::SpDCCols::ColSplit
void ColSplit(int parts, std::vector< SpDCCols< IT, NT > > &matrices)
Definition: SpDCCols.cpp:897
combblas::SpDCCols::operator=
SpDCCols< IT, NT > & operator=(const SpDCCols< IT, NT > &rhs)
Definition: SpDCCols.cpp:365
combblas::SpDCCols::Transpose
void Transpose()
Mutator version, replaces the calling object.
Definition: SpDCCols.cpp:815
combblas::SpDCCols::get
std::ifstream & get(std::ifstream &infile)
Definition: SpDCCols.cpp:1195
combblas::SpDCCols
Definition: Friends.h:51
combblas::promote_trait< SpDCCols< IT, double >, SpDCCols< IT, int > >::T_promote
SpDCCols< IT, double > T_promote
Definition: SpDCCols.h:442
combblas::SpDCCols::GetDCSC
Dcsc< IT, NT > * GetDCSC() const
Definition: SpDCCols.h:322
combblas::SpDCCols::PlusEq_AnXBn
int PlusEq_AnXBn(const SpDCCols< IT, NT > &A, const SpDCCols< IT, NT > &B)
Definition: SpDCCols.cpp:1071
combblas::SpDCCols::dcsc
Dcsc< IT, NT > * dcsc
Definition: SpDCCols.h:351
combblas::SpDCCols::GetInternal
auto GetInternal(int i) const
Definition: SpDCCols.h:333