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