Implements a global sharing strategy using MPI_Allgather for clause exchange. More...
#include <AllGatherSharing.hpp>
Public Member Functions | |
AllGatherSharing (const std::shared_ptr< ClauseDatabase > &clauseDB, unsigned long bufferSize) | |
Constructor for AllGatherSharing. | |
~AllGatherSharing () | |
Destructor for AllGatherSharing. | |
bool | doSharing () override |
Performs the clause sharing operation. A group is created for the process willing to shared only. The different processes serialize their clauses and share them via a single MPI_Allgather call. | |
bool | initMpiVariables () override |
Initializes MPI-related variables. | |
void | joinProcess (int winnerRank, SatResult res, const std::vector< int > &model) override |
Handles the process of joining when a solution is found. | |
Public Member Functions inherited from GlobalSharingStrategy | |
GlobalSharingStrategy (const std::shared_ptr< ClauseDatabase > &clauseDB, const std::vector< std::shared_ptr< SharingEntity > > &producers={}, const std::vector< std::shared_ptr< SharingEntity > > &consumers={}) | |
Constructor for GlobalSharingStrategy. | |
virtual | ~GlobalSharingStrategy () |
Destructor. | |
bool | importClause (const ClauseExchangePtr &cls) override |
Imports a clause into the clause database. | |
void | importClauses (const std::vector< ClauseExchangePtr > &v_cls) override |
Imports multiple clauses into the clause database. | |
bool | exportClauseToClient (const ClauseExchangePtr &clause, std::shared_ptr< SharingEntity > client) |
Exports a clause to a specific client. | |
std::chrono::microseconds | getSleepingTime () override |
Gets the sleeping time for the sharing strategy. | |
void | printStats () override |
Prints the statistics of the sharing strategy. | |
Public Member Functions inherited from SharingStrategy | |
SharingStrategy (const std::vector< std::shared_ptr< SharingEntity > > &producers, const std::vector< std::shared_ptr< SharingEntity > > &consumers, const std::shared_ptr< ClauseDatabase > &clauseDB) | |
Constructor for SharingStrategy. Be sure to call connectConstructorProducers after construction, this is due to the base class shared_from_this. | |
virtual | ~SharingStrategy () |
Virtual destructor. | |
void | connectConstructorProducers () |
Add this to the producers' clients list. | |
virtual void | addProducer (std::shared_ptr< SharingEntity > producer) |
Adds a producer to this strategy. | |
virtual void | connectProducer (std::shared_ptr< SharingEntity > producer) |
Connect a producer to this strategy. Add (this) to clients of (producer) | |
virtual void | removeProducer (std::shared_ptr< SharingEntity > producer) |
Removes a producer from this strategy. | |
Public Member Functions inherited from SharingEntity | |
SharingEntity () | |
Construct a new SharingEntity object. | |
SharingEntity (const std::vector< std::shared_ptr< SharingEntity > > &clients) | |
Construct a new SharingEntity object. | |
virtual | ~SharingEntity () |
Destroy the SharingEntity object. | |
int | getSharingId () const |
Get the sharing ID of this entity. | |
void | setSharingId (int _id) |
Set the sharing ID of this entity. | |
virtual void | addClient (std::shared_ptr< SharingEntity > client) |
Add a client to this entity. | |
virtual void | removeClient (std::shared_ptr< SharingEntity > client) |
Remove a specific client from this entity. | |
size_t | getClientCount () const |
Get the current number of clients. | |
void | clearClients () |
Remove all clients. | |
Protected Member Functions | |
int | serializeClauses (std::vector< int > &serialized_v_cls) |
Serializes clauses for sharing. | |
void | deserializeClauses (const std::vector< int > &serialized_v_cls, int num_buffers) |
Deserializes received clauses. | |
Protected Member Functions inherited from SharingStrategy | |
bool | exportClauseToClient (const ClauseExchangePtr &clause, std::shared_ptr< SharingEntity > client) override |
A SharingStrategy doesn't send a clause to the source client (->from must store the sharingId of its producer) | |
Protected Member Functions inherited from SharingEntity | |
bool | exportClause (const ClauseExchangePtr &clause) |
Export a clause to all registered clients. | |
void | exportClauses (const std::vector< ClauseExchangePtr > &clauses) |
Export multiple clauses to all registered clients. | |
Protected Attributes | |
int | totalSize |
Total size of the buffer for clause sharing. | |
int | color |
Color used for MPI communicator splitting. | |
std::vector< int > | clausesToSendSerialized |
Buffer for serialized clauses to send. | |
std::vector< int > | receivedClauses |
Buffer for received serialized clauses. | |
BloomFilter | b_filter |
Bloom filter for duplicate clause detection. | |
Protected Attributes inherited from GlobalSharingStrategy | |
GlobalSharingStatistics | gstats |
Statistics for global sharing. | |
bool | requests_sent |
Flag indicating if requests to end were sent to the root. | |
std::vector< MPI_Request > | recv_end_requests |
MPI requests for non-blocking receive of end signals. | |
MPI_Request | send_end_request |
MPI request for non-root Isend for final synchronization with root. | |
std::vector< int > | receivedFinalResultRoot |
Buffer for storing results received from other mpi processes. | |
Protected Attributes inherited from SharingStrategy | |
std::shared_ptr< ClauseDatabase > | m_clauseDB |
Clause database where exported clauses are stored. | |
SharingStatistics | stats |
Sharing statistics. | |
std::vector< std::weak_ptr< SharingEntity > > | m_producers |
The set holding the references to the producers. | |
std::shared_mutex | m_producersMutex |
Shared mutex for producers list (to become RCU ?) | |
Protected Attributes inherited from SharingEntity | |
std::vector< std::weak_ptr< SharingEntity > > | m_clients |
List of weak pointers to client SharingEntities. | |
std::shared_mutex | m_clientsMutex |
Mutex to protect access to m_clients. | |
Implements a global sharing strategy using MPI_Allgather for clause exchange.
This class extends GlobalSharingStrategy to implement a specific sharing mechanism using MPI's Allgather collective operation. Here, the size of the buffer is strict, and the value totalSize should take into account the metadata.
AllGatherSharing::AllGatherSharing | ( | const std::shared_ptr< ClauseDatabase > & | clauseDB, |
unsigned long | bufferSize ) |
Constructor for AllGatherSharing.
clauseDB | Shared pointer to the clause database. |
bufferSize | Size of the buffer to send to all the other processes. |
|
protected |
Deserializes received clauses.
serialized_v_cls | Vector containing the serialized clauses. |
num_buffers | Number of buffers received. |
|
overridevirtual |
Performs the clause sharing operation. A group is created for the process willing to shared only. The different processes serialize their clauses and share them via a single MPI_Allgather call.
Reimplemented from GlobalSharingStrategy.
|
overridevirtual |
Initializes MPI-related variables.
Reimplemented from GlobalSharingStrategy.
|
overridevirtual |
Handles the process of joining when a solution is found.
winnerRank | The rank of the mpi_process that found the solution. |
res | The result of the SAT solving process. |
model | The satisfying assignment, if any. |
Reimplemented from GlobalSharingStrategy.
|
protected |
Serializes clauses for sharing.
Serialization Pattern ([size][lbd][literals])*0+
serialized_v_cls | Vector to store the serialized clauses. |