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
pctrsmrv.c
Go to the documentation of this file.
1 
17 #include "common.h"
18 
19 #define A(m,n) BLKADDR(A, PLASMA_Complex32_t, m, n)
20 #define W(m) BLKADDR(W, PLASMA_Complex32_t, m, 0)
21 
22 /***************************************************************************/
27  PLASMA_sequence *sequence, PLASMA_request *request)
28 {
31 
32  int k, m;
33  int ldak, ldam, ldwk, ldwm;
34  int tempm, tempkm, tempkn, tempmm;
35 
36  plasma = plasma_context_self();
37  if (sequence->status != PLASMA_SUCCESS)
38  return;
39  QUARK_Task_Flag_Set(&task_flags, TASK_SEQUENCE, (intptr_t)sequence->quark_sequence);
40 
41  for (k = A.mt-1; k >= 0; k--) {
42  tempm = (k+1)*A.mb;
43  tempkm = k == A.mt-1 ? A.m-k*A.mb : A.mb;
44  tempkn = k == A.nt-1 ? A.n-k*A.nb : A.nb;
45  ldak = BLKLDD(A, k);
46  ldwk = BLKLDD(W, k);
47 
49  plasma->quark, &task_flags,
50  PlasmaLower, tempkm, tempkn, A.mb,
51  A(k, k), ldak, W(k), ldwk );
52 
54  plasma->quark, &task_flags,
55  PlasmaLower, tempkn, tempkn,
56  0.0, A(k, k), ldak );
57 
58  for(m=k+1; m<A.mt; m++) {
59  tempmm = m == A.mt-1 ? A.m-m*A.mb : A.mb;
60  ldam = BLKLDD(A, m);
61  ldwm = BLKLDD(W, m);
62 
64  plasma->quark, &task_flags,
65  PlasmaUpperLower, tempmm, tempkn, A.mb,
66  A(m, k), ldam, W(m), ldwm );
67 
69  plasma->quark, &task_flags,
70  PlasmaUpperLower, tempmm, tempkn,
71  0.0, 0.0, A(m, k), ldam );
72  }
73 
74  if (k*A.mb+tempkn < A.m) {
77  plasma_desc_submatrix(A, 0, tempm, tempm, A.n-tempm),
78  plasma_desc_submatrix(W, tempm, 0, W.m-tempm, tempkn ),
79  alpha,
80  plasma_desc_submatrix(A, 0, k*A.mb, tempm, tempkn ),
81  sequence, request);
82 
85  plasma_desc_submatrix(A, tempm, tempm, A.m-tempm, A.n-tempm),
86  plasma_desc_submatrix(W, tempm, 0, W.m-tempm, tempkn ),
88  plasma_desc_submatrix(A, tempm, k*A.mb, A.m-tempm, tempkn ),
89  sequence, request);
90  }
91 
95  alpha,
96  plasma_desc_submatrix(W, k*W.mb, 0, tempkm, tempkn),
97  plasma_desc_submatrix(A, 0, k*A.mb, A.m, tempkn),
98  sequence, request);
99  }
100 }