From 2dc2159b4c59e137ef6e05350bab8d6c678091f7 Mon Sep 17 00:00:00 2001 From: Igor Ivanov Date: Thu, 19 Nov 2015 12:23:01 +0200 Subject: [PATCH] oshmem: Align OSHMEM API with spec v1.2 (add new functions) --- oshmem/include/shmem.fh | 11 ++++- oshmem/include/shmem.h.in | 11 ++++- oshmem/shmem/c/Makefile.am | 3 +- oshmem/shmem/c/profile/Makefile.am | 3 +- oshmem/shmem/c/shmem_info.c | 36 ++++++++++++++++ oshmem/shmem/fortran/Makefile.am | 3 +- oshmem/shmem/fortran/profile/Makefile.am | 3 +- oshmem/shmem/fortran/prototypes_shmem.h | 2 + oshmem/shmem/fortran/shmem_info_f.c | 52 ++++++++++++++++++++++++ 9 files changed, 118 insertions(+), 6 deletions(-) create mode 100644 oshmem/shmem/c/shmem_info.c create mode 100644 oshmem/shmem/fortran/shmem_info_f.c diff --git a/oshmem/include/shmem.fh b/oshmem/include/shmem.fh index 792e931e1f..bd554552a2 100644 --- a/oshmem/include/shmem.fh +++ b/oshmem/include/shmem.fh @@ -13,6 +13,16 @@ ! ! TODO: exact values should be found during configuration ! + integer SHMEM_MAJOR_VERSION + parameter ( SHMEM_MAJOR_VERSION = 1 ) + + integer SHMEM_MINOR_VERSION + parameter ( SHMEM_MINOR_VERSION = 2 ) + + CHARACTER(LEN = 256), PARAMETER :: SHMEM_VENDOR_STRING = "http://www.open-mpi.org/" + + integer SHMEM_MAX_NAME_LEN + parameter ( SHMEM_MAX_NAME_LEN = 256-1 ) integer SHMEM_BARRIER_SYNC_SIZE parameter ( SHMEM_BARRIER_SYNC_SIZE = 4 ) @@ -20,7 +30,6 @@ integer SHMEM_BCAST_SYNC_SIZE parameter ( SHMEM_BCAST_SYNC_SIZE = 8 ) - integer SHMEM_COLLECT_SYNC_SIZE parameter ( SHMEM_COLLECT_SYNC_SIZE = 8 ) diff --git a/oshmem/include/shmem.h.in b/oshmem/include/shmem.h.in index 7111a0691a..691670e98b 100644 --- a/oshmem/include/shmem.h.in +++ b/oshmem/include/shmem.h.in @@ -79,6 +79,11 @@ extern "C" { /* * Constants and definitions */ +#define SHMEM_MAJOR_VERSION 1 +#define SHMEM_MINOR_VERSION 2 +#define SHMEM_VENDOR_STRING "http://www.open-mpi.org/" +#define SHMEM_MAX_NAME_LEN sizeof(SHMEM_VENDOR_STRING) + enum shmem_wait_ops { SHMEM_CMP_EQ, SHMEM_CMP_NE, @@ -110,13 +115,17 @@ OSHMEM_DECLSPEC void shmem_init(void); OSHMEM_DECLSPEC void shmem_finalize(void) OSHMEM_DESTRUCTOR; OSHMEM_DECLSPEC void shmem_global_exit(int status); - /* * Query routines */ OSHMEM_DECLSPEC int shmem_n_pes(void); OSHMEM_DECLSPEC int shmem_my_pe(void); +/* + * Info routines + */ +OSHMEM_DECLSPEC void shmem_info_get_version(int *major, int *minor); +OSHMEM_DECLSPEC void shmem_info_get_name(char *name); /* * Accessability routines diff --git a/oshmem/shmem/c/Makefile.am b/oshmem/shmem/c/Makefile.am index 960bf268be..e8abf46e38 100644 --- a/oshmem/shmem/c/Makefile.am +++ b/oshmem/shmem/c/Makefile.am @@ -56,7 +56,8 @@ OSHMEM_API_SOURCES = \ shmem_clear_lock.c \ shmem_set_lock.c \ shmem_test_lock.c \ - shmem_global_exit.c + shmem_global_exit.c \ + shmem_info.c AM_CPPFLAGS = -DOSHMEM_PROFILING=0 diff --git a/oshmem/shmem/c/profile/Makefile.am b/oshmem/shmem/c/profile/Makefile.am index f42ba568e3..d4574b6845 100644 --- a/oshmem/shmem/c/profile/Makefile.am +++ b/oshmem/shmem/c/profile/Makefile.am @@ -68,7 +68,8 @@ OSHMEM_API_SOURCES = \ pshmem_clear_lock.c \ pshmem_set_lock.c \ pshmem_test_lock.c \ - pshmem_global_exit.c + pshmem_global_exit.c \ + pshmem_info.c nodist_liboshmem_c_pshmem_la_SOURCES = \ $(OSHMEM_API_SOURCES) diff --git a/oshmem/shmem/c/shmem_info.c b/oshmem/shmem/c/shmem_info.c new file mode 100644 index 0000000000..579de9c145 --- /dev/null +++ b/oshmem/shmem/c/shmem_info.c @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2015 Mellanox Technologies, Inc. + * All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ +#include "oshmem_config.h" + +#include +#include + +#include "oshmem/constants.h" +#include "oshmem/include/shmem.h" + +void shmem_info_get_version(int *major, int *minor) +{ + if (major) { + *major = SHMEM_MAJOR_VERSION; + } + + if (minor) { + *minor = SHMEM_MINOR_VERSION; + } +} + +void shmem_info_get_name(char *name) +{ + if (name) { + assert(sizeof(SHMEM_VENDOR_STRING) < SHMEM_MAX_NAME_LEN); + memset(name, 0, SHMEM_MAX_NAME_LEN); + memcpy(name, SHMEM_VENDOR_STRING, sizeof(SHMEM_VENDOR_STRING)); + } +} diff --git a/oshmem/shmem/fortran/Makefile.am b/oshmem/shmem/fortran/Makefile.am index eb5f20569f..6986e7cd0d 100644 --- a/oshmem/shmem/fortran/Makefile.am +++ b/oshmem/shmem/fortran/Makefile.am @@ -125,7 +125,8 @@ liboshmem_fortran_la_SOURCES += \ shmem_int4_inc_f.c \ shmem_int8_inc_f.c \ shmem_quiet_f.c \ - shmem_fence_f.c + shmem_fence_f.c \ + shmem_info_f.c AM_CPPFLAGS = -DOSHMEM_PROFILING=0 endif diff --git a/oshmem/shmem/fortran/profile/Makefile.am b/oshmem/shmem/fortran/profile/Makefile.am index 8a2c92bd17..8d0c466938 100644 --- a/oshmem/shmem/fortran/profile/Makefile.am +++ b/oshmem/shmem/fortran/profile/Makefile.am @@ -117,7 +117,8 @@ nodist_liboshmem_fortran_pshmem_la_SOURCES = \ pshmem_int4_inc_f.c \ pshmem_int8_inc_f.c \ pshmem_quiet_f.c \ - pshmem_fence_f.c + pshmem_fence_f.c \ + pshmem_info_f.c # # Sym link in the sources from the real OSHMEM directory diff --git a/oshmem/shmem/fortran/prototypes_shmem.h b/oshmem/shmem/fortran/prototypes_shmem.h index 6deaddf610..96c9c43be8 100644 --- a/oshmem/shmem/fortran/prototypes_shmem.h +++ b/oshmem/shmem/fortran/prototypes_shmem.h @@ -29,6 +29,8 @@ PN (MPI_Fint, num_pes, NUM_PES, (void)); PN (MPI_Fint, shmem_my_pe, SHMEM_MY_PE, (void)); PN (MPI_Fint, my_pe, MY_PE, (void)); OSHMEM_DECLSPEC MPI_Fint _my_pe_(void); +PN (void, shmem_info_get_version, SHMEM_INFO_GET_VERSION, (MPI_Fint *major, MPI_Fint *minor)); +PN (void, shmem_info_get_name, SHMEM_INFO_GET_NAME, (char *name)); PN (void, shmem_finalize, SHMEM_FINALIZE, (void)); PN (void, shmem_barrier_all, SHMEM_BARRIER_ALL, (void)); PN (void, shpalloc, SHPALLOC, (FORTRAN_POINTER_T *addr, MPI_Fint *length, MPI_Fint *errcode, MPI_Fint *abort)); diff --git a/oshmem/shmem/fortran/shmem_info_f.c b/oshmem/shmem/fortran/shmem_info_f.c new file mode 100644 index 0000000000..d87c54b895 --- /dev/null +++ b/oshmem/shmem/fortran/shmem_info_f.c @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2013 Mellanox Technologies, Inc. + * All rights reserved. + * Copyright (c) 2013 Cisco Systems, Inc. All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#include "oshmem_config.h" + +#include + +#include "ompi/mpi/fortran/base/strings.h" + +#include "oshmem/shmem/fortran/bindings.h" +#include "oshmem/include/shmem.h" + +SHMEM_GENERATE_FORTRAN_BINDINGS_SUB (void, + SHMEM_INFO_GET_VERSION, + shmem_info_get_version_, + shmem_info_get_version__, + shmem_info_get_version_f, + (MPI_Fint *major, MPI_Fint *minor), + (major,minor) ) + +void shmem_info_get_version_f(MPI_Fint *major, MPI_Fint *minor) +{ + int c_major, c_minor; + + shmem_info_get_version(&c_major, &c_minor); + *major = OMPI_INT_2_FINT(c_major); + *minor = OMPI_INT_2_FINT(c_minor); +} + +SHMEM_GENERATE_FORTRAN_BINDINGS_SUB (void, + SHMEM_INFO_GET_NAME, + shmem_info_get_name_, + shmem_info_get_name__, + shmem_info_get_name_f, + (char *name), + (name) ) + +void shmem_info_get_name_f(char *name) +{ + char c_name[SHMEM_MAX_NAME_LEN]; + + shmem_info_get_name(c_name); + ompi_fortran_string_c2f(c_name, name, strlen(c_name) + 1); +}