![]() |
Ginkgo Generated from branch based on main. Ginkgo version 1.10.0
A numerical linear algebra library targeting many-core architectures
|
MultiVector stores multiple vectors in a batched fashion and is useful for batched operations. More...
#include <ginkgo/core/base/batch_multi_vector.hpp>
Public Types | |
using | value_type = ValueType |
using | index_type = int32 |
using | unbatch_type = gko::matrix::Dense<ValueType> |
using | absolute_type = remove_complex<MultiVector<ValueType>> |
using | complex_type = to_complex<MultiVector<ValueType>> |
Public Types inherited from gko::EnablePolymorphicAssignment< MultiVector< default_precision > > | |
using | result_type |
Public Types inherited from gko::ConvertibleTo< MultiVector< default_precision > > | |
using | result_type |
Public Types inherited from gko::ConvertibleTo< MultiVector< next_precision< default_precision > > > | |
using | result_type |
Public Member Functions | |
void | convert_to (MultiVector< next_precision< ValueType > > *result) const override |
void | move_to (MultiVector< next_precision< ValueType > > *result) override |
std::unique_ptr< unbatch_type > | create_view_for_item (size_type item_id) |
Creates a mutable view (of matrix::Dense type) of one item of the Batch MultiVector object. | |
std::unique_ptr< const unbatch_type > | create_const_view_for_item (size_type item_id) const |
Creates a mutable view (of matrix::Dense type) of one item of the Batch MultiVector object. | |
batch_dim< 2 > | get_size () const |
Returns the batch size. | |
size_type | get_num_batch_items () const |
Returns the number of batch items. | |
dim< 2 > | get_common_size () const |
Returns the common size of the batch items. | |
value_type * | get_values () noexcept |
Returns a pointer to the array of values of the multi-vector. | |
const value_type * | get_const_values () const noexcept |
Returns a pointer to the array of values of the multi-vector. | |
value_type * | get_values_for_item (size_type batch_id) noexcept |
Returns a pointer to the array of values of the multi-vector for a specific batch item. | |
const value_type * | get_const_values_for_item (size_type batch_id) const noexcept |
Returns a pointer to the array of values of the multi-vector for a specific batch item. | |
size_type | get_num_stored_elements () const noexcept |
Returns the number of elements explicitly stored in the batch matrix, cumulative across all the batch items. | |
size_type | get_cumulative_offset (size_type batch_id) const |
Get the cumulative storage size offset. | |
value_type & | at (size_type batch_id, size_type row, size_type col) |
Returns a single element for a particular batch item. | |
value_type | at (size_type batch_id, size_type row, size_type col) const |
Returns a single element for a particular batch item. | |
ValueType & | at (size_type batch_id, size_type idx) noexcept |
Returns a single element for a particular batch item. | |
ValueType | at (size_type batch_id, size_type idx) const noexcept |
Returns a single element for a particular batch item. | |
void | scale (ptr_param< const MultiVector< ValueType > > alpha) |
Scales the vector with a scalar (aka: BLAS scal). | |
void | add_scaled (ptr_param< const MultiVector< ValueType > > alpha, ptr_param< const MultiVector< ValueType > > b) |
Adds b scaled by alpha to the vector (aka: BLAS axpy). | |
void | compute_dot (ptr_param< const MultiVector< ValueType > > b, ptr_param< MultiVector< ValueType > > result) const |
Computes the column-wise dot product of each multi-vector in this batch and its corresponding entry in b. | |
void | compute_conj_dot (ptr_param< const MultiVector< ValueType > > b, ptr_param< MultiVector< ValueType > > result) const |
Computes the column-wise conjugate dot product of each multi-vector in this batch and its corresponding entry in b. | |
void | compute_norm2 (ptr_param< MultiVector< remove_complex< ValueType > > > result) const |
Computes the Euclidean (L^2) norm of each multi-vector in this batch. | |
void | fill (ValueType value) |
Fills the input MultiVector with a given value. | |
Public Member Functions inherited from gko::EnableAbstractPolymorphicObject< MultiVector< default_precision >, PolymorphicObject > | |
std::unique_ptr< MultiVector< default_precision > > | create_default (std::shared_ptr< const Executor > exec) const |
std::unique_ptr< MultiVector< default_precision > > | clone (std::shared_ptr< const Executor > exec) const |
MultiVector< default_precision > * | copy_from (const PolymorphicObject *other) |
MultiVector< default_precision > * | move_from (ptr_param< PolymorphicObject > other) |
MultiVector< default_precision > * | clear () |
Public Member Functions inherited from gko::PolymorphicObject | |
PolymorphicObject & | operator= (const PolymorphicObject &) |
std::unique_ptr< PolymorphicObject > | create_default (std::shared_ptr< const Executor > exec) const |
Creates a new "default" object of the same dynamic type as this object. | |
std::unique_ptr< PolymorphicObject > | create_default () const |
Creates a new "default" object of the same dynamic type as this object. | |
std::unique_ptr< PolymorphicObject > | clone (std::shared_ptr< const Executor > exec) const |
Creates a clone of the object. | |
std::unique_ptr< PolymorphicObject > | clone () const |
Creates a clone of the object. | |
PolymorphicObject * | copy_from (const PolymorphicObject *other) |
Copies another object into this object. | |
template<typename Derived, typename Deleter> | |
std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, PolymorphicObject > * | copy_from (std::unique_ptr< Derived, Deleter > &&other) |
Moves another object into this object. | |
template<typename Derived, typename Deleter> | |
std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, PolymorphicObject > * | copy_from (const std::unique_ptr< Derived, Deleter > &other) |
Copies another object into this object. | |
PolymorphicObject * | copy_from (const std::shared_ptr< const PolymorphicObject > &other) |
Copies another object into this object. | |
PolymorphicObject * | move_from (ptr_param< PolymorphicObject > other) |
Moves another object into this object. | |
PolymorphicObject * | clear () |
Transforms the object into its default state. | |
std::shared_ptr< const Executor > | get_executor () const noexcept |
Returns the Executor of the object. | |
Public Member Functions inherited from gko::log::EnableLogging< PolymorphicObject > | |
void | add_logger (std::shared_ptr< const Logger > logger) override |
Adds a new logger to the list of subscribed loggers. | |
void | remove_logger (const Logger *logger) override |
Removes a logger from the list of subscribed loggers. | |
const std::vector< std::shared_ptr< const Logger > > & | get_loggers () const override |
Returns the vector containing all loggers registered at this object. | |
void | clear_loggers () override |
Remove all loggers registered at this object. | |
Public Member Functions inherited from gko::log::Loggable | |
void | remove_logger (ptr_param< const Logger > logger) |
Public Member Functions inherited from gko::EnablePolymorphicAssignment< MultiVector< default_precision > > | |
void | convert_to (result_type *result) const override |
void | move_to (result_type *result) override |
Public Member Functions inherited from gko::ConvertibleTo< MultiVector< next_precision< default_precision > > > | |
virtual void | convert_to (result_type *result) const=0 |
Converts the implementer to an object of type result_type. | |
virtual void | move_to (result_type *result)=0 |
Converts the implementer to an object of type result_type by moving data from this object. |
Static Public Member Functions | |
static std::unique_ptr< MultiVector > | create_with_config_of (ptr_param< const MultiVector > other) |
Creates a MultiVector with the configuration of another MultiVector. | |
static std::unique_ptr< MultiVector > | create (std::shared_ptr< const Executor > exec, const batch_dim< 2 > &size=batch_dim< 2 >{}) |
Creates an uninitialized multi-vector of the specified size. | |
static std::unique_ptr< MultiVector > | create (std::shared_ptr< const Executor > exec, const batch_dim< 2 > &size, array< value_type > values) |
Creates a MultiVector from an already allocated (and initialized) array. | |
template<typename InputValueType> | |
static std::unique_ptr< MultiVector > | create (std::shared_ptr< const Executor > exec, const batch_dim< 2 > &size, std::initializer_list< InputValueType > values) |
create(std::shared_ptr<constExecutor>, const batch_dim<2>&, array<value_type>) | |
static std::unique_ptr< const MultiVector > | create_const (std::shared_ptr< const Executor > exec, const batch_dim< 2 > &sizes, gko::detail::const_array_view< ValueType > &&values) |
Creates a constant (immutable) batch multi-vector from a constant array. |
Friends | |
class | EnablePolymorphicObject< MultiVector > |
class | MultiVector< to_complex< ValueType > > |
class | MultiVector< previous_precision< ValueType > > |
MultiVector stores multiple vectors in a batched fashion and is useful for batched operations.
For example, if you want to store two batch items with multi-vectors of size (3 x 2) given below:
[1 2 ; 3 4 1 2 ; 3 4 1 2 ; 3 4]
In memory, they would be stored as a single array: [1 2 1 2 1 2 3 4 3 4 3 4].
Access functions @at can help access individual item if necessary.
The values of the different batch items are stored consecutively and in each batch item, the multi-vectors are stored in a row-major fashion.
ValueType | precision of multi-vector elements |
void gko::batch::MultiVector< ValueType >::add_scaled | ( | ptr_param< const MultiVector< ValueType > > | alpha, |
ptr_param< const MultiVector< ValueType > > | b ) |
Adds b scaled by alpha to the vector (aka: BLAS axpy).
alpha | the scalar |
b | a multi-vector of the same dimension as this |
|
inlinenoexcept |
Returns a single element for a particular batch item.
batch_id | the batch item index to be queried |
row | the row of the requested element |
col | the column of the requested element |
|
inlinenoexcept |
Returns a single element for a particular batch item.
Useful for iterating across all elements of the vector. However, it is less efficient than the two-parameter variant of this method.
batch_id | the batch item index to be queried |
idx | a linear index of the requested element |
|
inline |
Returns a single element for a particular batch item.
batch_id | the batch item index to be queried |
row | the row of the requested element |
col | the column of the requested element |
References get_num_batch_items().
|
inline |
Returns a single element for a particular batch item.
batch_id | the batch item index to be queried |
row | the row of the requested element |
col | the column of the requested element |
References get_num_batch_items().
void gko::batch::MultiVector< ValueType >::compute_conj_dot | ( | ptr_param< const MultiVector< ValueType > > | b, |
ptr_param< MultiVector< ValueType > > | result ) const |
Computes the column-wise conjugate dot product of each multi-vector in this batch and its corresponding entry in b.
If the vector has complex value_type, then the conjugate of this is taken.
b | a MultiVector of same dimension as this |
result | a MultiVector row vector, used to store the dot product (the number of column in the vector must match the number of columns of this) |
void gko::batch::MultiVector< ValueType >::compute_dot | ( | ptr_param< const MultiVector< ValueType > > | b, |
ptr_param< MultiVector< ValueType > > | result ) const |
Computes the column-wise dot product of each multi-vector in this batch and its corresponding entry in b.
b | a MultiVector of same dimension as this |
result | a MultiVector row vector, used to store the dot product |
void gko::batch::MultiVector< ValueType >::compute_norm2 | ( | ptr_param< MultiVector< remove_complex< ValueType > > > | result | ) | const |
Computes the Euclidean (L^2) norm of each multi-vector in this batch.
result | a MultiVector, used to store the norm (the number of columns in the vector must match the number of columns of this) |
|
static |
Creates a MultiVector from an already allocated (and initialized) array.
exec | Executor associated to the vector |
size | sizes of the batch matrices in a batch_dim object |
values | array of values |
|
inlinestatic |
create(std::shared_ptr<constExecutor>, const batch_dim<2>&, array<value_type>)
create(std::shared_ptr<constExecutor>, const batch_dim<2>&, array<value_type>)
References create().
|
static |
|
static |
Creates a constant (immutable) batch multi-vector from a constant array.
exec | the executor to create the vector on |
size | the dimensions of the vector |
values | the value array of the vector |
stride | the row-stride of the vector |
std::unique_ptr< const unbatch_type > gko::batch::MultiVector< ValueType >::create_const_view_for_item | ( | size_type | item_id | ) | const |
Creates a mutable view (of matrix::Dense type) of one item of the Batch MultiVector object.
Does not perform any deep copies, but only returns a view of the data.
item_id | The index of the batch item |
std::unique_ptr< unbatch_type > gko::batch::MultiVector< ValueType >::create_view_for_item | ( | size_type | item_id | ) |
Creates a mutable view (of matrix::Dense type) of one item of the Batch MultiVector object.
Does not perform any deep copies, but only returns a view of the data.
item_id | The index of the batch item |
|
static |
Creates a MultiVector with the configuration of another MultiVector.
other | The other multi-vector whose configuration needs to copied. |
void gko::batch::MultiVector< ValueType >::fill | ( | ValueType | value | ) |
Fills the input MultiVector with a given value.
value | the value to be filled |
|
inline |
Returns the common size of the batch items.
Referenced by get_cumulative_offset(), gko::batch::BatchLinOp::validate_application_parameters(), and gko::batch::BatchLinOp::validate_application_parameters().
|
inlinenoexcept |
Returns a pointer to the array of values of the multi-vector.
|
inlinenoexcept |
Returns a pointer to the array of values of the multi-vector for a specific batch item.
batch_id | the id of the batch item. |
References get_cumulative_offset(), and get_num_batch_items().
|
inline |
Get the cumulative storage size offset.
batch_id | the batch id |
References get_common_size().
Referenced by get_const_values_for_item(), and get_values_for_item().
|
inline |
Returns the number of batch items.
Referenced by at(), at(), get_const_values_for_item(), get_values_for_item(), gko::batch::BatchLinOp::validate_application_parameters(), and gko::batch::BatchLinOp::validate_application_parameters().
|
inlinenoexcept |
Returns the number of elements explicitly stored in the batch matrix, cumulative across all the batch items.
|
inline |
Returns the batch size.
|
inlinenoexcept |
Returns a pointer to the array of values of the multi-vector.
|
inlinenoexcept |
Returns a pointer to the array of values of the multi-vector for a specific batch item.
batch_id | the id of the batch item. |
References get_cumulative_offset(), and get_num_batch_items().
void gko::batch::MultiVector< ValueType >::scale | ( | ptr_param< const MultiVector< ValueType > > | alpha | ) |
Scales the vector with a scalar (aka: BLAS scal).
alpha | the scalar |