diff --git a/include/internal/generic/fmpi_data_generic.h b/include/internal/generic/fmpi_data_generic.h index 5f8cbf662a4d4bba6c60099ee04bda683d7fadd7..24674564df09558859f25d5d92687c57f1d59c50 100644 --- a/include/internal/generic/fmpi_data_generic.h +++ b/include/internal/generic/fmpi_data_generic.h @@ -50,9 +50,9 @@ struct fmpi_data fmpi_data_##D##d_out_##T( \ const struct fmpi_ctx * ctx, T * data, size_t x, size_t y, size_t z \ ) -FMPI_DECLARE_DIM_FUNCS(FMPI_DATA_DECLARATION, 1, FMPI_DATA_TYPES); -FMPI_DECLARE_DIM_FUNCS(FMPI_DATA_DECLARATION, 2, FMPI_DATA_TYPES); -FMPI_DECLARE_DIM_FUNCS(FMPI_DATA_DECLARATION, 3, FMPI_DATA_TYPES); +FMPI_DECLARE_FUNCS_DT(FMPI_DATA_DECLARATION, 1, FMPI_DATA_TYPES); +FMPI_DECLARE_FUNCS_DT(FMPI_DATA_DECLARATION, 2, FMPI_DATA_TYPES); +FMPI_DECLARE_FUNCS_DT(FMPI_DATA_DECLARATION, 3, FMPI_DATA_TYPES); /*============================================================================== GUARD ==============================================================================*/ diff --git a/include/internal/generic/fmpi_futhark_generic.h b/include/internal/generic/fmpi_futhark_generic.h index 5e246e58b236f4296b124059c2c6a3ece181ed20..89438d06126384218d27dfb347d1d2c3e4076c44 100644 --- a/include/internal/generic/fmpi_futhark_generic.h +++ b/include/internal/generic/fmpi_futhark_generic.h @@ -79,9 +79,9 @@ void fmpi_futhark_free_##D##d_##T( \ const struct fmpi_futhark_ctx * ctx, void * array \ ) -FMPI_DECLARE_DIM_FUNCS(FMPI_FUTHARK_DECLARATION, 1, FMPI_FUTHARK_TYPES); -FMPI_DECLARE_DIM_FUNCS(FMPI_FUTHARK_DECLARATION, 2, FMPI_FUTHARK_TYPES); -FMPI_DECLARE_DIM_FUNCS(FMPI_FUTHARK_DECLARATION, 3, FMPI_FUTHARK_TYPES); +FMPI_DECLARE_FUNCS_DT(FMPI_FUTHARK_DECLARATION, 1, FMPI_FUTHARK_TYPES); +FMPI_DECLARE_FUNCS_DT(FMPI_FUTHARK_DECLARATION, 2, FMPI_FUTHARK_TYPES); +FMPI_DECLARE_FUNCS_DT(FMPI_FUTHARK_DECLARATION, 3, FMPI_FUTHARK_TYPES); /*============================================================================== GUARD ==============================================================================*/ diff --git a/include/internal/generic/fmpi_generic.h b/include/internal/generic/fmpi_generic.h index 18c6232521dac6e570ea77fb6b4213c83936f621..84bde477db669cdf5fd241fd8ef524cb598e47f1 100644 --- a/include/internal/generic/fmpi_generic.h +++ b/include/internal/generic/fmpi_generic.h @@ -86,7 +86,7 @@ #define FMPI_GENERIC_ASSOC(FUNC, TYPE) \ TYPE : fmpi_##FUNC##_##TYPE /*------------------------------------------------------------------------------ - FMPI_DECLARE_FUNCS() + FMPI_DECLARE_FUNCS_T() ------------------------------------------------------------------------------*/ /** * Declares one or more functions. @@ -98,23 +98,23 @@ * @param ... : Comma separated list of type names (each must be a single word). * * @expansion{ - * FMPI_DECLARE_FUNCS(M, char, int, double) => + * FMPI_DECLARE_FUNCS_T(M, char, int, double) => * M(char) ; M(int) ; M(double) * } * * @example{ * #define M(T) T foo_##T(T x); T bar_##T(T x) - * FMPI_DECLARE_FUNCS(M, char, int); + * FMPI_DECLARE_FUNCS_T(M, char, int); * // char foo_char(char x); * // char bar_char(char x); * // int foo_int(int x); * // int bar_int(int x); * } */ -#define FMPI_DECLARE_FUNCS(M, ...) \ +#define FMPI_DECLARE_FUNCS_T(M, ...) \ CPL_MAP(M, CPL_SEMICOLON, __VA_ARGS__) /*------------------------------------------------------------------------------ - FMPI_DEFINE_FUNCS() + FMPI_DEFINE_FUNCS_T() ------------------------------------------------------------------------------*/ /** * Defines one or more functions. @@ -125,7 +125,7 @@ * @param ... : Comma separated list of type names (each must be a single word). * * @expansion{ - * FMPI_DEFINE_FUNCS(M, char, int, double) => + * FMPI_DEFINE_FUNCS_T(M, char, int, double) => * M(char) M(int) M(double) * } * @@ -137,17 +137,17 @@ * T bar_##T(T x) { \ * return x; \ * } - * FMPI_DEFINE_FUNCS(M, char, int) + * FMPI_DEFINE_FUNCS_T(M, char, int) * // char foo_char(char x) { return bar_char(x); } * // char bar_char(char x) { return x; } * // int foo_int(int x) { return bar_int(x); } * // int bar_int(int x) { return x; } * } */ -#define FMPI_DEFINE_FUNCS(M, ...) \ +#define FMPI_DEFINE_FUNCS_T(M, ...) \ CPL_MAP(M, CPL_EMPTY, __VA_ARGS__) /*------------------------------------------------------------------------------ - FMPI_DECLARE_DIM_FUNCS() + FMPI_DECLARE_FUNCS_DT() ------------------------------------------------------------------------------*/ /** * TODO @@ -164,10 +164,10 @@ * TODO * } */ -#define FMPI_DECLARE_DIM_FUNCS(M, D, ...) \ +#define FMPI_DECLARE_FUNCS_DT(M, D, ...) \ CPL_MAP_FIXED(M, CPL_SEMICOLON, (D), __VA_ARGS__) /*------------------------------------------------------------------------------ - FMPI_DEFINE_DIM_FUNCS() + FMPI_DEFINE_FUNCS_DT() ------------------------------------------------------------------------------*/ /** * TODO @@ -184,7 +184,7 @@ * TODO * } */ -#define FMPI_DEFINE_DIM_FUNCS(M, D, ...) \ +#define FMPI_DEFINE_FUNCS_DT(M, D, ...) \ CPL_MAP_FIXED(M, CPL_EMPTY, (D), __VA_ARGS__) /*============================================================================== GUARD diff --git a/include/internal/generic/fmpi_reduce_generic.h b/include/internal/generic/fmpi_reduce_generic.h index 034b263ae58d8a1ef2084d3de45c1b160010bf64..43d994805d3c6486bd6bcd51fdd70f60c9f87029 100644 --- a/include/internal/generic/fmpi_reduce_generic.h +++ b/include/internal/generic/fmpi_reduce_generic.h @@ -45,7 +45,7 @@ T fmpi_local_reduce_prod_##T( \ ); \ T fmpi_reduce_prod_##T(const struct fmpi_ctx * ctx, const T * array) -FMPI_DECLARE_FUNCS(FMPI_REDUCE_DECLARATION, FMPI_REDUCE_PROD_TYPES); +FMPI_DECLARE_FUNCS_T(FMPI_REDUCE_DECLARATION, FMPI_REDUCE_PROD_TYPES); /*============================================================================== GUARD ==============================================================================*/ diff --git a/include/internal/generic/fmpi_task_generic.h b/include/internal/generic/fmpi_task_generic.h index fa508b50105dbe2477ef103e42cb5992a3e42191..6c0e871f749a109f4c4c54fe1633f29cbd8bf802 100644 --- a/include/internal/generic/fmpi_task_generic.h +++ b/include/internal/generic/fmpi_task_generic.h @@ -42,7 +42,14 @@ int FUNC##_##N( \ assert(ctx != NULL); \ assert(args != NULL); \ assert(args->cnt == N); \ - return FMPI_TASK_FUNC_##N(FUNC, ctx->fut->ctx, args); \ + if(args->out.type.derived == FMPI_TYPE_ARRAY) { \ + if(args->out.type.base == FMPI_TYPE_u8) { \ + struct futhark_u8_1d ** out = &args->out.start; \ + return FMPI_TASK_FUNC_##N(FUNC, ctx->fut->ctx, out, args); \ + } \ + } else { \ + } \ + return FMPI_TASK_FUNC_##N(FUNC, ctx->fut->ctx, args->out.start, args); \ } #define FMPI_TASK_REGISTER_IMPL(ctx, func, stencil, ...) \ @@ -62,11 +69,11 @@ int FUNC##_##N( \ .cnt = CPL_ARG_COUNT(__VA_ARGS__) \ }) -#define FMPI_TASK_FUNC_0(func, ctx, args) \ +#define FMPI_TASK_FUNC_0(func, ctx, out, args) \ futhark_entry_##func(ctx, args->out.start) -#define FMPI_TASK_FUNC_1(func, ctx, args) \ - futhark_entry_##func(ctx, args->out.start, \ +#define FMPI_TASK_FUNC_1(func, ctx, out, args) \ + futhark_entry_##func(ctx, out, \ args->in[00].start \ ) #define FMPI_TASK_FUNC_2(func, ctx, args) \ diff --git a/src/fmpi_data.c b/src/fmpi_data.c index b47b482b5b7a78db2076240a4745b4c582e81e0a..b98922a7e985975ba381b727564fa270d990940b 100644 --- a/src/fmpi_data.c +++ b/src/fmpi_data.c @@ -77,6 +77,6 @@ struct fmpi_data fmpi_data_##D##d_out_##T( \ }; \ } -FMPI_DEFINE_DIM_FUNCS(FMPI_DATA_DEFINITION, 1, FMPI_DATA_TYPES) -FMPI_DEFINE_DIM_FUNCS(FMPI_DATA_DEFINITION, 2, FMPI_DATA_TYPES) -FMPI_DEFINE_DIM_FUNCS(FMPI_DATA_DEFINITION, 3, FMPI_DATA_TYPES) +FMPI_DEFINE_FUNCS_DT(FMPI_DATA_DEFINITION, 1, FMPI_DATA_TYPES) +FMPI_DEFINE_FUNCS_DT(FMPI_DATA_DEFINITION, 2, FMPI_DATA_TYPES) +FMPI_DEFINE_FUNCS_DT(FMPI_DATA_DEFINITION, 3, FMPI_DATA_TYPES) diff --git a/src/fmpi_futhark.c b/src/fmpi_futhark.c index 7a6d136c3b0355e914aa91f703b31fa56865e7de..4161a7544ca5361c95628b37b565ff356bd957b1 100644 --- a/src/fmpi_futhark.c +++ b/src/fmpi_futhark.c @@ -178,6 +178,6 @@ void fmpi_futhark_free_##D##d_##T( \ } \ } -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) +FMPI_DEFINE_FUNCS_DT(FMPI_FUTHARK_DEFINITION, 1, FMPI_FUTHARK_TYPES) +FMPI_DEFINE_FUNCS_DT(FMPI_FUTHARK_DEFINITION, 2, FMPI_FUTHARK_TYPES) +FMPI_DEFINE_FUNCS_DT(FMPI_FUTHARK_DEFINITION, 3, FMPI_FUTHARK_TYPES) diff --git a/src/fmpi_reduce.c b/src/fmpi_reduce.c index 572df19a56aad35ff92e887214885424f99c5e09..f07155294fd951917613876f330f885279f1362e 100644 --- a/src/fmpi_reduce.c +++ b/src/fmpi_reduce.c @@ -77,4 +77,4 @@ T fmpi_reduce_prod_##T(const struct fmpi_ctx * const ctx, const T * const array) return result; \ } -FMPI_DEFINE_FUNCS(FMPI_REDUCE_DEFINITION, FMPI_REDUCE_PROD_TYPES) +FMPI_DEFINE_FUNCS_T(FMPI_REDUCE_DEFINITION, FMPI_REDUCE_PROD_TYPES)