52 #include "../general/util.h"
63 comm_mpi(
const char URI[],
const bool quiet, MPI_Comm world ) :
76 init(URI, quiet, world);
82 void init(
const char URI[],
const bool quiet, MPI_Comm world ) {
84 throw( std::runtime_error(
"MUI Error [comm_mpi.h]: Duplicate MUI communicator initialization") );
88 MPI_Initialized( &
init );
91 MPI_Init( NULL, NULL );
95 if (world == MPI_COMM_WORLD) MPI_Comm_dup( MPI_COMM_WORLD, &world );
99 std::cout <<
"MUI Warning [comm_mpi.h]: Number of global ranks less than 2" << std::endl;
106 MPI_Comm_get_attr(MPI_COMM_WORLD,MPI_TAG_UB,&v,&flag);
115 int domain_hash = std::hash<std::string>()( desc.
host() );
116 domain_hash=std::abs(domain_hash);
117 int ifs_hash = std::hash<std::string>()( desc.
path() );
118 ifs_hash=std::abs(ifs_hash);
126 MPI_Allgather( &domain_hash, 1, MPI_INT, &all_domain[0], 1, MPI_INT, world );
127 MPI_Allgather( &ifs_hash, 1, MPI_INT, &all_ifs[0], 1, MPI_INT, world );
130 if ( all_domain[i] != domain_hash && all_ifs[i] == ifs_hash ) {
139 std::cout <<
"MUI [comm_mpi.h]: Rank: " <<
global_rank_ <<
", "
140 <<
"Identifier: " << URI <<
", "
147 std::cout <<
"MUI [comm_mpi.h]: " <<
"Identifier: " << URI <<
", "
153 MPI_Barrier( world );
159 if ( initialized && init_by_me ) MPI_Finalize();
Definition: comm_mpi.h:61
int local_rank_
Definition: comm_mpi.h:175
void init(const char URI[], const bool quiet, MPI_Comm world)
Definition: comm_mpi.h:82
virtual ~comm_mpi()
Definition: comm_mpi.h:78
MPI_Comm domain_remote_
Definition: comm_mpi.h:173
int global_rank_
Definition: comm_mpi.h:178
std::string uri_protocol_
Definition: comm_mpi.h:181
MPI_Comm domain_local_
Definition: comm_mpi.h:172
virtual int local_size() const
Definition: comm_mpi.h:162
virtual std::string uri_path() const
Definition: comm_mpi.h:168
int global_size_
Definition: comm_mpi.h:177
std::string uri_host_
Definition: comm_mpi.h:179
int remote_size_
Definition: comm_mpi.h:176
void finalize()
Definition: comm_mpi.h:158
virtual int local_rank() const
Definition: comm_mpi.h:163
std::string uri_path_
Definition: comm_mpi.h:180
virtual int remote_size() const
Definition: comm_mpi.h:164
virtual std::string uri_host() const
Definition: comm_mpi.h:167
virtual int global_rank() const
Definition: comm_mpi.h:166
virtual int global_size() const
Definition: comm_mpi.h:165
comm_mpi(const char URI[], const bool quiet, MPI_Comm world)
Definition: comm_mpi.h:63
int local_size_
Definition: comm_mpi.h:174
virtual std::string uri_protocol() const
Definition: comm_mpi.h:169
const std::string & protocol() const
Definition: lib_uri.h:63
const std::string & host() const
Definition: lib_uri.h:64
const std::string & path() const
Definition: lib_uri.h:65
File containing class definition of communication interface. This is the base class for all other com...
Base class to contain and manipulate a unique URI (Uniform Resource Identifier).