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
pstrtri.c
Go to the documentation of this file.
1 
17 #include "common.h"
18 
19 #define A(m,n) BLKADDR(A, float, m, n)
20 /***************************************************************************/
24  PLASMA_sequence *sequence, PLASMA_request *request)
25 {
28 
29  int k, m, n;
30  int ldam, ldan;
31  int tempkn, tempmm, tempnn;
32 
33  float zone = (float) 1.0;
34  float mzone = (float)-1.0;
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  * PlasmaLower
42  */
43  if (uplo == PlasmaLower) {
44  for (n = 0; n < A.nt; n++) {
45  tempnn = n == A.nt-1 ? A.n-n*A.nb : A.nb;
46  ldan = BLKLDD(A, n);
47  for (m = n+1; m < A.mt; m++) {
48  tempmm = m == A.mt-1 ? A.m-m*A.mb : A.mb;
49  ldam = BLKLDD(A, m);
51  plasma->quark, &task_flags,
52  PlasmaRight, uplo, PlasmaNoTrans, diag,
53  tempmm, tempnn, A.mb,
54  mzone, A(n, n), ldan,
55  A(m, n), ldam);
56  }
57  for (m = n+1; m < A.mt; m++) {
58  tempmm = m == A.mt-1 ? A.m-m*A.mb : A.mb;
59  ldam = BLKLDD(A, m);
60  for (k = 0; k < n; k++) {
61  tempkn = k == A.nt-1 ? A.n-k*A.nb : A.nb;
63  plasma->quark, &task_flags,
65  tempmm, tempkn, tempnn, A.mb,
66  zone, A(m, n), ldam,
67  A(n, k), ldan,
68  zone, A(m, k), ldam);
69  }
70  }
71  for (m = 0; m < n; m++) {
72  tempmm = m == A.mt-1 ? A.m-m*A.mb : A.mb;
74  plasma->quark, &task_flags,
75  PlasmaLeft, uplo, PlasmaNoTrans, diag,
76  tempnn, tempmm, A.mb,
77  zone, A(n, n), ldan,
78  A(n, m), ldan);
79  }
81  plasma->quark, &task_flags,
82  uplo, diag,
83  tempnn, A.mb,
84  A(n, n), ldan,
85  sequence, request, A.nb*n);
86  }
87  }
88  /*
89  * PlasmaUpper
90  */
91  else {
92  for (m = 0; m < A.mt; m++) {
93  tempmm = m == A.mt-1 ? A.m-m*A.mb : A.mb;
94  ldam = BLKLDD(A, m);
95  for (n = m+1; n < A.nt; n++) {
96  tempnn = n == A.nt-1 ? A.n-n*A.nb : A.nb;
98  plasma->quark, &task_flags,
99  PlasmaLeft, uplo, PlasmaNoTrans, diag,
100  tempmm, tempnn, A.mb,
101  mzone, A(m, m), ldam,
102  A(m, n), ldam);
103  }
104  for (n = 0; n < m; n++) {
105  tempnn = n == A.nt-1 ? A.n-n*A.nb : A.nb;
106  ldan = BLKLDD(A, n);
107  for (k = m+1; k < A.nt; k++) {
108  tempkn = k == A.nt-1 ? A.n-k*A.nb : A.nb;
110  plasma->quark, &task_flags,
112  tempnn, tempkn, tempmm, A.mb,
113  zone, A(n, m), ldan,
114  A(m, k), ldam,
115  zone, A(n, k), ldan);
116  }
118  plasma->quark, &task_flags,
119  PlasmaRight, uplo, PlasmaNoTrans, diag,
120  tempnn, tempmm, A.mb,
121  zone, A(m, m), ldam,
122  A(n, m), ldan);
123  }
125  plasma->quark, &task_flags,
126  uplo, diag,
127  tempmm, A.mb,
128  A(m, m), ldam,
129  sequence, request, A.mb*m);
130  }
131  }
132 }