PLASMA 2.8.0 PLASMA - Parallel Linear Algebra for Scalable Multi-core Architectures

- Main Page
- Modules
- Data Types List

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] | direct | Indicates 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] | storev | Indicates how the vectors which define the elementary reflectors are stored: PlasmaColumnwise PlasmaRowwise
  [in] | M | The number of rows of the matrix C.
  [in] | N | The number of columns of the matrix C.
  [in] | K | The order of the matrix T (= the number of elementary reflectors whose product defines the block reflector).
  [in] | V | COMPLEX*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] | LDV | The 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] | T | The 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] | LDT | The leading dimension of the array T. LDT >= K.
  [in,out] | C | COMPLEX*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] | LDC | The leading dimension of the array C. LDC >= max(1,M).
  [in,out] | WORK | (workspace) COMPLEX*8 array, dimension (LDWORK,K).
  [in] | LDWORK | The dimension of the array WORK. If side = PlasmaLeft, LDWORK >= max(1,N); if side = PlasmaRight, LDWORK >= max(1,M).

Returns

Return values

  PLASMA_SUCCESS | successful exit
  <0 | if -i, the i-th argument had an illegal value