PLASMA
2.4.5
PLASMA - Parallel Linear Algebra for Scalable Multi-core Architectures
Main Page
Modules
Namespaces
Data Structures
Files
File List
Globals
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
/***************************************************************************/
26
void
plasma_pzgerbb
(
plasma_context_t
*
plasma
)
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
45
plasma_static_call_4
(
plasma_pzgeqrf
,
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
51
plasma_static_call_7
(
plasma_pzunmqr
,
52
PLASMA_enum
,
PlasmaLeft
,
53
PLASMA_enum
,
PlasmaConjTrans
,
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
63
plasma_static_call_4
(
plasma_pzgelqf
,
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
69
plasma_static_call_7
(
plasma_pzunmlq
,
70
PLASMA_enum
,
PlasmaRight
,
71
PLASMA_enum
,
PlasmaConjTrans
,
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
85
plasma_static_call_4
(
plasma_pzgelqf
,
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
91
plasma_static_call_7
(
plasma_pzunmlq
,
92
PLASMA_enum
,
PlasmaRight
,
93
PLASMA_enum
,
PlasmaConjTrans
,
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
104
plasma_static_call_4
(
plasma_pzgeqrf
,
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
110
plasma_static_call_7
(
plasma_pzunmqr
,
111
PLASMA_enum
,
PlasmaLeft
,
112
PLASMA_enum
,
PlasmaConjTrans
,
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
/***************************************************************************/
127
void
plasma_pzgerbb_quark
(
PLASMA_desc
A
,
PLASMA_desc
T
,
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
138
plasma_pzgeqrf_quark
(
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
143
plasma_pzunmqr_quark
(
144
PlasmaLeft
,
145
PlasmaConjTrans
,
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
154
plasma_pzgelqf_quark
(
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
159
plasma_pzunmlq_quark
(
160
PlasmaRight
,
PlasmaConjTrans
,
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
173
plasma_pzgelqf_quark
(
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
178
plasma_pzunmlq_quark
(
179
PlasmaRight
,
PlasmaConjTrans
,
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
189
plasma_pzgeqrf_quark
(
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
194
plasma_pzunmqr_quark
(
195
PlasmaLeft
,
PlasmaConjTrans
,
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
}
plasma_2.4.5
compute
pzgerbb.c
Generated on Mon Jul 9 2012 12:44:56 for PLASMA by
1.8.1