monolish  0.14.2
MONOlithic LIner equation Solvers for Highly-parallel architecture
monolish_view1D.hpp
Go to the documentation of this file.
1 
8 #pragma once
9 #include "./monolish_logger.hpp"
10 #include <cassert>
11 #include <exception>
12 #include <fstream>
13 #include <iostream>
14 #include <iterator>
15 #include <memory>
16 #include <omp.h>
17 #include <stdexcept>
18 #include <string>
19 #include <vector>
20 
21 #if USE_SXAT
22 #undef _HAS_CPP17
23 #endif
24 #include <random>
25 #if USE_SXAT
26 #define _HAS_CPP17 1
27 #endif
28 
29 #if defined USE_MPI
30 #include <mpi.h>
31 #endif
32 
33 namespace monolish {
34 template <typename Float> class vector;
35 
36 namespace matrix {
37 template <typename Float> class Dense;
38 template <typename Float> class CRS;
39 template <typename Float> class LinearOperator;
40 } // namespace matrix
41 
48 template <typename TYPE, typename Float> class view1D {
49 private:
50  TYPE &target;
51  Float *target_data;
52  size_t first;
53  size_t last;
54  size_t range;
55 
56 public:
67  view1D(vector<Float> &x, const size_t start, const size_t end) : target(x) {
68  first = start;
69  last = end;
70  range = last - first;
71  target_data = x.data();
72  }
73 
84  view1D(matrix::Dense<Float> &A, const size_t start, const size_t end)
85  : target(A) {
86  first = start;
87  last = end;
88  range = last - first;
89  target_data = A.val.data();
90  }
91 
102  view1D(view1D<vector<Float>, Float> &x, const size_t start, const size_t end)
103  : target(x) {
104  first = x.get_first() + start;
105  last = x.get_last() + end;
106  range = last - first;
107  target_data = x.data();
108  }
109 
120  view1D(view1D<matrix::Dense<Float>, Float> &x, const size_t start,
121  const size_t end)
122  : target(x) {
123  first = x.get_first() + start;
124  last = x.get_last() + end;
125  range = last - first;
126  target_data = x.data();
127  }
128 
135  [[nodiscard]] size_t size() const { return range; }
136 
143  [[nodiscard]] size_t get_nnz() const { return range; }
144 
151  [[nodiscard]] size_t get_first() const { return first; }
152 
159  [[nodiscard]] size_t get_last() const { return last; }
160 
167  [[nodiscard]] size_t get_offset() const { return first; }
168 
174  void set_first(size_t i) { first = i; }
175 
181  void set_last(size_t i) {
182  assert(first + i <= target.get_nnz());
183  last = i;
184  }
185 
194  [[nodiscard]] size_t get_device_mem_stat() const {
195  return target.get_device_mem_stat();
196  }
197 
205  [[nodiscard]] Float *data() const { return target_data; }
206 
213  [[nodiscard]] Float *data() { return target_data; }
214 
221  [[nodiscard]] Float *begin() const { return target_data + get_offset(); }
222 
229  [[nodiscard]] Float *begin() { return target_data + get_offset(); }
230 
237  [[nodiscard]] Float *end() const { return target_data + range; }
238 
245  [[nodiscard]] Float *end() { return target_data + range; }
246 
255  void print_all(bool force_cpu = false) const;
256 
267  void resize(size_t N) {
268  assert(first + N <= target.get_nnz());
269  last = first + N;
270  }
271 
281  [[nodiscard]] Float &operator[](const size_t i) {
282  if (target.get_device_mem_stat()) {
283  throw std::runtime_error("Error, GPU vector cant use operator[]");
284  }
285  return target_data[i + first];
286  }
287 
296  void fill(Float value);
297 };
298 
299 } // namespace monolish
monolish::view1D::size
size_t size() const
get view1D size (end-start)
Definition: monolish_view1D.hpp:135
monolish::view1D::view1D
view1D(matrix::Dense< Float > &A, const size_t start, const size_t end)
create view1D(start:end) from Dense matrix
Definition: monolish_view1D.hpp:84
monolish::view1D::end
Float * end() const
returns a end iterator
Definition: monolish_view1D.hpp:237
monolish::view1D::first
size_t first
Definition: monolish_view1D.hpp:52
monolish::view1D::target
TYPE & target
Definition: monolish_view1D.hpp:50
monolish::view1D::get_device_mem_stat
size_t get_device_mem_stat() const
true: sended, false: not send
Definition: monolish_view1D.hpp:194
monolish::matrix::Dense::val
std::vector< Float > val
Dense format value(size M x N)
Definition: monolish_dense.hpp:47
monolish::matrix::Dense
Dense format Matrix.
Definition: monolish_coo.hpp:35
monolish::view1D::view1D
view1D(view1D< vector< Float >, Float > &x, const size_t start, const size_t end)
create view1D(start:end) from monolish::vector
Definition: monolish_view1D.hpp:102
monolish::vector::data
const Float * data() const
returns a direct pointer to the vector
Definition: monolish_vector.hpp:236
monolish::view1D::fill
void fill(Float value)
fill vector elements with a scalar value
Definition: fill_view1D.cpp:9
monolish::view1D::last
size_t last
Definition: monolish_view1D.hpp:53
monolish::view1D::resize
void resize(size_t N)
change last postion
Definition: monolish_view1D.hpp:267
monolish::view1D::get_first
size_t get_first() const
get first position
Definition: monolish_view1D.hpp:151
monolish::view1D::get_offset
size_t get_offset() const
get first position (same as get_first())
Definition: monolish_view1D.hpp:167
monolish::view1D::data
Float * data() const
returns a direct pointer to the original vector (dont include offset)
Definition: monolish_view1D.hpp:205
monolish
Definition: monolish_matrix_blas.hpp:10
monolish_logger.hpp
monolish::view1D::set_first
void set_first(size_t i)
change first position
Definition: monolish_view1D.hpp:174
monolish::view1D::view1D
view1D(view1D< matrix::Dense< Float >, Float > &x, const size_t start, const size_t end)
create view1D(start:end) from monolish::matrix::Dense
Definition: monolish_view1D.hpp:120
monolish::view1D::begin
Float * begin() const
returns begin iterator (include offset)
Definition: monolish_view1D.hpp:221
monolish::view1D::view1D
view1D(vector< Float > &x, const size_t start, const size_t end)
create view1D(start:end) from vector
Definition: monolish_view1D.hpp:67
monolish::view1D::print_all
void print_all(bool force_cpu=false) const
print all elements to standart I/O
monolish::view1D::get_last
size_t get_last() const
get end position
Definition: monolish_view1D.hpp:159
monolish::view1D
1D view class
Definition: monolish_coo.hpp:33
monolish::view1D::get_nnz
size_t get_nnz() const
get view1D size (same as size())
Definition: monolish_view1D.hpp:143
monolish::view1D::range
size_t range
Definition: monolish_view1D.hpp:54
monolish::view1D::target_data
Float * target_data
Definition: monolish_view1D.hpp:51
monolish::vector
vector class
Definition: monolish_coo.hpp:32
monolish::view1D::data
Float * data()
returns a direct pointer to the vector (dont include offset)
Definition: monolish_view1D.hpp:213
monolish::view1D::set_last
void set_last(size_t i)
change last position
Definition: monolish_view1D.hpp:181
monolish::view1D::begin
Float * begin()
returns begin iterator (include offset)
Definition: monolish_view1D.hpp:229
monolish::view1D::operator[]
Float & operator[](const size_t i)
reference to the element at position
Definition: monolish_view1D.hpp:281
monolish::view1D::end
Float * end()
returns a end iterator
Definition: monolish_view1D.hpp:245