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

Add `fmpi_stencil` to `fmpi_task`

parent a780b17b
No related branches found
No related tags found
No related merge requests found
......@@ -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()
------------------------------------------------------------------------------*/
......
......@@ -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
==============================================================================*/
......
......@@ -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++) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment