Ginkgo  Generated from pipelines/2897303314 branch based on develop. Ginkgo version 2.0.0
A numerical linear algebra library targeting many-core architectures
csr.hpp
1 // SPDX-FileCopyrightText: 2017 - 2026 The Ginkgo authors
2 //
3 // SPDX-License-Identifier: BSD-3-Clause
4 
5 #ifndef GKO_PUBLIC_CORE_MATRIX_CSR_HPP_
6 #define GKO_PUBLIC_CORE_MATRIX_CSR_HPP_
7 
8 
9 #include <ginkgo/core/base/array.hpp>
10 #include <ginkgo/core/base/index_set.hpp>
11 #include <ginkgo/core/base/lin_op.hpp>
12 #include <ginkgo/core/base/math.hpp>
13 #include <ginkgo/core/matrix/device_views.hpp>
14 #include <ginkgo/core/matrix/permutation.hpp>
15 #include <ginkgo/core/matrix/scaled_permutation.hpp>
16 
17 
18 namespace gko {
19 namespace matrix {
20 
21 
22 template <typename ValueType>
23 class Dense;
24 
25 template <typename ValueType>
26 class Diagonal;
27 
28 template <typename ValueType, typename IndexType>
29 class Coo;
30 
31 template <typename ValueType, typename IndexType>
32 class Ell;
33 
34 template <typename ValueType, typename IndexType>
35 class Hybrid;
36 
37 template <typename ValueType, typename IndexType>
38 class Sellp;
39 
40 template <typename ValueType, typename IndexType>
42 
43 template <typename ValueType, typename IndexType>
44 class Csr;
45 
46 template <typename ValueType, typename IndexType>
47 class Fbcsr;
48 
49 template <typename ValueType, typename IndexType>
50 class CsrBuilder;
51 
52 
53 namespace csr {
54 
55 
59 enum class spmv_strategy {
65  automatic,
72  load_balance,
79  merge_path,
84  classical,
94  sparselib
95 };
96 
97 
98 } // namespace csr
99 
100 
153 template <typename ValueType = default_precision, typename IndexType = int32>
154 class Csr : public LinOp,
155  public EnableCloneable<Csr<ValueType, IndexType>>,
156  public ConvertibleTo<Csr<next_precision<ValueType>, IndexType>>,
157 #if GINKGO_ENABLE_HALF || GINKGO_ENABLE_BFLOAT16
158  public ConvertibleTo<Csr<next_precision<ValueType, 2>, IndexType>>,
159 #endif
160 #if GINKGO_ENABLE_HALF && GINKGO_ENABLE_BFLOAT16
161  public ConvertibleTo<Csr<next_precision<ValueType, 3>, IndexType>>,
162 #endif
163  public ConvertibleTo<Dense<ValueType>>,
164  public ConvertibleTo<Coo<ValueType, IndexType>>,
165  public ConvertibleTo<Ell<ValueType, IndexType>>,
166  public ConvertibleTo<Fbcsr<ValueType, IndexType>>,
167  public ConvertibleTo<Hybrid<ValueType, IndexType>>,
168  public ConvertibleTo<Sellp<ValueType, IndexType>>,
169  public ConvertibleTo<SparsityCsr<ValueType, IndexType>>,
170  public DiagonalExtractable<ValueType>,
171  public ReadableFromMatrixData<ValueType, IndexType>,
172  public WritableToMatrixData<ValueType, IndexType>,
173  public Transposable,
174  public Permutable<IndexType>,
176  remove_complex<Csr<ValueType, IndexType>>>,
177  public ScaledIdentityAddable {
178  friend class EnableCloneable<Csr>;
179  friend class Coo<ValueType, IndexType>;
180  friend class Dense<ValueType>;
181  friend class Diagonal<ValueType>;
182  friend class Ell<ValueType, IndexType>;
183  friend class Hybrid<ValueType, IndexType>;
184  friend class Sellp<ValueType, IndexType>;
185  friend class SparsityCsr<ValueType, IndexType>;
186  friend class Fbcsr<ValueType, IndexType>;
187  friend class CsrBuilder<ValueType, IndexType>;
188  friend class Csr<to_complex<ValueType>, IndexType>;
189  GKO_ASSERT_SUPPORTED_VALUE_AND_INDEX_TYPE;
190 
191 public:
194  using ConvertibleTo<Csr<next_precision<ValueType>, IndexType>>::convert_to;
195  using ConvertibleTo<Csr<next_precision<ValueType>, IndexType>>::move_to;
196  using ConvertibleTo<Dense<ValueType>>::convert_to;
197  using ConvertibleTo<Dense<ValueType>>::move_to;
198  using ConvertibleTo<Coo<ValueType, IndexType>>::convert_to;
200  using ConvertibleTo<Ell<ValueType, IndexType>>::convert_to;
211 
212  using value_type = ValueType;
213  using index_type = IndexType;
214  using transposed_type = Csr<ValueType, IndexType>;
215  using mat_data = matrix_data<ValueType, IndexType>;
216  using device_mat_data = device_matrix_data<ValueType, IndexType>;
217  using absolute_type = remove_complex<Csr>;
218  using device_view = view::csr<value_type, index_type>;
219  using const_device_view = view::csr<const value_type, const index_type>;
220 
221  class GKO_DEPRECATED(
222  "please use enum gko::matrix::csr::spmv_strategy::<strategy>")
223  strategy_type {
224  public:
225  virtual ~strategy_type() = default;
226 
227  // return the corresponding enum in incoming release
228  virtual csr::spmv_strategy get_enum() const = 0;
229  };
230 
231  class GKO_DEPRECATED(
232  "please use enum gko::matrix::csr::spmv_strategy::classical") classical
233  : public strategy_type {
234  public:
235  csr::spmv_strategy get_enum() const override
236  {
237  return csr::spmv_strategy::classical;
238  }
239  };
240 
241  class GKO_DEPRECATED(
242  "please use enum gko::matrix::csr::spmv_strategy::merge_path")
243  merge_path : public strategy_type {
244  public:
245  csr::spmv_strategy get_enum() const override
246  {
247  return csr::spmv_strategy::merge_path;
248  }
249  };
250 
251  class GKO_DEPRECATED(
252  "please use enum gko::matrix::csr::spmv_strategy::sparselib") cusparse
253  : public strategy_type {
254  public:
255  csr::spmv_strategy get_enum() const override
256  {
257  return csr::spmv_strategy::sparselib;
258  }
259  };
260 
261  class GKO_DEPRECATED(
262  "please use enum gko::matrix::csr::spmv_strategy::sparselib") sparselib
263  : public strategy_type {
264  public:
265  csr::spmv_strategy get_enum() const override
266  {
267  return csr::spmv_strategy::sparselib;
268  }
269  };
270 
271  class GKO_DEPRECATED(
272  "please use enum gko::matrix::csr::spmv_strategy::load_balance")
273  load_balance : public strategy_type {
274  public:
275  load_balance(std::shared_ptr<const Executor>) {}
276 
277  csr::spmv_strategy get_enum() const override
278  {
279  return csr::spmv_strategy::load_balance;
280  }
281  };
282 
283  class GKO_DEPRECATED(
284  "please use enum gko::matrix::csr::spmv_strategy::automatic")
285  automatical : public strategy_type {
286  public:
287  automatical(std::shared_ptr<const Executor>) {}
288 
289  csr::spmv_strategy get_enum() const override
290  {
291  return csr::spmv_strategy::automatic;
292  }
293  };
294 
295 
296  friend class Csr<previous_precision<ValueType>, IndexType>;
297 
298  void convert_to(
299  Csr<next_precision<ValueType>, IndexType>* result) const override;
300 
301  void move_to(Csr<next_precision<ValueType>, IndexType>* result) override;
302 
303 #if GINKGO_ENABLE_HALF || GINKGO_ENABLE_BFLOAT16
304  friend class Csr<previous_precision<ValueType, 2>, IndexType>;
305  using ConvertibleTo<
306  Csr<next_precision<ValueType, 2>, IndexType>>::convert_to;
307  using ConvertibleTo<Csr<next_precision<ValueType, 2>, IndexType>>::move_to;
308 
309  void convert_to(
310  Csr<next_precision<ValueType, 2>, IndexType>* result) const override;
311 
312  void move_to(Csr<next_precision<ValueType, 2>, IndexType>* result) override;
313 #endif
314 
315 #if GINKGO_ENABLE_HALF && GINKGO_ENABLE_BFLOAT16
316  friend class Csr<previous_precision<ValueType, 3>, IndexType>;
317  using ConvertibleTo<
318  Csr<next_precision<ValueType, 3>, IndexType>>::convert_to;
319  using ConvertibleTo<Csr<next_precision<ValueType, 3>, IndexType>>::move_to;
320 
321  void convert_to(
322  Csr<next_precision<ValueType, 3>, IndexType>* result) const override;
323 
324  void move_to(Csr<next_precision<ValueType, 3>, IndexType>* result) override;
325 #endif
326 
327  void convert_to(Dense<ValueType>* other) const override;
328 
329  void move_to(Dense<ValueType>* other) override;
330 
331  void convert_to(Coo<ValueType, IndexType>* result) const override;
332 
333  void move_to(Coo<ValueType, IndexType>* result) override;
334 
335  void convert_to(Ell<ValueType, IndexType>* result) const override;
336 
337  void move_to(Ell<ValueType, IndexType>* result) override;
338 
339  void convert_to(Fbcsr<ValueType, IndexType>* result) const override;
340 
341  void move_to(Fbcsr<ValueType, IndexType>* result) override;
342 
343  void convert_to(Hybrid<ValueType, IndexType>* result) const override;
344 
345  void move_to(Hybrid<ValueType, IndexType>* result) override;
346 
347  void convert_to(Sellp<ValueType, IndexType>* result) const override;
348 
349  void move_to(Sellp<ValueType, IndexType>* result) override;
350 
351  void convert_to(SparsityCsr<ValueType, IndexType>* result) const override;
352 
353  void move_to(SparsityCsr<ValueType, IndexType>* result) override;
354 
355  void read(const mat_data& data) override;
356 
357  void read(const device_mat_data& data) override;
358 
359  void read(device_mat_data&& data) override;
360 
361  void write(mat_data& data) const override;
362 
363  void write(device_mat_data& data) const override;
364 
365  std::unique_ptr<LinOp> transpose() const override;
366 
367  std::unique_ptr<LinOp> conj_transpose() const override;
368 
375 
382 
389  friend class Csr;
390 
391  public:
392  explicit multiply_reuse_info();
393 
395 
396  multiply_reuse_info(const multiply_reuse_info&) = delete;
397 
399 
400  multiply_reuse_info& operator=(const multiply_reuse_info&) = delete;
401 
402  multiply_reuse_info& operator=(multiply_reuse_info&&) noexcept;
403 
410  ptr_param<Csr> out) const;
411 
412  private:
413  struct lookup_data;
414 
415  explicit multiply_reuse_info(std::unique_ptr<lookup_data> data);
416 
417  std::unique_ptr<lookup_data> internal;
418  };
419 
430  std::unique_ptr<Csr> multiply(ptr_param<const Csr> other) const;
431 
448  std::pair<std::unique_ptr<Csr>, multiply_reuse_info> multiply_reuse(
449  ptr_param<const Csr> other) const;
450 
457  friend class Csr;
458 
459  public:
460  explicit multiply_add_reuse_info();
461 
463 
465 
467 
469  delete;
470 
471  multiply_add_reuse_info& operator=(multiply_add_reuse_info&&) noexcept;
472 
481  ptr_param<const Dense<value_type>> scale_mult,
482  ptr_param<const Csr> mtx_mult,
484  ptr_param<const Csr> mtx_add,
485  ptr_param<Csr> out) const;
486 
487  private:
488  struct lookup_data;
489 
490  explicit multiply_add_reuse_info(std::unique_ptr<lookup_data> data);
491 
492  std::unique_ptr<lookup_data> internal;
493  };
494 
510  std::unique_ptr<Csr> multiply_add(
511  ptr_param<const Dense<value_type>> scale_mult,
512  ptr_param<const Csr> mtx_mult,
514  ptr_param<const Csr> mtx_add) const;
515 
537  std::pair<std::unique_ptr<Csr>, multiply_add_reuse_info> multiply_add_reuse(
538  ptr_param<const Dense<value_type>> scale_mult,
539  ptr_param<const Csr> mtx_mult,
541  ptr_param<const Csr> mtx_add) const;
542 
549  friend class Csr;
550 
551  public:
552  explicit scale_add_reuse_info();
553 
555 
557 
559 
560  scale_add_reuse_info& operator=(const scale_add_reuse_info&) = delete;
561 
562  scale_add_reuse_info& operator=(scale_add_reuse_info&&) noexcept;
563 
570  void update_values(ptr_param<const Dense<value_type>> scale1,
572  ptr_param<const Dense<value_type>> scale2,
573  ptr_param<const Csr> mtx2, ptr_param<Csr> out) const;
574 
575  private:
576  struct lookup_data;
577 
578  explicit scale_add_reuse_info(std::unique_ptr<lookup_data> data);
579 
580  std::unique_ptr<lookup_data> internal;
581  };
582 
597  std::unique_ptr<Csr> scale_add(
598  ptr_param<const Dense<value_type>> scale_this,
599  ptr_param<const Dense<value_type>> scale_other,
600  ptr_param<const Csr> mtx_other) const;
601 
623  std::pair<std::unique_ptr<Csr>, scale_add_reuse_info> add_scale_reuse(
624  ptr_param<const Dense<value_type>> scale_this,
625  ptr_param<const Dense<value_type>> scale_other,
626  ptr_param<const Csr> mtx_other) const;
627 
634  explicit permuting_reuse_info();
635 
637  explicit permuting_reuse_info(
638  std::unique_ptr<Permutation<index_type>> value_permutation);
639 
648  ptr_param<Csr> output) const;
649 
650  std::unique_ptr<Permutation<IndexType>> value_permutation;
651  };
652 
665  std::pair<std::unique_ptr<Csr>, permuting_reuse_info> transpose_reuse()
666  const;
667 
678  std::unique_ptr<Csr> permute(
679  ptr_param<const Permutation<index_type>> permutation,
681 
696  std::unique_ptr<Csr> permute(
697  ptr_param<const Permutation<index_type>> row_permutation,
698  ptr_param<const Permutation<index_type>> column_permutation,
699  bool invert = false) const;
700 
717  std::pair<std::unique_ptr<Csr>, permuting_reuse_info> permute_reuse(
718  ptr_param<const Permutation<index_type>> permutation,
720 
740  std::pair<std::unique_ptr<Csr>, permuting_reuse_info> permute_reuse(
741  ptr_param<const Permutation<index_type>> row_permutation,
742  ptr_param<const Permutation<index_type>> column_permutation,
743  bool invert = false) const;
744 
754  std::unique_ptr<Csr> scale_permute(
757 
770  std::unique_ptr<Csr> scale_permute(
772  row_permutation,
774  column_permutation,
775  bool invert = false) const;
776 
777  std::unique_ptr<LinOp> permute(
778  const array<IndexType>* permutation_indices) const override;
779 
780  std::unique_ptr<LinOp> inverse_permute(
781  const array<IndexType>* inverse_permutation_indices) const override;
782 
783  std::unique_ptr<LinOp> row_permute(
784  const array<IndexType>* permutation_indices) const override;
785 
786  std::unique_ptr<LinOp> column_permute(
787  const array<IndexType>* permutation_indices) const override;
788 
789  std::unique_ptr<LinOp> inverse_row_permute(
790  const array<IndexType>* inverse_permutation_indices) const override;
791 
792  std::unique_ptr<LinOp> inverse_column_permute(
793  const array<IndexType>* inverse_permutation_indices) const override;
794 
795  std::unique_ptr<Diagonal<ValueType>> extract_diagonal() const override;
796 
797  std::unique_ptr<absolute_type> compute_absolute() const override;
798 
799  void compute_absolute_inplace() override;
800 
804  void sort_by_column_index();
805 
806  /*
807  * Tests if all row entry pairs (value, col_idx) are sorted by column index
808  *
809  * @returns True if all row entry pairs (value, col_idx) are sorted by
810  * column index
811  */
812  bool is_sorted_by_column_index() const;
813 
819  value_type* get_values() noexcept { return values_.get_data(); }
820 
828  const value_type* get_const_values() const noexcept
829  {
830  return values_.get_const_data();
831  }
832 
837  std::unique_ptr<Dense<ValueType>> create_value_view();
838 
843  std::unique_ptr<const Dense<ValueType>> create_const_value_view() const;
844 
850  index_type* get_col_idxs() noexcept { return col_idxs_.get_data(); }
851 
859  const index_type* get_const_col_idxs() const noexcept
860  {
861  return col_idxs_.get_const_data();
862  }
863 
869  index_type* get_row_ptrs() noexcept { return row_ptrs_.get_data(); }
870 
878  const index_type* get_const_row_ptrs() const noexcept
879  {
880  return row_ptrs_.get_const_data();
881  }
882 
888  index_type* get_srow() noexcept { return srow_.get_data(); }
889 
897  const index_type* get_const_srow() const noexcept
898  {
899  return srow_.get_const_data();
900  }
901 
908  {
909  return srow_.get_size();
910  }
911 
918  {
919  return values_.get_size();
920  }
921 
927  csr::spmv_strategy get_strategy() const noexcept;
928 
934  void set_strategy(csr::spmv_strategy strategy)
935  {
936  strategy_ = strategy;
937  this->make_srow();
938  }
939 
947  {
948  auto exec = this->get_executor();
949  GKO_ASSERT_EQUAL_DIMENSIONS(alpha, dim<2>(1, 1));
950  this->scale_impl(make_temporary_clone(exec, alpha).get());
951  }
952 
960  {
961  auto exec = this->get_executor();
962  GKO_ASSERT_EQUAL_DIMENSIONS(alpha, dim<2>(1, 1));
963  this->inv_scale_impl(make_temporary_clone(exec, alpha).get());
964  }
965 
966  void validate_data() const override;
967 
976  static std::unique_ptr<Csr> create(std::shared_ptr<const Executor> exec,
977  csr::spmv_strategy strategy);
978 
990  static std::unique_ptr<Csr> create(
991  std::shared_ptr<const Executor> exec, const dim<2>& size = {},
992  size_type num_nonzeros = {},
993  csr::spmv_strategy strategy = csr::spmv_strategy::automatic);
994 
1015  static std::unique_ptr<Csr> create(
1016  std::shared_ptr<const Executor> exec, const dim<2>& size,
1017  array<value_type> values, array<index_type> col_idxs,
1018  array<index_type> row_ptrs,
1019  csr::spmv_strategy strategy = csr::spmv_strategy::automatic);
1020 
1025  template <typename InputValueType, typename InputColumnIndexType,
1026  typename InputRowPtrType>
1027  GKO_DEPRECATED(
1028  "explicitly construct the gko::array argument instead of passing "
1029  "initializer lists")
1030  static std::unique_ptr<Csr> create(
1031  std::shared_ptr<const Executor> exec, const dim<2>& size,
1032  std::initializer_list<InputValueType> values,
1033  std::initializer_list<InputColumnIndexType> col_idxs,
1034  std::initializer_list<InputRowPtrType> row_ptrs)
1035  {
1036  return create(exec, size, array<value_type>{exec, std::move(values)},
1037  array<index_type>{exec, std::move(col_idxs)},
1038  array<index_type>{exec, std::move(row_ptrs)});
1039  }
1040 
1057  static std::unique_ptr<const Csr> create_const(
1058  std::shared_ptr<const Executor> exec, const dim<2>& size,
1059  gko::detail::const_array_view<ValueType>&& values,
1060  gko::detail::const_array_view<IndexType>&& col_idxs,
1061  gko::detail::const_array_view<IndexType>&& row_ptrs,
1062  csr::spmv_strategy strategy = csr::spmv_strategy::automatic);
1063 
1064  GKO_BEGIN_DISABLE_DEPRECATION_WARNINGS
1065 
1070  [[deprecated("please use enum version")]] static std::unique_ptr<Csr>
1071  create(std::shared_ptr<const Executor> exec,
1072  std::shared_ptr<strategy_type> strategy);
1073 
1079  [[deprecated("please use enum version")]] static std::unique_ptr<Csr>
1080  create(std::shared_ptr<const Executor> exec, const dim<2>& size,
1081  array<value_type> values, array<index_type> col_idxs,
1082  array<index_type> row_ptrs, std::shared_ptr<strategy_type> strategy);
1083 
1090  [[deprecated("please use enum version")]] static std::unique_ptr<const Csr>
1091  create_const(std::shared_ptr<const Executor> exec, const dim<2>& size,
1092  gko::detail::const_array_view<ValueType>&& values,
1093  gko::detail::const_array_view<IndexType>&& col_idxs,
1094  gko::detail::const_array_view<IndexType>&& row_ptrs,
1095  std::shared_ptr<strategy_type> strategy);
1096 
1097  GKO_END_DISABLE_DEPRECATION_WARNINGS
1098 
1111  std::unique_ptr<Csr<ValueType, IndexType>> create_submatrix(
1112  const index_set<IndexType>& row_index_set,
1113  const index_set<IndexType>& column_index_set) const;
1114 
1126  std::unique_ptr<Csr<ValueType, IndexType>> create_submatrix(
1127  const span& row_span, const span& column_span) const;
1128 
1132  Csr& operator=(const Csr&);
1133 
1139  Csr& operator=(Csr&&);
1140 
1144  Csr(const Csr&);
1145 
1151  Csr(Csr&&);
1152 
1153 protected:
1154  Csr(std::shared_ptr<const Executor> exec, const dim<2>& size = {},
1155  size_type num_nonzeros = {},
1156  csr::spmv_strategy strategy = csr::spmv_strategy::automatic);
1157 
1158  Csr(std::shared_ptr<const Executor> exec, const dim<2>& size,
1159  array<value_type> values, array<index_type> col_idxs,
1160  array<index_type> row_ptrs,
1161  csr::spmv_strategy strategy = csr::spmv_strategy::automatic);
1162 
1163  void apply_impl(const LinOp* b, LinOp* x) const override;
1164 
1165  void apply_impl(const LinOp* alpha, const LinOp* b, const LinOp* beta,
1166  LinOp* x) const override;
1167 
1171  void make_srow();
1172 
1179  virtual void scale_impl(const LinOp* alpha);
1180 
1187  virtual void inv_scale_impl(const LinOp* alpha);
1188 
1196  csr::spmv_strategy get_actual_strategy() const noexcept;
1197 
1198 private:
1199  csr::spmv_strategy strategy_;
1200  array<value_type> values_;
1201  array<index_type> col_idxs_;
1202  array<index_type> row_ptrs_;
1203  array<index_type> srow_;
1204  index_type max_nnz_per_row_;
1205 
1206  void add_scaled_identity_impl(const LinOp* a, const LinOp* b) override;
1207 };
1208 
1209 
1210 } // namespace matrix
1211 } // namespace gko
1212 
1213 
1214 #endif // GKO_PUBLIC_CORE_MATRIX_CSR_HPP_
gko::matrix::Csr::automatical
Definition: csr.hpp:283
gko::matrix::Csr::get_const_srow
const index_type * get_const_srow() const noexcept
Returns the starting rows.
Definition: csr.hpp:897
gko::matrix::Csr::operator=
Csr & operator=(const Csr &)
Copy-assigns a Csr matrix.
gko::matrix::Csr::get_col_idxs
index_type * get_col_idxs() noexcept
Returns the column indexes of the matrix.
Definition: csr.hpp:850
gko::matrix::Fbcsr
Fixed-block compressed sparse row storage matrix format.
Definition: csr.hpp:47
gko::matrix::Csr
CSR is a matrix format which stores only the nonzero coefficients by compressing each row of the matr...
Definition: matrix.hpp:30
gko::matrix::Csr::get_const_row_ptrs
const index_type * get_const_row_ptrs() const noexcept
Returns the row pointers of the matrix.
Definition: csr.hpp:878
gko::matrix::Csr::validate_data
void validate_data() const override
Throws gko::InvalidData exception if we found the data inside the object does not fulfill certain pro...
gko::matrix::Csr::multiply
std::unique_ptr< Csr > multiply(ptr_param< const Csr > other) const
Computes the sparse matrix product this * other on the executor of this matrix.
gko::LinOp
Definition: lin_op.hpp:117
gko::matrix::Csr::add_scale_reuse
std::pair< std::unique_ptr< Csr >, scale_add_reuse_info > add_scale_reuse(ptr_param< const Dense< value_type >> scale_this, ptr_param< const Dense< value_type >> scale_other, ptr_param< const Csr > mtx_other) const
Computes the sparse matrix sum scale_this * this + scale_other * mtx_add on the executor of this matr...
gko::matrix::Csr::permute_reuse
std::pair< std::unique_ptr< Csr >, permuting_reuse_info > permute_reuse(ptr_param< const Permutation< index_type >> permutation, permute_mode mode=permute_mode::symmetric) const
Computes the operations necessary to propagate changed values from a matrix A to a permuted matrix.
gko::matrix::Dense
Dense is a matrix format which explicitly stores all values of the matrix.
Definition: dense_cache.hpp:28
gko::matrix::Csr::multiply_add_reuse_info
Class describing the internal lookup structures created by multiply_add_reuse to recompute a sparse m...
Definition: csr.hpp:456
gko::matrix::CsrBuilder
Definition: csr.hpp:50
gko::matrix::Csr::inverse_row_permute
std::unique_ptr< LinOp > inverse_row_permute(const array< IndexType > *inverse_permutation_indices) const override
Returns a LinOp representing the row permutation of the inverse permuted object.
gko::matrix::Csr::sparselib
Definition: csr.hpp:261
gko::DiagonalExtractable
The diagonal of a LinOp implementing this interface can be extracted.
Definition: lin_op.hpp:718
gko::matrix::SparsityCsr
SparsityCsr is a matrix format which stores only the sparsity pattern of a sparse matrix by compressi...
Definition: csr.hpp:41
gko::matrix::Csr::load_balance
Definition: csr.hpp:271
gko::matrix::Csr::multiply_reuse
std::pair< std::unique_ptr< Csr >, multiply_reuse_info > multiply_reuse(ptr_param< const Csr > other) const
Computes the sparse matrix product this * other on the executor of this matrix, and necessary data fo...
gko::log_propagation_mode::automatic
Events get reported to loggers attached to the triggering object and propagating loggers (Logger::nee...
gko::matrix::Csr::multiply_add_reuse_info::update_values
void update_values(ptr_param< const Csr > mtx, ptr_param< const Dense< value_type >> scale_mult, ptr_param< const Csr > mtx_mult, ptr_param< const Dense< value_type >> scale_add, ptr_param< const Csr > mtx_add, ptr_param< Csr > out) const
Recomputes the sparse matrix-matrix product out = scale_mult * mtx * mtx_mult + scale_add * mtx_add w...
gko::matrix::Csr::scale
void scale(ptr_param< const LinOp > alpha)
Scales the matrix with a scalar.
Definition: csr.hpp:946
gko::matrix::Csr::get_const_device_view
const_device_view get_const_device_view() const
Returns a non-owning const device view of this matrix.
gko::Transposable
Linear operators which support transposition should implement the Transposable interface.
Definition: lin_op.hpp:392
gko::matrix::Csr::column_permute
std::unique_ptr< LinOp > column_permute(const array< IndexType > *permutation_indices) const override
Returns a LinOp representing the column permutation of the Permutable object.
gko::matrix::ScaledPermutation
ScaledPermutation is a matrix combining a permutation with scaling factors.
Definition: scaled_permutation.hpp:35
gko::size_type
std::size_t size_type
Integral type used for allocation quantities.
Definition: types.hpp:101
gko::matrix::Csr::get_srow
index_type * get_srow() noexcept
Returns the starting rows.
Definition: csr.hpp:888
gko::matrix::Csr::transpose_reuse
std::pair< std::unique_ptr< Csr >, permuting_reuse_info > transpose_reuse() const
Computes the necessary data to update a transposed matrix from its original matrix.
gko::matrix::Permutation
Permutation is a matrix format that represents a permutation matrix, i.e.
Definition: permutation.hpp:110
gko::matrix::Csr::permuting_reuse_info::permuting_reuse_info
permuting_reuse_info()
Creates an empty reuse info.
gko::matrix::Csr::row_permute
std::unique_ptr< LinOp > row_permute(const array< IndexType > *permutation_indices) const override
Returns a LinOp representing the row permutation of the Permutable object.
gko::Permutable
Linear operators which support permutation should implement the Permutable interface.
Definition: lin_op.hpp:443
gko::matrix::Csr::transpose
std::unique_ptr< LinOp > transpose() const override
Returns a LinOp representing the transpose of the Transposable object.
gko
The Ginkgo namespace.
Definition: abstract_factory.hpp:19
gko::matrix::Csr::create
static std::unique_ptr< Csr > create(std::shared_ptr< const Executor > exec, csr::spmv_strategy strategy)
Creates an uninitialized CSR matrix of the specified size.
gko::matrix::Csr::inv_scale
void inv_scale(ptr_param< const LinOp > alpha)
Scales the matrix with the inverse of a scalar.
Definition: csr.hpp:959
gko::matrix::Csr::extract_diagonal
std::unique_ptr< Diagonal< ValueType > > extract_diagonal() const override
Extracts the diagonal entries of the matrix into a vector.
gko::array< IndexType >
gko::matrix::Csr::multiply_add
std::unique_ptr< Csr > multiply_add(ptr_param< const Dense< value_type >> scale_mult, ptr_param< const Csr > mtx_mult, ptr_param< const Dense< value_type >> scale_add, ptr_param< const Csr > mtx_add) const
Computes the sparse matrix product scale_mult * this * mtx_mult + scale_add * mtx_add on the executor...
gko::matrix::Csr::cusparse
Definition: csr.hpp:251
gko::matrix::Csr::inverse_permute
std::unique_ptr< LinOp > inverse_permute(const array< IndexType > *inverse_permutation_indices) const override
Returns a LinOp representing the symmetric inverse row and column permutation of the Permutable objec...
gko::matrix::Csr::get_row_ptrs
index_type * get_row_ptrs() noexcept
Returns the row pointers of the matrix.
Definition: csr.hpp:869
gko::span
A span is a lightweight structure used to create sub-ranges from other ranges.
Definition: range.hpp:45
gko::dim< 2 >
gko::matrix_data
This structure is used as an intermediate data type to store a sparse matrix.
Definition: matrix_data.hpp:126
gko::matrix::Csr::merge_path
Definition: csr.hpp:241
gko::matrix::Csr::permute
std::unique_ptr< Csr > permute(ptr_param< const Permutation< index_type >> permutation, permute_mode mode=permute_mode::symmetric) const
Creates a permuted copy of this matrix with the given permutation .
gko::index_set
An index set class represents an ordered set of intervals.
Definition: index_set.hpp:55
gko::matrix::Csr::set_strategy
void set_strategy(csr::spmv_strategy strategy)
Set the strategy.
Definition: csr.hpp:934
gko::ptr_param
This class is used for function parameters in the place of raw pointers.
Definition: utils_helper.hpp:43
gko::array::get_data
value_type * get_data() noexcept
Returns a pointer to the block of memory used to store the elements of the array.
Definition: array.hpp:686
gko::ReadableFromMatrixData
A LinOp implementing this interface can read its data from a matrix_data structure.
Definition: lin_op.hpp:564
gko::matrix::Csr::conj_transpose
std::unique_ptr< LinOp > conj_transpose() const override
Returns a LinOp representing the conjugate transpose of the Transposable object.
gko::WritableToMatrixData
A LinOp implementing this interface can write its data to a matrix_data structure.
Definition: lin_op.hpp:619
gko::matrix::permute_mode::symmetric
The rows and columns will be permuted.
gko::matrix::Csr::get_const_values
const value_type * get_const_values() const noexcept
Returns the values of the matrix.
Definition: csr.hpp:828
gko::stop::mode
mode
The mode for the residual norm criterion.
Definition: residual_norm.hpp:37
gko::matrix::Csr::get_num_stored_elements
size_type get_num_stored_elements() const noexcept
Returns the number of elements explicitly stored in the matrix.
Definition: csr.hpp:917
gko::matrix::Csr::create_submatrix
std::unique_ptr< Csr< ValueType, IndexType > > create_submatrix(const index_set< IndexType > &row_index_set, const index_set< IndexType > &column_index_set) const
Creates a submatrix from this Csr matrix given row and column index_set objects.
gko::ScaledIdentityAddable
Adds the operation M <- a I + b M for matrix M, identity operator I and scalars a and b,...
Definition: lin_op.hpp:793
gko::matrix::Csr::permuting_reuse_info
A struct describing a transformation of the matrix that reorders the values of the matrix into the tr...
Definition: csr.hpp:632
gko::next_precision
typename detail::find_precision_impl< T, step >::type next_precision
Obtains the next move type of T in the singly-linked precision corresponding bfloat16/half.
Definition: math.hpp:465
gko::matrix::Csr::sort_by_column_index
void sort_by_column_index()
Sorts all (value, col_idx) pairs in each row by column index.
gko::matrix::Csr::scale_add
std::unique_ptr< Csr > scale_add(ptr_param< const Dense< value_type >> scale_this, ptr_param< const Dense< value_type >> scale_other, ptr_param< const Csr > mtx_other) const
Computes the sparse matrix sum scale_this * this + scale_other * mtx_add on the executor of this matr...
gko::previous_precision
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:472
gko::matrix::Csr::classical
Definition: csr.hpp:231
gko::matrix::Csr::get_strategy
csr::spmv_strategy get_strategy() const noexcept
Returns the strategy.
gko::matrix::Csr::permuting_reuse_info::update_values
void update_values(ptr_param< const Csr > input, ptr_param< Csr > output) const
Propagates the values from an input matrix to the transformed matrix.
gko::EnableCloneable
This mixin is used to enable a default Cloneable::clone() implementation and similar for objects that...
Definition: polymorphic_object.hpp:376
gko::matrix::Csr::scale_add_reuse_info::update_values
void update_values(ptr_param< const Dense< value_type >> scale1, ptr_param< const Csr > mtx1, ptr_param< const Dense< value_type >> scale2, ptr_param< const Csr > mtx2, ptr_param< Csr > out) const
Recomputes the sparse matrix-matrix sum out = scale1 * mtx1 + scale2 * mtx2 when only the values of m...
gko::matrix::Csr::get_device_view
device_view get_device_view()
Returns a non-owning device view of this matrix.
gko::matrix::Ell
ELL is a matrix format where stride with explicit zeros is used such that all rows have the same numb...
Definition: csr.hpp:32
gko::matrix::Csr::create_const_value_view
std::unique_ptr< const Dense< ValueType > > create_const_value_view() const
Creates a const Dense view of the value array of this matrix as a column vector of dimensions nnz x 1...
gko::ConvertibleTo
ConvertibleTo interface is used to mark that the implementer can be converted to the object of Result...
Definition: polymorphic_object.hpp:147
gko::matrix::Csr::compute_absolute
std::unique_ptr< absolute_type > compute_absolute() const override
Gets the AbsoluteLinOp.
gko::matrix::Csr::strategy_type
Definition: csr.hpp:221
gko::make_temporary_clone
detail::temporary_clone< detail::pointee< Ptr > > make_temporary_clone(std::shared_ptr< const Executor > exec, Ptr &&ptr)
Creates a temporary_clone.
Definition: temporary_clone.hpp:208
gko::matrix::Csr::multiply_add_reuse
std::pair< std::unique_ptr< Csr >, multiply_add_reuse_info > multiply_add_reuse(ptr_param< const Dense< value_type >> scale_mult, ptr_param< const Csr > mtx_mult, ptr_param< const Dense< value_type >> scale_add, ptr_param< const Csr > mtx_add) const
Computes the sparse matrix product scale_mult * this * mtx_mult + scale_add * mtx_add on the executor...
gko::Executor
The first step in using the Ginkgo library consists of creating an executor.
Definition: executor.hpp:615
gko::matrix::Hybrid
HYBRID is a matrix format which splits the matrix into ELLPACK and COO format.
Definition: coo.hpp:32
gko::array::get_const_data
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:695
gko::matrix::Csr::write
void write(mat_data &data) const override
Writes a matrix to a matrix_data structure.
gko::matrix::permute_mode
permute_mode
Specifies how a permutation will be applied to a matrix.
Definition: permutation.hpp:42
gko::matrix::Csr::multiply_reuse_info::update_values
void update_values(ptr_param< const Csr > mtx1, ptr_param< const Csr > mtx2, ptr_param< Csr > out) const
Recomputes the sparse matrix-matrix product out = mtx1 * mtx2 when only the values of mtx1 and mtx2 c...
gko::matrix::Sellp
SELL-P is a matrix format similar to ELL format.
Definition: csr.hpp:38
gko::matrix::Csr::get_const_col_idxs
const index_type * get_const_col_idxs() const noexcept
Returns the column indexes of the matrix.
Definition: csr.hpp:859
gko::EnableAbsoluteComputation
The EnableAbsoluteComputation mixin provides the default implementations of compute_absolute_linop an...
Definition: lin_op.hpp:769
gko::matrix::Csr::create_const
static std::unique_ptr< const Csr > create_const(std::shared_ptr< const Executor > exec, const dim< 2 > &size, gko::detail::const_array_view< ValueType > &&values, gko::detail::const_array_view< IndexType > &&col_idxs, gko::detail::const_array_view< IndexType > &&row_ptrs, csr::spmv_strategy strategy=csr::spmv_strategy::automatic)
Creates a constant (immutable) Csr matrix from a set of constant arrays.
gko::matrix::Csr::inverse_column_permute
std::unique_ptr< LinOp > inverse_column_permute(const array< IndexType > *inverse_permutation_indices) const override
Returns a LinOp representing the row permutation of the inverse permuted object.
gko::matrix::Csr::Csr
Csr(const Csr &)
Copy-constructs a Csr matrix.
gko::PolymorphicObject::get_executor
std::shared_ptr< const Executor > get_executor() const noexcept
Returns the Executor of the object.
Definition: polymorphic_object.hpp:69
gko::array::get_size
size_type get_size() const noexcept
Returns the number of elements in the array.
Definition: array.hpp:669
gko::remove_complex
typename detail::remove_complex_s< T >::type remove_complex
Obtain the type which removed the complex of complex/scalar type or the template parameter of class b...
Definition: math.hpp:263
gko::matrix::Csr::compute_absolute_inplace
void compute_absolute_inplace() override
Compute absolute inplace on each element.
gko::matrix::Csr::scale_permute
std::unique_ptr< Csr > scale_permute(ptr_param< const ScaledPermutation< value_type, index_type >> permutation, permute_mode=permute_mode::symmetric) const
Creates a scaled and permuted copy of this matrix.
gko::device_matrix_data
This type is a device-side equivalent to matrix_data.
Definition: device_matrix_data.hpp:36
gko::matrix::Csr::read
void read(const mat_data &data) override
Reads a matrix from a matrix_data structure.
gko::matrix::view::csr
Non-owning view of a matrix::Csr to be used inside device kernels.
Definition: device_views.hpp:98
gko::matrix::Csr::create_value_view
std::unique_ptr< Dense< ValueType > > create_value_view()
Creates a Dense view of the value array of this matrix as a column vector of dimensions nnz x 1.
gko::matrix::Csr::get_values
value_type * get_values() noexcept
Returns the values of the matrix.
Definition: csr.hpp:819
gko::matrix::Csr::multiply_reuse_info
Class describing the internal lookup structures created by multiply_reuse(const Csr*) to recompute a ...
Definition: csr.hpp:388
gko::matrix::Csr::get_num_srow_elements
size_type get_num_srow_elements() const noexcept
Returns the number of the srow stored elements (involved warps)
Definition: csr.hpp:907
gko::matrix::Csr::scale_add_reuse_info
Class describing the internal lookup structures created by scale_add_reuse to recompute a sparse matr...
Definition: csr.hpp:548
gko::LinOp::LinOp
LinOp(const LinOp &)=default
Copy-constructs a LinOp.
gko::to_complex
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:282
gko::matrix::Coo
COO stores a matrix in the coordinate matrix format.
Definition: coo.hpp:49