From 0f14ff966a74e35f771da2f26112a1145bf092cc Mon Sep 17 00:00:00 2001 From: "raphael.bach" <raphael.bach@etu.hesge.ch> Date: Wed, 22 Jun 2022 23:59:24 +0200 Subject: [PATCH] Add `fmpi_futhark_get_data_sync()` --- include/internal/fmpi_futhark.h | 7 ++++ .../internal/generic/fmpi_futhark_generic.h | 3 ++ src/fmpi_futhark.c | 41 +++++++++++++++++++ 3 files changed, 51 insertions(+) diff --git a/include/internal/fmpi_futhark.h b/include/internal/fmpi_futhark.h index f96d0e2..99673c4 100644 --- a/include/internal/fmpi_futhark.h +++ b/include/internal/fmpi_futhark.h @@ -132,6 +132,13 @@ void * fmpi_futhark_new_data( const struct fmpi_futhark_ctx * ctx, const void * data, enum fmpi_type_base type, size_t dim_cnt, size_t x, size_t y, size_t z ); +/*------------------------------------------------------------------------------ + fmpi_futhark_get_data_sync() +------------------------------------------------------------------------------*/ +void * fmpi_futhark_get_data_sync( + const struct fmpi_futhark_ctx * ctx, void * in, void * out, + enum fmpi_type_base type, size_t dim_cnt +); /*============================================================================== MACRO ==============================================================================*/ diff --git a/include/internal/generic/fmpi_futhark_generic.h b/include/internal/generic/fmpi_futhark_generic.h index cfecb3b..266a52b 100644 --- a/include/internal/generic/fmpi_futhark_generic.h +++ b/include/internal/generic/fmpi_futhark_generic.h @@ -69,6 +69,9 @@ void * fmpi_futhark_new_##D##d_##T( \ ); \ void fmpi_futhark_free_##D##d_##T( \ const struct fmpi_futhark_ctx * ctx, void * array \ +); \ +int fmpi_futhark_values_##D##d_##T( \ + const struct fmpi_futhark_ctx * ctx, void * in, void * out \ ) FMPI_DECLARE_FUNCS_DT(FMPI_FUTHARK_DECLARATION, 1, FMPI_FUTHARK_TYPES); diff --git a/src/fmpi_futhark.c b/src/fmpi_futhark.c index a76aeb3..112a8ea 100644 --- a/src/fmpi_futhark.c +++ b/src/fmpi_futhark.c @@ -44,6 +44,15 @@ static const fmpi_futhark_new_data_func fmpi_futhark_new_data_func_list[] = { FMPI_FUTHARK_FUNC_ENTRY_LIST(new, 2), FMPI_FUTHARK_FUNC_ENTRY_LIST(new, 3) }; + +typedef int (*fmpi_futhark_get_data_func)( + const struct fmpi_futhark_ctx * ctx, void * in, void * out +); +static const fmpi_futhark_get_data_func fmpi_futhark_get_data_func_list[] = { + FMPI_FUTHARK_FUNC_ENTRY_LIST(values, 1), + FMPI_FUTHARK_FUNC_ENTRY_LIST(values, 2), + FMPI_FUTHARK_FUNC_ENTRY_LIST(values, 3) +}; /*============================================================================== MACRO ==============================================================================*/ @@ -151,6 +160,29 @@ void * fmpi_futhark_new_data( const size_t idx = FMPI_PRIV_FUTHARK_FUNC_IDX(dim_cnt, type); return fmpi_futhark_new_data_func_list[idx](ctx, data, x, y, z); } +/*------------------------------------------------------------------------------ + fmpi_futhark_get_data() +------------------------------------------------------------------------------*/ +void * fmpi_futhark_get_data_sync( + const struct fmpi_futhark_ctx * const ctx, void * const in, void * const out, + const enum fmpi_type_base type, const size_t dim_cnt +){ + assert(ctx != NULL); + assert(in != NULL); + assert(out != NULL); + assert(dim_cnt <= FMPI_DIM_MAX); + const size_t idx = FMPI_PRIV_FUTHARK_FUNC_IDX(dim_cnt, type); + const int err = fmpi_futhark_get_data_func_list[idx](ctx, in, out); + if(err != FUTHARK_SUCCESS) { + FMPI_RAISE_FUTHARK_ERROR(ctx, "futhark_values_##T##_##D##d() failed!"); + return NULL; + } + fmpi_futhark_sync(ctx); + if(fmpi_futhark_check_error(ctx, "futhark_values_##T##_##D##d") == true) { + return NULL; + } + return out; +} #define FMPI_FUTHARK_DEFINITION(D, T) \ void * fmpi_futhark_new_##D##d_##T( \ @@ -178,6 +210,15 @@ void fmpi_futhark_free_##D##d_##T( \ if(err != 0) { \ fmpi_futhark_check_error(ctx, CPL_STRINGIFY(futhark_free_##T##_##D##d)); \ } \ +} \ +int fmpi_futhark_values_##D##d_##T( \ + const struct fmpi_futhark_ctx * const ctx, void * const in, void * const out \ +){ \ + _Static_assert((D) <= FMPI_DIM_MAX, ""); \ + assert(ctx != NULL); \ + assert(in != NULL); \ + assert(out != NULL); \ + return futhark_values_##T##_##D##d(ctx->ctx, in, out); \ } FMPI_DEFINE_FUNCS_DT(FMPI_FUTHARK_DEFINITION, 1, FMPI_FUTHARK_TYPES) -- GitLab