fpmas 1.6
hard_sync_mode.h
Go to the documentation of this file.
1#ifndef FPMAS_HARD_SYNC_MODE_H
2#define FPMAS_HARD_SYNC_MODE_H
3
9#include "hard_data_sync.h"
10#include "hard_sync_mutex.h"
11#include "hard_sync_linker.h"
12
13namespace fpmas { namespace synchro {
14 namespace hard {
29 template<typename T>
31 private:
36
37 protected:
43
49
50 private:
51 MutexClient<T> mutex_client;
52 HardDataSync<T> data_sync;
53
54 public:
55
67 ServerPackBase& server_pack
68 ) :
69 color_mpi(comm), id_mpi(comm),
70 data_mpi(comm), data_update_mpi(comm),
71 termination(comm, color_mpi),
72 mutex_server(comm, id_mpi, data_mpi, data_update_mpi, server_pack),
73 mutex_client(comm, id_mpi, data_mpi, data_update_mpi, server_pack),
74 data_sync(comm, server_pack, graph) {
75 }
76
83 HardSyncMutex<T>* mutex = new HardSyncMutex<T>(node, mutex_client, mutex_server);
84 mutex_server.manage(node->getId(), mutex);
85 return mutex;
86 };
87
93 HardDataSync<T>& getDataSync() override {return data_sync;};
94
95 };
96
97 namespace hard_link {
116 template<typename T>
117 class HardSyncMode : public HardSyncModeBase<T> {
118 private:
121
122 LinkServer<T> link_server;
123 LinkClient<T> link_client;
124
126 HardSyncLinker<T> sync_linker;
127
128 public:
138 HardSyncModeBase<T>(graph, comm, server_pack),
139 id_mpi(comm), edge_mpi(comm),
140 link_server(comm, graph, id_mpi, edge_mpi),
141 link_client(comm, id_mpi, edge_mpi, server_pack),
142 server_pack(
143 comm, this->termination,
144 this->mutex_server, link_server),
145 sync_linker(graph, link_client, server_pack) {
146 }
153 return sync_linker;
154 };
155 };
156 }
157
158 namespace ghost_link {
181 template<typename T>
182 class HardSyncMode : public HardSyncModeBase<T> {
183 private:
186
187 // Unused link_server
188 VoidServer link_server;
189 // This server is terminated by HardGhostSyncLinker and
190 // HardDataSync
192
193 HardSyncLinker<T> sync_linker;
194
195
196 public:
206 HardSyncModeBase<T>(graph, comm, server_pack),
207 id_mpi(comm), edge_mpi(comm),
208 server_pack(comm, this->termination, this->mutex_server, link_server),
209 sync_linker(edge_mpi, id_mpi, graph, server_pack) {
210 }
211
217 HardSyncLinker<T>& getSyncLinker() override {return sync_linker;};
218 };
219 }
220
221 }
225 template<typename T>
227
231 template<typename T>
233}}
234#endif
Definition: communication.h:251
Definition: distributed_graph.h:169
Definition: distributed_node.h:28
virtual IdType getId() const =0
Definition: sync_mode.h:120
Definition: hard_data_sync.h:23
Definition: hard_sync_mode.h:30
HardDataSync< T > & getDataSync() override
Definition: hard_sync_mode.h:93
MutexServer< T > mutex_server
Definition: hard_sync_mode.h:48
HardSyncModeBase(fpmas::api::graph::DistributedGraph< T > &graph, fpmas::api::communication::MpiCommunicator &comm, ServerPackBase &server_pack)
Definition: hard_sync_mode.h:64
TerminationAlgorithm termination
Definition: hard_sync_mode.h:42
HardSyncMutex< T > * buildMutex(fpmas::api::graph::DistributedNode< T > *node) override
Definition: hard_sync_mode.h:82
Definition: hard_sync_mutex.h:25
Definition: mutex_client.h:22
Definition: mutex_server.h:26
Definition: server_pack.h:39
Definition: server_pack.h:257
Definition: termination.h:26
Definition: server_pack.h:17
Definition: client_server.h:379
Definition: fpmas.cpp:3