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
pcunglq.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 Q(m,n) BLKADDR(Q, PLASMA_Complex32_t, m, n)
21 #define T(m,n) BLKADDR(T, PLASMA_Complex32_t, m, n)
22 /***************************************************************************/
26  PLASMA_sequence *sequence, PLASMA_request *request)
27 {
30 
31  int k, m, n;
32  int ldak, ldqm;
33  int tempnn, tempmm, tempkmin, tempkn;
34  int tempAkm, tempAkn;
35  int ib;
36 
37  plasma = plasma_context_self();
38  if (sequence->status != PLASMA_SUCCESS)
39  return;
40  QUARK_Task_Flag_Set(&task_flags, TASK_SEQUENCE, (intptr_t)sequence->quark_sequence);
41 
42  ib = PLASMA_IB;
43  for (k = min(A.mt, A.nt)-1; k >= 0; k--) {
44  tempAkm = k == A.mt-1 ? A.m-k*A.mb : A.mb;
45  tempAkn = k == A.nt-1 ? A.n-k*A.nb : A.nb;
46  tempkmin = min( tempAkn, tempAkm );
47  tempkn = k == Q.nt-1 ? Q.n-k*Q.nb : Q.nb;
48  ldak = BLKLDD(A, k);
49  for (n = Q.nt-1; n > k; n--) {
50  tempnn = n == Q.nt-1 ? Q.n-n*Q.nb : Q.nb;
51  for (m = 0; m < Q.mt; m++) {
52  tempmm = m == Q.mt-1 ? Q.m-m*Q.mb : Q.mb;
53  ldqm = BLKLDD(Q, m);
55  plasma->quark, &task_flags,
57  tempmm, Q.nb, tempmm, tempnn, tempAkm, ib, T.nb,
58  Q(m, k), ldqm,
59  Q(m, n), ldqm,
60  A(k, n), ldak,
61  T(k, n), T.mb);
62  }
63  }
64  for (m = 0; m < Q.mt; m++) {
65  tempmm = m == Q.mt-1 ? Q.m-m*Q.mb : Q.mb;
66  ldqm = BLKLDD(Q, m);
68  plasma->quark, &task_flags,
70  tempmm, tempkn, tempkmin, ib, T.nb,
71  A(k, k), ldak,
72  T(k, k), T.mb,
73  Q(m, k), ldqm);
74  }
75  }
76 }