int MPI_Win_post_C_Wrapper (MPI_Group group, int assert, MPI_Win win) { int res; TRACE_MPIEVENT(LAST_READ_TIME, MPI_WIN_POST_EV, EVT_BEGIN, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY); res = PMPI_Win_post (group, assert, win); TRACE_MPIEVENT(TIME, MPI_WIN_POST_EV, EVT_END, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY); updateStats_OTHER(global_mpi_stats); return res; }
void ompi_win_post_f(MPI_Fint *group, MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr) { int c_ierr; MPI_Win c_win = PMPI_Win_f2c(*win); MPI_Group c_grp = PMPI_Group_f2c(*group); c_ierr = PMPI_Win_post(c_grp, OMPI_FINT_2_INT(*assert), c_win); if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr); }
int MPI_Win_post(MPI_Group group, int assert, MPI_Win win) { MTCORE_Win *uh_win; int mpi_errno = MPI_SUCCESS; int post_grp_size = 0; int i; MTCORE_Fetch_uh_win_from_cache(win, uh_win); if (uh_win == NULL) { /* normal window */ return PMPI_Win_post(group, assert, win); } MTCORE_Assert((uh_win->info_args.epoch_type & MTCORE_EPOCH_PSCW)); if (group == MPI_GROUP_NULL) { /* standard says do nothing for empty group */ MTCORE_DBG_PRINT("Post empty group\n"); return mpi_errno; } mpi_errno = PMPI_Group_size(group, &post_grp_size); if (mpi_errno != MPI_SUCCESS) goto fn_fail; if (post_grp_size <= 0) { /* standard says do nothing for empty group */ MTCORE_DBG_PRINT("Post empty group\n"); return mpi_errno; } uh_win->post_group = group; uh_win->post_ranks_in_win_group = calloc(post_grp_size, sizeof(int)); MTCORE_DBG_PRINT("post group 0x%x, size %d\n", uh_win->post_group, post_grp_size); /* Both lock and start only allow no_check assert. */ assert = (assert == MPI_MODE_NOCHECK) ? MPI_MODE_NOCHECK : 0; mpi_errno = fill_ranks_in_win_grp(uh_win); if (mpi_errno != MPI_SUCCESS) goto fn_fail; /* Synchronize start-post if user does not specify nocheck */ if ((assert & MPI_MODE_NOCHECK) == 0) { mpi_errno = MTCORE_Send_pscw_post_msg(post_grp_size, uh_win); if (mpi_errno != MPI_SUCCESS) goto fn_fail; } /* Need win_sync for synchronizing local window update. * Still need it to avoid instruction reordering of preceding load * even if user says no preceding store. */ mpi_errno = PMPI_Win_sync(uh_win->active_win); if (mpi_errno != MPI_SUCCESS) goto fn_fail; MTCORE_DBG_PRINT("Post done\n"); fn_exit: return mpi_errno; fn_fail: if (uh_win->post_ranks_in_win_group) free(uh_win->post_ranks_in_win_group); uh_win->post_group = MPI_GROUP_NULL; uh_win->post_ranks_in_win_group = NULL; return mpi_errno; }
int MPI_Win_post(MPI_Group group, int assert, MPI_Win win){ return PMPI_Win_post(group, assert, win); }