Painless
A framework to ease parallelization of sequential CDCL SAT solvers
Loading...
Searching...
No Matches
AllGatherSharing Class Reference

Implements a global sharing strategy using MPI_Allgather for clause exchange. More...

#include <AllGatherSharing.hpp>

Inheritance diagram for AllGatherSharing:
Collaboration diagram for AllGatherSharing:

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< ClauseDatabasem_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.
 

Detailed Description

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.

Constructor & Destructor Documentation

◆ AllGatherSharing()

AllGatherSharing::AllGatherSharing ( const std::shared_ptr< ClauseDatabase > & clauseDB,
unsigned long bufferSize )

Constructor for AllGatherSharing.

Parameters
clauseDBShared pointer to the clause database.
bufferSizeSize of the buffer to send to all the other processes.

Member Function Documentation

◆ deserializeClauses()

void AllGatherSharing::deserializeClauses ( const std::vector< int > & serialized_v_cls,
int num_buffers )
protected

Deserializes received clauses.

Parameters
serialized_v_clsVector containing the serialized clauses.
num_buffersNumber of buffers received.

◆ doSharing()

bool AllGatherSharing::doSharing ( )
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.

Todo
a real decision on willing to share or not.
Returns
True if sharing is complete and the executor can terminate, false otherwise.

Reimplemented from GlobalSharingStrategy.

◆ initMpiVariables()

bool AllGatherSharing::initMpiVariables ( )
overridevirtual

Initializes MPI-related variables.

Returns
True if initialization was successful, false otherwise.

Reimplemented from GlobalSharingStrategy.

◆ joinProcess()

void AllGatherSharing::joinProcess ( int winnerRank,
SatResult res,
const std::vector< int > & model )
overridevirtual

Handles the process of joining when a solution is found.

Parameters
winnerRankThe rank of the mpi_process that found the solution.
resThe result of the SAT solving process.
modelThe satisfying assignment, if any.

Reimplemented from GlobalSharingStrategy.

◆ serializeClauses()

int AllGatherSharing::serializeClauses ( std::vector< int > & serialized_v_cls)
protected

Serializes clauses for sharing.

Serialization Pattern ([size][lbd][literals])*0+

Parameters
serialized_v_clsVector to store the serialized clauses.
Returns
The number of clauses serialized.

The documentation for this class was generated from the following file: