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
pzgelqfrh.c
Go to the documentation of this file.
1 
17 #include "common.h"
18 
19 #define A(m,n) BLKADDR(A, PLASMA_Complex64_t, (m), (n))
20 #define T(m,n) BLKADDR(T, PLASMA_Complex64_t, (m), (n))
21 #define T2(m,n) BLKADDR(T, PLASMA_Complex64_t, (m), (n)+A.nt)
22 /***************************************************************************/
26  PLASMA_sequence *sequence, PLASMA_request *request)
27 {
30 
31  int k, m, n;
32  int N, RD;
33  int ldak, ldam;
34  int tempkmin, tempkm, tempNn, tempnn, tempmm, tempNRDn;
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 
44  for (k = 0; k < min(A.mt, A.nt); k++) {
45  tempkm = k == A.mt-1 ? A.m-k*A.mb : A.mb;
46  ldak = BLKLDD(A, k);
47  for (N = k; N < A.nt; N += BS) {
48  tempNn = N == A.nt-1 ? A.n-N*A.nb : A.nb;
49  tempkmin = min(tempkm, tempNn);
51  plasma->quark, &task_flags,
52  tempkm, tempNn, ib, T.nb,
53  A(k, N), ldak,
54  T(k, N), T.mb);
55  for (m = k+1; m < A.mt; m++) {
56  tempmm = m == A.mt-1 ? A.m-m*A.mb : A.mb;
57  ldam = BLKLDD(A, m);
59  plasma->quark, &task_flags,
61  tempmm, tempNn, tempkmin, ib, T.nb,
62  A(k, N), ldak,
63  T(k, N), T.mb,
64  A(m, N), ldam);
65  }
66  for (n = N+1; n < min(N+BS, A.nt); n++) {
67  tempnn = n == A.nt-1 ? A.n-n*A.nb : A.nb;
69  plasma->quark, &task_flags,
70  tempkm, tempnn, ib, T.nb,
71  A(k, N), ldak,
72  A(k, n), ldak,
73  T(k, n), T.mb);
74 
75  for (m = k+1; m < A.mt; m++) {
76  tempmm = m == A.mt-1 ? A.m-m*A.mb : A.mb;
77  ldam = BLKLDD(A, m);
79  plasma->quark, &task_flags,
81  tempmm, A.nb, tempmm, tempnn, tempkm, ib, T.nb,
82  A(m, N), ldam,
83  A(m, n), ldam,
84  A(k, n), ldak,
85  T(k, n), T.mb);
86  }
87  }
88  }
89  for (RD = BS; RD < A.nt-k; RD *= 2) {
90  for (N = k; N+RD < A.nt; N += 2*RD) {
91  tempNRDn = N+RD == A.nt-1 ? A.n-(N+RD)*A.nb : A.nb;
93  plasma->quark, &task_flags,
94  tempkm, tempNRDn, ib, T.nb,
95  A (k, N ), ldak,
96  A (k, N+RD), ldak,
97  T2(k, N+RD), T.mb);
98 
99  for (m = k+1; m < A.mt; m++) {
100  tempmm = m == A.mt-1 ? A.m-m*A.mb : A.mb;
101  ldam = BLKLDD(A, m );
103  plasma->quark, &task_flags,
105  tempmm, A.nb, tempmm, tempNRDn, tempkm, ib, T.nb,
106  A (m, N ), ldam,
107  A (m, N+RD), ldam,
108  A (k, N+RD), ldak,
109  T2(k, N+RD), T.mb);
110  }
111  }
112  }
113  }
114 }