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