 |
Ginkgo
Generated from pipelines/2500191992 branch based on develop. Ginkgo version 2.0.0
A numerical linear algebra library targeting many-core architectures
|
5 #ifndef GKO_PUBLIC_CORE_MATRIX_SELLP_HPP_
6 #define GKO_PUBLIC_CORE_MATRIX_SELLP_HPP_
9 #include <ginkgo/core/base/array.hpp>
10 #include <ginkgo/core/base/lin_op.hpp>
11 #include <ginkgo/core/matrix/device_views.hpp>
18 constexpr
int default_slice_size = 64;
19 constexpr
int default_stride_factor = 1;
22 template <
typename ValueType>
25 template <
typename ValueType,
typename IndexType>
43 template <
typename ValueType = default_precision,
typename IndexType =
int32>
45 :
public EnableLinOp<Sellp<ValueType, IndexType>>,
46 public ConvertibleTo<Sellp<next_precision<ValueType>, IndexType>>,
47 #if GINKGO_ENABLE_HALF || GINKGO_ENABLE_BFLOAT16
48 public ConvertibleTo<Sellp<next_precision<ValueType, 2>, IndexType>>,
50 #if GINKGO_ENABLE_HALF && GINKGO_ENABLE_BFLOAT16
51 public ConvertibleTo<Sellp<next_precision<ValueType, 3>, IndexType>>,
53 public ConvertibleTo<Dense<ValueType>>,
54 public ConvertibleTo<Csr<ValueType, IndexType>>,
55 public DiagonalExtractable<ValueType>,
56 public ReadableFromMatrixData<ValueType, IndexType>,
57 public WritableToMatrixData<ValueType, IndexType>,
58 public EnableAbsoluteComputation<
59 remove_complex<Sellp<ValueType, IndexType>>> {
60 friend class EnablePolymorphicObject<
Sellp,
LinOp>;
61 friend class Dense<ValueType>;
62 friend class Csr<ValueType, IndexType>;
64 GKO_ASSERT_SUPPORTED_VALUE_AND_INDEX_TYPE;
70 Sellp<next_precision<ValueType>, IndexType>>::convert_to;
71 using ConvertibleTo<Sellp<next_precision<ValueType>, IndexType>>::move_to;
72 using ConvertibleTo<Dense<ValueType>>::convert_to;
73 using ConvertibleTo<Dense<ValueType>>::move_to;
74 using ConvertibleTo<Csr<ValueType, IndexType>>::convert_to;
75 using ConvertibleTo<Csr<ValueType, IndexType>>::move_to;
78 using value_type = ValueType;
79 using index_type = IndexType;
80 using mat_data = matrix_data<ValueType, IndexType>;
81 using device_mat_data = device_matrix_data<ValueType, IndexType>;
82 using absolute_type = remove_complex<Sellp>;
83 using device_view = matrix::view::sellp<value_type, index_type>;
84 using const_device_view =
85 matrix::view::sellp<const value_type, const index_type>;
90 Sellp<next_precision<ValueType>, IndexType>* result)
const override;
92 void move_to(
Sellp<next_precision<ValueType>, IndexType>* result)
override;
94 #if GINKGO_ENABLE_HALF || GINKGO_ENABLE_BFLOAT16
97 Sellp<next_precision<ValueType, 2>, IndexType>>::convert_to;
99 Sellp<next_precision<ValueType, 2>, IndexType>>::move_to;
102 Sellp<next_precision<ValueType, 2>, IndexType>* result)
const override;
105 Sellp<next_precision<ValueType, 2>, IndexType>* result)
override;
108 #if GINKGO_ENABLE_HALF && GINKGO_ENABLE_BFLOAT16
111 Sellp<next_precision<ValueType, 3>, IndexType>>::convert_to;
113 Sellp<next_precision<ValueType, 3>, IndexType>>::move_to;
116 Sellp<next_precision<ValueType, 3>, IndexType>* result)
const override;
119 Sellp<next_precision<ValueType, 3>, IndexType>* result)
override;
122 void convert_to(Dense<ValueType>* other)
const override;
124 void move_to(Dense<ValueType>* other)
override;
126 void convert_to(Csr<ValueType, IndexType>* other)
const override;
128 void move_to(Csr<ValueType, IndexType>* other)
override;
130 void read(
const mat_data& data)
override;
132 void read(
const device_mat_data& data)
override;
134 void read(device_mat_data&& data)
override;
136 void write(mat_data& data)
const override;
244 return values_.
get_size() / slice_size_;
272 return values_.
get_data()[this->linearize_index(row, slice_set, idx)];
300 return this->
get_col_idxs()[this->linearize_index(row, slice_set, idx)];
310 ->get_const_col_idxs()[this->linearize_index(row, slice_set, idx)];
329 static std::unique_ptr<Sellp>
create(std::shared_ptr<const Executor> exec,
345 static std::unique_ptr<Sellp>
create(std::shared_ptr<const Executor> exec,
378 Sellp(std::shared_ptr<const Executor> exec,
const dim<2>& size = {},
381 Sellp(std::shared_ptr<const Executor> exec,
const dim<2>& size,
384 void apply_impl(
const LinOp* b,
LinOp* x)
const override;
387 LinOp* x)
const override;
392 return (slice_set + col) * slice_size_ + row;
396 array<value_type> values_;
397 array<index_type> col_idxs_;
398 array<size_type> slice_lengths_;
399 array<size_type> slice_sets_;
409 #endif // GKO_PUBLIC_CORE_MATRIX_SELLP_HPP_
const size_type * get_const_slice_sets() const noexcept
Returns the offsets of slices.
Definition: sellp.hpp:218
const_device_view get_const_device_view() const
get the const non-owning device view
size_type get_stride_factor() const noexcept
Returns the stride factor(t) of SELL-P.
Definition: sellp.hpp:235
void move_to(result_type *result) override
Definition: polymorphic_object.hpp:751
void convert_to(result_type *result) const override
Definition: polymorphic_object.hpp:749
Sellp(const Sellp &)
Copy-assigns a Sellp matrix.
virtual void read(const matrix_data< ValueType, IndexType > &data)=0
Reads a matrix from a matrix_data structure.
index_type & col_at(size_type row, size_type slice_set, size_type idx) noexcept
Returns the idx-th column index of the row-th row with slice_set slice set.
Definition: sellp.hpp:297
value_type * get_values() noexcept
Returns the values of the matrix.
Definition: sellp.hpp:149
Sellp & operator=(const Sellp &)
Copy-assigns a Sellp matrix.
size_type get_num_stored_elements() const noexcept
Returns the number of elements explicitly stored in the matrix.
Definition: sellp.hpp:252
device_view get_device_view()
get the non-owning device view
std::size_t size_type
Integral type used for allocation quantities.
Definition: types.hpp:90
static std::unique_ptr< Sellp > create(std::shared_ptr< const Executor > exec, const dim< 2 > &size={}, size_type total_cols=0)
Creates an uninitialized Sellp matrix of the specified size.
value_type & val_at(size_type row, size_type slice_set, size_type idx) noexcept
Returns the idx-th non-zero element of the row-th row with slice_set slice set.
Definition: sellp.hpp:269
void write(mat_data &data) const override
Writes a matrix to a matrix_data structure.
const index_type * get_const_col_idxs() const noexcept
Returns the column indexes of the matrix.
Definition: sellp.hpp:177
void read(const mat_data &data) override
Reads a matrix from a matrix_data structure.
index_type * get_col_idxs() noexcept
Returns the column indexes of the matrix.
Definition: sellp.hpp:168
size_type * get_slice_lengths() noexcept
Returns the lengths(columns) of slices.
Definition: sellp.hpp:187
size_type * get_slice_sets() noexcept
Returns the offsets of slices.
Definition: sellp.hpp:209
The Ginkgo namespace.
Definition: abstract_factory.hpp:20
std::unique_ptr< absolute_type > compute_absolute() const override
Gets the AbsoluteLinOp.
const size_type * get_const_slice_lengths() const noexcept
Returns the lengths(columns) of slices.
Definition: sellp.hpp:199
value_type * get_data() noexcept
Returns a pointer to the block of memory used to store the elements of the array.
Definition: array.hpp:687
value_type val_at(size_type row, size_type slice_set, size_type idx) const noexcept
Returns the idx-th non-zero element of the row-th row with slice_set slice set.
Definition: sellp.hpp:278
size_type get_total_cols() const noexcept
Returns the total column number.
Definition: sellp.hpp:242
size_type get_slice_size() const noexcept
Returns the size of a slice.
Definition: sellp.hpp:228
typename detail::find_precision_impl< T, -step >::type previous_precision
Obtains the previous move type of T in the singly-linked precision corresponding bfloat16/half.
Definition: math.hpp:473
void compute_absolute_inplace() override
Compute absolute inplace on each element.
const value_type * get_const_data() const noexcept
Returns a constant pointer to the block of memory used to store the elements of the array.
Definition: array.hpp:696
std::unique_ptr< Diagonal< ValueType > > extract_diagonal() const override
Extracts the diagonal entries of the matrix into a vector.
index_type col_at(size_type row, size_type slice_set, size_type idx) const noexcept
Returns the idx-th column index of the row-th row with slice_set slice set.
Definition: sellp.hpp:306
size_type get_size() const noexcept
Returns the number of elements in the array.
Definition: array.hpp:670
const value_type * get_const_values() const noexcept
Returns the values of the matrix.
Definition: sellp.hpp:158
LinOp(const LinOp &)=default
Copy-constructs a LinOp.
typename detail::to_complex_s< T >::type to_complex
Obtain the type which adds the complex of complex/scalar type or the template parameter of class by a...
Definition: math.hpp:283