From b1dbd3afc3675fc844e9c9abf39f53172ddca92e Mon Sep 17 00:00:00 2001 From: "raphael.bach" <raphael.bach@etu.hesge.ch> Date: Tue, 14 Jun 2022 22:00:11 +0200 Subject: [PATCH] Add `fmpi_stencil` to `fmpi_task` --- include/fmpi_task.h | 8 ++- include/internal/generic/fmpi_task_generic.h | 74 ++++++++++---------- src/fmpi_task.c | 8 ++- 3 files changed, 47 insertions(+), 43 deletions(-) diff --git a/include/fmpi_task.h b/include/fmpi_task.h index 19ca51d..98ae439 100644 --- a/include/fmpi_task.h +++ b/include/fmpi_task.h @@ -31,6 +31,7 @@ // Internal #include "fmpi_data.h" #include "fmpi_domain.h" +#include "fmpi_stencil.h" #include "internal/fmpi_futhark.h" #include "internal/generic/fmpi_task_generic.h" /*============================================================================== @@ -92,6 +93,7 @@ typedef struct fmpi_task { fmpi_task_func func; //!< TODO struct fmpi_task_args args; //!< TODO struct fmpi_domain domains[FMPI_TASK_ARGS_MAX]; //!< TODO + struct fmpi_stencil stencil; //!< TODO } fmpi_task; /*============================================================================== PUBLIC FUNCTION @@ -119,7 +121,7 @@ typedef struct fmpi_task { */ struct fmpi_task fmpi_task_register( struct fmpi_ctx * ctx, const fmpi_task_func func, - const struct fmpi_task_args * args + struct fmpi_stencil stencil, const struct fmpi_task_args * args ); /*------------------------------------------------------------------------------ fmpi_task_run() @@ -147,8 +149,8 @@ void fmpi_task_run(const struct fmpi_ctx * ctx, const struct fmpi_task * task); /*------------------------------------------------------------------------------ FMPI_TASK_REGISTER() ------------------------------------------------------------------------------*/ -#define FMPI_TASK_REGISTER(ctx, func, ...) \ - FMPI_TASK_REGISTER_IMPL(ctx, func, __VA_ARGS__) +#define FMPI_TASK_REGISTER(ctx, func, stencil, ...) \ + FMPI_TASK_REGISTER_IMPL(ctx, func, stencil, __VA_ARGS__) /*------------------------------------------------------------------------------ FMPI_TASK_FUTHARK_SYNC() ------------------------------------------------------------------------------*/ diff --git a/include/internal/generic/fmpi_task_generic.h b/include/internal/generic/fmpi_task_generic.h index fcc5de1..dee037a 100644 --- a/include/internal/generic/fmpi_task_generic.h +++ b/include/internal/generic/fmpi_task_generic.h @@ -46,18 +46,18 @@ void FUNC##_##N( \ fmpi_futhark_sync(ctx->fut); \ } -#define FMPI_TASK_REGISTER_IMPL(ctx, func, ...) \ +#define FMPI_TASK_REGISTER_IMPL(ctx, func, stencil, ...) \ FMPI_PRIV_TASK_CONCAT(FMPI_TASK_REGISTER_, CPL_ARG_COUNT(__VA_ARGS__)) \ - (ctx, func, __VA_ARGS__) + (ctx, func, stencil,__VA_ARGS__) -#define FMPI_TASK_REGISTER_1(ctx, func, arg_out) \ - fmpi_task_register((ctx), func##_0, &(struct fmpi_task_args){ \ +#define FMPI_TASK_REGISTER_1(ctx, func, stencil, arg_out) \ + fmpi_task_register((ctx), func##_0, stencil, &(struct fmpi_task_args){ \ .out = (arg_out), \ .cnt = 0 \ }) -#define FMPI_TASK_REGISTER_N(ctx, func, arg_out, ...) \ - fmpi_task_register((ctx), FMPI_PRIV_TASK_CONCAT(func##_, CPL_ARG_COUNT(__VA_ARGS__)), &(struct fmpi_task_args){ \ +#define FMPI_TASK_REGISTER_N(ctx, func, stencil, arg_out, ...) \ + fmpi_task_register((ctx), FMPI_PRIV_TASK_CONCAT(func##_, CPL_ARG_COUNT(__VA_ARGS__)), stencil, &(struct fmpi_task_args){ \ .in = {__VA_ARGS__}, \ .out = (arg_out), \ .cnt = CPL_ARG_COUNT(__VA_ARGS__) \ @@ -350,37 +350,37 @@ void FUNC##_##N( \ args->in[30].start, args->in[31] \ ) -#define FMPI_TASK_REGISTER_2(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_3(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_4(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_5(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_6(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_7(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_8(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_9(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_10(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_11(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_12(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_13(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_14(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_15(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_16(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_17(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_18(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_19(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_20(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_21(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_22(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_23(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_24(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_25(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_26(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_27(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_28(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_29(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_30(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_31(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) -#define FMPI_TASK_REGISTER_32(ctx, func, ...) FMPI_TASK_REGISTER_N(ctx, func, __VA_ARGS__) +#define FMPI_TASK_REGISTER_2(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_3(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_4(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_5(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_6(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_7(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_8(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_9(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_10(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_11(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_12(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_13(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_14(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_15(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_16(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_17(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_18(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_19(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_20(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_21(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_22(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_23(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_24(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_25(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_26(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_27(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_28(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_29(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_30(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_31(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) +#define FMPI_TASK_REGISTER_32(ctx, func, stencil, ...) FMPI_TASK_REGISTER_N(ctx, func, stencil, __VA_ARGS__) /*============================================================================== GUARD ==============================================================================*/ diff --git a/src/fmpi_task.c b/src/fmpi_task.c index f49e921..2995731 100644 --- a/src/fmpi_task.c +++ b/src/fmpi_task.c @@ -28,6 +28,7 @@ #include <stdint.h> // int64_t // Internal #include "fmpi_domain.h" +#include "fmpi_stencil.h" #include "internal/fmpi_ctx.h" #include "internal/fmpi_futhark.h" #include "internal/fmpi_futhark_entry.h" @@ -40,15 +41,16 @@ fmpi_task_run() ------------------------------------------------------------------------------*/ struct fmpi_task fmpi_task_register( - struct fmpi_ctx * const ctx, const fmpi_task_func func, - const struct fmpi_task_args * const args + struct fmpi_ctx * ctx, const fmpi_task_func func, + const struct fmpi_stencil stencil, const struct fmpi_task_args * args ){ assert(ctx != NULL); assert(ctx->task_cnt < FMPI_TASK_MAX); assert(args != NULL); struct fmpi_task task = { .func = func, - .args = *args + .args = *args, + .stencil = stencil }; const size_t rank = (size_t)ctx->mpi->rank; for(size_t i = 0; i < task.args.cnt; i++) { -- GitLab