Dakota  Version
Explore and Predict with Confidence
Public Member Functions | Private Attributes | Friends | List of all members
ParallelLevel Class Reference

Container class for the data associated with a single level of communicator partitioning. More...

Public Member Functions

 ParallelLevel ()
 default constructor
 
 ParallelLevel (const ParallelLevel &pl)
 copy constructor
 
 ~ParallelLevel ()
 destructor
 
ParallelLeveloperator= (const ParallelLevel &pl)
 assignment operator
 
bool dedicated_master () const
 return dedicatedMasterFlag
 
bool server_master () const
 return serverMasterFlag
 
bool message_pass () const
 return messagePass
 
bool idle_partition () const
 return idlePartition
 
int num_servers () const
 return numServers
 
int processors_per_server () const
 return procsPerServer
 
int processor_remainder () const
 return procRemainder
 
const MPI_Comm & server_intra_communicator () const
 return serverIntraComm
 
int server_communicator_rank () const
 return serverCommRank
 
int server_communicator_size () const
 return serverCommSize
 
const MPI_Comm & hub_server_intra_communicator () const
 return hubServerIntraComm
 
int hub_server_communicator_rank () const
 return hubServerCommRank
 
int hub_server_communicator_size () const
 return hubServerCommSize
 
const MPI_Comm & hub_server_inter_communicator () const
 return hubServerInterComm
 
MPI_Comm * hub_server_inter_communicators () const
 return hubServerInterComms
 
int server_id () const
 return serverId
 
void read (MPIUnpackBuffer &s)
 read a ParallelLevel object from a packed MPI buffer
 
void write (MPIPackBuffer &s) const
 write a ParallelLevel object to a packed MPI buffer
 
bool null (const MPI_Comm &comm)
 test comm for MPI_COMM_NULL
 
bool special (const MPI_Comm &comm)
 test comm for special identity that cannot be deallocated
 
void clear ()
 deallocate the communicators in this ParallelLevel More...
 
void alias (const ParallelLevel &pl)
 assign the attributes of the incoming pl to this object. For communicators, this is a lightweight copy which assigns the same pointer values as the incoming pl, resulting in the same context.
 
void copy (const ParallelLevel &pl)
 deep copy the attributes of the incoming pl to this object using MPI_Comm_dup to create equivalent communicators with a unique context.
 
void copy_config (const ParallelLevel &pl)
 copy the scalar attributes of the incoming pl to this object, omitting communicators
 

Private Attributes

bool ownCommFlag
 signals Comm ownership for deallocation
 
bool dedicatedMasterFlag
 signals dedicated master partitioning
 
bool commSplitFlag
 signals a communicator split was used
 
bool serverMasterFlag
 identifies master server processors
 
bool messagePass
 flag for message passing at this level, indicating work assignment among servers
 
bool idlePartition
 identifies presence of an idle processor partition at this level
 
int numServers
 number of servers
 
int procsPerServer
 processors per server
 
int procRemainder
 proc remainder after equal distribution
 
int serverId
 server identifier
 
MPI_Comm serverIntraComm
 intracomm. for each server partition
 
int serverCommRank
 rank in serverIntraComm
 
int serverCommSize
 size of serverIntraComm
 
MPI_Comm hubServerIntraComm
 intracomm for all serverCommRank==0 w/i next higher level serverIntraComm
 
int hubServerCommRank
 rank in hubServerIntraComm
 
int hubServerCommSize
 size of hubServerIntraComm
 
MPI_Comm hubServerInterComm
 intercomm. between a server & the hub
(on server partitions only)
 
MPI_Comm * hubServerInterComms
 intercomm. array on hub processor
 

Friends

class ParallelLibrary
 the ParallelLibrary class has special access priveleges in order to streamline implementation
 

Detailed Description

Container class for the data associated with a single level of communicator partitioning.

A list of these levels is contained in ParallelLibrary (ParallelLibrary::parallelLevels), which defines all of the parallelism levels across one or more multilevel parallelism configurations.

Member Function Documentation

◆ clear()

void clear ( )
inline

deallocate the communicators in this ParallelLevel

This appears to be more robust outside of the destructor due to interactions among managed deallocation and default deallocation (e.g., explicitly freeing a communicator and then default deallocating its handle).

References ParallelLevel::dedicatedMasterFlag, ParallelLevel::hubServerInterComm, ParallelLevel::hubServerInterComms, ParallelLevel::hubServerIntraComm, ParallelLevel::idlePartition, ParallelLevel::numServers, ParallelLevel::ownCommFlag, ParallelLevel::serverId, ParallelLevel::serverIntraComm, and ParallelLevel::special().


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