5#ifndef GKO_PUBLIC_CORE_BASE_BATCH_LIN_OP_HPP_
6#define GKO_PUBLIC_CORE_BASE_BATCH_LIN_OP_HPP_
13#include <ginkgo/core/base/abstract_factory.hpp>
14#include <ginkgo/core/base/batch_multi_vector.hpp>
15#include <ginkgo/core/base/dim.hpp>
16#include <ginkgo/core/base/exception_helpers.hpp>
17#include <ginkgo/core/base/math.hpp>
18#include <ginkgo/core/base/matrix_assembly_data.hpp>
19#include <ginkgo/core/base/matrix_data.hpp>
20#include <ginkgo/core/base/polymorphic_object.hpp>
21#include <ginkgo/core/base/types.hpp>
22#include <ginkgo/core/base/utils.hpp>
23#include <ginkgo/core/log/logger.hpp>
90 template <
typename ValueType>
107 template <
typename ValueType>
156 ?
batch_dim<2>(num_batch_items, common_size)
161 batch_dim<2> size_{};
195 :
public AbstractFactory<BatchLinOp, std::shared_ptr<const BatchLinOp>> {
198 std::shared_ptr<const BatchLinOp>>::AbstractFactory;
200 std::unique_ptr<BatchLinOp> generate(
201 std::shared_ptr<const BatchLinOp> input)
const
204 gko::log::Logger::batch_linop_factory_generate_started>(
206 const auto exec = this->get_executor();
207 std::unique_ptr<BatchLinOp> generated;
208 if (input->get_executor() == exec) {
209 generated = this->AbstractFactory::generate(input);
212 this->AbstractFactory::generate(
gko::clone(exec, input));
215 gko::log::Logger::batch_linop_factory_generate_completed>(
216 this, input.get(), generated.get());
249template <
typename ConcreteBatchLinOp,
typename PolymorphicBase = BatchLinOp>
255 PolymorphicBase>::EnablePolymorphicObject;
275template <
typename ConcreteFactory,
typename ConcreteBatchLinOp,
358#define GKO_ENABLE_BATCH_LIN_OP_FACTORY(_batch_lin_op, _parameters_name, \
361 const _parameters_name##_type& get_##_parameters_name() const \
363 return _parameters_name##_; \
366 class _factory_name \
367 : public ::gko::batch::EnableDefaultBatchLinOpFactory< \
368 _factory_name, _batch_lin_op, _parameters_name##_type> { \
369 friend class ::gko::EnablePolymorphicObject< \
370 _factory_name, ::gko::batch::BatchLinOpFactory>; \
371 friend class ::gko::enable_parameters_type<_parameters_name##_type, \
373 explicit _factory_name(std::shared_ptr<const ::gko::Executor> exec) \
374 : ::gko::batch::EnableDefaultBatchLinOpFactory< \
375 _factory_name, _batch_lin_op, _parameters_name##_type>( \
378 explicit _factory_name(std::shared_ptr<const ::gko::Executor> exec, \
379 const _parameters_name##_type& parameters) \
380 : ::gko::batch::EnableDefaultBatchLinOpFactory< \
381 _factory_name, _batch_lin_op, _parameters_name##_type>( \
382 std::move(exec), parameters) \
385 friend ::gko::batch::EnableDefaultBatchLinOpFactory< \
386 _factory_name, _batch_lin_op, _parameters_name##_type>; \
390 _parameters_name##_type _parameters_name##_; \
393 static_assert(true, \
394 "This assert is used to counter the false positive extra " \
395 "semi-colon warnings")
Definition abstract_factory.hpp:47
Definition polymorphic_object.hpp:354
Definition abstract_factory.hpp:126
Definition polymorphic_object.hpp:743
Definition polymorphic_object.hpp:668
Definition batch_lin_op.hpp:195
Definition batch_lin_op.hpp:59
const batch_dim< 2 > & get_size() const noexcept
Definition batch_lin_op.hpp:83
BatchLinOp(std::shared_ptr< const Executor > exec, const size_type num_batch_items=0, const dim< 2 > &common_size=dim< 2 >{})
Definition batch_lin_op.hpp:151
void set_size(const batch_dim< 2 > &size)
Definition batch_lin_op.hpp:130
void validate_application_parameters(const MultiVector< ValueType > *b, MultiVector< ValueType > *x) const
Definition batch_lin_op.hpp:91
void validate_application_parameters(const MultiVector< ValueType > *alpha, const MultiVector< ValueType > *b, const MultiVector< ValueType > *beta, MultiVector< ValueType > *x) const
Definition batch_lin_op.hpp:108
dim< 2 > get_common_size() const
Definition batch_lin_op.hpp:76
size_type get_num_batch_items() const noexcept
Definition batch_lin_op.hpp:66
BatchLinOp(std::shared_ptr< const Executor > exec, const batch_dim< 2 > &batch_size)
Definition batch_lin_op.hpp:138
Definition batch_lin_op.hpp:252
Definition batch_multi_vector.hpp:59
dim< 2 > get_common_size() const
Definition batch_multi_vector.hpp:144
size_type get_num_batch_items() const
Definition batch_multi_vector.hpp:134
The Ginkgo namespace.
Definition abstract_factory.hpp:20
std::size_t size_type
Definition types.hpp:89
detail::cloned_type< Pointer > clone(const Pointer &p)
Definition utils_helper.hpp:173
Definition batch_dim.hpp:27
dim< dimensionality, dimension_type > get_common_size() const
Definition batch_dim.hpp:43
size_type get_num_batch_items() const
Definition batch_dim.hpp:36