MAGMA  1.5.0
Matrix Algebra for GPU and Multicore Architectures
 All Files Functions Groups
single-complex precision

Functions

magma_int_t magma_clarfb_gpu (magma_side_t side, magma_trans_t trans, magma_direct_t direct, magma_storev_t storev, magma_int_t m, magma_int_t n, magma_int_t k, const magmaFloatComplex *dV, magma_int_t ldv, const magmaFloatComplex *dT, magma_int_t ldt, magmaFloatComplex *dC, magma_int_t ldc, magmaFloatComplex *dwork, magma_int_t ldwork)
 CLARFB applies a complex block reflector H or its transpose H^H to a COMPLEX m by n matrix C, from the left. More...
 
magma_int_t magma_clarfb_gpu_gemm (magma_side_t side, magma_trans_t trans, magma_direct_t direct, magma_storev_t storev, magma_int_t m, magma_int_t n, magma_int_t k, const magmaFloatComplex *dV, magma_int_t ldv, const magmaFloatComplex *dT, magma_int_t ldt, magmaFloatComplex *dC, magma_int_t ldc, magmaFloatComplex *dwork, magma_int_t ldwork, magmaFloatComplex *dworkvt, magma_int_t ldworkvt)
 CLARFB applies a complex block reflector H or its transpose H' to a COMPLEX m by n matrix C, from the left. More...
 

Detailed Description

Function Documentation

magma_int_t magma_clarfb_gpu ( magma_side_t  side,
magma_trans_t  trans,
magma_direct_t  direct,
magma_storev_t  storev,
magma_int_t  m,
magma_int_t  n,
magma_int_t  k,
const magmaFloatComplex *  dV,
magma_int_t  ldv,
const magmaFloatComplex *  dT,
magma_int_t  ldt,
magmaFloatComplex *  dC,
magma_int_t  ldc,
magmaFloatComplex *  dwork,
magma_int_t  ldwork 
)

CLARFB applies a complex block reflector H or its transpose H^H to a COMPLEX m by n matrix C, from the left.

Parameters
[in]sidemagma_side_t
  • = MagmaLeft: apply H or H^H from the Left
  • = MagmaRight: apply H or H^H from the Right
[in]transmagma_trans_t
  • = MagmaNoTrans: apply H (No transpose)
  • = MagmaConjTrans: apply H^H (Conjugate transpose)
[in]directmagma_direct_t Indicates how H is formed from a product of elementary reflectors
  • = MagmaForward: H = H(1) H(2) . . . H(k) (Forward)
  • = MagmaBackward: H = H(k) . . . H(2) H(1) (Backward)
[in]storevmagma_storev_t Indicates how the vectors which define the elementary reflectors are stored:
  • = MagmaColumnwise: Columnwise
  • = MagmaRowwise: Rowwise
[in]mINTEGER The number of rows of the matrix C.
[in]nINTEGER The number of columns of the matrix C.
[in]kINTEGER The order of the matrix T (= the number of elementary reflectors whose product defines the block reflector).
[in]dVCOMPLEX array on the GPU, dimension (LDV,K) if STOREV = MagmaColumnwise (LDV,M) if STOREV = MagmaRowwise and SIDE = MagmaLeft (LDV,N) if STOREV = MagmaRowwise and SIDE = MagmaRight The matrix V. See further details.
[in]ldvINTEGER The leading dimension of the array V. If STOREV = MagmaColumnwise and SIDE = MagmaLeft, LDV >= max(1,M); if STOREV = MagmaColumnwise and SIDE = MagmaRight, LDV >= max(1,N); if STOREV = MagmaRowwise, LDV >= K.
[in]dTCOMPLEX array on the GPU, dimension (LDT,K) The triangular k by k matrix T in the representation of the block reflector.
[in]ldtINTEGER The leading dimension of the array T. LDT >= K.
[in,out]dCCOMPLEX array on the GPU, dimension (LDC,N) On entry, the m by n matrix C. On exit, C is overwritten by H*C, or H^H*C, or C*H, or C*H^H.
[in]ldcINTEGER The leading dimension of the array C. LDA >= max(1,M).
dwork(workspace) COMPLEX array, dimension (LDWORK,K)
[in]ldworkINTEGER The leading dimension of the array WORK. If SIDE = MagmaLeft, LDWORK >= max(1,N); if SIDE = MagmaRight, LDWORK >= max(1,M);

Further Details

The shape of the matrix V and the storage of the vectors which define the H(i) is best illustrated by the following example with n = 5 and k = 3. All elements including 0's and 1's are stored, unlike LAPACK.

DIRECT = MagmaForward and         DIRECT = MagmaForward and
STOREV = MagmaColumnwise:         STOREV = MagmaRowwise:

         V = (  1  0  0 )                 V = (  1 v1 v1 v1 v1 )
             ( v1  1  0 )                     (  0  1 v2 v2 v2 )
             ( v1 v2  1 )                     (  0  0  1 v3 v3 )
             ( v1 v2 v3 )
             ( v1 v2 v3 )

DIRECT = MagmaBackward and        DIRECT = MagmaBackward and 
STOREV = MagmaColumnwise:         STOREV = MagmaRowwise:

         V = ( v1 v2 v3 )                 V = ( v1 v1  1  0  0 )
             ( v1 v2 v3 )                     ( v2 v2 v2  1  0 )
             (  1 v2 v3 )                     ( v3 v3 v3 v3  1 )
             (  0  1 v3 )
             (  0  0  1 )
magma_int_t magma_clarfb_gpu_gemm ( magma_side_t  side,
magma_trans_t  trans,
magma_direct_t  direct,
magma_storev_t  storev,
magma_int_t  m,
magma_int_t  n,
magma_int_t  k,
const magmaFloatComplex *  dV,
magma_int_t  ldv,
const magmaFloatComplex *  dT,
magma_int_t  ldt,
magmaFloatComplex *  dC,
magma_int_t  ldc,
magmaFloatComplex *  dwork,
magma_int_t  ldwork,
magmaFloatComplex *  dworkvt,
magma_int_t  ldworkvt 
)

CLARFB applies a complex block reflector H or its transpose H' to a COMPLEX m by n matrix C, from the left.

Note that this function assumes that the upper part of dV is 0 because it is referenced. Same for upper/lower part of dT.

Parameters
[in]sidemagma_side_t
  • = MagmaLeft: apply H or H' from the Left
  • = MagmaRight: apply H or H' from the Right
[in]transmagma_trans_t
  • = MagmaNoTrans: apply H (No transpose)
  • = MagmaConjTrans: apply H' (Conjugate transpose)
[in]directmagma_direct_t Indicates how H is formed from a product of elementary reflectors
  • = MagmaForward: H = H(1) H(2) . . . H(k) (Forward)
  • = MagmaBackward: H = H(k) . . . H(2) H(1) (Backward)
[in]storevmagma_storev_t Indicates how the vectors which define the elementary reflectors are stored:
  • = MagmaColumnwise: Columnwise
  • = MagmaRowwise: Rowwise
[in]mINTEGER The number of rows of the matrix C.
[in]nINTEGER The number of columns of the matrix C.
[in]kINTEGER The order of the matrix T (= the number of elementary reflectors whose product defines the block reflector).
[in]dVCOMPLEX array on the GPU, dimension (LDV,K) if STOREV = MagmaColumnwise (LDV,M) if STOREV = MagmaRowwise and SIDE = MagmaLeft (LDV,N) if STOREV = MagmaRowwise and SIDE = MagmaRight The matrix V. See further details.
[in]ldvINTEGER The leading dimension of the array V. If STOREV = MagmaColumnwise and SIDE = MagmaLeft, LDV >= max(1,M); if STOREV = MagmaColumnwise and SIDE = MagmaRight, LDV >= max(1,N); if STOREV = MagmaRowwise, LDV >= K.
[in]dTCOMPLEX array on the GPU, dimension (LDT,K) The triangular k by k matrix T in the representation of the block reflector.
[in]ldtINTEGER The leading dimension of the array T. LDT >= K.
[in,out]dCCOMPLEX array on the GPU, 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]ldcINTEGER The leading dimension of the array C. LDA >= max(1,M).
dwork(workspace) COMPLEX array, dimension (LDWORK,K)
[in]ldworkINTEGER The leading dimension of the array WORK. If SIDE = MagmaLeft, LDWORK >= max(1,N); if SIDE = MagmaRight, LDWORK >= max(1,M);
dworkvt(workspace) COMPLEX array, dimension (LDWORKT,K)
[in]ldworkvtINTEGER The leading dimension of the array WORKVT. LDWORKVT >= max(1,min(M,N));

Further Details

The shape of the matrix V and the storage of the vectors which define the H(i) is best illustrated by the following example with n = 5 and k = 3. All elements including 0's and 1's are stored, unlike LAPACK.

DIRECT = MagmaForward and         DIRECT = MagmaForward and
STOREV = MagmaColumnwise:         STOREV = MagmaRowwise:

         V = (  1  0  0 )                 V = (  1 v1 v1 v1 v1 )
             ( v1  1  0 )                     (  0  1 v2 v2 v2 )
             ( v1 v2  1 )                     (  0  0  1 v3 v3 )
             ( v1 v2 v3 )
             ( v1 v2 v3 )

DIRECT = MagmaBackward and        DIRECT = MagmaBackward and 
STOREV = MagmaColumnwise:         STOREV = MagmaRowwise:

         V = ( v1 v2 v3 )                 V = ( v1 v1  1  0  0 )
             ( v1 v2 v3 )                     ( v2 v2 v2  1  0 )
             (  1 v2 v3 )                     ( v3 v3 v3 v3  1 )
             (  0  1 v3 )
             (  0  0  1 )