/** * * @file quark/codelet_zlaswp.c * * @copyright 2023-2023 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, * Univ. Bordeaux. All rights reserved. * *** * * @brief Chameleon Quark codelets to apply zlaswp on a panel * * @version 1.3.0 * @author Mathieu Faverge * @date 2023-08-31 * @precisions normal z -> c d s * */ #include "chameleon_quark.h" #include "chameleon/tasks_z.h" #include "coreblas/coreblas_ztile.h" static void CORE_zlaswp_get_quark( Quark *quark ) { int m0, k, *perm; CHAM_tile_t *A, *B; quark_unpack_args_5( quark, m0, k, perm, A, B ); TCORE_zlaswp_get( m0, A->m, A->n, k, A, B, perm ); } void INSERT_TASK_zlaswp_get( const RUNTIME_option_t *options, int m0, int k, const CHAM_ipiv_t *ipiv, int ipivk, const CHAM_desc_t *A, int Am, int An, const CHAM_desc_t *U, int Um, int Un ) { quark_option_t *opt = (quark_option_t*)(options->schedopt); DAG_CORE_LASWP; QUARK_Insert_Task( opt->quark, CORE_zlaswp_get_quark, (Quark_Task_Flags*)opt, sizeof(int), &m0, VALUE, sizeof(int), &k, VALUE, sizeof(int*), RUNTIME_perm_getaddr( ipiv, ipivk ), INPUT, sizeof(CHAM_tile_t*), RTBLKADDR(A, ChamComplexDouble, Am, An), INPUT, sizeof(CHAM_tile_t*), RTBLKADDR(U, ChamComplexDouble, Um, Un), INOUT, 0 ); } static void CORE_zlaswp_set_quark( Quark *quark ) { int m0, k, *invp; CHAM_tile_t *A, *B; quark_unpack_args_5( quark, m0, k, invp, A, B ); TCORE_zlaswp_set( m0, A->m, A->n, k, A, B, invp ); } void INSERT_TASK_zlaswp_set( const RUNTIME_option_t *options, int m0, int k, const CHAM_ipiv_t *ipiv, int ipivk, const CHAM_desc_t *A, int Am, int An, const CHAM_desc_t *B, int Bm, int Bn ) { quark_option_t *opt = (quark_option_t*)(options->schedopt); DAG_CORE_LASWP; QUARK_Insert_Task( opt->quark, CORE_zlaswp_set_quark, (Quark_Task_Flags*)opt, sizeof(int), &m0, VALUE, sizeof(int), &k, VALUE, sizeof(int*), RUNTIME_invp_getaddr( ipiv, ipivk ), INPUT, sizeof(CHAM_tile_t*), RTBLKADDR(A, ChamComplexDouble, Am, An), INPUT, sizeof(CHAM_tile_t*), RTBLKADDR(B, ChamComplexDouble, Bm, Bn), INOUT, 0 ); }