From e8a37d5c6f8b657c06751c92d0f4658b2e08e25c Mon Sep 17 00:00:00 2001
From: Mathieu Faverge <mathieu.faverge@inria.fr>
Date: Tue, 25 Sep 2018 11:04:30 +0200
Subject: [PATCH] Add map codelets for quark and parsec

---
 runtime/parsec/CMakeLists.txt         |  1 +
 runtime/parsec/codelets/codelet_map.c | 55 +++++++++++++++++++++++++++
 runtime/quark/CMakeLists.txt          |  1 +
 runtime/quark/codelets/codelet_map.c  | 49 ++++++++++++++++++++++++
 4 files changed, 106 insertions(+)
 create mode 100644 runtime/parsec/codelets/codelet_map.c
 create mode 100644 runtime/quark/codelets/codelet_map.c

diff --git a/runtime/parsec/CMakeLists.txt b/runtime/parsec/CMakeLists.txt
index 24ce25e8f..8ae3cada8 100644
--- a/runtime/parsec/CMakeLists.txt
+++ b/runtime/parsec/CMakeLists.txt
@@ -101,6 +101,7 @@ precisions_rules_py(RUNTIME_SRCS_GENERATED "${ZSRC}"
 set(RUNTIME_SRCS
   ${RUNTIME_COMMON}
   ${RUNTIME_SRCS_GENERATED}
+  codelets/codelet_map.c
   )
 
 # Force generation of sources
diff --git a/runtime/parsec/codelets/codelet_map.c b/runtime/parsec/codelets/codelet_map.c
new file mode 100644
index 000000000..8c62ab82a
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_map.c
@@ -0,0 +1,55 @@
+/**
+ *
+ * @file codelet_map.c
+ *
+ * @copyright 2018-2018 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
+ *                      Univ. Bordeaux. All rights reserved.
+ *
+ ***
+ *
+ * @brief Chameleon map PaRSEC codelet
+ *
+ * @version 1.0.0
+ * @author Mathieu Faverge
+ * @date 2018-09-24
+ *
+ */
+#include "chameleon_parsec.h"
+#include "chameleon/tasks.h"
+
+static inline int
+CORE_map_parsec( parsec_execution_stream_t *context,
+                 parsec_task_t             *this_task )
+{
+    const CHAM_desc_t *desc;
+    cham_uplo_t uplo;
+    int m;
+    int n;
+    void *data;
+    cham_unary_operator_t operator;
+    void *op_args;
+
+    quark_unpack_args_9( this_task, desc, uplo, m, n, data, operator, op_args );
+    operator( desc, uplo, m, n, data, op_args );
+
+    (void)context;
+    return PARSEC_HOOK_RETURN_DONE;
+}
+
+void INSERT_TASK_map( const RUNTIME_option_t *options,
+                      cham_uplo_t uplo, const CHAM_desc_t *A, int Am, int An,
+                      cham_unary_operator_t operator, void *op_args )
+{
+    parsec_taskpool_t* PARSEC_dtd_taskpool = (parsec_taskpool_t *)(options->sequence->schedopt);
+
+    parsec_dtd_taskpool_insert_task(
+        PARSEC_dtd_taskpool, CORE_map_parsec, options->priority, "map",
+        sizeof(CHAM_desc_t*),             &A,    VALUE,
+        sizeof(cham_uplo_t),              &uplo, VALUE,
+        sizeof(int),                      &m,    VALUE,
+        sizeof(int),                      &n,    VALUE,
+        PASSED_BY_REF, RTBLKADDR(A, CHAMELEON_Complex64_t, Am, An), chameleon_parsec_get_arena_index( A ) | INOUT,
+        sizeof(cham_unary_operator_t),    &operator, VALUE,
+        sizeof(void*),                    &op_args,  VALUE,
+        PARSEC_DTD_ARG_END );
+}
diff --git a/runtime/quark/CMakeLists.txt b/runtime/quark/CMakeLists.txt
index acc587d4e..337bb7f7c 100644
--- a/runtime/quark/CMakeLists.txt
+++ b/runtime/quark/CMakeLists.txt
@@ -102,6 +102,7 @@ precisions_rules_py(RUNTIME_SRCS_GENERATED "${ZSRC}"
 set(RUNTIME_SRCS
   ${RUNTIME_COMMON}
   ${RUNTIME_SRCS_GENERATED}
+  codelets/codelet_map.c
   )
 
 # Force generation of sources
diff --git a/runtime/quark/codelets/codelet_map.c b/runtime/quark/codelets/codelet_map.c
new file mode 100644
index 000000000..3506746d3
--- /dev/null
+++ b/runtime/quark/codelets/codelet_map.c
@@ -0,0 +1,49 @@
+/**
+ *
+ * @file codelet_map.c
+ *
+ * @copyright 2018-2018 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
+ *                      Univ. Bordeaux. All rights reserved.
+ *
+ ***
+ *
+ * @brief Chameleon map Quark codelet
+ *
+ * @version 1.0.0
+ * @author Mathieu Faverge
+ * @date 2018-09-24
+ *
+ */
+#include "chameleon_quark.h"
+#include "chameleon/tasks.h"
+
+void CORE_map_quark(Quark *quark)
+{
+    const CHAM_desc_t *desc;
+    cham_uplo_t uplo;
+    int m;
+    int n;
+    void *data;
+    cham_unary_operator_t operator;
+    void *op_args;
+
+    quark_unpack_args_7( quark, desc, uplo, m, n, data, operator, op_args );
+    operator( desc, uplo, m, n, data, op_args );
+}
+
+void INSERT_TASK_map( const RUNTIME_option_t *options,
+                      cham_uplo_t uplo, const CHAM_desc_t *A, int Am, int An,
+                      cham_unary_operator_t operator, void *op_args )
+{
+    quark_option_t *opt = (quark_option_t*)(options->schedopt);
+
+    QUARK_Insert_Task(opt->quark, CORE_map_quark, (Quark_Task_Flags*)opt,
+        sizeof(CHAM_desc_t*),             &A,    VALUE,
+        sizeof(cham_uplo_t),              &uplo, VALUE,
+        sizeof(int),                      &m,    VALUE,
+        sizeof(int),                      &n,    VALUE,
+        sizeof(CHAMELEON_Complex64_t), RTBLKADDR(A, CHAMELEON_Complex64_t, Am, An), INOUT,
+        sizeof(cham_unary_operator_t),    &operator, VALUE,
+        sizeof(void*),                    &op_args,  VALUE,
+        0);
+}
-- 
GitLab