PLASMA  2.8.0
PLASMA - Parallel Linear Algebra for Scalable Multi-core Architectures
int CORE_clarfb_gemm ( PLASMA_enum  side,
PLASMA_enum  trans,
int  direct,
int  storev,
int  M,
int  N,
int  K,
const PLASMA_Complex32_t *  V,
int  LDV,
const PLASMA_Complex32_t *  T,
int  LDT,
PLASMA_Complex32_t *  C,
int  LDC,
PLASMA_Complex32_t *  WORK,
int  LDWORK 
)

CORE_clarfb_gemm applies a complex block reflector H or its transpose H' to a complex M-by-N matrix C, from either the left or the right. this kernel is similar to the lapack clarfb but it do a full gemm on the triangular Vs assuming that the upper part of Vs is zero and ones are on the diagonal. It is also based on the fact that a gemm on a small block of k reflectors is faster than a trmm on the triangular (k,k) + gemm below.

NOTE THAT: Only Columnwise/Forward cases are treated here.

Parameters
[in]side
  • PlasmaLeft : apply Q or Q**H from the Left;
  • PlasmaRight : apply Q or Q**H from the Right.
[in]trans
  • PlasmaNoTrans : No transpose, apply Q;
  • PlasmaConjTrans : ConjTranspose, apply Q**H.
[in]directIndicates how H is formed from a product of elementary reflectors
  • PlasmaForward : H = H(1) H(2) . . . H(k) (Forward)
  • PlasmaBackward : H = H(k) . . . H(2) H(1) (Backward)
[in]storevIndicates how the vectors which define the elementary reflectors are stored:
  • PlasmaColumnwise
  • PlasmaRowwise
[in]MThe number of rows of the matrix C.
[in]NThe number of columns of the matrix C.
[in]KThe order of the matrix T (= the number of elementary reflectors whose product defines the block reflector).
[in]VCOMPLEX*8 array, dimension (LDV,K) if storev = 'C' (LDV,M) if storev = 'R' and side = 'L' (LDV,N) if storev = 'R' and side = 'R' The matrix V. See further details.
[in]LDVThe leading dimension of the array V. If storev = 'C' and side = 'L', LDV >= max(1,M); if storev = 'C' and side = 'R', LDV >= max(1,N); if storev = 'R', LDV >= K.
[in]TThe triangular K-by-K matrix T in the representation of the block reflector. T is upper triangular by block (economic storage); The rest of the array is not referenced.
[in]LDTThe leading dimension of the array T. LDT >= K.
[in,out]CCOMPLEX*8 array, dimension (LDC,N) On entry, the M-by-N matrix C. On exit, C is overwritten by H*C or H'*C or C*H or C*H'.
[in]LDCThe leading dimension of the array C. LDC >= max(1,M).
[in,out]WORK(workspace) COMPLEX*8 array, dimension (LDWORK,K).
[in]LDWORKThe dimension of the array WORK. If side = PlasmaLeft, LDWORK >= max(1,N); if side = PlasmaRight, LDWORK >= max(1,M).
Returns
Return values
PLASMA_SUCCESSsuccessful exit
<0if -i, the i-th argument had an illegal value