From 208b8410ba651abe6ddafe443e3f292a58238843 Mon Sep 17 00:00:00 2001 From: Jeff Squyres Date: Tue, 21 Sep 2004 19:52:19 +0000 Subject: [PATCH] Bunches of fixes for attributes, particularly in terms of language interoperability This commit was SVN r2793. --- src/attribute/attribute_predefined.c | 2 + src/mpi/f77/attr_get_f.c | 40 ++++++++++---- src/mpi/f77/attr_put_f.c | 19 +++++-- src/mpi/f77/comm_get_attr_f.c | 36 +++++++++---- src/mpi/f77/comm_set_attr_f.c | 10 ++-- src/mpi/f77/prototypes_mpi.h | 80 ++++++++++++++-------------- src/mpi/f77/type_get_attr_f.c | 40 ++++++++++---- src/mpi/f77/type_set_attr_f.c | 10 ++-- src/mpi/f77/win_get_attr_f.c | 40 ++++++++++---- src/mpi/f77/win_set_attr_f.c | 6 +-- 10 files changed, 186 insertions(+), 97 deletions(-) diff --git a/src/attribute/attribute_predefined.c b/src/attribute/attribute_predefined.c index bbdb438586..9e367f9dfe 100644 --- a/src/attribute/attribute_predefined.c +++ b/src/attribute/attribute_predefined.c @@ -126,6 +126,8 @@ int ompi_attr_create_predefined(void) OMPI_SUCCESS != (err = set(MPI_UNIVERSE_SIZE, &attr_universe_size)) || #if 0 /* JMS for when we implement windows */ + /* JMS BE SURE TO READ ALL OF MPI-2 4.12.7 BEFORE IMPLEMENTING + THESE ADDRESS-VALUED ATTRIBUTES! */ OMPI_SUCCESS != (err = set(MPI_WIN_BASE, &attr_win_base)) || OMPI_SUCCESS != (err = set(MPI_WIN_SIZE, &attr_win_size)) || OMPI_SUCCESS != (err = set(MPI_WIN_DISP_UNIT, &attr_win_disp_unit)) || diff --git a/src/mpi/f77/attr_get_f.c b/src/mpi/f77/attr_get_f.c index 482d5cca88..a858ae689a 100644 --- a/src/mpi/f77/attr_get_f.c +++ b/src/mpi/f77/attr_get_f.c @@ -20,7 +20,7 @@ OMPI_GENERATE_F77_BINDINGS (PMPI_ATTR_GET, pmpi_attr_get_, pmpi_attr_get__, pmpi_attr_get_f, - (MPI_Fint *comm, MPI_Fint *keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr), + (MPI_Fint *comm, MPI_Fint *keyval, MPI_Fnt *attribute_val, MPI_Fint *flag, MPI_Fint *ierr), (comm, keyval, attribute_val, flag, ierr) ) #endif @@ -37,7 +37,7 @@ OMPI_GENERATE_F77_BINDINGS (MPI_ATTR_GET, mpi_attr_get_, mpi_attr_get__, mpi_attr_get_f, - (MPI_Fint *comm, MPI_Fint *keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr), + (MPI_Fint *comm, MPI_Fint *keyval, MPI_Fint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr), (comm, keyval, attribute_val, flag, ierr) ) #endif @@ -47,16 +47,38 @@ OMPI_GENERATE_F77_BINDINGS (MPI_ATTR_GET, #endif void mpi_attr_get_f(MPI_Fint *comm, MPI_Fint *keyval, - char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr) + MPI_Fint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr) { + int c_err, c_flag; MPI_Comm c_comm; - OMPI_SINGLE_NAME_DECL(flag); + int *c_value; c_comm = MPI_Comm_f2c(*comm); - *ierr = OMPI_INT_2_FINT(MPI_Attr_get(c_comm, - OMPI_FINT_2_INT(*keyval), - attribute_val, - OMPI_SINGLE_NAME_CONVERT(flag))); - OMPI_SINGLE_INT_2_FINT(flag); + /* This stuff is very confusing. Be sure to see MPI-2 4.12.7. */ + + /* Didn't use all the FINT macros that could have prevented a few + extra variables in this function, but I figured that the + clarity of code, and the fact that this is not expected to be a + high-performance function, was worth it */ + + /* Note that this function deals with attribute values that are + the size of Fortran INTEGERS; MPI_ATTR_GET deals with attribute + values that are the size of address integers. Hence, it is + possible that you'll lose some precision upon the cast. Per + MPI-2 4.12.7, use MPI_xxx_get/put_attr when you need lossless + conversion. */ + + c_err = MPI_Attr_get(c_comm, OMPI_FINT_2_INT(*keyval), &c_value, &c_flag); + *ierr = OMPI_INT_2_FINT(c_err); + *flag = OMPI_INT_2_FINT(c_flag); + + /* Note that MPI-2 4.12.7 specifically says that Fortran's + ATTR_GET function will take the address returned from C and + "convert it to an integer" (which assumedly means + dereference) */ + + if (MPI_SUCCESS == c_err && 1 == c_flag) { + *attribute_val = OMPI_INT_2_FINT(*c_value); + } } diff --git a/src/mpi/f77/attr_put_f.c b/src/mpi/f77/attr_put_f.c index c4010c032f..57af778ccd 100644 --- a/src/mpi/f77/attr_put_f.c +++ b/src/mpi/f77/attr_put_f.c @@ -20,7 +20,7 @@ OMPI_GENERATE_F77_BINDINGS (PMPI_ATTR_PUT, pmpi_attr_put_, pmpi_attr_put__, pmpi_attr_put_f, - (MPI_Fint *comm, MPI_Fint *keyval, char *attribute_val, MPI_Fint *ierr), + (MPI_Fint *comm, MPI_Fint *keyval, MPI_Fint *attribute_val, MPI_Fint *ierr), (comm, keyval, attribute_val, ierr) ) #endif @@ -37,7 +37,7 @@ OMPI_GENERATE_F77_BINDINGS (MPI_ATTR_PUT, mpi_attr_put_, mpi_attr_put__, mpi_attr_put_f, - (MPI_Fint *comm, MPI_Fint *keyval, char *attribute_val, MPI_Fint *ierr), + (MPI_Fint *comm, MPI_Fint *keyval, MPI_Fint *attribute_val, MPI_Fint *ierr), (comm, keyval, attribute_val, ierr) ) #endif @@ -46,14 +46,27 @@ OMPI_GENERATE_F77_BINDINGS (MPI_ATTR_PUT, #include "mpi/f77/profile/defines.h" #endif -void mpi_attr_put_f(MPI_Fint *comm, MPI_Fint *keyval, char *attribute_val, +void mpi_attr_put_f(MPI_Fint *comm, MPI_Fint *keyval, MPI_Fint *attribute_val, MPI_Fint *ierr) { MPI_Comm c_comm; + int *c_value; c_comm = MPI_Comm_f2c(*comm); + /* This stuff is very confusing. Be sure to see MPI-2 4.12.7. */ + + /* Note that this function deals with attribute values that are + the size of Fortran INTEGERS; MPI_ATTR_PUT deals with attribute + values that are the size of address integers. Hence, it is + possible that the C value is larger than the Fortran value. + MPI says that we sign-extend in this case. */ + + c_value = (int *) *attribute_val; *ierr = OMPI_INT_2_FINT(MPI_Attr_put(c_comm, OMPI_FINT_2_INT(*keyval), attribute_val)); + if (MPI_SUCCESS == *ierr) { + + } } diff --git a/src/mpi/f77/comm_get_attr_f.c b/src/mpi/f77/comm_get_attr_f.c index 39228959ce..91c154d044 100644 --- a/src/mpi/f77/comm_get_attr_f.c +++ b/src/mpi/f77/comm_get_attr_f.c @@ -20,7 +20,7 @@ OMPI_GENERATE_F77_BINDINGS (PMPI_COMM_GET_ATTR, pmpi_comm_get_attr_, pmpi_comm_get_attr__, pmpi_comm_get_attr_f, - (MPI_Fint *comm, MPI_Fint *comm_keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr), + (MPI_Fint *comm, MPI_Fint *comm_keyval, MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr), (comm, comm_keyval, attribute_val, flag, ierr) ) #endif @@ -37,7 +37,7 @@ OMPI_GENERATE_F77_BINDINGS (MPI_COMM_GET_ATTR, mpi_comm_get_attr_, mpi_comm_get_attr__, mpi_comm_get_attr_f, - (MPI_Fint *comm, MPI_Fint *comm_keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr), + (MPI_Fint *comm, MPI_Fint *comm_keyval, MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr), (comm, comm_keyval, attribute_val, flag, ierr) ) #endif @@ -47,17 +47,35 @@ OMPI_GENERATE_F77_BINDINGS (MPI_COMM_GET_ATTR, #endif void mpi_comm_get_attr_f(MPI_Fint *comm, MPI_Fint *comm_keyval, - char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr) + MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr) { + int c_err, c_flag; MPI_Comm c_comm; - OMPI_SINGLE_NAME_DECL(flag); + int *c_value; c_comm = MPI_Comm_f2c(*comm); - *ierr = OMPI_INT_2_FINT(MPI_Comm_get_attr(c_comm, - OMPI_FINT_2_INT(*comm_keyval), - attribute_val, - OMPI_SINGLE_NAME_CONVERT(flag))); + /* This stuff is very confusing. Be sure to see MPI-2 4.12.7. */ - OMPI_SINGLE_INT_2_FINT(flag); + /* Didn't use all the FINT macros that could have prevented a few + extra variables in this function, but I figured that the + clarity of code, and the fact that this is not expected to be a + high-performance function, was worth it */ + + /* Note that there is no conversion on attribute_val -- MPI-2 says + that it is supposed to be the right size already */ + + c_err = MPI_Comm_get_attr(c_comm, OMPI_FINT_2_INT(*comm_keyval), + &c_value, &c_flag); + *ierr = OMPI_INT_2_FINT(c_err); + *flag = OMPI_INT_2_FINT(c_flag); + + /* Note that MPI-2 4.12.7 specifically says that Fortran's + xxx_GET_ATTR functions will take the address returned from C + and "convert it to an integer" (which assumedly means + dereference) */ + + if (MPI_SUCCESS == c_err && 1 == c_flag) { + *attribute_val = (MPI_Aint) *c_value; + } } diff --git a/src/mpi/f77/comm_set_attr_f.c b/src/mpi/f77/comm_set_attr_f.c index a445dfb483..796b0f9ba9 100644 --- a/src/mpi/f77/comm_set_attr_f.c +++ b/src/mpi/f77/comm_set_attr_f.c @@ -20,7 +20,7 @@ OMPI_GENERATE_F77_BINDINGS (PMPI_COMM_SET_ATTR, pmpi_comm_set_attr_, pmpi_comm_set_attr__, pmpi_comm_set_attr_f, - (MPI_Fint *comm, MPI_Fint *comm_keyval, char *attribute_val, MPI_Fint *ierr), + (MPI_Fint *comm, MPI_Fint *comm_keyval, MPI_Aint *attribute_val, MPI_Fint *ierr), (comm, comm_keyval, attribute_val, ierr) ) #endif @@ -37,7 +37,7 @@ OMPI_GENERATE_F77_BINDINGS (MPI_COMM_SET_ATTR, mpi_comm_set_attr_, mpi_comm_set_attr__, mpi_comm_set_attr_f, - (MPI_Fint *comm, MPI_Fint *comm_keyval, char *attribute_val, MPI_Fint *ierr), + (MPI_Fint *comm, MPI_Fint *comm_keyval, MPI_Aint *attribute_val, MPI_Fint *ierr), (comm, comm_keyval, attribute_val, ierr) ) #endif @@ -47,11 +47,9 @@ OMPI_GENERATE_F77_BINDINGS (MPI_COMM_SET_ATTR, #endif void mpi_comm_set_attr_f(MPI_Fint *comm, MPI_Fint *comm_keyval, - char *attribute_val, MPI_Fint *ierr) + MPI_Aint *attribute_val, MPI_Fint *ierr) { - MPI_Comm c_comm; - - c_comm = MPI_Comm_f2c(*comm); + MPI_Comm c_comm = MPI_Comm_f2c(*comm); *ierr = OMPI_INT_2_FINT(MPI_Comm_set_attr(c_comm, OMPI_FINT_2_INT(*comm_keyval), diff --git a/src/mpi/f77/prototypes_mpi.h b/src/mpi/f77/prototypes_mpi.h index 3aa0a74b7a..6998e7d703 100644 --- a/src/mpi/f77/prototypes_mpi.h +++ b/src/mpi/f77/prototypes_mpi.h @@ -35,8 +35,8 @@ void mpi_alltoall_f(char *sendbuf, MPI_Fint *sendcount, MPI_Fint *sendtype, char void mpi_alltoallv_f(char *sendbuf, MPI_Fint *sendcounts, MPI_Fint *sdispls, MPI_Fint *sendtype, char *recvbuf, MPI_Fint *recvcounts, MPI_Fint *rdispls, MPI_Fint *recvtype, MPI_Fint *comm, MPI_Fint *ierr); void mpi_alltoallw_f(char *sendbuf, MPI_Fint *sendcounts, MPI_Fint *sdispls, MPI_Fint *sendtypes, char *recvbuf, MPI_Fint *recvcounts, MPI_Fint *rdispls, MPI_Fint *recvtypes, MPI_Fint *comm, MPI_Fint *ierr); void mpi_attr_delete_f(MPI_Fint *comm, MPI_Fint *keyval, MPI_Fint *ierr); -void mpi_attr_get_f(MPI_Fint *comm, MPI_Fint *keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); -void mpi_attr_put_f(MPI_Fint *comm, MPI_Fint *keyval, char *attribute_val, MPI_Fint *ierr); +void mpi_attr_get_f(MPI_Fint *comm, MPI_Fint *keyval, MPI_Fint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); +void mpi_attr_put_f(MPI_Fint *comm, MPI_Fint *keyval, MPI_Fint *attribute_val, MPI_Fint *ierr); void mpi_barrier_f(MPI_Fint *comm, MPI_Fint *ierr); void mpi_bcast_f(char *buffer, MPI_Fint *count, MPI_Fint *datatype, MPI_Fint *root, MPI_Fint *comm, MPI_Fint *ierr); void mpi_bsend_f(char *buf, MPI_Fint *count, MPI_Fint *datatype, MPI_Fint *dest, MPI_Fint *tag, MPI_Fint *comm, MPI_Fint *ierr); @@ -65,7 +65,7 @@ void mpi_comm_disconnect_f(MPI_Fint *comm, MPI_Fint *ierr); void mpi_comm_dup_f(MPI_Fint *comm, MPI_Fint *newcomm, MPI_Fint *ierr); void mpi_comm_free_keyval_f(MPI_Fint *comm_keyval, MPI_Fint *ierr); void mpi_comm_free_f(MPI_Fint *comm, MPI_Fint *ierr); -void mpi_comm_get_attr_f(MPI_Fint *comm, MPI_Fint *comm_keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); +void mpi_comm_get_attr_f(MPI_Fint *comm, MPI_Fint *comm_keyval, MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); void mpi_comm_get_errhandler_f(MPI_Fint *comm, MPI_Fint *erhandler, MPI_Fint *ierr); void mpi_comm_get_name_f(MPI_Fint *comm, char *comm_name, MPI_Fint *resultlen, MPI_Fint *ierr, int name_len); @@ -75,7 +75,7 @@ void mpi_comm_join_f(MPI_Fint *fd, MPI_Fint *intercomm, MPI_Fint *ierr); void mpi_comm_rank_f(MPI_Fint *comm, MPI_Fint *rank, MPI_Fint *ierr); void mpi_comm_remote_group_f(MPI_Fint *comm, MPI_Fint *group, MPI_Fint *ierr); void mpi_comm_remote_size_f(MPI_Fint *comm, MPI_Fint *size, MPI_Fint *ierr); -void mpi_comm_set_attr_f(MPI_Fint *comm, MPI_Fint *comm_keyval, char *attribute_val, MPI_Fint *ierr); +void mpi_comm_set_attr_f(MPI_Fint *comm, MPI_Fint *comm_keyval, MPI_Aint *attribute_val, MPI_Fint *ierr); void mpi_comm_set_errhandler_f(MPI_Fint *comm, MPI_Fint *errhandler, MPI_Fint *ierr); void mpi_comm_set_name_f(MPI_Fint *comm, char *comm_name, MPI_Fint *ierr, int name_len); @@ -263,7 +263,7 @@ void mpi_type_dup_f(MPI_Fint *type, MPI_Fint *newtype, MPI_Fint *ierr); void mpi_type_extent_f(MPI_Fint *type, MPI_Fint *extent, MPI_Fint *ierr); void mpi_type_free_f(MPI_Fint *type, MPI_Fint *ierr); void mpi_type_free_keyval_f(MPI_Fint *type_keyval, MPI_Fint *ierr); -void mpi_type_get_attr_f(MPI_Fint *type, MPI_Fint *type_keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); +void mpi_type_get_attr_f(MPI_Fint *type, MPI_Fint *type_keyval, MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); void mpi_type_get_contents_f(MPI_Fint *mtype, MPI_Fint *max_integers, MPI_Fint *max_addresses, MPI_Fint *max_datatypes, MPI_Fint *array_of_integers, MPI_Fint *array_of_addresses, MPI_Fint *array_of_datatypes, MPI_Fint *ierr); void mpi_type_get_envelope_f(MPI_Fint *type, MPI_Fint *num_integers, MPI_Fint *num_addresses, MPI_Fint *num_datatypes, MPI_Fint *combiner, MPI_Fint *ierr); void mpi_type_get_extent_f(MPI_Fint *type, MPI_Fint *lb, MPI_Fint *extent, MPI_Fint *ierr); @@ -274,7 +274,7 @@ void mpi_type_hvector_f(MPI_Fint *count, MPI_Fint *blocklength, MPI_Fint *stride void mpi_type_indexed_f(MPI_Fint *count, MPI_Fint *array_of_blocklengths, MPI_Fint *array_of_displacements, MPI_Fint *oldtype, MPI_Fint *newtype, MPI_Fint *ierr); void mpi_type_lb_f(MPI_Fint *type, MPI_Fint *lb, MPI_Fint *ierr); void mpi_type_match_size_f(MPI_Fint *typeclass, MPI_Fint *size, MPI_Fint *type, MPI_Fint *ierr); -void mpi_type_set_attr_f(MPI_Fint *type, MPI_Fint *type_keyval, char *attr_val, MPI_Fint *ierr); +void mpi_type_set_attr_f(MPI_Fint *type, MPI_Fint *type_keyval, MPI_Aint *attr_val, MPI_Fint *ierr); void mpi_type_set_name_f(MPI_Fint *type, char *type_name, MPI_Fint *ierr, int name_len); void mpi_type_size_f(MPI_Fint *type, MPI_Fint *size, MPI_Fint *ierr); @@ -297,13 +297,13 @@ void mpi_win_delete_attr_f(MPI_Fint *win, MPI_Fint *win_keyval, MPI_Fint *ierr); void mpi_win_fence_f(MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr); void mpi_win_free_f(MPI_Fint *win, MPI_Fint *ierr); void mpi_win_free_keyval_f(MPI_Fint *win_keyval, MPI_Fint *ierr); -void mpi_win_get_attr_f(MPI_Fint *win, MPI_Fint *win_keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); +void mpi_win_get_attr_f(MPI_Fint *win, MPI_Fint *win_keyval, MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); void mpi_win_get_errhandler_f(MPI_Fint *win, MPI_Fint *errhandler, MPI_Fint *ierr); void mpi_win_get_group_f(MPI_Fint *win, MPI_Fint *group, MPI_Fint *ierr); void mpi_win_get_name_f(MPI_Fint *win, char *win_name, MPI_Fint *resultlen, MPI_Fint *ierr); void mpi_win_lock_f(MPI_Fint *lock_type, MPI_Fint *rank, MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr); void mpi_win_post_f(MPI_Fint *group, MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr); -void mpi_win_set_attr_f(MPI_Fint *win, MPI_Fint *win_keyval, char *attribute_val, MPI_Fint *ierr); +void mpi_win_set_attr_f(MPI_Fint *win, MPI_Fint *win_keyval, MPI_Aint *attribute_val, MPI_Fint *ierr); void mpi_win_set_errhandler_f(MPI_Fint *win, MPI_Fint *errhandler, MPI_Fint *ierr); void mpi_win_set_name_f(MPI_Fint *win, char *win_name, MPI_Fint *ierr, int name_len); void mpi_win_start_f(MPI_Fint *group, MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr); @@ -344,8 +344,8 @@ void mpi_alltoall(char *sendbuf, MPI_Fint *sendcount, MPI_Fint *sendtype, char * void mpi_alltoallv(char *sendbuf, MPI_Fint *sendcounts, MPI_Fint *sdispls, MPI_Fint *sendtype, char *recvbuf, MPI_Fint *recvcounts, MPI_Fint *rdispls, MPI_Fint *recvtype, MPI_Fint *comm, MPI_Fint *ierr); void mpi_alltoallw(char *sendbuf, MPI_Fint *sendcounts, MPI_Fint *sdispls, MPI_Fint *sendtypes, char *recvbuf, MPI_Fint *recvcounts, MPI_Fint *rdispls, MPI_Fint *recvtypes, MPI_Fint *comm, MPI_Fint *ierr); void mpi_attr_delete(MPI_Fint *comm, MPI_Fint *keyval, MPI_Fint *ierr); -void mpi_attr_get(MPI_Fint *comm, MPI_Fint *keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); -void mpi_attr_put(MPI_Fint *comm, MPI_Fint *keyval, char *attribute_val, MPI_Fint *ierr); +void mpi_attr_get(MPI_Fint *comm, MPI_Fint *keyval, MPI_Fint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); +void mpi_attr_put(MPI_Fint *comm, MPI_Fint *keyval, MPI_Fint *attribute_val, MPI_Fint *ierr); void mpi_barrier(MPI_Fint *comm, MPI_Fint *ierr); void mpi_bcast(char *buffer, MPI_Fint *count, MPI_Fint *datatype, MPI_Fint *root, MPI_Fint *comm, MPI_Fint *ierr); void mpi_bsend(char *buf, MPI_Fint *count, MPI_Fint *datatype, MPI_Fint *dest, MPI_Fint *tag, MPI_Fint *comm, MPI_Fint *ierr); @@ -374,7 +374,7 @@ void mpi_comm_disconnect(MPI_Fint *comm, MPI_Fint *ierr); void mpi_comm_dup(MPI_Fint *comm, MPI_Fint *newcomm, MPI_Fint *ierr); void mpi_comm_free_keyval(MPI_Fint *comm_keyval, MPI_Fint *ierr); void mpi_comm_free(MPI_Fint *comm, MPI_Fint *ierr); -void mpi_comm_get_attr(MPI_Fint *comm, MPI_Fint *comm_keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); +void mpi_comm_get_attr(MPI_Fint *comm, MPI_Fint *comm_keyval, MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); void mpi_comm_get_errhandler(MPI_Fint *comm, MPI_Fint *erhandler, MPI_Fint *ierr); void mpi_comm_get_name(MPI_Fint *comm, char *comm_name, MPI_Fint *resultlen, MPI_Fint *ierr, int name_len); void mpi_comm_get_parent(MPI_Fint *parent, MPI_Fint *ierr); @@ -383,7 +383,7 @@ void mpi_comm_join(MPI_Fint *fd, MPI_Fint *intercomm, MPI_Fint *ierr); void mpi_comm_rank(MPI_Fint *comm, MPI_Fint *rank, MPI_Fint *ierr); void mpi_comm_remote_group(MPI_Fint *comm, MPI_Fint *group, MPI_Fint *ierr); void mpi_comm_remote_size(MPI_Fint *comm, MPI_Fint *size, MPI_Fint *ierr); -void mpi_comm_set_attr(MPI_Fint *comm, MPI_Fint *comm_keyval, char *attribute_val, MPI_Fint *ierr); +void mpi_comm_set_attr(MPI_Fint *comm, MPI_Fint *comm_keyval, MPI_Aint *attribute_val, MPI_Fint *ierr); void mpi_comm_set_errhandler(MPI_Fint *comm, MPI_Fint *errhandler, MPI_Fint *ierr); void mpi_comm_set_name(MPI_Fint *comm, char *comm_name, MPI_Fint *ierr, int name_len); void mpi_comm_size(MPI_Fint *comm, MPI_Fint *size, MPI_Fint *ierr); @@ -567,7 +567,7 @@ void mpi_type_dup(MPI_Fint *type, MPI_Fint *newtype, MPI_Fint *ierr); void mpi_type_extent(MPI_Fint *type, MPI_Fint *extent, MPI_Fint *ierr); void mpi_type_free(MPI_Fint *type, MPI_Fint *ierr); void mpi_type_free_keyval(MPI_Fint *type_keyval, MPI_Fint *ierr); -void mpi_type_get_attr(MPI_Fint *type, MPI_Fint *type_keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); +void mpi_type_get_attr(MPI_Fint *type, MPI_Fint *type_keyval, MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); void mpi_type_get_contents(MPI_Fint *mtype, MPI_Fint *max_integers, MPI_Fint *max_addresses, MPI_Fint *max_datatypes, MPI_Fint *array_of_integers, MPI_Fint *array_of_addresses, MPI_Fint *array_of_datatypes, MPI_Fint *ierr); void mpi_type_get_envelope(MPI_Fint *type, MPI_Fint *num_integers, MPI_Fint *num_addresses, MPI_Fint *num_datatypes, MPI_Fint *combiner, MPI_Fint *ierr); void mpi_type_get_extent(MPI_Fint *type, MPI_Fint *lb, MPI_Fint *extent, MPI_Fint *ierr); @@ -578,7 +578,7 @@ void mpi_type_hvector(MPI_Fint *count, MPI_Fint *blocklength, MPI_Fint *stride, void mpi_type_indexed(MPI_Fint *count, MPI_Fint *array_of_blocklengths, MPI_Fint *array_of_displacements, MPI_Fint *oldtype, MPI_Fint *newtype, MPI_Fint *ierr); void mpi_type_lb(MPI_Fint *type, MPI_Fint *lb, MPI_Fint *ierr); void mpi_type_match_size(MPI_Fint *typeclass, MPI_Fint *size, MPI_Fint *type, MPI_Fint *ierr); -void mpi_type_set_attr(MPI_Fint *type, MPI_Fint *type_keyval, char *attr_val, MPI_Fint *ierr); +void mpi_type_set_attr(MPI_Fint *type, MPI_Fint *type_keyval, MPI_Aint *attr_val, MPI_Fint *ierr); void mpi_type_set_name(MPI_Fint *type, char *type_name, MPI_Fint *ierr, int name_len); void mpi_type_size(MPI_Fint *type, MPI_Fint *size, MPI_Fint *ierr); void mpi_type_struct(MPI_Fint *count, MPI_Fint *array_of_blocklengths, MPI_Fint *array_of_displacements, MPI_Fint *array_of_types, MPI_Fint *newtype, MPI_Fint *ierr); @@ -600,13 +600,13 @@ void mpi_win_delete_attr(MPI_Fint *win, MPI_Fint *win_keyval, MPI_Fint *ierr); void mpi_win_fence(MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr); void mpi_win_free(MPI_Fint *win, MPI_Fint *ierr); void mpi_win_free_keyval(MPI_Fint *win_keyval, MPI_Fint *ierr); -void mpi_win_get_attr(MPI_Fint *win, MPI_Fint *win_keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); +void mpi_win_get_attr(MPI_Fint *win, MPI_Fint *win_keyval, MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); void mpi_win_get_errhandler(MPI_Fint *win, MPI_Fint *errhandler, MPI_Fint *ierr); void mpi_win_get_group(MPI_Fint *win, MPI_Fint *group, MPI_Fint *ierr); void mpi_win_get_name(MPI_Fint *win, char *win_name, MPI_Fint *resultlen, MPI_Fint *ierr); void mpi_win_lock(MPI_Fint *lock_type, MPI_Fint *rank, MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr); void mpi_win_post(MPI_Fint *group, MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr); -void mpi_win_set_attr(MPI_Fint *win, MPI_Fint *win_keyval, char *attribute_val, MPI_Fint *ierr); +void mpi_win_set_attr(MPI_Fint *win, MPI_Fint *win_keyval, MPI_Aint *attribute_val, MPI_Fint *ierr); void mpi_win_set_errhandler(MPI_Fint *win, MPI_Fint *errhandler, MPI_Fint *ierr); void mpi_win_set_name(MPI_Fint *win, char *win_name, MPI_Fint *ierr, int name_len); void mpi_win_start(MPI_Fint *group, MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr); @@ -645,8 +645,8 @@ void mpi_alltoall_(char *sendbuf, MPI_Fint *sendcount, MPI_Fint *sendtype, char void mpi_alltoallv_(char *sendbuf, MPI_Fint *sendcounts, MPI_Fint *sdispls, MPI_Fint *sendtype, char *recvbuf, MPI_Fint *recvcounts, MPI_Fint *rdispls, MPI_Fint *recvtype, MPI_Fint *comm, MPI_Fint *ierr); void mpi_alltoallw_(char *sendbuf, MPI_Fint *sendcounts, MPI_Fint *sdispls, MPI_Fint *sendtypes, char *recvbuf, MPI_Fint *recvcounts, MPI_Fint *rdispls, MPI_Fint *recvtypes, MPI_Fint *comm, MPI_Fint *ierr); void mpi_attr_delete_(MPI_Fint *comm, MPI_Fint *keyval, MPI_Fint *ierr); -void mpi_attr_get_(MPI_Fint *comm, MPI_Fint *keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); -void mpi_attr_put_(MPI_Fint *comm, MPI_Fint *keyval, char *attribute_val, MPI_Fint *ierr); +void mpi_attr_get_(MPI_Fint *comm, MPI_Fint *keyval, MPI_Fint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); +void mpi_attr_put_(MPI_Fint *comm, MPI_Fint *keyval, MPI_Fint *attribute_val, MPI_Fint *ierr); void mpi_barrier_(MPI_Fint *comm, MPI_Fint *ierr); void mpi_bcast_(char *buffer, MPI_Fint *count, MPI_Fint *datatype, MPI_Fint *root, MPI_Fint *comm, MPI_Fint *ierr); void mpi_bsend_(char *buf, MPI_Fint *count, MPI_Fint *datatype, MPI_Fint *dest, MPI_Fint *tag, MPI_Fint *comm, MPI_Fint *ierr); @@ -675,7 +675,7 @@ void mpi_comm_disconnect_(MPI_Fint *comm, MPI_Fint *ierr); void mpi_comm_dup_(MPI_Fint *comm, MPI_Fint *newcomm, MPI_Fint *ierr); void mpi_comm_free_keyval_(MPI_Fint *comm_keyval, MPI_Fint *ierr); void mpi_comm_free_(MPI_Fint *comm, MPI_Fint *ierr); -void mpi_comm_get_attr_(MPI_Fint *comm, MPI_Fint *comm_keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); +void mpi_comm_get_attr_(MPI_Fint *comm, MPI_Fint *comm_keyval, MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); void mpi_comm_get_errhandler_(MPI_Fint *comm, MPI_Fint *erhandler, MPI_Fint *ierr); void mpi_comm_get_name_(MPI_Fint *comm, char *comm_name, MPI_Fint *resultlen, MPI_Fint *ierr, int name_len); void mpi_comm_get_parent_(MPI_Fint *parent, MPI_Fint *ierr); @@ -684,7 +684,7 @@ void mpi_comm_join_(MPI_Fint *fd, MPI_Fint *intercomm, MPI_Fint *ierr); void mpi_comm_rank_(MPI_Fint *comm, MPI_Fint *rank, MPI_Fint *ierr); void mpi_comm_remote_group_(MPI_Fint *comm, MPI_Fint *group, MPI_Fint *ierr); void mpi_comm_remote_size_(MPI_Fint *comm, MPI_Fint *size, MPI_Fint *ierr); -void mpi_comm_set_attr_(MPI_Fint *comm, MPI_Fint *comm_keyval, char *attribute_val, MPI_Fint *ierr); +void mpi_comm_set_attr_(MPI_Fint *comm, MPI_Fint *comm_keyval, MPI_Aint *attribute_val, MPI_Fint *ierr); void mpi_comm_set_errhandler_(MPI_Fint *comm, MPI_Fint *errhandler, MPI_Fint *ierr); void mpi_comm_set_name_(MPI_Fint *comm, char *comm_name, MPI_Fint *ierr, int name_len); void mpi_comm_size_(MPI_Fint *comm, MPI_Fint *size, MPI_Fint *ierr); @@ -868,7 +868,7 @@ void mpi_type_dup_(MPI_Fint *type, MPI_Fint *newtype, MPI_Fint *ierr); void mpi_type_extent_(MPI_Fint *type, MPI_Fint *extent, MPI_Fint *ierr); void mpi_type_free_(MPI_Fint *type, MPI_Fint *ierr); void mpi_type_free_keyval_(MPI_Fint *type_keyval, MPI_Fint *ierr); -void mpi_type_get_attr_(MPI_Fint *type, MPI_Fint *type_keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); +void mpi_type_get_attr_(MPI_Fint *type, MPI_Fint *type_keyval, MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); void mpi_type_get_contents_(MPI_Fint *mtype, MPI_Fint *max_integers, MPI_Fint *max_addresses, MPI_Fint *max_datatypes, MPI_Fint *array_of_integers, MPI_Fint *array_of_addresses, MPI_Fint *array_of_datatypes, MPI_Fint *ierr); void mpi_type_get_envelope_(MPI_Fint *type, MPI_Fint *num_integers, MPI_Fint *num_addresses, MPI_Fint *num_datatypes, MPI_Fint *combiner, MPI_Fint *ierr); void mpi_type_get_extent_(MPI_Fint *type, MPI_Fint *lb, MPI_Fint *extent, MPI_Fint *ierr); @@ -879,7 +879,7 @@ void mpi_type_hvector_(MPI_Fint *count, MPI_Fint *blocklength, MPI_Fint *stride, void mpi_type_indexed_(MPI_Fint *count, MPI_Fint *array_of_blocklengths, MPI_Fint *array_of_displacements, MPI_Fint *oldtype, MPI_Fint *newtype, MPI_Fint *ierr); void mpi_type_lb_(MPI_Fint *type, MPI_Fint *lb, MPI_Fint *ierr); void mpi_type_match_size_(MPI_Fint *typeclass, MPI_Fint *size, MPI_Fint *type, MPI_Fint *ierr); -void mpi_type_set_attr_(MPI_Fint *type, MPI_Fint *type_keyval, char *attr_val, MPI_Fint *ierr); +void mpi_type_set_attr_(MPI_Fint *type, MPI_Fint *type_keyval, MPI_Aint *attr_val, MPI_Fint *ierr); void mpi_type_set_name_(MPI_Fint *type, char *type_name, MPI_Fint *ierr, int name_len); void mpi_type_size_(MPI_Fint *type, MPI_Fint *size, MPI_Fint *ierr); void mpi_type_struct_(MPI_Fint *count, MPI_Fint *array_of_blocklengths, MPI_Fint *array_of_displacements, MPI_Fint *array_of_types, MPI_Fint *newtype, MPI_Fint *ierr); @@ -901,13 +901,13 @@ void mpi_win_delete_attr_(MPI_Fint *win, MPI_Fint *win_keyval, MPI_Fint *ierr); void mpi_win_fence_(MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr); void mpi_win_free_(MPI_Fint *win, MPI_Fint *ierr); void mpi_win_free_keyval_(MPI_Fint *win_keyval, MPI_Fint *ierr); -void mpi_win_get_attr_(MPI_Fint *win, MPI_Fint *win_keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); +void mpi_win_get_attr_(MPI_Fint *win, MPI_Fint *win_keyval, MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); void mpi_win_get_errhandler_(MPI_Fint *win, MPI_Fint *errhandler, MPI_Fint *ierr); void mpi_win_get_group_(MPI_Fint *win, MPI_Fint *group, MPI_Fint *ierr); void mpi_win_get_name_(MPI_Fint *win, char *win_name, MPI_Fint *resultlen, MPI_Fint *ierr); void mpi_win_lock_(MPI_Fint *lock_type, MPI_Fint *rank, MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr); void mpi_win_post_(MPI_Fint *group, MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr); -void mpi_win_set_attr_(MPI_Fint *win, MPI_Fint *win_keyval, char *attribute_val, MPI_Fint *ierr); +void mpi_win_set_attr_(MPI_Fint *win, MPI_Fint *win_keyval, MPI_Aint *attribute_val, MPI_Fint *ierr); void mpi_win_set_errhandler_(MPI_Fint *win, MPI_Fint *errhandler, MPI_Fint *ierr); void mpi_win_set_name_(MPI_Fint *win, char *win_name, MPI_Fint *ierr, int name_len); void mpi_win_start_(MPI_Fint *group, MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr); @@ -946,8 +946,8 @@ void mpi_alltoall__(char *sendbuf, MPI_Fint *sendcount, MPI_Fint *sendtype, char void mpi_alltoallv__(char *sendbuf, MPI_Fint *sendcounts, MPI_Fint *sdispls, MPI_Fint *sendtype, char *recvbuf, MPI_Fint *recvcounts, MPI_Fint *rdispls, MPI_Fint *recvtype, MPI_Fint *comm, MPI_Fint *ierr); void mpi_alltoallw__(char *sendbuf, MPI_Fint *sendcounts, MPI_Fint *sdispls, MPI_Fint *sendtypes, char *recvbuf, MPI_Fint *recvcounts, MPI_Fint *rdispls, MPI_Fint *recvtypes, MPI_Fint *comm, MPI_Fint *ierr); void mpi_attr_delete__(MPI_Fint *comm, MPI_Fint *keyval, MPI_Fint *ierr); -void mpi_attr_get__(MPI_Fint *comm, MPI_Fint *keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); -void mpi_attr_put__(MPI_Fint *comm, MPI_Fint *keyval, char *attribute_val, MPI_Fint *ierr); +void mpi_attr_get__(MPI_Fint *comm, MPI_Fint *keyval, MPI_Fint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); +void mpi_attr_put__(MPI_Fint *comm, MPI_Fint *keyval, MPI_Fint *attribute_val, MPI_Fint *ierr); void mpi_barrier__(MPI_Fint *comm, MPI_Fint *ierr); void mpi_bcast__(char *buffer, MPI_Fint *count, MPI_Fint *datatype, MPI_Fint *root, MPI_Fint *comm, MPI_Fint *ierr); void mpi_bsend__(char *buf, MPI_Fint *count, MPI_Fint *datatype, MPI_Fint *dest, MPI_Fint *tag, MPI_Fint *comm, MPI_Fint *ierr); @@ -976,7 +976,7 @@ void mpi_comm_disconnect__(MPI_Fint *comm, MPI_Fint *ierr); void mpi_comm_dup__(MPI_Fint *comm, MPI_Fint *newcomm, MPI_Fint *ierr); void mpi_comm_free_keyval__(MPI_Fint *comm_keyval, MPI_Fint *ierr); void mpi_comm_free__(MPI_Fint *comm, MPI_Fint *ierr); -void mpi_comm_get_attr__(MPI_Fint *comm, MPI_Fint *comm_keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); +void mpi_comm_get_attr__(MPI_Fint *comm, MPI_Fint *comm_keyval, MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); void mpi_comm_get_errhandler__(MPI_Fint *comm, MPI_Fint *erhandler, MPI_Fint *ierr); void mpi_comm_get_name__(MPI_Fint *comm, char *comm_name, MPI_Fint *resultlen, MPI_Fint *ierr, int name_len); void mpi_comm_get_parent__(MPI_Fint *parent, MPI_Fint *ierr); @@ -985,7 +985,7 @@ void mpi_comm_join__(MPI_Fint *fd, MPI_Fint *intercomm, MPI_Fint *ierr); void mpi_comm_rank__(MPI_Fint *comm, MPI_Fint *rank, MPI_Fint *ierr); void mpi_comm_remote_group__(MPI_Fint *comm, MPI_Fint *group, MPI_Fint *ierr); void mpi_comm_remote_size__(MPI_Fint *comm, MPI_Fint *size, MPI_Fint *ierr); -void mpi_comm_set_attr__(MPI_Fint *comm, MPI_Fint *comm_keyval, char *attribute_val, MPI_Fint *ierr); +void mpi_comm_set_attr__(MPI_Fint *comm, MPI_Fint *comm_keyval, MPI_Aint *attribute_val, MPI_Fint *ierr); void mpi_comm_set_errhandler__(MPI_Fint *comm, MPI_Fint *errhandler, MPI_Fint *ierr); void mpi_comm_set_name__(MPI_Fint *comm, char *comm_name, MPI_Fint *ierr, int name_len); void mpi_comm_size__(MPI_Fint *comm, MPI_Fint *size, MPI_Fint *ierr); @@ -1169,7 +1169,7 @@ void mpi_type_dup__(MPI_Fint *type, MPI_Fint *newtype, MPI_Fint *ierr); void mpi_type_extent__(MPI_Fint *type, MPI_Fint *extent, MPI_Fint *ierr); void mpi_type_free__(MPI_Fint *type, MPI_Fint *ierr); void mpi_type_free_keyval__(MPI_Fint *type_keyval, MPI_Fint *ierr); -void mpi_type_get_attr__(MPI_Fint *type, MPI_Fint *type_keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); +void mpi_type_get_attr__(MPI_Fint *type, MPI_Fint *type_keyval, MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); void mpi_type_get_contents__(MPI_Fint *mtype, MPI_Fint *max_integers, MPI_Fint *max_addresses, MPI_Fint *max_datatypes, MPI_Fint *array_of_integers, MPI_Fint *array_of_addresses, MPI_Fint *array_of_datatypes, MPI_Fint *ierr); void mpi_type_get_envelope__(MPI_Fint *type, MPI_Fint *num_integers, MPI_Fint *num_addresses, MPI_Fint *num_datatypes, MPI_Fint *combiner, MPI_Fint *ierr); void mpi_type_get_extent__(MPI_Fint *type, MPI_Fint *lb, MPI_Fint *extent, MPI_Fint *ierr); @@ -1180,7 +1180,7 @@ void mpi_type_hvector__(MPI_Fint *count, MPI_Fint *blocklength, MPI_Fint *stride void mpi_type_indexed__(MPI_Fint *count, MPI_Fint *array_of_blocklengths, MPI_Fint *array_of_displacements, MPI_Fint *oldtype, MPI_Fint *newtype, MPI_Fint *ierr); void mpi_type_lb__(MPI_Fint *type, MPI_Fint *lb, MPI_Fint *ierr); void mpi_type_match_size__(MPI_Fint *typeclass, MPI_Fint *size, MPI_Fint *type, MPI_Fint *ierr); -void mpi_type_set_attr__(MPI_Fint *type, MPI_Fint *type_keyval, char *attr_val, MPI_Fint *ierr); +void mpi_type_set_attr__(MPI_Fint *type, MPI_Fint *type_keyval, MPI_Aint *attr_val, MPI_Fint *ierr); void mpi_type_set_name__(MPI_Fint *type, char *type_name, MPI_Fint *ierr, int name_len); void mpi_type_size__(MPI_Fint *type, MPI_Fint *size, MPI_Fint *ierr); void mpi_type_struct__(MPI_Fint *count, MPI_Fint *array_of_blocklengths, MPI_Fint *array_of_displacements, MPI_Fint *array_of_types, MPI_Fint *newtype, MPI_Fint *ierr); @@ -1202,13 +1202,13 @@ void mpi_win_delete_attr__(MPI_Fint *win, MPI_Fint *win_keyval, MPI_Fint *ierr); void mpi_win_fence__(MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr); void mpi_win_free__(MPI_Fint *win, MPI_Fint *ierr); void mpi_win_free_keyval__(MPI_Fint *win_keyval, MPI_Fint *ierr); -void mpi_win_get_attr__(MPI_Fint *win, MPI_Fint *win_keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); +void mpi_win_get_attr__(MPI_Fint *win, MPI_Fint *win_keyval, MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); void mpi_win_get_errhandler__(MPI_Fint *win, MPI_Fint *errhandler, MPI_Fint *ierr); void mpi_win_get_group__(MPI_Fint *win, MPI_Fint *group, MPI_Fint *ierr); void mpi_win_get_name__(MPI_Fint *win, char *win_name, MPI_Fint *resultlen, MPI_Fint *ierr); void mpi_win_lock__(MPI_Fint *lock_type, MPI_Fint *rank, MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr); void mpi_win_post__(MPI_Fint *group, MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr); -void mpi_win_set_attr__(MPI_Fint *win, MPI_Fint *win_keyval, char *attribute_val, MPI_Fint *ierr); +void mpi_win_set_attr__(MPI_Fint *win, MPI_Fint *win_keyval, MPI_Aint *attribute_val, MPI_Fint *ierr); void mpi_win_set_errhandler__(MPI_Fint *win, MPI_Fint *errhandler, MPI_Fint *ierr); void mpi_win_set_name__(MPI_Fint *win, char *win_name, MPI_Fint *ierr, int name_len); void mpi_win_start__(MPI_Fint *group, MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr); @@ -1247,8 +1247,8 @@ void MPI_ALLTOALL(char *sendbuf, MPI_Fint *sendcount, MPI_Fint *sendtype, char * void MPI_ALLTOALLV(char *sendbuf, MPI_Fint *sendcounts, MPI_Fint *sdispls, MPI_Fint *sendtype, char *recvbuf, MPI_Fint *recvcounts, MPI_Fint *rdispls, MPI_Fint *recvtype, MPI_Fint *comm, MPI_Fint *ierr); void MPI_ALLTOALLW(char *sendbuf, MPI_Fint *sendcounts, MPI_Fint *sdispls, MPI_Fint *sendtypes, char *recvbuf, MPI_Fint *recvcounts, MPI_Fint *rdispls, MPI_Fint *recvtypes, MPI_Fint *comm, MPI_Fint *ierr); void MPI_ATTR_DELETE(MPI_Fint *comm, MPI_Fint *keyval, MPI_Fint *ierr); -void MPI_ATTR_GET(MPI_Fint *comm, MPI_Fint *keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); -void MPI_ATTR_PUT(MPI_Fint *comm, MPI_Fint *keyval, char *attribute_val, MPI_Fint *ierr); +void MPI_ATTR_GET(MPI_Fint *comm, MPI_Fint *keyval, MPI_Fint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); +void MPI_ATTR_PUT(MPI_Fint *comm, MPI_Fint *keyval, MPI_Fint *attribute_val, MPI_Fint *ierr); void MPI_BARRIER(MPI_Fint *comm, MPI_Fint *ierr); void MPI_BCAST(char *buffer, MPI_Fint *count, MPI_Fint *datatype, MPI_Fint *root, MPI_Fint *comm, MPI_Fint *ierr); void MPI_BSEND(char *buf, MPI_Fint *count, MPI_Fint *datatype, MPI_Fint *dest, MPI_Fint *tag, MPI_Fint *comm, MPI_Fint *ierr); @@ -1277,7 +1277,7 @@ void MPI_COMM_DISCONNECT(MPI_Fint *comm, MPI_Fint *ierr); void MPI_COMM_DUP(MPI_Fint *comm, MPI_Fint *newcomm, MPI_Fint *ierr); void MPI_COMM_FREE_KEYVAL(MPI_Fint *comm_keyval, MPI_Fint *ierr); void MPI_COMM_FREE(MPI_Fint *comm, MPI_Fint *ierr); -void MPI_COMM_GET_ATTR(MPI_Fint *comm, MPI_Fint *comm_keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); +void MPI_COMM_GET_ATTR(MPI_Fint *comm, MPI_Fint *comm_keyval, MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); void MPI_COMM_GET_ERRHANDLER(MPI_Fint *comm, MPI_Fint *erhandler, MPI_Fint *ierr); void MPI_COMM_GET_NAME(MPI_Fint *comm, char *comm_name, MPI_Fint *resultlen, MPI_Fint *ierr, int name_len); void MPI_COMM_GET_PARENT(MPI_Fint *parent, MPI_Fint *ierr); @@ -1286,7 +1286,7 @@ void MPI_COMM_JOIN(MPI_Fint *fd, MPI_Fint *intercomm, MPI_Fint *ierr); void MPI_COMM_RANK(MPI_Fint *comm, MPI_Fint *rank, MPI_Fint *ierr); void MPI_COMM_REMOTE_GROUP(MPI_Fint *comm, MPI_Fint *group, MPI_Fint *ierr); void MPI_COMM_REMOTE_SIZE(MPI_Fint *comm, MPI_Fint *size, MPI_Fint *ierr); -void MPI_COMM_SET_ATTR(MPI_Fint *comm, MPI_Fint *comm_keyval, char *attribute_val, MPI_Fint *ierr); +void MPI_COMM_SET_ATTR(MPI_Fint *comm, MPI_Fint *comm_keyval, MPI_Aint *attribute_val, MPI_Fint *ierr); void MPI_COMM_SET_ERRHANDLER(MPI_Fint *comm, MPI_Fint *errhandler, MPI_Fint *ierr); void MPI_COMM_SET_NAME(MPI_Fint *comm, char *comm_name, MPI_Fint *ierr, int name_len); void MPI_COMM_SIZE(MPI_Fint *comm, MPI_Fint *size, MPI_Fint *ierr); @@ -1470,7 +1470,7 @@ void MPI_TYPE_DUP(MPI_Fint *type, MPI_Fint *newtype, MPI_Fint *ierr); void MPI_TYPE_EXTENT(MPI_Fint *type, MPI_Fint *extent, MPI_Fint *ierr); void MPI_TYPE_FREE(MPI_Fint *type, MPI_Fint *ierr); void MPI_TYPE_FREE_KEYVAL(MPI_Fint *type_keyval, MPI_Fint *ierr); -void MPI_TYPE_GET_ATTR(MPI_Fint *type, MPI_Fint *type_keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); +void MPI_TYPE_GET_ATTR(MPI_Fint *type, MPI_Fint *type_keyval, MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); void MPI_TYPE_GET_CONTENTS(MPI_Fint *mtype, MPI_Fint *max_integers, MPI_Fint *max_addresses, MPI_Fint *max_datatypes, MPI_Fint *array_of_integers, MPI_Fint *array_of_addresses, MPI_Fint *array_of_datatypes, MPI_Fint *ierr); void MPI_TYPE_GET_ENVELOPE(MPI_Fint *type, MPI_Fint *num_integers, MPI_Fint *num_addresses, MPI_Fint *num_datatypes, MPI_Fint *combiner, MPI_Fint *ierr); void MPI_TYPE_GET_EXTENT(MPI_Fint *type, MPI_Fint *lb, MPI_Fint *extent, MPI_Fint *ierr); @@ -1481,7 +1481,7 @@ void MPI_TYPE_HVECTOR(MPI_Fint *count, MPI_Fint *blocklength, MPI_Fint *stride, void MPI_TYPE_INDEXED(MPI_Fint *count, MPI_Fint *array_of_blocklengths, MPI_Fint *array_of_displacements, MPI_Fint *oldtype, MPI_Fint *newtype, MPI_Fint *ierr); void MPI_TYPE_LB(MPI_Fint *type, MPI_Fint *lb, MPI_Fint *ierr); void MPI_TYPE_MATCH_SIZE(MPI_Fint *typeclass, MPI_Fint *size, MPI_Fint *type, MPI_Fint *ierr); -void MPI_TYPE_SET_ATTR(MPI_Fint *type, MPI_Fint *type_keyval, char *attr_val, MPI_Fint *ierr); +void MPI_TYPE_SET_ATTR(MPI_Fint *type, MPI_Fint *type_keyval, MPI_Aint *attr_val, MPI_Fint *ierr); void MPI_TYPE_SET_NAME(MPI_Fint *type, char *type_name, MPI_Fint *ierr, int name_len); void MPI_TYPE_SIZE(MPI_Fint *type, MPI_Fint *size, MPI_Fint *ierr); void MPI_TYPE_STRUCT(MPI_Fint *count, MPI_Fint *array_of_blocklengths, MPI_Fint *array_of_displacements, MPI_Fint *array_of_types, MPI_Fint *newtype, MPI_Fint *ierr); @@ -1503,13 +1503,13 @@ void MPI_WIN_DELETE_ATTR(MPI_Fint *win, MPI_Fint *win_keyval, MPI_Fint *ierr); void MPI_WIN_FENCE(MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr); void MPI_WIN_FREE(MPI_Fint *win, MPI_Fint *ierr); void MPI_WIN_FREE_KEYVAL(MPI_Fint *win_keyval, MPI_Fint *ierr); -void MPI_WIN_GET_ATTR(MPI_Fint *win, MPI_Fint *win_keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); +void MPI_WIN_GET_ATTR(MPI_Fint *win, MPI_Fint *win_keyval, MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr); void MPI_WIN_GET_ERRHANDLER(MPI_Fint *win, MPI_Fint *errhandler, MPI_Fint *ierr); void MPI_WIN_GET_GROUP(MPI_Fint *win, MPI_Fint *group, MPI_Fint *ierr); void MPI_WIN_GET_NAME(MPI_Fint *win, char *win_name, MPI_Fint *resultlen, MPI_Fint *ierr); void MPI_WIN_LOCK(MPI_Fint *lock_type, MPI_Fint *rank, MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr); void MPI_WIN_POST(MPI_Fint *group, MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr); -void MPI_WIN_SET_ATTR(MPI_Fint *win, MPI_Fint *win_keyval, char *attribute_val, MPI_Fint *ierr); +void MPI_WIN_SET_ATTR(MPI_Fint *win, MPI_Fint *win_keyval, MPI_Aint *attribute_val, MPI_Fint *ierr); void MPI_WIN_SET_ERRHANDLER(MPI_Fint *win, MPI_Fint *errhandler, MPI_Fint *ierr); void MPI_WIN_SET_NAME(MPI_Fint *win, char *win_name, MPI_Fint *ierr, int name_len); void MPI_WIN_START(MPI_Fint *group, MPI_Fint *assert, MPI_Fint *win, MPI_Fint *ierr); diff --git a/src/mpi/f77/type_get_attr_f.c b/src/mpi/f77/type_get_attr_f.c index 78bb643fd7..4a3670d7a7 100644 --- a/src/mpi/f77/type_get_attr_f.c +++ b/src/mpi/f77/type_get_attr_f.c @@ -20,7 +20,7 @@ OMPI_GENERATE_F77_BINDINGS (PMPI_TYPE_GET_ATTR, pmpi_type_get_attr_, pmpi_type_get_attr__, pmpi_type_get_attr_f, - (MPI_Fint *type, MPI_Fint *type_keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr), + (MPI_Fint *type, MPI_Fint *type_keyval, MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr), (type, type_keyval, attribute_val, flag, ierr) ) #endif @@ -37,7 +37,7 @@ OMPI_GENERATE_F77_BINDINGS (MPI_TYPE_GET_ATTR, mpi_type_get_attr_, mpi_type_get_attr__, mpi_type_get_attr_f, - (MPI_Fint *type, MPI_Fint *type_keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr), + (MPI_Fint *type, MPI_Fint *type_keyval, MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr), (type, type_keyval, attribute_val, flag, ierr) ) #endif @@ -47,15 +47,35 @@ OMPI_GENERATE_F77_BINDINGS (MPI_TYPE_GET_ATTR, #endif void mpi_type_get_attr_f(MPI_Fint *type, MPI_Fint *type_keyval, - char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr) + MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr) { - MPI_Datatype c_type = MPI_Type_f2c( *type ); - OMPI_SINGLE_NAME_DECL(flag); + int c_err, c_flag; + MPI_Datatype c_type; + int *c_value; - *ierr = OMPI_INT_2_FINT(MPI_Type_get_attr(c_type, - OMPI_FINT_2_INT(*type_keyval), - attribute_val, - OMPI_SINGLE_NAME_CONVERT(flag))); + c_type = MPI_Type_f2c(*type); - OMPI_SINGLE_INT_2_FINT(flag); + /* This stuff is very confusing. Be sure to see MPI-2 4.12.7. */ + + /* Didn't use all the FINT macros that could have prevented a few + extra variables in this function, but I figured that the + clarity of code, and the fact that this is not expected to be a + high-performance function, was worth it */ + + /* Note that there is no conversion on attribute_val -- MPI-2 says + that it is supposed to be the right size already */ + + c_err = MPI_Type_get_attr(c_type, OMPI_FINT_2_INT(*type_keyval), + &c_value, &c_flag); + *ierr = OMPI_INT_2_FINT(c_err); + *flag = OMPI_INT_2_FINT(c_flag); + + /* Note that MPI-2 4.12.7 specifically says that Fortran's + xxx_GET_ATTR functions will take the address returned from C + and "convert it to an integer" (which assumedly means + dereference) */ + + if (MPI_SUCCESS == c_err && 1 == c_flag) { + *attribute_val = (MPI_Aint) *c_value; + } } diff --git a/src/mpi/f77/type_set_attr_f.c b/src/mpi/f77/type_set_attr_f.c index 2cf7828645..5292c3eb06 100644 --- a/src/mpi/f77/type_set_attr_f.c +++ b/src/mpi/f77/type_set_attr_f.c @@ -20,7 +20,7 @@ OMPI_GENERATE_F77_BINDINGS (PMPI_TYPE_SET_ATTR, pmpi_type_set_attr_, pmpi_type_set_attr__, pmpi_type_set_attr_f, - (MPI_Fint *type, MPI_Fint *type_keyval, char *attr_val, MPI_Fint *ierr), + (MPI_Fint *type, MPI_Fint *type_keyval, MPI_Aint *attr_val, MPI_Fint *ierr), (type, type_keyval, attr_val, ierr) ) #endif @@ -37,7 +37,7 @@ OMPI_GENERATE_F77_BINDINGS (MPI_TYPE_SET_ATTR, mpi_type_set_attr_, mpi_type_set_attr__, mpi_type_set_attr_f, - (MPI_Fint *type, MPI_Fint *type_keyval, char *attr_val, MPI_Fint *ierr), + (MPI_Fint *type, MPI_Fint *type_keyval, MPI_Aint *attr_val, MPI_Fint *ierr), (type, type_keyval, attr_val, ierr) ) #endif @@ -46,15 +46,11 @@ OMPI_GENERATE_F77_BINDINGS (MPI_TYPE_SET_ATTR, #include "mpi/f77/profile/defines.h" #endif -void mpi_type_set_attr_f(MPI_Fint *type, MPI_Fint *type_keyval, char *attr_val, MPI_Fint *ierr) +void mpi_type_set_attr_f(MPI_Fint *type, MPI_Fint *type_keyval, MPI_Aint *attr_val, MPI_Fint *ierr) { MPI_Datatype c_type = MPI_Type_f2c( *type ); *ierr = OMPI_INT_2_FINT(MPI_Type_set_attr( c_type, OMPI_FINT_2_INT(*type_keyval), attr_val )); - - if (MPI_SUCCESS == *ierr) { - *type = MPI_Type_c2f( c_type ); - } } diff --git a/src/mpi/f77/win_get_attr_f.c b/src/mpi/f77/win_get_attr_f.c index b6542733e4..c73bf82410 100644 --- a/src/mpi/f77/win_get_attr_f.c +++ b/src/mpi/f77/win_get_attr_f.c @@ -20,7 +20,7 @@ OMPI_GENERATE_F77_BINDINGS (PMPI_WIN_GET_ATTR, pmpi_win_get_attr_, pmpi_win_get_attr__, pmpi_win_get_attr_f, - (MPI_Fint *win, MPI_Fint *win_keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr), + (MPI_Fint *win, MPI_Fint *win_keyval, MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr), (win, win_keyval, attribute_val, flag, ierr) ) #endif @@ -37,7 +37,7 @@ OMPI_GENERATE_F77_BINDINGS (MPI_WIN_GET_ATTR, mpi_win_get_attr_, mpi_win_get_attr__, mpi_win_get_attr_f, - (MPI_Fint *win, MPI_Fint *win_keyval, char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr), + (MPI_Fint *win, MPI_Fint *win_keyval, MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr), (win, win_keyval, attribute_val, flag, ierr) ) #endif @@ -47,15 +47,35 @@ OMPI_GENERATE_F77_BINDINGS (MPI_WIN_GET_ATTR, #endif void mpi_win_get_attr_f(MPI_Fint *win, MPI_Fint *win_keyval, - char *attribute_val, MPI_Fint *flag, MPI_Fint *ierr) + MPI_Aint *attribute_val, MPI_Fint *flag, MPI_Fint *ierr) { - MPI_Win c_win = MPI_Win_f2c( *win ); - OMPI_SINGLE_NAME_DECL(flag); + int c_err, c_flag; + MPI_Win c_win; + int *c_value; - *ierr = OMPI_INT_2_FINT(MPI_Win_get_attr( c_win, - OMPI_FINT_2_INT(*win_keyval), - attribute_val, - OMPI_SINGLE_NAME_CONVERT(flag) )); + c_win = MPI_Win_f2c(*win); - OMPI_SINGLE_INT_2_FINT(flag); + /* This stuff is very confusing. Be sure to see MPI-2 4.12.7. */ + + /* Didn't use all the FINT macros that could have prevented a few + extra variables in this function, but I figured that the + clarity of code, and the fact that this is not expected to be a + high-performance function, was worth it */ + + /* Note that there is no conversion on attribute_val -- MPI-2 says + that it is supposed to be the right size already */ + + c_err = MPI_Win_get_attr(c_win, OMPI_FINT_2_INT(*win_keyval), + &c_value, &c_flag); + *ierr = OMPI_INT_2_FINT(c_err); + *flag = OMPI_INT_2_FINT(c_flag); + + /* Note that MPI-2 4.12.7 specifically says that Fortran's + xxx_GET_ATTR functions will take the address returned from C + and "convert it to an integer" (which assumedly means + dereference) */ + + if (MPI_SUCCESS == c_err && 1 == c_flag) { + *attribute_val = (MPI_Aint) *c_value; + } } diff --git a/src/mpi/f77/win_set_attr_f.c b/src/mpi/f77/win_set_attr_f.c index ef86c209d6..3994672165 100644 --- a/src/mpi/f77/win_set_attr_f.c +++ b/src/mpi/f77/win_set_attr_f.c @@ -20,7 +20,7 @@ OMPI_GENERATE_F77_BINDINGS (PMPI_WIN_SET_ATTR, pmpi_win_set_attr_, pmpi_win_set_attr__, pmpi_win_set_attr_f, - (MPI_Fint *win, MPI_Fint *win_keyval, char *attribute_val, MPI_Fint *ierr), + (MPI_Fint *win, MPI_Fint *win_keyval, MPI_Aint *attribute_val, MPI_Fint *ierr), (win, win_keyval, attribute_val, ierr) ) #endif @@ -37,7 +37,7 @@ OMPI_GENERATE_F77_BINDINGS (MPI_WIN_SET_ATTR, mpi_win_set_attr_, mpi_win_set_attr__, mpi_win_set_attr_f, - (MPI_Fint *win, MPI_Fint *win_keyval, char *attribute_val, MPI_Fint *ierr), + (MPI_Fint *win, MPI_Fint *win_keyval, MPI_Aint *attribute_val, MPI_Fint *ierr), (win, win_keyval, attribute_val, ierr) ) #endif @@ -47,7 +47,7 @@ OMPI_GENERATE_F77_BINDINGS (MPI_WIN_SET_ATTR, #endif void mpi_win_set_attr_f(MPI_Fint *win, MPI_Fint *win_keyval, - char *attribute_val, MPI_Fint *ierr) + MPI_Aint *attribute_val, MPI_Fint *ierr) { MPI_Win c_win = MPI_Win_f2c( *win );