iterative-solver 0.0
 
Loading...
Searching...
No Matches
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#include <string>
9
10namespace molpro::linalg::array {
37class DistrArrayDisk : public DistrArray {
38public:
39 using disk_array = void;
40protected:
41 bool m_allocated = false;
42 std::unique_ptr<Distribution> m_distribution;
43 size_t m_buffer_size = 8192;
45
46 DistrArrayDisk(std::unique_ptr<Distribution> distr, MPI_Comm commun);
48 DistrArrayDisk(const DistrArray& source);
49 DistrArrayDisk(DistrArrayDisk&& source) noexcept;
50 ~DistrArrayDisk() override;
51
52public:
54 virtual void erase() = 0;
55 [[nodiscard]] const Distribution& distribution() const override;
56 [[nodiscard]] value_type dot(const DistrArrayDisk& y) const { return DistrArray::dot(y); }
57 using DistrArray::dot;
58 void set_buffer_size(size_t buffer_size) { m_buffer_size = buffer_size; }
59 [[nodiscard]] size_t disk_page_size() const override { return m_buffer_size; }
60
62 [[nodiscard]] virtual std::string file_directory() const { return {}; }
63
71 static std::string temp_copy_directory(const DistrArray& source, const std::string& directory);
72
74 [[nodiscard]] std::unique_ptr<LocalBuffer> local_buffer() override;
76 [[nodiscard]] std::unique_ptr<const LocalBuffer> local_buffer() const override;
77};
78
79double dot(const DistrArrayDisk& x, const DistrArrayDisk& y);
80double dot(const DistrArrayDisk& x, const DistrArray& y);
81double dot(const DistrArray& x, const DistrArrayDisk& y);
82
83} // namespace molpro::linalg::array
84
85#endif // LINEARALGEBRA_SRC_MOLPRO_LINALG_ARRAY_DISTRARRAYDISK_H
Distributed array located primarily on disk.
Definition DistrArrayDisk.h:37
size_t disk_page_size() const override
Definition DistrArrayDisk.h:59
value_type dot(const DistrArrayDisk &y) const
Definition DistrArrayDisk.h:56
void disk_array
a compile time tag that this is a distributed disk array
Definition DistrArrayDisk.h:39
std::unique_ptr< LocalBuffer > local_buffer() override
Not available: an array on disk is not held in memory.
Definition DistrArrayDisk.cpp:36
static std::string temp_copy_directory(const DistrArray &source, const std::string &directory)
The directory for the file of a temporary copy of source.
Definition DistrArrayDisk.cpp:44
virtual std::string file_directory() const
The directory of the file holding this array, or an empty string if that is not known.
Definition DistrArrayDisk.h:62
bool m_allocated
Flags that the memory view buffer has been allocated.
Definition DistrArrayDisk.h:41
virtual void erase()=0
Erase the array from disk.
size_t m_buffer_size
buffer size for paged access via BufferManager
Definition DistrArrayDisk.h:43
const Distribution & distribution() const override
Access distribution of the array among processes.
Definition DistrArrayDisk.cpp:30
std::unique_ptr< Distribution > m_distribution
describes distribution of array among processes
Definition DistrArrayDisk.h:42
void set_buffer_size(size_t buffer_size)
Definition DistrArrayDisk.h:58
Array distributed across many processes supporting remote-memory-access, access to process local buff...
Definition DistrArray.h:138
double value_type
Definition DistrArray.h:141
value_type dot(Span< const value_type > y) const
Scalar product <this|y>. Collective, the result is available to each process.
Definition DistrArray.cpp:636
Specifies distribution of a contiguous array into non-overlapping chunks.
Definition Distribution.h:16
Definition ArrayHandler.h:19
double dot(const DistrArrayDisk &x, const DistrArrayDisk &y)