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
pzgerbb.c
Go to the documentation of this file.
1 
16 #include "common.h"
17 
18 /***************************************************************************/
27 {
28  PLASMA_desc A;
29  PLASMA_desc T;
30  PLASMA_sequence *sequence;
31  PLASMA_request *request;
32 
33  int k;
34  int tempkm, tempkn;
35 
36  plasma_unpack_args_4(A, T, sequence, request);
37  if (sequence->status != PLASMA_SUCCESS)
38  return;
39 
40  if (A.m >= A.n){
41  for (k = 0; k < A.nt; k++) {
42  tempkm = k == A.mt-1 ? A.m-k*A.mb : A.mb;
43  tempkn = k == A.nt-1 ? A.n-k*A.nb : A.nb;
44 
46  PLASMA_desc, plasma_desc_submatrix(A, k*A.mb, k*A.nb, A.m-k*A.mb, tempkn),
47  PLASMA_desc, plasma_desc_submatrix(T, k*T.mb, k*T.nb, T.m-k*T.mb, tempkn),
48  PLASMA_sequence*, sequence,
49  PLASMA_request*, request);
50 
54  PLASMA_desc, plasma_desc_submatrix(A, k*A.mb, k*A.nb, A.m-k*A.mb, tempkn),
55  PLASMA_desc, plasma_desc_submatrix(A, k*A.mb, (k+1)*A.nb, A.m-k*A.mb, A.n-(k+1)*A.nb),
56  PLASMA_desc, plasma_desc_submatrix(T, k*T.mb, k*T.nb, T.m-k*T.mb, tempkn),
57  PLASMA_sequence*, sequence,
58  PLASMA_request*, request);
59 
60  if (k+1 < A.nt){
61  tempkn = k+1 == A.nt-1 ? A.n-(k+1)*A.nb : A.nb;
62 
64  PLASMA_desc, plasma_desc_submatrix(A, k*A.mb, (k+1)*A.nb, tempkm, A.n-(k+1)*A.nb),
65  PLASMA_desc, plasma_desc_submatrix(T, k*T.mb, (k+1)*T.nb, tempkm, T.n-(k+1)*T.nb),
66  PLASMA_sequence*, sequence,
67  PLASMA_request*, request);
68 
72  PLASMA_desc, plasma_desc_submatrix(A, k*A.mb, (k+1)*A.nb, tempkm, A.n-(k+1)*A.nb),
73  PLASMA_desc, plasma_desc_submatrix(A, (k+1)*A.mb, (k+1)*A.nb, A.m-(k+1)*A.mb, A.n-(k+1)*A.nb),
74  PLASMA_desc, plasma_desc_submatrix(T, k*T.mb, (k+1)*T.nb, tempkm, T.n-(k+1)*T.nb),
75  PLASMA_sequence*, sequence,
76  PLASMA_request*, request);
77  }
78  }
79  }
80  else{
81  for (k = 0; k < A.mt; k++) {
82  tempkm = k == A.mt-1 ? A.m-k*A.mb : A.mb;
83  tempkn = k == A.nt-1 ? A.n-k*A.nb : A.nb;
84 
86  PLASMA_desc, plasma_desc_submatrix(A, k*A.mb, k*A.nb, tempkm, A.n-k*A.nb),
87  PLASMA_desc, plasma_desc_submatrix(T, k*T.mb, k*T.nb, tempkm, T.n-k*T.nb),
88  PLASMA_sequence*, sequence,
89  PLASMA_request*, request);
90 
94  PLASMA_desc, plasma_desc_submatrix(A, k*A.mb, k*A.nb, tempkm, A.n-k*A.nb),
95  PLASMA_desc, plasma_desc_submatrix(A, (k+1)*A.mb, k*A.nb, A.m-(k+1)*A.mb, A.n-k*A.nb),
96  PLASMA_desc, plasma_desc_submatrix(T, k*T.mb, k*T.nb, tempkm, T.n-k*T.nb),
97  PLASMA_sequence*, sequence,
98  PLASMA_request*, request);
99 
100  if (k+1 < A.mt){
101  tempkm = k+1 == A.mt-1 ? A.m-(k+1)*A.mb : A.mb;
102  tempkn = k == A.nt-1 ? A.n-k*A.nb : A.nb;
103 
105  PLASMA_desc, plasma_desc_submatrix(A, (k+1)*A.mb, k*A.nb, A.m-(k+1)*A.mb, tempkn),
106  PLASMA_desc, plasma_desc_submatrix(T, (k+1)*T.mb, k*T.nb, T.m-(k+1)*T.mb, tempkn),
107  PLASMA_sequence*, sequence,
108  PLASMA_request*, request);
109 
113  PLASMA_desc, plasma_desc_submatrix(A, (k+1)*A.mb, k*A.nb, A.m-(k+1)*A.mb, tempkn),
114  PLASMA_desc, plasma_desc_submatrix(A, (k+1)*A.mb, (k+1)*A.nb, A.m-(k+1)*A.mb, A.n-(k+1)*A.nb),
115  PLASMA_desc, plasma_desc_submatrix(T, (k+1)*T.mb, k*T.nb, T.m-(k+1)*T.mb, tempkn),
116  PLASMA_sequence*, sequence,
117  PLASMA_request*, request);
118  }
119  }
120  }
121 }
122 
123 /***************************************************************************/
128  PLASMA_sequence *sequence, PLASMA_request *request)
129 {
130  int k;
131  int tempkm, tempkn;
132 
133  if (A.m >= A.n){
134  for (k = 0; k < A.nt; k++) {
135  tempkm = k == A.mt-1 ? A.m-k*A.mb : A.mb;
136  tempkn = k == A.nt-1 ? A.n-k*A.nb : A.nb;
137 
139  plasma_desc_submatrix(A, k*A.mb, k*A.nb, A.m-k*A.mb, tempkn),
140  plasma_desc_submatrix(T, k*T.mb, k*T.nb, T.m-k*T.mb, tempkn),
141  sequence, request);
142 
144  PlasmaLeft,
146  plasma_desc_submatrix(A, k*A.mb, k*A.nb, A.m-k*A.mb, tempkn),
147  plasma_desc_submatrix(A, k*A.mb, (k+1)*A.nb, A.m-k*A.mb, A.n-(k+1)*A.nb),
148  plasma_desc_submatrix(T, k*T.mb, k*T.nb, T.m-k*T.mb, tempkn),
149  sequence, request);
150 
151  if (k+1 < A.nt){
152  tempkn = k+1 == A.nt-1 ? A.n-(k+1)*A.nb : A.nb;
153 
155  plasma_desc_submatrix(A, k*A.mb, (k+1)*A.nb, tempkm, A.n-(k+1)*A.nb),
156  plasma_desc_submatrix(T, k*T.mb, (k+1)*T.nb, tempkm, T.n-(k+1)*T.nb),
157  sequence, request);
158 
161  plasma_desc_submatrix(A, k*A.mb, (k+1)*A.nb, tempkm, A.n-(k+1)*A.nb),
162  plasma_desc_submatrix(A, (k+1)*A.mb, (k+1)*A.nb, A.m-(k+1)*A.mb, A.n-(k+1)*A.nb),
163  plasma_desc_submatrix(T, k*T.mb, (k+1)*T.nb, tempkm, T.n-(k+1)*T.nb),
164  sequence, request);
165  }
166  }
167  }
168  else{
169  for (k = 0; k < A.mt; k++) {
170  tempkm = k == A.mt-1 ? A.m-k*A.mb : A.mb;
171  tempkn = k == A.nt-1 ? A.n-k*A.nb : A.nb;
172 
174  plasma_desc_submatrix(A, k*A.mb, k*A.nb, tempkm, A.n-k*A.nb),
175  plasma_desc_submatrix(T, k*T.mb, k*T.nb, tempkm, T.n-k*T.nb),
176  sequence, request);
177 
180  plasma_desc_submatrix(A, k*A.mb, k*A.nb, tempkm, A.n-k*A.nb),
181  plasma_desc_submatrix(A, (k+1)*A.mb, k*A.nb, A.m-(k+1)*A.mb, A.n-k*A.nb),
182  plasma_desc_submatrix(T, k*T.mb, k*T.nb, tempkm, T.n-k*T.nb),
183  sequence, request);
184 
185  if (k+1 < A.mt){
186  tempkm = k+1 == A.mt-1 ? A.m-(k+1)*A.mb : A.mb;
187  tempkn = k == A.nt-1 ? A.n-k*A.nb : A.nb;
188 
190  plasma_desc_submatrix(A, (k+1)*A.mb, k*A.nb, A.m-(k+1)*A.mb, tempkn),
191  plasma_desc_submatrix(T, (k+1)*T.mb, k*T.nb, T.m-(k+1)*T.mb, tempkn),
192  sequence, request);
193 
196  plasma_desc_submatrix(A, (k+1)*A.mb, k*A.nb, A.m-(k+1)*A.mb, tempkn),
197  plasma_desc_submatrix(A, (k+1)*A.mb, (k+1)*A.nb, A.m-(k+1)*A.mb, A.n-(k+1)*A.nb),
198  plasma_desc_submatrix(T, (k+1)*T.mb, k*T.nb, T.m-(k+1)*T.mb, tempkn),
199  sequence, request);
200  }
201  }
202  }
203 }