forked from void-linux/void-packages
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
openblas: fix bug that affects numpy/scipy/octave/sagemath
See: OpenMathLib/OpenBLAS#3976 Include patches from upstream: - OpenMathLib/OpenBLAS#3978 - OpenMathLib/OpenBLAS#3980 - OpenMathLib/OpenBLAS#3984
- Loading branch information
Showing
4 changed files
with
162 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
From 12aabb9f9ba57a74a3feedfafd97b7aeecbac450 Mon Sep 17 00:00:00 2001 | ||
From: Martin Kroeker <martin@ruby.chemie.uni-freiburg.de> | ||
Date: Wed, 29 Mar 2023 09:44:33 +0200 | ||
Subject: [PATCH] fix conditional | ||
|
||
--- | ||
lapack/getf2/zgetf2_k.c | 2 +- | ||
1 file changed, 1 insertion(+), 1 deletion(-) | ||
|
||
diff --git a/lapack/getf2/zgetf2_k.c b/lapack/getf2/zgetf2_k.c | ||
index f3412f52ff..dbc78abc60 100644 | ||
--- a/lapack/getf2/zgetf2_k.c | ||
+++ b/lapack/getf2/zgetf2_k.c | ||
@@ -107,7 +107,7 @@ blasint CNAME(blas_arg_t *args, BLASLONG *range_m, BLASLONG *range_n, FLOAT *sa, | ||
temp2 = *(b + jp * 2 + 1); | ||
|
||
// if ((temp1 != ZERO) || (temp2 != ZERO)) { | ||
- if ((fabs(temp1) >= DBL_MIN) && (fabs(temp2) >= DBL_MIN)) { | ||
+ if ((fabs(temp1) >= DBL_MIN) || (fabs(temp2) >= DBL_MIN)) { | ||
|
||
if (jp != j) { | ||
SWAP_K(j + 1, 0, 0, ZERO, ZERO, a + j * 2, lda, |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
From 6c431239da3e4480651480f91b3438d7ad1903e5 Mon Sep 17 00:00:00 2001 | ||
From: Martin Kroeker <martin@ruby.chemie.uni-freiburg.de> | ||
Date: Wed, 29 Mar 2023 22:14:21 +0200 | ||
Subject: [PATCH] Split test condition in LU computation - non-denormal for | ||
computation, exact zero for reporting singularity | ||
|
||
--- | ||
lapack/getf2/getf2_k.c | 23 ++++++++++++-------- | ||
lapack/getf2/zgetf2_k.c | 48 ++++++++++++++++++++++------------------- | ||
2 files changed, 40 insertions(+), 31 deletions(-) | ||
|
||
diff --git a/lapack/getf2/getf2_k.c b/lapack/getf2/getf2_k.c | ||
index d29ed588e9..80c66dd7a6 100644 | ||
--- a/lapack/getf2/getf2_k.c | ||
+++ b/lapack/getf2/getf2_k.c | ||
@@ -100,16 +100,21 @@ blasint CNAME(blas_arg_t *args, BLASLONG *range_m, BLASLONG *range_n, FLOAT *sa, | ||
jp--; | ||
temp1 = *(b + jp); | ||
|
||
- //if (temp1 != ZERO) { | ||
+ if (temp1 != ZERO) { | ||
+#if defined(DOUBLE) | ||
if (fabs(temp1) >= DBL_MIN ) { | ||
- temp1 = dp1 / temp1; | ||
- | ||
- if (jp != j) { | ||
- SWAP_K(j + 1, 0, 0, ZERO, a + j, lda, a + jp, lda, NULL, 0); | ||
- } | ||
- if (j + 1 < m) { | ||
- SCAL_K(m - j - 1, 0, 0, temp1, b + j + 1, 1, NULL, 0, NULL, 0); | ||
- } | ||
+#else | ||
+ if (fabs(temp1) >= FLT_MIN ) { | ||
+#endif | ||
+ temp1 = dp1 / temp1; | ||
+ | ||
+ if (jp != j) { | ||
+ SWAP_K(j + 1, 0, 0, ZERO, a + j, lda, a + jp, lda, NULL, 0); | ||
+ } | ||
+ if (j + 1 < m) { | ||
+ SCAL_K(m - j - 1, 0, 0, temp1, b + j + 1, 1, NULL, 0, NULL, 0); | ||
+ } | ||
+ } | ||
} else { | ||
if (!info) info = j + 1; | ||
} | ||
diff --git a/lapack/getf2/zgetf2_k.c b/lapack/getf2/zgetf2_k.c | ||
index dbc78abc60..e3d53c96f2 100644 | ||
--- a/lapack/getf2/zgetf2_k.c | ||
+++ b/lapack/getf2/zgetf2_k.c | ||
@@ -106,30 +106,34 @@ blasint CNAME(blas_arg_t *args, BLASLONG *range_m, BLASLONG *range_n, FLOAT *sa, | ||
temp1 = *(b + jp * 2 + 0); | ||
temp2 = *(b + jp * 2 + 1); | ||
|
||
- // if ((temp1 != ZERO) || (temp2 != ZERO)) { | ||
+ if ((temp1 != ZERO) || (temp2 != ZERO)) { | ||
+#if defined(DOUBLE) | ||
if ((fabs(temp1) >= DBL_MIN) || (fabs(temp2) >= DBL_MIN)) { | ||
- | ||
- if (jp != j) { | ||
- SWAP_K(j + 1, 0, 0, ZERO, ZERO, a + j * 2, lda, | ||
+#else | ||
+ if ((fabs(temp1) >= FLT_MIN) || (fabs(temp2) >= FLT_MIN)) { | ||
+#endif | ||
+ if (jp != j) { | ||
+ SWAP_K(j + 1, 0, 0, ZERO, ZERO, a + j * 2, lda, | ||
a + jp * 2, lda, NULL, 0); | ||
- } | ||
- | ||
- if (fabs(temp1) >= fabs(temp2)){ | ||
- ratio = temp2 / temp1; | ||
- den = dp1 /(temp1 * ( 1 + ratio * ratio)); | ||
- temp3 = den; | ||
- temp4 = -ratio * den; | ||
- } else { | ||
- ratio = temp1 / temp2; | ||
- den = dp1 /(temp2 * ( 1 + ratio * ratio)); | ||
- temp3 = ratio * den; | ||
- temp4 = -den; | ||
- } | ||
- | ||
- if (j + 1 < m) { | ||
- SCAL_K(m - j - 1, 0, 0, temp3, temp4, | ||
- b + (j + 1) * 2, 1, NULL, 0, NULL, 0); | ||
- } | ||
+ } | ||
+ | ||
+ if (fabs(temp1) >= fabs(temp2)){ | ||
+ ratio = temp2 / temp1; | ||
+ den = dp1 /(temp1 * ( 1 + ratio * ratio)); | ||
+ temp3 = den; | ||
+ temp4 = -ratio * den; | ||
+ } else { | ||
+ ratio = temp1 / temp2; | ||
+ den = dp1 /(temp2 * ( 1 + ratio * ratio)); | ||
+ temp3 = ratio * den; | ||
+ temp4 = -den; | ||
+ } | ||
+ | ||
+ if (j + 1 < m) { | ||
+ SCAL_K(m - j - 1, 0, 0, temp3, temp4, | ||
+ b + (j + 1) * 2, 1, NULL, 0, NULL, 0); | ||
+ } | ||
+ } | ||
} else { | ||
if (!info) info = j + 1; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
From 36fcb52094c4c99eec651a61311204c466b7f054 Mon Sep 17 00:00:00 2001 | ||
From: Martin Kroeker <martin@ruby.chemie.uni-freiburg.de> | ||
Date: Sat, 1 Apr 2023 00:02:54 +0200 | ||
Subject: [PATCH] Fix logic - we want real OR imaginary part of X to be nonzero | ||
here | ||
|
||
--- | ||
driver/level2/zspr_k.c | 4 ++-- | ||
1 file changed, 2 insertions(+), 2 deletions(-) | ||
|
||
diff --git a/driver/level2/zspr_k.c b/driver/level2/zspr_k.c | ||
index d888a81ee2..7f0eefd6b3 100644 | ||
--- a/driver/level2/zspr_k.c | ||
+++ b/driver/level2/zspr_k.c | ||
@@ -53,7 +53,7 @@ int CNAME(BLASLONG m, FLOAT alpha_r, FLOAT alpha_i, | ||
|
||
for (i = 0; i < m; i++){ | ||
#ifndef LOWER | ||
- if ((X[i * 2 + 0] != ZERO) && (X[i * 2 + 1] != ZERO)) { | ||
+ if ((X[i * 2 + 0] != ZERO) || (X[i * 2 + 1] != ZERO)) { | ||
AXPYU_K(i + 1, 0, 0, | ||
alpha_r * X[i * 2 + 0] - alpha_i * X[i * 2 + 1], | ||
alpha_i * X[i * 2 + 0] + alpha_r * X[i * 2 + 1], | ||
@@ -61,7 +61,7 @@ int CNAME(BLASLONG m, FLOAT alpha_r, FLOAT alpha_i, | ||
} | ||
a += (i + 1) * 2; | ||
#else | ||
- if ((X[i * 2 + 0] != ZERO) && (X[i * 2 + 1] != ZERO)) { | ||
+ if ((X[i * 2 + 0] != ZERO) || (X[i * 2 + 1] != ZERO)) { | ||
AXPYU_K(m - i, 0, 0, | ||
alpha_r * X[i * 2 + 0] - alpha_i * X[i * 2 + 1], | ||
alpha_i * X[i * 2 + 0] + alpha_r * X[i * 2 + 1], |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters