From 3c9654219f8fa0a91e85b97ac4a938b0f2c635f5 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sun, 26 Mar 2023 23:37:13 +0200 Subject: [PATCH 01/11] Update version to 0.3.22.dev --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 458a59490..c1fd83bc8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ project(OpenBLAS C ASM) set(OpenBLAS_MAJOR_VERSION 0) set(OpenBLAS_MINOR_VERSION 3) -set(OpenBLAS_PATCH_VERSION 22) +set(OpenBLAS_PATCH_VERSION 22.dev) set(OpenBLAS_VERSION "${OpenBLAS_MAJOR_VERSION}.${OpenBLAS_MINOR_VERSION}.${OpenBLAS_PATCH_VERSION}") From 1c2a60e6cfd31241e5ac0d6fabdc0a1540383870 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Mon, 27 Mar 2023 00:00:04 +0200 Subject: [PATCH 02/11] Update version to 0.3.22.dev --- Makefile.rule | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.rule b/Makefile.rule index 2859d9edc..835688c49 100644 --- a/Makefile.rule +++ b/Makefile.rule @@ -3,7 +3,7 @@ # # This library's version -VERSION = 0.3.22 +VERSION = 0.3.22.dev # If you set the suffix, the library name will be libopenblas_$(LIBNAMESUFFIX).a # and libopenblas_$(LIBNAMESUFFIX).so. Meanwhile, the soname in shared library From c05da5960d9d57e2ac9a8c02fe93b81e7207d394 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Mon, 27 Mar 2023 00:11:05 +0200 Subject: [PATCH 03/11] Update Changelog for 0.3.22 (#3964) --- Changelog.txt | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/Changelog.txt b/Changelog.txt index fbc10bb89..0def21731 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,4 +1,80 @@ OpenBLAS ChangeLog +==================================================================== +Version 0.3.22 + 26-Mar-2023 + +general: + - Updated the included LAPACK to Reference-LAPACK release 3.11.0 + plus post-release corrections and improvements + - Added initial support for processing with the EMSCRIPTEN javascript + converter (yielding a single-threaded build only) + - Added a threshold for multithreading in SYMM, SYMV and SYR2K + - Increased the threshold for multithreading in SYRK + - OpenBLAS no longer decreases the global OMP_NUM_THREADS when it + exceeds the maximum thread count the library was compiled for. + - fixed ?GETF2 potentially returning NaN with tiny matrix elements + - fixed openblas_set_num_threads to work in USE_OPENMP builds + - fixed cpu core counting in USE_OPENMP builds returning the number + of OMP "places" rather than cores + - fixed interpretation of USE_PERL=0 in build scripts + - fixed linking of the library with libm in CMAKE builds + - fixed startup delays resulting from a wrong default setting of + NO_WARMUP in CMAKE builds + - fixed inconsistent defaults for overriding of LAPACK SPMV, SPR, + SYMV, SYR functions in gmake and CMAKE builds + - fixed stride calculation in the optimized small-matrix path of + complex SYR + - fixed compilation of ReLAPACK with CMAKE + - fixed pkgconfig file contents for INTERFACE64 builds + - fixed building of Reference-LAPACK with recent gfortran + - fixed building with only a subset of precision types on Windows + - added new environment variable OPENBLAS_DEFAULT_NUM_THREADS + - added a GEMV-based implementation of GEMMT + - added support for building under QNX + - updated support for (cross-)building for ALPHA targets + +x86_64: + - added autodetection of Intel Raptor Lake cpu models + - added SSCAL microkernels for Haswell and newer targets + - improved the performance of the Haswell DSCAL microkernel + - added CSCAL and ZSCAL microkernels for SkylakeX targets + - fixed detection of gfortran and Cray CCE compilers + - fixed detection of recent versions of the Intel Fortran compiler + - fixed compilation with LLVM to no longer run out of AVX512 registers + - fix cpu type option setting with recent NVIDIA HPC compiler versions + - fixed compilation for/on AMD Ryzen 4 cpus + - fixed compilation of AVX2-capable targets with Apple Clang + - fixed runtime selection of COOPERLAKE in DYNAMIC_ARCH builds + - worked around gcc/llvm using risky FMA operations in CSCAL/ZSCAL + - worked around miscompilations of GEMV, SYMV and ZDOT kernels + by gcc12's tree-vectorizer on OSX and Windows + +ARM: + - fixed cross-compilation to ARMV5 and ARMV6 targets with CMAKE + +ARMV8: + - fixed cross-compilation to CortexA53 with CMAKE + - fixed compilation with CMAKE and "Arm Compiler for Linux 22.1" + - added cpu autodetection for Cortex X3 and A715 + - fixed conditional compilation of SVE-capable targets in DYNAMIC_ARCH + - sped up SVE kernels by removing unnecessary prefetches + - improved the GEMM performance of Neoverse V1 + - added SVE kernels for SDOT and DDOT + - added an SBGEMM kernel for Neoverse N2 + - improved cpu-specific compiler option selection for Neoverse cpus + - added support for setting CONSISTENT_FPCSR + +MIPS64: + - improved MSA capability detection and handling + - added a MIPS64_GENERIC build target + - fixed corner cases in DNRM2 + +LOONGARCH64: + - fixed handling of the INTERFACE64 option + +RISCV: + - fixed handling of the INTERFACE64 option + ==================================================================== Version 0.3.21 07-Aug-2022 From 280b6d57d1af8b92ae4160a7f43ab2a60620e6ae Mon Sep 17 00:00:00 2001 From: linouxis9 Date: Tue, 28 Mar 2023 00:55:23 +0200 Subject: [PATCH 04/11] Add more Intel Raptor Lake CPUIDs --- cpuid_x86.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cpuid_x86.c b/cpuid_x86.c index 4afa931f0..ad13a8c8c 100644 --- a/cpuid_x86.c +++ b/cpuid_x86.c @@ -1547,6 +1547,8 @@ int get_cpuname(void){ case 11: //family 6 exmodel 11 switch (model) { case 7: // Raptor Lake + case 10: + case 15: if(support_avx2()) return CPUTYPE_HASWELL; if(support_avx()) @@ -2348,6 +2350,8 @@ int get_coretype(void){ case 11: switch (model) { case 7: // Raptor Lake + case 10: + case 15: #ifndef NO_AVX2 if(support_avx2()) return CORE_HASWELL; From f2659516ef21b0b6fad4b392139deef1750ed619 Mon Sep 17 00:00:00 2001 From: "H. Vetinari" Date: Tue, 28 Mar 2023 18:51:30 +1100 Subject: [PATCH 05/11] remove unqualified ifdef's for NO_LAPACK(E) --- Makefile.install | 4 ++-- driver/level2/Makefile | 2 +- interface/Makefile | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Makefile.install b/Makefile.install index 87b5bc870..01899b970 100644 --- a/Makefile.install +++ b/Makefile.install @@ -77,7 +77,7 @@ endif endif ifneq ($(OSNAME), AIX) -ifndef NO_LAPACKE +ifneq ($(NO_LAPACKE), 1) @echo Copying LAPACKE header files to $(DESTDIR)$(OPENBLAS_INCLUDE_DIR) @-install -m644 $(NETLIB_LAPACK_DIR)/LAPACKE/include/lapack.h "$(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/lapack.h" @-install -m644 $(NETLIB_LAPACK_DIR)/LAPACKE/include/lapacke.h "$(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/lapacke.h" @@ -127,7 +127,7 @@ endif else #install on AIX has different options syntax -ifndef NO_LAPACKE +ifneq ($(NO_LAPACKE), 1) @echo Copying LAPACKE header files to $(DESTDIR)$(OPENBLAS_INCLUDE_DIR) @-installbsd -c -m 644 $(NETLIB_LAPACK_DIR)/LAPACKE/include/lapack.h "$(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/lapack.h" @-installbsd -c -m 644 $(NETLIB_LAPACK_DIR)/LAPACKE/include/lapacke.h "$(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/lapacke.h" diff --git a/driver/level2/Makefile b/driver/level2/Makefile index 9bef6e2a5..5f8c712a8 100644 --- a/driver/level2/Makefile +++ b/driver/level2/Makefile @@ -92,7 +92,7 @@ CBLASOBJS += \ ctrsv_RUU.$(SUFFIX) ctrsv_RUN.$(SUFFIX) ctrsv_RLU.$(SUFFIX) ctrsv_RLN.$(SUFFIX) \ ctrsv_CUU.$(SUFFIX) ctrsv_CUN.$(SUFFIX) ctrsv_CLU.$(SUFFIX) ctrsv_CLN.$(SUFFIX) -ifndef NO_LAPACK +ifneq ($(NO_LAPACK), 1) CBLASOBJS += \ cspmv_U.$(SUFFIX) cspmv_L.$(SUFFIX) \ cspr_U.$(SUFFIX) cspr_L.$(SUFFIX) \ diff --git a/interface/Makefile b/interface/Makefile index 3db4b2b6d..b6c581a97 100644 --- a/interface/Makefile +++ b/interface/Makefile @@ -1021,7 +1021,7 @@ dsymv.$(SUFFIX) dsymv.$(PSUFFIX) : symv.c qsymv.$(SUFFIX) qsymv.$(PSUFFIX) : symv.c $(CC) -c $(CFLAGS) $< -o $(@F) -ifndef NO_LAPACK +ifneq ($(NO_LAPACK), 1) csymv.$(SUFFIX) csymv.$(PSUFFIX) : zsymv.c $(CC) -c $(CFLAGS) $< -o $(@F) @@ -1041,7 +1041,7 @@ dsyr.$(SUFFIX) dsyr.$(PSUFFIX) : syr.c qsyr.$(SUFFIX) qsyr.$(PSUFFIX) : syr.c $(CC) -c $(CFLAGS) $< -o $(@F) -ifndef NO_LAPACK +ifneq ($(NO_LAPACK), 1) csyr.$(SUFFIX) csyr.$(PSUFFIX) : zsyr.c $(CC) -c $(CFLAGS) $< -o $(@F) @@ -1115,7 +1115,7 @@ dspmv.$(SUFFIX) dspmv.$(PSUFFIX) : spmv.c qspmv.$(SUFFIX) qspmv.$(PSUFFIX) : spmv.c $(CC) -c $(CFLAGS) $< -o $(@F) -ifndef NO_LAPACK +ifneq ($(NO_LAPACK), 1) cspmv.$(SUFFIX) cspmv.$(PSUFFIX) : zspmv.c $(CC) -c $(CFLAGS) $< -o $(@F) @@ -1135,7 +1135,7 @@ dspr.$(SUFFIX) dspr.$(PSUFFIX) : spr.c qspr.$(SUFFIX) qspr.$(PSUFFIX) : spr.c $(CC) -c $(CFLAGS) $< -o $(@F) -ifndef NO_LAPACK +ifneq ($(NO_LAPACK), 1) cspr.$(SUFFIX) cspr.$(PSUFFIX) : zspr.c $(CC) -c $(CFLAGS) $< -o $(@F) From dc15c18efc3309fe985603ae69385cb4ad01e2a3 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Tue, 28 Mar 2023 16:33:09 +0200 Subject: [PATCH 06/11] Fix build failures seen with the NO_LAPACK option - cspr/csymv/csyr belong on the LAPACK list --- interface/Makefile | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/interface/Makefile b/interface/Makefile index b6c581a97..873c6b883 100644 --- a/interface/Makefile +++ b/interface/Makefile @@ -92,9 +92,8 @@ CBLAS2OBJS = \ cgemv.$(SUFFIX) cgeru.$(SUFFIX) cgerc.$(SUFFIX) \ ctrsv.$(SUFFIX) ctrmv.$(SUFFIX) \ csyr2.$(SUFFIX) cgbmv.$(SUFFIX) \ - csbmv.$(SUFFIX) cspmv.$(SUFFIX) \ - cspr.$(SUFFIX) cspr2.$(SUFFIX) \ - csymv.$(SUFFIX) csyr.$(SUFFIX) \ + csbmv.$(SUFFIX) \ + cspr2.$(SUFFIX) \ ctbsv.$(SUFFIX) ctbmv.$(SUFFIX) \ ctpsv.$(SUFFIX) ctpmv.$(SUFFIX) \ chemv.$(SUFFIX) chbmv.$(SUFFIX) \ @@ -122,9 +121,8 @@ ZBLAS2OBJS = \ zgemv.$(SUFFIX) zgeru.$(SUFFIX) zgerc.$(SUFFIX) \ ztrsv.$(SUFFIX) ztrmv.$(SUFFIX) \ zsyr2.$(SUFFIX) zgbmv.$(SUFFIX) \ - zsbmv.$(SUFFIX) zspmv.$(SUFFIX) \ - zspr.$(SUFFIX) zspr2.$(SUFFIX) \ - zsymv.$(SUFFIX) zsyr.$(SUFFIX) \ + zsbmv.$(SUFFIX) \ + zspr2.$(SUFFIX) \ ztbsv.$(SUFFIX) ztbmv.$(SUFFIX) \ ztpsv.$(SUFFIX) ztpmv.$(SUFFIX) \ zhemv.$(SUFFIX) zhbmv.$(SUFFIX) \ From 912d713b5265863b422dd831167253c240b61f3c Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Tue, 28 Mar 2023 18:31:04 +0200 Subject: [PATCH 07/11] redo lost edit --- interface/Makefile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/interface/Makefile b/interface/Makefile index 873c6b883..2ac9663d6 100644 --- a/interface/Makefile +++ b/interface/Makefile @@ -445,7 +445,8 @@ QLAPACKOBJS = \ CLAPACKOBJS = \ cgetrf.$(SUFFIX) cgetrs.$(SUFFIX) cpotrf.$(SUFFIX) cgetf2.$(SUFFIX) \ cpotf2.$(SUFFIX) claswp.$(SUFFIX) cgesv.$(SUFFIX) clauu2.$(SUFFIX) \ - clauum.$(SUFFIX) ctrti2.$(SUFFIX) ctrtri.$(SUFFIX) ctrtrs.$(SUFFIX) + clauum.$(SUFFIX) ctrti2.$(SUFFIX) ctrtri.$(SUFFIX) ctrtrs.$(SUFFIX) \ + cspr.$(SUFFIX) cspmv.$(SUFFIX) csymv.$(SUFFIX) csyr.$(SUFFIX) #ZLAPACKOBJS = \ # zgetrf.$(SUFFIX) zgetrs.$(SUFFIX) zpotrf.$(SUFFIX) zgetf2.$(SUFFIX) \ @@ -456,8 +457,8 @@ CLAPACKOBJS = \ ZLAPACKOBJS = \ zgetrf.$(SUFFIX) zgetrs.$(SUFFIX) zpotrf.$(SUFFIX) zgetf2.$(SUFFIX) \ zpotf2.$(SUFFIX) zlaswp.$(SUFFIX) zgesv.$(SUFFIX) zlauu2.$(SUFFIX) \ - zlauum.$(SUFFIX) ztrti2.$(SUFFIX) ztrtri.$(SUFFIX) ztrtrs.$(SUFFIX) - + zlauum.$(SUFFIX) ztrti2.$(SUFFIX) ztrtri.$(SUFFIX) ztrtrs.$(SUFFIX) \ + zspr.$(SUFFIX) zspmv.$(SUFFIX) zsymv.$(SUFFIX) zsyr.$(SUFFIX) XLAPACKOBJS = \ xgetf2.$(SUFFIX) xgetrf.$(SUFFIX) xlauu2.$(SUFFIX) xlauum.$(SUFFIX) \ From 12aabb9f9ba57a74a3feedfafd97b7aeecbac450 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Wed, 29 Mar 2023 09:44:33 +0200 Subject: [PATCH 08/11] 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 f3412f52f..dbc78abc6 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, From 6c431239da3e4480651480f91b3438d7ad1903e5 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Wed, 29 Mar 2023 22:14:21 +0200 Subject: [PATCH 09/11] Split test condition in LU computation - non-denormal for computation, exact zero for reporting singularity --- lapack/getf2/getf2_k.c | 21 ++++++++++++-------- lapack/getf2/zgetf2_k.c | 44 ++++++++++++++++++++++------------------- 2 files changed, 37 insertions(+), 28 deletions(-) diff --git a/lapack/getf2/getf2_k.c b/lapack/getf2/getf2_k.c index d29ed588e..80c66dd7a 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; +#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); - } + 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 dbc78abc6..e3d53c96f 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 (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 (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; } From 36fcb52094c4c99eec651a61311204c466b7f054 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sat, 1 Apr 2023 00:02:54 +0200 Subject: [PATCH 10/11] 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 d888a81ee..7f0eefd6b 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], From 1f7048138489c4c5587aea5b905c386783b0b9d3 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sat, 1 Apr 2023 20:33:31 +0200 Subject: [PATCH 11/11] Update with 0.3.23 changes --- Changelog.txt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Changelog.txt b/Changelog.txt index 0def21731..aa445ae82 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,4 +1,21 @@ OpenBLAS ChangeLog +==================================================================== +Version 0.3.23 + 01-Apr-2023 + + general: + - fixed a serious regression in GETRF/GETF2 and ZGETRF/ZGETF2 where + subnormal but nonzero data elements triggered the singularity flag + - fixed a long-standing bug in CSPR/ZSPR in single-threaded operation + for cases where elements of the X vector are real numbers (or + complex with only the real part zero) + - fixed gmake builds with the option NO_LAPACK + - fixed a few instances in the gmake Makefiles where expressly + setting NO_LAPACK=0 or NO_LAPACKE=0 would have the opposite effect + +x86_64: + - added further CPUID values for Intel Raptor Lake + ==================================================================== Version 0.3.22 26-Mar-2023