xbt_dynar_t requests;
xbt_bar_t bar;
MPI_Win* connected_wins;
+ char* name;
} s_smpi_mpi_win_t;
win->assert = 0;
//win->info = info;
win->comm = comm;
+ win->name = NULL;
win->requests = xbt_dynar_new(sizeof(MPI_Request), NULL);
win->connected_wins = xbt_malloc0(comm_size*sizeof(MPI_Win));
win->connected_wins[rank] = win;
xbt_barrier_wait((*win)->bar);
xbt_dynar_free(&(*win)->requests);
xbt_free((*win)->connected_wins);
+ if ((*win)->name != NULL){
+ xbt_free((*win)->name);
+ }
xbt_free(*win);
win = MPI_WIN_NULL;
return MPI_SUCCESS;
}
+void smpi_mpi_win_get_name(MPI_Win win, char* name, int* length){
+ if(win->name==NULL){
+ *length=0;
+ name=NULL;
+ return;
+ }
+ *length = strlen(win->name);
+ strcpy(name, win->name);
+}
+
+void smpi_mpi_win_set_name(MPI_Win win, char* name){
+ win->name = strdup(name);;
+}
+
int smpi_mpi_win_fence( int assert, MPI_Win win){
//prepare receiver request
MPI_Request rreq = smpi_rma_recv_init(origin_addr, origin_count, origin_datatype,
smpi_group_index(smpi_comm_group(win->comm),target_rank), smpi_process_index(), RMA_TAG+2, win->comm, MPI_OP_NULL);
-
+
+ //start the send, with another process than us as sender.
+ smpi_mpi_start(sreq);
+
//push request to receiver's win
xbt_dynar_push_as(send_win->requests, MPI_Request, sreq);