X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d3bc89e18d60e0e1f5c0da2d9357499a0078317f..97e2219ed6c0e511f6165460cec79afadf42f589:/src/smpi/mpi/smpi_comm.cpp diff --git a/src/smpi/mpi/smpi_comm.cpp b/src/smpi/mpi/smpi_comm.cpp index 683a64a350..7a19277e9f 100644 --- a/src/smpi/mpi/smpi_comm.cpp +++ b/src/smpi/mpi/smpi_comm.cpp @@ -55,7 +55,6 @@ Comm::Comm(MPI_Group group, MPI_Topology topo, bool smp, int in_id) colls::bcast(&id, 1, MPI_INT, 0, this); XBT_DEBUG("Communicator %p has id %d", this, id); id_=id;//only set here, as we don't want to change it in the middle of the bcast - colls::barrier(this); } } @@ -242,14 +241,14 @@ bool Comm::is_uniform() const { if (this == MPI_COMM_UNINITIALIZED) return smpi_process()->comm_world()->is_uniform(); - return is_uniform_ != 0; + return is_uniform_; } bool Comm::is_blocked() const { if (this == MPI_COMM_UNINITIALIZED) return smpi_process()->comm_world()->is_blocked(); - return is_blocked_ != 0; + return is_blocked_; } bool Comm::is_smp_comm() const @@ -474,8 +473,9 @@ void Comm::init_smp(){ // Are the nodes uniform ? = same number of process/node int my_local_size=comm_intra->size(); + int is_uniform; if(comm_intra->rank()==0) { - int is_uniform = 1; + is_uniform = 1; auto* non_uniform_map = xbt_new0(int, leader_group_size); allgather__ring(&my_local_size, 1, MPI_INT, non_uniform_map, 1, MPI_INT, leader_comm); @@ -490,9 +490,9 @@ void Comm::init_smp(){ }else{ xbt_free(non_uniform_map); } - is_uniform_=is_uniform; } - bcast__scatter_LR_allgather(&is_uniform_, 1, MPI_INT, 0, comm_intra); + bcast__scatter_LR_allgather(&is_uniform, 1, MPI_INT, 0, comm_intra); + is_uniform_ = (is_uniform != 0); // we need to switch as the called function may silently touch global variables smpi_switch_data_segment(s4u::Actor::self()); @@ -512,13 +512,8 @@ void Comm::init_smp(){ int global_blocked; allreduce__default(&is_blocked, &global_blocked, 1, MPI_INT, MPI_LAND, this); - if(MPI_COMM_WORLD==MPI_COMM_UNINITIALIZED || this==MPI_COMM_WORLD){ - if(this->rank()==0){ - is_blocked_ = global_blocked; - } - }else{ - is_blocked_=global_blocked; - } + if ((MPI_COMM_WORLD != MPI_COMM_UNINITIALIZED && this != MPI_COMM_WORLD) || this->rank() == 0) + is_blocked_ = (global_blocked != 0); delete[] leader_list; if(replaying) @@ -654,5 +649,31 @@ void Comm::increment_received_messages_count(int src, int dst, int tag) recv_messages_[hash_message(src, dst, tag)]++; } +unsigned int Comm::get_collectives_count() +{ + if (this==MPI_COMM_UNINITIALIZED){ + return smpi_process()->comm_world()->get_collectives_count(); + }else if(this == MPI_COMM_WORLD || this == smpi_process()->comm_world()){ + if (collectives_counts_.empty()) + collectives_counts_.resize(this->size()); + return collectives_counts_[this->rank()]; + }else{ + return collectives_count_; + } +} + +void Comm::increment_collectives_count() +{ + if (this==MPI_COMM_UNINITIALIZED){ + smpi_process()->comm_world()->increment_collectives_count(); + }else if (this == MPI_COMM_WORLD || this == smpi_process()->comm_world()){ + if (collectives_counts_.empty()) + collectives_counts_.resize(this->size()); + collectives_counts_[this->rank()]++; + }else{ + collectives_count_++; + } +} + } // namespace smpi } // namespace simgrid