PLASMA  2.4.5
PLASMA - Parallel Linear Algebra for Scalable Multi-core Architectures
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
pztrsmrv.c File Reference
#include "common.h"
Include dependency graph for pztrsmrv.c:

Go to the source code of this file.

Macros

#define A(m, n)   BLKADDR(A, PLASMA_Complex64_t, m, n)
#define W(m)   BLKADDR(W, PLASMA_Complex64_t, m, 0)

Functions

void plasma_pztrsmrv_quark (PLASMA_enum side, PLASMA_enum uplo, PLASMA_enum trans, PLASMA_enum diag, PLASMA_Complex64_t alpha, PLASMA_desc A, PLASMA_desc W, PLASMA_sequence *sequence, PLASMA_request *request)

Macro Definition Documentation

#define A (   m,
 
)    BLKADDR(A, PLASMA_Complex64_t, m, n)

Definition at line 19 of file pztrsmrv.c.

#define W (   m)    BLKADDR(W, PLASMA_Complex64_t, m, 0)

Definition at line 20 of file pztrsmrv.c.


Function Documentation

void plasma_pztrsmrv_quark ( PLASMA_enum  side,
PLASMA_enum  uplo,
PLASMA_enum  trans,
PLASMA_enum  diag,
PLASMA_Complex64_t  alpha,
PLASMA_desc  A,
PLASMA_desc  W,
PLASMA_sequence sequence,
PLASMA_request request 
)

Parallel tile ReVerse triangular solve - dynamic scheduling

Definition at line 25 of file pztrsmrv.c.

References BLKLDD, plasma_desc_t::m, plasma_desc_t::mb, plasma_desc_t::mt, plasma_desc_t::n, plasma_desc_t::nb, plasma_desc_t::nt, plasma_context_self(), plasma_desc_submatrix(), plasma_pzgemm_quark(), plasma_pztrsm_quark(), PLASMA_SUCCESS, PlasmaLower, PlasmaNoTrans, PlasmaRight, PlasmaUnit, PlasmaUpperLower, plasma_context_struct::quark, QUARK_CORE_zlacpy(), QUARK_CORE_zlaset(), QUARK_CORE_zlaset2(), plasma_sequence_t::quark_sequence, QUARK_Task_Flag_Set(), Quark_Task_Flags_Initializer, plasma_sequence_t::status, TASK_SEQUENCE, and W.

{
int k, m;
int ldak, ldam, ldwk, ldwm;
int tempm, tempkm, tempkn, tempmm;
plasma = plasma_context_self();
if (sequence->status != PLASMA_SUCCESS)
return;
QUARK_Task_Flag_Set(&task_flags, TASK_SEQUENCE, (intptr_t)sequence->quark_sequence);
for (k = A.mt-1; k >= 0; k--) {
tempm = (k+1)*A.mb;
tempkm = k == A.mt-1 ? A.m-k*A.mb : A.mb;
tempkn = k == A.nt-1 ? A.n-k*A.nb : A.nb;
ldak = BLKLDD(A, k);
ldwk = BLKLDD(W, k);
plasma->quark, &task_flags,
PlasmaLower, tempkm, tempkn, A.mb,
A(k, k), ldak, W(k), ldwk );
plasma->quark, &task_flags,
PlasmaLower, tempkn, tempkn,
0.0, A(k, k), ldak );
for(m=k+1; m<A.mt; m++) {
tempmm = m == A.mt-1 ? A.m-m*A.mb : A.mb;
ldam = BLKLDD(A, m);
ldwm = BLKLDD(W, m);
plasma->quark, &task_flags,
PlasmaUpperLower, tempmm, tempkn, A.mb,
A(m, k), ldam, W(m), ldwm );
plasma->quark, &task_flags,
PlasmaUpperLower, tempmm, tempkn,
0.0, 0.0, A(m, k), ldam );
}
if (k*A.mb+tempkn < A.m) {
plasma_desc_submatrix(A, 0, tempm, tempm, A.n-tempm),
plasma_desc_submatrix(W, tempm, 0, W.m-tempm, tempkn ),
alpha,
plasma_desc_submatrix(A, 0, k*A.mb, tempm, tempkn ),
sequence, request);
plasma_desc_submatrix(A, tempm, tempm, A.m-tempm, A.n-tempm),
plasma_desc_submatrix(W, tempm, 0, W.m-tempm, tempkn ),
plasma_desc_submatrix(A, tempm, k*A.mb, A.m-tempm, tempkn ),
sequence, request);
}
alpha,
plasma_desc_submatrix(W, k*W.mb, 0, tempkm, tempkn),
plasma_desc_submatrix(A, 0, k*A.mb, A.m, tempkn),
sequence, request);
}
}

Here is the call graph for this function: