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. |
Generated by