Fix DGEMM on AVX-512 CPUs
authorDebian Science Team <debian-science-maintainers@lists.alioth.debian.org>
Fri, 14 Jan 2022 14:21:00 +0000 (14:21 +0000)
committerSébastien Villemot <sebastien@debian.org>
Fri, 14 Jan 2022 14:21:00 +0000 (14:21 +0000)
Origin: upstream, https://github.com/xianyi/OpenBLAS/pull/3510
Applied-Upstream: 0.3.20
Last-Update: 2022-01-14

Last-Update: 2022-01-14
Gbp-Pq: Name avx512-dgemm.patch

Makefile.prebuild
Makefile.system
param.h

index d6395da7b0b93afbb297b5254d97a8f5b82a125f..399db956fbae0f3134417fa7270bf73cd6609ac1 100644 (file)
@@ -3,6 +3,10 @@
 export BINARY
 export USE_OPENMP
 
+ifdef DYNAMIC_ARCH
+override HOST_CFLAGS += -DDYNAMIC_ARCH
+endif
+
 ifdef TARGET_CORE
 TARGET_MAKE = Makefile_kernel.conf
 TARGET_CONF = config_kernel.h
index 0fbd8af0ee3c6c5bbe6e40bcda34ac1b169a0831..ac91933c66cf6b8cc75b65a36e659e10e78b286c 100644 (file)
@@ -275,7 +275,7 @@ HAVE_GAS := $(shell $(AS) -v < /dev/null 2>&1 | grep GNU 2>&1 >/dev/null ; echo
 GETARCH_FLAGS += -DHAVE_GAS=$(HAVE_GAS)
 
 # Generating Makefile.conf and config.h
-DUMMY := $(shell $(MAKE) -C $(TOPDIR) -f Makefile.prebuild CC="$(CC)" FC="$(FC)" HOSTCC="$(HOSTCC)" HOST_CFLAGS="$(GETARCH_FLAGS)" CFLAGS="$(CFLAGS)" BINARY=$(BINARY) USE_OPENMP=$(USE_OPENMP) TARGET_CORE=$(TARGET_CORE) ONLY_CBLAS=$(ONLY_CBLAS) TARGET=$(TARGET) all)
+DUMMY := $(shell $(MAKE) -C $(TOPDIR) -f Makefile.prebuild CC="$(CC)" FC="$(FC)" HOSTCC="$(HOSTCC)" HOST_CFLAGS="$(GETARCH_FLAGS)" CFLAGS="$(CFLAGS)" BINARY=$(BINARY) USE_OPENMP=$(USE_OPENMP) DYNAMIC_ARCH=$(DYNAMIC_ARCH) TARGET_CORE=$(TARGET_CORE) ONLY_CBLAS=$(ONLY_CBLAS) TARGET=$(TARGET) all)
 
 ifndef TARGET_CORE
 include $(TOPDIR)/Makefile.conf
diff --git a/param.h b/param.h
index 8dd2a7461723de10fe01f871bea7142678e28785..72a3e162352e2ac0a352415f903297a912156bd5 100644 (file)
--- a/param.h
+++ b/param.h
@@ -1669,10 +1669,10 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #else
 
 #define SGEMM_DEFAULT_UNROLL_M 16
-#ifndef DYNAMIC_ARCH
-#define DGEMM_DEFAULT_UNROLL_M 16
-#else
+#ifdef DYNAMIC_ARCH
 #define DGEMM_DEFAULT_UNROLL_M 4
+#else
+#define DGEMM_DEFAULT_UNROLL_M 16
 #endif
 #define QGEMM_DEFAULT_UNROLL_M 2
 #define CGEMM_DEFAULT_UNROLL_M 8
@@ -1680,10 +1680,10 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #define XGEMM_DEFAULT_UNROLL_M 1
 
 #define SGEMM_DEFAULT_UNROLL_N 4
-#ifndef DYNAMIC_ARCH
-#define DGEMM_DEFAULT_UNROLL_N 2
-#else
+#ifdef DYNAMIC_ARCH
 #define DGEMM_DEFAULT_UNROLL_N 8
+#else
+#define DGEMM_DEFAULT_UNROLL_N 2
 #endif
 #define QGEMM_DEFAULT_UNROLL_N 2
 #define CGEMM_DEFAULT_UNROLL_N 2
@@ -1718,17 +1718,29 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #else
 
 #define SGEMM_DEFAULT_P 448
+#ifndef DYNAMIC_ARCH
 #define DGEMM_DEFAULT_P 192
+#else
+#define DGEMM_DEFAULT_P 384
+#endif
 #define CGEMM_DEFAULT_P 384
 #define ZGEMM_DEFAULT_P 256
 
 #define SGEMM_DEFAULT_Q 448
+#ifndef DYNAMIC_ARCH
 #define DGEMM_DEFAULT_Q 384
+#else
+#define DGEMM_DEFAULT_Q 168
+#endif
 #define CGEMM_DEFAULT_Q 192
 #define ZGEMM_DEFAULT_Q 128
 
 #define SGEMM_DEFAULT_R sgemm_r
+#ifndef DYNAMIC_ARCH
 #define DGEMM_DEFAULT_R 8640
+#else
+#define DGEMM_DEFAULT_R 13824
+#endif
 #define CGEMM_DEFAULT_R cgemm_r
 #define ZGEMM_DEFAULT_R zgemm_r