X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a7062f3c8933c30e8ef660499389d11e0c7bac3b..f50c785a8f726657dc3b4e32de522a7b3baca707:/src/smpi/smpi_win.cpp diff --git a/src/smpi/smpi_win.cpp b/src/smpi/smpi_win.cpp index 1e1b4134ba..67612c3be2 100644 --- a/src/smpi/smpi_win.cpp +++ b/src/smpi/smpi_win.cpp @@ -11,13 +11,15 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_rma, smpi, "Logging specific to SMPI (RMA o namespace simgrid{ namespace smpi{ +std::unordered_map Win::keyvals_; +int Win::keyval_id_=0; Win::Win(void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm): base_(base), size_(size), disp_unit_(disp_unit), assert_(0), info_(info), comm_(comm){ int comm_size = comm->size(); int rank = comm->rank(); XBT_DEBUG("Creating window"); if(info!=MPI_INFO_NULL) - Info::ref(info); + info->ref(); name_ = nullptr; opened_ = 0; group_ = MPI_GROUP_NULL; @@ -29,12 +31,12 @@ Win::Win(void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm) if(rank==0){ bar_ = MSG_barrier_init(comm_size); } - mpi_coll_allgather_fun(&(connected_wins_[rank]), sizeof(MPI_Win), MPI_BYTE, connected_wins_, sizeof(MPI_Win), + Colls::allgather(&(connected_wins_[rank]), sizeof(MPI_Win), MPI_BYTE, connected_wins_, sizeof(MPI_Win), MPI_BYTE, comm); - mpi_coll_bcast_fun(&(bar_), sizeof(msg_bar_t), MPI_BYTE, 0, comm); + Colls::bcast(&(bar_), sizeof(msg_bar_t), MPI_BYTE, 0, comm); - mpi_coll_barrier_fun(comm); + Colls::barrier(comm); } Win::~Win(){ @@ -51,11 +53,13 @@ Win::~Win(){ MPI_Info_free(&info_); } - mpi_coll_barrier_fun(comm_); + Colls::barrier(comm_); int rank=comm_->rank(); if(rank == 0) MSG_barrier_destroy(bar_); xbt_mutex_destroy(mut_); + + cleanup_attr(); } void Win::get_name(char* name, int* length){ @@ -76,6 +80,19 @@ void Win::get_group(MPI_Group* group){ } } +MPI_Aint Win::size(){ + return size_; +} + +void* Win::base(){ + return base_; +} + +int Win::disp_unit(){ + return disp_unit_; +} + + void Win::set_name(char* name){ name_ = xbt_strdup(name); } @@ -274,12 +291,12 @@ int Win::start(MPI_Group group, int assert){ Request::startall(size, reqs); Request::waitall(size, reqs, MPI_STATUSES_IGNORE); for(i=0;iuse(); + group->ref(); return MPI_SUCCESS; } @@ -303,12 +320,12 @@ int Win::post(MPI_Group group, int assert){ Request::startall(size, reqs); Request::waitall(size, reqs, MPI_STATUSES_IGNORE); for(i=0;iuse(); + group->ref(); return MPI_SUCCESS; } @@ -336,7 +353,7 @@ int Win::complete(){ Request::waitall(size, reqs, MPI_STATUSES_IGNORE); for(i=0;iunuse(); + Group::unref(group_); opened_--; //we're closed for business ! return MPI_SUCCESS; } @@ -384,7 +401,7 @@ int Win::wait(){ Request::startall(size, reqs); Request::waitall(size, reqs, MPI_STATUSES_IGNORE); for(i=0;iunuse(); + Group::unref(group_); opened_--; //we're opened for business ! return MPI_SUCCESS; } +Win* Win::f2c(int id){ + return static_cast(F2C::f2c(id)); +} + } }