graph
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
unified_memory_csr.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <cuda_runtime.h>
4 
7 #include "pangolin/edge_list.hpp"
8 
10 
11 class UnifiedMemoryCSR : public CSR<Uint>
12 {
13  private:
14  CUDAManagedVector<index_type> rowOffsets_; // offset that each row starts in data_ (num rows)
15  CUDAManagedVector<index_type> data_; // the non-zero columns (nnz)
16  CUDAManagedVector<char> dataIsLocal_; // whether we own this column
17 
18  public:
19  virtual const index_type *
20  row_offsets() const override
21  {
22  return rowOffsets_.data();
23  }
24 
25  virtual const index_type *cols() const override
26  {
27  return data_.data();
28  }
29 
30  virtual const char *is_local_cols() const
31  {
32  return dataIsLocal_.data();
33  }
34 
35  virtual size_t num_rows() const
36  {
37  return rowOffsets_.empty() ? 0 : rowOffsets_.size() - 1;
38  }
39 
40  virtual size_t num_nonzero_rows() const
41  {
42  size_t count = 0;
43  for (size_t i = 0; i < rowOffsets_.size() - 1; ++i)
44  {
45  count += rowOffsets_[i + 1] - rowOffsets_[i];
46  }
47  return count;
48  }
49 
50  virtual size_t nnz() const
51  {
52  return data_.size();
53  }
54 
55  virtual size_t bytes() const
56  {
57  size_t sz = 0;
58  sz += rowOffsets_.capacity() * sizeof(rowOffsets_[0]);
59  sz += data_.capacity() * sizeof(data_[0]);
60  sz += dataIsLocal_.capacity() * sizeof(dataIsLocal_[0]);
61  return sz;
62  }
63 
64  inline std::pair<index_type, index_type> row(const size_t i) const
65  {
66  return std::make_pair(rowOffsets_[i], rowOffsets_[i + 1]);
67  }
68 
69  // static UnifiedMemoryCSR from_sorted_edgelist(const EdgeList &local);
70  static UnifiedMemoryCSR from_sorted_edgelist(const EdgeList &local, const EdgeList &remote = EdgeList());
71  std::vector<UnifiedMemoryCSR> partition_nonzeros(const size_t numPartitions) const;
72 };
73 
virtual size_t nnz() const
Definition: unified_memory_csr.hpp:50
CUDAManagedVector< char > dataIsLocal_
Definition: unified_memory_csr.hpp:16
std::pair< index_type, index_type > row(const size_t i) const
Definition: unified_memory_csr.hpp:64
virtual size_t bytes() const
Definition: unified_memory_csr.hpp:55
unsigned int Uint
Definition: types.hpp:10
Definition: csr.hpp:9
CUDAManagedVector< index_type > data_
Definition: unified_memory_csr.hpp:15
virtual size_t num_nonzero_rows() const
Definition: unified_memory_csr.hpp:40
Definition: unified_memory_csr.hpp:11
PANGOLIN_BEGIN_NAMESPACE()
std::vector< Edge > EdgeList
Definition: edge_list.hpp:9
CUDAManagedVector< index_type > rowOffsets_
Definition: unified_memory_csr.hpp:14
virtual const index_type * row_offsets() const override
Definition: unified_memory_csr.hpp:20
std::vector< T, CUDAManagedAllocator< T > > CUDAManagedVector
Definition: cuda_managed_vector.hpp:8
Uint index_type
Definition: csr.hpp:12
#define PANGOLIN_END_NAMESPACE()
virtual size_t num_rows() const
Definition: unified_memory_csr.hpp:35
virtual const char * is_local_cols() const
Definition: unified_memory_csr.hpp:30
virtual const index_type * cols() const override
Definition: unified_memory_csr.hpp:25