PLASMA
Parallel Linear Algebra Software for Multicore Architectures
|
Functions | |
__attribute__ ((weak)) | |
__attribute__ | ( | (weak) | ) |
Performs one of the matrix-matrix operations
PlasmaLeft PlasmaRight
OP PlasmaW : W = A1 + op(V) * A2 or W = A1 + A2 * op(V) OP PlasmaA2 : A2 = A2 - op(V) * W or A2 = A2 - W * op(V)
where op( V ) is one of
op( V ) = V or op( V ) = V^H
A1, A2 and W are general matrices, and V is:
l = k: rectangle + triangle l < k: rectangle + trapezoid l = 0: rectangle
Size of V, both rowwise and columnwise, is:
left N M x K T K x M right N K x N
PlasmaLeft (columnwise and rowwise):
| K | | M | _ __________ _ _______________ _ | | | | | \
V: | | | V^H: |_____________|___\ K | | | M-L | | M | | | |__________________| _ |____| | _ \ | | | M - L | L | \ | | L _ |____| _
PlasmaRight (columnwise and rowwise):
| K | | N | _______________ _ _ __________ _ | | \ | | |
V^H: |_____________|___\ N V: | | | | | | | | K-L |__________________| _ K | | | |____| | _ | K - L | L | \ | | \ | | L _ |____| _
[in] | op | OP specifies which operation to perform: - PlasmaW : W = A1 + op(V) * A2 or W = A1 + A2 * op(V) - PlasmaA2 : A2 = A2 - op(V) * W or A2 = A2 - W * op(V) |
[in] | side | SIDE specifies whether op( V ) multiplies A2 or W from the left or right as follows: - PlasmaLeft : multiply op( V ) from the left OP PlasmaW : W = A1 + op(V) * A2 OP PlasmaA2 : A2 = A2 - op(V) * W - PlasmaRight : multiply op( V ) from the right OP PlasmaW : W = A1 + A2 * op(V) OP PlasmaA2 : A2 = A2 - W * op(V) |
[in] | storev | Indicates how the vectors which define the elementary reflectors are stored in V: - PlasmaColumnwise - PlasmaRowwise |
[in] | m | The number of rows of the A1, A2 and W If SIDE is PlasmaLeft, the number of rows of op( V ) |
[in] | n | The number of columns of the A1, A2 and W If SIDE is PlasmaRight, the number of columns of op( V ) |
[in] | k | If SIDE is PlasmaLeft, the number of columns of op( V ) If SIDE is PlasmaRight, the number of rows of op( V ) |
[in] | l | The size of the triangular part of V |
[in] | A1 | On entry, the m-by-n tile A1. |
[in] | lda1 | The leading dimension of the array A1. lda1 >= max(1,m). |
[in,out] | A2 | On entry, the m-by-n tile A2. On exit, if OP is PlasmaA2 A2 is overwritten |
[in] | lda2 | The leading dimension of the tile A2. lda2 >= max(1,m). |
[in] | V | The matrix V as described above. If SIDE is PlasmaLeft : op( V ) is m-by-k If SIDE is PlasmaRight: op( V ) is k-by-n |
[in] | ldv | The leading dimension of the array V. |
[in,out] | W | On entry, the m-by-n matrix W. On exit, W is overwritten either if OP is PlasmaA2 or PlasmaW. If OP is PlasmaA2, W is an input and is used as a workspace. |
[in] | ldw | The leading dimension of array W. |
PlasmaSuccess | successful exit |
< | 0 if -i, the i-th argument had an illegal value |
Performs one of the matrix-matrix operations
PlasmaLeft PlasmaRight
OP PlasmaW : W = A1 + op(V) * A2 or W = A1 + A2 * op(V) OP PlasmaA2 : A2 = A2 - op(V) * W or A2 = A2 - W * op(V)
where op( V ) is one of
op( V ) = V or op( V ) = V^T
A1, A2 and W are general matrices, and V is:
l = k: rectangle + triangle l < k: rectangle + trapezoid l = 0: rectangle
Size of V, both rowwise and columnwise, is:
left N M x K T K x M right N K x N
PlasmaLeft (columnwise and rowwise):
| K | | M | _ __________ _ _______________ _ | | | | | \
V: | | | V^T: |_____________|___\ K | | | M-L | | M | | | |__________________| _ |____| | _ \ | | | M - L | L | \ | | L _ |____| _
PlasmaRight (columnwise and rowwise):
| K | | N | _______________ _ _ __________ _ | | \ | | |
V^T: |_____________|___\ N V: | | | | | | | | K-L |__________________| _ K | | | |____| | _ | K - L | L | \ | | \ | | L _ |____| _
[in] | op | OP specifies which operation to perform: - PlasmaW : W = A1 + op(V) * A2 or W = A1 + A2 * op(V) - PlasmaA2 : A2 = A2 - op(V) * W or A2 = A2 - W * op(V) |
[in] | side | SIDE specifies whether op( V ) multiplies A2 or W from the left or right as follows: - PlasmaLeft : multiply op( V ) from the left OP PlasmaW : W = A1 + op(V) * A2 OP PlasmaA2 : A2 = A2 - op(V) * W - PlasmaRight : multiply op( V ) from the right OP PlasmaW : W = A1 + A2 * op(V) OP PlasmaA2 : A2 = A2 - W * op(V) |
[in] | storev | Indicates how the vectors which define the elementary reflectors are stored in V: - PlasmaColumnwise - PlasmaRowwise |
[in] | m | The number of rows of the A1, A2 and W If SIDE is PlasmaLeft, the number of rows of op( V ) |
[in] | n | The number of columns of the A1, A2 and W If SIDE is PlasmaRight, the number of columns of op( V ) |
[in] | k | If SIDE is PlasmaLeft, the number of columns of op( V ) If SIDE is PlasmaRight, the number of rows of op( V ) |
[in] | l | The size of the triangular part of V |
[in] | A1 | On entry, the m-by-n tile A1. |
[in] | lda1 | The leading dimension of the array A1. lda1 >= max(1,m). |
[in,out] | A2 | On entry, the m-by-n tile A2. On exit, if OP is PlasmaA2 A2 is overwritten |
[in] | lda2 | The leading dimension of the tile A2. lda2 >= max(1,m). |
[in] | V | The matrix V as described above. If SIDE is PlasmaLeft : op( V ) is m-by-k If SIDE is PlasmaRight: op( V ) is k-by-n |
[in] | ldv | The leading dimension of the array V. |
[in,out] | W | On entry, the m-by-n matrix W. On exit, W is overwritten either if OP is PlasmaA2 or PlasmaW. If OP is PlasmaA2, W is an input and is used as a workspace. |
[in] | ldw | The leading dimension of array W. |
PlasmaSuccess | successful exit |
< | 0 if -i, the i-th argument had an illegal value |