X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/86f9a6c7bece8591b61752ee74a005e14fe3af50..120a17a595bd3d7636a031ddaa5dc372826dba66:/src/smpi/smpi_comm.cpp diff --git a/src/smpi/smpi_comm.cpp b/src/smpi/smpi_comm.cpp index 36c03e6361..a3b9f5f0fe 100644 --- a/src/smpi/smpi_comm.cpp +++ b/src/smpi/smpi_comm.cpp @@ -1,24 +1,16 @@ -/* Copyright (c) 2010-2015. The SimGrid Team. - * All rights reserved. */ +/* Copyright (c) 2010-2017. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ -#include -#include - -#include -#include -#include - -#include +#include "simgrid/s4u/Host.hpp" #include "private.h" #include "src/simix/smx_private.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_comm, smpi, "Logging specific to SMPI (comm)"); - Comm mpi_MPI_COMM_UNINITIALIZED; + simgrid::smpi::Comm mpi_MPI_COMM_UNINITIALIZED; MPI_Comm MPI_COMM_UNINITIALIZED=&mpi_MPI_COMM_UNINITIALIZED; /* Support for cartesian topology was added, but there are 2 other types of topology, graph et dist graph. In order to @@ -73,7 +65,7 @@ void Comm::destroy(Comm* comm) } int Comm::dup(MPI_Comm* newcomm){ - if(smpi_privatize_global_variables){ //we need to switch as the called function may silently touch global variables + if(smpi_privatize_global_variables == SMPI_PRIVATIZE_MMAP){ //we need to switch as the called function may silently touch global variables smpi_switch_data_segment(smpi_process()->index()); } MPI_Group cp = new Group(this->group()); @@ -328,7 +320,7 @@ void Comm::init_smp(){ smpi_process()->set_replaying(false); } - if(smpi_privatize_global_variables){ //we need to switch as the called function may silently touch global variables + if(smpi_privatize_global_variables == SMPI_PRIVATIZE_MMAP){ //we need to switch as the called function may silently touch global variables smpi_switch_data_segment(smpi_process()->index()); } //identify neighbours in comm @@ -370,7 +362,7 @@ void Comm::init_smp(){ Coll_allgather_mpich::allgather(&leader, 1, MPI_INT , leaders_map, 1, MPI_INT, this); - if(smpi_privatize_global_variables){ //we need to switch as the called function may silently touch global variables + if(smpi_privatize_global_variables == SMPI_PRIVATIZE_MMAP){ //we need to switch as the called function may silently touch global variables smpi_switch_data_segment(smpi_process()->index()); } @@ -444,7 +436,7 @@ void Comm::init_smp(){ } Coll_bcast_mpich::bcast(&(is_uniform_),1, MPI_INT, 0, comm_intra ); - if(smpi_privatize_global_variables){ //we need to switch as the called function may silently touch global variables + if(smpi_privatize_global_variables == SMPI_PRIVATIZE_MMAP){ //we need to switch as the called function may silently touch global variables smpi_switch_data_segment(smpi_process()->index()); } // Are the ranks blocked ? = allocated contiguously on the SMP nodes @@ -505,6 +497,24 @@ int Comm::add_f() { } +void Comm::add_rma_win(MPI_Win win){ + rma_wins_.push_back(win); +} + +void Comm::remove_rma_win(MPI_Win win){ + rma_wins_.remove(win); +} + +void Comm::finish_rma_calls(){ + for(auto it : rma_wins_){ + if(it->rank()==this->rank()){//is it ours (for MPI_COMM_WORLD)? + int finished = it->finish_comms(); + XBT_DEBUG("Barrier for rank %d - Finished %d RMA calls",this->rank(), finished); + } + } +} + + } }