Loading...
Searching...
No Matches
larfb: Apply block of Householder reflectors (Level 3)
Dense LA » MAGMA BLAS and Auxiliary » Householder reflectors

## 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.

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.
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.

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.
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.
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.
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.

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.

## Detailed Description

## Function Documentation

## magma_clarfb_gpu()

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_clarfb_gpu_gemm()

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_dlarfb_gpu()

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_dlarfb_gpu_gemm()

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_slarfb_gpu()

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_slarfb_gpu_gemm()

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_zlarfb_gpu()

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_zlarfb_gpu_gemm()

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 )