namespace simgrid{
namespace smpi{
+std::unordered_map<int, smpi_key_elem> 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;
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(){
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<Win>();
}
void Win::get_name(char* name, int* length){
}
}
+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);
}
Request::startall(size, reqs);
Request::waitall(size, reqs, MPI_STATUSES_IGNORE);
for(i=0;i<size;i++){
- Request::unuse(&reqs[i]);
+ Request::unref(&reqs[i]);
}
xbt_free(reqs);
opened_++; //we're open for business !
group_=group;
- group->use();
+ group->ref();
return MPI_SUCCESS;
}
Request::startall(size, reqs);
Request::waitall(size, reqs, MPI_STATUSES_IGNORE);
for(i=0;i<size;i++){
- Request::unuse(&reqs[i]);
+ Request::unref(&reqs[i]);
}
xbt_free(reqs);
opened_++; //we're open for business !
group_=group;
- group->use();
+ group->ref();
return MPI_SUCCESS;
}
Request::waitall(size, reqs, MPI_STATUSES_IGNORE);
for(i=0;i<size;i++){
- Request::unuse(&reqs[i]);
+ Request::unref(&reqs[i]);
}
xbt_free(reqs);
}
xbt_mutex_release(mut_);
- group_->unuse();
+ Group::unref(group_);
opened_--; //we're closed for business !
return MPI_SUCCESS;
}
Request::startall(size, reqs);
Request::waitall(size, reqs, MPI_STATUSES_IGNORE);
for(i=0;i<size;i++){
- Request::unuse(&reqs[i]);
+ Request::unref(&reqs[i]);
}
xbt_free(reqs);
xbt_mutex_acquire(mut_);
}
xbt_mutex_release(mut_);
- group_->unuse();
+ Group::unref(group_);
opened_--; //we're opened for business !
return MPI_SUCCESS;
}
+Win* Win::f2c(int id){
+ return static_cast<Win*>(F2C::f2c(id));
+}
+
}
}