PLASMA
Parallel Linear Algebra Software for Multicore Architectures
parfb: Apply Householder reflectors to a rectangular matrix of two tiles

Functions

 __attribute__ ((weak))
 

Detailed Description

Function Documentation

__attribute__ ( (weak)  )

Applies an upper triangular block reflector H or its transpose H^H to a rectangular matrix formed by coupling two tiles A1 and A2. Matrix V is:

    COLUMNWISE                    ROWWISE

   |     K     |                 |      N2-L     |   L  |
__ _____________ __           __ _________________        __
   |    |      |                 |               | \
   |    |      |                 |               |   \    L

M2-L | | | K |_______________|_____\ __ | | | M2 | | __ |____| | | | K-L \ | | __ |______________________| __ L \ | | __ |______| __ | N2 |

| L | K-L |

Parameters
[in]side
  • PlasmaLeft : apply Q or Q^H from the Left;
  • PlasmaRight : apply Q or Q^H from the Right.
[in]trans
  • PlasmaNoTrans : Apply Q;
  • Plasma_ConjTrans : 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]m1The number of columns of the tile A1. m1 >= 0.
[in]n1The number of rows of the tile A1. n1 >= 0.
[in]m2The number of columns of the tile A2. m2 >= 0.
[in]n2The number of rows of the tile A2. n2 >= 0.
[in]kThe order of the matrix T (= the number of elementary reflectors whose product defines the block reflector).
[in]lThe size of the triangular part of V
[in,out]A1On entry, the m1-by-n1 tile A1. On exit, A1 is overwritten by the application of Q.
[in]lda1The leading dimension of the array A1. lda1 >= max(1,n1).
[in,out]A2On entry, the m2-by-n2 tile A2. On exit, A2 is overwritten by the application of Q.
[in]lda2The leading dimension of the tile A2. lda2 >= max(1,n2).
[in]V(ldv,k) if storev = 'C' (ldv,m2) if storev = 'R' and side = 'L' (ldv,n2) if storev = 'R' and side = 'R' Matrix V.
[in]ldvThe leading dimension of the array V. If storev = 'C' and side = 'L', ldv >= max(1,m2); if storev = 'C' and side = 'R', ldv >= max(1,n2); if storev = 'R', ldv >= k.
[out]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]work
[in]ldworkThe leading dimension of the array work.
Return values
PlasmaSuccesssuccessful exit
<0 if -i, the i-th argument had an illegal value

Applies an upper triangular block reflector H or its transpose H^T to a rectangular matrix formed by coupling two tiles A1 and A2. Matrix V is:

    COLUMNWISE                    ROWWISE

   |     K     |                 |      N2-L     |   L  |
__ _____________ __           __ _________________        __
   |    |      |                 |               | \
   |    |      |                 |               |   \    L

M2-L | | | K |_______________|_____\ __ | | | M2 | | __ |____| | | | K-L \ | | __ |______________________| __ L \ | | __ |______| __ | N2 |

| L | K-L |

Parameters
[in]side
  • PlasmaLeft : apply Q or Q^T from the Left;
  • PlasmaRight : apply Q or Q^T from the Right.
[in]trans
  • PlasmaNoTrans : Apply Q;
  • PlasmaTrans : Apply Q^T.
[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]m1The number of columns of the tile A1. m1 >= 0.
[in]n1The number of rows of the tile A1. n1 >= 0.
[in]m2The number of columns of the tile A2. m2 >= 0.
[in]n2The number of rows of the tile A2. n2 >= 0.
[in]kThe order of the matrix T (= the number of elementary reflectors whose product defines the block reflector).
[in]lThe size of the triangular part of V
[in,out]A1On entry, the m1-by-n1 tile A1. On exit, A1 is overwritten by the application of Q.
[in]lda1The leading dimension of the array A1. lda1 >= max(1,n1).
[in,out]A2On entry, the m2-by-n2 tile A2. On exit, A2 is overwritten by the application of Q.
[in]lda2The leading dimension of the tile A2. lda2 >= max(1,n2).
[in]V(ldv,k) if storev = 'C' (ldv,m2) if storev = 'R' and side = 'L' (ldv,n2) if storev = 'R' and side = 'R' Matrix V.
[in]ldvThe leading dimension of the array V. If storev = 'C' and side = 'L', ldv >= max(1,m2); if storev = 'C' and side = 'R', ldv >= max(1,n2); if storev = 'R', ldv >= k.
[out]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]work
[in]ldworkThe leading dimension of the array work.
Return values
PlasmaSuccesssuccessful exit
<0 if -i, the i-th argument had an illegal value