From 35484f46abfd140f82648f24804b914dd7c21253 Mon Sep 17 00:00:00 2001 From: "raphael.bach" <raphael.bach@etu.hesge.ch> Date: Sun, 26 Jun 2022 22:33:21 +0200 Subject: [PATCH] Add `FMPI_TASK_OP_GATHER` --- include/fmpi_task.h | 3 ++- src/fmpi_task.c | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/include/fmpi_task.h b/include/fmpi_task.h index 5f65604..39e26ca 100644 --- a/include/fmpi_task.h +++ b/include/fmpi_task.h @@ -55,7 +55,8 @@ ------------------------------------------------------------------------------*/ typedef enum fmpi_task_op { FMPI_TASK_OP_NONE = 0, - FMPI_TASK_OP_SUM + FMPI_TASK_OP_SUM, + FMPI_TASK_OP_GATHER } fmpi_task_op; /*------------------------------------------------------------------------------ fmpi_task_args diff --git a/src/fmpi_task.c b/src/fmpi_task.c index 66c0178..8b482f4 100644 --- a/src/fmpi_task.c +++ b/src/fmpi_task.c @@ -194,5 +194,18 @@ int fmpi_task_finalize( } return err; } + if(op == FMPI_TASK_OP_GATHER) { + const size_t cnt = task->domains[0].parts[ctx->mpi->rank].inner.cnt; + MPI_Datatype type = fmpi_mpi_type(task->args.out.type.base); + const int err = fmpi_mpi_world_gather_in_place( + ctx->mpi, task->args.out.raw, type, cnt, cnt + ); + if(err != FMPI_SUCCESS) { + FMPI_RAISE_ERROR(ctx->err_handler, "FMPI", + "fmpi_mpi_world_gather_in_place() failed!" + ); + } + return err; + } return FMPI_SUCCESS; } -- GitLab