MAGMA  2.3.0 Matrix Algebra for GPU and Multicore Architectures
larfb: Apply block of Householder reflectors (Level 3)

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, magmaFloatComplex_const_ptr dV, magma_int_t lddv, magmaFloatComplex_const_ptr dT, magma_int_t lddt, magmaFloatComplex_ptr dC, magma_int_t lddc, magmaFloatComplex_ptr dwork, magma_int_t ldwork, magma_queue_t queue)
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, magmaFloatComplex_const_ptr dV, magma_int_t lddv, magmaFloatComplex_const_ptr dT, magma_int_t lddt, magmaFloatComplex_ptr dC, magma_int_t lddc, magmaFloatComplex_ptr dwork, magma_int_t ldwork, magmaFloatComplex_ptr dworkvt, magma_int_t ldworkvt, magma_queue_t queue)
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_dlarfb_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, magmaDouble_const_ptr dV, magma_int_t lddv, magmaDouble_const_ptr dT, magma_int_t lddt, magmaDouble_ptr dC, magma_int_t lddc, magmaDouble_ptr dwork, magma_int_t ldwork, magma_queue_t queue)
DLARFB applies a real block reflector H or its transpose H^H to a DOUBLE PRECISION m by n matrix C, from the left. More...

magma_int_t magma_dlarfb_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, magmaDouble_const_ptr dV, magma_int_t lddv, magmaDouble_const_ptr dT, magma_int_t lddt, magmaDouble_ptr dC, magma_int_t lddc, magmaDouble_ptr dwork, magma_int_t ldwork, magmaDouble_ptr dworkvt, magma_int_t ldworkvt, magma_queue_t queue)
DLARFB applies a real block reflector H or its transpose H^H to a DOUBLE PRECISION m by n matrix C, from the left. More...

magma_int_t magma_slarfb_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, magmaFloat_const_ptr dV, magma_int_t lddv, magmaFloat_const_ptr dT, magma_int_t lddt, magmaFloat_ptr dC, magma_int_t lddc, magmaFloat_ptr dwork, magma_int_t ldwork, magma_queue_t queue)
SLARFB applies a real block reflector H or its transpose H^H to a REAL m by n matrix C, from the left. More...

magma_int_t magma_slarfb_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, magmaFloat_const_ptr dV, magma_int_t lddv, magmaFloat_const_ptr dT, magma_int_t lddt, magmaFloat_ptr dC, magma_int_t lddc, magmaFloat_ptr dwork, magma_int_t ldwork, magmaFloat_ptr dworkvt, magma_int_t ldworkvt, magma_queue_t queue)
SLARFB applies a real block reflector H or its transpose H^H to a REAL m by n matrix C, from the left. More...

magma_int_t magma_zlarfb_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, magmaDoubleComplex_const_ptr dV, magma_int_t lddv, magmaDoubleComplex_const_ptr dT, magma_int_t lddt, magmaDoubleComplex_ptr dC, magma_int_t lddc, magmaDoubleComplex_ptr dwork, magma_int_t ldwork, magma_queue_t queue)
ZLARFB applies a complex block reflector H or its transpose H^H to a COMPLEX_16 m by n matrix C, from the left. More...

magma_int_t magma_zlarfb_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, magmaDoubleComplex_const_ptr dV, magma_int_t lddv, magmaDoubleComplex_const_ptr dT, magma_int_t lddt, magmaDoubleComplex_ptr dC, magma_int_t lddc, magmaDoubleComplex_ptr dwork, magma_int_t ldwork, magmaDoubleComplex_ptr dworkvt, magma_int_t ldworkvt, magma_queue_t queue)
ZLARFB applies a complex block reflector H or its transpose H^H to a COMPLEX_16 m by n matrix C, from the left. More...

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, magmaFloatComplex_const_ptr dV, magma_int_t lddv, magmaFloatComplex_const_ptr dT, magma_int_t lddt, magmaFloatComplex_ptr dC, magma_int_t lddc, magmaFloatComplex_ptr dwork, magma_int_t ldwork, magma_queue_t queue )

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] side magma_side_t = MagmaLeft: apply H or H^H from the Left = MagmaRight: apply H or H^H from the Right [in] trans magma_trans_t = MagmaNoTrans: apply H (No transpose) = Magma_ConjTrans: apply H^H (Conjugate transpose) [in] direct magma_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] storev magma_storev_t Indicates how the vectors which define the elementary reflectors are stored: = MagmaColumnwise: Columnwise = MagmaRowwise: Rowwise [in] m INTEGER The number of rows of the matrix C. [in] n INTEGER The number of columns of the matrix C. [in] k INTEGER The order of the matrix T (= the number of elementary reflectors whose product defines the block reflector). [in] dV COMPLEX array on the GPU, dimension (LDDV,K) if STOREV = MagmaColumnwise (LDDV,M) if STOREV = MagmaRowwise and SIDE = MagmaLeft (LDDV,N) if STOREV = MagmaRowwise and SIDE = MagmaRight The matrix V. See further details. [in] lddv INTEGER The leading dimension of the array V. If STOREV = MagmaColumnwise and SIDE = MagmaLeft, LDDV >= max(1,M); if STOREV = MagmaColumnwise and SIDE = MagmaRight, LDDV >= max(1,N); if STOREV = MagmaRowwise, LDDV >= K. [in] dT COMPLEX array on the GPU, dimension (LDDT,K) The triangular k by k matrix T in the representation of the block reflector. [in] lddt INTEGER The leading dimension of the array T. LDDT >= K. [in,out] dC COMPLEX array on the GPU, dimension (LDDC,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] lddc INTEGER The leading dimension of the array C. LDDC >= max(1,M). dwork (workspace) COMPLEX array, dimension (LDWORK,K) [in] ldwork INTEGER The leading dimension of the array WORK. If SIDE = MagmaLeft, LDWORK >= max(1,N); if SIDE = MagmaRight, LDWORK >= max(1,M); [in] queue magma_queue_t Queue to execute in.

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, magmaFloatComplex_const_ptr dV, magma_int_t lddv, magmaFloatComplex_const_ptr dT, magma_int_t lddt, magmaFloatComplex_ptr dC, magma_int_t lddc, magmaFloatComplex_ptr dwork, magma_int_t ldwork, magmaFloatComplex_ptr dworkvt, magma_int_t ldworkvt, magma_queue_t queue )

CLARFB applies a complex block reflector H or its transpose H^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] side magma_side_t = MagmaLeft: apply H or H^H from the Left = MagmaRight: apply H or H^H from the Right [in] trans magma_trans_t = MagmaNoTrans: apply H (No transpose) = Magma_ConjTrans: apply H^H (Conjugate transpose) [in] direct magma_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] storev magma_storev_t Indicates how the vectors which define the elementary reflectors are stored: = MagmaColumnwise: Columnwise = MagmaRowwise: Rowwise [in] m INTEGER The number of rows of the matrix C. [in] n INTEGER The number of columns of the matrix C. [in] k INTEGER The order of the matrix T (= the number of elementary reflectors whose product defines the block reflector). [in] dV COMPLEX array on the GPU, dimension (LDDV,K) if STOREV = MagmaColumnwise (LDDV,M) if STOREV = MagmaRowwise and SIDE = MagmaLeft (LDDV,N) if STOREV = MagmaRowwise and SIDE = MagmaRight The matrix V. See further details. [in] lddv INTEGER The leading dimension of the array V. If STOREV = MagmaColumnwise and SIDE = MagmaLeft, LDDV >= max(1,M); if STOREV = MagmaColumnwise and SIDE = MagmaRight, LDDV >= max(1,N); if STOREV = MagmaRowwise, LDDV >= K. [in] dT COMPLEX array on the GPU, dimension (LDDT,K) The triangular k by k matrix T in the representation of the block reflector. [in] lddt INTEGER The leading dimension of the array T. LDDT >= K. [in,out] dC COMPLEX array on the GPU, dimension (LDDC,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] lddc INTEGER The leading dimension of the array C. LDDC >= max(1,M). dwork (workspace) COMPLEX array, dimension (LDWORK,K) [in] ldwork INTEGER 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] ldworkvt INTEGER The leading dimension of the array WORKVT. LDWORKVT >= max(1,min(M,N)); [in] queue magma_queue_t Queue to execute in.

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_dlarfb_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, magmaDouble_const_ptr dV, magma_int_t lddv, magmaDouble_const_ptr dT, magma_int_t lddt, magmaDouble_ptr dC, magma_int_t lddc, magmaDouble_ptr dwork, magma_int_t ldwork, magma_queue_t queue )

DLARFB applies a real block reflector H or its transpose H^H to a DOUBLE PRECISION m by n matrix C, from the left.

Parameters
 [in] side magma_side_t = MagmaLeft: apply H or H^H from the Left = MagmaRight: apply H or H^H from the Right [in] trans magma_trans_t = MagmaNoTrans: apply H (No transpose) = MagmaTrans: apply H^H (Conjugate transpose) [in] direct magma_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] storev magma_storev_t Indicates how the vectors which define the elementary reflectors are stored: = MagmaColumnwise: Columnwise = MagmaRowwise: Rowwise [in] m INTEGER The number of rows of the matrix C. [in] n INTEGER The number of columns of the matrix C. [in] k INTEGER The order of the matrix T (= the number of elementary reflectors whose product defines the block reflector). [in] dV DOUBLE PRECISION array on the GPU, dimension (LDDV,K) if STOREV = MagmaColumnwise (LDDV,M) if STOREV = MagmaRowwise and SIDE = MagmaLeft (LDDV,N) if STOREV = MagmaRowwise and SIDE = MagmaRight The matrix V. See further details. [in] lddv INTEGER The leading dimension of the array V. If STOREV = MagmaColumnwise and SIDE = MagmaLeft, LDDV >= max(1,M); if STOREV = MagmaColumnwise and SIDE = MagmaRight, LDDV >= max(1,N); if STOREV = MagmaRowwise, LDDV >= K. [in] dT DOUBLE PRECISION array on the GPU, dimension (LDDT,K) The triangular k by k matrix T in the representation of the block reflector. [in] lddt INTEGER The leading dimension of the array T. LDDT >= K. [in,out] dC DOUBLE PRECISION array on the GPU, dimension (LDDC,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] lddc INTEGER The leading dimension of the array C. LDDC >= max(1,M). dwork (workspace) DOUBLE PRECISION array, dimension (LDWORK,K) [in] ldwork INTEGER The leading dimension of the array WORK. If SIDE = MagmaLeft, LDWORK >= max(1,N); if SIDE = MagmaRight, LDWORK >= max(1,M); [in] queue magma_queue_t Queue to execute in.

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_dlarfb_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, magmaDouble_const_ptr dV, magma_int_t lddv, magmaDouble_const_ptr dT, magma_int_t lddt, magmaDouble_ptr dC, magma_int_t lddc, magmaDouble_ptr dwork, magma_int_t ldwork, magmaDouble_ptr dworkvt, magma_int_t ldworkvt, magma_queue_t queue )

DLARFB applies a real block reflector H or its transpose H^H to a DOUBLE PRECISION 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] side magma_side_t = MagmaLeft: apply H or H^H from the Left = MagmaRight: apply H or H^H from the Right [in] trans magma_trans_t = MagmaNoTrans: apply H (No transpose) = MagmaTrans: apply H^H (Conjugate transpose) [in] direct magma_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] storev magma_storev_t Indicates how the vectors which define the elementary reflectors are stored: = MagmaColumnwise: Columnwise = MagmaRowwise: Rowwise [in] m INTEGER The number of rows of the matrix C. [in] n INTEGER The number of columns of the matrix C. [in] k INTEGER The order of the matrix T (= the number of elementary reflectors whose product defines the block reflector). [in] dV DOUBLE PRECISION array on the GPU, dimension (LDDV,K) if STOREV = MagmaColumnwise (LDDV,M) if STOREV = MagmaRowwise and SIDE = MagmaLeft (LDDV,N) if STOREV = MagmaRowwise and SIDE = MagmaRight The matrix V. See further details. [in] lddv INTEGER The leading dimension of the array V. If STOREV = MagmaColumnwise and SIDE = MagmaLeft, LDDV >= max(1,M); if STOREV = MagmaColumnwise and SIDE = MagmaRight, LDDV >= max(1,N); if STOREV = MagmaRowwise, LDDV >= K. [in] dT DOUBLE PRECISION array on the GPU, dimension (LDDT,K) The triangular k by k matrix T in the representation of the block reflector. [in] lddt INTEGER The leading dimension of the array T. LDDT >= K. [in,out] dC DOUBLE PRECISION array on the GPU, dimension (LDDC,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] lddc INTEGER The leading dimension of the array C. LDDC >= max(1,M). dwork (workspace) DOUBLE PRECISION array, dimension (LDWORK,K) [in] ldwork INTEGER The leading dimension of the array WORK. If SIDE = MagmaLeft, LDWORK >= max(1,N); if SIDE = MagmaRight, LDWORK >= max(1,M); dworkvt (workspace) DOUBLE PRECISION array, dimension (LDWORKT,K) [in] ldworkvt INTEGER The leading dimension of the array WORKVT. LDWORKVT >= max(1,min(M,N)); [in] queue magma_queue_t Queue to execute in.

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_slarfb_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, magmaFloat_const_ptr dV, magma_int_t lddv, magmaFloat_const_ptr dT, magma_int_t lddt, magmaFloat_ptr dC, magma_int_t lddc, magmaFloat_ptr dwork, magma_int_t ldwork, magma_queue_t queue )

SLARFB applies a real block reflector H or its transpose H^H to a REAL m by n matrix C, from the left.

Parameters
 [in] side magma_side_t = MagmaLeft: apply H or H^H from the Left = MagmaRight: apply H or H^H from the Right [in] trans magma_trans_t = MagmaNoTrans: apply H (No transpose) = MagmaTrans: apply H^H (Conjugate transpose) [in] direct magma_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] storev magma_storev_t Indicates how the vectors which define the elementary reflectors are stored: = MagmaColumnwise: Columnwise = MagmaRowwise: Rowwise [in] m INTEGER The number of rows of the matrix C. [in] n INTEGER The number of columns of the matrix C. [in] k INTEGER The order of the matrix T (= the number of elementary reflectors whose product defines the block reflector). [in] dV REAL array on the GPU, dimension (LDDV,K) if STOREV = MagmaColumnwise (LDDV,M) if STOREV = MagmaRowwise and SIDE = MagmaLeft (LDDV,N) if STOREV = MagmaRowwise and SIDE = MagmaRight The matrix V. See further details. [in] lddv INTEGER The leading dimension of the array V. If STOREV = MagmaColumnwise and SIDE = MagmaLeft, LDDV >= max(1,M); if STOREV = MagmaColumnwise and SIDE = MagmaRight, LDDV >= max(1,N); if STOREV = MagmaRowwise, LDDV >= K. [in] dT REAL array on the GPU, dimension (LDDT,K) The triangular k by k matrix T in the representation of the block reflector. [in] lddt INTEGER The leading dimension of the array T. LDDT >= K. [in,out] dC REAL array on the GPU, dimension (LDDC,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] lddc INTEGER The leading dimension of the array C. LDDC >= max(1,M). dwork (workspace) REAL array, dimension (LDWORK,K) [in] ldwork INTEGER The leading dimension of the array WORK. If SIDE = MagmaLeft, LDWORK >= max(1,N); if SIDE = MagmaRight, LDWORK >= max(1,M); [in] queue magma_queue_t Queue to execute in.

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_slarfb_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, magmaFloat_const_ptr dV, magma_int_t lddv, magmaFloat_const_ptr dT, magma_int_t lddt, magmaFloat_ptr dC, magma_int_t lddc, magmaFloat_ptr dwork, magma_int_t ldwork, magmaFloat_ptr dworkvt, magma_int_t ldworkvt, magma_queue_t queue )

SLARFB applies a real block reflector H or its transpose H^H to a REAL 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] side magma_side_t = MagmaLeft: apply H or H^H from the Left = MagmaRight: apply H or H^H from the Right [in] trans magma_trans_t = MagmaNoTrans: apply H (No transpose) = MagmaTrans: apply H^H (Conjugate transpose) [in] direct magma_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] storev magma_storev_t Indicates how the vectors which define the elementary reflectors are stored: = MagmaColumnwise: Columnwise = MagmaRowwise: Rowwise [in] m INTEGER The number of rows of the matrix C. [in] n INTEGER The number of columns of the matrix C. [in] k INTEGER The order of the matrix T (= the number of elementary reflectors whose product defines the block reflector). [in] dV REAL array on the GPU, dimension (LDDV,K) if STOREV = MagmaColumnwise (LDDV,M) if STOREV = MagmaRowwise and SIDE = MagmaLeft (LDDV,N) if STOREV = MagmaRowwise and SIDE = MagmaRight The matrix V. See further details. [in] lddv INTEGER The leading dimension of the array V. If STOREV = MagmaColumnwise and SIDE = MagmaLeft, LDDV >= max(1,M); if STOREV = MagmaColumnwise and SIDE = MagmaRight, LDDV >= max(1,N); if STOREV = MagmaRowwise, LDDV >= K. [in] dT REAL array on the GPU, dimension (LDDT,K) The triangular k by k matrix T in the representation of the block reflector. [in] lddt INTEGER The leading dimension of the array T. LDDT >= K. [in,out] dC REAL array on the GPU, dimension (LDDC,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] lddc INTEGER The leading dimension of the array C. LDDC >= max(1,M). dwork (workspace) REAL array, dimension (LDWORK,K) [in] ldwork INTEGER The leading dimension of the array WORK. If SIDE = MagmaLeft, LDWORK >= max(1,N); if SIDE = MagmaRight, LDWORK >= max(1,M); dworkvt (workspace) REAL array, dimension (LDWORKT,K) [in] ldworkvt INTEGER The leading dimension of the array WORKVT. LDWORKVT >= max(1,min(M,N)); [in] queue magma_queue_t Queue to execute in.

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_zlarfb_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, magmaDoubleComplex_const_ptr dV, magma_int_t lddv, magmaDoubleComplex_const_ptr dT, magma_int_t lddt, magmaDoubleComplex_ptr dC, magma_int_t lddc, magmaDoubleComplex_ptr dwork, magma_int_t ldwork, magma_queue_t queue )

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

Parameters
 [in] side magma_side_t = MagmaLeft: apply H or H^H from the Left = MagmaRight: apply H or H^H from the Right [in] trans magma_trans_t = MagmaNoTrans: apply H (No transpose) = Magma_ConjTrans: apply H^H (Conjugate transpose) [in] direct magma_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] storev magma_storev_t Indicates how the vectors which define the elementary reflectors are stored: = MagmaColumnwise: Columnwise = MagmaRowwise: Rowwise [in] m INTEGER The number of rows of the matrix C. [in] n INTEGER The number of columns of the matrix C. [in] k INTEGER The order of the matrix T (= the number of elementary reflectors whose product defines the block reflector). [in] dV COMPLEX_16 array on the GPU, dimension (LDDV,K) if STOREV = MagmaColumnwise (LDDV,M) if STOREV = MagmaRowwise and SIDE = MagmaLeft (LDDV,N) if STOREV = MagmaRowwise and SIDE = MagmaRight The matrix V. See further details. [in] lddv INTEGER The leading dimension of the array V. If STOREV = MagmaColumnwise and SIDE = MagmaLeft, LDDV >= max(1,M); if STOREV = MagmaColumnwise and SIDE = MagmaRight, LDDV >= max(1,N); if STOREV = MagmaRowwise, LDDV >= K. [in] dT COMPLEX_16 array on the GPU, dimension (LDDT,K) The triangular k by k matrix T in the representation of the block reflector. [in] lddt INTEGER The leading dimension of the array T. LDDT >= K. [in,out] dC COMPLEX_16 array on the GPU, dimension (LDDC,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] lddc INTEGER The leading dimension of the array C. LDDC >= max(1,M). dwork (workspace) COMPLEX_16 array, dimension (LDWORK,K) [in] ldwork INTEGER The leading dimension of the array WORK. If SIDE = MagmaLeft, LDWORK >= max(1,N); if SIDE = MagmaRight, LDWORK >= max(1,M); [in] queue magma_queue_t Queue to execute in.

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_zlarfb_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, magmaDoubleComplex_const_ptr dV, magma_int_t lddv, magmaDoubleComplex_const_ptr dT, magma_int_t lddt, magmaDoubleComplex_ptr dC, magma_int_t lddc, magmaDoubleComplex_ptr dwork, magma_int_t ldwork, magmaDoubleComplex_ptr dworkvt, magma_int_t ldworkvt, magma_queue_t queue )

ZLARFB applies a complex block reflector H or its transpose H^H to a COMPLEX_16 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] side magma_side_t = MagmaLeft: apply H or H^H from the Left = MagmaRight: apply H or H^H from the Right [in] trans magma_trans_t = MagmaNoTrans: apply H (No transpose) = Magma_ConjTrans: apply H^H (Conjugate transpose) [in] direct magma_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] storev magma_storev_t Indicates how the vectors which define the elementary reflectors are stored: = MagmaColumnwise: Columnwise = MagmaRowwise: Rowwise [in] m INTEGER The number of rows of the matrix C. [in] n INTEGER The number of columns of the matrix C. [in] k INTEGER The order of the matrix T (= the number of elementary reflectors whose product defines the block reflector). [in] dV COMPLEX_16 array on the GPU, dimension (LDDV,K) if STOREV = MagmaColumnwise (LDDV,M) if STOREV = MagmaRowwise and SIDE = MagmaLeft (LDDV,N) if STOREV = MagmaRowwise and SIDE = MagmaRight The matrix V. See further details. [in] lddv INTEGER The leading dimension of the array V. If STOREV = MagmaColumnwise and SIDE = MagmaLeft, LDDV >= max(1,M); if STOREV = MagmaColumnwise and SIDE = MagmaRight, LDDV >= max(1,N); if STOREV = MagmaRowwise, LDDV >= K. [in] dT COMPLEX_16 array on the GPU, dimension (LDDT,K) The triangular k by k matrix T in the representation of the block reflector. [in] lddt INTEGER The leading dimension of the array T. LDDT >= K. [in,out] dC COMPLEX_16 array on the GPU, dimension (LDDC,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] lddc INTEGER The leading dimension of the array C. LDDC >= max(1,M). dwork (workspace) COMPLEX_16 array, dimension (LDWORK,K) [in] ldwork INTEGER The leading dimension of the array WORK. If SIDE = MagmaLeft, LDWORK >= max(1,N); if SIDE = MagmaRight, LDWORK >= max(1,M); dworkvt (workspace) COMPLEX_16 array, dimension (LDWORKT,K) [in] ldworkvt INTEGER The leading dimension of the array WORKVT. LDWORKVT >= max(1,min(M,N)); [in] queue magma_queue_t Queue to execute in.

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 )