21 #define PLASMA_zlag2c(_descA, _descSB) \
22 plasma_parallel_call_4(plasma_pzlag2c, \
23 PLASMA_desc, (_descA), \
24 PLASMA_desc, (_descSB), \
25 PLASMA_sequence*, sequence, \
26 PLASMA_request*, request)
28 #define PLASMA_clag2z(_descSA, _descB) \
29 plasma_parallel_call_4(plasma_pclag2z, \
30 PLASMA_desc, (_descSA), \
31 PLASMA_desc, (_descB), \
32 PLASMA_sequence*, sequence, \
33 PLASMA_request*, request)
35 #define PLASMA_zlange(_norm, _descA, _result, _work) \
37 plasma_parallel_call_6(plasma_pzlange, \
38 PLASMA_enum, (_norm), \
39 PLASMA_desc, (_descA), \
41 double*, &(_result), \
42 PLASMA_sequence*, sequence, \
43 PLASMA_request*, request);
45 #define PLASMA_zlacpy(_descA, _descB) \
46 plasma_parallel_call_5(plasma_pzlacpy, \
47 PLASMA_enum, PlasmaUpperLower, \
48 PLASMA_desc, (_descA), \
49 PLASMA_desc, (_descB), \
50 PLASMA_sequence*, sequence, \
51 PLASMA_request*, request)
53 #define PLASMA_zgeadd(_alpha, _descA, _descB) \
54 plasma_parallel_call_5(plasma_pzgeadd, \
55 PLASMA_Complex64_t, (_alpha), \
56 PLASMA_desc, (_descA), \
57 PLASMA_desc, (_descB), \
58 PLASMA_sequence*, sequence, \
59 PLASMA_request*, request)
62 #define PLASMA_zgetrs(_A, _IPIV, _X) \
64 plasma_dynamic_call_3( \
65 plasma_pzbarrier_tl2pnl, \
67 PLASMA_sequence*, sequence, \
68 PLASMA_request*, request); \
70 plasma_dynamic_call_5( \
75 PLASMA_sequence*, sequence, \
76 PLASMA_request*, request); \
78 plasma_parallel_call_9( \
80 PLASMA_enum, PlasmaLeft, \
81 PLASMA_enum, PlasmaLower, \
82 PLASMA_enum, PlasmaNoTrans, \
83 PLASMA_enum, PlasmaUnit, \
84 PLASMA_Complex64_t, 1.0, \
87 PLASMA_sequence*, sequence, \
88 PLASMA_request*, request); \
90 plasma_parallel_call_9( \
92 PLASMA_enum, PlasmaLeft, \
93 PLASMA_enum, PlasmaUpper, \
94 PLASMA_enum, PlasmaNoTrans, \
95 PLASMA_enum, PlasmaNonUnit, \
96 PLASMA_Complex64_t, 1.0, \
99 PLASMA_sequence*, sequence, \
100 PLASMA_request*, request); \
103 #define PLASMA_cgetrs(_A, _IPIV, _X) \
105 plasma_dynamic_call_3( \
106 plasma_pcbarrier_tl2pnl, \
108 PLASMA_sequence*, sequence, \
109 PLASMA_request*, request); \
111 plasma_dynamic_call_5( \
116 PLASMA_sequence*, sequence, \
117 PLASMA_request*, request); \
119 plasma_parallel_call_9( \
121 PLASMA_enum, PlasmaLeft, \
122 PLASMA_enum, PlasmaLower, \
123 PLASMA_enum, PlasmaNoTrans, \
124 PLASMA_enum, PlasmaUnit, \
125 PLASMA_Complex32_t, 1.0, \
128 PLASMA_sequence*, sequence, \
129 PLASMA_request*, request); \
131 plasma_parallel_call_9( \
133 PLASMA_enum, PlasmaLeft, \
134 PLASMA_enum, PlasmaUpper, \
135 PLASMA_enum, PlasmaNoTrans, \
136 PLASMA_enum, PlasmaNonUnit, \
137 PLASMA_Complex32_t, 1.0, \
140 PLASMA_sequence*, sequence, \
141 PLASMA_request*, request); \
242 if (plasma == NULL) {
255 if (LDA <
max(1, N)) {
259 if (LDB <
max(1, N)) {
263 if (LDX <
max(1, N)) {
268 if (
min(N, NRHS) == 0)
284 plasma_zooplap2tile( descA, A, NB, NB, LDA, N, 0, 0, N, N ,
plasma_desc_mat_free(&(descA)) );
285 plasma_zooplap2tile( descB, B, NB, NB, LDB, NRHS, 0, 0, N, NRHS,
plasma_desc_mat_free(&(descA));
plasma_desc_mat_free(&(descB)) );
293 LDX, NRHS, 0, 0, N, NRHS);
315 status = sequence->
status;
383 if (plasma == NULL) {
392 status = sequence->
status;
436 const int itermax = 30;
437 const double bwdmax = 1.0;
441 double Anorm, cte, eps, Rnorm, Xnorm;
445 if (plasma == NULL) {
449 if (sequence == NULL) {
453 if (request == NULL) {
465 plasma_error(
"PLASMA_zcgesv_Tile",
"invalid first descriptor");
469 plasma_error(
"PLASMA_zcgesv_Tile",
"invalid third descriptor");
473 plasma_error(
"PLASMA_zcgesv_Tile",
"invalid fourth descriptor");
477 if (descA.
nb != descA.
mb || descB.
nb != descB.
mb || descX.
nb != descX.
mb) {
478 plasma_error(
"PLASMA_zcgesv_Tile",
"only square tiles supported");
488 plasma_error(
"PLASMA_zcgesv",
"plasma_shared_alloc() failed");
504 eps = LAPACKE_dlamch_work(
'e');
523 plasma_pcbarrier_tl2pnl,
561 cte = Anorm*eps*sqrt((
double) N)*bwdmax;
562 if (Rnorm < Xnorm * cte){
573 for (iiter = 0; iiter < itermax; iiter++){
608 if (Rnorm < Xnorm * cte){
624 *ITER = -itermax - 1;