Ginkgo  Generated from pipelines/2662685947 branch based on develop. Ginkgo version 2.0.0
A numerical linear algebra library targeting many-core architectures
reordering_base.hpp
1 // SPDX-FileCopyrightText: 2017 - 2026 The Ginkgo authors
2 //
3 // SPDX-License-Identifier: BSD-3-Clause
4 
5 #ifndef GKO_PUBLIC_CORE_REORDER_REORDERING_BASE_HPP_
6 #define GKO_PUBLIC_CORE_REORDER_REORDERING_BASE_HPP_
7 
8 
9 #include <memory>
10 
11 #include <ginkgo/core/base/abstract_factory.hpp>
12 #include <ginkgo/core/base/array.hpp>
13 #include <ginkgo/core/base/executor.hpp>
14 #include <ginkgo/core/base/lin_op.hpp>
15 #include <ginkgo/core/base/polymorphic_object.hpp>
16 #include <ginkgo/core/base/utils.hpp>
17 
18 
19 namespace gko {
25 namespace reorder {
26 
27 
33 template <typename IndexType = int32>
35 public:
36  using index_type = IndexType;
37 
38  const array<index_type>& get_permutation_array() const
39  {
40  return permutation_array_;
41  }
42 
43 protected:
44  explicit ReorderingBase(std::shared_ptr<const gko::Executor> exec)
45  : PolymorphicObject(exec), permutation_array_{exec}
46  {}
47 
48  void set_permutation_array(array<index_type>& permutation_array)
49  {
50  permutation_array_ = permutation_array;
51  }
52 
53 private:
54  array<index_type> permutation_array_;
55 };
56 
57 
64  std::shared_ptr<LinOp> system_matrix;
65 
66  ReorderingBaseArgs(std::shared_ptr<LinOp> system_matrix)
67  : system_matrix{system_matrix}
68  {}
69 };
70 
71 
75 template <typename IndexType = int32>
78 
79 
95 template <typename ConcreteFactory, typename ConcreteReorderingBase,
96  typename ParametersType, typename IndexType = int32,
97  typename PolymorphicBase = ReorderingBaseFactory<IndexType>>
99  EnableDefaultFactory<ConcreteFactory, ConcreteReorderingBase,
100  ParametersType, PolymorphicBase>;
101 
102 
121 #define GKO_ENABLE_REORDERING_BASE_FACTORY(_reordering_base, _parameters_name, \
122  _factory_name) \
123 public: \
124  const _parameters_name##_type& get_##_parameters_name() const \
125  { \
126  return _parameters_name##_; \
127  } \
128  \
129  class _factory_name \
130  : public ::gko::reorder::EnableDefaultReorderingBaseFactory< \
131  _factory_name, _reordering_base, _parameters_name##_type, \
132  IndexType> { \
133  friend class ::gko::enable_parameters_type<_parameters_name##_type, \
134  _factory_name>; \
135  explicit _factory_name(std::shared_ptr<const ::gko::Executor> exec) \
136  : ::gko::reorder::EnableDefaultReorderingBaseFactory< \
137  _factory_name, _reordering_base, _parameters_name##_type, \
138  IndexType>(std::move(exec)) \
139  {} \
140  explicit _factory_name(std::shared_ptr<const ::gko::Executor> exec, \
141  const _parameters_name##_type& parameters) \
142  : ::gko::reorder::EnableDefaultReorderingBaseFactory< \
143  _factory_name, _reordering_base, _parameters_name##_type, \
144  IndexType>(std::move(exec), parameters) \
145  {} \
146  }; \
147  friend ::gko::reorder::EnableDefaultReorderingBaseFactory< \
148  _factory_name, _reordering_base, _parameters_name##_type, IndexType>; \
149  \
150 private: \
151  _parameters_name##_type _parameters_name##_; \
152  \
153 public: \
154  static_assert(true, \
155  "This assert is used to counter the false positive extra " \
156  "semi-colon warnings")
157 
158 
159 } // namespace reorder
160 } // namespace gko
161 
162 
163 #endif // GKO_PUBLIC_CORE_REORDER_REORDERING_BASE_HPP_
gko::AbstractFactory
The AbstractFactory is a generic interface template that enables easy implementation of the abstract ...
Definition: abstract_factory.hpp:45
gko::PolymorphicObject
A PolymorphicObject is the abstract base for all "heavy" objects in Ginkgo that behave polymorphicall...
Definition: polymorphic_object.hpp:46
gko::EnableDefaultFactory
This mixin provides a default implementation of a concrete factory.
Definition: abstract_factory.hpp:122
gko
The Ginkgo namespace.
Definition: abstract_factory.hpp:20
gko::array< index_type >
gko::reorder::ReorderingBase
The ReorderingBase class is a base class for all the reordering algorithms.
Definition: reordering_base.hpp:34
gko::int32
std::int32_t int32
32-bit signed integral type.
Definition: types.hpp:107
gko::reorder::ReorderingBaseArgs
This struct is used to pass parameters to the EnableDefaultReorderingBaseFactory::generate() method.
Definition: reordering_base.hpp:63