int ompi_win_create_dynamic(opal_info_t *info, ompi_communicator_t *comm, ompi_win_t **newwin) { ompi_win_t *win; int model; int ret; ret = alloc_window (comm, info, MPI_WIN_FLAVOR_DYNAMIC, &win); if (OMPI_SUCCESS != ret) { return ret; } ret = ompi_osc_base_select(win, MPI_BOTTOM, 0, 1, comm, info, MPI_WIN_FLAVOR_DYNAMIC, &model); if (OMPI_SUCCESS != ret) { OBJ_RELEASE(win); return ret; } ret = config_window(MPI_BOTTOM, 0, 1, MPI_WIN_FLAVOR_DYNAMIC, model, win); if (OMPI_SUCCESS != ret) { OBJ_RELEASE(win); return ret; } *newwin = win; return OMPI_SUCCESS; }
int ompi_win_allocate_shared(size_t size, int disp_unit, opal_info_t *info, ompi_communicator_t *comm, void *baseptr, ompi_win_t **newwin) { ompi_win_t *win; int model; int ret; void *base; ret = alloc_window (comm, info, MPI_WIN_FLAVOR_SHARED, &win); if (OMPI_SUCCESS != ret) { return ret; } ret = ompi_osc_base_select(win, &base, size, disp_unit, comm, info, MPI_WIN_FLAVOR_SHARED, &model); if (OMPI_SUCCESS != ret) { OBJ_RELEASE(win); return ret; } ret = config_window(base, size, disp_unit, MPI_WIN_FLAVOR_SHARED, model, win); if (OMPI_SUCCESS != ret) { OBJ_RELEASE(win); return ret; } *((void**) baseptr) = base; *newwin = win; return OMPI_SUCCESS; }
int ompi_win_create(void *base, size_t size, int disp_unit, ompi_communicator_t *comm, opal_info_t *info, ompi_win_t** newwin) { ompi_win_t *win; int model; int ret; ret = alloc_window (comm, info, MPI_WIN_FLAVOR_CREATE, &win); if (OMPI_SUCCESS != ret) { return ret; } ret = ompi_osc_base_select(win, &base, size, disp_unit, comm, info, MPI_WIN_FLAVOR_CREATE, &model); if (OMPI_SUCCESS != ret) { OBJ_RELEASE(win); return ret; } ret = config_window(base, size, disp_unit, MPI_WIN_FLAVOR_CREATE, model, win); if (OMPI_SUCCESS != ret) { OBJ_RELEASE(win); return ret; } *newwin = win; return OMPI_SUCCESS; }
int ompi_win_allocate(size_t size, int disp_unit, ompi_info_t *info, ompi_communicator_t *comm, void *baseptr, ompi_win_t **newwin) { ompi_win_t *win; int model; int ret; void *base; win = alloc_window(comm); if (NULL == win) return OMPI_ERR_OUT_OF_RESOURCE; ret = ompi_osc_base_select(win, &base, size, disp_unit, comm, info, MPI_WIN_FLAVOR_ALLOCATE, &model); if (OMPI_SUCCESS != ret) { OBJ_RELEASE(win); return ret; } ret = config_window(base, size, disp_unit, MPI_WIN_FLAVOR_ALLOCATE, model, win); if (OMPI_SUCCESS != ret) { OBJ_RELEASE(win); return ret; } *((void**) baseptr) = base; *newwin = win; return OMPI_SUCCESS; }
int ompi_win_create(void *base, size_t size, int disp_unit, ompi_communicator_t *comm, ompi_info_t *info, ompi_win_t** newwin) { ompi_win_t *win; ompi_group_t *group; int ret; /* create the object */ win = OBJ_NEW(ompi_win_t); if (NULL == win) return OMPI_ERR_TEMP_OUT_OF_RESOURCE; /* setup data that is independent of osc component */ group = comm->c_local_group; OBJ_RETAIN(group); ompi_group_increment_proc_count(group); win->w_group = group; win->w_baseptr = base; win->w_size = size; win->w_disp_unit = disp_unit; /* Fill in required attributes */ ret = ompi_attr_set_c(WIN_ATTR, win, &win->w_keyhash, MPI_WIN_BASE, win->w_baseptr, true, true); if (OMPI_SUCCESS != ret) { OBJ_RELEASE(win); return ret; } ret = ompi_attr_set_fortran_mpi2(WIN_ATTR, win, &win->w_keyhash, MPI_WIN_SIZE, win->w_size, true, true); if (OMPI_SUCCESS != ret) { OBJ_RELEASE(win); return ret; } ret = ompi_attr_set_fortran_mpi2(WIN_ATTR, win, &win->w_keyhash, MPI_WIN_DISP_UNIT, win->w_disp_unit, true, true); if (OMPI_SUCCESS != ret) { OBJ_RELEASE(win); return ret; } /* create backend onesided module for this window */ ret = ompi_osc_base_select(win, (ompi_info_t*) info, comm); if (OMPI_SUCCESS != ret) { OBJ_RELEASE(win); return ret; } /* fill in Fortran index */ win->w_f_to_c_index = ompi_pointer_array_add(&ompi_mpi_windows, win); if (-1 == win->w_f_to_c_index) { ompi_win_free(win); return OMPI_ERR_OUT_OF_RESOURCE; } *newwin = win; return OMPI_SUCCESS; }