iterative-solver 0.0
 
Loading...
Searching...
No Matches
DistrFlags.h
1#ifndef LINEARALGEBRA_SRC_MOLPRO_LINALG_ARRAY_UTIL_DISTRFLAGS_H
2#define LINEARALGEBRA_SRC_MOLPRO_LINALG_ARRAY_UTIL_DISTRFLAGS_H
3#include <memory>
4#include <mpi.h>
5
7
17protected:
18 class Proxy;
19 MPI_Comm m_comm = {};
20 MPI_Win m_win = MPI_WIN_NULL;
21 std::shared_ptr<int> m_counter =
22 nullptr;
23public:
24 DistrFlags() = default;
25 DistrFlags(const DistrFlags &source);
26 DistrFlags(DistrFlags &&source) noexcept;
27 DistrFlags &operator=(const DistrFlags &source);
28 DistrFlags &operator=(DistrFlags &&source) noexcept;
30
32 DistrFlags(MPI_Comm comm, int value = 0);
33
34 friend void swap(DistrFlags &x, DistrFlags &y);
35
37 bool empty() const;
38
41 Proxy access() const;
44 Proxy access(int rank) const;
45
46 MPI_Comm communicator() const { return m_comm; }
47
48protected:
56 class Proxy {
57 public:
69 Proxy(MPI_Comm comm, MPI_Win win, int rank, std::shared_ptr<int> counter);
70 ~Proxy();
72 int get() const;
73
75 int replace(int val);
76
78 int rank() const { return m_rank; }
79
80 protected:
81 MPI_Comm m_comm = {};
82 MPI_Win m_win = MPI_WIN_NULL;
83 int m_rank;
84 std::shared_ptr<int> m_counter;
85 };
86};
87} // namespace molpro::linalg::array::util
88
89#endif // LINEARALGEBRA_SRC_MOLPRO_LINALG_ARRAY_UTIL_DISTRFLAGS_H
Proxy for accessing the stored flags. The flag on a given rank is locked on construction and unlocked...
Definition DistrFlags.h:56
MPI_Comm m_comm
mpi communicator
Definition DistrFlags.h:81
MPI_Win m_win
Definition DistrFlags.h:82
std::shared_ptr< int > m_counter
counter of proxy objects created by overlying DistrFlags object.
Definition DistrFlags.h:84
~Proxy()
Definition DistrFlags.cpp:77
int rank() const
Which rank the proxy has access to.
Definition DistrFlags.h:78
int m_rank
empty window handle
Definition DistrFlags.h:83
int replace(int val)
replace value of flag
Definition DistrFlags.cpp:90
int get() const
get value of the flag
Definition DistrFlags.cpp:83
Distributed array of integer flags with one flag per process and a locking mechanism to ensure atomic...
Definition DistrFlags.h:16
MPI_Win m_win
Definition DistrFlags.h:20
Proxy access() const
Definition DistrFlags.cpp:68
std::shared_ptr< int > m_counter
empty window handle
Definition DistrFlags.h:21
friend void swap(DistrFlags &x, DistrFlags &y)
Definition DistrFlags.cpp:53
MPI_Comm m_comm
mpi communicator
Definition DistrFlags.h:19
bool empty() const
Whether distributed array was allocated.
Definition DistrFlags.cpp:60
~DistrFlags()
Definition DistrFlags.cpp:21
MPI_Comm communicator() const
Definition DistrFlags.h:46
DistrFlags & operator=(const DistrFlags &source)
Definition DistrFlags.cpp:36
Definition ArrayHandler.h:24