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