 |
Ginkgo
Generated from pipelines/2662685947 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>
46 public EnableCloneable<Sellp<ValueType, IndexType>>,
47 public ConvertibleTo<Sellp<next_precision<ValueType>, IndexType>>,
48 #if GINKGO_ENABLE_HALF || GINKGO_ENABLE_BFLOAT16
49 public ConvertibleTo<Sellp<next_precision<ValueType, 2>, IndexType>>,
51 #if GINKGO_ENABLE_HALF && GINKGO_ENABLE_BFLOAT16
52 public ConvertibleTo<Sellp<next_precision<ValueType, 3>, IndexType>>,
54 public ConvertibleTo<Dense<ValueType>>,
55 public ConvertibleTo<Csr<ValueType, IndexType>>,
56 public DiagonalExtractable<ValueType>,
57 public ReadableFromMatrixData<ValueType, IndexType>,
58 public WritableToMatrixData<ValueType, IndexType>,
59 public EnableAbsoluteComputation<
60 remove_complex<Sellp<ValueType, IndexType>>> {
61 friend class EnableCloneable<
Sellp>;
62 friend class Dense<ValueType>;
63 friend class Csr<ValueType, IndexType>;
65 GKO_ASSERT_SUPPORTED_VALUE_AND_INDEX_TYPE;
71 Sellp<next_precision<ValueType>, IndexType>>::convert_to;
72 using ConvertibleTo<Sellp<next_precision<ValueType>, IndexType>>::move_to;
73 using ConvertibleTo<Dense<ValueType>>::convert_to;
74 using ConvertibleTo<Dense<ValueType>>::move_to;
75 using ConvertibleTo<Csr<ValueType, IndexType>>::convert_to;
76 using ConvertibleTo<Csr<ValueType, IndexType>>::move_to;
79 using value_type = ValueType;
80 using index_type = IndexType;
81 using mat_data = matrix_data<ValueType, IndexType>;
82 using device_mat_data = device_matrix_data<ValueType, IndexType>;
83 using absolute_type = remove_complex<Sellp>;
84 using device_view = matrix::view::sellp<value_type, index_type>;
85 using const_device_view =
86 matrix::view::sellp<const value_type, const index_type>;
91 Sellp<next_precision<ValueType>, IndexType>* result)
const override;
93 void move_to(
Sellp<next_precision<ValueType>, IndexType>* result)
override;
95 #if GINKGO_ENABLE_HALF || GINKGO_ENABLE_BFLOAT16
98 Sellp<next_precision<ValueType, 2>, IndexType>>::convert_to;
100 Sellp<next_precision<ValueType, 2>, IndexType>>::move_to;
103 Sellp<next_precision<ValueType, 2>, IndexType>* result)
const override;
106 Sellp<next_precision<ValueType, 2>, IndexType>* result)
override;
109 #if GINKGO_ENABLE_HALF && GINKGO_ENABLE_BFLOAT16
112 Sellp<next_precision<ValueType, 3>, IndexType>>::convert_to;
114 Sellp<next_precision<ValueType, 3>, IndexType>>::move_to;
117 Sellp<next_precision<ValueType, 3>, IndexType>* result)
const override;
120 Sellp<next_precision<ValueType, 3>, IndexType>* result)
override;
123 void convert_to(Dense<ValueType>* other)
const override;
125 void move_to(Dense<ValueType>* other)
override;
127 void convert_to(Csr<ValueType, IndexType>* other)
const override;
129 void move_to(Csr<ValueType, IndexType>* other)
override;
131 void read(
const mat_data& data)
override;
133 void read(
const device_mat_data& data)
override;
135 void read(device_mat_data&& data)
override;
137 void write(mat_data& data)
const override;
245 return values_.
get_size() / slice_size_;
273 return values_.
get_data()[this->linearize_index(row, slice_set, idx)];
301 return this->
get_col_idxs()[this->linearize_index(row, slice_set, idx)];
311 ->get_const_col_idxs()[this->linearize_index(row, slice_set, idx)];
330 static std::unique_ptr<Sellp>
create(std::shared_ptr<const Executor> exec,
346 static std::unique_ptr<Sellp>
create(std::shared_ptr<const Executor> exec,
379 Sellp(std::shared_ptr<const Executor> exec,
const dim<2>& size = {},
382 Sellp(std::shared_ptr<const Executor> exec,
const dim<2>& size,
385 void apply_impl(
const LinOp* b,
LinOp* x)
const override;
388 LinOp* x)
const override;
393 return (slice_set + col) * slice_size_ + row;
397 array<value_type> values_;
398 array<index_type> col_idxs_;
399 array<size_type> slice_lengths_;
400 array<size_type> slice_sets_;
410 #endif // GKO_PUBLIC_CORE_MATRIX_SELLP_HPP_
const size_type * get_const_slice_sets() const noexcept
Returns the offsets of slices.
Definition: sellp.hpp:219
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:236
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:298
value_type * get_values() noexcept
Returns the values of the matrix.
Definition: sellp.hpp:150
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:253
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:270
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:178
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:169
size_type * get_slice_lengths() noexcept
Returns the lengths(columns) of slices.
Definition: sellp.hpp:188
size_type * get_slice_sets() noexcept
Returns the offsets of slices.
Definition: sellp.hpp:210
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:200
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:279
size_type get_total_cols() const noexcept
Returns the total column number.
Definition: sellp.hpp:243
size_type get_slice_size() const noexcept
Returns the size of a slice.
Definition: sellp.hpp:229
void convert_to(result_type *result) const override
Converts the implementer to an object of type result_type.
Definition: polymorphic_object.hpp:404
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:307
void move_to(result_type *result) override
Converts the implementer to an object of type result_type by moving data from this object.
Definition: polymorphic_object.hpp:406
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:159
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