Skip to content
Snippets Groups Projects
Verified Commit 0f14ff96 authored by raphael.bach's avatar raphael.bach
Browse files

Add `fmpi_futhark_get_data_sync()`

parent 571bee89
No related branches found
No related tags found
No related merge requests found
...@@ -132,6 +132,13 @@ void * fmpi_futhark_new_data( ...@@ -132,6 +132,13 @@ void * fmpi_futhark_new_data(
const struct fmpi_futhark_ctx * ctx, const void * 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 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 MACRO
==============================================================================*/ ==============================================================================*/
......
...@@ -69,6 +69,9 @@ void * fmpi_futhark_new_##D##d_##T( \ ...@@ -69,6 +69,9 @@ void * fmpi_futhark_new_##D##d_##T( \
); \ ); \
void fmpi_futhark_free_##D##d_##T( \ void fmpi_futhark_free_##D##d_##T( \
const struct fmpi_futhark_ctx * ctx, void * array \ 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); FMPI_DECLARE_FUNCS_DT(FMPI_FUTHARK_DECLARATION, 1, FMPI_FUTHARK_TYPES);
......
...@@ -44,6 +44,15 @@ static const fmpi_futhark_new_data_func fmpi_futhark_new_data_func_list[] = { ...@@ -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, 2),
FMPI_FUTHARK_FUNC_ENTRY_LIST(new, 3) 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 MACRO
==============================================================================*/ ==============================================================================*/
...@@ -151,6 +160,29 @@ void * fmpi_futhark_new_data( ...@@ -151,6 +160,29 @@ void * fmpi_futhark_new_data(
const size_t idx = FMPI_PRIV_FUTHARK_FUNC_IDX(dim_cnt, type); 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); 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) \ #define FMPI_FUTHARK_DEFINITION(D, T) \
void * fmpi_futhark_new_##D##d_##T( \ void * fmpi_futhark_new_##D##d_##T( \
...@@ -178,6 +210,15 @@ void fmpi_futhark_free_##D##d_##T( \ ...@@ -178,6 +210,15 @@ void fmpi_futhark_free_##D##d_##T( \
if(err != 0) { \ if(err != 0) { \
fmpi_futhark_check_error(ctx, CPL_STRINGIFY(futhark_free_##T##_##D##d)); \ 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) FMPI_DEFINE_FUNCS_DT(FMPI_FUTHARK_DEFINITION, 1, FMPI_FUTHARK_TYPES)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment