iterative-solver 0.0
DistrArrayDisk.h
1#ifndef LINEARALGEBRA_SRC_MOLPRO_LINALG_ARRAY_DISTRARRAYDISK_H
2#define LINEARALGEBRA_SRC_MOLPRO_LINALG_ARRAY_DISTRARRAYDISK_H
3
4#include <future>
5#include <molpro/Profiler.h>
6#include <molpro/linalg/array/DistrArray.h>
7#include <molpro/linalg/array/Span.h>
8
9namespace molpro::linalg::array {
36class DistrArrayDisk : public DistrArray {
37public:
38 using disk_array = void;
39protected:
40 bool m_allocated = false;
41 std::unique_ptr<Distribution> m_distribution;
42 size_t m_buffer_size = 8192;
44
45 DistrArrayDisk(std::unique_ptr<Distribution> distr, MPI_Comm commun);
47 DistrArrayDisk(const DistrArray& source);
48 DistrArrayDisk(DistrArrayDisk&& source) noexcept;
49 ~DistrArrayDisk() override;
50
51public:
53 virtual void erase() = 0;
54 [[nodiscard]] const Distribution& distribution() const override;
55 [[nodiscard]] value_type dot(const DistrArrayDisk& y) const;
56 [[nodiscard]] value_type dot(const DistrArray& y) const override;
57 [[nodiscard]] value_type dot(const SparseArray& y) const override;
58 void set_buffer_size(size_t buffer_size) { m_buffer_size = buffer_size; }
59 void copy(const DistrArray& y) override;
60
61protected:
65 public:
66 explicit LocalBufferDisk(DistrArrayDisk& source);
67 explicit LocalBufferDisk(DistrArrayDisk& source, const span::Span<value_type>& buffer);
68 ~LocalBufferDisk() override;
70 bool do_dump = true;
71
72 protected:
73 std::vector<value_type> m_snapshot_buffer;
75 };
76
77public:
78 [[nodiscard]] std::unique_ptr<LocalBuffer> local_buffer() override;
79 [[nodiscard]] std::unique_ptr<const LocalBuffer> local_buffer() const override;
81 [[nodiscard]] std::unique_ptr<LocalBuffer> local_buffer(const span::Span<value_type>& buffer);
83 [[nodiscard]] std::unique_ptr<const LocalBuffer> local_buffer(const span::Span<value_type>& buffer) const;
84
85public:
86};
87
88double dot(const DistrArrayDisk& x, const DistrArrayDisk& y);
89double dot(const DistrArrayDisk& x, const DistrArray& y);
90double dot(const DistrArray& x, const DistrArrayDisk& y);
91
92} // namespace molpro::linalg::array
93
94#endif // LINEARALGEBRA_SRC_MOLPRO_LINALG_ARRAY_DISTRARRAYDISK_H
std::vector< value_type > m_snapshot_buffer
when external buffer is not provided
Definition: DistrArrayDisk.h:73
LocalBufferDisk(DistrArrayDisk &source)
Definition: DistrArrayDisk.cpp:54
~LocalBufferDisk() override
Definition: DistrArrayDisk.cpp:79
LocalBufferDisk(DistrArrayDisk &source, const span::Span< value_type > &buffer)
bool do_dump
If true, than buffer is dumped to file on destruction.
Definition: DistrArrayDisk.h:70
DistrArrayDisk & m_source
keep a handle on source to dump data to disk
Definition: DistrArrayDisk.h:74
Distributed array located primarily on disk.
Definition: DistrArrayDisk.h:36
void copy(const DistrArray &y) override
Definition: DistrArrayDisk.cpp:45
void disk_array
a compile time tag that this is a distributed disk array
Definition: DistrArrayDisk.h:38
std::unique_ptr< const LocalBuffer > local_buffer(const span::Span< value_type > &buffer) const
Read-only access to the local section, reading it into the provided buffer.
std::unique_ptr< LocalBuffer > local_buffer() override
Access the buffer local to this process.
Definition: DistrArrayDisk.cpp:91
bool m_allocated
Flags that the memory view buffer has been allocated.
Definition: DistrArrayDisk.h:40
virtual void erase()=0
Erase the array from disk.
size_t m_buffer_size
buffer size for paged access via BufferManager
Definition: DistrArrayDisk.h:42
value_type dot(const DistrArrayDisk &y) const
Definition: DistrArrayDisk.cpp:115
const Distribution & distribution() const override
Access distribution of the array among processes.
Definition: DistrArrayDisk.cpp:85
std::unique_ptr< LocalBuffer > local_buffer(const span::Span< value_type > &buffer)
Access local section, reading it into the provided buffer.
std::unique_ptr< Distribution > m_distribution
describes distribution of array among processes
Definition: DistrArrayDisk.h:41
void set_buffer_size(size_t buffer_size)
Definition: DistrArrayDisk.h:58
Provides access to the local portion of the array.
Definition: DistrArray.h:123
Array distributed across many processes supporting remote-memory-access, access to process local buff...
Definition: DistrArray.h:90
double value_type
Definition: DistrArray.h:93
std::map< index_type, double > SparseArray
Definition: DistrArray.h:95
Specifies distribution of a contiguous array into non-overlapping chunks.
Definition: Distribution.h:16
Definition: ArrayHandler.h:22
double dot(const DistrArrayDisk &x, const DistrArrayDisk &y)