diff --git a/include/internal/fmpi_futhark.h b/include/internal/fmpi_futhark.h index c2b7e21306aac21b673164e4e510daf65dd8b6b0..92688f779133b38af5eb84639ccc64aff620625d 100644 --- a/include/internal/fmpi_futhark.h +++ b/include/internal/fmpi_futhark.h @@ -150,8 +150,15 @@ _Bool fmpi_futhark_check_error(const struct fmpi_futhark_ctx * ctx, const char * * TODO * } */ -#define fmpi_futhark_new_1d(ctx, array, length) \ - FMPI_GENERIC_FUNC(array, new_1d, FMPI_FUTHARK_TYPES)(ctx, array, length) + +#define fmpi_futhark_new_1d(ctx, array, x) \ + FMPI_GENERIC_FUNC(array, new_1d, FMPI_FUTHARK_TYPES)(ctx, array, x, 0, 0) + +#define fmpi_futhark_new_2d(ctx, array, x, y) \ + FMPI_GENERIC_FUNC(array, new_2d, FMPI_FUTHARK_TYPES)(ctx, array, x, y, 0) + +#define fmpi_futhark_new_3d(ctx, array, x, y, z) \ + FMPI_GENERIC_FUNC(array, new_2d, FMPI_FUTHARK_TYPES)(ctx, array, x, y, z) /*------------------------------------------------------------------------------ fmpi_futhark_init() ------------------------------------------------------------------------------*/ diff --git a/include/internal/generic/fmpi_futhark_generic.h b/include/internal/generic/fmpi_futhark_generic.h index 4e112f2107599fd18e559bef8af6a4acf35d0e57..8b7bc084448270ff258900e9b04296517ae232d6 100644 --- a/include/internal/generic/fmpi_futhark_generic.h +++ b/include/internal/generic/fmpi_futhark_generic.h @@ -38,9 +38,32 @@ struct fmpi_ctx; #define FMPI_FUTHARK_TYPES \ FMPI_TYPE_REAL +#if defined(__GNUC__) || defined(__GNUG__) + _Pragma("GCC diagnostic ignored \"-Wunused-parameter\"") + _Pragma("GCC diagnostic push") +#elif defined(__clang__) + _Pragma("clang diagnostic ignored \"-Wunused-parameter\"") + _Pragma("clang diagnostic push") +#endif + +#define FMPI_FUTHARK_NEW_1(D, T, ctx, array, x, y, z) \ + futhark_new_##T##_1d(ctx, array, (int64_t)(x)); + +#define FMPI_FUTHARK_NEW_2(D, T, ctx, array, x, y, z) \ + futhark_new_##T##_2d(ctx, array, (int64_t)(x), (int64_t)(y)); + +#if defined(__GNUC__) || defined(__GNUG__) + _Pragma("GCC diagnostic push") +#elif defined(__clang__) + _Pragma("clang diagnostic push") +#endif + +#define FMPI_FUTHARK_NEW_3(D, T, ctx, array, x, y, z) \ + futhark_new_##T##_3d(ctx, array, (int64_t)(x), (int64_t)(y), (int64_t)(z)); + #define FMPI_FUTHARK_DECLARATION(D, T) \ struct futhark_##T##_##D##d * fmpi_futhark_new_##D##d_##T( \ - const struct fmpi_ctx * ctx, const T * array, size_t length \ + const struct fmpi_ctx * ctx, const T * array, size_t x, size_t y, size_t z \ ); \ void fmpi_futhark_free_##D##d_##T( \ const struct fmpi_ctx * ctx, struct futhark_##T##_##D##d * array \ diff --git a/src/fmpi_futhark.c b/src/fmpi_futhark.c index 874c91fe620ee8749ac9aae6a4f890fbcd02071b..eabd518c32823ba54c8a4f56dc28500b0a6a4287 100644 --- a/src/fmpi_futhark.c +++ b/src/fmpi_futhark.c @@ -127,28 +127,32 @@ _Bool fmpi_futhark_check_error( } return false; } + #define FMPI_FUTHARK_DEFINITION(D, T) \ -struct futhark_##T##_1d * fmpi_futhark_new_1d_##T( \ - const struct fmpi_ctx * const ctx, const T * const array, const size_t length \ +struct futhark_##T##_##D##d * fmpi_futhark_new_##D##d_##T( \ + const struct fmpi_ctx * const ctx, const T * const array, size_t x, size_t y, size_t z \ ){ \ assert(ctx != NULL); \ assert(array != NULL); \ - struct futhark_##T##_1d * data = futhark_new_##T##_1d(ctx->fut->ctx, array, (int64_t)length); \ + struct futhark_##T##_##D##d * data = FMPI_FUTHARK_NEW_##D(D, T, ctx->fut->ctx, array, x, y, z); \ if(data == NULL) { \ - fmpi_futhark_check_error(ctx->fut, CPL_STRINGIFY(futhark_new_##T##_1d)); \ + fmpi_futhark_check_error(ctx->fut, CPL_STRINGIFY(futhark_new_##T##_##D##d)); \ } \ - fmpi_futhark_sync(ctx->fut);\ - return data;\ + fmpi_futhark_sync(ctx->fut); \ + return data; \ }\ -void fmpi_futhark_free_1d_##T( \ - const struct fmpi_ctx * const ctx, struct futhark_##T##_1d * const array \ +void fmpi_futhark_free_##D##d_##T( \ + const struct fmpi_ctx * const ctx, struct futhark_##T##_##D##d * const array \ ){ \ assert(ctx != NULL); \ assert(array != NULL); \ fmpi_futhark_sync(ctx->fut);\ - const int err = futhark_free_##T##_1d(ctx->fut->ctx, array); \ + const int err = futhark_free_##T##_##D##d(ctx->fut->ctx, array); \ if(err != 0) { \ - fmpi_futhark_check_error(ctx->fut, CPL_STRINGIFY(futhark_free_##T##_1d)); \ + fmpi_futhark_check_error(ctx->fut, CPL_STRINGIFY(futhark_free_##T##_##D##d)); \ } \ } -FMPI_DEFINE_DIM_FUNCS(FMPI_FUTHARK_DEFINITION, -, FMPI_FUTHARK_TYPES) + +FMPI_DEFINE_DIM_FUNCS(FMPI_FUTHARK_DEFINITION, 1, FMPI_FUTHARK_TYPES) +FMPI_DEFINE_DIM_FUNCS(FMPI_FUTHARK_DEFINITION, 2, FMPI_FUTHARK_TYPES) +FMPI_DEFINE_DIM_FUNCS(FMPI_FUTHARK_DEFINITION, 3, FMPI_FUTHARK_TYPES) diff --git a/src/fmpi_reduce.c b/src/fmpi_reduce.c index 8df16a460de154a41887e083f49949fbe51ffb44..b81ffeadbceeeb892bba83250b86dda42059b626 100644 --- a/src/fmpi_reduce.c +++ b/src/fmpi_reduce.c @@ -46,7 +46,7 @@ T fmpi_local_reduce_prod_##T( \ ){ \ assert(ctx != NULL); \ assert(array != NULL); \ - struct futhark_##T##_1d * data = fmpi_futhark_new_1d_##T(ctx, array, length);\ + struct futhark_##T##_1d * data = fmpi_futhark_new_1d_##T(ctx, array, length, 0, 0);\ T result = FMPI_TYPE_DEFAULT_##T; \ const int err = futhark_entry_reduce_prod_##T(ctx->fut->ctx, &result, data); \ if(err != 0) { \