template<class AL, class AR>
class molpro::linalg::array::ArrayHandlerIterableDDisk< AL, AR >
Array handler between a contiguous array (left), e.g. std::vector or Span, and a distributed array (right), typically one held on disk.
The contiguous array holds all elements on every process, i.e. it is replicated, while each process works on its local section of the distributed array, reading it page by page through get() if it is on disk. The contiguous array is addressed in place. Operations that write into the contiguous array finish by replicating it over all processes. When the distributed array lives on a single process (e.g. molpro::mpi::comm_self()), there is no communication at all.
ArrayHandlerDDiskIterable handles the same pair of arrays the other way round.
|
| ProxyHandle | lazy_handle () override |
| | Returns a lazy handle. Most implementations simply need to call the overload: return lazy_handle(*this);.
|
| |
| AL | copy (const AR &source) override |
| |
| void | copy (AL &x, const AR &y) override |
| | Copy content of y into x.
|
| |
| void | scal (value_type alpha, AL &x) override |
| |
| void | fill (value_type alpha, AL &x) override |
| |
| void | axpy (value_type alpha, const AR &x, AL &y) override |
| |
| value_type | dot (const AL &x, const AR &y) override |
| | The hermitian inner product <x|y>, i.e. the conjugate of <y|x>
|
| |
| void | gemm_outer (const Matrix< value_type > alphas, const CVecRef< AR > &xx, const VecRef< AL > &yy) override |
| |
| Matrix< value_type > | gemm_inner (const CVecRef< AL > &xx, const CVecRef< AR > &yy) override |
| |
| std::map< size_t, value_type_abs > | select_max_dot (size_t n, const AL &x, const AR &y) override |
| | Select n indices with largest by absolute value contributions to the dot product.
|
| |
| std::map< size_t, value_type > | select (size_t n, const AL &x, bool max=false, bool ignore_sign=false) override |
| | Select n indices with largest (or smallest) actual (or absolute) value.
|
| |
Public Member Functions inherited from molpro::linalg::array::ArrayHandler< AL, AR > |
| const Counter & | counter () const |
| |
| std::string | counter_to_string (std::string L, std::string R) |
| |
| void | clear_counter () |
| |
| virtual | ~ArrayHandler () |
| | Destroys ArrayHandler instance and invalidates any LazyHandler it created. Invalidated handler will not evaluate.
|
| |
|
Public Types inherited from molpro::linalg::array::ArrayHandler< AL, AR > |
| using | value_type_L = typename array::mapped_or_value_type_t< AL > |
| |
| using | value_type_R = typename array::mapped_or_value_type_t< AR > |
| |
| using | value_type = decltype(value_type_L{} *value_type_R{}) |
| |
| using | value_type_abs = decltype(check_abs< value_type >()) |
| |
Protected Member Functions inherited from molpro::linalg::array::ArrayHandler< AL, AR > |
| | ArrayHandler () |
| |
| | ArrayHandler (const ArrayHandler &)=default |
| |
| virtual void | error (const std::string &message) |
| | Throws an error.
|
| |
| virtual void | fused_axpy (const std::vector< std::tuple< size_t, size_t, size_t > > ®, const std::vector< value_type > &alphas, const std::vector< std::reference_wrapper< const AR > > &xx, std::vector< std::reference_wrapper< AL > > &yy) |
| | Default implementation of fused_axpy without any simplification.
|
| |
| virtual void | fused_dot (const std::vector< std::tuple< size_t, size_t, size_t > > ®, const std::vector< std::reference_wrapper< const AL > > &xx, const std::vector< std::reference_wrapper< const AR > > &yy, std::vector< std::reference_wrapper< value_type > > &out) |
| | Default implementation of fused_dot without any simplification.
|
| |
| void | save_handle (const std::shared_ptr< LazyHandle > &handle) |
| | Save weak ptr to a lazy handle.
|
| |
| ProxyHandle | lazy_handle (ArrayHandler< AL, AR > &handler) |
| |
Protected Attributes inherited from molpro::linalg::array::ArrayHandler< AL, AR > |
| std::unique_ptr< Counter > | m_counter |
| |
| std::vector< std::weak_ptr< LazyHandle > > | m_lazy_handles |
| | keeps track of all created lazy handles
|
| |