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
pstrtri.c
Go to the documentation of this file.
1
17
#include "
common.h
"
18
19
#define A(m,n) BLKADDR(A, float, m, n)
20
/***************************************************************************/
23
void
plasma_pstrtri_quark
(
PLASMA_enum
uplo
,
PLASMA_enum
diag
,
PLASMA_desc
A
,
24
PLASMA_sequence
*sequence,
PLASMA_request
*request)
25
{
26
plasma_context_t
*
plasma
;
27
Quark_Task_Flags
task_flags =
Quark_Task_Flags_Initializer
;
28
29
int
k, m, n;
30
int
ldam, ldan;
31
int
tempkn, tempmm, tempnn;
32
33
float
zone = (float) 1.0;
34
float
mzone = (float)-1.0;
35
36
plasma =
plasma_context_self
();
37
if
(sequence->
status
!=
PLASMA_SUCCESS
)
38
return
;
39
QUARK_Task_Flag_Set
(&task_flags,
TASK_SEQUENCE
, (intptr_t)sequence->
quark_sequence
);
40
/*
41
* PlasmaLower
42
*/
43
if
(uplo ==
PlasmaLower
) {
44
for
(n = 0; n < A.
nt
; n++) {
45
tempnn = n == A.
nt
-1 ? A.
n
-n*A.
nb
: A.
nb
;
46
ldan =
BLKLDD
(A, n);
47
for
(m = n+1; m < A.
mt
; m++) {
48
tempmm = m == A.
mt
-1 ? A.
m
-m*A.
mb
: A.
mb
;
49
ldam =
BLKLDD
(A, m);
50
QUARK_CORE_strsm
(
51
plasma->
quark
, &task_flags,
52
PlasmaRight
, uplo,
PlasmaNoTrans
, diag,
53
tempmm, tempnn, A.
mb
,
54
mzone, A(n, n), ldan,
55
A
(m, n), ldam);
56
}
57
for
(m = n+1; m < A.
mt
; m++) {
58
tempmm = m == A.
mt
-1 ? A.
m
-m*A.
mb
: A.
mb
;
59
ldam =
BLKLDD
(A, m);
60
for
(k = 0; k < n; k++) {
61
tempkn = k == A.
nt
-1 ? A.
n
-k*A.
nb
: A.
nb
;
62
QUARK_CORE_sgemm
(
63
plasma->
quark
, &task_flags,
64
PlasmaNoTrans
,
PlasmaNoTrans
,
65
tempmm, tempkn, tempnn, A.
mb
,
66
zone, A(m, n), ldam,
67
A
(n, k), ldan,
68
zone,
A
(m, k), ldam);
69
}
70
}
71
for
(m = 0; m < n; m++) {
72
tempmm = m == A.
mt
-1 ? A.
m
-m*A.
mb
: A.
mb
;
73
QUARK_CORE_strsm
(
74
plasma->
quark
, &task_flags,
75
PlasmaLeft
, uplo,
PlasmaNoTrans
, diag,
76
tempnn, tempmm, A.
mb
,
77
zone, A(n, n), ldan,
78
A
(n, m), ldan);
79
}
80
QUARK_CORE_strtri
(
81
plasma->
quark
, &task_flags,
82
uplo, diag,
83
tempnn, A.
mb
,
84
A(n, n), ldan,
85
sequence, request, A.
nb
*n);
86
}
87
}
88
/*
89
* PlasmaUpper
90
*/
91
else
{
92
for
(m = 0; m < A.
mt
; m++) {
93
tempmm = m == A.
mt
-1 ? A.
m
-m*A.
mb
: A.
mb
;
94
ldam =
BLKLDD
(A, m);
95
for
(n = m+1; n < A.
nt
; n++) {
96
tempnn = n == A.
nt
-1 ? A.
n
-n*A.
nb
: A.
nb
;
97
QUARK_CORE_strsm
(
98
plasma->
quark
, &task_flags,
99
PlasmaLeft
, uplo,
PlasmaNoTrans
, diag,
100
tempmm, tempnn, A.
mb
,
101
mzone, A(m, m), ldam,
102
A
(m, n), ldam);
103
}
104
for
(n = 0; n < m; n++) {
105
tempnn = n == A.
nt
-1 ? A.
n
-n*A.
nb
: A.
nb
;
106
ldan =
BLKLDD
(A, n);
107
for
(k = m+1; k < A.
nt
; k++) {
108
tempkn = k == A.
nt
-1 ? A.
n
-k*A.
nb
: A.
nb
;
109
QUARK_CORE_sgemm
(
110
plasma->
quark
, &task_flags,
111
PlasmaNoTrans
,
PlasmaNoTrans
,
112
tempnn, tempkn, tempmm, A.
mb
,
113
zone, A(n, m), ldan,
114
A
(m, k), ldam,
115
zone,
A
(n, k), ldan);
116
}
117
QUARK_CORE_strsm
(
118
plasma->
quark
, &task_flags,
119
PlasmaRight
, uplo,
PlasmaNoTrans
, diag,
120
tempnn, tempmm, A.
mb
,
121
zone, A(m, m), ldam,
122
A
(n, m), ldan);
123
}
124
QUARK_CORE_strtri
(
125
plasma->
quark
, &task_flags,
126
uplo, diag,
127
tempmm, A.
mb
,
128
A(m, m), ldam,
129
sequence, request, A.
mb
*m);
130
}
131
}
132
}
plasma_2.4.5
compute
pstrtri.c
Generated on Mon Jul 9 2012 12:44:56 for PLASMA by
1.8.1