1
1

fortran: fix MPI_Win_allocate_shared and MPI_Win_shared_query

Several problems with MPI_Win_allocate_shared and MPI_Win_shared_query
were discovered in a code review.  This commit fixes them:

* Add _cptr versions of both subroutines in mpif-h, use-mpi-tkr, and
  use-mpi-ignore-tkr directories
* Fix case of PMPI weak symbols for both C implementations
* Add MPI and PMPI f08 implementations of both subroutines (there is
  no _cptr version in the mpi_f08 module)
* Fixed _f08 suffix on the f08 module of both subroutines

cmr=v1.8.2:ticket=trac:4736

This commit was SVN r32162.

The following Trac tickets were found above:
  Ticket 4736 --> https://svn.open-mpi.org/trac/ompi/ticket/4736
Этот коммит содержится в:
Jeff Squyres 2014-07-09 00:10:04 +00:00
родитель 1eb6ac5e80
Коммит 5081f958a6
14 изменённых файлов: 302 добавлений и 12 удалений

Просмотреть файл

@ -345,6 +345,7 @@
#define ompi_wait_f pompi_wait_f
#define ompi_waitsome_f pompi_waitsome_f
#define ompi_win_allocate_shared_f pompi_win_allocate_shared_f
#define ompi_win_allocate_shared_cptr_f pompi_win_allocate_shared_cptr_f
#define ompi_win_call_errhandler_f pompi_win_call_errhandler_f
#define ompi_win_complete_f pompi_win_complete_f
#define ompi_win_create_f pompi_win_create_f
@ -368,6 +369,7 @@
#define ompi_win_set_errhandler_f pompi_win_set_errhandler_f
#define ompi_win_set_name_f pompi_win_set_name_f
#define ompi_win_shared_query_f pompi_win_shared_query_f
#define ompi_win_shared_query_cptr_f pompi_win_shared_query_cptr_f
#define ompi_win_start_f pompi_win_start_f
#define ompi_win_test_f pompi_win_test_f
#define ompi_win_unlock_f pompi_win_unlock_f

Просмотреть файл

@ -402,6 +402,7 @@ PN2(void, MPI_Waitany, mpi_waitany, MPI_WAITANY, (MPI_Fint *count, MPI_Fint *arr
PN2(void, MPI_Wait, mpi_wait, MPI_WAIT, (MPI_Fint *request, MPI_Fint *status, MPI_Fint *ierr));
PN2(void, MPI_Waitsome, mpi_waitsome, MPI_WAITSOME, (MPI_Fint *incount, MPI_Fint *array_of_requests, MPI_Fint *outcount, MPI_Fint *array_of_indices, MPI_Fint *array_of_statuses, MPI_Fint *ierr));
PN2(void, MPI_Win_allocate_shared, mpi_win_allocate_shared, MPI_WIN_ALLOCATE_SHARED, (MPI_Aint *size, MPI_Fint *disp_unit, MPI_Fint *info, MPI_Fint *comm, char *baseptr, MPI_Fint *win, MPI_Fint *ierr));
PN2(void, MPI_Win_allocate_shared_cptr, mpi_win_allocate_shared_cptr, MPI_WIN_ALLOCATE_SHARED_CPTR, (MPI_Aint *size, MPI_Fint *disp_unit, MPI_Fint *info, MPI_Fint *comm, char *baseptr, MPI_Fint *win, MPI_Fint *ierr));
PN2(void, MPI_Win_call_errhandler, mpi_win_call_errhandler, MPI_WIN_CALL_ERRHANDLER, (MPI_Fint *win, MPI_Fint *errorcode, MPI_Fint *ierr));
PN2(void, MPI_Win_complete, mpi_win_complete, MPI_WIN_COMPLETE, (MPI_Fint *win, MPI_Fint *ierr));
PN2(void, MPI_Win_create, mpi_win_create, MPI_WIN_CREATE, (char *base, MPI_Aint *size, MPI_Fint *disp_unit, MPI_Fint *info, MPI_Fint *comm, MPI_Fint *win, MPI_Fint *ierr));
@ -425,6 +426,7 @@ PN2(void, MPI_Win_set_attr, mpi_win_set_attr, MPI_WIN_SET_ATTR, (MPI_Fint *win,
PN2(void, MPI_Win_set_errhandler, mpi_win_set_errhandler, MPI_WIN_SET_ERRHANDLER, (MPI_Fint *win, MPI_Fint *errhandler, MPI_Fint *ierr));
PN2(void, MPI_Win_set_name, mpi_win_set_name, MPI_WIN_SET_NAME, (MPI_Fint *win, char *win_name, MPI_Fint *ierr, int name_len));
PN2(void, MPI_Win_shared_query, mpi_win_shared_query, MPI_WIN_SHARED_QUERY, (MPI_Fint *win, MPI_Fint *rank, MPI_Aint *size, MPI_Fint *disp_unit, char *baseptr, MPI_Fint *ierr));
PN2(void, MPI_Win_shared_query_cptr, mpi_win_shared_query_cptr, MPI_WIN_SHARED_QUERY_CPTR, (MPI_Fint *win, MPI_Fint *rank, MPI_Aint *size, MPI_Fint *disp_unit, char *baseptr, MPI_Fint *ierr));
PN2(void, MPI_Win_start, mpi_win_start, MPI_WIN_START, (MPI_Fint *group, MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr));
PN2(void, MPI_Win_test, mpi_win_test, MPI_WIN_TEST, (MPI_Fint *win, ompi_fortran_logical_t *flag, MPI_Fint *ierr));
PN2(void, MPI_Win_unlock, mpi_win_unlock, MPI_WIN_UNLOCK, (MPI_Fint *rank, MPI_Fint *win, MPI_Fint *ierr));

Просмотреть файл

@ -27,8 +27,16 @@
#pragma weak pmpi_win_allocate_shared_ = ompi_win_allocate_shared_f
#pragma weak pmpi_win_allocate_shared__ = ompi_win_allocate_shared_f
#pragma weak Pmpi_win_allocate_shared_f = ompi_win_allocate_shared_f
#pragma weak Pmpi_win_allocate_shared_f08 = ompi_win_allocate_shared_f
#pragma weak PMPI_Win_allocate_shared_f = ompi_win_allocate_shared_f
#pragma weak PMPI_Win_allocate_shared_f08 = ompi_win_allocate_shared_f
#pragma weak PMPI_WIN_ALLOCATE_SHARED_CPTR = ompi_win_allocate_shared_f
#pragma weak pmpi_win_allocate_shared_cptr = ompi_win_allocate_shared_f
#pragma weak pmpi_win_allocate_shared_cptr_ = ompi_win_allocate_shared_f
#pragma weak pmpi_win_allocate_shared_cptr__ = ompi_win_allocate_shared_f
#pragma weak PMPI_Win_allocate_shared_cptr_f = ompi_win_allocate_shared_f
#pragma weak PMPI_Win_allocate_shared_cptr_f08 = ompi_win_allocate_shared_f
#elif OMPI_PROFILE_LAYER
OMPI_GENERATE_F77_BINDINGS (PMPI_WIN_ALLOCATE_SHARED,
pmpi_win_allocate_shared,
@ -39,6 +47,16 @@ OMPI_GENERATE_F77_BINDINGS (PMPI_WIN_ALLOCATE_SHARED,
MPI_Fint *info, MPI_Fint *comm, char *baseptr,
MPI_Fint *win, MPI_Fint *ierr),
(size, disp_unit, info, comm, baseptr, win, ierr) )
OMPI_GENERATE_F77_BINDINGS (PMPI_WIN_ALLOCATE_SHARED_CPTR,
pmpi_win_allocate_shared_cptr,
pmpi_win_allocate_shared_cptr_,
pmpi_win_allocate_shared_cptr__,
pompi_win_allocate_shared_cptr_f,
(MPI_Aint *size, MPI_Fint *disp_unit,
MPI_Fint *info, MPI_Fint *comm, char *baseptr,
MPI_Fint *win, MPI_Fint *ierr),
(size, disp_unit, info, comm, baseptr, win, ierr) )
#endif
#if OPAL_HAVE_WEAK_SYMBOLS
@ -47,8 +65,16 @@ OMPI_GENERATE_F77_BINDINGS (PMPI_WIN_ALLOCATE_SHARED,
#pragma weak mpi_win_allocate_shared_ = ompi_win_allocate_shared_f
#pragma weak mpi_win_allocate_shared__ = ompi_win_allocate_shared_f
#pragma weak mpi_win_allocate_shared_f = ompi_win_allocate_shared_f
#pragma weak mpi_win_allocate_shared_f08 = ompi_win_allocate_shared_f
#pragma weak MPI_Win_allocate_shared_f = ompi_win_allocate_shared_f
#pragma weak MPI_Win_allocate_shared_f08 = ompi_win_allocate_shared_f
#pragma weak MPI_WIN_ALLOCATE_SHARED_CPTR = ompi_win_allocate_shared_f
#pragma weak mpi_win_allocate_shared_cptr = ompi_win_allocate_shared_f
#pragma weak mpi_win_allocate_shared_cptr_ = ompi_win_allocate_shared_f
#pragma weak mpi_win_allocate_shared_cptr__ = ompi_win_allocate_shared_f
#pragma weak MPI_Win_allocate_shared_cptr_f = ompi_win_allocate_shared_f
#pragma weak MPI_Win_allocate_shared_cptr_f08 = ompi_win_allocate_shared_f
#endif
#if ! OPAL_HAVE_WEAK_SYMBOLS && ! OMPI_PROFILE_LAYER
@ -61,6 +87,16 @@ OMPI_GENERATE_F77_BINDINGS (MPI_WIN_ALLOCATE_SHARED,
MPI_Fint *info, MPI_Fint *comm, char *baseptr,
MPI_Fint *win, MPI_Fint *ierr),
(size, disp_unit, info, comm, baseptr, win, ierr) )
OMPI_GENERATE_F77_BINDINGS (MPI_WIN_ALLOCATE_SHARED_CPTR,
mpi_win_allocate_shared_cptr,
mpi_win_allocate_shared_cptr_,
mpi_win_allocate_shared_cptr__,
ompi_win_allocate_shared_cptr_f,
(MPI_Aint *size, MPI_Fint *disp_unit,
MPI_Fint *info, MPI_Fint *comm, char *baseptr,
MPI_Fint *win, MPI_Fint *ierr),
(size, disp_unit, info, comm, baseptr, win, ierr) )
#endif
@ -86,3 +122,16 @@ void ompi_win_allocate_shared_f(MPI_Aint *size, MPI_Fint *disp_unit,
*win = MPI_Win_c2f(c_win);
if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr);
}
/*
* Note that MPI-3 mandates a second form of the
* MPI_Win_allocate_shared interface -- one that has a "_cptr" suffix.
*/
void ompi_win_allocate_shared_cptr_f(MPI_Aint *size, MPI_Fint *disp_unit,
MPI_Fint *info, MPI_Fint *comm,
char *baseptr,
MPI_Fint *win, MPI_Fint *ierr)
{
ompi_win_allocate_shared_f(size, disp_unit, info, comm, baseptr,
win, ierr);
}

Просмотреть файл

@ -27,8 +27,16 @@
#pragma weak pmpi_win_shared_query_ = ompi_win_shared_query_f
#pragma weak pmpi_win_shared_query__ = ompi_win_shared_query_f
#pragma weak Pmpi_win_shared_query_f = ompi_win_shared_query_f
#pragma weak Pmpi_win_shared_query_f08 = ompi_win_shared_query_f
#pragma weak PMPI_Win_shared_query_f = ompi_win_shared_query_f
#pragma weak PMPI_Win_shared_query_f08 = ompi_win_shared_query_f
#pragma weak PMPI_WIN_SHARED_QUERY_CPTR = ompi_win_shared_query_f
#pragma weak pmpi_win_shared_query_cptr = ompi_win_shared_query_f
#pragma weak pmpi_win_shared_query_cptr_ = ompi_win_shared_query_f
#pragma weak pmpi_win_shared_query_cptr__ = ompi_win_shared_query_f
#pragma weak PMPI_Win_shared_query_cptr_f = ompi_win_shared_query_f
#pragma weak PMPI_Win_shared_query_cptr_f08 = ompi_win_shared_query_f
#elif OMPI_PROFILE_LAYER
OMPI_GENERATE_F77_BINDINGS (PMPI_WIN_SHARED_QUERY,
pmpi_win_shared_query,
@ -39,6 +47,16 @@ OMPI_GENERATE_F77_BINDINGS (PMPI_WIN_SHARED_QUERY,
MPI_Fint *disp_unit, char *baseptr,
MPI_Fint *ierr),
(win, rank, size, disp_unit, baseptr, ierr) )
OMPI_GENERATE_F77_BINDINGS (PMPI_WIN_SHARED_QUERY_CPTR,
pmpi_win_shared_query_cptr,
pmpi_win_shared_query_cptr_,
pmpi_win_shared_query_cptr__,
pompi_win_shared_query_cptr_f,
(MPI_Fint *win, MPI_Fint *rank, MPI_Aint *size,
MPI_Fint *disp_unit, char *baseptr,
MPI_Fint *ierr),
(win, rank, size, disp_unit, baseptr, ierr) )
#endif
#if OPAL_HAVE_WEAK_SYMBOLS
@ -47,8 +65,16 @@ OMPI_GENERATE_F77_BINDINGS (PMPI_WIN_SHARED_QUERY,
#pragma weak mpi_win_shared_query_ = ompi_win_shared_query_f
#pragma weak mpi_win_shared_query__ = ompi_win_shared_query_f
#pragma weak mpi_win_shared_query_f = ompi_win_shared_query_f
#pragma weak mpi_win_shared_query_f08 = ompi_win_shared_query_f
#pragma weak MPI_Win_shared_query_f = ompi_win_shared_query_f
#pragma weak MPI_Win_shared_query_f08 = ompi_win_shared_query_f
#pragma weak MPI_WIN_SHARED_QUERY_CPTR = ompi_win_shared_query_f
#pragma weak mpi_win_shared_query_cptr = ompi_win_shared_query_f
#pragma weak mpi_win_shared_query_cptr_ = ompi_win_shared_query_f
#pragma weak mpi_win_shared_query_cptr__ = ompi_win_shared_query_f
#pragma weak MPI_Win_shared_query_cptr_f = ompi_win_shared_query_f
#pragma weak MPI_Win_shared_query_cptr_f08 = ompi_win_shared_query_f
#endif
#if ! OPAL_HAVE_WEAK_SYMBOLS && ! OMPI_PROFILE_LAYER
@ -61,6 +87,16 @@ OMPI_GENERATE_F77_BINDINGS (MPI_WIN_SHARED_QUERY,
MPI_Fint *disp_unit, char *baseptr,
MPI_Fint *ierr),
(win, rank, size, disp_unit, baseptr, ierr) )
OMPI_GENERATE_F77_BINDINGS (MPI_WIN_SHARED_QUERY_CPTR,
mpi_win_shared_query_cptr,
mpi_win_shared_query_cptr_,
mpi_win_shared_query_cptr__,
ompi_win_shared_query_cptr_f,
(MPI_Fint *win, MPI_Fint *rank, MPI_Aint *size,
MPI_Fint *disp_unit, char *baseptr,
MPI_Fint *ierr),
(win, rank, size, disp_unit, baseptr, ierr) )
#endif
@ -81,3 +117,15 @@ void ompi_win_shared_query_f(MPI_Fint *win, MPI_Fint *rank, MPI_Aint *size,
OMPI_FINT_2_INT(disp_unit), baseptr);
if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr);
}
/*
* Note that MPI-3 mandates a second form of the MPI_Win_shared_query
* interface -- one that has a "_cptr" suffix.
*/
void ompi_win_shared_query_cptr_f(MPI_Fint *win, MPI_Fint *rank, MPI_Aint *size,
MPI_Fint *disp_unit, char *baseptr,
MPI_Fint *ierr)
{
ompi_win_shared_query_f(win, rank, size, disp_unit, baseptr, ierr);
}

Просмотреть файл

@ -282,6 +282,7 @@ mpi_api_files = \
waitany_f08.F90 \
wait_f08.F90 \
waitsome_f08.F90 \
win_allocate_shared_f08.F90 \
win_call_errhandler_f08.F90 \
win_complete_f08.F90 \
win_create_errhandler_f08.F90 \
@ -304,6 +305,7 @@ mpi_api_files = \
win_set_attr_f08.F90 \
win_set_errhandler_f08.F90 \
win_set_name_f08.F90 \
win_shared_query_f08.F90 \
win_start_f08.F90 \
win_test_f08.F90 \
win_unlock_f08.F90 \
@ -622,6 +624,7 @@ pmpi_api_files = \
profile/pwaitany_f08.F90 \
profile/pwait_f08.F90 \
profile/pwaitsome_f08.F90 \
profile/pwin_allocate_shared_f08.F90 \
profile/pwin_call_errhandler_f08.F90 \
profile/pwin_complete_f08.F90 \
profile/pwin_create_errhandler_f08.F90 \
@ -644,6 +647,7 @@ pmpi_api_files = \
profile/pwin_set_attr_f08.F90 \
profile/pwin_set_errhandler_f08.F90 \
profile/pwin_set_name_f08.F90 \
profile/pwin_shared_query_f08.F90 \
profile/pwin_start_f08.F90 \
profile/pwin_test_f08.F90 \
profile/pwin_unlock_f08.F90 \

Просмотреть файл

@ -1573,6 +1573,19 @@ subroutine ompi_type_set_name_f(type,type_name,ierror,type_name_len) &
INTEGER, VALUE, INTENT(IN) :: type_name_len
end subroutine ompi_type_set_name_f
subroutine ompi_win_allocate_shared_f(size, disp_unit, info, comm, &
baseptr, win, ierror) BIND(C, name="ompi_win_allocate_shared_f")
USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR
use :: mpi_f08_types, only : MPI_ADDRESS_KIND
INTEGER(KIND=MPI_ADDRESS_KIND), INTENT(IN) :: size
INTEGER, INTENT(IN) :: disp_unit
INTEGER, INTENT(IN) :: info
INTEGER, INTENT(IN) :: comm
TYPE(C_PTR), INTENT(OUT) :: baseptr
INTEGER, INTENT(OUT) :: win
INTEGER, INTENT(OUT) :: ierror
end subroutine ompi_win_allocate_shared_f
subroutine ompi_win_create_keyval_f(win_copy_attr_fn,win_delete_attr_fn, &
win_keyval,extra_state,ierror) &
BIND(C, name="ompi_win_create_keyval_f")
@ -2413,6 +2426,18 @@ subroutine ompi_win_post_f(group,assert,win,ierror) &
INTEGER, INTENT(OUT) :: ierror
end subroutine ompi_win_post_f
subroutine ompi_win_shared_query_f(win, rank, size, disp_unit, baseptr,&
ierror) BIND(C, name="ompi_win_shared_query_f")
USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR
use :: mpi_f08_types, only : MPI_ADDRESS_KIND
INTEGER, INTENT(IN) :: win
INTEGER, INTENT(IN) :: rank
INTEGER(KIND=MPI_ADDRESS_KIND), INTENT(OUT) :: size
INTEGER, INTENT(OUT) :: disp_unit
TYPE(C_PTR), INTENT(OUT) :: baseptr
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
end subroutine ompi_win_shared_query_f
subroutine ompi_win_start_f(group,assert,win,ierror) &
BIND(C, name="ompi_win_start_f")
implicit none

Просмотреть файл

@ -2104,7 +2104,7 @@ end subroutine MPI_Type_set_name_f08
end interface MPI_Type_set_name
interface MPI_Win_allocate_shared
subroutine MPI_Win_allocate_shared(size, disp_unit, info, comm, &
subroutine MPI_Win_allocate_shared_f08(size, disp_unit, info, comm, &
baseptr, win, ierror)
USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR
use :: mpi_f08_types, only : MPI_Info, MPI_Comm, MPI_Win, MPI_ADDRESS_KIND
@ -2115,7 +2115,7 @@ subroutine MPI_Win_allocate_shared(size, disp_unit, info, comm, &
TYPE(C_PTR), INTENT(OUT) :: baseptr
TYPE(MPI_Win), INTENT(OUT) :: win
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
end subroutine MPI_Win_allocate_shared
end subroutine MPI_Win_allocate_shared_f08
end interface
interface MPI_Win_create_keyval
@ -3239,7 +3239,7 @@ end subroutine MPI_Win_post_f08
end interface MPI_Win_post
interface MPI_Win_shared_query
subroutine MPI_Win_shared_query(win, rank, size, disp_unit, baseptr,&
subroutine MPI_Win_shared_query_f08(win, rank, size, disp_unit, baseptr,&
ierror)
USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR
use :: mpi_f08_types, only : MPI_Win, MPI_ADDRESS_KIND
@ -3249,7 +3249,7 @@ subroutine MPI_Win_shared_query(win, rank, size, disp_unit, baseptr,&
INTEGER, INTENT(OUT) :: disp_unit
TYPE(C_PTR), INTENT(OUT) :: baseptr
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
end subroutine MPI_Win_shared_query
end subroutine MPI_Win_shared_query_f08
end interface
interface MPI_Win_start

Просмотреть файл

@ -1407,6 +1407,19 @@ subroutine pompi_type_set_name_f(type,type_name,ierror,type_name_len) &
INTEGER, VALUE, INTENT(IN) :: type_name_len
end subroutine pompi_type_set_name_f
subroutine pompi_win_allocate_shared_f(size, disp_unit, info, comm, &
baseptr, win, ierror) BIND(C, name="ompi_win_allocate_shared_f")
USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR
use :: mpi_f08_types, only : MPI_ADDRESS_KIND
INTEGER(KIND=MPI_ADDRESS_KIND), INTENT(IN) :: size
INTEGER, INTENT(IN) :: disp_unit
INTEGER, INTENT(IN) :: info
INTEGER, INTENT(IN) :: comm
TYPE(C_PTR), INTENT(OUT) :: baseptr
INTEGER, INTENT(OUT) :: win
INTEGER, INTENT(OUT) :: ierror
end subroutine pompi_win_allocate_shared_f
subroutine pompi_win_create_keyval_f(win_copy_attr_fn,win_delete_attr_fn, &
win_keyval,extra_state,ierror) &
BIND(C, name="pompi_win_create_keyval_f")
@ -2250,6 +2263,18 @@ subroutine pompi_win_post_f(group,assert,win,ierror) &
INTEGER, INTENT(OUT) :: ierror
end subroutine pompi_win_post_f
subroutine pompi_win_shared_query_f(win, rank, size, disp_unit, baseptr,&
ierror) BIND(C, name="ompi_win_shared_query_f")
USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR
use :: mpi_f08_types, only : MPI_ADDRESS_KIND
INTEGER, INTENT(IN) :: win
INTEGER, INTENT(IN) :: rank
INTEGER(KIND=MPI_ADDRESS_KIND), INTENT(OUT) :: size
INTEGER, INTENT(OUT) :: disp_unit
TYPE(C_PTR), INTENT(OUT) :: baseptr
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
end subroutine pompi_win_shared_query_f
subroutine pompi_win_start_f(group,assert,win,ierror) &
BIND(C, name="pompi_win_start_f")
implicit none

Просмотреть файл

@ -0,0 +1,26 @@
! -*- f90 -*-
!
! Copyright (c) 2010-2012 Cisco Systems, Inc. All rights reserved.
! Copyright (c) 2009-2012 Los Alamos National Security, LLC.
! All Rights reserved.
! $COPYRIGHT$
subroutine PMPI_Win_allocate_shared_f08(size, disp_unit, info, comm, &
baseptr, win, ierror)
USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR
use :: mpi_f08_types, only : MPI_Info, MPI_Comm, MPI_Win, MPI_ADDRESS_KIND
use :: mpi_f08, only : ompi_win_allocate_shared_f
implicit none
INTEGER(KIND=MPI_ADDRESS_KIND), INTENT(IN) :: size
INTEGER, INTENT(IN) :: disp_unit
TYPE(MPI_Info), INTENT(IN) :: info
TYPE(MPI_Comm), INTENT(IN) :: comm
TYPE(C_PTR), INTENT(OUT) :: baseptr
TYPE(MPI_Win), INTENT(OUT) :: win
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
integer :: c_ierror
call ompi_win_allocate_shared_f(size, disp_unit, info%MPI_VAL, comm%MPI_VAL, baseptr, win%MPI_VAL, c_ierror)
if (present(ierror)) ierror = c_ierror
end subroutine PMPI_Win_allocate_shared_f08

Просмотреть файл

@ -0,0 +1,25 @@
! -*- f90 -*-
!
! Copyright (c) 2010-2012 Cisco Systems, Inc. All rights reserved.
! Copyright (c) 2009-2012 Los Alamos National Security, LLC.
! All Rights reserved.
! $COPYRIGHT$
subroutine PMPI_Win_shared_query_f08(win, rank, size, disp_unit, baseptr,&
ierror)
USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR
use :: mpi_f08_types, only : MPI_Win, MPI_ADDRESS_KIND
use :: mpi_f08, only : ompi_win_shared_query_f
implicit none
TYPE(MPI_Win), INTENT(IN) :: win
INTEGER, INTENT(IN) :: rank
INTEGER(KIND=MPI_ADDRESS_KIND), INTENT(OUT) :: size
INTEGER, INTENT(OUT) :: disp_unit
TYPE(C_PTR), INTENT(OUT) :: baseptr
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
integer :: c_ierror
call ompi_win_shared_query_f(win%MPI_VAL, rank, size, disp_unit, baseptr, c_ierror)
if (present(ierror)) ierror = c_ierror
end subroutine PMPI_Win_shared_query_f08

Просмотреть файл

@ -0,0 +1,26 @@
! -*- f90 -*-
!
! Copyright (c) 2010-2012 Cisco Systems, Inc. All rights reserved.
! Copyright (c) 2009-2012 Los Alamos National Security, LLC.
! All Rights reserved.
! $COPYRIGHT$
subroutine MPI_Win_allocate_shared_f08(size, disp_unit, info, comm, &
baseptr, win, ierror)
USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR
use :: mpi_f08_types, only : MPI_Info, MPI_Comm, MPI_Win, MPI_ADDRESS_KIND
use :: mpi_f08, only : ompi_win_allocate_shared_f
implicit none
INTEGER(KIND=MPI_ADDRESS_KIND), INTENT(IN) :: size
INTEGER, INTENT(IN) :: disp_unit
TYPE(MPI_Info), INTENT(IN) :: info
TYPE(MPI_Comm), INTENT(IN) :: comm
TYPE(C_PTR), INTENT(OUT) :: baseptr
TYPE(MPI_Win), INTENT(OUT) :: win
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
integer :: c_ierror
call ompi_win_allocate_shared_f(size, disp_unit, info%MPI_VAL, comm%MPI_VAL, baseptr, win%MPI_VAL, c_ierror)
if (present(ierror)) ierror = c_ierror
end subroutine MPI_Win_allocate_shared_f08

Просмотреть файл

@ -0,0 +1,25 @@
! -*- f90 -*-
!
! Copyright (c) 2010-2012 Cisco Systems, Inc. All rights reserved.
! Copyright (c) 2009-2012 Los Alamos National Security, LLC.
! All Rights reserved.
! $COPYRIGHT$
subroutine MPI_Win_shared_query_f08(win, rank, size, disp_unit, baseptr,&
ierror)
USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR
use :: mpi_f08_types, only : MPI_Win, MPI_ADDRESS_KIND
use :: mpi_f08, only : ompi_win_shared_query_f
implicit none
TYPE(MPI_Win), INTENT(IN) :: win
INTEGER, INTENT(IN) :: rank
INTEGER(KIND=MPI_ADDRESS_KIND), INTENT(OUT) :: size
INTEGER, INTENT(OUT) :: disp_unit
TYPE(C_PTR), INTENT(OUT) :: baseptr
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
integer :: c_ierror
call ompi_win_shared_query_f(win%MPI_VAL, rank, size, disp_unit, baseptr, c_ierror)
if (present(ierror)) ierror = c_ierror
end subroutine MPI_Win_shared_query_f08

Просмотреть файл

@ -8486,6 +8486,18 @@ subroutine MPI_Win_shared_query(win, rank, size, disp_unit, baseptr,&
integer, intent(out) :: ierror
end subroutine MPI_Win_shared_query
subroutine MPI_Win_shared_query_cptr(win, rank, size, disp_unit, baseptr,&
ierror)
use, intrinsic :: iso_c_binding, only : c_ptr
include 'mpif-config.h'
integer, intent(in) :: win
integer, intent(in) :: rank
integer(KIND=MPI_ADDRESS_KIND), intent(out) :: size
integer, intent(out) :: disp_unit
type(C_PTR), intent(out) :: baseptr
integer, intent(out) :: ierror
end subroutine MPI_Win_shared_query_cptr
end interface

Просмотреть файл

@ -2895,6 +2895,15 @@ subroutine MPI_Win_allocate_shared(size, disp_unit, info, comm, &
integer, intent(out) :: ierror
end subroutine MPI_Win_allocate_shared
subroutine MPI_Win_allocate_shared_cptr(size, disp_unit, info, comm, &
baseptr, win, ierror)
use, intrinsic :: iso_c_binding, only : c_ptr
include 'mpif-config.h'
integer :: disp_unit, info, comm, win, ierror
integer(KIND=MPI_ADDRESS_KIND) :: size
type(C_PTR) :: baseptr
end subroutine MPI_Win_allocate_shared_cptr
end interface
@ -3107,6 +3116,18 @@ subroutine MPI_Win_shared_query(win, rank, size, disp_unit, baseptr,&
integer, intent(out) :: ierror
end subroutine MPI_Win_shared_query
subroutine MPI_Win_shared_query_cptr(win, rank, size, disp_unit, baseptr,&
ierror)
use, intrinsic :: iso_c_binding, only : c_ptr
include 'mpif-config.h'
integer, intent(in) :: win
integer, intent(in) :: rank
integer(KIND=MPI_ADDRESS_KIND), intent(out) :: size
integer, intent(out) :: disp_unit
type(C_PTR), intent(out) :: baseptr
integer, intent(out) :: ierror
end subroutine MPI_Win_shared_query_cptr
end interface