Skip to content

Commit 9c4edd3

Browse files
authored
Merge pull request #2099 from martin-frbg/rela-gbtrf
Disable repeated recursion on Ab_BR in ReLAPACK xGBTRF
2 parents 5b03981 + 1036299 commit 9c4edd3

File tree

4 files changed

+27
-15
lines changed

4 files changed

+27
-15
lines changed

relapack/src/cgbtrf.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,9 @@ static void RELAPACK_cgbtrf_rec(
221221
}
222222

223223
// recursion(Ab_BR, ipiv_B)
224-
RELAPACK_cgbtrf_rec(&m2, &n2, kl, ku, Ab_BR, ldAb, ipiv_B, Workl, ldWorkl, Worku, ldWorku, info);
224+
//RELAPACK_cgbtrf_rec(&m2, &n2, kl, ku, Ab_BR, ldAb, ipiv_B, Workl, ldWorkl, Worku, ldWorku, info);
225+
LAPACK(cgbtf2)(&m2, &n2, kl, ku, Ab_BR, ldAb, ipiv_B, info);
226+
225227
if (*info)
226228
*info += n1;
227229
// shift pivots

relapack/src/dgbtrf.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "relapack.h"
2-
#include "stdlib.h"
2+
#include <stdlib.h>
3+
#include <stdio.h>
34
static void RELAPACK_dgbtrf_rec(const blasint *, const blasint *, const blasint *,
45
const blasint *, double *, const blasint *, blasint *, double *, const blasint *, double *,
56
const blasint *, blasint *);
@@ -218,7 +219,8 @@ static void RELAPACK_dgbtrf_rec(
218219
}
219220

220221
// recursion(Ab_BR, ipiv_B)
221-
RELAPACK_dgbtrf_rec(&m2, &n2, kl, ku, Ab_BR, ldAb, ipiv_B, Workl, ldWorkl, Worku, ldWorku, info);
222+
// RELAPACK_dgbtrf_rec(&m2, &n2, kl, ku, Ab_BR, ldAb, ipiv_B, Workl, ldWorkl, Worku, ldWorku, info);
223+
LAPACK(dgbtf2)(&m2, &n2, kl, ku, Ab_BR, ldAb, ipiv_B, info);
222224
if (*info)
223225
*info += n1;
224226
// shift pivots

relapack/src/sgbtrf.c

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ void RELAPACK_sgbtrf(
2727
*info = -3;
2828
else if (*ku < 0)
2929
*info = -4;
30-
else if (*ldAb < 2 * *kl + *ku + 1)
30+
else if (*ldAb < 2 * *kl + *ku + 1)
3131
*info = -6;
3232
if (*info) {
3333
const blasint minfo = -*info;
@@ -55,15 +55,16 @@ void RELAPACK_sgbtrf(
5555

5656
// Allocate work space
5757
const blasint n1 = SREC_SPLIT(*n);
58-
const blasint mWorkl = (kv > n1) ? MAX(1, *m - *kl) : kv;
59-
const blasint nWorkl = (kv > n1) ? n1 : kv;
60-
const blasint mWorku = (*kl > n1) ? n1 : *kl;
61-
const blasint nWorku = (*kl > n1) ? MAX(0, *n - *kl) : *kl;
58+
const blasint mWorkl = abs( (kv > n1) ? MAX(1, *m - *kl) : kv );
59+
const blasint nWorkl = abs( (kv > n1) ? n1 : kv );
60+
const blasint mWorku = abs( (*kl > n1) ? n1 : *kl );
61+
const blasint nWorku = abs( (*kl > n1) ? MAX(0, *n - *kl) : *kl );
6262
float *Workl = malloc(mWorkl * nWorkl * sizeof(float));
6363
float *Worku = malloc(mWorku * nWorku * sizeof(float));
6464
LAPACK(slaset)("L", &mWorkl, &nWorkl, ZERO, ZERO, Workl, &mWorkl);
6565
LAPACK(slaset)("U", &mWorku, &nWorku, ZERO, ZERO, Worku, &mWorku);
6666

67+
6768
// Recursive kernel
6869
RELAPACK_sgbtrf_rec(m, n, kl, ku, Ab, ldAb, ipiv, Workl, &mWorkl, Worku, &mWorku, info);
6970

@@ -81,6 +82,7 @@ static void RELAPACK_sgbtrf_rec(
8182
blasint *info
8283
) {
8384

85+
8486
if (*n <= MAX(CROSSOVER_SGBTRF, 1)) {
8587
// Unblocked
8688
LAPACK(sgbtf2)(m, n, kl, ku, Ab, ldAb, ipiv, info);
@@ -127,7 +129,7 @@ static void RELAPACK_sgbtrf_rec(
127129
float *const A_BR = A + *ldA * n1 + m1;
128130

129131
// ipiv_T
130-
// ipiv_B
132+
// ipiv_B
131133
blasint *const ipiv_T = ipiv;
132134
blasint *const ipiv_B = ipiv + n1;
133135

@@ -155,6 +157,7 @@ static void RELAPACK_sgbtrf_rec(
155157
float *const A_BRbl = A_BR + m21;
156158
float *const A_BRbr = A_BR + *ldA * n21 + m21;
157159

160+
158161
// recursion(Ab_L, ipiv_T)
159162
RELAPACK_sgbtrf_rec(m, &n1, kl, ku, Ab_L, ldAb, ipiv_T, Workl, ldWorkl, Worku, ldWorku, info);
160163

@@ -216,8 +219,11 @@ static void RELAPACK_sgbtrf_rec(
216219
}
217220
}
218221

222+
219223
// recursion(Ab_BR, ipiv_B)
220-
RELAPACK_sgbtrf_rec(&m2, &n2, kl, ku, Ab_BR, ldAb, ipiv_B, Workl, ldWorkl, Worku, ldWorku, info);
224+
//cause of infinite recursion here ?
225+
// RELAPACK_sgbtrf_rec(&m2, &n2, kl, ku, Ab_BR, ldAb, ipiv_B, Workl, ldWorkl, Worku, ldWorku, info);
226+
LAPACK(sgbtf2)(&m2, &n2, kl, ku, Ab_BR, ldAb, ipiv_B, info);
221227
if (*info)
222228
*info += n1;
223229
// shift pivots

relapack/src/zgbtrf.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,10 @@ void RELAPACK_zgbtrf(
5656

5757
// Allocate work space
5858
const blasint n1 = ZREC_SPLIT(*n);
59-
const blasint mWorkl = (kv > n1) ? MAX(1, *m - *kl) : kv;
60-
const blasint nWorkl = (kv > n1) ? n1 : kv;
61-
const blasint mWorku = (*kl > n1) ? n1 : *kl;
62-
const blasint nWorku = (*kl > n1) ? MAX(0, *n - *kl) : *kl;
59+
const blasint mWorkl = abs ( (kv > n1) ? MAX(1, *m - *kl) : kv);
60+
const blasint nWorkl = abs ( (kv > n1) ? n1 : kv);
61+
const blasint mWorku = abs ( (*kl > n1) ? n1 : *kl);
62+
const blasint nWorku = abs ( (*kl > n1) ? MAX(0, *n - *kl) : *kl);
6363
double *Workl = malloc(mWorkl * nWorkl * 2 * sizeof(double));
6464
double *Worku = malloc(mWorku * nWorku * 2 * sizeof(double));
6565
LAPACK(zlaset)("L", &mWorkl, &nWorkl, ZERO, ZERO, Workl, &mWorkl);
@@ -221,7 +221,9 @@ static void RELAPACK_zgbtrf_rec(
221221
}
222222

223223
// recursion(Ab_BR, ipiv_B)
224-
RELAPACK_zgbtrf_rec(&m2, &n2, kl, ku, Ab_BR, ldAb, ipiv_B, Workl, ldWorkl, Worku, ldWorku, info);
224+
// RELAPACK_zgbtrf_rec(&m2, &n2, kl, ku, Ab_BR, ldAb, ipiv_B, Workl, ldWorkl, Worku, ldWorku, info);
225+
LAPACK(zgbtf2)(&m2, &n2, kl, ku, Ab_BR, ldAb, ipiv_B, info);
226+
225227
if (*info)
226228
*info += n1;
227229
// shift pivots

0 commit comments

Comments
 (0)