Commit 28d05b39 authored by Philippe Virouleau's avatar Philippe Virouleau

Cleanup codelets

parent f28af593
......@@ -29,7 +29,7 @@ if ( CHAMELEON_USE_CUDA )
set( CHAMELEON_COPY_DIAG ON )
else()
option(CHAMELEON_COPY_DIAG
"This options enables the duplication of the diagonal tiles in some algorithm to avoid anti-dependencies on lower/upper triangular parts (Might be useful to StarPU)" ON)
"This options enables the duplication of the diagonal tiles in some algorithm to avoid anti-dependencies on lower/upper triangular parts (Might be useful to StarPU and OpenMP)" ON)
endif()
if ( CHAMELEON_SCHED_QUARK )
......
......@@ -34,18 +34,8 @@ include_directories( ${CMAKE_CURRENT_BINARY_DIR}/include )
# --------------------------
set(RUNTIME_HDRS
include/chameleon_openmp.h
#include/runtime_codelet_profile.h
#include/runtime_codelets.h
#include/runtime_profiling.h
#include/runtime_workspace.h
)
# Add generated headers
# ---------------------
#foreach( hdr_file ${RUNTIME_HDRS_GENERATED} )
#list(APPEND RUNTIME_HDRS ${CMAKE_CURRENT_BINARY_DIR}/${hdr_file})
#endforeach()
# Force generation of headers
# ---------------------------
add_custom_target(
......
/**
*
* @file quark/codelet_map.c
* @file openmp/codelet_map.c
*
* @copyright 2018-2018 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
* Univ. Bordeaux. All rights reserved.
*
***
*
* @brief Chameleon map Quark codelet
* @brief Chameleon map OpenMP codelet
*
* @version 1.0.0
* @author Mathieu Faverge
......
/**
*
* @file codelet_ztslqt.c
*
* @copyright 2009-2014 The University of Tennessee and The University of
* Tennessee Research Foundation. All rights reserved.
* @copyright 2012-2016 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
* Univ. Bordeaux. All rights reserved.
*
***
*
* @brief Chameleon ztslqt StarPU codelet
*
* @version 1.0.0
* @comment This file has been automatically generated
* from Plasma 2.5.0 for CHAMELEON 1.0.0
* @author Hatem Ltaief
* @author Jakub Kurzak
* @author Mathieu Faverge
* @author Emmanuel Agullo
* @author Cedric Castagnede
* @date 2010-11-15
* @precisions normal z -> c d s
*
*/
#include "chameleon_openmp.h"
#include "chameleon/tasks_z.h"
/**
*
* @ingroup CORE_CHAMELEON_Complex64_t
*
* CORE_ztslqt computes a LQ factorization of a rectangular matrix
* formed by coupling side-by-side a complex M-by-M
* lower triangular tile A1 and a complex M-by-N tile A2:
*
* | A1 A2 | = L * Q
*
* The tile Q is represented as a product of elementary reflectors
*
* Q = H(k)' . . . H(2)' H(1)', where k = min(M,N).
*
* Each H(i) has the form
*
* H(i) = I - tau * v * v'
*
* where tau is a complex scalar, and v is a complex vector with
* v(1:i-1) = 0 and v(i) = 1; conjg(v(i+1:n)) is stored on exit in
* A2(i,1:n), and tau in TAU(i).
*
*******************************************************************************
*
* @param[in] M
* The number of rows of the tile A1 and A2. M >= 0.
* The number of columns of the tile A1.
*
* @param[in] N
* The number of columns of the tile A2. N >= 0.
*
* @param[in] IB
* The inner-blocking size. IB >= 0.
*
* @param[in,out] A1
* On entry, the M-by-M tile A1.
* On exit, the elements on and below the diagonal of the array
* contain the M-by-M lower trapezoidal tile L;
* the elements above the diagonal are not referenced.
*
* @param[in] LDA1
* The leading dimension of the array A1. LDA1 >= max(1,M).
*
* @param[in,out] A2
* On entry, the M-by-N tile A2.
* On exit, all the elements with the array TAU, represent
* the unitary tile Q as a product of elementary reflectors
* (see Further Details).
*
* @param[in] LDA2
* The leading dimension of the tile A2. LDA2 >= max(1,M).
*
* @param[out] T
* The IB-by-N triangular factor T of the block reflector.
* T is upper triangular by block (economic storage);
* The rest of the array is not referenced.
*
* @param[in] LDT
* The leading dimension of the array T. LDT >= IB.
*
* @param[out] TAU
* The scalar factors of the elementary reflectors (see Further
* Details).
*
* @param[out] WORK
*
*******************************************************************************
*
* @return
* \retval CHAMELEON_SUCCESS successful exit
* \retval <0 if -i, the i-th argument had an illegal value
*
*/
void INSERT_TASK_ztslqt(const RUNTIME_option_t *options,
int m, int n, int ib, int nb,
const CHAM_desc_t *A1, int A1m, int A1n, int lda1,
const CHAM_desc_t *A2, int A2m, int A2n, int lda2,
const CHAM_desc_t *T, int Tm, int Tn, int ldt)
{
CHAMELEON_Complex64_t *ptrA1 = RTBLKADDR(A1, CHAMELEON_Complex64_t, A1m, A1n);
CHAMELEON_Complex64_t *ptrA2 = RTBLKADDR(A2, CHAMELEON_Complex64_t, A2m, A2n);
CHAMELEON_Complex64_t *ptrT = RTBLKADDR(T, CHAMELEON_Complex64_t, Tm, Tn);
#pragma omp task firstprivate(m, n, ib, ptrA1, lda1, ptrA2, lda2, ptrT, ldt) depend(inout:ptrA1[0], ptrA2[0], ptrT[0])
{
CHAMELEON_Complex64_t tau[options->ws_wsize];
CHAMELEON_Complex64_t *work = tau + chameleon_max( m, n );
CORE_ztslqt(m, n, ib, ptrA1, lda1, ptrA2, lda2, ptrT, ldt, tau, work);
}
}
/**
*
* @file codelet_ztsmlq.c
*
* @copyright 2009-2014 The University of Tennessee and The University of
* Tennessee Research Foundation. All rights reserved.
* @copyright 2012-2016 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
* Univ. Bordeaux. All rights reserved.
*
***
*
* @brief Chameleon ztsmlq StarPU codelet
*
* @version 1.0.0
* @comment This file has been automatically generated
* from Plasma 2.5.0 for CHAMELEON 1.0.0
* @author Hatem Ltaief
* @author Jakub Kurzak
* @author Azzam Haidar
* @author Dulceneia Becker
* @author Mathieu Faverge
* @author Emmanuel Agullo
* @author Cedric Castagnede
* @date 2010-11-15
* @precisions normal z -> c d s
*
*/
#include "chameleon_openmp.h"
#include "chameleon/tasks_z.h"
/**
*
* @ingroup CORE_CHAMELEON_Complex64_t
*
* CORE_ztsmlq overwrites the general complex M1-by-N1 tile A1 and
* M2-by-N2 tile A2 with
*
* SIDE = 'L' SIDE = 'R'
* TRANS = 'N': Q * | A1 | | A1 A2 | * Q
* | A2 |
*
* TRANS = 'C': Q**H * | A1 | | A1 A2 | * Q**H
* | A2 |
*
* where Q is a complex unitary matrix defined as the product of k
* elementary reflectors
*
* Q = H(k)' . . . H(2)' H(1)'
*
* as returned by CORE_ZTSLQT.
*
*******************************************************************************
*
* @param[in] side
* @arg ChamLeft : apply Q or Q**H from the Left;
* @arg ChamRight : apply Q or Q**H from the Right.
*
* @param[in] trans
* @arg ChamNoTrans : No transpose, apply Q;
* @arg ChamConjTrans : ConjTranspose, apply Q**H.
*
* @param[in] M1
* The number of rows of the tile A1. M1 >= 0.
*
* @param[in] N1
* The number of columns of the tile A1. N1 >= 0.
*
* @param[in] M2
* The number of rows of the tile A2. M2 >= 0.
* M2 = M1 if side == ChamRight.
*
* @param[in] N2
* The number of columns of the tile A2. N2 >= 0.
* N2 = N1 if side == ChamLeft.
*
* @param[in] K
* The number of elementary reflectors whose product defines
* the matrix Q.
*
* @param[in] IB
* The inner-blocking size. IB >= 0.
*
* @param[in,out] A1
* On entry, the M1-by-N1 tile A1.
* On exit, A1 is overwritten by the application of Q.
*
* @param[in] LDA1
* The leading dimension of the array A1. LDA1 >= max(1,M1).
*
* @param[in,out] A2
* On entry, the M2-by-N2 tile A2.
* On exit, A2 is overwritten by the application of Q.
*
* @param[in] LDA2
* The leading dimension of the tile A2. LDA2 >= max(1,M2).
*
* @param[in] V
* The i-th row must contain the vector which defines the
* elementary reflector H(i), for i = 1,2,...,k, as returned by
* CORE_ZTSLQT in the first k rows of its array argument V.
*
* @param[in] LDV
* The leading dimension of the array V. LDV >= max(1,K).
*
* @param[in] T
* The IB-by-N1 triangular factor T of the block reflector.
* T is upper triangular by block (economic storage);
* The rest of the array is not referenced.
*
* @param[in] LDT
* The leading dimension of the array T. LDT >= IB.
*
* @param[out] WORK
* Workspace array of size
* LDWORK-by-M1 if side == ChamLeft
* LDWORK-by-IB if side == ChamRight
*
* @param[in] LDWORK
* The leading dimension of the array WORK.
* LDWORK >= max(1,IB) if side == ChamLeft
* LDWORK >= max(1,N1) if side == ChamRight
*
*******************************************************************************
*
* @return
* \retval CHAMELEON_SUCCESS successful exit
* \retval <0 if -i, the i-th argument had an illegal value
*
*/
void INSERT_TASK_ztsmlq(const RUNTIME_option_t *options,
cham_side_t side, cham_trans_t trans,
int m1, int n1, int m2, int n2, int k, int ib, int nb,
const CHAM_desc_t *A1, int A1m, int A1n, int lda1,
const CHAM_desc_t *A2, int A2m, int A2n, int lda2,
const CHAM_desc_t *V, int Vm, int Vn, int ldv,
const CHAM_desc_t *T, int Tm, int Tn, int ldt)
{
CHAMELEON_Complex64_t *ptrA1 = RTBLKADDR(A1, CHAMELEON_Complex64_t, A1m, A1n);
CHAMELEON_Complex64_t *ptrA2 = RTBLKADDR(A2, CHAMELEON_Complex64_t, A2m, A2n);
CHAMELEON_Complex64_t *ptrT = RTBLKADDR(T, CHAMELEON_Complex64_t, Tm, Tn);
CHAMELEON_Complex64_t *ptrV = RTBLKADDR(V, CHAMELEON_Complex64_t, Vm, Vn);
int ldwork = side == ChamLeft ? ib : nb;
#pragma omp task firstprivate(side, trans, m1, n1, m2, n2, k, ib, ptrA1, lda1, ptrA2, lda2, ptrV, ldv, ptrT, ldt, ldwork) depend(inout:ptrA1[0], ptrA2[0]) depend(in:ptrT[0], ptrV[0])
{
CHAMELEON_Complex64_t work[options->ws_wsize];
CORE_ztsmlq(side, trans, m1, n1, m2, n2, k, ib,
ptrA1, lda1, ptrA2, lda2, ptrV, ldv, ptrT, ldt, work, ldwork);
}
}
/**
*
* @file codelet_ztsmqr.c
*
* @copyright 2009-2014 The University of Tennessee and The University of
* Tennessee Research Foundation. All rights reserved.
* @copyright 2012-2016 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
* Univ. Bordeaux. All rights reserved.
*
***
*
* @brief Chameleon ztsmqr StarPU codelet
*
* @version 1.0.0
* @comment This file has been automatically generated
* from Plasma 2.5.0 for CHAMELEON 1.0.0
* @author Hatem Ltaief
* @author Jakub Kurzak
* @author Azzam Haidar
* @author Dulceneia Becker
* @author Mathieu Faverge
* @author Emmanuel Agullo
* @author Cedric Castagnede
* @date 2010-11-15
* @precisions normal z -> c d s
*
*/
#include "chameleon_openmp.h"
#include "chameleon/tasks_z.h"
/**
*
* @ingroup CORE_CHAMELEON_Complex64_t
*
* CORE_ztsmqr overwrites the general complex M1-by-N1 tile A1 and
* M2-by-N2 tile A2 with
*
* SIDE = 'L' SIDE = 'R'
* TRANS = 'N': Q * | A1 | | A1 A2 | * Q
* | A2 |
*
* TRANS = 'C': Q**H * | A1 | | A1 A2 | * Q**H
* | A2 |
*
* where Q is a complex unitary matrix defined as the product of k
* elementary reflectors
*
* Q = H(1) H(2) . . . H(k)
*
* as returned by CORE_ZTSQRT.
*
*******************************************************************************
*
* @param[in] side
* @arg ChamLeft : apply Q or Q**H from the Left;
* @arg ChamRight : apply Q or Q**H from the Right.
*
* @param[in] trans
* @arg ChamNoTrans : No transpose, apply Q;
* @arg ChamConjTrans : ConjTranspose, apply Q**H.
*
* @param[in] M1
* The number of rows of the tile A1. M1 >= 0.
*
* @param[in] N1
* The number of columns of the tile A1. N1 >= 0.
*
* @param[in] M2
* The number of rows of the tile A2. M2 >= 0.
* M2 = M1 if side == ChamRight.
*
* @param[in] N2
* The number of columns of the tile A2. N2 >= 0.
* N2 = N1 if side == ChamLeft.
*
* @param[in] K
* The number of elementary reflectors whose product defines
* the matrix Q.
*
* @param[in] IB
* The inner-blocking size. IB >= 0.
*
* @param[in,out] A1
* On entry, the M1-by-N1 tile A1.
* On exit, A1 is overwritten by the application of Q.
*
* @param[in] LDA1
* The leading dimension of the array A1. LDA1 >= max(1,M1).
*
* @param[in,out] A2
* On entry, the M2-by-N2 tile A2.
* On exit, A2 is overwritten by the application of Q.
*
* @param[in] LDA2
* The leading dimension of the tile A2. LDA2 >= max(1,M2).
*
* @param[in] V
* The i-th row must contain the vector which defines the
* elementary reflector H(i), for i = 1,2,...,k, as returned by
* CORE_ZTSQRT in the first k columns of its array argument V.
*
* @param[in] LDV
* The leading dimension of the array V. LDV >= max(1,K).
*
* @param[in] T
* The IB-by-N1 triangular factor T of the block reflector.
* T is upper triangular by block (economic storage);
* The rest of the array is not referenced.
*
* @param[in] LDT
* The leading dimension of the array T. LDT >= IB.
*
* @param[out] WORK
* Workspace array of size
* LDWORK-by-N1 if side == ChamLeft
* LDWORK-by-IB if side == ChamRight
*
* @param[in] LDWORK
* The leading dimension of the array WORK.
* LDWORK >= max(1,IB) if side == ChamLeft
* LDWORK >= max(1,M1) if side == ChamRight
*
*******************************************************************************
*
* @return
* \retval CHAMELEON_SUCCESS successful exit
* \retval <0 if -i, the i-th argument had an illegal value
*
*/
void INSERT_TASK_ztsmqr(const RUNTIME_option_t *options,
cham_side_t side, cham_trans_t trans,
int m1, int n1, int m2, int n2, int k, int ib, int nb,
const CHAM_desc_t *A1, int A1m, int A1n, int lda1,
const CHAM_desc_t *A2, int A2m, int A2n, int lda2,
const CHAM_desc_t *V, int Vm, int Vn, int ldv,
const CHAM_desc_t *T, int Tm, int Tn, int ldt)
{
CHAMELEON_Complex64_t *ptrA1 = RTBLKADDR(A1, CHAMELEON_Complex64_t, A1m, A1n);
CHAMELEON_Complex64_t *ptrA2 = RTBLKADDR(A2, CHAMELEON_Complex64_t, A2m, A2n);
CHAMELEON_Complex64_t *ptrT = RTBLKADDR(T, CHAMELEON_Complex64_t, Tm, Tn);
CHAMELEON_Complex64_t *ptrV = RTBLKADDR(V, CHAMELEON_Complex64_t, Vm, Vn);
int ldwork = side == ChamLeft ? ib : nb;
#pragma omp task firstprivate(side, trans, m1, n1, m2, n2, k, ib, ptrA1, lda1, ptrA2, lda2, ptrV, ldv, ptrT, ldt, ldwork) depend(inout:ptrA1[0], ptrA2[0]) depend(in:ptrT[0], ptrV[0])
{
CHAMELEON_Complex64_t work[options->ws_wsize];
CORE_ztsmqr(side, trans, m1, n1, m2, n2, k, ib,
ptrA1, lda1, ptrA2, lda2, ptrV, ldv, ptrT, ldt, work, ldwork);
}
}
/**
*
* @file codelet_ztsqrt.c
*
* @copyright 2009-2014 The University of Tennessee and The University of
* Tennessee Research Foundation. All rights reserved.
* @copyright 2012-2018 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
* Univ. Bordeaux. All rights reserved.
*
***
*
* @brief Chameleon ztsqrt StarPU codelet
*
* @version 1.0.0
* @comment This file has been automatically generated
* from Plasma 2.5.0 for CHAMELEON 1.0.0
* @author Hatem Ltaief
* @author Jakub Kurzak
* @author Mathieu Faverge
* @author Emmanuel Agullo
* @author Cedric Castagnede
* @date 2010-11-15
* @precisions normal z -> c d s
*
*/
#include "chameleon_openmp.h"
#include "chameleon/tasks_z.h"
/**
*
* @ingroup CORE_CHAMELEON_Complex64_t
*
* CORE_ztsqrt computes a QR factorization of a rectangular matrix
* formed by coupling a complex N-by-N upper triangular tile A1
* on top of a complex M-by-N tile A2:
*
* | A1 | = Q * R
* | A2 |
*
*******************************************************************************
*
* @param[in] M
* The number of columns of the tile A2. M >= 0.
*
* @param[in] N
* The number of rows of the tile A1.
* The number of columns of the tiles A1 and A2. N >= 0.
*
* @param[in] IB
* The inner-blocking size. IB >= 0.
*
* @param[in,out] A1
* On entry, the N-by-N tile A1.
* On exit, the elements on and above the diagonal of the array
* contain the N-by-N upper trapezoidal tile R;
* the elements below the diagonal are not referenced.
*
* @param[in] LDA1
* The leading dimension of the array A1. LDA1 >= max(1,N).
*
* @param[in,out] A2
* On entry, the M-by-N tile A2.
* On exit, all the elements with the array TAU, represent
* the unitary tile Q as a product of elementary reflectors
* (see Further Details).
*
* @param[in] LDA2
* The leading dimension of the tile A2. LDA2 >= max(1,M).
*
* @param[out] T
* The IB-by-N triangular factor T of the block reflector.
* T is upper triangular by block (economic storage);
* The rest of the array is not referenced.
*
* @param[in] LDT
* The leading dimension of the array T. LDT >= IB.
*
* @param[out] TAU
* The scalar factors of the elementary reflectors (see Further
* Details).
*
* @param[out] WORK
*
*******************************************************************************
*
* @return
* \retval CHAMELEON_SUCCESS successful exit
* \retval <0 if -i, the i-th argument had an illegal value
*
*/
void INSERT_TASK_ztsqrt(const RUNTIME_option_t *options,
int m, int n, int ib, int nb,
const CHAM_desc_t *A1, int A1m, int A1n, int lda1,
const CHAM_desc_t *A2, int A2m, int A2n, int lda2,
const CHAM_desc_t *T, int Tm, int Tn, int ldt)
{
CHAMELEON_Complex64_t *ptrA1 = RTBLKADDR(A1, CHAMELEON_Complex64_t, A1m, A1n);
CHAMELEON_Complex64_t *ptrA2 = RTBLKADDR(A2, CHAMELEON_Complex64_t, A2m, A2n);
CHAMELEON_Complex64_t *ptrT = RTBLKADDR(T, CHAMELEON_Complex64_t, Tm, Tn);
#pragma omp task firstprivate(m, n, ib, ptrA1, lda1, ptrA2, lda2, ptrT, ldt) depend(inout:ptrA1[0], ptrA2[0]) depend(in:ptrT[0])
{
CHAMELEON_Complex64_t tau[options->ws_wsize];
CHAMELEON_Complex64_t *work = tau + chameleon_max( m, n );
CORE_ztsqrt(m, n, ib, ptrA1, lda1, ptrA2, lda2, ptrT, ldt, tau, work);
}
}
/**
*
* @file codelet_zttlqt.c
*
* @copyright 2009-2014 The University of Tennessee and The University of
* Tennessee Research Foundation. All rights reserved.
* @copyright 2012-2016 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
* Univ. Bordeaux. All rights reserved.
*
***
*
* @brief Chameleon zttlqt StarPU codelet
*
* @version 1.0.0
* @comment This file has been automatically generated
* from Plasma 2.5.0 for CHAMELEON 1.0.0
* @author Hatem Ltaief
* @author Dulceneia Becker
* @author Mathieu Faverge
* @author Emmanuel Agullo
* @author Cedric Castagnede
* @date 2010-11-15
* @precisions normal z -> c d s
*
*/
#include "chameleon_openmp.h"
#include "chameleon/tasks_z.h"
/**
*
* @ingroup CORE_CHAMELEON_Complex64_t
*
* CORE_zttlqt computes a LQ factorization of a rectangular matrix
* formed by coupling side-by-side a complex M-by-M lower triangular tile A1
* and a complex M-by-N lower triangular tile A2:
*
* | A1 A2 | = L * Q
*
* The tile Q is represented as a product of elementary reflectors
*
* Q = H(k)' . . . H(2)' H(1)', where k = min(M,N).
*
* Each H(i) has the form
*
* H(i) = I - tau * v * v'
*
* where tau is a complex scalar, and v is a complex vector with
* v(1:i-1) = 0 and v(i) = 1; conjg(v(i+1:n)) is stored on exit in
* A2(i,1:n), and tau in TAU(i).
*
*******************************************************************************
*
* @param[in] M
* The number of rows of the tile A1 and A2. M >= 0.
* The number of columns of the tile A1.
*
* @param[in] N
* The number of columns of the tile A2. N >= 0.
*
* @param[in] IB
* The inner-blocking size. IB >= 0.
*
* @param[in,out] A1
* On entry, the M-by-M tile A1.
* On exit, the elements on and below the diagonal of the array
* contain the M-by-M lower trapezoidal tile L;
* the elements above the diagonal are not referenced.
*
* @param[in] LDA1
* The leading dimension of the array A1. LDA1 >= max(1,N).
*
* @param[in,out] A2
* On entry, the M-by-N lower triangular tile A2.
* On exit, the elements on and below the diagonal of the array
* with the array TAU, represent
* the unitary tile Q as a product of elementary reflectors
* (see Further Details).
*
* @param[in] LDA2
* The leading dimension of the array A2. LDA2 >= max(1,M).
*
* @param[out] T
* The IB-by-N triangular factor T of the block reflector.
* T is upper triangular by block (economic storage);
* The rest of the array is not referenced.
*
* @param[in] LDT
* The leading dimension of the array T. LDT >= IB.
*
* @param[out] TAU
* The scalar factors of the elementary reflectors (see Further
* Details).
*
* @param[in,out] WORK
*
*******************************************************************************
*
* @return
* \retval CHAMELEON_SUCCESS successful exit
* \retval <0 if -i, the i-th argument had an illegal value
*
*/
void INSERT_TASK_zttlqt(const RUNTIME_option_t *options,
int m, int n, int ib, int nb,
const CHAM_desc_t *A1, int A1m, int A1n, int lda1,
const CHAM_desc_t *A2, int A2m, int A2n, int lda2,
const CHAM_desc_t *T, int Tm, int Tn, int ldt)
{
CHAMELEON_Complex64_t *ptrA1 = RTBLKADDR(A1, CHAMELEON_Complex64_t, A1m, A1n);
CHAMELEON_Complex64_t *ptrA2 = RTBLKADDR(A2, CHAMELEON_Complex64_t, A2m, A2n);
CHAMELEON_Complex64_t *ptrT = RTBLKADDR(T, CHAMELEON_Complex64_t, Tm, Tn);
#pragma omp task firstprivate(m, n, ib, ptrA1, lda1, ptrA2, lda2, ptrT, ldt) depend(inout:ptrA1[0], ptrA2[0], ptrT[0])
{
CHAMELEON_Complex64_t tau[options->ws_wsize];
CHAMELEON_Complex64_t *work = tau + chameleon_max( m, n );
CORE_zttlqt(m, n, ib, ptrA1, lda1, ptrA2, lda2, ptrT, ldt, tau, work);
}
}
/**
*
* @file codelet_zttmlq.c
*
* @copyright 2009-2014 The University of Tennessee and The University of
* Tennessee Research Foundation. All rights reserved.
* @copyright 2012-2016 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
* Univ. Bordeaux. All rights reserved.
*
***
*
* @brief Chameleon zttmlq StarPU codelet
*
* @version 1.0.0
* @comment This file has been automatically generated
* from Plasma 2.5.0 for CHAMELEON 1.0.0
* @author Hatem Ltaief
* @author Dulceneia Becker
* @author Mathieu Faverge
* @author Emmanuel Agullo
* @author Cedric Castagnede
* @date 2010-11-15
* @precisions normal z -> c d s
*
*/
#include "chameleon_openmp.h"
#include "chameleon/tasks_z.h"
/**
*
* @ingroup CORE_CHAMELEON_Complex64_t
*
* CORE_zttmlq overwrites the general complex M1-by-N1 tile A1 and
* M2-by-N2 tile A2 (N1 == N2) with
*
* SIDE = 'L' SIDE = 'R'
* TRANS = 'N': Q * | A1 | | A1 | * Q
* | A2 | | A2 |
*
* TRANS = 'C': Q**H * | A1 | | A1 | * Q**H
* | A2 | | A2 |
*
* where Q is a complex unitary matrix defined as the product of k
* elementary reflectors
*
* Q = H(1) H(2) . . . H(k)